diff --git a/boxes.py.AllEdges.inx b/boxes.py.AllEdges.inx new file mode 100644 index 0000000..9662368 --- /dev/null +++ b/boxes.py.AllEdges.inx @@ -0,0 +1,102 @@ + + + <_name>AllEdges + boxes.exe + info.festi.boxes.py.AllEdges + + alledges + + + + 100 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 5 + 0.1 + 3.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.AngledBox.inx b/boxes.py.AngledBox.inx new file mode 100644 index 0000000..80b2bf2 --- /dev/null +++ b/boxes.py.AngledBox.inx @@ -0,0 +1,58 @@ + + + <_name>AngledBox + boxes.exe + info.festi.boxes.py.AngledBox + + angledbox + + + + 100.0 + 100.0 + 100.0 + True + 5 + + none + angled hole + angled lid + angled lid2 + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.AngledCutJig.inx b/boxes.py.AngledCutJig.inx new file mode 100644 index 0000000..bf3bd1a --- /dev/null +++ b/boxes.py.AngledCutJig.inx @@ -0,0 +1,50 @@ + + + <_name>AngledCutJig + boxes.exe + info.festi.boxes.py.AngledCutJig + + angledcutjig + + + + 50 + 100 + 45.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Arcade.inx b/boxes.py.Arcade.inx new file mode 100644 index 0000000..0927204 --- /dev/null +++ b/boxes.py.Arcade.inx @@ -0,0 +1,50 @@ + + + <_name>Arcade + boxes.exe + info.festi.boxes.py.Arcade + + arcade + + + + 450.0 + 350.0 + 150.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.BayonetBox.inx b/boxes.py.BayonetBox.inx new file mode 100644 index 0000000..dd3f2f2 --- /dev/null +++ b/boxes.py.BayonetBox.inx @@ -0,0 +1,36 @@ + + + <_name>BayonetBox + boxes.exe + info.festi.boxes.py.BayonetBox + + bayonetbox + + + + 50.0 + 10 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.BinTray.inx b/boxes.py.BinTray.inx new file mode 100644 index 0000000..aaee41b --- /dev/null +++ b/boxes.py.BinTray.inx @@ -0,0 +1,52 @@ + + + <_name>BinTray + boxes.exe + info.festi.boxes.py.BinTray + + bintray + + + + 50*3 + 50*3 + 100.0 + True + 0.4 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.BurnTest.inx b/boxes.py.BurnTest.inx new file mode 100644 index 0000000..5ba6d7f --- /dev/null +++ b/boxes.py.BurnTest.inx @@ -0,0 +1,50 @@ + + + <_name>BurnTest + boxes.exe + info.festi.boxes.py.BurnTest + + burntest + + + + 100 + 0.01 + 2 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.CardBox.inx b/boxes.py.CardBox.inx new file mode 100644 index 0000000..cd86d90 --- /dev/null +++ b/boxes.py.CardBox.inx @@ -0,0 +1,51 @@ + + + <_name>CardBox + boxes.exe + info.festi.boxes.py.CardBox + + cardbox + + + + 30 + 65 + 90 + 2 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Castle.inx b/boxes.py.Castle.inx new file mode 100644 index 0000000..e571f2f --- /dev/null +++ b/boxes.py.Castle.inx @@ -0,0 +1,47 @@ + + + <_name>Castle + boxes.exe + info.festi.boxes.py.Castle + + castle + + + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.ClosedBox.inx b/boxes.py.ClosedBox.inx new file mode 100644 index 0000000..b3740f0 --- /dev/null +++ b/boxes.py.ClosedBox.inx @@ -0,0 +1,51 @@ + + + <_name>ClosedBox + boxes.exe + info.festi.boxes.py.ClosedBox + + closedbox + + + + 100.0 + 100.0 + 100.0 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.ConcaveKnob.inx b/boxes.py.ConcaveKnob.inx new file mode 100644 index 0000000..823172c --- /dev/null +++ b/boxes.py.ConcaveKnob.inx @@ -0,0 +1,40 @@ + + + <_name>ConcaveKnob + boxes.exe + info.festi.boxes.py.ConcaveKnob + + concaveknob + + + + 50.0 + 3 + 0.2 + 70.0 + 6.0 + 1.0 + 10.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.DiscRack.inx b/boxes.py.DiscRack.inx new file mode 100644 index 0000000..72fca50 --- /dev/null +++ b/boxes.py.DiscRack.inx @@ -0,0 +1,54 @@ + + + <_name>DiscRack + boxes.exe + info.festi.boxes.py.DiscRack + + discrack + + + + 20*10 + 150.0 + 5.0 + 0.75 + 0.75 + 3.0 + 18 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Display.inx b/boxes.py.Display.inx new file mode 100644 index 0000000..96b6f8f --- /dev/null +++ b/boxes.py.Display.inx @@ -0,0 +1,37 @@ + + + <_name>Display + boxes.exe + info.festi.boxes.py.Display + + display + + + + 150.0 + 200.0 + 5.0 + 0.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.DisplayCase.inx b/boxes.py.DisplayCase.inx new file mode 100644 index 0000000..1dd16f5 --- /dev/null +++ b/boxes.py.DisplayCase.inx @@ -0,0 +1,52 @@ + + + <_name>DisplayCase + boxes.exe + info.festi.boxes.py.DisplayCase + + displaycase + + + + 100.0 + 100.0 + 100.0 + True + 2 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.DisplayShelf.inx b/boxes.py.DisplayShelf.inx new file mode 100644 index 0000000..b66c35a --- /dev/null +++ b/boxes.py.DisplayShelf.inx @@ -0,0 +1,54 @@ + + + <_name>DisplayShelf + boxes.exe + info.festi.boxes.py.DisplayShelf + + displayshelf + + + + 400 + 100 + 300 + True + 3 + 20.0 + 30.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.DividerTray.inx b/boxes.py.DividerTray.inx new file mode 100644 index 0000000..1f7d3ac --- /dev/null +++ b/boxes.py.DividerTray.inx @@ -0,0 +1,47 @@ + + + <_name>DividerTray + boxes.exe + info.festi.boxes.py.DividerTray + + dividertray + + + + 50*3 + 50*3 + 100.0 + True + 20 + 0 + 2 + 0.2 + 0 + 1 + 8 + 15 + True + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.DrillBox.inx b/boxes.py.DrillBox.inx new file mode 100644 index 0000000..ab73f14 --- /dev/null +++ b/boxes.py.DrillBox.inx @@ -0,0 +1,47 @@ + + + <_name>DrillBox + boxes.exe + info.festi.boxes.py.DrillBox + + drillbox + + + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.ElectronicsBox.inx b/boxes.py.ElectronicsBox.inx new file mode 100644 index 0000000..ab6c0c6 --- /dev/null +++ b/boxes.py.ElectronicsBox.inx @@ -0,0 +1,57 @@ + + + <_name>ElectronicsBox + boxes.exe + info.festi.boxes.py.ElectronicsBox + + electronicsbox + + + + 100.0 + 100.0 + 100.0 + True + 25.0 + 2.0 + 3.0 + 3.0 + True + 7.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexBox.inx b/boxes.py.FlexBox.inx new file mode 100644 index 0000000..0cc2ebe --- /dev/null +++ b/boxes.py.FlexBox.inx @@ -0,0 +1,60 @@ + + + <_name>FlexBox + boxes.exe + info.festi.boxes.py.FlexBox + + flexbox + + + + 100.0 + 100.0 + 100.0 + True + 15 + 8 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexBox2.inx b/boxes.py.FlexBox2.inx new file mode 100644 index 0000000..873123b --- /dev/null +++ b/boxes.py.FlexBox2.inx @@ -0,0 +1,60 @@ + + + <_name>FlexBox2 + boxes.exe + info.festi.boxes.py.FlexBox2 + + flexbox2 + + + + 100.0 + 100.0 + 100.0 + True + 15 + 8 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexBox3.inx b/boxes.py.FlexBox3.inx new file mode 100644 index 0000000..1dceb5e --- /dev/null +++ b/boxes.py.FlexBox3.inx @@ -0,0 +1,61 @@ + + + <_name>FlexBox3 + boxes.exe + info.festi.boxes.py.FlexBox3 + + flexbox3 + + + + 100.0 + 100.0 + True + 100.0 + 10.0 + 10.0 + 1.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexBox4.inx b/boxes.py.FlexBox4.inx new file mode 100644 index 0000000..ffaa477 --- /dev/null +++ b/boxes.py.FlexBox4.inx @@ -0,0 +1,60 @@ + + + <_name>FlexBox4 + boxes.exe + info.festi.boxes.py.FlexBox4 + + flexbox4 + + + + 100.0 + 100.0 + 100.0 + True + 15 + 8 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexBox5.inx b/boxes.py.FlexBox5.inx new file mode 100644 index 0000000..611a36d --- /dev/null +++ b/boxes.py.FlexBox5.inx @@ -0,0 +1,60 @@ + + + <_name>FlexBox5 + boxes.exe + info.festi.boxes.py.FlexBox5 + + flexbox5 + + + + 100.0 + 100.0 + True + 60 + 60 + 8 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexTest.inx b/boxes.py.FlexTest.inx new file mode 100644 index 0000000..88453f3 --- /dev/null +++ b/boxes.py.FlexTest.inx @@ -0,0 +1,42 @@ + + + <_name>FlexTest + boxes.exe + info.festi.boxes.py.FlexTest + + flextest + + + + 100.0 + 100.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.FlexTest2.inx b/boxes.py.FlexTest2.inx new file mode 100644 index 0000000..bc28e5a --- /dev/null +++ b/boxes.py.FlexTest2.inx @@ -0,0 +1,36 @@ + + + <_name>FlexTest2 + boxes.exe + info.festi.boxes.py.FlexTest2 + + flextest2 + + + + 100.0 + 100.0 + 1 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.Folder.inx b/boxes.py.Folder.inx new file mode 100644 index 0000000..c506f28 --- /dev/null +++ b/boxes.py.Folder.inx @@ -0,0 +1,51 @@ + + + <_name>Folder + boxes.exe + info.festi.boxes.py.Folder + + folder + + + + 100.0 + 100.0 + 20 + 10.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.GearBox.inx b/boxes.py.GearBox.inx new file mode 100644 index 0000000..2cbf8c9 --- /dev/null +++ b/boxes.py.GearBox.inx @@ -0,0 +1,52 @@ + + + <_name>GearBox + boxes.exe + info.festi.boxes.py.GearBox + + gearbox + + + + 8 + 20 + 3 + 6.0 + 4 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Gears.inx b/boxes.py.Gears.inx new file mode 100644 index 0000000..32a435a --- /dev/null +++ b/boxes.py.Gears.inx @@ -0,0 +1,42 @@ + + + <_name>Gears + boxes.exe + info.festi.boxes.py.Gears + + gears + + + + 12 + 6.0 + 75 + 32 + 0.0 + 0 + 5 + 20 + 20 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.HeartBox.inx b/boxes.py.HeartBox.inx new file mode 100644 index 0000000..74c6a15 --- /dev/null +++ b/boxes.py.HeartBox.inx @@ -0,0 +1,61 @@ + + + <_name>HeartBox + boxes.exe + info.festi.boxes.py.HeartBox + + heartbox + + + + 150 + 50 + + closed + hole + lid + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 1.0 + 0.0 + 1.0 + 1.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.HingeBox.inx b/boxes.py.HingeBox.inx new file mode 100644 index 0000000..ccc0942 --- /dev/null +++ b/boxes.py.HingeBox.inx @@ -0,0 +1,66 @@ + + + <_name>HingeBox + boxes.exe + info.festi.boxes.py.HingeBox + + hingebox + + + + 100.0 + 100.0 + 100.0 + True + 20.0 + 0.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Hook.inx b/boxes.py.Hook.inx new file mode 100644 index 0000000..af5312e --- /dev/null +++ b/boxes.py.Hook.inx @@ -0,0 +1,52 @@ + + + <_name>Hook + boxes.exe + info.festi.boxes.py.Hook + + hook + + + + 40.0 + 40.0 + 40.0 + 20.0 + 45.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.IntegratedHingeBox.inx b/boxes.py.IntegratedHingeBox.inx new file mode 100644 index 0000000..c44f066 --- /dev/null +++ b/boxes.py.IntegratedHingeBox.inx @@ -0,0 +1,58 @@ + + + <_name>IntegratedHingeBox + boxes.exe + info.festi.boxes.py.IntegratedHingeBox + + integratedhingebox + + + + 100.0 + 100.0 + 100.0 + True + 20.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.0 + 2.0 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.LBeam.inx b/boxes.py.LBeam.inx new file mode 100644 index 0000000..c79a622 --- /dev/null +++ b/boxes.py.LBeam.inx @@ -0,0 +1,51 @@ + + + <_name>LBeam + boxes.exe + info.festi.boxes.py.LBeam + + lbeam + + + + 100.0 + 100.0 + 100.0 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.LaserClamp.inx b/boxes.py.LaserClamp.inx new file mode 100644 index 0000000..358d433 --- /dev/null +++ b/boxes.py.LaserClamp.inx @@ -0,0 +1,50 @@ + + + <_name>LaserClamp + boxes.exe + info.festi.boxes.py.LaserClamp + + laserclamp + + + + 25.0 + 50.0 + 0.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.LaserHoldfast.inx b/boxes.py.LaserHoldfast.inx new file mode 100644 index 0000000..bce46b2 --- /dev/null +++ b/boxes.py.LaserHoldfast.inx @@ -0,0 +1,37 @@ + + + <_name>LaserHoldfast + boxes.exe + info.festi.boxes.py.LaserHoldfast + + laserholdfast + + + + 25 + 40 + 5.0 + 5.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.MagazinFile.inx b/boxes.py.MagazinFile.inx new file mode 100644 index 0000000..10d9512 --- /dev/null +++ b/boxes.py.MagazinFile.inx @@ -0,0 +1,52 @@ + + + <_name>MagazinFile + boxes.exe + info.festi.boxes.py.MagazinFile + + magazinfile + + + + 100.0 + 100.0 + 100.0 + 0.0 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.MakitaPowerSupply.inx b/boxes.py.MakitaPowerSupply.inx new file mode 100644 index 0000000..f31e3a3 --- /dev/null +++ b/boxes.py.MakitaPowerSupply.inx @@ -0,0 +1,47 @@ + + + <_name>MakitaPowerSupply + boxes.exe + info.festi.boxes.py.MakitaPowerSupply + + makitapowersupply + + + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.NemaMount.inx b/boxes.py.NemaMount.inx new file mode 100644 index 0000000..a03e716 --- /dev/null +++ b/boxes.py.NemaMount.inx @@ -0,0 +1,58 @@ + + + <_name>NemaMount + boxes.exe + info.festi.boxes.py.NemaMount + + nemamount + + + + + 8 + 11 + 14 + 16 + 17 + 23 + 24 + 34 + 42 + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.NotesHolder.inx b/boxes.py.NotesHolder.inx new file mode 100644 index 0000000..eae6061 --- /dev/null +++ b/boxes.py.NotesHolder.inx @@ -0,0 +1,64 @@ + + + <_name>NotesHolder + boxes.exe + info.festi.boxes.py.NotesHolder + + notesholder + + + + 78 + 78 + 35 + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + 40 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + all + + + + + + + + diff --git a/boxes.py.OpenBox.inx b/boxes.py.OpenBox.inx new file mode 100644 index 0000000..346bfad --- /dev/null +++ b/boxes.py.OpenBox.inx @@ -0,0 +1,51 @@ + + + <_name>OpenBox + boxes.exe + info.festi.boxes.py.OpenBox + + openbox + + + + 100.0 + 100.0 + 100.0 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.OrganPipe.inx b/boxes.py.OrganPipe.inx new file mode 100644 index 0000000..e40b4fc --- /dev/null +++ b/boxes.py.OrganPipe.inx @@ -0,0 +1,74 @@ + + + <_name>OrganPipe + boxes.exe + info.festi.boxes.py.OrganPipe + + organpipe + + + + + c + c# + d + d# + e + f + f# + g + g# + a + a# + b + + 2 + 2.0 + 0.25 + 0.3 + 0 + 588.4 + + Pa + mBar + mmHg + mmH2O + + False + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.0 + 1.0 + 3.0 + 0.0 + 3.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.OttoBody.inx b/boxes.py.OttoBody.inx new file mode 100644 index 0000000..4a81483 --- /dev/null +++ b/boxes.py.OttoBody.inx @@ -0,0 +1,53 @@ + + + <_name>OttoBody + boxes.exe + info.festi.boxes.py.OttoBody + + ottobody + + + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.0 + 2.0 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.OttoLegs.inx b/boxes.py.OttoLegs.inx new file mode 100644 index 0000000..786cf13 --- /dev/null +++ b/boxes.py.OttoLegs.inx @@ -0,0 +1,50 @@ + + + <_name>OttoLegs + boxes.exe + info.festi.boxes.py.OttoLegs + + ottolegs + + + + 3.0 + 2.6 + 34.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.0 + 1.0 + 1.0 + 0.0 + 1.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.OttoSoles.inx b/boxes.py.OttoSoles.inx new file mode 100644 index 0000000..8e620cc --- /dev/null +++ b/boxes.py.OttoSoles.inx @@ -0,0 +1,38 @@ + + + <_name>OttoSoles + boxes.exe + info.festi.boxes.py.OttoSoles + + ottosoles + + + + 56.0 + 36.0 + 4.0 + 5.0 + 2 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.PaintStorage.inx b/boxes.py.PaintStorage.inx new file mode 100644 index 0000000..dc6fff9 --- /dev/null +++ b/boxes.py.PaintStorage.inx @@ -0,0 +1,60 @@ + + + <_name>PaintStorage + boxes.exe + info.festi.boxes.py.PaintStorage + + paintstorage + + + + 100 + 300 + 50 + 30 + 10 + False + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Planetary.inx b/boxes.py.Planetary.inx new file mode 100644 index 0000000..af07815 --- /dev/null +++ b/boxes.py.Planetary.inx @@ -0,0 +1,39 @@ + + + <_name>Planetary + boxes.exe + info.festi.boxes.py.Planetary + + planetary + + + + 8 + 20 + 0 + 0 + 3 + 6.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.Planetary2.inx b/boxes.py.Planetary2.inx new file mode 100644 index 0000000..6ba7f75 --- /dev/null +++ b/boxes.py.Planetary2.inx @@ -0,0 +1,69 @@ + + + <_name>Planetary2 + boxes.exe + info.festi.boxes.py.Planetary2 + + planetary2 + + + + + 8 + 11 + 14 + 16 + 17 + 23 + 24 + 34 + 42 + + + 40DP + AT5 + GT2_2mm + GT2_3mm + GT2_5mm + H + HTD_3mm + HTD_5mm + HTD_8mm + MXL + T10 + T2_5 + T5 + XL + + 20 + 20 + 0 + 1 + 3 + 6.0 + 2.4 + 4.0 + 3.1 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.PoleHook.inx b/boxes.py.PoleHook.inx new file mode 100644 index 0000000..73075d3 --- /dev/null +++ b/boxes.py.PoleHook.inx @@ -0,0 +1,52 @@ + + + <_name>PoleHook + boxes.exe + info.festi.boxes.py.PoleHook + + polehook + + + + 50.0 + 7.8 + 13.0 + 5.5 + 4.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Pulley.inx b/boxes.py.Pulley.inx new file mode 100644 index 0000000..686648f --- /dev/null +++ b/boxes.py.Pulley.inx @@ -0,0 +1,54 @@ + + + <_name>Pulley + boxes.exe + info.festi.boxes.py.Pulley + + pulley + + + + 6.0 + + 40DP + AT5 + GT2_2mm + GT2_3mm + GT2_5mm + H + HTD_3mm + HTD_5mm + HTD_8mm + MXL + T10 + T2_5 + T5 + XL + + 20 + 5 + False + 0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.Rack10Box.inx b/boxes.py.Rack10Box.inx new file mode 100644 index 0000000..05e21a6 --- /dev/null +++ b/boxes.py.Rack10Box.inx @@ -0,0 +1,69 @@ + + + <_name>Rack10Box + boxes.exe + info.festi.boxes.py.Rack10Box + + rack10box + + + + 100.0 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + + 25.0 + 2.0 + 3.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Rack19Box.inx b/boxes.py.Rack19Box.inx new file mode 100644 index 0000000..9b9ebe3 --- /dev/null +++ b/boxes.py.Rack19Box.inx @@ -0,0 +1,69 @@ + + + <_name>Rack19Box + boxes.exe + info.festi.boxes.py.Rack19Box + + rack19box + + + + 100.0 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + + 25.0 + 2.0 + 3.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Rack19HalfWidth.inx b/boxes.py.Rack19HalfWidth.inx new file mode 100644 index 0000000..908605f --- /dev/null +++ b/boxes.py.Rack19HalfWidth.inx @@ -0,0 +1,37 @@ + + + <_name>Rack19HalfWidth + boxes.exe + info.festi.boxes.py.Rack19HalfWidth + + rack19halfwidth + + + + 1 + xxmpwx + 20 + 124 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.RackBox.inx b/boxes.py.RackBox.inx new file mode 100644 index 0000000..40b14ce --- /dev/null +++ b/boxes.py.RackBox.inx @@ -0,0 +1,56 @@ + + + <_name>RackBox + boxes.exe + info.festi.boxes.py.RackBox + + rackbox + + + + 100.0 + 100.0 + 100.0 + True + 25.0 + 2.0 + 3.0 + 4.0 + 7.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.2 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.RectangularWall.inx b/boxes.py.RectangularWall.inx new file mode 100644 index 0000000..9f6bea8 --- /dev/null +++ b/boxes.py.RectangularWall.inx @@ -0,0 +1,286 @@ + + + <_name>RectangularWall + boxes.exe + info.festi.boxes.py.RectangularWall + + rectangularwall + + + + 100 + 100 + + c Abstract Edge Class + C Abstract Edge Class + d Edge (parallel slot wall Holes) + D Edge (parallel slot wall Holes) + e Straight Edge + E Straight Edge (outset by thickness) + f Finger Joint + F Finger Joint (opposing side) + g Corrugated edge useful as an gipping area + h Edge (parallel Finger Joint Holes) + i Straight edge with hinge eye + I Edge with hinge pin + j Straight edge with hinge eye (other end) + J Edge with hinge pin (other end) + k Straight edge with hinge eye (both ends) + K Edge with hinge pin (both ends) + l Edge for slide on lid (back) + L Edge for slide on lid (box back) + m Edge for slide on lid (left) + M Edge for slide on lid (box left) + n Edge for slide on lid (right) + M Edge for slide on lid (box left) + o Edge with chest hinge + O Edge with chest hinge (other end) + p Edge with chest hinge + P Edge with chest hinge (other end) + q Edge with pins for an chest hinge + Q Edge opposing a chest hinge + R Rack (and pinion) Edge + s Stackable (bottom, finger joint holes) + S Stackable (top) + u Edge with cabinet hinges + U Edge with cabinet hinges top side + v Edge with cabinet hinges for 90° lid + V Edge with cabinet hinges 90° lid + + + c Abstract Edge Class + C Abstract Edge Class + d Edge (parallel slot wall Holes) + D Edge (parallel slot wall Holes) + e Straight Edge + E Straight Edge (outset by thickness) + f Finger Joint + F Finger Joint (opposing side) + g Corrugated edge useful as an gipping area + h Edge (parallel Finger Joint Holes) + i Straight edge with hinge eye + I Edge with hinge pin + j Straight edge with hinge eye (other end) + J Edge with hinge pin (other end) + k Straight edge with hinge eye (both ends) + K Edge with hinge pin (both ends) + l Edge for slide on lid (back) + L Edge for slide on lid (box back) + m Edge for slide on lid (left) + M Edge for slide on lid (box left) + n Edge for slide on lid (right) + M Edge for slide on lid (box left) + o Edge with chest hinge + O Edge with chest hinge (other end) + p Edge with chest hinge + P Edge with chest hinge (other end) + q Edge with pins for an chest hinge + Q Edge opposing a chest hinge + R Rack (and pinion) Edge + s Stackable (bottom, finger joint holes) + S Stackable (top) + u Edge with cabinet hinges + U Edge with cabinet hinges top side + v Edge with cabinet hinges for 90° lid + V Edge with cabinet hinges 90° lid + + + c Abstract Edge Class + C Abstract Edge Class + d Edge (parallel slot wall Holes) + D Edge (parallel slot wall Holes) + e Straight Edge + E Straight Edge (outset by thickness) + f Finger Joint + F Finger Joint (opposing side) + g Corrugated edge useful as an gipping area + h Edge (parallel Finger Joint Holes) + i Straight edge with hinge eye + I Edge with hinge pin + j Straight edge with hinge eye (other end) + J Edge with hinge pin (other end) + k Straight edge with hinge eye (both ends) + K Edge with hinge pin (both ends) + l Edge for slide on lid (back) + L Edge for slide on lid (box back) + m Edge for slide on lid (left) + M Edge for slide on lid (box left) + n Edge for slide on lid (right) + M Edge for slide on lid (box left) + o Edge with chest hinge + O Edge with chest hinge (other end) + p Edge with chest hinge + P Edge with chest hinge (other end) + q Edge with pins for an chest hinge + Q Edge opposing a chest hinge + R Rack (and pinion) Edge + s Stackable (bottom, finger joint holes) + S Stackable (top) + u Edge with cabinet hinges + U Edge with cabinet hinges top side + v Edge with cabinet hinges for 90° lid + V Edge with cabinet hinges 90° lid + + + c Abstract Edge Class + C Abstract Edge Class + d Edge (parallel slot wall Holes) + D Edge (parallel slot wall Holes) + e Straight Edge + E Straight Edge (outset by thickness) + f Finger Joint + F Finger Joint (opposing side) + g Corrugated edge useful as an gipping area + h Edge (parallel Finger Joint Holes) + i Straight edge with hinge eye + I Edge with hinge pin + j Straight edge with hinge eye (other end) + J Edge with hinge pin (other end) + k Straight edge with hinge eye (both ends) + K Edge with hinge pin (both ends) + l Edge for slide on lid (back) + L Edge for slide on lid (box back) + m Edge for slide on lid (left) + M Edge for slide on lid (box left) + n Edge for slide on lid (right) + M Edge for slide on lid (box left) + o Edge with chest hinge + O Edge with chest hinge (other end) + p Edge with chest hinge + P Edge with chest hinge (other end) + q Edge with pins for an chest hinge + Q Edge opposing a chest hinge + R Rack (and pinion) Edge + s Stackable (bottom, finger joint holes) + S Stackable (top) + u Edge with cabinet hinges + U Edge with cabinet hinges top side + v Edge with cabinet hinges for 90° lid + V Edge with cabinet hinges 90° lid + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + 5 + 0.1 + 3.0 + + + + 50 + 1.5 + 0.2 + 3 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 20.0 + 0.0 + 3.0 + 20.0 + + + + True + + wave + bumps + + 0.3 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 1.0 + 2.0 + 0.1 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + all + + + + + + + + diff --git a/boxes.py.RegularBox.inx b/boxes.py.RegularBox.inx new file mode 100644 index 0000000..a413ad0 --- /dev/null +++ b/boxes.py.RegularBox.inx @@ -0,0 +1,59 @@ + + + <_name>RegularBox + boxes.exe + info.festi.boxes.py.RegularBox + + regularbox + + + + 100.0 + True + 50.0 + 5 + + none + hole + angled hole + angled lid + angled lid2 + round lid + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.RobotArm.inx b/boxes.py.RobotArm.inx new file mode 100644 index 0000000..b46778f --- /dev/null +++ b/boxes.py.RobotArm.inx @@ -0,0 +1,122 @@ + + + <_name>RobotArm + boxes.exe + info.festi.boxes.py.RobotArm + + robotarm + + + + + none + RobotArmMM + RobotArmMm + RobotArmUU + RobotArmUu + RobotArmMu + + + Servo9g + + + Servo9g + + 50.0 + + none + RobotArmMM + RobotArmMm + RobotArmUU + RobotArmUu + RobotArmMu + + + Servo9g + + + Servo9g + + 50.0 + + none + RobotArmMM + RobotArmMm + RobotArmUU + RobotArmUu + RobotArmMu + + + Servo9g + + + Servo9g + + 50.0 + + none + RobotArmMM + RobotArmMm + RobotArmUU + RobotArmUu + RobotArmMu + + + Servo9g + + + Servo9g + + 50.0 + + none + RobotArmMM + RobotArmMm + RobotArmUU + RobotArmUu + RobotArmMu + + + Servo9g + + + Servo9g + + 50.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Rotary.inx b/boxes.py.Rotary.inx new file mode 100644 index 0000000..ba490cd --- /dev/null +++ b/boxes.py.Rotary.inx @@ -0,0 +1,53 @@ + + + <_name>Rotary + boxes.exe + info.festi.boxes.py.Rotary + + rotary + + + + 72.0 + 5.0 + 6.0 + 8.0 + 32.0 + 7.1 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.RoundedBox.inx b/boxes.py.RoundedBox.inx new file mode 100644 index 0000000..7666a19 --- /dev/null +++ b/boxes.py.RoundedBox.inx @@ -0,0 +1,63 @@ + + + <_name>RoundedBox + boxes.exe + info.festi.boxes.py.RoundedBox + + roundedbox + + + + 100.0 + 100.0 + 100.0 + True + 15 + + 1 + 2 + 3 + 4 + + + closed + hole + lid + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.RoyalGame.inx b/boxes.py.RoyalGame.inx new file mode 100644 index 0000000..f59eb7c --- /dev/null +++ b/boxes.py.RoyalGame.inx @@ -0,0 +1,48 @@ + + + <_name>RoyalGame + boxes.exe + info.festi.boxes.py.RoyalGame + + royalgame + + + + 200 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SBCMicroRack.inx b/boxes.py.SBCMicroRack.inx new file mode 100644 index 0000000..8e5f2a3 --- /dev/null +++ b/boxes.py.SBCMicroRack.inx @@ -0,0 +1,68 @@ + + + <_name>SBCMicroRack + boxes.exe + info.festi.boxes.py.SBCMicroRack + + sbcmicrorack + + + + 56 + 85 + 5 + 3 + 3 + 28 + 3.5 + 58 + 49 + 2.75 + 18 + 53 + False + False + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + all + + + + + + + + diff --git a/boxes.py.ShutterBox.inx b/boxes.py.ShutterBox.inx new file mode 100644 index 0000000..0cf088d --- /dev/null +++ b/boxes.py.ShutterBox.inx @@ -0,0 +1,62 @@ + + + <_name>ShutterBox + boxes.exe + info.festi.boxes.py.ShutterBox + + shutterbox + + + + 150 + 100 + 100 + 40.0 + + single + double + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 1.05 + 2.0 + 0.75 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Silverware.inx b/boxes.py.Silverware.inx new file mode 100644 index 0000000..d3fb04f --- /dev/null +++ b/boxes.py.Silverware.inx @@ -0,0 +1,39 @@ + + + <_name>Silverware + boxes.exe + info.festi.boxes.py.Silverware + + silverware + + + + 250 + 154 + 120 + 30 + 150 + 120 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallCaliper.inx b/boxes.py.SlatwallCaliper.inx new file mode 100644 index 0000000..b60670f --- /dev/null +++ b/boxes.py.SlatwallCaliper.inx @@ -0,0 +1,61 @@ + + + <_name>SlatwallCaliper + boxes.exe + info.festi.boxes.py.SlatwallCaliper + + slatwallcaliper + + + + 100 + 18.0 + 6.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallChiselHolder.inx b/boxes.py.SlatwallChiselHolder.inx new file mode 100644 index 0000000..d084f07 --- /dev/null +++ b/boxes.py.SlatwallChiselHolder.inx @@ -0,0 +1,69 @@ + + + <_name>SlatwallChiselHolder + boxes.exe + info.festi.boxes.py.SlatwallChiselHolder + + slatwallchiselholder + + + + 120 + 30.0 + 30.0 + 5.0 + 5.0 + 6 + + all + odds + everythird + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallConsole.inx b/boxes.py.SlatwallConsole.inx new file mode 100644 index 0000000..b308fbf --- /dev/null +++ b/boxes.py.SlatwallConsole.inx @@ -0,0 +1,63 @@ + + + <_name>SlatwallConsole + boxes.exe + info.festi.boxes.py.SlatwallConsole + + slatwallconsole + + + + 100 + 100 + True + 50 + 35 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallDrillBox.inx b/boxes.py.SlatwallDrillBox.inx new file mode 100644 index 0000000..1fa962a --- /dev/null +++ b/boxes.py.SlatwallDrillBox.inx @@ -0,0 +1,62 @@ + + + <_name>SlatwallDrillBox + boxes.exe + info.festi.boxes.py.SlatwallDrillBox + + slatwalldrillbox + + + + 25*6 + 10:20:30 + 25:40:60 + 15.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallEdges.inx b/boxes.py.SlatwallEdges.inx new file mode 100644 index 0000000..3093901 --- /dev/null +++ b/boxes.py.SlatwallEdges.inx @@ -0,0 +1,59 @@ + + + <_name>SlatwallEdges + boxes.exe + info.festi.boxes.py.SlatwallEdges + + slatwalledges + + + + 120 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallPlaneHolder.inx b/boxes.py.SlatwallPlaneHolder.inx new file mode 100644 index 0000000..6b2cfc8 --- /dev/null +++ b/boxes.py.SlatwallPlaneHolder.inx @@ -0,0 +1,62 @@ + + + <_name>SlatwallPlaneHolder + boxes.exe + info.festi.boxes.py.SlatwallPlaneHolder + + slatwallplaneholder + + + + 80 + 250 + 30 + 80 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallPliersHolder.inx b/boxes.py.SlatwallPliersHolder.inx new file mode 100644 index 0000000..1d9f847 --- /dev/null +++ b/boxes.py.SlatwallPliersHolder.inx @@ -0,0 +1,52 @@ + + + <_name>SlatwallPliersHolder + boxes.exe + info.festi.boxes.py.SlatwallPliersHolder + + slatwallpliersholder + + + + 100*3 + 50 + 50 + True + 45 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallSlottedHolder.inx b/boxes.py.SlatwallSlottedHolder.inx new file mode 100644 index 0000000..4832388 --- /dev/null +++ b/boxes.py.SlatwallSlottedHolder.inx @@ -0,0 +1,70 @@ + + + <_name>SlatwallSlottedHolder + boxes.exe + info.festi.boxes.py.SlatwallSlottedHolder + + slatwallslottedholder + + + + 120 + 50.0 + 50.0 + 5.0 + 35.0 + 5.0 + 6 + + all + odds + everythird + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallTypeTray.inx b/boxes.py.SlatwallTypeTray.inx new file mode 100644 index 0000000..bff7138 --- /dev/null +++ b/boxes.py.SlatwallTypeTray.inx @@ -0,0 +1,78 @@ + + + <_name>SlatwallTypeTray + boxes.exe + info.festi.boxes.py.SlatwallTypeTray + + slatwalltypetray + + + + 50*3 + 50*3 + 100.0 + 0.0 + True + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + 0.0 + 0.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.SlatwallWrenchHolder.inx b/boxes.py.SlatwallWrenchHolder.inx new file mode 100644 index 0000000..3a30dd2 --- /dev/null +++ b/boxes.py.SlatwallWrenchHolder.inx @@ -0,0 +1,66 @@ + + + <_name>SlatwallWrenchHolder + boxes.exe + info.festi.boxes.py.SlatwallWrenchHolder + + slatwallwrenchholder + + + + 100 + 30.0 + 11 + 8.0 + 25.0 + 3.0 + 5.0 + 0.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + hook + spring + stud + none + + 1.0 + 2.0 + + + + + all + + + + + + + + diff --git a/boxes.py.Stachel.inx b/boxes.py.Stachel.inx new file mode 100644 index 0000000..2edf0d4 --- /dev/null +++ b/boxes.py.Stachel.inx @@ -0,0 +1,36 @@ + + + <_name>Stachel + boxes.exe + info.festi.boxes.py.Stachel + + stachel + + + + 115.0 + 25.0 + 7.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.StorageRack.inx b/boxes.py.StorageRack.inx new file mode 100644 index 0000000..b68fd82 --- /dev/null +++ b/boxes.py.StorageRack.inx @@ -0,0 +1,70 @@ + + + <_name>StorageRack + boxes.exe + info.festi.boxes.py.StorageRack + + storagerack + + + + 200 + 30 + 100.0 + 50*3 + True + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + e Straight Edge + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + + all + + + + + + + + diff --git a/boxes.py.StorageShelf.inx b/boxes.py.StorageShelf.inx new file mode 100644 index 0000000..c509f97 --- /dev/null +++ b/boxes.py.StorageShelf.inx @@ -0,0 +1,140 @@ + + + <_name>StorageShelf + boxes.exe + info.festi.boxes.py.StorageShelf + + storageshelf + + + + 100.0 + 50*3 + 50*3 + True + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + + e Straight Edge + f Finger Joint + F Finger Joint (opposing side) + c Abstract Edge Class + E Straight Edge (outset by thickness) + S Stackable (top) + i Straight edge with hinge eye + k Straight edge with hinge eye (both ends) + v Edge with cabinet hinges for 90° lid + f Finger Joint + L Edge for slide on lid (box back) + t Triangle for handle + + 0.0 + False + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 5 + 0.1 + 3.0 + + + + 150.0 + 2.0 + 30.0 + 1 + + + + + all + + + + + + + + diff --git a/boxes.py.TrafficLight.inx b/boxes.py.TrafficLight.inx new file mode 100644 index 0000000..7f0c45b --- /dev/null +++ b/boxes.py.TrafficLight.inx @@ -0,0 +1,52 @@ + + + <_name>TrafficLight + boxes.exe + info.festi.boxes.py.TrafficLight + + trafficlight + + + + 100.0 + 100 + 50 + 3 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.TrayInsert.inx b/boxes.py.TrayInsert.inx new file mode 100644 index 0000000..97a6971 --- /dev/null +++ b/boxes.py.TrayInsert.inx @@ -0,0 +1,37 @@ + + + <_name>TrayInsert + boxes.exe + info.festi.boxes.py.TrayInsert + + trayinsert + + + + 50*3 + 50*3 + 100.0 + True + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.TwoPiece.inx b/boxes.py.TwoPiece.inx new file mode 100644 index 0000000..07c09f8 --- /dev/null +++ b/boxes.py.TwoPiece.inx @@ -0,0 +1,52 @@ + + + <_name>TwoPiece + boxes.exe + info.festi.boxes.py.TwoPiece + + twopiece + + + + 100.0 + 100.0 + 100.0 + True + 0.05 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.TypeTray.inx b/boxes.py.TypeTray.inx new file mode 100644 index 0000000..3a7847b --- /dev/null +++ b/boxes.py.TypeTray.inx @@ -0,0 +1,141 @@ + + + <_name>TypeTray + boxes.exe + info.festi.boxes.py.TypeTray + + typetray + + + + 50*3 + 50*3 + 100.0 + 0.0 + True + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + + e Straight Edge + f Finger Joint + F Finger Joint (opposing side) + c Abstract Edge Class + E Straight Edge (outset by thickness) + S Stackable (top) + i Straight edge with hinge eye + k Straight edge with hinge eye (both ends) + v Edge with cabinet hinges for 90° lid + f Finger Joint + L Edge for slide on lid (box back) + t Triangle for handle + + 30 + 70 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 5 + 0.1 + 3.0 + + + + 150.0 + 2.0 + 30.0 + 1 + + + + + all + + + + + + + + diff --git a/boxes.py.UBox.inx b/boxes.py.UBox.inx new file mode 100644 index 0000000..772987a --- /dev/null +++ b/boxes.py.UBox.inx @@ -0,0 +1,144 @@ + + + <_name>UBox + boxes.exe + info.festi.boxes.py.UBox + + ubox + + + + + e Straight Edge + f Finger Joint + F Finger Joint (opposing side) + c Abstract Edge Class + E Straight Edge (outset by thickness) + S Stackable (top) + i Straight edge with hinge eye + k Straight edge with hinge eye (both ends) + v Edge with cabinet hinges for 90° lid + f Finger Joint + L Edge for slide on lid (box back) + t Triangle for handle + + 100.0 + 100.0 + 100.0 + 30.0 + + default (none) + chest + flat + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 5 + 0.1 + 3.0 + + + + 150.0 + 2.0 + 30.0 + 0.0 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.UnevenHeightBox.inx b/boxes.py.UnevenHeightBox.inx new file mode 100644 index 0000000..55f1ca9 --- /dev/null +++ b/boxes.py.UnevenHeightBox.inx @@ -0,0 +1,61 @@ + + + <_name>UnevenHeightBox + boxes.exe + info.festi.boxes.py.UnevenHeightBox + + unevenheightbox + + + + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + 100.0 + 100.0 + True + 50 + 50 + 100 + 100 + False + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/boxes.py.UniversalBox.inx b/boxes.py.UniversalBox.inx new file mode 100644 index 0000000..fee877a --- /dev/null +++ b/boxes.py.UniversalBox.inx @@ -0,0 +1,149 @@ + + + <_name>UniversalBox + boxes.exe + info.festi.boxes.py.UniversalBox + + universalbox + + + + + e Straight Edge + f Finger Joint + F Finger Joint (opposing side) + c Abstract Edge Class + E Straight Edge (outset by thickness) + S Stackable (top) + i Straight edge with hinge eye + k Straight edge with hinge eye (both ends) + v Edge with cabinet hinges for 90° lid + f Finger Joint + L Edge for slide on lid (box back) + t Triangle for handle + + + F Finger Joint (opposing side) + h Edge (parallel Finger Joint Holes) + s Stackable (bottom, finger joint holes) + e Straight Edge + + 100.0 + 100.0 + 100.0 + + default (none) + chest + flat + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + 60 + 2.0 + 1.0 + 4.0 + + + + 0 + False + 0.5 + + outset + flush + + 2 + 0 + 1 + + + + 3.2 + 5 + 2 + + inside + outside + + 1.5 + 0.05 + 2.0 + + + + 90.0 + True + + both + none + left + right + + + rectangular + springs + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + + 5 + 0.1 + 3.0 + + + + 150.0 + 2.0 + 30.0 + 1 + + + + 1.05 + 1.0 + 0.5 + 5.0 + + + + + all + + + + + + + + diff --git a/boxes.py.WaivyKnob.inx b/boxes.py.WaivyKnob.inx new file mode 100644 index 0000000..d521c9c --- /dev/null +++ b/boxes.py.WaivyKnob.inx @@ -0,0 +1,39 @@ + + + <_name>WaivyKnob + boxes.exe + info.festi.boxes.py.WaivyKnob + + waivyknob + + + + 50.0 + 20 + 45.0 + 6.0 + 1.0 + 10.0 + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + + all + + + + + + + + diff --git a/boxes.py.WineRack.inx b/boxes.py.WineRack.inx new file mode 100644 index 0000000..c728f6e --- /dev/null +++ b/boxes.py.WineRack.inx @@ -0,0 +1,56 @@ + + + <_name>WineRack + boxes.exe + info.festi.boxes.py.WineRack + + winerack + + + + 400 + 300 + 210 + 46.0 + + minimal + no_verticals + all + + + + + 3.0 + 0.0 + False + 100 + 0.1 + + + + 90.0 + + rectangular + springs + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + all + + + + + + + + diff --git a/fablabchemnitz_CardLayoutGuides.inx b/fablabchemnitz_CardLayoutGuides.inx new file mode 100644 index 0000000..e1e39de --- /dev/null +++ b/fablabchemnitz_CardLayoutGuides.inx @@ -0,0 +1,31 @@ + + + <_name>Cards Layout Guides + fablabchemnitz.de.CardLayoutGuides + fablabchemnitz_CardLayoutGuides.py + inkex.py + + Simple Grid + Folding Grid + + 60 + 30 + + Horizontal + Vertical + + 2 + 2 + 15 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_CardLayoutGuides.py b/fablabchemnitz_CardLayoutGuides.py new file mode 100644 index 0000000..6786f5b --- /dev/null +++ b/fablabchemnitz_CardLayoutGuides.py @@ -0,0 +1,485 @@ +#!/usr/bin/env python2 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: [Drive]:\Program Files\Inkscape\share\extensions + +import inkex +import simplestyle +import copy +import math + +FOLD_GAP = 5 +CROP_GAP = 2 +CROP_LENGTH = 3 + +CSNS = "" + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/cardlayoutguides/' + +def PrintDebug(string): + inkex.debug( _(str(string)) ) + +def RoundAndDeduplicatePoints(points): + return sorted(list(set(map(lambda x: round(x, 3), points)))) + +class Point(): + def __init__(self, x, y): + self.x = x + self.y = y + + def rotate(self, angle, origin): + """ + Rotate a point counterclockwise by a given angle around a given origin. + + The angle should be given in degrees. + """ + rads = math.radians(angle) + newX = origin.x + math.cos(rads) * (self.x - origin.x) - math.sin(rads) * (self.y - origin.y) + newY = origin.y + math.sin(rads) * (self.x - origin.x) + math.cos(rads) * (self.y - origin.y) + + return Point(newX, newY) + + def add(self, point): + return Point(self.x + point.x, self.y + point.y) + + @staticmethod + def parsePoint(pointString): + x, y = map(lambda v: float(v), pointString.split(",")) + return Point(x, y) + + @staticmethod + def parse(pointString, orientationString=None): + p1 = Point.parsePoint(pointString) + p = Point(p1.x, p1.y) + + if orientationString != None: + po = Point.parsePoint(orientationString) + p = p1.add(po.rotate(270, Point(0, 0))) + + return p + +class LineGeneratorBase(object): + def __init__(self, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + self.UnitConverterFunc = unitConverterFunc + self.CardWidth = cardWidth + self.CardHeight = cardHeight + self.CardMargin = cardMargin + self.BleedMargin = bleedMargin + + self.PageWidth = pageWidth + self.PageHeight = pageHeight + self.PageMargin = pageMargin + + self.ContainerWidth = -1 + self.ContainerHeight = -1 + + self.GuideOffsetsWithFold = [ + 0, + self.BleedMargin, self.CardMargin, self.CardHeight - 2*self.CardMargin, self.CardMargin, self.BleedMargin, + 2*FOLD_GAP, + self.BleedMargin, self.CardMargin, self.CardHeight - 2*self.CardMargin, self.CardMargin, self.BleedMargin + ] + + self.GuideOffsetsNoFold = [ + 0, + self.BleedMargin, self.CardMargin, + self.CardWidth - 2*self.CardMargin, + self.CardMargin, self.BleedMargin + ] + + def CalcPageLeftMargin(self): + return (self.PageWidth - self.ContentWidth) / 2.0 + + def CalcPageBottomMargin(self): + return (self.PageHeight - self.ContentHeight) / 2.0 + + def DrawGuide(self, xmlParent, xpos, ypos): + posString = "{},{}".format(xpos, ypos) + attribs = {'position': posString, 'orientation': posString} + + inkex.etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def ConvertPoint(self, p): + # convert point into svg approriate values, including catering for inkscapes "alternative" axis sytem ie 0, 0 is bottom left not top left + newX = self.UnitConverterFunc("{}mm".format(p.x)) + newY = self.PageHeight - self.UnitConverterFunc("{}mm".format(p.y)) + + return Point(newX, newY) + + def DrawLine(self, xmlParent, p1, p2): + cp1 = self.ConvertPoint(p1) + cp2 = self.ConvertPoint(p2) + + pathStr = "M {},{} {}, {}".format(cp1.x, cp1.y, cp2.x, cp2.y) + style = {'stroke': '#000000', 'stroke-width': self.UnitConverterFunc('0.25mm'), 'fill': 'none'} + attribs = {'style': simplestyle.formatStyle(style), 'd': pathStr} + + inkex.etree.SubElement(xmlParent, inkex.addNS('path','svg'), attribs ) + + def DrawVerticleGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageLeftMargin() + lastPos = -1 + while curPos + self.ContainerWidth <= self.PageWidth - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, curPos, 0) + + lastPos = curPos + + curPos += gap + + def DrawHorizontalGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageBottomMargin() + lastPos = -1 + while curPos + self.ContainerHeight <= self.PageHeight - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, 0, curPos) + + lastPos = curPos + + curPos += gap + + def GenerateFoldLines(self, xmlParent): + lines = self.GetFoldLinePositions() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + def GenerateCropMarks(self, xmlParent): + lines = self.GetCropMarkLines() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + @staticmethod + def CreateLineGenerator(layout, orientation, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + if layout == "SIMPLE": + return SimpleGridLineGenerator(orientation, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + if orientation == "HORIZONTAL": + return LineGeneratorForHorizontalCards(cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + return LineGeneratorForVerticalCards(cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + +class SimpleGridLineGenerator(LineGeneratorBase): + def __init__(self, orientation, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + if orientation == "HORIZONTAL": + super(SimpleGridLineGenerator, self).__init__(cardHeight, cardWidth, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + else: + super(SimpleGridLineGenerator, self).__init__(cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + self.ContainerWidth = self.CardWidth + 2 * bleedMargin + self.ContainerHeight = self.CardHeight + 2 * bleedMargin + + # num across + # num down + self.NumContainersAcross = int((self.PageWidth - 2*self.PageMargin) // self.ContainerWidth) # round down division + self.NumContainersDown = int((self.PageHeight - 2*self.PageMargin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + horizontalOffsets = self.GuideOffsetsNoFold = [ + 0, + self.BleedMargin, self.CardMargin, + self.CardWidth - 2*self.CardMargin, + self.CardMargin, self.BleedMargin + ] + + verticalOffsets = self.GuideOffsetsNoFold = [ + 0, + self.BleedMargin, self.CardMargin, + self.CardHeight - 2*self.CardMargin, + self.CardMargin, self.BleedMargin + ] + + self.DrawVerticleGuides(xmlParent, horizontalOffsets, 0) + self.DrawHorizontalGuides(xmlParent, verticalOffsets, 0) + + def GetFoldLinePositions(self): + return [] # no fold lines in simple grid + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + + #determine all horizontal crop marks, duplicates possible + # figure out the ypos + horizontal_ypos = [] + for idx in range(self.NumContainersDown): + bottomY = self.BleedMargin + topY = bottomY + self.CardHeight + containerOffset = bottomMargin + idx*self.ContainerHeight + + horizontal_ypos.append(containerOffset + bottomY) + horizontal_ypos.append(containerOffset + topY) + + horizontal_ypos = RoundAndDeduplicatePoints(horizontal_ypos) # remove duplicate positions + + horizontal_xpos = [leftMargin - CROP_GAP, self.PageWidth - leftMargin + CROP_GAP + CROP_LENGTH] + for xpos in horizontal_xpos: + for ypos in horizontal_ypos: + lines.append([ + Point(xpos - CROP_LENGTH, ypos), + Point(xpos, ypos) + ]) + + #determine all vertical crop marks, duplicates possible + # figure out the xpos + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.BleedMargin + rightX = leftX + self.CardWidth + containerOffset = leftMargin + idx*self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = RoundAndDeduplicatePoints(vertical_xpos) # remove duplicate positions + + vertical_ypos = [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH] + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + return lines + +class LineGeneratorForVerticalCards(LineGeneratorBase): + def __init__(self, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + super(LineGeneratorForVerticalCards, self).__init__(cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + self.ContainerWidth = cardWidth + 2*bleedMargin + self.ContainerHeight = 2*(cardHeight + 2*bleedMargin + FOLD_GAP) + + # num across + self.NumContainersAcross = int((self.PageWidth - 2*self.PageMargin) // self.ContainerWidth) # round down division + + # num down + contentHeight = lambda n: n * self.ContainerHeight + (n - 1)*(2*FOLD_GAP) + workingHeight = self.PageHeight - 2*self.PageMargin + + self.NumContainersDown = int(workingHeight // self.ContainerHeight) # round down division for nominal value + if contentHeight(self.NumContainersDown) > workingHeight: + self.NumContainersDown -= 1 + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = contentHeight(self.NumContainersDown) + + def GenerateGuides(self, xmlParent): + self.DrawVerticleGuides(xmlParent, self.GuideOffsetsNoFold, 0) + self.DrawHorizontalGuides(xmlParent, self.GuideOffsetsWithFold, 2*FOLD_GAP) + + def GetFoldLinePositions(self): + lines = [] + leftMargin = self.CalcPageLeftMargin() + + for idx in range(self.NumContainersDown): + foldY = self.CalcPageBottomMargin() + idx*(self.ContainerHeight + 2*FOLD_GAP) + self.ContainerHeight/2 + lines.append([Point(leftMargin, foldY), Point(self.PageWidth - leftMargin, foldY)]) + + return lines + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + vertical_ypos = [] + # determine all of the hornzontal facing crop marks, no duplicates possible + for idx in range(self.NumContainersDown): + bottomY = self.BleedMargin + topY = bottomY + self.CardHeight + containerOffset = bottomMargin + idx*(self.ContainerHeight + 2*FOLD_GAP) + vertical_ypos += [ + containerOffset - CROP_GAP, + containerOffset + 2*self.BleedMargin + 2*self.CardMargin + self.CardHeight + CROP_GAP + CROP_LENGTH + ] # stash for later + + for ypos in [containerOffset + bottomY, containerOffset + topY]: + for xpos in [leftMargin - CROP_GAP, self.PageWidth - leftMargin + CROP_GAP + CROP_LENGTH]: + lines.append([ + Point(xpos, ypos), + Point(xpos - CROP_LENGTH, ypos) + ]) + + #determine all vertical crop marks, duplicates possible + # figure out the xpos + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.BleedMargin + rightX = leftX + self.CardWidth + containerOffset = leftMargin + idx*self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = list(set(vertical_xpos)) # remove duplicate positions + + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + return lines + +class LineGeneratorForHorizontalCards(LineGeneratorBase): + def __init__(self, cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + super(LineGeneratorForHorizontalCards, self).__init__(cardWidth, cardHeight, cardMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + self.ContainerWidth = 2*(cardHeight + 2 * bleedMargin + FOLD_GAP) + self.ContainerHeight = cardWidth + 2 * bleedMargin + + # num across + contentWidth = lambda n: n * self.ContainerWidth + (n - 1)*(2*FOLD_GAP) + workingWidth = self.PageWidth - 2*self.PageMargin + + self.NumContainersAcross = int(workingWidth // self.ContainerWidth) # round down division for nominal value + if contentWidth(self.NumContainersAcross) > workingWidth: + self.NumContainersAcross -= 1 + + # num down + self.NumContainersDown = int((self.PageHeight - 2*self.PageMargin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = contentWidth(self.NumContainersAcross) + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + self.DrawVerticleGuides(xmlParent, self.GuideOffsetsWithFold, 2*FOLD_GAP) + self.DrawHorizontalGuides(xmlParent, self.GuideOffsetsNoFold, 0) + + def GetFoldLinePositions(self): + lines = [] + bottomMargin = self.CalcPageBottomMargin() + + for idx in range(self.NumContainersAcross): + foldX = self.CalcPageLeftMargin() + idx*(self.ContainerWidth + 2*FOLD_GAP) + self.ContainerWidth/2 + lines.append([Point(foldX, bottomMargin), Point(foldX, self.PageHeight - bottomMargin)]) + + return lines + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + horizontal_xpos = [] + + # determine all of the vertical facing crop marks, no duplicates possible + for idx in range(self.NumContainersAcross): + leftX = self.BleedMargin + rightX = leftX + self.CardHeight + containerOffset = leftMargin + idx*(self.ContainerWidth + 2*FOLD_GAP) + horizontal_xpos += [ + containerOffset - CROP_GAP, + containerOffset + 2*self.BleedMargin + 2*self.CardMargin + self.CardHeight + CROP_GAP + CROP_LENGTH + ] # stash for later + + for xpos in [containerOffset + leftX, containerOffset + rightX]: + for ypos in [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH]: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + #determine all horizontal crop marks, duplicates possible + # figure out the xpos + horizontal_ypos = [] + for idx in range(self.NumContainersDown): + bottomY = self.BleedMargin + topY = bottomY + self.CardWidth + containerOffset = bottomMargin + idx*self.ContainerHeight + + horizontal_ypos.append(containerOffset + bottomY) + horizontal_ypos.append(containerOffset + topY) + + horizontal_ypos = RoundAndDeduplicatePoints(horizontal_ypos) # remove duplicate positions + + for ypos in horizontal_ypos: + for xpos in horizontal_xpos: + lines.append([ + Point(xpos, ypos), + Point(xpos - CROP_LENGTH, ypos) + ]) + + return lines + +class FoldedCardLayoutGuidesEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + self.OptionParser.add_option('-l', '--layout', action = 'store', type = 'string', dest = 'Layout') + self.OptionParser.add_option('-w', '--card_width', action = 'store', type = 'float', dest = 'CardWidth') + self.OptionParser.add_option('-d', '--card_height', action = 'store', type = 'float', dest = 'CardHeight') + self.OptionParser.add_option('-o', '--orientation', action = 'store', type = 'string', dest = 'Orientation') + self.OptionParser.add_option('-c', '--card_margin', action = 'store', type = 'float', dest = 'CardMargin') + self.OptionParser.add_option('-b', '--bleed_margin', action = 'store', type = 'float', dest = 'BleedMargin') + self.OptionParser.add_option('-p', '--page_margin', action = 'store', type = 'float', dest = 'PageMargin') + + def effect(self): + # find dimensions of page + pageWidth = self.uutounit(self.unittouu(self.getDocumentWidth()), "mm") + pageHeight = self.uutounit(self.unittouu(self.getDocumentHeight()), "mm") + + opt = self.options + + guideParent = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + + ### GUIDES + # remove all the existing guides + [node.getparent().remove(node) for node in self.document.xpath('//sodipodi:guide',namespaces=inkex.NSS)] + + # create the generator object + gen = LineGeneratorBase.CreateLineGenerator(opt.Layout, opt.Orientation, opt.CardWidth, opt.CardHeight, opt.CardMargin, opt.BleedMargin, pageWidth, pageHeight, opt.PageMargin, self.unittouu) + + gen.GenerateGuides(guideParent) + + ### FOLD LINES + # remove any existing 'Crop marks' layer + [node.getparent().remove(node) for node in self.document.xpath("//svg:g[@inkscape:label='Crop Marks']",namespaces=inkex.NSS)] + + svg = self.document.xpath('//svg:svg', namespaces=inkex.NSS)[0] + layer = inkex.etree.SubElement(svg, inkex.addNS('g',"svg"), {}) + layer.set(inkex.addNS('label', 'inkscape'), "Crop Marks") + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + gen.GenerateFoldLines(layer) + + ### CROP MARKS + gen.GenerateCropMarks(layer) + +if __name__ == '__main__': + effect = FoldedCardLayoutGuidesEffect() + + effect.affect() diff --git a/fablabchemnitz_CreateTuckbox.inx b/fablabchemnitz_CreateTuckbox.inx new file mode 100644 index 0000000..99ebe8a --- /dev/null +++ b/fablabchemnitz_CreateTuckbox.inx @@ -0,0 +1,28 @@ + + + <_name>Tuckbox + fablabchemnitz.de.CreateTuckbox + fablabchemnitz_CreateTuckbox.py + inkex.py + + Tuckbox + Slipcase/Deck band + MatchBox + + 1 + 63.5 + 88 + 20 + 1.5 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_CreateTuckbox.py b/fablabchemnitz_CreateTuckbox.py new file mode 100644 index 0000000..1f1c721 --- /dev/null +++ b/fablabchemnitz_CreateTuckbox.py @@ -0,0 +1,499 @@ +#!/usr/bin/env python2 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: [Drive]:\Program Files\Inkscape\share\extensions + +import inkex +import simplestyle +import copy + +CSNS = "" + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +class EffectDimensionProvider(): + def __init__(self, effect, x = 0, y = 0): + self.Effect = effect + + self.Layer = effect.current_layer + + self.Width = effect.options.DeckWidth + self.Height = effect.options.DeckHeight + self.Depth = effect.options.DeckDepth + self.Allowance = effect.options.DeckAllowance + + self.X = x + self.Y = y + + def MMtoUU(self, mmval): + if hasattr(self.Effect, "unittouu"): + return str(self.Effect.unittouu("{0}mm".format(mmval))) + else: + MM_TO_PIXELS = 3.5433071 + + return str(MM_TO_PIXELS * mmval) + + def MaximiseHeight(self): + if self.Height < self.Width: # always choose the smallest to be the "width" + temp = self.Width + self.Width = self.Height + self.Height = temp + +class BoxBase(): + def __init__(self, dimensionProvider): + #create a group + self.DimProvider = dimensionProvider + self.Group = inkex.etree.SubElement(dimensionProvider.Layer, inkex.addNS('g','svg'), {} ) + + self.Width = dimensionProvider.Width + dimensionProvider.Allowance + self.Height = dimensionProvider.Height + dimensionProvider.Allowance + self.Depth = dimensionProvider.Depth + dimensionProvider.Allowance + self.X = dimensionProvider.X + self.Y = dimensionProvider.Y + self.MinY = 0 + self.MinX = 0 + + ### init some common sizes ### + self.ThumbSize = 20 + + # tuck flap size + self.FlapOffset = 1.5 + self.FlapHeight = self.Depth + if self.Depth < 7 or self.Depth > 25: + self.FlapHeight = 20 + + # main flap size + self.MainFlapHeight = (4 * self.Depth)/3 + if self.MainFlapHeight < self.ThumbSize: + self.MainFlapHeight = 24 + + ### colour ### + self.Fill = '#ffffff' + self.StrokeWidth = self.DimProvider.MMtoUU(0.5) + + def _CreateRectangleInMillimetres(self, height, width, x, y): + style = {'stroke': '#000000', 'stroke-width': self.StrokeWidth, 'fill' : self.Fill} + attribs = {'style': simplestyle.formatStyle(style), 'height': self.DimProvider.MMtoUU(height), 'width': self.DimProvider.MMtoUU(width), 'x': self.DimProvider.MMtoUU(x), 'y': self.DimProvider.MMtoUU(y)} + inkex.etree.SubElement(self.Group, inkex.addNS('rect','svg'), attribs ) + + def _CreatePathinMillimetres(self, cmds): + pathStr = "" + for cmd in cmds: + pathStr += cmd[0] + " " + for coord in cmd[1:]: + pathStr += self.DimProvider.MMtoUU(coord) + " " + + pathStr += "z" + #raise Exception(pathStr) + + style = {'stroke': '#000000', 'stroke-width': self.StrokeWidth, 'fill' : self.Fill} + attribs = {'style': simplestyle.formatStyle(style), 'd': pathStr} + inkex.etree.SubElement(self.Group, inkex.addNS('path','svg'), attribs ) + +class SingleFlappedTuckBox(BoxBase): + def __init__(self, dimensionProvider): + BoxBase.__init__(self, dimensionProvider) + + def Create(self): + self.FlapOffset = 1.5 + self.FlapHeight = 20 + + # Figure out some row and column values, + # note rows and cols work left to right, top to bottom + col5 = self.X - self.Depth + col4 = col5 - self.Width + col3 = col4 - self.Depth + col2 = col3 - self.Width + col1 = col2 - self.Depth + self.MinX = col1 + + row4 = self.Y - self.Depth + row3 = row4 - self.Height + row2 = row3 - self.Depth + row1 = row2 - self.Depth + self.MinY = row1 + + ### COLUMN 1 ### + #create left glue panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col1, row3) + + ### COLUMN 2 ### + #create box back print panel + self._CreatePathinMillimetres( + [ + ["m", col2, row3], + ["h", (self.Width - self.ThumbSize)/2], + ["c", 0, (3*self.ThumbSize)/4, self.ThumbSize, (3*self.ThumbSize)/4, self.ThumbSize, 0], + ["h", (self.Width - self.ThumbSize)/2], + ["v", self.Height], + ["h", -self.Width] + ]) + + #create box bottom glue panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col2, row4) + + ### COLUMN 3 ### + #create left flap + self._CreatePathinMillimetres( + [ + ["m", col3, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create left print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col3, row3) + + #create bottom left glue panel + self._CreateRectangleInMillimetres(self.Depth, self.Depth, col3, row4) + + ### COLUMN 4 ### + #create main flap + self._CreatePathinMillimetres( + [ + ["m", col4, row2], + ["c", 0, -self.MainFlapHeight, self.Width, -self.MainFlapHeight, self.Width, 0] + ]) + + #create box top print panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col4, row2) + + #create box front print panel + self._CreateRectangleInMillimetres(self.Height, self.Width, col4, row3) + + #create box bottom print panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col4, row4) + + ### COLUMN 5 ### + #create right flap + self._CreatePathinMillimetres( + [ + ["m", col5, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create right print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col5, row3) + + #create bottom right glue panel + self._CreateRectangleInMillimetres(self.Depth, self.Depth, col5, row4) + +class DoubleFlappedTuckBox(BoxBase): + def __init__(self, dimensionProvider): + BoxBase.__init__(self, dimensionProvider) + + def Create(self): + + # Figure out some row and column values, + # note rows and cols work left to right, top to bottom + col5 = self.X - self.Depth + col4 = col5 - self.Width + col3 = col4 - self.Depth + col2 = col3 - self.Width + col1 = col2 - self.Depth + self.MinX = col1 + + row5 = self.Y - self.Depth + row4 = row5 - self.Depth + row3 = row4 - self.Height + row2 = row3 - self.Depth + row1 = row2 - self.Depth + self.MinY = row1 + + ### COLUMN 1 ### + #create left glue panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col1, row3) + + ### COLUMN 2 ### + #create box back print panel + self._CreatePathinMillimetres( + [ + ["m", col2, row3], + ["h", (self.Width - self.ThumbSize)/2], + ["c", 0, (3*self.ThumbSize)/4, self.ThumbSize, (3*self.ThumbSize)/4, self.ThumbSize, 0], + ["h", (self.Width - self.ThumbSize)/2], + ["v", self.Height], + ["h", -(self.Width - self.ThumbSize)/2], + ["c", 0, -(3*self.ThumbSize)/4, -self.ThumbSize, -(3*self.ThumbSize)/4, -self.ThumbSize, 0], + ["h", -(self.Width - self.ThumbSize)/2] + ]) + + ### COLUMN 3 ### + #create top left flap + self._CreatePathinMillimetres( + [ + ["m", col3, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create left print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col3, row3) + + #create bottom left flap + self._CreatePathinMillimetres( + [ + ["m", col3, row4], + ["h", self.Depth], + ["l", -self.FlapOffset, self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + ### COLUMN 4 ### + #create top main flap + self._CreatePathinMillimetres( + [ + ["m", col4, row2], + ["c", 0, -self.MainFlapHeight, self.Width, -self.MainFlapHeight, self.Width, 0] + ]) + + #create box top print panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col4, row2) + + #create box front print panel + self._CreateRectangleInMillimetres(self.Height, self.Width, col4, row3) + + #create box bottom print panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col4, row4) + + #create bottom main flap + self._CreatePathinMillimetres( + [ + ["m", col4, row5], + ["c", 0, self.MainFlapHeight, self.Width, self.MainFlapHeight, self.Width, 0] + ]) + + ### COLUMN 5 ### + #create top right flap + self._CreatePathinMillimetres( + [ + ["m", col5, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create right print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col5, row3) + + #create bottom right flap + self._CreatePathinMillimetres( + [ + ["m", col5, row4], + ["h", self.Depth], + ["l", -self.FlapOffset, self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + +class SlipcaseTuckBox(BoxBase): + def __init__(self, dimensionProvider): + BoxBase.__init__(self, dimensionProvider) + + def Create(self): + self.FlapOffset = 1.5 + + # Figure out some row and column values, + # note rows and cols work left to right, top to bottom + col5 = self.X - self.Depth + col4 = col5 - self.Width + col3 = col4 - self.Depth + col2 = col3 - self.Width + col1 = col2 - self.Depth + + row1 = self.Y - self.Height + + ### COLUMN 1 ### + #create left glue flap + self._CreatePathinMillimetres( + [ + ["m", col2, row1], + ["v", self.Height], + ["l", -(self.Depth - self.FlapOffset), -self.FlapOffset], + ["v", -(self.Height - (2*self.FlapOffset))], + ]) + + ### COLUMN 2 ### + #create box back print panel + self._CreateRectangleInMillimetres(self.Height, self.Width, col2, row1) + + ### COLUMN 3 ### + #create left print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col3, row1) + + ### COLUMN 4 ### + #create box front print panel + self._CreateRectangleInMillimetres(self.Height, self.Width, col4, row1) + + ### COLUMN 5 ### + #create right print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col5, row1) + +class Matchbox(BoxBase): + def __init__(self, dimensionProvider, numFlaps): + BoxBase.__init__(self, dimensionProvider) + + self.NumFlaps = numFlaps + + def Create(self): + if self.NumFlaps == 2: + tuckbox = DoubleFlappedTuckBox(self.DimProvider) + else: + tuckbox = SingleFlappedTuckBox(self.DimProvider) + tuckbox.Create() + + #################################3 + # Create matching double flap tuck box + dimProvider = copy.copy(self.DimProvider) + dimProvider.Width -= 2 + dimProvider.Height -= 2 + dimProvider.Depth -= 2 + dimProvider.Y = tuckbox.MinY - 20 + drawer = MatcboxDrawer(dimProvider) + drawer.Create() + +class MatcboxDrawer(BoxBase): + def __init__(self, dimensionProvider): + BoxBase.__init__(self, dimensionProvider) + + def Create(self): + + fudgeDepth = self.Depth - 2 # overlap panels should be a little smaller to avoid touching box base + # Figure out some row and column co-ord values, + # note rows and cols work left to right, top to bottom, values start at 0 and go negative + col5 = self.X - fudgeDepth + col4 = col5 - self.Depth + col3 = col4 - self.Width + col2 = col3 - self.Depth + col1 = col2 - fudgeDepth + + row5 = self.Y - fudgeDepth + row4 = row5 - self.Depth + row3 = row4 - self.Height + row2 = row3 - self.Depth + row1 = row2 - fudgeDepth + + ### COLUMN 1 ### + #create left overlap panel + self._CreateRectangleInMillimetres(self.Height, fudgeDepth, col1, row3) + + ### COLUMN 2 ### + #create top left flap + self._CreatePathinMillimetres( + [ + ["m", col2, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create box left side print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col2, row3) + + #create bottom left flap + self._CreatePathinMillimetres( + [ + ["m", col2, row4], + ["h", self.Depth], + ["l", -self.FlapOffset, self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + ### COLUMN 3 ### + + #create top side overlap panel + self._CreateRectangleInMillimetres(fudgeDepth, self.Width, col3, row1) + + #create top box side panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col3, row2) + + #create box bottom + self._CreateRectangleInMillimetres(self.Height, self.Width, col3, row3) + + #create bottom box side panel + self._CreateRectangleInMillimetres(self.Depth, self.Width, col3, row4) + + #create bottom side overlap panel + self._CreateRectangleInMillimetres(fudgeDepth, self.Width, col3, row5) + + ### COLUMN 4 ### + #create top right flap + self._CreatePathinMillimetres( + [ + ["m", col4, row3], + ["h", self.Depth], + ["l", -self.FlapOffset, -self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + #create box right side print panel + self._CreateRectangleInMillimetres(self.Height, self.Depth, col4, row3) + + #create bottom right flap + self._CreatePathinMillimetres( + [ + ["m", col4, row4], + ["h", self.Depth], + ["l", -self.FlapOffset, self.FlapHeight], + ["h", -(self.Depth - (2*self.FlapOffset))], + ]) + + ### COLUMN 5 ### + #create right overlap panel + self._CreateRectangleInMillimetres(self.Height, fudgeDepth, col5, row3) + +class TuckboxCreateEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-t', '--type', action = 'store', type = 'string', dest = 'BoxType') + self.OptionParser.add_option('-n', '--num_flaps', action = 'store', type = 'int', dest = 'NumFlaps') + self.OptionParser.add_option('-w', '--deck_width', action = 'store', type = 'float', dest = 'DeckWidth') + self.OptionParser.add_option('-r', '--deck_height', action = 'store', type = 'float', dest = 'DeckHeight') + self.OptionParser.add_option('-d', '--deck_depth', action = 'store', type = 'float', dest = 'DeckDepth') + self.OptionParser.add_option('-a', '--box_allowance', action = 'store', type = 'float', dest = 'DeckAllowance') + + def GetPaths(self): + paths = [] + + def effect(self): + dimProvider = EffectDimensionProvider(self) + + if self.options.BoxType == "TUCKBOX": + if self.options.NumFlaps == 2: + box = DoubleFlappedTuckBox(dimProvider) + else: + box = SingleFlappedTuckBox(dimProvider) + elif self.options.BoxType == "SLIPCASE": + box = SlipcaseTuckBox(dimProvider) + elif self.options.BoxType == "MATCHBOX": + dimProvider.MaximiseHeight() + box = Matchbox(dimProvider, self.options.NumFlaps) + else: + raise Exception("Box type '{0}' is undefined".format(self.options.BoxType)) + + box.Create() + +if __name__ == '__main__': + creator = TuckboxCreateEffect() + + creator.affect() diff --git a/fablabchemnitz_HexLayoutGuides.inx b/fablabchemnitz_HexLayoutGuides.inx new file mode 100644 index 0000000..572d3f1 --- /dev/null +++ b/fablabchemnitz_HexLayoutGuides.inx @@ -0,0 +1,22 @@ + + + <_name>Hex Tiles + fablabchemnitz.de.HexLayoutGuides + fablabchemnitz_HexLayoutGuides.py + inkex.py + 19 + 2 + 2 + 15 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_HexLayoutGuides.py b/fablabchemnitz_HexLayoutGuides.py new file mode 100644 index 0000000..7a32043 --- /dev/null +++ b/fablabchemnitz_HexLayoutGuides.py @@ -0,0 +1,469 @@ +#!/usr/bin/env python2 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: [Drive]:\Program Files\Inkscape\share\extensions + +import inkex +import simplestyle +import copy +import math + +FOLD_GAP = 5 +CROP_GAP = 2 +CROP_LENGTH = 3 + +CSNS = "" + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +def PrintDebug(string): + inkex.debug( _(str(string)) ) + +def RoundAndDeduplicatePoints(points): + return sorted(list(set(map(lambda x: round(x, 3), points)))) + +class Point(): + def __init__(self, x, y): + self.x = x + self.y = y + + def rotate(self, angle, origin): + """ + Rotate a point counterclockwise by a given angle around a given origin. + + The angle should be given in degrees. + """ + rads = math.radians(angle) + newX = origin.x + math.cos(rads) * (self.x - origin.x) - math.sin(rads) * (self.y - origin.y) + newY = origin.y + math.sin(rads) * (self.x - origin.x) + math.cos(rads) * (self.y - origin.y) + + return Point(newX, newY) + + def add(self, point): + return Point(self.x + point.x, self.y + point.y) + + @staticmethod + def parsePoint(pointString): + x, y = map(lambda v: float(v), pointString.split(",")) + return Point(x, y) + + @staticmethod + def parse(pointString, orientationString=None): + p1 = Point.parsePoint(pointString) + p = Point(p1.x, p1.y) + + if orientationString != None: + po = Point.parsePoint(orientationString) + p = p1.add(po.rotate(270, Point(0, 0))) + + return p + +class HexGeneratorBase(object): + def __init__(self, hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + self.UnitConverterFunc = unitConverterFunc + self.HexDiameter = hexDiameter + self.HexMargin = hexMargin + self.BleedMargin = bleedMargin + + self.PageWidth = pageWidth + self.PageHeight = pageHeight + self.PageMargin = pageMargin + + self.ContainerWidth = -1 + self.ContainerHeight = -1 + + def CalcPageLeftMargin(self): + return (self.PageWidth - self.ContentWidth) / 2.0 + + def CalcPageBottomMargin(self): + return (self.PageHeight - self.ContentHeight) / 2.0 + + def DrawGuide(self, xmlParent, xpos, ypos): + posString = "{},{}".format(xpos, ypos) + attribs = {'position': posString, 'orientation': posString} + + inkex.etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def DrawAngledGuide(self, xmlParent, xpos, ypos, angle): + # Angles are taken from the horizontal axis, positive angles move clockwise + posString = "{},{}".format(xpos, ypos) + orientationString = "{}, {}".format(math.sin(math.radians(angle)), math.cos(math.radians(angle))) + attribs = {'position': posString, 'orientation': orientationString} + + inkex.etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def ConvertPoint(self, p): + # convert point into svg approriate values, including catering for inkscapes "alternative" axis sytem ie 0, 0 is bottom left not top left + newX = self.UnitConverterFunc("{}mm".format(p.x)) + newY = self.PageHeight - self.UnitConverterFunc("{}mm".format(p.y)) + + return Point(newX, newY) + + def DrawLine(self, xmlParent, p1, p2): + cp1 = self.ConvertPoint(p1) + cp2 = self.ConvertPoint(p2) + + pathStr = "M {},{} {}, {}".format(cp1.x, cp1.y, cp2.x, cp2.y) + style = {'stroke': '#000000', 'stroke-width': self.UnitConverterFunc('0.25mm'), 'fill': 'none'} + attribs = {'style': simplestyle.formatStyle(style), 'd': pathStr} + + inkex.etree.SubElement(xmlParent, inkex.addNS('path','svg'), attribs ) + + def DrawVerticleGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageLeftMargin() + lastPos = -1 + while curPos + self.ContainerWidth <= self.PageWidth - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, curPos, 0) + + lastPos = curPos + + curPos += gap + + def DrawHorizontalGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageBottomMargin() + lastPos = -1 + while curPos + self.ContainerHeight <= self.PageHeight - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, 0, curPos) + + lastPos = curPos + + curPos += gap + + def DrawAngledGuides(self, xmlParent, offsetPositions, angle, gap): + + numExtraTopContainers = 0 + numExtraBottomContainers = 0 + if angle > 0: + numExtraTopContainers = math.ceil(self.NumContainersAcross / 2.0) - 1 + if angle < 0: + numExtraBottomContainers = math.ceil(self.NumContainersAcross / 2.0) - 1 + + # draw sets of guides per point avoiding duplicate lines + # NOTE: Effectivly we draw the bottom guides first and then move up (ie y is increasing) + curPos = self.CalcPageBottomMargin() - numExtraBottomContainers * self.ContainerHeight + lastPos = -1 + + while curPos + self.ContainerHeight <= self.PageHeight - self.PageMargin + numExtraTopContainers*self.ContainerHeight: + for offset in offsetPositions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawAngledGuide(xmlParent, self.CalcPageLeftMargin() + self.ContainerWidth/2, curPos, angle) + + lastPos = curPos + + curPos += gap + + def GenerateFoldLines(self, xmlParent): + lines = self.GetFoldLinePositions() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + def GenerateCropMarks(self, xmlParent): + lines = self.GetCropMarkLines() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + @staticmethod + def CalculateBorderVerticalOffset(borderWidth): + if borderWidth == 0: + return 0 + + return borderWidth / math.sin(math.radians(60)) + + @staticmethod + def CreateHexGenerator(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + return SimpleHexGridLineGenerator(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + +class SimpleHexGridLineGenerator(HexGeneratorBase): + def __init__(self, hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + super(SimpleHexGridLineGenerator, self).__init__(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + self.HexWidth = math.sqrt(3) * (hexDiameter/2) + self.ContainerWidth = self.HexWidth + 2*bleedMargin + self.ContainerHeight = hexDiameter + 2*HexGeneratorBase.CalculateBorderVerticalOffset(bleedMargin) + + # num across + # num down + self.NumContainersAcross = int((self.PageWidth - 2*self.PageMargin) // self.ContainerWidth) # round down division + self.NumContainersDown = int((self.PageHeight - 2*self.PageMargin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + verticalGuideOffsets = [ + 0, + self.BleedMargin, + self.HexMargin, + self.HexWidth - 2*self.HexMargin, + self.HexMargin, + self.BleedMargin + ] + + bleedVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.BleedMargin) + hexMarginVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.HexMargin) + horizontalGuideOffsets = [ + 0, + bleedVerticalOffset, + hexMarginVerticalOffset, + self.HexDiameter - 2*hexMarginVerticalOffset, + hexMarginVerticalOffset, + bleedVerticalOffset + ] + + self.DrawVerticleGuides(xmlParent, verticalGuideOffsets, 0) + self.DrawAngledGuides(xmlParent, horizontalGuideOffsets, -30, 0) + self.DrawAngledGuides(xmlParent, horizontalGuideOffsets, 30, 0) + + def GetFoldLinePositions(self): + return [] # no fold lines in simple grid + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + bleedVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.BleedMargin) + + def CalcOppositeDeltaGivenAdjacentDelta(xdelta, angle): + return math.tan(math.radians(angle)) * xdelta + + #--------------------------------------------------------------------------------- + #determine all vertical crop marks, duplicates possible + # figure out the xpos' + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.BleedMargin + rightX = leftX + self.HexWidth + containerOffset = leftMargin + idx * self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = RoundAndDeduplicatePoints(vertical_xpos) + + # add to list of lines + vertical_ypos = [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH] + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + #--------------------------------------------------------------------------------- + # figure out NW, SW, NE and SE crop marks for both sides of the page + vertical_ypos_nw = [] + vertical_ypos_sw = [] + vertical_ypos_ne = [] + vertical_ypos_se = [] + + yoffset = CalcOppositeDeltaGivenAdjacentDelta(self.ContainerWidth/2 + CROP_GAP, 30) + + lastColumnHasHalfStep = (self.NumContainersAcross % 2) == 0 # an even numbered containers across means that the last column is 1/2 a continer up and has 1 less container + staggeredContainerOffset = 0 + if lastColumnHasHalfStep: + staggeredContainerOffset = self.ContainerHeight/2 + + for idx in range(self.NumContainersDown): + leftContainerOffset = idx * self.ContainerHeight + bottomMargin + rightContainerOffset = leftContainerOffset + staggeredContainerOffset + + bottomY = bleedVerticalOffset + topY = self.ContainerHeight - bleedVerticalOffset + + vertical_ypos_nw.append(leftContainerOffset + topY + yoffset) + vertical_ypos_nw.append(leftContainerOffset + bottomY + yoffset) + + vertical_ypos_sw.append(leftContainerOffset + topY - yoffset) + vertical_ypos_sw.append(leftContainerOffset + bottomY - yoffset) + + vertical_ypos_ne.append(rightContainerOffset + topY + yoffset) + vertical_ypos_ne.append(rightContainerOffset + bottomY + yoffset) + + vertical_ypos_se.append(rightContainerOffset + topY - yoffset) + vertical_ypos_se.append(rightContainerOffset + bottomY - yoffset) + + # sort out a staggered last col + if lastColumnHasHalfStep: # if it's a half step column we need to remove the last container and add acouple of extra lines + vertical_ypos_ne = vertical_ypos_ne[:-2] + vertical_ypos_se = vertical_ypos_se[:-2] + vertical_ypos_ne.append(max(vertical_ypos_ne) + 2*bleedVerticalOffset) + vertical_ypos_se.append(min(vertical_ypos_se) - 2*bleedVerticalOffset) + + # remove duplicate positions + vertical_ypos_nw = RoundAndDeduplicatePoints(vertical_ypos_nw) + vertical_ypos_sw = RoundAndDeduplicatePoints(vertical_ypos_sw) + vertical_ypos_ne = RoundAndDeduplicatePoints(vertical_ypos_ne) + vertical_ypos_se = RoundAndDeduplicatePoints(vertical_ypos_se) + + # add to list of lines + xpos_left = leftMargin - CROP_GAP + xpos_right = self.PageWidth - leftMargin + CROP_GAP + yoffset = CalcOppositeDeltaGivenAdjacentDelta(CROP_LENGTH, 30) + + for ypos in vertical_ypos_nw: + lines.append([ + Point(xpos_left, ypos), + Point(xpos_left - CROP_LENGTH, ypos + yoffset) + ]) + + for ypos in vertical_ypos_sw: + lines.append([ + Point(xpos_left, ypos), + Point(xpos_left - CROP_LENGTH, ypos - yoffset) + ]) + + for ypos in vertical_ypos_ne: + lines.append([ + Point(xpos_right, ypos), + Point(xpos_right + CROP_LENGTH, ypos + yoffset) + ]) + + for ypos in vertical_ypos_se: + lines.append([ + Point(xpos_right, ypos), + Point(xpos_right + CROP_LENGTH, ypos - yoffset) + ]) + + #--------------------------------------------------------------------------------- + # figure out NW, SW, NE and SE crop marks for top and bottom of the page + xpos_nw = [] + xpos_sw = [] + xpos_ne = [] + xpos_se = [] + + xoffset_near = CalcOppositeDeltaGivenAdjacentDelta(bleedVerticalOffset + CROP_GAP, 60) + xoffset_far = CalcOppositeDeltaGivenAdjacentDelta(self.ContainerHeight - bleedVerticalOffset + CROP_GAP, 60) + + for idx in range(0, self.NumContainersAcross, 2): #we only need to do every other container because of the stepping + containerOffset = idx * self.ContainerWidth + leftMargin + topY = self.ContainerHeight - bleedVerticalOffset + bottomY = bleedVerticalOffset + xpos = self.ContainerWidth/2 + + xpos_nw.append(containerOffset + xpos - xoffset_near) + xpos_nw.append(containerOffset + xpos - xoffset_far) + + xpos_sw.append(containerOffset + xpos - xoffset_near) + xpos_sw.append(containerOffset + xpos - xoffset_far) + + xpos_ne.append(containerOffset + xpos + xoffset_near) + xpos_ne.append(containerOffset + xpos + xoffset_far) + + xpos_se.append(containerOffset + xpos + xoffset_near) + xpos_se.append(containerOffset + xpos + xoffset_far) + + + # remove duplicate positions + xpos_nw = RoundAndDeduplicatePoints(xpos_nw) + xpos_sw = RoundAndDeduplicatePoints(xpos_sw) + xpos_ne = RoundAndDeduplicatePoints(xpos_ne) + xpos_se = RoundAndDeduplicatePoints(xpos_se) + + # add to list of lines + ypos_bottom = bottomMargin - CROP_GAP + ypos_top = self.PageHeight - bottomMargin + CROP_GAP + yoffset = CalcOppositeDeltaGivenAdjacentDelta(CROP_LENGTH, 30) + + for xpos in xpos_nw: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_top), + Point(xpos - CROP_LENGTH, ypos_top + yoffset) + ]) + + for xpos in xpos_sw: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_bottom), + Point(xpos - CROP_LENGTH, ypos_bottom - yoffset) + ]) + + for xpos in xpos_ne: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_top), + Point(xpos + CROP_LENGTH, ypos_top + yoffset) + ]) + + for xpos in xpos_se: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_bottom), + Point(xpos + CROP_LENGTH, ypos_bottom - yoffset) + ]) + + #--------------------------------------------------------------------------------- + return lines + +class HexLayoutGuidesEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + self.OptionParser.add_option('-d', '--hex_diameter', action = 'store', type = 'float', dest = 'HexDiameter') + self.OptionParser.add_option('-c', '--hex_margin', action = 'store', type = 'float', dest = 'HexMargin') + self.OptionParser.add_option('-b', '--bleed_margin', action = 'store', type = 'float', dest = 'BleedMargin') + self.OptionParser.add_option('-p', '--page_margin', action = 'store', type = 'float', dest = 'PageMargin') + + def effect(self): + # find dimensions of page + pageWidth = self.uutounit(self.unittouu(self.getDocumentWidth()), "mm") + pageHeight = self.uutounit(self.unittouu(self.getDocumentHeight()), "mm") + + opt = self.options + + guideParent = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + + ### GUIDES + # remove all the existing guides + [node.getparent().remove(node) for node in self.document.xpath('//sodipodi:guide',namespaces=inkex.NSS)] + + # create the object generator + gen = HexGeneratorBase.CreateHexGenerator(opt.HexDiameter, opt.HexMargin, opt.BleedMargin, pageWidth, pageHeight, opt.PageMargin, self.unittouu) + + gen.GenerateGuides(guideParent) + + ### CROP MARKS + # remove any existing 'Crop marks' layer + [node.getparent().remove(node) for node in self.document.xpath("//svg:g[@inkscape:label='Crop Marks']",namespaces=inkex.NSS)] + + svg = self.document.xpath('//svg:svg', namespaces=inkex.NSS)[0] + layer = inkex.etree.SubElement(svg, inkex.addNS('g',"svg"), {}) + layer.set(inkex.addNS('label', 'inkscape'), "Crop Marks") + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + + gen.GenerateCropMarks(layer) + +if __name__ == '__main__': + effect = HexLayoutGuidesEffect() + + effect.affect() diff --git a/fablabchemnitz_InsertPaperTemplate.inx b/fablabchemnitz_InsertPaperTemplate.inx new file mode 100644 index 0000000..f393724 --- /dev/null +++ b/fablabchemnitz_InsertPaperTemplate.inx @@ -0,0 +1,32 @@ + + + <_name>Insert Paper Template + fablabchemnitz.de.InsertPaperTemplate + fablabchemnitz_InsertPaperTemplate.py + inkex.py + + A5 + A4 + A3 + A2 + A1 + A0 + Poker Card + Bridge Card + Mini American Card + Mini European Card + Tarot Card + + true + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_InsertPaperTemplate.py b/fablabchemnitz_InsertPaperTemplate.py new file mode 100644 index 0000000..4b1f6e4 --- /dev/null +++ b/fablabchemnitz_InsertPaperTemplate.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python2 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: D:\Program Files\Inkscape\share\extensions + +import inkex +import simplestyle +import simplepath +from inkex import * +import csv +import fnmatch +import re +import os +import os.path +import lxml +from lxml import etree +from copy import deepcopy +import sys +import copy + +CSNS = "" + +NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +class PaperBase(): + def __init__(self, width, height): + self.Width = width + self.Height = height + +class A5(PaperBase): + def __init__(self): + PaperBase.__init__(self, 150, 100) + +class InsertPaperTemplateEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-p', '--papertype', action = 'store', type = 'string', dest = 'PaperType') + self.OptionParser.add_option('-s', '--show_type', action = 'store', type = 'string', dest = 'ShowType') + + ### colour ### + self.StrokeWidthFloat = 0.5 + self.StrokeWidth = self.MMtoUU(self.StrokeWidthFloat) + + self.FontSize = "11px" + + def effect(self): + self.Group = inkex.etree.SubElement(self.current_layer, inkex.addNS('g','svg'), {} ) + + paperTypes = {} + paperTypes["A5"] = (148, 210, "#ffeeaa") # yellow + paperTypes["A4"] = (210, 297, "#ffccaa") # orange + paperTypes["A3"] = (297, 420, "#afdde9") # blue + paperTypes["A2"] = (420, 594, "#ccaaff") # purple + paperTypes["A1"] = (594, 841, "#afe9c6") # green + paperTypes["A0"] = (841, 1189, "#ffd5d5") # red + + paperTypes["POKER"] = (63.5, 88, "#ffffff") # white + paperTypes["BRIDGE"] = (56, 88, "#ffffff") # white + paperTypes["MINI_US"] = (41, 63, "#ffffff") # white + paperTypes["MINI_EU"] = (44, 68, "#ffffff") # white + paperTypes["TAROT"] = (70, 120, "#ffffff") # white + + + if self.options.PaperType in paperTypes: + self.CreateTemplate(self.options.PaperType, *(paperTypes[self.options.PaperType])) + else: + raise Exception("Paper type '{0}' is undefined".format(self.options.PaperType)) + + def CreateTemplate(self, label, width, height, colour): + # TODO Read mouse position + x = 0 + y = 0 + self._CreateRectangleInMillimetres(width-self.StrokeWidthFloat, height-self.StrokeWidthFloat, x, y, colour) + if self.options.ShowType == "true": + self._CreateText(label, x + width/2 , y + height/2) + + def _CreateText(self, labelText, x, y): + style = {'stroke': '#000000', + 'stroke-width': self.StrokeWidth, + 'fill' : '#000000', + 'font-size' : self.FontSize, + 'text-align' : 'center', + 'text-anchor' : 'middle' + } + + attribs = {'style': simplestyle.formatStyle(style), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)} + + text = inkex.etree.Element(inkex.addNS('text','svg'), attribs) + text.text = labelText + + self.Group.append(text) + + def _CreateRectangleInMillimetres(self, width, height, x, y, color): + style = {'stroke': '#000000', 'stroke-width': self.StrokeWidth, 'fill' : color} + attribs = {'style': simplestyle.formatStyle(style), 'height': self.MMtoUU(height), 'width': self.MMtoUU(width), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)} + inkex.etree.SubElement(self.Group, inkex.addNS('rect','svg'), attribs ) + + def MMtoUU(self, mmval): + if hasattr(self, "xxxunittouu"): + return str(self.unittouu("{0}mm".format(mmval))) + else: + MM_TO_PIXELS = 1 + + return str(MM_TO_PIXELS * mmval) + + +if __name__ == '__main__': + creator = InsertPaperTemplateEffect() + + creator.affect() diff --git a/fablabchemnitz_add_kerf_width_offset.inx b/fablabchemnitz_add_kerf_width_offset.inx new file mode 100644 index 0000000..fce0316 --- /dev/null +++ b/fablabchemnitz_add_kerf_width_offset.inx @@ -0,0 +1,21 @@ + + + <_name>Kerf Width Offset + fablabchemnitz.de.add_kerf_width_offset + fablabchemnitz_add_kerf_width_offset.py + fablabchemnitz_metaext.py + simplestyle.py + inkex.py + 0. + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_add_kerf_width_offset.py b/fablabchemnitz_add_kerf_width_offset.py new file mode 100644 index 0000000..ec1b082 --- /dev/null +++ b/fablabchemnitz_add_kerf_width_offset.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import sys +import simplestyle # will be needed here for styles support +sys.path.append('/usr/share/inkscape/extensions') + +# We will use the inkex module with the predefined Effect base class. +import inkex +import fablabchemnitz_metaext + +class AddKerf(inkex.Effect): + """ + An Inkscape extension which joins multiple lines in one object and adds + kerf to it. + """ + def __init__(self): + """ + Constructor. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # Define string option "--what" with "-w" shortcut and default value "World". + # TODO: better name + self.OptionParser.add_option('-w', '--what', action = 'store', + type = 'float', dest = 'what', default = '0.0', + help = 'Kerf in 1/10 mm.') + + def set_appropriate_width(self, kerf_in_mm): + found = False + for _, node in self.selected.iteritems(): + if node.tag == inkex.addNS('g', 'svg'): + inkex.error("Can't add kerf to a group, please ungroup first.") + if node.tag == inkex.addNS('path', 'svg'): + style = {'stroke-width': kerf_in_mm, 'fill': 'none', + 'stroke':'#000000'} + style = simplestyle.formatStyle(style) + node.set('style', style) + found = True + return found + + def effect(self): + """% mod + Effect behaviour. + """ + # Get script's "--what" option value. + what = self.options.what / 10. + negative_kerf = False + if what < 0.: + what = -what + negative_kerf = True + + kerf_in_mm = self.unittouu(str(what) + " mm") + + operation_list = ["StrokeToPath", "SelectionUnion", + "SelectionBreakApart", "SelectionUnion", "SelectionBreakApart"] + if negative_kerf: + operation_list[-2] = "SelectionIntersect" + + join_ext = fablabchemnitz_metaext.MetaEffect(operation_list) + + if not self.set_appropriate_width(kerf_in_mm): + objectify = fablabchemnitz_metaext.MetaEffect(["ObjectToPath"]) + objectify.effect(self.document, self.selected, self.doc_ids) + if not self.set_appropriate_width(kerf_in_mm): + inkex.error("Didn't found any selected path, breaking") + return + + join_ext.effect(self.document, self.selected, self.doc_ids) + + for _, node in self.selected.iteritems(): + #inkex.debug("node %s" % inkex.etree.tostring(node)) + if node.tag == inkex.addNS('path', 'svg'): + new_width = self.unittouu("0.5mm") + colour = '#ff0000' if negative_kerf else '#000000' + style = {'stroke-width': new_width, 'fill': 'none', + 'stroke': colour} + style = simplestyle.formatStyle(style) + node.set('style', style) + # inkex.debug("node %s" % inkex.etree.tostring(node)) + + +# Create effect instance and apply it. +effect = AddKerf() +effect.affect() diff --git a/fablabchemnitz_ai_eps_output.inx b/fablabchemnitz_ai_eps_output.inx new file mode 100644 index 0000000..de34875 --- /dev/null +++ b/fablabchemnitz_ai_eps_output.inx @@ -0,0 +1,15 @@ + + + <_name>AI compatible EPS output + fablabchemnitz.de.ai_eps_output + fablabchemnitz_ai_eps_output.py + + .eps + application/eps + <_filetypename>Encapsulated PostScript - AI compatible (*.eps) + <_filetypetooltip>Adobe Illustrator 7 compatible EPS + + + diff --git a/fablabchemnitz_ai_eps_output.py b/fablabchemnitz_ai_eps_output.py new file mode 100644 index 0000000..4709967 --- /dev/null +++ b/fablabchemnitz_ai_eps_output.py @@ -0,0 +1,1110 @@ +#!/usr/bin/env python +""" +Mainly written by Andras Prim github_at_primandras.hu + +Arc to bezier converting method is ported from: +http://code.google.com/p/core-framework/source/browse/trunk/plugins/svg.js +written by Angel Kostadinov, with MIT license +""" + +try: + from lxml import etree as ET +except Exception: + import xml.etree.ElementTree as ET + +import re +import math + +def wrap(text, width): + """ A word-wrap function that preserves existing line breaks """ + retstr = "" + for word in text.split(' '): + if len(retstr)-retstr.rfind('\n')-1 + len(word.split('\n',1)[0]) >= width: + retstr += ' \n' + word + else: + retstr += ' ' + word + return retstr + +def css2dict(css): + """returns a dictionary representing the given css string""" + cssdict = {} + if None == css: + return cssdict + for pair in css.split(';'): #TODO: what about escaped separators + if pair.find(':') >= 0: + key, value = pair.split(':') + cssdict[ key.strip() ] = value.strip() + return cssdict + +def cssColor2Eps(cssColor, colors='RGB'): + """converts css color definition (a hexa code with leading #) + to eps color definition""" + r = float(int(cssColor[1:3],16)) / 255 + g = float(int(cssColor[3:5],16)) / 255 + b = float(int(cssColor[5:7],16)) / 255 + if colors == 'RGB': + return "%f %f %f" % (r, g, b) + elif colors == 'CMYKRGB': + if (r == 0) and (g == 0) and (b == 0): + c = 0 + m = 0 + y = 0 + k = 1 + else: + c = 1 - r + m = 1 - g + y = 1 - b + + # extract out k [0,1] + min_cmy = min(c, m, y) + c = (c - min_cmy) / (1 - min_cmy) + m = (m - min_cmy) / (1 - min_cmy) + y = (y - min_cmy) / (1 - min_cmy) + k = min_cmy + + return "%f %f %f %f %f %f %f" % (c, m, y, k, r, g, b) + +class svg2eps: + def __init__(self, filename=None): + self.filename = filename + self.svg = None + self.rePathDSplit = re.compile('[^a-zA-Z0-9.-]+') + self.reTransformFind = re.compile('([a-z]+)\\(([^)]+)\\)') + self.reNumberFind = re.compile('[0-9.eE+-]+') + # must update reNumberUnitFind, if e is a valid character in a unit + self.reNumberUnitFind = re.compile('([0-9.eE+-]+)([a-z]*)') + # px to pt conversion rate varies based on inkscape versions, it is added during parsing + self.toPt = {'in': 72.0, 'pt': 1.0, 'mm': 2.8346456695, 'cm': 28.346456695, 'm': 2834.6456695, 'pc': 12.0} + + def unitConv(self, string, toUnit): + match = self.reNumberUnitFind.search(string) + number = float(match.group(1)) + unit = match.group(2) + if unit not in self.toPt: + unit = 'uu' + + if unit == toUnit: + return number + else: + return number * self.toPt[unit] / self.toPt[toUnit] + + def lengthConv(self, svgLength): + """converts svgLength to eps length using the current transformation matrix""" + matrix = self.matrices[-1] + epsx = matrix[0] * svgLength + epsy = matrix[1] * svgLength + + return math.sqrt(epsx*epsx + epsy*epsy) + + def coordConv(self, svgx, svgy, relative=False): + """converts svgx, svgy coordinates to eps coordinates using the current transformation matrix""" + if relative: + svgx = float(svgx) + self.curPoint[0] + svgy = float(svgy) + self.curPoint[1] + else: + svgx = float(svgx) + svgy = float(svgy) + matrix = self.matrices[-1] + epsx = matrix[0] * svgx + matrix[2] * svgy + matrix[4] + epsy = matrix[1] * svgx + matrix[3] * svgy + matrix[5] + + return (epsx, epsy) + + def matrixMul(self, matrix, matrix2): + """multiplies matrix with matrix2""" + matrix0 = matrix[:] + matrix[0] = matrix0[0] * matrix2[0] + matrix0[2]*matrix2[1] # + matrix0[4]*0 + matrix[1] = matrix0[1] * matrix2[0] + matrix0[3]*matrix2[1] # + matrix0[5]*0 + matrix[2] = matrix0[0] * matrix2[2] + matrix0[2]*matrix2[3] # + matrix0[4]*0 + matrix[3] = matrix0[1] * matrix2[2] + matrix0[3]*matrix2[3] # + matrix0[5]*0 + matrix[4] = matrix0[0] * matrix2[4] + matrix0[2]*matrix2[5] + matrix0[4] + matrix[5] = matrix0[1] * matrix2[4] + matrix0[3]*matrix2[5] + matrix0[5] + + + def alert(self, string, elem): + """adds an alert to the collection""" + if not string in self.alerts: + self.alerts[string] = set() + elemId = elem.get('id') + if elemId != None: + self.alerts[string].add(elemId) + + def showAlerts(self): + """show alerts collected by the alert() function""" + for string, ids in self.alerts.iteritems(): + idstring = ', '.join(ids) + print(string, idstring) + + def elemSvg(self, elem): + """handles the element""" + # DPI changed in inkscape 0.92, so set the px-to-pt rate based on inkscape version + self.toPt['px'] = 0.75 + inkscapeVersionString = elem.get('{http://www.inkscape.org/namespaces/inkscape}version', '0.92.0') + mobj = re.match(r'(\d+)\.(\d+)', inkscapeVersionString) + if mobj != None: + major = int(mobj.group(1)) + minor = int(mobj.group(2)) + if major == 0 and minor < 92: + self.toPt['px'] = 0.8 + + # by default (without viewbox definition) user unit = pixel + self.toPt['uu'] = self.toPt['px'] + self.docWidth = self.unitConv(elem.get('width'), 'pt') + self.docHeight = self.unitConv(elem.get('height'), 'pt') + + viewBoxString = elem.get('viewBox') + if viewBoxString != None: + viewBox = viewBoxString.split(' ') + # theoretically width and height scaling factor could be different, + # but this script does not support it + widthUu = float(viewBox[2]) - float(viewBox[0]) + self.toPt['uu'] = self.docWidth / widthUu + + # transform svg units to eps default pt + scale = self.toPt['uu'] + self.matrices = [ [scale, 0, 0, -scale, 0, self.docHeight] ] + + + def gradientFill(self, elem, gradientId): + """constructs a gradient instance definition in self.gradientOp""" + if gradientId not in self.gradients: + self.alert("fill gradient not defined: "+gradientId, elem ) + return + gradient = self.gradients[gradientId] + transformGradient = gradient + while 'href' in gradient: + gradientId = gradient['href'] + gradient = self.gradients[gradientId] + if 'matrix' in transformGradient: + self.matrices.append( self.matrices[-1][:] ) + self.matrixMul(self.matrices[-1],transformGradient['matrix']) + + if 'linear' == transformGradient['type']: + gradient['linUseCount'] += 1 + x1, y1 = self.coordConv(transformGradient['x1'], transformGradient['y1']) + x2, y2 = self.coordConv(transformGradient['x2'], transformGradient['y2']) + deltax = x2 - x1 + deltay = y2 - y1 + length = math.sqrt( deltax*deltax + deltay*deltay ) + angle = math.atan2(deltay, deltax)*180/math.pi + + elif 'radial' == transformGradient['type']: + gradient['radUseCount'] += 1 + cx, cy = self.coordConv(transformGradient['cx'], transformGradient['cy']) + # fx, fy = self.coordConv(transformGradient['fx'], transformGradient['fy']) + rx, ry = self.coordConv(transformGradient['cx'] + transformGradient['r'], transformGradient['cy']) + r = math.sqrt( (rx-cx)*(rx-cx) + (ry-cy)*(ry-cy)) + + if 'matrix' in transformGradient: + self.matrices.pop() + + + if 'linear' == transformGradient['type']: + #endPathSegment() will substitute appropriate closeOp in %%s + self.gradientOp = "\nBb 1 (l_%s) %f %f %f %f 1 0 0 1 0 0 Bg %%s 0 BB" % \ + (gradientId, x1, y1, angle, length) + elif 'radial' == transformGradient['type']: + self.gradientOp = "\nBb 1 (r_%s) %f %f 0 %f 1 0 0 1 0 0 Bg %%s 0 BB" % \ + (gradientId, cx, cy, r) + self.alert("radial gradients will appear circle shaped", elem) + + + + def pathStyle(self, elem): + """handles the style attribute in svg element""" + if self.clipPath: + self.closeOp = 'h n' + return + + css = self.cssStack[-1] + if 'stroke' in css and css['stroke'] != 'none': + self.closeOp = 's' + self.pathCloseOp = 's' + if '#' == css['stroke'][0]: + self.epspath += ' ' + cssColor2Eps(css['stroke']) + ' XA' + elif 'url' == css['stroke'][0:3]: + self.alert("gradient strokes not supported", elem) + if 'fill' in css and css['fill'] != 'none': + if self.closeOp == 's': + self.closeOp = 'b' + else: + self.closeOp = 'f' + if '#' == css['fill'][0]: + self.epspath += ' ' + cssColor2Eps(css['fill']) + ' Xa' + elif 'url' == css['fill'][0:3]: + self.gradientFill(elem, css['fill'][5:-1]) + + + if 'fill-rule' in css: + if css['fill-rule'] == 'evenodd': + self.epspath += " 1 XR" + else: + self.epspath += " 0 XR" + if 'stroke-width' in css: + self.epspath += " %f w" % (self.lengthConv(self.unitConv(css['stroke-width'], 'uu')), ) + if 'stroke-linecap' in css: + if css['stroke-linecap'] == 'butt': + self.epspath += " 0 J" + elif css['stroke-linecap'] == 'round': + self.epspath += " 1 J" + elif css['stroke-linecap'] == 'square': + self.epspath += " 2 J" + if 'stroke-linejoin' in css: + if css['stroke-linejoin'] == 'miter': + self.epspath += " 0 j" + elif css['stroke-linejoin'] == 'round': + self.epspath += " 1 j" + elif css['stroke-linejoin'] == 'bevel': + self.epspath += " 2 j" + if 'stroke-miterlimit' in css: + self.epspath += " " + css['stroke-miterlimit'] + " M" + if 'stroke-dasharray' in css: + phase = 0 + if css['stroke-dasharray'] == 'none': + dashArray = [] + else: + dashArray = list(map(lambda x: "%f" % (self.lengthConv(float(x)),), css['stroke-dasharray'].split(','))) + if 'stroke-dashoffset' in css: + phase = float(css['stroke-dashoffset']) + + self.epspath += ' [ %s ] %f d' % (' '.join(dashArray), phase) + + + + def endPathSegment(self, elem): + """should be called when a path segment end is reached in a element""" + if self.removeStrayPoints and self.segmentCommands <= 1: + self.alert("removing stray point", elem) + self.epspath = self.epspath[:self.segmentStartIndex] + return + if self.autoClose and (self.closeOp == 'f' or self.closeOp == 'b'): + autoClose = True + else: + autoClose = False + + if self.pathExplicitClose or autoClose: + closeOp = self.closeOp + else: + closeOp = self.closeOp.upper() + + if self.pathCurSegment == self.pathSegmentNum and self.gradientOp != None: + closeOp = self.gradientOp % (closeOp,) + + if self.lastBegin != None: + if (self.pathExplicitClose or autoClose): + if abs(self.curPoint[0] - self.lastBegin[0]) + \ + abs(self.curPoint[1] - self.lastBegin[1]) > self.closeDist: + x, y = self.coordConv(self.lastBegin[0], self.lastBegin[1]) + self.epspath += ' %f %f l' % (x, y) + + self.epspath += ' ' + closeOp + '\n' + + if self.pathExplicitClose: + self.curPoint = self.lastBegin + + self.lastBegin = None + + def elemPath(self, elem, pathData=None): + """handles svg element""" + if None == pathData: + pathData = elem.get('d') + self.pathSegmentNum = pathData.count("m") + pathData.count("M") + self.pathCurSegment = 0 + self.epspath = '' + self.segmentStartIndex = 0 # index in self.epspath of first character of current path segment + self.segmentCommands = 0 # number of handled commands (including first moveto) in current paths segment + self.closeOp = 'n' # pathStyle(elem) will modify this + self.gradientOp = None + self.pathExplicitClose = False + self.epspath += '\n%AI3_Note: ' + elem.get('id') + '\n' + self.pathStyle(elem) + + tokens = self.rePathDSplit.split(pathData) + i = 0 + cmd = '' # path command + self.curPoint = (0,0) + self.lastBegin = None + + while i < len(tokens): + token = tokens[i] + if token in ['m', 'M', 'c', 'C', 'l', 'L', 'z', 'Z', 'a', 'A', 'q', 'Q', 'h', 'H', 'v', 'V']: + cmd = token + i += 1 + elif token.isalpha(): + self.alert('unhandled path command: %s' % (token,), elem) + cmd = '' + i += 1 + else: # coordinates after a moveto are assumed to be lineto + if 'm' == cmd: + cmd = 'l' + elif 'M' == cmd: + cmd = 'L' + + if ('M' == cmd or 'm' == cmd) : + if self.pathCurSegment > 0: + self.endPathSegment(elem) + self.pathCurSegment += 1 + self.pathExplicitClose = False + + if 'M' == cmd or 'm' == cmd: + if 'M' == cmd or ('m' == cmd and i == 1): + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + else: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + + self.segmentStartIndex = len(self.epspath) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.lastBegin = self.curPoint + self.epspath += ' m' + self.segmentCommands = 1 + elif 'L' == cmd or 'l' == cmd: + if 'L' == cmd: + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + else: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' l' + self.segmentCommands += 1 + elif cmd in ['H', 'h', 'V', 'v']: + if 'H' == cmd: + self.curPoint = (float(tokens[i]), self.curPoint[1]) + elif 'h' == cmd: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1]) + elif 'V' == cmd: + self.curPoint = (self.curPoint[0], float(tokens[i])) + elif 'v' == cmd: + self.curPoint = (self.curPoint[0], self.curPoint[1] + float(tokens[i])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 1 + self.epspath += ' l' + self.segmentCommands += 1 + elif 'C' == cmd: + for j in range(2): + x, y = self.coordConv(tokens[i], tokens[i+1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'c' == cmd: + for j in range(2): + x, y = self.coordConv(self.curPoint[0] + float(tokens[i]), self.curPoint[1] +float(tokens[i+1])) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'Q' == cmd: + #export quadratic Bezier as cubic + x, y = self.coordConv(tokens[i], tokens[i+1]) + self.epspath += ' %f %f %f %f' % (x, y, x, y) + i += 2 + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'q' == cmd: + x, y = self.coordConv(self.curPoint[0] + float(tokens[i]), self.curPoint[1] +float(tokens[i+1])) + self.epspath += ' %f %f %f %f' % (x, y, x, y) + i += 2 + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'A' == cmd or 'a' == cmd: + self.alert("elliptic arcs are converted to bezier curves", elem) + +# Angel Kostadinov begin + r1 = abs(float(tokens[i])) + r2 = abs(float(tokens[i+1])) + psai = float(tokens[i+2]) + largeArcFlag = int(tokens[i + 3]) + fS = int(tokens[i+4]) + rx = self.curPoint[0] + ry = self.curPoint[1] + if 'A' == cmd: + cx, cy = (float(tokens[i+5]), float(tokens[i+6])) + else: + cx, cy = (self.curPoint[0] +float(tokens[i+5]), self.curPoint[1] +float(tokens[i+6])) + + if r1 > 0 and r2 > 0: + ctx = (rx - cx) / 2 + cty = (ry - cy) / 2 + cpsi = math.cos(psai*math.pi/180) + spsi = math.sin(psai*math.pi/180) + rxd = cpsi*ctx + spsi*cty + ryd = -1*spsi*ctx + cpsi*cty + rxdd = rxd * rxd + rydd = ryd * ryd + r1x = r1 * r1 + r2y = r2 * r2 + lamda = rxdd/r1x + rydd/r2y + + if lamda > 1: + r1 = math.sqrt(lamda) * r1 + r2 = math.sqrt(lamda) * r2 + sds = 0 + else: + seif = 1 + if largeArcFlag == fS: + seif = -1 + sds = seif * math.sqrt((r1x*r2y - r1x*rydd - r2y*rxdd) / (r1x*rydd + r2y*rxdd)) + + txd = sds*r1*ryd / r2 + tyd = -1 * sds*r2*rxd / r1 + tx = cpsi*txd - spsi*tyd + (rx+cx)/2 + ty = spsi*txd + cpsi*tyd + (ry+cy)/2 + rad = math.atan2((ryd-tyd)/r2, (rxd-txd)/r1) - math.atan2(0, 1) + if rad >= 0: + s1 = rad + else: + s1 = 2 * math.pi + rad + rad = math.atan2((-ryd-tyd)/r2, (-rxd-txd)/r1) - math.atan2((ryd-tyd)/r2, (rxd-txd)/r1) + if rad >= 0: + dr = rad + else: + dr = 2 * math.pi + rad + + if fS==0 and dr > 0: + dr -= 2*math.pi + elif fS==1 and dr < 0: + dr += 2*math.pi + + sse = dr * 2 / math.pi + if sse < 0: + seg = math.ceil(-1*sse) + else: + seg = math.ceil(sse) + segr = dr / seg + t = 8.0/3.0 * math.sin(segr/4) * math.sin(segr/4) / math.sin(segr/2) + cpsir1 = cpsi * r1 + cpsir2 = cpsi * r2 + spsir1 = spsi * r1 + spsir2 = spsi * r2 + mc = math.cos(s1) + ms = math.sin(s1) + x2 = rx - t * (cpsir1*ms + spsir2*mc) + y2 = ry - t * (spsir1*ms - cpsir2*mc) + + for n in range(int(math.ceil(seg))): + s1 += segr + mc = math.cos(s1) + ms = math.sin(s1) + + x3 = cpsir1*mc - spsir2*ms + tx + y3 = spsir1*mc + cpsir2*ms + ty + dx = -t * (cpsir1*ms + spsir2*mc) + dy = -t * (spsir1*ms - cpsir2*mc) + + cx1, cy1 = self.coordConv(x2,y2) + cx2, cy2 = self.coordConv(x3-dx,y3-dy) + cx3, cy3 = self.coordConv(x3,y3) + + self.epspath += " %f %f %f %f %f %f c" % (cx1, cy1, cx2, cy2, cx3, cy3) + + x2 = x3 + dx + y2 = y3 + dy + else: + # case when one radius is zero: this is a simple line + x, y = self.coordConv(cx, cy) + self.epspath += ' %f %f l' % (x, y) + +# Angel Kostadinov end + self.segmentCommands += 1 + i += 7 + self.curPoint= (cx, cy) + + elif 'z' == cmd: + self.pathExplicitClose = True + cmd = '' + else: + i += 1 + + self.endPathSegment(elem) + + if self.pathSegmentNum > 1: + self.epspath = " *u\n" + self.epspath + "\n*U " + self.epsLayers += "\n" + wrap(self.epspath, 70) + "\n" + + def elemRect(self, elem): + x = float(elem.get('x')) + y = float(elem.get('y')) + width = float(elem.get('width')) + height = float(elem.get('height')) + + # construct an svg d attribute, and call self.elemPath() + pathData = "" + rx = elem.get('rx') + ry = elem.get('ry') + if None == rx and None == ry: + rx = 0 + ry = 0 + else: + # if only one radius is given, it means both are the same + if None == rx: + rx = float(ry) + else: + rx = float(rx) + if None == ry: + ry = float(rx) + else: + ry = float(ry) + + if rx == 0 and ry == 0: + pathData = "M %f %f %f %f %f %f %f %f z" % (x,y, x+width,y, x+width, y+height, x, y+height) + else: + pathData = "M %f %f A %f %f 0 0 1 %f %f" % (x, y+ry, rx,ry, x+rx, y) + pathData += " L %f %f A %f %f 0 0 1 %f %f" % (x+width-rx, y, rx,ry, x+width, y+ry) + pathData += " L %f %f A %f %f 0 0 1 %f %f" % (x+width, y+height-ry, rx,ry, x+width-rx, y+height) + pathData += " L %f %f A %f %f 0 0 1 %f %f z" % (x+rx, y+height, rx,ry, x, y+height-ry) + self.elemPath(elem, pathData) + + + + + def attrTransform(self, matrix, transform): + """transforms matrix using svg transform attribute""" + for ttype, targs in self.reTransformFind.findall(transform): + targs = list(map(lambda x: float(x), self.reNumberFind.findall(targs))) + if ttype == 'matrix': + newmatrix = [ targs[0], targs[1], + targs[2], targs[3], + targs[4], targs[5] ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'translate': + tx = targs[0] + ty = targs[1] if len(targs) > 1 else 0 + newmatrix = [ 1, 0, 0, 1, tx, ty ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'scale': + sx = targs[0] + sy = targs[1] if len(targs) > 1 else sx + newmatrix = [ sx, 0, 0, sy, 0, 0 ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'rotate': + if len(targs) == 1: + alpha = targs[0] + newmatrix = [ math.cos(alpha), math.sin(alpha), + -math.sin(alpha), math.cos(alpha), + 0, 0] + self.matrixMul(matrix, newmatrix) + else: + alpha = targs[0] + newmatrix = [ 1, 0, 0, 1, targs[1], targs[2] ] + self.matrixMul(matrix, newmatrix) + newmatrix = [ math.cos(alpha), math.sin(alpha), + -math.sin(alpha), math.cos(alpha), + 0, 0] + self.matrixMul(matrix, newmatrix) + newmatrix = [ 1, 0, 0, 1, -targs[1], -targs[2] ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'skewX' or ttype == 'skewY': + self.alert("skewX and skewY transformations are not supported", elem) + else: + print('unknown transform type: ', ttype) + return matrix + + def elemGradient(self, elem, grType): + """handles and svg elements""" + elemId = elem.get('id') + if elemId != None: + self.curGradientId = elemId + self.gradients[elemId] = {'stops': [], 'linUseCount': 0, 'radUseCount': 0, 'type': grType} + if 'linear' == grType: + x1 = elem.get('x1') + if None != x1: + self.gradients[elemId]['x1'] = float(x1) + self.gradients[elemId]['y1'] = float(elem.get('y1')) + self.gradients[elemId]['x2'] = float(elem.get('x2')) + self.gradients[elemId]['y2'] = float(elem.get('y2')) + elif 'radial' == grType: + cx = elem.get('cx') + if None != cx: + self.gradients[elemId]['cx'] = float(cx) + self.gradients[elemId]['cy'] = float(elem.get('cy')) + self.gradients[elemId]['fx'] = float(elem.get('fx')) + self.gradients[elemId]['fy'] = float(elem.get('fy')) + self.gradients[elemId]['r'] = float(elem.get('r')) + + transform = elem.get('gradientTransform') + if None != transform: + self.gradients[elemId]['matrix'] = self.attrTransform([1, 0, 0, 1, 0, 0], transform) + + href = elem.get('{http://www.w3.org/1999/xlink}href') + if None != href: + self.gradients[elemId]['href'] = href[1:] + + + def elemStop(self, elem): + """handles (gradient stop) svg element""" + style = css2dict(elem.get('style')) + color = cssColor2Eps(style['stop-color'], 'CMYKRGB') + offset = float(elem.get('offset')) * 100 + self.gradients[self.curGradientId]['stops'].append( (offset, color) ) + + def gradientSetup(self): + """writes used gradient definitions into self.epsSetup""" + gradientNum = 0 + epsGradients = "" + for gradientId, gradient in self.gradients.items(): + + if gradient['linUseCount'] > 0: + gradientNum += 1 + epsGradients += ("\n%%AI5_BeginGradient: (l_%s)" + \ + "\n(l_%s) 0 %d Bd\n[\n") % \ + (gradientId, gradientId, len(gradient['stops'])) + gradient['stops'].sort(key=lambda x: x[0], reverse=True) + + for offset, color in gradient['stops']: + epsGradients += "%s 2 50 %f %%_Bs\n" % (color, offset) + epsGradients += "BD\n%AI5_EndGradient\n" + + if gradient['radUseCount'] > 0: + gradientNum += 1 + epsGradients += ("\n%%AI5_BeginGradient: (r_%s)" + \ + "\n(r_%s) 1 %d Bd\n[\n") % \ + (gradientId, gradientId, len(gradient['stops'])) + gradient['stops'].sort(key=lambda x: x[0]) + + for offset, color in gradient['stops']: + epsGradients += "%s 2 50 %f %%_Bs\n" % (color, offset) + epsGradients += "BD\n%AI5_EndGradient\n" + + if gradientNum > 0: + self.epsSetup += ("\n%d Bn\n" % gradientNum) + epsGradients + + + def layerStart(self, elem): + self.epsLayers += '\n\n%AI5_BeginLayer\n' + layerName = elem.get('{http://www.inkscape.org/namespaces/inkscape}label') + layerName = "".join(map(lambda x: '_' if ord(x)<32 or ord(x) > 127 else x, layerName)) + self.epsLayers += '1 1 1 1 0 0 %d 0 0 0 Lb\n(%s) Ln\n' % \ + (self.layerColor, layerName) + self.layerColor = (self.layerColor + 1) % 27 + + def elemUse(self, elem): + """handles a svg element""" + x = self.unitConv(elem.get('x'), 'uu') + if x == None: + x = 0 + y = self.unitConv(elem.get('y'), 'uu') + if y == None: + y = 0 + + if x != 0 or y != 0: + self.matrices.append( self.matrices[-1][:] ) + self.attrTransform(self.matrices[-1], "translate(%f %f)" % (x, y)) + + href = elem.get('{http://www.w3.org/1999/xlink}href') + usedElem = self.root.find(".//*[@id='%s']" % (href[1:],)) + if usedElem != None: + self.walkElem(usedElem) + else: + self.alert("used Elem not found: " + href, elem) + + if x != 0 or y != 0: + self.matrices.pop() + + # def elemNamedView(self, elem): + # """handles a svg element""" + # newDocumentUnit = elem.get('{http://www.inkscape.org/namespaces/inkscape}document-units') + # if newDocumentUnit in self.toPt and newDocumentUnit != self.documentUnit: + # if len(self.matrices) > 0: + # # recalculate scaling transformation to new document unit + # scale = self.toPt[newDocumentUnit] / self.toPt[self.documentUnit] + # self.matrices[-1][0] = scale * self.matrices[-1][0] + # self.matrices[-1][3] = scale * self.matrices[-1][3] + # self.documentUnit = newDocumentUnit + + def walkElem(self, elem): + if '}' in elem.tag: + uri, shortTag = elem.tag.split('}') + else: + shortTag = elem.tag + uri = '' + + transform = elem.get('transform') + clipPath = elem.get('clip-path') + cssNew = css2dict(elem.get('style')) + css = self.cssStack[-1].copy() + css.update(cssNew) + self.cssStack.append(css) + if self.removeInvisible: + if 'visibility' in css and (css['visibility'] == 'hidden' or css['visibility'] == 'collapse'): + return + if 'display' in css and css['display'] == 'none': + return + if shortTag in ('path', 'rect'): + if 'opacity' in css and css['opacity'] == '0': + return + stroke = False + if 'stroke' in css and 'none' != css['stroke']: + stroke = True + if 'stroke-opacity' in css and css['stroke-opacity'] == '0': + stroke = False + if 'stroke-width' in css and css['stroke-width'] == '0': + stroke = False + fill = False + if 'fill' in css and 'none' != css['fill']: + fill = True + if 'fill-opacity' in css and css['fill-opacity'] == '0': + stroke = False + if stroke == False and fill == False: + return + + + if transform != None: + self.matrices.append( self.matrices[-1][:] ) + self.attrTransform(self.matrices[-1], transform) + + if None != clipPath: + clipId = clipPath[5:-1] + clipElem = self.root.find(".//*[@id='%s']" % (clipId,)) + if clipElem == None: + self.alert('clipPath not found', elem) + clipPath = None + else: + self.epsLayers += "\nq\n" + clipPathSave= self.clipPath + self.clipPath = True + self.walkElem(clipElem) + self.clipPath = clipPathSave + self.epsLayers += ' W' + + if 'svg' == shortTag: + self.elemSvg(elem) + elif 'path' == shortTag: + # do not output paths that are in defs + # if they are referenced, they will be used there + if self.section != 'defs': + self.elemPath(elem) + elif 'rect' == shortTag: + if self.section != 'defs': + self.elemRect(elem) + elif 'linearGradient' == shortTag: + self.elemGradient(elem, 'linear') + elif 'radialGradient' == shortTag: + self.elemGradient(elem, 'radial') + elif 'stop' == shortTag: + self.elemStop(elem) + elif 'g' == shortTag: + if 'layer' == elem.get('{http://www.inkscape.org/namespaces/inkscape}groupmode'): + self.layerStart(elem) + elif None == clipPath: # clipping makes a group anyway + self.epsLayers += '\nu\n' + elif 'use' == shortTag: + self.elemUse(elem) + elif 'defs' == shortTag: + self.section = shortTag + elif 'namedview' == shortTag: + self.section = shortTag + else: + self.alert("unhandled elem: " + shortTag, elem) + + + for child in list(elem): + self.walkElem(child) + + if None != clipPath: + self.epsLayers += "\nQ\n" + + if 'g' == shortTag: + if 'layer' == elem.get('{http://www.inkscape.org/namespaces/inkscape}groupmode'): + self.epsLayers += '\nLB\n%AI5_EndLayer\n' + elif None == clipPath: + self.epsLayers += '\nU\n' + elif shortTag in ('defs', 'namedview'): + self.section = None + + if transform != None: + self.matrices.pop() + + self.cssStack.pop() + + def convert(self, svg = None): + self.alerts = {} + if None != svg: + self.svg = svg + if None == self.svg and None != self.filename: + fd = open(self.filename, 'rb') + self.svg = fd.read() + fd.close() + + self.autoClose = True # TODO: make it optional + self.removeInvisible = True # TODO: make it optional + self.removeStrayPoints = True # TODO: make it optional + # if last point of a path is further from first point, then an explicit + # 'lineto' is written to the first point before 'closepath' + self.closeDist = 0.1 + self.matrices = [[1, 0, 0, 1, 0, 0]] + self.cssStack = [{}] + self.gradients = {} + self.docHeight = 400 + self.docWidth = 400 + self.layerColor = 0 + self.section = None + self.clipPath = False + self.epsComments = """%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: tzunghaor svg2eps +%%Pages: 1 +%%DocumentData: Clean7Bit +%%LanguageLevel: 3 +%%DocumentNeededResources: procset Adobe_Illustrator_AI5 1.3 0 +%AI5_FileFormat 3 +""" + # TODO: creation date, user etc + + self.epsProlog = """%%BeginProlog +100 dict begin +/tzung_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +/Adobe_Illustrator_AI5 where +{ pop } { + /tzung_strokergb [ 0 0 0 ] def + /tzung_compound 0 def + /tzung_closeop { S } def + /tzung_fillrule 0 def + + /*u { /tzung_compound 1 def newpath /tzung_fillrule 0 def } bind def + /*U { /tzung_compound 0 def tzung_closeop } bind def + /u {} bind def + /U {} bind def + + /q { clipsave } bind def + /Q { cliprestore } bind def + /W { clip } bind def + + /Lb { 10 {pop} repeat } bind def + /Ln {pop} bind def + /LB {} bind def + + + /w { setlinewidth } bind def + /J { setlinecap } bind def + /j { setlinejoin } bind def + /M { setmiterlimit } bind def + /d { setdash } bind def + + /m { tzung_compound 0 eq { newpath /tzung_fillrule 0 def } if moveto } bind def + /l { lineto } bind def + /c { curveto } bind def + + /XR { /tzung_fillrule exch def } bind def + /Xa { setrgbcolor } bind def + /XA { 3 array astore /tzung_strokergb exch def } bind def + + + /F { tzung_compound 0 eq { + tzung_fillrule 0 eq { fill } { eofill } ifelse + } { + /tzung_closeop {F} def + } ifelse } bind def + /f { closepath F } bind def + /S { tzung_compound 0 eq { + tzung_strokergb aload pop setrgbcolor stroke + } { + /tzung_closeop {S} def + } ifelse } bind def + /s { closepath S } bind def + + /B { tzung_compound 0 eq { + gsave + tzung_fillrule 0 eq { fill } { eofill } ifelse + grestore + tzung_strokergb aload pop setrgbcolor stroke + } { + /tzung_closeop {B} def + } ifelse } bind def + /b { closepath B } bind def + /H { tzung_compound 0 eq { + }{ + /tzung_closeop {H} def + } ifelse} bind def + /h { closepath } bind def + /N { tzung_compound 0 eq { + }{ + /tzung_closeop {N} def + } ifelse} bind def + /n { closepath N } bind def + + + /Bn { /dict_gradients exch dict def} bind def + /Bd { /tmp_ngradstop exch def /tmp_shadingtype exch def } bind def %leaves gradient name in stack + /BD { ] % this handles only stops that have CMYKRGB color definitions + % linear gradient stops must be in reverse order, radials in normal order + aload + pop + /tmp_boundaries tmp_ngradstop array def + /tmp_colors tmp_ngradstop array def + tmp_shadingtype 0 eq { + 0 1 tmp_ngradstop 1 sub % for i=0; i<= number of gradient stops - 1; i++ + } { + tmp_ngradstop 1 sub -1 0 % for i=number of gradient stops - 1; i >= 0; i++ + } ifelse + { + /loopvar exch def + 100 div + tmp_boundaries loopvar + 3 -1 roll put % obj array i => array i obj + pop % assume gradient middle is always 50 + pop % assume color type is always 2 (CMYKRGB) + 3 array astore + tmp_colors loopvar + 3 -1 roll put + pop pop pop pop % drop CMYK values + } for + + tmp_ngradstop 2 eq { + /tmp_function 5 dict def + tmp_boundaries 0 get tmp_boundaries 1 get 2 array astore + tmp_function /Domain 3 -1 roll put + tmp_function /FunctionType 2 put + tmp_function /C0 tmp_colors 0 get put + tmp_function /C1 tmp_colors 1 get put + tmp_function /N 1 put + + } { + /tmp_functions tmp_ngradstop 1 sub array def + + 0 1 tmp_ngradstop 2 sub { + /loopvar exch def + /tmp_function 5 dict def + tmp_function /Domain [0 1] put + tmp_function /FunctionType 2 put + tmp_function /C0 tmp_colors loopvar get put + tmp_function /C1 tmp_colors loopvar 1 add get put + tmp_function /N 1 put + tmp_functions loopvar tmp_function put + } for + + + /tmp_function 5 dict def + tmp_boundaries 0 get tmp_boundaries tmp_ngradstop 1 sub get 2 array astore + tmp_function /Domain 3 -1 roll put + tmp_function /FunctionType 3 put + tmp_boundaries aload pop + tmp_ngradstop -1 roll pop pop % remove first and last bounds + tmp_ngradstop 2 sub array astore + tmp_function /Bounds 3 -1 roll put + tmp_function /Functions tmp_functions put + + tmp_ngradstop 1 sub { + 0 1 + } repeat + tmp_ngradstop 1 sub 2 mul array astore + tmp_function /Encode 3 -1 roll put + + } ifelse + + /tmp_shading 6 dict def + tmp_shadingtype 0 eq { + tmp_shading /ShadingType 2 put + tmp_shading /Coords [ 0 0 1 0 ] put + } { + tmp_shading /ShadingType 3 put + tmp_shading /Coords [ 0 0 0 0 0 1 ] put + } ifelse + tmp_shading /ColorSpace /DeviceRGB put + tmp_shading /Domain [0 1] put + tmp_shading /Extend[ true true] put + tmp_shading /Function tmp_function put + + /tmp_gradient 2 dict def + tmp_gradient /PatternType 2 put + tmp_gradient /Shading tmp_shading put + + dict_gradients exch tmp_gradient put % gradient's name is on the top of the stack from Bd operator + + } bind def + /Lb { 10 { pop } repeat } bind def + /Ln { pop } bind def + /Bb { } bind def + + /Bg { + 6 { pop } repeat + gsave + 4 2 roll + translate + exch + rotate + dup scale + exch pop % remove Bg flag + dict_gradients exch get % now gradient name is on top of the stack + [ 1 0 0 1 0 0 ] + makepattern + /pattern_tmp exch def + grestore + pattern_tmp setpattern + gsave % save for after pattern fil for possible stroke + } def + /BB { grestore 2 eq { s } if } bind def + /LB { } bind def + +} ifelse +""" + self.epsSetup = """%%BeginSetup +/Adobe_Illustrator_AI5 where +{ + pop + Adobe_Illustrator_AI5 /initialize get exec +} if +""" + self.epsLayers = "" + self.epsTrailer = """%%Trailer +showpage +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +tzung_eps_state restore +end +%%EOF +""" + + + self.root = ET.fromstring(self.svg) + self.walkElem(self.root) + self.gradientSetup() + + sizeComment = "%%%%BoundingBox: 0 0 %d %d\n" % (math.ceil(self.docWidth), math.ceil(self.docHeight)) + sizeComment += "%%%%HiResBoundingBox: 0 0 %f %f\n" % (self.docWidth, self.docHeight) + sizeComment += "%%AI5_ArtSize: %f %f\n" % (self.docWidth, self.docHeight) + pagesetup = """%%%%Page: 1 1 +%%%%BeginPageSetup +%%%%PageBoundingBox: 0 0 %d %d +%%%%EndPageSetup +""" % (self.docWidth, self.docHeight) + + eps = self.epsComments + sizeComment + "%%EndComments\n\n" + eps += self.epsProlog + "\n%%EndProlog\n\n" + eps += self.epsSetup + "\n%%EndSetup\n\n" + eps += pagesetup + self.epsLayers + "\n\n" + eps += self.epsTrailer + + return eps + +import sys + +if len(sys.argv) < 2: + print("missing filename") + exit(1) + +converter = svg2eps(sys.argv[1]) + +print(converter.convert()) +#TODO: show alerts in dialogbox +#converter.showAlerts() diff --git a/fablabchemnitz_apollon.py b/fablabchemnitz_apollon.py new file mode 100644 index 0000000..0712f2a --- /dev/null +++ b/fablabchemnitz_apollon.py @@ -0,0 +1,195 @@ +#!/usr/bin/python3 + +# Generate Apollonian Gaskets -- the math part. + +# Copyright (c) 2014 Ludger Sandig +# This file is part of apollon. + +# Apollon is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# Apollon is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with Apollon. If not, see . + +from cmath import * +import random + +class Circle(object): + """ + A circle represented by center point as complex number and radius. + """ + def __init__ ( self, mx, my, r ): + """ + @param mx: x center coordinate + @type mx: int or float + @param my: y center coordinate + @type my: int or float + @param r: radius + @type r: int or float + """ + self.r = r + self.m = (mx +my*1j) + + def __repr__ ( self ): + """ + Pretty printing + """ + return "Circle( self, %s, %s, %s )" % (self.m.real, self.m.imag, self.r) + + def __str__ ( self ): + """ + Pretty printing + """ + return "Circle x:%.3f y:%.3f r:%.3f [cur:%.3f]" % (self.m.real, self.m.imag, self.r.real, self.curvature().real) + + def curvature (self): + """ + Get circle's curvature. + @rtype: float + @return: Curvature of the circle. + """ + return 1/self.r + +def outerTangentCircle( circle1, circle2, circle3 ): + """ + Takes three externally tangent circles and calculates the fourth one enclosing them. + @param circle1: first circle + @param circle2: second circle + @param circle3: third circle + @type circle1: L{Circle} + @type circle2: L{Circle} + @type circle3: L{Circle} + @return: The enclosing circle + @rtype: L{Circle} + """ + cur1 = circle1.curvature() + cur2 = circle2.curvature() + cur3 = circle3.curvature() + m1 = circle1.m + m2 = circle2.m + m3 = circle3.m + cur4 = -2 * sqrt( cur1*cur2 + cur2*cur3 + cur1 * cur3 ) + cur1 + cur2 + cur3 + m4 = ( -2 * sqrt( cur1*m1*cur2*m2 + cur2*m2*cur3*m3 + cur1*m1*cur3*m3 ) + cur1*m1 + cur2*m2 + cur3*m3 ) / cur4 + circle4 = Circle( m4.real, m4.imag, 1/cur4 ) + + return circle4 + + +def tangentCirclesFromRadii( r2, r3, r4 ): + """ + Takes three radii and calculates the corresponding externally + tangent circles as well as a fourth one enclosing them. The enclosing + circle is the first one. + + @param r2, r3, r4: Radii of the circles to calculate + @type r2: int or float + @type r3: int or float + @type r4: int or float + @return: The four circles, where the first one is the enclosing one. + @rtype: (L{Circle}, L{Circle}, L{Circle}, L{Circle}) + """ + circle2 = Circle( 0, 0, r2 ) + circle3 = Circle( r2 + r3, 0, r3 ) + m4x = (r2*r2 + r2*r4 + r2*r3 - r3*r4) / (r2 + r3) + m4y = sqrt( (r2 + r4) * (r2 + r4) - m4x*m4x ) + circle4 = Circle( m4x, m4y, r4 ) + circle1 = outerTangentCircle( circle2, circle3, circle4 ) + return ( circle1, circle2, circle3, circle4 ) + +def secondSolution( fixed, c1, c2, c3 ): + """ + If given four tangent circles, calculate the other one that is tangent + to the last three. + + @param fixed: The fixed circle touches the other three, but not + the one to be calculated. + + @param c1, c2, c3: Three circles to which the other tangent circle + is to be calculated. + + @type fixed: L{Circle} + @type c1: L{Circle} + @type c2: L{Circle} + @type c3: L{Circle} + @return: The circle. + @rtype: L{Circle} + """ + + curf = fixed.curvature() + cur1 = c1.curvature() + cur2 = c2.curvature() + cur3 = c3.curvature() + + curn = 2 * (cur1 + cur2 + cur3) - curf + mn = (2 * (cur1*c1.m + cur2*c2.m + cur3*c3.m) - curf*fixed.m ) / curn + return Circle( mn.real, mn.imag, 1/curn ) + +class ApollonianGasket(object): + """ + Container for an Apollonian Gasket. + """ + def __init__(self, c1, c2, c3): + """ + Creates a basic apollonian Gasket with four circles. + + @param c1, c2, c3: The curvatures of the three inner circles of the + starting set (i.e. depth 0 of the recursion). The fourth, + enclosing circle will be calculated from them. + @type c1: int or float + @type c2: int or float + @type c3: int or float + """ + self.start = tangentCirclesFromRadii( 1/c1, 1/c2, 1/c3 ) + self.genCircles = list(self.start) + + def recurse(self, circles, depth, maxDepth): + """Recursively calculate the smaller circles of the AG up to the + given depth. Note that for depth n we get 2*3^{n+1} circles. + + @param maxDepth: Maximal depth of the recursion. + @type maxDepth: int + + @param circles: 4-Tuple of circles for which the second + solutions are calculated + @type circles: (L{Circle}, L{Circle}, L{Circle}, L{Circle}) + + @param depth: Current depth + @type depth: int + """ + if( depth == maxDepth ): + return + (c1, c2, c3, c4) = circles + if( depth == 0 ): + # First recursive step, this is the only time we need to + # calculate 4 new circles. + del self.genCircles[4:] + cspecial = secondSolution( c1, c2, c3, c4 ) + self.genCircles.append( cspecial ) + self.recurse( (cspecial, c2, c3, c4), 1, maxDepth ) + + cn2 = secondSolution( c2, c1, c3, c4 ) + self.genCircles.append( cn2 ) + cn3 = secondSolution( c3, c1, c2, c4 ) + self.genCircles.append( cn3 ) + cn4 = secondSolution( c4, c1, c2, c3 ) + self.genCircles.append( cn4 ) + + self.recurse( (cn2, c1, c3, c4), depth+1, maxDepth ) + self.recurse( (cn3, c1, c2, c4), depth+1, maxDepth ) + self.recurse( (cn4, c1, c2, c3), depth+1, maxDepth ) + + def generate(self, depth): + """ + Wrapper for the recurse function. Generate the AG, + @param depth: Recursion depth of the Gasket + @type depth: int + """ + self.recurse(self.start, 0, depth) + diff --git a/fablabchemnitz_apollonian.inx b/fablabchemnitz_apollonian.inx new file mode 100644 index 0000000..f76d123 --- /dev/null +++ b/fablabchemnitz_apollonian.inx @@ -0,0 +1,60 @@ + + + + <_name>Apollonian Gasket + + fablabchemnitz.de.apollonian + + fablabchemnitz_apollonian.py + simplestyle.py + + + + + + 3 + <_param name="curvatures" type="description" xml:space="preserve">------------------------------ + 2.0 + 3.0 + 3.0 + <_param name="help" type="description" xml:space="preserve">------------------------------ + true + + + + + + <_param name="use1" type="description" xml:space="preserve"> + Make an apollonian gasket: + + Depth = depth in search tree + + c1,c2,c3 = curvatures of first 3 osculating circles + + See https://en.wikipedia.org/wiki/Apollonian_gasket + for details of construction. + + + + + <_param name="use2" type="description" xml:space="preserve"> + No help needed. + + + + + + + all + + + + + + + + + + diff --git a/fablabchemnitz_apollonian.py b/fablabchemnitz_apollonian.py new file mode 100644 index 0000000..01caa36 --- /dev/null +++ b/fablabchemnitz_apollonian.py @@ -0,0 +1,153 @@ +#!$HOME/anaconda/bin/python +# -*- coding: utf-8 -*- +''' +Ripped from template.py +- makes an apollonian gasket +''' + +import inkex # Required +import simplestyle # will be needed here for styles support +import fablabchemnitz_apolloniangasket_func + +__version__ = '0.0' + +inkex.localize() + + +### Your helper functions go here + + +def cplxs2pts(zs): + tt = [] + for z in zs: + tt.extend([z.real,z.imag]) + return tt + + +def draw_SVG_circle(parent, r, cx, cy, name): + " structre an SVG circle entity under parent " + circ_attribs = { 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'): name} + + + circle = inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + +class Myextension(inkex.Effect): # choose a better name + + def __init__(self): + " define how the options are mapped from the inx file " + inkex.Effect.__init__(self) # initialize the super class + + + # list of parameters defined in the .inx file + self.OptionParser.add_option("-d", "--depth", + action="store", type="int", + dest="depth", default=3, + help="command line help") + + self.OptionParser.add_option("", "--c1", + action="store", type="float", + dest="c1", default=2.0, + help="command line help") + + self.OptionParser.add_option("", "--c2", + action="store", type="float", + dest="c2", default=3.0, + help="command line help") + + self.OptionParser.add_option("", "--c3", + action="store", type="float", + dest="c3", default=3.0, + help="command line help") + + + self.OptionParser.add_option("-x", "--shrink", + action="store", type="inkbool", + dest="shrink", default=True, + help="command line help") + + # here so we can have tabs - but we do not use it directly - else error + self.OptionParser.add_option("", "--active-tab", + action="store", type="string", + dest="active_tab", default='title', # use a legitmate default + help="Active tab.") + + + + def calc_unit_factor(self): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + # namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')) + # doc_units = self.getUnittouu(str(1.0) + namedView.get(inkex.addNS('document-units', 'inkscape'))) + unit_factor = self.getUnittouu(str(1.0) + self.options.units) + return unit_factor + + +### ------------------------------------------------------------------- +### Main function and is called when the extension is run. + + + def effect(self): + + #set up path styles + path_stroke = '#DD0000' # take color from tab3 + path_fill = 'none' # no fill - just a line + path_stroke_width = 1. # can also be in form '0.6mm' + page_id = self.options.active_tab # sometimes wrong the very first time + + style_curve = { 'stroke': path_stroke, + 'fill': 'none', + 'stroke-width': path_stroke_width } + + + # This finds center of current view in inkscape + t = 'translate(%s,%s)' % (self.view_center[0], self.view_center[1] ) + + # add a group to the document's current layer + #all the circles inherit style from this group + g_attribs = { inkex.addNS('label','inkscape'): 'zengon' + "_%d"%(self.options.depth), + inkex.addNS('transform-center-x','inkscape'): str(0), + inkex.addNS('transform-center-y','inkscape'): str(0), + 'transform': t, + 'style' : simplestyle.formatStyle(style_curve), + 'info':'N: '} + topgroup = inkex.etree.SubElement(self.current_layer, 'g', g_attribs ) + + + circles = fablabchemnitz_apolloniangasket_func.main(c1=self.options.c1, + c2=self.options.c2, + c3=self.options.c3, + depth=self.options.depth) + + #shrink the circles so they don't touch + #useful for laser cutting + + if self.options.shrink: + circles = circles[1:] + for cc in circles: + cc.r = abs(cc.r) + if cc.r >.5: + cc.r -= .1 + else: + cc.r *= .9 + + scale_factor = 200 + for c in circles: + cx, cy, r = c.m.real, c.m.imag, abs(c.r) + + #rescale and add circle to document + cx, cy, r = scale_factor*cx , scale_factor*cy, scale_factor*r + draw_SVG_circle(topgroup,r,cx,cy,'apo') + + + + +if __name__ == '__main__': + e = Myextension() + e.affect() + + diff --git a/fablabchemnitz_apolloniangasket_func.py b/fablabchemnitz_apolloniangasket_func.py new file mode 100644 index 0000000..cf34764 --- /dev/null +++ b/fablabchemnitz_apolloniangasket_func.py @@ -0,0 +1,125 @@ +#! /usr/bin/python3 + +# Command line program to create svg apollonian circles + +# Copyright (c) 2014 Ludger Sandig +# This file is part of apollon. + +# Apollon is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# Apollon is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with Apollon. If not, see . + + + +#import sys +import math + +from fablabchemnitz_apollon import ApollonianGasket +#from coloring import ColorMap, ColorScheme + + + + +def ag_to_svg(circles, colors, tresh=0.00005): + """ + Convert a list of circles to svg, optionally color them. + @param circles: A list of L{Circle}s + @param colors: A L{ColorMap} object + @param tresh: Only circles with a radius greater than the product of tresh and maximal radius are saved + """ + svg = [] + + tresh = .000005 + print '>>', tresh + + # Find the biggest circle, which hopefully is the enclosing one + # and has a negative radius because of this. Note that this does + # not have to be the case if we picked an unlucky set of radii at + # the start. If that was the case, we're screwed now. + + big = min(circles, key=lambda c: c.r.real) + + # Move biggest circle to front so it gets drawn first + circles.remove(big) + circles.insert(0, big) + + if big.r.real < 0: + # Bounding box from biggest circle, lower left corner and two + # times the radius as width + corner = big.m - ( abs(big.r) + abs(big.r) * 1j ) + vbwidth = abs(big.r)*2 + width = 500 # Hardcoded! + + # Line width independent of circle size + lw = (vbwidth/width) + + svg.append('\n' % (width, width, corner.real, corner.imag, vbwidth, vbwidth)) + + # Keep stroke width relative + svg.append('\n' % lw) + + # Iterate through circle list, circles with radius radmin: + fill = colors.color_for(abs(c.r)) + svg.append(( '\n' % (c.m.real, c.m.imag, abs(c.r), fill))) + + svg.append('\n') + svg.append('\n') + + return ''.join(svg) + +def impossible_combination(c1, c2, c3): + # If any curvatures x, y, z satisfy the equation + # x = 2*sqrt(y*z) + y + z + # then no fourth enclosing circle can be genereated, because it + # would be a line. + # We need to see for c1, c2, c3 if they could be "x". + + impossible = False + + sets = [(c1,c2,c3), (c2,c3,c1), (c3,c1,c2)] + + for (x, y, z) in sets: + if x == 2*math.sqrt(y*z) + y + z: + impossible = True + + return impossible + +def main(c1=3.,c2=2.,c3=2.,depth=5): + + + # Sanity checks + for c in [c1, c2,c3]: + if c == 0: + print("Error: curvature or radius can't be 0") + exit(1) + if impossible_combination(c1, c2, c3): + print("Error: no apollonian gasket possible for these curvatures") + exit(1) + + + ag = ApollonianGasket(c1, c2, c3) + + ag.generate(depth) + + # Get smallest and biggest radius + smallest = abs(min(ag.genCircles, key=lambda c: abs(c.r.real)).r.real) + biggest = abs(max(ag.genCircles, key=lambda c: abs(c.r.real)).r.real) + + return ag.genCircles + + diff --git a/fablabchemnitz_applytransform.inx b/fablabchemnitz_applytransform.inx new file mode 100644 index 0000000..8466c28 --- /dev/null +++ b/fablabchemnitz_applytransform.inx @@ -0,0 +1,21 @@ + + + <_name>Apply Transformations + fablabchemnitz.de.applytransform + fablabchemnitz_applytransform.py + inkex.py + simplestyle.py + simpletransform.py + cubicsuperpath.py + + all + + + + + + + + diff --git a/fablabchemnitz_applytransform.py b/fablabchemnitz_applytransform.py new file mode 100644 index 0000000..efd89da --- /dev/null +++ b/fablabchemnitz_applytransform.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python2 +# +# License: GPL2 +# Copyright Mark "Klowner" Riedesel +# https://github.com/Klowner/inkscape-applytransforms +# +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import inkex +import cubicsuperpath +import math +import simplestyle +from simpletransform import composeTransform, fuseTransform, parseTransform, applyTransformToPath, applyTransformToPoint, formatTransform + +class ApplyTransform(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + def effect(self): + self.getselected() + + if self.selected: + for id, shape in self.selected.items(): + self.recursiveFuseTransform(shape, parseTransform(None)) + else: + self.recursiveFuseTransform(self.document.getroot(), parseTransform(None)) + + @staticmethod + def objectToPath(node): + if node.tag == inkex.addNS('g', 'svg'): + return node + + if node.tag == inkex.addNS('path', 'svg') or node.tag == 'path': + for attName in node.attrib.keys(): + if ("sodipodi" in attName) or ("inkscape" in attName): + del node.attrib[attName] + return node + + return node + + def scaleStrokeWidth(self, node, transf): + if 'style' in node.attrib: + style = node.attrib.get('style') + style = simplestyle.parseStyle(style) + update = False + + if 'stroke-width' in style: + try: + stroke_width = self.unittouu(style.get('stroke-width').strip()) + # pixelsnap ext assumes scaling is similar in x and y + # and uses the x scale... + # let's try to be a bit smarter + # the least terrible option is using the geometric mean + stroke_width *= math.sqrt(transf[0][0] * transf[1][1]) + style['stroke-width'] = str(stroke_width) + update = True + except AttributeError: + pass + + if update: + style = simplestyle.formatStyle(style) + node.attrib['style'] = style + + def recursiveFuseTransform(self, node, transf=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + transf = composeTransform(transf, parseTransform(node.get("transform", None))) + + if 'transform' in node.attrib: + del node.attrib['transform'] + + node = ApplyTransform.objectToPath(node) + + if 'd' in node.attrib: + d = node.get('d') + p = cubicsuperpath.parsePath(d) + applyTransformToPath(transf, p) + node.set('d', cubicsuperpath.formatPath(p)) + + self.scaleStrokeWidth(node, transf) + + elif node.tag in [inkex.addNS('polygon', 'svg'), + inkex.addNS('polyline', 'svg')]: + points = node.get('points') + points = points.strip().split(' ') + for k,p in enumerate(points): + if ',' in p: + p = p.split(',') + p = [float(p[0]),float(p[1])] + applyTransformToPoint(transf, p) + p = [str(p[0]),str(p[1])] + p = ','.join(p) + points[k] = p + points = ' '.join(points) + node.set('points', points) + + self.scaleStrokeWidth(node, transf) + + elif node.tag in [inkex.addNS('rect', 'svg'), + inkex.addNS('text', 'svg'), + inkex.addNS('image', 'svg'), + inkex.addNS('use', 'svg'), + inkex.addNS('circle', 'svg')]: + node.set('transform', formatTransform(transf)) + + else: + # e.g. + self.scaleStrokeWidth(node, transf) + + for child in node.getchildren(): + self.recursiveFuseTransform(child, transf) + + +if __name__ == '__main__': + e = ApplyTransform() + e.affect() diff --git a/fablabchemnitz_arakne_xy.py b/fablabchemnitz_arakne_xy.py new file mode 100644 index 0000000..0fda9d2 --- /dev/null +++ b/fablabchemnitz_arakne_xy.py @@ -0,0 +1,295 @@ +#!/usr/bin/env python +''' +shapes.py + +Copyright (C) 2015 Paco Garcia, www.arakne.es + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +----------------------- + +''' +# standard library +import locale, os, sys, tempfile, webbrowser, math +import inkex, simplestyle, simpletransform + + +def info(s, newLine="\n"): + sys.stderr.write(s.encode("UTF-8") + newLine) + +def tern(condition,val1,val2): + return val1 if condition else val2 + +class XY: + """A class for creating Inkscape SVG Effects""" + def __init__(self, *args, **kwargs): + self.co=[0.0,0.0] + lArgs=len(args) + if lArgs>0: + if lArgs==1: + if type(args[0]==XY): + self.co=args[0].co + else: + self.co=[args[0],args[0]] + if lArgs>1: + self.co=[args[0],args[1]] + def __add__(self,xy): + co=[self.co[0] + xy.co[0],self.co[1] + xy.co[1]] + self.co = co + return self + def __sub__(self,xy): + self.co=[self.co[0] - xy.co[0], self.co[1] - xy.co[1]] + return self + def __eq__(self,xy): + return (self.co[0] == xy.x and self.co[1] == xy.y) + + def sub(self,xy): + #self.co=[self.co[0] - xy.co[0],self.co[1] - xy.co[1]] + self.__sub__(xy) + return self + def mul(self,xy): + if type(xy)==XY: + co=[self.co[0] * xy.co[0],self.co[1] * xy.co[1]] + else: + co=[self.co[0] * xy,self.co[1] * xy] + self.co = co + return self + def div(self,xy): + if type(xy)==XY: + co=[self.co[0] / xy.co[0],self.co[1] / xy.co[1]] + else: + co=[self.co[0] / xy, self.co[1] / xy] + self.co = co + return self + def vlength(self): + return math.sqrt((self.co[0]*self.co[0])+(self.co[1]*self.co[1])) + + def rot(self,ang): + x,y,sa,ca= (self.co[0], self.co[1], math.sin(ang), math.cos(ang)) + self.co=[ca * x - sa * y, sa * x + ca * y] + return self + + def Rot(self,p,r): + self.co=[math.cos(r)*p,math.sin(r)*p] + return self + + def rotate(self,rot,cX=0.0,cY=0.0): + px = cX + (self.x-cX) * math.cos(rot) - (self.y-cY)*math.sin(rot) + py = cY + (self.x-cX) * math.sin(rot) + (self.y-cY)*math.cos(rot) + self.co = [px,py] + return self + def rotateD(self,rot,cX=0.0,cY=0.0): + self.rotate(math.radians(rot),cX,cY) + return self + def VDist(self,V2): + tmp = XY(self.co[0],self.co[1]) + tmp = tmp.sub(V2) + return tmp.vlength() + def st(self): + return str(self.co[0])+','+str(self.co[1]) + @property + def x(self): + return self.co[0] + @property + def y(self): + return self.co[1] + def hipo(self,xy): + return math.sqrt( math.pow(self.x-xy.x,2) + math.pow(self.y-xy.y,2) ) + def angBetween2Lines(self,p1,p2): # pC punto comun + return math.atan2(self.y - p1.y, self.x - p1.x) - math.atan2(self.y - p2.y, self.x - p2.x) + def getAngle(self,b): + return math.atan2(b.y - self.y, b.x - self.x) + def getAngleD(self,b): + return math.degrees(math.atan2(b.y - self.y, b.x - self.x)) + +# ________________________________________________________________ +# ________________________________________________________________ +# ________________________________________________________________ +class bezpnt(object): + def __init__(self,pfixed=None,pprev=None,pnext=None): + if isinstance(pfixed, list): + self.fixed = XY(pfixed[0],pfixed[1]) + else: + self.fixed = pfixed + if isinstance(pprev, list): + self.prev = XY(pprev[0],pprev[1]) + else: + self.prev = pprev + if isinstance(pnext, list): + self.next = XY(pnext[0],pnext[1]) + else: + self.next = pnext + return + + def translate(self,x,y): + self.fixed + XY(x,y) + if self.prev!=None:self.prev + XY(x,y) + if self.next!=None:self.next + XY(x,y) + return self + def scale(self,x=1.0,y=1.0): + self.fixed.scale(x,y) + if self.prev!=None:self.prev.scale(x,y) + if self.next!=None:self.next.scale(x,y) + return self + def rotate(self,rot,cX=0.0,cY=0.0): + self.fixed.rotate(rot,cX,cY) + if self.prev!=None:self.prev.rotate(rot,cX,cY) + if self.next!=None:self.next.rotate(rot,cX,cY) + return self + def skew(self,rotx,roty,cX=0.0,cY=0.0): + self.fixed.skew(rotx,roty,cX,cY) + if self.prev!=None:self.prev.skew(rotx,roty,cX,cY) + if self.next!=None:self.next.skew(rotx,roty,cX,cY) + return self + def copy(self,bez2): + try: + self.fixed=XY().copy(bez2.fixed) + self.prev = None if bez2.prev == None else XY().copy(bez2.prev) + self.next = None if bez2.next == None else XY().copy(bez2.next) + except Exception,e: + gimp.message(str(e)) + return self + def arrXY(self): + pts=[] + if self.prev == None: + pts+=self.fixed.arrXY(1) + else: + pts+=self.prev.arrXY(1) + pts+=self.fixed.arrXY(1) + if self.next==None: + pts+=self.fixed.arrXY(1) + else: + pts+=self.next.arrXY(1) + return pts + def Prev(self): + p = self.prev + if p==None: p=self.fixed + return p + def Next(self): + p = self.next + if p==None: p=self.fixed + return p + def Fixed(self): + return self.fixed + def flip(self): + p=self.prev + n=self.next + self.prev=n + self.next=p + +def createSmallArcBez(r, a1, a2,rot): + a = (a2 - a1) * 0.5 + p4 = XY(r * math.cos(a), r * math.sin(a)) + p1 = XY(p4.x, -p4.y) + k = 0.5522847498 + f = k * math.tan(a) + p2 = XY(p1.x + f * p4.y, p1.y + f * p4.x) + p3 = XY(p2.x,-p2.y) + ar = a + a1 + P1 = XY(r * math.cos(a1), r * math.sin(a1)).rotate(rot) + P2 = XY(p2.x, p2.y).rotate(ar).rotate(rot) + P3 = XY(p3.x, p3.y).rotate(ar).rotate(rot) + P4 = XY(r * math.cos(a2),r * math.sin(a2)).rotate(rot) + B1=bezpnt(P1,None,P2) + B2=bezpnt(P4,P3) + return [B1,B2] + +def createArcBez(rad, sAng, eAng): + EPSILON = 0.0000000001 + bezs =[] + if eAng < sAng: + eAng += 360.0 + sAng = math.radians(sAng) + eAng = math.radians(eAng) + rot = sAng + sAng = math.radians(0) + eAng = eAng - rot + pi2 = math.pi * 2 + sAng, eAng = (sAng % pi2, eAng % pi2) + pi_2 = math.pi * 0.5 + sign = 1 if (sAng < eAng) else -1 + a1 = sAng + totAng = min(math.pi * 2, abs(eAng - sAng)) + while (totAng > EPSILON): + a2 = a1 + sign * min(totAng, pi_2) + bezs.extend(createSmallArcBez(rad, a1, a2,rot)) + totAng = totAng - abs(a2 - a1) + a1 = a2 + return bezs + +def bezs2XYList(arc1,transform = None): + pnts=[] + bezs=[] + for aa in arc1: + if aa.prev != None: + bezs.append(XY(aa.prev)) + bezs.append(XY(aa.fixed)) + if aa.next!=None: + bezs.append(XY(aa.next)) + for i in range(len(bezs)): + v = bezs[i] + if transform: + v = v + transform + if i == 0: + pnts.append(v) + else: + v2=pnts[-1] + if (v2.x != v.x or v2.y != v.y): + pnts.append(XY(v)) + a=len(pnts) + return pnts + +def XYList(lst, rot = 0.0, add = None): + verts=[] + for nn in range(len(lst)): + v = lst[nn] + if rot != 0.0: v = v.rotate(rot) + if add: v = v + add + verts.append([v.x,v.y]) + return verts + +def XYListSt(lst, rot = 0.0, add = None): + D2 = "" + for nn in range(len(lst)): + v = lst[nn] + if rot != 0.0: v = v.rotate(rot) + if add: v = v + add + D2 += "%s%s " % (tern(nn==1,"C",""), v.st()) + return D2 + +# circle by quadrants, A: 0>90, B: 90>180, C: 180>270, D: 270>360 +def circQ(p,r,abcd="ABCD",inverse=0,xtra=None): + aa = r * 0.551915024494 + parts={ + 'A':[XY(0,-r),XY(aa,-r), XY(r, -aa),XY(r,0)], + 'B':[XY(r,0), XY(r, aa), XY(aa, r),XY(0,r)], + 'C':[XY(0,r), XY(-aa,r), XY(-r, aa),XY(-r,0)], + 'D':[XY(-r,0),XY(-r,-aa),XY(-aa,-r),XY(0,-r)]} + #pA = parts[abcd[0]] + pA = [XY(p)+N for N in parts[abcd[0]]] + for aa in abcd[1:]: + pA = pA + [XY(p)+N for N in parts[aa][1:]] + if inverse==1: pA.reverse() + listA = XYList(pA) + if xtra: + for n in xtra: + listA[n].extend(xtra[n]) + return listA + +def circleInCircle(c1,r1,c2,r2): + d = c1.hipo(c2) + return tern((r1 > (d + r2)),True,False) + +# 243 \ No newline at end of file diff --git a/fablabchemnitz_blobs.inx b/fablabchemnitz_blobs.inx new file mode 100644 index 0000000..347d113 --- /dev/null +++ b/fablabchemnitz_blobs.inx @@ -0,0 +1,33 @@ + + + <_name>Blobs Texture + fablabchemnitz.de.blobs + fablabchemnitz_blobs.py + inkex.py + + + <_param name="h" type="description">Fills a box with blobs. + 10 + 1000 + 1000 + + + <_param name="h2" type="description">Each blob. + 10 + 50. + 0. + 0.3 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_blobs.py b/fablabchemnitz_blobs.py new file mode 100644 index 0000000..75b5937 --- /dev/null +++ b/fablabchemnitz_blobs.py @@ -0,0 +1,228 @@ +#!/usr/bin/env python + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import math + +import inkex + +from simplestyle import * + +import random + +class blobsEffect(inkex.Effect): + """ +Creates a random blob from a convex hull over n points. +The expected degree of the polygon is sqrt(n). The corners +are blunted by the blunt parameter. 0 means sharp. 1 will +result in loopy splines. + """ + def __init__(self): + """ + Constructor. + Defines the parms option of a script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # Define string option "--what" with "-w" shortcut and default "World". + + self.OptionParser.add_option('-n', '--num', action = 'store', + type = 'int', dest = 'num', default = 25, + help = 'Number of random points to start with') + + self.OptionParser.add_option('-b', '--blunt', action = 'store', + type = 'float', dest = 'blunt', default = 0.3, + help = 'Bluntness of corners. Should be < 1') + + self.OptionParser.add_option('-c', '--cave', action = 'store', + type = 'float', dest = 'cave', default = 0.0, + help = 'Concavity. Less blobby and more splatty') + + self.OptionParser.add_option('-x', '--rx', action = 'store', + type = 'int', dest = 'rx', default = 1000, + help = 'Size of work area x') + + self.OptionParser.add_option('-y', '--ry', action = 'store', + type = 'int', dest = 'ry', default = 1000, + help = 'Size of work area y') + + self.OptionParser.add_option('-z', '--sz', action = 'store', + type = 'float', dest = 'sz', default = 50., + help = 'Size of a blob') + + self.OptionParser.add_option('-g', '--nb', action = 'store', + type = 'int', dest = 'nb', default = 10, + help = 'Total number of blobs') + + self.OptionParser.add_option("", "--Nmain", action="store", + type="string", dest="active_tab", default='top', + help="Active tab.") + + + + def effect(self): + """ + Effect behaviour. + Overrides base class' method. + """ + + global cave + + blunt = float( self.options.blunt ) + cave = float( self.options.cave ) + sz = float( self.options.sz ) + nb = int( self.options.nb ) + rx = int( self.options.rx ) + ry = int( self.options.ry ) + num = int( self.options.num ) + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Create a new layer. + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Blob Layer' ) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + style = { + 'fill' : '#000000' + } + # inkex.errormsg("black") + + ctrs = [(random.randrange(rx) , random.randrange(ry)) + for i in range(nb) ] + for ctr in ctrs : + points = [(random.gauss(ctr[0], sz) , random.gauss(ctr[1], sz)) + for i in range(num) ] + + px = hull(points) + pts = [points[px[i]] for i in range(len(px))] + + + # Create path element + path = inkex.etree.Element(inkex.addNS('path','svg')) + + + + path.set('style', formatStyle(style)) + + pathstring = 'M ' + str(pts[0][0]) + ' ' + str(pts[0][1]) + ' ' + + for j in range(len(pts)): + k = (j+1) % len(pts) + kk = (j+2) % len(pts) + if j==0 : + (lasth, h1) = sHandles(pts[-1], pts[0], pts[1], blunt) + (h2, hnext) = sHandles(pts[j], pts[k], pts[kk], blunt) + pathstring += "C %f %f %f %f %f %f " % (h1[0], h1[1], + h2[0], h2[1], + pts[k][0], pts[k][1]) + h1 = hnext + + pathstring += 'Z' + path.set('d', pathstring ) + layer.append(path) + +def sHandles(pre, pt, post, blunt): + '''I'm proud of this cute little construction for the + spline handles. No doubt someone has thought of it before + but, if not, its name is ACHC Andrew's Cute Handle + Construction. Note: no trig function calls.''' + try : + slope = (post[1] - pt[1]) / (post[0] - pt[0]) + except ZeroDivisionError : + slope = math.copysign(1E30 , post[1] - pt[1]) + lenpre = distance(pre, pt) + lenpost = distance(pt, post) + lenr = lenpre**2 / lenpost + locx = math.copysign( lenr / math.sqrt(1. + slope**2) , post[0] - pt[0]) + mark = ( pre[0] - locx , pre[1] - locx*slope ) + try : + markslope = (pt[1] - mark[1]) / (pt[0] - mark[0]) + except ZeroDivisionError : + markslope = math.copysign(1E30 , pt[1] - mark[1]) + prex = math.copysign( lenpre / math.sqrt(1. + markslope**2) , + pt[0] - mark[0]) + hpre = (pt[0] - prex*blunt , pt[1] - prex*markslope*blunt) + postx = prex*lenpost/lenpre + hpost = (pt[0] + postx*blunt , pt[1] + postx*markslope*blunt) + return (hpre, hpost) + +"""Blunt=0.3 makes pleasingly round, mostly convex blobs. 0.4 makes them more +concave. 0.6 - 1.0 they're getting more and more pointy. 2.0 - 10. and they +grow appendages like hot-air balloons. 0.1 makes the corners pretty sharp. +0.0 and it's down to the convex hulls that are the basis of the blobs, that +is, polygons""" + + +def distance(a, b) : + return math.sqrt( (a[0] - b[0])**2 + (a[1] - b[1])**2 ) + + +def hull(arg): + """Convex hull by Graham scan.""" + xarr, yarr = zip( * arg ) + ymin = min(yarr) + ind = findall( yarr, lambda y: y == ymin ) + if len(ind) > 1 : + xshort = [xarr[j] for j in ind] + xmin = min(xshort) + j = ind[xshort.index(xmin)] + ind = j + else : + ind = ind[0] + all = range(len(xarr)) + del all[ind] + all.sort(key=lambda i : (xarr[i] - xarr[ind]) / + math.sqrt( (xarr[i] - xarr[ind])**2 + (yarr[i] - yarr[ind])**2 ), + reverse=True) + if len(all) < 3 : + all.insert(0, ind) + return all + ans = [ind] + for i in all : + if len(ans) == 1 : + ans.append(i) + else : + while rightTurn(ans[-2], ans[-1], i, arg) : + ans.pop() + ans.append(i) + + return ans + +def rightTurn(j, k, l, arg) : + '''Cross product: Ax*By - Ay*Bx = Cz ''' + ax = (arg[k][0] - arg[j][0]) + by = (arg[l][1] - arg[k][1]) + ay = (arg[k][1] - arg[j][1]) + bx = (arg[l][0] - arg[k][0]) + p = ax*by - ay*bx + dot = ax*bx + ay*by + cos = dot / math.sqrt((ax**2 + ay**2) * (bx**2 + by**2)) + crt = 1 - cave*2 + + if p <= 0 : + return cos < crt #We forgive right turns based on /cave/ + else : + return False + + + + +def findall(a, f): + r = [] + for x, j in zip(a, range(len(a))) : + if f(x) : + r.append(j) + return r + + +# Create effect instance and apply it. +effect = blobsEffect() +effect.affect() +sys.exit( 0 ) + diff --git a/fablabchemnitz_blueprint_maker.inx b/fablabchemnitz_blueprint_maker.inx new file mode 100644 index 0000000..62496a9 --- /dev/null +++ b/fablabchemnitz_blueprint_maker.inx @@ -0,0 +1,30 @@ + + + <_name>Blueprint Maker + fablabchemnitz.de.blueprint_maker + fablabchemnitz_blueprint_maker.py + + + + + + + 1.000 + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_blueprint_maker.py b/fablabchemnitz_blueprint_maker.py new file mode 100644 index 0000000..3443f11 --- /dev/null +++ b/fablabchemnitz_blueprint_maker.py @@ -0,0 +1,119 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- + +import inkex +import simplestyle, copy + +class bluePrintMakerData(): + def __init__(self,effect): + self.effect=effect + self.stroke_units=effect.options.stroke_units + self.unit_factor=1.0 + self.set_units() + self.stroke_width=effect.options.stroke_width*self.unit_factor + self.palette=effect.options.palette + self.background_color=None + self.stroke_color=None + self.set_colors() + self.selected_nodes=[] + if len(effect.options.ids)==0: + self.selected_nodes=[effect.getElementById(x) for x in effect.doc_ids] + self.selected_nodes=[node for node in self.selected_nodes if effect.is_geometry(node)] + else: + self.selected_nodes=[y for x,y in effect.selected.iteritems()] + self.selected_nodes=[node for node in self.selected_nodes if effect.is_geometry(node,shapes=['path','g','rect','ellipse','perspective'])] + self.allowed_ids=[] + self.allowed_nodes=[] + self.set_objects() + + def set_units(self): + if self.stroke_units=='millimeters': + self.unit_factor=3.543 + if self.stroke_units=='centimeters': + self.unit_factor=35.433 + if self.stroke_units=='points': + self.unit_factor=1.25 + if self.stroke_units=='pixels': + self.unit_factor=1.0 + + def set_colors(self): + if self.palette=='blueprint': + self.background_color='#006fde' + self.stroke_color='#ffffff' + if self.palette=='black': + self.background_color='#000000' + self.stroke_color='#ffffff' + if self.palette=='white': + self.background_color='#ffffff' + self.stroke_color='#000000' + if self.palette=='laser': + self.background_color='#ffffff' + self.stroke_color='#ff0000' + + def set_objects(self): + for current_id in self.effect.doc_ids: + node=self.effect.getElementById(current_id) + if self.effect.is_geometry(node): + self.allowed_ids.append(current_id) + self.allowed_nodes.append(node) + +class bluePrintMaker(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-p', '--palette', action='store', type='string', dest='palette', help='Choose the colors...') + self.OptionParser.add_option('-s', '--stroke-width', action='store', type='float', dest='stroke_width', help='Stroke size...') + self.OptionParser.add_option('-u', '--units', action='store', type='string', dest='stroke_units', help='Choose the units...') + self.data=None + + def is_a_group(self, node): + data=False + if node.tag==inkex.addNS('g','svg'): + data=True + return data + + def is_geometry(self, node, shapes=['path','rect','ellipse','perspective']): + data=False + for s in shapes: + if node.tag==inkex.addNS(s,'svg'): + data=True + return data + + def change_page_settings(self): + namedview=self.getNamedView() + namedview.set('pagecolor',self.data.background_color) + namedview.set(inkex.addNS('pageopacity', 'inkscape'),'1') + namedview.set(inkex.addNS('pageshadow', 'inkscape'),'0') + namedview.set('bordercolor',self.data.stroke_color) + namedview.set('borderopacity','1') + return None + + def change_this_object(self,node): + styles=simplestyle.parseStyle(node.get('style')) + styles_copy=copy.deepcopy(styles) + styles_copy['stroke']=self.data.stroke_color + styles_copy['stroke-width']=self.data.stroke_width + styles_copy['stroke-opacity']='1' + styles_copy['fill']='none' + styles_copy['fill-opacity']='1' + styles_copy['opacity']='1' + node.set('style',simplestyle.formatStyle(styles_copy)) + return None + + def iterate_on_objects(self,node=None): + if self.is_geometry(node): + self.change_this_object(node) + if self.is_a_group(node): + for current_node in list(node): + self.iterate_on_objects(current_node) + + def effect(self): + self.data=bluePrintMakerData(self) + self.change_page_settings() + for node in self.data.selected_nodes: + self.iterate_on_objects(node) + return None + +if __name__ == '__main__': + program=bluePrintMaker() +program.affect() diff --git a/fablabchemnitz_boundingbox.inx b/fablabchemnitz_boundingbox.inx new file mode 100644 index 0000000..d0f821a --- /dev/null +++ b/fablabchemnitz_boundingbox.inx @@ -0,0 +1,19 @@ + + + <_name>Bounding Box + fablabchemnitz.de.boundingbox + inkex.py + fablabchemnitz_boundingbox.py + Draws bounding boxes around selected objects, useful for debugging. Author: Pawel Mosakowski + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_boundingbox.py b/fablabchemnitz_boundingbox.py new file mode 100644 index 0000000..80bddc3 --- /dev/null +++ b/fablabchemnitz_boundingbox.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2 + +import sys +sys.path.append('/usr/share/inkscape/extensions') + +from collections import defaultdict + +from inkex import Effect as InkscapeEffect +from inkex import etree, addNS + +from simpletransform import computeBBox, applyTransformToNode +from simplestyle import formatStyle +from simplepath import parsePath, translatePath, formatPath + +class DrawBBoxes(InkscapeEffect): + def __init__(self): + InkscapeEffect.__init__(self) + self.filename = sys.argv[-1] + + def effect(self): + if len(self.selected) > 0: + bboxes = self.calculate_bboxes(self.selected) + for id, node, bbox in bboxes: + self.draw_bbox(bbox) + + def calculate_bboxes(self, nodes): + bboxes = [(id, node, computeBBox([node])) + for id, node in nodes.items()] + + return bboxes + + def draw_bbox(self, bbox): + (x1, x2, y1, y2) = bbox + width = x2 - x1 + height = y2 - y1 + self.draw_rect(x1, y1, width, height) + + #SVG element generation routine + def draw_rect(self, x, y, width, height): + layer = self.current_layer + + style = { 'stroke' : '#ff0000', + 'stroke-width' : '1', + 'fill' : 'none', + } + + attribs = { + 'style' : formatStyle(style), + 'x' : str(x), + 'y' : str(y), + 'width' : str(width), + 'height' : str(height), + } + + rect = etree.SubElement(layer, addNS('rect','svg'), attribs ) + +effect = DrawBBoxes() +effect.affect() diff --git a/fablabchemnitz_boxmaker.inx b/fablabchemnitz_boxmaker.inx new file mode 100644 index 0000000..669ee9d --- /dev/null +++ b/fablabchemnitz_boxmaker.inx @@ -0,0 +1,66 @@ + + + <_name>Box Maker - Tabbed + fablabchemnitz.de.boxmaker.tabbed + fablabchemnitz_boxmaker.py + simpletransform.py + inkex.py + + + + + + + <_option value="1">Inside + <_option value="0">Outside + + 80 + 80 + 80 + 8.0 + + <_option value="0">Fixed + <_option value="1">Proportional + + + <_option value="0">Default + <_option value="1">Hairline (0.002" for Epilog) + + 4.0 + 0.1 + 0.01 + + + + + + + + + + + + + + + 4 + 4 + + + + + + + 1.0 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_boxmaker.py b/fablabchemnitz_boxmaker.py new file mode 100644 index 0000000..839e2ad --- /dev/null +++ b/fablabchemnitz_boxmaker.py @@ -0,0 +1,835 @@ +#! /usr/bin/env python +""" +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf and clearance into account + +Copyright (C) 2011 elliot white + +Changelog: +19/12/2014 Paul Hutchison: + - Ability to generate 6, 5, 4, 3 or 2-panel cutouts + - Ability to also generate evenly spaced dividers within the box + including tabbed joints to box sides and slots to slot into each other + +23/06/2015 by Paul Hutchison: + - Updated for Inkscape's 0.91 breaking change (unittouu) + +v0.93 - 15/8/2016 by Paul Hutchison: + - Added Hairline option and fixed open box height bug + +v0.94 - 05/01/2017 by Paul Hutchison: + - Added option for keying dividers into walls/floor/none + +This program is ugly software: you can clean it up yourself and/or mock it +under the unpublished terms of common civility. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" +__version__ = "0.94" # please report bugs, suggestions etc at +# https://github.com/paulh-rnd/TabbedBoxMaker ### + +import math +import os + +import inkex +import simplestyle + +try: + # This is the typing library for local dev. Can be ignored in production. :) + from typing import Tuple +except ImportError: + pass + +inkex.localize() + +DEFAULT_LINE_THICKNESS = 1 # default unless overridden by settings + + +def log(text): + if 'SCHROFF_LOG' in os.environ: + f = open(os.environ.get('SCHROFF_LOG'), 'a') + f.write(text + "\n") + + +def draw_lines(xy_string): # Draw lines from a list + name = 'part' + style = {'stroke' : '#000000', + 'stroke-width': str(DEFAULT_LINE_THICKNESS), + 'fill' : 'none'} + drw = {'style' : simplestyle.formatStyle(style), + inkex.addNS('label', 'inkscape'): name, 'd': xy_string} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), drw) + return + + +# jslee - shamelessly adapted from sample code on below Inkscape wiki page 2015-07-28 +# http://wiki.inkscape.org/wiki/index.php/Generating_objects_from_extensions +def draw_circle(r, cx, cy): + log("putting circle at ({},{})".format(cx, cy)) + + style = {'stroke' : '#000000', + 'stroke-width': str(DEFAULT_LINE_THICKNESS), + 'fill' : 'none'} + + ell_attribs = {'style' : simplestyle.formatStyle(style), + inkex.addNS('cx', 'sodipodi') : str(cx), + inkex.addNS('cy', 'sodipodi') : str(cy), + inkex.addNS('rx', 'sodipodi') : str(r), + inkex.addNS('ry', 'sodipodi') : str(r), + inkex.addNS('start', 'sodipodi'): str(0), + inkex.addNS('end', 'sodipodi') : str(2 * math.pi), + inkex.addNS('open', 'sodipodi') : 'true', + # all ellipse sectors we will draw are open + inkex.addNS('type', 'sodipodi') : 'arc', + 'transform' : ''} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), ell_attribs) + + +def side(root_coord, start_offset_coord, end_offset_coord, tab_vec, length, direction, + is_tab, is_divider, num_dividers, div_spacing, div_offset): + # type: (Tuple[int, int], Tuple[int, int], Tuple[int, int], int, int, Tuple[int, int], bool, bool, int, int, int) -> str + + rx, ry = root_coord + + sox, soy = start_offset_coord + + eox, eoy = end_offset_coord + + dir_x, dir_y = direction + + divs = int(length / nom_tab) # divisions + if not divs % 2: + divs -= 1 # make divs odd + divs = float(divs) + tabs = (divs - 1) / 2 # tabs for side + + if equal_tabs: + gap_width = tab_width = length / divs + else: + tab_width = nom_tab + gap_width = (length - tabs * nom_tab) / (divs - tabs) + + if is_tab: # kerf correction + gap_width -= correction + tab_width += correction + first = correction / 2 + else: + gap_width += correction + tab_width -= correction + first = -correction / 2 + + first_vec = 0 + second_vec = tab_vec + dirxN = 0 if dir_x else 1 # used to select operation on x or y + diryN = 0 if dir_y else 1 + (Vx, Vy) = (rx + sox * thickness, ry + soy * thickness) + s = 'M {},{} '.format(Vx, Vy) + + if dirxN: + Vy = ry # set correct line start + if diryN: + Vx = rx + + # generate line as tab or hole using: + # last co-ord:Vx,Vy ; tab dir:tab_vec ; direction:dir_x,dir_y ; thickness:thickness + # divisions:divs ; gap width:gap_width ; tab width:tab_width + + for n in range(1, int(divs)): + if ((n % 2) ^ ( + not is_tab)) and num_dividers > 0 and not is_divider: # draw holes for + # divider + # joints in side walls + w = gap_width if is_tab else tab_width + if n == 1: + w -= sox * thickness + for m in range(1, int(num_dividers) + 1): + Dx = Vx + -dir_y * div_spacing * m + Dy = Vy + dir_x * div_spacing * m + if n == 1: + Dx += sox * thickness + h = 'M {},{} '.format(Dx, Dy) + + Dx = Dx + dir_x * w + dirxN * first_vec + first * dir_x + Dy = Dy + dir_y * w + diryN * first_vec + first * dir_y + h += 'L {},{} '.format(Dx, Dy) + + Dx += dirxN * second_vec + Dy += diryN * second_vec + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx - (dir_x * w + dirxN * first_vec + first * dir_x) + Dy = Dy - (dir_y * w + diryN * first_vec + first * dir_y) + h += 'L {},{} '.format(Dx, Dy) + + Dx -= dirxN * second_vec + Dy -= diryN * second_vec + h += 'L {},{} '.format(Dx, Dy) + + draw_lines(h) + if n % 2: + if n == 1 and num_dividers > 0 and is_divider: # draw slots for dividers + # to slot into each other + for m in range(1, int(num_dividers) + 1): + Dx = Vx + -dir_y * (div_spacing * m + div_offset) + Dy = Vy + dir_x * (div_spacing * m - div_offset) + h = 'M {},{} '.format(Dx, Dy) + + Dx = Dx + dir_x * (first + length / 2) + Dy = Dy + dir_y * (first + length / 2) + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx + dirxN * thickness + Dy = Dy + diryN * thickness + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx - dir_x * (first + length / 2) + Dy = Dy - dir_y * (first + length / 2) + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx - dirxN * thickness + Dy = Dy - diryN * thickness + h += 'L {},{} '.format(Dx, Dy) + + draw_lines(h) + + Vx = Vx + dir_x * gap_width + dirxN * first_vec + first * dir_x + Vy = Vy + dir_y * gap_width + diryN * first_vec + first * dir_y + s += 'L {},{} '.format(Vx, Vy) + + Vx = Vx + dirxN * second_vec + Vy = Vy + diryN * second_vec + s += 'L {},{} '.format(Vx, Vy) + else: + Vx = Vx + dir_x * tab_width + dirxN * first_vec + Vy = Vy + dir_y * tab_width + diryN * first_vec + s += 'L {},{} '.format(Vx, Vy) + + Vx = Vx + dirxN * second_vec + Vy = Vy + diryN * second_vec + s += 'L {},{} '.format(Vx, Vy) + (second_vec, first_vec) = (-second_vec, -first_vec) # swap tab direction + first = 0 + + # finish the line off + s += 'L {},{} '.format(rx + eox * thickness + dir_x * length, + ry + eoy * thickness + dir_y * length) + if is_tab and num_dividers > 0 and not is_divider: # draw last for divider joints + # in side walls + for m in range(1, int(num_dividers) + 1): + Dx = Vx + Dy = Vy + dir_x * div_spacing * m + h = 'M {},{} '.format(Dx, Dy) + + Dx = rx + eox * thickness + dir_x * length + Dy = Dy + dir_y * tab_width + diryN * first_vec + first * dir_y + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx + dirxN * second_vec + Dy = Dy + diryN * second_vec + h += 'L {},{} '.format(Dx, Dy) + + Dx = Vx + Dy = Dy - (dir_y * tab_width + diryN * first_vec + first * dir_y) + h += 'L {},{} '.format(Dx, Dy) + + Dx = Dx - dirxN * second_vec + Dy = Dy - diryN * second_vec + h += 'L {},{} '.format(Dx, Dy) + + draw_lines(h) + return s + + +class BoxMaker(inkex.Effect): + def __init__(self): + # Call the base class constructor. + # We are not using super because as of Inkscape 0.92 inkex.Effect is still an + # Old-Style python class that doesn't inherit from `object` + inkex.Effect.__init__(self) + # Define options + self.OptionParser.add_option('--schroff', action='store', type='int', + dest='schroff', default=0, + help='Enable Schroff mode') + self.OptionParser.add_option('--rail_height', action='store', type='float', + dest='rail_height', default=10.0, + help='Height of rail') + self.OptionParser.add_option('--rail_mount_depth', action='store', type='float', + dest='rail_mount_depth', default=17.4, + help='Depth at which to place hole for rail mount ' + 'bolt') + self.OptionParser.add_option('--rail_mount_centre_offset', action='store', + type='float', + dest='rail_mount_centre_offset', default=0.0, + help='How far toward row centreline to offset rail ' + 'mount bolt (from rail centreline)') + self.OptionParser.add_option('--rows', action='store', type='int', + dest='rows', default=0, + help='Number of Schroff rows') + self.OptionParser.add_option('--hp', action='store', type='int', + dest='hp', default=0, + help='Width (TE/HP units) of Schroff rows') + self.OptionParser.add_option('--row_spacing', action='store', type='float', + dest='row_spacing', default=10.0, + help='Height of rail') + self.OptionParser.add_option('--unit', action='store', type='string', + dest='unit', default='mm', help='Measure Units') + self.OptionParser.add_option('--inside', action='store', type='int', + dest='inside', default=0, help='Int/Ext Dimension') + self.OptionParser.add_option('--length', action='store', type='float', + dest='length', default=100, help='Length of Box') + self.OptionParser.add_option('--width', action='store', type='float', + dest='width', default=100, help='Width of Box') + self.OptionParser.add_option('--depth', action='store', type='float', + dest='height', default=100, help='Height of Box') + self.OptionParser.add_option('--tab', action='store', type='float', + dest='tab', default=25, help='Nominal Tab Width') + self.OptionParser.add_option('--equal', action='store', type='int', + dest='equal', default=0, help='Equal/Prop Tabs') + self.OptionParser.add_option('--hairline', action='store', type='int', + dest='hairline', default=0, help='Line Thickness') + self.OptionParser.add_option('--thickness', action='store', type='float', + dest='thickness', default=10, + help='Thickness of Material') + self.OptionParser.add_option('--kerf', action='store', type='float', + dest='kerf', default=0.5, help='Kerf (width) of cut') + self.OptionParser.add_option('--clearance', action='store', type='float', + dest='clearance', default=0.01, + help='Clearance of joints') + self.OptionParser.add_option('--style', action='store', type='int', + dest='style', default=25, help='Layout/Style') + self.OptionParser.add_option('--spacing', action='store', type='float', + dest='spacing', default=25, help='Part Spacing') + self.OptionParser.add_option('--boxtype', action='store', type='int', + dest='boxtype', default=25, help='Box type') + self.OptionParser.add_option('--div_l', action='store', type='int', + dest='div_l', default=25, + help='Dividers (Length axis)') + self.OptionParser.add_option('--div_w', action='store', type='int', + dest='div_w', default=25, + help='Dividers (Width axis)') + self.OptionParser.add_option('--keydiv', action='store', type='int', + dest='keydiv', default=3, + help='Key dividers into walls/floor') + + def effect(self): + global parent, nom_tab, equal_tabs, thickness, correction, div_x, div_y, \ + hairline, DEFAULT_LINE_THICKNESS, key_div_walls, key_div_floor + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Get the attributes: + width_doc = self.unittouu(svg.get('width')) + height_doc = self.unittouu(svg.get('height')) + + # Create a new layer. + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'newlayer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + parent = self.current_layer + + # Get script's option values. + hairline = self.options.hairline + unit = self.options.unit + inside = self.options.inside + schroff = self.options.schroff + + # Set the line thickness + if hairline: + DEFAULT_LINE_THICKNESS = self.unittouu('0.002in') + else: + DEFAULT_LINE_THICKNESS = 1 + + if schroff: + hp = self.options.hp + rows = self.options.rows + rail_height = self.unittouu(str(self.options.rail_height) + unit) + row_centre_spacing = self.unittouu(str(122.5) + unit) + row_spacing = self.unittouu(str(self.options.row_spacing) + unit) + rail_mount_depth = self.unittouu(str(self.options.rail_mount_depth) + unit) + rail_mount_centre_offset = self.unittouu( + str(self.options.rail_mount_centre_offset) + unit) + rail_mount_radius = self.unittouu(str(2.5) + unit) + + # minimally different behaviour for schroffmaker.inx vs. boxmaker.inx + # essentially schroffmaker.inx is just an alternate interface with different + # default settings, some options removed, and a tiny amount of extra logic + if schroff: + # schroffmaker.inx + x = self.unittouu(str(self.options.hp * 5.08) + unit) + # 122.5mm vertical distance between mounting hole centres of 3U Schroff panels + row_height = rows * (row_centre_spacing + rail_height) + # rail spacing in between rows but never between rows and case panels + row_spacing_total = (rows - 1) * row_spacing + y = row_height + row_spacing_total + else: + # boxmaker.inx + x = self.unittouu(str(self.options.length) + unit) + y = self.unittouu(str(self.options.width) + unit) + + z = self.unittouu(str(self.options.height) + unit) + thickness = self.unittouu(str(self.options.thickness) + unit) + nom_tab = self.unittouu(str(self.options.tab) + unit) + equal_tabs = self.options.equal + kerf = self.unittouu(str(self.options.kerf) + unit) + clearance = self.unittouu(str(self.options.clearance) + unit) + layout = self.options.style + spacing = self.unittouu(str(self.options.spacing) + unit) + box_type = self.options.boxtype + div_x = self.options.div_l + div_y = self.options.div_w + key_div_walls = 0 if self.options.keydiv == 3 or self.options.keydiv == 1 else 1 + key_div_floor = 0 if self.options.keydiv == 3 or self.options.keydiv == 2 else 1 + div_offset = key_div_walls * thickness + + if inside: # if inside dimension selected correct values to outside dimension + x += thickness * 2 + y += thickness * 2 + z += thickness * 2 + + correction = kerf - clearance + + # check input values mainly to avoid python errors + # TODO restrict values to *correct* solutions + # TODO restrict divisions to logical values + error = 0 + + if min(x, y, z) == 0: + inkex.errormsg('Error: Dimensions must be non zero') + error = 1 + if max(x, y, z) > max(width_doc, height_doc) * 10: # crude test + inkex.errormsg('Error: Dimensions Too Large') + error = 1 + if min(x, y, z) < 3 * nom_tab: + inkex.errormsg('Error: Tab size too large') + error = 1 + if nom_tab < thickness: + inkex.errormsg('Error: Tab size too small') + error = 1 + if thickness == 0: + inkex.errormsg('Error: Thickness is zero') + error = 1 + if thickness > min(x, y, z) / 3: # crude test + inkex.errormsg('Error: Material too thick') + error = 1 + if correction > min(x, y, z) / 3: # crude test + inkex.errormsg('Error: Kerf/Clearance too large') + error = 1 + if spacing > max(x, y, z) * 10: # crude test + inkex.errormsg('Error: Spacing too large') + error = 1 + if spacing < kerf: + inkex.errormsg('Error: Spacing too small') + error = 1 + + if error: + exit() + + # layout format: + # (root_x), (root_y), X_length, Y_length, tabInfo, tabbed, pieceType + # + # root = (spacing,x,y,z) * values in multiples of dimension of top left corner + # eg. (3, 1, 0, 1) means x position = 3*spacing + 1*x dimension + 1*z dimension + # + # tabInfo= 0=holes 1=tabs + # tabbed= 0=no tabs 1=tabs on this side + # (sides: a=top, b=right, c=bottom, d=left) + # + # pieceType: 1=XY, 2=XZ, 3=ZY + # note first two pieces in each set are the x-divider template and y-divider + # template respectively + if box_type == 2: # One side open (x,y) + if layout == 1: # Diagrammatic Layout + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1010, 0b1101, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1110, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b0000, 0b1111, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b1111, 0b1011, 3], + [(4, 1, 0, 2), (2, 0, 0, 1), x, y, 0b0000, 0b0000, 1], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1010, 0b0111, 2]] + elif layout == 2: # 3 Piece Layout + pieces = [[(2, 0, 0, 1), (2, 0, 1, 0), x, z, 0b1010, 0b1101, 2], + [(1, 0, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b1110, 3], + [(2, 0, 0, 1), (1, 0, 0, 0), x, y, 0b0000, 0b1111, 1]] + elif layout == 3: # Inline(compact) Layout + pieces = [[(5, 2, 0, 2), (1, 0, 0, 0), x, z, 0b1111, 0b1101, 2], + [(3, 2, 0, 0), (1, 0, 0, 0), z, y, 0b0101, 0b1110, 3], + [(4, 2, 0, 1), (1, 0, 0, 0), z, y, 0b0101, 0b1011, 3], + [(2, 1, 0, 0), (1, 0, 0, 0), x, y, 0b0000, 0b1111, 1], + [(6, 3, 0, 2), (1, 0, 0, 0), x, z, 0b1111, 0b0111, 2]] + elif layout == 4: # Diagrammatic Layout with Alternate Tab Arrangement + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1001, 0b1101, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1100, 0b1110, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b1100, 0b1111, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b0110, 0b1011, 3], + [(4, 1, 0, 2), (2, 0, 0, 1), x, y, 0b0110, 0b0000, 1], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1100, 0b0111, 2]] + elif box_type == 3: # Two sides open (x,y and x,z) + if layout == 1: # Diagrammatic Layout + pieces = [[(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1010, 0b0111, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1100, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b0010, 0b1101, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b1111, 0b1001, 3]] + elif layout == 2: # 3 Piece Layout + pieces = [[(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1010, 0b0111, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1100, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b0010, 0b1101, 1]] + elif layout == 3: # Inline(compact) Layout + pieces = [[(2, 2, 0, 2), (1, 0, 0, 0), x, z, 0b1010, 0b0111, 2], + [(3, 2, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b1100, 3], + [(2, 1, 0, 0), (1, 0, 0, 0), x, y, 0b0010, 0b1101, 1], + [(4, 2, 0, 1), (1, 0, 0, 0), z, y, 0b1111, 0b1001, 3]] + elif layout == 4: # Diagrammatic Layout with Alternate Tab Arrangement + pieces = [[(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1100, 0b0111, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1100, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b1110, 0b1101, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b0110, 0b1001, 3]] + elif box_type == 4: # Three sides open (x,y, x,z and z,y) + if layout == 2: # 3 Piece Layout + pieces = [[(2, 2, 0, 0), (2, 0, 1, 0), x, z, 0b1111, 0b1001, 2], + [(1, 0, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b0110, 3], + [(2, 2, 0, 0), (1, 0, 0, 0), x, y, 0b1100, 0b0011, 1]] + else: + pieces = [[(3, 3, 0, 0), (1, 0, 0, 0), x, z, 0b1110, 0b1001, 2], + [(1, 0, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b0110, 3], + [(2, 2, 0, 0), (1, 0, 0, 0), x, y, 0b1100, 0b0011, 1]] + elif box_type == 5: # Opposite ends open (x,y) + if layout == 1: # Diagrammatic Layout + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1010, 0b0101, 2], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b1111, 0b1010, 3], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1010, 0b0101, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1010, 3]] + elif layout == 2: # 2 Piece Layout + pieces = [[(1, 0, 0, 1), (1, 0, 1, 1), x, z, 0b1010, 0b0101, 2], + [(2, 1, 0, 1), (1, 0, 0, 1), z, y, 0b1111, 0b1010, 3]] + elif layout == 3: # Inline(compact) Layout + pieces = [[(1, 0, 0, 0), (1, 0, 0, 0), x, z, 0b1010, 0b0101, 2], + [(3, 2, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b1010, 3], + [(2, 1, 0, 0), (1, 0, 0, 0), x, z, 0b1010, 0b0101, 2], + [(4, 2, 0, 1), (2, 0, 0, 0), z, y, 0b1111, 0b1010, 3]] + elif layout == 4: # Diagrammatic Layout with Alternate Tab Arrangement + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1011, 0b0101, 2], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b0111, 0b1010, 3], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1110, 0b0101, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1101, 0b1010, 3]] + elif box_type == 6: # 2 panels jointed (x,y and z,y joined along y) + pieces = [[(1, 0, 0, 0), (1, 0, 0, 0), x, y, 0b1011, 0b0100, 1], + [(2, 1, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b0001, 3]] + else: # Fully enclosed + if layout == 1: # Diagrammatic Layout + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1010, 0b1111, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1111, 0b1111, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b0000, 0b1111, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b1111, 0b1111, 3], + [(4, 1, 0, 2), (2, 0, 0, 1), x, y, 0b0000, 0b1111, 1], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1010, 0b1111, 2]] + elif layout == 2: # 3 Piece Layout + pieces = [[(2, 0, 0, 1), (2, 0, 1, 0), x, z, 0b1010, 0b1111, 2], + [(1, 0, 0, 0), (1, 0, 0, 0), z, y, 0b1111, 0b1111, 3], + [(2, 0, 0, 1), (1, 0, 0, 0), x, y, 0b0000, 0b1111, 1]] + elif layout == 3: # Inline(compact) Layout + pieces = [[(5, 2, 0, 2), (1, 0, 0, 0), x, z, 0b1111, 0b1111, 2], + [(3, 2, 0, 0), (1, 0, 0, 0), z, y, 0b0101, 0b1111, 3], + [(6, 3, 0, 2), (1, 0, 0, 0), x, z, 0b1111, 0b1111, 2], + [(4, 2, 0, 1), (1, 0, 0, 0), z, y, 0b0101, 0b1111, 3], + [(2, 1, 0, 0), (1, 0, 0, 0), x, y, 0b0000, 0b1111, 1], + [(1, 0, 0, 0), (1, 0, 0, 0), x, y, 0b0000, 0b1111, 1]] + elif layout == 4: # Diagrammatic Layout with Alternate Tab Arrangement + pieces = [[(2, 0, 0, 1), (3, 0, 1, 1), x, z, 0b1001, 0b1111, 2], + [(1, 0, 0, 0), (2, 0, 0, 1), z, y, 0b1100, 0b1111, 3], + [(2, 0, 0, 1), (2, 0, 0, 1), x, y, 0b1100, 0b1111, 1], + [(3, 1, 0, 1), (2, 0, 0, 1), z, y, 0b0110, 0b1111, 3], + [(4, 1, 0, 2), (2, 0, 0, 1), x, y, 0b0110, 0b1111, 1], + [(2, 0, 0, 1), (1, 0, 0, 0), x, z, 0b1100, 0b1111, 2]] + + for idx, piece in enumerate(pieces): # generate and draw each piece of the box + (xs, xx, xy, xz) = piece[0] + (ys, yx, yy, yz) = piece[1] + x_ = xs * spacing + xx * x + xy * y + xz * z # root x co-ord for piece + y_ = ys * spacing + yx * x + yy * y + yz * z # root y co-ord for piece + dx = piece[2] + dy = piece[3] + tabs = piece[4] + a = tabs >> 3 & 1 + b = tabs >> 2 & 1 + c = tabs >> 1 & 1 + d = tabs & 1 # extract tab status for each side + tabbed = piece[5] + a_tabs = tabbed >> 3 & 1 + b_tabs = tabbed >> 2 & 1 + c_tabs = tabbed >> 1 & 1 + d_tabs = tabbed & 1 # extract tabbed flag for each side + x_spacing = (x - thickness) / (div_y + 1) + y_spacing = (y - thickness) / (div_x + 1) + x_holes = 1 if piece[6] < 3 else 0 # 3 is a YZ piece + y_holes = 1 if piece[6] != 2 else 0 # 2 is an XZ piece + wall = 1 if piece[6] > 1 else 0 + floor = 1 if piece[6] == 1 else 0 # 1 is an XY piece + rail_holes = 1 if piece[6] == 3 else 0 + + if schroff and rail_holes: + log("rail holes enabled on piece {} at ({}, {})".format(idx, + x_ + thickness, + y_ + thickness)) + log("abcd = ({},{},{},{})".format(a, b, c, d)) + log("dxdy = ({},{})".format(dx, dy)) + rhx_offset = rail_mount_depth + thickness + if idx == 1: + rhx = x_ + rhx_offset + elif idx == 3: + rhx = x_ - rhx_offset + dx + else: + rhx = 0 + log("rhx_offset = {}, rhx= {}".format(rhx_offset, rhx)) + ry_start = y_ + (rail_height / 2) + thickness + if rows == 1: + log("just one row this time, ry_start = {}".format(ry_start)) + rh1y = ry_start + rail_mount_centre_offset + rh2y = rh1y + (row_centre_spacing - rail_mount_centre_offset) + draw_circle(rail_mount_radius, rhx, rh1y) + draw_circle(rail_mount_radius, rhx, rh2y) + else: + for n in range(0, rows): + log("drawing row {}, ry_start = {}".format(n + 1, ry_start)) + # if holes are offset (eg. Vector T-strut rails), they should + # be offset + # toward each other, ie. toward the centreline of the Schroff row + rh1y = ry_start + rail_mount_centre_offset + rh2y = rh1y + row_centre_spacing - rail_mount_centre_offset + draw_circle(rail_mount_radius, rhx, rh1y) + draw_circle(rail_mount_radius, rhx, rh2y) + ry_start += row_centre_spacing + row_spacing + rail_height + + # generate and draw the sides of each piece + side_a = side(root_coord=(x_, y_), + start_offset_coord=(d, a), + end_offset_coord=(-b, a), + tab_vec=a_tabs * (-thickness if a else thickness), + length=dx, + direction=(1, 0), + is_tab=a, + is_divider=False, + num_dividers=(key_div_floor | wall) * ( + key_div_walls | floor) * div_x * y_holes * a_tabs, + div_spacing=y_spacing, + div_offset=div_offset) + + side_b = side(root_coord=(x_ + dx, y_), + start_offset_coord=(-b, a), + end_offset_coord=(-b, -c), + tab_vec=b_tabs * (thickness if b else -thickness), + length=dy, + direction=(0, 1), + is_tab=b, + is_divider=False, + num_dividers=(key_div_floor | wall) * ( + key_div_walls | floor) * div_y * x_holes * b_tabs, + div_spacing=x_spacing, + div_offset=div_offset) + + if a_tabs: + side_c = side(root_coord=(x_ + dx, y_ + dy), + start_offset_coord=(-b, -c), + end_offset_coord=(d, -c), + tab_vec=c_tabs * (thickness if c else -thickness), + length=dx, + direction=(-1, 0), + is_tab=c, + is_divider=False, + num_dividers=0, + div_spacing=0, + div_offset=div_offset) + else: + side_c = side(root_coord=(x_ + dx, y_ + dy), + start_offset_coord=(-b, -c), + end_offset_coord=(d, -c), + tab_vec=c_tabs * (thickness if c else -thickness), + length=dx, + direction=(-1, 0), + is_tab=c, + is_divider=False, + num_dividers=(key_div_floor | wall) * ( + key_div_walls | floor) * div_x * y_holes * + c_tabs, + div_spacing=y_spacing, + div_offset=div_offset) + + if b_tabs: + side_d = side(root_coord=(x_, y_ + dy), + start_offset_coord=(d, -c), + end_offset_coord=(d, a), + tab_vec=d_tabs * (-thickness if d else thickness), + length=dy, + direction=(0, -1), + is_tab=d, + is_divider=False, + num_dividers=0, + div_spacing=0, + div_offset=div_offset) + else: + side_d = side(root_coord=(x_, y_ + dy), + start_offset_coord=(d, -c), + end_offset_coord=(d, a), + tab_vec=d_tabs * (-thickness if d else thickness), + length=dy, + direction=(0, -1), + is_tab=d, + is_divider=False, + num_dividers=(key_div_floor | wall) * ( + key_div_walls | floor) * div_y * x_holes * + d_tabs, + div_spacing=x_spacing, + div_offset=div_offset) + + draw_lines(side_a) + draw_lines(side_b) + draw_lines(side_c) + draw_lines(side_d) + + if idx == 0: + if not key_div_walls: + a = 1 + b = 1 + c = 1 + d = 1 + a_tabs = 0 + b_tabs = 0 + c_tabs = 0 + d_tabs = 0 + y_ = 4 * spacing + 1 * y + 2 * z # root y co-ord for piece + for n in range(0, div_x): # generate x dividers + x_ = n * (spacing + x) # root x co-ord for piece + + side_a = side(root_coord=(x_, y_), + start_offset_coord=(d, a), + end_offset_coord=(-b, a), + tab_vec=key_div_floor * a_tabs * ( + -thickness if a else thickness), + length=dx, + direction=(1, 0), + is_tab=a, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=div_offset) + + side_b = side(root_coord=(x_ + dx, y_), + start_offset_coord=(-b, a), + end_offset_coord=(-b, -c), + tab_vec=key_div_walls * b_tabs * ( + thickness if key_div_walls * b else -thickness), + length=dy, + direction=(0, 1), + is_tab=b, + is_divider=True, + num_dividers=div_y * x_holes, + div_spacing=x_spacing, + div_offset=div_offset) + + side_c = side(root_coord=(x_ + dx, y_ + dy), + start_offset_coord=(-b, -c), + end_offset_coord=(d, -c), + tab_vec=key_div_floor * c_tabs * ( + thickness if c else -thickness), + length=dx, + direction=(-1, 0), + is_tab=c, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=div_offset) + + side_d = side(root_coord=(x_, y_ + dy), + start_offset_coord=(d, -c), + end_offset_coord=(d, a), + tab_vec=key_div_walls * d_tabs * ( + -thickness if d else thickness), + length=dy, + direction=(0, -1), + is_tab=d, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=div_offset) + + draw_lines(side_a) + draw_lines(side_b) + draw_lines(side_c) + draw_lines(side_d) + elif idx == 1: + y_ = 5 * spacing + 1 * y + 3 * z # root y co-ord for piece + for n in range(0, div_y): # generate y dividers + x_ = n * (spacing + z) # root x co-ord for piece + + side_a = side(root_coord=(x_, y_), + start_offset_coord=(d, a), + end_offset_coord=(-b, a), + tab_vec=key_div_walls * a_tabs * ( + -thickness if a else thickness), + length=dx, + direction=(1, 0), + is_tab=a, + is_divider=True, + num_dividers=div_x * y_holes, + div_spacing=y_spacing, + div_offset=thickness) + + side_b = side(root_coord=(x_ + dx, y_), + start_offset_coord=(-b, a), + end_offset_coord=(-b, -c), + tab_vec=key_div_floor * b_tabs * ( + thickness if b else -thickness), + length=dy, + direction=(0, 1), + is_tab=b, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=thickness) + + side_c = side(root_coord=(x_ + dx, y_ + dy), + start_offset_coord=(-b, -c), + end_offset_coord=(d, -c), + tab_vec=key_div_walls * c_tabs * ( + thickness if c else -thickness), + length=dx, + direction=(-1, 0), + is_tab=c, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=thickness) + + side_d = side(root_coord=(x_, y_ + dy), + start_offset_coord=(d, -c), + end_offset_coord=(d, a), + tab_vec=key_div_floor * d_tabs * ( + -thickness if d else thickness), + length=dy, + direction=(0, -1), + is_tab=d, + is_divider=True, + num_dividers=0, + div_spacing=0, + div_offset=thickness) + + draw_lines(side_a) + draw_lines(side_b) + draw_lines(side_c) + draw_lines(side_d) + + +# Create effect instance and apply it. +effect = BoxMaker() +effect.affect() diff --git a/fablabchemnitz_centerline_trace.inx b/fablabchemnitz_centerline_trace.inx new file mode 100644 index 0000000..bda094c --- /dev/null +++ b/fablabchemnitz_centerline_trace.inx @@ -0,0 +1,44 @@ + + + <_name>Centerline Trace + + fablabchemnitz.de.centerline_trace + org.inkscape.output.svg.inkscape + fablabchemnitz_centerline_trace.py + false + false + true + false + 0.1 + 2.0 + 1 + + + Preprocessing filters: + + 0.0 + 0 + + + Autotrace options: + + 4 + 2.0 + (C) 2016-2019 Jürgen Weigert (juergen@fabmail.org) and contributors. + For updates, praise or bug reports please refer to + https://github.com/fablabnbg/inkscape-centerline-trace + + + Version 0.8d + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_centerline_trace.py b/fablabchemnitz_centerline_trace.py new file mode 100644 index 0000000..0037acb --- /dev/null +++ b/fablabchemnitz_centerline_trace.py @@ -0,0 +1,566 @@ +#!/usr/bin/env python3 +# +# Inkscape extension to vectorize bitmaps by tracing along the center of lines +# (C) 2016 juewei@fabmail.org +# Distribute under GPL-2.0 or ask. +# +# code snippets visited to learn the extension 'effect' interface: +# - convert2dashes.py +# - http://github.com/jnweiger/inkscape-silhouette +# - http://github.com/jnweiger/inkscape-gears-dev +# - http://sourceforge.net/projects/inkcut/ +# - http://code.google.com/p/inkscape2tikz/ +# - http://code.google.com/p/eggbotcode/ +# +# vectorize strokes in a graymap png file +# as a path along the centerline of the strokes. +# +# This is done with autotrace -centerline, as +# the builtin potrace in inkscape cannot do centerline -- +# it would always draw a path around the contour of the +# stroke, resulting in double lines. +# +# We want a stroke represented by a single path (optionally with line-width) , +# rather than its outline contour. +# +# Algorithm: +# +# The input image is converted to a graymap and histogram normalized with PIL.ImageOps.equalize. or autocontrast +# +# autotrace needs a bi-level bitmap. In order to find the +# best threshold value, we run autotrace at multiple thresholds +# and evaluate the result. +# +# We count the number of line segments produced and +# measure the total path length drawn. +# +# The svg that has the longest path but the least number of +# segments is returned. +# +# Requires: +# apt-get install autotrace python-pil +# +# 2016-05-10 jw, V0.1 -- initial draught +# 2016-05-11 jw, V0.2 -- first usable inkscape-extension +# 2016-05-15 jw, V0.3 -- equal spatial illumination applied. autocontrast instead of equalize. denoise. +# 2016-05-16 jw, V0.4 -- added replace option. Made filters optional. +# 2016-11-05 jw, V0.5 -- support embedded jpeg (and possibly other file types) +# https://github.com/fablabnbg/inkscape-centerline-trace/issues/8 +# 2016-11-06 jw, V0.6 -- support transparent PNG images by applying white background +# https://github.com/fablabnbg/inkscape-centerline-trace/issues/3 +# 2016-11-07 jw, V0.7 -- transparency: use black background when the '[x] trace white line' is enabled. +# 2017-03-05 jw, -- instructions for mac added: http://macappstore.org/autotrace/ +# 2017-07-12 jw, -- instructions for windows added: https://inkscape.org/en/gallery/item/10567/centerline_NIH0Rhk.pdf +# 2018-06-20 jw, -- usual suspects for paths to find autotrace on osx. +# 2018-08-10 jw, V0.7b -- require python-lxml for deb. +# 2018-08-31 jw, V0.8 -- MacOS instructions updated and MacOS path added for autotrace 0.40.0 from +# https://github.com/jnweiger/autotrace/releases +# 2018-09-01 jw, V0.8a -- Windows Path added +# 2018-09-03 jw, V0.8b -- New option: cliprect, hairline, at_filter_iterations, at_error_threshold added. +# Fixed stroke_width of scaled images. +# 2018-09-04 jw, V0.8c -- Fixed https://github.com/fablabnbg/inkscape-centerline-trace/issues/28 +# Hints for https://github.com/fablabnbg/inkscape-centerline-trace/issues/27 added. +# 2019-03-24 jw, V0.8d -- Pad one pixel border to images, so that lines touching edges are recognized by autotrace. + + +__version__ = '0.8d' # Keep in sync with centerline-trace.inx ca. line 3 and 24 +__author__ = 'Juergen Weigert ' + +import sys, os, re, math, tempfile, subprocess, base64, time + +try: + from PIL import Image + from PIL import ImageOps + from PIL import ImageStat + from PIL import ImageFilter +except: + print >>sys.stderr, "Error: Cannot import PIL. Try\n apt-get install python-pil" + sys.exit(1) + + +debug = False +# debug = True + +autotrace_exe = 'autotrace' + +# search path, so that inkscape libraries are found when we are standalone. +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): # windows + sys.path.append('C:\Program Files\Inkscape\share\extensions') + os.environ['PATH'] += os.pathsep + 'C:\Program Files\Inkscape\share\extensions' + os.environ['PATH'] += os.pathsep + 'C:\Program Files (x86)\AutoTrace' + os.environ['PATH'] += os.pathsep + 'C:\Program Files\AutoTrace' +elif sys_platform.startswith('darwin'): # mac + sys.path.append( '/Applications/Inkscape.app/Contents/Resources/extensions') + os.environ['PATH'] += ':/Applications/Inkscape.app/Contents/Resources/extensions' + os.environ['PATH'] += ':' + os.environ.get('HOME', '') + '/.config/inkscape/extensions' + os.environ['PATH'] += ':/Applications/autotrace.app/Contents/MacOS' + os.environ['PATH'] += ':/usr/local/bin:/usr/local/lib' +else: # linux + # if sys_platform.startswith('linux'): + sys.path.append('/usr/share/inkscape/extensions') + +# inkscape libraries +import inkex, simplestyle +import cubicsuperpath + +try: + # only since inkscape 0.91 + inkex.localize() +except: + pass + +from optparse import SUPPRESS_HELP + +def uutounit(self,nn,uu): + try: + return self.uutounit(nn,uu) # inkscape 0.91 + except: + return inkex.uutounit(nn,uu) # inkscape 0.48 + +class TraceCenterline(inkex.Effect): + """ + Inkscape Extension make long continuous paths from smaller parts + """ + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + + self.dumpname= os.path.join(tempfile.gettempdir(), "trace-centerline.dump") + self.autotrace_opts=[] # extra options for autotrace tuning. + self.megapixel_limit = 2.0 # max image size (limit needed, as we have no progress indicator) + self.invert_image = False # True: trace bright lines. + self.replace_image = False # True: remove image object when adding path object. + self.candidates = 15 # [1..255] Number of autotrace candidate runs. + self.filter_median = 0 # 0 to disable median filter. + self.filter_equal_light = 0.0 # [0.0 .. 1.9] Use 1.0 with photos. Use 0.0 with perfect scans. + self.hairline = False # Fixed linewidth. + self.hairline_width = 0.1 # Width of hairline [mm] + + # Test if autotrace is installed and in path + command = autotrace_exe + ' --version' + + p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = p.wait() + + out,err = p.communicate() + + found = out.find('AutoTrace') + if found == -1: + print >>sys.stderr, err + if err.find('cannot open shared object file'): + print >>sys.stderr, "NOTE: This build of autotrace is incompatible with your system, try a different build.\n" + print >>sys.stderr, "You need to install autotrace for this extension to work. Try https://github.com/jnweiger/autotrace/releases or search for autotrace version 0.40.0 or later." + exit() + + try: + self.tty = open("/dev/tty", 'w') + except: + try: + self.tty = open(os.devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + except: + self.tty = open("CON:", 'w') # windows. Does this work??? + if debug: print >>self.tty, "TraceCenterline: __init__" + + self.OptionParser.add_option('-V', '--version', + action = 'store_const', const=True, dest='version', default=False, + help='Just print version number ("'+__version__+'") and exit.') + self.OptionParser.add_option('-i', '--invert', action='store', type='inkbool', default=False, help='Trace bright lines. (Default: dark lines)') + self.OptionParser.add_option('-C', '--cliprect', action='store', type='inkbool', default=False, help='Clip to selected rectangle. (Default: Trace entire bitmap)') + self.OptionParser.add_option('-r', '--remove', action='store', type='inkbool', default=False, help='Replace image with vector graphics. (Default: Place on top)') + self.OptionParser.add_option('-H', '--hairline', action='store', type='inkbool', default=False, help='Fixed linewidth. (Default: Automatic)') + self.OptionParser.add_option('-W', '--hairline-width', action='store', + type='float', default=0.1, help="Width of a hairline [mm] (Default: 0.1)") + + self.OptionParser.add_option('--at-error-threshold', action='store', + type='float', default=2.0, help="Autotrace: Subdivide fitted curves that are offset by a number of pixels exceeding the specified real number (default: 2.0)") + self.OptionParser.add_option('--at-filter-iterations', action='store', + type='int', default=4, help="Autotrace: Smooth the curve the specified number of times prior to fitting (default: 4)") + + self.OptionParser.add_option('-m', '--megapixels', action='store', + type='float', default=2.0, help="Limit image size in megapixels. (Lower is faster)") + self.OptionParser.add_option('-e', '--equal-light', action='store', + type='float', default=0.0, help="Equalize illumination. Use 1.0 with flash photography, use 0.0 to disable.") + self.OptionParser.add_option('-c', '--candidates', action='store', + type='int', default=15, help="[1..255] Autotrace candidate runs. (Lower is much faster)") + self.OptionParser.add_option('-d', '--despecle', action='store', + type='int', default=0, help="[0..9] Apply median filter for noise reduction. (Default 0, off)") + self.OptionParser.add_option('-D', '--debug-show', action='store_const', const=True, default=False, dest='debug', help='debugging: shows processed pictures.') + + def version(self): + return __version__ + def author(self): + return __author__ + + def svg_centerline_trace(self, image_file, cliprect=None): + """ svg_centerline_trace prepares the image by + a) limiting_size (aka runtime), + b) removing noise, + c) linear histogram expansion, + d) equalized spatial illumnination (my own algorithm) + + Then we run several iterations of autotrace and find the optimal black white threshold by evaluating + all outputs. The output with the longest total path and the least path elements wins. + + A cliprect dict with the keys x, y, w, h can be specified. All 4 are expected in the + range 0..1 and are mapped to the image width and height. + """ + num_attempts = self.candidates # 15 is great. min 1, max 255, beware it gets much slower with more attempts. + autotrace_cmd = [ autotrace_exe, + '--filter-iterations', str(self.options.at_filter_iterations), + '--error-threshold', str(self.options.at_error_threshold), + '--centerline', + '--input-format=pbm', + '--output-format=svg' ] + autotrace_cmd += self.autotrace_opts + + stroke_style_add = 'stroke-width:%.2f; fill:none; stroke-linecap:round;' + + + if debug: print >>self.tty, "svg_centerline_trace start "+image_file + if debug: print >>self.tty, '+ '+' '.join(autotrace_cmd) + im = Image.open(image_file) + orig_im_size = (im.size[0], im.size[1]) + box=[0,0,0,0] + if cliprect is not None: + box[0] = cliprect['x'] * im.size[0] + box[1] = cliprect['y'] * im.size[1] + # sorted(min, val, max)[1] does clamping without chaining min(max()) in an ugly way. + box[2] = sorted((0, int(0.5 + box[0] + cliprect['w'] * im.size[0]), im.size[0]))[1] + box[3] = sorted((0, int(0.5 + box[1] + cliprect['h'] * im.size[1]), im.size[1]))[1] + box[0] = sorted((0, int(0.5 + box[0]), im.size[0]))[1] + box[1] = sorted((0, int(0.5 + box[1]), im.size[1]))[1] + im = im.crop(box) + if box[0] == box[2] or box[1] == box[3]: + print >>sys.stderr, "ERROR: Cliprect and Image do not overlap.", orig_im_size, box, cliprect + return ( '', 1, orig_im_size) + + if 'A' in im.mode: + # this image has alpha. Paste it onto white or black. + im = im.convert("RGBA") + if self.invert_image: + bg = Image.new('RGBA', im.size, (0,0,0,255)) # black background + else: + bg = Image.new('RGBA', im.size, (255,255,255,255)) # white background + im = Image.alpha_composite(bg, im) + + im = im.convert(mode='L', dither=None) + if debug: print >>self.tty, "seen: " + str([im.format, im.size, im.mode]) + scale_limit = math.sqrt(im.size[0] * im.size[1] * 0.000001 / self.megapixel_limit) + if scale_limit > 1.0: + print >>sys.stderr, "Megapixel limit ("+str(self.megapixel_limit)+ ") exceeded. Scaling down by factor : "+str(scale_limit) + im = im.resize((int(im.size[0]/scale_limit), int(im.size[1]/scale_limit)), resample = Image.BILINEAR) + + if self.invert_image: im = ImageOps.invert(im) + + ### Add a one pixel padding around the image. Otherwise autotrace fails when a line touches the edge of the image. + im = ImageOps.expand(im, border=1, fill=255) + + if self.filter_median > 0: + if self.filter_median % 2 == 0: self.filter_median = self.filter_median + 1 # need odd values. + im = im.filter(ImageFilter.MedianFilter(size=self.filter_median)) # feeble denoise attempt. FIXME: try ROF instead. + im = ImageOps.autocontrast(im, cutoff=0) # linear expand histogram (an alternative to equalize) + ## cutoff=2 destroys some images, see https://github.com/fablabnbg/inkscape-centerline-trace/issues/28 + + # not needed here: + # im = im.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)) # parameters depend on size of image! + + if self.filter_equal_light > 0.0: + scale_thumb = math.sqrt(im.size[0] * im.size[1] * 0.0001) # exactly 0.01 MP (e.g. 100x100) + im_neg_thumb = ImageOps.invert(im.resize((int(im.size[0]/scale_thumb), int(im.size[1]/scale_thumb)), resample = Image.BILINEAR)) + im_neg_thumb = im_neg_thumb.filter(ImageFilter.GaussianBlur(radius=30)) + im_neg_blur = im_neg_thumb.resize(im.size, resample=Image.BILINEAR) + if self.options.debug: im_neg_blur.show() + + if debug: print >>self.tty, "ImageOps.equalize(im) done" + im = Image.blend(im, im_neg_blur, self.filter_equal_light*0.5) + im = ImageOps.autocontrast(im, cutoff=0) # linear expand histogram (an alternative to equalize) + if self.options.debug: im.show() + + def svg_pathstats(path_d): + """ calculate statistics from an svg path: + length (measuring bezier splines as straight lines through the handles). + points (all, including duplicates) + segments (number of not-connected!) path segments. + """ + path_d = path_d.lower() + p_points = 0 + p_length = 0 + p_segments = 0 + for p in path_d.split('m'): + + pp = re.sub('[cl,]', ' ', p) + pp,closed = re.subn('z\s*$','',pp) + xy = pp.split() + if len(xy) < 2: + # print len(pp) + # print "short path error" + continue + x0 = float(xy[0]) + y0 = float(xy[1]) + p_points += 1 + x = xy[2::2] + y = xy[3::2] + if len(x): + p_segments += 1 + if closed: + x.extend(x0) + y.extend(y0) + + for i in range(len(x)): + p_points += 1 + dx = float(x[i]) - x0 + dy = float(y[i]) - y0 + p_length += math.sqrt( dx * dx + dy * dy ) + x0,y0 = float(x[i]),float(y[i]) + + return { 'points':p_points, 'segments':p_segments, 'length':p_length } + + # slice with a list of histogram maps + # 1 -> 128 + # 3 -> 64,128,192 + # ... + + candidate = {} + if self.options.debug: im.show() + + for i in range(num_attempts): + threshold = int(256.*(1+i)/(num_attempts+1)) + # make lookup table that maps to black/white using threshold. + lut = [ 255 for n in range(threshold) ] + [ 0 for n in range(threshold,256) ] + if debug: print >>self.tty, "attempt "+ str(i) + bw = im.point(lut, mode='1') + if debug: print >>self.tty, "bw from lut done: threshold=%d" % threshold + if self.options.debug: bw.show(command="/usr/bin/display -title=bw:threshold=%d" % threshold) + cand = { 'threshold':threshold, 'img_width':bw.size[0], 'img_height':bw.size[1], 'mean': ImageStat.Stat(im).mean[0] } + fp = tempfile.NamedTemporaryFile(prefix="centerlinetrace", suffix='.pbm', delete=False) + fp.write("P4\n%d %d\n" % (bw.size[0], bw.size[1])) + fp.write(bw.tobytes()) + fp.close() + if debug: print >>self.tty, "pbm from bw done" + # try: + p = subprocess.Popen(autotrace_cmd + [fp.name], stdout=subprocess.PIPE) + + # the following crashes Inkscape (!) when used with GUI and autotrace not installed + #except Exception as e: + #print '+ '+' '.join(autotrace_cmd) + #print e + #print "Try:\n sudo apt-get install autotrace" + #sys.exit(1) + + cand['svg'] = p.communicate()[0] + if debug: print >>self.tty, "autotrace done" + if not len(cand['svg']): + print >>sys.stderr, "autotrace_cmd: " + ' '.join(autotrace_cmd + [fp.name]) + print >>sys.stderr, "ERROR: returned nothing, leaving tmp bmp file around for you to debug" + cand['svg'] = '' # empty dummy + else: + os.unlink(fp.name) + + # \n\n\n + try: + xml = inkex.etree.fromstring(cand['svg']) + except: + print >>sys.stderr, "autotrace_cmd: " + ' '.join(autotrace_cmd + [fp.name]) + print >>sys.stderr, "ERROR: no proper xml returned: '" + cand['svg'] + "'" + xml = inkex.etree.fromstring('') # empty dummy + + p_len,p_seg,p_pts = 0,0,0 + for p in xml.findall('path'): + pstat = svg_pathstats(p.attrib['d']) + p_len += pstat['length'] + p_seg += pstat['segments'] + p_pts += pstat['points'] + cand['length'] = p_len + cand['segments'] = p_seg + cand['points'] = p_pts + + if cand['mean'] > 127: + cand['mean'] = 255 - cand['mean'] # should not happen + blackpixels = cand['img_width'] * cand['img_height'] * cand['mean'] / 255. + cand['strokewidth'] = blackpixels / max(cand['length'],1.0) + candidate[i] = cand + + def calc_weight(cand, idx): + offset = (num_attempts/2.-idx) * (num_attempts/2.-idx) * (cand['img_width']+cand['img_height']) + w = cand['length']*5 - offset*.005 - cand['points']*.2 - cand['segments']*20 + # print "calc_weight(%d) = rl=%f o=%f p=%f s=%f -> w=%f" % (idx, cand['length']*5, offset*.005, cand['points']*.2, cand['segments']*20, w) + return w + + best_weight_idx = 0 + for n in candidate.keys(): + # print "candidate ", n + c = candidate[n] + # print "\t mean=%d len=%d seg=%d width=%d" % (c['mean'], c['length'], c['segments'], c['strokewidth']) + if calc_weight(c,n) > calc_weight(candidate[best_weight_idx], best_weight_idx): + best_weight_idx = n + + if debug: print >>self.tty, "best: %d/%d" % (best_weight_idx, num_attempts) + ## if standalone: + # svg = re.sub('stroke:', (stroke_style_add % candidate[best_weight_idx]['strokewidth']) + ' stroke:', candidate[best_weight_idx]['svg']) + # return svg + + ## inkscape-extension: + return ( candidate[best_weight_idx]['svg'], candidate[best_weight_idx]['strokewidth'], orig_im_size ) + + + def calc_unit_factor(self, units='mm'): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + dialog_units = uutounit(self, 1.0, units) + self.unit_factor = 1.0 / dialog_units + return self.unit_factor + + def effect(self): + global debug + + if self.options.version: + print __version__ + sys.exit(0) + if self.options.invert is not None: self.invert_image = self.options.invert + if self.options.remove is not None: self.replace_image = self.options.remove + if self.options.megapixels is not None: self.megapixel_limit = self.options.megapixels + if self.options.candidates is not None: self.candidates = self.options.candidates + if self.options.despecle is not None: self.filter_median = self.options.despecle + if self.options.equal_light is not None: self.filter_equal_light = self.options.equal_light + if self.options.hairline is not None: self.hairline = self.options.hairline + if self.options.hairline_width is not None: self.hairline_width = self.options.hairline_width + # if self.options.debug is not None: debug = self.options.debug + # self.options.debug = True + + self.calc_unit_factor() + + cliprect = None + if self.options.cliprect: + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + print >>sys.stderr, "Error: id="+str(id)+" is a path.\nNeed a rectangle object for clipping." + if node.tag == inkex.addNS('rect','svg'): + if debug: print >>self.tty, "cliprect: id="+str(id), "node="+str(node.tag) + cliprect = { + 'x': float(node.get('x', 0)), + 'y': float(node.get('y', 0)), + 'w': float(node.get('width', 0)), + 'h': float(node.get('height', 0)), + 'node': node + } + if debug: print >>self.tty, "cliprect: id="+str(id), "cliprect="+str(cliprect) + + if not len(self.selected.items()): + inkex.errormsg(_("Please select an image.")) + return + + if cliprect is not None and len(self.selected.items()) < 2: + inkex.errormsg(_("Please select an image. Only a cliprect was selected.")) + return + + for id, node in self.selected.iteritems(): + if debug: print >>self.tty, "id="+str(id), "tag="+str(node.tag) + if self.options.cliprect and node.tag == inkex.addNS('rect','svg'): + continue + if node.tag != inkex.addNS('image','svg'): + inkex.errormsg(_("Object "+id+" is NOT an image. seen:"+str(node.tag)+" expected:"+inkex.addNS('image','svg')+"\n Try - Object->Ungroup")) + return + + # images can also just have a transform attribute, and no x or y, + # FIXME: should find the image transformation! + # could be replaced by a (slower) call to command line, or by computeBBox from simpletransform + svg_x_off = float(node.get('x', 0)) + svg_y_off = float(node.get('y', 0)) + svg_img_w = float(node.get('width', 0.001)) + svg_img_h = float(node.get('height', 0.001)) + if cliprect is not None: + # normalize cliprect into range 0..1 + cliprect['x'] = cliprect['x'] - svg_x_off + cliprect['y'] = cliprect['y'] - svg_y_off + cliprect['x'] = cliprect['x'] / svg_img_w + cliprect['y'] = cliprect['y'] / svg_img_h + cliprect['w'] = cliprect['w'] / svg_img_w + cliprect['h'] = cliprect['h'] / svg_img_h + + # handle two cases. Embedded and linked images + # + # >self.tty, "Dump written to "+self.dumpname + # + # ###################### + + if href[:7] == 'file://': + filename=href[7:] + if debug: print >>self.tty, "linked image: ="+filename + elif href[0] == '/' or href[0] == '.': + filename=href + if debug: print >>self.tty, "linked image path: ="+filename + elif href[:11] == 'data:image/': + l = href[11:].index(';') + type = href[11:11+l] # 'png' 'jpeg' + if debug: print >>self.tty, "embedded image: "+href[:11+l] + img=base64.decodestring(href[11+l+8:]) + f=tempfile.NamedTemporaryFile(mode="wb", prefix='centerlinetrace', suffix="."+type, delete=False) + f.write(img) + filename=f.name + f.close() + else: + inkex.errormsg(_("Neither file:// nor data:image/; prefix. Cannot parse PNG/JPEG image href "+href[:200]+"...")) + sys.exit(1) + if debug: print >>self.tty, "filename="+filename + # + path_svg,stroke_width,im_size = self.svg_centerline_trace(filename, cliprect) + xml = inkex.etree.fromstring(path_svg) + try: + path_d=xml.find('path').attrib['d'] + except: + inkex.errormsg(_("Couldn't trace the path. Please make sure that the checkbox for tracing bright lines is set correctly and that your drawing has enough contrast.")) + sys.exit(1) + + sx = svg_img_w/im_size[0] + sy = svg_img_h/im_size[1] + if debug: print >>self.tty, "svg_im_width ", svg_img_w, "sx=",sx + if debug: print >>self.tty, "svg_im_height ", svg_img_h, "sy=",sy + if debug: print >>self.tty, "im_x ", svg_x_off + if debug: print >>self.tty, "im_y ", svg_y_off + if debug: print >>self.tty, "pixel_size= ", im_size + ## map the coordinates of the returned pixel path to the coordinates of the original SVG image. + if cliprect is not None: + svg_x_off = max(svg_x_off, float(cliprect['node'].get('x', 0))) + svg_y_off = max(svg_y_off, float(cliprect['node'].get('y', 0))) + matrix = "translate(%g,%g) scale(%g,%g)" % (svg_x_off, svg_y_off, sx, sy) + # + if href[:5] == 'data:': + os.unlink(filename) ## it was a temporary file (representing an embedded image). + # + # Create SVG Path + if self.hairline: + stroke_width = self.hairline_width * 96. / 25.4 # mm2px FIXME: 96dpi is just a default guess. + else: + stroke_width = stroke_width * 0.5 * (abs(sx) + abs(sy)) + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-linecap': 'round', 'stroke-width': stroke_width } + if self.invert_image: style['stroke'] = '#777777' + path_attr = { 'style': simplestyle.formatStyle(style), 'd': path_d, 'transform': matrix } + ## insert the new path object + inkex.etree.SubElement(self.current_layer, inkex.addNS('path', 'svg'), path_attr) + ## delete the old image object + if self.replace_image: + node.getparent().remove(node) + if cliprect is not None: # and its cliprect ... + cliprect['node'].getparent().remove(cliprect['node']) + + + +if __name__ == '__main__': + e = TraceCenterline() + + e.affect() + sys.exit(0) # helps to keep the selection diff --git a/fablabchemnitz_chain_paths.inx b/fablabchemnitz_chain_paths.inx new file mode 100644 index 0000000..4a940af --- /dev/null +++ b/fablabchemnitz_chain_paths.inx @@ -0,0 +1,34 @@ + + + <_name>Chain Paths + fablabchemnitz.de.chain_paths + org.inkscape.output.svg.inkscape + inkex.py + fablabchemnitz_chain_paths.py + 0.01 + + + + + + + + false + + + + + https://github.com/fablabnbg/inkscape-chain-paths + Version 0.5 + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_chain_paths.py b/fablabchemnitz_chain_paths.py new file mode 100644 index 0000000..8854407 --- /dev/null +++ b/fablabchemnitz_chain_paths.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python +# +# Inkscape extension making long continuous paths from shorter pieces. +# (C) 2015 juewei@fabmail.org +# +# code snippets visited to learn the extension 'effect' interface: +# - convert2dashes.py +# - http://github.com/jnweiger/inkscape-silhouette +# - http://github.com/jnweiger/inkscape-gears-dev +# - http://sourceforge.net/projects/inkcut/ +# - http://code.google.com/p/inkscape2tikz/ +# - http://code.google.com/p/eggbotcode/ +# +# 2015-11-15 jw, V0.1 -- initial draught +# 2015-11-16 jw, V0.2 -- fixed endpoints after chaining. +# 2015-11-16 jw, V0.3 -- all possible chains connected. Yeah +# 2015-11-16 jw, V0.4 -- gui fully functional. +# 2015-11-26 jw, V0.5 -- HACK to resolve some self-reversing path segments. +# https://github.com/fablabnbg/inkscape-chain-paths/issues/1 + +__version__ = '0.5' # Keep in sync with chain_paths.inx ca line 22 +__author__ = 'Juergen Weigert ' + +import sys, os, shutil, time, logging, tempfile, math + +#debug = True +debug = False + +# search path, so that inkscape libraries are found when we are standalone. +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): # windows + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): # mac + sys.path.append('/Applications/Inkscape.app/Contents/Resources/extensions') +else: # linux + # if sys_platform.startswith('linux'): + sys.path.append('/usr/share/inkscape/extensions') + +# inkscape libraries +import inkex +import cubicsuperpath + +inkex.localize() + +from optparse import SUPPRESS_HELP + +def uutounit(self,nn,uu): + try: + return self.uutounit(nn,uu) # inkscape 0.91 + except: + return inkex.uutounit(nn,uu) # inkscape 0.48 + +class ChainPaths(inkex.Effect): + """ + Inkscape Extension make long continuous paths from smaller parts + """ + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.chain_epsilon = 0.01 + self.snap_ends = True + self.segments_done = {} + self.min_missed_distance_sq = None + self.chained_count = 0 + + try: + self.tty = open("/dev/tty", 'w') + except: + try: + self.tty = open("CON:", 'w') # windows. Does this work??? + except: + self.tty = open(os.devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + if debug: print >>self.tty, "__init__" + + self.OptionParser.add_option('-V', '--version', + action = 'store_const', const=True, dest='version', default=False, + help='Just print version number ("'+__version__+'") and exit.') + self.OptionParser.add_option('-s', '--snap', action='store', dest='snap_ends', type='inkbool', default=True, help='snap end-points together when connecting') + self.OptionParser.add_option('-u', '--units', action='store', dest="units", type="string", default="mm", help="measurement unit for epsilon") + self.OptionParser.add_option('-e', '--epsilon', action='store', + type='float', dest='chain_epsilon', default=0.01, help="Max. distance to connect [mm]") + + def version(self): + print "hiuhu" + return __version__ + def author(self): + return __author__ + + def calc_unit_factor(self, units='mm'): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + dialog_units = uutounit(self, 1.0, units) + self.unit_factor = 1.0 / dialog_units + return self.unit_factor + + def reverse_segment(self, seg): + r = [] + for s in reversed(seg): + # s has 3 elements: handle1, point, handle2 + # Swap handles. + s.reverse() + r.append(s) + return r + + def set_segment_done(self, id, n, msg=''): + if not id in self.segments_done: + self.segments_done[id] = {} + self.segments_done[id][n] = True + if debug: print >>self.tty, "done", id, n, msg + + def is_segment_done(self, id, n): + if not id in self.segments_done: + return False + if n in self.segments_done[id]: + return True + return False + + def link_segments(self, seg1, seg2): + if self.snap_ends: + seg = seg1[:-1] + p1 = seg1[-1] + p2 = seg2[0] + # fuse p1 and p2 to create one new point: + # first handle from p1, point coordinates averaged, second handle from p2 + seg.append([ [ p1[0][0] , p1[0][1] ], + [(p1[1][0]+p2[1][0])*.5, (p1[1][1]+p2[1][1])*.5], + [ p2[2][0] , p2[2][1] ] ]) + seg.extend(seg2[1:]) + else: + seg = seg1[:] + seg.extend(seg2[:]) + self.chained_count += 1 + return seg + + + def near_ends(self, end1, end2): + """ requires self.eps_sq to be the square of the near distance """ + dx = end1[0] - end2[0] + dy = end1[1] - end2[1] + d_sq = dx * dx + dy * dy + if d_sq > self.eps_sq: + if self.min_missed_distance_sq is None: + self.min_missed_distance_sq = d_sq + elif self.min_missed_distance_sq > d_sq: + self.min_missed_distance_sq = d_sq + return False + else: + return True + + + def effect(self): + if self.options.version: + print __version__ + sys.exit(0) + + self.calc_unit_factor(self.options.units) + + if self.options.snap_ends is not None: self.snap_ends = self.options.snap_ends + if self.options.chain_epsilon is not None: self.chain_epsilon = self.options.chain_epsilon + if self.chain_epsilon < 0.001: self.chain_epsilon = 0.001 # keep a minimum. + self.eps_sq = self.chain_epsilon * self.unit_factor * self.chain_epsilon * self.unit_factor + + if not len(self.selected.items()): + inkex.errormsg(_("Please select one or more objects.")) + return + + segments = [] + for id, node in self.selected.iteritems(): + if node.tag != inkex.addNS('path','svg'): + inkex.errormsg(_("Object "+id+" is not a path. Try\n - Path->Object to Path\n - Object->Ungroup")) + return + if debug: print >>self.tty, "id="+str(id), "tag="+str(node.tag) + path_d = cubicsuperpath.parsePath(node.get('d')) + sub_idx = -1 + for sub in path_d: + sub_idx += 1 + # sub=[[[200.0, 300.0], [200.0, 300.0], [175.0, 290.0]], [[175.0, 265.0], [220.37694, 256.99876], [175.0, 240.0]], [[175.0, 215.0], [200.0, 200.0], [200.0, 200.0]]] + # this is a path of three points. All the bezier handles are included. the Structure is: + # [[handle0_x, point0, handle0_1], [handle1_0, point1, handle1_2], [handle2_1, point2, handle2_x]] + if debug: print >>self.tty, " sub="+str(sub) + end1=[sub[0][1][0],sub[0][1][1]] + end2=[sub[-1][1][0],sub[-1][1][1]] + + while ((len(sub) > 1) and self.near_ends(end1, end2)): + if debug: print >>self.tty, "splitting self-reversing path, length:", len(sub) + ## We split the path and generate more snippets. + splitp=[sub[-2][1][0],sub[-2][1][1]] + segments.append({'id': id, 'n': sub_idx, 'end1': splitp, 'end2':end2, 'seg': [sub[-2],sub[-1]]}) + sub_idx += 1 + sub.pop() + end2=splitp + + segments.append({'id': id, 'n': sub_idx, 'end1': end1, 'end2':end2, 'seg': sub}) + if node.get(inkex.addNS('type','sodipodi')): + del node.attrib[inkex.addNS('type', 'sodipodi')] + if debug: print >>self.tty, "-------- seen:" + for s in segments: + if debug: print >>self.tty, s['id'],s['n'],s['end1'],s['end2'] + + # chain the segments + obsoleted = 0 + remaining = 0 + for id, node in self.selected.iteritems(): + # path_style = simplestyle.parseStyle(node.get('style')) + path_d = cubicsuperpath.parsePath(node.get('d')) + new=[] + cur_idx = -1 + for cur in path_d: + cur_idx += 1 + if not self.is_segment_done(id, cur_idx): + # quadratic algorithm: we check both ends of the current segment. + # If one of them is near another known end from the segments list, we + # chain this segment to the current segment and remove it from the + # list, + # end1-end1 or end2-end2: The new segment is reversed. + # end1-end2: The new segment is prepended to the current segment. + # end2-end1: The new segment is appended to the current segment. + self.set_segment_done(id, cur_idx, "output") # do not cross with ourselves. + end1=[cur[0][1][0],cur[0][1][1]] + end2=[cur[-1][1][0],cur[-1][1][1]] + segments_idx = 0 + while segments_idx < len(segments): + seg = segments[segments_idx] + if self.is_segment_done(seg['id'], seg['n']): + segments_idx += 1 + continue + + if (self.near_ends(end1, seg['end1']) or + self.near_ends(end2, seg['end2'])): + seg['seg'] = self.reverse_segment(seg['seg']) + seg['end1'],seg['end2'] = seg['end2'],seg['end1'] + if debug: print >>self.tty, "reversed seg", seg['id'], seg['n'] + + if self.near_ends(end1, seg['end2']): + # prepend seg to cur + self.set_segment_done(seg['id'], seg['n'], 'prepended to '+id+' '+str(cur_idx)) + cur = self.link_segments(seg['seg'], cur) + end1=[cur[0][1][0],cur[0][1][1]] + segments_idx = 0 + continue + + if self.near_ends(end2, seg['end1']): + # append seg to cur + self.set_segment_done(seg['id'], seg['n'], 'appended to '+id+' '+str(cur_idx)) + cur = self.link_segments(cur, seg['seg']) + end2=[cur[-1][1][0],cur[-1][1][1]] + segments_idx = 0 + continue + + segments_idx += 1 + + new.append(cur) + + if not len(new): + # node.clear() + node.getparent().remove(node) + obsoleted += 1 + if debug: print >>self.tty, "Path node obsoleted:", id + else: + remaining += 1 + node.set('d',cubicsuperpath.formatPath(new)) + + # statistics: + print >>self.tty, "Path nodes obsoleted:", obsoleted, "\nPath nodes remaining:", remaining + if self.min_missed_distance_sq is not None: + print >>self.tty, "min_missed_distance:", math.sqrt(float(self.min_missed_distance_sq))/self.unit_factor, '>', self.chain_epsilon, self.options.units + print >>self.tty, "Successful link operations: ", self.chained_count + +if __name__ == '__main__': + e = ChainPaths() + + e.affect() + sys.exit(0) # helps to keep the selection diff --git a/fablabchemnitz_chipScratches.inx b/fablabchemnitz_chipScratches.inx new file mode 100644 index 0000000..0958f37 --- /dev/null +++ b/fablabchemnitz_chipScratches.inx @@ -0,0 +1,52 @@ + + + <_name>Chip Scratches + fablabchemnitz.de.chipScratches + fablabchemnitz_chipScratches.py + inkex.py + + + + True + 1000 + 1000 + 1.0 + 200 + + + True + 2.0 + 0.0 + 0.2 + False + 90. + 0.0 + False + + + True + 1.0 + 0.0 + 1.0 + False + + + True + 1.0 + 0.0 + 10.0 + False + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_chipScratches.py b/fablabchemnitz_chipScratches.py new file mode 100644 index 0000000..5472166 --- /dev/null +++ b/fablabchemnitz_chipScratches.py @@ -0,0 +1,872 @@ +#!/usr/bin/env python + +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import math +import inkex +from simplestyle import * +import random + +inxGen = 0 + +""" +This extension creates visual noise of various kinds, using +3 ingredients, scratches, chips, and specks. + +Extensions -> Generate -> Noise -> ChipScratches + +The 3 ingredients go into 3 Inkscape groups. Where they are in +the tree is controlled by the object selected at the time the +extension is called. They become sisters of the selected object, +under the same parent. If there is no selection, they go to +the root level. + +In the text below, each * indicates a settable parameter in +the pop-up box. + +The extension fills a rectangle, which defaults* to the page +size, or is width* by height*. The overall size* and number* +of marks is set. However, for each of the 3, a multiplier +changes the size* and number*. To get the overall value, +just set the multiplier to 1.0 + +Also, each of the 3 may be separately enabled* or disabled. + +For each ingredient, it is possible to set the size to grow* +with y. For this case, it is possible to set the size to +a negative multiplier, so that it, when growing, will pass +through zero somewhere in the middle of the box. + +For scratches, it is possible to change their orientation +from vertical to angular*, radiating from the center of the box. +(If so, growth is measured from the center.) The initial +angle* and the change with distance* are set. + +For chips and specks, there are similar controls, except the +angular ones, which are omitted. + +Last, there is the option to use a density gradient*. In the +simple case, the probability of making a mark is the same +everywhere. With a gradient, it changes from 0 to 1 across +the box from left to right. + +-- + +Some of the features above may be of little use, while some +omitted ones might be important. This is a beta version, so +I await user feedback. + +I notice that the extension might take 5 seconds to run. Is +this important? A bit of clean-up might help this. + +Two features that might slow it down considerably are clusters +and collisions. Collisions, if implemented, would keep any 2 +marks from landing on top of each other. Slow, because each +mark must search all the previous marks. + +Clusters is some method of putting new marks near old ones. +I think this would be especially useful for specks, which +could be clustered around the end of scratches. Right now, +they're uniform, and so fade into the background. + +Again, feedback? + +Technical note: This file may also be used to generate the inx +file. (The bundled inx file was generated this way.) Set the +global /inxGen/ =1 and run the file stand-alone. + +- AK Sept 2018 +""" + +# Define passed parameters +parms = """ +#tabs#Overall +n Nmain "page" , Current index tab +b pgsizep True , Default rectangle to page size? +i rx 1000 max="10000" Width +i ry 1000 max="10000" Height +f mainSize 1.0 max="100.0" Size of objects +i mainNum 200 max="5000" Number of objects +#tab#Scratches +b honp True , Enable scratches +f hsize 2.0 max="100.0",min="-100.0" Size of scratches +f hgrow 0.0 max="100.0",min="-100.0" Grow scratches with distance +f hnum 0.2 max="100.0" Number of scratches +b hrad False , Angle scratches toward center +f hang 90. max="180.0",min="-180.0" Angle from radius +f hcurve 0.0 max="100.0",min="-100.0" Change angle with distance +b hgrad False , Use density gradient +#tab#Chips +b conp True , Enable chips +f csize 1.0 max="100.0",min="-100.0" Size of chips +f cgrow 0.0 max="100.0",min="-100.0" Grow chips with distance +f cnum 1.0 max="100.0" Number of chips +b cgrad False , Use density gradient +#tab#Specks +b sonp True , Enable specks +f ssize 1.0 max="100.0",min="-100.0" Size of specks +f sgrow 0.0 max="100.0",min="-100.0" Grow specks with distance +f snum 10.0 max="100.0" Number of specks +b sgrad False , Use density gradient +#tabe# + + """ +tdic = { + "i" : "int", + "f" : "float", + "s" : "str", + "n" : "str", #For the index tab name + "b" : "inkbool", +} + +tdic2 = { + "i" : "int", + "f" : "float", + "s" : "str", + "n" : "str", #For the index tab name + "b" : "bool", +} + + +class noiseEffect(inkex.Effect): + """ +Creates visual noise. 3 kinds: Scratches, chips, specks. +50, 100, 100 instances are predefined. These are chosen +randomly and scattered randomly across the page. Controls +for number and size, as well as some specific to each type. + """ + def __init__(self): + """ + Constructor. + Defines the parms option of a script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + def callOP( p, self ) : + call = ("self.OptionParser.add_option('', '--%s', action = 'store'," + + "type = '%s', dest = '%s', default = %s, help = '%s')") + w = p.split(None, 4) + eval(call % (w[1], tdic[w[0]], w[1], w[2], w[4] )) + + for parm in parms.split('\n') : + if mt(parm) : + continue + if parm[0] == '#' : + continue + callOP( parm, self ) + + + + def effect(self): + """ + Effect behaviour. + Overrides base class' method. + """ + + for parm in parms.split('\n') : + if mt(parm) : + continue + if parm[0] == '#' : + continue + w = parm.split(None, 4) + exec('%s = %s( self.options.%s)' % (w[1], tdic2[w[0]], w[1]) ) + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + if pgsizep : + try : + width = inkex.unittouu(svg.get('width')) + height = inkex.unittouu(svg.attrib['height']) + except AttributeError : + width = self.unittouu(svg.get('width')) + height = self.unittouu(svg.attrib['height']) + rx = width + ry = height + #inkex.errormsg("Page size %d %d" % (width, height)) + + svg = self.document.getroot() + + seld = self.selected + if len(seld) : + id = seld.keys()[0] + sel = seld[id] + parent = self.getParentNode(sel) + else : + parent = svg + +#Create scratches + + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : mainSize * hsize, + 'enable' : honp, + 'num' : int( mainNum * hnum ), + 'grow' : hgrow, + 'radial' : hrad, + 'ang' : hang, + 'curve' : hcurve, + 'grad' : hgrad, + } + draw( scratches, parent, pdic) + +#Create chips + + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : mainSize * csize, + 'enable' : conp, + 'num' : int( mainNum * cnum ), + 'grow' : cgrow, + 'radial' : False, + 'ang' : False, + 'curve' : False, + 'grad' : cgrad, + } + draw( chips, parent, pdic) + +#Create specks + + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : mainSize * ssize, + 'enable' : sonp, + 'num' : int( mainNum * snum ), + 'grow' : sgrow, + 'radial' : False, + 'ang' : False, + 'curve' : False, + 'grad' : sgrad, + } + draw( specks, parent, pdic) + +def draw( obj, parent, pdic) : + if not pdic['enable'] : + return + + group = inkex.etree.SubElement(parent, 'g') + + if pdic['grad'] : + f = lambda x: math.sqrt(x) + else : + f = lambda x: x + + rx = pdic['rx'] + ry = pdic['ry'] + fmstyle = formatStyle({"fill" : "#000000"}) + mrx = rx // 2 + mry = ry // 2 + mrmax = mrx if mrx > mry else mry + #Curves 90 going from the center to the edge (long dim.) if parm = 1.0 + curve = pdic['curve'] * 0.5 * math.pi / mrmax + + ctrs = [(rx * f(random.random()) , ry * random.random()) + for i in range(pdic['num'])] + zp = 2 + 3 * int(random.random()*len(obj) / 3 ) + for ctr in ctrs : + path = inkex.etree.Element(inkex.addNS('path','svg')) + path.set('style', fmstyle) + zp = (zp + 3) % len(obj) + path.set('d', obj[zp]) + trstring = "translate (%g %g)" % ctr + if pdic['radial'] : + ang = math.atan2(ctr[1]-mry , ctr[0]-mrx) + curve * math.sqrt( + (ctr[1]-mry)**2 + (ctr[0]-mrx)**2) + trstring += " rotate (%g)" % (ang * 180 / math.pi + pdic['ang']) + if pdic['size'] != 1.0 or pdic['grow'] != 0.0 : + if pdic['radial'] : + size = math.sqrt((ctr[1]-mry)**2 + (ctr[0]-mrx)**2) * ( + pdic['grow'] / mrmax ) + pdic['size'] + else : + size = ctr[1] * pdic['grow'] / mrmax + pdic['size'] + trstring += " scale (%g)" % size + path.set('transform', trstring) + group.append(path) + + +chips=( +4.17065, 3.83403, +"M -2.98542 -3.8338 c 0.34234,0 0.74533,0.14835 0.89583,0.32966 0.15043,0.18131 0.19014,0.32965 0.088,0.32965 -0.10212,0 0.0341,0.15422 0.30304,0.34254 0.26887,0.18832 0.56984,0.29206 0.66874,0.23093 0.0989,-0.0612 0.44473,-0.1589 0.76833,-0.21763 0.48389,-0.0877 0.6122,-0.0113 0.72327,0.43138 0.0745,0.29608 0.0843,0.73458 0.0215,0.97438 -0.0648,0.24806 -0.005,0.43833 0.13992,0.44082 0.13978,0.003 0.49312,0.18902 0.7855,0.41379 0.40627,0.31226 0.68285,0.3654 1.1727,0.22492 0.66407,-0.19047 1.37707,0.0827 1.57744,0.60479 0.14702,0.38319 -1.10951,0.94947 -2.1067,0.94947 -0.77639,0 -0.84516,0.0496 -0.84516,0.60652 0,0.36844 -0.17253,0.71404 -0.43955,0.88079 -0.24174,0.15096 -0.43953,0.47139 -0.43953,0.71211 0,0.56109 -0.49051,0.55224 -1.73627,-0.0314 -0.53191,-0.24917 -0.87804,-0.51738 -0.7692,-0.59622 0.10884,-0.0788 0.21711,-0.44315 0.24037,-0.80954 0.0361,-0.56828 -0.10116,-0.75694 -0.93402,-1.28385 -0.53699,-0.33972 -0.97558,-0.78166 -0.97308,-0.98208 0.003,-0.31564 0.0318,-0.32027 0.21635,-0.0349 0.14197,0.21974 0.21384,0.23816 0.21631,0.0549 0.003,-0.15109 -0.19671,-0.47488 -0.44125,-0.7194 -0.31961,-0.31961 -0.38937,-0.55126 -0.24852,-0.82414 0.10773,-0.20875 0.26287,-0.75031 0.34467,-1.20358 0.13057,-0.72333 0.22505,-0.82414 0.77135,-0.82414 z", +4.13855, 4.24985, +"M -1.85248 -4.24978 c 0.27589,0.003 0.47037,0.0646 0.48312,0.20271 0.0137,0.1478 0.0399,0.47805 0.0582,0.73402 0.026,0.36225 0.21413,0.47395 0.84811,0.50359 0.44794,0.0209 0.94806,0.0473 1.11126,0.0582 0.16314,0.011 0.39599,0.28179 0.51767,0.601744 0.12163,0.31997 0.37346,0.58176 0.55949,0.58176 0.18595,0 0.48549,0.14734 0.66583,0.3277 0.18035,0.18035 0.57257,0.36361 0.87127,0.40723 0.35897,0.0524 0.62021,0.31158 0.77039,0.76447 0.20387,0.61474 0.15184,0.74842 -0.50541,1.29714 -0.40292,0.33638 -0.73264,0.79074 -0.73264,1.0099 0,0.21915 -0.16606,0.65189 -0.36907,0.96172 -0.20296,0.30985 -0.30165,0.67266 -0.21907,0.80628 0.0894,0.1446 -0.091,0.24316 -0.44539,0.24316 -0.32756,0 -0.5954,-0.0917 -0.5954,-0.20362 0,-0.11191 0.15163,-0.63243 0.33677,-1.15715 0.18525,-0.52472 0.2637,-0.99731 0.17453,-1.04989 -0.0892,-0.0526 -0.63351,-0.17283 -1.20942,-0.26725 -0.57596,-0.0944 -1.10945,-0.26987 -1.18578,-0.38997 -0.0763,-0.12012 -0.53312,-0.25519 -1.01492,-0.29996 -1.10287,-0.10248 -1.29329,-0.29762 -1.33349,-1.3685 -0.0191,-0.50625 -0.13647,-0.82688 -0.28496,-0.77674 -0.76171,0.25701 -1.09657,-1.581564 -0.42769,-2.348844 0.31962,-0.36665 1.3196,-0.64382 1.92663,-0.63767 z", +4.22195, 4.21947, +"M 1.69537 -4.21932 c -0.0345,-8.8e-4 -0.0688,0.002 -0.1027,0.008 -0.18069,0.0328 -0.35094,0.1712 -0.50284,0.46983 -0.0104,1.09687 -0.6782,2.01812 -0.47774,3.15318 0.24531,0.74578 -0.54886,0.45228 -0.99871,0.50283 -1.3297,0.0104 -0.14408,-1.07574 -1.55709,-0.976 -0.42439,-0.67608 -0.98245,-2.34963 -1.81896,-0.91876 -0.17688,0.51739 -0.9194,1.1638 -0.0326,1.53546 0.37737,0.014 0.60982,0.25307 0.77516,0.58044 -0.0269,0.19027 -0.0344,0.50819 -0.0112,0.88577 0.0503,0.81728 -0.0383,1.14531 -0.37549,1.39186 -0.48057,0.35139 -0.36025,0.73074 0.3532,1.11256 0.18114,0.0969 0.28904,0.14046 0.33832,0.12594 0.0493,-0.0146 0.0402,-0.0871 -0.0116,-0.22214 -0.0798,-0.20803 0.0612,-0.40175 0.36204,-0.49725 0.33273,-0.1056 0.47599,-0.33503 0.4903,-0.78121 0.13921,-0.0295 0.30389,-0.11064 0.50376,-0.26119 1.46647,-0.57469 1.19941,1.53559 2.36963,1.92306 0.98055,1.45246 1.30915,-1.39831 1.46716,-2.1424 0.10424,-1.37891 -0.4829,-1.40293 0.43107,-1.92205 0.91202,0.23598 1.36087,-0.55942 1.32261,-1.38814 -0.0299,-0.64451 -0.35397,-1.30896 -0.98476,-1.52384 -0.44029,-0.27942 -1.02203,-1.0427 -1.53965,-1.05586 z", +2.29614, 3.86905, +"M -0.15038 -3.86873 c -0.32838,-0.009 -0.63053,0.17109 -0.7121,0.59531 -0.44133,-0.069 -1.15128,-1.08751 -1.3529,-0.1297 0.0799,0.51796 -0.18084,1.09953 -0.0362,1.560632 0.0859,0.54933 0.0879,1.28864 0.86402,1.13739 0.41931,0.12913 0.19391,1.48787 0.86352,1.32705 -0.27268,0.12418 -0.56414,0.20057 -0.90951,0.15607 -0.33358,0.0733 -0.0995,0.50263 0.10232,0.59686 0.69781,0.49054 1.25008,-1.24221 1.59784,0.0651 -0.10673,0.74125 -1.42009,1.11534 -1.22938,1.91513 0.45471,0.77949 1.52934,0.52133 2.19882,0.20722 0.426,-0.25368 0.96231,-0.36258 0.60153,-1.01906 -0.16613,-0.63544 -0.25215,-1.31953 -0.28578,-1.93476 0.19172,-0.28339 0.73189,-0.81591 0.74414,-1.18391 0.004,-0.12267 -0.0506,-0.22674 -0.19637,-0.29765 -0.12346,0.2062 -0.2481,0.38506 -0.39325,0.52399 -0.0738,-0.30337 -0.26755,-0.59016 -0.57981,-0.70486 -0.97504,-0.90992 0.71916,-1.624862 1.05005,-2.274802 v -5.1e-4 c -0.35914,-0.76136 -1.12554,0.174 -1.4578,-0.003 -0.18611,-0.32959 -0.54083,-0.52743 -0.86918,-0.5364 z", +3.31745, 5.20184, +"M -3.04057 -3.12517 c -0.12013,0.49557 0.22954,0.992902 -0.0125,1.481942 -0.3042,0.4355 -0.16661,0.96485 -0.24617,1.47138 -0.13051,0.54661 0.48075,0.72787 0.5505,1.18424 0.34005,0.28842 -0.34128,0.56491 -0.0684,0.64532 -0.0254,0.006 -0.0507,0.009 -0.076,0.0172 -0.12397,0.005 -0.0329,0.12902 0.0254,0.13283 0.0916,0.0214 0.17487,0.0566 0.25509,0.0975 -0.0618,0.0963 -0.13661,0.20956 -0.0942,0.3182 -0.0579,0.17996 -0.64502,0.46539 -0.41368,0.58716 0.27677,0.0877 0.30423,0.26778 0.27821,0.46656 -0.10304,0.0342 -0.16783,0.13651 -0.0334,0.1966 -0.0441,0.20892 -0.0836,0.41478 0.0836,0.54124 0.26204,0.0239 0.56304,-0.0127 0.85778,-0.0113 0.15595,0.053 0.3112,0.10898 0.45235,0.19132 0.44943,0.28858 0.77251,0.76143 1.30321,0.92948 0.251,0.13085 0.47062,0.0872 0.47613,-0.0674 0.003,-0.0703 -0.0394,-0.1635 -0.14241,-0.2736 -0.32012,-0.35787 -0.80262,-0.50472 -1.20241,-0.70974 0.26829,0.001 0.53112,0.2429 0.72923,-0.0975 -0.0774,-0.49202 -0.79569,-0.59976 -1.12805,-0.94766 -0.38855,-0.23155 -1.03547,-0.33263 -0.82509,-0.89511 0.19784,0.16083 0.38233,0.34262 0.59643,0.46985 0.2225,0.39004 0.96906,0.0149 1.31442,0.31886 0.30953,-0.35321 0.59538,0.79256 0.80227,0.11169 0.0337,-0.0757 0.0554,-0.16401 0.0621,-0.24848 v 0 c 0.0205,-0.25339 -0.0915,-0.47343 -0.40312,-0.22337 -0.19188,0.0244 -0.12003,-0.54699 -0.50655,-0.40708 -0.4008,-0.0492 -0.88145,0.32259 -1.01738,-0.24187 -0.22216,-0.0951 -0.4652,-0.19534 -0.71735,-0.25079 0.0546,-0.37763 0.0308,-0.78884 0.12161,-1.10494 -0.53717,-0.3656 -0.0495,-0.98532 -0.21974,-1.39571 -0.0611,-0.41652 0.91697,0.0243 0.77055,0.42327 0.0859,0.35784 0.84999,1.14566 0.90668,0.36743 0.24362,-0.49009 -0.0688,-1.08376 -0.55477,-1.27742 -0.23421,-0.13565 -0.50438,-0.44811 -0.0324,-0.37734 0.54993,-0.25032 0.8983,0.51127 1.39901,0.21378 0.31014,0.12139 0.34301,0.5908 0.78477,0.50158 0.32429,0.42527 0.37542,0.96608 0.52008,1.43504 -0.0457,0.40839 0.12259,0.77239 0.32746,1.1089 -0.0386,0.0876 -0.0483,0.19899 -0.0139,0.33208 -0.033,0.23478 0.0471,0.26766 0.266,0.26566 0.0265,0.0178 0.0539,0.0311 0.0816,0.0423 0.0757,0.35193 0.0297,0.752 0.33572,0.99755 0.38603,0.3712 0.90219,0.0857 0.7319,-0.43054 -0.0466,-0.30798 -0.29681,-0.49153 -0.49234,-0.70745 0.0877,-0.0846 0.14598,-0.18839 0.14571,-0.28813 0,-0.12995 -0.0965,-0.25111 -0.34364,-0.30729 -0.0113,-0.01 -0.0233,-0.0175 -0.035,-0.0261 0,-0.008 0,-0.0144 0.002,-0.0221 -0.0783,-0.58378 -0.29364,-1.04867 -0.57824,-1.54836 -0.003,-0.54764 -0.26269,-1.00095 -0.42559,-1.5107 -0.16414,-0.40027 -0.18097,-0.931632 -0.68992,-1.070242 -0.35382,-0.0791 -0.24553,0.52958 -0.32482,0.740812 -0.19094,0.0194 -0.35815,-0.327932 -0.61756,-0.303992 -0.0498,-0.45204 -0.10633,-0.96193 -0.59179,-1.08313 -0.21979,-0.35661 -0.7287,-0.40785 -0.73915,-0.88256 -1.36004,-2.36534 -1.95836,0.29957 -1.63423,1.12013 z", +2.98467, 4.66325, +"M 0.614136 -2.29735 c -0.0974,-0.40618 -0.7125,-0.83436 -0.90598,-1.29221 -0.16432,-0.38885 0.094,-0.83201 -0.0209,-0.95324 -0.29875,-0.3152 -0.35677,0.40541 -0.62004,0.28161 -0.5706,-0.2683 -0.96784,-0.4991 -1.56386,-0.36057 -0.0124,0.2114 0.004,0.42436 -0.0171,0.63525 -0.31209,0.73101 0.0309,1.55931 -0.31858,2.0946 0.0848,0.12448 0.14997,0.25099 0.20148,0.37838 0.0156,0.21967 0.0503,0.44298 0.0725,0.67113 0.0238,0.0613 0.0395,0.12615 0.0585,0.18949 0.50136,1.84607 -0.0172,1.42527 -0.43442,1.35738 -0.24015,0.81789 0.45195,1.85386 0.52381,2.81106 0.18281,2.0407 0.89697,0.86601 2.0265,0.22853 10e-4,-0.91029 -0.0244,-0.95992 0.52581,-1.46817 0.74242,-0.0378 1.71531,-0.0436 1.76344,-0.97207 0.0521,-0.0462 0.0914,-0.0908 0.12716,-0.13473 0.0493,0.0552 0.15625,0.0926 0.36013,0.10319 0.40274,0.0431 0.56401,-0.18544 0.58867,-0.47407 0.0542,-0.63499 -0.55312,-1.55926 -0.70765,-0.51248 0.0324,0.14484 -0.0426,0.29511 -0.1234,0.43883 -0.16329,-0.54242 -1.37396,-0.96101 -1.47446,-1.59914 -0.1211,-0.0939 -0.22103,-0.19865 -0.29781,-0.30976 0.11513,-0.10721 0.23173,-0.21303 0.34755,-0.31918 0.004,-0.24309 -0.0645,-0.52303 -0.11148,-0.7939 z", +2.04389, 5.29494, +"M -1.85309 -5.04915 c 0.23783,0.26043 0.21099,0.66518 0.22712,1.04875 -0.4069,0.38004 0.1825,0.8748 0.0781,1.30474 -0.0389,1.015465 -0.55187,0.49378 -0.49101,1.508525 0.13462,0.44679 0.16841,0.72546 0.81526,1.43512 0.29219,0.0781 -0.22258,1.36221 -0.28588,2.05254 -0.0792,0.86353 0.71412,1.04806 0.51067,1.67394 l 1.06331,1.32048 c -0.0314,-0.1812 -0.0448,-0.35515 0.0627,-0.47402 0.28009,0.15408 0.64109,0.57435 0.77582,0.0169 0.14718,-0.48429 0.42232,-0.0327 0.35542,0.2494 0.26229,0.10277 0.4328,-0.33043 0.71684,-0.13395 0.23715,-0.46565 -0.19546,-0.38058 -0.45959,-0.49191 -0.009,-0.3719 0.26324,-0.82167 -0.25285,-0.92357 -0.0662,-0.19471 0.006,-0.46625 -0.0348,-0.68452 -0.17436,-0.24732 -0.63358,-0.4809 -0.23403,-0.8166 0.25025,-0.42226 -0.85867,-0.85207 -0.48249,-1.2856 0.22844,0.18931 0.44217,0.179 0.35732,-0.17819 -0.13207,-0.6247 0.35102,-0.79202 -0.0534,-1.09863 -0.38584,-0.3369 -0.93599,-0.41779 -1.28967,-0.79966 -0.019,-0.23696 -0.17121,-0.4219 -0.2883,-0.61236 0.0439,-0.11202 0.10964,-0.220495 0.20235,-0.323135 0.29428,-0.26016 0.28836,-0.24769 0.10101,-0.59292 0.21808,-0.22172 -0.30092,-0.49114 -0.22305,-0.80405 -0.27966,-0.40328 -0.31858,-0.96801 -0.26602,-1.46128 0.16807,-0.43289 -0.90489,0.07 -0.90489,0.07 z", +5.1605, 3.51819, +"M 0.197111 -3.51809 c -0.25831,-0.008 -0.64247,0.48592 -1.65703,1.8944 -0.30917,0.4292 -1.11412,0.75117 -2.18011,0.87133 -1.27846,0.1441 -1.64072,0.31871 -1.48755,0.71783 0.11143,0.29022 0.20229,0.59651 0.20229,0.68056 0,0.084 0.36946,0.14096 0.82122,0.12688 0.7781,-0.0243 0.78325,-0.0409 0.0914,-0.31499 -0.4578,-0.18138 0.0596,-0.25533 1.38729,-0.19875 1.16464,0.0496 2.21889,0.19137 2.34248,0.31499 0.12366,0.12358 -0.0554,0.22449 -0.39706,0.22449 -0.50809,0 -0.54984,0.1332 -0.23026,0.73025 0.17922,0.33488 0.49805,0.6159 0.76974,0.70096 0.0157,0.0639 0.0352,0.12709 0.063,0.18811 0,0.0641 0.1163,0.0991 0.11048,0.1646 0.28267,0.39771 0.73888,1.40678 1.24267,0.67834 0.003,-0.26195 -0.48278,-1.34025 0.0102,-1.11978 0.13677,0.65215 0.88947,0.55265 1.32385,0.40816 0.52365,0.38992 1.46911,0.38685 1.70496,-0.35447 0.0158,-0.0853 0.0252,-0.17953 0.0359,-0.27196 0.0967,0.31684 0.14402,0.24344 0.17214,-0.30257 0.007,-0.13895 2.7e-4,-0.25575 -0.0191,-0.35714 0.0953,-0.19421 0.25677,-0.34478 0.56255,-0.38997 0.0741,-0.0998 0.10036,-0.18124 0.0932,-0.24534 -0.0312,-0.27771 -0.69621,-0.22987 -0.87843,0.0617 -0.18949,0.0256 -0.34877,-0.047 -0.49421,-0.15972 0.68347,-0.14164 0.77742,-0.40214 0.7724,-2.03813 -0.004,-1.25111 -0.11592,-1.71698 -0.33141,-1.37666 -0.17911,0.28293 -0.24087,0.73482 -0.13754,1.00399 0.10335,0.26916 0.005,0.48979 -0.21607,0.48979 -0.22226,0 -0.41684,-0.20557 -0.43256,-0.45651 -0.023,-0.36431 -0.0665,-0.3644 -0.21338,-4.5e-4 -0.14313,0.35465 -0.34793,0.34082 -0.92502,-0.0634 -0.40789,-0.28557 -0.99692,-0.42235 -1.30788,-0.30302 -0.31722,0.12184 -0.46945,0.062 -0.34693,-0.1362 0.1201,-0.19428 0.0622,-0.59178 -0.12911,-0.88331 -0.11326,-0.17268 -0.20468,-0.27964 -0.3221,-0.28394 z m -0.32296,4.90546 c -0.003,0.0156 -0.004,0.031 -0.007,0.0466 -0.0389,-0.0151 -0.0395,-0.0307 0.007,-0.0466 z", +3.88374, 3.51074, +"M 0.152516 -3.50963 c -0.0671,-0.0035 -0.13954,0.0012 -0.21726,0.01501 0.0239,0.38383 -0.009,0.664347 -0.0834,0.870756 -0.5491,-0.372894 -1.21382,-0.623817 -1.99453,-0.680445 0.004,0.330283 0.0274,0.672343 0.0583,1.019123 -0.60216,-0.112963 -1.22906,-0.191918 -1.71237,0.117895 l -0.087,0.185898 c 1.00994,1.039798 2.17682,1.967379 2.19764,3.587233 0.17881,0.262722 0.36799,0.463849 0.56477,0.61642 0.13818,0.425596 0.28373,0.847187 0.44201,1.256679 1.15883,0.174004 1.9076,-0.383239 2.23915,-1.246964 0.44076,-0.188455 0.8768,-0.414276 1.29111,-0.606262 0.84054,-0.06761 1.08622,-0.328197 1.02353,-0.67868 -0.11969,-0.669085 -1.36303,-1.666368 -1.734,-2.275359 -0.58197,-0.72387 -0.79212,-0.277084 -0.95819,0.185455 -0.11392,-0.207857 -0.24645,-0.407202 -0.39388,-0.596988 0.20718,-0.755268 0.0844,-1.73265 -0.63582,-1.769775 z", +3.17107, 3.48989, +"M -0.695755 -3.48975 c -0.14458,-0.002 -0.31898,0.0184 -0.53872,0.0514 -0.48796,0.0735 -0.9685,0.32099 -1.33449,0.68684 -0.48142,0.48132 -0.57636,0.733 -0.59963,1.58863 -0.0182,0.66578 0.0642,1.0927 0.23826,1.23725 0.14629,0.12144 0.26581,0.37135 0.26581,0.5554 0,0.44729 0.44932,0.79765 0.83375,0.65015 0.1706,-0.0654 0.31045,-0.035 0.31045,0.0672 0,0.10242 0.35026,0.62619 0.77866,1.16423 0.44864,0.56348 0.93335,0.97854 1.14294,0.97854 0.35308,0 1.38754,-1.22023 1.59865,-1.8853 0.056,-0.17641 0.36274,-0.47456 0.68184,-0.66306 0.45927,-0.27126 0.55359,-0.42928 0.45275,-0.75654 -0.23387,-0.759 -0.79899,-1.36205 -1.72673,-1.84317 -0.54539,-0.28283 -1.03708,-0.70924 -1.20888,-1.04864 -0.29712,-0.58699 -0.46072,-0.77923 -0.89466,-0.78284 z", +4.76911, 3.80814, +"M 1.68749 -3.80769 c -0.0899,-0.004 -0.20175,0.019 -0.3478,0.0548 -0.2754,0.068 -0.80502,0.1779 -1.295,0.27337 -0.002,-5.7e-4 -0.003,-0.003 -0.005,-0.004 v 5.1e-4 c -0.0214,-0.004 -0.0479,0.004 -0.0775,0.0196 -0.0805,0.0155 -0.16738,0.0341 -0.24289,0.0481 -0.55451,0.10268 -1.25868,0.42197 -1.56475,0.70952 l -0.55708,0.52297 -0.1452,-0.57826 c -0.22357,-0.89072 -0.83344,-0.9771 -1.61438,-0.22893 -1.22476,1.1734 -0.44024,2.73403 0.96946,1.92856 0.38743,-0.22135 0.94538,-0.33453 1.30844,-0.2651 0.50575,0.0967 0.65979,0.0172 0.7674,-0.39377 0.0749,-0.28637 0.25625,-0.4356 0.4563,-0.46716 0.007,0.37514 0.15968,0.7233 0.44339,0.89866 0.15237,0.0942 0.1253,0.23529 -0.091,0.47439 -0.32686,0.36118 -0.77208,1.06994 -1.10431,1.69498 -0.72099,0.39409 -1.14366,1.04266 -0.95602,1.53169 0.0709,0.18476 0.27588,0.33538 0.45527,0.33538 0.35557,0 1.2275,-0.60376 1.86139,-1.20819 0.12891,0.3163 0.20815,0.7041 0.18085,1.048 -0.0504,0.63594 -0.005,0.73571 0.32609,0.71675 0.21154,-0.012 0.52486,-0.0817 0.69607,-0.15503 0.21968,-0.0938 0.34301,-0.0121 0.4191,0.27905 0.17931,0.68569 0.76809,0.39235 0.94774,-0.47232 0.086,-0.41422 0.22873,-0.84663 0.31782,-0.96067 0.089,-0.11402 0.22021,-0.45146 0.29146,-0.7493 0.0898,-0.37587 0.33261,-0.6263 0.79272,-0.81856 0.42373,-0.17705 0.70601,-0.44922 0.7829,-0.75551 0.19283,-0.76824 -0.0249,-1.0573 -0.79841,-1.0573 -0.39962,0 -0.93906,-0.17198 -1.26298,-0.40256 -0.12655,-0.0901 -0.23128,-0.15678 -0.32761,-0.20515 -0.0225,-0.18343 -0.0534,-0.37777 -0.0956,-0.58808 -0.19008,-0.94639 -0.26088,-1.21336 -0.5307,-1.2268 z", +2.54464, 4.86321, +"M 2.11268 -4.86312 -2.4e-4,3.4e-4 c -0.42259,-0.005 -0.71865,0.16899 -1.01028,0.58895 -0.2341,0.33711 -0.33434,0.40738 -0.61019,0.42851 -0.19518,0.0149 -0.37421,0.089 -0.43826,0.18143 -0.0182,0.0262 -0.0368,0.0486 -0.0555,0.0679 -0.009,-10e-6 -0.0175,-0.002 -0.0259,-6.4e-4 -0.071,0.004 -0.13477,0.0243 -0.18907,0.0571 -0.0242,-0.0244 -0.0391,-0.59467 -0.0391,-0.65359 0,-0.36718 -0.95879,-0.22794 -1.02811,0.14931 -0.0212,0.11589 0.0311,0.75145 0.13054,0.79443 0.23059,0.0996 0.20734,0.48697 -0.037,0.66412 -0.0408,-0.002 -0.0836,-0.005 -0.13238,-0.0129 -0.2574,-0.0398 -0.36727,-0.008 -0.58024,0.1696 -0.28227,0.235 -0.2933,0.288473 -0.26634,1.268603 0.0133,0.48463 0.0593,0.66991 0.18495,0.74461 0.11022,0.0655 0.20912,0.0728 0.28966,0.0212 0.0568,-0.0364 0.11754,-0.12674 0.17124,-0.23402 0.107,0.0658 0.25755,0.11689 0.41792,0.14507 -0.0242,0.0438 -0.0493,0.0775 -0.0743,0.0935 -0.22968,0.14714 -0.18073,0.29031 0.16346,0.47951 0.16459,0.0905 0.24667,0.16091 0.28464,0.26651 -0.22328,0.31999 -0.54905,0.56105 -0.79857,0.56105 -0.26805,0 -0.38363,0.13101 -0.38363,0.43504 0,0.099 -0.14109,0.28428 -0.31344,0.41175 -0.29557,0.21858 -0.40894,0.4781 -0.23503,0.53776 0.0431,0.0148 0.21951,0.23939 0.39186,0.49911 0.29454,0.44378 0.49384,0.61168 1.14242,0.96274 0.2234,0.12093 0.26771,0.2085 0.26771,0.52841 0,0.21082 0.0564,0.42682 0.1253,0.48004 0.17164,0.13252 0.36279,0.12141 0.72039,-0.0417 0.2969,-0.13538 0.35429,-0.23188 0.31892,-0.53634 -0.0158,-0.13554 0.343,-0.51902 0.92317,-0.98692 0.28788,-0.23216 0.26618,-0.30644 -0.12894,-0.44069 -0.37244,-0.12655 -0.37109,-0.11805 -0.22497,-1.22413 0.0601,-0.45428 0.10536,-0.49778 0.48606,-0.46787 0.10405,0.008 0.18291,-0.0399 0.1829,-0.11171 0,-0.16011 -0.092,-0.15842 -0.53246,0.01 -0.43953,0.16783 -0.58282,0.30447 -0.72314,0.68954 -0.0603,0.16556 -0.19888,0.33774 -0.30795,0.3828 -0.10906,0.045 -0.22827,0.15462 -0.26475,0.24337 -0.0547,0.1331 -0.11029,0.17837 -0.15911,0.14437 0.0191,-0.0362 0.0267,-0.0666 0.0146,-0.0817 -0.0268,-0.0333 -0.007,-0.17466 0.0454,-0.31397 0.0701,-0.18872 0.056,-0.28296 -0.0553,-0.36886 -0.17292,-0.13348 -0.20148,-0.65681 -0.04,-0.73384 0.0536,-0.0256 0.0859,-0.25521 0.0912,-0.59759 0.0308,-0.0283 0.0572,-0.054 0.0821,-0.0789 0.15372,-0.0696 0.2735,-0.27581 0.20759,-0.4084 -0.0286,-0.0576 0.009,-0.313 0.0811,-0.59847 0.0866,0.0779 0.22739,0.11682 0.37448,0.10077 0.33605,-0.0365 0.41939,-0.41959 0.11843,-0.54393 -0.1668,-0.0689 -0.21038,-0.19846 -0.25309,-0.75131 -0.0284,-0.367453 -0.0136,-0.746523 0.0327,-0.842563 0.0464,-0.0961 0.0457,-0.2254 0.0137,-0.35209 0.24966,-0.16135 0.77006,-0.17218 0.9474,-0.007 0.3168,0.29467 0.52241,0.0917 0.52241,-0.51569 0,-0.31975 0.0512,-0.41964 0.31732,-0.61647 0.40678,-0.30086 0.38252,-0.55289 -0.0562,-0.58224 -0.0293,-0.002 -0.058,-0.004 -0.0862,-0.004 z", +2.20356, 4.42723, +"M -0.779833 -4.42535 c -0.11252,0.01 -0.20766,0.0645 -0.31936,0.15707 -0.19303,0.1602 -0.30553,0.46533 -0.24987,0.67821 0.0557,0.21288 -0.031,0.75799 -0.19276,1.21128 -0.16176,0.45332 -0.29873,0.73139 -0.30366,0.61778 -0.006,-0.11371 -0.12301,-0.0935 -0.26176,0.0452 -0.19127,0.19127 -0.10817,0.47025 0.34411,1.1537 0.45766,0.69158 0.55864,1.03463 0.43407,1.47638 -0.0892,0.31659 -0.13322,0.67331 -0.0981,0.79292 0.0352,0.11957 0.15515,0.65783 0.267,1.19605 0.11176,0.53827 0.24306,1.10126 0.29128,1.25078 0.1727,0.53503 0.7492,0.25702 1.23653,-0.59635 0.27267,-0.47751 0.6625,-0.86921 0.86619,-0.87004 0.20765,-9.2e-4 0.5269,-0.33172 0.72679,-0.75294 0.29035,-0.6119 0.31116,-0.88889 0.11183,-1.49304 -0.13459,-0.40798 -0.22205,-1.12174 -0.19417,-1.58632 0.11331,-1.88242 -0.006,-2.47587 -0.49595,-2.47587 -0.25281,0 -0.83601,-0.21102 -1.29552,-0.46928 -0.44311,-0.24903 -0.67905,-0.35297 -0.86669,-0.33554 z", +2.98889, 3.67435, +"M 0.0402496 -3.67435 c -0.32831,0 -1.18189,0.92749 -1.79096,1.94648 -0.3584,0.59962 -0.44172,0.96993 -0.33994,1.5125 0.10659,0.56847 0.0207,0.89088 -0.41379,1.54736 -0.30817,0.46568 -0.51868,1.04377 -0.47984,1.31799 0.0652,0.45978 0.15767,0.48811 1.5781,0.48811 0.9272,0 1.60942,0.10087 1.77078,0.26195 0.68945,0.68812 2.06575,-0.0134 2.06575,-1.05284 0,-0.21065 0.15263,-0.67888 0.33994,-1.04091 0.34011,-0.65768 0.33957,-0.65885 -0.40829,-1.25881 -0.58894,-0.47247 -0.77875,-0.80242 -0.89043,-1.54736 -0.14276,-0.95204 -0.94727,-2.17447 -1.43132,-2.17447 z", +3.40151, 5.32865, +"M 2.71045 -5.32831 v 3.7e-4 c -0.67587,-0.012 -1.14971,0.34982 -1.61607,1.21978 -0.37425,0.69821 -0.53418,0.84374 -0.97521,0.8875 -0.312,0.0309 -0.59827,0.1844 -0.70069,0.37577 -0.2226,0.41586 -0.49528,0.41624 -0.49528,7e-4 0,-0.76048 -1.53295,-0.4721 -1.64379,0.30924 -0.0339,0.24004 0.0495,0.46036 0.20873,0.54939 0.37193,0.2081 0.33168,1.02339 -0.0686,1.38571 -0.49393,0.44696 -1.00322,2.96143 -0.75706,3.73717 0.13368,0.42094 0.97103,0.75376 1.58712,0.63054 0.60075,-0.12019 0.73147,0.051 0.50116,0.65685 -0.0961,0.2532 -0.13673,0.56011 -0.0898,0.68207 0.0467,0.12199 0.19735,0.22188 0.33479,0.22188 0.31413,0 0.6262,-0.56153 0.49789,-0.89591 -0.053,-0.13863 0.0311,-0.82668 0.18716,-1.52901 0.31845,-1.4316 0.19566,-1.84197 -0.4343,-1.44858 -0.48884,0.30529 -0.65563,0.11304 -0.66886,-0.77128 -0.007,-0.43091 -0.0729,-0.93369 -0.14734,-1.11741 -0.18115,-0.44714 0.24354,-0.91857 0.82717,-0.91857 0.24714,0 0.58532,-0.15039 0.75154,-0.33411 0.36082,-0.39872 1.28482,-0.44747 1.58678,-0.0837 0.50646,0.6103 0.83488,0.19 0.83488,-1.06807 0,-0.66226 0.0822,-0.86909 0.50773,-1.27679 0.65033,-0.6231 0.61157,-1.14509 -0.09,-1.20588 -0.0467,-0.005 -0.093,-0.008 -0.13814,-0.008 z", +3.13042, 4.93641, +"M 0.240783 -4.93553 c -0.15688,-0.0178 -0.29819,0.23397 -0.49049,0.81373 -0.2825,0.85157 -0.93362,1.59307 -1.39943,1.59307 -0.39149,0 -0.56027,0.24786 -0.56027,0.82307 0,0.18722 -0.20606,0.53783 -0.45779,0.77901 -0.4317,0.41355 -0.59724,0.90453 -0.34324,1.01741 0.0626,0.028 0.32056,0.45291 0.57229,0.94429 0.43015,0.8396 0.72124,1.15726 1.66856,1.82145 0.32624,0.22878 0.39098,0.39448 0.39098,0.99971 0,0.39888 0.0823,0.80753 0.18298,0.90823 0.25071,0.2507 0.52985,0.2297 1.05213,-0.0788 0.43363,-0.25616 0.51743,-0.4387 0.4658,-1.01474 -0.0233,-0.25645 0.50065,-0.98195 1.348,-1.8672 0.42045,-0.43923 0.38879,-0.57978 -0.18835,-0.83377 -0.54393,-0.23942 -0.54167,-0.22334 -0.32824,-2.31596 0.0877,-0.8595 0.15391,-0.94177 0.70992,-0.88519 0.15197,0.0155 0.26679,-0.0756 0.26679,-0.21137 0,-0.30291 -0.13407,-0.30005 -0.77732,0.018 -0.64195,0.31753 -0.85123,0.57637 -1.05619,1.3049 -0.0882,0.31325 -0.29044,0.63899 -0.44972,0.72425 -0.15934,0.0852 -0.33341,0.29254 -0.38672,0.46045 -0.16715,0.5267 -0.33974,0.3349 -0.41637,-0.46279 -0.0465,-0.4866 -0.17065,-0.83911 -0.33826,-0.96165 -0.24082,-0.17607 -0.24289,-0.21137 -0.022,-0.39467 0.14751,-0.1224 0.24275,-0.43967 0.24275,-0.80907 0,-0.42563 0.11425,-0.74365 0.38136,-1.06115 0.43886,-0.52158 0.46645,-0.71391 0.16257,-1.12559 -0.0841,-0.11391 -0.15837,-0.17762 -0.2297,-0.18565 z", +3.36677, 6.16908, +"M 2.46494 -6.16587 c -0.0541,-0.01 -0.12003,0.003 -0.18482,0.0437 -0.14889,0.092 -0.21185,0.45187 -0.17387,0.99402 l 0.0595,0.84965 -0.8909,0.25437 c -0.85575,0.24425 -0.91404,0.30547 -1.49387,1.561 -0.68138,1.47535 -0.8842,1.39519 -0.95601,-0.37731 -0.0677,-1.67347 -0.53514,-1.57118 -0.54675,0.1197 -0.008,1.20372 -0.14815,1.49162 -0.91678,1.88573 -0.33093,0.1697 -0.55445,0.43025 -0.55445,0.64665 0,0.31078 0.1713,0.37963 1.20109,0.48124 0.9293,0.0916 1.27169,0.056 1.51288,-0.15692 0.17144,-0.15173 0.40028,-0.22045 0.50832,-0.15367 0.34578,0.21373 0.21149,0.66082 -0.35303,1.17641 -0.30209,0.2759 -0.64427,0.77409 -0.76029,1.10686 -0.28842,0.82736 -0.63087,0.63547 -0.63087,-0.35346 0,-0.78244 -0.0622,-0.90627 -0.45738,-0.90627 -0.31541,0 -0.7871,0.90286 -1.04012,1.99129 -0.23161,0.9964 -0.22259,1.08589 0.16459,1.6532 0.22515,0.32984 0.51912,0.64232 0.65352,0.69436 0.40194,0.15571 0.95683,-0.25666 0.95683,-0.71094 0,-0.48104 0.73081,-0.96973 1.18811,-0.79425 0.41463,0.1592 0.35885,0.40487 -0.17185,0.7526 -0.495,0.32433 -0.61311,0.99321 -0.24064,1.36566 0.25886,0.25887 0.69051,0.28229 1.0462,0.0571 0.1824,-0.11553 0.21563,-0.36728 0.12213,-0.92083 -0.13213,-0.78273 -0.0775,-0.84677 0.66079,-0.77645 0.16235,0.0149 0.40663,-0.10649 0.54313,-0.27095 0.19821,-0.23888 0.20282,-0.37194 0.0222,-0.6612 -0.12434,-0.19914 -0.17751,-0.44051 -0.11809,-0.53664 0.0594,-0.0961 0.0229,-0.48362 -0.0813,-0.86098 -0.23192,-0.83997 0.12462,-1.35152 0.94265,-1.35152 0.63152,0 0.89091,-0.51453 0.89091,-1.76764 0,-0.91589 -0.27505,-1.06452 -0.83144,-0.4497 -0.45014,0.49738 -0.77029,0.46537 -0.87594,-0.0874 -0.091,-0.47571 0.45137,-1.57555 0.77684,-1.57555 0.18146,0 0.93054,-1.3103 0.93054,-1.62773 0,-0.0901 -0.16195,-0.3501 -0.35992,-0.57829 -0.19792,-0.22822 -0.3899,-0.50528 -0.42664,-0.61551 -0.0186,-0.0556 -0.061,-0.0898 -0.11526,-0.0999 z", +3.36642, 4.71204, +"M 2.14302 -4.71204 c -0.63965,0.002 -0.47682,2.13844 -1.24978,1.55409 -0.92613,-1.50861 -3.40173,-0.29544 -3.14116,1.46395 0.51593,1.36936 -1.77871,0.91049 -0.92686,1.85562 1.40951,0.21819 -0.44125,1.4145 0.82327,1.66419 -0.57592,1.3499 0.6215,1.87772 1.29993,2.57621 l 0.0604,0.24159 c 1.21026,0.51184 1.30627,-1.98878 1.77943,-2.80526 0.61441,-1.01698 0.0716,-4.43446 2.03773,-3.03058 1.29395,-0.57329 -0.14993,-2.07687 -0.0896,-3.11886 -0.25448,-0.28697 -0.44513,-0.40085 -0.59283,-0.40095 z", +2.67932, 7.19187, +"M 1.11365 -7.19037 c -0.3679,0.0246 -0.63802,0.36228 -0.63802,0.85647 0,0.30813 -0.20548,0.69239 -0.54292,1.01568 -0.4374,0.41905 -0.65076,0.49812 -1.10192,0.40788 -0.45379,-0.0908 -0.64747,-0.0176 -1.02293,0.38733 -0.49761,0.53665 -0.51748,0.65878 -0.46996,2.8971 0.0235,1.10675 0.10496,1.52987 0.32646,1.70046 0.19433,0.14956 0.36827,0.16624 0.51027,0.0483 0.29856,-0.24777 0.67015,-1.55748 0.53886,-1.89956 -0.13302,-0.34677 0.56593,-0.78978 0.75734,-0.48002 0.19788,0.32019 -0.0997,2.15035 -0.38855,2.39006 -0.4049,0.33604 -0.31862,0.66299 0.28818,1.09508 0.4482,0.31914 0.55259,0.52604 0.55259,1.09468 0,0.38551 -0.1213,1.04395 -0.26923,1.46305 -0.32207,0.91276 -0.13816,3.08081 0.28414,3.35093 0.18196,0.11631 0.35857,0.0495 0.5824,-0.21965 0.17673,-0.21254 0.28298,-0.44885 0.23579,-0.52518 -0.0472,-0.0763 -0.0118,-0.39886 0.0802,-0.71701 0.12359,-0.43098 0.0987,-0.64618 -0.0975,-0.84237 -0.30484,-0.30484 -0.35517,-1.49996 -0.0705,-1.67587 0.1173,-0.0725 0.18049,-0.84131 0.16121,-1.95881 -0.0334,-1.94431 0.16284,-2.55058 0.62232,-1.92213 0.14856,0.20308 0.41417,0.30595 0.69123,0.26682 0.59243,-0.0836 0.73976,-0.95822 0.20916,-1.24219 -0.29405,-0.15734 -0.37126,-0.4532 -0.44656,-1.71577 -0.05,-0.83913 -0.0241,-1.70487 0.0576,-1.92415 0.21457,-0.57599 -0.13731,-1.67514 -0.5816,-1.81613 -0.0932,-0.0296 -0.18312,-0.0407 -0.26802,-0.0351 z", +3.567, 4.28391, +"M 2.1794 -4.28301 c -0.79452,0.0388 -2.13823,1.33278 -2.9006,1.67225 -1.91886,1.17374 2.21816,1.25105 0.10284,2.06499 -0.58361,-0.83118 -3.01823,-1.30637 -2.94711,0.17002 3.14717,0.20852 0.16743,2.80766 0.98237,4.53047 l 0.2031,0.12919 c 1.35802,-1.01667 2.60945,-2.23253 4.49275,-2.01435 2.35172,-1.19271 1.28122,-3.42569 0.70123,-5.26324 0.0473,-0.98574 -0.21839,-1.30966 -0.63458,-1.28933 z", +2.56174, 3.97214, +"M 1.23387 -3.97214 c -0.18031,0 -0.50408,0.11364 -0.92088,0.35086 -0.75763,0.43141 -0.89736,0.64381 -0.99891,1.519285 -0.10988,0.94689 -0.17227,1.02365 -0.88521,1.09244 -0.89236,0.0859 -1.14888,0.68747 -0.90125,2.11048 0.0846,0.48667 0.1492,1.23005 0.14367,1.65208 -0.008,0.60558 0.0866,0.7674 0.44804,0.7674 0.25202,0 0.52438,0.10634 0.6046,0.23617 0.21463,0.34726 0.57153,0.29583 2.12908,-0.30748 1.35943,-0.52657 1.40925,-0.57732 1.58906,-1.59422 0.28866,-1.63263 0.097,-2.0538 -1.0387,-2.2784 -1.22331,-0.24191 -1.64524,-0.80341 -1.07591,-1.43248 0.2218,-0.24509 0.40307,-0.615415 0.40307,-0.823195 0,-0.20788 0.17214,-0.54991 0.3824,-0.76018 0.3479,-0.34787 0.35277,-0.53337 0.12094,-0.53276 z", +1.40175, 2.35464, +"M 0.715347 1.73249 c 0.5213,-0.7219 1.00154,-1.43136 0.42262,-1.81986 -0.0242,-0.002 -0.0403,-0.0133 -0.0667,-0.0124 -0.2124,-0.35703 -0.18293,-1.55466 -0.66093,-1.50121 -0.38391,0.0613 -0.36171,-0.99746 -1.04282,-0.70124 -0.84233,0.26952 -1.03878,1.15204 -0.35968,1.72237 -0.28818,0.80849 -0.72983,1.85273 -0.017,2.57194 0.11293,0.13641 0.31123,0.26109 0.54043,0.35233 0.20746,0.0826 0.99861,-0.35508 1.18408,-0.61193 z", +3.58152, 4.34829, +"M -2.44195 -4.34714 c -0.75319,0.0362 -0.7762,0.92587 -0.55537,1.58591 -0.55027,0.26441 -0.90264,0.93541 -0.1653,1.39825 0.67743,0.40826 1.43356,1.01809 1.58319,1.83852 0.64834,0.73248 -0.1527,1.61798 -0.33278,2.42552 l 0.54118,0.63011 c 0.0142,-0.52312 0.48191,-0.59895 0.82051,-0.61429 -0.003,0.37955 0.1004,0.74248 0.40424,1.04909 0.11924,0.14402 0.32868,0.2752 0.57065,0.37153 0.21902,0.0872 1.05405,-0.37478 1.24987,-0.64594 0.55034,-0.76211 1.05742,-1.51075 0.44627,-1.92088 -0.0255,-0.002 -0.0426,-0.014 -0.0704,-0.0131 -0.0106,-0.0172 -0.0174,-0.0448 -0.0267,-0.0654 0.21024,-0.3016 0.38758,-0.56962 0.74632,-0.0954 0.65582,0.69676 1.24636,-0.49914 0.37097,-0.65739 -0.4622,0.24406 -0.37168,-0.72499 -0.69993,-0.96236 -0.10039,-0.91415 -0.4508,-1.68175 -0.81563,-2.50845 -0.28239,-0.46623 -0.83252,-1.22127 -1.4135,-1.3415 -0.0742,-0.0449 -0.15322,-0.0625 -0.2357,-0.0556 -0.32052,0.0264 -0.68498,0.39222 -0.99017,0.71794 -0.2134,-0.59389 -0.55451,-1.1417 -1.22475,-1.1271 -0.0728,-0.01 -0.14044,-0.0118 -0.20295,-0.01 z", +3.66123, 3.92165, +"M -2.89919 -0.28264 c 0.5248,0.64771 0.38465,1.62029 -0.46302,1.88928 -0.85786,0.6722 0.38319,1.31277 0.57724,1.97921 0.11171,0.25581 0.51808,0.48818 0.72707,0.20878 0.35103,-0.2002 0.83823,0.2502 1.11623,-0.3514 0.28826,-0.50439 0.39449,-1.18406 1.07021,-1.30949 0.38793,-0.46627 -0.45389,-0.99265 0.11266,-1.47639 0.35536,-0.69249 0.56184,-1.84188 1.34721,-2.07791 0.63362,0.38352 1.48161,0.65582 1.72651,-0.31936 0.39002,-0.4159 0.59822,-1.04678 -0.19431,-1.0914 -0.59473,-0.216 -1.75681,-0.9684 -1.89285,-1.06904 -0.17327,-0.12817 -0.40811,0.35444 -0.60881,0.59258 -0.2757,0.48096 -1.0685,0.56942 -0.82373,1.34875 0.16859,0.56791 -0.21712,0.74465 -0.57515,0.30903 -0.73642,-0.18936 -0.47345,1.25664 -1.18184,0.50643 -0.15757,-0.16278 -0.39659,0.0541 -0.64211,-0.053 -0.23726,-0.1035 0.0848,-0.3456 -0.27012,-0.34843 -0.37484,-0.003 -0.30986,0.87936 -0.0252,1.26233 z", +4.66444, 5.18369, +"M 2.11104 -5.18252 c -0.17844,-0.0365 -0.59098,0.79076 -0.87075,0.86971 -0.28109,-0.28971 -0.64463,-0.14558 -0.67074,0.31678 0.17296,0.35303 -0.32848,0.92855 -0.38034,0.37982 -0.48361,-0.88691 -0.84545,0.5953 -1.32914,0.67386 -0.34102,0.46556 0.0161,0.50242 0.25064,0.78445 -0.56409,0.44035 -0.67167,0.83211 -0.3612,1.14774 -0.006,0.0911 0.005,0.19332 0.0424,0.31316 0.16859,0.56791 -0.21712,0.74465 -0.57516,0.30903 -0.73641,-0.18936 -0.47344,1.25663 -1.18184,0.50642 -0.15758,-0.16277 -0.39629,0.0539 -0.64182,-0.0532 -0.23725,-0.1035 0.0846,-0.34547 -0.27027,-0.3483 -0.37484,-0.003 -0.30999,0.87948 -0.0253,1.26246 0.52481,0.64771 0.38466,1.6203 -0.46302,1.88928 -0.85785,0.6722 0.3837,1.31277 0.57775,1.97921 0.1117,0.25581 0.51758,0.48817 0.72657,0.20878 0.35102,-0.20021 0.83873,0.25019 1.11673,-0.3514 0.28826,-0.5044 0.39399,-1.18405 1.06971,-1.30949 0.38793,-0.46627 -0.4539,-0.99265 0.11266,-1.47639 0.35533,-0.69249 0.56234,-1.84188 1.34771,-2.07791 0.30376,0.18387 0.65616,0.34025 0.96842,0.34778 0.33359,0.3812 0.84312,0.50562 1.2237,-0.11369 -0.30948,-1.21831 1.01658,-2.14727 1.88669,-2.2686 -0.41399,-0.6498 -0.0859,-1.85265 -0.94827,-2.09135 -0.29061,-0.0875 -1.51122,0.0898 -1.51876,-0.51108 0.006,-0.26471 -0.0266,-0.37397 -0.0858,-0.38705 z", +3.05335, 5.71572, +"M 2.29249 -5.71375 c -0.44087,0.0257 -0.84558,0.29637 -0.4935,0.77566 0.043,0.5726 -0.66244,1.13031 -1.01182,1.61954 -0.59536,0.0643 -0.67884,0.58579 -0.62891,1.04283 -0.0328,0.0299 -0.0632,0.056 -0.0997,0.092 -0.45413,0.43121 -0.7044,1.02376 -0.9338,1.62522 -0.0229,-0.0163 -0.0443,-0.0282 -0.0687,-0.0486 -0.64201,-0.37339 -0.381,-1.68417 -1.16064,-1.73633 -0.89157,0.53168 -0.63784,1.71779 -0.94877,2.58124 0.41748,0.0224 0.78081,-0.11303 0.77824,-0.56637 -0.029,-0.81387 0.44852,-0.14497 0.38963,0.22686 0.1398,0.26873 0.29702,0.57106 0.45476,0.83974 -0.22764,0.40185 -0.52107,0.74432 -0.9617,0.95911 -0.36584,-0.3203 -0.60315,0.95868 -0.12867,0.68575 0.24482,-0.0374 0.49482,-0.0125 0.74567,0.0408 -0.13684,0.27374 -0.30318,0.52271 -0.54673,0.70848 -0.72324,1.44096 1.7649,0.37106 0.93432,1.48157 -1.67179,-0.43188 -1.37967,2.24445 0.49197,0.51159 0.93927,-0.75809 1.02925,-2.0752 2.374,-2.39416 0.0427,-0.19658 0.0496,-0.37691 0.0326,-0.54519 0.007,-0.013 0.0142,-0.0244 0.0212,-0.0377 -0.0109,-0.006 -0.0181,-0.0127 -0.0284,-0.0186 -0.0376,-0.26876 -0.14378,-0.50259 -0.29869,-0.70797 0.0675,-0.50253 0.39688,-1.12995 0.27337,-1.65519 0.0776,-0.12843 0.15978,-0.26383 0.2372,-0.3974 0.51546,-0.0608 0.96877,-0.52849 0.25114,-0.86041 -0.99645,-0.23462 -0.10779,-1.19683 -0.005,-1.79162 -0.13147,-0.84084 0.53896,-1.24912 1.0418,-1.73478 0.20727,-0.50166 -0.26911,-0.72137 -0.71004,-0.69608 z", +3.25546, 5.30144, +"M 1.7045 -3.73289 c -0.59536,0.0643 -0.67884,0.58579 -0.62891,1.04283 -0.0328,0.0299 -0.0632,0.056 -0.0997,0.092 -0.11954,0.11351 -0.22424,0.23899 -0.31885,0.37207 -0.16346,-0.31767 -0.41725,-0.59374 -0.693,-0.86196 -0.0135,-0.57623 -0.52533,-0.68908 -0.93429,-0.86196 -0.3143,-0.11364 -0.30232,-0.22096 -0.26924,-0.50178 10e-4,-0.35694 -0.19302,-0.64802 -0.63614,-0.70849 -0.52435,-0.42985 -0.56304,0.22719 -0.74414,0.56328 0.27,0.2644 0.29136,0.75232 -0.0961,1.02939 -0.41132,0.0707 -0.85182,1.03037 -0.23047,1.04387 0.0806,0.4722 0.45971,1.10991 0.004,1.55132 -0.11771,0.33019 0.0386,0.9166 0.39997,1.19631 -0.16174,0.3523 -0.42196,0.8126 -0.35452,1.31207 0.12679,0.12631 0.14632,0.23085 0.13179,0.31729 l 0.17828,0.42323 1.16996,0.47026 c -0.67056,1.39319 1.77057,0.35041 0.9462,1.45262 -1.67179,-0.43188 -1.37969,2.24446 0.49194,0.5116 0.93927,-0.7581 1.02929,-2.0752 2.37403,-2.39417 0.0427,-0.19657 0.0496,-0.37691 0.0325,-0.54519 0.007,-0.013 0.0142,-0.0244 0.0212,-0.0377 -0.0109,-0.006 -0.0181,-0.0127 -0.0284,-0.0186 -0.0375,-0.26875 -0.14377,-0.50258 -0.29869,-0.70796 0.0675,-0.50253 0.39688,-1.12996 0.27337,-1.6552 0.0776,-0.12843 0.15978,-0.26383 0.2372,-0.39739 0.51546,-0.0608 0.96877,-0.52849 0.25114,-0.86041 -0.99645,-0.23463 -0.10795,-1.19683 -0.005,-1.79163 -0.13147,-0.84083 -0.82474,-0.52493 -1.17413,-0.0357 z", +2.78553, 3.0102, +"M 1.13709 -3.01011 c -0.11999,0.003 -0.27165,0.0974 -0.47025,0.32039 0.066,1.27176 -1.98331,0.51776 -2.42723,1.40147 -0.0487,-0.008 -0.0958,-0.0135 -0.13954,-0.0155 v 0 c -0.1647,-0.007 -0.38814,1.2022 -0.42942,1.30522 -0.044,0.10842 -0.0601,0.18666 0.12544,0.44857 -0.29803,0.73252 -0.15986,0.47603 -0.30581,1.26773 -0.70138,0.52342 0.0894,1.15559 0.6594,0.67903 0.0741,-0.0339 0.14901,-0.0598 0.22426,-0.0801 0.006,0.0576 0.0156,0.14035 0.019,0.18707 0.3897,0.22008 0.6114,0.17646 0.72191,-0.0186 l 0.27597,0.52503 c 0.45595,-0.0258 0.61214,-0.2684 0.60356,-0.57309 0.61931,0.11342 1.21306,0.13704 1.71154,-0.50953 1.48952,-0.17693 -0.82934,-2.42653 0.68212,-1.97766 0.62791,0.54053 0.50184,-1.28519 -0.30697,-0.9617 -0.50501,-0.32149 -0.42357,-2.01307 -0.94361,-1.99832 z", +3.40832, 4.84469, +"M 2.62836 -4.84469 c -0.55086,0.67388 -0.63529,1.54387 -0.99475,2.24637 -0.0561,-0.0679 -0.1206,-0.11028 -0.20103,-0.108 h -5.3e-4 c -0.11999,0.003 -2.65788,1.24415 -2.89783,1.72186 -0.0487,-0.009 -0.0958,-0.0135 -0.13954,-0.0155 -0.0819,-0.003 -0.17807,0.29411 -0.2594,0.60668 -0.20463,-0.0148 -0.40645,-0.0353 -0.59997,-0.0636 -0.21733,0.51377 -0.40796,0.43238 -0.59894,0.21445 -0.86921,0.67457 0.0811,1.38892 0.91467,1.8433 -0.0122,0.0981 -0.0303,0.22652 -0.0661,0.42065 -0.70135,0.52342 0.0894,1.15558 0.6594,0.67903 0.0741,-0.0339 0.14904,-0.0598 0.22428,-0.0801 0.006,0.0576 0.0157,0.14035 0.0191,0.18707 0.3897,0.22008 0.61142,0.17645 0.72194,-0.0186 l 0.27593,0.52503 c 0.0851,-0.005 0.15658,-0.0193 0.2217,-0.0382 -0.54399,0.66639 2.71703,2.46603 2.19988,1.0232 -0.0139,-0.61741 -0.002,-1.35716 -0.17984,-1.98593 0.0244,-0.028 0.0494,-0.0506 0.0734,-0.0816 0.0125,-0.001 0.0226,-0.004 0.0346,-0.006 0.0456,0.024 0.0912,0.0457 0.13642,0.0744 0.28681,-0.0617 0.92583,0.13145 0.99012,-0.27905 -0.20907,-0.18446 -0.45444,-0.38854 -0.68937,-0.61029 -8e-5,-9e-5 1.1e-4,-4.4e-4 0,-5.2e-4 -0.18285,-0.66281 -0.73432,-1.43655 0.21035,-1.156 0.62791,0.54053 0.50183,-1.28519 -0.30697,-0.9617 -0.16449,-0.10471 -0.26461,-0.35892 -0.34571,-0.64802 0.40217,-0.89611 1.62198,-1.24553 1.16322,-2.50115 0.10718,-0.40833 0.32133,-0.44801 0.15195,-0.57722 -0.14476,-0.11041 -0.66517,-0.33109 -0.71729,-0.41031 z", +2.91331, 4.2784, +"M 2.48505 -2.50743 -1.1297,-0.69932 c -0.26081,0.34403 -0.73919,0.6277 -1.09585,0.98835 -0.24912,0.29904 -0.87887,0.48065 -0.71385,-0.14805 0.12544,-0.65962 -0.50944,-0.96834 -0.73168,-1.47416 -0.346,0.0114 -0.71232,0.27983 -0.97235,-0.16999 -0.28809,-0.52063 -1.0299,-0.21119 -0.64799,0.32288 0.0949,0.43869 -0.36202,1.16319 0.1949,1.57459 0.20779,0.3961 0.46321,0.88104 0.35823,1.27627 -0.32873,0.54046 0.48828,0.91234 0.59778,1.40794 -0.21794,0.44035 -0.88762,0.52868 -0.68223,1.17211 -0.14326,0.65293 0.62787,0.80659 0.88904,0.25258 0.25359,-0.22465 0.61647,-0.63708 0.95934,-0.57843 0.36095,0.23638 0.80362,0.33863 0.64427,0.90689 -0.14441,0.70198 1.27406,0.83383 0.55797,1.45519 -0.0887,0.73566 0.84516,-0.20652 0.74062,0.41996 0.0243,0.13225 0.1875,0.0766 0.22429,-0.008 0.52299,-0.10663 0.83538,-0.53091 0.87788,-1.00509 -0.28215,-0.43305 -0.9743,-0.71636 -0.8522,-1.3157 0.1777,-0.15854 0.72403,0.14848 0.86856,-0.2217 0.0626,-0.53635 0.50097,-0.95686 0.279,-1.47081 -0.26406,-0.25211 -0.7397,-0.041 -0.99059,-0.11792 -0.1503,-0.59096 0.62362,-0.44277 0.78004,-0.89386 0.23735,-0.31162 -0.0744,-0.59806 -0.34594,-0.66771 0.35082,-0.27779 0.25851,-0.66602 0.19046,-1.00583 z", +3.95524, 4.27828, +"M -1.82143 -4.27815 c -0.25411,0.0105 -0.45471,0.25635 -0.21601,0.59015 0.0949,0.43869 -0.3616,1.16318 0.19532,1.57458 0.2078,0.3961 0.4631,0.88118 0.35814,1.27641 -0.0519,0.0854 -0.0729,0.16631 -0.0749,0.24443 -0.30033,-0.55817 -0.63892,-1.39159 -1.45005,-0.93483 -0.68429,0.018 -1.4623,0.76829 -0.48681,1.12758 0.43926,0.0751 -0.26699,0.60334 0.20516,0.87695 -0.0159,0.0235 -0.0497,0.0421 -0.0672,0.0651 l 1.56943,0.97152 c -0.003,-0.009 0,-0.0182 -0.003,-0.0269 0.0739,-0.017 0.13893,-0.0512 0.20052,-0.0894 -0.0235,0.0959 -0.022,0.20757 0.0222,0.34571 -0.14325,0.65293 0.6282,0.80671 0.88937,0.2527 0.0456,-0.0404 0.0984,-0.0907 0.15036,-0.13952 0.28739,0.18954 0.63963,0.18337 0.97256,-0.0904 0.0949,0.088 0.29792,0.16289 0.50125,0.2434 0.0167,0.087 0.0148,0.18794 -0.0206,0.3147 -0.0412,0.20018 0.049,0.35167 0.17622,0.4837 -0.60791,0.27447 1.22695,0.76516 1.12241,1.39164 0.0243,0.13225 0.18749,0.0763 0.22429,-0.008 0.52297,-0.10663 0.83547,-0.53093 0.87797,-1.00511 -0.18696,-0.28696 -0.5497,-0.50948 -0.74052,-0.80047 0.3039,-0.33202 0.6305,-0.62391 1.08003,-0.69298 0.3443,-0.30868 -0.18545,-0.98462 0.27493,-1.39681 -0.003,-0.027 0.0145,-0.0359 0.0156,-0.0605 v -5.3e-4 c -0.15378,-0.23531 -0.0824,-0.95349 -0.51263,-0.59635 -0.008,0.0349 -0.0352,0.0725 -0.0403,0.10697 -0.23939,0.0364 -0.4218,0.16976 -0.58653,0.33073 -0.0687,0.002 -0.13319,1.9e-4 -0.18605,-0.016 -0.15028,-0.59096 0.62391,-0.44292 0.78031,-0.894 0.23736,-0.31162 -0.0747,-0.59801 -0.34621,-0.66766 0.35081,-0.2778 0.25874,-0.66582 0.19069,-1.00563 v -5.3e-4 l -1.12967,-0.69918 c -0.2608,0.34403 -0.73938,0.62792 -1.09606,0.98857 -0.24911,0.29904 -0.87866,0.48039 -0.71364,-0.14831 0.12544,-0.65962 -0.5095,-0.96851 -0.73173,-1.47433 -0.34602,0.0114 -0.71252,0.2798 -0.97255,-0.17002 -0.10803,-0.19523 -0.27956,-0.27346 -0.43202,-0.26716 z", +4.74428, 5.06938, +"M -3.5022 -4.25506 c 0.0377,1.35963 1.56777,-0.33227 2.03738,0.80243 0.10379,0.0956 0.208,0.18438 0.31094,0.26506 -0.0406,0.39354 -0.0321,0.76444 0.0226,0.99137 -0.0937,0.13068 -0.17696,0.30235 -0.24523,0.49401 l -0.016,0.006 c 0.002,0.008 0.003,0.018 0.005,0.0266 -0.0996,0.28994 -0.16492,0.62239 -0.17565,0.93429 -0.0765,0.0524 -0.1308,0.11334 -0.15194,0.17898 l -7.4e-4,1e-4 c -0.0328,0.10411 0.0199,0.22082 0.19471,0.33612 0.0223,0.0965 0.0512,0.18645 0.0924,0.26307 -0.0649,0.0713 -0.11275,0.14849 -0.14391,0.22932 l -4e-4,-3.2e-4 c -0.0213,0.0536 -0.0342,0.10888 -0.042,0.16478 -0.07,-0.0196 -0.14851,-0.0772 -0.2347,-0.1906 -0.4414,-0.50596 -1.07643,-0.19724 -1.61154,-0.33475 -0.20468,0.2792 -0.21946,0.73356 -0.73384,0.66033 -0.58741,-0.0949 -0.8024,0.67948 -0.14649,0.70885 0.40367,0.19623 0.69169,1.00265 1.35917,0.8186 0.43988,0.0811 0.97908,0.17983 1.22514,0.50646 0.22215,0.59228 1.0194,0.17931 1.47686,0.39919 0.0351,0.0735 0.0519,0.1516 0.0635,0.23048 -0.003,0.23736 -0.0256,0.46963 -0.1023,0.6877 0.73066,0.46689 1.85021,2.14597 1.91273,0.29922 l -0.0399,-0.38017 c 0.17772,-0.45619 0.21761,-0.97787 0.11319,-1.43135 0.18902,-0.0344 0.36991,0.007 0.54937,0.25255 0.46301,0.54704 1.44266,-0.4874 1.48929,0.45953 0.5239,0.52402 0.35947,-0.79213 0.7877,-0.32307 0.11904,0.0625 0.17579,-0.10037 0.1322,-0.18137 0.23905,-0.4772 0.0983,-0.98501 -0.24849,-1.31123 -0.51486,-0.0455 -1.16504,0.32403 -1.56109,-0.14209 -0.015,-0.23767 0.56363,-0.47753 0.36169,-0.8198 -0.38324,-0.38042 -0.44322,-0.98487 -0.98457,-1.1276 -0.36135,0.052 -0.48894,0.55663 -0.70435,0.70647 -0.55766,-0.24666 0.0368,-0.76423 -0.22141,-1.1658 -0.0503,-0.19364 -0.18405,-0.2692 -0.33237,-0.2754 -0.0404,-0.3067 -0.57848,-0.81058 -0.65503,-0.97077 -0.40971,-0.63902 0.92366,-1.3558 0.28285,-1.97222 -0.0522,-0.16312 -0.21544,-0.27501 -0.49717,-0.33243 -0.0587,-0.0278 -0.11515,-0.0458 -0.1692,-0.0573 -0.0289,-0.0113 -0.057,-0.0238 -0.0853,-0.0361 -1.03981,-0.53291 -2.51397,0.22465 -3.31269,0.63055 z", +3.95515, 2.62566, +"M 3.95505 -0.686011 c -0.15408,-0.23494 -0.0822,-0.95418 -0.51263,-0.59686 -0.008,0.0349 -0.0352,0.0725 -0.0403,0.10697 -0.83055,0.12629 -1.00177,1.38378 -1.97093,1.12551 -0.48091,0.005 -0.94795,-0.32656 -1.45987,-0.33538 -0.37338,-0.52472 -0.57999,-1.00169 -0.26509,-1.59473 0.0936,-0.67218 -1.16382,-0.98056 -0.65939,-0.11679 0.26345,0.50822 0.18968,1.40264 -0.508,0.75758 -0.32954,-0.53085 -0.64802,-1.61561 -1.54771,-1.10898 -0.68429,0.018 -1.46227,0.76829 -0.48678,1.12758 0.43926,0.0751 -0.26701,0.60334 0.20516,0.87695 -0.0159,0.0235 -0.0497,0.0426 -0.0672,0.0656 l 1.56941,0.97152 c -0.002,-0.009 -10e-4,-0.0182 -0.003,-0.0269 0.39897,-0.0917 0.59063,-0.63554 0.87437,-0.0842 0.29559,0.58427 0.85214,0.78099 1.36064,0.36277 0.29091,0.26967 1.59176,0.4144 0.83405,0.98495 -0.96634,0.19424 0.0436,1.30965 0.4563,0.51211 0.65617,-0.49446 1.06992,-1.43769 1.93064,-1.56993 0.3443,-0.30868 -0.18545,-0.98462 0.27493,-1.39681 -0.002,-0.0272 0.0148,-0.0361 0.0155,-0.061 z", +3.39269, 3.51493, +"M 0.0750514 -3.51461 c -0.19846,-0.006 -0.39854,0.0731 -0.58965,0.27905 -0.3796,0.57495 -1.2206,0.87046 -1.87431,0.68161 -0.71429,-0.005 -1.49539,0.87511 -0.60666,1.43299 0.6417,0.38671 1.3579,0.96436 1.49963,1.7415 0.61413,0.69383 -0.14464,1.5326 -0.31522,2.29753 l 0.51263,0.59686 c 0.0171,-0.63284 0.7448,-0.57701 1.00822,-0.58962 0.0858,-1.15842 1.23714,0.33687 1.55236,-0.74983 0.69887,0.1792 0.74695,-1.30546 1.36168,-0.49299 0.62122,0.65999 1.1806,-0.4728 0.35139,-0.62271 -0.4378,0.23119 -0.35205,-0.68673 -0.66301,-0.91157 -0.0951,-0.86591 -0.42699,-1.59301 -0.77256,-2.37608 -0.28776,-0.47507 -0.86916,-1.26771 -1.4645,-1.28674 z", +2.56824, 2.063, +"M -1.65563 -2.06134 c -1.25863,0.0605 -1.00656,1.90514 -0.4826,2.70738 1.27622,-0.20063 1.59649,2.35287 2.91245,1.0399 0.34188,-0.16365 0.38346,-0.31718 0.30757,-0.47967 0.0248,-0.0232 0.0505,-0.0458 0.0754,-0.0689 0.78294,-0.61042 2.07913,-1.20867 0.99887,-2.30315 -0.1618,-0.25964 -0.35631,-0.35126 -0.56606,-0.33394 -0.4303,0.0354 -0.91952,0.5265 -1.3292,0.96373 -0.28645,-0.79722 -0.7443,-1.53257 -1.64403,-1.51297 -0.0978,-0.0128 -0.18852,-0.0162 -0.27243,-0.0128 z", +2.69804, 3.17552, +"M -0.907231 -3.17534 c -0.24929,0.007 -0.46483,0.2028 -0.59435,0.71789 -0.1246,0.75535 -1.2685,1.31142 -0.66913,2.14191 -1.32502,1.15191 0.1607,2.97757 1.02977,3.49106 l 0.1303,-0.11175 0.15128,-0.13697 c 0.8895,-0.21167 1.24411,-0.76409 1.26851,-1.69723 0.19571,-0.87034 1.02336,-1.14446 1.34665,-0.12867 0.20799,-0.56415 1.74212,-1.10319 0.39257,-1.55429 -0.99736,-0.1586 -0.23361,-1.73999 -1.4904,-1.42319 -0.30638,-0.417 -1.01682,-1.31425 -1.56523,-1.29875 z", +2.85984, 5.28311, +"M 2.73793 -5.28207 c -0.015,-0.002 -0.0319,-10e-4 -0.0501,0.002 l -0.34004,0.31678 c -0.17511,0.027 -0.38357,0.16702 -0.5669,0.42116 -0.73686,-0.0649 -1.46563,0.13236 -1.66706,0.13746 -0.67315,0.017 -0.52935,1.98311 -0.49609,2.62775 0.0175,0.11077 0.0314,0.16367 0.0424,0.19378 -0.0163,0.0123 -0.0413,0.0577 -0.0791,0.18656 -0.0357,0.12199 -0.10261,0.35732 -0.14883,0.51521 -0.17169,-0.11412 -0.34298,-0.19051 -0.50125,-0.18604 -0.24929,0.007 -0.46477,0.2027 -0.59428,0.71779 -0.12462,0.75535 -1.2686,1.3115 -0.66921,2.14199 -1.32504,1.15191 0.16084,2.97725 1.02989,3.49074 l 0.13022,-0.11162 0.1509,-0.13694 c 0.8895,-0.21167 1.24425,-0.76392 1.26867,-1.69706 0.19572,-0.87034 1.02339,-1.14446 1.34668,-0.12867 0.20799,-0.56415 1.74228,-1.10333 0.39275,-1.55443 -0.98558,-0.15672 -0.25485,-1.69952 -1.45005,-1.4304 0.0337,-0.19455 0.0813,-0.37702 0.15608,-0.53589 0.30318,-0.62037 1.08029,-1.8405 1.08415,-2.40243 0.005,-0.76342 0.83722,-0.66127 0.91932,-1.45315 0.13685,-0.53732 0.26681,-1.08517 0.0419,-1.11414 z", +2.25069, 2.15736, +"M -1.31572 -2.15659 c -0.1647,-0.007 -0.28795,0.0329 -0.32919,0.13591 -0.0487,0.11989 0.0156,0.32374 0.25373,0.63355 -0.18714,0.21042 -0.36899,0.44338 -0.58703,0.64182 -0.85828,0.33362 0.60076,1.16166 0.42995,1.80145 0.20592,0.53574 0.73787,1.3365 1.35496,0.78031 l 0.16846,0.32091 c 0.59552,-0.0337 1.38631,-0.20816 2.03242,-1.02836 l -0.19119,-0.8568 c -0.137,-0.23584 -0.2603,-0.40707 -0.37311,-0.53743 0.37941,-0.26434 1.13768,-0.0887 0.64751,-0.82579 -0.0527,-0.0367 -0.10821,-0.0708 -0.1633,-0.10542 0.49546,-0.53719 -0.1007,-0.64494 -0.7457,-0.38034 -0.43736,-0.17954 -0.90406,-0.30825 -1.35702,-0.38189 -0.0559,-0.008 -0.10962,-0.0114 -0.16124,-0.0119 -0.0978,-10e-4 -0.18828,0.009 -0.27284,0.0295 -0.24662,-0.12465 -0.50609,-0.20615 -0.70591,-0.21549 z", +3.67275, 3.21569, +"M -0.0460498 -3.21533 c -0.11996,0.001 -0.23781,0.009 -0.32142,0.0129 -0.29093,0.0121 -0.53765,0.0695 -0.3235,0.53536 -0.22627,0.0914 -0.90234,0.55329 -1.04024,-0.0388 -0.31879,-0.0384 -0.77856,0.15926 -0.93379,0.43718 -0.43863,-0.21291 -0.84127,0.042 -0.99891,0.44856 -0.043,0.32893 0.0751,0.60333 0.26046,0.84749 -0.009,0.3245 0.1084,0.47004 0.30022,0.49558 l -0.38343,0.45217 c 0.29165,0.62004 0.78181,0.43344 1.16014,0.0506 0.0781,0.0553 0.15775,0.10901 0.23977,0.16071 -0.53198,0.40496 -0.7605,0.97563 0.31369,1.28933 l 0.72294,-0.49765 c 0.0642,-0.0825 0.11237,-0.15383 0.16278,-0.22686 0.0327,0.0105 0.0654,0.0181 0.0982,0.0279 0.16068,0.39255 0.77761,0.90608 0.66302,1.33532 0.20593,0.53574 0.73787,1.3365 1.35496,0.78032 l 0.16846,0.32091 c 0.59552,-0.0337 1.38581,-0.20816 2.03192,-1.02837 l -0.19069,-0.85679 c -0.137,-0.23584 -0.2608,-0.40707 -0.37361,-0.53743 0.37941,-0.26434 1.13818,-0.0887 0.64801,-0.82579 -0.0527,-0.0367 -0.10871,-0.0708 -0.16383,-0.10542 0.49549,-0.5372 -0.10067,-0.64494 -0.74567,-0.38034 -0.43736,-0.17954 -0.90406,-0.30825 -1.35702,-0.38189 -0.0559,-0.008 -0.10962,-0.0114 -0.16124,-0.0119 -0.0978,-0.001 -0.18828,0.009 -0.27284,0.0294 -0.0795,-0.0402 -0.15954,-0.0736 -0.23926,-0.10387 0.11316,-0.10188 0.2712,-0.17912 0.47128,-0.21652 0.0483,-0.28576 0.18888,-1.14252 -0.003,-1.27021 -0.32433,-0.21564 -0.36465,-0.44676 -0.55502,-0.44183 -0.10408,0.003 -0.0796,-0.25731 -0.19894,-0.27234 -0.0916,-0.0237 -0.21338,-0.0292 -0.33332,-0.0279 z", +4.37172, 2.82177, +"M 4.15107 -2.76363 c -0.12588,-0.061 -0.31491,-0.0778 -0.59006,-0.0321 -0.39183,1.50176 -2.22417,-0.002 -2.85969,1.25239 -0.22059,0.57212 0.36731,0.82629 -0.0102,1.2242 -0.47996,0.50597 -1.83247,1.95136 -2.83873,1.05509 -1.37002,-0.71385 -1.45547,1.3313 -2.22411,1.81568 0.29352,0.31468 0.80913,0.29068 1.2014,0.23962 1.08757,-0.8648 2.32743,0.27342 3.58569,-0.0204 0.84516,-0.67246 1.49671,-1.57107 2.62485,-1.94719 0.46688,-0.61992 1.62754,-0.4097 1.06677,-1.52838 -0.0528,-0.66878 0.58863,-1.79182 0.0441,-2.05885 z", +4.37157, 4.1273, +"M 0.620322 -4.12594 c -0.55557,0.0573 -1.03581,1.84758 -1.54823,2.21485 0.3837,0.6876 0.283,1.30919 0.0419,1.9172 -0.42523,0.16787 -0.86971,0.17674 -1.26193,-0.1726 -1.37001,-0.71385 -1.45499,1.33153 -2.22363,1.81591 0.29352,0.31468 0.8087,0.29032 1.20097,0.23926 0.48778,-0.38788 1.00761,-0.36748 1.54461,-0.25941 -0.14566,0.3988 -0.2277,0.81069 -0.15658,1.24953 0.36957,0.23628 0.50355,0.43109 0.52038,0.60462 l 0.91723,0.64388 c 0.68612,-0.27271 2.29931,-0.23369 1.41335,-1.51153 0.38381,-0.70654 1.05535,-1.29742 0.97981,-2.16938 0.29503,-0.21386 0.61597,-0.39961 0.99218,-0.52503 0.46689,-0.61992 1.62738,-0.40991 1.06659,-1.52859 -0.0528,-0.66878 0.58846,-1.79176 0.0439,-2.05879 -0.12586,-0.061 -0.31498,-0.0777 -0.59012,-0.032 -0.31404,1.2036 -1.55213,0.47891 -2.35903,0.78858 -0.16962,-0.30286 -0.26535,-0.61458 -0.18346,-0.94051 -0.13758,-0.21015 -0.26969,-0.28917 -0.39791,-0.27595 z", +2.40615, 2.34567, +"M 1.22057 -2.34541 c -0.11996,0.001 -0.23783,0.009 -0.32144,0.0129 -0.29094,0.0121 -0.53763,0.0695 -0.32348,0.53537 -0.22627,0.0914 -0.90236,0.55323 -1.04026,-0.0388 -0.3188,-0.0384 -0.77856,0.15925 -0.9338,0.43718 -0.43862,-0.21292 -0.84126,0.042 -0.9989,0.44855 -0.043,0.32893 0.0751,0.60334 0.26045,0.8475 -0.009,0.3245 0.10843,0.47003 0.30025,0.49557 l -0.38343,0.45217 c 0.29165,0.62004 0.78179,0.4334 1.16012,0.0506 0.0781,0.0553 0.15777,0.10901 0.23979,0.16071 -0.53197,0.40497 -0.76052,0.97563 0.31366,1.28933 l 0.72295,-0.49764 c 0.0642,-0.0825 0.11239,-0.15383 0.1628,-0.22686 0.21412,0.0689 0.42973,0.123 0.64233,0.15606 l 0.0419,-0.0403 c 0.16619,-0.0829 0.52523,-0.15309 0.76946,-0.27698 0.23728,0.032 0.30295,-0.10345 0.24339,-0.30644 -0.006,-0.0574 -0.03,-0.12095 -0.0847,-0.19327 -2.9e-4,-2.4e-4 -7.2e-4,-2.8e-4 -10e-4,-5.2e-4 -0.0729,-0.13224 -0.17968,-0.27385 -0.3147,-0.40928 -0.1447,-0.38814 0.092,-0.78214 0.63511,-0.88366 0.0483,-0.28576 0.18899,-1.14252 -0.003,-1.27021 -0.32432,-0.21564 -0.36462,-0.44676 -0.55499,-0.44184 -0.10408,0.003 -0.0796,-0.25731 -0.19896,-0.27233 -0.0916,-0.0237 -0.21336,-0.0292 -0.3333,-0.0279 z", +3.50783, 3.58322, +"M 2.96957 -3.58221 c -0.054,-0.004 -0.10962,0.004 -0.16682,0.0204 -0.50287,0.14531 -1.11843,0.96574 -1.59686,0.75172 -0.10443,0.2409 -0.0893,0.42169 -0.004,0.56879 -0.16015,0.0374 -0.31561,0.12717 -0.45888,0.27949 -0.18095,-0.16288 -0.36634,-0.32735 -0.52012,-0.46987 -0.20437,-0.0568 -0.39359,-0.0485 -0.5582,7.6e-4 -0.3902,0.11676 -0.63677,0.46713 -0.60175,0.74583 -0.82773,-0.51376 -1.62373,-1.30541 -2.57037,-1.06536 h -4e-4 c 0.26652,0.79551 1.77909,1.50405 1.31935,2.59942 -0.29573,1.43857 0.96759,1.36306 1.9262,0.86162 -0.19051,0.27421 -0.33048,0.55606 -0.0695,0.87617 0.2907,0.72136 0.51069,1.5495 1.19922,1.99646 0.20081,-0.39583 0.52596,-0.80888 0.35365,-1.27772 -0.24696,-0.37352 -0.82161,-0.82316 -0.85651,-1.19804 0.67455,0.0369 1.28244,0.50499 1.61609,-0.44907 0.0895,-0.17713 0.12714,-0.35251 0.13189,-0.52562 0.5227,-0.002 0.92832,-0.16026 0.80786,-0.83572 -0.02,-0.11225 -0.0568,-0.22688 -0.10279,-0.34112 0.29762,0.56825 0.4526,0.29332 0.43494,-0.27949 0.56932,-0.62085 -0.0145,-1.20088 0.14248,-1.85712 -0.11901,-0.28003 -0.26387,-0.39114 -0.4255,-0.40157 z m -3.15799,2.26732 c -0.008,0.02 -0.0114,0.0391 -0.0165,0.0585 -0.0297,-0.0163 -0.0596,-0.0336 -0.0906,-0.0557 0.0354,-6.9e-4 0.0686,8.4e-4 0.10709,-0.003 z", +3.7615, 3.60448, +"M 2.71615 -3.60346 c -0.054,-0.004 -0.10972,0.004 -0.1669,0.0202 -0.32652,0.0944 -0.70003,0.46997 -1.05317,0.6656 -0.0392,-0.0864 -0.0913,-0.17253 -0.16949,-0.2589 -0.13989,0.11483 -0.28059,0.23472 -0.44546,0.30385 -0.37044,0.0914 -0.55509,0.29917 -0.72657,0.58653 -0.0611,-0.0552 -0.13033,-0.11623 -0.185,-0.16691 -0.20439,-0.0568 -0.39351,-0.0488 -0.55811,5.1e-4 -0.35949,0.10757 -0.59423,0.413107 -0.60203,0.678517 -0.0136,0.0138 -0.0277,0.0274 -0.0398,0.0413 -0.81341,-0.513967 -1.59923,-1.275407 -2.53061,-1.039227 h -5e-4 c 0.26651,0.795517 1.77903,1.503967 1.31929,2.599337 -0.29573,1.43857 0.9679,1.3634 1.92651,0.86196 -0.19053,0.27421 -0.33076,0.5558 -0.0698,0.87592 0.012,0.0298 0.0233,0.0613 0.0351,0.0915 -0.14874,0.19134 -0.58581,0.55204 -0.12969,0.59428 0.55962,-0.15196 0.50268,0.68369 0.64232,1.02681 0.27718,0.29651 0.87279,0.45861 1.25006,0.19069 0.25513,-0.26582 0.48609,-6.5e-4 0.76999,-0.005 0.16695,-0.18991 0.32821,-0.0961 0.49556,-0.0584 0.71837,-0.71386 0.97589,-1.56297 1.28365,-2.4846 -0.70366,-0.43516 -0.773,-0.65102 -0.81441,-1.42007 l -0.0104,-0.33796 c 0.0471,-0.0983 0.0696,-0.27697 0.0625,-0.50798 0.56933,-0.62085 -0.0149,-1.200497 0.14211,-1.856747 -0.11901,-0.28003 -0.26366,-0.39109 -0.42529,-0.40152 z", +2.73778, 2.64431, +"M -1.85179 2.64296 c 0.2123,0.0405 0.70405,-0.84096 1.03766,-0.92501 0.33497,0.30812 0.76833,0.15488 0.79944,-0.33693 -0.20608,-0.37546 0.3914,-0.98771 0.45321,-0.40411 0.57615,0.94326 1.00706,-0.63268 1.58337,-0.71623 0.18095,0.0986 0.3791,0.08 0.57309,0.10232 0.38124,-1.55226 -0.0574,-1.82885 -0.65008,-1.86604 0.0889,-0.23201 0.18206,-0.4544 0.29609,-0.63924 -0.83934,-0.59743 -2.12622,-0.83961 -2.63705,0.29611 -0.0335,0.0842 -0.0746,0.16672 -0.12041,0.24856 -0.21743,0.0386 -0.42992,0.0931 -0.60772,0.19482 -0.90374,-0.25609 -0.4962,0.82188 -0.69969,1.33377 -0.68622,0.72594 -1.23518,1.47159 -0.69607,2.40967 0.21852,-0.0632 0.39881,-0.18586 0.55965,-0.33848 0.002,0.0764 0.006,0.15365 0.006,0.22945 -0.008,0.28213 0.0321,0.39784 0.10282,0.41134 z", +2.73778, 2.64431, +"M -1.85179 2.64296 c 0.2123,0.0405 0.70405,-0.84096 1.03766,-0.92501 0.33497,0.30812 0.76833,0.15488 0.79944,-0.33693 -0.20608,-0.37546 0.3914,-0.98771 0.45321,-0.40411 0.57615,0.94326 1.00706,-0.63268 1.58337,-0.71623 0.18095,0.0986 0.3791,0.08 0.57309,0.10232 0.38124,-1.55226 -0.0574,-1.82885 -0.65008,-1.86604 0.0889,-0.23201 0.18206,-0.4544 0.29609,-0.63924 -0.83934,-0.59743 -2.12622,-0.83961 -2.63705,0.29611 -0.0335,0.0842 -0.0746,0.16672 -0.12041,0.24856 -0.21743,0.0386 -0.42992,0.0931 -0.60772,0.19482 -0.90374,-0.25609 -0.4962,0.82188 -0.69969,1.33377 -0.68622,0.72594 -1.23518,1.47159 -0.69607,2.40967 0.21852,-0.0632 0.39881,-0.18586 0.55965,-0.33848 0.002,0.0764 0.006,0.15365 0.006,0.22945 -0.008,0.28213 0.0321,0.39784 0.10282,0.41134 z", +2.72104, 3.39079, +"M 0.286178 -3.39079 c -0.14007,0.11497 -0.28086,0.23514 -0.44596,0.30437 -0.43748,0.10788 -0.61692,0.37041 -0.8201,0.74518 -0.20775,0.47047 -0.48958,-0.22623 -0.70953,-0.14625 -0.17844,0.25772 -0.66421,0.48419 -0.68522,0.74259 0.48728,-0.0488 0.29403,0.53326 0.005,0.63149 -0.19034,0.18451 -0.59938,0.72542 -0.14417,0.90072 0.44725,-0.12109 0.48747,0.26394 0.52038,0.58136 -0.074,-0.44637 0.62326,-0.57247 0.80926,-0.27647 -0.19566,0.38226 -0.23154,0.87394 -0.36896,1.30586 -0.1065,0.17514 -0.65649,0.59395 -0.16746,0.63924 0.55962,-0.15196 0.50271,0.68369 0.64236,1.02681 0.27718,0.29651 0.87278,0.45861 1.25005,0.19069 0.25514,-0.26582 0.48606,-0.001 0.76996,-0.005 0.16695,-0.18991 0.32824,-0.0961 0.49559,-0.0584 0.71837,-0.71386 0.97589,-1.56297 1.28366,-2.4846 -0.70366,-0.43516 -0.77306,-0.65079 -0.81447,-1.41984 l -0.0209,-0.66544 c -0.14473,-0.20288 -0.29131,-0.40206 -0.49768,-0.48162 -0.51565,0.12706 -0.62662,-0.15055 -0.84926,-0.31646 -0.0172,-0.40469 0.11379,-0.80938 -0.25281,-1.21407 z", +2.54738, 3.09564, +"M -2.54738 -1.21382 c 0.12657,0.31725 -0.0579,0.48889 0.29639,1.02693 0.28022,0.42555 1.10094,1.23068 1.25829,1.46812 0.39733,0.5996 0.15592,0.35314 -0.13001,1.1135 l 0.41975,0.48888 c 0.0197,-0.0589 0.63189,-0.11044 0.65209,-0.17001 0.0222,0.0431 0.0455,0.0859 0.0661,0.12919 0.0877,0.19747 0.15333,0.26483 0.2067,0.25115 0.16015,-0.0429 0.20981,-0.81511 0.41291,-0.98341 0.33369,0.10267 0.58274,-0.14635 0.44182,-0.49713 -0.2667,-0.19187 -0.0552,-0.81306 0.18034,-0.42943 0.71052,0.46274 0.48797,-0.77085 0.8594,-1.01906 0.15785,0.008 0.28929,-0.0697 0.43098,-0.11834 -0.24882,-1.20063 -0.644,-1.24748 -1.06662,-1.07745 -0.0152,-0.19 -0.0245,-0.3749 -0.006,-0.54054 -0.15658,-0.0274 -0.32065,-0.0374 -0.48318,-0.0305 l 0.0367,-0.18293 c -0.41522,-0.73638 -1.14845,-2.2421 -2.38538,-0.50798 -0.386,0.22163 0.0136,0.52023 -0.16174,0.80202 -0.29782,0.28407 -0.20672,-0.38153 -0.40463,-0.14883 -0.23569,0.10251 -0.42783,0.26499 -0.62375,0.42581 z", +4.16689, 3.81427, +"M -1.95926 -3.81051 c -0.29384,0.0315 -0.63098,0.25701 -1.01751,0.79892 -0.386,0.22163 0.0136,0.52023 -0.16173,0.80202 -0.29785,0.28407 -0.20672,-0.38153 -0.40463,-0.14883 -0.23569,0.10251 -0.42783,0.265 -0.62376,0.42582 0.12658,0.31725 -0.0582,0.48929 0.29612,1.02733 0.0583,0.0886 0.14341,0.19507 0.23771,0.30799 -0.0747,9e-4 -0.14412,0.0272 -0.19894,0.0687 h -5.3e-4 c -0.17727,0.13413 -0.20177,0.41817 0.24545,0.45268 -0.39825,0.48749 0.43336,0.66351 0.60359,1.13223 -0.0301,0.59814 0.20492,1.21839 -0.0532,1.81385 -0.21561,0.33237 0.23479,0.51094 0.38809,0.76015 0.0564,0.0501 0.0678,0.1023 0.10335,0.154 h 5.3e-4 c 0.4419,0.12956 0.9933,-0.19327 1.50844,-0.36587 0.76589,-0.53181 1.53929,-1.25257 2.29753,-1.59473 0.2199,0.13691 0.43069,0.36556 0.6263,0.4749 0.45749,0.20053 0.51117,0.84887 1.06042,0.88005 0.3851,0.004 0.70237,-0.18814 0.91467,-0.51573 -0.35343,-0.19801 -0.27543,-0.7836 0.0424,-1.07745 0.47445,-0.42372 0.22762,-1.0411 -0.13642,-1.4304 -0.40209,-0.32194 0.51559,-0.78393 -0.0935,-0.79737 -0.15158,-0.14276 -0.26191,-0.30716 -0.3855,-0.45837 l -0.23204,0.0605 c -0.52811,0.011 -1.14326,-0.0144 -1.2087,0.19172 l -0.31109,0.56431 c -0.38256,0.0826 -0.41923,0.31447 -1.16274,0.24132 -0.0683,0.071 -0.12409,0.1551 -0.17259,0.24754 l -0.003,-0.004 c 0.0758,-0.27877 0.11591,-0.63338 0.29712,-0.75448 0.15785,0.008 0.2893,-0.0697 0.43098,-0.11834 -0.24881,-1.20062 -0.64397,-1.24748 -1.06658,-1.07745 -0.0152,-0.19 -0.0242,-0.37489 -0.006,-0.54053 -0.15658,-0.0274 -0.32065,-0.0374 -0.48319,-0.0305 l 0.0367,-0.18294 c -0.28546,-0.50626 -0.72144,-1.37616 -1.36787,-1.3069 z", +3.3826, 3.20591, +"M 0.917115 -3.20545 c -0.0393,0.67856 -0.8055,0.38483 -1.10476,0.76992 0.21062,0.50964 -0.42472,0.8769 -0.74454,1.18986 -0.0806,-0.39166 -0.0452,-0.8526 -0.44329,-0.91195 -0.65614,0.0726 -0.81839,-0.6789 -1.28317,-0.87078 -0.2656,0.13569 -0.49393,0.3231 -0.72396,0.51189 0.16808,0.42128 -0.0773,0.64903 0.39322,1.36349 0.3721,0.56508 1.46193,1.63419 1.67087,1.94948 0.52763,0.79619 0.20746,0.4691 -0.17223,1.47876 l 0.55718,0.64914 c 0.0262,-0.0782 0.83916,-0.14666 0.86601,-0.22576 0.0295,0.0572 0.0604,0.11406 0.0878,0.17155 0.11646,0.26222 0.20361,0.35166 0.27446,0.33349 0.21267,-0.057 0.27862,-1.08235 0.54829,-1.30583 0.44311,0.13633 0.77382,-0.19433 0.5867,-0.66013 -0.35415,-0.25477 -0.0733,-1.07964 0.23947,-0.57022 0.9435,0.61446 0.64796,-1.0236 1.14116,-1.35319 0.2096,0.0106 0.38415,-0.0925 0.57228,-0.15714 -0.33038,-1.59428 -0.85513,-1.65649 -1.41632,-1.43072 -0.017,-0.21332 -0.024,-0.41843 -0.012,-0.61071 -0.22056,0.0324 -0.42912,0.0689 -0.60935,0.12495 -0.11459,-0.34405 -0.26659,-0.45533 -0.42751,-0.44603 z", +3.6319, 4.78495, +"M 0.896993 -4.78491 c -1.04618,0.86919 1.22964,1.02801 0.62706,2.09804 -0.0111,0.14066 -0.0168,0.27728 -0.0167,0.40806 -0.33465,0.21103 -0.62095,0.44688 -0.76564,0.63005 -0.40971,0.0176 -0.98566,0.24842 -1.41538,0.56247 -0.0885,-0.0278 -0.17012,-0.0331 -0.23481,-0.009 l -4.4e-4,-4.3e-4 c -0.10214,0.0385 -0.1614,0.15187 -0.14414,0.36058 -0.0621,0.0771 -0.11487,0.15557 -0.14971,0.23526 -0.0962,-0.007 -0.18664,0.003 -0.26946,0.0282 v -4.3e-4 c -0.51314,0.15257 -0.75518,0.85767 -0.51544,1.44917 0.0468,0.13673 0.0411,0.38968 0.0235,0.67624 -0.563,0.31662 -0.99981,0.90929 -1.60573,1.11511 0.0839,0.86303 -0.5451,2.78068 0.94615,1.68955 l 0.27419,-0.26605 c 0.59919,-0.18144 1.14669,-0.60514 1.40596,-1.11211 0.70056,-0.69037 0.4631,-1.79139 0.86788,-2.69387 0.38804,-0.19262 0.71359,-0.58299 1.22675,-0.0295 0.503,0.48469 0.58214,-0.85407 0.69164,-1.07533 0.24966,-0.71685 1.63714,-0.11067 1.72634,-0.99534 0.0961,-0.14176 0.083,-0.33963 -0.0458,-0.59669 -0.0144,-0.0633 -0.0351,-0.11846 -0.0594,-0.1681 -0.009,-0.0297 -0.0165,-0.0595 -0.0243,-0.0894 -0.22286,-1.14696 -1.72872,-1.83888 -2.54117,-2.21652 z m -1.97015,4.93649 c 0.004,0.004 0.009,0.008 0.0133,0.0124 -0.0133,0.047 -0.0288,0.0941 -0.044,0.14115 0.009,-0.0514 0.0193,-0.10257 0.0308,-0.15356 z", +2.20024, 4.20283, +"M 0.680372 -4.20263 c -0.17134,-0.003 -0.35314,0.0281 -0.51107,0.0956 h -0.002 c -0.37912,0.16215 -0.6214,0.53304 -0.25527,1.13533 0.0428,0.30239 0.0412,0.55368 -5.3e-4,0.76378 -0.20661,0.20366 -0.36107,0.43947 -0.42891,0.67541 -0.25368,0.17815 -0.60508,0.27842 -1.04386,0.33693 -0.81735,0.77798 1.48963,1.90805 0.56173,2.45463 -0.32718,0.0973 -0.67947,0.11365 -0.9953,0.0207 -0.64842,0.99087 0.36237,2.72148 1.30794,2.69131 l 0.25683,-0.16433 0.13385,-0.19999 c 0.0466,-0.0443 0.0923,-0.0929 0.13795,-0.14159 0.17233,0.17619 0.32211,0.35812 0.41807,0.55397 0.56925,-0.35075 1.47415,0.57288 1.80713,-0.0207 -1.12112,-0.65447 -1.73331,-1.46106 -0.64026,-2.46807 -0.1388,-0.15461 -0.33557,-0.2819 -0.49663,-0.40411 0.0189,-0.22272 0.0125,-0.44358 -0.0258,-0.65784 0.0824,-0.0552 0.18539,-0.11327 0.31935,-0.17622 0.92186,-0.47154 0.76654,-2.17728 0.97665,-2.5032 -0.36297,-0.32872 -0.97897,0.11256 -1.34102,-0.54364 -0.0805,0.02 -0.16004,0.0479 -0.23873,0.0796 0.0343,-0.20274 0.15489,-0.40552 0.40256,-0.60616 0.59182,-0.58976 0.17092,-0.91141 -0.34314,-0.92139 z", +2.88699, 5.39383, +"M 1.3671 -5.39363 c -0.17122,-0.003 -0.3528,0.0282 -0.51057,0.0956 h -0.003 c -0.37912,0.16215 -0.62142,0.53304 -0.25529,1.13533 0.0428,0.30239 0.0412,0.55368 0,0.76378 -0.20662,0.20366 -0.36108,0.43947 -0.42892,0.67541 -0.25368,0.17815 -0.6051,0.27842 -1.04386,0.33693 -0.81735,0.77798 1.4896,1.90805 0.56171,2.45463 -0.32718,0.0973 -0.67945,0.11362 -0.99528,0.0207 -0.14761,0.22555 -0.20556,0.49003 -0.20154,0.76275 -0.051,0.0146 -0.10085,0.0324 -0.14729,0.0579 -0.23484,0.6226 -0.50334,1.23094 -0.7865,1.83296 -0.19645,0.25916 -0.14105,0.63084 -0.33951,0.83613 -0.11512,0.138 -0.11041,0.31176 -0.0977,0.48472 l 1.21801,1.32705 c 0.11266,-0.0498 0.24308,-0.0702 0.37931,-0.0165 0.29117,0.0276 0.68913,0.0748 0.86971,-0.23874 0.30268,-0.33688 0.72999,0.11684 1.03198,-0.17725 0.082,-0.27859 0.31242,-0.40815 0.41085,-0.68988 0.33589,-0.752 0.92244,-0.0445 1.15649,-0.42471 0.35317,-0.13097 0.0367,-1.3743 -0.16174,-1.55863 0.0322,-0.0731 0.0626,-0.14742 0.0972,-0.21911 0.2109,0.004 0.28993,-0.14967 0.11834,-0.38292 -0.0568,-0.22605 0.26795,-0.75271 -0.0594,-0.80564 -0.2096,0.24628 -0.25599,0.65901 -0.5855,0.79892 -0.1397,-0.40155 -0.0145,-0.84498 0.51882,-1.33635 -0.1388,-0.15462 -0.33554,-0.2819 -0.49659,-0.40412 0.0188,-0.22271 0.0124,-0.44358 -0.0259,-0.65784 0.0824,-0.0552 0.18539,-0.11326 0.31938,-0.17621 0.92183,-0.47154 0.76655,-2.17729 0.97668,-2.50321 -0.36298,-0.32872 -0.97896,0.11256 -1.34101,-0.54364 -0.0805,0.02 -0.16005,0.0479 -0.23874,0.0796 0.0343,-0.20274 0.15489,-0.40552 0.40254,-0.60616 0.59163,-0.58956 0.17121,-0.9112 -0.34261,-0.92139 z", +2.2926, 5.13722, +"M 0.802274 -5.13667 c -0.15648,0.008 -0.31396,0.11235 -0.39378,0.36329 0.17158,0.46045 -0.71247,0.26413 -0.98288,0.53433 -0.18795,-0.0953 -0.37721,-0.18365 -0.56276,-0.25735 -0.30393,-0.35352 -0.57627,-0.46456 -0.78031,-0.41599 h -0.001 c -0.34007,0.0809 -0.48919,0.60594 -0.27337,1.19424 1.00303,1.38655 -0.11896,2.78412 0.99219,3.28301 0.18788,-0.0184 0.35102,-0.008 0.49866,0.0202 0.0272,0.0107 0.055,0.0168 0.0842,0.017 1.09791,0.28456 1.07577,1.83267 1.1281,2.82101 1.29392,0.57385 -0.73445,2.82023 1.25884,2.61276 0.17748,0.17897 0.47238,0.11556 0.51522,-0.14728 0.081,-1.48014 -0.80518,-2.85605 -0.76896,-4.31808 0.16182,-0.1731 0.22826,-0.33544 0.2403,-0.49299 0.17579,-0.13499 0.36803,-0.25536 0.53588,-0.29662 -0.45833,-0.34903 -0.47617,-0.81306 -0.45474,-1.07591 -1.13773,-0.23427 0.49343,-1.18353 -0.54364,-1.63607 0.26771,-0.66998 -1.19856,-0.90889 -0.31369,-1.41387 0.50499,-0.3651 0.16598,-0.81 -0.17827,-0.79168 z", +4.57828, 3.5071, +"M 2.91251 -3.50687 c -0.4486,0.0106 0.45675,0.54041 0.18913,0.76585 -0.86641,-0.29492 -1.26553,1.09463 -1.96578,0.93793 -0.86302,0.0543 -1.79475,0.32429 -2.49597,0.83405 -0.39846,-0.0495 -0.7705,-0.009 -1.1157,0.12454 -0.006,0.0507 0.007,0.10957 -0.003,0.15813 0.0966,0.98514 -1.0613,0.70185 -1.47535,0.23151 -0.37552,-0.57285 -1.03049,0.23261 -0.27905,0.28888 -0.31933,0.39262 0.19955,0.57156 0.46199,0.88831 -0.002,0.0106 -0.005,0.0172 -0.006,0.0284 0.0115,0.11487 0.0542,0.20711 0.11732,0.28474 0.007,0.52372 0.17613,1.06164 -0.0476,1.58079 -0.20304,0.31453 0.22357,0.4826 0.36896,0.71778 0.0533,0.0472 0.064,0.0964 0.0977,0.14521 h 5e-4 c 0.41788,0.12151 0.93829,-0.18412 1.42473,-0.3483 0.40148,-0.2801 0.80497,-0.61424 1.20716,-0.9126 0.50226,-0.12855 1.03791,-0.70742 1.45571,-0.97152 -0.39362,-0.88195 1.08802,-0.72117 1.19787,-1.3348 -0.12419,-0.6673 -0.7335,-1.91974 0.42995,-1.96474 0.86471,-0.32419 0.78534,1.59558 1.21698,0.39687 -0.25257,-0.73375 0.38536,-0.64026 0.82942,-0.33848 0.28241,-0.45436 -0.55153,-1.06703 -1.10898,-1.37252 v 5.1e-4 c -0.0792,-0.0443 -0.15266,-0.0811 -0.21706,-0.1111 -0.12671,-0.0221 -0.21858,-0.031 -0.28266,-0.0295 z", +3.74688, 2.41634, +"M 2.72883 -2.41634 -0.35677,0.016 c -0.33291,0.36885 -0.63684,0.43941 -0.88624,0.44063 -0.0292,-0.0173 -0.0593,-0.0354 -0.0868,-0.0506 v 3.3e-4 c -0.051,-0.0285 -0.0983,-0.0522 -0.13977,-0.0716 -0.0816,-0.0142 -0.14078,-0.02 -0.18205,-0.019 -0.10932,0.003 -0.0935,0.0532 -0.0413,0.1228 -0.0466,0.007 -0.0874,0.0211 -0.1198,0.0519 -0.0676,0.10644 -0.089,0.22694 -0.0958,0.35209 -0.32395,0.17106 -0.55217,0.6454 -0.88722,0.57042 -0.5558,0.035 -1.15583,0.20884 -1.6074,0.53712 -0.25661,-0.0319 -0.49621,-0.006 -0.7185,0.0802 -0.004,0.0326 0.005,0.0706 -0.002,0.10184 0.0622,0.63443 -0.68347,0.45199 -0.95012,0.14909 -0.24183,-0.36891 -0.66363,0.14979 -0.17971,0.18604 -0.20564,0.25284 0.12851,0.36808 0.29752,0.57207 -0.001,0.007 -0.003,0.0111 -0.004,0.0183 0.007,0.074 0.0349,0.13337 0.0755,0.18337 0.005,0.33727 0.1135,0.68368 -0.0306,1.01801 -0.13076,0.20256 0.14398,0.3108 0.23761,0.46226 0.0343,0.0304 0.0412,0.0621 0.0629,0.0935 h 3.2e-4 c 0.26912,0.0782 0.60427,-0.11857 0.91752,-0.2243 0.25856,-0.18038 0.5184,-0.39557 0.77741,-0.58771 0.32345,-0.0828 0.66843,-0.45558 0.93749,-0.62566 -0.18482,-0.41411 0.27077,-0.47225 0.55943,-0.62599 0.042,0.26188 -0.16431,0.57971 -0.0466,0.81602 -0.0361,0.3214 0.2697,0.38876 0.29186,0.65727 -0.0155,0.41805 0.31928,0.10309 0.49155,0.006 0.24347,0.16794 0.51027,0.0323 0.71949,-0.1644 0.15749,-0.44026 0.53019,-0.15638 0.81901,-0.0952 0.098,-0.20391 0.35342,-0.32496 0.4526,-0.4992 -0.0531,-0.28513 0.23897,-0.57539 0.41732,-0.72149 v -3.4e-4 c 0.3295,-0.64851 0.11566,-1.00699 -0.21897,-1.51055 l 0.28918,-0.44994 0.22499,-0.29984 c -0.18304,-0.14669 -0.3661,-0.12842 -0.54912,-0.0343 l -0.38038,0.11848 c 0.28124,-0.43579 0.14347,-0.51087 -0.0885,-0.57341 z", +1.5426, 3.75375, +"M -0.18215 -3.74938 c -0.43006,0.0954 -0.0238,1.66304 -0.29143,2.06565 -1.23283,0.67467 0.70648,1.73509 -0.66571,2.29879 -1.27771,1.27642 0.87232,1.5933 1.05811,1.42669 -1.72666,0.27299 0.54523,3.0984 0.51438,0.84809 0.0778,-1.31836 1.51452,-1.87061 0.99737,-3.31344 -0.0269,-1.19813 0.0509,-2.86032 -1.37276,-3.26853 -0.10038,-0.0537 -0.17819,-0.0707 -0.23966,-0.0572 z", +2.6102, 2.40582, +"M -2.60391 1.07532 1.21829,1.32714 c 0.11265,-0.0498 0.24287,-0.0704 0.37911,-0.0167 0.29115,0.0276 0.68939,0.0748 0.86997,-0.23871 0.30266,-0.33688 0.72982,0.11701 1.03183,-0.17708 0.082,-0.27859 0.31221,-0.40824 0.41064,-0.68997 0.0829,-0.35912 0.3014,-0.69002 0.49691,-1.00001 0.25988,-0.36573 0.40154,-0.79981 0.5954,-1.20228 0.21088,0.004 0.29,-0.14987 0.11841,-0.38313 -0.0568,-0.22605 0.26786,-0.75294 -0.0595,-0.80587 -0.21044,0.24728 -0.25622,0.66273 -0.58937,0.80098 -0.0881,0.24739 -0.32811,0.21877 -0.5183,0.099 -0.43381,-0.0984 -0.16894,-0.56282 -0.0503,-0.81595 -0.18037,-0.10226 -0.47473,0.10933 -0.66436,0.16038 0.14099,0.42689 -0.26992,0.60149 -0.59482,0.72943 -0.10138,0.24534 -0.36733,-0.0479 -0.17905,-0.12239 0.19862,-0.22162 0.39983,-0.47805 0.66131,-0.63217 0.23857,-0.24684 -0.1743,-0.27544 -0.34069,-0.2571 -0.28559,0.11508 -0.52696,7.5e-4 -0.74386,-0.19182 -0.1358,-0.11552 -0.22022,-0.0715 -0.27824,0.0899 -0.15588,0.0841 -0.36986,0.0793 -0.5395,0.17231 -0.23485,0.6226 -0.50305,1.23123 -0.78622,1.83325 -0.19645,0.25916 -0.14117,0.63063 -0.33965,0.83592 -0.11511,0.138 -0.11073,0.31194 -0.098,0.4849 z", +3.83978, 2.30066, +"M 1.89988 -2.28596 c -0.46473,-0.0533 -0.93451,0.0301 -1.2983,0.38777 -0.61395,-0.10651 -1.14946,0.60908 -1.8877,0.45323 -0.65836,-0.53157 -1.19607,0.74513 -1.84876,0.2517 -0.22541,0.36322 -0.81294,0.89409 -0.68754,1.46714 0.20541,0.12631 0.2374,0.23071 0.21384,0.31715 l 0.28852,0.42359 5.18412,1.28604 c -0.12156,-0.38789 0.57265,-0.65546 1.06815,-0.66503 0.3002,-0.42158 1.17579,-0.37128 0.82666,-1.04765 -0.64248,0.006 -0.4043,-0.75074 -0.0849,-0.96787 z", +2.48198, 2.67999, +"M -0.947181 2.42314 c 0.18893,-0.12837 0.39015,-0.1443 0.5237,0.25685 0.51028,-0.15853 1.30811,-0.11944 1.84667,-0.42769 1.22161,0.34616 0.47447,-1.31052 0.96133,-1.80427 0.18748,-0.84884 0.0458,-1.7551 0.0512,-2.62474 0.0372,-1.37538 -0.84814,0.48939 -1.39027,0.62596 -0.40821,-0.37552 -0.93592,-0.18917 -0.97385,0.41022 0.25116,0.45758 -0.477,1.20377 -0.55234,0.49252 -0.7022,-1.14958 -1.22788,0.77102 -1.93025,0.87284 -0.42731,0.88954 1.20329,1.9184 1.46381,2.19831 z", +4.26056, 3.08976, +"M -2.80517 -3.08919 c -0.26757,0.53645 -1.24706,-0.0831 -1.33583,0.28009 0.54354,0.28297 0.25361,0.49804 -0.0894,0.49764 -0.15417,0.30689 0.31539,0.50952 0.66921,0.73174 -0.43301,0.39009 -0.69014,0.69733 -0.58912,0.83612 0.13288,0.3976 0.66614,0.90708 0.14624,0.88781 -0.3356,0.1386 0.28826,0.9763 0.62944,1.30069 0.0448,-0.0159 0.0277,0.18537 0.2382,0.28009 0.59182,-0.12048 0.63855,0.74505 1.24386,0.67799 0.29986,0.0447 0.27308,0.39182 0.33383,0.68678 0.2408,-0.23569 0.71932,-0.51227 0.5607,-0.89607 0.24093,-0.31002 0.88424,-0.0359 0.83043,-0.6966 0.27241,-0.35349 0.87897,-0.0301 1.26195,-0.22117 0.25652,0.75949 1.11287,0.11487 0.97616,-0.46044 0.16131,-0.52891 0.74101,-0.64995 0.6723,-0.0481 0.77777,0.57404 1.08543,-0.60114 0.85577,-1.1653 -0.30509,-0.30498 -0.47604,-0.87464 0.16433,-0.83974 0.20368,0.0876 0.36298,0.0215 0.49766,-0.10077 -0.0896,-0.39051 -1.13962,0.24844 -1.35134,-0.41238 -0.39409,-0.50595 -0.71183,-0.003 -0.74157,0.42736 -0.27477,0.54361 -1.36311,1.08291 -1.44074,0.11938 0.49909,-0.34336 0.0274,-0.70102 -0.47749,-0.47543 -0.34422,0.48082 -1.39303,0.25803 -0.98856,-0.43408 -0.39558,-0.16344 -0.54981,-0.83329 -0.99528,-0.80667 -0.46308,0.47435 -0.67871,-0.19078 -1.07075,-0.16898 z", +2.85227, 3.44376, +"M 2.39399 0.825598 c 0.51165,-1.00701 0.17934,-1.56385 -0.34027,-2.34578 l 0.44899,-0.69865 0.34956,-0.46536 c -0.28419,-0.22778 -0.56839,-0.19965 -0.85258,-0.0535 l -0.59069,0.18407 c 0.43669,-0.6767 0.22244,-0.79303 -0.13779,-0.89014 l -0.55392,0.0248 c -1.05242,1.16603 -1.92058,0.41374 -2.26059,0.73685 -0.31726,0.4997 -0.002,1.19184 -0.27419,1.71558 -0.0601,0.59507 -1.33712,0.72874 -0.96788,1.37654 0.68403,0.42661 -0.0301,1.17727 0.22283,1.68512 -0.056,0.49908 0.41904,0.60361 0.45347,1.02055 -0.0241,0.64915 0.49545,0.16052 0.76293,0.009 0.37808,0.26076 0.79269,0.0499 1.11759,-0.25546 0.24455,-0.68364 0.82318,-0.24258 1.27166,-0.14754 0.15219,-0.31662 0.54842,-0.50454 0.70243,-0.77509 -0.0825,-0.44275 0.37149,-0.89378 0.64845,-1.12065 z", +3.408, 3.57197, +"M 2.62753 -3.57195 c -0.64407,0.7879 -0.64716,1.84506 -1.20222,2.58759 -1.34442,-0.27745 -1.52748,0.69891 -1.31733,1.75739 -0.78212,0.16845 -1.74702,0.16312 -2.57312,0.0427 -0.21732,0.51378 -0.40761,0.43217 -0.59858,0.21424 -1.0749,0.8342 0.63602,1.73677 1.46282,2.1222 1.23346,0.6503 2.55782,-0.35092 3.77246,0.4198 0.2868,-0.0617 0.92584,0.13183 0.99013,-0.27867 -0.83826,-0.73953 -2.26236,-1.79647 -1.23986,-3.02911 0.18907,-1.17518 1.78492,-1.4423 1.271,-2.84888 0.10716,-0.40834 0.32162,-0.44801 0.15222,-0.57722 -0.14475,-0.11041 -0.6654,-0.33083 -0.71752,-0.41005 z", +2.16401, 4.29525, +"M 1.65199 -3.9757 c -0.1751,0.027 -0.38331,0.16713 -0.56662,0.42127 -0.73687,-0.0649 -1.46581,0.13196 -1.66725,0.13706 -0.67315,0.017 -0.52923,1.98326 -0.49599,2.6279 0.0831,0.52678 0.10231,-0.0945 -0.0368,0.38051 -0.25456,0.86925 -0.82603,2.79733 -0.99814,3.68266 -0.0219,0.0245 -0.0307,0.0543 -0.0512,0.0793 0.26405,0.40175 0.43883,0.65708 0.62561,0.94225 1.81312,-0.12134 0.99017,-2.46123 1.53551,-3.61943 0.3032,-0.62038 1.0801,-1.84071 1.08397,-2.40264 0.005,-0.76342 0.83708,-0.66154 0.9192,-1.45341 0.14595,-0.57315 0.28406,-1.1579 -0.008,-1.11255 z", +2.42152, 3.19498, +"M 1.79275 3.19496 c 0.0358,-0.35442 0.0143,-0.94751 0.14977,-1.20163 0.29216,-0.54826 0.76509,-0.61761 0.24914,-1.04756 l -0.46191,-0.29639 c -0.0199,-0.009 -0.0339,-0.008 -0.0548,-0.0191 0.008,-0.67733 -0.40627,-1.15393 -0.87696,-1.61178 -0.0135,-0.57623 -0.52506,-0.68936 -0.93404,-0.86224 -0.3143,-0.11364 -0.30235,-0.2211 -0.26928,-0.50192 0.001,-0.35694 -0.19325,-0.6476 -0.63636,-0.70807 -0.52435,-0.42985 -0.56303,0.22718 -0.74414,0.56327 0.27001,0.2644 0.29136,0.75233 -0.0961,1.0294 -0.41132,0.0707 -0.85183,1.03036 -0.23048,1.04386 0.0806,0.4722 0.45958,1.10992 0.004,1.55133 -0.1628,0.45669 0.19683,1.40675 0.90123,1.35186 0.45163,-0.12672 0.99602,0.14704 1.99196,-0.16774 0.14912,0.4712 0.54383,0.84975 1.00786,0.87673 z", +2.60961, 2.6311, +"M 2.50705 -1.19561 -0.25339,-0.1347 c -0.4738,-0.41913 -0.99447,-0.94138 -1.21945,-0.8131 l -0.73175,0.24406 c -0.40381,-0.23794 -0.62439,-0.0636 -1.21942,-0.73175 -0.45864,0.0258 -0.91727,0.38107 -1.37591,0.59171 -0.0117,0.11781 -0.0183,0.23633 -0.0649,0.35298 -0.27654,0.35904 -0.46239,0.91911 0.20227,0.9358 0.65658,0.0504 0.51399,0.93494 0.66863,1.40794 0.23986,0.54801 -0.23986,1.16298 0.21828,1.63643 0.33587,0.31601 0.77101,0.40448 1.22387,0.28852 -0.1503,-0.46126 0.39437,-0.91344 0.91269,-0.91403 0.76165,0.0123 1.04546,-0.73144 1.04116,-1.36969 -0.0925,-0.60988 1.09071,-0.27154 0.56549,-0.77799 -0.0175,-0.24875 0.0184,-0.48273 0.0324,-0.71618 z", +2.91238, 3.10557, +"M -2.9122 1.73814 c 0.28378,0.47289 1.03118,0.63668 1.62475,0.90306 1.10867,0.1542 2.37832,0.14746 3.32429,0.46437 0.29646,-0.1176 0.26342,-0.96007 0.29166,-1.66776 l 0.0964,-0.71277 c 0.0983,-0.21454 0.10887,-0.66087 0.22079,-0.8799 0.101,-0.19778 0.31208,-0.17115 0.25795,-0.31721 -0.37435,-0.55516 -0.83678,-0.93415 -1.38048,-1.15063 -0.0489,0.0422 -0.0876,0.10835 -0.13886,0.14474 -0.75872,0.99895 -1.59127,-0.26181 -1.57102,-1.05567 0.14438,-0.85593 -1.15818,-0.67142 -0.50818,0.0282 -0.74639,0.10568 -0.15692,0.9358 -0.38769,1.48657 -0.51224,0.50199 -0.80922,1.23824 -1.51997,1.55271 -0.45966,0.11748 -0.20829,0.6411 -0.27572,0.98493 0.009,0.0899 -0.0234,0.14503 -0.0341,0.21939 z", +3.04347, 2.84609, +"M 0.490388 -2.84481 c -0.17818,-0.0381 -0.59112,0.79085 -0.87113,0.86987 -0.28109,-0.28971 -0.64432,-0.14548 -0.67045,0.31688 0.17296,0.35303 -0.32861,0.92862 -0.38047,0.37989 -0.4836,-0.88691 -0.84563,0.59496 -1.32932,0.67352 -0.34102,0.46556 0.0163,0.50226 0.25082,0.78429 -0.88963,0.69447 -0.64769,1.26964 0.58717,1.61261 0.64827,-0.33916 1.89403,-1.4075 1.52897,0.052 0.13212,0.76935 0.98486,1.48997 1.55068,0.56922 -0.30948,-1.21831 1.0167,-2.14737 1.88681,-2.26869 -0.414,-0.6498 -0.0862,-1.85279 -0.94851,-2.09149 -0.29062,-0.0875 -1.51076,0.0901 -1.51829,-0.51083 0.006,-0.26528 -0.0269,-0.37452 -0.0863,-0.38722 z", +2.60354, 3.87863, +"M -2.58741 2.42622 5e-5,-5.1e-4 c 0.0545,-0.28255 0.24695,-0.66339 0.55812,-1.04225 0.58545,-0.71275 0.69899,-1.23193 0.40168,-1.83633 -0.12573,-0.25554 -0.10279,-0.32366 0.0655,-0.19436 0.14242,0.10941 0.35573,0.007 0.47396,-0.22648 0.13004,-0.25726 0.0644,-0.53105 -0.16725,-0.69336 -0.61079,-0.42848 -0.34025,-1.8077 0.39236,-1.99985 0.39389,-0.1033 0.67136,-0.0486 0.77194,0.15245 0.10567,0.21111 0.29186,0.16355 0.57011,-0.14555 0.38478,-0.42741 0.42246,-0.42673 0.54193,0.0137 0.0706,0.26033 0.052,0.57305 -0.0418,0.69491 -0.0936,0.12183 0.004,0.1741 0.21775,0.11617 0.29389,-0.0797 0.38668,0.21619 0.38089,1.21691 -0.004,0.7281 0.16873,1.53845 0.38543,1.80433 0.21632,0.26545 0.31499,0.58433 0.21915,0.70905 -0.0958,0.12468 -0.0624,0.2383 0.074,0.2522 0.13645,0.0139 0.2856,0.26879 0.33189,0.56623 0.0463,0.29751 -0.0165,0.46361 -0.13944,0.36914 -0.12297,-0.0945 -0.23633,-0.046 -0.25195,0.10731 -0.0156,0.15332 -0.25555,0.25548 -0.53324,0.22719 -0.90574,-0.0923 -1.36908,0.17162 -1.43488,0.81735 -0.0549,0.53905 -0.17952,0.61343 -0.83029,0.49663 -0.42102,-0.0756 -0.70687,-0.21398 -0.63513,-0.3073 0.15929,-0.20731 -0.61961,-0.67165 -1.08123,-0.6447 -0.24076,0.0141 -0.3242,-0.17035 -0.26966,-0.4529 z", +3.89459, 2.76207, +"M 2.11989 -2.76207 h 1.36873 l -0.35549,1.28958 c -0.29269,1.05994 -0.25675,1.36166 0.20266,1.6976 0.30734,0.22472 0.5588,0.76635 0.5588,1.20359 0,0.73869 -0.10906,0.78002 -1.53862,0.58406 -1.12744,-0.15454 -1.65256,-0.0734 -1.96439,0.30227 -0.42093,0.50722 -1.08901,0.5684 -2.78519,0.25655 -1.43006,-0.26295 -1.74284,-0.69806 -1.33735,-1.86135 0.19689,-0.56461 0.55188,-1.02688 0.78878,-1.02688 0.23697,0 0.64286,-0.3974 0.90268,-0.88292 0.48391,-0.90417 1.76118,-1.45844 2.42085,-1.05075 0.20303,0.12556 0.36914,0.0615 0.36914,-0.14193 0,-0.20347 0.61632,-0.36982 1.3694,-0.36982 z", +2.94033, 4.04841, +"M 0.955924 -4.04819 c 0.27815,0.007 0.71396,0.18533 1.21285,0.53472 0.89248,0.62514 1.02887,1.65306 0.31401,2.36795 -0.76145,0.76144 -1.35601,2.05174 -1.12098,2.432 0.1187,0.19201 0.0454,0.34882 -0.16219,0.34882 -0.20765,0 -0.37588,0.28073 -0.37181,0.62384 0.004,0.53339 0.0558,0.54652 0.35298,0.0891 0.26617,-0.40941 0.32982,-0.30503 0.27295,0.4456 -0.0609,0.80483 -0.24384,0.98032 -1.02141,0.98032 -0.52094,0 -1.4289,0.0959 -2.01772,0.21375 -0.62778,0.12557 -1.17184,0.0511 -1.31523,-0.18103 -0.13461,-0.2177 0.0843,-0.81432 0.48665,-1.32566 0.40219,-0.51129 0.6373,-1.08236 0.52222,-1.26856 -0.11506,-0.18621 0.0922,-0.41733 0.46092,-0.51383 0.46375,-0.12126 0.65661,-0.47079 0.62453,-1.1342 -0.0293,-0.6002 0.27891,-1.26441 0.82367,-1.77476 0.4875,-0.45671 0.78245,-1.04493 0.67046,-1.33678 -0.13082,-0.34108 -0.0108,-0.50804 0.2681,-0.5013 z", +2.50487, 5.03272, +"M -2.16669 -3.17022 1.86046,-0.51083 c 1.02338,-0.28104 1.94395,-0.73695 2.04586,-1.01295 0.10187,-0.27602 0.34634,-0.41088 0.54358,-0.29979 0.19726,0.11107 0.27852,0.40249 0.17931,0.64757 -0.0993,0.24506 -0.39051,1.29581 -0.64811,2.33521 -0.319,1.28729 -0.645,1.9083 -1.02188,1.94754 -0.38441,0.0401 -0.38656,0.0854 -0.007,0.14812 0.29981,0.0496 0.43437,0.35011 0.29918,0.66799 -0.23474,0.55145 -0.25461,0.55221 -0.43484,0.0127 -0.12461,-0.37299 -0.49795,0.24186 -1.09772,1.80788 -0.49978,1.30521 -1.09181,2.41091 -1.31488,2.45715 -0.22322,0.0463 -0.0643,-0.59646 0.35215,-1.4284 0.47376,-0.94633 0.58524,-1.53429 0.29799,-1.5706 -0.9072,-0.11464 -1.60579,-1.99425 -1.33221,-3.5826 z", +4.0742, 4.47677, +"M -1.73269 -4.47592 v 5.3e-4 c -0.11923,-0.0214 -0.34907,0.20596 -0.62117,0.66663 -0.42148,0.71353 -0.27757,1.66663 0.30591,2.02726 0.18712,0.11561 0.15346,0.28882 -0.11213,0.5824 -0.75139,0.83028 -2.02901,3.17126 -1.90582,3.49229 0.21982,0.57286 0.9162,0.20501 1.12292,-0.59273 0.10928,-0.42187 0.30009,-0.76688 0.42323,-0.76688 0.46329,0 0.96755,1.15024 0.89659,2.04432 -0.0619,0.78083 -0.006,0.90333 0.4005,0.88005 0.25974,-0.0148 0.64453,-0.10023 0.85474,-0.19017 0.26972,-0.11518 0.42074,-0.0149 0.51416,0.34262 0.22016,0.8419 0.94316,0.48133 1.16377,-0.58033 0.10563,-0.50859 0.28131,-1.03924 0.39066,-1.17926 0.10925,-0.14 0.27067,-0.55414 0.35812,-0.91984 0.11033,-0.4615 0.40817,-0.76905 0.97308,-1.0051 0.52028,-0.21739 0.86677,-0.55204 0.96118,-0.92811 0.23675,-0.94326 -0.0311,-1.2976 -0.98084,-1.2976 -0.49064,0 -1.15258,-0.21143 -1.55027,-0.49454 -0.69181,-0.49257 -0.89485,-0.48303 -1.68363,0.0796 -0.35702,0.25464 -0.49911,0.1962 -1.0015,-0.41186 -0.38391,-0.46468 -0.54345,-0.8907 -0.46455,-1.2392 0.0738,-0.32572 0.0477,-0.49342 -0.045,-0.51005 z", +4.05861, 3.1259, +"M 1.4673 -3.12553 c 0.2083,-0.0104 0.30102,0.19858 0.4976,0.72986 l 0.28366,0.76589 0.85394,-0.10578 c 0.75247,-0.0929 0.83822,-0.0672 0.72384,0.2093 -0.0771,0.18457 -0.0519,0.26844 0.0579,0.20316 0.12017,-0.07 0.17818,0.0104 0.17417,0.18171 v -7.9e-4 c 0,0.17241 -0.0697,0.43828 -0.19554,0.74443 -0.13945,0.33975 -0.31333,0.45866 -0.61256,0.41861 -0.29078,-0.0393 -0.443,0.0567 -0.49759,0.31661 -0.043,0.20532 -0.16706,0.68434 -0.27521,1.06489 l -0.19702,0.6923 -1.07262,-0.0537 c -1.68416,-0.0835 -2.45547,0.0134 -2.35518,0.29672 0.0623,0.17504 -0.11423,0.24332 -0.61168,0.22847 -0.63289,-0.0166 -0.67621,0.0119 -0.45086,0.30435 0.21928,0.2847 0.20904,0.30719 -0.0905,0.18553 -0.18708,-0.0764 -0.48128,-0.1495 -0.65307,-0.1495 -0.27046,-0.0104 -0.27432,-0.0337 -0.0267,-0.18475 0.25384,-0.15875 0.17922,-0.25993 -0.10237,-0.14406 -0.0593,0.0242 -0.19242,-0.11646 -0.29508,-0.31204 -0.13945,-0.26497 -0.12017,-0.39565 0.0742,-0.51137 0.20429,-0.12255 0.18916,-0.15151 -0.0682,-0.16636 -0.22417,-0.007 -0.32431,-0.16022 -0.31586,-0.48071 0,-0.25783 0.0979,-0.46381 0.20014,-0.46381 0.10385,0.003 0.18975,-0.0786 0.19242,-0.18248 0,-0.10355 -0.13204,-0.19547 -0.29983,-0.19547 -0.24183,-0.006 -0.25607,-0.0623 -0.0757,-0.26911 0.17714,-0.20219 0.17032,-0.29634 -0.0282,-0.42243 -0.48024,-0.30624 -0.47979,-0.7686 0,-1.16533 0.25591,-0.21095 0.46895,-0.51184 0.47296,-0.66929 0,-0.20785 0.12759,-0.25156 0.45234,-0.16253 0.24509,0.0682 0.50427,0.0347 0.57652,-0.0751 0.0727,-0.11053 0.38795,-0.19961 0.70232,-0.18477 0.42357,0.0104 0.54225,0.0849 0.45917,0.2852 -0.0905,0.21809 -0.0208,0.23926 0.36348,0.1043 0.35042,-0.12269 0.43854,-0.10875 0.33425,0.0499 -0.0994,0.15132 -0.0326,0.17466 0.22238,0.0782 0.1994,-0.0751 0.63898,-0.20767 0.97664,-0.2967 0.74565,-0.19402 0.8271,-0.41151 0.10089,-0.2691 l -0.51896,0.10192 0.47608,-0.26372 c 0.25518,-0.1408 0.42148,-0.2323 0.54655,-0.2323 z", +4.06584, 3.46902, +"M 0.0899704 -3.46718 c -0.17768,-0.01 -0.28056,0.0213 -0.24431,0.083 0.0487,0.0831 -0.11034,0.13842 -0.35322,0.13842 -0.4581,-0.0115 -0.94486,0.37267 -0.74196,0.58647 0.0645,0.0674 0.0315,0.11778 -0.0731,0.11778 -0.1046,-0.003 -0.23714,0.15712 -0.29461,0.35544 -0.0745,0.25648 -0.19559,0.32418 -0.41912,0.23103 -0.25478,-0.1056 -0.29634,-0.0555 -0.22139,0.26509 0.0588,0.25046 0.0143,0.3895 -0.1347,0.3895 -0.12466,-0.003 -0.36123,0.13641 -0.52717,0.30953 -0.27842,0.29188 -0.27469,0.33282 0.0487,0.54646 0.19201,0.1271 0.34547,0.35797 0.34132,0.51242 0,0.15476 0.076,0.23203 0.17696,0.17327 0.10175,-0.059 0.18084,0.0149 0.17697,0.16438 0,0.14962 -0.0946,0.32273 -0.19989,0.38431 -0.13183,0.0768 -0.12753,0.19543 0.0143,0.37395 0.32527,0.41241 -0.0745,0.29467 -0.72864,-0.21473 -0.71245,-0.55498 -1.05936,-0.39598 -0.95892,0.43985 0.0416,0.33988 0.12324,0.48366 0.20807,0.35468 0.0888,-0.13655 0.20691,-0.004 0.32584,0.36877 0.10174,0.32039 0.28573,0.55263 0.40724,0.51536 0.34705,-0.10575 0.38459,-0.42635 0.0874,-0.73974 -0.43074,-0.4534 -0.31081,-0.73099 0.15547,-0.35986 0.25348,0.20188 0.38044,0.45716 0.32427,0.65161 -0.0502,0.17568 2.9e-4,0.32435 0.12036,0.32433 0.1175,0.003 0.16537,-0.076 0.10747,-0.17623 -0.0602,-0.1046 0.0143,-0.13327 0.17182,-0.0674 0.15345,0.0636 0.28113,0.0207 0.28428,-0.0956 0,-0.12179 0.0774,-0.1647 0.16508,-0.10732 0.0874,0.058 0.79011,0.13068 1.5603,0.16217 0.87538,0.0363 1.30439,0.11506 1.14548,0.20955 -0.1943,0.1165 -0.16808,0.15227 0.1089,0.1666 0.29763,0.0129 0.31238,0.0459 0.086,0.1792 -0.19932,0.1188 -0.22081,0.21924 -0.0803,0.36729 0.0602,0.0639 0.31711,0.0949 0.49235,0.14587 -0.0258,-0.0297 -0.0559,-0.0606 -0.0545,-0.13326 0,-0.1003 0.0903,-0.17623 0.19631,-0.17623 0.0788,0.003 0.1175,0.0486 0.1046,0.11334 0,0.0217 -0.0143,0.0455 -0.0301,0.0703 -0.0516,0.0791 -0.11177,0.12094 -0.1592,0.14286 0.55597,0.14794 1.3051,0.23898 1.40841,0.0807 0.0602,-0.0917 0.0272,-0.21988 -0.0731,-0.28583 -0.33674,-0.22037 0.1784,-0.8133 0.69525,-0.79898 0.23472,0.006 0.34648,-0.01 0.35695,-0.0652 v 0 c 0,-0.0331 -0.0229,-0.0801 -0.0846,-0.14512 -0.11607,-0.12266 -0.20835,-0.36821 -0.20362,-0.54575 0,-0.19462 -0.17309,-0.37354 -0.4495,-0.45093 -0.25205,-0.0703 -0.41684,-0.16677 -0.36583,-0.21549 0.0516,-0.0483 -0.0229,-0.21043 -0.16507,-0.35988 -0.14186,-0.14945 -0.21293,-0.34046 -0.15848,-0.42356 0.0545,-0.0832 0,-0.21354 -0.11033,-0.28804 -0.14187,-0.0937 -0.16236,-0.0546 -0.0616,0.12222 0.12466,0.22596 0.10173,0.22495 -0.16135,0 -0.24246,-0.20762 -0.25721,-0.29549 -0.0702,-0.40726 0.21766,-0.12996 0.0803,-0.22733 -0.2585,-0.1829 -0.0745,0.01 -0.13327,-0.10374 -0.1304,-0.25324 0,-0.15017 -0.0702,-0.27694 -0.16593,-0.27694 -0.0946,-0.003 -0.37127,-0.21307 -0.61386,-0.46872 -0.2426,-0.2556 -0.39377,-0.46206 -0.33617,-0.46206 0.0573,0.002 0.0143,-0.11506 -0.1003,-0.25843 -0.14042,-0.17871 -0.1443,-0.29802 -0.0143,-0.37395 0.37657,-0.21937 0.1976,-0.59398 -0.32656,-0.68568 -0.0731,-0.01 -0.14043,-0.0222 -0.19918,-0.0236 z", +3.04742, 4.1149, +"M 0.969015 -4.11451 c -0.1123,0.003 -0.4062,0.23381 -0.6532,0.51211 -0.247,0.27833 -0.4917,0.4659 -0.5436,0.41704 -0.052,-0.0489 -0.092,-0.0185 -0.089,0.0677 0,0.0862 -0.1232,0.13629 -0.2795,0.11111 -0.1564,-0.0252 -0.2829,0.0298 -0.2812,0.12247 0,0.10163 -0.054,0.0859 -0.141,-0.0393 -0.1244,-0.18039 -0.1424,-0.17678 -0.1385,0.0248 0,0.12772 -0.089,0.27161 -0.2042,0.31987 -0.1152,0.0483 -0.2111,0.0261 -0.2134,-0.0491 0,-0.0753 -0.1476,-0.13195 -0.3225,-0.12505 -0.2601,0.009 -0.2789,0.0366 -0.1017,0.14882 0.1624,0.10279 0.1233,0.11844 -0.1572,0.0625 -0.3368,-0.0673 -0.3789,-0.0286 -0.4299,0.39739 -0.081,0.67937 0.181,2.0534 0.4382,2.29547 0.2153,0.2027 0.2296,0.52597 0.052,1.16531 -0.07,0.25284 -0.1989,0.3266 -0.6031,0.34623 -0.4968,0.0241 -0.4903,0.0295 0.199,0.1819 1.3697,0.30279 2.4788,0.44216 2.7978,0.35191 0.1769,-0.05 0.674,-0.0115 1.1048,0.0858 l 0.7829,0.17673 -0.011,0.54881 c -0.051,2.51094 0.8952,0.2636 0.8723,-1.92856 h -5e-4 l -0.017,-1.60197 -0.6072,0.0429 c -0.3341,0.0235 -0.6756,0.0384 -0.7586,0.0336 -0.1011,-0.006 -0.1467,-0.54478 -0.138,-1.63452 0.013,-1.66481 -0.091,-2.04807 -0.5566,-2.03399 z", +5.34994, 2.90409, +"M 0.205271 -2.88963 c -0.13829,-0.0359 -0.26164,-0.004 -0.39597,0.0846 -0.4055,0.27123 -0.57988,1.88599 -0.20283,1.87455 0.14783,-0.004 0.19695,0.23609 0.12558,0.61444 -0.22207,1.18362 -0.24909,1.20421 -0.83216,0.65553 -1.004,-0.9451 -2.68326,-0.94665 -3.80823,-0.007 -0.588,0.49193 -0.58959,1.01822 0,1.10322 0.48466,0.0703 2.31733,0.0446 3.47298,-0.0477 1.30444,-0.10428 2.47502,0.0916 2.48901,0.41565 0.0207,0.47846 0.40456,0.83765 0.9455,0.88472 0.2971,0.0257 1.17457,0.10237 1.94935,0.17084 0.97395,0.0862 1.40585,0.0494 1.4014,-0.1208 v -7.4e-4 c 0,-0.13544 -0.24559,-0.23879 -0.53554,-0.23 -0.51615,0.0159 -0.52728,-0.021 -0.47228,-1.65113 l 0.0572,-1.66673 -0.87063,0.0172 c -1.71646,0.0362 -1.88385,-0.0251 -1.9042,-0.69824 -0.0159,-0.34413 -0.10173,-0.62322 -0.20124,-0.6202 -0.10015,0.003 -0.42332,-0.20574 -0.71803,-0.46412 -0.20188,-0.17696 -0.35766,-0.27952 -0.49691,-0.31544 z", +4.12566, 4.16038, +"M -4.12566 1.26026 c 0.3983,1.33704 0.5968,1.95916 0.8005,2.60191 0.1973,-0.15081 0.2728,-0.16272 0.4356,0.0408 0.1118,0.13999 0.2564,0.25733 0.3214,0.25733 0.2494,0.007 0.5568,-0.47474 0.585,-0.91673 0.016,-0.25389 0.1112,-0.52612 0.2113,-0.60513 0.1002,-0.0788 0.3032,-0.36546 0.4507,-0.63717 0.2314,-0.41949 0.2393,-0.48358 0.058,-0.41963 -0.11549,0.041 -0.176,0.0232 -0.1349,-0.0398 0.041,-0.063 0.2731,-0.0781 0.51471,-0.032 0.37159,0.0703 0.50419,0.0242 0.85939,-0.29872 0.2311,-0.2101 0.5599,-0.49394 0.7307,-0.63045 0.1707,-0.13658 0.2623,-0.25061 0.2036,-0.25061 -0.059,-0.002 0.01,-0.0802 0.14211,-0.17517 0.13679,-0.0944 0.2916,-0.14405 0.34419,-0.10907 0.053,0.034 0.2139,0.0285 0.3576,-0.0134 0.211,-0.0609 0.24771,-0.14503 0.1917,-0.43562 -0.059,-0.30721 0.028,-0.46208 0.5891,-1.05009 0.3622,-0.37938 0.6599,-0.741607 0.6615,-0.804607 0,-0.063 0.043,-0.21795 0.092,-0.34417 0.072,-0.18478 0.016,-0.16969 -0.2863,0.077 l -0.3762,0.30645 0.3152,-0.33952 c 0.1734,-0.18614 0.3417,-0.31097 0.3746,-0.27596 0.033,0.035 0.1383,0.002 0.2336,-0.0729 0.2257,-0.1773 0.2371,-0.4254 0.013,-0.28317 -0.092,0.0587 -0.077,0.0236 0.034,-0.078 0.11061,-0.10141 0.2745,-0.33917 0.3649,-0.52813 l 0.16431,-0.34367 -0.6878,-0.0176 c -0.57011,-0.0152 -0.7141,0.0264 -0.8377,0.24342 -0.082,0.14406 -0.1236,0.37092 -0.093,0.50382 0.036,0.15298 -0.01,0.2372 -0.1214,0.2372 -0.2107,-0.006 -0.2346,0.14356 -0.053,0.33435 0.071,0.0753 0.1477,0.31057 0.169,0.52298 0.045,0.453997 -0.308,0.827227 -0.7953,0.840237 -0.1728,0.005 -0.3814,0.0724 -0.4636,0.15039 -0.2358,0.22381 -0.5701,0.15658 -0.8759,-0.17674 -0.2915,-0.31779 -0.8445,-0.54271 -0.8495,-0.3457 0,0.0616 -0.2271,0.21883 -0.5003,0.34932 -0.5806,0.27771 -0.6869,0.47366 -0.6015,1.1152 0.075,0.56536 0.01,0.62764 -1.1157,1.05936 -0.4885,0.18751 -0.9565,0.38981 -1.4252,0.58394 z", +3.86911, 4.42196, +"M -3.86911 -0.871814 1.5374,2.2846 c 0.2008,-0.0776 0.3166,-0.10729 0.602,-0.2408 0.5019,-0.2349 0.9751,-0.3859 1.0516,-0.33592 0.082,0.0531 0.1067,0.2639 0.061,0.50541 -0.056,0.29721 -0.026,0.43696 0.1075,0.49197 0.1027,0.0425 0.1471,0.13787 0.098,0.21188 -0.061,0.093 -0.015,0.0986 0.1499,0.0196 0.3172,-0.15314 1.3733,-0.36761 1.7591,-0.35761 0.1701,0.005 0.4193,0.13343 0.5544,0.28628 0.1977,0.2236 0.2285,0.38401 0.1566,0.82322 -0.071,0.43418 -0.048,0.56343 0.1142,0.63045 0.1121,0.0465 0.1708,0.13486 0.1308,0.19584 -0.04,0.0607 0.016,0.11679 0.124,0.11679 0.1083,0.003 0.1966,0.0477 0.1953,0.0998 0,0.12689 0.7177,0.55224 0.9426,0.56224 0.1639,0.004 0.1918,-0.43416 0.1075,-1.68103 0,-0.057 -0.064,-0.0689 -0.1354,-0.0279 -0.071,0.0416 -0.1333,0.0151 -0.1406,-0.0589 -0.01,-0.0739 -0.025,-0.1915 -0.04,-0.26148 -0.016,-0.07 -0.034,-0.18423 -0.041,-0.25424 -0.01,-0.0699 -0.1177,-0.1328 -0.2459,-0.1328 -0.5387,-0.0141 -0.9,-1.15501 -0.4197,-1.325 0.3033,-0.1074 0.1118,-0.30189 -0.2402,-0.2439 -0.2282,0.0375 -0.3614,-0.0331 -0.5065,-0.26768 -0.2727,-0.44103 -0.3275,-0.86317 -0.1121,-0.8532 0.096,0.002 0.2993,-0.16322 0.4532,-0.36793 0.1542,-0.2046 0.2449,-0.37412 0.2015,-0.37412 -0.044,-0.001 0.084,-0.13883 0.2837,-0.30541 0.069,-0.0573 0.084,-0.0527 0.1308,-0.0884 -0.2037,-0.64275 -0.4022,-1.26486 -0.8005,-2.60191 -0.3301,0.13674 -0.6584,0.26051 -1.0041,0.41082 -0.2463,0.1071 -0.4953,0.2654 -0.5529,0.35139 -0.058,0.0861 -0.1658,0.15298 -0.2403,0.15298 -0.082,-0.002 -0.064,-0.0868 0.043,-0.2124 0.1554,-0.18108 0.1516,-0.19894 -0.029,-0.13693 -0.1142,0.039 -0.26049,0.0158 -0.325,-0.0522 -0.1486,-0.15661 -0.8354,0.43305 -1.0434,0.89556 -0.115,0.25451 -0.1159,0.351 0,0.40101 0.083,0.037 0.048,0.0698 -0.077,0.0698 -0.232,0.004 -0.2745,0.0305 -0.9012,0.55758 -0.19939,0.16759 -0.4385,0.30075 -0.5318,0.30075 -0.093,-0.002 -0.2048,0.0796 -0.24749,0.18293 -0.043,0.10311 -0.20891,0.18034 -0.36951,0.18034 -0.16049,-0.004 -0.3865,0.0966 -0.50179,0.22429 -0.09,0.0994 -0.2028,0.17031 -0.29871,0.22429 z", +5.21206, 3.61562, +"M 5.21167 3.31641 -2.87571,-2.99268 c -0.10415,0.0389 -0.20387,0.0802 -0.36033,0.0775 -0.39269,-0.007 -0.9471,0.19838 -1.34636,0.49674 -0.14729,-0.0882 -0.27752,-0.24828 -0.39406,-0.40426 0.0978,-0.0826 0.13979,-0.19254 0.0398,-0.3869 -0.11869,0.002 -0.19394,-0.0372 -0.23982,-0.0956 0.0252,-0.0258 0.0176,-0.0405 -0.0283,-0.0478 -0.013,-0.0295 -0.0214,-0.0615 -0.0245,-0.096 0.13076,-0.0385 0.17321,-0.0758 0.0928,-0.0834 -0.026,-0.002 -0.0566,-0.0159 -0.0886,-0.0336 0.0543,-0.31133 0.38549,-0.64795 0.53791,-0.19087 0.30229,-0.0939 0.77511,-0.0703 1.09423,-0.25331 0.7238,0.2051 0.28056,-0.77685 0.56901,-1.06934 0.11112,-0.50295 0.0275,-1.03897 0.0306,-1.55424 0.0222,-0.81487 -0.50294,0.28945 -0.82428,0.37028 -0.24188,-0.2226 -0.5545,-0.11178 -0.57697,0.24343 0.14866,0.27116 -0.28257,0.71309 -0.32723,0.29163 -0.41601,-0.68112 -0.72709,0.45649 -1.14325,0.5169 -0.44399,-0.24164 -0.97952,-0.15946 -1.35193,0.20668 -0.44324,-0.0768 -0.82988,0.4394 -1.36296,0.32681 -0.47543,-0.38381 -0.86283,0.53807 -1.33412,0.18179 -0.16273,0.26228 -0.58769,0.64528 -0.49715,1.05906 0.23477,0.14434 0.20747,0.26981 0.0897,0.31932 l 1.3417,2.68325 0.0924,0.16202 c 0.0405,-0.0728 0.12901,-0.19265 0.24502,-0.311 0.1846,-0.18774 0.29739,-0.23065 0.48407,-0.17861 0.13382,0.0374 0.26642,0.10711 0.29441,0.15529 0.088,0.15111 0.30436,0.10201 0.60459,-0.13753 0.15959,-0.12775 0.31636,-0.20397 0.34817,-0.17032 0.0321,0.0336 0.31919,0.0603 0.63861,0.068 0.3195,0.003 0.57545,0.0368 0.56948,0.0735 -0.0321,0.18681 0.0122,0.40741 0.0814,0.40741 0.0428,7.6e-4 0.16479,-0.0719 0.27032,-0.16241 0.17956,-0.15424 0.94963,-0.38544 1.25629,-0.37779 0.0757,0.002 0.16234,0.0919 0.19361,0.19996 0.0314,0.10799 0.0976,0.17291 0.14737,0.14384 0.0497,-0.0285 0.16563,-0.006 0.2577,0.051 0.14438,0.0896 0.13169,0.0996 -0.0917,0.0996 -0.14246,-0.002 -0.32385,0.0583 -0.40307,0.13318 -0.0793,0.0783 -0.1687,0.11036 -0.19921,0.0782 -0.0306,-0.0321 -0.16794,0.011 -0.30543,0.096 -0.13819,0.0859 -0.39911,0.14129 -0.58333,0.12369 -0.34235,-0.032 -0.52482,0.0456 -0.40461,0.1723 0.0375,0.0391 0.10439,0.0155 0.14898,-0.0525 0.0627,-0.0962 0.095,-0.0855 0.14185,0.0466 0.0459,0.13 0.088,0.14508 0.17627,0.0613 0.0635,-0.0608 0.23759,-0.11077 0.38648,-0.10313 0.14882,0.004 0.27185,-0.0325 0.27308,-0.0814 0,-0.0528 0.15555,-0.0724 0.34259,-0.0525 0.18705,0.0199 0.36279,6e-4 0.39085,-0.0423 0.0283,-0.0428 0.11096,-0.0528 0.18415,-0.0229 0.0734,0.0306 0.21779,0.0125 0.32163,-0.0395 0.13466,-0.0674 0.22391,-0.06 0.3114,0.0253 0.096,0.0969 0.10843,0.0961 0.0574,0 -0.0775,-0.14622 0.21305,-0.26384 0.8457,-0.34183 0.36163,-0.0446 0.45791,-0.0239 0.53033,0.1138 0.0688,0.13016 0.18399,0.16163 0.51496,0.13793 0.30955,-0.0222 0.4563,0.0117 0.53698,0.12369 0.092,0.12747 0.14476,0.13361 0.31147,0.0379 0,-0.002 0.008,-7.7e-4 0.01,-0.002 z", +4.53803, 3.30484, +"M 4.22266 2.80997 0.31537,-1.12559 c -0.009,-0.02 -0.007,-0.0204 -0.0166,-0.0433 -0.0891,-0.18672 -0.1596,-0.43114 -0.15657,-0.54337 0.007,-0.26307 -0.3226,-0.50877 -0.59978,-0.44658 -0.15585,0.0349 -0.21211,0.009 -0.20929,-0.0975 0.007,-0.14506 -0.37221,-0.30892 -0.51604,-0.22496 -0.20972,0.12206 -0.56233,-0.52094 -0.54975,-1.00228 0.007,-0.20306 0.69387,-0.85441 0.89802,-0.84718 0.0246,5.8e-4 0.22013,-0.0893 0.33034,-0.13193 l -1.11178,-1.65212 c -0.0195,0.0111 -0.0463,0.0411 -0.0615,0.0459 -0.0992,0.0317 -0.0915,0.0811 0.0376,0.23393 0.25,0.29716 0.14659,0.5097 -0.3124,0.64203 -0.308,0.0886 -0.41177,0.0914 -0.56956,0.006 -0.0485,-0.28545 -0.10942,-0.55919 -0.33331,-0.56055 l -3.8e-4,0.004 c -0.026,-3.8e-4 -0.055,-4e-5 -0.0856,0.0109 -0.0383,0.12372 -0.0535,0.2567 -0.0629,0.39275 -0.44908,-0.0654 -1.05986,-0.0415 -1.14461,0.0878 -0.0434,0.0662 -0.21861,0.14678 -0.38942,0.17789 -0.21261,0.0392 -0.30785,0.10585 -0.30192,0.21152 0,0.0285 -0.007,0.0534 -0.0145,0.0759 -0.0275,0.0216 -0.055,0.0453 -0.0822,0.0702 -0.007,0.001 -0.013,0.005 -0.0195,0.005 -0.0333,-7.2e-4 -0.12923,0.0237 -0.25528,0.0624 -0.08,-0.4784 -0.33186,-1.13708 -0.5564,-0.91446 0,0.16306 -0.0847,0.21734 -0.17609,0.21377 -3.8e-4,-3e-5 0,3.8e-4 0,3.8e-4 0.0499,0.24365 0.10392,0.55738 0.16712,0.8031 -0.14354,0.0227 -0.30849,0.0898 -0.40511,0.14461 -0.33424,0.33619 -0.74507,0.32102 -1.16899,0.1805 -0.26236,-0.0809 -0.35492,0.0333 -0.33894,0.29672 -0.15324,0.19325 -0.41676,0.31324 -0.60167,0.50786 -0.007,-0.0163 -0.013,-0.0322 -0.0181,-0.0486 0,0.0296 -0.007,0.0486 -0.008,0.0785 0.008,-0.01 0.0166,-0.0192 0.0253,-0.0284 0.0398,0.11691 0.0952,0.23149 0.15439,0.34417 -0.11751,0.0925 -0.227,0.23553 -0.25939,0.35127 -0.0586,0.21246 -0.18947,0.31968 -0.36325,0.38455 l 2.71944,2.83005 c 0.10689,-0.0587 0.32051,-0.1065 0.48394,-0.0994 0.16654,0.004 0.35001,-0.037 0.40736,-0.0912 0.0571,-0.0545 0.38558,-0.0909 0.72945,-0.0814 0.45349,0.0129 0.67232,-0.0226 0.79822,-0.12894 0.16481,-0.13918 0.99615,-0.19618 2.20563,-0.15135 0.19706,0.007 0.40331,-0.0138 0.45849,-0.0463 0.17471,-0.10371 0.36931,-0.0972 0.43389,0.0138 0.0217,0.0374 0.19258,0.0665 0.52581,0.0904 z", +1.92692, 5.24979, +"M -1.16568 5.24449 1.57665,-0.6191 c -0.0474,-0.4867 0.0954,-1.5337 0.25114,-1.6836 0.17039,-0.164 0.21291,-0.1563 0.37621,0.073 0.1012,0.1417 0.23035,0.3447 0.28834,0.4506 0.0858,0.1573 0.13611,0.1636 0.2744,0.034 0.16722,-0.1573 0.0631,-0.3063 -0.31419,-0.4501 -0.062,-0.024 0.01,-0.2644 0.15968,-0.5354 0.14994,-0.271 0.33213,-0.7281 0.40412,-1.0154 0.12608,-0.5015 0.1184,-0.5257 -0.1969,-0.5974 -0.23368,-0.053 -0.38971,-0.2226 -0.53949,-0.5876 -0.27201,-0.6626 -0.33335,-2.3657 -0.093,-2.5786 0.1421,-0.1258 0.13903,-0.1774 -0.0181,-0.2987 -0.2079,-0.1604 -0.2341,-1.2411 -0.045,-1.8552 0.10281,-0.3339 0.0903,-0.3456 -0.38601,-0.3581 -0.27072,-0.01 -0.61438,-0.1034 -0.76379,-0.214 -0.23149,-0.1708 -1.32257,-0.6546 -1.34407,0.41 -0.0512,2.5087 -0.0881,2.9436 -0.26511,3.1115 -0.141,0.1334 -0.16333,0.2237 -0.0692,0.2847 0.089,0.058 0.11213,0.5288 0.0651,1.3498 -0.0634,1.1134 -0.0451,1.2803 0.15967,1.4319 0.1278,0.094 0.22429,0.3077 0.22429,0.4734 -0.005,0.1661 0.0515,0.3404 0.12455,0.3886 0.073,0.048 0.0983,0.1683 0.0573,0.2682 -0.042,0.1012 -0.0193,0.1489 0.0517,0.1075 0.22709,-0.1322 0.12486,0.2738 -0.14264,0.5664 -0.28461,0.3116 -0.3362,0.4982 -0.13951,0.5033 0.0694,0 0.12142,0.091 0.12142,0.1964 -0.003,0.1065 0.0736,0.2267 0.17055,0.2666 0.27159,0.1124 0.32136,0.5471 0.078,0.6806 -0.118,0.064 -0.15684,0.1214 -0.0868,0.125 0.01,0 0.0111,0.067 0.0207,0.077 z", +3.13742, 6.38177, +"M 2.09259 -6.37924 c -0.0333,0.0351 -0.0639,0.10651 -0.0665,0.15881 0,0.0523 -0.18168,0.28228 -0.39724,0.51128 -0.21557,0.22899 -0.38735,0.49799 -0.38192,0.5977 0.009,0.0998 -0.12845,0.28291 -0.29726,0.40676 -0.16872,0.12384 -0.25759,0.22444 -0.19726,0.22261 0.0604,-0.002 -0.0906,0.167 -0.33569,0.37418 -0.24507,0.20716 -0.43708,0.42009 -0.42666,0.47372 0.0105,0.0536 -0.0482,0.12244 -0.12993,0.15248 -0.0977,0.0359 -0.11558,-0.005 -0.0508,-0.11945 0.0753,-0.13452 0.0578,-0.14289 -0.077,-0.0371 -0.42105,0.33004 -1.55709,-0.0183 -1.22158,-0.37463 0.0735,-0.078 0.0797,-0.24976 0.0166,-0.41989 -0.0587,-0.15829 -0.0988,-0.34453 -0.0883,-0.41354 0.0105,-0.069 -0.1864,-0.18257 -0.43752,-0.25293 -0.41046,-0.11495 -0.47884,-0.10036 -0.67549,0.14524 -0.16671,0.20808 -0.20217,0.22125 -0.14981,0.0547 0.0473,-0.14918 0.009,-0.21718 -0.13028,-0.2131 -0.15393,0.004 -0.19438,0.1355 -0.18098,0.57824 0.0149,0.48242 0.0447,0.54807 0.19,0.41943 0.13588,-0.11986 0.24384,-0.10913 0.50537,0.0511 0.28184,0.17272 0.32921,0.27874 0.3082,0.69317 l -0.0245,0.48911 0.74029,0.20541 c 0.40731,0.11309 0.788,0.17473 0.84561,0.13664 0.0578,-0.0382 0.1837,-0.008 0.2801,0.0674 0.0963,0.0751 0.31283,0.14691 0.48138,0.15972 0.35154,0.0267 0.74431,0.3456 0.61989,0.50313 -0.0464,0.0583 0.0114,0.0287 0.12757,-0.066 0.19438,-0.1583 0.21329,-0.12545 0.2294,0.40676 0.0131,0.42739 0.0569,0.5552 0.16925,0.4873 0.11986,-0.0727 0.12074,-0.0569 0.009,0.0756 -0.15786,0.18104 -1.51069,0.30581 -1.51577,0.13981 0,-0.14178 -1.40641,-0.0172 -1.51069,0.13438 -0.0517,0.0751 -0.0904,0.0544 -0.0946,-0.0516 -0.009,-0.12779 -0.0569,-0.10875 -0.18194,0.0674 -0.12678,0.17864 -0.17695,0.19682 -0.18369,0.0665 -0.009,-0.13638 -0.0429,-0.14397 -0.14885,-0.0313 -0.0867,0.0919 -0.12888,0.63215 -0.11172,1.42118 0.0149,0.70002 -0.0201,1.3785 -0.0771,1.50759 -0.0948,0.21303 -0.0569,0.22862 0.40722,0.17012 0.28115,-0.0354 0.527,-0.0233 0.54609,0.0267 0.0552,0.14325 2.4345,0.49083 2.60208,0.38007 0.0832,-0.0547 0.19542,-0.0735 0.25067,-0.0416 0.14753,0.0851 0.14473,0.78506 0,0.78953 -0.0709,0.003 -0.0902,0.13157 -0.0429,0.29772 0.0718,0.25436 0.0228,0.31646 -0.36283,0.45699 -0.3814,0.13879 -0.4806,0.13359 -0.68005,-0.0362 -0.12845,-0.10932 -0.43358,-0.20333 -0.67865,-0.20858 -0.24507,-0.005 -0.44758,-0.0599 -0.44977,-0.12127 0,-0.0615 -0.11129,0.02 -0.24253,0.18099 -0.40469,0.49616 -0.24227,0.75036 0.46562,0.72891 0.22712,-0.007 0.30163,0.0579 0.30942,0.26921 0.009,0.22501 0.0315,0.24213 0.12442,0.0891 0.0974,-0.16124 0.1161,-0.15665 0.1231,0.0299 0.009,0.17543 0.0753,0.20061 0.34611,0.12804 0.18571,-0.0497 0.38919,-0.14057 0.45205,-0.20179 0.063,-0.0612 0.2062,-0.11426 0.31801,-0.11764 0.2244,-0.007 0.65264,0.38173 0.61088,0.55426 -0.014,0.0601 0.0201,0.23309 0.0762,0.38459 0.21836,0.58332 0.33254,0.22078 0.29725,-0.94474 -0.0263,-0.87541 0.0123,-1.28197 0.13799,-1.45917 0.0959,-0.1351 0.17196,-0.37168 0.16968,-0.52576 0,-0.15407 0.0552,-0.3837 0.12941,-0.51037 0.16216,-0.27806 0.0175,-1.04903 -0.2434,-1.29449 -0.15253,-0.14353 -0.15612,-0.19583 -0.021,-0.31536 0.0892,-0.0787 0.25321,-0.1112 0.36424,-0.0724 0.2413,0.0843 0.44854,-0.40882 0.41895,-0.99812 -0.0105,-0.21248 0.0245,-0.69433 0.0779,-1.07052 0.0534,-0.37619 0.10261,-1.28473 0.10909,-2.01932 h -0.009 c 0,-0.31321 0,-0.55466 -4.3e-4,-0.7452 -0.0131,-0.57155 -0.0744,-0.68608 -0.28106,-0.91216 -0.24901,-0.27261 -0.30434,-0.29013 -0.36511,-0.11627 -0.0394,0.1127 -0.13728,0.18217 -0.21757,0.15428 -0.0975,-0.0339 -0.14036,-0.32845 -0.12897,-0.88591 0.01,-0.45938 -0.0105,-0.80654 -0.0438,-0.77144 z", +2.66052, 3.77103, +"M -0.39949 -3.77089 c -0.24655,0.002 -0.48424,0.0415 -0.7069,0.14289 -0.091,0 -0.14007,0.16428 -0.23247,0.15604 -0.56186,0.39932 -1.98716,1.04365 -0.95829,1.755351 0.37012,0.004 1.89317,-0.681921 1.58174,0.0144 -0.92118,0.19316 -0.78062,1.25644 -0.57652,1.87004 -0.5507,0.73969 -0.54645,2.07518 0.50073,2.40836 0.72023,0.13329 1.71345,0.023 1.86698,1.06161 0.14079,0.10466 0.256,0.14178 0.34647,0.13161 0.39231,-0.0442 0.32501,-0.98344 -0.0873,-1.24084 -0.12491,-0.92548 1.37777,-1.34914 1.32417,-2.16898 -0.0121,-0.11715 -0.0461,-0.24263 -0.12721,-0.37852 -0.83872,-0.59956 -0.43161,-1.77015 -0.097,-2.539971 0.45562,-0.35901 -0.33799,-0.65515 -0.53141,-0.9275 -0.74291,0.0304 -1.56344,-0.29219 -2.30307,-0.2845 z", +3.00843, 4.63, +"M -3.00308 -3.2356 c 0.0216,0.023 0.10979,0.055 0.26872,0.1013 0.56889,0.1649 0.8117,0.2144 1.07177,0.2196 0.22155,0 0.65876,0.8395 0.44286,0.846 -0.0655,0 -0.0523,0.2079 0.0295,0.4583 0.0816,0.2503 0.16335,0.662 0.1819,0.9142 0.0185,0.2523 0.0943,0.4564 0.16795,0.4542 0.0735,0 0.11453,0.2196 0.091,0.4925 -0.0236,0.273 5.3e-4,0.4946 0.0532,0.493 0.0529,0 0.10741,0.2474 0.12093,0.5529 0.0301,0.6823 0.35271,2.2028 0.57102,2.6913 0.0887,0.1985 0.29547,0.4232 0.4594,0.4992 0.4735,0.2194 0.77786,0.184 0.76378,-0.089 -0.0797,-1.554 0.36543,-3.8118 0.78032,-3.9574 0.13544,-0.047 0.34304,-0.3075 0.46147,-0.5778 0.11837,-0.2703 0.26596,-0.4621 0.32814,-0.4263 0.0622,0.036 0.15067,-0.042 0.19637,-0.1726 0.10948,-0.3133 -0.1781,-0.4655 -0.66611,-0.3525 -0.21603,0.05 -0.39776,0.035 -0.40411,-0.033 -0.0656,-0.6804 -0.18153,-1.2185 -0.31109,-1.4439 -0.19053,-0.3315 0.13535,-0.7608 0.48473,-0.6387 0.17021,0.059 0.20863,0 0.16433,-0.2589 -0.0455,-0.2639 -0.2012,-0.3747 -0.72399,-0.5147 -0.42937,-0.115 -0.69455,-0.2732 -0.74517,-0.4454 -0.0417,-0.1415 -0.0928,-0.2038 -0.2341,-0.2067 h -5.3e-4 c -0.0848,0 -0.20163,0.018 -0.36845,0.054 -0.28858,0.063 -0.6874,0.2067 -0.88573,0.3179 -0.1983,0.1112 -0.45557,0.2061 -0.57206,0.2113 -0.18831,0.01 -0.18809,0.024 0.004,0.1401 0.16267,0.098 0.094,0.1364 -0.27802,0.1524 -0.27189,0.012 -0.61486,0.1186 -0.76223,0.2372 -0.14743,0.1187 -0.39883,0.2252 -0.55862,0.2367 -0.10787,0.01 -0.15286,0.021 -0.13126,0.044 z", +4.45538, 5.00079, +"M 3.67326 3.58666 c 0.27079,-0.66346 0.32332,-0.78121 0.57421,-1.39679 -0.20034,0.0973 -0.44394,0.2056 -0.86662,0.24908 l -1.01753,0.10469 -0.32442,-0.67827 c -0.17835,-0.37327 -0.32777,-0.8685 -0.33148,-1.10044 -0.0123,-0.7472 0.88739,-1.58524 1.72954,-1.61074 0.5103,-0.0154 0.92804,-0.83692 1.00146,-1.96776 0.0482,-0.75168 0.021,-0.81363 -0.45222,-0.97588 -0.57495,-0.19732 -0.73908,-0.88336 -0.22222,-0.92927 0.16771,-0.0148 0.0408,-0.1032 -0.2829,-0.19608 -0.44802,-0.12851 -0.61919,-0.11519 -0.71732,0.0549 -0.0705,0.12285 -0.198,0.23615 -0.2829,0.25164 -0.0853,0.0156 -0.12804,0.13016 -0.0952,0.25547 0.0321,0.12524 -0.17735,0.31878 -0.46742,0.42983 -0.29007,0.11098 -0.52514,0.27295 -0.52254,0.35957 0,0.0866 -0.11865,0.16151 -0.26881,0.16606 -0.19491,0.006 -0.23866,0.10876 -0.1514,0.35702 0.0667,0.19175 0.0408,0.62287 -0.0593,0.95864 -0.17315,0.58372 -0.19898,0.59981 -0.58372,0.36405 -0.22135,-0.13498 -0.45358,-0.19271 -0.51599,-0.12646 -0.0618,0.0664 -0.11741,-0.01 -0.12235,-0.16988 -0.0124,-0.36216 -0.41947,-0.36654 -0.69941,-0.007 -0.16709,0.21426 -0.16598,0.26711 0.0124,0.26185 0.17006,-0.005 0.17254,0.0494 0.0136,0.25292 -0.11123,0.14297 -0.14918,0.41073 -0.0853,0.59461 0.0643,0.1839 0.0297,0.54243 -0.0766,0.79706 -0.208,0.49594 -0.48287,0.62505 -0.49485,0.23248 0,-0.14554 -0.19528,-0.23117 -0.48732,-0.22034 -1.11751,0.0426 -1.1384,0.0298 -1.03656,-0.62143 0.0828,-0.52592 0.0321,-0.64517 -0.37881,-0.8967 -0.45308,-0.27763 -0.48287,-0.27552 -0.70373,0.0466 -0.5061,0.73788 -0.0284,1.65526 0.58113,1.11704 0.16054,-0.14168 0.25509,-0.15557 0.25868,-0.0377 0,0.10208 -0.0692,0.23597 -0.16154,0.29699 -0.10505,0.0697 -0.0853,0.23703 0.0569,0.45089 0.18144,0.27371 0.18045,0.36979 -0.0124,0.49434 -0.28512,0.18973 -0.063,0.9574 0.23248,0.80537 0.11,-0.0566 0.33641,-0.15535 0.50264,-0.21971 0.16636,-0.0644 0.29909,-0.22545 0.29514,-0.35829 -0.0124,-0.28263 0.95709,-0.35933 1.62287,-0.12901 0.43418,0.15018 0.81187,1.06462 0.49239,1.19176 -0.0865,0.0347 -0.15412,0.20558 -0.1488,0.37938 0,0.17383 -0.10011,0.36244 -0.23569,0.41897 -0.55653,0.23312 -0.27128,1.40722 0.48027,1.97542 0.39685,0.30003 0.52477,0.25768 0.6936,-0.23056 0.12915,-0.37324 0.23049,-0.42519 0.68407,-0.34872 0.40588,0.0685 0.53095,0.0271 0.52502,-0.175 -0.0124,-0.32797 0.45877,-0.54947 0.56394,-0.26633 0.0569,0.15333 0.14905,0.14191 0.36015,-0.0434 0.19972,-0.17521 0.52736,-0.21946 1.12468,-0.16094 z", +4.04617, 5.42426, +"M -2.94195 4.57672 5.547,0.84754 c -0.0131,-0.11956 -0.002,-0.25067 -0.022,-0.34369 l -0.11879,-0.55384 0.67428,-0.21593 c 0.37071,-0.11919 0.75479,-0.27013 0.85339,-0.33717 0.28775,-0.19498 -0.63141,-0.34362 -1.29568,-0.20935 -0.56865,0.11499 -1.08906,-0.007 -1.15769,-0.27139 -0.0188,-0.0737 -0.18848,-0.31709 -0.37655,-0.54178 -0.18811,-0.22467 -0.3416,-0.53824 -0.3413,-0.69665 9.2e-4,-0.50293 -0.54357,-1.30997 -1.04569,-1.54977 -0.35267,-0.16848 -0.52754,-0.36992 -0.6645,-0.76621 -0.10221,-0.29559 -0.14563,-0.52528 -0.0964,-0.51011 0.17354,0.0539 -0.66737,-2.76228 -0.96072,-3.21725 -0.16345,-0.25346 -0.27119,-0.54462 -0.23941,-0.64722 0.036,-0.1166 0.008,-0.13435 -0.0749,-0.0476 -0.11577,0.12068 -0.2106,-0.0208 -0.25406,-0.37838 -0.006,-0.0499 -0.10171,-0.11849 -0.21226,-0.15262 -0.027,-0.008 -0.0774,-0.16167 -0.11391,-0.2073 -0.53067,-0.0874 -0.63302,-0.10779 -1.20503,-0.20227 10e-4,0.01 0.003,0.01 0.004,0.0175 0.0527,0.43032 0.14887,0.71581 0.25112,0.74742 0.10484,0.0326 0.0998,0.202 -0.0141,0.46214 -0.1944,0.44418 -0.0765,0.73425 0.34048,0.83519 0.23019,0.0556 0.28611,0.20689 0.44455,1.20419 0.20536,1.29285 0.19184,1.41099 -0.17315,1.50581 -0.32706,0.0846 -0.58936,0.79809 -0.36878,1.00225 0.20564,0.19033 0.36751,0.75346 0.20212,0.70237 -0.20848,-0.0645 -0.0864,0.17277 0.22532,0.43844 0.1607,0.13697 0.2717,0.3158 0.24664,0.39698 -0.0253,0.0806 0.0317,0.17074 0.12496,0.19997 0.11335,0.0347 0.11536,0.1239 0.004,0.26449 -0.11539,0.14655 -0.10247,0.49598 0.0428,1.1318 l 0.21014,0.91939 z", +5.49752, 3.12991, +"M 1.37015 -3.12969 v 0.001 c -0.1107,0 -0.2247,0.002 -0.3421,0.005 -0.273,0.007 -0.4227,0.0758 -0.4227,0.19482 0,0.26786 -0.2484,0.3097 -0.772,0.12971 -0.3784,-0.1301 -0.526,-0.12457 -0.8269,0.031 -0.5169,0.26723 -1.5029,0.35961 -2.096,0.19586 -0.4659,-0.12864 -0.5236,-0.11468 -0.7643,0.1912 -0.2181,0.27728 -0.3304,0.31769 -0.696,0.24908 -0.3971,-0.0745 -0.4341,-0.0551 -0.4114,0.21911 0.014,0.1656 -0.1182,0.49771 -0.2935,0.73742 -0.3107,0.42518 -0.3126,0.43928 -0.066,0.58239 0.1392,0.0807 0.5196,0.38777 0.8454,0.68265 0.3259,0.29485 0.7242,0.57704 0.8852,0.62684 0.1609,0.0498 0.2925,0.14516 0.2925,0.21187 0,0.15407 1.2613,0.16018 1.3565,0.006 0.039,-0.0632 0.3437,-0.24332 0.6769,-0.39997 0.425,-0.19982 0.6332,-0.24126 0.6967,-0.1385 0.05,0.0805 0.1662,0.12856 0.2589,0.10697 0.093,-0.0217 0.2127,0.11828 0.2671,0.31058 0.087,0.30723 0.054,0.36567 -0.2775,0.48111 -0.4545,0.1584 -0.4945,0.26092 -0.07,0.17983 0.1982,-0.0379 0.3343,0.0134 0.3845,0.14418 0.064,0.16602 0,0.18801 -0.3395,0.1235 l -0.4165,-0.0786 0.2599,0.26149 c 0.1431,0.14385 0.3029,0.23712 0.3551,0.20722 0.052,-0.0299 0.2166,0.0106 0.3658,0.0904 0.2162,0.11576 0.2544,0.22258 0.1876,0.52659 l -0.084,0.38085 h 0.8407 c 0.752,0 0.8633,-0.0341 1.0527,-0.32297 0.1164,-0.17773 0.372,-0.36144 0.5679,-0.40825 0.4395,-0.10496 0.7018,-0.3012 0.6072,-0.45424 -0.039,-0.0635 -0.01,-0.11523 0.066,-0.11523 0.076,7e-5 0.1379,0.0441 0.1379,0.0977 0,0.23852 1.0762,0.16168 1.5126,-0.10801 0.2339,-0.14457 0.366,-0.29703 0.386,-0.40307 v 0 c 0.02,-0.10602 -0.072,-0.16583 -0.28679,-0.12403 -0.13541,0.0264 -0.67191,0.0638 -1.19271,0.0827 -0.9133,0.0331 -0.9439,0.0241 -0.8619,-0.24339 0.047,-0.15257 0.1949,-0.38208 0.3292,-0.51006 0.297,-0.28318 0.3099,-0.52576 0.041,-0.74878 -0.462,-0.38339 -0.6379,-1.28709 -0.3137,-1.61127 0.069,-0.0691 0.1261,-0.22671 0.1261,-0.35038 0,-0.12366 0.089,-0.31478 0.1984,-0.42426 0.3806,-0.38055 -0.5051,-0.62598 -2.1652,-0.61598 z", +3.63043, 5.15692, +"M -3.62726 -3.36795 c -0.0468,0.32054 0.43759,0.66685 0.52881,0.98692 0.28647,0.32487 -0.28269,0.47336 -0.316,0.71696 0.10063,0.38021 0.34235,0.83542 0.13607,1.20634 -0.51118,0.31783 0.37465,0.71304 0.29987,1.10283 0.36141,0.35332 -0.44509,0.42029 -0.41731,0.69873 -0.13664,0.46798 -0.26085,0.93998 -0.21981,1.41789 0.0582,0.12446 -0.11212,0.37614 0.0969,0.41685 0.88284,-0.0585 0.30904,0.58298 0.69294,0.85291 -0.34214,0.33774 0.0244,0.78826 0.73335,0.72836 0.43959,0.29919 1.07278,0.24331 1.63813,0.35228 l 0.0736,0.0448 c 0.38778,-0.10404 0.0245,-0.72353 0.20718,-1.01432 0.51323,-0.34366 -0.20283,-0.45485 -0.61814,-0.53103 0.0274,-0.33275 0.26259,-0.74304 0.21784,-1.13747 0.23923,-0.2064 0.75099,-0.0848 1.11881,-0.12006 l -0.0149,0.53094 c 0.18821,0.46487 0.40821,0.92446 0.12828,1.42682 -0.43537,0.34603 -0.20149,0.86785 0.62785,0.73084 0.32264,-0.28321 0.35317,-0.75168 -0.0804,-1.04175 0.56867,-0.53073 1.11997,0.32514 1.3861,0.60116 -0.0255,0.3657 1.32511,0.75896 0.98294,0.21235 -0.28172,-0.41656 -0.56593,-0.8647 -1.16271,-1.16373 0.0169,-0.28998 -0.30591,-0.44892 -0.51256,-0.68143 -0.27438,-0.51775 0.92277,-0.55614 1.32949,-0.29182 0.37686,0.30057 0.6089,-0.11077 0.11594,-0.20101 0.11778,-0.45323 -0.55455,-0.70288 -0.75334,-1.04554 -0.24517,-0.39883 0.35093,-0.72371 0.47053,-1.00707 -0.74221,-0.0978 -0.87992,-0.65893 -1.14431,-1.03193 -0.0424,0.27079 -0.61393,0.63737 -0.40714,0.94708 -0.39146,0.39072 -0.2133,0.90337 -0.19158,1.3428 -0.38873,0.18762 -0.1672,0.38452 -0.0853,0.62107 -0.61435,0.26479 -0.31061,-0.34619 -0.56846,-0.50332 -0.0127,-0.48721 -0.72194,-0.78357 -0.99598,-1.2129 0.12473,-0.33506 -0.33466,-0.51389 -0.36161,-0.82807 0.1997,-0.42706 0.3237,-0.84131 0.26038,-1.28998 0.68927,-0.44553 -0.67313,-0.6391 -0.21405,-1.09468 0.22086,-0.37425 0.42402,-0.90652 -0.18371,-1.18138 -0.43025,-0.35212 -0.0683,-0.76225 -0.19938,-1.15243 -0.35117,-0.0477 -0.85403,-0.20224 -1.27169,-0.19685 -0.25089,0.003 -0.47094,0.0655 -0.60781,0.24375 -0.36841,0.38217 -0.14434,0.8521 -0.46111,1.23525 -0.16785,0.0992 -0.24225,0.20322 -0.2578,0.31006 z", +2.88035, 4.06242, +"M 1.25865 -4.0624 c -0.26985,0.16593 -0.42018,0.52485 -0.45144,0.83652 -0.0532,0.14065 -0.26733,-0.18208 -0.24919,0.11733 -0.28494,0.18546 0.14687,0.48052 0.0223,0.77037 0.036,0.36289 0.3756,0.58792 0.53905,0.88077 -0.13707,-0.006 -0.45978,0.15371 -0.4101,-0.0997 -0.0108,-0.31743 -0.1796,-0.59765 -0.41569,-0.80388 -0.20831,-0.2224 -0.50043,-0.35247 -0.56789,-0.66266 -0.28582,-0.18946 -0.72788,-0.02 -0.85216,-0.40249 -0.34073,-0.28483 -0.60874,0.19553 -0.79607,0.42709 -0.15294,0.28679 -0.28387,0.62305 -0.36898,0.94692 0.0288,0.41155 0.59654,0.31526 0.78223,0.64991 0.21197,0.12691 0.79092,0.32794 0.42931,0.61615 -0.22783,0.17371 -0.51269,0.28054 -0.73081,0.21635 -0.3129,0.0885 -0.69087,0.0242 -0.91787,0.32227 -0.0986,0.0888 -0.18264,0.18327 -0.14058,0.32426 0.0153,0.33863 0,0.68711 0.12159,1.00883 -0.17136,0.30467 0.34515,0.28606 0.24024,0.61504 0.0458,0.34026 0.22841,0.60042 0.53816,0.73395 0.11715,0.34628 0.48027,0.43439 0.68656,0.10861 0.22092,-0.24425 0.13892,-0.64131 0.4966,-0.81417 0.22425,-0.28822 0.71346,-0.14432 0.87741,-0.50084 0.18991,-0.18243 0.5743,-0.40112 0.46598,0.0664 0.0489,0.38641 -0.2614,0.6663 -0.34171,1.01509 0.0213,0.33786 0.19593,0.66602 0.38507,0.93374 0.16136,0.28358 0.42527,0.5179 0.5243,0.8088 0.11306,0.0261 0.24555,0.005 0.31311,-0.099 0.17679,-0.18075 0.42474,-0.24465 0.67359,-0.22126 0.24753,-0.26223 0.54092,-0.49076 0.73684,-0.79584 0.0703,-0.37759 -0.42896,-0.49317 -0.57771,-0.73752 -0.0631,-0.34107 -0.18323,-0.61203 -0.31803,-0.91518 0.0979,-0.36538 -0.30776,-0.49131 -0.24159,-0.85374 -0.0624,-0.37632 -0.49732,-0.49981 -0.55581,-0.87137 -0.0398,-0.29907 -0.0805,-0.80571 0.373,-0.62533 0.25606,0.0228 0.19023,-0.34809 0.48675,-0.27109 0.24961,-0.0512 0.49133,-0.32109 0.67696,-0.0456 0.3421,-0.12553 0.19087,-0.82493 -0.23511,-0.63717 -0.36514,-0.0659 0.34354,-0.40056 0.18392,-0.66355 -0.01,-0.40846 -0.52884,-0.49985 -0.47624,-0.91853 -0.12166,-0.36074 -0.58136,-0.42643 -0.90604,-0.4595 z", +3.57088, 4.77385, +"M -1.37842 -4.77385 c -0.32004,0.38562 -0.90978,0.44109 -1.06475,0.98212 -0.33196,0.58155 -0.34433,1.24636 -0.0431,1.86247 0.63654,0.61117 -0.46462,0.56209 -0.81103,0.5768 -0.71739,0.43468 0.23093,1.04171 -0.0105,1.64117 0.14314,0.6155 0.45858,1.33418 1.13619,1.48914 0.64762,-0.0825 1.4885,0.94379 0.87455,1.42229 -0.20223,0.48484 -0.89031,0.9814 -0.1661,1.42189 0.23434,0.25918 0.59181,0.15737 0.78734,-0.0868 0.49244,-0.4069 1.22385,-0.34712 1.79188,-0.53942 0.40959,-0.0676 0.43978,-0.38024 0.52823,-0.71925 0.4924,0.34324 1.17879,0.64169 1.71133,0.1823 0.40615,-0.60741 0.1742,-1.49048 -0.17359,-2.078 -0.01,-0.55871 -0.45537,-1.1785 -1.0577,-0.79483 -0.47109,0.82821 -1.0013,-0.36652 -0.57886,-0.79192 0.0974,-0.61938 -0.40188,-1.41863 -1.12248,-1.2263 -0.615,0.15415 -0.83256,-0.44564 -0.6852,-0.84049 -0.60947,-0.41783 0.57646,-1.01268 -0.19227,-1.48999 -0.1719,-0.39383 -0.74183,-0.82494 -0.92398,-1.01118 z", +3.57088, 3.49495, +"M -2.51747 -3.49406 c -0.44274,0.0168 -0.80575,0.24519 -0.65317,0.74056 0.77847,0.68723 0.006,1.14574 -0.40024,1.60094 0.45273,0.85169 -0.057,2.25152 1.13658,2.51484 0.58996,0.19997 -0.83942,0.82749 0.19445,1.21761 0,0.4092 0.84626,1.20435 1.14506,0.8068 0.96341,-0.49284 2.10194,-0.48523 3.16453,-0.62008 1.00752,-0.34932 1.59197,-1.40776 1.48958,-2.45213 -0.18766,-1.01556 -0.54571,-2.14247 -1.52062,-2.68748 -0.56572,-0.6585 -2.34805,-1.70658 -2.30696,-0.17264 1.19275,1.31973 -1.71147,1.34573 -1.07034,-0.0774 0.0918,-0.5639 -0.60964,-0.89245 -1.17887,-0.87092 z", +2.19827, 3.72855, +"M 1.79578 -3.16055 c 0.29134,0.9127 -0.8513,1.88012 -1.60506,1.23145 -0.61184,0.26144 -1.4819,1.48613 -0.34626,1.65621 0.20292,0.5854 -0.87432,1.11229 -0.86456,1.82626 -0.34284,0.66001 -1.30935,-0.58756 -1.16324,0.49712 0.015,0.16218 -0.0225,0.37679 0.0868,0.50798 0.35875,0.66438 1.22487,1.01087 1.95492,0.77514 0.59338,-0.43345 1.13653,0.4314 1.81488,0.39374 0.23014,-0.39462 0.28884,-0.97791 0.31677,-1.46193 0.0963,-1.02031 -0.0218,-2.07603 0.20824,-3.07268 -0.0106,-0.662 -0.26526,-1.55587 -0.0532,-2.3394 0.10891,-0.75342 -0.47035,-0.79317 -0.34929,-0.0139 z", +3.57085, 3.77374, +"M -1.00965 -3.77187 c -0.50773,-0.0455 -0.59851,0.75754 -1.18315,0.62357 -0.2759,0.006 -0.43238,-0.20174 -0.54732,-0.35854 -0.42974,-0.101 -0.98298,0.0786 -0.79185,0.62433 0.0918,0.27667 0.63885,0.21922 0.50031,0.65458 -0.008,0.28654 0.415,0.4124 0.12652,0.69333 -0.0968,0.21542 0.3362,0.39395 0.19527,0.57658 -0.37534,0.22876 0.12223,0.32999 0.18878,0.60483 0.26355,0.34866 -0.14544,0.74459 -0.0203,1.14239 0.22773,0.37599 0.42716,0.78503 0.71585,1.1349 0.20089,0.31178 0.59558,0.80482 0.97387,0.45305 0.53952,-0.18877 -0.0114,0.38539 -0.26603,0.32129 -0.005,0.24853 0.24187,0.42998 0.13101,0.70434 0.12782,0.27427 0.66178,0.50327 0.90612,0.28229 -0.19362,-0.28539 -0.38278,-0.53996 -0.23003,-0.90337 0.0118,-0.18256 0.14722,-0.40585 -0.0853,-0.48031 0.11501,-0.13614 0.31125,-0.45293 0.29528,-0.0705 0.13823,0.35583 0.51741,0.5319 0.87087,0.59257 0.22815,-0.32159 0.48104,-0.66059 0.8381,-0.85811 0.36776,-0.32583 0.73175,-0.66601 1.02963,-1.05813 0.31551,-0.18006 0.54504,-0.50482 0.93287,-0.49481 -0.0706,-0.38435 -0.81564,-0.26725 -0.51007,-0.7296 -0.004,-0.20098 0.28139,-0.50601 0.11752,-0.63332 -0.38126,0.008 -0.77281,0.0549 -1.14464,-0.0458 0.22089,-0.13301 0.47335,-0.47944 0.54081,-0.80185 0.14915,-0.29117 0.0598,-0.94753 -0.38205,-0.76085 -0.38265,-0.0285 -0.7182,-0.62895 -1.06013,-0.13102 -0.15706,0.19112 -0.33864,-0.13478 -0.29078,-0.28203 0.22718,-0.13574 0.44603,-0.63936 0.0285,-0.63858 -0.11854,0.35338 -0.58257,0.49089 -0.85134,0.14477 -0.29235,-0.20085 -0.66289,-0.31351 -1.02838,-0.30604 z", +3.57089, 5.62272, +"M -1.42379 -5.622 c -0.43389,0.0339 0.14764,1.23134 -0.27034,1.52136 -0.32134,0.64017 -0.3091,1.54516 -1.19918,1.59638 -0.5274,0.17075 -1.08366,0.90166 -0.25472,1.09547 0.18208,0.59783 0.78062,1.0544 0.80096,1.66886 -0.42354,0.53578 -1.0075,1.1037 -0.51402,1.81991 -0.22824,0.69684 -0.48371,1.55859 -0.0453,2.29815 0.0422,0.68578 0.8206,0.79979 1.16895,1.23743 0.21794,0.0348 0.4294,-0.063 0.61318,-0.16915 0.77997,-0.43845 0.0476,-1.6467 0.62273,-2.13958 0.98799,-0.075 0.80763,-1.11489 1.07434,-1.82644 0.15326,-0.73964 1.0527,-0.44914 1.60996,-0.48531 0.28374,0.01 0.59117,0.0806 0.75616,-0.21396 0.52814,-0.37956 0.96391,-1.07548 0.28243,-1.5707 -0.29818,-0.54672 -1.30735,-0.15148 -0.43951,0.146 0.46422,0.42259 -0.74074,0.6148 -1.00937,0.33025 -0.36553,0.13004 -0.87668,0.44845 -0.74154,-0.26028 0.0857,-0.69248 0.10805,-1.45821 -0.47727,-1.77811 -0.56593,-0.56035 0.55259,-0.94649 0.6444,-1.55057 0.2319,-0.78726 -0.94437,-0.99379 -1.45289,-1.28073 -0.40803,0.36815 -0.78127,0.16543 -0.91525,-0.37606 -0.10931,-0.0486 -0.19174,-0.0678 -0.25373,-0.0629 z", +3.57089, 3.9589, +"M -0.662738 -3.95715 c -0.22732,0.1856 -0.1616,0.62065 -0.53242,0.4242 -0.47422,0.18596 -1.1086,-0.11391 -1.44717,0.37963 -0.0317,0.5894 -0.93935,0.14582 -0.92847,0.72408 0.18671,0.31101 0.54772,0.37476 0.774,0.25063 0.73663,0.38029 -0.26627,0.73927 -0.27541,1.18012 -0.16873,0.24378 -0.22553,0.49255 -0.0791,0.74385 -0.35807,0.49099 0.49544,0.79295 0.89329,0.76898 0.7408,0.0465 -0.0421,0.63402 -0.3488,0.72743 -0.19071,0.30445 -0.16117,0.71804 -0.63596,0.65942 -0.0994,0.45223 -0.3579,0.95834 0.0972,1.33927 0.29409,0.53974 0.96448,0.4094 1.42438,0.6058 0.25557,0.31566 0.59274,-0.11505 0.78137,-0.28179 0.43541,-0.29546 0.89088,-1.01334 1.42439,-0.89697 0.37087,0.20728 0.82182,0.38467 1.17308,0.10018 0.30848,0.23171 0.74947,0.19845 1.07289,0.43056 0.23849,0.006 0.56519,-0.37111 0.53108,-0.64333 0.0427,-0.41341 0.67275,-0.95516 0.002,-1.22669 -0.51332,0.33701 -1.04337,-0.18935 -1.52993,-0.35215 -0.31537,-0.10025 -1.01146,-0.23443 -0.48651,-0.62826 0.0794,-0.34626 0.44388,-0.30417 0.61988,-0.4711 -0.5035,-0.3571 -0.4592,-1.16755 -1.13992,-1.30979 0.084,-0.42636 0.24714,-0.98594 0.42956,-1.45855 -0.12383,-0.36592 -0.23396,-1.20431 -0.77535,-0.74854 -0.42722,0.24522 -0.7282,-0.3551 -1.04407,-0.31698 z", +4.35997, 4.86053, +"M 4.12802 -4.85771 c -0.10456,-0.0226 -0.24399,0.0881 -0.41693,0.42159 -0.2125,0.98079 -0.39661,2.00485 -1.27137,2.64164 -0.55259,0.76964 -0.84457,2.28577 -2.02939,2.16135 -0.53939,-0.50526 -1.4269,0.18538 -2.12311,0.20849 -0.55867,0.36525 -1.1619,-0.53149 -1.67378,0.28501 -0.92928,0.12919 -0.84737,1.30207 -0.21641,1.57615 -0.23706,0.6136 -1.50686,1.78461 -0.11541,1.86052 0.32445,0.23972 0.55181,0.97448 0.94742,0.25664 0.58659,-0.89664 1.44208,-1.65942 1.52995,-2.76437 0.89443,-0.40943 1.08676,1.66279 2.17983,1.45475 1.174,0.49699 -0.92964,1.24862 -0.11145,1.5821 0.52277,-1.10045 2.1059,-0.15978 2.383,-1.305 0.26784,-0.82205 1.53393,-1.83991 0.82737,-2.6377 -0.22347,-0.70652 -1.39017,-0.1269 -1.3248,-0.76992 -0.23832,-0.99719 0.89102,-1.4275 1.08066,-2.29858 -0.19297,-0.68688 0,-1.06432 0.50602,-1.52073 0.12078,-0.40486 0.0586,-1.10219 -0.17153,-1.15194 z", +2.04794, 5.74865, +"M 1.10481 -5.74852 c -0.2228,0.001 -0.42374,0.10801 -0.27902,0.38066 -0.22773,0.32416 -1.04651,0.01 -0.86657,0.6221 0.26376,0.4125 0.0107,0.98862 -0.32022,1.27218 0.2249,0.43579 0.30114,0.9337 0.36381,1.39786 -0.18081,0.1263 -0.35082,0.59103 -0.47477,0.5752 0.13163,-0.4456 -0.6191,-0.80374 -0.54723,-0.18253 0.0335,0.4939 0.30706,0.8021 0.65488,1.16755 0.0573,0.18913 0.50349,0.27841 0.054,0.30188 -0.32151,0.0134 -0.70298,0.15083 -0.96036,0.26819 -0.004,0.5051 -0.55904,0.90049 -0.23512,1.41321 -0.58144,0.13334 -0.38504,0.76784 -0.14975,1.12213 0.1297,0.3844 0.11185,0.7896 -0.32623,0.90896 -0.31629,0.49376 0.60887,-0.10276 0.51957,0.45041 -0.50415,0.22985 -0.21881,0.79349 -0.0156,1.13687 0.0134,0.25246 0.20574,0.68606 0.45883,0.6615 0.0963,-0.10895 0.22038,-0.21662 0.23453,-0.37013 -0.0641,-0.49914 0.3279,-0.12706 0.46184,0.0763 0.39469,0.33331 0.98388,0.17352 1.28451,-0.20657 0.25784,-0.20591 0.90771,-0.24636 0.52498,-0.65428 0.40076,-0.52758 -0.33316,-0.93582 -0.19243,-1.46581 0.0606,-0.56794 -0.0204,-1.15758 0.12958,-1.71117 0.1498,-0.39418 -0.30538,0.12251 -0.36231,-0.28414 -0.0417,-0.31502 0.45507,-0.37624 0.54784,-0.65519 0.36583,-0.13394 0.0559,-0.67183 0.39269,-0.91255 0.2087,-0.31728 -0.37429,-0.20735 -0.2216,-0.60377 -0.11082,-0.46181 -0.47329,-0.89905 -0.93241,-1.04485 -0.14753,0.0856 -0.34858,0.34434 -0.37436,-0.04 0.25058,-0.4456 -0.0889,-0.88442 0.0608,-1.31458 -0.11306,-0.4522 0.68191,0.0944 0.52617,-0.54182 0.2472,-0.31727 0.41213,-0.71248 0.436,-1.11462 -0.0466,-0.2419 0.0663,-0.32026 0.29827,-0.3073 0.43849,-0.20873 -0.33546,-0.1678 -0.47237,-0.3142 -0.0671,-0.0208 -0.14373,-0.032 -0.21799,-0.0316 z", +3.57088, 2.80202, +"M -0.301059 -2.80177 c -0.17254,0.005 -0.33301,0.071 -0.43996,0.26942 0.0409,0.2666 0.3491,0.47076 0.41858,0.69966 -0.36962,0.1128 -0.73032,0.3493 -1.08495,0.0913 -0.38249,0.0613 -0.25611,0.72381 0.036,0.88696 0.2585,0.30716 -0.38849,0.35691 -0.58937,0.39089 -0.44316,0.0903 -0.23306,0.50499 -0.19046,0.77618 -0.15188,0.28342 -0.52426,0.566 -0.8221,0.58572 0.13061,-0.25419 0.13318,-0.51381 -0.18414,-0.64646 -0.2523,-0.20486 -0.5502,0.37635 -0.34497,0.58256 0.0492,0.32508 -0.0329,0.76492 0.43389,0.8515 0.34683,0.12336 0.70559,0.1523 1.03297,0.318 0.37589,0.0865 0.73238,-0.13092 1.03003,-0.32214 0.24664,0.20939 0.57748,0.44613 0.93799,0.5041 0.31649,0.14136 0.22886,-0.80563 0.61876,-0.47421 0.16196,0.33427 0.30384,0.70629 0.62118,0.93166 0.24438,-0.0315 0.44964,0.28662 0.6275,0.0294 0.27443,-0.16145 0.69426,0.0631 1.03638,0.0219 0.26986,0.26652 1.04494,-0.002 0.59931,-0.38117 -0.10676,-0.38309 -0.23137,-0.76018 -0.4295,-1.11046 0.008,-0.29153 -0.0528,-0.52528 -0.27889,-0.7016 0.0236,-0.29755 0.67185,-0.5939 0.17224,-0.85368 -0.25747,-0.317 0.0128,-0.57784 0.20261,-0.8357 -0.15225,-0.23193 -0.67612,-0.3641 -0.45235,-0.74897 0.0316,-0.51263 -0.46331,-0.52312 -0.81311,-0.58111 -0.28658,-0.15328 -0.55917,0.57451 -0.89206,0.23687 -0.31681,-0.0816 -0.31441,-0.59906 -0.73342,-0.41882 -0.15487,-0.0489 -0.33957,-0.10634 -0.51211,-0.1018 z", +3.16396, 6.28632, +"M -0.0681559 -6.28552 c -0.27397,0.0139 -0.48549,0.2094 -0.46561,0.68988 -0.13806,0.64257 -0.98468,1.02766 -0.7705,1.89187 -0.48185,0.70273 0.94628,1.12941 0.80874,1.464 -0.56632,0.088 -1.05088,0.56396 -1.53894,0.75344 0.69345,0.93338 -1.41697,0.2104 -1.09603,1.20509 0.35057,0.59033 0.4561,1.79086 1.47845,1.37459 0.45409,-0.19336 0.97791,0.0161 0.31471,0.32402 -0.53264,0.2974 -0.72491,1.05029 0.10387,0.95704 0.54052,0.2765 1.10715,0.49524 1.67639,0.62219 -0.14509,0.73633 -1.35981,0.56002 -1.27744,1.47226 -0.11997,0.30673 -0.90705,0.8281 -0.69143,0.97203 0.64811,0.19804 1.34276,0.11448 1.99522,0.29869 0.71434,-0.16557 1.26673,0.36676 1.79782,0.54674 -0.065,-0.01 0.33212,-0.10842 0.24134,-0.11937 0.49432,-0.10903 0.93445,-0.26785 0.43665,-0.76378 -0.0961,-0.57586 -0.91548,-1.29645 -0.12038,-1.6831 -0.4048,-0.51862 0.47421,-1.14462 -0.38966,-1.35703 -0.75428,-0.50253 -0.338,-1.22127 0.38603,-1.49396 0.40886,-0.84209 -0.29071,-1.68516 -0.11525,-2.56832 -0.038,-0.76264 0.0716,-1.5506 -0.0966,-2.2965 -0.33673,-0.72185 -1.00957,-1.22882 -1.66863,-1.66295 -0.20068,-0.36268 -0.65647,-0.64475 -1.00871,-0.62683 z", + ) +scratches=( +1.21098, 12.0742, +"M 0.000565603 -12.0742 c -0.13128,0.38351 -0.75628,0.6648 -1.19561,1.82211 -0.1414,0.37239 0.70808,0.91154 0.5936,1.35961 -0.4133,1.61789 0.0395,2.85731 0.44366,3.80288 0.14158,0.26984 -0.43294,2.12241 -0.31668,2.13113 0.97645,1.62823 0.21172,1.22883 0.13349,3.04219 0.57549,2.43115 0.2224,3.6139 0.12544,6.25854 0.33054,2.36608 -0.73036,1.37715 0.43984,5.73195 0.69244,-3.11326 0.13428,-4.81509 0.0535,-6.02599 0.14464,0.36647 0.22405,-0.58222 0.79938,-1.15807 -0.0141,-0.45337 -0.0246,-0.90699 -0.0494,-1.35961 -0.12372,-0.71424 -0.19704,-1.42486 -0.13769,-2.16524 -0.26034,-0.76585 0.18753,-1.53555 -0.15299,-2.29857 -0.018,-0.66796 0.41747,-1.89258 0.47387,-2.52801 -0.26969,-0.62391 -0.19911,-1.3802 -0.23483,-1.23662 -0.16028,-0.23971 -0.65345,-1.05872 -0.69112,-1.99936 0.0472,-0.699 0.26798,-1.33045 0.18587,-2.0593 0.0935,-0.5642 -0.25882,-1.6984 0.35341,-1.78749 0.55821,-0.1124 -6e-5,-0.993 -0.21304,-0.42272 -0.52661,-0.0264 0.002,-0.62728 -0.20154,-0.94723 -0.17458,-0.0432 -0.29981,0.0337 -0.38438,0.17519 -0.007,-0.1122 -0.0131,-0.22491 -0.0249,-0.33538 z m 0.0394,1.76526 c 0.16024,0.34312 0.14013,0.70048 -0.0104,0.99271 0,-0.34768 0.005,-0.67207 0.0104,-0.99271 z", +1.21091, 19.8304, +"M 0.362522 -19.83 c -0.0425,-0.0104 -0.0565,0.20572 -0.0739,0.68316 -0.17118,4.69021 -0.36552,8.35313 -0.44801,8.44393 -0.0551,0.0606 -0.0981,0.35879 -0.0961,0.66198 0.003,0.45283 0.0497,0.48001 0.26043,0.15399 0.14105,-0.2183 0.25847,-0.63823 0.26046,-0.93327 0.002,-0.29501 0.19851,-0.81366 0.43616,-1.1529 0.17211,-0.24575 0.26287,-0.41037 0.27647,-0.53486 0.0136,-0.12454 -0.0499,-0.20942 -0.18603,-0.29352 -0.25998,-0.1606 -0.30745,-0.89742 -0.19897,-3.07991 0.0784,-1.57793 0.0496,-3.16673 -0.0641,-3.53054 -0.0829,-0.26526 -0.1333,-0.40997 -0.1664,-0.41806 z m -0.52554,11.09286 c -0.0402,-0.006 -0.0675,0.0911 -0.0755,0.28371 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0438,-0.044 0.0678,-0.12308 0.0718,-0.21498 h 5.3e-4 c 0.004,-0.0919 -0.013,-0.19595 -0.0512,-0.29145 -0.0317,-0.0792 -0.0606,-0.12035 -0.0848,-0.12403 z m 0.13952,1.125 c -0.007,-9.6e-4 -0.0143,0.001 -0.0217,0.006 -0.11779,0.0728 -0.22286,1.22667 -0.23307,2.56419 -0.004,0.48057 -0.0157,0.84616 -0.032,1.15393 -0.11018,0.1207 -0.22863,0.25041 -0.36277,0.42995 -0.0519,-0.0854 -0.0727,-0.0405 -0.0842,0.12247 -0.15026,0.2185 -0.30279,0.48437 -0.4377,0.83975 -0.11105,0.29241 0.38748,0.68769 0.55189,1.06091 -0.003,0.13173 0.002,0.29377 0.006,0.45631 -0.24328,1.08473 -0.099,1.99333 0.14417,2.75642 0.002,0.0868 0.0117,0.25962 0.0109,0.30282 -0.005,0.2518 0.103,0.52662 0.23926,0.61082 0.0341,0.0211 0.067,0.0269 0.0966,0.0191 0.0622,0.28054 -0.21254,1.2988 -0.31004,1.80195 -0.0228,-0.0699 -0.058,-0.1111 -0.1044,-0.1111 -0.12534,0 -0.22789,0.29714 -0.22789,0.66094 0,0.36375 0.0455,0.66198 0.10128,0.66198 0.0558,0 0.1583,-0.29823 0.22789,-0.66198 0.0132,-0.0692 0.0186,-0.13206 0.0238,-0.19482 0.90374,1.53576 0.17148,1.18929 0.0946,2.97243 0.57549,2.43115 0.22254,3.6139 0.12557,6.25853 0.33054,2.36608 -0.73044,1.37714 0.43976,5.73195 0.69244,-3.11326 0.13401,-4.81509 0.0532,-6.02599 0.14464,0.36647 0.2241,-0.58222 0.79943,-1.15807 -0.0141,-0.45337 -0.0243,-0.90698 -0.0491,-1.3596 -0.12372,-0.71424 -0.19733,-1.42486 -0.13798,-2.16525 -0.26033,-0.76585 0.18756,-1.53554 -0.15296,-2.29856 -0.018,-0.66796 0.41749,-1.89257 0.47387,-2.52802 -0.26969,-0.6239 -0.19889,-1.38019 -0.23461,-1.23661 -0.16028,-0.23971 -0.65375,-1.05872 -0.69143,-1.99936 0.0472,-0.699 0.26815,-1.33046 0.18605,-2.05931 0.0935,-0.5642 -0.25876,-1.6984 0.35346,-1.78749 0.55822,-0.1124 8e-5,-0.99299 -0.21291,-0.42271 -0.10411,-0.005 -0.1661,-0.0335 -0.20153,-0.077 10e-4,-0.13439 10e-4,-0.26153 -10e-4,-0.37982 0.0406,-0.17118 0.0872,-0.35502 10e-4,-0.49041 -0.0109,-0.003 -0.0199,-8.1e-4 -0.0305,-0.003 -0.0297,-0.26499 -0.0801,-0.43408 -0.1633,-0.43408 -0.17193,0 -0.23233,-0.58849 -0.16124,-1.572 0.0586,-0.81059 0.0233,-1.43103 -0.0786,-1.44539 z m -0.66869,13.69167 c -0.0402,-0.006 -0.068,0.091 -0.076,0.2837 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0439,-0.044 0.0684,-0.12256 0.0723,-0.21446 0.004,-0.0919 -0.013,-0.19647 -0.0512,-0.29197 -0.0317,-0.0792 -0.0601,-0.12034 -0.0842,-0.12402 z m 0,1.05833 c -0.0402,-0.006 -0.068,0.0911 -0.076,0.28371 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0439,-0.044 0.0684,-0.12308 0.0723,-0.21498 0.004,-0.0919 -0.013,-0.19595 -0.0512,-0.29145 -0.0317,-0.0792 -0.0601,-0.12035 -0.0842,-0.12403 z", +1.49495, 18.3425, +"M -0.389083 -18.3412 c -0.0137,-0.002 -0.0282,-0.002 -0.0419,0.002 -0.10038,0.0279 -0.19454,0.22976 -0.24185,0.70177 -0.26567,1.67026 -0.34483,3.24287 -0.40257,4.9351 -0.13546,0.59246 -0.11445,1.16489 -0.0517,1.73632 -0.0585,0.4088 -0.0804,0.92918 0.002,1.32964 -0.12052,1.75209 -0.60079,3.29057 -0.2346,5.20847 0.16549,1.86259 -0.34446,4.07682 0.14933,5.25032 0.0936,0.18527 0.19288,-0.31455 0.29921,-0.15916 0.13603,-0.0189 0.22781,-0.1762 0.28991,-0.41806 0.0507,0.92595 0.15436,1.84189 0.32038,2.69544 0.53221,-0.0551 0.41124,0.9134 0.20775,1.79317 0.51184,0.22894 0.34367,2.25374 0.002,2.89388 -0.0368,0.48543 -0.0891,1.00555 -0.13539,1.53634 0.0369,-1.13406 0.0173,-2.27104 -0.57621,-2.24896 -0.21034,3.7268 -0.29522,7.48925 -0.0279,11.21121 0.34301,0.69517 0.62318,-0.48978 0.76737,-0.70229 -0.15983,-1.72878 -0.22984,-3.51098 -0.2041,-5.28185 0.0306,0.26264 0.0729,0.51868 0.13383,0.76275 0.76367,0.6551 0.19733,-2.26198 0.72554,-2.8298 0.19862,-1.54766 0.11464,-3.48741 0.30178,-5.14232 -0.27355,-1.32725 -0.3366,-3.24034 0.42067,-3.55069 0.7031,-1.9288 -0.89779,-1.8191 -0.56743,-3.27577 0.0274,-1.9927 -0.44524,-3.31209 -0.79632,-4.81779 -0.27045,1.00189 -0.45267,2.49784 -0.54364,3.82767 -0.0214,-0.31841 -0.0436,-0.64831 -0.0615,-0.91622 -0.0602,-1.06935 0.3048,-2.00573 0.18499,-3.34967 0.15293,-0.0682 0.31221,-0.28396 0.43977,-0.72089 0.4395,-1.55568 -0.22239,-3.13405 -0.0129,-4.73201 -0.24661,-1.51874 -0.005,-3.03839 -0.11162,-4.46122 0.17729,-0.52717 -0.0266,-1.24147 -0.23461,-1.27745 z m 0.33951,11.62978 c 2.4e-4,-9.5e-4 2.7e-4,-0.002 5.1e-4,-0.003 h -0.002 c 2.4e-4,0.001 7.7e-4,0.002 10e-4,0.003 z", +1.53299, 18.3425, +"M -0.351212 -18.3412 c -0.0137,-0.002 -0.0281,-0.002 -0.0418,0.002 -0.10036,0.0279 -0.19452,0.22975 -0.24183,0.70176 -0.26567,1.67026 -0.34483,3.24287 -0.40256,4.9351 -0.13547,0.59246 -0.11444,1.1649 -0.0517,1.73633 -0.0484,0.33819 -0.0679,0.74913 -0.0279,1.10898 -0.19071,1.02501 -0.32009,2.2804 -0.38034,3.36517 -0.0761,1.42435 -0.0331,2.95284 0.15555,4.37751 -0.0636,1.14999 -0.12615,2.23412 0.16949,2.93677 0.0697,0.13803 0.14251,-0.10384 0.21913,-0.17208 -0.005,0.0233 -0.01,0.047 -0.015,0.0703 0.51186,0.22893 0.34366,2.25375 0.002,2.89388 -0.1252,1.65317 -0.43757,3.69316 -0.0424,5.2772 0.0544,0.0467 0.10184,0.0733 0.14364,0.0858 -0.12761,3.049 -0.14573,6.11235 0.0724,9.1488 0.343,0.69517 0.62267,-0.48977 0.76686,-0.70228 -0.15983,-1.72878 -0.22934,-3.51098 -0.20359,-5.28185 0.0306,0.26264 0.0724,0.51867 0.13332,0.76274 0.76367,0.6551 0.19733,-2.26198 0.72554,-2.8298 0.19862,-1.54766 0.11465,-3.48741 0.30179,-5.14232 -0.27356,-1.32725 -0.3361,-3.24034 0.42116,-3.55069 0.7031,-1.9288 -0.89829,-1.8191 -0.56793,-3.27577 0.0274,-1.9927 -0.44524,-3.31209 -0.79634,-4.81779 -0.0429,0.15891 -0.0825,0.33356 -0.12092,0.5147 -0.005,-0.41675 -0.0275,-0.80863 -0.0698,-1.17513 0.0749,-0.11708 0.14656,-0.28021 0.21035,-0.49867 0.4395,-1.55568 -0.22191,-3.13405 -0.0124,-4.73201 -0.24662,-1.51874 -0.005,-3.0384 -0.11163,-4.46123 0.1773,-0.52717 -0.0266,-1.24146 -0.23461,-1.27744 z m 0.33952,11.62978 c 2.6e-4,-9.5e-4 2.9e-4,-0.002 5.3e-4,-0.003 h -0.002 c 2.4e-4,0.001 8e-4,0.002 10e-4,0.003 z m -0.0956,9.67279 c 0.34693,0.1444 0.2326,0.99256 0.0522,1.77251 0.51183,0.22894 0.34374,2.25373 0.002,2.89388 -0.0368,0.48543 -0.0891,1.00555 -0.13539,1.53634 0.0309,-0.95055 0.0204,-1.90052 -0.33279,-2.17093 0.0287,-0.40839 0.0871,-0.76874 0.23823,-0.93121 0.1206,-0.9398 0.13944,-2.0231 0.17568,-3.10059 z", +1.20633, 23.4716, +"M 1.20633 -23.4715 c -0.5053,0.33607 -0.23791,1.76733 -0.95755,1.18391 l -0.14986,-0.19483 c -0.008,-0.0416 -0.016,-0.007 -0.0238,0.0713 v 5.2e-4 c 0.18164,0.13239 0.32232,0.3276 0.39534,0.62063 0.0427,0.088 0.061,0.19852 0.061,0.32143 -0.002,0.4222 -0.235,0.98918 -0.51157,1.29759 -0.021,1.53032 -0.0353,3.79606 -0.046,6.48384 0.0137,0.012 0.0215,0.0282 0.0155,0.0491 -0.001,0.008 -0.0116,0.0176 -0.0155,0.0264 -0.003,0.66229 -0.002,1.56265 -0.005,2.27222 -0.26217,1.91668 -0.35258,3.7582 -0.4196,5.72264 -0.4378,1.91459 0.36031,3.66604 0.19897,5.64617 -0.22442,0.63928 -0.0753,1.29189 0.201,1.54461 -0.003,11.37386 0.0137,22.45681 -0.006,21.87567 0.14362,-0.69488 -0.32321,-2.78058 0.72811,-2.35232 -0.12814,0.70466 0.19505,1.16669 0.36795,1.67432 -0.0668,-2.83822 -0.14226,-12.31522 -0.15967,-21.95783 0.0124,-0.0381 0.0257,-0.0691 0.0377,-0.11007 0.42336,-1.49849 0.0674,-3.0137 -0.0413,-4.54288 2.1e-4,-0.48242 10e-4,-0.94352 0.002,-1.42058 0.007,-0.0756 0.0123,-0.15121 0.0222,-0.22686 -0.008,-0.051 -0.0143,-0.102 -0.0217,-0.15296 0.008,-5.2851 0.0362,-10.20918 0.10488,-13.52062 -0.0288,0.0211 -0.0623,0.0406 -0.10282,0.0573 -0.22574,-0.68079 -0.0267,-0.7215 0.11576,-0.56947 0.0507,-2.17256 0.11869,-3.59653 0.20978,-3.79925 z m -2.21742,27.16423 c -0.21037,3.7268 -0.29472,7.48924 -0.0274,11.2112 0.343,0.69518 0.62317,-0.48977 0.76737,-0.70228 -0.19468,-2.10548 -0.25887,-4.29063 -0.17518,-6.43733 -0.14325,-1.11457 0.39523,-4.10729 -0.5643,-4.07159 z", +1.19276, 25.078, +"M -0.421376 -3.88054 c -0.27631,0.25272 -0.42545,0.90533 -0.20103,1.54461 0,0.0137 0,0.0271 0.003,0.0408 -0.0445,-0.0116 -0.0846,-0.0199 -0.13695,-0.0377 l -0.11678,-0.0403 0.0201,0.0682 c 0.1305,0.45681 0.22437,0.8044 0.24133,0.92553 0,0.015 0,0.03 -0.003,0.045 -0.003,8e-4 -0.005,0.002 -0.0109,-0.005 0.003,0.20217 -0.0377,0.38449 -0.14211,0.45011 0.0449,0.007 0.0822,0.0209 0.11626,0.0382 -0.0299,0.3032 -0.0693,0.6025 -0.11057,0.90072 -0.0932,0.0649 -0.2028,0.0993 -0.32401,0.078 -0.14565,0.51493 0.25239,1.08423 -0.0393,1.56063 0.0722,0.17488 0.13539,0.34219 0.17312,0.50901 0.003,0.14782 0.0111,0.29635 0.0254,0.44545 -0.0156,0.11938 -0.0498,0.24159 -0.11213,0.36897 0.24339,0.56784 0.14218,1.21602 0.18034,1.82263 0.0321,0.60964 -0.054,1.23666 0.0951,1.83296 0.21513,0.29946 -0.39643,0.31017 -0.11369,0.67955 0.039,0.74934 0.21111,1.48345 0.17364,2.23707 0.0111,0.43606 0.0354,1.12135 -0.22066,1.29191 0.64399,0.51467 -0.31361,0.91939 -0.18965,1.4857 0.0477,0.49885 0.30371,1.02019 0.0961,1.48363 -0.0396,0.59756 -0.0501,1.20341 0.21238,1.7234 0.0946,0.62129 -0.0953,1.21664 -0.0124,1.84589 -0.0453,0.5497 0.3098,1.19228 -0.0542,1.66449 -0.19063,0.44185 0,0.91783 -0.19327,1.33791 -0.0311,0.51712 -0.0706,1.05694 -0.0429,1.57355 -0.0493,0.5227 -0.0711,1.06009 -0.003,1.58078 0.079,0.51085 0.0409,0.93085 -0.0816,1.42058 0.0312,0.0244 0.0439,0.0586 0.0692,0.0863 l 1.44333,-3.35897 c -0.0392,-0.12324 -0.10192,-0.24394 -0.21963,-0.35346 -0.0796,-0.4752 0.0952,-0.97383 0.23461,-1.4056 0.16936,0.27841 0.1652,0.98193 0.50075,1.20509 -0.0911,-0.20272 -0.15912,-1.62669 -0.20982,-3.79925 -0.14245,0.15203 -0.34149,0.11132 -0.11575,-0.56947 0.0405,0.0167 0.074,0.0363 0.10284,0.0574 -0.006,-0.28889 -0.0101,-0.65271 -0.0156,-0.96532 0.0822,-0.14175 0.16769,-0.28152 0.24908,-0.42891 -0.0214,-0.20087 -0.14751,-0.3117 -0.26252,-0.4191 -0.005,-0.33733 -0.0116,-0.6269 -0.0161,-0.98547 0.0805,-0.35753 0.10441,-0.72698 0.19428,-1.08055 0.0366,-0.47155 -0.0944,-0.90339 -0.21703,-1.34462 -0.0209,-2.51731 -0.0327,-5.33076 -0.0372,-8.29665 0.007,-0.051 0.0138,-0.10197 0.0217,-0.15297 -0.01,-0.0757 -0.0153,-0.15126 -0.0222,-0.22685 0,-0.47706 -0.003,-0.93817 -0.003,-1.42059 0.0257,-0.36017 0.0648,-0.71939 0.10441,-1.07797 0.10797,-0.15575 0.16115,-0.31721 0.0486,-0.4532 0.0116,-0.11133 0.0217,-0.22266 0.032,-0.33383 0.56079,-1.63193 0.75962,-1.19491 0.0356,-1.64228 -0.0274,-0.34604 -0.082,-0.69129 -0.1793,-1.0356 -0.0119,-0.041 -0.0254,-0.072 -0.0377,-0.11007 0.0175,-9.64261 0.0929,-19.11961 0.15967,-21.95783 -0.1729,0.50763 -0.49607,0.96966 -0.36793,1.67432 -0.80568,3.15608 0.55147,3.77736 -0.72101,19.52334 z", +0.670938, 8.19849, +"M -0.407338 -8.00763 c -0.0754,0.25511 -0.0986,0.76103 -0.002,1.48952 -0.15641,1.5163 0.005,3.60812 -0.2616,5.1103 0.11078,2.14938 0.16104,4.46253 0.31355,6.6328 0.0244,0.8744 0.0171,4.68192 0.38457,2.0748 0.22082,-1.3347 0.65056,-2.59474 0.58926,-4.39985 0.27685,-1.75982 -0.59717,-2.80885 -0.47885,-4.72632 -0.0715,-1.81309 0.41368,-3.66693 -0.0322,-5.23362 -0.11395,-1.10094 -0.38606,-1.37269 -0.51194,-0.94764 z", +0.670938, 12.9232, +"M -0.407338 -12.6223 c -0.0754,0.40213 -0.0986,1.19961 -0.002,2.34792 -0.15641,2.39013 0.005,5.68743 -0.2616,8.05531 0.11078,3.38804 0.16104,7.03423 0.31355,10.4552 0.0244,1.37832 0.0171,7.38006 0.38457,3.27049 0.22082,-2.10387 0.65056,-4.09006 0.58926,-6.93544 0.27685,-2.77398 -0.59717,-4.42755 -0.47885,-7.45005 -0.0715,-2.85794 0.41368,-5.78013 -0.0322,-8.24969 -0.11395,-1.7354 -0.38606,-2.16376 -0.51194,-1.49375 z", +0.753237, 9.39521, +"M -0.337287 -9.3947 c -0.0586,-0.007 -0.11261,0.0579 -0.15195,0.19068 h -5.1e-4 c -0.0754,0.25511 -0.0987,0.76083 -0.002,1.48932 -0.15642,1.51629 0.005,3.6081 -0.26149,5.11028 0.10925,2.11959 0.16037,4.39716 0.308,6.5412 -0.63693,1.04513 0.47877,2.68047 -0.28112,3.96927 0.31912,0.41893 0.25879,2.08373 1.06919,1.26659 0.80684,-0.22766 0.17536,-1.16368 0.17414,-2.66186 -0.30014,-0.12043 -0.46132,-0.32959 -0.54001,-0.58446 0.22741,-1.27036 0.61566,-2.49792 0.55705,-4.22299 0.27686,-1.75983 -0.59735,-2.80886 -0.47902,-4.72633 -0.0715,-1.81309 0.41383,-3.6671 -0.032,-5.23379 -0.0783,-0.7569 -0.23124,-1.12184 -0.36017,-1.13791 z", +1.73753, 21.1382, +"M 0.27454 -21.1377 c -0.0586,-0.007 -0.11258,0.0573 -0.15192,0.19016 l -5e-4,5.2e-4 c -0.0754,0.25511 -0.0987,0.76083 -0.002,1.48932 -0.15452,1.498 -4.5e-4,3.55549 -0.25371,5.05343 -0.15516,0.069 -0.19791,0.18561 -0.17881,0.37363 0.093,0.91418 -0.0185,1.41725 -0.27855,1.25677 -0.1455,-0.0898 -0.26453,-0.51355 -0.26459,-0.94155 3e-5,-0.49146 -0.137,-0.77825 -0.37155,-0.77825 -0.2589,0 -0.40127,0.42059 -0.47077,1.38907 -0.0191,0.26627 -0.0317,0.52238 -0.0367,0.76739 -0.0365,1.71506 0.26421,2.89312 0.85627,3.30781 0.5721,0.40073 0.5816,0.49454 0.39946,3.88917 -0.10265,1.91329 -0.16684,4.25278 -0.14263,5.19865 0.0283,1.10976 -0.0992,1.98889 -0.35968,2.47788 -0.50411,0.94668 -0.52832,1.39496 -0.0542,1.00149 0.28816,-0.23923 0.33626,1.20389 0.27647,8.26771 -0.0584,6.89886 -0.002,8.65365 0.28887,9.05165 0.33266,0.45496 0.37624,0.41244 0.55449,-0.53795 0.10638,-0.56717 0.0821,-1.77797 -0.0543,-2.6908 -0.13639,-0.91282 -0.17248,-1.61256 -0.0796,-1.55546 0.0928,0.0573 0.18032,-0.51603 0.19431,-1.27434 0.0252,-1.36423 0.11504,-1.96676 0.60204,-4.02456 0.13776,-0.58206 0.29511,-3.3592 0.34933,-6.1712 0.0542,-2.81205 0.20923,-5.22336 0.34467,-5.35884 0.13546,-0.13545 0.26493,-0.75165 0.28734,-1.36943 0.0309,-0.85348 -0.0157,-0.99638 -0.19431,-0.59428 -0.17402,0.392 -0.23993,0.42036 -0.25374,0.11007 -0.0102,-0.23043 0.0657,-0.50284 0.16846,-0.60565 0.1623,-0.16235 0.15642,-3.36764 -0.0145,-8.03723 -0.0279,-0.76399 0.0292,-1.38905 0.12663,-1.38906 0.0973,-1e-5 0.17671,-0.41671 0.17671,-0.92604 0,-0.90243 -0.0261,-0.92604 -1.04799,-0.92605 -0.0114,0 -0.0199,4.9e-4 -0.031,5.2e-4 0.001,-0.0895 0.002,-0.17939 0.008,-0.27285 -0.0715,-1.81309 0.41386,-3.6671 -0.032,-5.23379 -0.0784,-0.7569 -0.23125,-1.12184 -0.36021,-1.13791 z", +0.90975, 7.69929, +"M 0.5118 4.3328 0.0773,-1.89734 c -0.78022,-0.65432 -0.7026,-1.85535 0.0991,-2.36604 l 0.22155,-5.30816 c -0.0671,-0.11321 -0.12273,-0.0764 -0.193,-0.25561 -0.39953,-0.40971 -0.50958,-1.87041 -0.78623,-2.16685 l -0.14591,-0.0381 c -0.0432,0.0195 -0.10273,0.16373 -0.15446,0.23376 l -0.5399,11.53632 c 0.09,-0.0554 0.16763,-0.042 0.26343,-0.13249 0.2235,1.06334 -0.41852,2.98144 0.13712,3.761 1.10534,-0.76211 0.3114,-2.4459 1.02162,-3.36601 z", +0.909985, 21.0802, +"M 0.069295 -21.0802 c -1.60221,0.95118 0.0978,2.94503 -0.79529,4.45968 0.31909,0.41893 0.25829,2.08373 1.06866,1.26659 0.80687,-0.22766 0.17589,-1.16368 0.17467,-2.66185 -1.23089,-0.49394 -0.14943,-2.46581 -0.44751,-3.06442 z m -0.28475,6.45077 c -0.0432,0.0195 -0.10276,0.16407 -0.15449,0.2341 l -0.54004,11.53624 c 0.09,-0.0554 0.16777,-0.0423 0.26355,-0.13281 0.22352,1.06334 -0.41867,2.98145 0.13695,3.76101 0.11266,-0.0777 0.20122,-0.16697 0.27803,-0.262 -0.02,0.26698 -0.062,0.40312 -0.11938,0.34572 -0.0852,-0.0852 -0.1323,0.67721 -0.1323,2.13269 0,0.59617 -0.0104,1.04983 -0.0263,1.41593 -0.043,0.0648 -0.0864,0.12977 -0.12454,0.18552 -0.0367,0.0537 -0.0978,0.0547 -0.11316,0.11265 -0.0217,0.0815 0.0922,0.078 0.0744,0.15503 -0.0144,0.0623 -0.10165,-0.009 -0.1116,0.0537 -0.0128,0.0803 0.18314,0.1196 0.17,0.20206 -0.007,0.0452 -0.0103,0.091 -0.009,0.13746 -9.3e-4,1.7e-4 -0.002,0.003 -0.003,0.003 h -5.1e-4 c -0.0783,0 -0.1189,0.16869 -0.091,0.37517 0.0279,0.20649 0.12144,0.35145 0.20825,0.32194 0.003,-9.4e-4 0.005,0.001 0.008,0.001 0.0106,0.0622 0.0188,0.12677 0.0248,0.19224 10e-4,0.0292 0.002,0.0591 0.004,0.0884 0.002,0.0585 0.005,0.11669 0,0.17931 8.2e-4,0.0518 -0.0608,0.12352 -0.0594,0.17312 0.001,0.0496 0.0533,0.0771 0.0553,0.12454 0.002,0.0475 -0.046,0.11479 -0.0434,0.16019 0.002,0.0335 0.0533,0.17164 0.0863,0.27079 0.0126,0.33511 0.0159,0.66968 -0.007,1.00149 -0.0129,0.0186 -0.027,0.0231 -0.0424,0.008 -0.0679,-0.068 -0.10681,0.27415 -0.11419,0.92501 -0.066,0.23273 -0.1523,0.46252 -0.27183,0.68678 0.1062,0.21699 0.19947,0.37376 0.28527,0.49919 0.009,0.30425 0.0207,0.49363 0.0408,0.46354 -0.008,0.28451 -0.0302,0.75484 -0.0398,1.26349 -0.10361,0.44818 -0.1356,1.31544 -0.0109,1.44022 0.14782,0.14777 0.17589,1.00278 0.0796,2.44481 -0.0191,0.28562 -0.0175,0.6403 -0.003,0.9586 -0.0617,0.0399 -0.12502,0.089 -0.19225,0.1571 0.0518,0.38782 0.074,0.81499 0.0935,1.24953 -0.004,0.003 -0.009,0.003 -0.0124,0.007 -0.0863,0.0863 -0.11387,0.41392 -0.0672,0.79169 0.0438,0.35436 0.0791,0.9009 0.0791,1.21439 0,0.46794 0.0655,0.57783 0.36483,0.61443 0.0158,0.002 0.023,0.001 0.0372,0.003 0.0344,0.0746 0.0714,0.14651 0.11266,0.21445 0.15124,-0.0321 0.23686,-0.14678 0.29507,-0.28525 0.0212,0.0538 0.0649,0.0638 0.11575,0.0129 0.0515,-0.0515 0.0774,-0.33668 0.0873,-0.67231 0.29014,-0.88165 0.123,-3.135 -0.53848,-3.37654 l -5e-4,5.2e-4 c -0.0427,-0.0173 -0.0878,-0.0231 -0.13489,-0.0207 0.002,-0.84663 0.0224,-1.14112 0.0972,-1.12552 0.002,4.9e-4 0.005,0.004 0.008,0.005 0.1579,0.11986 0.38113,0.13515 0.67231,-0.0475 -0.022,-0.60336 -0.25202,-1.93024 -0.50488,-2.00556 -0.0135,-0.004 -0.027,-0.005 -0.0408,-10e-4 0.0589,-0.0887 0.12261,-0.19962 0.19431,-0.34623 -0.0435,-0.19088 -0.0688,-0.3762 -0.0847,-0.56017 0.0114,0.004 0.0236,0.008 0.0362,0.016 0.24339,0.15111 0.38658,-0.25127 0.37258,-1.04593 -0.006,-0.35248 0.0815,-0.86868 0.19431,-1.14722 0.12518,-0.30915 0.16568,-0.65349 0.10388,-0.88367 -0.0556,-0.20738 -0.10724,-0.52146 -0.11422,-0.69814 -0.007,-0.17668 -0.10248,-0.32443 -0.21188,-0.32763 -0.0382,-9.7e-4 -0.0689,-0.0206 -0.0946,-0.0522 0.007,-0.0407 0.0134,-0.0917 0.0212,-0.12815 0.0171,-0.0261 0.0359,-0.0485 0.0511,-0.0729 l 5.3e-4,-0.002 -0.047,-3.21014 c 0.0994,-0.6389 0.22457,-1.57045 0.1824,-1.57045 -0.0641,0 -0.11626,-0.10246 -0.11626,-0.22738 0,-0.12493 0.0594,-0.16741 0.13229,-0.0946 0.0729,0.0729 0.1328,-0.0128 0.1328,-0.18966 0,-0.17699 -0.0574,-0.3783 -0.12711,-0.44803 -0.0698,-0.0697 -0.0933,-0.26863 -0.0522,-0.44184 0.0465,-0.19637 -0.005,-0.3147 -0.13798,-0.3147 -0.11716,0 -0.21341,-0.13706 -0.21341,-0.30438 0,-0.16734 -0.0396,-0.47302 -0.0884,-0.67903 -0.0605,-0.2553 -0.0396,-0.32487 0.0661,-0.21911 0.10713,0.10714 0.15502,-0.0773 0.15502,-0.59582 0,-0.65769 0.18227,-0.88497 0.0692,-0.89452 -0.0382,-0.003 -0.10946,0.0186 -0.23151,0.0563 0.0311,-0.6426 0.004,-1.30921 0.36587,-1.77818 l -5e-4,-5.2e-4 0.077,-1.89756 c -0.78023,-0.65432 -0.70247,-1.85506 0.0992,-2.36574 l 0.22169,-5.30821 c -0.0671,-0.11321 -0.123,-0.0766 -0.19328,-0.2558 -0.39952,-0.40971 -0.50935,-1.87035 -0.78599,-2.16679 z m 0.0336,28.36158 c -0.0146,0.0334 -0.0293,0.0897 -0.0439,0.13384 -0.006,-0.0264 -0.0126,-0.0554 -0.0196,-0.0832 0.0197,-0.011 0.0416,-0.0302 0.0636,-0.0506 z", +0.70928, 12.466, +"M 0.18321 -12.4659 c -0.10784,-0.006 -0.2246,0.65736 -0.33539,2.3642 -0.2559,1.61556 0.0378,4.44866 0.86146,3.05511 -0.022,-1.62742 -0.25194,-5.20773 -0.50488,-5.40898 l -0.002,-0.002 c 4.3e-4,3.1e-4 6.4e-4,0.002 0.001,0.002 -0.007,-0.006 -0.0136,-0.01 -0.0207,-0.0103 z m -0.37155,7.36079 c -0.0907,0.007 -0.12097,0.50508 -0.0698,1.9544 -0.26241,4.289499 0.38667,9.178069 -0.45114,13.416749 1.02915,5.67045 1.03722,-1.11191 1.24077,-3.68918 0.0171,-0.0704 0.0353,-0.13161 0.0506,-0.1974 l 0.001,-0.005 -0.0532,-9.785969 c -0.32449,-0.66216 -0.58576,-1.7036 -0.71829,-1.69395 z", +0.791801, 10.8742, +"M 0.37094 -10.8739 c -0.0383,-0.003 -0.10962,0.0185 -0.23202,0.0563 -0.32348,0.10008 -0.3638,0.20621 -0.3638,0.95808 0,0.50923 -0.053,0.793 -0.13282,0.71313 -0.0852,-0.0852 -0.13229,0.67721 -0.13229,2.13269 0,0.59618 -0.0104,1.04983 -0.0263,1.41593 -0.043,0.0648 -0.0864,0.12977 -0.12454,0.18552 -0.0367,0.0537 -0.0978,0.0547 -0.11316,0.11266 -0.0217,0.0815 0.0922,0.078 0.0744,0.15503 -0.0144,0.0623 -0.10166,-0.009 -0.11161,0.0537 -0.0128,0.0803 0.18315,0.11959 0.17,0.20205 -0.007,0.0452 -0.01,0.091 -0.009,0.13746 -9.3e-4,1.7e-4 -0.002,0.003 -0.003,0.003 h -5.3e-4 c -0.0783,0 -0.11885,0.16869 -0.0909,0.37517 0.0279,0.20648 0.12145,0.35145 0.20826,0.32195 0.003,-9.4e-4 0.005,0.001 0.008,0.001 0.0245,0.14353 0.0418,0.2935 0.0284,0.45992 8e-4,0.0518 -0.0608,0.12351 -0.0594,0.17311 10e-4,0.0496 0.0533,0.0771 0.0553,0.12454 0.002,0.0475 -0.046,0.11479 -0.0434,0.1602 0.003,0.0454 0.11377,0.32348 0.11679,0.3669 0.0104,0.14968 0.0239,0.28357 0.0383,0.40928 -0.0199,0.3693 -0.0606,0.56165 -0.11834,0.50384 -0.0843,-0.0844 -0.12634,0.43821 -0.11526,1.43558 0.009,0.84768 0.0233,1.18693 0.0553,1.13894 -0.008,0.28451 -0.0302,0.75484 -0.0398,1.26349 -0.10361,0.44818 -0.13563,1.31545 -0.0109,1.44023 0.1478,0.14777 0.1759,1.00278 0.0796,2.44481 -0.0316,0.47191 -0.0123,1.14721 0.0434,1.5012 0.0959,0.60757 0.19674,0.59567 0.19274,-0.21446 -0.006,-1.40297 0.0164,-1.64026 0.14005,-1.5167 0.0647,0.0647 0.19682,-0.0363 0.29353,-0.22479 0.14898,-0.29044 0.13581,-0.38968 -0.0848,-0.65061 -0.14306,-0.1693 -0.24148,-0.32752 -0.21857,-0.35192 0.0229,-0.0244 -0.002,-0.23205 -0.0569,-0.46095 -0.0157,-0.0663 -0.0256,-0.11223 -0.0398,-0.16847 0.10073,-0.0561 0.22942,-0.23081 0.39328,-0.56585 -0.0435,-0.19088 -0.0689,-0.37621 -0.0848,-0.56018 0.0114,0.004 0.0236,0.008 0.0362,0.016 0.24339,0.15111 0.38658,-0.25127 0.37259,-1.04593 -0.006,-0.35248 0.0815,-0.86867 0.19428,-1.14721 0.12517,-0.30915 0.16568,-0.65349 0.10387,-0.88367 -0.0556,-0.20738 -0.1072,-0.52147 -0.11419,-0.69815 -0.007,-0.17668 -0.10247,-0.32443 -0.21188,-0.32763 -0.0396,-0.001 -0.0716,-0.0212 -0.0977,-0.0548 -0.006,-0.51267 -0.0453,-1.07976 -0.14057,-1.72237 -0.0104,-0.12615 -0.027,-0.22448 -0.0444,-0.32195 0.004,-0.009 0.006,-0.0184 0.0104,-0.0274 0.0792,-0.15448 0.12295,-0.41373 0.0971,-0.57619 -0.0258,-0.16259 -0.0261,-0.2425 -5.3e-4,-0.17828 0.0256,0.0642 0.35351,-2.15491 0.2894,-2.15491 -0.0641,0 -0.11628,-0.10246 -0.11628,-0.22738 0,-0.12493 0.0594,-0.16745 0.13229,-0.0946 0.0729,0.0729 0.13282,-0.0128 0.13282,-0.18965 0,-0.17699 -0.0574,-0.3783 -0.12713,-0.44803 -0.0698,-0.0697 -0.0933,-0.26863 -0.0522,-0.44184 0.0465,-0.19637 -0.005,-0.31471 -0.13798,-0.31471 -0.11715,0 -0.21344,-0.13705 -0.21344,-0.30437 0,-0.16734 -0.0396,-0.47302 -0.0884,-0.67903 -0.0605,-0.2553 -0.0396,-0.32487 0.0661,-0.21911 0.10713,0.10713 0.15504,-0.0773 0.15504,-0.59583 0,-0.6594 0.18355,-0.88659 0.0687,-0.89503 z m -0.77409,10.7518 c 0.008,0.0177 0.0132,0.12011 0.0176,0.27698 -0.03,0.0588 -0.0609,0.11849 -0.0967,0.18449 0.0414,-0.31691 0.0656,-0.49083 0.0791,-0.46147 z m -0.14833,8.34212 c -0.0352,-0.005 -0.064,0.002 -0.0842,0.0222 -0.0863,0.0863 -0.1139,0.41391 -0.0672,0.79168 0.0438,0.35437 0.079,0.90091 0.079,1.2144 0,0.46794 0.0655,0.57783 0.36484,0.61443 0.27919,0.0342 0.31816,-0.004 0.16586,-0.16433 -0.17018,-0.17883 -0.16531,-0.21039 0.0331,-0.21239 0.12763,-0.002 0.23204,0.0988 0.23204,0.22376 0,0.1249 0.0583,0.16907 0.1297,0.0977 0.14147,-0.14143 0.0967,-2.02722 0.0274,-1.95802 -0.0692,0.0692 -0.28162,-0.0722 -0.47181,-0.31419 -0.14263,-0.18155 -0.30326,-0.30098 -0.40875,-0.31523 z", +1.07687, 9.8574, +"M -0.468434 -9.85737 c 0.35117,1.50705 0.82497,2.82661 0.79752,4.82073 -0.33038,1.45668 1.2704,1.34706 0.56728,3.27586 -0.75726,0.31035 -0.69421,2.22344 -0.42064,3.55069 -0.18715,1.65491 -0.10345,3.59501 -0.30207,5.14267 -0.52822,0.56782 0.0385,3.48463 -0.72515,2.82953 -0.39519,-1.58404 -0.0832,-3.62405 0.042,-5.27722 0.3416,-0.64014 0.50986,-2.66493 -0.002,-2.89386 0.20349,-0.87978 0.32479,-1.84821 -0.20741,-1.79313 -0.33006,-1.69697 -0.41673,-3.64057 -0.32176,-5.41903 0.0788,-1.41878 0.27531,-3.13331 0.5735,-4.23627 z", +2.2155, 17.1585, +"M 0.126795 -17.1552 c -0.0862,0.0295 -0.10147,0.26481 0.15555,0.17053 -0.0201,-0.0566 -0.0417,-0.0964 -0.0625,-0.12402 -0.0181,-0.0239 -0.0356,-0.0379 -0.0522,-0.045 h -5.3e-4 c -0.0144,-0.006 -0.0281,-0.006 -0.0403,-0.002 z m -0.11575,1.07797 c -0.2067,8.5e-4 -0.36484,0.15284 -0.2589,0.56792 -0.78081,0.4633 -0.40071,1.63009 -0.15092,2.37195 -0.26111,0.38499 -0.0968,0.69767 0.0336,0.94413 0.003,0.15192 0.005,0.3124 0.008,0.46612 -0.0424,0.0281 -0.0954,0.0546 -0.17159,0.078 -0.38372,0.36544 -0.96946,0.62763 -0.47024,1.2516 0.61513,-0.37333 -0.39214,1.24462 0.37827,1.11983 0.58034,0.63299 -0.16417,1.58188 -0.29199,0.99788 -0.36309,0.82279 -0.74943,2.75375 0.30697,2.90059 0.65154,0.38277 -1.22994,0.47827 -0.32247,1.03353 0.12882,0.11405 0.2826,0.54247 0.4527,0.34778 0.0882,-0.10334 0.15261,-0.21193 0.20463,-0.32349 0.004,0.47543 0.008,0.94591 0.0124,1.42162 -0.1546,-0.15317 -0.30245,-0.264 -0.41445,-0.27802 -0.19592,-0.0245 -0.2839,0.23429 -0.11266,1.02733 0.39989,1.176989 -1.12924,1.251499 -0.25992,2.377629 0.20293,1.10216 -0.30896,2.46141 -0.11473,3.72122 -0.26596,1.39175 1.38674,0.67395 0.53589,2.24534 -0.60793,1.13701 0.0733,2.34518 0.5674,3.05614 -0.24691,0.6918 -0.4676,-0.15486 -0.46559,-0.52399 -0.52125,-0.0811 -0.56888,0.96424 -0.10543,1.27589 0.44555,0.85109 -0.8023,1.42473 0.10078,2.29133 0.72273,0.54138 -0.004,1.44593 -0.46149,0.78445 -0.46868,0.32104 0.99774,0.86268 0.33591,1.56889 -0.12715,0.56519 0.112,1.93607 0.42477,0.65009 0.31115,-0.77077 0.98546,-1.04884 1.25005,-1.8526 -0.41074,-0.17674 -0.96338,-0.29486 -0.21032,-0.51986 0.87294,-0.30163 0.89675,-2.52384 0.20465,-3.22254 0.0979,-0.4361 -0.17264,-0.70085 -0.44082,-0.96635 0.0414,-0.83119 0.0704,-1.69667 0.11163,-2.32389 0.0512,-0.6609 0.0902,-1.54857 0.11988,-2.55954 0.17206,-0.23191 0.19942,-0.56928 0.0243,-0.8847 0.002,-0.0714 0.002,-0.15084 0.004,-0.22324 0.21306,-0.76122 0.28736,-1.5621 0.0243,-2.17454 0.002,-0.29119 0.003,-0.5884 0.004,-0.88677 0.22603,-0.40201 0.27916,-1.31894 0.0305,-1.5658 -0.008,-0.008 -0.0188,-0.0119 -0.0279,-0.0186 -0.0212,-4.586229 -0.18235,-9.480359 -0.49194,-11.419969 0.21301,-0.40925 0.4383,-0.83985 0.42579,-1.43867 0.27437,-0.6706 -0.68641,-0.14121 -0.21238,-0.89969 -0.0211,-0.10544 -0.0977,-0.20384 -0.19741,-0.27854 l -0.001,-10e-4 c -0.11229,-0.0842 -0.25379,-0.13798 -0.37774,-0.13746 z m -1.07128,3.59616 c -0.046,0.0125 -0.11609,0.15283 -0.19843,0.50126 -0.0447,0.11946 -0.12068,0.55421 0.0775,0.36484 0.19362,-0.34691 0.21455,-0.81723 0.14004,-0.86403 h -5e-4 c -0.006,-0.003 -0.012,-0.004 -0.0186,-0.002 z m -0.6356,1.5627 c -0.079,-0.0128 -0.19479,0.0402 -0.34883,0.19792 -0.19704,0.0386 -0.26882,0.95532 0.0331,0.63458 0.39754,-0.0448 0.5438,-0.64657 0.38243,-0.79943 -0.0183,-0.0177 -0.0403,-0.0276 -0.0667,-0.0326 z m 3.53157,0.28783 c -0.0145,-0.003 -0.0279,-0.003 -0.0398,0.002 -0.0792,0.0285 -0.0914,0.22185 0.078,0.65371 0.0425,0.16251 0.28297,0.43936 0.34157,0.13023 -0.006,-0.29077 -0.11668,-0.53703 -0.22944,-0.67335 h -5.1e-4 c -0.0529,-0.0638 -0.10628,-0.10342 -0.14986,-0.11214 z m -3.06699,0.71417 c -0.11473,0.005 -0.36497,0.34787 -0.21913,0.6656 l 0.11472,-0.12816 c 0.15291,-0.30965 0.17669,-0.46521 0.14161,-0.51832 0,7.2e-4 0.002,-2.3e-4 0.002,5.2e-4 l -0.002,-0.002 v 5.2e-4 c -0.009,-0.012 -0.0222,-0.0194 -0.0372,-0.0186 z m 0.91829,1.10691 c 0,1.7e-4 0,3.5e-4 0,5.2e-4 -5.3e-4,1.2e-4 -0.001,-1.2e-4 -0.002,0 5.5e-4,-1.3e-4 9.8e-4,-3.8e-4 0.002,-5.2e-4 z m 1.47484,23.342759 c -0.0965,-0.0137 -0.20217,0.35222 0.0749,0.14676 -0.0109,-0.0548 -0.0222,-0.0916 -0.0357,-0.11472 -0.0122,-0.0202 -0.0259,-0.03 -0.0393,-0.032 z m -0.98237,0.9338 c -0.14174,0.0139 -0.29345,0.21991 -0.24496,0.71003 -0.0263,0.31998 0.15116,0.22384 0.22998,0.0662 0.29102,-0.34448 0.26099,-0.62222 0.14571,-0.72864 v -5.1e-4 c -0.037,-0.0349 -0.0834,-0.052 -0.13073,-0.047 z m 0.4005,1.03714 c -0.1714,-0.0358 -0.43241,0.24697 -0.11526,0.65423 l 0.1447,-0.10853 c 0.1255,-0.28076 0.10745,-0.44152 0.0388,-0.50952 l -0.002,-0.001 c -0.0189,-0.0187 -0.0416,-0.0301 -0.0661,-0.0351 z", +0.780383, 20.4192, +"M -0.105503 -20.4188 c -0.0405,-0.002 -0.0956,0.004 -0.16536,0.017 -0.29935,0.0549 -0.36433,0.21983 -0.36433,0.92115 0,0.46985 -0.0358,1.28906 -0.0796,1.82015 -0.0467,0.5662 -0.0191,1.05683 0.0672,1.18617 0.081,0.1214 0.30279,-0.076 0.49299,-0.43885 0.19016,-0.36274 0.40254,-0.575 0.47181,-0.47122 0.0693,0.10377 0.11406,-2.72234 -0.0274,-2.93432 -0.0714,-0.10706 -0.1297,-0.0411 -0.1297,0.14614 0,0.18729 -0.1044,0.33898 -0.23201,0.33532 -0.19841,-0.003 -0.20326,-0.0502 -0.0331,-0.31828 0.1142,-0.18005 0.12105,-0.25755 -5.3e-4,-0.2633 z m -0.26458,4.60917 c -0.0347,0.0205 -0.0779,0.24114 -0.11988,0.63953 -0.0557,0.53054 -0.075,1.54319 -0.0434,2.25048 0.0963,2.16125 0.0682,3.44269 -0.0796,3.66416 -0.16271,0.24387 -0.0597,2.39029 0.12248,2.55214 0.0663,0.0589 0.11298,0.78233 0.10335,1.60754 -0.0172,1.47849 -0.0189,1.48377 -0.11523,0.37494 -0.0781,-0.90009 -0.10126,-0.6552 -0.11523,1.22451 -0.0111,1.494811 0.0309,2.278081 0.11523,2.151631 0.0606,-0.0909 0.10337,0.21775 0.12195,0.82742 -0.11997,0.0834 -0.25326,0.46905 -0.39997,1.18617 0.0168,0.60699 0.0279,1.24832 0.0393,1.8896 -0.002,0.0692 -7.2e-4,0.13106 0.004,0.18789 0.10261,6.050652 0.0186,13.334762 0.56481,17.672782 0.34438,-0.35219 0.35478,-2.7314 0.4532,-3.9671 0.15868,-1.69005 0.20889,-5.0472 0.15865,-8.334692 0.08,-0.0549 0.10705,-0.21387 0.0698,-0.4495 -0.0411,-0.25961 -0.0181,-0.55719 0.0517,-0.66168 0.0697,-0.10451 0.12713,-0.40665 0.12713,-0.67191 0,-0.26509 -0.0599,-0.39341 -0.13282,-0.28418 -0.0729,0.10924 -0.13229,0.0454 -0.13229,-0.14188 0,-0.18721 0.0523,-0.34043 0.11629,-0.34043 0.0641,0 -0.26379,-3.32582 -0.28938,-3.22958 -0.0256,0.0962 -0.0253,-0.0239 5e-4,-0.26757 0.0258,-0.24348 -0.0179,-0.63167 -0.0971,-0.8632 -0.10261,-0.30004 -0.10358,-0.60608 -0.002,-1.06389 0.078,-0.35332 0.12729,-0.97353 0.10903,-1.37832 -0.0212,-0.47251 0.0377,-0.73954 0.16537,-0.74562 0.1094,-0.005 0.20484,-0.225601 0.21187,-0.490401 0.007,-0.2648 0.0586,-0.73603 0.1142,-1.04684 0.0618,-0.34499 0.0213,-0.86088 -0.10385,-1.32421 -0.11285,-0.41748 -0.19997,-1.19131 -0.19381,-1.71961 0.014,-1.19099 -0.12967,-1.79354 -0.37309,-1.56707 -0.1185,0.11022 -0.18552,-0.0461 -0.18552,-0.4333 0,-0.33342 -0.0706,-0.66331 -0.15658,-0.73284 -0.0967,-0.0782 -0.0238,-0.365 0.0372,-0.75073 0.0545,-0.34306 0.0797,-0.6532 0.0569,-0.6898 -0.0229,-0.0366 0.0755,-0.27457 0.21859,-0.52832 0.22053,-0.39106 0.23374,-0.53911 0.0847,-0.97441 -0.0967,-0.28243 -0.22886,-0.43441 -0.29353,-0.33744 -0.12361,0.18519 -0.1457,-0.17035 -0.14004,-2.27306 0.002,-0.68298 -0.0283,-0.98758 -0.0729,-0.96121 z", +2.50105, 20.7737, +"M 1.99533 -20.1853 c -0.0375,-0.25789 -0.33261,-0.42551 -0.56905,-0.58839 -0.23996,0.23872 -0.47489,0.49163 -0.6009,0.8121 -0.0812,0.48893 -0.29007,0.81482 -0.38877,1.29015 0.002,0.54267 -0.41169,0.99749 -0.40079,1.54481 -0.29754,0.24097 -0.55536,0.37238 -0.50367,0.84202 0.0614,0.57416 -0.22723,1.12925 -0.28672,1.7031 -0.14255,0.60343 -0.28189,1.20471 -0.38066,1.8095 -0.0293,0.59441 -0.2814,1.18246 -0.12046,1.75323 -0.2131,-0.15862 -0.45105,-0.0488 -0.16056,0.12001 -0.0693,0.38384 -0.39321,0.81136 -0.33681,1.29405 0.0267,0.64265 -0.0113,1.27603 -0.14224,1.89832 -0.003,0.60064 -0.10155,1.21537 -0.24239,1.79332 -0.22967,0.32796 0.15308,0.6786 0.11208,1.04197 0.2095,-0.3435 0.24518,-0.79906 0.5964,-1.0637 0.58133,0.18835 0.24969,0.75808 0.31901,1.19987 -0.26469,0.52559 -0.0489,0.91024 0.47559,1.11661 0.25093,-0.0203 0.43656,0.83787 0.43804,0.4442 -0.0618,-0.51559 0.4207,-0.87267 0.41211,-1.37583 0.013,-0.55963 0.17412,-1.11826 0.20939,-1.67553 -0.40638,-0.35369 -0.56249,-0.94788 -0.16108,-1.40288 -0.26584,-0.54166 0.46688,-1.0424 -0.027,-1.55948 -0.72899,-0.49884 0.91668,-0.76908 0.36771,-1.29742 0.0275,0.33925 -0.48808,0.48735 -0.42907,0.0774 0.21303,-0.33662 0.68355,-1.28644 0.0603,-1.29291 -0.1772,-0.18811 -0.2848,-1.18628 0.34402,-1.22453 0.56288,-0.22657 -0.41458,0.0439 -0.23023,-0.39889 0.21834,-0.27814 0.12847,-0.9857 0.5386,-0.9766 0.24676,0.4666 0.0743,-0.15601 -0.0145,-0.31345 0.32655,-0.0856 0.16625,-0.26335 0.21161,-0.564 -0.17635,-0.4556 0.40637,-0.92508 0.0292,-1.47058 -0.0333,-0.47745 0.11583,-1.16532 0.30655,-1.6979 0.30437,-0.47718 0.2963,-1.07386 0.51455,-1.54766 0.0565,-0.10923 0.0727,-0.20496 0.0598,-0.29086 z m -0.67527,5.18673 c -0.005,-0.0207 -0.0401,-0.0511 -0.1331,-0.0891 -0.12685,0.13115 0.14583,0.15153 0.1331,0.0891 z m -0.51447,2.32592 c -0.01,-0.026 -0.0378,-0.0564 -0.0928,-0.089 -0.1546,0.23186 0.13611,0.20162 0.0928,0.089 z m -0.55676,9.92556 c -0.004,-0.0178 -0.0117,-0.0421 -0.0244,-0.0749 l -3.8e-4,8e-5 c -0.10421,-0.01 0.0523,0.1987 0.0247,0.0748 z m -0.40593,0.62749 c -0.029,-0.13397 -0.065,-0.26569 -0.10661,-0.39404 -0.0954,0.0982 -0.57871,0.21425 -0.47507,0.55849 0.0692,0.55607 -0.16309,0.96182 -0.64341,1.21137 -0.634,0.49658 -0.78164,-0.34647 -0.88631,-0.80154 -0.48235,0.13084 -0.0802,0.8574 0.0167,1.20292 -0.36114,0.39753 0.0177,1.11042 -0.11524,1.68891 -0.23801,0.62967 0.24476,1.16486 0.31513,1.76431 0.0279,0.59829 0.024,1.19727 0.091,1.79736 l 3.7e-4,-8e-5 c -5.9e-4,0.16055 0.01,0.32283 0.0418,0.48106 0.14355,0.59006 0.21051,0.10446 0.26051,-0.22378 -0.0205,-0.63973 -0.27186,-1.28964 0.006,-1.90725 0.12037,-0.14839 0.19349,-0.5856 0.41752,-0.32353 0.46234,0.3705 0.3394,1.09108 0.53985,1.60971 0.27126,0.36763 0.39796,0.77484 0.51709,1.26206 -0.002,-0.30581 -0.0844,-1.00791 0.24199,-1.29206 0.11117,-0.32729 -0.38379,-0.91151 -0.20475,-1.38978 0.34489,-0.30119 -0.033,-0.25259 -0.0944,-0.49538 -0.24459,-0.22385 -0.04,-0.56816 -0.16501,-0.76622 -0.1494,-0.4034 -0.40711,-0.71884 -0.52267,-1.12154 -0.24067,-0.7641 0.5871,-1.03146 0.79857,-1.63 0.0764,-0.40778 0.0532,-0.8291 -0.0337,-1.23099 z m 0.89502,9.36585 c -0.0536,-0.20202 -0.20583,-0.37279 -0.33916,-0.2913 0.0256,0.46608 -0.22812,0.1812 -0.20758,-0.11481 0.50238,-0.20886 -0.136,-0.53619 -0.35884,-0.67825 -0.19176,0.37421 -0.0305,0.92091 -0.0919,1.3655 0.20082,0.60747 -0.0474,1.25588 0.23051,1.83712 0.46931,0.45584 0.1681,1.16914 0.30673,1.73368 -0.0209,1.03972 0.15888,2.08076 0.41848,3.08564 0.2179,0.9083 0.43884,1.83468 0.46756,2.76969 l -3.8e-4,8e-5 c -0.0559,0.1059 -0.0189,0.23303 -0.009,0.34529 -0.0466,0.49251 0.47733,1.10683 0.86726,0.99131 0.0869,-0.81136 -0.1849,-1.61553 -0.23186,-2.42464 -0.0153,-0.79202 -0.18322,-1.5676 -0.33686,-2.34287 -0.2662,-0.49125 0.35995,-0.65771 -0.11227,-1.06692 -0.29724,-0.73686 -0.33568,-1.55313 -0.49201,-2.32897 -0.13547,-0.6156 -0.29699,-1.09551 -0.32023,-1.74958 -0.42463,-0.16399 -0.2469,-0.50188 0.0726,-0.6905 0.13034,-0.0698 0.16881,-0.21103 0.15303,-0.35262 -0.003,-0.0295 -0.009,-0.059 -0.0165,-0.0878 z m -2.57871,-11.32017 c -0.2708,-0.55639 -0.38057,-0.0872 -0.31795,0.29402 l -0.0116,0.0821 c -0.0994,0.78435 0.40245,-0.0619 0.32958,-0.37609 z m 4.33185,23.83573 c -0.0258,-0.0834 -0.10025,-0.11446 -0.21568,0.0379 -0.0385,0.0658 -0.10012,0.12716 -0.0971,0.2101 0.26257,0.17623 0.35541,-0.10828 0.31288,-0.24765 z m -0.18954,-0.48941 c -0.002,-0.0411 -0.0436,-0.0877 -0.15571,-0.12611 -0.17795,0.32518 0.16312,0.24936 0.15571,0.12611 z m -3.39268,-11.78328 c -0.007,-0.0222 -0.015,-0.0442 -0.0268,-0.0646 -0.39951,-0.3938 -0.32809,-1.07152 -0.63904,-1.49675 0.0493,0.59576 0.19414,1.18256 0.32136,1.76612 0.004,0.62023 0.44185,0.12916 0.34453,-0.20475 z m 2.27835,12.58899 c -0.0101,-0.0525 -0.027,-0.0984 -0.0521,-0.13269 -0.007,-0.44623 -0.38635,-0.40063 -0.30696,0.0345 -6.4e-4,0.18442 0.0187,0.36863 0.0509,0.55019 0.11903,0.61469 0.37941,-0.0844 0.30817,-0.45198 z m -3.29846,-15.55671 c -0.007,-0.0317 -0.0473,-0.0578 -0.14608,-0.0599 -0.11114,0.30062 0.16683,0.15497 0.14608,0.0599 z", +1.65654, 15.5833, +"M 1.65648 7.45006 c -0.014,-0.2553 -0.50256,-0.33488 -0.51056,-0.80616 -0.15816,0.27247 -0.44145,0.24588 -0.34003,-0.16846 0.52996,-0.0216 0.43279,-0.95853 0.27957,-1.38131 -0.46566,0.32298 -1.49686,0.71091 -1.96216,0.28887 0.47799,-0.50839 -0.10776,-0.98406 0.0393,-1.53376 0.24102,-1.11239 1.05865,-0.30535 1.5689,0.0594 0.29417,-0.54317 -0.42213,-1.43185 -0.2713,-2.12699 0.053,-0.33438 -0.14256,-0.76674 0.18035,-0.99478 0.74093,-0.4137 0.071,-1.20457 0.48731,-1.77662 0.16189,-0.87009 0.12472,-1.775858 0.0253,-2.653088 -0.37764,-0.45524 0.11408,-0.79274 0.0103,-1.24229 -0.0546,-1.40989 0.11322,-2.83197 0.009,-4.24522 -0.18099,-0.66609 0.36361,-1.5512 -0.2403,-2.13217 -0.76022,-0.19291 -1.74581,-0.46318 -1.47846,-1.48984 0.23135,-0.3261 0.005,-1.03309 -0.27595,-0.47181 -0.1149,1.29353 -0.0485,2.59721 -0.0899,3.89486 0.0166,1.91664 -0.15304,3.83585 -0.0129,5.74952 -0.10524,0.84254 -0.15444,1.608928 -0.11524,2.481498 -0.1778,1.05201 -0.0675,2.11953 -0.11111,3.18223 -0.0119,0.29604 0.0774,0.64029 -0.25631,0.78393 h -5.2e-4 c -0.29571,0.18497 -0.24881,0.55168 -0.24081,0.84905 0.12861,0.90109 0.33978,-0.31956 0.34778,-0.59272 0.25303,0.5402 0.0916,1.52043 0.1478,2.22414 -0.0982,0.37068 0.22385,1.646 -0.31678,1.42214 0.003,0.32776 -0.0945,1.3313 0.0145,1.937875 -0.20501,0.86879 0.24098,1.79626 -0.0889,2.66081 0.58049,0.22895 -0.1934,0.54647 0.0367,1.02682 0.20168,0.73761 0.51285,1.49881 0.25838,2.27219 -0.43599,0.48255 0.11253,1.05024 0.3359,0.29043 0.1027,-1.16376 -0.0313,-2.33825 0.0682,-3.50416 0.18831,-1.09985 0.14716,0.68392 0.80718,0.4754 0.30346,0.13933 1.74688,-0.14938 0.9679,-0.23408 -0.58672,-0.4472 0.61164,-1.04584 0.54674,-1.60403 -0.11252,-0.73311 -0.62171,-1.66272 0,-2.307345 0.13633,-0.14516 0.18483,-0.24977 0.17983,-0.33489 z m -0.94413,-22.308708 c -0.13146,-0.53592 -0.80296,-1.00793 -1.25935,-0.52142 -0.21226,0.79762 0.82396,0.58812 1.25935,0.52142 z m -0.25166,28.192583 c 5.1e-4,-0.0774 -0.0451,-0.16422 -0.17674,-0.2346 -0.24185,0.61669 0.17474,0.46696 0.17674,0.2346 z m -0.27799,2.11821 c 0.006,-0.0684 -0.0265,-0.1592 -0.1323,-0.26303 -0.24658,0.46943 0.11469,0.4681 0.1323,0.26303 z m -1.26453,-22.438413 c -10e-4,-0.053 -0.009,-0.11049 -0.0264,-0.17208 0.003,-0.25223 -0.003,-1.72141 -0.21342,-1.21079 -0.0657,0.43773 -0.0695,0.88514 -0.0537,1.32707 -0.0378,0.55499 0.30152,0.42662 0.29352,0.0558 z m -0.0667,3.28145 c -0.004,-0.0288 -0.0281,-0.0608 -0.0847,-0.092 -0.26244,0.28511 0.10135,0.21687 0.0847,0.092 z m -0.2961,17.933793 c -0.005,-0.0297 -0.0175,-0.0677 -0.0413,-0.11629 -0.28174,0.10517 0.0752,0.32372 0.0413,0.11629 z", +1.55663, 17.8159, +"M 0.508125 -17.8159 c 1.02192,1e-5 1.04851,0.0236 1.04851,0.92603 0,0.50934 -0.0799,0.92605 -0.17722,0.92606 -0.0974,1e-5 -0.15454,0.62507 -0.1266,1.38906 0.17088,4.66959 0.17679,7.8749 0.0145,8.03725 -0.10277,0.10281 -0.17864,0.3752 -0.16849,0.60563 0.0138,0.31029 0.0797,0.28188 0.25371,-0.11012 0.17857,-0.4021 0.22525,-0.2592 0.19434,0.59428 -0.0224,0.61778 -0.15187,1.23396 -0.28734,1.36941 -0.13546,0.13548 -0.29046,2.54681 -0.34467,5.35886 -0.0542,2.812 -0.21156,5.58913 -0.34933,6.17119 -0.48698,2.0578 -0.57684,2.66036 -0.60202,4.02459 -0.014,0.75831 -0.10149,1.33161 -0.19432,1.27433 -0.0929,-0.0571 -0.0568,0.64262 0.0796,1.55544 0.13639,0.91283 0.16059,2.12362 0.0542,2.69079 -0.17825,0.95039 -0.22183,0.99291 -0.55449,0.53795 -0.29134,-0.398 -0.34675,-2.15278 -0.28836,-9.05164 0.0598,-7.06382 0.0117,-8.50695 -0.27647,-8.26772 -0.47407,0.39347 -0.44992,-0.0548 0.0542,-1.00148 0.26051,-0.48899 0.38793,-1.36812 0.35966,-2.47788 -0.0242,-0.94587 0.04,-3.28537 0.14265,-5.19866 0.18216,-3.39463 0.32775,-9.3534 1.16794,-9.35337 z", +1.17205, 11.7473, +"M 1.02268 -10.861 c 0.1091,0.1814 0.17719,0.37632 0.13837,0.50034 -0.0351,0.11193 -0.27619,0.1724 -0.53581,0.13446 -0.37479,-0.0547 -0.43967,0.0318 -0.3153,0.41964 0.0861,0.2686 0.0411,0.54794 -0.0997,0.62149 -0.25308,0.13194 -0.18099,1.81839 0.10401,2.43261 0.0809,0.17447 0.095,0.4829 0.0316,0.68524 -0.0634,0.20236 -0.0497,0.46476 0.0303,0.58334 0.25808,0.3824 -0.27881,17.31188 -0.58526,17.230934 -0.163,-0.04269 -0.48752,-0.232899 -0.72224,-0.421235 -0.33692,-0.271053 -0.32403,-0.457558 0.0633,-0.889384 0.26957,-0.300525 0.40319,-0.70571 0.29707,-0.900197 -0.34087,0.04626 0.15589,-9.963114 -0.40834,-15.903028 0.12837,-0.35962 0.16399,-0.9136 0.0792,-1.23105 -0.0848,-0.31748 -0.12098,-0.89469 -0.0803,-1.28251 0.0407,-0.38778 -0.003,-1.16267 -0.0972,-1.72233 -0.12675,-0.75336 -0.0633,-1.00192 0.24376,-0.95706 0.22809,0.0334 0.44313,-0.031 0.47827,-0.14277 0.0351,-0.11192 0.19636,-0.007 0.35828,0.23297 0.16257,0.24082 0.3604,0.33132 0.44178,0.2019 0.10143,-0.16052 0.39628,0.10439 0.57817,0.40666 z", +1.95058, 13.6269, +"M 0.471013 -13.6265 c -0.0226,0.002 -0.0393,0.019 -0.0481,0.0517 -0.0351,0.13069 -0.24992,0.20591 -0.47799,0.16691 -0.30708,-0.0524 -0.37068,0.23818 -0.24392,1.1188 0.0942,0.65419 0.13785,1.56002 0.0971,2.01331 -0.0407,0.45333 -0.004,1.12802 0.0806,1.49913 0.0848,0.37107 0.0488,1.01882 -0.0796,1.43919 -0.20937,0.68561 -0.0718,1.6412 0.37155,2.62827 -0.11168,0.0113 -0.23463,0.0283 -0.38137,0.0563 -0.6455,0.12341 -0.72607,0.25452 -0.72607,1.18184 -1.6e-4,0.62786 -0.10541,0.97834 -0.26458,0.87954 -0.16997,-0.10511 -0.26459,0.835241 -0.26459,2.630332 0,1.81333 -0.0999,2.79364 -0.28421,2.79363 h -5e-4 c -0.15627,-2e-5 -0.23813,0.20835 -0.18243,0.46302 0.0557,0.25469 0.2427,0.43297 0.416,0.39687 0.21384,-0.0449 0.3152,0.40637 0.31522,1.40457 0,0.91314 -0.10041,1.40916 -0.26458,1.30741 -0.16825,-0.10405 -0.25207,0.54034 -0.22998,1.77042 0.0279,1.54684 0.074,1.74841 0.22998,1.0077 0.19206,-0.91245 0.19513,-0.90816 0.22945,0.3085 0.0192,0.67909 -0.0733,1.27442 -0.20569,1.32292 -0.36356,0.1332 -0.56917,1.89947 -0.24442,2.10013 0.29488,0.18225 0.69575,0.93239 0.58706,0.65009 -0.12179,-0.3174 -0.0778,-0.55313 0.11522,-0.61753 0.17206,-0.0571 0.3121,-0.3287 0.31213,-0.60307 3.4e-4,-0.31822 0.13407,-0.44675 0.37052,-0.35605 0.4857,0.18639 0.77203,-0.30974 0.74414,-1.28984 -0.41298,-4.18519 -0.41174,-10.39178 -0.21031,-12.921172 0.13216,0.0905 0.25572,0.15931 0.33795,0.18449 0.30644,0.0946 0.84307,-3.81941 0.58497,-4.26641 -0.08,-0.13861 -0.0934,-0.44506 -0.0299,-0.68161 0.0634,-0.23652 0.0494,-0.59705 -0.0315,-0.80099 -0.28499,-0.71796 -0.35746,-2.68952 -0.10438,-2.84375 0.14078,-0.086 0.18584,-0.4126 0.0997,-0.72657 -0.12435,-0.45333 -0.0596,-0.55441 0.31522,-0.49041 0.25964,0.0444 0.50081,-0.0263 0.53589,-0.15709 0.0388,-0.14498 -0.0294,-0.37294 -0.13848,-0.58498 -0.1819,-0.35333 -0.4763,-0.66307 -0.57775,-0.47543 -0.0814,0.15128 -0.27926,0.0453 -0.44182,-0.23616 -0.12145,-0.21024 -0.24284,-0.33152 -0.31057,-0.32401 z", +0.746818, 13.5457, +"M 0.651624 -11.1239 c 0.0695,0.49565 0.1129,1.02826 0.0882,1.36713 -0.0224,0.30582 -0.17599,0.47106 -0.34142,0.36739 -0.23882,-0.1496 -0.28016,0.087 -0.20091,1.14663 0.0549,0.73391 0.0262,1.49718 -0.0635,1.69814 -0.16126,0.36052 -0.11532,4.968579 0.0663,6.646849 0.0516,0.47672 0.0605,1.31946 0.0201,1.87234 -0.0404,0.55294 -0.0317,1.2699 0.0193,1.59391 0.16445,1.04487 -0.17766,10.194453 -0.37293,9.973273 -0.10386,-0.11664 -0.31064,-0.63636 -0.46021,-1.15097 -0.21468,-0.74062 -0.20647,-1.25023 0.0403,-2.43014 0.17177,-0.82115 0.25691,-1.928273 0.18929,-2.459683 -0.30256,-2.37873 -0.39749,-4.69547 -0.26019,-6.34493 0.0818,-0.98262 0.10449,-2.49631 0.0505,-3.363699 -0.054,-0.86748 -0.0771,-2.44465 -0.0512,-3.50432 0.0259,-1.05958 -0.002,-3.17689 -0.0619,-4.70608 -0.0808,-2.05847 -0.0403,-2.73764 0.15533,-2.61506 0.14533,0.0912 0.28236,-0.0846 0.30475,-0.39011 0.0224,-0.30582 0.12512,-0.0187 0.22829,0.63658 0.10359,0.65802 0.22965,0.90528 0.2815,0.55166 0.0646,-0.43862 0.25251,0.28522 0.36841,1.11114 z", +1.38957, 16.4755, +"M 0.138886 -16.4755 -1.35549,1.84795 c 0.27683,0.42497 0.50699,1.05938 0.54983,1.48879 0.0601,0.48725 0.0332,0.97552 -0.0119,1.46658 -0.0892,-0.49054 -0.17108,-0.69618 -0.19068,-0.4284 -0.0224,0.30551 -0.15905,0.48136 -0.30438,0.39016 -0.19563,-0.12258 -0.23635,0.55687 -0.15555,2.61535 0.0599,1.52918 0.0879,3.64658 0.062,4.70617 -0.0259,1.05967 -0.003,2.63669 0.0512,3.50417 0.054,0.86739 0.0311,2.381 -0.0506,3.36362 -0.13732,1.64946 -0.0421,3.96611 0.26043,6.34484 0.0676,0.5314 -0.0179,1.63864 -0.18966,2.45979 -0.24675,1.17991 -0.25497,1.68972 -0.0403,2.43035 0.12094,0.41612 0.27699,0.82396 0.38809,1.03094 -0.25501,0.55068 -0.28125,1.13805 -0.22479,1.73064 l 1.4609,-0.003 c 0.0168,-0.42614 0.0252,-0.85476 0.0677,-1.27434 0.25389,-1.34995 0.14287,-2.66726 0.36689,-4.02611 0.031,-1.4516 0.11288,-2.8398 0.19175,-4.25762 0.12581,-1.2814 -0.13108,-2.63661 0.16224,-3.91397 -0.10988,-1.37381 -0.11983,-2.74916 -0.14417,-4.11603 0.0786,-1.41425 -0.2367,-2.81377 -0.12764,-4.19458 -0.0646,-1.50176 -0.23391,-3.00258 -0.21238,-4.4483 0.78798,-0.10067 0.97116,-1.25283 0.22117,-1.50379 0.42751,0.71673 -0.5987,0.75403 -0.39428,0.0444 0.49067,-0.38166 0.47429,-0.58582 0.0196,-0.82733 0.15126,-1.10944 -0.28977,-2.18413 -0.17312,-3.35639 -0.008,-0.38118 -0.13687,-0.71882 -0.22635,-1.07229 z m -0.46355,8.37158 c 0.0189,0.005 0.0414,0.0166 0.0641,0.0295 0.11988,0.62091 -0.0121,1.26337 -0.16021,1.91254 5.9e-4,-0.24158 -0.005,-0.49741 -0.0243,-0.75809 -0.0694,-0.92718 -0.0464,-1.22436 0.12041,-1.18391 z m -0.25374,3.57756 c 0.0898,0.93296 0.42876,1.87606 0.6594,2.79259 0.23042,1.45009 0.26061,2.8781 -0.008,4.3031 -0.24439,1.27673 -0.30588,2.48657 0.0294,3.77031 -0.13909,1.17698 -0.45156,2.32446 -0.53951,3.48144 0.0761,-2.22329 0.11075,-4.44633 0.0346,-4.92993 -0.051,-0.32401 -0.06,-1.04076 -0.0196,-1.5937 0.0404,-0.55288 0.0314,-1.39552 -0.0202,-1.87224 -0.1455,-1.34446 -0.20132,-4.53663 -0.13592,-5.95157 z m 0.0796,15.91375 c 0.14541,0.99939 0.5629,2.03294 -0.10957,2.94194 -0.0303,0.0418 -0.0541,0.0847 -0.0811,0.12713 0.0646,-0.57923 0.13222,-1.74103 0.19069,-3.06907 z", +2.34195, 11.5159, +"M 2.34146 -4.20638 c 0.002,0.0553 -0.002,0.11609 -0.0145,0.17985 -0.0644,0.3366 -0.42979,0.50248 -1.33841,0.60719 -0.68743,0.0792 -1.29195,0.0792 -1.34307,0 -0.0514,-0.079 -0.0507,0.0201 4.4e-4,0.22012 0.0516,0.20034 -0.0357,0.52005 -0.19353,0.71065 -0.20476,0.24688 -0.20659,0.49864 -0.005,0.87541 0.15568,0.29074 0.2535,0.80116 0.21707,1.13429 -0.0424,0.38883 0.0761,0.60836 0.33071,0.6134 0.21831,0.004 0.40817,0.18566 0.42215,0.40362 0.014,0.21788 0.11684,0.60569 0.22773,0.8615 0.12326,0.2839 0.0426,0.70855 -0.20724,1.08985 -0.22511,0.34352 -0.39934,0.98017 -0.38738,1.41481 0.0279,0.9801 -0.25842,1.47623 -0.74413,1.28984 -0.23645,-0.0907 -0.37001,0.038 -0.37035,0.35622 -2e-5,0.27437 -0.14008,0.54597 -0.31215,0.60306 -0.19306,0.0644 -0.23703,0.30013 -0.11526,0.61753 0.10871,0.2823 0.15952,0.5378 0.11365,0.56793 -0.0459,0.0299 0.15058,0.22581 0.4361,0.43468 0.44013,0.32178 0.46571,0.44377 0.1685,0.80197 -0.19293,0.23238 -0.45647,0.35733 -0.58549,0.27753 -0.2465,-0.15271 -0.29031,0.14035 -0.27906,1.87067 0.007,0.99916 -0.004,1.01393 -0.19528,0.26464 -0.11079,-0.43669 -0.15026,-1.27006 -0.0873,-1.8521 0.19222,-1.77852 0.13676,-2.83306 -0.15812,-3.01531 -0.32475,-0.20066 -0.11915,-1.96693 0.24443,-2.10013 0.13238,-0.0485 0.2249,-0.64383 0.20567,-1.32292 -0.0343,-1.21666 -0.0374,-1.22096 -0.22946,-0.30851 -0.15593,0.74072 -0.20203,0.53914 -0.22995,-1.0077 -0.0221,-1.23009 0.0617,-1.87448 0.22995,-1.77043 0.16417,0.10175 0.26459,-0.39427 0.2646,-1.30741 -2e-5,-0.99819 -0.10145,-1.44949 -0.31528,-1.40457 -0.17329,0.0361 -0.36031,-0.1422 -0.41598,-0.39689 -0.0557,-0.25466 0.0262,-0.46301 0.18245,-0.463 h 5.2e-4 c 0.18433,1e-5 0.28421,-0.9803 0.28422,-2.79364 0,-1.79509 0.0946,-2.73543 0.26457,-2.63032 0.15915,0.0988 0.2644,-0.25166 0.26456,-0.87952 -1e-5,-0.92732 0.0806,-1.05844 0.72609,-1.18185 0.97706,-0.18674 1.12602,-0.0503 1.126,1.03409 10e-6,0.63956 -0.0957,0.86695 -0.30949,0.73485 -0.21128,-0.13012 -0.25315,-0.0441 -0.13229,0.27076 0.0974,0.25407 0.17731,0.63077 0.17721,0.83716 -2e-5,0.20637 0.19145,0.37518 0.42527,0.37521 0.26515,2e-5 0.36883,0.14645 0.27599,0.38857 -0.082,0.21364 -0.0353,0.45868 0.10391,0.54466 0.13913,0.086 0.2532,0.33466 0.2532,0.55296 -7e-5,0.21815 -0.11907,0.32343 -0.26457,0.23359 -0.14556,-0.0898 -0.26459,-0.0373 -0.2646,0.11674 -8e-5,0.15409 0.10469,0.28009 0.23249,0.28014 0.12785,-1e-5 0.38035,0.35716 0.56117,0.79376 0.18081,0.4366 0.44232,0.79375 0.58084,0.79377 0.10393,0 0.17072,0.11718 0.1778,0.28317 z", +1.43162, 19.3805, +"M -0.137187 -19.38 c -0.0842,-0.005 -0.19127,0.031 -0.32713,0.0946 -0.35901,0.16796 -0.4036,0.34656 -0.4036,1.60868 -7e-5,0.85455 -0.0588,1.3313 -0.14726,1.19683 -0.0946,-0.14306 -0.14727,1.13695 -0.14727,3.58014 -3e-5,2.46804 -0.0551,3.80237 -0.15761,3.80236 h -5.3e-4 c -0.0869,-10e-6 -0.13229,0.28333 -0.10128,0.62993 0.031,0.34665 0.13459,0.58964 0.23098,0.54054 0.11895,-0.0611 0.17571,0.55293 0.17571,1.91151 0,1.24282 -0.056,1.9177 -0.14727,1.77922 -0.0936,-0.14162 -0.14047,0.73546 -0.12816,2.409662 0.0155,2.10531 0.0415,2.37964 0.12816,1.37149 0.10681,-1.24188 0.10853,-1.23579 0.12764,0.42013 0.0107,0.92427 -0.0411,1.73441 -0.11473,1.80041 -0.20225,0.1813 -0.31652,2.58511 -0.13591,2.85822 0.16401,0.24805 0.19476,1.6835 0.0879,4.104145 -0.035,0.792181 -0.013,1.926426 0.0485,2.520775 0.10663,1.019821 0.11306,0.999718 0.10907,-0.360182 -0.006,-2.355041 0.0179,-2.753938 0.15502,-2.546099 0.0718,0.108619 0.21825,-0.06148 0.32557,-0.377759 0.16531,-0.48752 0.15123,-0.65344 -0.0936,-1.0914 -0.15883,-0.28428 -0.26837,-0.551 -0.24286,-0.5917 0.0255,-0.041 -0.003,-0.38885 -0.063,-0.77308 -0.0677,-0.43199 -0.0433,-0.75256 0.0641,-0.84026 0.0957,-0.0777 0.17362,-0.44719 0.17362,-0.82062 1.8e-4,-0.43313 0.0747,-0.60869 0.20619,-0.48524 0.27014,0.25368 0.42944,-0.42149 0.41394,-1.75545 -0.007,-0.59156 0.0903,-1.45792 0.21548,-1.92546 0.13896,-0.51897 0.18375,-1.09672 0.11525,-1.48312 -0.0617,-0.348152 -0.11914,-0.875982 -0.12713,-1.172522 -0.008,-0.29666 -0.11319,-0.54484 -0.23461,-0.54984 -0.14163,-0.007 -0.20757,-0.30536 -0.18396,-0.83457 0.0203,-0.45341 -0.0338,-1.14839 -0.12042,-1.5441 -0.11189,-0.5128 -0.11128,-0.85512 0.003,-1.19114 0.0877,-0.25941 0.13668,-0.69471 0.108,-0.96738 -0.0285,-0.2722 -0.0291,-0.40724 -5.3e-4,-0.29972 0.025,0.0947 0.29102,0.10153 0.61341,0.03 0.0405,0.52236 0.0906,1.04394 0.0915,1.57561 -0.0608,0.60189 -0.078,1.11737 -0.0465,1.74821 0.0696,0.63278 0.297,1.09496 0.0998,1.78077 -0.058,0.73385 0.0101,1.474622 0.002,2.207102 -0.0197,0.81022 0.0418,1.60891 0.004,2.4262 -0.0875,0.63698 -0.0763,1.43498 -0.22429,1.9482 0.12394,0.22305 0.34293,0.21881 0.24702,0.84078 -0.0607,1.1452 -0.0473,2.30122 -0.0796,3.45147 0.0458,0.825198 -0.0683,1.62066 -0.093,2.435508 0.0204,1.1895 -0.1012,2.349915 -0.17311,3.516066 -0.0662,0.696058 -0.0537,1.411333 -0.0966,2.110981 -0.0148,0.25309 -0.0926,0.598914 0.0625,0.599964 0.29631,0.0457 0.33951,0.87489 0.30128,1.493449 -0.10774,0.477189 0.0255,1.113514 0.0103,1.577165 l 0.14004,-0.146246 c 0.0399,-0.520959 0.0745,-1.044482 0.11576,-1.564762 0.18883,-2.023379 0.28009,-4.091098 0.39534,-6.147427 0.0855,-1.171151 0.0493,-2.370113 0.13795,-3.538798 -0.0101,-0.73951 0.0498,-1.47317 0.032,-2.21279 0.0113,-0.74373 0.0533,-1.47966 0.0351,-2.2226 0.0413,-0.71668 -0.0126,-1.40059 -0.001,-2.13166 0.0365,-0.74313 0.0171,-1.48879 -0.0109,-2.22673 0.07,-0.4474 -0.0966,-1.347812 0.0646,-1.455202 -0.015,0.783202 0.13674,0.20012 0.1297,-0.24288 -0.002,-0.28913 -0.0311,-1.39426 -0.15089,-0.66404 0.14613,0.14266 -0.0403,0.66546 -0.10491,0.6289 0.1066,-0.45472 0.0111,-0.96117 0.0522,-1.43971 0.15606,-0.65158 0.0842,-1.40153 -0.077,-1.97559 -0.0905,-0.69785 -0.11025,-1.42475 -0.13901,-2.14043 -0.009,-0.18957 -0.0222,-0.37781 -0.0341,-0.56689 0.11245,-0.13013 0.17013,-0.29776 0.18757,-0.5209 0.007,-0.0868 0.009,-0.16965 0.008,-0.24495 h -5.3e-4 c -0.004,-0.22592 -0.0414,-0.3855 -0.0992,-0.3855 -0.0459,-2e-5 -0.11597,-0.18397 -0.18653,-0.44959 -10e-4,-0.0362 -0.004,-0.0729 -0.005,-0.10904 0.003,-0.57553 -0.0511,-1.12705 -0.10387,-1.6769 h -0.001 l -0.26149,0.19689 c -0.0296,-0.0724 -0.0569,-0.12196 -0.0775,-0.12196 -0.0711,-7e-5 -0.12922,-0.17164 -0.12916,-0.38137 0,-0.20968 0.0663,-0.28087 0.14726,-0.15864 0.0809,0.12226 0.14724,-0.0209 0.14727,-0.31781 0,-0.29713 -0.0637,-0.63588 -0.14108,-0.75293 -0.0774,-0.11702 -0.10347,-0.45026 -0.0579,-0.74104 0.0516,-0.32953 -0.006,-0.52914 -0.15349,-0.52917 -0.13004,-4e-5 -0.23669,-0.22969 -0.23667,-0.51056 0,-0.28091 -0.044,-0.79366 -0.0982,-1.13947 -0.0672,-0.42852 -0.0441,-0.54555 0.0734,-0.36845 0.11893,0.17979 0.17208,-0.12947 0.17208,-0.99994 3e-5,-1.10695 -0.0466,-1.48805 -0.29919,-1.50223 z", +1.43294, 9.17485, +"M 0.959443 6.24537 c 0.0279,0.9801 -0.25842,1.47623 -0.74413,1.28984 -0.23645,-0.0907 -0.37001,0.038 -0.37035,0.35622 -2e-5,0.27437 -0.14008,0.54597 -0.31215,0.60306 -0.19306,0.0644 -0.23703,0.30013 -0.11526,0.61753 0.10871,0.2823 -0.29212,-0.46774 -0.587,-0.64999 -0.32475,-0.20066 -0.11915,-1.96693 0.24443,-2.10013 0.13238,-0.0485 0.2249,-0.64383 0.20567,-1.32292 -0.0343,-1.21666 -0.0374,-1.22096 -0.22946,-0.30851 -0.15593,0.74072 -0.20203,0.53914 -0.22995,-1.0077 -0.0221,-1.23009 0.0617,-1.87448 0.22995,-1.77043 0.16417,0.10175 0.26459,-0.39427 0.2646,-1.30741 -2e-5,-0.99819 -0.10145,-1.44949 -0.31528,-1.40457 -0.17329,0.0361 -0.36031,-0.1422 -0.41598,-0.39689 -0.0557,-0.25466 0.0262,-0.46301 0.18245,-0.463 h 5.2e-4 c 0.18433,1e-5 0.28421,-0.980298 0.28422,-2.793628 0,-1.79509 0.0946,-2.73543 0.26457,-2.63032 0.15915,0.0988 0.2644,-0.25166 0.26456,-0.87952 -1e-5,-0.92732 0.0806,-1.05844 0.72609,-1.18185 0.97706,-0.18674 1.12602,-0.0503 1.126,1.03409 10e-6,0.63956 -0.0957,0.86695 -0.30949,0.73485 -0.49107,-2.81613 -0.76298,7.511348 -0.16401,13.581278 z", +0.865975, 16.9234, +"M 0.579895 11.5198 c 0.0168,1.80783 -0.15617,2.72296 -0.4497,2.37916 -0.14289,-0.1673 -0.22361,0.0701 -0.22381,0.65706 -10e-6,0.50609 -0.0846,1.00706 -0.18865,1.11237 -0.11667,0.11879 -0.14325,0.5536 -0.0697,1.13906 0.0657,0.52071 -0.17654,-0.86277 -0.35474,-1.19894 -0.19626,-0.37012 -0.072,-3.62807 0.14772,-3.87377 0.08,-0.0895 0.13591,-1.18757 0.12429,-2.44017 -0.0208,-2.24418 -0.0226,-2.25211 -0.13867,-0.56906 -0.0942,1.36629 -0.1221,0.99446 -0.13897,-1.85874 -0.0133,-2.26895 0.0373,-3.45755 0.13897,-3.26563 0.0992,0.18768 0.1599,-0.72725 0.15991,-2.41157 -10e-6,-1.8412 -0.0613,-2.67364 -0.19055,-2.59078 -0.10472,0.0666 -0.21773,-0.26229 -0.25139,-0.73208 -0.0337,-0.46973 0.0158,-0.85404 0.11023,-0.85402 h 3.2e-4 c 0.11135,2e-5 0.17176,-1.8082 0.17176,-5.15295 0,-3.31112 0.0571,-5.04561 0.1599,-4.85173 0.0962,0.18224 0.15978,-0.4642 0.15987,-1.62232 0,-1.71048 0.0487,-1.95233 0.4388,-2.17997 0.59049,-0.34444 0.6805,-0.0928 0.68049,1.90742 10e-6,1.17971 -0.0578,1.59914 -0.18703,1.35547 -0.29677,-5.19447 -0.46111,13.85497 -0.0991,25.05119 z", +0.920438, 15.73, +"M 0.600428 -15.73 -0.20928,0.13642 c 0.0116,0.10797 -0.008,0.20908 -0.10025,0.29611 -0.24135,0.42805 0.0459,1.00331 -0.24961,1.42213 0.2354,0.42752 0.12838,0.94985 0.13438,1.42472 0.10674,0.60433 -0.83865,0.28316 -0.87696,0.59066 0.2572,0.43226 -0.0173,0.8381 -0.0377,1.27641 0.21408,0.45321 -0.16298,0.88129 0.0558,1.32705 -0.23974,0.30068 0.19899,0.60454 -0.0589,0.92553 -0.006,0.92527 -0.0266,1.85081 -0.0517,2.77606 0.0152,0.4801 -0.0752,1.02655 0.1478,1.45779 -0.25858,-0.0769 -0.30935,0.24479 -0.16174,0.47594 -0.075,0.46382 0.1289,0.91188 -0.016,1.36787 -0.0107,1.507429 0.0413,3.015669 0.10387,4.521689 0.1733,0.47524 0.0581,0.99741 0.19534,1.44487 -0.36306,0.3697 -0.20534,0.96671 -0.25064,1.43919 -0.0318,0.49346 0.11663,1.03192 -0.0951,1.49087 0.14563,0.84649 0.0783,1.712415 0.1111,2.567805 -0.0665,0.45222 0.24575,0.922311 -0.0563,1.326021 -0.16113,0.30199 -0.14399,0.87954 0.10178,1.04644 -0.008,0.50476 0.33634,0.95241 0.1287,1.45211 0.19711,0.12306 0.23505,0.16337 0.093,0.39998 -0.25935,0.34252 0.27749,0.87321 -0.10438,1.09347 -0.51512,0.10675 0.14734,0.092 0.17105,0.3359 -0.11327,0.32055 -0.0946,1.20549 0.39066,0.72502 0.77099,0.005 -0.24847,-0.55676 0.12041,-0.89814 0.0876,-0.7571 0.0667,-1.52622 0.0171,-2.28565 -0.17201,-0.6034 -0.11922,-1.24776 -0.0837,-1.86965 0.24858,-0.51407 -0.0498,-1.029341 0.016,-1.553911 -0.006,-0.45575 0.10213,-0.879465 -0.0367,-1.321375 -0.0154,-0.45173 -0.18732,-0.86783 0.13748,-1.26039 0.17298,-0.38763 0.16687,0.10802 0.19378,0.28939 0.13417,0.39563 0.14967,0.90483 0.22738,1.25987 0.1107,-0.96718 0.0622,-1.94664 0.0801,-2.9192 0.0259,-4.03603 -0.0233,-8.072429 0.0181,-12.108299 0.23979,-0.22266 0.005,0.79598 0.22736,0.78083 0.0587,-0.30736 0.032,-0.62753 0.03,-0.93948 0,-0.1962 -0.0468,-0.69798 -0.0713,-0.75137 -0.0348,0.24268 0.0825,0.63699 -0.16899,0.74 -0.058,-0.72244 -0.0291,-1.46041 -0.0476,-2.18901 -0.006,-2.09788 -0.0295,-4.19582 -0.0243,-6.29367 z", +1.1248, 15.7337, +"M 0.154165 -15.7331 c -0.024,0.006 -0.0442,0.058 -0.0594,0.16072 -0.0119,0.0804 -0.0224,0.198 -0.032,0.33693 -0.18859,0.42108 0.0568,0.96324 -0.22582,1.36374 0.2354,0.42752 0.12835,0.94985 0.13436,1.42472 0.10673,0.60433 -0.83863,0.28316 -0.87694,0.59066 0.2572,0.43226 -0.0173,0.8381 -0.0377,1.27641 0.21408,0.45321 -0.16298,0.88129 0.0558,1.32705 -0.23974,0.30068 0.199,0.60453 -0.0589,0.92553 -0.006,0.92527 -0.0266,1.8508 -0.0517,2.77605 0.0152,0.4801 -0.0752,1.02656 0.14777,1.4578 -0.25857,-0.0769 -0.30935,0.24479 -0.16174,0.47594 -0.075,0.46382 0.12888,0.91188 -0.016,1.36787 -0.0107,1.507433 0.0413,3.015673 0.10384,4.521693 0.17331,0.47524 0.0581,0.99741 0.19535,1.44487 -0.36307,0.3697 -0.20532,0.96671 -0.25062,1.43919 -0.0318,0.49346 0.11663,1.03192 -0.0951,1.49086 0.14563,0.84649 0.0783,1.71241 0.1111,2.5678 -0.0665,0.45222 0.24572,0.9223 -0.0563,1.32601 -0.16113,0.30199 -0.14396,0.87955 0.10181,1.04645 -0.008,0.50476 0.33631,0.95241 0.12867,1.45211 0.19711,0.12306 0.23508,0.16336 0.093,0.39998 -0.25935,0.34252 0.27746,0.87321 -0.10441,1.09347 -0.51512,0.10675 0.14735,0.092 0.17105,0.3359 -0.11326,0.32055 -0.0946,1.20548 0.39069,0.72501 0.77099,0.005 -0.24847,-0.55675 0.12041,-0.89813 0.0876,-0.7571 0.0666,-1.52622 0.017,-2.28565 -0.17201,-0.6034 -0.11922,-1.24776 -0.0837,-1.86965 0.24857,-0.51407 -0.0498,-1.02934 0.016,-1.55391 -0.006,-0.45575 0.10213,-0.87945 -0.0367,-1.32136 -0.0154,-0.45173 -0.18735,-0.86783 0.13745,-1.26039 0.17299,-0.38763 0.16688,0.10802 0.19378,0.28939 0.13417,0.39563 0.14968,0.90483 0.22739,1.25987 0.1107,-0.96718 0.0622,-1.94664 0.0801,-2.9192 0.006,-0.9718 0.007,-1.94324 0.007,-2.91507 0.0104,0.0106 0.0205,0.0219 0.0315,0.031 0.27921,0.23143 0.31816,-0.0277 0.16589,-1.11104 -0.17018,-1.20977 -0.16534,-1.42171 0.0331,-1.43661 0.12761,-0.0166 0.23202,0.66842 0.23202,1.51361 0,0.84503 0.0583,1.14304 0.12972,0.65991 0.14145,-0.95658 0.0967,-13.710923 0.0274,-13.242613 -0.0693,0.46832 -0.28163,-0.48851 -0.47181,-2.12545 -0.062,-0.53393 -0.12687,-0.97738 -0.18965,-1.3286 -1.9e-4,-0.26869 -0.003,-0.53746 -0.002,-0.80616 l -0.16123,0.10542 c -0.0298,-0.0783 -0.0571,-0.11812 -0.0806,-0.11213 z", +1.19528, 10.0475, +"M 0.114948 -10.0474 -0.50148,0.14618 c 0.0736,0.18661 0.16739,0.36967 0.261,0.54185 -0.0538,0.4307 0.22483,0.82056 0.0968,1.2648 -0.0525,0.36807 -0.1816,0.11366 -0.21076,-0.0961 -0.007,-0.23246 -0.37153,-0.97536 -0.51525,-0.43993 -0.11169,0.66702 0.20719,1.30602 0.21001,1.96991 -0.10058,0.38477 -0.12871,0.71438 -0.0766,1.11766 0.11511,0.40452 0.49088,0.70014 0.16472,1.13856 -0.0959,0.46912 0.0158,0.94258 0.003,1.41083 -0.0326,0.51795 0.0689,1.02842 0.006,1.55089 -0.14471,0.4072 -0.12605,0.91736 -0.37066,1.24545 0.20492,0.14259 0.56731,0.13997 0.4087,0.53758 -0.10038,0.73209 -0.0783,1.47103 -0.13167,2.20635 0.0757,0.52752 -0.1133,1.03601 -0.15412,1.55692 0.0337,0.76041 -0.16675,1.50234 -0.28566,2.24782 -0.1094,0.44497 -0.0894,0.90202 -0.16034,1.34929 -0.0245,0.16179 -0.1532,0.38291 0.10343,0.38358 0.48997,0.0292 0.56196,0.55944 0.49872,0.95487 -0.17814,0.30505 0.0416,0.71193 0.0159,1.00833 l 0.2316,-0.0937 c 0.066,-0.33303 0.12356,-0.66776 0.19171,-1.00036 0.31225,-1.29348 0.46274,-2.61533 0.65329,-3.92988 0.14143,-0.74868 0.0819,-1.51508 0.22844,-2.26219 -0.0167,-0.47274 0.0824,-0.94169 0.053,-1.41451 0.0186,-0.47544 0.0882,-0.94598 0.058,-1.42092 0.0683,-0.45815 -0.0209,-0.89535 -0.002,-1.36269 0.0604,-0.47506 0.0288,-0.95181 -0.0173,-1.42355 0.1158,-0.28601 -0.15986,-0.86145 0.10674,-0.9301 -0.0248,0.50068 0.22634,0.12776 0.21472,-0.15544 -0.004,-0.18483 -0.0516,-0.89113 -0.24975,-0.42432 0.24166,0.0912 -0.0666,0.42542 -0.17345,0.40205 0.17628,-0.29069 0.0179,-0.61457 0.0859,-0.92048 0.25808,-0.41654 0.13936,-0.89587 -0.12721,-1.26285 -0.14964,-0.44611 -0.18222,-0.91074 -0.22982,-1.36825 -0.0568,-0.4894 -0.17777,-0.9772 -0.21376,-1.45567 0.005,-0.36792 -0.0846,-0.72055 -0.17196,-1.07205 z", +1.30323, 16.4753, +"M 0.0525373 -16.4753 -1.35577,1.84766 c 0.27683,0.42497 0.50698,1.05949 0.54982,1.4889 0.16442,1.33355 -0.31785,2.67593 -0.0632,4.05717 0.89557,1.12078 0.40959,2.34393 0.16413,3.57614 -0.17728,1.24541 0.33502,2.53287 0.6468,3.771819 0.23041,1.45009 0.26088,2.878319 -0.008,4.303319 -0.24439,1.27673 -0.30622,2.48615 0.0291,3.76989 -0.15519,1.31328 -0.52854,2.58989 -0.56215,3.88389 -0.40545,1.32231 0.79113,2.83626 -0.1482,4.10603 -0.48269,0.66505 -0.53542,1.40168 -0.46451,2.14587 l 1.46058,-0.003 c 0.0168,-0.42614 0.0252,-0.85474 0.0677,-1.27432 0.2539,-1.34995 0.14317,-2.66731 0.3672,-4.02616 0.031,-1.4516 0.11297,-2.83964 0.19182,-4.25746 0.12583,-1.2814 -0.13142,-2.63659 0.16191,-3.91395 -0.1099,-1.37381 -0.1194,-2.74933 -0.14373,-4.116199 0.0786,-1.414249 -0.23712,-2.813419 -0.12807,-4.194219 -0.0646,-1.50176 -0.23348,-3.00275 -0.21195,-4.44847 0.788,-0.10067 0.97118,-1.25313 0.22118,-1.50409 0.42751,0.71673 -0.59912,0.75408 -0.39471,0.0445 0.49068,-0.38166 0.47426,-0.5855 0.0196,-0.82701 0.15128,-1.10943 -0.28974,-2.18426 -0.17309,-3.35652 -0.008,-0.38118 -0.13645,-0.71905 -0.22593,-1.07252 z", +3.07777, 16.9417, +"M -0.540315 -15.4793 c -0.24634,0.11349 -1.09658,-1.59624 -1.32736,-1.45407 -0.46023,-0.0191 -0.87738,0.005 -0.4728,0.85065 -0.38438,0.23736 0.33291,1.49353 -0.0462,1.73799 0.11651,0.36917 0.22846,-0.0337 0.42244,7.7e-4 0.15386,0.31092 0.11637,0.69337 0.1657,1.02389 0.34684,0.15366 0.10848,0.64269 0.28358,0.76644 0.41195,-0.0452 0.55085,0.74543 0.0419,0.5194 -0.27864,0.26975 0.19724,0.25988 0.15384,0.53117 0.1548,0.28493 0.18472,-0.0741 0.12234,-0.20191 0.13378,-0.5353 0.43906,0.1542 0.21787,0.35432 -0.44319,-0.0388 -0.0774,0.48499 0.15909,0.23185 0.10925,-0.0917 0.16042,0.22403 0.24283,0.28936 0.16253,0.3502 -0.0983,-0.0308 -0.20977,-0.0917 0.0884,0.0915 -0.32447,0.49774 -0.0756,0.36635 0.504,-0.0226 -0.0992,0.43767 0.20795,0.63982 -0.12496,0.26315 0.26137,0.29982 0.17242,0.57031 0.17152,0.21667 0.0867,0.45418 -0.10428,0.6239 0.17103,0.10816 0.33957,0.15221 0.1982,0.38978 -0.16129,0.25419 0.1763,0.20125 0.0976,0.39005 0.32354,0.0622 -0.0735,0.53313 0.26064,0.44952 0.16282,-0.294 0.37219,0.22828 0.27145,0.4162 -0.47933,0.1604 0.29042,0.60248 -0.0488,0.85553 -0.3968,0.13941 0.16426,0.23706 -0.0494,0.45862 0.28882,0.23742 -0.26764,0.54324 0.13284,0.74483 -0.10693,0.19204 0.083,0.29149 0.17713,0.48105 -0.15407,0.2054 0.003,0.54361 0.2659,0.31837 0.41731,-0.0408 -0.0181,0.41236 -0.166,0.51107 -0.33606,0.19565 -0.0219,0.65064 -0.0739,0.87903 0.16745,0.29274 -0.13216,0.58183 -0.1062,0.84082 0.34137,-0.0301 0.0236,0.11514 0.051,0.28009 0.0409,0.34986 0.13526,0.72795 0.0252,1.04597 0.15197,0.3677 0.14533,0.69256 0.16035,1.08996 -0.036,0.32787 -0.12398,0.67271 -0.0792,1.00699 0.0442,0.35265 -0.0843,0.70567 0.0129,1.05246 -0.16927,0.31514 0.0256,0.61454 -0.0918,0.92499 0.16825,0.22895 -0.33833,0.64208 -0.0292,0.80537 0.15925,-0.0153 0.26898,-0.23555 0.49496,-0.0945 0.26864,0.26814 -0.20509,0.57525 -0.34709,0.79008 -0.22991,0.0506 -0.30996,0.1628 -0.20241,0.38893 -0.17522,0.31665 -0.083,0.71442 -0.19792,1.05749 -0.13603,0.29173 -0.0706,0.64159 -0.18877,0.95263 -0.0571,0.35637 -0.19909,0.70354 -0.20502,1.0641 0.0598,0.35902 -0.37999,0.56428 -0.25411,0.85446 -0.17361,0.0964 -0.0151,0.24287 -0.10293,0.35328 -0.12389,0.31997 -0.23871,0.64343 -0.31422,0.9698 0.37628,0.16039 -0.17227,0.39286 -0.16858,0.63597 0.30078,0.23058 -0.13834,0.45129 -0.031,0.70849 -0.25057,0.0583 -0.25681,0.38137 -0.29542,0.62486 -0.16162,0.27054 -0.36499,0.58731 -0.41785,0.94511 -0.20866,0.32369 -0.2598,0.71855 -0.47571,1.0374 -0.0588,0.22792 -0.45417,0.58871 -0.21593,0.77317 0.17559,0.16477 -0.45739,0.3482 -0.45852,0.6172 -0.19443,0.35075 0.20244,0.16374 0.23716,-0.0487 0.19866,0.0213 -0.14873,0.46087 -0.16338,0.61248 0.061,0.23503 -0.25086,0.084 -0.18389,0.22621 0.0489,0.15635 0.11616,0.29085 0.27212,0.14598 0.22858,-0.16237 0.2946,-0.0576 0.29863,0.10731 l 0.58122,-0.23538 c 0.0821,-0.26109 0.13335,-0.52666 0.32626,-0.73129 0.29731,-0.21914 0.4927,-0.5536 0.42053,-0.90933 0.28474,-0.14849 -0.14372,-0.26041 0.14824,-0.39219 0.0582,-0.25514 0.25636,-0.49292 0.21565,-0.73236 0.20454,-0.25284 0.2954,-0.60737 0.43347,-0.91621 0.15348,-0.36215 0.22129,-0.75885 0.40247,-1.10584 -0.28553,-0.13508 0.0396,-0.0926 0.0685,-0.27653 0.002,-0.34291 0.29517,-0.66136 0.262,-0.97518 -0.081,-0.33699 0.1328,-0.65558 0.15942,-0.96449 0.0684,-0.31442 0.27457,-0.63665 0.23586,-0.96492 0.0625,-0.50054 0.23178,-0.97825 0.42326,-1.44136 0.18554,-0.19438 0.0484,-0.42979 0.14205,-0.62178 0.0484,-0.35206 0.10613,-0.7143 0.13996,-1.07237 -0.0486,-0.32538 0.0402,-0.66028 0.0568,-0.98284 -0.1766,-0.19954 0.22096,-0.45145 -0.005,-0.58272 0.24328,-0.0558 0.0135,-0.13491 -0.0604,-0.28181 0.19276,-0.31297 0.27144,-0.70626 0.22753,-1.05971 -0.0252,-0.37093 0.27933,-0.65074 0.23872,-1.02209 0.13549,-0.19061 0.0276,-0.13206 -0.15026,-0.14387 0.20177,-0.27604 0.0426,-0.68124 0.0698,-1.00127 -0.25174,-0.36563 0.5493,-0.54553 0.3428,-0.81705 -0.25356,-0.23622 0.32006,-0.0315 0.44898,-0.15681 0.26237,0.0525 0.16508,-0.0532 0.004,-0.17008 -0.44135,-0.0992 -0.0848,-0.46999 0.19506,-0.38124 0.28648,0.19195 0.22981,-0.48563 0.0384,-0.17107 0.12844,-0.16201 -0.19188,-0.2907 -0.11936,-0.0706 -0.26147,0.0464 0.31544,-0.3974 0.12276,-0.52606 -0.5222,-0.16455 0.47293,-0.4875 0.0622,-0.80128 -0.15487,-0.35815 -0.30698,0.0345 -0.12834,0.21111 0.11054,0.25141 -0.0432,0.17819 -0.13073,0.002 -0.25855,-0.2018 0.0244,-0.36195 -0.0498,-0.57233 -0.0965,-0.35513 0.12392,-0.0329 0.17524,0.11028 0.25543,0.19264 0.35139,-0.0251 0.16432,-0.22037 -0.004,-0.33007 -0.26981,-0.63496 -0.12873,-0.93904 -0.26093,-0.11267 -0.0552,-0.27303 0.0915,-0.39209 -0.21433,-0.10496 0.0965,-0.35929 -0.11769,-0.54934 -0.25618,-0.32729 0.28716,-0.15825 0.25115,-0.39389 0.11279,-0.26574 -0.36057,-0.39294 -0.28675,-0.7419 0.005,-0.33252 -0.16188,-0.73649 0.0676,-0.99258 -0.30161,0.0812 -0.28705,-0.41089 -0.53868,-0.52123 -0.15675,0.11505 -0.4179,0.16922 -0.34564,-0.13387 0.14195,-0.3866 0.5009,0.36188 0.45085,-0.0604 0.23245,-0.0749 0.17085,-0.38571 -0.1051,-0.20675 -0.4024,0.21999 -0.32985,-0.45314 -0.03,-0.54873 0.23973,-0.30604 -0.0514,-0.68237 0.0219,-1.00559 -0.25351,0.14792 -0.18752,-0.10625 -0.0293,-0.19294 -0.17696,-0.18581 0.13556,-0.36147 -0.0298,-0.49713 0.0619,-0.35137 -0.28931,-0.20494 -0.41784,0.002 -0.25619,0.36645 -0.46783,-0.021 -0.55009,-0.28332 -0.23712,-0.21349 0.077,-0.44237 -0.0703,-0.63757 -0.0231,-0.364 -0.38759,-0.5027 -0.41947,-0.85291 -0.40308,-0.16283 -0.33097,-0.5917 -0.39057,-0.93046 0.066,-0.25081 0.0521,-0.49286 -0.16035,-0.69864 -0.0175,-0.32952 -0.20434,-0.65743 -0.31229,-0.96069 -0.27709,-0.23307 -0.26297,-0.67784 -0.45519,-0.90665 z", +1.20026, 9.02829, +"M -0.647852 8.69897 c 0.27123,0.89699 0.28293,-0.25188 1.17294,-0.91121 -0.019,-0.45337 -0.0333,-0.90699 -0.0667,-1.35961 -0.16717,-0.71424 -0.26623,-1.42486 -0.18603,-2.16524 -0.35177,-0.76585 0.25336,-1.53555 -0.20672,-2.29857 -0.0243,-0.66796 0.56421,-1.8924 0.64041,-2.52784 -0.36439,-0.62391 0.76929,-1.52704 0.43002,-2.6141 -0.11243,0.31694 -0.2569,0.21823 -0.27552,0.42189 -0.0451,0.49293 -0.42354,0.81201 -0.47179,0.95559 -0.21656,-0.23971 -0.88287,-1.05873 -0.93376,-1.99936 0.0638,-0.699 0.36156,-1.33045 0.25064,-2.05931 0.12634,-0.5642 -0.3497,-1.6984 0.4775,-1.78749 0.75422,-0.1124 -8e-5,-0.99299 -0.28784,-0.42271 -0.71152,-0.0264 0.003,-0.62728 -0.27184,-0.94723 -0.76967,-0.14096 -0.83801,0.98907 -0.55758,1.51309 0.38695,0.50259 0.21479,1.05455 -0.26614,1.39216 0.0501,0.97361 0.11051,1.94686 0.15451,2.92075 0.0822,1.46354 0,2.94343 0.2372,4.39147 0.007,0.81629 0.20886,1.59379 0.30335,2.39622 0.37107,0.77953 -0.48689,1.40959 -0.29922,2.23398 0.25837,0.71917 0.26924,1.49082 0.23463,2.2629 0.0409,0.22802 -0.003,0.42297 -0.078,0.60462 z", +1.28909, 16.4888, +"M -0.601805 -16.4887 c -0.64066,0.01 -0.68406,1.0337 -0.42117,1.52497 0.38696,0.50259 0.21482,1.05455 -0.26611,1.39216 0.0501,0.97361 0.11051,1.94686 0.15451,2.92075 0.0822,1.46354 -2e-5,2.94343 0.23718,4.39147 0.007,0.81629 0.20886,1.5938 0.30334,2.39623 0.37108,0.77953 -0.48686,1.40959 -0.29919,2.23397 0.25837,0.71917 0.26921,1.49084 0.23461,2.26291 0.0409,0.22802 -0.003,0.42297 -0.078,0.60462 0.2036,0.67334 0.26077,0.19399 0.65318,-0.36587 0.0969,0.52347 -0.0537,1.09567 -0.19016,1.50792 0.0168,0.88995 0.65551,0.74475 0.31729,1.64124 -0.0177,0.60701 -0.0656,1.18107 -0.18346,1.53996 0.25987,0.69342 -0.0198,1.56597 -0.17106,2.204 0.0508,0.45325 0.55251,1.01924 0.18243,1.5999 -0.21179,0.38644 0.0962,0.7179 0.22789,0.6749 0.10991,0.92985 -0.3225,-0.36708 -0.2527,0.61391 0.31975,-0.39811 0.20545,1.13303 0.061,1.51257 -0.1973,0.59553 0.0532,1.92311 -0.32557,1.88361 -0.17997,0.49675 0.006,0.49018 0.12301,0.36483 0.33612,0.4428 0.44119,1.18723 0.49659,2.04277 0.35883,0.26987 0.25639,-1.31676 0.30748,-1.8836 0.23582,-0.55477 -0.0262,-1.73369 0.22997,-2.05673 0.17235,-0.37447 0.2776,-0.92052 0.4041,-1.32911 0.0863,-0.79196 -0.53517,-1.19078 -0.13745,-1.73065 0.23614,0.1059 0.15208,-0.41602 0.14108,-0.81338 -0.096,-0.43366 0.0207,-0.65455 0.1421,-0.69195 l -0.0377,-1.03611 c -0.11308,0.12238 -0.18047,0.14259 -0.0718,-0.41652 0.0189,-0.52013 -0.27541,-0.60437 -0.0723,-1.15703 -0.14343,-0.6791 -0.24172,-1.29806 -0.2718,-2.10478 -0.0691,-0.7367 -0.28104,-1.22923 -0.22945,-1.98438 -0.19344,-0.65924 0.37674,-0.26839 0.13023,-1.00149 -0.20709,-0.36744 0.15814,-0.68667 -0.0765,-0.90382 0.23915,-0.85322 -0.17302,-1.75788 0.092,-2.56418 h 5e-4 c 0.18233,-0.97684 -0.41499,-1.56326 -0.47749,-2.1239 -0.0678,0.0482 -0.15229,0.007 -0.23513,-0.0357 -0.0187,-0.0404 -0.0387,-0.0806 -0.063,-0.12092 -0.0243,-0.66796 0.56457,-1.89257 0.64077,-2.52801 -0.36438,-0.62391 0.76922,-1.52674 0.42995,-2.6138 -0.11242,0.31694 -0.25681,0.21802 -0.27543,0.42168 -0.0451,0.49293 -0.42355,0.81192 -0.47181,0.9555 -0.21656,-0.23971 -0.88289,-1.05873 -0.93379,-1.99936 0.0638,-0.699 0.36155,-1.33045 0.25064,-2.05931 0.12634,-0.5642 -0.3497,-1.6984 0.47749,-1.78748 0.75422,-0.1124 -8e-5,-0.993 -0.28784,-0.42272 -0.71152,-0.0264 0.003,-0.62728 -0.27183,-0.94723 -0.0481,-0.009 -0.0937,-0.0125 -0.13642,-0.0119 z", +0.891012, 10.9638, +"M 0.353692 -8.74076 c -0.26499,0.8063 0.14695,1.71094 -0.0922,2.56416 0.23462,0.21715 -0.13037,0.53651 0.0767,0.90395 0.24652,0.7331 -0.32371,0.3421 -0.13029,1.00134 -0.0516,0.75515 0.16007,1.24804 0.22912,1.98474 0.0301,0.80672 0.12886,1.42571 0.27229,2.10481 -0.20308,0.55266 0.0911,0.63666 0.0722,1.1568 -0.10866,0.55911 -0.0412,0.53899 0.0719,0.4166 l 0.0376,1.03625 c -0.12144,0.0374 -0.23824,0.25801 -0.14224,0.69167 0.011,0.39736 0.0951,0.91925 -0.14103,0.81335 -0.39773,0.53987 0.224,0.93857 0.13772,1.73053 -0.12651,0.40859 -0.23189,0.95495 -0.40425,1.32942 -0.25615,0.32304 0.006,1.5018 -0.22982,2.05657 -0.0511,0.56684 0.0512,2.15362 -0.30762,1.88375 -0.0554,-0.85554 -0.16078,-1.60008 -0.49692,-2.04288 -0.11732,0.12535 -0.30284,0.13188 -0.12285,-0.36487 0.37871,0.0395 0.12845,-1.28817 0.32574,-1.8837 0.14445,-0.37954 0.25865,-1.91074 -0.0611,-1.51263 -0.0698,-0.98099 0.36247,0.31593 0.25256,-0.61392 -0.13168,0.043 -0.43956,-0.28828 -0.22776,-0.67472 0.37007,-0.58066 -0.13156,-1.14676 -0.18233,-1.60001 0.15123,-0.63803 0.43113,-1.51051 0.17126,-2.20393 0.11781,-0.35889 0.16536,-0.93265 0.18299,-1.53966 0.33822,-0.89649 -0.30017,-0.75144 -0.31703,-1.64139 0.16345,-0.49382 0.35255,-1.21826 0.1047,-1.81199 -0.36685,-0.1049 0.17326,-0.62553 0.0859,-1.18473 0.11267,-0.55844 0.1666,-0.62712 -0.10721,-0.68 0.21516,-0.68305 -0.17153,-1.14907 -0.0833,-1.906 0.13977,-0.58259 0.0436,-0.99951 -0.009,-1.65408 -0.0315,-1.04621 0.34527,-0.33266 0.55695,-0.48326 0.0625,0.56064 0.66002,1.14699 0.47769,2.12383 z", +1.40858, 15.4784, +"M -0.215316 -14.2449 c -0.0573,-0.39663 -0.09,-0.9845 -0.25167,-1.23351 l -0.008,0.0889 c -0.008,0.51419 -0.0135,1.82829 -0.0164,3.62614 -0.16272,-0.0566 -0.15885,-0.0396 -0.42542,-0.0862 0.12658,0.42973 0.13679,0.99178 0.0761,0.91046 0.003,0.20217 -0.0381,0.38449 -0.14261,0.45011 0.57288,0.0852 0.23548,1.11425 -0.31834,1.01699 -0.14563,0.51493 0.25241,1.08423 -0.0393,1.56063 0.18624,0.45092 0.31719,0.8511 0.0863,1.32291 0.24339,0.56784 0.14216,1.21654 0.18034,1.82315 0.0321,0.60964 -0.054,1.23667 0.0951,1.83296 0.21513,0.29947 -0.39592,0.30966 -0.11316,0.67903 0.039,0.74934 0.21058,1.48397 0.17309,2.23759 0.0111,0.43606 0.0354,1.12083 -0.22064,1.29139 0.64397,0.51467 -0.3131,0.91939 -0.18915,1.4857 0.0477,0.49886 0.30321,1.02072 0.0956,1.48415 -0.0396,0.59756 -0.0501,1.20341 0.21238,1.72341 0.0946,0.62128 -0.0948,1.21611 -0.0119,1.84536 -0.0453,0.5497 0.30977,1.1923 -0.0543,1.66451 -0.19063,0.44184 -8e-5,0.91834 -0.19378,1.33842 -0.0311,0.51712 -0.0706,1.05695 -0.0429,1.57355 -0.0493,0.5227 -0.0706,1.05957 -0.003,1.58026 0.079,0.51085 0.0409,0.93086 -0.0816,1.42059 0.0312,0.0244 0.0439,0.0591 0.0692,0.0868 l 1.44333,-3.35947 c -0.0392,-0.12325 -0.10192,-0.24343 -0.21964,-0.35295 -0.0919,-0.54896 0.15828,-1.13571 0.29766,-1.60611 -0.0725,-0.11045 -0.11144,-0.22339 -0.13435,-0.33744 l 1.00769,-1.16841 c -2.7e-4,-0.0874 0.0233,-0.25803 -0.051,-0.4113 -0.0574,-0.11829 -0.21368,-0.21272 -0.23231,-0.33456 -0.0501,-0.32747 0.096,-0.64257 0.0949,-1.07853 0,-0.22596 -0.12986,-0.49448 -0.12229,-0.73317 0.0391,-1.23285 0.2989,-2.52798 0.29792,-3.1837 0.0119,-0.61935 -0.007,-12.50878 -0.007,-13.10462 0.0514,-0.4966 -0.0418,0.0395 0.1633,-0.14005 0.0463,0.3542 0.0498,-0.47899 0.0491,-0.11317 0.0143,-1.07594 -0.0857,-2.58572 -0.28713,-2.87271 -0.1198,-0.17068 -0.28631,0.41503 -0.45638,0.89253 -0.0151,-0.0313 -0.61574,-1.82898 -0.72041,-1.81959 z m 0.94094,4.32328 c -0.007,2.38506 -0.13253,2.52318 -0.13645,1.38389 -0.004,-0.49656 -0.0196,-0.97179 0.13645,-1.38389 z m -0.7084,1.35338 c 0,7e-5 0,-9e-5 0.003,0 0.0662,0.009 0.17023,0.0887 0.1819,0.15865 0.008,0.0466 -0.0254,0.0889 -0.13798,0.10335 -0.0214,-0.0326 -0.0326,-0.0554 -0.0465,-0.0811 2.1e-4,-0.0603 0,-0.12059 0,-0.18087 z m 0.48411,-0.0599 c 0.0272,0.008 0.063,0.0884 0.0682,0.18345 0.003,0.0634 -0.007,0.13334 -0.0419,0.19224 -0.0347,-0.0107 -0.0299,-0.0884 -0.0419,-0.12299 -0.0298,-0.19578 -0.0116,-0.2606 0.0156,-0.2527 z m -0.55491,2.5006 c 0.0892,0.006 0.19317,0.0297 0.24858,0.0346 0.11311,-0.0172 0.16436,0.0169 0.17415,0.0708 0.003,0.0101 0.003,0.0207 0,0.032 -0.0114,0.14338 -0.23088,0.36319 -0.37465,0.25063 -0.0662,-0.13041 -0.10052,-0.25938 -0.1106,-0.38706 0.0193,-0.001 0.0391,-0.002 0.0615,-0.001 z m 0.13229,1.002 c 0.0214,-0.01 0.0347,0.0183 0.0383,0.0615 0.007,0.0865 -0.0249,0.23269 -0.11009,0.25321 -0.0212,-0.0395 -0.0345,-0.10075 -0.014,-0.14831 0.0356,-0.10904 0.0645,-0.15666 0.0858,-0.1664 z m 0,0.52504 c 0.006,-0.002 0.0143,2.2e-4 0.0233,0.005 0.036,0.0197 0.0874,0.0851 0.0889,0.12505 0,0.0264 -0.0206,0.0421 -0.0842,0.0248 -0.0461,-0.10744 -0.046,-0.14933 -0.0279,-0.15502 z m 0.0201,4.1553 v 0 c 0.0656,-0.0183 0.009,0.15149 0.0156,0.29559 0.0532,0.0409 0.0778,0.0874 0.0837,0.13229 0.003,0.0122 0.003,0.0243 0,0.0362 -0.0151,0.17868 -0.30001,0.30917 -0.21085,-0.0398 -0.005,-0.11149 -0.0596,-0.23076 -0.003,-0.33538 0.056,-0.0558 0.0913,-0.0828 0.11319,-0.0889 z m 1.20973,2.00814 c -0.003,-2.6e-4 -0.005,0.004 -0.007,0.0114 v 0 c -0.008,0.0314 -0.0132,0.12504 0,0.25528 l 0.005,0.0145 0.006,-0.03 c 0.003,-0.0485 0.005,-0.0893 0.005,-0.12299 0.003,-0.0882 -0.003,-0.12732 -0.01,-0.12815 z m -0.0517,0.48576 c -0.007,-0.004 -0.0151,-0.003 -0.0228,0.005 -0.0201,0.0212 -0.0409,0.0895 -0.0594,0.22738 -0.11983,0.55066 -0.2176,3.41162 0.003,3.71346 0.36878,-0.48993 0.18709,-2.28477 0.17984,-2.57762 -0.007,-0.29285 -0.0406,-0.59455 -0.0305,-0.87643 0.0206,-0.16536 -0.0193,-0.46288 -0.0703,-0.49196 z", +1.40858, 15.4784, +"M -0.215316 -14.2449 c -0.0573,-0.39663 -0.09,-0.9845 -0.25167,-1.23351 l -0.008,0.0889 c -0.008,0.51419 -0.0135,1.82828 -0.0164,3.62614 -0.16272,-0.0566 -0.15885,-0.0396 -0.42542,-0.0862 0.12658,0.42973 0.13679,0.99178 0.0761,0.91046 0.003,0.20216 -0.0381,0.38449 -0.14261,0.4501 0.57288,0.0852 0.23548,1.11425 -0.31834,1.017 -0.14563,0.51492 0.25241,1.08422 -0.0393,1.56063 0.18624,0.45092 0.31719,0.8511 0.0863,1.32291 0.24339,0.56784 0.14216,1.21653 0.18034,1.82315 0.0321,0.60964 -0.054,1.23666 0.0951,1.83296 0.21513,0.29947 -0.39592,0.30966 -0.11316,0.67902 0.039,0.74935 0.21058,1.48397 0.17309,2.23759 0.0111,0.43606 0.0354,1.12083 -0.22064,1.2914 0.64397,0.51466 -0.3131,0.91938 -0.18915,1.48569 0.0477,0.49885 0.30321,1.02071 0.0956,1.48415 -0.0396,0.59756 -0.0501,1.20342 0.21238,1.72341 0.0946,0.62127 -0.0948,1.21611 -0.0119,1.84536 -0.0453,0.5497 0.30977,1.19229 -0.0543,1.6645 -0.19063,0.44184 -8e-5,0.91834 -0.19378,1.33842 -0.0311,0.51712 -0.0706,1.05695 -0.0429,1.57355 -0.0493,0.5227 -0.0706,1.05957 -0.003,1.58026 0.079,0.51085 0.0409,0.93086 -0.0816,1.42059 0.0312,0.0244 0.0439,0.0591 0.0692,0.0868 l 1.44333,-3.35948 c -0.0392,-0.12324 -0.10192,-0.24343 -0.21964,-0.35295 -0.0919,-0.54896 0.15828,-1.13571 0.29766,-1.60611 -0.0725,-0.11045 -0.11144,-0.22339 -0.13435,-0.33744 l 1.00769,-1.16841 c -2.7e-4,-0.0874 0.0233,-0.25803 -0.051,-0.4113 -0.0574,-0.11829 -0.21368,-0.21272 -0.23231,-0.33456 -0.0501,-0.32747 0.096,-0.64257 0.0949,-1.07853 0,-0.22595 -0.12986,-0.49447 -0.12229,-0.73317 0.0391,-1.23284 0.2989,-2.52797 0.29792,-3.18369 0.0119,-0.61935 -0.007,-12.50878 -0.007,-13.10462 0.0514,-0.4966 -0.0418,0.0395 0.1633,-0.14005 0.0463,0.3542 0.0498,-0.47899 0.0491,-0.11317 0.0143,-1.07594 -0.0857,-2.58572 -0.28713,-2.87271 -0.1198,-0.17068 -0.28631,0.41503 -0.45638,0.89253 -0.0151,-0.0313 -0.61574,-1.82898 -0.72041,-1.81959 z m 0.94094,4.32327 c -0.007,2.38507 -0.13253,2.52318 -0.13645,1.3839 -0.004,-0.49657 -0.0196,-0.97179 0.13645,-1.3839 z m -0.7084,1.35339 c 0,7e-5 0,-9e-5 0.003,0 0.0662,0.009 0.17023,0.0887 0.1819,0.15865 0.008,0.0466 -0.0254,0.0889 -0.13798,0.10335 -0.0214,-0.0326 -0.0326,-0.0554 -0.0465,-0.0811 2.1e-4,-0.0603 0,-0.12058 0,-0.18087 z m 0.48411,-0.0599 c 0.0272,0.008 0.063,0.0884 0.0682,0.18345 0.003,0.0634 -0.007,0.13333 -0.0419,0.19224 -0.0347,-0.0107 -0.0299,-0.0884 -0.0419,-0.123 -0.0298,-0.19577 -0.0116,-0.26059 0.0156,-0.25269 z m -0.55491,2.5006 c 0.0892,0.006 0.19317,0.0297 0.24858,0.0346 0.11311,-0.0172 0.16436,0.0169 0.17415,0.0708 0.003,0.0101 0.003,0.0207 0,0.032 -0.0114,0.14339 -0.23088,0.36319 -0.37465,0.25063 -0.0662,-0.13041 -0.10052,-0.25937 -0.1106,-0.38705 0.0193,-0.001 0.0391,-0.002 0.0615,-0.001 z m 0.13229,1.002 c 0.0214,-0.01 0.0347,0.0183 0.0383,0.0615 0.007,0.0865 -0.0249,0.23269 -0.11009,0.25321 -0.0212,-0.0395 -0.0345,-0.10075 -0.014,-0.14832 0.0356,-0.10903 0.0645,-0.15665 0.0858,-0.16639 z m 0,0.52504 c 0.006,-0.002 0.0143,2.1e-4 0.0233,0.005 0.036,0.0197 0.0874,0.0851 0.0889,0.12505 0,0.0264 -0.0206,0.0421 -0.0842,0.0248 -0.0461,-0.10744 -0.046,-0.14934 -0.0279,-0.15502 z m 0.0201,4.1553 v 0 c 0.0656,-0.0183 0.009,0.15149 0.0156,0.29558 0.0532,0.0409 0.0778,0.0874 0.0837,0.1323 0.003,0.0122 0.003,0.0243 0,0.0362 -0.0151,0.17868 -0.30001,0.30918 -0.21085,-0.0398 -0.005,-0.1115 -0.0596,-0.23077 -0.003,-0.33539 0.056,-0.0558 0.0913,-0.0828 0.11319,-0.0889 z m 1.20973,2.00814 c -0.003,-2.6e-4 -0.005,0.004 -0.007,0.0114 v 0 c -0.008,0.0314 -0.0132,0.12505 0,0.25528 l 0.005,0.0145 0.006,-0.03 c 0.003,-0.0485 0.005,-0.0893 0.005,-0.12298 0.003,-0.0882 -0.003,-0.12732 -0.01,-0.12816 z m -0.0517,0.48576 c -0.007,-0.004 -0.0151,-0.003 -0.0228,0.005 -0.0201,0.0212 -0.0409,0.0895 -0.0594,0.22737 -0.11983,0.55067 -0.2176,3.41162 0.003,3.71346 0.36878,-0.48992 0.18709,-2.28477 0.17984,-2.57762 -0.007,-0.29285 -0.0406,-0.59455 -0.0305,-0.87643 0.0206,-0.16535 -0.0193,-0.46288 -0.0703,-0.49196 z", +1.19541, 13.7255, +"M -0.876944 -13.7255 0.0201,0.0681 c 0.1772,0.62029 0.2896,1.04659 0.2289,0.96528 0.002,0.20217 -0.038,0.38439 -0.14247,0.45001 0.57288,0.0852 0.23535,1.11439 -0.31847,1.01713 -0.14564,0.51493 0.25248,1.08419 -0.0392,1.56059 0.18623,0.45093 0.31728,0.85144 0.0864,1.32325 0.24339,0.56784 0.14204,1.21638 0.18021,1.82299 0.0321,0.60964 -0.0539,1.23657 0.0952,1.83287 0.21514,0.29946 -0.3963,0.30988 -0.11356,0.67925 0.039,0.74934 0.21098,1.48377 0.17351,2.23739 0.0112,0.43606 0.0353,1.12094 -0.22077,1.2915 0.64399,0.51467 -0.31336,0.91952 -0.1894,1.48583 0.0477,0.49885 0.3035,1.02028 0.0959,1.48372 -0.0396,0.59756 -0.0502,1.20353 0.21231,1.72353 0.0946,0.62128 -0.0949,1.21631 -0.012,1.84556 -0.0453,0.5497 0.30974,1.19243 -0.0543,1.66464 -0.19062,0.44184 9e-5,0.91798 -0.19363,1.33806 -0.0311,0.51712 -0.0704,1.05705 -0.0427,1.57365 -0.0493,0.5227 -0.071,1.05966 -0.003,1.58035 0.079,0.51085 0.041,0.93086 -0.0815,1.42059 0.0312,0.0244 0.0438,0.059 0.0691,0.0867 l 1.4435,-3.35926 c -0.0392,-0.12324 -0.102,-0.24386 -0.21971,-0.35338 -0.0919,-0.54896 0.15862,-1.13534 0.29801,-1.60574 -0.33671,-0.51282 -0.0478,-1.07406 0.0233,-1.5934 0.1794,-0.51138 -0.42493,-0.9927 -0.1319,-1.57117 0.10052,-0.42731 0.34806,-0.7585 0.55653,-1.13598 -0.0485,-0.45487 -0.63618,-0.4481 -0.40805,-0.98503 0.20565,-0.4798 0.19847,-1.00573 0.32411,-1.49994 0.0473,-0.60976 -0.18707,-1.15221 -0.31882,-1.73588 -0.20363,-0.49064 -0.48402,-0.98562 -0.62777,-1.483 -0.0236,-0.51779 0.25969,-0.98172 0.1594,-1.47137 0.1783,-0.63379 0.0603,-1.30668 0.0592,-1.95596 -0.13465,-0.3989 -0.16238,-0.76032 0.0586,-1.11763 -0.46748,-0.37921 0.27905,-0.83492 0.14106,-1.29856 -0.31768,-0.55003 0.008,-1.06122 -0.008,-1.63184 0.006,-0.47253 0.005,-0.94519 0.008,-1.41776 0.24498,-0.23512 0.71548,-0.65116 0.36114,-0.92225 0.73256,-2.2984 0.9711,-1.21193 -0.28683,-2.21043 -0.41602,-0.19937 -0.35419,0.1806 -1.06564,-0.0622 l -0.11675,-0.0402 z", +0.884301, 13.8117, +"M -0.123121 -2.30275 c -0.004,0.0919 -0.0285,0.17097 -0.0723,0.21497 -0.0879,0.0879 -0.15049,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37079 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z m 1.00562,-4.18682 c -0.0136,0.12449 -0.10434,0.28911 -0.27647,0.53486 -0.23763,0.33924 -0.43417,0.85838 -0.43615,1.15339 -0.002,0.29504 -0.1194,0.71499 -0.26045,0.93329 -0.21074,0.32602 -0.25744,0.29832 -0.26045,-0.15451 -0.002,-0.30319 0.041,-0.60087 0.0961,-0.66146 0.0825,-0.0908 0.27686,-3.75423 0.44804,-8.44444 0.031,-0.84879 0.0508,-0.8709 0.24029,-0.26459 0.11369,0.36381 0.14246,1.9526 0.0641,3.53053 -0.10848,2.18249 -0.061,2.9193 0.19896,3.0799 0.13612,0.0841 0.19963,0.16849 0.18603,0.29303 z m -0.97307,14.8394 c 0,0.28238 -0.11129,0.44439 -0.24753,0.36017 -0.13626,-0.0842 -0.24426,-0.35901 -0.23926,-0.61081 0.005,-0.25181 -0.0503,-1.31485 -0.12247,-2.36263 -0.0894,-1.29767 -0.0341,-1.94495 0.17311,-2.02985 0.21135,-0.0867 0.20302,-0.13124 -0.0269,-0.14574 -0.1819,-0.0114 -0.32231,-0.28855 -0.31212,-0.61597 0.0178,-0.56801 0.029,-0.57121 0.24598,-0.0661 0.15007,0.34917 0.23368,-0.29792 0.24597,-1.90273 0.0102,-1.33752 0.11528,-2.49142 0.23307,-2.56418 0.11788,-0.0728 0.16275,0.57507 0.10025,1.4397 -0.0711,0.98351 -0.0107,1.572 0.16123,1.572 0.54297,0 -0.21133,6.64377 -0.21133,6.92614 z m -0.43305,2.47427 c -0.003,0.0791 -0.0141,0.16582 -0.0315,0.25683 -0.0696,0.36375 -0.17208,0.66146 -0.22789,0.66146 -0.0558,0 -0.10129,-0.29771 -0.10129,-0.66146 0,-0.3638 0.10256,-0.66145 0.2279,-0.66145 0.094,0 0.14338,0.16742 0.1328,0.40462 z m -0.12867,1.68982 c -0.004,0.0919 -0.0285,0.17097 -0.0724,0.21497 -0.0879,0.0879 -0.1505,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37077 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z m 0,1.05833 c -0.004,0.0919 -0.0285,0.17097 -0.0724,0.21497 -0.0879,0.0879 -0.1505,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37079 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z", +0.762531, 16.9731, +"M 0.232564 -5.04002 c -0.0256,-0.11674 -0.0255,0.0289 2.6e-4,0.32444 0.0258,0.29532 -0.0179,0.76648 -0.0971,1.0473 -0.1026,0.36391 -0.10352,0.73496 -0.002,1.29023 0.078,0.42853 0.12701,1.18085 0.10877,1.67181 -0.0212,0.57309 0.0381,0.8967 0.16574,0.90407 0.1094,0.006 0.20455,0.27367 0.21158,0.59484 0.007,0.32117 0.0586,0.89271 0.11421,1.26969 0.0618,0.41843 0.0213,1.04432 -0.10385,1.60629 -0.11282,0.50634 -0.20014,1.44467 -0.19397,2.08543 0.014,1.44453 -0.12951,2.17576 -0.37292,1.90107 -0.1185,-0.13368 -0.18543,0.0559 -0.18543,0.52551 0,0.40439 -0.0704,0.80453 -0.15642,0.88886 -0.0967,0.0949 -0.0239,0.44232 0.0371,0.91016 0.0545,0.41609 0.0799,0.79268 0.057,0.83706 -0.0229,0.0444 0.0755,0.33281 0.21858,0.64057 0.22056,0.47431 0.2334,0.65408 0.0844,1.18204 -0.0967,0.34255 -0.22876,0.52665 -0.29342,0.40904 -0.12361,-0.22462 -0.1455,0.20684 -0.13985,2.75717 0.004,1.47266 -0.0968,1.49441 -0.19275,0.38996 -0.0557,-0.64348 -0.0753,-1.8719 -0.0437,-2.72975 0.0963,-2.62133 0.0685,-4.17561 -0.0793,-4.44423 -0.16273,-0.29578 -0.0597,-2.89904 0.12249,-3.09534 0.0663,-0.0715 0.1127,-0.94893 0.10307,-1.94981 -0.0172,-1.79322 -0.0187,-1.79958 -0.11498,-0.45471 -0.0781,1.0917 -0.10126,0.79463 -0.11525,-1.48522 -0.0111,-1.81302 0.0309,-2.76277 0.11525,-2.6094 0.0823,0.14963 0.1326,-0.58109 0.1326,-1.92698 0,-1.47122 -0.0508,-2.13633 -0.15798,-2.07016 -0.0868,0.0537 -0.18056,-0.20961 -0.20847,-0.58495 -0.0279,-0.37534 0.0131,-0.68244 0.0914,-0.68244 h 2.6e-4 c 0.0924,0 0.14244,-1.44486 0.14244,-4.11748 0,-2.64579 0.0474,-4.03168 0.13259,-3.87679 0.0798,0.14518 0.13259,-0.37062 0.13259,-1.29631 0,-1.36676 0.0404,-1.55998 0.36387,-1.7419 0.48964,-0.27527 0.1634,-0.0741 0.1634,1.52406 0,0.94267 -0.048,1.2778 -0.15513,1.08305 -0.10578,-0.19225 -0.12686,-0.065 -0.0663,0.39909 0.0488,0.37448 0.0888,0.92971 0.0888,1.23389 0,0.30416 0.096,0.55297 0.21314,0.55297 0.13289,0 0.18485,0.21576 0.13829,0.57273 -0.0411,0.31487 -0.0177,0.67604 0.0521,0.80278 0.0697,0.12676 0.1269,0.49327 0.1269,0.815 0,0.32153 -0.0597,0.47673 -0.1326,0.34425 -0.0729,-0.1325 -0.1326,-0.055 -0.1326,0.17214 0,0.22706 0.0525,0.41282 0.11654,0.41282 0.0641,0 -0.26373,4.03388 -0.28935,3.91715 z", +0.560077, 8.98122, +"M 0.467182 8.52902 c -0.0714,0.48313 -0.12974,0.18491 -0.12974,-0.66012 0,-0.84519 -0.10442,-1.5299 -0.23204,-1.51334 -0.1984,0.0149 -0.20328,0.22696 -0.0331,1.43673 0.15228,1.08338 0.11346,1.34238 -0.16574,1.11095 -0.29936,-0.24779 -0.36464,-0.99245 -0.36464,-4.15731 0,-2.12029 -0.0357,-5.81576 -0.0795,-8.212422 -0.0467,-2.55505 -0.019,-4.76947 0.0673,-5.35317 0.081,-0.54783 0.30289,0.34342 0.49308,1.9808 0.19018,1.63694 0.4026,2.59378 0.47186,2.12546 0.0693,-0.46831 0.11396,12.285842 -0.0275,13.242422 z", +0.762531, 19.7675, +"M 0.232564 -7.83435 c -0.0256,-0.11674 -0.0255,0.0289 2.6e-4,0.32444 0.0258,0.29532 -0.0179,0.76648 -0.0971,1.0473 -0.1026,0.36391 -0.10352,0.73496 -0.002,1.29023 0.078,0.42853 0.12701,1.18085 0.10877,1.67181 -0.0212,0.57309 0.0381,0.8967 0.16574,0.90407 0.1094,0.006 0.20455,0.27367 0.21158,0.59484 0.007,0.32117 0.0586,0.89271 0.11421,1.26969 0.0618,0.41843 0.0213,1.04432 -0.10385,1.60629 -0.11282,0.50634 -0.20014,1.44467 -0.19397,2.08543 0.014,1.44453 -0.12951,2.17576 -0.37292,1.90107 -0.1185,-0.13368 -0.18543,0.0559 -0.18543,0.52551 0,0.40439 -0.0704,0.80453 -0.15642,0.88886 -0.0967,0.0949 -0.0239,0.44232 0.0371,0.91016 0.0545,0.41609 0.0799,0.79268 0.057,0.83706 -0.0229,0.0444 0.0755,0.33281 0.21858,0.64057 0.22056,0.47431 0.2334,0.65408 0.0844,1.18204 -0.0967,0.34255 -0.22876,0.52665 -0.29342,0.40904 -0.12361,-0.22462 -0.1455,0.20684 -0.13985,2.75717 0.004,1.47266 -0.0968,1.49441 -0.19275,0.38996 -0.0557,-0.64348 -0.0753,-1.8719 -0.0437,-2.72975 0.0963,-2.62133 0.0685,-4.17561 -0.0793,-4.44423 -0.16273,-0.29578 -0.0597,-2.89904 0.12249,-3.09534 0.0663,-0.0715 0.1127,-0.94893 0.10307,-1.94981 -0.0172,-1.79322 -0.0187,-1.79958 -0.11498,-0.45471 -0.0781,1.0917 -0.10126,0.79463 -0.11525,-1.48522 -0.0111,-1.81302 0.0309,-2.76277 0.11525,-2.6094 0.0823,0.14963 0.1326,-0.58109 0.1326,-1.92698 0,-1.47122 -0.0508,-2.13633 -0.15798,-2.07016 -0.0868,0.0537 -0.18056,-0.20961 -0.20847,-0.58495 -0.0279,-0.37534 0.0131,-0.68244 0.0914,-0.68244 h 2.6e-4 c 0.0924,0 0.14244,-1.44486 0.14244,-4.11748 0,-2.64579 0.0474,-4.03168 0.13259,-3.87679 0.0798,0.14518 0.13259,-0.37062 0.13259,-1.29631 0,-1.36676 0.0404,-1.55998 0.36387,-1.7419 0.48964,-0.27527 0.1634,-0.0741 0.1634,1.52406 0,0.94267 -0.048,1.2778 -0.15513,1.08305 -0.10578,-0.19225 -0.12686,-0.065 -0.0663,0.39909 0.0488,0.37448 0.0888,0.92971 0.0888,1.23389 0,0.30416 0.096,0.55297 0.21314,0.55297 0.13289,0 0.18485,0.21576 0.13829,0.57273 -0.0411,0.31487 -0.0177,0.67604 0.0521,0.80278 0.0697,0.12676 0.1269,0.49327 0.1269,0.815 0,0.32153 -0.0597,0.47673 -0.1326,0.34425 -0.0729,-0.1325 -0.1326,-0.055 -0.1326,0.17214 0,0.22706 0.0525,0.41282 0.11654,0.41282 0.0641,0 -0.26373,4.03388 -0.28935,3.91715 z m 0.0396,27.48027 c -0.0714,0.12985 -0.12974,0.0497 -0.12974,-0.17742 0,-0.22716 -0.10442,-0.41119 -0.23204,-0.40674 -0.1984,0.004 -0.20328,0.061 -0.0331,0.38615 0.15228,0.29118 0.11346,0.36079 -0.16574,0.29859 -0.29936,-0.0666 -0.36464,-0.26674 -0.36464,-1.11736 0,-0.56987 -0.0357,-1.5631 -0.0795,-2.20725 -0.0467,-0.68672 -0.019,-1.28189 0.0673,-1.43877 0.081,-0.14724 0.30289,0.0923 0.49308,0.53238 0.19018,0.43996 0.4026,0.69713 0.47186,0.57126 0.0693,-0.12587 0.11396,3.30206 -0.0275,3.55916 z", +1.269, 19.5416, +"M 0.14825 -19.5416 c -0.32661,0.39468 -0.3994,1.66107 -0.7598,2.04169 -0.41626,0.2009 -0.37637,1.71843 -0.58357,2.35306 0.0458,1.94112 -0.13983,3.86046 -0.048,5.80025 0.0294,1.34326 0.10658,2.68769 0.0855,4.03529 -0.0762,1.10649 0.0737,2.4593 -0.0252,3.70953 -0.0204,0.90305 0.056,1.55369 -0.0307,2.40511 0.0317,2.24936 0.21841,4.51036 0.0946,6.75626 -0.0753,1.08892 0.0479,1.9506 0.41334,1.69121 0.43294,0.76903 0.0677,2.22794 -0.0667,3.18578 -0.19001,0.81644 0.11544,1.40278 0.30591,1.39693 -0.0451,-0.42285 -0.28028,-2.17954 0.0281,-1.08788 0.33743,0.48853 -0.12596,2.7085 -0.38629,1.41622 -0.28035,0.0578 0.0439,1.62405 -0.26723,2.03911 -0.13348,0.55093 0.1996,1.81699 0.24795,0.69045 -0.11076,1.53067 0.61772,1.10071 0.51013,2.65016 0.0573,-0.0207 0.22667,-1.00323 0.23225,-1.34788 0.08,-0.9498 0.53243,-2.15075 0.25784,-3.07732 -0.30065,-0.79082 0.41871,-1.52126 0.11979,-2.62364 -0.0371,-0.56266 -0.17904,-1.49854 -0.12697,-0.30689 0.003,0.94503 -0.34219,0.63414 -0.29234,1.70477 -0.30776,-0.58284 0.30053,-2.415 -0.32326,-2.26952 0.11911,-0.39881 0.21227,-1.78449 0.37582,-0.58638 0.38472,0.39819 0.28972,-1.2848 0.30849,-2.1732 0.01,-1.30431 0.11678,-2.2807 -0.0501,-3.51089 -0.22551,-0.80379 0.19385,-2.07867 -0.24626,-2.47433 -0.35322,-0.76698 0.20938,-2.5558 0.24625,-0.9447 0.20473,1.61631 0.33115,-1.44215 -0.0187,-1.00535 -0.20738,-0.73783 0.50146,-0.8757 0.0966,-1.34105 -0.23718,0.80488 -0.81457,0.0175 -0.51184,-1.058 0.23378,-0.45163 0.79437,0.53657 0.57233,-1.14201 -0.13148,-0.58581 -0.34247,-1.16952 -0.45141,-1.63641 0.0722,-0.37607 0.21467,-1.5057 0.37321,-0.66014 0.20019,0.95972 0.14835,-1.38787 0.16689,-1.8434 -0.0266,-0.64918 0.1111,-1.97392 -0.17902,-1.90736 -0.13214,-0.95422 0.003,-2.15651 0.24077,-2.14256 -0.0855,-1.27561 0.30739,-2.14491 0.59873,-1.54848 0.46782,-0.57364 0.0341,-2.11974 -0.0515,-3.1238 -0.0488,-1.29164 -0.35659,-0.91037 -0.47231,-0.43792 -0.20293,-0.6018 -0.22527,-1.26026 -0.1283,-2.00164 -0.13967,-0.42976 -0.33758,0.56271 -0.34577,-0.61191 0.10408,-0.26168 0.33651,-0.79224 0.0907,-1.01316 z", +2.21549, 17.1584, +"M -0.167255 -17.1539 c -0.0167,0.007 -0.0346,0.0209 -0.0528,0.0449 -0.0209,0.0276 -0.0424,0.0677 -0.0625,0.1243 0.29371,0.10775 0.23216,-0.21534 0.1151,-0.1692 z m 0.15604,1.07656 c -0.12396,-5.2e-4 -0.2654,0.0531 -0.37769,0.13732 l -0.001,8.7e-4 c -0.0997,0.0747 -0.17632,0.1734 -0.19745,0.27884 0.47404,0.75848 -0.48688,0.22899 -0.21252,0.89958 -0.0284,1.36166 1.17753,1.85975 0.65585,3.19253 1.11667,0.51287 -0.4379,2.54995 0.4584,2.75912 -0.46709,-0.10692 -0.70481,0.87074 -0.3325,1.21901 0.65675,1.18822 -0.35631,2.59721 0.49336,3.59223 0.1701,0.19469 0.32366,-0.23386 0.45247,-0.34791 0.90751,-0.55526 -0.97382,-0.65062 -0.32228,-1.03339 1.05641,-0.14684 0.66978,-2.07793 0.30667,-2.90072 -0.1278,0.58401 -0.87195,-0.365 -0.2916,-0.99799 0.7704,0.12479 -0.23691,-1.49304 0.37823,-1.11971 0.49922,-0.62397 -0.0865,-0.88636 -0.47023,-1.2518 -0.78012,-0.24 0.39106,-0.72068 -0.12964,-1.48835 0.24984,-0.74186 0.6296,-1.90821 -0.15119,-2.37151 0.10592,-0.41508 -0.0521,-0.5672 -0.25878,-0.56805 z m 1.05236,3.59827 c -0.0745,0.0468 -0.0538,0.51726 0.13983,0.86417 0.1982,0.18937 0.12229,-0.24571 0.0775,-0.36517 -0.0941,-0.39821 -0.17239,-0.52458 -0.21681,-0.499 z m 0.65476,1.56087 c -0.0264,0.005 -0.0484,0.015 -0.0667,0.0327 -0.16138,0.15286 -0.015,0.75465 0.38253,0.79942 0.3019,0.32074 0.22976,-0.59592 0.0327,-0.63453 -0.15403,-0.15771 -0.26966,-0.21053 -0.34864,-0.1977 z m -3.49173,0.28921 c -0.0476,-0.0172 -0.11945,0.0254 -0.18993,0.11043 h -5.4e-4 c -0.11277,0.13632 -0.22294,0.3826 -0.22919,0.67337 0.0586,0.30913 0.29916,0.0322 0.34164,-0.13031 0.16947,-0.43186 0.1572,-0.62497 0.078,-0.65352 z m 3.02689,0.71223 c -0.015,-7.5e-4 -0.0279,0.007 -0.0371,0.019 -0.0354,0.0528 -0.0117,0.20856 0.1415,0.51884 l 0.1146,0.1278 c 0.14585,-0.31772 -0.10424,-0.66014 -0.21896,-0.6656 z m -0.0371,0.019 c 0,0 0,-8.9e-4 0,-8.9e-4 l -0.002,0.002 c 5e-4,-7.5e-4 0.002,-1.6e-4 0.002,-8.8e-4 z m -0.52135,6.72 c -0.3266,0.0409 -0.95395,0.87087 -1.18526,1.33727 -0.16786,-0.13281 -0.29294,-0.12997 -0.38091,-0.0431 -0.26269,0.26077 -0.19142,1.27654 0.0678,1.63511 0.24643,-0.25664 0.56346,-0.67538 0.39223,0.23741 -0.75859,0.63588 -0.69093,1.82753 -0.36102,2.9059 -0.34879,0.52437 -0.0947,1.14594 0.44171,1.23281 0.99104,0.75169 0.10007,2.18367 0.0608,3.29439 0.68087,1.18413 -0.94373,1.30332 -0.72471,2.27914 -0.69212,0.6987 -0.66851,2.92111 0.20443,3.22274 0.75306,0.225 0.20039,0.34297 -0.21036,0.51971 0.26459,0.80376 0.93921,1.0819 1.25036,1.85267 0.31277,1.28598 0.55164,-0.0849 0.42449,-0.65009 -0.66183,-0.70621 0.80496,-1.24759 0.33626,-1.56863 -0.45715,0.66148 -1.18436,-0.24337 -0.46161,-0.78475 0.90308,-0.8666 -0.34499,-1.44013 0.10057,-2.29122 0.46346,-0.31165 0.41583,-1.35705 -0.10541,-1.27598 0.002,0.36914 -0.21848,1.21584 -0.4654,0.52404 0.49413,-0.71096 1.17556,-1.9191 0.56762,-3.05611 -0.85085,-1.57139 0.80183,-0.85373 0.53587,-2.24548 0.19424,-1.25981 -0.31804,-2.6187 -0.11511,-3.72086 0.8693,-1.12613 -0.65975,-1.20057 -0.25986,-2.37756 0.17124,-0.79304 0.0835,-1.05187 -0.11243,-1.02734 z m -1.83464,17.71081 c -0.0134,0.002 -0.0271,0.0117 -0.0393,0.0319 -0.0134,0.0231 -0.0247,0.06 -0.0356,0.11477 0.2771,0.20545 0.1713,-0.16054 0.0748,-0.14684 z m 0.98242,0.93411 c -0.0473,-0.005 -0.0936,0.0117 -0.13065,0.0466 v 8.8e-4 c -0.11527,0.10642 -0.14517,0.38416 0.14585,0.72864 0.0788,0.1577 0.25607,0.25348 0.22974,-0.0665 0.0485,-0.49012 -0.10308,-0.69576 -0.24481,-0.70964 z m -0.40028,1.03683 c -0.0246,0.005 -0.0473,0.0167 -0.0662,0.0354 l -0.002,8.9e-4 c -0.0687,0.068 -0.0867,0.22859 0.0388,0.50935 l 0.14467,0.10876 c 0.31715,-0.40726 0.0558,-0.69018 -0.1156,-0.65438 z", +1.67889, 12.4576, +"M 0.170368 -12.417 c -0.11243,0.0479 -0.25614,0.13683 -0.43964,0.27748 -1.27389,0.78909 -1.21189,2.51347 -0.18945,3.31231 -0.13431,0.55548 -0.36031,1.04129 -0.87302,1.22619 0.20361,1.23934 0.72541,2.15584 0.32094,3.54244 0.008,0.02 0.015,0.0396 0.024,0.0595 -0.27904,1.22039 -1.13252,2.77766 -0.40612,3.53991 0.14735,-0.35853 0.2824,-0.44551 0.41469,-0.40806 -0.0972,0.57648 -0.15854,1.15046 -0.0182,1.72729 -0.06,2.38124 0.71903,4.78601 0.0209,7.13418 0.14601,1.27941 0.088,2.90648 1.11768,4.46334 0.20931,-0.32402 -0.26141,-4.04795 -0.1288,-4.40228 -0.87044,-5.44038 0.51261,-4.61027 0.27264,-7.20329 -0.0762,-1.65323 0.16439,0.11009 -0.0256,-1.53491 0.0358,-0.0631 0.0717,-0.12629 0.10943,-0.208 0.33307,-0.84154 1.06509,-1.4845 1.30907,-2.19339 -0.67902,-0.22846 -0.0546,-1.46994 -1.00086,-1.45768 -0.0423,-0.98007 1.23341,-1.30442 0.84312,-2.52886 -0.10207,-0.60431 -0.005,-1.4265 -0.08,-2.10218 -0.0192,-0.64914 -0.14685,-1.29953 -0.44026,-1.94485 -0.24035,-0.076 -0.43253,-0.0872 -0.58683,-0.0473 -0.003,7.9e-4 -0.007,0.003 -0.01,0.005 0.1136,-0.70342 0.31863,-1.48809 -0.23437,-1.25593 z", +0.606945, 19.5532, +"M 0.535288 -19.101 c -0.12312,-0.64981 -0.32031,-0.73191 -0.52216,0.6492 0.13498,2.03239 -0.19035,3.48484 -0.30626,5.15433 -0.22468,2.50128 -0.19194,5.27546 -0.28382,8.06552 0.14367,2.92828 -0.0892,5.74081 -0.015,8.6394 0.14902,2.95697 -0.015,5.88803 0.0117,8.84688 -0.15971,3.34873 0.87967,3.73489 0.85929,7.01865 -0.015,-0.18654 0.22435,0.61848 0.19054,0.10792 0.3206,-2.15319 -0.0271,-5.6381 0.0215,-8.31354 -0.0332,-2.93964 0.13264,-5.81334 0.0481,-8.77509 0.005,-0.0175 0.005,0.002 0.01,-0.0134 l -10e-4,-1.53853 c -0.0167,-0.17135 -0.0117,-0.39165 -4.9e-4,-0.67826 l -0.007,-8.52476 c -0.0251,-0.17877 -0.0216,-0.38728 -0.0573,-0.55526 -0.008,-0.46963 0.0383,-0.97844 0.056,-1.46172 z", +2.75846, 24.0847, +"M -0.53697 -24.0496 c -0.0684,0.29866 -0.0297,0.66596 0.13574,0.88282 0.0473,-0.31373 0.004,-0.65245 -0.12095,-0.91797 z m 0.36555,2.05274 c -0.1428,0.26785 -0.15703,0.69044 0.006,0.94726 -0.0394,0.35884 -0.44025,0.2613 -0.4462,0.64649 -0.13341,0.55376 -0.0618,1.26397 0.2782,1.6289 0.38647,-0.11637 0.44767,-0.80593 0.38665,-1.27862 -0.042,-0.65364 -0.0767,-1.31482 -0.20924,-1.94599 z m -0.0685,3.66015 c 0.0544,0.007 0.0464,-0.065 0,0 z m 0.13171,0.71485 c 0.0476,-0.0128 0.0369,-0.0718 0,0 z m 0.22847,2.58984 c -0.2894,0.77897 -0.28573,1.72489 -0.63166,2.4668 -0.47716,0.40261 -0.61905,1.44325 -0.27551,2.07422 0.26278,1.07486 -0.0427,2.34757 -0.66794,3.01562 -0.17172,0.2786 -0.0476,0.77973 0.20981,0.82791 0.38219,0.22562 0.82919,-0.30745 0.78616,-0.89087 0.15146,-1.09007 0.68275,-2.05871 0.59978,-3.21392 -0.003,-1.4276 0.18264,-2.88329 -0.0126,-4.29148 z m -0.97436,8.98632 c -0.0867,0.087 0.0488,0.007 0,0 z m -0.15187,0.90625 c -0.52835,0.40878 -0.4693,1.70374 0.0726,2.04297 0.51682,0.6066 0.26815,1.98415 -0.36821,2.19969 -0.32196,0.17741 -0.71983,0.44113 -0.75527,1.00981 -0.0704,0.4972 0.0592,1.03177 0.30905,1.38034 0.22493,0.75424 -0.1245,1.49918 -0.25804,2.21485 -0.161,0.74022 -0.28768,1.49458 -0.42066,2.24609 -0.42887,0.46517 -0.40727,1.40504 -0.13373,2.00508 0.29613,1.28961 0.23854,2.67245 0.42671,3.99298 0.18501,0.44913 0.6129,0.71487 0.60881,1.30273 -0.0974,1.02173 -0.7334,1.84226 -0.61687,2.92188 0.12358,1.36478 0.23492,2.73359 0.422,4.08398 -0.24493,1.20409 -0.0575,2.46873 0.1344,3.6582 0.13244,0.3425 0.51859,0.10392 0.49139,-0.2639 0.55319,-3.33295 0.74881,-6.77676 0.71199,-10.19928 -0.0341,-0.83387 -0.0795,-1.67038 -0.0382,-2.50557 0.0769,-0.26194 0.38773,-0.21698 0.42872,0.0606 0.15576,0.33179 0.55489,0.0325 0.49055,-0.3418 0.06,-0.507 0.13468,-1.1082 0.46904,-1.38867 0.49047,-0.0745 0.76751,0.85571 1.26869,0.67578 0.19449,-0.0457 0.51816,-0.0809 0.52146,-0.46093 -0.0813,-0.81436 -0.69657,-1.24081 -1.21561,-1.19272 -0.33451,-7.4e-4 -0.67174,-0.17488 -0.89675,-0.54267 -0.25083,-0.25457 -0.59572,0.13269 -0.82418,-0.2197 -0.16795,-0.3508 -0.22547,-0.80084 -0.2634,-1.22044 -0.006,-0.32789 -0.0804,-0.74575 0.14222,-0.96155 0.15244,-0.17908 0.31154,-0.47312 0.18536,-0.76146 -0.21856,-0.80287 -0.55515,-1.67299 -0.34299,-2.55633 0.20639,-1.08152 0.37362,-2.21388 0.29836,-3.33932 -0.28596,-1.22431 -0.25129,-2.59774 -0.71303,-3.73317 -0.026,-0.0821 -0.07,-0.13612 -0.1344,-0.10742 z m -0.89104,25.33205 c 0.0499,0.0937 0.0486,9.1e-4 0,0 z", +1.8822, 22.4677, +"M 1.25124 -21.5684 c -0.28418,-2.48971 -0.62962,0.79472 -0.69653,2.55163 -0.0134,0.33593 -0.0346,0.5327 -0.047,0.43714 -0.02,-0.15681 -0.0495,-0.15546 -0.3007,0.0153 -0.15327,0.10424 0.0424,3.35182 -0.0498,3.34843 -0.21601,-0.007 -0.41768,0.37741 -0.36668,0.70163 0.0286,0.18236 0.006,0.24818 -0.0802,0.2448 -0.11908,-0.004 -0.25364,0.43529 -0.18471,0.6037 0.71933,5.30949 -0.84428,1.36714 -0.18964,5.27515 l -0.17336,0.21594 c 0.0917,0.13776 0.14905,0.31886 0.14544,0.60895 -0.002,0.12917 0.013,0.27497 0.0381,0.42665 l -0.0218,0.006 c 0.0168,0.0338 0.0268,0.0634 0.039,0.094 0.0143,0.0729 0.0307,0.14633 0.05,0.22032 0.005,0.11878 -0.013,0.27501 -0.054,0.53201 -0.0541,0.33939 -0.13657,0.63375 -0.18319,0.65397 -0.11671,0.0506 -0.47174,-0.31269 -0.41853,-0.4284 0.0236,-0.0514 -0.008,-0.20294 -0.0696,-0.33617 -0.10666,-0.22943 -0.11316,-0.23096 -0.12398,-0.0315 -0.009,0.17127 -0.0213,0.16013 -0.0663,-0.059 -0.0305,-0.14804 -0.06,-0.19604 -0.0661,-0.10622 -0.005,0.0898 -0.0795,0.23039 -0.16355,0.31212 -0.18138,0.17617 -0.20093,0.37374 -0.046,0.46512 0.061,0.0363 0.11066,0.11279 0.10955,0.17048 -8.5e-4,0.0577 0.0954,0.32276 0.21449,0.58884 0.119,0.26609 0.21567,0.53536 0.21448,0.59889 -8.5e-4,0.0635 0.0919,0.18952 0.20682,0.27978 0.33391,0.262 0.4046,0.46417 0.37893,1.08499 -0.0255,0.61623 0.034,0.7011 0.50815,0.72217 0.35806,0.0162 0.65582,0.76507 0.53973,1.35777 l -0.0519,0.2636 -0.14759,-0.22163 c -0.0812,-0.122 -0.18117,-0.19419 -0.22184,-0.16043 -0.0407,0.034 -0.0928,-0.0143 -0.11598,-0.10711 -0.0668,-0.26845 -0.30372,-0.21195 -0.36208,0.0865 -0.0286,0.14608 -0.10177,0.26395 -0.16293,0.26142 -0.0612,-0.002 -0.11204,0.0439 -0.11323,0.10273 -8.4e-4,0.0588 -0.0557,0.10482 -0.1212,0.10228 -0.0995,-0.003 -0.11067,0.0715 -0.0685,0.45245 0.0278,0.2512 0.0474,0.70532 0.0445,1.00937 -0.005,0.46262 0.0255,0.59462 0.19024,0.8096 0.10822,0.14128 0.21652,0.38557 0.24057,0.54249 0.0239,0.15696 0.10666,0.38658 0.18349,0.51059 0.0826,0.13306 0.13642,0.3788 0.13286,0.59976 -0.005,0.29947 -0.0602,0.43199 -0.27492,0.66315 -0.29456,0.31713 -0.32923,0.45939 -0.16264,0.66709 0.0663,0.0827 0.10722,0.31839 0.10188,0.59277 -0.006,0.36907 0.035,0.51904 0.22,0.79079 0.17112,0.25109 0.20751,0.35709 0.18442,0.59584 l -0.67781,0.21289 c 0.0524,0.58516 -0.0123,0.94307 -0.20099,0.93593 -0.1353,-0.005 -0.20989,0.31179 -0.2378,1.00981 -0.0241,0.60164 -0.11859,0.82734 -0.43141,1.02948 -0.21966,0.14195 -0.22403,0.19455 -0.112,1.34903 0.0368,0.38004 0.68935,2.90966 0.7272,2.97271 0.0949,0.15747 0.0814,0.40225 -0.0366,0.66257 -0.11787,0.2598 -0.13449,0.64857 -0.0423,0.98759 0.0667,0.24519 0.0456,0.44952 -0.0548,0.532 -0.0228,0.0188 -0.0711,0.63594 0.0835,1.35624 0.0409,0.19057 0.50838,1.19206 0.55879,1.39985 0.35151,1.44898 0.46272,2.37383 0.46272,2.37383 0.79566,1.73874 0.72766,1.04386 0.63346,0.41525 2.3e-4,-0.0113 0.27534,-0.54652 0.19995,-0.70081 -0.15301,-0.31339 -0.17759,-0.66368 -0.083,-1.18261 0.0379,-0.20818 0.0431,-0.45443 0.016,-0.78147 -0.0498,-0.60249 -0.0427,-0.9744 0.0205,-1.07732 0.0273,-0.0442 0.0455,-0.20317 0.0407,-0.35337 -0.005,-0.15019 0.008,-0.40879 0.0283,-0.57478 0.0361,-0.29302 -0.0429,-0.6788 -0.13963,-0.68256 -0.0551,-0.002 -0.036,-0.53013 0.0208,-0.57728 0.0735,-0.061 0.0636,-0.34385 -0.0156,-0.44254 -0.0385,-0.048 -0.0692,-0.13755 -0.0682,-0.19891 8.5e-4,-0.0614 -0.0387,-0.22756 -0.0887,-0.36892 -0.0547,-0.15488 -0.0881,-0.38704 -0.0846,-0.58367 0.004,-0.17953 0.25499,-2.55145 0.21196,-2.61624 -0.10744,-0.16134 -0.0424,-0.84634 0.0767,-0.80785 0.0511,0.0165 0.0952,-0.062 0.097,-0.17486 0.005,-0.31876 -0.0724,-0.5529 -0.16081,-0.47955 -0.0451,0.0375 -0.0572,0.0165 -0.0276,-0.0476 0.006,-0.0155 0.0119,-0.0321 0.0145,-0.049 l 0.1838,-0.0577 c -0.0115,-0.0716 -0.0185,-0.14175 -0.0282,-0.21332 0.20698,0.0786 0.41395,-0.23158 0.42283,-0.71561 0.005,-0.26614 0.0327,-0.33495 0.1166,-0.28546 0.12218,0.0721 0.27032,-0.32611 0.27768,-0.7484 0.002,-0.0908 -0.0206,-0.17365 -0.0559,-0.23737 5.9e-4,-0.0146 0.002,-0.0265 0.004,-0.0424 0.005,-0.34543 -0.25055,-1.04474 -0.35226,-0.9604 -0.11645,0.0967 -0.30456,-0.0735 -0.301,-0.2719 0.002,-0.10386 -0.0615,-0.41419 -0.14115,-0.68982 -0.11849,-0.41032 -0.13308,-0.61892 -0.0811,-1.1497 0.0697,-0.71055 0.11872,-0.77415 0.58883,-0.76544 0.238,0.004 0.28272,-0.0309 0.28627,-0.22645 0.002,-0.12743 0.0471,-0.25037 0.0991,-0.27321 0.0739,-0.0324 0.0727,-0.0806 -0.005,-0.2212 -0.0565,-0.10309 -0.0965,-0.4463 -0.0923,-0.80434 0.005,-0.50518 0.0383,-0.66811 0.17397,-0.85156 0.2095,-0.28327 0.22253,-0.69385 0.0313,-0.98096 -0.13165,-0.19763 -0.12715,-0.26243 0.016,-0.22994 0.027,0.006 0.0267,-0.12053 -3e-4,-0.28152 -0.0271,-0.16095 -0.0753,-0.26956 -0.10744,-0.24131 -0.0321,0.0282 -0.10477,-0.11781 -0.16139,-0.32479 -0.08,-0.29191 -0.11861,-0.34197 -0.17307,-0.22339 -0.11294,0.2457 -0.17081,-0.12246 -0.0727,-0.46293 0.0682,-0.23598 0.0579,-0.30034 -0.0653,-0.39999 -0.10565,-0.0857 -0.14006,-0.21238 -0.12273,-0.45333 0.0132,-0.18386 -0.0139,-0.35393 -0.0604,-0.37813 -0.0466,-0.0241 -0.17138,-0.16327 -0.27646,-0.30993 -0.14602,-0.2042 -0.17876,-0.32905 -0.13838,-0.53551 0.0291,-0.14806 0.0832,-0.29471 0.12058,-0.32567 0.11733,-0.0974 0.0792,-0.33666 -0.10677,-0.66884 -0.0991,-0.17651 -0.15862,-0.34993 -0.13256,-0.38512 0.0261,-0.0352 0.0492,-0.35308 0.0528,-0.70643 0.004,-0.35346 0.0287,-0.6367 0.0573,-0.62993 0.14508,0.0352 0.31458,-0.0129 0.31636,-0.0896 4.8e-4,-0.0395 -0.042,-0.13954 -0.0951,-0.23868 l 0.11112,-0.0301 c -0.0111,-0.0958 -0.0399,-0.22407 -0.0386,-0.28983 0.002,-0.0834 0.0713,-0.1796 0.15527,-0.2142 0.0838,-0.0346 0.13399,-0.10798 0.11167,-0.16306 -0.0224,-0.055 -0.005,-0.18319 0.0394,-0.28502 0.0692,-0.15973 0.0802,-0.14567 0.0772,0.10142 -0.002,0.15765 0.0451,0.35827 0.10343,0.44589 0.0579,0.0877 0.0857,0.18709 0.0608,0.22076 -0.004,0.004 0.0112,0.0354 0.01,0.0433 l 0.1746,-0.0472 c -0.008,-0.0688 -0.0286,-0.0867 -0.0208,-0.19104 0.0154,-0.20696 6e-4,-0.4013 -0.0325,-0.43233 -0.0332,-0.0311 -0.041,-0.12276 -0.0174,-0.20371 0.0236,-0.0809 0.009,-0.24097 -0.031,-0.35584 -0.0524,-0.14895 -0.0466,-0.24767 0.0196,-0.34447 0.0735,-0.10616 0.0727,-0.11992 -0.002,-0.0634 -0.11355,0.0858 -0.20488,-0.23611 -0.26541,-0.93593 -0.0346,-0.40002 -0.0183,-0.50647 0.0887,-0.58665 0.10165,-0.076 0.1255,-0.20309 0.1071,-0.56917 -0.0173,-0.34244 0.009,-0.5044 0.0958,-0.59364 0.0992,-0.10173 0.1041,-0.161 0.0298,-0.34535 -0.0495,-0.12234 -0.0867,-0.38173 -0.0832,-0.57659 0.004,-0.19488 -0.0302,-0.40942 -0.0748,-0.47649 -0.0448,-0.0671 -0.0747,-0.45108 -0.0669,-0.85331 0.0111,-0.53051 -0.0185,-0.78692 -0.10588,-0.93418 -0.11429,-0.19274 -0.16109,-1.16523 -0.12426,-2.58004 0.005,-0.23051 -0.0111,-0.47175 -0.0377,-0.53638 -0.085,-0.20429 -0.0795,-0.43155 0.0115,-0.50709 0.0628,-0.0521 0.0982,-0.7782 0.12335,-2.54026 0.0111,-0.7367 0.0229,-1.05157 0.0353,-1.42947 z", +2.42744, 13.3932, +"M -1.21246 -13.3117 c -0.52065,0.12572 -0.51196,0.12241 -1.03612,0.24908 -0.001,0.0734 0.0127,0.13564 0.008,0.20774 l -0.0413,0.60203 0.49247,-0.0656 c 0.3575,-0.0477 0.5449,-0.0103 0.68368,0.13592 0.10525,0.11049 0.21523,0.17879 0.24443,0.15089 0.0553,-0.0525 0.18585,0.42322 0.50591,1.84847 0.40153,1.78589 0.46949,2.16266 0.39429,2.16266 -0.043,2.5e-4 0.005,0.0582 0.10801,0.12919 0.16623,0.1151 0.1658,0.14317 -0.006,0.25114 -0.1387,0.0873 -0.15256,0.14904 -0.0501,0.22015 0.21167,0.14601 0.22839,0.42645 0.0548,0.91828 -0.0852,0.24126 -0.19974,0.751 -0.25424,1.13224 -0.0545,0.38124 -0.13282,0.79864 -0.17312,0.9281 -0.0476,0.15154 -0.0232,0.20647 0.0687,0.15297 0.0797,-0.0464 0.13994,5.4e-4 0.13694,0.10697 -0.003,0.10433 -0.0625,0.22286 -0.13332,0.26406 -0.0707,0.0411 -0.13559,0.30272 -0.1416,0.58085 -0.009,0.34992 0.0322,0.47879 0.13488,0.41909 0.0929,-0.0543 0.11283,-0.0321 0.0532,0.0589 -0.22213,0.33938 -0.21073,0.73976 0.0279,0.96739 0.27232,0.25969 0.31048,0.5796 0.0935,0.78548 -0.1029,0.0973 -0.10442,0.20891 -0.007,0.40359 0.0743,0.14815 0.11655,0.465619 0.094,0.705379 -0.0314,0.33474 0.0303,0.49527 0.26613,0.69092 0.39591,0.32862 0.4506,0.97704 0.0971,1.15445 -0.19818,0.0995 -0.25884,0.08 -0.30024,-0.0971 -0.0413,-0.17754 -0.0559,-0.18235 -0.0718,-0.0238 -0.0147,0.14713 -0.11818,0.18202 -0.39791,0.13332 -0.33766,-0.0586 -0.37754,-0.0306 -0.38654,0.26458 -0.005,0.1817 -0.0655,0.33614 -0.1354,0.34314 -0.0697,0.007 -0.18114,0.0178 -0.24804,0.0248 -0.0668,0.007 -0.20301,0.11829 -0.30231,0.24701 -0.0994,0.12871 -0.25695,0.2064 -0.34985,0.1726 -0.19915,-0.0722 -0.63789,0.30833 -0.64389,0.55914 -0.008,0.28898 0.32739,0.49631 0.64751,0.40101 0.16115,-0.0479 0.37848,-0.0986 0.48317,-0.11265 0.6821,-0.0915 0.75775,-0.16898 0.69815,-0.71314 -0.0515,-0.47073 -0.0192,-0.55211 0.31006,-0.78135 0.25416,-0.17695 0.44432,-0.22349 0.61702,-0.15089 0.24881,0.10484 0.24866,0.10527 -0.004,0.12247 -0.1394,0.009 -0.29578,0.009 -0.34778,0 -0.0519,-0.01 -0.0957,0.043 -0.0977,0.11731 -0.002,0.0774 0.10491,0.10318 0.25115,0.061 0.26076,-0.0754 0.35205,0.12076 0.11937,0.25631 -0.071,0.0413 -0.0973,0.21478 -0.0594,0.38551 0.0649,0.2906 -0.0353,0.37589 -0.36948,0.31419 -0.0517,-0.01 -0.0962,0.0455 -0.0982,0.12247 -0.002,0.0766 0.0821,0.10935 0.18655,0.0724 0.10479,-0.0372 0.18115,-0.0268 0.17415,0.0227 -0.009,0.0495 -0.004,0.14704 0.0109,0.21704 0.0872,0.41425 -0.088,1.66625 -0.25579,1.82779 -0.17035,0.164 -0.21288,0.15606 -0.37621,-0.0729 -0.1012,-0.14177 -0.23055,-0.34474 -0.28835,-0.45062 -0.0858,-0.15729 -0.1361,-0.16357 -0.2744,-0.0336 -0.16719,0.15723 -0.063,0.30632 0.31419,0.4501 0.062,0.0236 -0.01,0.26437 -0.15968,0.53537 -0.14984,0.27102 -0.33181,0.72807 -0.40411,1.01544 -0.12606,0.50143 -0.11796,0.52568 0.1974,0.59738 0.23372,0.0532 0.38925,0.22256 0.53899,0.58757 0.27181,0.66258 0.33329,2.3657 0.093,2.57865 -0.14193,0.12572 -0.13896,0.17735 0.0181,0.29869 0.20771,0.16041 0.23365,1.24108 0.0444,1.85518 -0.10282,0.33391 -0.0903,0.34552 0.38603,0.35812 0.0498,0.001 0.0875,0.0324 0.14056,0.0393 l 2.02778,-1.91874 c 0.0391,-0.84014 0.0901,-1.31251 0.20567,-1.42214 0.1408,-0.13348 0.16273,-0.22373 0.0687,-0.28474 -0.0888,-0.0584 -0.11201,-0.52874 -0.0651,-1.34978 0.0634,-1.11341 0.0451,-1.28034 -0.15968,-1.43196 -0.12777,-0.0943 -0.22728,-0.30706 -0.22428,-0.47284 0.005,-0.16601 -0.0515,-0.3404 -0.12454,-0.3886 -0.0731,-0.048 -0.0993,-0.16882 -0.0579,-0.26872 0.0422,-0.10162 0.0192,-0.14879 -0.0517,-0.10749 -0.22711,0.13224 -0.12436,-0.27378 0.14314,-0.56637 0.2846,-0.31158 0.33629,-0.4973 0.13953,-0.50229 -0.0693,-0.002 -0.12444,-0.0905 -0.12144,-0.19689 0.003,-0.10651 -0.074,-0.22624 -0.17053,-0.26614 -0.27152,-0.11237 -0.32136,-0.54803 -0.078,-0.68161 0.1171,-0.0642 0.15641,-0.12105 0.0868,-0.12506 -0.0694,-0.004 -0.13414,-0.24406 -0.14314,-0.5333 -0.009,-0.28926 -0.11377,-0.63887 -0.23255,-0.77721 -0.18088,-0.21019 -0.21428,-0.54858 -0.20928,-2.06292 0.006,-1.693699 0.0211,-1.808719 0.23564,-1.769919 0.21803,0.0394 0.41737,-0.1166 0.42736,-0.33435 0.002,-0.055 -0.0668,-0.0927 -0.15399,-0.0837 -0.56087,0.0579 -0.60799,-0.005 -0.56689,-0.7519 0.0221,-0.39949 -0.0155,-0.87281 -0.0832,-1.05213 -0.14126,-0.3744 0.0208,-0.75214 0.31936,-0.74414 0.10486,0.003 0.15977,-0.048 0.12247,-0.11265 -0.0376,-0.0646 0.004,-0.13992 0.092,-0.16692 0.12652,-0.039 0.12829,-0.0886 0.008,-0.24236 -0.0831,-0.10642 -0.15413,-0.46452 -0.15813,-0.79582 -0.004,-0.33891 -0.0742,-0.62959 -0.1602,-0.66559 -0.0981,-0.0407 -0.14427,-0.3485 -0.13177,-0.85886 0.0114,-0.43746 -0.0148,-0.97902 -0.0579,-1.20355 -0.0579,-0.30105 -0.0202,-0.47 0.14418,-0.64233 0.17836,-0.18698 0.20786,-0.35499 0.14676,-0.8413 -0.0419,-0.33433 -0.0924,-0.83108 -0.11214,-1.10381 -0.0199,-0.27268 -0.0595,-0.52067 -0.0879,-0.55087 -0.0287,-0.0302 0.0105,-0.22077 0.0873,-0.42374 0.17376,-0.45944 -0.0535,-1.17751 -0.34055,-1.07591 -0.10107,0.0357 -0.20737,0.0633 -0.23667,0.0631 -0.0292,-7.8e-4 -0.0549,0.0807 -0.0579,0.18087 -0.003,0.10015 -0.0715,0.22122 -0.15296,0.26871 -0.0924,0.0533 -0.11257,0.0315 -0.0543,-0.0574 0.052,-0.0791 0.0375,-0.14476 -0.032,-0.14676 -0.0696,-0.002 -0.16379,0.0535 -0.20929,0.12299 -0.0455,0.0695 -0.14895,0.0835 -0.22945,0.0305 -0.0807,-0.0528 -0.34584,-0.10465 -0.58911,-0.11265 -0.2954,-0.011 -0.39714,-0.0935 -0.48317,-0.27751 z", + ) +specks=( +0.19582, 0.378634, +"M -0.161959 -0.371071 c -0.1979,0.116362 0.54642,1.511327 0.31137,0.17337 -0.16941,-0.158525 -0.26567,-0.200234 -0.31137,-0.17337 z", +0.0857523, 0.142767, +"M -0.0570877 -0.130051 c -0.079,0.08213 0.0173,0.518112 0.14284,0.08157 -0.0697,-0.09649 -0.11628,-0.108996 -0.14284,-0.08157 z", +0.25372, 0.210386, +"M 0.0480998 -0.205499 c -0.42327,0.07051 -0.4419,0.885499 0.20562,0.02193 -0.0763,-0.02736 -0.14491,-0.032 -0.20562,-0.02193 z", +0.140526, 0.148695, +"M -0.13122 -0.139672 c -0.0745,0.07221 0.32456,0.53906 0.26582,0.107512 -0.16476,-0.111376 -0.2411,-0.131561 -0.26582,-0.107512 z", +0.249924, 0.342306, +"M -0.114966 -0.341551 c -0.34386,0.03623 0.04,1.35907 0.36489,0.226387 -0.16717,-0.174662 -0.28557,-0.234744 -0.36489,-0.226387 z", +0.825503, 0.732431, +"M -0.326263 0.732431 c 0.0466,-0.194767 0.0978,-0.389834 0.33522,-0.575911 0.67157,-0.184934 1.35761,-1.225527 0.16941,-0.77828 -0.39118,0.182831 -0.72402,0.18703 -1.00387,0.107874 z", +0.16647, 0.33039, +"M -0.07457 -0.329965 c -0.15388,0.01622 -0.13629,0.783005 0.22124,0.643371 l 0.0198,-0.08888 -0.0371,-0.25956 c -0.0823,-0.222794 -0.15267,-0.300475 -0.20355,-0.295097 z", +0.262126, 0.290338, +"M -0.233294 -0.271662 c -0.17079,0.144103 0.47197,1.053092 0.49542,0.204111 -0.29067,-0.215468 -0.43843,-0.252153 -0.49542,-0.204111 z", +0.240004, 0.127086, +"M -0.124553 -0.0975163 c -0.46137,0.111203 0.63127,0.460222 0.30142,-0.02957 -0.13801,0.0028 -0.23555,0.01328 -0.30142,0.02957 z", +0.221255, 0.286652, +"M -0.173286 -0.268838 c -0.24785,0.147346 0.55483,1.130889 0.36527,0.06706 -0.19413,-0.09043 -0.30799,-0.101042 -0.36527,-0.06706 z", +0.187681, 0.221884, +"M -0.00844687 -0.221884 c -0.63303,0.150003 0.66682,0.918773 0,0 z", +0.186594, 0.274126, +"M -0.108183 -0.271572 c -0.33666,0.06033 0.53913,1.16614 0.22586,0.04727 -0.10437,-0.04356 -0.17776,-0.05583 -0.22586,-0.04727 z", +0.143206, 0.14809, +"M -0.134411 -0.138893 c -0.0733,0.07232 0.33765,0.536966 0.27008,0.106063 -0.16769,-0.110755 -0.24568,-0.130215 -0.27008,-0.106063 z", +0.205727, 0.193789, +"M -0.128883 -0.184279 c -0.27335,0.08926 0.26505,0.768387 0.33461,0.05638 -0.16492,-0.06656 -0.27156,-0.07703 -0.33461,-0.05638 z", +0.305162, 0.456411, +"M 0.128243 -0.44135 c -0.29988,0.132509 -0.79724,1.080982 -0.0121,0.866257 l 0.0851,-0.147363 0.073,-0.208094 c 0.0833,-0.462398 -0.0138,-0.57096 -0.1475,-0.510616 z", +0.218898, 0.391658, +"M -0.131822 -0.379923 c -0.19943,0.127506 -0.0454,1.240958 0.35072,0.543718 l -0.0293,-0.2389 c -0.14923,-0.280285 -0.25533,-0.347357 -0.32181,-0.304858 z", +0.314969, 0.187616, +"M -0.110991 -0.158343 c -0.32093,0.126299 -0.30492,0.600436 0.35146,0.16703 l 0.0607,-0.06813 0.0138,-0.06262 c -0.17113,-0.08176 -0.31579,-0.07863 -0.42277,-0.03643 z", +0.144384, 0.265972, +"M -0.0991 -0.265684 c -0.18575,-0.02027 0.26116,1.038075 0.24294,0.222501 -0.1237,-0.15592 -0.19996,-0.217867 -0.24294,-0.222501 z", +0.249929, 0.219643, +"M -0.0945313 -0.210573 c -0.25801,0.08907 -0.22795,0.792505 0.34446,0.186141 -0.1406,-0.177396 -0.25858,-0.215823 -0.34446,-0.186141 z", +0.311515, 0.537401, +"M -0.140345 -0.534025 c -0.2896,0.082 -0.25686,1.549308 0.45186,0.911044 l -0.009,-0.160716 -0.0654,-0.241334 c -0.1551,-0.409456 -0.28705,-0.536186 -0.38358,-0.508808 z", +0.177607, 0.337109, +"M -0.0901732 -0.335988 c -0.24366,0.04365 0.0797,1.339997 0.26778,0.215464 -0.12508,-0.168462 -0.21151,-0.225565 -0.26778,-0.215464 z", +0.174549, 0.307061, +"M -0.0785809 -0.300444 c -0.14612,0.07522 -0.16717,0.806477 0.23933,0.555164 l 0.0138,-0.09759 v 0 c -0.0894,-0.391069 -0.18135,-0.492186 -0.24739,-0.457993 z", +0.103904, 0.181685, +"M -0.0611958 -0.180411 c -0.10023,0.0313 -0.0155,0.631126 0.1651,0.216629 -0.0781,-0.174417 -0.13129,-0.227114 -0.1651,-0.216629 z", +0.300084, 0.415141, +"M -0.145146 -0.407237 c -0.287,0.106735 -0.19552,1.250324 0.44523,0.648168 l -0.0387,-0.306045 c -0.17379,-0.297695 -0.31118,-0.377743 -0.40684,-0.342148 z", +0.871496, 0.707663, +"M 0.738024 -0.703243 c 0.1632,-0.03202 0.20538,0.105011 -0.038,0.573046 -0.007,0.328165 0.23952,1.188452 -0.39899,0.681635 -0.51284,-0.241795 -1.94836,0.149951 -0.63082,-0.4331 0.18654,-0.245067 0.7955,-0.768223 1.06753,-0.82157 z", +0.197296, 0.279834, +"M -0.119824 -0.279832 c -0.264,-0.0013 0.22383,1.101454 0.31712,0.214591 -0.15509,-0.155747 -0.25613,-0.214387 -0.31712,-0.214591 z", +0.362209, 0.376951, +"M -0.0190514 -0.364089 c 0.31129,-0.08445 0.64101,0.259813 0.068,0.656187 -0.0781,-0.02833 -0.31369,0.170722 -0.40954,0.03985 -0.0204,-0.440504 0.15544,-0.645356 0.34191,-0.696058 z", +0.322117, 0.43818, +"M 0.123244 -0.437076 c 0.21552,-0.01825 0.34427,0.190347 -0.0901,0.577559 0.0262,0.147674 -0.23676,0.452306 -0.33939,0.202753 -0.0887,-0.518231 0.21366,-0.762308 0.42909,-0.780276 z", +0.245771, 0.389516, +"M -0.127069 -0.385828 c -0.24435,0.07803 -0.10731,1.36138 0.37284,0.449505 -0.16786,-0.367879 -0.29138,-0.475521 -0.37284,-0.449505 z", +0.230177, 0.205962, +"M 0.0753834 -0.190211 c 0.31684,-0.138599 0.11369,0.694489 -0.30556,0.278851 0.13249,-0.162699 0.23246,-0.246844 0.30556,-0.278851 z", +0.195686, 0.378332, +"M -0.161823 -0.370693 c -0.19787,0.116276 0.54614,1.510428 0.31108,0.172533 -0.16941,-0.158542 -0.26538,-0.199394 -0.31108,-0.172533 z", +0.156073, 0.178711, +"M -0.123092 -0.173272 c 0.12455,-0.06557 0.54867,0.486539 0.0207,0.320803 -0.073,-0.208356 -0.063,-0.298951 -0.0207,-0.320803 z", +0.292868, 0.408748, +"M -0.0994831 -0.377205 c 0.2675,-0.127455 0.66049,0.135735 0.12818,0.70988 -0.0423,0.149106 -0.21965,0.04812 -0.24627,-0.04082 -0.15751,-0.374986 -0.0435,-0.592568 0.11835,-0.669165 z", +0.23406, 0.207114, +"M 0.15688 -0.205786 c 0.21509,-0.03505 -0.053,0.63824 -0.39094,0.33352 0.19441,-0.231554 0.31926,-0.321849 0.39094,-0.33352 z", +0.201117, 0.166598, +"M -0.0170272 -0.150178 c 0.25106,-0.12761 0.39144,0.539989 -0.18409,0.23713 0.0628,-0.135856 0.1261,-0.207647 0.18409,-0.23713 z", +0.114132, 0.18984, +"M -0.0125222 -0.189323 c 0.12162,-0.02091 0.24963,0.600837 -0.10161,0.293838 0.0204,-0.208237 0.0609,-0.286747 0.10161,-0.293838 z", +0.0915151, 0.173045, +"M -0.00111513 -0.171143 c 0.1168,-0.04285 0.15872,0.6575 -0.0904,0.172206 0.0312,-0.113136 0.0631,-0.162096 0.0904,-0.172206 z", +0.197077, 0.0630351, +"M -0.0264672 -0.0279184 c 0.34231,-0.128835 0.29613,0.142843 -0.17061,0.08191 0.0647,-0.03707 0.12128,-0.06352 0.17061,-0.08191 z", +0.32193, 0.326561, +"M -0.0297401 -0.311587 c 0.33824,-0.13351 0.67663,0.670587 -0.23729,0.637132 l -0.0549,-0.125695 c 0.0671,-0.318517 0.17898,-0.466864 0.29172,-0.511371 z", +0.15739, 0.161874, +"M -0.112614 -0.152979 c 0.14163,-0.07868 0.53585,0.392922 -0.0121,0.303528 -0.0537,-0.189612 -0.0352,-0.27729 0.0121,-0.303528 z", +0.492892, 0.413638, +"M -0.474932 -0.402985 c 0.083,-0.07235 0.43945,0.238304 0.76375,0.494301 0.64017,0.214078 -0.41841,0.52196 -0.55019,0.144016 -0.21378,-0.413279 -0.26311,-0.594893 -0.21413,-0.638157 z", +0.280378, 0.178761, +"M -0.23433 -0.147759 c 0.20564,-0.136598 1.00237,0.215878 0.0761,0.32652 -0.14871,-0.18142 -0.14543,-0.28092 -0.0761,-0.32652 z", +0.162268, 0.210341, +"M -0.102042 -0.210249 c -0.15268,-0.0093 0.003,0.684278 0.26431,0.309297 -0.12766,-0.225447 -0.21324,-0.306126 -0.26431,-0.309297 z", +0.173218, 0.312533, +"M 0.0960123 -0.312183 c 0.1701,0.02182 0.0498,1.05689 -0.26923,0.415217 0.12369,-0.317554 0.21268,-0.422492 0.26923,-0.415217 z", +0.225385, 0.163164, +"M -0.170322 -0.147418 c 0.19286,-0.101284 0.78196,0.319518 0.005,0.310437 -0.0894,-0.185115 -0.0687,-0.276769 -0.005,-0.310437 z", +0.256583, 0.29513, +"M 0.153207 -0.27621 c -0.24739,0.13332 -0.78467,0.91045 0.003,0.399077 0.15923,-0.386903 0.10662,-0.459705 -0.003,-0.399077 z", +0.142144, 0.160053, +"M -0.0769161 -0.159666 c -0.19378,0.01932 0.0939,0.633237 0.21906,0.107305 -0.10454,-0.08281 -0.17446,-0.111446 -0.21906,-0.107305 z", +0.257763, 0.339205, +"M -0.152337 -0.339123 c -0.34676,0.01225 0.26021,1.339727 0.4101,0.24746 -0.19896,-0.18325 -0.33009,-0.250231 -0.4101,-0.24746 z", +0.358938, 0.665171, +"M -0.0631218 -0.64564 c 0.1073,-0.03088 0.24635,-0.02708 0.42206,0.02536 -0.16562,0.294692 0.0819,1.345849 -0.37241,1.282725 -0.38085,-0.375619 -0.51502,-1.172797 -0.0474,-1.308222 z", +0.514964, 0.316052, +"M 0.0658635 -0.289668 c -0.47326,0.143016 -1.01805,0.807806 -0.02,0.544771 0.16837,-0.03778 0.41057,-0.08108 0.4691,-0.279942 -0.034,-0.28679 -0.23428,-0.329746 -0.44939,-0.264863 z", +0.28151, 0.425671, +"M -0.238974 -0.406955 c 0.18858,-0.163182 0.91161,0.793301 0.2413,0.832626 l -0.18057,-0.220986 c -0.12698,-0.378745 -0.12387,-0.557216 -0.0604,-0.611607 z", +0.146439, 0.286498, +"M -0.0593209 -0.282103 c -0.20198,0.07761 -0.019,1.143862 0.20576,0.141757 -0.0918,-0.124884 -0.15889,-0.159664 -0.20576,-0.141757 z", +0.224774, 0.345217, +"M -0.143886 -0.34214 c -0.21102,0.06745 0.0186,1.204903 0.36866,0.40122 -0.1801,-0.327159 -0.29833,-0.423613 -0.36866,-0.40122 z", +0.364393, 0.448279, +"M 0.118202 -0.416096 c -0.35164,0.168272 -0.86793,0.937323 -0.0295,0.85876 l 0.1563,-0.199134 c 0.2359,-0.645352 0.0842,-0.760655 -0.1268,-0.659676 z", +0.178445, 0.406469, +"M 0.0463255 -0.4059 c 0.18761,0.03174 0.22558,1.377763 -0.22477,0.5358 0.0833,-0.411175 0.16234,-0.546375 0.22477,-0.5358 z", +0.304022, 0.447803, +"M -0.00200764 -0.442434 c -0.3188,0.09523 -0.5662,1.415475 0.23893,0.655491 l 0.0671,-0.219199 c -0.0863,-0.363197 -0.19964,-0.467949 -0.30603,-0.436344 z", +0.738368, 0.337605, +"M -0.320121 -0.185236 c 0.66788,-0.249967 1.7692,-0.202284 0.41521,0.216789 -0.27722,0.04994 -0.4964,0.346511 -0.78619,0.3014 -0.14647,-0.229779 0.0671,-0.404455 0.37101,-0.518134 z", +0.375081, 0.882719, +"M -0.0815792 -0.881282 c -0.0944,0.0069 -0.19344,0.08954 -0.2912,0.259464 0.43267,0.359195 -0.52183,2.120841 0.4626,1.279309 0.52762,-0.392181 0.23605,-1.588716 -0.17148,-1.538687 z", +0.352805, 1.09079, +"M -0.163519 -1.08216 c 0.0236,-0.0085 0.05,-0.01121 0.0787,-0.0059 0.20435,0.405278 0.95305,2.696139 -0.15267,2.071683 -0.0376,-0.500541 -0.27879,-1.943774 0.0742,-2.06522 z", +0.41009, 1.14354, +"M 0.143813 -1.1422 c 0.118,-0.0138 0.21959,0.07711 0.26221,0.355831 0.0248,0.57158 -0.0509,3.125281 -0.59151,1.256692 -0.51863,-0.436258 -0.024,-1.551867 0.32926,-1.612506 z", +0.140552, 0.154723, +"M 0.0177994 -0.154723 c -0.5212,0.106098 0.44996,0.639827 0,0 z", +0.533274, 0.437204, +"M -0.502236 -0.433749 c -0.0649,0.02284 -0.0361,0.171895 0.16389,0.539065 0.1023,0.205429 0.86901,0.563972 0.87162,0.118795 -0.2874,-0.156058 -0.89227,-0.709351 -1.03553,-0.657957 z", +0.200361, 0.314278, +"M -0.124469 -0.30535 c -0.17097,0.09682 -0.049,0.951731 0.32483,0.477136 l -0.0547,-0.244774 c -0.12404,-0.21357 -0.21339,-0.264707 -0.27044,-0.232426 z", +0.274543, 0.539917, +"M -0.0453373 -0.535301 c -0.54472,0.105752 0.0193,1.964059 0.27489,0.540906 0.031,-0.148363 0.0654,-0.312167 0.03,-0.464016 -0.12663,-0.07108 -0.22779,-0.09212 -0.30563,-0.07677 z", +0.171092, 0.292515, +"M -0.137189 -0.285982 c 0.12732,-0.0772 0.5456,0.554711 0.12559,0.578497 l -0.11369,-0.216331 c -0.0635,-0.232403 -0.0552,-0.336408 -0.0103,-0.362199 z", +0.270716, 0.41871, +"M -0.224043 -0.39102 c -0.27325,0.221011 0.75659,1.649373 0.43008,0.09126 -0.23446,-0.129041 -0.36699,-0.142153 -0.43008,-0.09126 z", +0.173802, 0.188374, +"M 0.0173279 -0.186489 c 0.18489,-0.03985 0.2935,0.568112 -0.19113,0.311443 0.0597,-0.212936 0.13008,-0.298228 0.19113,-0.311443 z", +0.23479, 0.730233, +"M -0.0770773 -0.699585 c -0.11437,0.07401 -0.20017,0.281408 -0.13542,0.641983 0.0405,0.983203 0.0543,1.109157 0.35222,0.01811 0.23794,-0.534592 -0.0224,-0.783153 -0.21742,-0.659545 z", +0.439088, 0.707771, +"M 0.246767 -0.701228 c -0.10299,0.02191 -0.25293,0.102474 -0.45902,0.264588 -0.16872,0.17726 -0.43644,1.694364 0.0511,0.931154 0.43805,-0.288567 0.85607,-1.292506 0.40786,-1.195742 z", +0.139899, 0.344117, +"M -0.0663814 -0.336297 c -0.14129,0.105407 -0.0823,1.226019 0.20628,0.344756 -0.0904,-0.302541 -0.15923,-0.379811 -0.20628,-0.344756 z", +0.102613, 0.185851, +"M 0.0541974 -0.185523 c 0.10196,0.01725 0.0397,0.631684 -0.15681,0.242402 0.0711,-0.187404 0.12283,-0.247802 0.15681,-0.242402 z", +0.302008, 0.560567, +"M -0.0270707 -0.55462 c -0.18178,0.03761 -0.35011,0.264001 -0.23973,0.713802 0.0228,0.671208 0.15302,0.377879 0.44061,0.0069 0.28805,-0.504213 0.0331,-0.769335 -0.20105,-0.721031 z", +0.085711, 0.142485, +"M -0.056959 -0.129834 c -0.0792,0.08246 0.0173,0.517289 0.14267,0.08091 -0.0697,-0.09661 -0.11541,-0.107822 -0.14267,-0.08091 z", +0.180055, 0.427331, +"M -0.0363549 -0.425781 c 0.19187,0.05348 0.43026,1.467351 -0.1437,0.536886 0.0224,-0.422025 0.08,-0.554673 0.1437,-0.536886 z", +0.253994, 0.158651, +"M -0.157396 -0.151199 c -0.33829,0.07177 0.31285,0.629548 0.41139,0.04756 -0.20239,-0.05529 -0.33338,-0.06404 -0.41139,-0.04756 z", +0.142239, 0.160356, +"M -0.077041 -0.160032 c -0.19381,0.01932 0.0942,0.634082 0.21928,0.108167 -0.10472,-0.08281 -0.17481,-0.111962 -0.21928,-0.108167 z", +0.204532, 0.23177, +"M -0.125112 -0.231668 c 0.18825,-0.0086 0.62843,0.52902 0.0155,0.456753 -0.14112,-0.336734 -0.10644,-0.453147 -0.0155,-0.456753 z", +0.302086, 0.355289, +"M -0.150514 -0.321921 c -0.41485,0.206156 0.12059,1.269337 0.4281,0.224788 l 0.0245,-0.194374 c -0.21141,-0.07953 -0.35705,-0.07849 -0.45276,-0.03088 z", +0.319431, 0.249425, +"M -0.132339 -0.243618 c -0.4405,0.08143 -0.0266,0.995486 0.45177,0.108513 -0.20224,-0.10282 -0.34995,-0.127317 -0.45177,-0.108513 z", +0.318818, 0.231988, +"M 0.0318226 -0.193927 c -0.30533,0.13422 -0.649,0.55842 0.0989,0.38482 l 0.16407,-0.11973 c 0.0881,-0.31984 -0.0811,-0.34462 -0.26387,-0.2645 z", +0.196202, 0.386572, +"M -0.0913577 -0.381538 c -0.40284,0.05141 0.50388,1.52278 0.23778,0.253201 l -0.14026,-0.243385 c -0.0383,-0.01208 -0.0716,-0.01725 -0.0973,-0.0138 z", +0.252923, 0.25611, +"M -0.0991266 -0.255205 c -0.34893,0.0343 -0.0492,1.01793 0.35205,0.16303 -0.15613,-0.12749 -0.27152,-0.17097 -0.35205,-0.16303 z", +0.227743, 0.364507, +"M -0.129097 -0.362268 c -0.18019,0.05106 -0.14232,0.970885 0.35684,0.664393 -0.14854,-0.531815 -0.27503,-0.687804 -0.35684,-0.664393 z", +0.164352, 0.175428, +"M -0.045238 -0.173643 c -0.22431,0.03864 -0.11921,0.700104 0.20959,0.09557 -0.0887,-0.08074 -0.15768,-0.104545 -0.20959,-0.09557 z", +0.39131, 0.330262, +"M -0.0448403 -0.29959 c -0.36646,0.172171 -0.65831,0.979631 0.30262,0.455235 l 0.13353,-0.110583 c -0.087,-0.369322 -0.26893,-0.422388 -0.43553,-0.344152 z", +0.08851, 0.144333, +"M -0.06158 -0.131595 c -0.0797,0.0825 0.0316,0.52359 0.15009,0.0835 -0.0751,-0.0988 -0.12318,-0.11093 -0.15009,-0.0835 z", +0.142269, 0.160385, +"M -0.0770807 -0.160034 c -0.19379,0.01932 0.0942,0.634151 0.21935,0.108167 -0.10471,-0.08281 -0.17483,-0.112135 -0.21935,-0.108167 z", +0.141781, 0.160158, +"M -0.076419 -0.159773 c -0.19379,0.01932 0.093,0.633582 0.2182,0.107477 -0.10472,-0.08281 -0.17386,-0.111617 -0.2182,-0.107477 z", +0.209206, 0.30405, +"M -0.116284 -0.296837 c -0.20484,0.0951 -0.0599,1.08425 0.32549,0.30178 -0.15043,-0.26622 -0.25717,-0.33337 -0.32549,-0.30178 z", +0.201742, 0.3747, +"M -0.146133 -0.374084 c -0.24908,0.0343 0.42422,1.48646 0.34064,0.25287 -0.17607,-0.19356 -0.28321,-0.26077 -0.34064,-0.25287 z", +0.322667, 0.259474, +"M -0.114613 -0.226479 c -0.33039,0.161993 -0.30744,0.843431 0.36278,0.242972 l 0.0745,-0.165098 c -0.17776,-0.127834 -0.3269,-0.132147 -0.4369,-0.07815 z", +0.182682, 0.131912, +"M -0.0706049 -0.115145 c -0.38616,0.0825 0.35908,0.51914 0.2403,-0.0121 -0.10644,-0.0121 -0.18509,0.002 -0.2403,0.0121 z", +0.226747, 0.401068, +"M -0.210404 -0.386184 c -0.12456,0.15492 0.50616,1.44357 0.43089,0.3531 -0.26357,-0.33026 -0.38924,-0.40472 -0.43089,-0.3531 z", +0.231976, 0.335615, +"M -0.105621 -0.325515 c 0.23153,-0.10299 0.64145,0.61459 -0.029,0.66113 l -0.0958,-0.22943 c -0.0121,-0.27202 0.048,-0.39727 0.1249,-0.4317 z", +0.335965, 0.335139, +"M -0.0942353 -0.30707 c -0.34582,0.173534 -0.39751,1.086591 0.3636,0.373859 l 0.0511,-0.10489 0.0155,-0.10903 c -0.16113,-0.19389 -0.30903,-0.218301 -0.42429,-0.160612 z", +0.0697059, 0.240406, +"M -0.0569386 -0.237373 c 0.0566,0.055 0.24727,0.84545 0.0121,0.26736 -0.0321,-0.22226 -0.0297,-0.28589 -0.0121,-0.26736 z", +0.242776, 0.518825, +"M -0.137028 -0.512424 c -0.43441,0.07384 0.62996,1.783124 0.32347,0.636705 -0.0242,-0.208434 -0.0183,-0.497208 -0.21632,-0.628062 -0.0433,-0.0138 -0.0788,-0.01725 -0.10696,-0.0138 z", +0.0911062, 0.261377, +"M -0.00830619 -0.25616 c 0.11369,-0.08798 0.1788,0.975612 -0.0828,0.280459 0.0274,-0.178605 0.0571,-0.260274 0.0828,-0.280459 z", +0.175081, 0.18501, +"M -0.0388005 -0.179991 c 0.20821,-0.07297 0.40631,0.681507 -0.13628,0.207658 0.0405,-0.129905 0.0885,-0.190855 0.13628,-0.207658 z", +0.118897, 0.176509, +"M -0.0742332 -0.173289 c -0.15768,0.0526 0.1494,0.70495 0.19313,0.0823 -0.0947,-0.0745 -0.15647,-0.0942 -0.19313,-0.0823 z", + ) + +inxhead = """ + + <_name>ChipScratches + ca.sfu.AT.kurn.ChipScratches + chipScratches.py + inkex.py +""" + +inxfoot = """ + all + + + + + + + + +""" + +inxtype = { + "i" : '%s\n', + "f" : '%s\n', + "s" : '%s\n', + "b" : '%s\n', + "n" : '\n', + } + +inxbk = { + "tabs" : '\n\n', + "tab" : '\n\n', + "tabe" : '\n\n', + "lit" : '<_param name="%(s)s" type="description" >%(s)s\n', + + } + +def mt( s ) : + return s.isspace() or len(s) == 0 + +def addparms( p ) : + s = '' + for parm in p.split(',') : + if mt(parm) : + continue + s += parm + ' ' + return s + +if inxGen : + print inxhead + + for parm in parms.split('\n') : + if mt(parm) : + continue + w = parm.split('#') + if len(w) == 3 : + print inxbk[w[1]] % {"s" : w[2]}, + continue + if len(w) > 1 : + continue + w = parm.split(None, 4) + print inxtype[w[0]] % (w[1], addparms(w[3]), w[4], w[2]), + + print inxfoot +else : +# Create effect instance and apply it. + effect = noiseEffect() + effect.affect() + sys.exit( 0 ) + diff --git a/fablabchemnitz_clean_path.inx b/fablabchemnitz_clean_path.inx new file mode 100644 index 0000000..b147d24 --- /dev/null +++ b/fablabchemnitz_clean_path.inx @@ -0,0 +1,33 @@ + + + <_name>Clean Path + fablabchemnitz.de.clean_path + org.inkscape.output.svg.inkscape + inkex.py + fablabchemnitz_clean_path.py + + 0.01 + + + + + + + false + + + + + https://github.com/jnweiger/inkscape-clean-path + Version 0.1 + + + path + + + + + + diff --git a/fablabchemnitz_clean_path.py b/fablabchemnitz_clean_path.py new file mode 100644 index 0000000..5f8eb3b --- /dev/null +++ b/fablabchemnitz_clean_path.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python +# +# Inkscape extension making long continuous paths from shorter pieces. +# (C) 2015 juewei@fabmail.org +# +# code snippets visited to learn the extension 'effect' interface: +# - convert2dashes.py +# - http://github.com/jnweiger/inkscape-silhouette +# - http://github.com/jnweiger/inkscape-gears-dev +# - http://sourceforge.net/projects/inkcut/ +# - http://code.google.com/p/inkscape2tikz/ +# - http://code.google.com/p/eggbotcode/ +# +# 2015-11-30 jw, V0.1 -- initial draught + +__version__ = '0.1' # Keep in sync with clean_path.inx ca line 22 +__author__ = 'Juergen Weigert ' + +import sys, os, shutil, time, logging, tempfile, math + +debug = True +#debug = False + +# search path, so that inkscape libraries are found when we are standalone. +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): # windows + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): # mac + sys.path.append('/Applications/Inkscape.app/Contents/Resources/extensions') +else: # linux + # if sys_platform.startswith('linux'): + sys.path.append('/usr/share/inkscape/extensions') + +# inkscape libraries +import inkex +import cubicsuperpath + +inkex.localize() + +from optparse import SUPPRESS_HELP + +def uutounit(self,nn,uu): + try: + return self.uutounit(nn,uu) # inkscape 0.91 + except: + return inkex.uutounit(nn,uu) # inkscape 0.48 + +class ChainPaths(inkex.Effect): + """ + Inkscape Extension make long continuous paths from smaller parts + """ + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.chain_epsilon = 0.01 + self.snap_ends = True + self.segments_done = {} + self.min_missed_distance_sq = None + self.chained_count = 0 + + try: + self.tty = open("/dev/tty", 'w') + except: + try: + self.tty = open("CON:", 'w') # windows. Does this work??? + except: + self.tty = open(os.devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + if debug: print >>self.tty, "__init__" + + self.OptionParser.add_option('-V', '--version', + action = 'store_const', const=True, dest='version', default=False, + help='Just print version number ("'+__version__+'") and exit.') + self.OptionParser.add_option('-s', '--snap', action='store', dest='snap_ends', type='inkbool', default=True, help='snap end-points together when connecting') + self.OptionParser.add_option('-u', '--units', action='store', dest="units", type="string", default="mm", help="measurement unit for epsilon") + self.OptionParser.add_option('-e', '--epsilon', action='store', + type='float', dest='chain_epsilon', default=0.01, help="Max. distance to connect [mm]") + + def version(self): + print "hiuhu" + return __version__ + def author(self): + return __author__ + + def calc_unit_factor(self, units='mm'): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + dialog_units = uutounit(self, 1.0, units) + self.unit_factor = 1.0 / dialog_units + return self.unit_factor + + def reverse_segment(self, seg): + r = [] + for s in reversed(seg): + # s has 3 elements: handle1, point, handle2 + # Swap handles. + s.reverse() + r.append(s) + return r + + def set_segment_done(self, id, n, msg=''): + if not id in self.segments_done: + self.segments_done[id] = {} + self.segments_done[id][n] = True + if debug: print >>self.tty, "done", id, n, msg + + def is_segment_done(self, id, n): + if not id in self.segments_done: + return False + if n in self.segments_done[id]: + return True + return False + + def link_segments(self, seg1, seg2): + if self.snap_ends: + seg = seg1[:-1] + p1 = seg1[-1] + p2 = seg2[0] + # fuse p1 and p2 to create one new point: + # first handle from p1, point coordinates averaged, second handle from p2 + seg.append([ [ p1[0][0] , p1[0][1] ], + [(p1[1][0]+p2[1][0])*.5, (p1[1][1]+p2[1][1])*.5], + [ p2[2][0] , p2[2][1] ] ]) + seg.extend(seg2[1:]) + else: + seg = seg1[:] + seg.extend(seg2[:]) + self.chained_count += 1 + return seg + + + def near_ends(self, end1, end2): + """ requires self.eps_sq to be the square of the near distance """ + dx = end1[0] - end2[0] + dy = end1[1] - end2[1] + d_sq = dx * dx + dy * dy + if d_sq > self.eps_sq: + if self.min_missed_distance_sq is None: + self.min_missed_distance_sq = d_sq + elif self.min_missed_distance_sq > d_sq: + self.min_missed_distance_sq = d_sq + return False + else: + return True + + + def effect(self): + if self.options.version: + print __version__ + sys.exit(0) + + self.calc_unit_factor(self.options.units) + + if self.options.snap_ends is not None: self.snap_ends = self.options.snap_ends + if self.options.chain_epsilon is not None: self.chain_epsilon = self.options.chain_epsilon + if self.chain_epsilon < 0.0001: self.chain_epsilon = 0.0001 # keep a minimum. + self.eps_sq = self.chain_epsilon * self.unit_factor * self.chain_epsilon * self.unit_factor + + if not len(self.selected.items()): + inkex.errormsg(_("Please select one or more objects.")) + return + + segments = [] + for id, node in self.selected.iteritems(): + if node.tag != inkex.addNS('path','svg'): + inkex.errormsg(_("Object "+id+" is not a path. Try\n - Path->Object to Path\n - Object->Ungroup")) + return + if debug: print >>self.tty, "id="+str(id), "tag="+str(node.tag) + path_d = cubicsuperpath.parsePath(node.get('d')) + sub_idx = -1 + for sub in path_d: + sub_idx += 1 + # sub=[[[200.0, 300.0], [200.0, 300.0], [175.0, 290.0]], [[175.0, 265.0], [220.37694, 256.99876], [175.0, 240.0]], [[175.0, 215.0], [200.0, 200.0], [200.0, 200.0]]] + # this is a path of three points. All the bezier handles are included. the Structure is: + # [[handle0_x, point0, handle0_1], [handle1_0, point1, handle1_2], [handle2_1, point2, handle2_x]] + if debug: print >>self.tty, " sub="+str(sub) + end1=[sub[0][1][0],sub[0][1][1]] + end2=[sub[-1][1][0],sub[-1][1][1]] + + while ((len(sub) > 1) and self.near_ends(end1, end2)): + # FIXME: this also splits any closed path. eg. a rectangle. + if debug: print >>self.tty, "splitting self-reversing path, length:", len(sub) + ## We split the path and generate more snippets. + splitp=[sub[-2][1][0],sub[-2][1][1]] + segments.append({'id': id, 'n': sub_idx, 'end1': splitp, 'end2':end2, 'seg': [sub[-2],sub[-1]]}) + sub_idx += 1 + sub.pop() + end2=splitp + + segments.append({'id': id, 'n': sub_idx, 'end1': end1, 'end2':end2, 'seg': sub}) + if node.get(inkex.addNS('type','sodipodi')): + del node.attrib[inkex.addNS('type', 'sodipodi')] + if debug: print >>self.tty, "-------- seen:" + for s in segments: + if debug: print >>self.tty, s['id'],s['n'],s['end1'],s['end2'] + + # chain the segments + obsoleted = 0 + remaining = 0 + for id, node in self.selected.iteritems(): + # path_style = simplestyle.parseStyle(node.get('style')) + path_d = cubicsuperpath.parsePath(node.get('d')) + new=[] + cur_idx = -1 + for cur in path_d: + cur_idx += 1 + if not self.is_segment_done(id, cur_idx): + # quadratic algorithm: we check both ends of the current segment. + # If one of them is near another known end from the segments list, we + # chain this segment to the current segment and remove it from the + # list, + # end1-end1 or end2-end2: The new segment is reversed. + # end1-end2: The new segment is prepended to the current segment. + # end2-end1: The new segment is appended to the current segment. + self.set_segment_done(id, cur_idx, "output") # do not cross with ourselves. + end1=[cur[0][1][0],cur[0][1][1]] + end2=[cur[-1][1][0],cur[-1][1][1]] + segments_idx = 0 + while segments_idx < len(segments): + seg = segments[segments_idx] + if self.is_segment_done(seg['id'], seg['n']): + segments_idx += 1 + continue + + if (self.near_ends(end1, seg['end1']) or + self.near_ends(end2, seg['end2'])): + seg['seg'] = self.reverse_segment(seg['seg']) + seg['end1'],seg['end2'] = seg['end2'],seg['end1'] + if debug: print >>self.tty, "reversed seg", seg['id'], seg['n'] + + if self.near_ends(end1, seg['end2']): + # prepend seg to cur + self.set_segment_done(seg['id'], seg['n'], 'prepended to '+id+' '+str(cur_idx)) + cur = self.link_segments(seg['seg'], cur) + end1=[cur[0][1][0],cur[0][1][1]] + segments_idx = 0 + continue + + if self.near_ends(end2, seg['end1']): + # append seg to cur + self.set_segment_done(seg['id'], seg['n'], 'appended to '+id+' '+str(cur_idx)) + cur = self.link_segments(cur, seg['seg']) + end2=[cur[-1][1][0],cur[-1][1][1]] + segments_idx = 0 + continue + + segments_idx += 1 + + new.append(cur) + + if not len(new): + # node.clear() + node.getparent().remove(node) + obsoleted += 1 + if debug: print >>self.tty, "Path node obsoleted:", id + else: + remaining += 1 + node.set('d',cubicsuperpath.formatPath(new)) + + # statistics: + print >>self.tty, "Path nodes obsoleted:", obsoleted, "\nPath nodes remaining:", remaining + if self.min_missed_distance_sq is not None: + print >>self.tty, "min_missed_distance:", math.sqrt(float(self.min_missed_distance_sq))/self.unit_factor, '>', self.chain_epsilon, self.options.units + print >>self.tty, "Successful link operations: ", self.chained_count + +if __name__ == '__main__': + e = ChainPaths() + + e.affect() + sys.exit(0) # helps to keep the selection diff --git a/fablabchemnitz_cleanup.inx b/fablabchemnitz_cleanup.inx new file mode 100644 index 0000000..981b5e9 --- /dev/null +++ b/fablabchemnitz_cleanup.inx @@ -0,0 +1,20 @@ + + + <_name>Fix Stroke Width / Opacity + fablabchemnitz.de.cleanup + fablabchemnitz_cleanup.py + inkex.py + 0.02834646 + 100.0 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_cleanup.py b/fablabchemnitz_cleanup.py new file mode 100644 index 0000000..a2f4d72 --- /dev/null +++ b/fablabchemnitz_cleanup.py @@ -0,0 +1,85 @@ +#! /usr/bin/env python +''' +Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Based on coloreffect.py by Jos Hirth and Aaron C. Spike +''' + +import inkex +import simplestyle, sys + +class Cleanup(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-s", "--stroke", + action="store", type="float", + dest="stroke", default=0.5, + help="Stroke weight") + self.OptionParser.add_option("-o", "--opacity", + action="store", type="float", + dest="opacity", default="100.0", + help="Opacity") + + def effect(self): + if len(self.selected)==0: + self.getAttribs(self.document.getroot()) + else: + for id,node in self.selected.iteritems(): + self.getAttribs(node) + + def getAttribs(self,node): + self.changeStyle(node) + for child in node: + self.getAttribs(child) + + def changeStyle(self,node): + if node.attrib.has_key('style'): + # References for style attribute: + # http://www.w3.org/TR/SVG11/styling.html#StyleAttribute, + # http://www.w3.org/TR/CSS21/syndata.html + # + # The SVG spec is ambiguous as to how style attributes should be parsed. + # For example, it isn't clear whether semicolons are allowed to appear + # within strings or comments, or indeed whether comments are allowed to + # appear at all. + # + # The processing here is just something simple that should usually work, + # without trying too hard to get everything right. + # (Won't work for the pathalogical case that someone escapes a property + # name, probably does the wrong thing if colon or semicolon is used inside + # a comment or string value.) + style = node.get('style') # fixme: this will break for presentation attributes! + if style: + #inkex.debug('old style:'+style) + declarations = style.split(';') + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + if prop == 'stroke-width': + new_val = str(self.options.stroke) + declarations[i] = prop + ':' + new_val + if prop == 'opacity': + new_val = str(self.options.opacity / 100) + declarations[i] = prop + ':' + new_val + #inkex.debug('new style:'+';'.join(declarations)) + node.set('style', ';'.join(declarations)) + +if __name__ == '__main__': + e = Cleanup() + e.affect() diff --git a/fablabchemnitz_clonesperspective.inx b/fablabchemnitz_clonesperspective.inx new file mode 100644 index 0000000..6e07326 --- /dev/null +++ b/fablabchemnitz_clonesperspective.inx @@ -0,0 +1,20 @@ + + + <_name>Clones In Perspective + org.ekips.filter.clonesPerspective + fablabchemnitz_clonesperspective.py + inkex.py + 5 + 0.9 + + all + + + + + + + + diff --git a/fablabchemnitz_clonesperspective.py b/fablabchemnitz_clonesperspective.py new file mode 100644 index 0000000..e20fd27 --- /dev/null +++ b/fablabchemnitz_clonesperspective.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import math + +import subprocess #We will call Inkscape to compute the bounding box + +import inkex + +from simplestyle import * + +import simpletransform + +class clonesPerspectiveEffect(inkex.Effect): + """ +Creates a series of clones shrinking to a vanishing point. +The vanishing point is the center of rotation, which must be dragged out to the +side before invocation. + """ + def __init__(self): + """ + Constructor. + Defines the parms option of a script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # Define string option "--what" with "-w" shortcut and default value "World". + + self.OptionParser.add_option('-n', '--num', action = 'store', + type = 'int', dest = 'num', default = 5, + help = 'Drag out center of rotation before calling') + + self.OptionParser.add_option('-r', '--ratio', action = 'store', + type = 'float', dest = 'ratio', default = 0.9, + help = 'Ratio of size of nearest neighbor to first. Must be < 1') + + def effect(self): + """ + Effect behaviour. + Overrides base class' method. + """ + + global boxstring + global seld + + svg = self.document.getroot() + + num = int( self.options.num ) + ratio = float( self.options.ratio ) + + seld = self.selected + + if 1 != len(seld) : + inkex.errormsg("Select exactly 1 thing. Group if necessary") + sys.exit (1) + id = seld.keys()[0] + sel = seld[id] + dic = sel.attrib + + try : + tx = dic[inkex.addNS('transform-center-x','inkscape') ] + except KeyError : + tx = '0.' + try : + ty = dic[inkex.addNS('transform-center-y','inkscape') ] + except KeyError : + ty = '0.' + + if float(tx) == 0. and float(ty) == 0. : + inkex.errormsg("Center of rotation at center of object") + sys.exit (1) + + thebox = simpletransform.computeBBox([sel]) + + width = thebox[1] - thebox[0] + height = thebox[3] - thebox[2] + cx = float(thebox[0]) + 0.5 * width #Find center of selected object + cy = float(thebox[2]) + 0.5 * height #Find center of selected object + tx = float(tx) + ty = float(ty) + crat = 1.0 + otx = tx + oty = ty + + parent = self.getParentNode(sel) + j = parent.index(sel) + + for i in range(num) : + crat *= ratio + tx *= ratio + ty *= ratio + att = { + "id" : self.uniqueId("clone" + id), + inkex.addNS('href','xlink') : "#" + id, + inkex.addNS('transform-center-x','inkscape') : str(tx), + inkex.addNS('transform-center-y','inkscape') : str(ty), +# "x" : "0", +# "y" : "0", + 'transform' : ("matrix(%f,0,0,%f,%f,%f)" % + (crat, crat,(1. - crat)*(cx + otx), + (1. - crat)*(cy - oty))), +#WHY Inkscape and SVG run +y in OPPOSITE directions is BEYOND me. + "width" : "100%", + "height" : "100%", + } + parent.insert(j, inkex.etree.Element('use', att) ) + +# Create effect instance and apply it. +effect = clonesPerspectiveEffect() +effect.affect() +sys.exit( 0 ) + diff --git a/fablabchemnitz_close_curves.inx b/fablabchemnitz_close_curves.inx new file mode 100644 index 0000000..2cde755 --- /dev/null +++ b/fablabchemnitz_close_curves.inx @@ -0,0 +1,21 @@ + + + <_name>Close Paths + fablabchemnitz.de.close_curves + fablabchemnitz_close_curves.py + inkex.py + + Select paths that you want to close, and press ok. + + + + + + + + path + + + \ No newline at end of file diff --git a/fablabchemnitz_close_curves.py b/fablabchemnitz_close_curves.py new file mode 100644 index 0000000..38ffde5 --- /dev/null +++ b/fablabchemnitz_close_curves.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +""" +Copyright (C) 2009 Nick Drobchenko, nick@cnc-club.ru +based on gcode.py (C) 2007 hugomatic... +based on addnodes.py (C) 2005,2007 Aaron Spike, aaron@ekips.org +based on dots.py (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +# +# This extension close paths by adding 'z' before each 'm' if it is not +# the first 'm' and it is not prepended by 'z' already. +# + +import inkex, re, simplepath + +class CloseCurves(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + def effect(self): + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + d = simplepath.formatPath( simplepath.parsePath(d) ) + d = re.sub(r'(?i)(m[^mz]+)',r'\1 Z ',d) + d = re.sub(r'(?i)\s*z\s*z\s*',r' Z ',d) + node.set('d', d) + + +e = CloseCurves() +e.affect() + + diff --git a/fablabchemnitz_color_alpha_replace.inx b/fablabchemnitz_color_alpha_replace.inx new file mode 100644 index 0000000..eba44b1 --- /dev/null +++ b/fablabchemnitz_color_alpha_replace.inx @@ -0,0 +1,22 @@ + + + <_name>Replace Color And Alpha + fablabchemnitz.de.color_alpha_replace + coloreffect.py + color_replace.py + simplestyle.py + inkex.py + 000000 + 000000 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_color_alpha_replace.py b/fablabchemnitz_color_alpha_replace.py new file mode 100644 index 0000000..81b3ca7 --- /dev/null +++ b/fablabchemnitz_color_alpha_replace.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +''' +This extension replace color and alpha from full inkscape document. + +Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.2 + +TODO: +Comment Better!!! + +CHANGE LOG +0.1 Start 16/08/2012 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex,sys,re +from lxml import etree + +class ReplaceColorAlpha(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-f", "--from_color", action="store", type="string", dest="from_color", default="000000", help="Replace color") + self.OptionParser.add_option("-t", "--to_color", action="store", type="string", dest="to_color", default="000000", help="By color + Alpha") + + def effect(self): + saveout = sys.stdout + sys.stdout = sys.stderr + fr = self.options.from_color.strip('"').strip('#').lower() + try: + alphaFr = str(float(int(self.options.from_color.strip('"').strip('#').lower()[-2:], 16))/255.0) + except: + pass + to = self.options.to_color.strip('"').strip('#').lower() + try: + alphaTo = str(float(int(self.options.to_color.strip('"').strip('#').lower()[-2:], 16))/255.0) + except: + pass + svg = self.document.getroot() + for element in svg.iter("*"): + style = element.get('style') + if style: + #print style.lower().find('fill-opacity:'+alphaFr[:5]) != -1 + if (style.lower().find('fill:#'+fr[:6]) != -1 and len(fr) == 6) or (style.lower().find('fill-opacity:'+alphaFr[:5]) != -1 and len(fr)==8 and style.lower().find('fill:#'+fr[:6]) != -1): + style = re.sub('fill-opacity:.*?(;|$)', + '\\1', + style) + style = re.sub('fill:#.*?(;|$)', + 'fill:#' + to[:6] + '\\1', + style) + + style = style + ";fill-opacity:" + alphaTo + element.set('style',style) + + if (style.lower().find('stroke:#'+fr[:6]) != -1 and len(fr) == 6) or (style.lower().find('stroke:#'+fr[:6]) != -1 and style.lower().find('stroke-opacity:'+alphaFr[:5]) != -1 and len(fr)==8): + style = re.sub('stroke-opacity:.*?(;|$)', + '\\1', + style) + style = re.sub(r'stroke:#.*?(;|$)', + 'stroke:#' + to[:6] + '\\1', + style) + style = style + ";stroke-opacity:" + alphaTo + element.set('style',style) + sys.stdout = saveout +c = ReplaceColorAlpha() +c.affect() diff --git a/fablabchemnitz_conic_box.inx b/fablabchemnitz_conic_box.inx new file mode 100644 index 0000000..df1ee47 --- /dev/null +++ b/fablabchemnitz_conic_box.inx @@ -0,0 +1,35 @@ + + + <_name>Box Maker - Conical + fablabchemnitz.de.conic_box + inkex.py + fablabchemnitz_conic_box.py + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 3.0 + 100.0 + 150.0 + 50.0 + true + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_conic_box.py b/fablabchemnitz_conic_box.py new file mode 100644 index 0000000..46e206e --- /dev/null +++ b/fablabchemnitz_conic_box.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python +# coding: utf8 +# We will use the inkex module with the predefined Effect base class. +import inkex +# The simplestyle module provides functions for style parsing. + +import simplestyle +import math + +objStyle = simplestyle.formatStyle( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + }) + +class inkcape_polar: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def LineTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' L ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def Line(self, r1, angle1, r2, angle2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r1*math.cos(angle1)-self.offsetX, 3)) + ',' + str(round(r1*math.sin(angle1)-self.offsetY, 3)) + ' L ' + str(round(r2*math.cos(angle2)-self.offsetX, 3)) + ',' + str(round(r2*math.sin(angle2)-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + inkex.etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + +class CurvedSurface: + def __init__(self, L1, L2, nombre_pas, angle_par_pas, taille_exacte_pas, epaisseur, parent, xOffset, yOffset): + self.L1 = L1 + self.L2 = L2 + self.nombre_pas = nombre_pas + self.angle_par_pas = angle_par_pas + self.taille_exacte_pas = taille_exacte_pas + self.epaisseur = epaisseur + self.parent = parent + self.Offset = (xOffset, yOffset) + + def genere_element_1(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Commence par le pas de liaison avec le suivant. Va de (L1, angle+angle_par_pas) vers (L1, angle+angle_par_pas/2) + path.Line(self.L1, angle+self.angle_par_pas, self.L1, angle+self.angle_par_pas/2) + # Puis trait court de (L1+TraiteTraitCourt, angle+angle_par_pas/2) vers (L1-epaisseur, angle+angle_par_pas/2) + path.Line(self.L1+self.TailleTraitCourt, angle+self.angle_par_pas/2, self.L1-self.epaisseur, angle+self.angle_par_pas/2) + # Puis fait la dent inétrieur et va en (L1-epaisseur, angle) + path.LineTo(self.L1-self.epaisseur, angle) + # Puis trait court, va en (L1+TailleTraitCourt, angle) + path.LineTo(self.L1+self.TailleTraitCourt, angle) + path.GenPath() + + def genere_element_1_debut(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Commence par le pas de liaison avec le suivant + # Commence en (L1,0) et finit en (L1, angle/2) + path.Line(self.L1, 0, self.L1, angle/2) + #Se déplace pour se positionner à (self.L1+TailleTraitCourt, angle/2) et termine en (L1-epaisseur, angle /2) + path.Line(self.L1+self.TailleTraitCourt, angle/2, self.L1-self.epaisseur, angle/2) + #Puis trace la dent. Se déplace en (L1-epaisseur, angle*0.75) + path.LineTo(self.L1-self.epaisseur, angle*0.75) + # Puis bord complet : se déplace en (L2+epaisseur,angle*0.75) + path.LineTo(self.L2+self.epaisseur, angle*0.75) + # Puis dent externe, revient en (L2+epaisseur, angle/2) + path.LineTo(self.L2+self.epaisseur, angle*0.5) + # Puis trait de taille TailleTraitcourt --> va en (L2-TailleTraitCourt) avec angle/2 + path.LineTo(self.L2-self.TailleTraitCourt, angle*0.5) + # Puis liaison vers suivant. Se déplace en (L2, taille_exacte_pas*0.5) avec angle/2 et va en (L2,0) avec angle 0 + path.Line(self.L2, angle*0.5, self.L2, 0) + path.GenPath() + + def genere_element_1_fin(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère le dernier path, pour le dernier pas. Proche du cas normal, mais path plus complet, prend en compte la découpe du bord + # Par rapport au premier, pas de liaison avec le suivant ! + # Commence par le trait court intérieur : Va de (L1+TailleTraitCourt, angle) vers (L1-epaisseur, angle) + path.Line(self.L1+self.TailleTraitCourt, angle, self.L1-self.epaisseur, angle) + # Puis la dent coté intérieur : Va en (L1-epaisseur, angle+angle_par_pas/4) + path.LineTo(self.L1-self.epaisseur, angle+self.angle_par_pas/4) + # Puis découpe complète du bord. Va en (L2+epaisseur, angle+angle_par_pas/4) + path.LineTo(self.L2+self.epaisseur, angle+self.angle_par_pas/4) + # Puis dent coté extérieur, va en (L2+epaisseur, angle) + path.LineTo(self.L2+self.epaisseur, angle) + # et enfin traitcourt, va en (L2-TailleTraitCOurt, angle) + path.LineTo(self.L2-self.TailleTraitCourt, angle) + path.GenPath() + + def genere_element_2(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère 2nd path, 2 traits entre bords des dents de l'interieur vers l'exterieur + # Se positionne en (L1 + TailleTraitCourt+2, angle) et va en ((L2+L1)/2-1, angle) + path.Line(self.L1+self.TailleTraitCourt+2, angle, (self.L2+self.L1)/2-1, angle) + # Se positionne en ((L2+L1)/2+1, angle) et va en (L2-TailleTraitCourt-2, angle) + path.Line((self.L2+self.L1)/2+1, angle, self.L2-self.TailleTraitCourt-2, angle) + path.GenPath() + + def genere_element_3(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère la dent, la liaison avec le suivant coté extérieur + # Commence en (L2-TailleTraitCourt, angle) et va en (L2+epaisseur, angle) + path.Line(self.L2-self.TailleTraitCourt, angle, self.L2+self.epaisseur, angle) + # Trace la dent, va en (L2+epaisseur, angle+angle_par_pas/2) + # Ajoute angle_par_pas / 2 à l'angle car ce sera la nouvelle origine + angle += self.angle_par_pas/2 + path.LineTo(self.L2+self.epaisseur, angle) + # Revient vers l'intérieur en (L2-TailleTraitCourt, angle+angle_par_pas/2) mais c'est le nouvel angle + path.LineTo(self.L2-self.TailleTraitCourt, angle) + # Trace liaison avec le suivant. Début en (L2, nouvel_angle) fin en (L2, nouvel_angle+angle_par_pas/2) + path.Line(self.L2, angle, self.L2, angle+self.angle_par_pas/2) + path.GenPath() + + def genere_element_4(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère 2nd path, 2 traits entre bords des dents de l'extérieur vers l'intérieur + # Se positionne en (L2-TailleTraitCourt-2, angle+angle_par_pas/2) et va en ((L2+L1)/2+1, angle+angle_par_pas/2) + path.Line(self.L2-self.TailleTraitCourt-2, angle+self.angle_par_pas/2, (self.L2+self.L1)/2+1, angle+self.angle_par_pas/2) + # Se positionne en ((L2+L1)/2-1, angle+angle_par_pas/2) et va en (L1 + TailleTraitCourt+2, angle+angle_par_pas/2) + path.Line((self.L2+self.L1)/2-1, angle+self.angle_par_pas/2, self.L1+self.TailleTraitCourt+2, angle+self.angle_par_pas/2) + path.GenPath() + + def genere_element_5(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère path avec 3 traits longueur TailleTraitLong entre les dents externes + #Tous les angles de ce motifs sont incrénetés de angle_par_pas/4 + angle += self.angle_par_pas/4 + # Se positionne en (L1-epaisseur+1, angle) et va en (L1+TailleTraitLong-1) + path.Line(self.L1-self.epaisseur+1, angle, self.L1+self.TailleTraitLong-1, angle) + # Se positionne en (L1+TailleTraitLong+1, angle) et va en (L1+2*TailleTraitLong+1) + path.Line(self.L1+self.TailleTraitLong+1, angle, self.L1+2*self.TailleTraitLong+1, angle) + # Se positionne en (L2 - TailleTraitLong + 1 et va en L2+epaisseur-1) + path.Line(self.L2-self.TailleTraitLong+1, angle, self.L2+self.epaisseur-1, angle) + path.GenPath() + + def genere_element_6(self, angle): + path = inkcape_polar(self.Offset, self.group) + #Tous les angles de ce motifs sont incrénetés de angle_par_pas*0.75 + angle += self.angle_par_pas*0.75 + # Se positionne en (L2-1, angle) et va en (L2-TailleTraitLong+1) + path.Line(self.L2-1, angle, self.L2-self.TailleTraitLong+1, angle) + # Se positionne en (L2 - TailleTraitLong-1, angle) et va en (L1+TailleTraitLong+1) + path.Line(self.L2-self.TailleTraitLong - 1, angle, self.L1+self.TailleTraitLong+1, angle) + # Se positionne en (L1+TailleTraitLong-1) et va en (L1+1,angle) + path.Line(self.L1+self.TailleTraitLong - 1, angle, self.L1+1, angle) + path.GenPath() + + def genere_pas_debut(self): + # Génère les paths du premier pas, le bord est complètement coupé et son épaisseur est divisée par 2 (élement_1 début) + angle = -1*self.angle_par_pas + #Taille traits court et long premiere partie + self.genere_element_1_debut(angle) + self.genere_element_4(angle) + self.genere_element_6(angle) + + def genere_pas_fin(self, index_pas_fin): + # Génère les paths du dernier pas, le bord est complètement coupé et son épaisseur est divisée par 2 (élement_1 fin) + angle = index_pas_fin*self.angle_par_pas + # Génère les deux traits courts entre les dents + self.genere_element_2(angle) + # Génère la dent et ferme le contour + self.genere_element_1_fin(angle) + + + def genere_pas(self, index_pas): + # Génère les paths d'un des pas du milieu. 6 paths sont créés + angle = self.angle_par_pas * index_pas + # Premier élément : dent intérieure + self.genere_element_1(angle) + # Second élément : 2 trait courts entre dents proche précédent + self.genere_element_2(angle) + # 3ème élément : dent extérieure + self.genere_element_3(angle) + # 4ème élément : 2 traits courts entre dents vers milieu + self.genere_element_4(angle) + # 5ème élément : 3 traits longs proche du précédent + self.genere_element_5(angle) + # 6ème élément : 3 traits longs vers suivant + self.genere_element_6(angle) + + + def GeneratePaths(self): + group = inkex.etree.SubElement(self.parent, 'g') + self.group = group + #Taille traits courts et longs entre les dents + self.TailleTraitCourt = (self.L2 - self.L1) / 6 - 1 + self.TailleTraitLong = (self.L2 - self.L1- 2) / 3 + #genere les pas du "flex" + current_pas = 0 + self.genere_pas_debut() + while current_pas < self.nombre_pas: + self.genere_pas(current_pas) + current_pas += 1 + self.genere_pas_fin(current_pas) + +def gen_cercle(diametre, nombre_pas, epaisseur, xOffset, yOffset, parent): + group = inkex.etree.SubElement(parent, 'g') + angle_par_pas = 2 * math.pi / nombre_pas + #Rayons des cercle, avec et sans picots + r1 = diametre / 2 + r2 = r1 + epaisseur + path = inkcape_polar((xOffset, yOffset), group) + path.MoveTo(r1, 0) + index_pas = 0 + while index_pas < nombre_pas: + angle = index_pas * angle_par_pas + path.LineTo(r2, angle) + path.LineTo(r2, angle+angle_par_pas/2) + path.LineTo(r1, angle+angle_par_pas/2) + path.LineTo(r1, angle+angle_par_pas) + index_pas += 1 + path.GenPath() + +class ConicalBox(inkex.Effect): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + self.OptionParser.add_option('--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit, should be one of ') + + self.OptionParser.add_option('--thickness', action = 'store', + type = 'float', dest = 'thickness', default = '3.0', + help = 'Material thickness') + + self.OptionParser.add_option('--d1', action = 'store', + type = 'float', dest = 'd1', default = '50.0', + help = 'Small circle diameter') + + self.OptionParser.add_option('--d2', action = 'store', + type = 'float', dest = 'd2', default = '100.0', + help = 'Large circle diameter') + + self.OptionParser.add_option('--zc', action = 'store', + type = 'float', dest = 'zc', default = '50.0', + help = 'Cone height') + + self.OptionParser.add_option('--inner_size', action = 'store', + type = 'inkbool', dest = 'inner_size', default = 'true', + help = 'Dimensions are internal') + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def effect(self): + """ + Draws a conic box, based on provided parameters + """ + + # input sanity check + error = False + if self.options.zc < 15: + inkex.errormsg('Error: Height should be at least 15mm') + error = True + + if self.options.d1 < 30: + inkex.errormsg('Error: d1 should be at least 30mm') + error = True + + if self.options.d2 < self.options.d1 + 0.009999: + inkex.errormsg('Error: d2 should be at d1 + 0.01mm') + error = True + + if self.options.thickness < 1 or self.options.thickness > 10: + inkex.errormsg('Error: thickness should be at least 1mm and less than 10mm') + error = True + + if error: + exit() + + + # convert units + unit = self.options.unit + d1 = self.unittouu(str(self.options.d1) + unit) + d2 = self.unittouu(str(self.options.d2) + unit) + zc = self.unittouu(str(self.options.zc) + unit) + thickness = self.unittouu(str(self.options.thickness) + unit) + #Si prend dimensions externes, corrige les tailles + if self.options.inner_size == False: + d1 -= 2*thickness + d2 -= 2*thickness + zc -= 2*thickness + + svg = self.document.getroot() + docWidth = self.unittouu(svg.get('width')) + docHeigh = self.unittouu(svg.attrib['height']) + + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Conical Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + #Compute size of projection + h1 = math.sqrt(zc*zc + (d2-d1)*(d2-d1)/4) + L1 = d1 * h1 / (d2 - d1) + L2 = d2 * h1 / (d2 - d1) + + alpha = math.pi*d2/L2 + #calcul nombre de pas (sauf premeirs et derniers) pour D1, avec 2*2 mm par pas + nombre_pas = round((d1 * math.pi - 6) / 4) + #calcul angle par pas, ajoute 1.5 pour tenir compte des premiers et derniers pas qui font 3/4 de pas. + angle_par_pas = alpha / (nombre_pas+1.5) + taille_exacte_pas = math.pi * d1 / (nombre_pas+1.5) + + # do not put elements right at the edge of the page. + # Drawing will max left will be L2*cos(alpha) - thickness + if alpha > math.pi: + xOffset = -L2 - thickness - 10 + xmin = -L2 - thickness + xmax = L2 + thickness + else: + xOffset = L2 * math.cos(alpha) - thickness - 10 + xmin = (L2+thickness) * math.cos(alpha) + xmax = L2 + thickness + if alpha > math.pi*1.5: + yOffset = -L2 - thickness - 10 + ymin = -L2 - thickness + ymax = L2 + thickness + elif alpha > math.pi: + yOffset = (L2+thickness)*math.sin(alpha) - 10 + ymin = (L2+thickness)*math.sin(alpha) - thickness + ymax = L2 + thickness + elif alpha > math.pi/2: + yOffset = 0 + ymin = 0 + ymax = L2 + thickness + else: + yOffset = 0 + ymin = 0 + ymax = (L2+thickness)*math.sin(alpha) + + #dessine la partie "souple" + PartieSouple = CurvedSurface(L1, L2, nombre_pas, angle_par_pas, taille_exacte_pas, thickness, layer, xOffset, yOffset) + PartieSouple.GeneratePaths() + #génère maintenant le path du grand cercle + #Un pas de plus pour les cercles, pour tenir compte du début et de la fin + nombre_pas += 1 + #Positionne Offset + gen_cercle(d2, nombre_pas, thickness, -xmax - d2/2 + xOffset + 10, yOffset - ymax - d2/2 - 10 , layer) + #puis pour le petit cercle + gen_cercle(d1, nombre_pas, thickness, -xmax - d1/2 + xOffset + 10, d1/2 + yOffset - ymin + 10, layer) + +# Create effect instance and apply it. +effect = ConicalBox() +effect.affect() diff --git a/fablabchemnitz_cutoptim.inx b/fablabchemnitz_cutoptim.inx new file mode 100644 index 0000000..18a8e4a --- /dev/null +++ b/fablabchemnitz_cutoptim.inx @@ -0,0 +1,48 @@ + + + <_name>Cutting Optimizer (Nesting) + fablabchemnitz.de.cutoptim + fablabchemnitz_cutoptim.exe + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 2.0 + 1000 + 1 + false + + <_item value="TL">Top Left + <_item value="TC">Top Center + <_item value="TR">Top Right + <_item value="CL">Sheet center + <_item value="CC">Center Left + <_item value="CR">Center Right + <_item value="BL">Bottom Left + <_item value="BC">Bottom Center + <_item value="BR">Bottom Right + + true + 0 + true + true + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_daemonize.py b/fablabchemnitz_daemonize.py new file mode 100644 index 0000000..7653b9d --- /dev/null +++ b/fablabchemnitz_daemonize.py @@ -0,0 +1,210 @@ +## {{{ http://code.activestate.com/recipes/278731/ (r6) +"""Disk And Execution MONitor (Daemon) + +Configurable daemon behaviors: + + 1.) The current working directory set to the "/" directory. + 2.) The current file creation mode mask set to 0. + 3.) Close all open files (1024). + 4.) Redirect standard I/O streams to "/dev/null". + +A failed call to fork() now raises an exception. + +References: + 1) Advanced Programming in the Unix Environment: W. Richard Stevens + 2) Unix Programming Frequently Asked Questions: + http://www.erlenstar.demon.co.uk/unix/faq_toc.html +""" + +__author__ = "Chad J. Schroeder" +__copyright__ = "Copyright (C) 2005 Chad J. Schroeder" + +__revision__ = "$Id$" +__version__ = "0.2" + +# Standard Python modules. +import os # Miscellaneous OS interfaces. +import sys # System-specific parameters and functions. + +# Default daemon parameters. +# File mode creation mask of the daemon. +UMASK = 0 + +# Default working directory for the daemon. +WORKDIR = "/" + +# Default maximum for the number of available file descriptors. +MAXFD = 1024 + +# The standard I/O file descriptors are redirected to /dev/null by default. +if (hasattr(os, "devnull")): + REDIRECT_TO = os.devnull +else: + REDIRECT_TO = "/dev/null" + +def createDaemon(): + """Detach a process from the controlling terminal and run it in the + background as a daemon. + """ + + try: + # Fork a child process so the parent can exit. This returns control to + # the command-line or shell. It also guarantees that the child will not + # be a process group leader, since the child receives a new process ID + # and inherits the parent's process group ID. This step is required + # to insure that the next call to os.setsid is successful. + pid = os.fork() + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if (pid == 0): # The first child. + # To become the session leader of this new session and the process group + # leader of the new process group, we call os.setsid(). The process is + # also guaranteed not to have a controlling terminal. + os.setsid() + + # Is ignoring SIGHUP necessary? + # + # It's often suggested that the SIGHUP signal should be ignored before + # the second fork to avoid premature termination of the process. The + # reason is that when the first child terminates, all processes, e.g. + # the second child, in the orphaned group will be sent a SIGHUP. + # + # "However, as part of the session management system, there are exactly + # two cases where SIGHUP is sent on the death of a process: + # + # 1) When the process that dies is the session leader of a session that + # is attached to a terminal device, SIGHUP is sent to all processes + # in the foreground process group of that terminal device. + # 2) When the death of a process causes a process group to become + # orphaned, and one or more processes in the orphaned group are + # stopped, then SIGHUP and SIGCONT are sent to all members of the + # orphaned group." [2] + # + # The first case can be ignored since the child is guaranteed not to have + # a controlling terminal. The second case isn't so easy to dismiss. + # The process group is orphaned when the first child terminates and + # POSIX.1 requires that every STOPPED process in an orphaned process + # group be sent a SIGHUP signal followed by a SIGCONT signal. Since the + # second child is not STOPPED though, we can safely forego ignoring the + # SIGHUP signal. In any case, there are no ill-effects if it is ignored. + # + # import signal # Set handlers for asynchronous events. + # signal.signal(signal.SIGHUP, signal.SIG_IGN) + + try: + # Fork a second child and exit immediately to prevent zombies. This + # causes the second child process to be orphaned, making the init + # process responsible for its cleanup. And, since the first child is + # a session leader without a controlling terminal, it's possible for + # it to acquire one by opening a terminal in the future (System V- + # based systems). This second fork guarantees that the child is no + # longer a session leader, preventing the daemon from ever acquiring + # a controlling terminal. + pid = os.fork() # Fork a second child. + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if (pid == 0): # The second child. + # Since the current working directory may be a mounted filesystem, we + # avoid the issue of not being able to unmount the filesystem at + # shutdown time by changing it to the root directory. + os.chdir(WORKDIR) + # We probably don't want the file mode creation mask inherited from + # the parent, so we give the child complete control over permissions. + os.umask(UMASK) + else: + # exit() or _exit()? See below. + os._exit(0) # Exit parent (the first child) of the second child. + else: + # exit() or _exit()? + # _exit is like exit(), but it doesn't call any functions registered + # with atexit (and on_exit) or any registered signal handlers. It also + # closes any open file descriptors. Using exit() may cause all stdio + # streams to be flushed twice and any temporary files may be unexpectedly + # removed. It's therefore recommended that child branches of a fork() + # and the parent branch(es) of a daemon use _exit(). + os._exit(0) # Exit parent of the first child. + + # Close all open file descriptors. This prevents the child from keeping + # open any file descriptors inherited from the parent. There is a variety + # of methods to accomplish this task. Three are listed below. + # + # Try the system configuration variable, SC_OPEN_MAX, to obtain the maximum + # number of open file descriptors to close. If it doesn't exists, use + # the default value (configurable). + # + # try: + # maxfd = os.sysconf("SC_OPEN_MAX") + # except (AttributeError, ValueError): + # maxfd = MAXFD + # + # OR + # + # if (os.sysconf_names.has_key("SC_OPEN_MAX")): + # maxfd = os.sysconf("SC_OPEN_MAX") + # else: + # maxfd = MAXFD + # + # OR + # + # Use the getrlimit method to retrieve the maximum file descriptor number + # that can be opened by this process. If there is not limit on the + # resource, use the default value. + # + import resource # Resource usage information. + maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1] + if (maxfd == resource.RLIM_INFINITY): + maxfd = MAXFD + + # Iterate through and close all file descriptors. + for fd in range(0, maxfd): + try: + os.close(fd) + except OSError: # ERROR, fd wasn't open to begin with (ignored) + pass + + # Redirect the standard I/O file descriptors to the specified file. Since + # the daemon has no controlling terminal, most daemons redirect stdin, + # stdout, and stderr to /dev/null. This is done to prevent side-effects + # from reads and writes to the standard I/O file descriptors. + + # This call to open is guaranteed to return the lowest file descriptor, + # which will be 0 (stdin), since it was closed above. + os.open(REDIRECT_TO, os.O_RDWR) # standard input (0) + + # Duplicate standard input to standard output and standard error. + os.dup2(0, 1) # standard output (1) + os.dup2(0, 2) # standard error (2) + + return(0) + +if __name__ == "__main__": + + retCode = createDaemon() + + # The code, as is, will create a new file in the root directory, when + # executed with superuser privileges. The file will contain the following + # daemon related process parameters: return code, process ID, parent + # process group ID, session ID, user ID, effective user ID, real group ID, + # and the effective group ID. Notice the relationship between the daemon's + # process ID, process group ID, and its parent's process ID. + + procParams = """ + return code = %s + process ID = %s + parent process ID = %s + process group ID = %s + session ID = %s + user ID = %s + effective user ID = %s + real group ID = %s + effective group ID = %s + """ % (retCode, os.getpid(), os.getppid(), os.getpgrp(), os.getsid(0), + os.getuid(), os.geteuid(), os.getgid(), os.getegid()) + + open("createDaemon.log", "w").write(procParams + "\n") + + sys.exit(retCode) +## end of http://code.activestate.com/recipes/278731/ }}} + diff --git a/fablabchemnitz_dimensioning.inx b/fablabchemnitz_dimensioning.inx new file mode 100644 index 0000000..60a1c26 --- /dev/null +++ b/fablabchemnitz_dimensioning.inx @@ -0,0 +1,64 @@ + + + <_name>Dimensioning + fablabchemnitz.de.dimensioning + pathmodifier.py + inkex.py + + + + + + <_option value="horizontal">horizontal + <_option value="vertical">vertical + <_option value="parallel">parallel + + + <_option value="auto">auto + <_option value="inside">inside + <_option value="outside">outside + + 1 + 5 + 0 + 100 + path + 0 + + + 1 + + <_item value="px">px + <_item value="pt">pt + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + + 0 + + 1 + + + This tool draws beautiful DIN-Style dimensioning arrows. + Draw a path. The dimensioning will go from the start point to the end point of the path. + + + + + + + + + + + + diff --git a/fablabchemnitz_dimensioning.py b/fablabchemnitz_dimensioning.py new file mode 100644 index 0000000..1f00075 --- /dev/null +++ b/fablabchemnitz_dimensioning.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +''' +Tool for drawing beautiful DIN-conform dimensioning arrows +(c) 2012 by Johannes B. Rutzmoser, johannes.rutzmoser (at) googlemail (dot) com + +Please contact me, if you know a way how the extension module accepts mouse input; this would help to improve the tool + +Add this file and the dimensioning.inx file into the following folder to get the feature run: +UNIX: +$HOME/.config/inkscape/extensions/ + +Mac OS X (when using the binary): +/Applications/Inkscape.app/Contents/Resources/extensions/ +or +/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions + +WINDOWS (Filepath may differ, depending where the program was installed): +C:\Program Files\Inkscape\share\extensions + +License: +GNU GENERAL PUBLIC LICENSE + +''' + +import inkex, cubicsuperpath +import simplestyle +import numpy as np +import gettext +_ = gettext.gettext + +def norm(a): + return a/np.sqrt(np.dot(a, a)) + +def rotate(tangentvec, point): + if tangentvec[0] == 0: + angle = - np.pi/2 + else: + angle = np.arctan(tangentvec[1]/tangentvec[0]) + return 'rotate(' + str(angle/np.pi*180) + ',' + str(point[0]) + ',' + str(point[1]) + ')' + + +class Dimensioning(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + # the options given in the dialouge + self.OptionParser.add_option("--orientation", + action="store", type="string", + dest="orientation", default='horizontal', + help="The type of orientation of the dimensioning (horizontal, vertical or parallel)") + self.OptionParser.add_option("--arrow_orientation", + action="store", type="string", + dest="arrow_orientation", default='auto', + help="The type of orientation of the arrows") + self.OptionParser.add_option("--line_scale", + action="store", type="float", + dest="line_scale", default=1.0, + help="Scale factor for the line thickness") + self.OptionParser.add_option("--overlap", + action="store", type="float", + dest="overlap", default=1.0, + help="Overlap of the helpline over the dimensioning line") + self.OptionParser.add_option("--distance", + action="store", type="float", + dest="distance", default=1.0, + help="Distance of the helpline to the object") + self.OptionParser.add_option("--position", + action="store", type="float", + dest="position", default=1.0, + help="position of the dimensioning line") + self.OptionParser.add_option("--flip", + action="store", type="inkbool", + dest="flip", default=False, + help="flip side") + self.OptionParser.add_option("--scale_factor", + action="store", type="float", + dest="scale_factor", default=1.0, + help="scale factor for the dimensioning text") + self.OptionParser.add_option("--unit", + action="store", type="string", + dest="unit", default='px', + help="The unit that should be used for the dimensioning") + self.OptionParser.add_option("--rotate", + action="store", type="inkbool", + dest="rotate", default=True, + help="Rotate the annotation?") + self.OptionParser.add_option("--digit", + action="store", type="int", + dest="digit", default=0, + help="number of digits after the point") + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="sampling", + help="The selected UI-tab when OK was pressed") + def create_linestyles(self): + ''' + Create the line styles for the drawings. + ''' + + self.helpline_style = { + 'stroke' : '#000000', + 'stroke-width' : '{}px'.format(0.5*self.options.line_scale), + 'fill' : 'none' + } + self.dimline_style = { + 'stroke' : '#000000', + 'stroke-width' : '{}px'.format(0.75*self.options.line_scale), + 'fill' : 'none', + 'marker-start' : 'url(#ArrowDIN-start)', + 'marker-end' : 'url(#ArrowDIN-end)' + } + self.text_style = { + 'font-size' : '{}px'.format(12*self.options.line_scale), + 'font-family' : 'Sans', + 'font-style' : 'normal', + 'text-anchor' : 'middle' + } + self.helpline_attribs = {'style' : simplestyle.formatStyle(self.helpline_style), + inkex.addNS('label', 'inkscape') : 'helpline', + 'd' : 'm 0,0 100,0' + } + self.text_attribs = {'style' : simplestyle.formatStyle(self.text_style), + 'x' : '100', + 'y' : '100' + } + self.dimline_attribs = {'style' : simplestyle.formatStyle(self.dimline_style), + inkex.addNS('label','inkscape') : 'dimline', + 'd' : 'm 0,0 200,0' + } + + def getUnittouu(self, param): + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + def effect(self): + # will be executed when feature is activated + self.create_linestyles() + self.makeGroup() + self.getPoints() + self.calcab() + self.drawHelpline() + self.drawDimension() + self.drawText() + + def makeMarkerstyle(self, name, rotate): + defs = self.xpathSingle('/svg:svg//svg:defs') + if defs == None: + defs = inkex.etree.SubElement(self.document.getroot(),inkex.addNS('defs','svg')) + marker = inkex.etree.SubElement(defs ,inkex.addNS('marker','svg')) + marker.set('id', name) + marker.set('orient', 'auto') + marker.set('refX', '0.0') + marker.set('refY', '0.0') + marker.set('style', 'overflow:visible') + marker.set(inkex.addNS('stockid','inkscape'), name) + + arrow = inkex.etree.Element("path") + # messy but works; definition of arrows in beautiful DIN-shapes: + if name.startswith('ArrowDIN-'): + if rotate: + arrow.set('d', 'M 8,0 -8,2.11 -8,-2.11 z') + else: + arrow.set('d', 'M -8,0 8,-2.11 8,2.11 z') + if name.startswith('ArrowDINout-'): + if rotate: + arrow.set('d', 'M 0,0 16,2.11 16,0.5 26,0.5 26,-0.5 16,-0.5 16,-2.11 z') + else: + arrow.set('d', 'M 0,0 -16,2.11 -16,0.5 -26,0.5 -26,-0.5 -16,-0.5 -16,-2.11 z') + + arrow.set('style', 'fill:#000000;stroke:none') + marker.append(arrow) + + + def makeGroup(self): + '''puts everything of the dimensioning in a group''' + layer = self.current_layer + # Group in which the object should be put into + grp_name = 'dimensioning' + grp_attributes = {inkex.addNS('label', 'inkscape') : grp_name} + self.grp = inkex.etree.SubElement(layer, 'g', grp_attributes) + + def getPoints(self): + self.p1 = np.array([0.,100.]) + self.p1 = np.array([100.,100.]) + # Get variables of a selected object + for id, node in self.selected.iteritems(): + # if it is a path: + if node.tag == inkex.addNS('path', 'svg'): + d = node.get('d') + p = cubicsuperpath.parsePath(d) + # p has all nodes with the anchor points in a list; + # the rule is [anchorpoint, node, anchorpoint] + # the points are lists with x and y coordinate + self.p1 = np.array(p[0][0][1]) + self.p2 = np.array(p[0][-1][1]) + + + def calcab(self): + # get p1,p2 ordered for correct dimension direction + # determine quadrant + if self.p1[0] <= self.p2[0]: + if self.p1[1] <= self.p2[1]: + quad = 1 # p1 is left,up of p2 + else: quad = 2 # p1 is left,down of p2 + elif self.p1[1] <= self.p2[1]: + quad = 3 # p1 is right,up of p2 + else: quad = 4 # p1 is right,down of p2 + swap = False if quad ==1 else True + minp = self.p2 if swap else self.p1 + maxp = self.p1 if swap else self.p2 + # distance between points + delta = maxp - minp + # rotation matrix + rotateMat = np.array([[0,-1],[1,0]]) + # compute the unit vectors e1 and e2 along the cartesian coordinates of the dimension + if self.options.orientation == 'horizontal': + if quad == 3: self.e1 = np.array([1.0, 0.0]) + else: self.e1 = np.array([-1.0, 0.0]) + if self.options.orientation == 'vertical': + if quad == 2: + self.e1 = np.array([0.0, -1.0]) + else: self.e1 = np.array([0.0, 1.0]) + if self.options.orientation == 'parallel': + self.e1 = norm(delta) + #if quad==2 or quad==3: self.e1 *= -1 + self.e2 = np.dot(rotateMat, self.e1) + if self.options.flip: + self.e2 *= -1. + # compute the points a and b, where the dimension line arrow spikes start and end + dist = self.options.position*self.e2 + if self.options.flip: + outpt = maxp + delta *= -1 + if swap: + self.a = outpt + dist + self.b = self.a + self.e1*np.dot(self.e1,delta) + else: + self.b = outpt + dist + self.a = self.b + self.e1*np.dot(self.e1,delta) + else: + outpt = minp + if swap: + self.b = outpt + dist + self.a = self.b + self.e1*np.dot(self.e1,delta) + else: + self.a = outpt + dist + self.b = self.a + self.e1*np.dot(self.e1,delta) + + + def drawHelpline(self): + # manipulate the start- and endpoints with distance and overlap + h1_start = self.p1 + norm(self.a - self.p1)*self.options.distance + h1_end = self.a + norm(self.a - self.p1)*self.options.overlap + h2_start = self.p2 + norm(self.b - self.p2)*self.options.distance + h2_end = self.b + norm(self.b - self.p2)*self.options.overlap + + # print the lines + hline1 = inkex.etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.helpline_attribs) + hline1.set('d', 'M %f,%f %f,%f' % (h1_start[0], h1_start[1],h1_end[0],h1_end[1],)) + + hline2 = inkex.etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.helpline_attribs) + hline2.set('d', 'M %f,%f %f,%f' % (h2_start[0], h2_start[1],h2_end[0],h2_end[1],)) + + def setMarker(self, option): + if option=='inside': + # inside + self.arrowlen = 6.0 * self.options.line_scale + self.dimline_style['marker-start'] = 'url(#ArrowDIN-start)' + self.dimline_style['marker-end'] = 'url(#ArrowDIN-end)' + self.makeMarkerstyle('ArrowDIN-start', False) + self.makeMarkerstyle('ArrowDIN-end', True) + else: + # outside + self.arrowlen = 0 + self.dimline_style['marker-start'] = 'url(#ArrowDINout-start)' + self.dimline_style['marker-end'] = 'url(#ArrowDINout-end)' + self.makeMarkerstyle('ArrowDINout-start', False) + self.makeMarkerstyle('ArrowDINout-end', True) + self.dimline_attribs['style'] = simplestyle.formatStyle(self.dimline_style) + + def drawDimension(self): + # critical length, when inside snaps to outside + critical_length = 35 * self.options.line_scale + if self.options.arrow_orientation == 'auto': + if np.abs(np.dot(self.e1, self.b - self.a)) > critical_length: + self.setMarker('inside') + else: + self.setMarker('outside') + else: + self.setMarker(self.options.arrow_orientation) + # start- and endpoint of the dimension line + dim_start = self.a + self.arrowlen*norm(self.b - self.a) + dim_end = self.b - self.arrowlen*norm(self.b - self.a) + # print + dimline = inkex.etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.dimline_attribs) + dimline.set('d', 'M %f,%f %f,%f' % (dim_start[0], dim_start[1], dim_end[0], dim_end[1])) + + def drawText(self): + # distance of text to the dimension line + self.textdistance = 5.0 * self.options.line_scale + if self.e2[1] > 0: + textpoint = (self.a + self.b)/2 - self.e2*self.textdistance + elif self.e2[1] == 0: + textpoint = (self.a + self.b)/2 - np.array([1,0])*self.textdistance + else: + textpoint = (self.a + self.b)/2 + self.e2*self.textdistance + + value = np.abs(np.dot(self.e1, self.b - self.a)) / (self.getUnittouu(str(self.options.scale_factor)+self.options.unit)) + string_value = str(round(value, self.options.digit)) + # chop off last characters if digit is zero or negative + if self.options.digit <=0: + string_value = string_value[:-2] + text = inkex.etree.SubElement(self.grp, inkex.addNS('text', 'svg'), self.text_attribs) + # The alternative for framing with dollars, when LATEX Math export is seeked + # text.text = '$' + string_value + '$' + text.text = string_value + text.set('x', str(textpoint[0])) + text.set('y', str(textpoint[1])) + if self.options.rotate: + text.set('transform', rotate(self.e1, textpoint)) + +# call the object function +if __name__ == '__main__': + a = Dimensioning() + a.affect() diff --git a/fablabchemnitz_ellipse_5pts.inx b/fablabchemnitz_ellipse_5pts.inx new file mode 100644 index 0000000..54df844 --- /dev/null +++ b/fablabchemnitz_ellipse_5pts.inx @@ -0,0 +1,19 @@ + + + <_name>Ellipse by 5 Points + fablabchemnitz.de.ellipse_5pts + + fablabchemnitz_ellipse_5pts.py + inkex.py + simplepath.py + + path + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_ellipse_5pts.py b/fablabchemnitz_ellipse_5pts.py new file mode 100644 index 0000000..33dfb7a --- /dev/null +++ b/fablabchemnitz_ellipse_5pts.py @@ -0,0 +1,232 @@ +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +sys.path.append('/usr/share/inkscape/extensions') +import inkex +import simplepath +import gettext +_ = gettext.gettext +from copy import deepcopy +import math +from math import sqrt + +class EllipseSolveEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + def effect(self): + if len(self.selected) == 0: + sys.exit(_("Error: You must select at least one path")) + + for pathId in self.selected: + path = self.selected[pathId] + pathdata = simplepath.parsePath(path.get('d')) + + if len(pathdata) < 5: + sys.exit(_("Error: The selected path has %d points, " + + "but 5 are needed.") % len(pathdata)) + + points = [] + for i in range(5): + # pathdata[i] is the i'th segment of the path + # pathdata[i][1] is the list of coordinates for the segment + # pathdata[i][1][-2] is the x-coordinate of the last x,y pair + # in the segment definition + segpoints = pathdata[i][1] + x = segpoints[-2] + y = segpoints[-1] + points.append((x,y)) + + conic = solve_conic(points) + [a,b,c,d,e,f] = conic + + if bareiss_determinant([[a,b/2,d/2],[b/2,c,e/2],[d/2,e/2,f]]) == 0 or a*c - b*b/4 <= 0: + sys.exit(_("Error: Could not find an ellipse that passes " + + "through the provided points")) + + center = ellipse_center(conic) + [ad1, ad2] = ellipse_axes(conic) + al1 = ellipse_axislen(conic, center, ad1) + al2 = ellipse_axislen(conic, center, ad2) + + # Create an object with the appropriate cx,cy and + # with the major axis in the x direction. Then add a transform to + # rotate it to the correct angle. + + if al1 > al2: + major_dir = ad1 + major_len = al1 + minor_len = al2 + else: + major_dir = ad2 + major_len = al2 + minor_len = al1 + + # add sodipodi magic to turn the path into an ellipse + def sodi(x): + return inkex.addNS(x, 'sodipodi') + path.set(sodi('cx'), str(center[0])) + path.set(sodi('cy'), str(center[1])) + path.set(sodi('rx'), str(major_len)) + path.set(sodi('ry'), str(minor_len)) + path.set(sodi('type'), 'arc') + + angle = math.atan2(major_dir[1], major_dir[0]) + if angle > math.pi / 2: + angle -= math.pi + if angle < -math.pi / 2: + angle += math.pi + transform = "rotate(%f %f %f)" % (angle * 180 / math.pi, center[0], center[1]) + path.set('transform', transform) + +def solve_conic(pts): + # Find the equation of the conic section passing through the five given + # points. + # + # This technique is from + # http://math.fullerton.edu/mathews/n2003/conicfit/ConicFitMod/Links/ConicFitMod_lnk_9.html + # (retrieved 31 Jan 2012) + rowmajor_matrix = [] + for i in range(5): + (x,y) = pts[i] + row = [x*x, x*y, y*y, x, y, 1] + rowmajor_matrix.append(row) + + full_matrix = [] + for i in range(6): + col = [] + for j in range(5): + col.append(rowmajor_matrix[j][i]) + full_matrix.append(col); + + coeffs = [] + sign = 1 + for i in range(6): + mat = [] + for j in range(6): + if j == i: + continue + mat.append(full_matrix[j]) + coeffs.append(bareiss_determinant(mat) * sign) + sign = -sign + return coeffs + +def bareiss_determinant(mat_orig): + # Compute the determinant of the matrix using Bareiss's algorithm. It + # doesn't matter whether 'mat' is in row-major or column-major layout, + # because det(A) = det(A^T) + + # Algorithm from: + # Yap, Chee, "Linear Systems", Fundamental Problems of Algorithmic Algebra + # Lecture X, Section 2 + # http://cs.nyu.edu/~yap/book/alge/ftpSite/l10.ps.gz + + mat = deepcopy(mat_orig); + + size = len(mat) + last_akk = 1 + for k in range(size-1): + if last_akk == 0: + return 0 + for i in range(k+1, size): + for j in range(k+1, size): + mat[i][j] = (mat[i][j] * mat[k][k] - mat[i][k] * mat[k][j]) / last_akk + last_akk = mat[k][k] + return mat[size-1][size-1] + +def ellipse_center(conic): + # From + # http://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections#Center + [a,b,c,d,e,f] = conic + x = (b*e - 2*c*d) / (4*a*c - b*b); + y = (d*b - 2*a*e) / (4*a*c - b*b); + return (x,y) + +def ellipse_axes(conic): + # Compute the axis directions of the ellipse. + # This technique is from + # http://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections#Axes + [a,b,c,d,e,f] = conic + + # Compute the eigenvalues of + # / a b/2 \ + # \ b/2 c / + # This algorithm is from + # http://www.math.harvard.edu/archive/21b_fall_04/exhibits/2dmatrices/index.html + # (retrieved 31 Jan 2012) + ma = a + mb = b/2 + mc = b/2 + md = c + mdet = ma*md - mb*mc + mtrace = ma + md + + (l1,l2) = solve_quadratic(1, -mtrace, mdet); + + # Eigenvalues (\lambda_1, \lambda_2) + #l1 = mtrace / 2 + sqrt(mtrace*mtrace/4 - mdet) + #l2 = mtrace / 2 - sqrt(mtrace*mtrace/4 - mdet) + + if mb == 0: + return [(0,1), (1,0)] + else: + return [(mb, l1-ma), (mb, l2-ma)] + +def ellipse_axislen(conic, center, direction): + # Compute the axis length as a multiple of the magnitude of 'direction' + [a,b,c,d,e,f] = conic + (cx,cy) = center + (dx,dy) = direction + + dlen = sqrt(dx*dx + dy*dy) + dx /= dlen + dy /= dlen + + # Solve for t: + # a*x^2 + b*x*y + c*y^2 + d*x + e*y + f = 0 + # x = cx + t * dx + # y = cy + t * dy + # by substituting, we get qa*t^2 + qb*t + qc = 0, where: + qa = a*dx*dx + b*dx*dy + c*dy*dy + qb = a*2*cx*dx + b*(cx*dy + cy*dx) + c*2*cy*dy + d*dx + e*dy + qc = a*cx*cx + b*cx*cy + c*cy*cy + d*cx + e*cy + f + + (t1,t2) = solve_quadratic(qa,qb,qc) + + return max(t1,t2) + +def solve_quadratic(a,b,c): + disc = b*b - 4*a*c + disc_root = sqrt(b*b - 4*a*c) + x1 = (-b + disc_root) / (2*a) + x2 = (-b - disc_root) / (2*a) + return (x1,x2) + + + + + + +effect = EllipseSolveEffect() +effect.affect() diff --git a/fablabchemnitz_elliptic_stretch.inx b/fablabchemnitz_elliptic_stretch.inx new file mode 100644 index 0000000..f12bf39 --- /dev/null +++ b/fablabchemnitz_elliptic_stretch.inx @@ -0,0 +1,57 @@ + + + <_name>Elliptic Stretch + fablabchemnitz.de.elliptic_stretch + org.inkscape.output.svg.inkscape + fablabchemnitz_elliptic_stretch.py + inkex.py + simpletransform.py + cubicsuperpath.py + cspsubdiv.py + bezmisc.py + <_param name="Header" type="description" xml:space="preserve"> +This extension will horizontally stretch your drawing. The +amount of stretch increases towards the poles of your egg +(i.e., increases with distance away from the equator). The +stretching is such that when plotted, the resulting plot +appears much like your original drawing. The stretching of +the horizontal near the poles counters the decreasing +circumference of lines of latitude as you approach the poles +of a sphere or egg. + +Apply this extension just before plotting. Note that it +turns all objects into paths composed of line segments. + +If no objects are selected, then the entire document is +transformed. In this case, a vertical line passing through +your document's center (width / 2) will remain unchanged. +The farther a vertical line is from the center, the more it +will be distorted. + +If objects are selected then a vertical line passing through +the horizontal midpoint of the bounding box containing the +selected objects will remain unchanged. + +The vertical smoothing is the vertical segment length to +break non-horizontal lines into so that they are smoothly but +continuously distorted. + +The curve smoothing value is the same control as in the +Eggbot Control extension. It needs to be applied here +before plotting as all curves will be rendered to straight +line segments by this extension. + + 5.0 + 0.2 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_elliptic_stretch.py b/fablabchemnitz_elliptic_stretch.py new file mode 100644 index 0000000..e9c3154 --- /dev/null +++ b/fablabchemnitz_elliptic_stretch.py @@ -0,0 +1,662 @@ +#!/usr/bin/env python +# coding=utf-8 + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# 19 October 2010 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import math + +import bezmisc +import cspsubdiv +import cubicsuperpath +import inkex +import simplepath +from simpletransform import applyTransformToPath, applyTransformToPoint, composeTransform, parseTransform + +N_PAGE_WIDTH = 3200 +N_PAGE_HEIGHT = 800 + + +def inverseTransform(tran): + """ + An SVG transform matrix looks like + + [ a c e ] + [ b d f ] + [ 0 0 1 ] + + And it's inverse is + + [ d -c cf - de ] + [ -b a be - af ] * ( ad - bc ) ** -1 + [ 0 0 1 ] + + And, no reasonable 2d coordinate transform will have + the products ad and bc equal. + + SVG represents the transform matrix column by column as + matrix(a b c d e f) while Inkscape extensions store the + transform matrix as + + [[a, c, e], [b, d, f]] + + To invert the transform stored Inkscape style, we wish to + produce + + [[d/D, -c/D, (cf - de)/D], [-b/D, a/D, (be-af)/D]] + + where + + D = 1 / (ad - bc) + """ + + D = tran[0][0] * tran[1][1] - tran[1][0] * tran[0][1] + if D == 0: + return None + + return [[tran[1][1] / D, -tran[0][1] / D, + (tran[0][1] * tran[1][2] - tran[1][1] * tran[0][2]) / D], + [-tran[1][0] / D, tran[0][0] / D, + (tran[1][0] * tran[0][2] - tran[0][0] * tran[1][2]) / D]] + + +def parseLengthWithUnits(a_str): + """ + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + """ + + u = 'px' + s = a_str.strip() + if s[-2:] == 'px': + s = s[:-2] + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float(s) + except: + return None, None + + return v, u + + +def subdivideCubicPath(sp, flat, i=1): + """ + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + """ + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if cspsubdiv.maxdist(b) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +class Map(inkex.Effect): + + def __init__(self): + + inkex.Effect.__init__(self) + + self.OptionParser.add_option('--smoothness', dest='smoothness', + type='float', default=float(0.2), action='store', + help='Curve smoothing (less for more)') + + self.OptionParser.add_option('--maxDy', dest='maxDy', + type='float', default=float(5.0), action='store', + help='Vertical smoothing (less for more)') + + self.cx = float(N_PAGE_WIDTH) / 2.0 + self.cy = float(N_PAGE_HEIGHT) / 2.0 + self.xmin, self.xmax = (1.0E70, -1.0E70) + self.maxDy = float(5) + self.paths = {} + self.transforms = {} + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + + self.docWidth = float(N_PAGE_WIDTH) + self.docHeight = float(N_PAGE_HEIGHT) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + def getLength(self, name, default): + + """ + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + """ + + s = self.document.getroot().get(name) + if s: + v, u = parseLengthWithUnits(s) + if not v: + # Couldn't parse the value + return None + elif (u == '') or (u == 'px'): + return v + elif u == '%': + return float(default) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float(default) + + def getDocProps(self): + + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + + self.docHeight = self.getLength('height', N_PAGE_HEIGHT) + self.docWidth = self.getLength('width', N_PAGE_WIDTH) + if (self.docHeight is None) or (self.docWidth is None): + return False + else: + return True + + def handleViewBox(self): + + """ + Set up the document-wide transform in the event that the document has an SVG viewbox + """ + + if self.getDocProps(): + viewbox = self.document.getroot().get('viewBox') + if viewbox: + vinfo = viewbox.strip().replace(',', ' ').split(' ') + if (vinfo[2] != 0) and (vinfo[3] != 0): + sx = self.docWidth / float(vinfo[2]) + sy = self.docHeight / float(vinfo[3]) + self.docTransform = parseTransform('scale({0:f},{1:f})'.format(sx, sy)) + + def getPathVertices(self, path, node=None, transform=None, find_bbox=False): + + """ + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + """ + + if (not path) or (len(path) == 0): + # Nothing to do + return None + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath(path) + if (not sp) or (len(sp) == 0): + # Path must have been devoid of any real content + return None + + # Get a cubic super path + p = cubicsuperpath.CubicSuperPath(sp) + if (not p) or (len(p) == 0): + # Probably never happens, but... + return None + + if transform: + applyTransformToPath(transform, p) + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + for sp in p: + if len(subpath_vertices): + subpath_list.append(subpath_vertices) + subpath_vertices = [] + last_csp = None + subdivideCubicPath(sp, float(self.options.smoothness)) + for csp in sp: + if (last_csp is not None) and (math.fabs(csp[1][1] - last_csp[1]) > self.options.maxDy): + dy = (csp[1][1] - last_csp[1]) + dx = (csp[1][0] - last_csp[0]) + nsteps = math.ceil(math.fabs(dy / self.options.maxDy)) + for n in range(1, int(1 + nsteps)): + s = n / nsteps + subpath_vertices.append([last_csp[0] + s * dx, last_csp[1] + s * dy]) + else: + # Add this vertex to the list of vertices + subpath_vertices.append(csp[1]) + last_csp = csp[1] + if find_bbox: + if last_csp[0] < self.xmin: + self.xmin = last_csp[0] + elif last_csp[0] > self.xmax: + self.xmax = last_csp[0] + + # Handle final subpath + if len(subpath_vertices): + subpath_list.append(subpath_vertices) + + if len(subpath_list) > 0: + self.paths[node] = subpath_list + self.transforms[node] = transform + + def mapPathVertices(self, node): + + steps2rads = math.pi / float(1600) + + transform = self.transforms[node] + if transform is None: + inv_transform = None + else: + inv_transform = inverseTransform(transform) + + new_path = '' + for subpath in self.paths[node]: + last_point = subpath[0] + last_point[0] = self.cx + (last_point[0] - self.cx) / math.cos((last_point[1] - self.cy) * steps2rads) + if inv_transform is not None: + applyTransformToPoint(inv_transform, last_point) + new_path += ' M {0:f},{1:f}'.format(last_point[0], last_point[1]) + for point in subpath[1:]: + x = self.cx + (point[0] - self.cx) / math.cos((point[1] - self.cy) * steps2rads) + pt = [x, point[1]] + if inv_transform is not None: + applyTransformToPoint(inv_transform, pt) + new_path += ' l {0:f},{1:f}'.format(pt[0] - last_point[0], pt[1] - last_point[1]) + last_point = pt + + self.paths[node] = new_path + + def recursivelyTraverseSvg(self, a_node_list, mat_current=None, parent_visibility='visible', find_bbox=False): + + """ + [ This too is largely lifted from eggbot.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + """ + + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + for node in a_node_list: + + # Ignore invisible nodes + v = node.get('visibility', parent_visibility) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # First apply the current matrix transform to this node's transform + mat_new = composeTransform(mat_current, parseTransform(node.get("transform"))) + + if node.tag in [inkex.addNS('g', 'svg'), 'g']: + self.recursivelyTraverseSvg(node, mat_new, v, find_bbox) + + elif node.tag in [inkex.addNS('use', 'svg'), 'use']: + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get(inkex.addNS('href', 'xlink')) + + + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode: + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + # Note: the transform has already been applied + if (x != 0) or (y != 0): + mat_new2 = composeTransform(mat_new, parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = mat_new + v = node.get('visibility', v) + self.recursivelyTraverseSvg(refnode, mat_new2, v, find_bbox) + + elif node.tag == inkex.addNS('path', 'svg'): + path_data = node.get('d') + if path_data: + self.getPathVertices(path_data, node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('rect', 'svg'), 'rect']: + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float(node.get('x')) + y = float(node.get('y')) + + w = float(node.get('width', '0')) + h = float(node.get('height', '0')) + a = [['M ', [x, y]], + [' l ', [w, 0]], + [' l ', [0, h]], + [' l ', [-w, 0]], + [' Z', []], + ] + self.getPathVertices(simplepath.formatPath(a), node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('line', 'svg'), 'line']: + + # Convert + # + # + + x1 = float(node.get('x1')) + y1 = float(node.get('y1')) + x2 = float(node.get('x2')) + y2 = float(node.get('y2')) + + a = [['M ', [x1, y1]], + [' L ', [x2, y2]], + ] + self.getPathVertices(simplepath.formatPath(a), node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('polyline', 'svg'), 'polyline']: + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get('points', '').strip() + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + self.getPathVertices(d, node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('polygon', 'svg'), 'polygon']: + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get('points', '').strip() + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(len(pa))]) + d += " Z" + self.getPathVertices(d, node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('ellipse', 'svg'), 'ellipse', + inkex.addNS('circle', 'svg'), 'circle']: + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag in [inkex.addNS('ellipse', 'svg'), 'ellipse']: + rx = float(node.get('rx', '0')) + ry = float(node.get('ry', '0')) + else: + rx = float(node.get('r', '0')) + ry = rx + + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - rx + x2 = cx + rx + + d = 'M {x1:f},{cy:f} ' \ + 'A {rx:f},{ry:f} ' \ + '0 1 0 {x2:f},{cy:f} ' \ + 'A {rx:f},{ry:f} ' \ + '0 1 0 {x1:f},{cy:f}'.format(x1=x1, + x2=x2, + rx=rx, + ry=ry, + cy=cy) + + self.getPathVertices(d, node, mat_new, find_bbox) + + elif node.tag in [inkex.addNS('pattern', 'svg'), 'pattern']: + pass + + elif node.tag in [inkex.addNS('metadata', 'svg'), 'metadata']: + pass + + elif node.tag in [inkex.addNS('defs', 'svg'), 'defs']: + pass + + elif node.tag in [inkex.addNS('namedview', 'sodipodi'), 'namedview']: + pass + + elif node.tag in [inkex.addNS('eggbot', 'svg'), 'eggbot']: + pass + + elif node.tag in [inkex.addNS('text', 'svg'), 'text']: + inkex.errormsg('Warning: unable to draw text, please convert it to a path first.') + pass + + elif not isinstance(node.tag, basestring): + pass + + else: + inkex.errormsg('Warning: unable to draw object <{0}>, please convert it to a path first.'.format(node.tag)) + pass + + def recursivelyReplaceSvg(self, nodes, parent_visibility='visible'): + + for i in range(len(nodes)): + + node = nodes[i] + + # Ignore invisible nodes + v = node.get('visibility', parent_visibility) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + if node.tag in [inkex.addNS('g', 'svg'), 'g']: + + self.recursivelyReplaceSvg(node, parent_visibility=v) + + elif node.tag == inkex.addNS('path', 'svg'): + + if node in self.paths: + # Change the path data to be the new path + node.set('d', self.paths[node][1:]) + del self.paths[node] + + elif node.tag in [inkex.addNS('use', 'svg'), 'use', + inkex.addNS('rect', 'svg'), 'rect', + inkex.addNS('line', 'svg'), 'line', + inkex.addNS('polyline', 'svg'), 'polyline', + inkex.addNS('polygon', 'svg'), 'polygon', + inkex.addNS('ellipse', 'svg'), 'ellipse', + inkex.addNS('circle', 'svg'), 'circle']: + # Replace this element with a element + + if node in self.paths: + # Create a new element + # We simply copy all of the attributes from + # the old element to this new element even though + # some of the attributes are no longer relevant + new_node = inkex.etree.Element(inkex.addNS('path', 'svg'), node.attrib) + new_node.set('d', self.paths[node][1:]) + + # Now replace the old element with this element + nodes[i] = new_node + + # And dispose of the old data and element + del self.paths[node] + del node + + else: + + pass + + def recursivelyGetEnclosingTransform(self, node): + + """ + Determine the cumulative transform which node inherits from + its chain of ancestors. + """ + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform(node) + node_transform = node.get('transform', None) + if node_transform is None: + return parent_transform + else: + tr = parseTransform(node_transform) + if parent_transform is None: + return tr + else: + return composeTransform(parent_transform, tr) + else: + return self.docTransform + + def effect(self): + + # Viewbox handling + self.handleViewBox() + + # Locate the center of the document by obtaining its dimensions + if (self.docHeight is None) or (self.docWidth is None): + inkex.errormsg('Document has inappropriate width or height units') + return + self.cy = self.docHeight / 2.0 + self.cx = self.docWidth / 2.0 + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know it's extrema on the x-axis.) + + if self.options.ids: + # Traverse the selected objects + for id_ in self.options.ids: + transform = self.recursivelyGetEnclosingTransform(self.selected[id_]) + self.recursivelyTraverseSvg([self.selected[id_]], transform, find_bbox=True) + # Use as the vertical centerline the midpoint between + # the bounding box's extremal X coordinates + self.cx = 0.5 * (self.xmin + self.xmax) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + # Now that we know the x-axis extrema, we can remap the data + # Had we know the x-axis extrema in advance (i.e., operating + # on the entire document), then we could have done the mapping + # at the same time we "rendered" everything to line segments. + + for key in self.paths: + self.mapPathVertices(key) + + # And now replace the old paths with the new paths + # WE DO NOT compute and replace the paths in the same pass! + # So doing can cause multiple transformations of cloned paths + + self.recursivelyReplaceSvg(self.document.getroot(), self.docTransform) # TODO The arguments here don't look right. + + +if __name__ == '__main__': + + e = Map() + e.affect() diff --git a/fablabchemnitz_elliptical_box.inx b/fablabchemnitz_elliptical_box.inx new file mode 100644 index 0000000..2e42203 --- /dev/null +++ b/fablabchemnitz_elliptical_box.inx @@ -0,0 +1,41 @@ + + + <_name>Box Maker - Elliptical Box + fablabchemnitz.de.elliptical_box + inkex.py + fablabchemnitz_elliptical_box.py + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 3.0 + 10.0 + 10.0 + 10.0 + 1.5 + false + 3 + 120 + false + false + false + + all + + + + + + + + diff --git a/fablabchemnitz_elliptical_box.py b/fablabchemnitz_elliptical_box.py new file mode 100644 index 0000000..c8130de --- /dev/null +++ b/fablabchemnitz_elliptical_box.py @@ -0,0 +1,500 @@ +#!/usr/bin/env python + +# We will use the inkex module with the predefined Effect base class. +import inkex +# The simplestyle module provides functions for style parsing. + +import simplestyle +from math import * +from collections import namedtuple + +#Note: keep in mind that SVG coordinates start in the top-left corner i.e. with an inverted y-axis + +# first define some SVG primitives (we do not use them all so a cleanup may be in order) +objStyle = simplestyle.formatStyle( + {'stroke': '#000000', + 'stroke-width': 0.28, + 'fill': 'none' + }) + +greenStyle = simplestyle.formatStyle( + {'stroke': '#00ff00', + 'stroke-width': 0.28, + 'fill': 'none' + }) + +def draw_SVG_square((w,h), (x,y), parent): + attribs = { + 'style': objStyle, + 'height': str(h), + 'width': str(w), + 'x': str(x), + 'y': str(y) + } + inkex.etree.SubElement(parent, inkex.addNS('rect', 'svg'), attribs) + +def draw_SVG_ellipse((rx, ry), center, parent, start_end=(0, 2*pi), transform=''): + ell_attribs = {'style': objStyle, + inkex.addNS('cx', 'sodipodi'): str(center.x), + inkex.addNS('cy', 'sodipodi'): str(center.y), + inkex.addNS('rx', 'sodipodi'): str(rx), + inkex.addNS('ry', 'sodipodi'): str(ry), + inkex.addNS('start', 'sodipodi'): str(start_end[0]), + inkex.addNS('end', 'sodipodi'): str(start_end[1]), + inkex.addNS('open', 'sodipodi'): 'true', #all ellipse sectors we will draw are open + inkex.addNS('type', 'sodipodi'): 'arc', + 'transform': transform + } + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), ell_attribs) + + +def draw_SVG_arc((rx, ry), x_axis_rot): + arc_attribs = {'style': objStyle, + 'rx': str(rx), + 'ry': str(ry), + 'x-axis-rotation': str(x_axis_rot), + 'large-arc': '', + 'sweep': '', + 'x': '', + 'y': '' + } + #name='part' + style = {'stroke': '#000000', 'fill': 'none'} + drw = {'style':simplestyle.formatStyle(style),inkex.addNS('label','inkscape'):name,'d':XYstring} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), drw) + inkex.addNS('', 'svg') + +def draw_SVG_text(coordinate, txt, parent): + text = inkex.etree.Element(inkex.addNS('text', 'svg')) + text.text = txt + text.set('x', str(coordinate.x)) + text.set('y', str(coordinate.y)) + style = {'text-align': 'center', 'text-anchor': 'middle'} + text.set('style', simplestyle.formatStyle(style)) + parent.append(text) + + +def SVG_move_to(x, y): + return "M %d %d" % (x, y) + + +def SVG_line_to(x, y): + return "L %d %d" % (x, y) + + +def SVG_arc_to(rx, ry, x, y): + la = sw = 0 + return "A %d %d 0 %d %d" % (rx, ry, la, sw, x, y) + + +def SVG_path(components): + return '' + +def SVG_curve(parent, segments, style, closed=True): + #pathStr = 'M '+ segments[0] + pathStr = ' '.join(segments) + if closed: + pathStr += ' z' + attributes = { + 'style': style, + 'd': pathStr} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), attributes) + +#draw an SVG line segment between the given (raw) points +def draw_SVG_line(start, end, parent, style = objStyle): + line_attribs = {'style': style, + 'd': 'M '+str(start.x)+','+str(start.y)+' L '+str(end.x)+','+str(end.y)} + + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), line_attribs) + + +def _makeCurvedSurface(topLeft, w, h, cutSpacing, hCutCount, thickness, parent, invertNotches = False, centralRib = False): + group = inkex.etree.SubElement(parent, 'g') + width = Coordinate(w, 0) + height = Coordinate(0, h) + wCutCount = int(floor(w / cutSpacing)) + if wCutCount % 2 == 0: + wCutCount += 1 # make sure we have an odd number of cuts + xCutDist = w / wCutCount + xSpacing = Coordinate(xCutDist, 0) + ySpacing = Coordinate(0, cutSpacing) + cut = height / hCutCount - ySpacing + plateThickness = Coordinate(0, thickness) + notchEdges = [0] + topHCuts = [] + bottomHCuts = [] + + for cutIndex in range(wCutCount): + if (cutIndex % 2 == 1) != invertNotches: # make a notch here + inset = plateThickness + else: + inset = Coordinate(0, 0) + + # A-column of cuts + aColStart = topLeft + xSpacing * cutIndex + notchEdges.append((aColStart - topLeft).x) + + if cutIndex > 0: # no cuts at x == 0 + draw_SVG_line(aColStart, aColStart + cut / 2, group) + for j in range(hCutCount - 1): + pos = aColStart + cut / 2 + ySpacing + (cut + ySpacing) * j + draw_SVG_line(pos, pos + cut, group) + draw_SVG_line(aColStart + height - cut / 2, aColStart + height, group) + + # B-column of cuts, offset by half the cut length; these cuts run in the opposite direction + bColStart = topLeft + xSpacing * cutIndex + xSpacing / 2 + for j in reversed(range(hCutCount)): + end = bColStart + ySpacing / 2 + (cut + ySpacing) * j + start = end + cut + if centralRib and hCutCount % 2 == 0 and cutIndex % 2 == 1: + holeTopLeft = start + (ySpacing - plateThickness - xSpacing) / 2 + if j == hCutCount // 2 - 1: + start -= plateThickness / 2 + draw_SVG_line(holeTopLeft + plateThickness + xSpacing, holeTopLeft + plateThickness, group) + draw_SVG_line(holeTopLeft, holeTopLeft + xSpacing, group) + elif j == hCutCount // 2: + end += plateThickness / 2 + if j == 0: # first row + end += inset + elif j == hCutCount - 1: # last row + start -= inset + draw_SVG_line(start, end, group) + + #horizontal cuts (should be done last) + topHCuts.append((aColStart + inset, aColStart + inset + xSpacing)) + bottomHCuts.append((aColStart + height - inset, aColStart + height - inset + xSpacing)) + + # draw the outline + for c in reversed(bottomHCuts): + draw_SVG_line(c[1], c[0], group) + draw_SVG_line(topLeft + height, topLeft, group) + for c in topHCuts: + draw_SVG_line(c[0], c[1], group) + draw_SVG_line(topLeft + width, topLeft + width + height, group) + + notchEdges.append(w) + return notchEdges + +def _makeNotchedEllipse(center, ellipse, startAngle, thickness, notches, parent, invertNotches): + startAngle += pi # rotate 180 degrees to put the lid on the topside + c2 = ellipse.notchCoordinate(ellipse.rAngle(startAngle), thickness) + a1 = atan2((ellipse.w/2 + thickness) * c2.y, (ellipse.h/2 + thickness) * c2.x) + for n in range(1, len(notches) - 1): + startA = ellipse.angleFromDist(startAngle, notches[n]) + endA = ellipse.angleFromDist(startAngle, notches[n + 1]) + c1 = center + ellipse.coordinateFromAngle(endA) + c2 = ellipse.notchCoordinate(endA, thickness) + + a2 = atan2((ellipse.w/2 + thickness) * c2.y, (ellipse.h/2 + thickness) * c2.x) + + c2 += center + if (n % 2 == 1) != invertNotches: + draw_SVG_ellipse((ellipse.w / 2, ellipse.h / 2), center, parent, (startA, endA)) + draw_SVG_line(c1, c2, parent) + else: + draw_SVG_ellipse((ellipse.w / 2 + thickness, ellipse.h / 2 + thickness), center, parent, (a1, a2)) + draw_SVG_line(c2, c1, parent) + + a1 = a2 + +class Ellipse(): + nrPoints = 1000 #used for piecewise linear circumference calculation (ellipse circumference is tricky to calculate) + # approximate circumfere: c = pi * (3 * (a + b) - sqrt(10 * a * b + 3 * (a ** 2 + b ** 2))) + + def __init__(self, w, h): + self.h = h + self.w = w + EllipsePoint = namedtuple('EllipsePoint', 'angle coord cDist') + self.ellData = [EllipsePoint(0, Coordinate(w/2, 0), 0)] # (angle, x, y, cumulative distance from angle = 0) + angle = 0 + self.angleStep = 2 * pi / self.nrPoints + #note: the render angle (ra) corresponds to the angle from the ellipse center (ca) according to: + # ca = atan(w/h * tan(ra)) + for i in range(self.nrPoints): + angle += self.angleStep + prev = self.ellData[-1] + x, y = w / 2 * cos(angle), h / 2 * sin(angle) + self.ellData.append(EllipsePoint(angle, Coordinate(x, y), prev.cDist + hypot(prev.coord.x - x, prev.coord.y - y))) + self.circumference = self.ellData[-1].cDist + #inkex.debug("circ: %d" % self.circumference) + + def rAngle(self, a): + """Convert an angle measured from ellipse center to the angle used to generate ellData (used for lookups)""" + cf = 0 + if a > pi / 2: + cf = pi + if a > 3 * pi / 2: + cf = 2 * pi + return atan(self.w / self.h * tan(a)) + cf + + def coordinateFromAngle(self, angle): + """Coordinate of the point at angle.""" + return Coordinate(self.w / 2 * cos(angle), self.h / 2 * sin(angle)) + + def notchCoordinate(self, angle, notchHeight): + """Coordinate for a notch at the given angle. The notch is perpendicular to the ellipse.""" + angle %= (2 * pi) + #some special cases to avoid divide by zero: + if angle == 0: + return (0, Coordinate(self.w / 2 + notchHeight, 0)) + elif angle == pi: + return (pi, Coordinate(-self.w / 2 - notchHeight, 0)) + elif angle == pi / 2: + return(pi / 2, Coordinate(0, self.h / 2 + notchHeight)) + elif angle == 3 * pi / 2: + return(3 * pi / 2, Coordinate(0, -self.h / 2 - notchHeight)) + + x = self.w / 2 * cos(angle) + derivative = self.h / self.w * -x / sqrt((self.w / 2) ** 2 - x ** 2) + if angle > pi: + derivative = -derivative + + normal = -1 / derivative + nAngle = atan(normal) + if angle > pi / 2 and angle < 3 * pi / 2: + nAngle += pi + + nCoordinate = self.coordinateFromAngle(angle) + Coordinate(cos(nAngle), sin(nAngle)) * notchHeight + return nCoordinate + + + def distFromAngles(self, a1, a2): + """Distance accross the surface from point at angle a2 to point at angle a2. Measured in CCW sense.""" + i1 = int(self.rAngle(a1) / self.angleStep) + p1 = self.rAngle(a1) % self.angleStep + l1 = self.ellData[i1 + 1].cDist - self.ellData[i1].cDist + i2 = int(self.rAngle(a2) / self.angleStep) + p2 = self.rAngle(a2) % self.angleStep + l2 = self.ellData[i2 + 1].cDist - self.ellData[i2].cDist + if a1 <= a2: + len = self.ellData[i2].cDist - self.ellData[i1].cDist + l2 * p2 - l1 * p1 + else: + len = self.circumference + self.ellData[i2].cDist - self.ellData[i1].cDist + return len + + def angleFromDist(self, startAngle, relDist): + """Returns the angle that you get when starting at startAngle and moving a distance (dist) in CCW direction""" + si = int(self.rAngle(startAngle) / self.angleStep) + p = self.rAngle(startAngle) % self.angleStep + + l = self.ellData[si + 1].cDist - self.ellData[si].cDist + + startDist = self.ellData[si].cDist + p * l + + absDist = relDist + startDist + + if absDist > self.ellData[-1].cDist: # wrap around zero angle + absDist -= self.ellData[-1].cDist + + iMin = 0 + iMax = self.nrPoints + count = 0 + while iMax - iMin > 1: # binary search + count += 1 + iHalf = iMin + (iMax - iMin) // 2 + if self.ellData[iHalf].cDist < absDist: + iMin = iHalf + else: + iMax = iHalf + + stepDist = self.ellData[iMax].cDist - self.ellData[iMin].cDist + return self.ellData[iMin].angle + self.angleStep * (absDist - self.ellData[iMin].cDist)/stepDist + + +class Coordinate: + def __init__(self, x, y): + self.x = x + self.y = y + + def __add__(self, other): + return Coordinate(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Coordinate(self.x - other.x, self.y - other.y) + + def __mul__(self, factor): + return Coordinate(self.x * factor, self.y * factor) + + def __div__(self, quotient): + return Coordinate(self.x / quotient, self.y / quotient) + + +class EllipticalBox(inkex.Effect): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + self.OptionParser.add_option('-u', '--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit, should be one of ') + + self.OptionParser.add_option('-t', '--thickness', action = 'store', + type = 'float', dest = 'thickness', default = '3.0', + help = 'Material thickness') + + self.OptionParser.add_option('-x', '--width', action = 'store', + type = 'float', dest = 'width', default = '3.0', + help = 'Box width') + + self.OptionParser.add_option('-z', '--height', action = 'store', + type = 'float', dest = 'height', default = '10.0', + help = 'Box height') + + self.OptionParser.add_option('-y', '--depth', action = 'store', + type = 'float', dest = 'depth', default = '3.0', + help = 'Box depth') + + self.OptionParser.add_option('-d', '--cut_dist', action = 'store', + type = 'float', dest = 'cut_dist', default = '1.5', + help = 'Distance between cuts on the wrap around. Note that this value will change slightly to evenly fill up the available space.') + + self.OptionParser.add_option('--auto_cut_dist', action = 'store', + type = 'inkbool', dest = 'auto_cut_dist', default = 'false', + help = 'Automatically set the cut distance based on the curvature.') + + self.OptionParser.add_option('-c', '--cut_nr', action = 'store', + type = 'int', dest = 'cut_nr', default = '3', + help = 'Number of cuts across the depth of the box.') + + self.OptionParser.add_option('-a', '--lid_angle', action = 'store', + type = 'float', dest = 'lid_angle', default = '120', + help = 'Angle that forms the lid (in degrees, measured from centerpoint of the ellipse)') + + self.OptionParser.add_option('-b', '--body_ribcount', action = 'store', + type = 'int', dest = 'body_ribcount', default = '0', + help = 'Number of ribs in the body') + + self.OptionParser.add_option('-l', '--lid_ribcount', action = 'store', + type = 'int', dest = 'lid_ribcount', default = '0', + help = 'Number of ribs in the lid') + + self.OptionParser.add_option('-n', '--invert_lid_notches', action = 'store', + type = 'inkbool', dest = 'invert_lid_notches', default = 'false', + help = 'Invert the notch pattern on the lid (to prevent sideways motion)') + + self.OptionParser.add_option('-r', '--central_rib_lid', action = 'store', + type = 'inkbool', dest = 'centralRibLid', default = 'false', + help = 'Create a central rib in the lid') + + self.OptionParser.add_option('-R', '--central_rib_body', action = 'store', + type = 'inkbool', dest = 'centralRibBody', default = 'false', + help = 'Create a central rib in the body') + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def effect(self): + """ + Draws as basic elliptical box, based on provided parameters + """ + + # input sanity check + error = False + if min(self.options.height, self.options.width, self.options.depth) == 0: + inkex.errormsg('Error: Dimensions must be non zero') + error = True + + if self.options.cut_nr < 1: + inkex.errormsg('Error: Number of cuts should be at least 1') + error = True + + if (self.options.centralRibLid or self.options.centralRibBody) and self.options.cut_nr % 2 == 1: + inkex.errormsg('Error: Central rib is only valid with an even number of cuts') + error = True + + if self.options.unit not in self.knownUnits: + inkex.errormsg('Error: unknown unit. '+ self.options.unit) + error = True + + if error: + exit() + + + # convert units + unit = self.options.unit + H = self.unittouu(str(self.options.height) + unit) + W = self.unittouu(str(self.options.width) + unit) + D = self.unittouu(str(self.options.depth) + unit) + thickness = self.unittouu(str(self.options.thickness) + unit) + cutSpacing = self.unittouu(str(self.options.cut_dist) + unit) + cutNr = self.options.cut_nr + + svg = self.document.getroot() + docWidth = self.unittouu(svg.get('width')) + docHeigh = self.unittouu(svg.attrib['height']) + + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Elliptical Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + ell = Ellipse(W, H) + + #body and lid + lidAngleRad = self.options.lid_angle * 2 * pi / 360 + lidStartAngle = pi / 2 - lidAngleRad / 2 + lidEndAngle = pi / 2 + lidAngleRad / 2 + + lidLength = ell.distFromAngles(lidStartAngle, lidEndAngle) + bodyLength = ell.distFromAngles(lidEndAngle, lidStartAngle) + + # do not put elements right at the edge of the page + xMargin = 3 + yMargin = 3 + bodyNotches = _makeCurvedSurface(Coordinate(xMargin, yMargin), bodyLength, D, cutSpacing, cutNr, thickness, layer, False, self.options.centralRibBody) + lidNotches = _makeCurvedSurface(Coordinate(xMargin, D + 2 * yMargin), lidLength, D, cutSpacing, cutNr, thickness, layer, not self.options.invert_lid_notches, self.options.centralRibLid) + a1 = lidEndAngle + + # create elliptical sides + sidesGrp = inkex.etree.SubElement(layer, 'g') + + elCenter = Coordinate(xMargin + thickness + W / 2, 2 * D + H / 2 + thickness + 3 * yMargin) + + # indicate the division between body and lid + if self.options.invert_lid_notches: + draw_SVG_line(elCenter, elCenter + ell.coordinateFromAngle(ell.rAngle(lidStartAngle + pi)), sidesGrp, greenStyle) + draw_SVG_line(elCenter, elCenter + ell.coordinateFromAngle(ell.rAngle(lidEndAngle + pi)), sidesGrp, greenStyle) + else: + angleA = ell.angleFromDist(lidStartAngle, lidNotches[2]) + angleB = ell.angleFromDist(lidStartAngle, lidNotches[-2]) + + draw_SVG_line(elCenter, elCenter + ell.coordinateFromAngle(angleA + pi), sidesGrp, greenStyle) + draw_SVG_line(elCenter, elCenter + ell.coordinateFromAngle(angleB + pi), sidesGrp, greenStyle) + + _makeNotchedEllipse(elCenter, ell, lidEndAngle, thickness, bodyNotches, sidesGrp, False) + _makeNotchedEllipse(elCenter, ell, lidStartAngle, thickness, lidNotches, sidesGrp, not self.options.invert_lid_notches) + + # ribs + spacer = Coordinate(0, 10) + innerRibCenter = Coordinate(xMargin + thickness + W / 2, 2 * D + 1.5 * (H + 2 *thickness) + 4 * yMargin) + innerRibGrp = inkex.etree.SubElement(layer, 'g') + + outerRibCenter = Coordinate(2 * xMargin + 1.5 * (W + 2 * thickness) , 2 * D + 1.5 * (H + 2 * thickness) + 4 * yMargin) + outerRibGrp = inkex.etree.SubElement(layer, 'g') + + + if self.options.centralRibLid: + + _makeNotchedEllipse(innerRibCenter, ell, lidStartAngle, thickness, lidNotches, innerRibGrp, False) + _makeNotchedEllipse(outerRibCenter, ell, lidStartAngle, thickness, lidNotches, outerRibGrp, True) + + if self.options.centralRibBody: + _makeNotchedEllipse(innerRibCenter + spacer, ell, lidEndAngle, thickness, bodyNotches, innerRibGrp, False) + _makeNotchedEllipse(outerRibCenter + spacer, ell, lidEndAngle, thickness, bodyNotches, outerRibGrp, True) + + if self.options.centralRibLid or self.options.centralRibBody: + draw_SVG_text(elCenter, 'side (duplicate this)', sidesGrp) + draw_SVG_text(innerRibCenter, 'inside rib', innerRibGrp) + draw_SVG_text(outerRibCenter, 'outside rib', outerRibGrp) + +# Create effect instance and apply it. +effect = EllipticalBox() +effect.affect() diff --git a/fablabchemnitz_elliptical_cone_box.inx b/fablabchemnitz_elliptical_cone_box.inx new file mode 100644 index 0000000..03ecfa9 --- /dev/null +++ b/fablabchemnitz_elliptical_cone_box.inx @@ -0,0 +1,39 @@ + + + <_name>Box Maker - Elliptical Cone + fablabchemnitz.de.elliptical_cone_box + inkex.py + fablabchemnitz_elliptical_cone_box.py + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 3.0 + 60.0 + 90.0 + 0.5 + 50.0 + 2 + 0 + true + true + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_elliptical_cone_box.py b/fablabchemnitz_elliptical_cone_box.py new file mode 100644 index 0000000..d2359f1 --- /dev/null +++ b/fablabchemnitz_elliptical_cone_box.py @@ -0,0 +1,752 @@ +#!/usr/bin/env python2 +# coding: utf8 +# We will use the inkex module with the predefined Effect base class. +import inkex +# The simplestyle module provides functions for style parsing. + +import simplestyle +import math +import numpy as np + +sizeTab = 10000 #ANy value greater than 1000 should give goo results + +objStyle = simplestyle.formatStyle( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + }) + + +objStyleStart = simplestyle.formatStyle( + {'stroke': '#FF0000', + 'stroke-width': 0.1, + 'fill': 'none' + }) + + +def lengthCurve(Xarray, Yarray, npoints): + ''' + Give length of a path between point of a curve + Beware, go from 0 to Index included, so the arrays should have at least npoints+1 elements + ''' + x = Xarray[0] + y = Yarray[0] + Length = 0.0 + i = 1 + while i <= npoints: + Length += math.hypot((Xarray[i] - x), (Yarray[i] - y)) + x = Xarray[i] + y = Yarray[i] + i += 1 + return Length + + + + +class inkcape_polar: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, r, angle): + #Return string for moving to point given as parameter, with polar coordinates radius, angle + self.Path += ' M ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def MoveTo_cartesian(self, pt): + #Return string for moving to point given as parameter + self.Path += ' M ' + str(round(pt[0]-self.offsetX, 3)) + ',' + str(round(pt[1]-self.offsetY, 3)) + + + def LineTo_cartesian(self, pt): + #Return string for moving to point given as parameter + self.Path += ' L ' + str(round(pt[0]-self.offsetX, 3)) + ',' + str(round(pt[1]-self.offsetY, 3)) + + def LineTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' L ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def Line(self, r1, angle1, r2, angle2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r1*math.cos(angle1)-self.offsetX, 3)) + ',' + str(round(r1*math.sin(angle1)-self.offsetY, 3)) + ' L ' + str(round(r2*math.cos(angle2)-self.offsetX, 3)) + ',' + str(round(r2*math.sin(angle2)-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + inkex.etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + +class EllConicalBox(inkex.Effect): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + self.OptionParser.add_option('--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit, should be one of ') + + self.OptionParser.add_option('--thickness', action = 'store', + type = 'float', dest = 'thickness', default = '3.0', + help = 'Material thickness') + + self.OptionParser.add_option('--d1', action = 'store', + type = 'float', dest = 'd1', default = '50.0', + help = 'Small ellipse diameter') + + self.OptionParser.add_option('--d2', action = 'store', + type = 'float', dest = 'd2', default = '100.0', + help = 'Large ellipse diameter') + + self.OptionParser.add_option('--eccentricity', action = 'store', + type = 'float', dest = 'eccentricity', default = '1.0', + help = 'Ratio minor vs major axis, should be less than 1') + + self.OptionParser.add_option('--zc', action = 'store', + type = 'float', dest = 'zc', default = '50.0', + help = 'Cone height') + + self.OptionParser.add_option('--notch_interval', action = 'store', + type = 'int', dest = 'notch_interval', default = '2', + help = 'Interval between notches, should be even') + + self.OptionParser.add_option('--cut_position', action = 'store', + type = 'int', dest = 'cut_position', default = '0', + help = 'Cut position angle') + + self.OptionParser.add_option('--inner_size', action = 'store', + type = 'inkbool', dest = 'inner_size', default = 'true', + help = 'Dimensions are internal') + + self.OptionParser.add_option('--Mode_Debug', action = 'store', + type = 'inkbool', dest = 'Mode_Debug', default = 'false', + help = 'Output Debug information in file') + + # Create list of points for the ellipse, will be filled later + self.xEllipse = np.zeros(sizeTab+1) #X coordiantes + self.yEllipse = np.zeros(sizeTab+1) # Y coordinates + self.lEllipse = np.zeros(sizeTab+1) # Length of curve until this point + + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def DebugMsg(self, s): + if self.fDebug: + self.fDebug.write(s) + + def length2Angle(self, StartIdx, Position): + ''' + Return the first index which is near the requested position. + Start search at StartIdx to optimize computation + ''' + while Position > self.lEllipse[StartIdx]: + StartIdx += 1 + if StartIdx >= sizeTab: + return sizeTab + # Now return value between StartIdx and StartIdx - 1 which is nearer + if StartIdx == 0: + return 0 + if abs(Position - self.lEllipse[StartIdx]) > abs(Position - self.lEllipse[StartIdx-1]): + return StartIdx - 1 + return StartIdx + + def ellipse_ext(self, a, b, alpha, e): + ''' + Compute the point which is on line orthogonal to ellipse (a, b) and angle alpha and on the ellipse of parameters ( a+e, b+e) + As equations are quite complex, use an approximation method + ''' + Slope = math.atan2(b*math.cos(alpha), -a*math.sin(alpha)) #Ellipse slope in point at angle alpha + Ortho = Slope - math.pi/2 # Use -pi/2 because e positive means second ellipse larger + ''' The point is on the line x = a*cos(alpha) + L*cos(Ortho), y= b*sin(alpha) + L*sin(Ortho) + We have to determine L + For this, change L and compare with equation of larger ellipse + Start with L = e + Result should lie between L/2 and 2L + ''' + #self.DebugMsg("Enter ellipse_ext"+str((a,b,alpha,e))+" Slope="+str(Slope*180/math.pi)+" Ortho="+str(Ortho*180/math.pi)+'\n') + L = e + step = e + ntry = 1 + x = a*math.cos(alpha) + L*math.cos(Ortho) + y = b*math.sin(alpha) + L*math.sin(Ortho) + # Compute difference which the error between this point and the large ellipse + distance = (x*x)/((a+e)*(a+e)) + (y*y)/((b+e)*(b+e)) - 1 + #self.DebugMsg("ellipse_ext First try with L=e pt="+str((x,y))+" distance="+str(distance)+'\n') + while abs(distance) > 0.001 and step >0.001: + if distance > 0: + #L is too large, decrease by step/2 + step /= 2 + L -= step + else: + #L is not large enough, increase by step/2 + step /= 2 + L += step + ntry += 1 + x = a*math.cos(alpha) + L*math.cos(Ortho) + y = b*math.sin(alpha) + L*math.sin(Ortho) + # Compute difference which the error between this point and the large ellipse + distance = (x*x)/((a+e)*(a+e)) + (y*y)/((b+e)*(b+e)) - 1 + #self.DebugMsg(" try "+str(ntry)+" with L="+str(L)+" pt="+str((x,y))+" distance="+str(distance)+'\n') + if distance > 0.001: + self.DebugMsg("Problem, solution do not converge. Error is "+str(distance)+" after "+str(ntry)+" tries\n") + return(x, y) + #self.DebugMsg("Solution converge after "+str(ntry)+" tries. Error is "+str(distance)+"\n") + return(x, y) + + def Coordinates_Step_SubStep(self, step, substep): + ''' + Return the radius and angle on resulting curve for step i, substep j + ''' + if step == self.num_notches: + # Specific case for last notch on curve + if substep == 0: #Last position on curve + return (self.ResultingCurve_R[sizeTab], self.ResultingCurve_Theta[sizeTab]) + else: + AngleEllipse = self.Notches_Angle_ellipse[self.Offset_Notch][1] - self.Offset_Ellipse #To match first step + if AngleEllipse < 0: + AngleEllipse += sizeTab + return(self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]+self.ResultingCurve_Theta[sizeTab]) + new_step = step + self.Offset_Notch + if new_step >= self.num_notches: + new_step -= self.num_notches + AngleEllipse = self.Notches_Angle_ellipse[new_step][substep] - self.Offset_Ellipse + if AngleEllipse < 0: + AngleEllipse += sizeTab + if substep == 0 or step == 0: + self.DebugMsg("Coordinates_Step_SubStep"+str((step, substep))+" --> AngleEllipse ="+str(self.Notches_Angle_ellipse[new_step][substep])+" --> "+str(AngleEllipse)+" Result="+str((self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]))+'\n') + + return (self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]) + + def gen_flex_step(self, index_step): + ''' + Draw a flex step. Each step has N + 2 vertical lines where N is the distance between notches. + The notch itself is 2 mm (roughly) large, the whole notch is N+2 mm large + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # first draw the line between next notch and current one + R, angle = self.Coordinates_Step_SubStep(index_step+1, 0) + self.DebugMsg("gen_flex_step("+str(index_step)+") : MoveTo("+str((R, 180*angle/math.pi))+'\n') + path.MoveTo(R, angle) + R, angle = self.Coordinates_Step_SubStep(index_step, 2) + path.LineTo(R, angle) + self.DebugMsg(" From next notch, LineTo("+str((R, 180*angle/math.pi))+'\n') + # Then the notch, starting internal to external + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg(" Int notch, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(index_step, 0) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Int notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line ends at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(v + R , angle) + self.DebugMsg(" notch, LineTo "+str((R+v, 180*angle/math.pi))+" v ="+str(v)+" v2="+str(v2)+'\n') + # Now draw N-1 vertical lines, size v2 + for i in range(self.nbVerticalLines-1): + path.Line(i*(v2+2)+v+2+R, angle, (i+1)*(v2+2)+v+R, angle) + self.DebugMsg(" Vertical lines_1 , Line from "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+" to "+str(((i+1)*(v2+2)+v+R, 180*angle/math.pi))+'\n') + # Then external notch + path.Line((i+1)*(v2+2)+v+R+2, angle, R2 + self.thickness, angle) + self.DebugMsg(" Ext_notch , Line from "+str(((i+1)*(v2+2)+v+R+2, 180*angle/math.pi))+" to "+str((R2 + self.thickness, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(index_step, 2) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + R01, angle2 = self.Coordinates_Step_SubStep(index_step+1, 0) + R21 = R01 * self.large_ell_a / self.small_ell_a + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + #Line to next notch (external) + path.Line(R2, angle, R21, angle2) + self.DebugMsg(" To next notch, Line From "+str((R21, 180*angle/math.pi))+" To "+str((R2, 180*angle2/math.pi))+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + # Then draw nbVerticalLines inside notch, "top" to "bottom" + R, angle = self.Coordinates_Step_SubStep(index_step, 1) + v2 = (R2-R)/self.nbVerticalLines - 2 + for i in range(self.nbVerticalLines): + if i == 0: + path.Line(R-self.thickness+1, angle, R+v2+1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R-self.thickness+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + elif i == self.nbVerticalLines - 1: + path.Line(R+i*(v2+2)+1, angle, R2 + self.thickness - 1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R2 + self.thickness - 1, 180*angle/math.pi))+'\n') + else: + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + # Then notch_interval set of nbVerticalLines + # + for line in range(1, self.options.notch_interval): + R, angle = self.Coordinates_Step_SubStep(index_step, line+2) + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + if line % 2 == 0: + #line is even, draw nbVerticalLines top to bottom + for i in range(self.nbVerticalLines): + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_4_0 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + else: + # line is odd, draw bottom to top, first line half size + path.Line(R2 - 1, angle, R2 - v, angle) + # then nbVerticalLines - 1 lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + #and at last, one vertical line half size + path.Line(v+R, angle, R+1, angle) + path.GenPath() + + def gen_flex_first_step(self): + ''' + Draw the first step flex. + This specific step has a notch which is only 1mm (roughly) wide, because first and last step shoul lie in same notch + This has step has N + 2 vertical lines where N is the distance between notches. + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # first draw the line between next notch and current one + R, angle = self.Coordinates_Step_SubStep(1, 0) # Position of next step, which is 1 + self.DebugMsg("gen_first_flex_step : MoveTo("+str((R, 180*angle/math.pi))+'\n') + path.MoveTo(R, angle) + R, angle = self.Coordinates_Step_SubStep(0, 2) + path.LineTo(R, angle) + self.DebugMsg(" From next notch, LineTo("+str((R, 180*angle/math.pi))+'\n') + # Then the notch, starting internal to external + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg(" Int notch, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(0, 1) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Int notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # Then edge, full line towards R2 + path.LineTo(R2+self.thickness , angle) + self.DebugMsg(" edge, LineTo "+str((R2, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(0, 2) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + R01, angle2 = self.Coordinates_Step_SubStep(1, 0) + R21 = R01 * self.large_ell_a / self.small_ell_a + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + #Line to next notch (external) + path.Line(R2, angle, R21, angle2) + self.DebugMsg(" To next notch, Line From "+str((R21, 180*angle/math.pi))+" To "+str((R2, 180*angle2/math.pi))+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + # Then notch_interval -1 or +1 set of nbVerticalLines + if self.options.notch_interval == 2: + numstep = 3 + else: + numstep = self.options.notch_interval - 1 + for line in range(1, numstep): + R, angle = self.Coordinates_Step_SubStep(0, line+2) + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + if line % 2 == 0: + #line is even, draw nbVerticalLines top to bottom + for i in range(self.nbVerticalLines): + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_4_0 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + else: + # line is odd, draw bottom to top, first line half size + path.Line(R2 - 1, angle, R2 - v, angle) + # then nbVerticalLines - 1 lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + #and at last, one vertical line half size + path.Line(v+R, angle, R+1, angle) + path.GenPath() + + def gen_flex_last_step(self): + ''' + Draw the last step flex. + This specific step has a notch which is only 1mm (roughly) wide, because first and last step shoul lie in same notch + This is a very simple step, with only the narrow notch + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # Then the notch, starting internal to external + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 0) + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg("GenLast_Step, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 1) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Last notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # Then edge, full line towards R2 + path.LineTo(R2+self.thickness , angle) + self.DebugMsg(" edge, LineTo "+str((R2, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 0) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Last Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + path.GenPath() + + def compute_notches_angle(self): + ''' + Compute the angles associated with each notch + Indeed, do not compute angles, but index in the reference ellipse array. + After this angle could be easily computed by multiplying by 2*pi/sizeTab + For each notch build a list of n+2 angles, corresponding to each step in the notch + 2 steps for the notch itself and n steps as requested between notches + Angles are computed to match length of the small ellipse, length of the larger one will be longer accordingly to size ratio + return an array which will be used for drawing both ellipses and curved surface + ''' + self.Notches_Angle_ellipse = [] + LastIdx = 0 + curPos = 0 + #Compute offset, this is the first notch greater or equal to offset + Delta_i = self.options.cut_position * sizeTab / 360 #expected offset + + self.Offset_Notch = -1 + for iNotch in range(self.num_notches): + # First point is same as end of previous one, do not compute + # Second and third one are 1mm (roughly) farther to make the notch + idx1 = self.length2Angle( LastIdx, (curPos + self.notch_size / ( self.options.notch_interval + 2.0))/self.small_ell_a) + idx2 = self.length2Angle( LastIdx, (curPos + self.notch_size * 2.0 / ( self.options.notch_interval + 2.0))/self.small_ell_a) + # Check if this is the "special notch" + if idx1 >= Delta_i: + self.Offset_Ellipse = LastIdx + self.Offset_Notch = iNotch + Delta_i = sizeTab * 2 # To make sure there is only one match ! + elif self.Offset_Notch < 0 and iNotch >= self.num_notches -1: + #If not found the special notch, this is the last one + self.Offset_Ellipse = LastIdx + self.Offset_Notch = iNotch + current_notch = [LastIdx, idx1, idx2] + #self.DebugMsg("Notch "+str(iNotch)+" First points="+str(current_notch)+'\n') + NumStep = self.options.notch_interval + if iNotch == self.Offset_Notch: + self.DebugMsg("Angle offset="+str(self.options.cut_position)+" Delta notch="+str(self.Offset_Notch)+" Real offset="+str(self.Offset_Ellipse)+'\n') + if NumStep == 2: + NumStep = 3 # In this case, special notch is longer + else: + NumStep -= 1 # In this case, it is shorter + # Now for each remaining steps + for i in range(NumStep): + # Even with specific notch, use self.options.notch_interval to keep global notch_size different + idx = self.length2Angle( LastIdx, (curPos + self.notch_size * (2.0+i+1) / ( self.options.notch_interval + 2.0))/self.small_ell_a) + current_notch.append(idx) # add to the list + LastIdx = idx + curPos = self.lEllipse[idx] * self.small_ell_a + self.Notches_Angle_ellipse.append(current_notch) + if iNotch == self.Offset_Notch: + self.DebugMsg(" Special Notch "+str(iNotch)+" with Numstep="+str(NumStep)+" ="+str(current_notch)+'\n') + + #self.DebugMsg(" Complete Notch "+str(iNotch)+"="+str(current_notch)+'\n') + self.DebugMsg("Angles are computed, last position : "+str(curPos)+'\n') + # Now change position of notch next to Offset to make assembly easier + # if notch_interval is 2, add one for this + + + def gen_Resulting_Curve(self): + ''' + Each point from the smallest ellipse will be on a curve defined by + 1) The distance from the cone summit will sqrt(h**2 + a**2*cos(alpha)**2 + b**2*sin(alpha)**2) where h is the cone height (full cone up to summit) + and a and b are the ellipse dimensions. + 2) The distance between two points on the curve should be equal at the distance between two points on the ellipse. + If when on alpha1 on the ellipse the angle on the resulting curbe is Theta1. + When on alpha2 on the ellipse, the angle on the resulting curve will be Theta2, and distance between Point(Theta2), Point(Theta1) will be equal + to distance Point(Alpha1), Point(Alpha2) + 3) Theta=0 on resulting curve should correspond to parameter cut_position on the ellipse. + + ''' + #First compute the cone summit with the dimensions of the two ellipses + # When angle is 0, positions are (small_a, 0) and (large_a,0) + h1 = self.zc*self.small_ell_a/(self.large_ell_a - self.small_ell_a) + self.DebugMsg("gen_Resulting_Curve: height for small ellipse "+str(h1)+" For large one "+str(h1*self.large_ell_a/self.small_ell_a)+'\n') + # Now for each angle (index) in Notches_Angle compute the corresponding Theta angle on the resulting curve and the associated distance (polar coordinates) + # Do the computation with the small ellipse and large ellipse + self.ResultingCurve_R = np.zeros(sizeTab+1) # Distance from center for the small ellipse, once projection is applied + self.ResultingCurve_Theta = np.zeros(sizeTab+1) # Angle on resulting curve, for each point in initial ellipse + LengthResultingCurve = 0 + alpha = (math.pi * 2 / sizeTab) * self.Offset_Ellipse + #Offset to length computation on ellipse + length_Offset = self.lEllipse[self.Offset_Ellipse] + #Compute first point + self.ResultingCurve_R[0] = math.sqrt(h1**2 + self.small_ell_a**2*math.cos(alpha)**2 + self.small_ell_b**2*math.sin(alpha)**2) + self.ResultingCurve_Theta[0] = 0 + oldR = self.ResultingCurve_R[0] + oldX = oldR + oldY = 0 + self.BoundingXmax = oldX + self.BoundingXmin = oldX + self.BoundingYmax = oldY + self.BoundingYmin = oldY + i = 1 + error = 0 + maxError = 0 + maxErrorPos = 0 + while i <= sizeTab: + index_ellipse = i + self.Offset_Ellipse + if index_ellipse > sizeTab: + index_ellipse -= sizeTab + # First radius + alpha = (math.pi * 2 / sizeTab) * index_ellipse + R = math.sqrt(h1**2 + self.small_ell_a**2*math.cos(alpha)**2 + self.small_ell_b**2*math.sin(alpha)**2) + self.ResultingCurve_R[i] = R + # Then angle + # First get distance on ellipse and delta from distance on result curve + if i == sizeTab: #Specific case, whole ellipse + Distance = self.small_ell_a * self.lEllipse[sizeTab] + else: + Distance = self.small_ell_a * (self.lEllipse[index_ellipse] - length_Offset) + if Distance < 0: + Distance += self.lEllipse[sizeTab] * self.small_ell_a + Delta_Distance = Distance - LengthResultingCurve + if i == sizeTab: + self.DebugMsg("gen_Resulting_Curve["+str(i)+"] : oldR="+str(oldR)+" R="+str(R)+" Distance="+str(Distance)+" Delta_Distance="+str(Delta_Distance)+" Compute acos("+str((oldR**2 + R**2 - Delta_Distance**2 ) / (2*oldR*R))+")\n") + dTheta = math.acos((oldR**2 + R**2 - Delta_Distance**2 ) / (2*oldR*R)) + Theta = self.ResultingCurve_Theta[i-1] + dTheta + self.ResultingCurve_Theta[i] = Theta + X = R*math.cos(Theta) + Y = R*math.sin(Theta) + LengthResultingCurve += math.sqrt((X - oldX)**2 + (Y - oldY)**2) + oldR = R + oldX = X + oldY = Y + if self.BoundingXmax < X: + self.BoundingXmax = X + if self.BoundingXmin > X: + self.BoundingXmin = X + if self.BoundingYmax < Y: + self.BoundingYmax = Y + if self.BoundingYmin > Y: + self.BoundingYmin = Y + #self.DebugMsg("Index= "+str(i)+" R= "+str(R)+" Theta= "+str(180*Theta/math.pi)+" Longueur= "+str(LengthResultingCurve)+'\n') + error = abs(Distance - LengthResultingCurve) + if error > maxError: + maxError = error + maxErrorPos = i + self.DebugMsg("New max error reached at index "+str(i)+" Distance Ellipse="+str(Distance)+" on curve="+str(LengthResultingCurve)+" Error="+str(error)+'\n') + i += 1 + + + def gen_ellipse(self, axis_a, axis_b, xOffset, yOffset, parent): + ''' Generate an ellipse with notches as a path. + Ellipse dimensions' are parameters axis_a and axis_b + Notches size gives the exact distance between two notches + Notches number gives the number of notches to be drawed + xOffset and yOffset gives the offset within the inkscape page + Parent gives the parent structure of the path which will be created, most often the inkscape page itself + ''' + group = inkex.etree.SubElement(parent, 'g') # Create a group which will hold the ellipse + path = inkcape_polar((xOffset, yOffset), group) + # First point is in (major_axis, 0) + Angle = 0 + idx = 0 + for iNotch in range(self.num_notches): + #Angle on ellipse + angle = (math.pi * 2.0 / sizeTab) * self.Notches_Angle_ellipse[iNotch][0] + # First point is external + pt1 = self.ellipse_ext(axis_a, axis_b, angle, self.thickness) + #Second point is on ellipse at angle given by Notches_Angle_ellipse + pt2 = (axis_a*math.cos(angle), axis_b*math.sin(angle)) + #Third point is on ellipse at angle with substep=2 + angle1 = (math.pi * 2.0 / sizeTab) * self.Notches_Angle_ellipse[iNotch][2] + pt3 = (axis_a*math.cos(angle1), axis_b*math.sin(angle1)) + #Fourth point is external + pt4 = self.ellipse_ext(axis_a, axis_b, angle1, self.thickness) + if iNotch == 0: + #Specific case, use MoveTo + path.MoveTo_cartesian(pt1) + else: + #Draw line from previous fourth point + path.LineTo_cartesian(pt1) + #Then pt1 --> pt2 + path.LineTo_cartesian(pt2) + #Then pt2 --> pt3 + path.LineTo_cartesian(pt3) + #And at last pt3 --> pt4 + path.LineTo_cartesian(pt4) + self.DebugMsg("Draw Ellipse, notch "+str(iNotch)+" Pts="+str([pt1, pt2, pt3, pt4])+'\n') + #Last line will be drawed with next notch + #For the last one + path.LineTo_cartesian((axis_a+self.thickness, 0)) + path.GenPath() + + def gen_flex(self, xOffset, yOffset, parent): + group = inkex.etree.SubElement(parent, 'g') + self.group = group + self.Offset = (xOffset, yOffset) + #Compute number of vertical lines, depends on cone's height + R = self.ResultingCurve_R[0] + R2 = self.large_ell_a / self.small_ell_a * self.ResultingCurve_R[0] + if R2 - R > 60: + self.nbVerticalLines = int((R2 - R)/25) + else: + self.nbVerticalLines = 2 + self.DebugMsg("Starting gen flex with "+str(self.nbVerticalLines)+" vertical lines R1="+str(R)+" R2="+str(R2)+ "R2-R1="+str(R2-R)+"\n") + # First start step + self.gen_flex_first_step() + # Then middle steps + for step in range(1, self.num_notches): + self.gen_flex_step(step) + # and alst one, (very short) + self.gen_flex_last_step() + + def effect(self): + """ + Draws an elliptical conic box, based on provided parameters + """ + + # input sanity check + error = False + if self.options.zc < 15: + inkex.errormsg('Error: Cone height should be at least 15mm') + error = True + + if self.options.d1 < 30: + inkex.errormsg('Error: d1 should be at least 30mm') + error = True + + if self.options.d2 < self.options.d1 + 0.009999: + inkex.errormsg('Error: d2 should be at d1 + 0.01mm') + error = True + + if self.options.eccentricity > 1.0 or self.options.eccentricity < 0.01: + inkex.errormsg('Ratio minor axis / major axis should be between 0.01 and 1.0') + error = True + + if self.options.notch_interval > 10: + inkex.errormsg('Distance between notches should be less than 10') + error = True + + if self.options.thickness < 1 or self.options.thickness > 10: + inkex.errormsg('Error: thickness should be at least 1mm and less than 10mm') + error = True + + if error: + exit() + + # convert units + unit = self.options.unit + self.small_ell_a = round(0.5 * self.unittouu(str(self.options.d1) + unit), 2) + self.large_ell_a = round(0.5 * self.unittouu(str(self.options.d2) + unit), 2) + self.zc = self.unittouu(str(self.options.zc) + unit) + self.thickness = self.unittouu(str(self.options.thickness) + unit) + if self.options.notch_interval % 2: + #Should be even ! + self.options.notch_interval += 1 + # If dimensions are external, correct d1, d2 and zc by thickness + if self.options.inner_size == False: + self.large_ell_a -= 2*self.thickness + self.d2 -= 2*self.thickness + self.zc -= 2*self.thickness + #Compute minor axes sizes + self.small_ell_b = round(self.small_ell_a * self.options.eccentricity, 2) + self.large_ell_b = round(self.large_ell_a * self.options.eccentricity, 2) + + svg = self.document.getroot() + docWidth = self.unittouu(svg.get('width')) + docHeight = self.unittouu(svg.attrib['height']) + + # Open Debug file if requested + if self.options.Mode_Debug: + try: + self.fDebug = open( 'DebugEllConicBox.txt', 'w') + except IOError: + print ('cannot open debug output file') + self.DebugMsg("Start processing, doc size="+str((docWidth, docHeight))+"\n") + + + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Conical Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #Create reference ellipse points. + self.xEllipse[0] = 1 + self.yEllipse[0] = 0 + self.lEllipse[0] = 0 + i = 1 + while i <= sizeTab: + self.xEllipse[i] = math.cos(2*math.pi*i/sizeTab) # Major axis size : 1 + self.yEllipse[i] = self.options.eccentricity*math.sin(2*math.pi*i/sizeTab) # Minor axis size + self.lEllipse[i] = self.lEllipse[i-1] + math.hypot( self.xEllipse[i] - self.xEllipse[i-1], self.yEllipse[i] - self.yEllipse[i-1]) + i += 1 + + + # Compute notches size of small ellipse + Ell_Length = self.small_ell_a * self.lEllipse[sizeTab] + # One notch is different to make assembly easier, as the notch on flex are NOT evenly spaced + if self.options.notch_interval == 2: + self.num_notches = int(round((Ell_Length - self.options.notch_interval - 3) / (2.0 + self.options.notch_interval)+1)) + self.notch_size = Ell_Length / (self.num_notches -1 + (self.options.notch_interval+3.0)/(self.options.notch_interval+2.0)) + else: + self.num_notches = int(round((Ell_Length - self.options.notch_interval - 1) / (2.0 + self.options.notch_interval)+1)) + self.notch_size = Ell_Length / (self.num_notches -1 + (self.options.notch_interval+1.0)/(self.options.notch_interval+2.0)) + self.DebugMsg("Small ellipse dimensions a ="+str(self.small_ell_a)+" b="+str(self.small_ell_b)+" Length ="+str(Ell_Length)+'\n') + self.DebugMsg("Number of notches : "+str(self.num_notches)+" Real notch size="+str(self.notch_size)+'\n') + #Compute angles of all points which be drawed + self.compute_notches_angle() + #Then draw small ellipse + self.gen_ellipse(self.small_ell_a, self.small_ell_b, -self.small_ell_a - self.thickness - 1, -self.small_ell_b - self.thickness - 1, layer) + # Then large one + self.gen_ellipse(self.large_ell_a, self.large_ell_b, -self.large_ell_a-2*self.small_ell_a - 3*self.thickness - 5, -self.large_ell_b - self.thickness - 1, layer) + # Compute points on resulting curve + self.gen_Resulting_Curve() + # Then generate flex + # Bounding box of flex has been computed in gen_Resulting_Curve + self.DebugMsg("Flex bounding box : "+str((self.BoundingXmin, self.BoundingYmin))+","+str((self.BoundingXmax, self.BoundingYmax))+'\n') + # yOffset is below large ellipse + yOffset = -2*(self.large_ell_b+self.thickness) - 5 - self.BoundingYmin + # xOffset, center on page + xOffset = 0.5*(self.BoundingXmin + self.BoundingXmax) - 0.5*docWidth + self.DebugMsg("Offset Flex="+str((xOffset, yOffset))+'\n') + self.gen_flex(xOffset, yOffset, layer) + + if self.fDebug: + self.fDebug.close() + + + +# Create effect instance and apply it. +effect = EllConicalBox() +effect.affect() diff --git a/fablabchemnitz_encoder_disk_generator.inx b/fablabchemnitz_encoder_disk_generator.inx new file mode 100644 index 0000000..9a90cb3 --- /dev/null +++ b/fablabchemnitz_encoder_disk_generator.inx @@ -0,0 +1,81 @@ + + + <_name>Encoder Disk Generator +fablabchemnitz.de.encoder_disk_generator +inkex.py +fablabchemnitz_encoder_disk_generator.py + + + 0.0 + 0.0 + 1 + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 1 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 1 + 1 + 0.0 + 0.0 + + + 30.0 + 5.0 + 010011110111000010001101 + 25.0 + 10.0 + + + + all + + + + + + + + diff --git a/fablabchemnitz_encoder_disk_generator.py b/fablabchemnitz_encoder_disk_generator.py new file mode 100644 index 0000000..1cc40ef --- /dev/null +++ b/fablabchemnitz_encoder_disk_generator.py @@ -0,0 +1,487 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import inkex +import simplestyle +import math +import string +import simpletransform + + +# Function for calculating a point from the origin when you know the distance +# and the angle +def calculatePoint(angle, distance): + if (angle < 0 or angle > 360): + return None + else: + return [ + distance * math.cos(math.radians(angle)), + distance * math.sin(math.radians(angle))] + + +class EncoderDiskGenerator(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="rotary_enc", + help="Selected tab") + self.OptionParser.add_option("--diameter", + action="store", type="float", + dest="diameter", default=0.0, + help="Diameter of the encoder disk") + self.OptionParser.add_option("--hole_diameter", + action="store", type="float", + dest="hole_diameter", default=0.0, + help="Diameter of the center hole") + self.OptionParser.add_option("--segments", + action="store", type="int", + dest="segments", default=0, + help="Number of segments") + self.OptionParser.add_option("--outer_encoder_diameter", + action="store", type="float", + dest="outer_encoder_diameter", default=0.0, + help="Diameter of the outer encoder disk") + self.OptionParser.add_option("--outer_encoder_width", + action="store", type="float", + dest="outer_encoder_width", default=0.0, + help="Width of the outer encoder disk") + self.OptionParser.add_option("--inner_encoder_diameter", + action="store", type="float", + dest="inner_encoder_diameter", default=0.0, + help="Diameter of the inner encoder disk") + self.OptionParser.add_option("--inner_encoder_width", + action="store", type="float", + dest="inner_encoder_width", default=0.0, + help="Width of the inner encoder disk") + self.OptionParser.add_option("--bits", + action="store", type="int", + dest="bits", default=1, + help="Number of bits/tracks") + self.OptionParser.add_option("--encoder_diameter", + action="store", type="float", + dest="encoder_diameter", default=0.0, + help="Outer diameter of the last track") + self.OptionParser.add_option("--track_width", + action="store", type="float", + dest="track_width", default=0.0, + help="Width of one track") + self.OptionParser.add_option("--track_distance", + action="store", type="float", + dest="track_distance", default=0.0, + help="Distance between tracks") + self.OptionParser.add_option("--bm_diameter", + action="store", type="float", + dest="bm_diameter", default=0.0, + help="Diameter of the encoder disk") + self.OptionParser.add_option("--bm_hole_diameter", + action="store", type="float", + dest="bm_hole_diameter", default=0.0, + help="Diameter of the center hole") + self.OptionParser.add_option("--bm_bits", + action="store", type="string", + dest="bm_bits", default="", + help="Bits of segments") + self.OptionParser.add_option("--bm_outer_encoder_diameter", + action="store", type="float", + dest="bm_outer_encoder_diameter", default=0.0, + help="Diameter of the outer encoder disk") + self.OptionParser.add_option("--bm_outer_encoder_width", + action="store", type="float", + dest="bm_outer_encoder_width", default=0.0, + help="Width of the outer encoder disk") + self.OptionParser.add_option("--brgc_diameter", + action="store", type="float", + dest="brgc_diameter", default=0.0, + help="Diameter of the encoder disk") + self.OptionParser.add_option("--stgc_diameter", + action="store", type="float", + dest="stgc_diameter", default=0.0, + help="Diameter of the encoder disk") + self.OptionParser.add_option("--brgc_hole_diameter", + action="store", type="float", + dest="brgc_hole_diameter", default=0.0, + help="Diameter of the center hole") + self.OptionParser.add_option("--cutouts", + action="store", type="int", + dest="cutouts", default=1, + help="Number of cutouts") + self.OptionParser.add_option("--sensors", + action="store", type="int", + dest="sensors", default=1, + help="Number of sensors") + self.OptionParser.add_option("--stgc_hole_diameter", + action="store", type="float", + dest="stgc_hole_diameter", default=0.0, + help="Diameter of the center hole") + self.OptionParser.add_option("--stgc_encoder_diameter", + action="store", type="float", + dest="stgc_encoder_diameter", default=0.0, + help="Outer diameter of the last track") + self.OptionParser.add_option("--stgc_track_width", + action="store", type="float", + dest="stgc_track_width", default=0.0, + help="Width of track") + + # This function just concatenates the point and the command and returns + # the data string + def parsePathData(self, command, point): + + path_data = command + ' %f ' % point[0] + ' %f ' % point[1] + return path_data + + # Creates a gray code of size bits (n >= 1) in the format of a list + def createGrayCode(self, bits): + + gray_code = [[False], [True]] + + if bits == 1: + return gray_code + + for i in range(bits - 1): + temp = [] + # Reflect values + for j in range(len(gray_code[0]), 0, -1): + for k in range(0, len(gray_code)): + if j == len(gray_code[0]): + temp.append([gray_code[k][-j]]) + else: + temp[k].append(gray_code[k][-j]) + while temp: + gray_code.append(temp.pop()) + # Add False to the "old" values and true to the new ones + for j in range(0, len(gray_code)): + if j < len(gray_code) / 2: + gray_code[j].insert(0, False) + else: + gray_code[j].insert(0, True) + temp = [] + + return gray_code + + # This function returns the segments for a gray encoder + def drawGrayEncoder(self, line_style, bits, encoder_diameter, track_width, + track_distance): + gray_code = self.createGrayCode(bits) + + segments = [] + segment_size = 0 + start_angle_position = 0 + index = 0 + current_encoder_diameter = encoder_diameter + previous_item = False + position_size = 360.0 / (2 ** bits) + + for i in range(len(gray_code[0]) - 1, -1, -1): + for j in gray_code: + if j[i]: + segment_size += 1 + if segment_size == 1: + start_angle_position = index + previous_item = True + elif not j[i] and previous_item: + segments.append( + self.drawSegment(line_style, + start_angle_position * position_size, + segment_size * position_size, + current_encoder_diameter, + track_width)) + + segment_size = 0 + previous_item = False + start_angle_position = 0 + + index += 1 + + if previous_item: + segments.append(self.drawSegment(line_style, + start_angle_position * position_size, + segment_size * position_size, + current_encoder_diameter, track_width)) + segment_size = 0 + previous_item = False + start_angle_position = 0 + current_encoder_diameter -= (2 * track_distance + 2 * track_width) + index = 0 + + return segments + + # Check if there is too many cutouts compared to number of sensors + def validSTGrayEncoder(self, cutouts, sensors): + if sensors < 6 and cutouts > 1: + pass + elif sensors <= 10 and cutouts > 2: + pass + elif sensors <= 16 and cutouts > 3: + pass + elif sensors <= 23 and cutouts > 4: + pass + elif sensors <= 36 and cutouts > 5: + pass + else: + return True + + return False + + # This function returns the segments for a single-track gray encoder + def drawSTGrayEncoder( + self, line_style, cutouts, sensors, encoder_diameter, track_width): + + segments = [] + resolution = 360.0 / (cutouts * 2 * sensors) + current_angle = 0.0 + added_angle = ((2 * cutouts + 1) * resolution) + for n in range(cutouts): + current_segment_size = ((n * 2 + 2) * cutouts + 1) * resolution + segments.append( + self.drawSegment( + line_style, current_angle, + current_segment_size, + encoder_diameter, track_width)) + current_angle += added_angle + current_segment_size + + return segments + + def drawLabel(self, group, angle, segment_angle, outer_diameter, labelNum): + outer_radius = outer_diameter / 2 + label_angle = angle + (segment_angle / 2) + point = calculatePoint(label_angle, outer_radius) + matrix = simpletransform.parseTransform( + 'rotate(' + str(label_angle + 90) + ')') + matrix_str = str(matrix[0][0]) + "," + str(matrix[0][1]) + matrix_str += "," + str(matrix[1][0]) + "," + str(matrix[1][1]) + ",0,0" + text = { + 'id': 'text' + str(labelNum), + #'sodipodi:linespacing': '0%', + 'style': 'font-size: 6px;font-style: normal;font-family: Sans', + #'transform': 'matrix(' + matrix_str + ')', + 'x': str(point[0]), + 'y': str(point[1]), + #'xml:space': 'preserve' + } + textElement = inkex.etree.SubElement(group, inkex.addNS('text', 'svg'), text) + #tspanElement = inkex.etree.Element( + # textElement, '{%s}%s' % (svg_uri, 'tspan'), tspan) + textElement.text = string.printable[labelNum % len(string.printable)] + + self.current_layer.append(textElement) + + # This function creates the path for one single segment + def drawSegment(self, line_style, angle, segment_angle, outer_diameter, width): + + path = {'style': simplestyle.formatStyle(line_style)} + path['d'] = '' + outer_radius = outer_diameter / 2 + + # Go to the first point in the segment + path['d'] += self.parsePathData( + 'M', calculatePoint(angle, outer_radius - width)) + + # Go to the second point in the segment + path['d'] += self.parsePathData('L', calculatePoint(angle, outer_radius)) + + # Go to the third point in the segment, draw an arc + point = calculatePoint(angle + segment_angle, outer_radius) + path['d'] += self.parsePathData('A', [outer_radius, outer_radius]) + \ + '0 0 1' + self.parsePathData(' ', point) + + # Go to the fourth point in the segment + point = calculatePoint(angle + segment_angle, outer_radius - width) + path['d'] += self.parsePathData('L', point) + + # Go to the beginning in the segment, draw an arc + point = calculatePoint(angle, outer_radius - width) + # 'Z' closes the path + path['d'] += (self.parsePathData( + 'A', + [outer_radius - width, outer_radius - width]) + + '0 0 0' + self.parsePathData(' ', point) + ' Z') + + # Return the path + return path + + # This function adds an element to the document + def addElement(self, element_type, group, element_attributes): + inkex.etree.SubElement( + group, inkex.addNS(element_type, 'svg'), + element_attributes) + + def drawCircles(self, hole_diameter, diameter): + # Attributes for the center hole, then create it, if diameter is 0, dont + # create it + circle_elements = [] + attributes = { + 'style': simplestyle.formatStyle({'stroke': 'none', 'fill': 'black'}), + 'r': str(hole_diameter / 2) + } + if self.options.hole_diameter > 0: + circle_elements.append(attributes) + + # Attributes for the guide hole in the center hole, then create it + attributes = { + 'style': simplestyle.formatStyle( + {'stroke': 'white', 'fill': 'white', 'stroke-width': '0.1'}), + 'r': '1' + } + circle_elements.append(attributes) + + # Attributes for the outer rim, then create it + attributes = { + 'style': simplestyle.formatStyle( + {'stroke': 'black', 'stroke-width': '1', 'fill': 'none'}), + 'r': str(diameter / 2) + } + if self.options.diameter > 0: + circle_elements.append(attributes) + + return circle_elements + + def drawCommonCircles(self, group, diameter, hole_diameter): + circle_elements = self.drawCircles(hole_diameter, diameter) + + for circle in circle_elements: + self.addElement('circle', group, circle) + + def effectBrgc(self, group, line_style, diameter, hole_diameter): + + if (((self.options.encoder_diameter / 2) - + (self.options.bits * self.options.track_width + + (self.options.bits - 1) * self.options.track_distance)) < + self.options.brgc_hole_diameter / 2): + inkex.errormsg("Innermost encoder smaller than the center hole!") + else: + segments = self.drawGrayEncoder( + line_style, self.options.bits, + self.options.encoder_diameter, + self.options.track_width, + self.options.track_distance) + for item in segments: + self.addElement('path', group, item) + + self.drawCommonCircles(group, diameter, hole_diameter) + + def effectStgc(self, group, line_style, diameter, hole_diameter): + + if ((self.options.stgc_encoder_diameter / 2) - + self.options.stgc_track_width < self.options.stgc_hole_diameter / 2): + inkex.errormsg("Encoder smaller than the center hole!") + elif not self.validSTGrayEncoder(self.options.cutouts, self.options.sensors): + inkex.errormsg("Too many cutouts compared to number of sensors!") + else: + segments = self.drawSTGrayEncoder(line_style, self.options.cutouts, + self.options.sensors, self.options.stgc_encoder_diameter, + self.options.stgc_track_width) + for item in segments: + self.addElement('path', group, item) + + self.drawCommonCircles(group, diameter, hole_diameter) + + def effectRotaryEnc(self, group, line_style, diameter, hole_diameter): + + # Angle of one single segment + segment_angle = 360.0 / (self.options.segments * 2) + + for segment_number in range(0, self.options.segments): + + angle = segment_number * (segment_angle * 2) + + if (self.options.outer_encoder_width > 0 and + self.options.outer_encoder_diameter > 0 and + self.options.outer_encoder_diameter / 2 > + self.options.outer_encoder_width): + + segment = self.drawSegment(line_style, angle, + segment_angle, + self.options.outer_encoder_diameter, + self.options.outer_encoder_width) + self.addElement('path', group, segment) + + # If the inner encoder diameter is something else than 0; create it + if (self.options.outer_encoder_width > 0 and + self.options.inner_encoder_diameter > 0 and + self.options.inner_encoder_diameter / 2 > + self.options.inner_encoder_width): + + # The inner encoder must be half an encoder segment ahead of the outer one + segment = self.drawSegment( + line_style, angle + (segment_angle / 2), segment_angle, + self.options.inner_encoder_diameter, + self.options.inner_encoder_width) + + self.addElement('path', group, segment) + + self.drawCommonCircles(group, diameter, hole_diameter) + + def effectBitmapEnc(self, group, line_style, diameter, hole_diameter): + + bits = self.options.bm_bits + bm_segments = len(bits) + # Angle of one single segment + segment_angle = 360.0 / bm_segments + + for segment_number in range(0, bm_segments): + + angle = segment_number * segment_angle + + if (self.options.bm_outer_encoder_width > 0 and + self.options.bm_outer_encoder_diameter > 0 and + self.options.bm_outer_encoder_diameter > + self.options.bm_outer_encoder_width): + + self.drawLabel(group, + angle, segment_angle, + self.options.bm_diameter, + segment_number) + # Drawing only the black segments + if (bits[segment_number] == '1'): + segment = self.drawSegment( + line_style, angle, + segment_angle, + self.options.bm_outer_encoder_diameter, + self.options.bm_outer_encoder_width) + + self.addElement('path', group, segment) + + self.drawCommonCircles(group, diameter, hole_diameter) + + def effect(self): + + # Group to put all the elements in, center set in the middle of the view + group = inkex.etree.SubElement(self.current_layer, 'g', { + inkex.addNS('label', 'inkscape'): 'Encoder disk', + 'transform': 'translate' + str(self.view_center) + }) + + # Line style for the encoder segments + line_style = { + 'stroke': 'white', + 'stroke-width': '0', + 'fill': 'black' + } + + if self.options.tab == "\"brgc\"": + self.effectBrgc(group, line_style, + self.options.brgc_diameter, + self.options.brgc_hole_diameter) + + if self.options.tab == "\"stgc\"": + self.effectStgc(group, line_style, + self.options.stgc_diameter, + self.options.stgc_hole_diameter) + + if self.options.tab == "\"rotary_enc\"": + self.effectRotaryEnc(group, line_style, + self.options.diameter, + self.options.hole_diameter) + + if self.options.tab == "\"bitmap_enc\"": + self.effectBitmapEnc(group, line_style, + self.options.bm_diameter, + self.options.bm_hole_diameter) + + +if __name__ == '__main__': + # Run the effect + effect = EncoderDiskGenerator() + effect.affect() diff --git a/fablabchemnitz_endurance_line_shading.inx b/fablabchemnitz_endurance_line_shading.inx new file mode 100644 index 0000000..a7c1a45 --- /dev/null +++ b/fablabchemnitz_endurance_line_shading.inx @@ -0,0 +1,46 @@ + + + <_name>Line Shading + fablabchemnitz.de.endurance_line_shading + fablabchemnitz_endurance_line_shading.py + inkex.py + + + + + + + + 20 + 0.1 + 2.0 + 0.0 + 1.0 + 2.2 + + + <_param name="title" type="description">This extension converts the selected +image into a wavy shading. + + + 0.25 + + + + + + + + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_endurance_line_shading.py b/fablabchemnitz_endurance_line_shading.py new file mode 100644 index 0000000..691ac95 --- /dev/null +++ b/fablabchemnitz_endurance_line_shading.py @@ -0,0 +1,346 @@ +#Version controll: last edited by 01.03.2018 8:20 +#!/usr/bin/env python +''' +Created by Danylo Horbatenko 2018, dnkxyz@gmail.com +Copyright (C) 2018 George Fomitchev, gf@endurancerobots.com + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +''' + +import os +import tempfile +import shutil +import subprocess +import math +import inkex +import fablabchemnitz_png +import simplepath +import simplestyle + +def saw(x): + #The function returns a symmetric triangle wave with period 4 and varying between -1 and 1 + x = math.fmod(x, 4.0) + x = math.fabs(x) + if x > 2.0: + y = 3 - x + else: + y = x - 1 + return y + +def square(x): + #The function returns a square wave with period 4 and varying between -1 and 1 + x = math.fmod(x, 4.0) + if 1.0 < x < 3.0: + y = 1.0 + else: + y = -1.0 + return y + +class LineShading(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-p', '--palette', action='store', type='string', dest='palette', help='Choose the colors...') + self.OptionParser.add_option("--waveform", + action="store", type="string", + dest="waveform", + help="Select the shape of the curve") + self.OptionParser.add_option("--num_lines", + action="store", type="int", + dest="num_lines", + help="Number of lines") + self.OptionParser.add_option("--min_period", + action="store", type="float", + dest="min_period", + help="Minimum period (corresponds to black pixels)") + self.OptionParser.add_option("--max_period", + action="store", type="float", + dest="max_period", + help="Maximum period (corresponds to white pixels)") + self.OptionParser.add_option("--min_amplitude", + action="store", type="float", + dest="min_amplitude", + help="Minimum amplitude (corresponds to white pixels)") + self.OptionParser.add_option("--max_amplitude", + action="store", type="float", + dest="max_amplitude", + help="Maximum amplitude (corresponds to black pixels)") + self.OptionParser.add_option("--gamma", + action="store", type="float", + dest="gamma", + help="Maximum amplitude (corresponds to black pixels)") + self.OptionParser.add_option("--line_width", + action="store", type="float", + dest="line_width", + help="Line width") + self.OptionParser.add_option("--units", + action="store", type="string", + dest="units", + help="Units for line thickness") + self.OptionParser.add_option("--remove", + action="store", type="inkbool", + dest="remove", + help="If True, source image is removed") + self.OptionParser.add_option("--active-tab", + action="store", type="string", + dest="active-tab", + help="The selected UI-tab when OK was pressed") + + def drawfunction(self, image_w, image_h, file): + reader = fablabchemnitz_png.Reader(file) + w, h, pixels, metadata = reader.read_flat() + matrice = [[1.0 for i in range(w)]for j in range(h)] + gumma = self.options.gamma + if metadata['alpha']: + n = 4 + else: + n = 3 + #RGB convert to grayscale 0.21R + 0.72G + 0.07B + for y in range(h): + for x in range(w): + pixel_pos = (x + y * w)*n + p = 1.0 - (pixels[pixel_pos]*0.21 + pixels[(pixel_pos+1)]*0.72 + pixels[(pixel_pos+2)]*0.07)/255.0 + matrice[y][x] = math.pow(p, 1.0/gumma) + + points = [] + step_y = image_h/h + step_x = image_w/(w-1) + min_amplitude = self.options.min_amplitude*step_y/2 + max_amplitude = self.options.max_amplitude*step_y/2 + min_period = self.options.min_period*step_y + max_period = self.options.max_period*step_y + min_frequency = 1.0/max_period + max_frequency = 1.0/min_period + + #Sinusoidal wave (optimized) + if self.options.waveform == 'sin': + for y in range(h): + pi = math.pi + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0 + x0 = 0.0 + y0 = math.sin(phase)*(min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + (y+0.5)*step_y + points.append([' M ',[x0, y0]]) + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 2.0*pi/period*step_x + #calculate y + if phase > 2.0*pi: + if n_step > 0: + x3 = coord_x + y3 = -amplitude/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.32 + y2 = y3 + x1 = x0 + (x3-x0)*0.34 + y1 = y0 + x0 = x3 + y0 = y3 + points.append([' C ',[x1, y1, x2, y2, x3, y3]]) + n_step = 0 + amplitude = 0 + elif phase < pi < (phase + d_phase): + if n_step > 0: + x3 = coord_x + y3 = amplitude/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.34 + y2 = y3 + x1 = x0 + (x3-x0)*0.32 + y1 = y0 + x0 = x3 + y0 = y3 + points.append([' C ',[x1, y1, x2, y2, x3, y3]]) + n_step = 0 + amplitude = 0 + phase = math.fmod(phase, 2.0*pi) + #calculate x + if phase < 0.5*pi < (phase + d_phase): + coord_x = (x - (phase - 0.5*pi)/d_phase)*step_x + elif phase < 1.5*pi < (phase + d_phase): + coord_x = (x - (phase - 1.5*pi)/d_phase)*step_x + phase += d_phase + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + n_step += 1 + #add last point + if n_step > 0: + phase = math.fmod(phase, 2.0*pi) + if (0 < phase < 0.5*pi) or (pi < phase < 1.5*pi): + x3 = (w-1)*step_x + y3 = amplitude*math.sin(phase)/n_step + (y+0.5)*step_y + x2 = x3 + y2 = y3 + x1 = x0 + (x3-x0)*0.33 + y1 = y0 + points.append([' C ',[x1, y1, x2, y2, x3, y3]]) + else: + if coord_x > (w-1)*step_x: + coord_x = (w-1)*step_x + x3 = coord_x + y3 = math.copysign( amplitude , math.sin(phase))/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.32 + y2 = y3 + x1 = x0 + (x3-x0)*0.34 + y1 = y0 + points.append([' C ',[x1, y1, x2, y2, x3, y3]]) + if coord_x < (w-1)*step_x: + x0 = x3 + y0 = y3 + x3 = (w-1)*step_x + y3 = amplitude*math.sin(phase)/n_step + (y+0.5)*step_y + x2 = x3 + y2 = y3 + x1 = x0 + (x3-x0)*0.33 + y1 = y0 + points.append([' C ',[x1, y1, x2, y2, x3, y3]]) + + #Sinusoidal wave (Brute-force) + elif self.options.waveform == 'sin_b': + pi2 = math.pi*2.0 + for y in range(h): + phase = - pi2/4.0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + amplitude = min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x] + phase += pi2*step_x/period + phase = math.fmod(phase, pi2) + if x == 0: + points.append([' M ',[x*step_x, amplitude*math.sin(phase) + (y+0.5)*step_y]]) + else: + points.append([' L ',[x*step_x, amplitude*math.sin(phase) + (y+0.5)*step_y]]) + + #Saw wave + elif self.options.waveform == 'saw': + for y in range(h): + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0.0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 4.0/period*step_x + if phase > 4.0: + coord_x = (x - (phase - 4.0)/d_phase)*step_x + elif phase < 2.0 < (phase + d_phase): + coord_x = (x - (phase - 2.0)/d_phase)*step_x + phase = math.fmod(phase, 4.0) + if (phase < 1.0 < (phase + d_phase)) or (phase < 3.0 < (phase + d_phase)): + if n_step > 0: + if coord_x == 0.0: + points.append([' M ',[coord_x, amplitude*square(phase - 1.0)/n_step + (y+0.5)*step_y]]) + else: + points.append([' L ',[coord_x, amplitude*square(phase - 1.0)/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + phase += d_phase + n_step += 1.0 + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + if n_step > 0: + points.append([' L ',[(w-1)*step_x, amplitude*saw(phase - 1.0)/n_step + (y+0.5)*step_y]]) + + #Square wave + else: + for y in range(h): + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 4.0/period*step_x + if phase > 4.0: + coord_x = (x - (phase - 4.0)/d_phase)*step_x + elif phase < 2.0 < (phase + d_phase): + coord_x = (x - (phase - 2.0)/d_phase)*step_x + phase = math.fmod(phase, 4.0) + if phase < 1.0 < (phase + d_phase): + if n_step > 0: + if coord_x == 0.0: + points.append([' M ',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append([' L ',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + points.append([' L ',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + elif phase < 3.0 < (phase + d_phase): + if n_step > 0: + if coord_x == 0.0: + points.append([' M ',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append([' L ',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + points.append([' L ',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + phase += d_phase + n_step += 1 + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + if n_step > 0: + if 3.0 > phase > 1.0: + points.append([' L ',[(w-1)*step_x, amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append([' L ',[(w-1)*step_x, -amplitude/n_step + (y+0.5)*step_y]]) + return points + + def draw_path(self, node, file): + newpath = inkex.etree.Element(inkex.addNS('path','svg')) + line_width = self.options.line_width + units = self.options.units + s = {'stroke': '#000000', 'fill': 'none', 'stroke-linejoin': 'round', 'stroke-linecap': 'round', 'stroke-width': str(self.unittouu(str(line_width) + units))} + newpath.set('style', simplestyle.formatStyle(s)) + x = node.get('x') + y = node.get('y') + t = 'translate('+ x +','+ y +')' + newpath.set('transform', t) + image_w = float(node.get('width')) + image_h = float(node.get('height')) + newpath.set('d', simplepath.formatPath(self.drawfunction(image_w, image_h, file))) + newpath.set('title', 'Line_Shading') + node.getparent().append(newpath) + newpath.set('x', x) + + def export_png(self, node, file): + image_w = float(node.get('width')) + image_h = float(node.get('height')) + min_period = self.options.min_period + max_period = self.options.min_period + poinnt_per_min_period = 8.0 + current_file = self.args[-1] + h_png = str(self.options.num_lines) + if min_period < max_period: + w_png = str(round(poinnt_per_min_period*image_w*float(h_png)/min_period/image_h)) + else: + w_png = str(round(poinnt_per_min_period*image_w*float(h_png)/max_period/image_h)) + id = node.get('id') + cmd = ["inkscape", current_file, "--export-png", file, "-w", w_png, "-h", h_png, "--export-background", "rgb(255, 255, 255)", "--export-background-opacity", "255", "--export-id", id] + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = proc.wait() + #f = proc.stdout + #err = proc.stderr + + def effect(self): + image_selected_flag = False + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('image','svg'): + image_selected_flag = True + tmp_dir = tempfile.mkdtemp() + png_temp_file = os.path.join(tmp_dir, "LineShading.png") + self.export_png(node, png_temp_file) + self.draw_path(node, png_temp_file) + shutil.rmtree(tmp_dir) + if self.options.remove: + node.getparent().remove(node) + return + if not image_selected_flag: + inkex.errormsg(_("Please select an image")) + +# Create effect instance and apply it. +effect = LineShading() +effect.affect() \ No newline at end of file diff --git a/fablabchemnitz_eraser_layer.inx b/fablabchemnitz_eraser_layer.inx new file mode 100644 index 0000000..009c19e --- /dev/null +++ b/fablabchemnitz_eraser_layer.inx @@ -0,0 +1,18 @@ + + + <_name>Erase Layer + fablabchemnitz.de.eraser_layer + fablabchemnitz_eraser_layer.py + inkex.py + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_eraser_layer.py b/fablabchemnitz_eraser_layer.py new file mode 100644 index 0000000..71bbc76 --- /dev/null +++ b/fablabchemnitz_eraser_layer.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +''' +This extension Create a eraser layer + +Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.4 - Eraser + +TODO: +Comment Better!!! + +CHANGE LOG +0.1 Start 30/07/2012 +0.3 fix bug with borders + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex, sys, simplestyle +from lxml import etree + +class EraserLayer(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + + #inserta el flltro que pasa a negro la mascara + def insertFilter(self, svg): + xpathStr = '//filter[@id="Decolorize_0001"]' + filterElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if filterElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + flt = inkex.etree.SubElement(defs[0],inkex.addNS('filter','svg')) + for k, v in [('id', 'Decolorize_0001'), ('color-interpolation-filters', 'sRGB'), + ('height', '100'), ('width', '100'), + ('x', '-50'), ('y', '-50')]: + flt.set(k, v) + fltColorMatrix = inkex.etree.SubElement(flt,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrix_0001'),('values','1'), ('in', 'SourceGraphic'), + ('type', 'saturate'), ('result', 'result2')]: + fltColorMatrix.set(k, v) + fltFlood = inkex.etree.SubElement(flt,inkex.addNS('feFlood','svg')) + for k, v in [('id', 'feFlood_0001'),('flood-color','rgb(255,255,255)'), ('flood-opacity', '1'), + ('result', 'result1')]: + fltFlood.set(k, v) + fltComposite = inkex.etree.SubElement(flt,inkex.addNS('feComposite','svg')) + for k, v in [('id', 'feComposite_0001'),('operator', 'atop'),('in2', 'SourceGraphic') + ,('k2', '1'),('result', 'result4')]: + fltComposite.set(k, v) + + fltInverse = inkex.etree.SubElement(defs[0],inkex.addNS('filter','svg')) + for k, v in [('id', 'Inverse_0001'), ('color-interpolation-filters', 'sRGB'), + ('height', '100'), ('width', '100'), + ('x', '-50'), ('y', '-50')]: + fltInverse.set(k, v) + fltColorMatrixInverse = inkex.etree.SubElement(fltInverse,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrixInverse_0001'),('values','1'), + ('type', 'saturate'), ('result', 'fbSourceGraphic')]: + fltColorMatrixInverse.set(k, v) + fltColorMatrixInverse = inkex.etree.SubElement(fltInverse,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrixInverse_0002'),('in','fbSourceGraphic'), + ('values', '-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 ')]: + fltColorMatrixInverse.set(k, v) + + #Inserta la mascara desde el grupo eraser + def insertMask(self, idLayer, svg): + xpathStr = '//mask[@id="MaskEraser_' + idLayer + '"]' + maskElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if maskElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + msk = inkex.etree.SubElement(defs[0],inkex.addNS('mask','svg')) + for k, v in [('id', 'Eraser_' + idLayer), ('maskUnits', 'userSpaceOnUse')]: + msk.set(k, v) + use = inkex.etree.SubElement(msk,inkex.addNS('use','svg')) + for k, v in [('id', 'Use_Eraser_' + idLayer), ('{http://www.w3.org/1999/xlink}href', + "#EraserLayer_" + idLayer),('style',"filter:url(#Inverse_0001)")]: + use.set(k, v) + rct = inkex.etree.SubElement(msk,inkex.addNS('rect','svg')) + for k, v in [('id', 'Background_' + idLayer), ('x', '-25000000'), + ('y', '-25000000'), ('width', '50000000'), ('height', '50000000'), + ('style', 'fill:#FFFFFF;fill-opacity:1')]: + rct.set(k, v) + + + ##crea el grupo contenedor que hara de borrador + def createEraserLayer(self, layer,idLayer): + container = etree.Element("g") + container.set("id","ContainerEraserLayer_" + idLayer) + container.set('style',"opacity:0.000000000000000000000000000000000000000000000001") + container.set("{http://www.inkscape.org/namespaces/inkscape}groupmode","layer") + container.set("{http://www.inkscape.org/namespaces/inkscape}label", "[container eraser] " + layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label")) + for position, item in enumerate(layer[0].getparent().getchildren()): + if item == layer[0]: + break; + layer[0].getparent().insert(position+1,container) + eraser = etree.Element("g") + eraser.set("id","EraserLayer_" + idLayer) + eraser.set('style',"filter:url(#Decolorize_0001)") + eraser.set('transform',"rotate(360)") + eraser.set("{http://www.inkscape.org/namespaces/inkscape}groupmode","layer") + eraser.set("{http://www.inkscape.org/namespaces/inkscape}label", "[eraser] " + layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label")) + layer[0].set('mask',"url(#Eraser_" + idLayer + ")") + selected = [] + for id, node in self.selected.iteritems(): + eraser.insert(1,node) + container.insert(1,eraser) + + def effect(self): + saveout = sys.stdout + sys.stdout = sys.stderr + svg = self.document.getroot() + xpathStr = '//sodipodi:namedview' + namedview = svg.xpath(xpathStr, namespaces=inkex.NSS) + idLayer = namedview[0].get('{http://www.inkscape.org/namespaces/inkscape}current-layer'); + if idLayer.startswith("[mask] ") == False and idLayer.startswith("[eraser] ") == False: + xpathStr = '//svg:g[@id="EraserLayer_'+idLayer+'"]' + filterElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if filterElement == []: + xpathStr = '//svg:g[@id="'+idLayer+'"]' + layer = svg.xpath(xpathStr, namespaces=inkex.NSS) + if layer[0] is not None and layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label") is not None: + self.insertFilter(svg) + self.insertMask(idLayer, svg) + self.createEraserLayer(layer,idLayer) + else: + print "Layer not found, Maybe insisde a group?" + else: + for id, node in self.selected.iteritems(): + filterElement[0].insert(1,node) + sys.stdout = saveout + +effect = EraserLayer() +effect.affect() diff --git a/fablabchemnitz_exponential_x.inx b/fablabchemnitz_exponential_x.inx new file mode 100644 index 0000000..a69cc59 --- /dev/null +++ b/fablabchemnitz_exponential_x.inx @@ -0,0 +1,23 @@ + + + <_name>Exponential X-Axis + fablabchemnitz.de.exponential_x + fablabchemnitz_exponential_x.py + inkex.py + This exponential-x-axis extension distorts objects along the x-axis. The bounding box remains unchanged. Inner points move leftwards when the exponent is > 1 and rightwards when it is < 1. This can be used to create a logarithmic scale. + 1.33 + 0 + Apply padding to soften the effect. Without padding the exponential curve runs from 0 to 1. With e.g. 100% padding it runs from 0.5 to 1. + + all + + + + + + + + + diff --git a/fablabchemnitz_exponential_x.py b/fablabchemnitz_exponential_x.py new file mode 100644 index 0000000..9586399 --- /dev/null +++ b/fablabchemnitz_exponential_x.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function +import sys, math +import inkex +import cubicsuperpath +from simpletransform import computeBBox + +sys.path.append('/usr/share/inkscape/extensions') +inkex.localize() + + +class TransformExponentialX(inkex.Effect): + """ + Apply logarithmic or exponential scale on all x-coordinates. + """ + + def __init__(self): + """ + Constructor. + """ + + inkex.Effect.__init__(self) + + self.OptionParser.add_option( + '-x', '--exponent', action='store', type='float', dest='exponent', default=float(1.3), + help='distortion factor. 1=no distortion, default 1.3') + self.OptionParser.add_option( + '-p', '--padding', action='store', type='float', dest='padding_perc', default=float(0), + help='pad at origin. Padding 100% runs the exponential curve through [0.5 .. 1.0] -- default 0% runs through [0.0 .. 1.0]') + + def x_exp(self, bbox, x): + """ reference implementation ignoring padding. unused. """ + xmin = bbox[0] # maps to 0, + xmax = bbox[1] # maps to 0, + w = xmax-xmin # maps to 1 + # convert world to math coordinates + xm = (x-xmin)/w + # apply function with properties f(1.0) == 1.0 and f(0.0) == 0.0 + xm = xm**self.options.exponent # oh, parabola or logarithm? + # convert back from math to world coordinates. + return x*w + xmin + + + def x_exp_p(self, bbox, x): + """ parabola mapping with padding + CAUTION: the properties f(1.0) == 1.0 and f(0.0) == 0.0 + do not really hold, as our x does not run the full range [0.0 .. 1.0] + FIXME: if you expect some c**xm here, instead of xm**c, think about c==1 ... + """ + xmin = bbox[0] # maps to 0 when padding=0, + xmax = bbox[1] # maps to 1 + xzero = xmin - (xmax-xmin)*self.options.padding_perc*0.01 # maps to 0, after applying padding + w = xmax - xzero + w = w * (1+self.options.padding_perc*0.01) + # convert world to math coordinates + xm = (x-xzero)/w + # apply function with properties f(1.0) == 1.0 and f(0.0) == 0.0 + xm = xm**self.options.exponent # oh, parabola or logarithm? + return xm + + + def x_exp_p_inplace(self, bbox, xm): + """ back from mat to world coordinates, retaining xmin and xmax + + Algorithm: (pre)compute a linear mapping function by explicitly + running x_exp_p for the two points xmin and xmax. + Then use the resulting linear function to map back any xm into world coordinates x. + + An obvious speedup by factor 3 is waiting for you here. + """ + + xmin = bbox[0] + xmax = bbox[1] + ## assert that xmin maps to xmin and xmax maps to xmax, whatever x_exp_p() does to us. + f_xmin = self.x_exp_p(bbox, xmin) + f_xmax = self.x_exp_p(bbox, xmax) + f_x = self.x_exp_p(bbox, xm) + x = (f_x - f_xmin) * (xmax-xmin) / (f_xmax-f_xmin) + xmin + return x + + + def computeBBox(self, pts): + """ 'improved' version of simplepath.computeBBox, this one includes b-spline handles.""" + xmin = None + xmax = None + ymin = None + ymax = None + for p in pts: + for pp in p: + for ppp in pp: + if xmin is None: xmin = ppp[0] + if xmax is None: xmax = ppp[0] + if ymin is None: xyin = ppp[1] + if ymax is None: ymax = ppp[1] + + if xmin > ppp[0]: xmin = ppp[0] + if xmax < ppp[0]: xmax = ppp[0] + if ymin > ppp[1]: xyin = ppp[1] + if ymax < ppp[1]: ymax = ppp[1] + return (xmin, xmax, ymin, ymax) + + + def effect(self): + + if len(self.selected) == 0: + inkex.errormsg(_("Please select an object to perform the " + + "exponential-x transformation on.")) + return + + for id, node in self.selected.items(): + type = node.get("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}type", "path") + if node.tag != '{http://www.w3.org/2000/svg}path' or type != 'path': + inkex.errormsg(node.tag + " is not a path. Type="+type+". Please use 'Path->Object to Path' first.") + else: + pts = cubicsuperpath.parsePath(node.get('d')) + bbox = self.computeBBox(pts) + ## bbox (60.0, 160.0, 77.0, 197.0) + ## pts [[[[60.0, 77.0], [60.0, 77.0], [60.0, 77.0]], [[60.0, 197.0], [60.0, 197.0], [60.0, 197.0]], [[70.0, 197.0], ... + for p in pts: + for pp in p: + for ppp in pp: + ppp[0] = self.x_exp_p_inplace(bbox, ppp[0]) + + node.set('d', cubicsuperpath.formatPath(pts)) + + +if __name__ == '__main__': #pragma: no cover + e = TransformExponentialX() + e.affect() + diff --git a/fablabchemnitz_exportxy.inx b/fablabchemnitz_exportxy.inx new file mode 100644 index 0000000..62e1cbf --- /dev/null +++ b/fablabchemnitz_exportxy.inx @@ -0,0 +1,18 @@ + + + <_name>Show Path Coordinates + fablabchemnitz.de.exportxy + fablabchemnitz_exportxy.py + inkex.py + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_exportxy.py b/fablabchemnitz_exportxy.py new file mode 100644 index 0000000..eee3208 --- /dev/null +++ b/fablabchemnitz_exportxy.py @@ -0,0 +1,46 @@ + +#!/usr/bin/env python +# +# curve xy co-ordinate export +# Authors: +# Jean Moreno +# John Cliff +# Neon22 +# Jens N. Lallensack +# +# Copyright (C) 2011 Jean Moreno +# Copyright (C) 2011 John Cliff +# Copyright (C) 2011 Neon22 +# Copyright (C) 2019 Jens N. Lallensack +# +# Released under GNU GPL v3, see https://www.gnu.org/licenses/gpl-3.0.en.html for details. +# +import inkex +import sys +import simpletransform +import cubicsuperpath + +def warn(*args, **kwargs): + pass +import warnings +warnings.warn = warn + +class TemplateEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + def effect(self): + for node in self.selected.items(): + output_all = output_nodes = "" + for id, node in self.selected.items(): + if node.tag == inkex.addNS('path','svg'): + output_all += "" + output_nodes += "" + simpletransform.fuseTransform(node) + d = node.get('d') + p = cubicsuperpath.parsePath(d) + for subpath in p: + for csp in subpath: + output_nodes += str(csp[1][0]) + "\t" + str(csp[1][1]) + "\n" + sys.stderr.write(output_nodes) +effect = TemplateEffect() +effect.affect() diff --git a/fablabchemnitz_fibonaccipattern.inx b/fablabchemnitz_fibonaccipattern.inx new file mode 100644 index 0000000..0b96257 --- /dev/null +++ b/fablabchemnitz_fibonaccipattern.inx @@ -0,0 +1,22 @@ + + + <_name>Fibonacci Pattern + fablabchemnitz.de.fibonaccipattern + fablabchemnitz_fibonaccipattern.py + inkex.py + 2 + 5 + 400 + 20 + + all + + + + + + + + diff --git a/fablabchemnitz_fibonaccipattern.py b/fablabchemnitz_fibonaccipattern.py new file mode 100644 index 0000000..1769be9 --- /dev/null +++ b/fablabchemnitz_fibonaccipattern.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +''' +Copyright (C) 2015-2015 Carlos Mostek carlosmostek@gmail.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +# standard library +import math +from math import pi + +# local library +import inkex +import simplestyle + +inkex.localize() + +# This is basically the draw method from the help guides for inkscape +def draw_SVG_ellipse(rx, ry, cx, cy, parent, start_end=(0,2*pi),transform='' ): + + style = { 'stroke' : '#000000', + 'stroke-width' : '1', + 'fill' : 'none' } + ell_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('cx','sodipodi') :str(cx), + inkex.addNS('cy','sodipodi') :str(cy), + inkex.addNS('rx','sodipodi') :str(rx), + inkex.addNS('ry','sodipodi') :str(ry), + inkex.addNS('start','sodipodi') :str(start_end[0]), + inkex.addNS('end','sodipodi') :str(start_end[1]), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :transform + } + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + +# This is the workhorse, it draws the circle based on which node number +def drawKthCircle(k,firstRadius,lastRadius,numNodes,spreadFactor,parent): + # Use golden circle phi + phi = (math.sqrt(5) - 1)/2 + + # Calculate the node radius + growth = lastRadius - firstRadius + nodeRadius = firstRadius + growth*float(k - 1)/float(numNodes) + + # Calculate X and Y from theta = 2 pi phi k and radius = sqrt(k) + r = spreadFactor * math.sqrt(k) + theta = 2*pi*phi*k + + # use simple trig to get cx and cy + x = r * math.cos(theta) + y = r * math.sin(theta) + + # Add the px to the size + nodeRadiusTxt = "%spx"%nodeRadius + + # Draw the node + draw_SVG_ellipse(nodeRadiusTxt,nodeRadiusTxt,x,y,parent) + + +class FibonacciSpiral(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-f", "--FirstRadius", + action="store", type="int", + dest="firstRadius", default="5", + help="The radius of the first layer of circles in pixels.") + self.OptionParser.add_option("-l", "--LastRadius", + action="store", type="int", + dest="lastRadius", default="10", + help="The radius of the last layer of circles in pixels.") + self.OptionParser.add_option("-n", "--NumberOfNodes", + action="store", type="int", + dest="numNodes", default="5", + help="The number of layers in the fibonacci spiral") + self.OptionParser.add_option("-s", "--SpreadFactor", + action="store", type="int", + dest="spreadFactor", default="10", + help="This will create a larger spread between the nodes from the center.") + + def effect(self): + # Foreach Node + for k in range(1,self.options.numNodes): + # Draw the circle + drawKthCircle(k, + self.options.firstRadius, + self.options.lastRadius, + self.options.numNodes, + self.options.spreadFactor, + self.current_layer) + +if __name__ == '__main__': + e = FibonacciSpiral() + e.affect() + diff --git a/fablabchemnitz_fill_row.inx b/fablabchemnitz_fill_row.inx new file mode 100644 index 0000000..3d8a984 --- /dev/null +++ b/fablabchemnitz_fill_row.inx @@ -0,0 +1,25 @@ + + + + <_name>Fill With Copies + fablabchemnitz.de.fill_row + + inkex.py + fablabchemnitz_fill_row.py + + Fills a row with seleted object. Author: Pawel Mosakowski + + + all + + + + + + + + + + diff --git a/fablabchemnitz_fill_row.py b/fablabchemnitz_fill_row.py new file mode 100644 index 0000000..99b48e3 --- /dev/null +++ b/fablabchemnitz_fill_row.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python2 + +import sys +sys.path.append('/usr/share/inkscape/extensions') + +from inkex import Effect as InkscapeEffect +from inkex import etree, addNS + +from copy import deepcopy + +from simpletransform import computeBBox, applyTransformToNode +from simplepath import parsePath, translatePath, formatPath + +class FillRow(InkscapeEffect): + def __init__(self): + InkscapeEffect.__init__(self) + self.filename = sys.argv[-1] + + def effect(self): + if len(self.selected) > 0: + # bboxes = self.calculate_bboxes(self.selected) + self.total_height = 0 + for id, node in self.selected.items(): + self.fill_row(node) + + def fill_row(self, node): + max_line_width = self.unittouu('450mm') + + x_gap = y_gap = self.unittouu('10mm') + x_start = self.unittouu('3mm') + y_start = self.unittouu('1600mm') - self.unittouu('3mm') + + total_width = 0 + total_height = self.total_height + + group = etree.SubElement(self.current_layer, addNS('g','svg')) + + bbox = computeBBox([node]) + x, _, y, _ = bbox + node_width = x_gap + self.width(bbox) + + while total_width + node_width < max_line_width: + node_copy = deepcopy(node) + group.append(node_copy) + + x_dest = x_start + total_width + y_dest = y_start - (total_height + self.height(bbox)) + + # translation logic + if node_copy.tag == addNS('path','svg'): + x_delta = x_dest - x + y_delta = y_dest - y + + path = parsePath(node_copy.attrib['d']) + translatePath(path, x_delta, y_delta) + node_copy.attrib['d'] = formatPath(path) + elif node_copy.tag == addNS('g','svg'): + x_delta = x_dest - x + y_delta = y_dest - y + + translation_matrix = [[1.0, 0.0, x_delta], [0.0, 1.0, y_delta]] + applyTransformToNode(translation_matrix, node_copy) + + else: + node_copy.attrib['x'] = str(x_dest) + node_copy.attrib['y'] = str(y_dest) + + total_width += node_width + + self.total_height += self.height(computeBBox(group)) + y_gap + + def width(self,bbox): + (x1, x2, y1, y2) = bbox + width = x2 - x1 + + return width + + def height(self,bbox): + (x1, x2, y1, y2) = bbox + height = y2 - y1 + + return height + + +effect = FillRow() +effect.affect() diff --git a/fablabchemnitz_flat_projection.inx b/fablabchemnitz_flat_projection.inx new file mode 100644 index 0000000..3145fc5 --- /dev/null +++ b/fablabchemnitz_flat_projection.inx @@ -0,0 +1,117 @@ + + + + Flat Projection + fablabchemnitz.de.flat_projection + org.inkscape.output.svg.inkscape + inkex.py + fablabchemnitz_flat_projection.py + + + Flat-projection rotates an object into 3D space, then projects it back on the 2D plane. + Optionally rotate before projection + + 3.2 + + + + + None (front) + X-Axis: -90° (top) + X-Axis: +90° (bottom) + Y-Axis: -90° (right) + Y-Axis: +90° (left) + Y-Axis: +180° (back) + + + + X:0; Y:0; Z:0 + + + 90 + 0 + 0 + X:0; Y:0; Z:0 + + + + Projection + + + + Dimetric left: 42°, 7° + Dimetric right: 7°, 42° + Isometric right: 30°, 30° + Isometric left: 30°, 30° + + + true + Projecting a 3D object back onto a 2D plane usually shortens apparent lengths. With dimetric and isometric projections this can be compensated to preserve scale. (The z-axis in dimetric projection has scale 0.5) + + + 22.1 + 19.4 + We first apply Y-axis, then X-axis rotation. +Examples: For Dimetric use y=22.1°; x=19.4° -- for Isometric use y=45°; x=35.26439°. + + + + + + stroke color red + stroke color red or black + stroke color green + stroke color green or blue + any stroke color except red + any stroke color except red or black + any stroke color except green + any stroke color except green or blue + any stroke color + nothing + + + 10 + Compute lightness change of surfaces. Surfaces with a normal at 90° with the ray direction are unaffected. 100% colors a face white, when its normal is the ray direction, and black when it is opposite. Use 0 to disable shading. + 1,-2,-1 + + + + 0.1 + Enforce a uniform stroke-width on generated objects. Enter '=' to use the stroke-widths as computed by inksvg.py -- (sometimes wrong!) + + 3d-proj + + 0.2 + Used when rendering curves. Smaller values are smoother. Range: 0.0001 to 5 + + true + Almost always on. Remove e.g. to show a hollow shell. + true + Render perimeter faces. May take awhile for complex shapes. + true + Disabling both side walls and back walls is the same as applying depth==0.0 + + + The flat-projection extension transforms paths to create the illusion of a 3D projection. This can be used to visualize how (e.g. lasercut) parts are assembled into three-dimensional objects. + + From https://github.com/jnweiger/inkscape-flat-projection + +(C) 2019 by Jürgen Weigert [juergen@fabmail.org] + + + + Version 0.9.5 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_flat_projection.py b/fablabchemnitz_flat_projection.py new file mode 100644 index 0000000..83b7534 --- /dev/null +++ b/fablabchemnitz_flat_projection.py @@ -0,0 +1,2200 @@ +#! /usr/bin/python3 +# +# flatproj.py -- apply a transformation matrix to an svg object +# +# (C) 2019 Juergen Weigert +# Distribute under GPLv2 or ask. +# +# recursivelyTraverseSvg() is originally from eggbot. Thank! +# inkscape-paths2openscad and inkscape-silhouette contain copies of recursivelyTraverseSvg() +# with almost identical features, but different inmplementation details. The version used here is derived from +# inkscape-paths2openscad. +# +# --------------------------------------------------------------- +# 2019-01-12, jw, v0.1 initial draught. Idea and an inx. No code, but a beer. +# 2019-01-12, jw, v0.2 option parser drafted. inx refined. +# 2019-01-14, jw, v0.3 creating dummy objects. scale and placing is correct. +# 2019-01-15, jw, v0.4 correct stacking of middle layer objects. +# 2019-01-16, jw, v0.5 standard and free projections done. enforce stroke-width option added. +# 2019-01-19, jw, v0.6 slightly improved zcmp(). Not yet robust. +# 2019-01-26, jw, v0.7 option autoscale done, proj_* attributes added to g. +# 2019-03-10, jw, v0.8 using ZSort from src/zsort42.py -- code complete, needs debugging. +# * fixed style massaging. No regexp, but disassembly into a dict +# 2019-05-12, jw, v0.9 using zsort2d, no debugging needed, but code incomplete. +# * obsoleted: fix zcmp() to implement correct depth sorting of quads +# * obsoleted: fix zcmp() to sort edges always above their adjacent faces +# 2019-06-012, jw, sorted(.... key=...) cannot do what we need. +# Compare http://code.activestate.com/recipes/578272-topological-sort/ +# https://en.wikipedia.org/wiki/Partially_ordered_set +# 2019-06-26, jw, v0.9.1 Use TSort from src/tsort.py -- much better than my ZSort or zsort2d attempts. +# Donald Knuth, taocp(2.2.3): "It is hard to imagine a faster algorithm for this problem!" +# 2019-06-27, jw, v0.9.2 import SvgColor from src/svgcolor.py -- code added, still unused +# 2019-06-28, jw, v0.9.3 added shading options. +# 2019-07-01, jw, v0.9.4 Fixed manual rotation. +# 2019-07-08, jw, v0.9.5 extra rotation added. We sometimes need out of order rotations. +# +# TODO: +# * test: adjustment of line-width according to transformation. +# * objects jump wildly when rotated. arrange them around their source. +# --------------------------------------------------------------- +# +# Dimetric 7,42: Rotate(Y, 69.7 deg), Rotate(X, 19.4 deg) +# Isometric: Rotate(Y, 45 deg), Rotate(X, degrees(atan(1/sqrt2))) # 35.26439 deg +# + +# Isometric transformation example: +# Ry = genRy(np.radians(45)) +# Rx = genRx(np.radians(35.26439)) +# np.matmul( np.matmul( [[0,0,-1], [1,0,0], [0,-1,0]], Ry ), Rx) +# array([[-0.70710678, 0.40824829, -0.57735027], +# [ 0.70710678, 0.40824829, -0.57735027], +# [ 0. , -0.81649658, -0.57735027]]) +# R = np.matmul(Ry, Rx) +# np.matmul( [[0,0,-1], [1,0,0], [0,-1,0]], R ) +# -> same as above :-) +# +# Extend an array of xy vectors array into xyz vectors +# a = np.random.rand(5,2) * 100 +# array([[ 86.85675737, 85.44421643], +# [ 31.11925583, 11.41818619], +# [ 71.83803221, 63.15662683], +# [ 45.21094383, 75.48939099], +# [ 63.8159168 , 49.47674044]]) +# +# b = np.zeros( (a.shape[0], 3) ) +# b[:,:-1] = a +# b += [0,0,33] +# array([[ 86.85675737, 85.44421643, 33. ], +# [ 31.11925583, 11.41818619, 33. ], +# [ 71.83803221, 63.15662683, 33. ], +# [ 45.21094383, 75.48939099, 33. ], +# [ 63.8159168 , 49.47674044, 33. ]]) +# np.matmul(b, R) + + +# python2 compatibility: +from __future__ import print_function + +import sys, time, functools +import numpy as np # Tav's perspective extension also uses numpy. + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): + sys.path.append('~/.config/inkscape/extensions') +else: # Linux + sys.path.append('/usr/share/inkscape/extensions/') + + +#! /usr/bin/python +# +# inksvg.py - parse an svg file into a plain list of paths. +# +# (C) 2017 juergen@fabmail.org, authors of eggbot and others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +################# +# 2017-12-04 jw, v1.0 Refactored class InkSvg from cookiecutter extension +# 2017-12-07 jw, v1.1 Added roundedRectBezier() +# 2017-12-10 jw, v1.3 Added styleDasharray() with stroke-dashoffset +# 2017-12-14 jw, v1.4 Added matchStrokeColor() +# 2017-12-21 jw, v1.5 Changed getPathVertices() to construct a to self.paths list, instead of +# a dictionary. (Preserving native ordering) +# 2017-12-22 jw, v1.6 fixed "use" to avoid errors with unknown global symbal 'composeTransform' +# 2017-12-25 jw, v1.7 Added getNodeStyle(), cssDictAdd(), expanded matchStrokeColor() to use +# inline style defs. Added a warning message for not-implemented CSS styles. +# v1.7a Added getNodeStyleOne() made getNodeStyle() recurse through parents. +# 2018-03-10 jw, v1.7b Added search paths to find inkex. +# v1.7c Refactoring for simpler interface without subclassing. +# Added load(), getElementsByIds() methods. +# 2018-03-21 jw, v1.7d Added handleViewBox() to load(). +# Added traverse(). +# 2019-01-12 jw, v1.7e debug output to self.tty +# 2019-01-15 jw, v1.7f tunnel transform as third item into paths tuple. needed for style stroke-width adjustment. + +import gettext +import re +import sys + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): + sys.path.append('~/.config/inkscape/extensions') +else: # Linux + sys.path.append('/usr/share/inkscape/extensions/') + +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc + +from lxml import etree + +class PathGenerator(): + """ + A PathGenerator has methods for different svg objects. It compiles an + internal representation of them all, handling transformations and linear + interpolation of curved path segments. + + The base class PathGenerator is dummy (abstract) class that raises an + NotImplementedError() on each method entry point. It serves as documentation for + the generator interface. + """ + def __init__(self): + self._svg = None + + def registerSvg(self, svg): + self._svg = svg + # svg.stats = self.stats + + def pathString(self, d, node, mat): + """ + d is expected formatted as an svg path string here. + """ + raise NotImplementedError("See example inksvg.LinearPathGen.pathString()") + + def pathList(self, d, node, mat): + """ + d is expected as an [[cmd, [args]], ...] arrray + """ + raise NotImplementedError("See example inksvg.LinearPathGen.pathList()") + + def objRect(x, y, w, h, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objRect()") + + def objRoundedRect(self, x, y, w, h, rx, ry, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objRoundedRect()") + + def objEllipse(self, cx, cy, rx, ry, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objEllipse()") + + def objArc(self, d, cx, cy, rx, ry, st, en, cl, node, mat): + """ + SVG does not have an arc element. Inkscape creates officially a path element, + but also (redundantly) provides the original arc values. + Implementations can choose to work with the path d and ignore the rest, + or work with the cx, cy, rx, ry, ... parameters and ignore d. + Note: the parameter closed=True/False is actually derived from looking at the last + command of path d. Hackish, but there is no 'sodipodi:closed' element, or similar. + """ + raise NotImplementedError("See example inksvg.LinearPathGen.objArc()") + + + +class LinearPathGen(PathGenerator): + + def __init__(self, smoothness=0.2): + self.smoothness = max(0.0001, smoothness) + + def pathString(self, d, node, mat): + """ + d is expected formatted as an svg path string here. + """ + print("calling getPathVertices", self.smoothness, file=self._svg.tty) + self._svg.getPathVertices(d, node, mat, self.smoothness) + + def pathList(self, d, node, mat): + """ + d is expected as an [[cmd, [args]], ...] arrray + """ + return self.pathString(simplepath.formatPath(d), node, mat) + + def objRect(self, x, y, w, h, node, mat): + """ + Manually transform + + + + into + + + + I.e., explicitly draw three sides of the rectangle and the + fourth side implicitly + """ + a = [] + a.append(['M ', [x, y]]) + a.append([' l ', [w, 0]]) + a.append([' l ', [0, h]]) + a.append([' l ', [-w, 0]]) + a.append([' Z', []]) + self.pathList(a, node, mat) + + def objRoundedRect(self, x, y, w, h, rx, ry, node, mat): + print("calling roundedRectBezier", file=self.tty) + d = self._svg.roundedRectBezier(x, y, w, h, rx, ry) + self._svg.getPathVertices(d, node, mat, self.smoothness) + + def objEllipse(self, cx, cy, rx, ry, node, mat): + """ + Convert circles and ellipses to a path with two 180 degree + arcs. In general (an ellipse), we convert + + + + to + + + + where + + X1 = CX - RX + X2 = CX + RX + + Note: ellipses or circles with a radius attribute of value 0 + are ignored + """ + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % (x1, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f ' % (x2, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f' % (x1, cy) + self.pathString(d, node, mat) + + def objArc(self, d, cx, cy, rx, ry, st, en, cl, node, mat): + """ + We ignore the cx, cy, rx, ry data, and are happy that inkscape + also provides the same information as a path. + """ + self.pathString(d, node, mat) + + + +class InkSvg(): + """ + Usage example with subclassing: + + # + # class ThunderLaser(inkex.Effect): + # def __init__(self): + # inkex.localize() + # inkex.Effect.__init__(self) + # def effect(self): + # svg = InkSvg(document=self.document, pathgen=LinearPathGen(smoothness=0.2)) + # svg.handleViewBox() + # svg.recursivelyTraverseSvg(self.document.getroot(), svg.docTransform) + # for tup in svg.paths: + # node = tup[0] + # ... + # e = ThunderLaser() + # e.affect() + # + + Simple usage example with method invocation: + + # svg = InkSvg(pathgen=LinearPathGen(smoothness=0.01)) + # svg.load(svgfile) + # svg.traverse([ids...]) + # print(svg.paths) # all coordinates in mm + + """ + __version__ = "1.7f" + DEFAULT_WIDTH = 100 + DEFAULT_HEIGHT = 100 + + # imports from inkex + NSS = inkex.NSS + + def getElementsByIds(self, ids): + """ + ids be a string of a comma seperated values, or a list of strings. + Returns a list of xml nodes. + """ + if not self.document: + raise ValueError("no document loaded.") + if isinstance(ids, (bytes, str)): ids = [ ids ] # handle some scalars + ids = ','.join(ids).split(',') # merge into a string and re-split + + ## OO-Fail: + # cannot use inkex.getElementById() -- it returns only the first element of each hit. + # cannot use inkex.getselected() -- it returns the last element of each hit only. + """Collect selected nodes""" + nodes = [] + for id in ids: + if id != '': # empty strings happen after splitting... + path = '//*[@id="%s"]' % id + el_list = self.document.xpath(path, namespaces=InkSvg.NSS) + if el_list: + for node in el_list: + nodes.append(node) + else: + raise ValueError("id "+id+" not found in the svg document.") + return nodes + + + def load(self, filename): + inkex.localize() + # OO-Fail: cannot call inkex.Effect.parse(), Effect constructor has so many side-effects. + stream = open(filename, 'r') + p = etree.XMLParser(huge_tree=True) + self.document = etree.parse(stream, parser=p) + stream.close() + # initialize a coordinate system that can be picked up by pathgen. + self.handleViewBox() + + def traverse(self, ids=None): + """ + Recursively traverse the SVG document. If ids are given, all matching nodes + are taken as start positions for traversal. Otherwise traveral starts at + the root node of the document. + """ + selected = [] + if ids is not None: + selected = self.getElementsByIds(ids) + if len(selected): + # Traverse the selected objects + for node in selected: + transform = self.recursivelyGetEnclosingTransform(node) + self.recursivelyTraverseSvg([node], transform) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + + def getNodeStyleOne(self, node): + """ + Finds style declarations by .class, #id or by tag.class syntax, + and of course by a direct style='...' attribute. + # FIXME: stroke-width depends on the current transformation matrix scale. + """ + sheet = '' + selectors = [] + classes = node.get('class', '') # classes == None can happen here. + if classes is not None and classes != '': + selectors = ["."+cls for cls in re.split('[\s,]+', classes)] + selectors += [node.tag+sel for sel in selectors] + node_id = node.get('id', '') + if node_id is not None and node_id != '': + selectors += [ "#"+node_id ] + for sel in selectors: + if sel in self.css_dict: + sheet += '; '+self.css_dict[sel] + style = node.get('style', '') + if style is not None and style != '': + sheet += '; '+style + return simplestyle.parseStyle(sheet) + + def getNodeStyle(self, node): + """ + Recurse into parent group nodes, like simpletransform.ComposeParents + Calling getNodeStyleOne() for each. + """ + combined_style = {} + parent = node.getparent() + if parent.tag == inkex.addNS('g','svg') or parent.tag == 'g': + combined_style = self.getNodeStyle(parent) + style = self.getNodeStyleOne(node) + for s in style: + # FIXME: stroke-width depends on the current transformation matrix scale. + combined_style[s] = style[s] # overwrite or add + return combined_style + + + def styleDasharray(self, path_d, node): + """ + Check the style of node for a stroke-dasharray, and apply it to the + path d returning the result. d is returned unchanged, if no + stroke-dasharray was found. + + ## Extracted from inkscape extension convert2dashes; original + ## comments below. + ## Added stroke-dashoffset handling, made it a universal operator + ## on nodes and 'd' paths. + + This extension converts a path into a dashed line using 'stroke-dasharray' + It is a modification of the file addnodes.py + + Copyright (C) 2005,2007 Aaron Spike, aaron@ekips.org + Copyright (C) 2009 Alvin Penner, penner@vaxxine.com + """ + + def tpoint((x1,y1), (x2,y2), t = 0.5): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + def cspbezsplit(sp1, sp2, t = 0.5): + m1=tpoint(sp1[1],sp1[2],t) + m2=tpoint(sp1[2],sp2[0],t) + m3=tpoint(sp2[0],sp2[1],t) + m4=tpoint(m1,m2,t) + m5=tpoint(m2,m3,t) + m=tpoint(m4,m5,t) + return [[sp1[0][:],sp1[1][:],m1], [m4,m,m5], [m3,sp2[1][:],sp2[2][:]]] + def cspbezsplitatlength(sp1, sp2, l = 0.5, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return cspbezsplit(sp1, sp2, t) + def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + style = self.getNodeStyle(node) + if not style.has_key('stroke-dasharray'): + return path_d + dashes = [] + if style['stroke-dasharray'].find(',') > 0: + dashes = [float (dash) for dash in style['stroke-dasharray'].split(',') if dash] + if not dashes: + return path_d + + dashoffset = 0.0 + if style.has_key('stroke-dashoffset'): + dashoffset = float(style['stroke-dashoffset']) + if dashoffset < 0.0: dashoffset = 0.0 + if dashoffset > dashes[0]: dashoffset = dashes[0] # avoids a busy-loop below! + + p = cubicsuperpath.parsePath(path_d) + new = [] + for sub in p: + idash = 0 + dash = dashes[0] + # print("initial dash length: ", dash, dashoffset, file=self.tty) + dash = dash - dashoffset + length = 0 + new.append([sub[0][:]]) + i = 1 + while i < len(sub): + dash = dash - length + length = cspseglength(new[-1][-1], sub[i]) + while dash < length: + new[-1][-1], next, sub[i] = cspbezsplitatlength(new[-1][-1], sub[i], dash/length) + if idash % 2: # create a gap + new.append([next[:]]) + else: # splice the curve + new[-1].append(next[:]) + length = length - dash + idash = (idash + 1) % len(dashes) + dash = dashes[idash] + if idash % 2: + new.append([sub[i]]) + else: + new[-1].append(sub[i]) + i+=1 + return cubicsuperpath.formatPath(new) + + def matchStrokeColor(self, node, rgb, eps=None, avg=True): + """ + Return True if the line color found in the style attribute of elem + does not differ from rgb in any of the components more than eps. + The default eps with avg=True is 64. + With avg=False the default is eps=85 (33% on a 0..255 scale). + + In avg mode, the average of all three color channel differences is + compared against eps. Otherwise each color channel difference is + compared individually. + + The special cases None, False, True for rgb are interpreted logically. + Otherwise rgb is expected as a list of three integers in 0..255 range. + Missing style attribute or no stroke element is interpreted as False. + Unparseable stroke elements are interpreted as 'black' (0,0,0). + Hexadecimal stroke formats of '#RRGGBB' or '#RGB' are understood + as well as 'rgb(100%, 0%, 0%) or 'red' relying on simplestyle. + """ + if eps is None: + eps = 64 if avg == True else 85 + if rgb is None or rgb is False: return False + if rgb is True: return True + style = self.getNodeStyle(node) + s = style.get('stroke', '') + if s == '': return False + c = simplestyle.parseColor(s) + if sum: + s = abs(rgb[0]-c[0]) + abs(rgb[1]-c[1]) + abs(rgb[2]-c[2]) + if s < 3*eps: + return True + return False + if abs(rgb[0]-c[0]) > eps: return False + if abs(rgb[1]-c[1]) > eps: return False + if abs(rgb[2]-c[2]) > eps: return False + return True + + def cssDictAdd(self, text): + """ + Represent css cdata as a hash in css_dict. + Implements what is seen on: http://www.blooberry.com/indexdot/css/examples/cssembedded.htm + """ + text=re.sub('^\s*( + fablabchemnitz_gears_dev.py + inkex.py + + + 24 + 1.0 + + + + + + + + + <_option value="MM">Module + <_option value="CP">Circular Pitch + <_option value="DP">Diametral Pitch + + <_param name="help" type="description" xml:space="preserve">------------------------------ + 20.0 + false + false + false + + + 0 + 0 + false + 4.0 + 3 + 3.0 + 10.0 + + + automatic + 20 points: best + 12 points: medium + 6 points: low + + <_param name="help" type="description">Use higher accuracy with lower tooth count. Set Number of spokes to 0 to disable. Set Mount hole diameter to 0 to disable. + + + false + 10 + 5 + 5 + <_param name="packing" type="description" xml:space="preserve">The matching rack gear is drawn additionally and below the spur gear. + + + + + + + + + + + + + + <_param name="gearuse" type="description" xml:space="preserve">Gears: + +Be sure to set the document properties to inches or mm if you want real-world dimensions. + +For gears to mesh - the size of the teeth on each gear must be the same. +This is why tooth count and Circular Pitch or Metric Module is used to define gears and not radius. + +The Circular Pitch, p, is the distance between adjacent teeth around the Pitch Circle. + p = pi * D / z +- where z is the number of teeth on a gear of pitch diameter D. +The SI measure is the Module - which expresses the core ratio of Pitch Diameter to number of Teeth: + m = p / pi = D / z + +where: +- Pitch Circle: Radius is equal to the distance from the center of the gear to the pitch point. +- Pitch Point: The point of tangency of the pitch circles of two meshing gears. + + + + <_param name="gearuse2" type="description" xml:space="preserve">Gears: +Pressure angle [in degrees]. Usually 20. Historical: 14.5; High torque gears: 25. +The higher the pressure angle, the stronger the teeth. With higher pressure angles, more effort is needed to turn the gears (due to friction). + + +Caution: Undercut is currently not generated. E.g. a gear at pressure angle 20 deg and less than 17 teeth would either need a (negative!) profile shifting or will cause undercut. We only produce a warning. + + + + + + + + + true + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_gears_dev.py b/fablabchemnitz_gears_dev.py new file mode 100644 index 0000000..0797f74 --- /dev/null +++ b/fablabchemnitz_gears_dev.py @@ -0,0 +1,760 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +''' +Copyright (C) 2007 Aaron Spike (aaron @ ekips.org) +Copyright (C) 2007 Tavmjong Bah (tavmjong @ free.fr) +Copyright (C) http://cnc-club.ru/forum/viewtopic.php?f=33&t=434&p=2594#p2500 +Copyright (C) 2014 Jürgen Weigert (juewei@fabmail.org) +Copyright (C) 2017 David Grimberg (sentinel @ bardicgrove.org) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +2014-03-20 jw@suse.de 0.2 Option --accuracy=0 for automatic added. +2014-03-21 sent upstream: https://bugs.launchpad.net/inkscape/+bug/1295641 +2014-03-21 jw@suse.de 0.3 Fixed center of rotation for gears with odd number of teeth. +2014-04-04 juewei 0.7 Revamped calc_unit_factor(). +2014-04-05 juewei 0.7a Correctly positioned rack gear. + The geometry above the meshing line is wrong. +2014-04-06 juewei 0.7b Undercut detection added. Reference: + http://nptel.ac.in/courses/IIT-MADRAS/Machine_Design_II/pdf/2_2.pdf + Manually merged https://github.com/jnweiger/inkscape-gears-dev/pull/15 +2014-04-07 juewei 0.7c Manually merged https://github.com/jnweiger/inkscape-gears-dev/pull/17 +2014-04-09 juewei 0.8 Fixed https://github.com/jnweiger/inkscape-gears-dev/issues/19 + Ring gears are ready for production now. Thanks neon22 for driving this. + Profile shift implemented (Advanced Tab), fixing + https://github.com/jnweiger/inkscape-gears-dev/issues/9 +2015-05-29 juewei 0.9 ported to inkscape 0.91 + AttributeError: 'module' object inkex has no attribute 'uutounit' + Fixed https://github.com/jnweiger/inkscape-gears-dev +2017-04-27 sentinel 0.10 Fixed calc_circular_pitch to use unit_factor freeing the + Tooth system from any specific unitary system. Previously Module was tied + to millimeters while Circular and Diametral Pitch were tied to inches. Now + they take their units from the Unit input just like all the other measures. +''' + +import inkex, simplestyle +from os import devnull # for debugging +from math import pi, cos, sin, tan, radians, degrees, ceil, asin, acos, sqrt +two_pi = 2 * pi + + +__version__ = '0.9' + +def uutounit(self,nn,uu): + try: + return self.uutounit(nn,uu) # inkscape 0.91 + except: + return inkex.uutounit(nn,uu) # inkscape 0.48 + +def linspace(a,b,n): + """ return list of linear interp of a to b in n steps + - if a and b are ints - you'll get an int result. + - n must be an integer + """ + return [a+x*(b-a)/(n-1) for x in range(0,n)] + +def involute_intersect_angle(Rb, R): + " " + Rb, R = float(Rb), float(R) + return (sqrt(R**2 - Rb**2) / (Rb)) - (acos(Rb / R)) + +def point_on_circle(radius, angle): + " return xy coord of the point at distance radius from origin at angle " + x = radius * cos(angle) + y = radius * sin(angle) + return (x, y) + +def points_to_bbox(p): + """ from a list of points (x,y pairs) + - return the lower-left xy and upper-right xy + """ + llx = urx = p[0][0] + lly = ury = p[0][1] + for x in p[1:]: + if x[0] < llx: llx = x[0] + elif x[0] > urx: urx = x[0] + if x[1] < lly: lly = x[1] + elif x[1] > ury: ury = x[1] + return (llx, lly, urx, ury) + +def points_to_bbox_center(p): + """ from a list of points (x,y pairs) + - find midpoint of bounding box around all points + - return (x,y) + """ + bbox = points_to_bbox(p) + return ((bbox[0]+bbox[2])/2.0, (bbox[1]+bbox[3])/2.0) + +def points_to_svgd(p): + " convert list of points into a closed SVG path list" + f = p[0] + p = p[1:] + svgd = 'M%.4f,%.4f' % f + for x in p: + svgd += 'L%.4f,%.4f' % x + svgd += 'z' + return svgd + +def draw_SVG_circle(parent, r, cx, cy, name, style): + " add an SVG circle entity to parent " + circ_attribs = {'style': simplestyle.formatStyle(style), + 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'):name} + circle = inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + +### Undercut support functions +def undercut_min_teeth(pitch_angle, k=1.0): + """ computes the minimum tooth count for a + spur gear so that no undercut with the given pitch_angle (in deg) + and an addendum = k * metric_module, where 0 < k < 1 + Note: + The return value should be rounded upwards for perfect safety. E.g. + min_teeth = int(math.ceil(undercut_min_teeth(20.0))) # 18, not 17 + """ + x = sin(radians(pitch_angle)) + return 2*k /(x*x) + +def undercut_max_k(teeth, pitch_angle=20.0): + """ computes the maximum k value for a given teeth count and pitch_angle + so that no undercut occurs. + """ + x = sin(radians(pitch_angle)) + return 0.5 * teeth * x * x + +def undercut_min_angle(teeth, k=1.0): + """ computes the minimum pitch angle, to that the given teeth count (and + profile shift) cause no undercut. + """ + return degrees(asin(min(0.856, sqrt(2.0*k/teeth)))) # max 59.9 deg + + +def have_undercut(teeth, pitch_angle=20.0, k=1.0): + """ returns true if the specified number of teeth would + cause an undercut. + """ + return (teeth < undercut_min_teeth(pitch_angle, k)) + + +## gather all basic gear calculations in one place +def gear_calculations(num_teeth, circular_pitch, pressure_angle, clearance=0, ring_gear=False, profile_shift=0.): + """ Put base calcs for spur/ring gears in one place. + - negative profile shifting helps against undercut. + """ + diametral_pitch = pi / circular_pitch + pitch_diameter = num_teeth / diametral_pitch + pitch_radius = pitch_diameter / 2.0 + addendum = 1 / diametral_pitch + #dedendum = 1.157 / diametral_pitch # auto calc clearance + dedendum = addendum + dedendum *= 1+profile_shift + addendum *= 1-profile_shift + if ring_gear: + addendum = addendum + clearance # our method + else: + dedendum = dedendum + clearance # our method + # + # + base_radius = pitch_diameter * cos(radians(pressure_angle)) / 2.0 + outer_radius = pitch_radius + addendum + root_radius = pitch_radius - dedendum + # Tooth thickness: Tooth width along pitch circle. + tooth_thickness = ( pi * pitch_diameter ) / ( 2.0 * num_teeth ) + # we don't use these + working_depth = 2 / diametral_pitch + whole_depth = 2.157 / diametral_pitch + #outside_diameter = (num_teeth + 2) / diametral_pitch + # + return (pitch_radius, base_radius, + addendum, dedendum, outer_radius, root_radius, + tooth_thickness + ) + + +def generate_rack_points(tooth_count, pitch, addendum, pressure_angle, + base_height, tab_length, clearance=0, draw_guides=False): + """ Return path (suitable for svg) of the Rack gear. + - rack gear uses straight sides + - involute on a circle of infinite radius is a simple linear ramp + - the meshing circle touches at y = 0, + - the highest elevation of the teeth is at y = +addendum + - the lowest elevation of the teeth is at y = -addendum-clearance + - the base_height extends downwards from the lowest elevation. + - we generate this middle tooth exactly centered on the y=0 line. + (one extra tooth on the right hand side, if number of teeth is even) + """ + spacing = 0.5 * pitch # rolling one pitch distance on the spur gear pitch_diameter. + # roughly center rack in drawing, exact position is so that it meshes + # nicely with the spur gear. + # -0.5*spacing has a gap in the center. + # +0.5*spacing has a tooth in the center. + fudge = +0.5 * spacing + + tas = tan(radians(pressure_angle)) * addendum + tasc = tan(radians(pressure_angle)) * (addendum+clearance) + base_top = addendum+clearance + base_bot = addendum+clearance+base_height + + x_lhs = -pitch * int(0.5*tooth_count-.5) - spacing - tab_length - tasc + fudge + #inkex.debug("angle=%s spacing=%s"%(pressure_angle, spacing)) + # Start with base tab on LHS + points = [] # make list of points + points.append((x_lhs, base_bot)) + points.append((x_lhs, base_top)) + x = x_lhs + tab_length+tasc + + # An involute on a circle of infinite radius is a simple linear ramp. + # We need to add curve at bottom and use clearance. + for i in range(tooth_count): + # move along path, generating the next 'tooth' + # pitch line is at y=0. the left edge hits the pitch line at x + points.append((x-tasc, base_top)) + points.append((x+tas, -addendum)) + points.append((x+spacing-tas, -addendum)) + points.append((x+spacing+tasc, base_top)) + x += pitch + x -= spacing # remove last adjustment + # add base on RHS + x_rhs = x+tasc+tab_length + points.append((x_rhs, base_top)) + points.append((x_rhs, base_bot)) + # We don't close the path here. Caller does it. + # points.append((x_lhs, base_bot)) + + # Draw line representing the pitch circle of infinite diameter + guide_path = None + if draw_guides: + p = [] + p.append( (x_lhs + 0.5 * tab_length, 0) ) + p.append( (x_rhs - 0.5 * tab_length, 0) ) + guide_path = points_to_svgd(p) + # return points ready for use in an SVG 'path' + return (points, guide_path) + + +def generate_spur_points(teeth, base_radius, pitch_radius, outer_radius, root_radius, accuracy_involute, accuracy_circular): + """ given a set of core gear params + - generate the svg path for the gear + """ + half_thick_angle = two_pi / (4.0 * teeth ) #?? = pi / (2.0 * teeth) + pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius ) + pitch_to_outer_angle = involute_intersect_angle( base_radius, outer_radius ) - pitch_to_base_angle + + start_involute_radius = max(base_radius, root_radius) + radii = linspace(start_involute_radius, outer_radius, accuracy_involute) + angles = [involute_intersect_angle(base_radius, r) for r in radii] + + centers = [(x * two_pi / float( teeth) ) for x in range( teeth ) ] + points = [] + + for c in centers: + # Angles + pitch1 = c - half_thick_angle + base1 = pitch1 - pitch_to_base_angle + offsetangles1 = [ base1 + x for x in angles] + points1 = [ point_on_circle( radii[i], offsetangles1[i]) for i in range(0,len(radii)) ] + + pitch2 = c + half_thick_angle + base2 = pitch2 + pitch_to_base_angle + offsetangles2 = [ base2 - x for x in angles] + points2 = [ point_on_circle( radii[i], offsetangles2[i]) for i in range(0,len(radii)) ] + + points_on_outer_radius = [ point_on_circle(outer_radius, x) for x in linspace(offsetangles1[-1], offsetangles2[-1], accuracy_circular) ] + + if root_radius > base_radius: + pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius ) + root1 = pitch1 - pitch_to_root_angle + root2 = pitch2 + pitch_to_root_angle + points_on_root = [point_on_circle (root_radius, x) for x in linspace(root2, root1+(two_pi/float(teeth)), accuracy_circular) ] + p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root[1:-1] # [::-1] reverses list; [1:-1] removes first and last element + else: + points_on_root = [point_on_circle (root_radius, x) for x in linspace(base2, base1+(two_pi/float(teeth)), accuracy_circular) ] + p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root # [::-1] reverses list + + points.extend( p_tmp ) + return (points) + + +def generate_spokes_path(root_radius, spoke_width, spoke_count, mount_radius, mount_hole, + unit_factor, unit_label): + """ given a set of constraints + - generate the svg path for the gear spokes + - lies between mount_radius (inner hole) and root_radius (bottom of the teeth) + - spoke width also defines the spacing at the root_radius + - mount_radius is adjusted so that spokes fit if there is room + - if no room (collision) then spokes not drawn + """ + # Spokes + collision = False # assume we draw spokes + messages = [] # messages to send back about changes. + path = '' + r_outer = root_radius - spoke_width + # checks for collision with spokes + # check for mount hole collision with inner spokes + if mount_radius <= mount_hole/2: + adj_factor = (r_outer - mount_hole/2) / 5 + if adj_factor < 0.1: + # not enough reasonable room + collision = True + else: + mount_radius = mount_hole/2 + adj_factor # small fix + messages.append("Mount support too small. Auto increased to %2.2f%s." % (mount_radius/unit_factor*2, unit_label)) + + # then check to see if cross-over on spoke width + if spoke_width * spoke_count +0.5 >= two_pi * mount_radius: + adj_factor = 1.2 # wrong value. its probably one of the points distances calculated below + mount_radius += adj_factor + messages.append("Too many spokes. Increased Mount support by %2.3f%s" % (adj_factor/unit_factor, unit_label)) + + # check for collision with outer rim + if r_outer <= mount_radius: + # not enough room to draw spokes so cancel + collision = True + if collision: # don't draw spokes if no room. + messages.append("Not enough room for Spokes. Decrease Spoke width.") + else: # draw spokes + for i in range(spoke_count): + points = [] + start_a, end_a = i * two_pi / spoke_count, (i+1) * two_pi / spoke_count + # inner circle around mount + asin_factor = spoke_width/mount_radius/2 + # check if need to clamp radius + asin_factor = max(-1.0, min(1.0, asin_factor)) # no longer needed - resized above + a = asin(asin_factor) + points += [ point_on_circle(mount_radius, start_a + a), point_on_circle(mount_radius, end_a - a)] + # is inner circle too small + asin_factor = spoke_width/r_outer/2 + # check if need to clamp radius + asin_factor = max(-1.0, min(1.0, asin_factor)) # no longer needed - resized above + a = asin(asin_factor) + points += [point_on_circle(r_outer, end_a - a), point_on_circle(r_outer, start_a + a) ] + + path += ( + "M %f,%f" % points[0] + + "A %f,%f %s %s %s %f,%f" % tuple((mount_radius, mount_radius, 0, 0 if spoke_count!=1 else 1, 1 ) + points[1]) + + "L %f,%f" % points[2] + + "A %f,%f %s %s %s %f,%f" % tuple((r_outer, r_outer, 0, 0 if spoke_count!=1 else 1, 0 ) + points[3]) + + "Z" + ) + return (path, messages) + + +class Gears(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + # an alternate way to get debug info: + # could use inkex.debug(string) instead... + try: + self.tty = open("/dev/tty", 'w') + except: + self.tty = open(devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + # print >>self.tty, "gears-dev " + __version__ + self.OptionParser.add_option("-t", "--teeth", + action="store", type="int", + dest="teeth", default=24, + help="Number of teeth") + + self.OptionParser.add_option("-s", "--system", + action="store", type="string", + dest="system", default='CP', + help="Select system: 'CP' (Cyclic Pitch (default)), 'DP' (Diametral Pitch), 'MM' (Metric Module)") + + self.OptionParser.add_option("-d", "--dimension", + action="store", type="float", + dest="dimension", default=1.0, + help="Tooth size, depending on system (which defaults to CP)") + + + self.OptionParser.add_option("-a", "--angle", + action="store", type="float", + dest="angle", default=20.0, + help="Pressure Angle (common values: 14.5, 20, 25 degrees)") + + self.OptionParser.add_option("-p", "--profile-shift", + action="store", type="float", + dest="profile_shift", default=20.0, + help="Profile shift [in percent of the module]. Negative values help against undercut") + + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default='mm', + help="Units this dialog is using") + + self.OptionParser.add_option("-A", "--accuracy", + action="store", type="int", + dest="accuracy", default=0, + help="Accuracy of involute: automatic: 5..20 (default), best: 20(default), medium 10, low: 5; good acuracy is important with a low tooth count") + # Clearance: Radial distance between top of tooth on one gear to bottom of gap on another. + self.OptionParser.add_option("", "--clearance", + action="store", type="float", + dest="clearance", default=0.0, + help="Clearance between bottom of gap of this gear and top of tooth of another") + + self.OptionParser.add_option("", "--annotation", + action="store", type="inkbool", + dest="annotation", default=False, + help="Draw annotation text") + + self.OptionParser.add_option("-i", "--internal-ring", + action="store", type="inkbool", + dest="internal_ring", default=False, + help="Ring (or Internal) gear style (default: normal spur gear)") + + self.OptionParser.add_option("", "--mount-hole", + action="store", type="float", + dest="mount_hole", default=5, + help="Mount hole diameter") + + self.OptionParser.add_option("", "--mount-diameter", + action="store", type="float", + dest="mount_diameter", default=15, + help="Mount support diameter") + + self.OptionParser.add_option("", "--spoke-count", + action="store", type="int", + dest="spoke_count", default=3, + help="Spokes count") + + self.OptionParser.add_option("", "--spoke-width", + action="store", type="float", + dest="spoke_width", default=5, + help="Spoke width") + + self.OptionParser.add_option("", "--holes-rounding", + action="store", type="float", + dest="holes_rounding", default=5, + help="Holes rounding") + + self.OptionParser.add_option("", "--active-tab", + action="store", type="string", + dest="active_tab", default='', + help="Active tab. Not used now.") + + self.OptionParser.add_option("-x", "--centercross", + action="store", type="inkbool", + dest="centercross", default=False, + help="Draw cross in center") + + self.OptionParser.add_option("-c", "--pitchcircle", + action="store", type="inkbool", + dest="pitchcircle", default=False, + help="Draw pitch circle (for mating)") + + self.OptionParser.add_option("-r", "--draw-rack", + action="store", type="inkbool", + dest="drawrack", default=False, + help="Draw rack gear instead of spur gear") + + self.OptionParser.add_option("", "--rack-teeth-length", + action="store", type="int", + dest="teeth_length", default=12, + help="Length (in teeth) of rack") + + self.OptionParser.add_option("", "--rack-base-height", + action="store", type="float", + dest="base_height", default=8, + help="Height of base of rack") + + self.OptionParser.add_option("", "--rack-base-tab", + action="store", type="float", + dest="base_tab", default=14, + help="Length of tabs on ends of rack") + + self.OptionParser.add_option("", "--undercut-alert", + action="store", type="inkbool", + dest="undercut_alert", default=False, + help="Let the user confirm a warning dialog if undercut occurs. This dialog also shows helpful hints against undercut") + + + def add_text(self, node, text, position, text_height=12): + """ Create and insert a single line of text into the svg under node. + - use 'text' type and label as anootation + - where color is Ponoko Orange - so ignored when lasercutting + """ + line_style = {'font-size': '%dpx' % text_height, 'font-style':'normal', 'font-weight': 'normal', + 'fill': '#F6921E', 'font-family': 'Bitstream Vera Sans,sans-serif', + 'text-anchor': 'middle', 'text-align': 'center'} + line_attribs = {inkex.addNS('label','inkscape'): 'Annotation', + 'style': simplestyle.formatStyle(line_style), + 'x': str(position[0]), + 'y': str((position[1] + text_height) * 1.2) + } + line = inkex.etree.SubElement(node, inkex.addNS('text','svg'), line_attribs) + line.text = text + + + def calc_unit_factor(self): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + # namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')) + # doc_units = uutounit(self, 1.0, namedView.get(inkex.addNS('document-units', 'inkscape'))) + dialog_units = uutounit(self, 1.0, self.options.units) + unit_factor = 1.0 / dialog_units + return unit_factor + + def calc_circular_pitch(self, unit_factor): + """ We use math based on circular pitch. + Expressed in inkscape units which is 90dpi 'pixel' units. + """ + dimension = self.options.dimension + # print >> self.tty, "unit_factor=%s, doc_units=%s, dialog_units=%s (%s), system=%s" % (unit_factor, doc_units, dialog_units, self.options.units, self.options.system) + if self.options.system == 'CP': # circular pitch + circular_pitch = dimension + elif self.options.system == 'DP': # diametral pitch + circular_pitch = pi / dimension + elif self.options.system == 'MM': # module (metric) + circular_pitch = dimension * pi + else: + inkex.debug("unknown system '%s', try CP, DP, MM" % self.options.system) + # circular_pitch defines the size in inches. + # We divide the internal inch factor (px = 90dpi), to remove the inch + # unit. + # The internal inkscape unit is always px, + # it is independent of the doc_units! + return circular_pitch * unit_factor + + + + def effect(self): + """ Calculate Gear factors from inputs. + - Make list of radii, angles, and centers for each tooth and + iterate through them + - Turn on other visual features e.g. cross, rack, annotations, etc + """ + path_stroke = '#000000' # might expose one day + path_fill = 'none' # no fill - just a line + path_stroke_width = 0.6 # might expose one day + path_stroke_light = path_stroke_width * 0.25 # guides are thinner + # + warnings = [] # list of extra messages to be shown in annotations + # calculate unit factor for units defined in dialog. + unit_factor = self.calc_unit_factor() + # User defined options + teeth = self.options.teeth + # Angle of tangent to tooth at circular pitch wrt radial line. + angle = self.options.angle + # Clearance: Radial distance between top of tooth on one gear to + # bottom of gap on another. + clearance = self.options.clearance * unit_factor + mount_hole = self.options.mount_hole * unit_factor + # for spokes + mount_radius = self.options.mount_diameter * 0.5 * unit_factor + spoke_count = self.options.spoke_count + spoke_width = self.options.spoke_width * unit_factor + holes_rounding = self.options.holes_rounding * unit_factor # unused + # visible guide lines + centercross = self.options.centercross # draw center or not (boolean) + pitchcircle = self.options.pitchcircle # draw pitch circle or not (boolean) + # Accuracy of teeth curves + accuracy_involute = 20 # Number of points of the involute curve + accuracy_circular = 9 # Number of points on circular parts + if self.options.accuracy is not None: + if self.options.accuracy == 0: + # automatic + if teeth < 10: accuracy_involute = 20 + elif teeth < 30: accuracy_involute = 12 + else: accuracy_involute = 6 + else: + accuracy_involute = self.options.accuracy + accuracy_circular = max(3, int(accuracy_involute/2) - 1) # never less than three + # print >>self.tty, "accuracy_circular=%s accuracy_involute=%s" % (accuracy_circular, accuracy_involute) + # Pitch (circular pitch): Length of the arc from one tooth to the next) + # Pitch diameter: Diameter of pitch circle. + pitch = self.calc_circular_pitch(unit_factor) + # Replace section below with this call to get the combined gear_calculations() above + (pitch_radius, base_radius, addendum, dedendum, + outer_radius, root_radius, tooth) = gear_calculations(teeth, pitch, angle, clearance, self.options.internal_ring, self.options.profile_shift*0.01) + + # Detect Undercut of teeth +## undercut = int(ceil(undercut_min_teeth( angle ))) +## needs_undercut = teeth < undercut #? no longer needed ? + if have_undercut(teeth, angle, 1.0): + min_teeth = int(ceil(undercut_min_teeth(angle, 1.0))) + min_angle = undercut_min_angle(teeth, 1.0) + .1 + max_k = undercut_max_k(teeth, angle) + msg = "Undercut Warning: This gear (%d teeth) will not work well.\nTry tooth count of %d or more,\nor a pressure angle of %.1f [deg] or more,\nor try a profile shift of %d %%.\nOr other decent combinations." % (teeth, min_teeth, min_angle, int(100.*max_k)-100.) + # alas annotation cannot handle the degree symbol. Also it ignore newlines. + # so split and make a list + warnings.extend(msg.split("\n")) + if self.options.undercut_alert: + inkex.debug(msg) + else: + print >>self.tty, msg + + # All base calcs done. Start building gear + points = generate_spur_points(teeth, base_radius, pitch_radius, outer_radius, root_radius, accuracy_involute, accuracy_circular) + +## half_thick_angle = two_pi / (4.0 * teeth ) #?? = pi / (2.0 * teeth) +## pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius ) +## pitch_to_outer_angle = involute_intersect_angle( base_radius, outer_radius ) - pitch_to_base_angle +## +## start_involute_radius = max(base_radius, root_radius) +## radii = linspace(start_involute_radius, outer_radius, accuracy_involute) +## angles = [involute_intersect_angle(base_radius, r) for r in radii] +## +## centers = [(x * two_pi / float( teeth) ) for x in range( teeth ) ] +## points = [] +## +## for c in centers: +## # Angles +## pitch1 = c - half_thick_angle +## base1 = pitch1 - pitch_to_base_angle +## offsetangles1 = [ base1 + x for x in angles] +## points1 = [ point_on_circle( radii[i], offsetangles1[i]) for i in range(0,len(radii)) ] +## +## pitch2 = c + half_thick_angle +## base2 = pitch2 + pitch_to_base_angle +## offsetangles2 = [ base2 - x for x in angles] +## points2 = [ point_on_circle( radii[i], offsetangles2[i]) for i in range(0,len(radii)) ] +## +## points_on_outer_radius = [ point_on_circle(outer_radius, x) for x in linspace(offsetangles1[-1], offsetangles2[-1], accuracy_circular) ] +## +## if root_radius > base_radius: +## pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius ) +## root1 = pitch1 - pitch_to_root_angle +## root2 = pitch2 + pitch_to_root_angle +## points_on_root = [point_on_circle (root_radius, x) for x in linspace(root2, root1+(two_pi/float(teeth)), accuracy_circular) ] +## p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root[1:-1] # [::-1] reverses list; [1:-1] removes first and last element +## else: +## points_on_root = [point_on_circle (root_radius, x) for x in linspace(base2, base1+(two_pi/float(teeth)), accuracy_circular) ] +## p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root # [::-1] reverses list +## +## points.extend( p_tmp ) + + path = points_to_svgd( points ) + bbox_center = points_to_bbox_center( points ) + + # Spokes (add to current path) + if not self.options.internal_ring: # only draw internals if spur gear + spokes_path, msg = generate_spokes_path(root_radius, spoke_width, spoke_count, mount_radius, mount_hole, + unit_factor, self.options.units) + warnings.extend(msg) + path += spokes_path + + # Draw mount hole + # A : rx,ry x-axis-rotation, large-arch-flag, sweepflag x,y + r = mount_hole / 2 + path += ( + "M %f,%f" % (0,r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,-r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,r) + ) + else: + # its a ring gear + # which only has an outer ring where width = spoke width + r = outer_radius + spoke_width + path += ( + "M %f,%f" % (0,r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,-r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,r) + ) + + # Embed gear in group to make animation easier: + # Translate group, Rotate path. + t = 'translate(' + str( self.view_center[0] ) + ',' + str( self.view_center[1] ) + ')' + g_attribs = { inkex.addNS('label','inkscape'):'Gear' + str( teeth ), + inkex.addNS('transform-center-x','inkscape'): str(-bbox_center[0]), + inkex.addNS('transform-center-y','inkscape'): str(-bbox_center[1]), + 'transform':t, + 'info':'N:'+str(teeth)+'; Pitch:'+ str(pitch) + '; Pressure Angle: '+str(angle) } + # add the group to the current layer + g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs ) + + # Create gear path under top level group + style = { 'stroke': path_stroke, 'fill': path_fill, 'stroke-width': path_stroke_width } + gear_attribs = { 'style': simplestyle.formatStyle(style), 'd': path } + gear = inkex.etree.SubElement(g, inkex.addNS('path','svg'), gear_attribs ) + + # Add center + if centercross: + style = { 'stroke': path_stroke, 'fill': path_fill, 'stroke-width': path_stroke_light } + cs = str(pitch / 3) # centercross length + d = 'M-'+cs+',0L'+cs+',0M0,-'+cs+'L0,'+cs # 'M-10,0L10,0M0,-10L0,10' + center_attribs = { inkex.addNS('label','inkscape'): 'Center cross', + 'style': simplestyle.formatStyle(style), 'd': d } + center = inkex.etree.SubElement(g, inkex.addNS('path','svg'), center_attribs ) + + # Add pitch circle (for mating) + if pitchcircle: + style = { 'stroke': path_stroke, 'fill': path_fill, 'stroke-width': path_stroke_light } + draw_SVG_circle(g, pitch_radius, 0, 0, 'Pitch circle', style) + + # Add Rack (below) + if self.options.drawrack: + base_height = self.options.base_height * unit_factor + tab_width = self.options.base_tab * unit_factor + tooth_count = self.options.teeth_length + (points, guide_path) = generate_rack_points(tooth_count, pitch, addendum, angle, + base_height, tab_width, clearance, pitchcircle) + path = points_to_svgd(points) + # position below Gear, so that it meshes nicely + # xoff = 0 ## if teeth % 4 == 2. + # xoff = -0.5*pitch ## if teeth % 4 == 0. + # xoff = -0.75*pitch ## if teeth % 4 == 3. + # xoff = -0.25*pitch ## if teeth % 4 == 1. + xoff = (-0.5, -0.25, 0, -0.75)[teeth % 4] * pitch + t = 'translate(' + str( xoff ) + ',' + str( pitch_radius ) + ')' + g_attribs = { inkex.addNS('label', 'inkscape'): 'RackGear' + str(tooth_count), + 'transform': t } + rack = inkex.etree.SubElement(g, 'g', g_attribs) + + # Create SVG Path for gear + style = {'stroke': path_stroke, 'fill': 'none', 'stroke-width': path_stroke_width } + gear_attribs = { 'style': simplestyle.formatStyle(style), 'd': path } + gear = inkex.etree.SubElement( + rack, inkex.addNS('path', 'svg'), gear_attribs) + if guide_path is not None: + style2 = { 'stroke': path_stroke, 'fill': 'none', 'stroke-width': path_stroke_light } + gear_attribs2 = { 'style': simplestyle.formatStyle(style2), 'd': guide_path } + gear = inkex.etree.SubElement( + rack, inkex.addNS('path', 'svg'), gear_attribs2) + + + # Add Annotations (above) + if self.options.annotation: + outer_dia = outer_radius * 2 + if self.options.internal_ring: + outer_dia += 2 * spoke_width + notes = [] + notes.extend(warnings) + #notes.append('Document (%s) scale conversion = %2.4f' % (self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')).get(inkex.addNS('document-units', 'inkscape')), unit_factor)) + notes.extend(['Teeth: %d CP: %2.4f(%s) ' % (teeth, pitch / unit_factor, self.options.units), + 'DP: %2.3f Module: %2.4f' % (pi / pitch * unit_factor, pitch / pi * 25.4), + 'Pressure Angle: %2.2f degrees' % (angle), + 'Pitch diameter: %2.3f %s' % (pitch_radius * 2 / unit_factor, self.options.units), + 'Outer diameter: %2.3f %s' % (outer_dia / unit_factor, self.options.units), + 'Root diameter: %2.3f %s' % (root_radius * 2 / unit_factor, self.options.units), + 'Base diameter: %2.3f %s' % (base_radius * 2 / unit_factor, self.options.units)#, + #'Addendum: %2.4f %s' % (addendum / unit_factor, self.options.units), + #'Dedendum: %2.4f %s' % (dedendum / unit_factor, self.options.units) + ]) + # text height relative to gear size. + # ranges from 10 to 22 over outer radius size 60 to 360 + text_height = max(10, min(10+(outer_dia-60)/24, 22)) + # position above + y = - outer_radius - (len(notes)+1) * text_height * 1.2 + for note in notes: + self.add_text(g, note, [0,y], text_height) + y += text_height * 1.2 + +if __name__ == '__main__': + e = Gears() + e.affect() + +# Notes + diff --git a/fablabchemnitz_generator.inx b/fablabchemnitz_generator.inx new file mode 100644 index 0000000..90fb4ef --- /dev/null +++ b/fablabchemnitz_generator.inx @@ -0,0 +1,64 @@ + + + + <_name>Generator (Variables) + fablabchemnitz.de.generator + fablabchemnitz_generator.py + + + + <_item value="column">column position + <_item value="name">column name + + ••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + <_param name="info1" type="description">Extra textual values to be replaced: + + ••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + + <_param name="extraVarInfo" type="description">The data file must be a CSV with comma separated columns + ••••••••••••••••••••••••••••••••••••••••••••••••••••••••• + true + + PDF + SVG + PS + EPS + PNG + JPG + + 90 + $HOME/generator-output/%VAR_1%.pdf + + + + <_param name="helpTxt" type="description"> + How vars are replaced? + + The replacer will walk in each data column, line-by-line, and will try to replace the %VAR_#% in the SVG by the column value. + If you select "column position", # is the column number. + If you select "column name", # is the column name, defined in the first line. + If you enable the handling of special characters, characters like & are replaced with entities like &amp; as required by the SVG standard. In most cases, you should enable this option. + + I can replace other text paterns, like element values? + + Yes. On the second field, add all extra text to be replaced in a line separated by "|", pointing to the replacer column with "=>" (name or number depending on the choice up). Do not use spaces if that is not part of the blocks! + For example, we can make the red and green colors as variables to be replaced by some other colors from the database at the columns "secure color" and "sector color": + #ff0000=>secure color|#00ff00=>sector color + All pure red and pure green elementes will have new colors for each data line. + + If you are not sure about the usable variables, run it on preview mode and the replaceable texts wil be showed to you. + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_generator.py b/fablabchemnitz_generator.py new file mode 100644 index 0000000..182b2fd --- /dev/null +++ b/fablabchemnitz_generator.py @@ -0,0 +1,365 @@ +#! /usr/bin/python +# coding=utf-8 + +# Generator-Python - a Inkscape extension to generate end-use files +# from a model +# Copyright (C) 2017 Johannes Matschke +# Based on the Generator extension by Aurélio A. Heckert +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# Version 1.0 + +import sys +import os +import subprocess +import platform +import distutils.spawn +import tempfile +import shutil +import argparse +import csv +import ctypes + + +class SimpleObject: + pass + + +class MyArgumentParser(argparse.ArgumentParser): + def error(self, message): + # use "argument" instead of "--argument" + message = message.replace(' --', ' ') + Show_error_and_exit('Argument error', message) + + +def Is_executable(filename): + return distutils.spawn.find_executable(filename) is not None + + +if platform.system() != 'Windows' and Is_executable('zenity'): + class ProgressBar(): + def __init__(self, title, text): + self.__title = title + self.__text = text + self.__active = False + + def __enter__(self): + self.__devnull = open(os.devnull, 'w') + self.__proc = subprocess.Popen( + [ + 'zenity', + '--progress', + '--title={0}'.format(self.__title), + '--text={0}'.format(self.__text), + '--auto-close', + '--width=400' + ], stdin=subprocess.PIPE, stdout=self.__devnull, + stderr=self.__devnull) + self.__active = True + return self + + def __exit__(self, *args): + if self.__active: + self.__close() + + def Set_percent(self, p): + if self.is_active: + self.__proc.stdin.write(str(p) + '\n') + + @property + def is_active(self): + if self.__active and self.__proc.poll() is not None: + self.__close() + return self.__active + + def __close(self): + if not self.__proc.stdin.closed: + self.__proc.stdin.close() + if not self.__devnull.closed: + self.__devnull.close() + self.__active = False +else: + class ProgressBar(): + def __init__(self, title, text): + pass + + def __enter__(self): + return self + + def __exit__(self, *args): + pass + + def Set_percent(self, p): + pass + + @property + def is_active(self): + return True + + +if platform.system() == 'Windows': + def Show_info(title, message): + MB_ICONINFORMATION = 0x40 + ctypes.windll.user32.MessageBoxA(0, message, title, MB_ICONINFORMATION) + + def Show_question(title, message): + MB_ICONQUESTION = 0x20 + MB_YESNO = 0x4 + IDYES = 6 + return ctypes.windll.user32.MessageBoxA( + 0, message, title, MB_ICONQUESTION | MB_YESNO) == IDYES + + def Show_error_and_exit(title, message): + MB_ICONERROR = 0x10 + ctypes.windll.user32.MessageBoxA(0, message, title, MB_ICONERROR) + sys.exit(1) + +elif Is_executable('zenity'): + def Show_info(title, message): + Zenity('info', title, message) + + def Show_question(title, message): + return Zenity('question', title, message) == 0 + + def Show_error_and_exit(title, message): + Zenity('error', title, message) + sys.exit(1) + + def Zenity(mode, title, message): + return Call_no_output( + [ + 'zenity', + '--{0}'.format(mode), + '--title={0}'.format(title), + '--text={0}'.format(message) + ]) +else: + def Show_info(title, message): + pass + + def Show_question(title, message): + return None + + def Show_error_and_exit(title, message): + sys.stderr.write(title + '\n' + message + '\n') + sys.exit(1) + + +def Get_command_line_arguments(): + parser = MyArgumentParser() + parser.add_argument( + '--vartype', choices=['COLUMN', 'NAME'], required=True, type=str.upper, + help='How to refer to columns') + parser.add_argument( + '--extravars', default='', + help='Extra textual values to be replaced') + parser.add_argument( + '--datafile', required=True, help='path of CSV data file') + parser.add_argument( + '--format', + choices=['PDF', 'SVG', 'PS', 'EPS', 'PNG', 'JPG'], + default='PDF', type=str.upper, help='Export format') + parser.add_argument( + '--dpi', default='90', help='DPI (for PNG and JPG)') + parser.add_argument( + '--output', required=True, help='Output pattern') + parser.add_argument( + '--preview', choices=['TRUE', 'FALSE'], default='FALSE', type=str.upper, + help='Preview (only first page)') + parser.add_argument( + '--specialchars', choices=['TRUE', 'FALSE'], default='TRUE', type=str.upper, + help='Handle special XML characters') + parser.add_argument('infile', help='SVG input file') + + args = parser.parse_known_args()[0] + return args + + +def Generate(replacements): + template = globaldata.template + destfile = globaldata.args.output + + for search, replace in replacements: + template = template.replace(search, replace) + destfile = destfile.replace(search, replace) + + tmp_svg = os.path.join(globaldata.tempdir, 'temp.svg') + + with open(tmp_svg, 'wb') as f: + f.write(template) + + if globaldata.args.format == 'SVG': + shutil.move(tmp_svg, destfile) + elif globaldata.args.format == 'JPG': + tmp_png = os.path.join(globaldata.tempdir, 'temp.png') + Ink_render(tmp_svg, tmp_png, 'PNG') + Png_to_jpg(tmp_png, destfile) + else: + Ink_render(tmp_svg, destfile, globaldata.args.format) + + return destfile + + +def Ink_render(infile, outfile, format): + Call_or_die( + [ + 'inkscape', + '--without-gui', + '--export-{0}={1}'.format( + format.lower(), outfile), + '--export-dpi={0}'.format(globaldata.args.dpi), + infile + ], + 'Inkscape Converting Error') + + +def Png_to_jpg(pngfile, jpgfile): + if platform.system() == 'Windows': + Show_error_and_exit( + 'JPG Export', 'JPG Export is not available on Windows.') + elif Is_executable('convert'): + Call_or_die( + [ + 'convert', + 'PNG:' + pngfile, + 'JPG:' + jpgfile + ], + 'ImageMagick Converting Error') + else: + Show_error_and_exit( + 'JPG export', 'JPG export is not available because ' + 'Image Magick is not installed.') + + +def Prepare_data(data_old): + data_new = [] + if len(globaldata.args.extravars) == 0: + extra_value_info = [] + else: + extra_value_info = \ + [x.split('=>', 2) for x in globaldata.args.extravars.split('|')] + + for row in data_old: + row_new = [] + for key, value in row: + if key == '': + continue + if globaldata.args.specialchars == 'TRUE': + value = value.replace('&', '&') + value = value.replace('<', '<') + value = value.replace('>', '>') + value = value.replace('"', '"') + value = value.replace("'", ''') + row_new.append(('%VAR_'+key+'%', value)) + for search_replace in extra_value_info: + if len(search_replace) != 2: + Show_error_and_exit( + 'Extra vars error', + 'There is something wrong with your extra vars ' + 'parameter') + if search_replace[1] == key: + row_new.append((search_replace[0], value)) + data_new.append(row_new) + + return data_new + + +def Open_file_viewer(filename): + if platform.system() == 'Windows': + os.startfile(filename) + elif Is_executable('xdg-open'): + Call_no_output(['xdg-open', filename]) + else: + Show_error_and_exit( + 'No preview', 'Preview is not available because ' + '"xdg-open" is not installed.') + + +def Call_no_output(args): + with open(os.devnull, 'w') as devnull: + return subprocess.call(args, stdout=devnull, stderr=devnull) + + +def Call_or_die(args, error_title): + try: + subprocess.check_output(args, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as error: + Show_error_and_exit(error_title, error.output) + + +def Process_csv_file(csvfile): + if globaldata.args.vartype == 'COLUMN': + csvdata = [[(str(x), y) for x, y in enumerate(row, start=1)] + for row in csv.reader(csvfile)] + else: + csvdata = [row.items() for row in csv.DictReader(csvfile)] + + csvdata = Prepare_data(csvdata) + + count = sum(1 for i in csvdata) + if count == 0: + Show_error_and_exit( + 'Empty CSV file', 'There are no data sets in your CSV file.') + + if globaldata.args.preview == 'TRUE': + for row in csvdata: + varlist = '\n'.join( + [key for key, value in row]) + Show_info( + 'Generator Variables', + 'The replaceable text, based on your configuration and on ' + 'the CSV are:\n{0}'.format(varlist)) + + new_file = Generate(row) + Open_file_viewer(new_file) + break + else: # no preview + with ProgressBar('Generator', 'Generating...') as progress: + for num, row in enumerate(csvdata, start=1): + Generate(row) + if not progress.is_active: + break + progress.Set_percent(num * 100 / count) + + +try: + globaldata = SimpleObject() + globaldata.args = Get_command_line_arguments() + globaldata.tempdir = tempfile.mkdtemp() + + if not os.path.isfile(globaldata.args.datafile): + Show_error_and_exit( + 'File not found', 'The CSV file "{0}" does not ' + 'exist.'.format(globaldata.args.datafile)) + + if (not os.path.splitext(globaldata.args.output)[1][1:].upper() == + globaldata.args.format): + if Show_question( + 'Output file extension', + 'Your output pattern has a file extension ' + 'diferent from the export format.\n\nDo you want to ' + 'add the file extension?'): + globaldata.args.output += '.' + \ + globaldata.args.format.lower() + + outdir = os.path.dirname(globaldata.args.output) + if outdir != '' and not os.path.exists(outdir): + os.makedirs(outdir) + + with open(globaldata.args.infile, 'rb') as f: + globaldata.template = f.read() + + with open(globaldata.args.datafile, 'rb') as csvfile: + Process_csv_file(csvfile) + +finally: + shutil.rmtree(globaldata.tempdir) diff --git a/fablabchemnitz_grid_perspect2.inx b/fablabchemnitz_grid_perspect2.inx new file mode 100644 index 0000000..2d1deac --- /dev/null +++ b/fablabchemnitz_grid_perspect2.inx @@ -0,0 +1,34 @@ + + + <_name>Perspective Grid + fablabchemnitz.de.grid_perspect2 + fablabchemnitz_grid_perspect2.py + inkex.py + + <_option value="px">Pixels + <_option value="pt">Points + <_option value="cm">Centimeters + <_option value="mm">Millimeters + <_option value="in">Inches + + 500 + 300 + 150 + -100.0 + 600 + 10 + 3 + 2 + black + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_grid_perspect2.py b/fablabchemnitz_grid_perspect2.py new file mode 100644 index 0000000..79c368c --- /dev/null +++ b/fablabchemnitz_grid_perspect2.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python +''' +Copyright (C) 2013 Carl Sorensen carl.d.sorensen@gmail.com +Derived from grid_cartesian.py copyright (C) 2007 John Beard john.j.beard@gmail.com + + +##This extension allows you to draw a two-point perspective grid in Inkscape. +##There is a wide range of options including subdivision, subsubdivions +##and angles of the triangular axes. +##Custom line widths are also possible. +##All elements are grouped with similar elements (eg all x-subdivs) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import simplestyle, sys +from math import * + +def draw_SVG_line(x1, y1, x2, y2, width, stroke, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill': 'none' } + line_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + +def draw_SVG_rect(x,y,w,h, width, stroke, fill, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill':fill} + rect_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):name, + 'x':str(x), 'y':str(y), 'width':str(w), 'height':str(h)} + inkex.etree.SubElement(parent, inkex.addNS('rect','svg'), rect_attribs ) + +def colorString(pickerColor): + longcolor = long(pickerColor) + if longcolor < 0: + longcolor = longcolor & 0xFFFFFFFF + return '#' + format(longcolor/256, '06X') + + +class Grid_Perspective(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--size_unit", + action="store", type="string", + dest="size_unit", default="", + help="Units for geometry") + self.OptionParser.add_option("--width", + action="store", type="int", + dest="width", default=500, + help="Width of grid window") + self.OptionParser.add_option("--height", + action="store", type="int", + dest="height", default=300, + help="Height of grid window") + self.OptionParser.add_option("--p_divs", + action="store", type="int", + dest="p_divs", default=10, + help="Number of divisions in perspective angle") + self.OptionParser.add_option("--horizon", + action="store", type="float", + dest="horizon", default=150, + help="Y coordinate of horizon") + self.OptionParser.add_option("--left_x", + action="store", type="float", + dest="left_x", default=-250, + help="X coordinate of left perspective point") + self.OptionParser.add_option("--right_x", + action="store", type="float", + dest="right_x", default=750, + help="X coordinate of right perspective point") + self.OptionParser.add_option("--div_th", + action="store", type="float", + dest="div_th", default=2, + help="Grid division line thickness") + self.OptionParser.add_option("--div_color", + action="store", type="int", + dest="div_color", + help="Grid division line color") + self.OptionParser.add_option("--border_th", + action="store", type="float", + dest="border_th", default=3, + help="Border Line thickness") + + def EdgePoints(self,x0, y0, theta): + # find the intersection points of the line with the extended + # grid bounding box. + # Note that y is positive DOWN, not up + # Grid bounding box goes from (0,0) to (self.xmax, self.ymax) + theta_r = radians(theta) + if theta_r == 0: + return [[0,y0],[self.xmax,y0], + [-100, self.ymax], [self.xmax+100,0]] + r_bot = (self.ymax-y0)/sin(theta_r) + r_top = -y0/sin(theta_r) + r_left = -x0/cos(theta_r) + r_right = (self.xmax-x0)/cos(theta_r) + return [[0,y0+r_left*sin(theta_r)], # left + [self.xmax, y0+r_right*sin(theta_r)], # right + [x0+r_bot*cos(theta_r), self.ymax], #bottom + [x0+r_top*cos(theta_r), 0]] #top + + def trimmed_coords(self, x1, y1, theta): + #find the start and end coordinates for a grid line + #starting at (x1, y1) with an angle of theta + border_points = self.EdgePoints(x1, y1, theta) + left = 0 + right = 1 + top = 3 + bottom = 2 + x=0 + y=1 + if theta > 0: + if border_points[left][y] < 0: + start_x = border_points[top][x] + start_y = border_points[top][y] + else: + start_x = border_points[left][x] + start_y = border_points[left][y] + if border_points[right][y] > self.ymax: + end_x = border_points[bottom][x] + end_y = border_points[bottom][y] + else: + end_x = border_points[right][x] + end_y = border_points[right][y] + else: + if border_points[left][y] > self.ymax: + start_x = border_points[bottom][x] + start_y = border_points[bottom][y] + else: + start_x = border_points[left][x] + start_y = border_points[left][y] + if border_points[right][y] < 0: + end_x = border_points[top][x] + end_y = border_points[top][y] + else: + end_x = border_points[right][x] + end_y = border_points[right][y] + return [[start_x,start_y],[end_x, end_y]] + + def drawAngledGridLine (self, x1, y1, theta, thickness, color, + label, groupName): + end_points = self.trimmed_coords(x1, y1, theta) + x_start = end_points[0][0] + y_start = end_points[0][1] + x_end = end_points[1][0] + y_end = end_points[1][1] + + if (x_start >= 0 and x_start <= self.xmax and + y_start >= 0 and y_start <= self.ymax and + x_end >= 0 and x_end <= self.xmax and + y_end >= 0 and y_end <= self.ymax): + draw_SVG_line(x_start, y_start, + x_end, y_end, + thickness, colorString(color), label, groupName) + + def perspective_intersection(self, left_theta, right_theta): + if right_theta == 0 or left_theta == 0 or left_theta == right_theta: + return -100 # outside of bounding box + r=(self.right_x - self.left_x)/(sin(right_theta)/tan(left_theta)-cos(right_theta)) + y_int = self.horizon + r*sin(right_theta) + if y_int < 0 or y_int > self.ymax : + return -100 #above or below bounding box + return self.right_x + r*cos(right_theta) + + def effect(self): + + #find the pixel dimensions of the overall grid + self.ymax = self.unittouu(str(self.options.height)+self.options.size_unit) + self.xmax = self.unittouu(str(self.options.width)+self.options.size_unit) + self.horizon = self.unittouu(str(self.options.horizon)+self.options.size_unit) + self.left_x = self.unittouu(str(self.options.left_x)+self.options.size_unit) + self.right_x = self.unittouu(str(self.options.right_x)+self.options.size_unit) + + + # Embed grid in group + #Put in in the centre of the current view + t = 'translate(' + str( self.view_center[0]- self.xmax/2.0) + ',' + \ + str( self.view_center[1]- self.ymax/2.0) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'Grid_Perspective:Size' + \ + str( self.xmax)+'x'+str(self.ymax) + + ':Horizon'+str(self.horizon) + + ':LeftX'+str(self.left_x) + + ':RightX'+str(self.right_x), + 'transform':t } + grid = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + + #Group for vertical gridlines + g_attribs = {inkex.addNS('label','inkscape'):'VerticalGridlines'} + gv = inkex.etree.SubElement(grid, 'g', g_attribs) + + #Group for left point gridlines + g_attribs = {inkex.addNS('label','inkscape'):'LeftPointGridlines'} + glp = inkex.etree.SubElement(grid, 'g', g_attribs) + + #Group for right point gridlines + g_attribs = {inkex.addNS('label','inkscape'):'RightPointGridlines'} + grp = inkex.etree.SubElement(grid, 'g', g_attribs) + + draw_SVG_rect(0, 0, self.xmax, self.ymax, self.options.border_th, + colorString(self.options.div_color), 'none', + 'Border', grid) #border rectangle + + + # Calculate the extreme angles for the left and right points + if self.horizon < 0 : + left_theta_min = atan((self.horizon-0)/(0-self.right_x)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.left_x)) + right_theta_min = atan((0-self.horizon)/ + (self.left_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.right_x - self.xmax )) + elif self.horizon < self.ymax : + left_theta_min = atan((self.horizon-0)/(self.left_x-0)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.left_x)) + right_theta_min = atan((self.horizon-0)/ + (self.right_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.right_x - self.xmax )) + else: + left_theta_min = atan((self.horizon-0)/(self.left_x-0)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.right_x)) + right_theta_min = atan((self.horizon-0)/ + (self.right_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.left_x - self.xmax )) + + left_dtheta = (left_theta_max - left_theta_min)/float(self.options.p_divs) + + right_dtheta = (right_theta_max - right_theta_min)/float(self.options.p_divs) + mid_index = self.options.p_divs/2 + left_mid_theta = left_theta_min + mid_index * left_dtheta + right_mid_theta = right_theta_min + mid_index * right_dtheta + + + #DO THE PERSPECTIVE DIVISONS======================================== + for i in range(0,self.options.p_divs+1): + left_theta = left_theta_min + i * left_dtheta + right_theta = right_theta_min + i * right_dtheta + self.drawAngledGridLine(self.left_x, self.horizon, + degrees(left_theta), + self.options.div_th, + self.options.div_color, + 'LeftDivPersp'+str(i), + glp) + self.drawAngledGridLine(self.right_x, self.horizon, + degrees(right_theta), + self.options.div_th, + self.options.div_color, + 'RightDivPersp'+str(i), + grp) + intersection = self.perspective_intersection(left_theta, + right_theta_max - i * right_dtheta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + comment = """ + intersection = self.perspective_intersection(left_theta, right_mid_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + intersection = self.perspective_intersection(left_theta, right_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + """ + + intersection = self.perspective_intersection(left_mid_theta, right_mid_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + + + +if __name__ == '__main__': + e = Grid_Perspective() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_gridstrip_creator.inx b/fablabchemnitz_gridstrip_creator.inx new file mode 100644 index 0000000..1782df1 --- /dev/null +++ b/fablabchemnitz_gridstrip_creator.inx @@ -0,0 +1,34 @@ + + + <_name>Grid strip creator (qlocktwo) + fablabchemnitz.de.gridstrip_creator + fablabchemnitz_gridstrip_creator.py + inkex.py + 230.0 + 20.0 + 11 + 10 + false + 12.5 + 12.5 + 1.0 + 10.0 + false + false + + 3.0 + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_gridstrip_creator.py b/fablabchemnitz_gridstrip_creator.py new file mode 100644 index 0000000..b5d69a8 --- /dev/null +++ b/fablabchemnitz_gridstrip_creator.py @@ -0,0 +1,481 @@ +#!/usr/bin/env python +''' +Grid Strip Creator v1.0 (30/11/2014) + + +Copyright (C) 2014 Thomas Gebert - tsgebert **AT** web.de + +## This basic extension allows you to automatically draw guides in inkscape for hexagons. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# Making an .INX file : http://wiki.inkscape.org/wiki/index.php/MakingAnINX +# see also http://codespeak.net/lxml/dev/tutorial.html#namespaces for XML namespaces manipulation + + +# # # extension's begining # # # + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import simplestyle,sys +sys.path.append('/usr/share/inkscape/extensions') + +# We will use the inkex module with the predefined Effect base class. +import inkex + +from xml.etree import ElementTree as ET + +# for printing debugging output +import gettext +_ = gettext.gettext + +def printDebug(string): + inkex.errormsg(_(string)) + + +class GridStrip_Creator(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + """ + Constructor. + Defines options of the script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # Define string option "--length" with default value '0.0'. + self.OptionParser.add_option('--length', + action = 'store',type = 'float', + dest = 'length',default = 230.0, + help = 'Length of strip') + + # Define string option "--width" with default value '0.0'. + self.OptionParser.add_option('--width', + action = 'store',type = 'float', + dest = 'width',default = 20.0, + help = 'Width of strip') + + # Define string option "--cellheight" with default value '0.0'. + self.OptionParser.add_option('--cellheight', + action = 'store',type = 'float', + dest = 'cellheight',default = 12.5, + help = 'height of cell') + + # Define string option "--cellwidth" with default value '0.0'. + self.OptionParser.add_option('--cellwidth', + action = 'store',type = 'float', + dest = 'cellwidth',default = 12.5, + help = 'Width of cell') + + # Define string option "--scalecells" with default value False. + self.OptionParser.add_option('--scalecells', + action = 'store',type = 'inkbool', + dest = 'scalecells',default = False, + help = 'Scale cells over length') + + # Define string option "--cellnumx" with default value '0.0'. + self.OptionParser.add_option('--cellnumx', + action = 'store',type = 'int', + dest = 'cellnumx',default = 11, + help = 'Number of cells x') + + # Define string option "--cellnumy" with default value '0.0'. + self.OptionParser.add_option('--cellnumy', + action = 'store',type = 'int', + dest = 'cellnumy',default = 10, + help = 'Number of cells y') + + # Define string option "--notchdepth" with default value '0.0'. + self.OptionParser.add_option('--notchdepth', + action = 'store',type = 'float', + dest = 'notchdepth',default = 1.0, + help = 'Depth of notch') + + # Define string option "--notchwidth" with default value '0.0'. + self.OptionParser.add_option('--notchwidth', + action = 'store',type = 'float', + dest = 'notchwidth',default = 10.0, + help = 'Width of notch') + + # Define string option "--notchhorizontal" with default value False. + self.OptionParser.add_option('--notchhorizontal', + action = 'store',type = 'inkbool', + dest = 'notchhorizontal',default = False, + help = 'Make notches on horizontal strip') + + # Define string option "--notchvertical" with default value False. + self.OptionParser.add_option('--notchvertical', + action = 'store',type = 'inkbool', + dest = 'notchvertical',default = False, + help = 'Make notches on vertical strip') + + # Define string option "--notch2depth" with default value '0.0'. + # self.OptionParser.add_option('--notch2depth', + # action = 'store',type = 'float', + # dest = 'notch2depth',default = 10.0, + # help = 'Depth of notch') + + # Define string option "--notch2width" with default value '0.0'. + self.OptionParser.add_option('--notch2width', + action = 'store',type = 'float', + dest = 'notch2width',default = 3.0, + help = 'Width of notch') + + # Define string option "--notchxcorner" with default value False. + self.OptionParser.add_option('--notchxcorner', + action = 'store',type = 'inkbool', + dest = 'notchxcorner',default = False, + help = 'Make notches on corner of horizontal strip') + + # Define string option "--notchycorner" with default value False. + self.OptionParser.add_option('--notchycorner', + action = 'store',type = 'inkbool', + dest = 'notchycorner',default = False, + help = 'Make notches on corner of vertical strip') + + + + def effect(self): + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + # getting the parent tag of the guide + nv = self.document.xpath('/svg:svg/sodipodi:namedview',namespaces=inkex.NSS)[0] + + documentUnits = inkex.addNS('document-units', 'inkscape') + # print >> sys.stderr, nv.get(documentUnits) + uunits = nv.get(documentUnits) + message="Units="+uunits + # inkex.debug(message) + + # Get script's options value. + stripwidth=self.unittouu(str(self.options.width)+uunits) + striplength=self.unittouu(str(self.options.length)+uunits) + + cellheight=self.unittouu(str(self.options.cellheight)+uunits) + cellwidth=self.unittouu(str(self.options.cellwidth)+uunits) + + scalecells=(self.options.scalecells) + + cellnumx=(self.options.cellnumx) + cellnumy=(self.options.cellnumy) + + notchdepth=self.unittouu(str(self.options.notchdepth)+uunits) + notchwidth=self.unittouu(str(self.options.notchwidth)+uunits) + + notchhorizontal=(self.options.notchhorizontal) + notchvertical=(self.options.notchvertical) + +# notch2depth=self.unittouu(str(self.options.notch2depth)+uunits) + notch2width=self.unittouu(str(self.options.notch2width)+uunits) + + notch2depth= stripwidth/2 + + notchxcorner=(self.options.notchxcorner) + notchycorner=(self.options.notchycorner) + + if scalecells: + cellwidth=(striplength-4*notch2width)/cellnumx + cellheight=(striplength-4*notch2width)/cellnumy + notchxcorner=False + notchycorner=False + + + linewidth=self.unittouu(str(0.01)+uunits) + + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + celldistx=(cellwidth-notchwidth)/2 + celldisty=(cellheight-notch2width)/2 + + # getting the width and height attributes of the canvas + width = float(self.unittouu(svg.attrib['width'])) + height = float(self.unittouu(svg.attrib['height'])) + + # maxlength=max(width,height) + # if striplength > maxlength: + # factor=striplength/maxlength+1 + + # inkex.debug("document width="+str(self.uutounit(width,uunits))) + # inkex.debug("document height="+str(self.uutounit(height,uunits))) + + # inkex.debug("strip length="+str(self.uutounit(striplength,uunits))) + # inkex.debug("strip width="+str(self.uutounit(stripwidth,uunits))) + + # inkex.debug("cell width="+str(self.uutounit(cellwidth,uunits))) + # inkex.debug("cell height="+str(self.uutounit(cellheight,uunits))) + + # inkex.debug("Number of cells horizontal="+str(cellnumx)) + # inkex.debug("Number of cells vertical ="+str(cellnumy)) + + # inkex.debug("Depth of extra notch="+str(self.uutounit(notchdepth,uunits))) + # inkex.debug("Width of extra notch="+str(self.uutounit(notchwidth,uunits))) + + # inkex.debug("Depth of notch for grid="+str(self.uutounit(notchdepth,uunits))) + # inkex.debug("Width of notch for grid="+str(self.uutounit(notchwidth,uunits))) + + # inkex.debug("distx="+str(self.uutounit(distx,uunits))) + # inkex.debug("disty="+str(self.uutounit(disty,uunits))) + + # inkex.debug("celldistx="+str(self.uutounit(celldistx,uunits))) + # inkex.debug("celldisty="+str(self.uutounit(celldisty,uunits))) + + + parent = self.current_layer + layername='' + if notchhorizontal: + layername=layername+'VLED ' + if notchvertical: + layername=layername+'HLED ' + + # Create a new layer + layer = inkex.etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'),layername+'Long strips') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + + grp_name = 'group_horizontal_strip_long' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = inkex.etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + style = { 'stroke': '#000000', 'stroke-width':str(linewidth), 'fill': 'none' } + + for num in range(0,2): + pathstring='M '+str(1)+','+str(1)+' L ' + if notchxcorner: + pathstring+=str(stripwidth-2*notchdepth)+','+str(1) # Obere Querkante + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(notchwidth) # Erste Kerbe aussen + pathstring+=' L '+str(stripwidth)+','+str(notchwidth) # Ausrueckung + else: + pathstring+=str(stripwidth)+','+str(1) + if notchhorizontal: + pathstring+=' L '+str(stripwidth)+','+str(distx) # Distance to corner + y=distx + for i in range(0,cellnumx): + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+2*celldistx+notchwidth) # Abstand + y=y+2*celldistx+notchwidth + if notchxcorner: + pathstring+=' L '+str(stripwidth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength) # Untere rechte Ecke + else: + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + + + + y=striplength-distx+notch2width/2 + + pathstring+=' L '+str(1)+','+str(y) # Distance to corner + pathstring+=' L '+str(notch2depth)+','+str(y) # Einrueckung + + + for i in range(0,cellnumx): + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + pathstring+=' L '+str(1)+','+str(y-notch2width-cellwidth+notch2width) # Abstand + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width-cellwidth+notch2width) # Einrueckung + y=y-notch2width-cellwidth+notch2width + + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform= 'rotate(' + str(90)+')' + strip_transform+=' translate('+str(stripwidth*num)+','+str(1)+')' + strip_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):"strip horizontal long", + 'transform': strip_transform, + 'd':pathstring} + inkex.etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + + celldisty=(cellheight-notch2width-notchwidth)/2 + + grp_name = 'group_vertical_strip_long' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = inkex.etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + + for num in range(0,2): + y=disty-notch2width/2 + pathstring='M '+str(1)+','+str(1) + if notchycorner: + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(1) # Obere Querkante + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(notchwidth) + pathstring+=' L '+str(stripwidth)+','+str(notchwidth) + else: + pathstring+=' L '+str(stripwidth)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(y) # Distance to corner + + for i in range(0,cellnumy): + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + if notchvertical: + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+2*celldisty+notchwidth) # Abstand + y=y+notch2width+2*celldisty+notchwidth + + + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + + if notchycorner: + pathstring+=' L '+str(stripwidth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength) # Untere rechte Ecke + else: + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform= 'translate('+str(num*stripwidth)+','+str(1)+')' + strip_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):"strip vertical long", + 'transform': strip_transform, + 'd':pathstring} + inkex.etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + # Create a new layer + layer = inkex.etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'), layername+'Horizontal strips short') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + grp_name = 'group horizontal_strip_short' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = inkex.etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + striplength=cellnumx*cellwidth+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + style = { 'stroke': '#000000', 'stroke-width':str(linewidth), 'fill': 'none' } + + for num in range(1,cellnumy): + + pathstring='M '+str(1)+','+str(1)+' L ' + pathstring+=str(stripwidth)+','+str(1) + if notchhorizontal: + pathstring+=' L '+str(stripwidth)+','+str(distx) # Distance to corner + y=distx + for i in range(0,cellnumx): + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+2*celldistx+notchwidth) # Abstand + y=y+2*celldistx+notchwidth + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + + y=striplength-distx+notch2width/2 + + pathstring+=' L '+str(1)+','+str(y) # Distance to corner + pathstring+=' L '+str(notch2depth)+','+str(y) # Einrueckung + + for i in range(0,cellnumx): + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + pathstring+=' L '+str(1)+','+str(y-notch2width-cellwidth+notch2width) # Abstand + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width-cellwidth+notch2width) # Einrueckung + y=y-notch2width-cellwidth+notch2width + + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform='rotate(' + str(90)+')' + strip_transform+=' translate('+str((num+1)*stripwidth+2)+','+str(1)+')' + stripname="strip horizontal short"+str(num) + strip_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):stripname, + 'transform': strip_transform, + 'd':pathstring} + inkex.etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + + # Create a new layer + layer = inkex.etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'), layername+'Vertical strips short') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + grp_name = 'group vertical_strip_short' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = inkex.etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + striplength=cellnumx*cellwidth+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + striplength=cellnumy*cellheight+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + celldisty=(cellheight-notch2width-notchwidth)/2 + + for num in range(1,cellnumx): + y=disty-notch2width/2 + pathstring='M '+str(1)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(y) # Distance to corner + + for i in range(0,cellnumy): + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + if notchvertical: + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+2*celldisty+notchwidth) # Abstand + y=y+notch2width+2*celldisty+notchwidth + + + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + pathstring+=' L '+str(1)+','+str(1)+' z' + + + strip_transform= 'translate('+str((num+1)*stripwidth+10)+','+str(1)+')' + stripname="strip vertical short"+str(num) + strip_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):stripname, + 'transform': strip_transform, + 'd':pathstring} + inkex.etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + +if __name__ == '__main__': #pragma: no cover + # Create effect instance and apply it. + effect = GridStrip_Creator() + effect.affect() + +## end of file gridstrip_creator.py ## diff --git a/fablabchemnitz_group_to_layer.inx b/fablabchemnitz_group_to_layer.inx new file mode 100644 index 0000000..69b3517 --- /dev/null +++ b/fablabchemnitz_group_to_layer.inx @@ -0,0 +1,19 @@ + + + <_name>Group To Layer + fablabchemnitz.de.group_to_layer + fablabchemnitz_group_to_layer.py + inkex.py + 1 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_group_to_layer.py b/fablabchemnitz_group_to_layer.py new file mode 100644 index 0000000..7cc669b --- /dev/null +++ b/fablabchemnitz_group_to_layer.py @@ -0,0 +1,59 @@ +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import inkex + +class GroupToLayerEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + self.OptionParser.add_option('-d', '--depth', action = 'store', + type = 'int', dest = 'depth', default = 1, metavar = 'DEPTH', + help = 'Convert nested group up to DEPTH layers deep') + + def effect(self): + depth = self.options.depth + + self.tag_g = inkex.addNS('g', 'svg') + + for node in self.selected.itervalues(): + self.convert_group(node, depth) + + def convert_group(self, node, depth): + if depth <= 0: + return + + if node.tag != self.tag_g: + return + + node.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + for child in node: + self.convert_group(child, depth - 1) + +# Create effect instance and apply it. +effect = GroupToLayerEffect() +effect.affect() diff --git a/fablabchemnitz_guilloche_contour.inx b/fablabchemnitz_guilloche_contour.inx new file mode 100644 index 0000000..a150a4e --- /dev/null +++ b/fablabchemnitz_guilloche_contour.inx @@ -0,0 +1,59 @@ + + + <_name>Guilloche Contour + fablabchemnitz.de.guilloche_contour + pathmodifier.py + fablabchemnitz_guilloche_contour.py + inkex.py + + + + + + + + + + + + + + + + + + + + 10 + 1 + 0 + 0 + 20 + false + + + + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_guilloche_contour.py b/fablabchemnitz_guilloche_contour.py new file mode 100644 index 0000000..b5f05b1 --- /dev/null +++ b/fablabchemnitz_guilloche_contour.py @@ -0,0 +1,697 @@ +#! /usr/bin/env python +''' +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Quick description: + +''' +# standard library +from math import * +from copy import deepcopy +# local library +import inkex +import pathmodifier +import cubicsuperpath +import bezmisc +import simplepath +import simpletransform + +def getColorAndOpacity(longColor): + ''' + Convert the long into a #rrggbb color value + Conversion back is A + B*256^1 + G*256^2 + R*256^3 + ''' + longColor = long(longColor) + + if longColor < 0: + longColor = longColor & 0xFFFFFFFF + + hexColor = hex(longColor) + + hexOpacity = hexColor[-3:-1] + hexColor = '#' + hexColor[2:-3].rjust(6, '0') + + return (hexColor, hexOpacity) + +def setColorAndOpacity(style, color, opacity): + declarations = style.split(';') + strokeOpacityInStyle = False + newOpacity = round((int(opacity, 16) / 255.0), 8) + + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + + if (prop == 'stroke' and val != color): + declarations[i] = prop + ':' + color + + if prop == 'stroke-opacity': + if val != newOpacity: + declarations[i] = prop + ':' + str(newOpacity) + + strokeOpacityInStyle = True + + if not strokeOpacityInStyle: + declarations.append('stroke-opacity' + ':' + str(newOpacity)) + + return ";".join(declarations) + +def getSkeletonPath(d, offs): + ''' + Recieves a current skeleton path and offset specified by the user if it's line. + Calculates new skeleton path to use for creating contour with given offset. + ''' + if offs != 0: + comps = d.split() + + if ((comps[2] == 'h' or comps[2] == 'H') and len(comps) == 4): + startPt = comps[1].split(',') + startX = float(startPt[0]) + startY = float(startPt[1]) + + finalX = float(comps[3]) if comps[2] == 'H' else startX + float(comps[3]) + + if startX < finalX: + startY -= offs + else: + startY += offs + + comps[1] = startPt[0] + ',' + str(startY) + elif ((comps[2] == 'v' or comps[2] == 'V') and len(comps) == 4): + startPt = comps[1].split(',') + startX = float(startPt[0]) + startY = float(startPt[1]) + + finalY = float(comps[3]) if comps[2] == 'V' else startY + float(comps[3]) + + if startY < finalY: + startX += offs + else: + startX -= offs + + comps[1] = str(startX) + ',' + startPt[1] + elif (comps[0] == 'M' and len(comps) == 3): + startPt = comps[1].split(',') + startX = float(startPt[0]) + startY = float(startPt[1]) + + finalPt = comps[2].split(',') + finalX = float(finalPt[0]) + finalY = float(finalPt[1]) + + if startX < finalX: + if (startY > finalY): + startX -= offs + finalX -= offs + else: + startX += offs + finalX += offs + startY -= offs + finalY -= offs + else: + if startY > finalY: + startX -= offs + finalX -= offs + else: + startX += offs + finalX += offs + startY += offs + finalY += offs + + comps[1] = str(startX) + ',' + str(startY) + comps[2] = str(finalX) + ',' + str(finalY) + elif (comps[0] == 'm' and len(comps) == 3): + startPt = comps[1].split(',') + startX = float(startPt[0]) + startY = float(startPt[1]) + + finalPt = comps[2].split(',') + dx = float(finalPt[0]) + dy = float(finalPt[1]) + finalX = startX + dx + finalY = startY + dy + + if startX < finalX: + if startY > finalY: + startX -= offs + else: + startX += offs + startY -= offs + else: + if startY > finalY: + startX -= offs + else: + startX += offs + startY += offs + + comps[1] = str(startX) + ',' + str(startY) + comps[2] = str(dx) + ',' + str(dy) + + return cubicsuperpath.parsePath(' '.join(comps)) + + return cubicsuperpath.parsePath(d) + +def modifySkeletonPath(skelPath): + resPath = [] + l = len(skelPath) + resPath += skelPath[0] + + if l > 1: + for i in range(1, l): + if skelPath[i][0][1] == resPath[-1][1]: + skelPath[i][0][0] = resPath[-1][0] + del resPath[-1] + + resPath += skelPath[i] + + return resPath + +def linearize(p, tolerance=0.001): + ''' + This function receives a component of a 'cubicsuperpath' and returns two things: + The path subdivided in many straight segments, and an array containing the length of each segment. + ''' + zero = 0.000001 + i = 0 + d = 0 + lengths=[] + + while i < len(p) - 1: + box = bezmisc.pointdistance(p[i][1], p[i][2]) + box += bezmisc.pointdistance(p[i][2], p[i+1][0]) + box += bezmisc.pointdistance(p[i+1][0], p[i+1][1]) + chord = bezmisc.pointdistance(p[i][1], p[i+1][1]) + + if (box - chord) > tolerance: + b1, b2 = bezmisc.beziersplitatt([p[i][1], p[i][2], p[i + 1][0], p[i + 1][1]], 0.5) + p[i][2][0], p[i][2][1] = b1[1] + p[i + 1][0][0], p[i + 1][0][1] = b2[2] + p.insert(i + 1, [[b1[2][0], b1[2][1]], [b1[3][0], b1[3][1]], [b2[1][0], b2[1][1]]]) + else: + d = (box + chord) / 2 + lengths.append(d) + i += 1 + + new = [p[i][1] for i in range(0, len(p) - 1) if lengths[i] > zero] + new.append(p[-1][1]) + lengths = [l for l in lengths if l > zero] + + return (new, lengths) + +def isSkeletonClosed(sklCmp): + cntOfDgts = 2 + + if (round(sklCmp[0][0], cntOfDgts) != round(sklCmp[-1][0], cntOfDgts) or round(sklCmp[0][1], cntOfDgts) != round(sklCmp[-1][1], cntOfDgts)): + return False + + return True + +def getPolygonCentroid(polygon): + x = 0 + y = 0 + n = len(polygon) + + for vert in polygon: + x += vert[0] + y += vert[1] + + x = x / n + y = y / n + + return [x, y] + +def getPoint(p1, p2, x, y): + x1 = p1[0] + y1 = p1[1] + x2 = p2[0] + y2 = p2[1] + + a = (y1 - y2) / (x1 - x2) + b = y1 - a * x1 + + if x == None: + x = (y - b) / a + else: + y = a * x + b + + return [x, y] + +def getPtOnSeg(p1, p2, segLen, l): + if p1[0] == p2[0]: + return [p2[0], p2[1] - l] if p2[1] < p1[1] else [p2[0], p2[1] + l] + + if p1[1] == p2[1]: + return [p2[0] - l, p2[1]] if p2[0] < p1[0] else [p2[0] + l, p2[1]] + + dy = abs(p1[1] - p2[1]) + angle = asin(dy / segLen) + dx = l * cos(angle) + x = p1[0] - dx if p1[0] > p2[0] else p1[0] + dx + + return getPoint(p1, p2, x, None) + +def drawfunction(nodes, width, fx): + # x-bounds of the plane + xstart = 0.0 + xend = 2 * pi + # y-bounds of the plane + ybottom = -1.0 + ytop = 1.0 + # size and location of the plane on the canvas + height = 2 + left = 15 + bottom = 15 + height + + # function specified by the user + try: + if fx != "": + f = eval('lambda x: ' + fx.strip('"')) + except SyntaxError: + return [] + + scalex = width / (xend - xstart) + xoff = left + # conver x-value to coordinate + coordx = lambda x: (x - xstart) * scalex + xoff + + scaley = height / (ytop - ybottom) + yoff = bottom + # conver y-value to coordinate + coordy = lambda y: (ybottom - y) * scaley + yoff + + # step is the distance between nodes on x + step = (xend - xstart) / (nodes - 1) + third = step / 3.0 + # step used in calculating derivatives + ds = step * 0.001 + + # initialize function and derivative for 0; + # they are carried over from one iteration to the next, to avoid extra function calculations. + x0 = xstart + y0 = f(xstart) + + # numerical derivative, using 0.001*step as the small differential + x1 = xstart + ds # Second point AFTER first point (Good for first point) + y1 = f(x1) + + dx0 = (x1 - x0) / ds + dy0 = (y1 - y0) / ds + + # path array + a = [] + # Start curve + a.append(['M ', [coordx(x0), coordy(y0)]]) + + for i in range(int(nodes - 1)): + x1 = (i + 1) * step + xstart + x2 = x1 - ds # Second point BEFORE first point (Good for last point) + y1 = f(x1) + y2 = f(x2) + + # numerical derivative + dx1 = (x1 - x2) / ds + dy1 = (y1 - y2) / ds + + # create curve + a.append([' C ', [coordx(x0 + (dx0 * third)), coordy(y0 + (dy0 * third)), + coordx(x1 - (dx1 * third)), coordy(y1 - (dy1 * third)), + coordx(x1), coordy(y1)]]) + + # Next segment's start is this segment's end + x0 = x1 + y0 = y1 + # Assume the function is smooth everywhere, so carry over the derivative too + dx0 = dx1 + dy0 = dy1 + + return a + +def offset(pathComp, dx, dy): + for ctl in pathComp: + for pt in ctl: + pt[0] += dx + pt[1] += dy + +def stretch(pathComp, xscale, yscale, org): + for ctl in pathComp: + for pt in ctl: + pt[0] = org[0] + (pt[0] - org[0]) * xscale + pt[1] = org[1] + (pt[1] - org[1]) * yscale + +class GuillocheContour(pathmodifier.PathModifier): + def __init__(self): + pathmodifier.PathModifier.__init__(self) + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="contour", + help="Active tab") + self.OptionParser.add_option("--contourFunction", + action="store", type="string", + dest="contourFunction", default="sin", + help="Function of the contour") + self.OptionParser.add_option("--frequency", + action="store", type="int", + dest="frequency", default=10, + help="Frequency of the function") + self.OptionParser.add_option("--amplitude", + action="store", type="int", + dest="amplitude", default=1, + help="Amplitude of the function") + self.OptionParser.add_option("--phaseOffset", + action="store", type="int", + dest="phaseOffset", default=0, + help="Phase offset of the function") + self.OptionParser.add_option("--offset", + action="store", type="int", + dest="offset", default=0, + help="Offset of the function") + self.OptionParser.add_option("--nodes", + action="store", type="int", + dest="nodes", default=20, + help="Count of nodes") + self.OptionParser.add_option("--remove", + action="store", type="inkbool", + dest="remove", default=False, + help="If True, control object will be removed") + self.OptionParser.add_option("--strokeColor", + action="store", type="string", + dest="strokeColor", default=255, + help="The line's color") + self.OptionParser.add_option("--amplitude1", + action="store", type="float", + dest="amplitude1", default=0.0, + help="Amplitude of first harmonic") + self.OptionParser.add_option("--phase1", + action="store", type="int", + dest="phase1", default=0, + help="Phase offset of first harmonic") + self.OptionParser.add_option("--amplitude2", + action="store", type="float", + dest="amplitude2", default=0.0, + help="Amplitude of second harmonic") + self.OptionParser.add_option("--phase2", + action="store", type="int", + dest="phase2", default=0, + help="Phase offset of second harmonic") + self.OptionParser.add_option("--amplitude3", + action="store", type="float", + dest="amplitude3", default=0.0, + help="Amplitude of third harmonic") + self.OptionParser.add_option("--phase3", + action="store", type="int", + dest="phase3", default=0, + help="Phase offset of third harmonic") + self.OptionParser.add_option("--amplitude4", + action="store", type="float", + dest="amplitude4", default=0.0, + help="Amplitude of fourth harmonic") + self.OptionParser.add_option("--phase4", + action="store", type="int", + dest="phase4", default=0, + help="Phase offset of fourth harmonic") + self.OptionParser.add_option("--amplitude5", + action="store", type="float", + dest="amplitude5", default=0.0, + help="Amplitude of fifth harmonic") + self.OptionParser.add_option("--phase5", + action="store", type="int", + dest="phase5", default=0, + help="Phase offset of fifth harmonic") + + def prepareSelectionList(self): + self.skeletons = self.selected + self.expandGroupsUnlinkClones(self.skeletons, True, False) + self.objectsToPaths(self.skeletons) + + def linearizePath(self, skelPath, offs): + comps, lengths = linearize(skelPath) + + self.skelCompIsClosed = isSkeletonClosed(comps) + + if (self.skelCompIsClosed and offs != 0): + centroid = getPolygonCentroid(comps) + + for i in range(len(comps)): + pt1 = comps[i] + dist = bezmisc.pointdistance(centroid, pt1) + + comps[i] = getPtOnSeg(centroid, pt1, dist, dist + offs) + + if i > 0: + lengths[i - 1] = bezmisc.pointdistance(comps[i - 1], comps[i]) + + return (comps, lengths) + + def getFunction(self, func): + res = '' + + presetAmp1 = presetAmp2 = presetAmp3 = presetAmp4 = presetAmp5 = 0.0 + presetPhOf1 = presetPhOf2 = presetPhOf3 = presetPhOf4 = presetPhOf5 = presetOffs = 0 + + if (func == 'sin' or func == 'cos'): + return '(' + str(self.options.amplitude) + ') * ' + func + '(x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + '))' + + if func == 'env1': + presetAmp1 = presetAmp3 = 0.495 + elif func == 'env2': + presetAmp1 = presetAmp3 = 0.65 + presetPhOf1 = presetPhOf3 = 25 + elif func == 'env3': + presetAmp1 = 0.75 + presetPhOf1 = 25 + presetAmp3 = 0.24 + presetPhOf3 = -25 + elif func == 'env4': + presetAmp1 = 1.105 + presetAmp3 = 0.27625 + presetPhOf3 = 50 + elif func == 'env5': + presetAmp1 = 0.37464375 + presetPhOf1 = 25 + presetAmp2 = 0.5655 + presetAmp3 = 0.37464375 + presetPhOf3 = -25 + elif func == 'env6': + presetAmp1 = 0.413725 + presetPhOf1 = 25 + presetAmp2 = 0.45695 + presetPhOf2 = 50 + presetAmp3 = 0.494 + presetPhOf3 = -25 + elif func == 'env7': + presetAmp1 = 0.624 + presetPhOf1 = 25 + presetAmp2 = 0.312 + presetAmp3 = 0.624 + presetPhOf3 = 25 + elif func == 'env8': + presetAmp1 = 0.65 + presetPhOf1 = 50 + presetAmp2 = 0.585 + presetAmp3 = 0.13 + elif func == 'env9': + presetAmp1 = 0.07605 + presetPhOf1 = 25 + presetAmp2 = 0.33345 + presetPhOf2 = 50 + presetAmp3 = 0.468 + presetPhOf3 = -25 + presetAmp4 = 0.32175 + elif func == 'env10': + presetAmp1 = 0.3575 + presetPhOf1 = -25 + presetAmp2 = 0.3575 + presetAmp3 = 0.3575 + presetPhOf3 = 25 + presetAmp4 = 0.3575 + presetPhOf4 = 50 + elif func == 'env11': + presetAmp1 = 0.65 + presetPhOf1 = 25 + presetAmp2 = 0.13 + presetPhOf2 = 50 + presetAmp3 = 0.26 + presetPhOf3 = 25 + presetAmp4 = 0.39 + elif func == 'env12': + presetAmp1 = 0.5525 + presetPhOf1 = -25 + presetAmp2 = 0.0414375 + presetPhOf2 = 50 + presetAmp3 = 0.15884375 + presetPhOf3 = 25 + presetAmp4 = 0.0966875 + presetAmp5 = 0.28315625 + presetPhOf5 = -25 + + harm1 = '(' + str(self.options.amplitude * (presetAmp1 + self.options.amplitude1)) + ') * cos(1 * (x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf1 + self.options.phase1) / 100.0 * 2 * pi) + '))' + harm2 = '(' + str(self.options.amplitude * (presetAmp2 + self.options.amplitude2)) + ') * cos(2 * (x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf2 + self.options.phase2) / 100.0 * 2 * pi) + '))' + harm3 = '(' + str(self.options.amplitude * (presetAmp3 + self.options.amplitude3)) + ') * cos(3 * (x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf3 + self.options.phase3) / 100.0 * 2 * pi) + '))' + harm4 = '(' + str(self.options.amplitude * (presetAmp4 + self.options.amplitude4)) + ') * cos(4 * (x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf4 + self.options.phase4) / 100.0 * 2 * pi) + '))' + harm5 = '(' + str(self.options.amplitude * (presetAmp5 + self.options.amplitude5)) + ') * cos(5 * (x + (' + str(self.options.phaseOffset / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf5 + self.options.phase5) / 100.0 * 2 * pi) + '))' + + res = harm1 + ' + ' + harm2 + ' + ' + harm3 + ' + ' + harm4 + ' + ' + harm5 + + return res + + def lengthToTime(self, l): + ''' + Recieves an arc length l, and returns the index of the segment in self.skelComp + containing the corresponding point, together with the position of the point on this segment. + + If the deformer is closed, do computations modulo the total length. + ''' + if self.skelCompIsClosed: + l = l % sum(self.lengths) + + if l <= 0: + return 0, l / self.lengths[0] + + i = 0 + + while (i < len(self.lengths)) and (self.lengths[i] <= l): + l -= self.lengths[i] + i += 1 + + t = l / self.lengths[min(i, len(self.lengths) - 1)] + + return (i, t) + + def applyDiffeo(self, bpt, vects=()): + ''' + The kernel of this stuff: + bpt is a base point and for v in vectors, v'=v-p is a tangent vector at bpt. + ''' + s = bpt[0] - self.skelComp[0][0] + i, t = self.lengthToTime(s) + + if i == len(self.skelComp) - 1: + x, y = bezmisc.tpoint(self.skelComp[i - 1], self.skelComp[i], t + 1) + dx = (self.skelComp[i][0] - self.skelComp[i - 1][0]) / self.lengths[-1] + dy = (self.skelComp[i][1] - self.skelComp[i - 1][1]) / self.lengths[-1] + else: + x, y = bezmisc.tpoint(self.skelComp[i], self.skelComp[i + 1], t) + dx = (self.skelComp[i + 1][0] - self.skelComp[i][0]) / self.lengths[i] + dy = (self.skelComp[i + 1][1] - self.skelComp[i][1]) / self.lengths[i] + + vx = 0 + vy = bpt[1] - self.skelComp[0][1] + bpt[0] = x + vx * dx - vy * dy + bpt[1] = y + vx * dy + vy * dx + + for v in vects: + vx = v[0] - self.skelComp[0][0] - s + vy = v[1] - self.skelComp[0][1] + v[0] = x + vx * dx - vy * dy + v[1] = y + vx * dy + vy * dx + + def effect(self): + if len(self.options.ids) < 1: + inkex.errormsg(_("This extension requires one selected path.")) + return + + self.prepareSelectionList() + + for skeleton in self.skeletons.itervalues(): + resPath = [] + pattern = inkex.etree.Element(inkex.addNS('path','svg')) + + self.options.strokeHexColor, self.strokeOpacity = getColorAndOpacity(self.options.strokeColor) + + # Copy style of skeleton with setting color and opacity + s = skeleton.get('style') + + if s: + pattern.set('style', setColorAndOpacity(s, self.options.strokeHexColor, self.strokeOpacity)) + + skeletonPath = modifySkeletonPath(getSkeletonPath(skeleton.get('d'), self.options.offset)) + + self.skelComp, self.lengths = self.linearizePath(skeletonPath, self.options.offset) + + length = sum(self.lengths) + patternWidth = length / self.options.frequency + selectedFunction = self.getFunction(self.options.contourFunction) + + pattern.set('d', simplepath.formatPath(drawfunction(self.options.nodes, patternWidth, selectedFunction))) + + # Add path into SVG structure + skeleton.getparent().append(pattern) + + if self.options.remove: + skeleton.getparent().remove(skeleton) + + # Compute bounding box + bbox = simpletransform.computeBBox([pattern]) + + width = bbox[1] - bbox[0] + dx = width + + if dx < 0.01: + exit(_("The total length of the pattern is too small.")) + + patternPath = cubicsuperpath.parsePath(pattern.get('d')) + curPath = deepcopy(patternPath) + + xoffset = self.skelComp[0][0] - bbox[0] + yoffset = self.skelComp[0][1] - (bbox[2] + bbox[3]) / 2 + + patternCopies = max(1, int(round(length / dx))) + width = dx * patternCopies + + newPath = [] + + # Repeat pattern to cover whole skeleton + for subPath in curPath: + for i in range(0, patternCopies, 1): + newPath.append(deepcopy(subPath)) + offset(subPath, dx, 0) + + curPath = newPath + + # Offset pattern to the first node of the skeleton + for subPath in curPath: + offset(subPath, xoffset, yoffset) + + # Stretch pattern to whole skeleton + for subPath in curPath: + stretch(subPath, length / width, 1, self.skelComp[0]) + + for subPath in curPath: + for ctlpt in subPath: + self.applyDiffeo(ctlpt[1], (ctlpt[0], ctlpt[2])) + + # Check if there is a need to close path manually + if self.skelCompIsClosed: + firstPtX = round(curPath[0][0][1][0], 8) + firstPtY = round(curPath[0][0][1][1], 8) + finalPtX = round(curPath[-1][-1][1][0], 8) + finalPtY = round(curPath[-1][-1][1][1], 8) + + if (firstPtX != finalPtX or firstPtY != finalPtY): + curPath[-1].append(curPath[0][0]) + + resPath += curPath + + pattern.set('d', cubicsuperpath.formatPath(resPath)) + +if __name__ == '__main__': + e = GuillocheContour() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_guilloche_pattern.inx b/fablabchemnitz_guilloche_pattern.inx new file mode 100644 index 0000000..738f58c --- /dev/null +++ b/fablabchemnitz_guilloche_pattern.inx @@ -0,0 +1,61 @@ + + + <_name>Guilloche Pattern + fablabchemnitz.de.guilloche_pattern + pathmodifier.py + fablabchemnitz_guilloche_pattern.py + inkex.py + + + + + + + + + + + + + + + + + + + + 10 + 100 + 0 + 0 + 100 + 1 + 20 + false + + + + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + 0.0 + 0 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_guilloche_pattern.py b/fablabchemnitz_guilloche_pattern.py new file mode 100644 index 0000000..fda5326 --- /dev/null +++ b/fablabchemnitz_guilloche_pattern.py @@ -0,0 +1,1036 @@ +#! /usr/bin/env python +''' +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Quick description: + +''' +# standard library +from math import * +from copy import deepcopy +# local library +import inkex +import pathmodifier +import cubicsuperpath +import bezmisc +import simplepath +import simpletransform + +def modifySkeletonPath(skelPath): + resPath = [] + l = len(skelPath) + resPath += skelPath[0] + + if l > 1: + for i in range(1, l): + if skelPath[i][0][1] == resPath[-1][1]: + skelPath[i][0][0] = resPath[-1][0] + del resPath[-1] + + resPath += skelPath[i] + + return resPath + +def linearize(p, tolerance=0.001): + ''' + This function receives a component of a 'cubicsuperpath' and returns two things: + The path subdivided in many straight segments, and an array containing the length of each segment. + ''' + zero = 0.000001 + i = 0 + d = 0 + lengths=[] + + while i < len(p) - 1: + box = bezmisc.pointdistance(p[i][1], p[i][2]) + box += bezmisc.pointdistance(p[i][2], p[i+1][0]) + box += bezmisc.pointdistance(p[i+1][0], p[i+1][1]) + chord = bezmisc.pointdistance(p[i][1], p[i+1][1]) + + if (box - chord) > tolerance: + b1, b2 = bezmisc.beziersplitatt([p[i][1], p[i][2], p[i + 1][0], p[i + 1][1]], 0.5) + p[i][2][0], p[i][2][1] = b1[1] + p[i + 1][0][0], p[i + 1][0][1] = b2[2] + p.insert(i + 1, [[b1[2][0], b1[2][1]], [b1[3][0], b1[3][1]], [b2[1][0], b2[1][1]]]) + else: + d = (box + chord) / 2 + lengths.append(d) + i += 1 + + new = [p[i][1] for i in range(0, len(p) - 1) if lengths[i] > zero] + new.append(p[-1][1]) + lengths = [l for l in lengths if l > zero] + + return (new, lengths) + +def isSkeletonClosed(sklCmp): + cntOfDgts = 2 + + if (round(sklCmp[0][0], cntOfDgts) != round(sklCmp[-1][0], cntOfDgts) or round(sklCmp[0][1], cntOfDgts) != round(sklCmp[-1][1], cntOfDgts)): + return False + + return True + +def checkCompatibility(bbox1, bbox2, comps1, comps2): + cl1 = isSkeletonClosed(comps1) + cl2 = isSkeletonClosed(comps2) + + if (cl1 and cl2): + if ((bbox1[0] >= bbox2[0]) and (bbox1[1] <= bbox2[1]) and (bbox1[2] >= bbox2[2]) and (bbox1[3] <= bbox2[3])): + return (True, False) + elif ((bbox1[0] <= bbox2[0]) and (bbox1[1] >= bbox2[1]) and (bbox1[2] <= bbox2[2]) and (bbox1[3] >= bbox2[3])): + return (True, True) + elif (not cl1 and not cl2): + if (comps1[0][0] == comps2[0][0] and comps1[-1][0] == comps2[-1][0]): + if ((comps1[0][0] < comps1[-1][0] and comps1[0][1] >= comps2[0][1]) or (comps1[0][0] > comps1[-1][0] and comps1[0][1] <= comps2[0][1])): + return (True, False) + else: + return (True, True) + elif (comps1[0][1] == comps2[0][1] and comps1[-1][1] == comps2[-1][1]): + if ((comps1[0][1] < comps1[-1][1] and comps1[0][0] <= comps2[0][0]) or (comps1[0][1] > comps1[-1][1] and comps1[0][0] >= comps2[0][0])): + return (True, False) + else: + return (True, True) + + return (False, False) + +def linearizeEnvelopes(envs): + bbox1 = simpletransform.computeBBox([envs[0]]) + bbox2 = simpletransform.computeBBox([envs[1]]) + + comps1, lengths1 = linearize(modifySkeletonPath(cubicsuperpath.parsePath(envs[0].get('d')))) + comps2, lengths2 = linearize(modifySkeletonPath(cubicsuperpath.parsePath(envs[1].get('d')))) + + correctness, shouldSwap = checkCompatibility(bbox1, bbox2, comps1, comps2) + + if not shouldSwap: + return (comps1, lengths1, comps2, lengths2, bbox1, bbox2, correctness) + else: + return (comps2, lengths2, comps1, lengths1, bbox2, bbox1, correctness) + +def getMidPoint(p1, p2): + return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2] + +def getPoint(p1, p2, x, y): + x1 = p1[0] + y1 = p1[1] + x2 = p2[0] + y2 = p2[1] + + a = (y1 - y2) / (x1 - x2) + b = y1 - a * x1 + + if x == None: + x = (y - b) / a + else: + y = a * x + b + + return [x, y] + +def getPtOnSeg(p1, p2, segLen, l): + if p1[0] == p2[0]: + return [p1[0], p1[1] - l] if p1[1] > p2[1] else [p1[0], p1[1] + l] + + if p1[1] == p2[1]: + return [p1[0] - l, p1[1]] if p1[0] > p2[0] else [p1[0] + l, p1[1]] + + dy = abs(p1[1] - p2[1]) + angle = asin(dy / segLen) + dx = l * cos(angle) + x = p1[0] - dx if p1[0] > p2[0] else p1[0] + dx + + return getPoint(p1, p2, x, None) + +def getPtsByX(pt, comps, isClosed): + res = [] + + for i in range(1, len(comps)): + if ((comps[i - 1][0] <= pt[0] and pt[0] <= comps[i][0]) or (comps[i - 1][0] >= pt[0] and pt[0] >= comps[i][0])): + if comps[i - 1][0] == comps[i][0]: + d1 = bezmisc.pointdistance(pt, comps[i - 1]) + d2 = bezmisc.pointdistance(pt, comps[i]) + + if d1 < d2: + res.append(comps[i - 1]) + else: + res.append(comps[i]) + elif comps[i - 1][1] == comps[i][1]: + res.append([pt[0], comps[i - 1][1]]) + else: + res.append(getPoint(comps[i - 1], comps[i], pt[0], None)) + + if not isClosed: + return res[0] + + return res + +def getPtsByY(pt, comps, isClosed): + res = [] + + for i in range(1, len(comps)): + if ((comps[i - 1][1] <= pt[1] and pt[1] <= comps[i][1]) or (comps[i - 1][1] >= pt[1] and pt[1] >= comps[i][1])): + if comps[i - 1][1] == comps[i][1]: + d1 = bezmisc.pointdistance(pt, comps[i - 1]) + d2 = bezmisc.pointdistance(pt, comps[i]) + + if d1 < d2: + res.append(comps[i - 1]) + else: + res.append(comps[i]) + elif comps[i - 1][0] == comps[i][0]: + res.append([comps[i - 1][0], pt[1]]) + else: + res.append(getPoint(comps[i - 1], comps[i], None, pt[1])) + + if not isClosed: + return res[0] + + return res + +def pickCorrespPt(cntr, p, pts): + tmpPts = [] + + for pt in pts: + if (p[0] >= cntr[0] and p[1] >= cntr[1]): + if (pt[0] >= cntr[0] and pt[1] >= cntr[1]): + tmpPts.append(pt) + elif (p[0] <= cntr[0] and p[1] <= cntr[1]): + if (pt[0] <= cntr[0] and pt[1] <= cntr[1]): + tmpPts.append(pt) + elif (p[0] < cntr[0] and p[1] > cntr[1]): + if (pt[0] <= cntr[0] and pt[1] >= cntr[1]): + tmpPts.append(pt) + else: + if (pt[0] >= cntr[0] and pt[1] <= cntr[1]): + tmpPts.append(pt) + + cntPts = len(tmpPts) + resPt = tmpPts[0] + + if cntPts > 1: + shortestDist = bezmisc.pointdistance(p, tmpPts[0]) + shortI = 0 + + for i in range(1, cntPts): + tmpDist = bezmisc.pointdistance(p, tmpPts[i]) + + if tmpDist < shortestDist: + shortestDist = tmpDist + shortI = i + + resPt = tmpPts[shortI] + + return resPt + +def getIntersectionPt(cntr, p, comps): + obtPts = [] + + if cntr[0] == p[0]: + obtPts = getPtsByX(cntr, comps, True) + elif cntr[1] == p[1]: + obtPts = getPtsByY(cntr, comps, True) + else: + a = (cntr[1] - p[1]) / (cntr[0] - p[0]) + b = cntr[1] - a * cntr[0] + + for i in range(1, len(comps)): + a1 = None + a2 = None + + if (cntr[0] != comps[i][0]): + a2 = (cntr[1] - comps[i][1]) / (cntr[0] - comps[i][0]) + + if (cntr[0] != comps[i - 1][0]): + a1 = (cntr[1] - comps[i - 1][1]) / (cntr[0] - comps[i - 1][0]) + + if ((a < 0 and not a2) or (not a1 and a > a2)): + continue + + if (((a1 < a) and (a1 > 0) and (not a2 or a2 < 0)) or ((not a1 or a1 > 0) and (a2 < 0) and (a < a2)) or (a1 <= a and a <= a2)): + if a == a1: + obtPts.append(comps[i - 1]) + elif a == a2: + obtPts.append(comps[i]) + else: + x = comps[i - 1][0] + + if (comps[i - 1][0] != comps[i][0]): + a3 = (comps[i - 1][1] - comps[i][1]) / (comps[i - 1][0] - comps[i][0]) + b3 = comps[i - 1][1] - a3 * comps[i - 1][0] + x = (b3 - b) / (a - a3) + + y = a * x + b + obtPts.append([x, y]) + + return pickCorrespPt(cntr, p, obtPts) + +def getPolygonCentroid(polygon): + x = 0 + y = 0 + n = len(polygon) + + for vert in polygon: + x += vert[0] + y += vert[1] + + x = x / n + y = y / n + + return [x, y] + +def getDistBetweenFirstPts(comps1, comps2, bbox1, bbox2, nest): + pt1 = comps1[0] + pt2 = None + + if (bbox1[0] == bbox2[0] and bbox1[1] == bbox2[1]): + pt2 = getPtsByX(pt1, comps2, False) + elif (bbox1[2] == bbox2[2] and bbox1[3] == bbox2[3]): + pt2 = getPtsByY(pt1, comps2, False) + elif nest: + centroid = getPolygonCentroid(comps1) + pt2 = getIntersectionPt(centroid, pt1, comps2) + + dist = bezmisc.pointdistance(pt1, pt2) + + return dist + +def getCirclePath(startPt, rx): + curX = startPt[0] + curY = startPt[1] + signRX = signRY = 1 + + res = 'M ' + str(curX) + ',' + str(curY) + ' A ' + + for i in range(4): + res += str(rx) + ',' + str(rx) + ' 0 0 1 ' + + if i % 2 == 0: + signRX = -signRX + else: + signRY = -signRY + + curX += signRX * rx + curY += signRY * rx + + res += str(curX) + ',' + str(curY) + ' ' + + res += 'Z' + + return res + +def getClosedLinearizedSkeletonPath(comps1, comps2, offs, isLine): + path = [] + lengths = [] + + centroid = getPolygonCentroid(comps1) + + if isLine: + for pt2 in comps2: + pt1 = getIntersectionPt(centroid, pt2, comps1) + midPt = getMidPoint(pt1, pt2) + + if offs > 0: + dist = bezmisc.pointdistance(pt1, pt2) + path.append(getPtOnSeg(pt1, pt2, dist, offs * dist)) + else: + path.append(midPt) + + if len(path) > 1: + lengths.append(bezmisc.pointdistance(path[-2], path[-1])) + else: + pt1 = comps1[0] + pt2 = getIntersectionPt(centroid, pt1, comps2) + midPt = getMidPoint(pt1, pt2) + rx = bezmisc.pointdistance(centroid, midPt) + + svgPath = getCirclePath(midPt, rx) + + path, lengths = linearize(modifySkeletonPath(cubicsuperpath.parsePath(svgPath))) + + return (path, lengths) + +def getHorizontalLinearizedSkeletonPath(comps1, comps2, offs, isLine): + path = [] + lengths = [] + + if isLine: + for pt1 in comps1: + pt2 = getPtsByX(pt1, comps2, False) + midPt = getMidPoint(pt1, pt2) + + if offs > 0: + dist = bezmisc.pointdistance(pt1, pt2) + path.append(getPtOnSeg(pt1, pt2, dist, offs * dist)) + else: + path.append(midPt) + + if len(path) > 1: + lengths.append(bezmisc.pointdistance(path[-2], path[-1])) + else: + pt1 = comps1[0] + pt2 = comps2[0] + + firstPt = getMidPoint(pt1, pt2) + path.append(firstPt) + + lastPt = [comps1[-1][0], firstPt[1]] + path.append(lastPt) + + lengths.append(bezmisc.pointdistance(path[-2], path[-1])) + + return (path, lengths) + +def getVerticalLinearizedSkeletonPath(comps1, comps2, offs, isLine): + path = [] + lengths = [] + + if isLine: + for pt1 in comps1: + pt2 = getPtsByY(pt1, comps2, False) + midPt = getMidPoint(pt1, pt2) + + if offs > 0: + dist = bezmisc.pointdistance(pt1, pt2) + path.append(getPtOnSeg(pt1, pt2, dist, offs * dist)) + else: + path.append(midPt) + + if len(path) > 1: + lengths.append(bezmisc.pointdistance(path[-2], path[-1])) + else: + pt1 = comps1[0] + pt2 = comps2[0] + + firstPt = getMidPoint(pt1, pt2) + path.append(firstPt) + + lastPt = [firstPt[0], comps1[-1][1]] + path.append(lastPt) + + lengths.append(bezmisc.pointdistance(path[-2], path[-1])) + + return (path, lengths) + +def getColorAndOpacity(longColor): + ''' + Convert the long into a #rrggbb color value + Conversion back is A + B*256^1 + G*256^2 + R*256^3 + ''' + longColor = long(longColor) + + if longColor < 0: + longColor = longColor & 0xFFFFFFFF + + hexColor = hex(longColor) + + hexOpacity = hexColor[-3:-1] + hexColor = '#' + hexColor[2:-3].rjust(6, '0') + + return (hexColor, hexOpacity) + +def setColorAndOpacity(style, color, opacity): + declarations = style.split(';') + strokeOpacityInStyle = False + newOpacity = round((int(opacity, 16) / 255.0), 8) + + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + + if (prop == 'stroke' and val != color): + declarations[i] = prop + ':' + color + + if prop == 'stroke-opacity': + if val != newOpacity: + declarations[i] = prop + ':' + str(newOpacity) + + strokeOpacityInStyle = True + + if not strokeOpacityInStyle: + declarations.append('stroke-opacity' + ':' + str(newOpacity)) + + return ";".join(declarations) + +def drawfunction(nodes, width, fx): + # x-bounds of the plane + xstart = 0.0 + xend = 2 * pi + # y-bounds of the plane + ybottom = -1.0 + ytop = 1.0 + # size and location of the plane on the canvas + height = 2 + left = 15 + bottom = 15 + height + + # function specified by the user + try: + if fx != "": + f = eval('lambda x: ' + fx.strip('"')) + except SyntaxError: + return [] + + scalex = width / (xend - xstart) + xoff = left + # conver x-value to coordinate + coordx = lambda x: (x - xstart) * scalex + xoff + + scaley = height / (ytop - ybottom) + yoff = bottom + # conver y-value to coordinate + coordy = lambda y: (ybottom - y) * scaley + yoff + + # step is the distance between nodes on x + step = (xend - xstart) / (nodes - 1) + third = step / 3.0 + # step used in calculating derivatives + ds = step * 0.001 + + # initialize function and derivative for 0; + # they are carried over from one iteration to the next, to avoid extra function calculations. + x0 = xstart + y0 = f(xstart) + + # numerical derivative, using 0.001*step as the small differential + x1 = xstart + ds # Second point AFTER first point (Good for first point) + y1 = f(x1) + + dx0 = (x1 - x0) / ds + dy0 = (y1 - y0) / ds + + # path array + a = [] + # Start curve + a.append(['M ', [coordx(x0), coordy(y0)]]) + + for i in range(int(nodes - 1)): + x1 = (i + 1) * step + xstart + x2 = x1 - ds # Second point BEFORE first point (Good for last point) + y1 = f(x1) + y2 = f(x2) + + # numerical derivative + dx1 = (x1 - x2) / ds + dy1 = (y1 - y2) / ds + + # create curve + a.append([' C ', [coordx(x0 + (dx0 * third)), coordy(y0 + (dy0 * third)), + coordx(x1 - (dx1 * third)), coordy(y1 - (dy1 * third)), + coordx(x1), coordy(y1)]]) + + # Next segment's start is this segment's end + x0 = x1 + y0 = y1 + # Assume the function is smooth everywhere, so carry over the derivative too + dx0 = dx1 + dy0 = dy1 + + return a + +def offset(pathComp, dx, dy): + for ctl in pathComp: + for pt in ctl: + pt[0] += dx + pt[1] += dy + +def compsToSVGd(p): + f = p[0] + p = p[1:] + svgd = 'M %.9f,%.9f ' % (f[0], f[1]) + + for x in p: + svgd += 'L %.9f,%.9f ' % (x[0], x[1]) + + return svgd + +def stretchComps(skelComps, patComps, comps1, comps2, bbox1, bbox2, nest, halfHeight, ampl, offs): + res = [] + + if nest: + newPt = None + centroid = getPolygonCentroid(comps1) + + for pt in patComps: + skelPt = getIntersectionPt(centroid, pt, skelComps) + pt1 = getIntersectionPt(centroid, pt, comps1) + pt2 = getIntersectionPt(centroid, pt, comps2) + midPt = getMidPoint(pt1, pt2) + + dist1 = bezmisc.pointdistance(skelPt, pt) + dist2 = bezmisc.pointdistance(midPt, pt1) * ampl + dist3 = dist2 * dist1 / halfHeight + + if (skelPt[0] >= centroid[0] and skelPt[1] >= centroid[1]): + if (pt[0] >= skelPt[0] and pt[1] >= skelPt[1]): + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + elif (skelPt[0] <= centroid[0] and skelPt[1] <= centroid[1]): + if (pt[0] <= skelPt[0] and pt[1] <= skelPt[1]): + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + elif (skelPt[0] < centroid[0] and skelPt[1] > centroid[1]): + if (pt[0] <= skelPt[0] and pt[1] >= skelPt[1]): + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + else: + if (pt[0] >= skelPt[0] and pt[1] <= skelPt[1]): + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + + res.append(newPt) + elif (bbox1[0] == bbox2[0] and bbox1[1] == bbox2[1]): + midY = skelComps[0][1] + newPt = None + + if (patComps[-1][0] != comps1[-1][0] and round(patComps[-1][0], 10) == comps1[-1][0]): + patComps[-1][0] = comps1[-1][0] + + for pt in patComps: + pt1 = getPtsByX(pt, comps1, False) + pt2 = getPtsByX(pt, comps2, False) + midPt = getMidPoint(pt1, pt2) + + dist1 = abs(pt[1] - midY) + dist2 = bezmisc.pointdistance(midPt, pt1) * ampl + dist3 = dist2 * dist1 / halfHeight + + if bbox1[0] < bbox1[1]: + if pt[1] > midY: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + else: + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + if pt[1] < midY: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + else: + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + + res.append(newPt) + elif (bbox1[2] == bbox2[2] and bbox1[3] == bbox2[3]): + midX = skelComps[0][0] + newPt = None + + if (patComps[-1][1] != comps1[-1][1] and round(patComps[-1][1], 10) == comps1[-1][1]): + patComps[-1][1] = comps1[-1][1] + + for pt in patComps: + pt1 = getPtsByY(pt, comps1, False) + pt2 = getPtsByY(pt, comps2, False) + midPt = getMidPoint(pt1, pt2) + + dist1 = abs(pt[0] - midX) + dist2 = bezmisc.pointdistance(midPt, pt1) * ampl + dist3 = dist2 * dist1 / halfHeight + + if bbox1[2] < bbox1[3]: + if pt[0] < midX: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + else: + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + else: + if pt[1] > midX: + newPt = getPtOnSeg(midPt, pt1, bezmisc.pointdistance(midPt, pt1), dist3 - offs) + else: + newPt = getPtOnSeg(midPt, pt2, bezmisc.pointdistance(midPt, pt2), dist3 + offs) + + res.append(newPt) + + return res + +def stretch(pathComp, xscale, yscale, org): + for ctl in pathComp: + for pt in ctl: + pt[0] = org[0] + (pt[0] - org[0]) * xscale + pt[1] = org[1] + (pt[1] - org[1]) * yscale + +class GuillochePattern(pathmodifier.PathModifier): + def __init__(self): + pathmodifier.PathModifier.__init__(self) + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="pattern", + help="Active tab") + self.OptionParser.add_option("--patternFunction", + action="store", type="string", + dest="patternFunction", default="sin", + help="Function of the pattern") + self.OptionParser.add_option("--frequency", + action="store", type="int", + dest="frequency", default=10, + help="Frequency of the function") + self.OptionParser.add_option("--amplitude", + action="store", type="int", + dest="amplitude", default=100, + help="Amplitude of the function") + self.OptionParser.add_option("--phaseOffset", + action="store", type="int", + dest="phaseOffset", default=0, + help="Phase offset of the function") + self.OptionParser.add_option("--offset", + action="store", type="int", + dest="offset", default=0, + help="Offset of the function") + self.OptionParser.add_option("--phaseCoverage", + action="store", type="int", + dest="phaseCoverage", default=100, + help="Phase coverage of the function") + self.OptionParser.add_option("--series", + action="store", type="int", + dest="series", default=1, + help="Series of the function") + self.OptionParser.add_option("--nodes", + action="store", type="int", + dest="nodes", default=20, + help="Count of nodes") + self.OptionParser.add_option("--remove", + action="store", type="inkbool", + dest="remove", default=False, + help="If True, control objects will be removed") + self.OptionParser.add_option("--strokeColor", + action="store", type="string", + dest="strokeColor", default=255, + help="The line's color") + self.OptionParser.add_option("--amplitude1", + action="store", type="float", + dest="amplitude1", default=0.0, + help="Amplitude of first harmonic") + self.OptionParser.add_option("--phase1", + action="store", type="int", + dest="phase1", default=0, + help="Phase offset of first harmonic") + self.OptionParser.add_option("--amplitude2", + action="store", type="float", + dest="amplitude2", default=0.0, + help="Amplitude of second harmonic") + self.OptionParser.add_option("--phase2", + action="store", type="int", + dest="phase2", default=0, + help="Phase offset of second harmonic") + self.OptionParser.add_option("--amplitude3", + action="store", type="float", + dest="amplitude3", default=0.0, + help="Amplitude of third harmonic") + self.OptionParser.add_option("--phase3", + action="store", type="int", + dest="phase3", default=0, + help="Phase offset of third harmonic") + self.OptionParser.add_option("--amplitude4", + action="store", type="float", + dest="amplitude4", default=0.0, + help="Amplitude of fourth harmonic") + self.OptionParser.add_option("--phase4", + action="store", type="int", + dest="phase4", default=0, + help="Phase offset of fourth harmonic") + self.OptionParser.add_option("--amplitude5", + action="store", type="float", + dest="amplitude5", default=0.0, + help="Amplitude of fifth harmonic") + self.OptionParser.add_option("--phase5", + action="store", type="int", + dest="phase5", default=0, + help="Phase offset of fifth harmonic") + + def prepareSelectionList(self): + self.envelopes = self.selected + self.expandGroupsUnlinkClones(self.envelopes, True, False) + self.objectsToPaths(self.envelopes) + + def getFunction(self, func, funcOffs): + res = '' + + presetAmp1 = presetAmp2 = presetAmp3 = presetAmp4 = presetAmp5 = 0.0 + presetPhOf1 = presetPhOf2 = presetPhOf3 = presetPhOf4 = presetPhOf5 = presetOffs = 0 + funcOffs *= self.options.phaseCoverage / 100.0 + + if (func == 'sin' or func == 'cos'): + return func + '(x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + '))' + + if func == 'env1': + presetAmp1 = presetAmp3 = 0.495 + elif func == 'env2': + presetAmp1 = presetAmp3 = 0.65 + presetPhOf1 = presetPhOf3 = 25 + elif func == 'env3': + presetAmp1 = 0.75 + presetPhOf1 = 25 + presetAmp3 = 0.24 + presetPhOf3 = -25 + elif func == 'env4': + presetAmp1 = 1.105 + presetAmp3 = 0.27625 + presetPhOf3 = 50 + elif func == 'env5': + presetAmp1 = 0.37464375 + presetPhOf1 = 25 + presetAmp2 = 0.5655 + presetAmp3 = 0.37464375 + presetPhOf3 = -25 + elif func == 'env6': + presetAmp1 = 0.413725 + presetPhOf1 = 25 + presetAmp2 = 0.45695 + presetPhOf2 = 50 + presetAmp3 = 0.494 + presetPhOf3 = -25 + elif func == 'env7': + presetAmp1 = 0.624 + presetPhOf1 = 25 + presetAmp2 = 0.312 + presetAmp3 = 0.624 + presetPhOf3 = 25 + elif func == 'env8': + presetAmp1 = 0.65 + presetPhOf1 = 50 + presetAmp2 = 0.585 + presetAmp3 = 0.13 + elif func == 'env9': + presetAmp1 = 0.07605 + presetPhOf1 = 25 + presetAmp2 = 0.33345 + presetPhOf2 = 50 + presetAmp3 = 0.468 + presetPhOf3 = -25 + presetAmp4 = 0.32175 + elif func == 'env10': + presetAmp1 = 0.3575 + presetPhOf1 = -25 + presetAmp2 = 0.3575 + presetAmp3 = 0.3575 + presetPhOf3 = 25 + presetAmp4 = 0.3575 + presetPhOf4 = 50 + elif func == 'env11': + presetAmp1 = 0.65 + presetPhOf1 = 25 + presetAmp2 = 0.13 + presetPhOf2 = 50 + presetAmp3 = 0.26 + presetPhOf3 = 25 + presetAmp4 = 0.39 + elif func == 'env12': + presetAmp1 = 0.5525 + presetPhOf1 = -25 + presetAmp2 = 0.0414375 + presetPhOf2 = 50 + presetAmp3 = 0.15884375 + presetPhOf3 = 25 + presetAmp4 = 0.0966875 + presetAmp5 = 0.28315625 + presetPhOf5 = -25 + + harm1 = '(' + str(presetAmp1 + self.options.amplitude1) + ') * cos(1 * (x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf1 + self.options.phase1) / 100.0 * 2 * pi) + '))' + harm2 = '(' + str(presetAmp2 + self.options.amplitude2) + ') * cos(2 * (x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf2 + self.options.phase2) / 100.0 * 2 * pi) + '))' + harm3 = '(' + str(presetAmp3 + self.options.amplitude3) + ') * cos(3 * (x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf3 + self.options.phase3) / 100.0 * 2 * pi) + '))' + harm4 = '(' + str(presetAmp4 + self.options.amplitude4) + ') * cos(4 * (x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf4 + self.options.phase4) / 100.0 * 2 * pi) + '))' + harm5 = '(' + str(presetAmp5 + self.options.amplitude5) + ') * cos(5 * (x + (' + str((self.options.phaseOffset + funcOffs) / 100.0 * 2 * pi) + ')) - (' + str((presetPhOf5 + self.options.phase5) / 100.0 * 2 * pi) + '))' + + res = harm1 + ' + ' + harm2 + ' + ' + harm3 + ' + ' + harm4 + ' + ' + harm5 + + return res + + def lengthToTime(self, l): + ''' + Recieves an arc length l, and returns the index of the segment in self.skelComp + containing the corresponding point, together with the position of the point on this segment. + + If the deformer is closed, do computations modulo the total length. + ''' + if self.skelCompIsClosed: + l = l % sum(self.lengths) + + if l <= 0: + return 0, l / self.lengths[0] + + i = 0 + + while (i < len(self.lengths)) and (self.lengths[i] <= l): + l -= self.lengths[i] + i += 1 + + t = l / self.lengths[min(i, len(self.lengths) - 1)] + + return (i, t) + + def applyDiffeo(self, bpt, vects=()): + ''' + The kernel of this stuff: + bpt is a base point and for v in vectors, v'=v-p is a tangent vector at bpt. + ''' + s = bpt[0] - self.skelComp[0][0] + i, t = self.lengthToTime(s) + + if i == len(self.skelComp) - 1: + x, y = bezmisc.tpoint(self.skelComp[i - 1], self.skelComp[i], t + 1) + dx = (self.skelComp[i][0] - self.skelComp[i - 1][0]) / self.lengths[-1] + dy = (self.skelComp[i][1] - self.skelComp[i - 1][1]) / self.lengths[-1] + else: + x, y = bezmisc.tpoint(self.skelComp[i], self.skelComp[i + 1], t) + dx = (self.skelComp[i + 1][0] - self.skelComp[i][0]) / self.lengths[i] + dy = (self.skelComp[i + 1][1] - self.skelComp[i][1]) / self.lengths[i] + + vx = 0 + vy = bpt[1] - self.skelComp[0][1] + bpt[0] = x + vx * dx - vy * dy + bpt[1] = y + vx * dy + vy * dx + + for v in vects: + vx = v[0] - self.skelComp[0][0] - s + vy = v[1] - self.skelComp[0][1] + v[0] = x + vx * dx - vy * dy + v[1] = y + vx * dy + vy * dx + + def effect(self): + if len(self.options.ids) != 2: + inkex.errormsg(_("This extension requires two selected paths.")) + return + + self.prepareSelectionList() + envs = self.envelopes.values() + + s = envs[0].get('style') + parent = envs[0].getparent() + + fstEnvComps, fstEnvLengths, sndEnvComps, sndEnvLengths, fstEnvBbox, sndEnvBbox, isCorrect = linearizeEnvelopes(envs) + + if not isCorrect: + inkex.errormsg(_("Selected paths are not compatible.")) + return + + areNested = isSkeletonClosed(fstEnvComps) and isSkeletonClosed(sndEnvComps) + + self.skelComp = None + self.lengths = None + + countOfSkelPaths = 1 + distBetweenFirstPts = 1 + funcSeries = self.options.series + + isLine = True if self.options.patternFunction == 'line' else False + + if (isLine and self.options.offset > 0): + distBetweenFirstPts = getDistBetweenFirstPts(fstEnvComps, sndEnvComps, fstEnvBbox, sndEnvBbox, areNested) + countOfSkelPaths = int(distBetweenFirstPts / self.options.offset) + funcSeries = 1 + + for cnt in range(0, countOfSkelPaths): + curOffset = (cnt + 1) * self.options.offset / distBetweenFirstPts + + if areNested: + self.skelComp, self.lengths = getClosedLinearizedSkeletonPath(fstEnvComps, sndEnvComps, curOffset, isLine) + elif (fstEnvBbox[0] == sndEnvBbox[0] and fstEnvBbox[1] == sndEnvBbox[1]): + self.skelComp, self.lengths = getHorizontalLinearizedSkeletonPath(fstEnvComps, sndEnvComps, curOffset, isLine) + elif (fstEnvBbox[2] == sndEnvBbox[2] and fstEnvBbox[3] == sndEnvBbox[3]): + self.skelComp, self.lengths = getVerticalLinearizedSkeletonPath(fstEnvComps, sndEnvComps, curOffset, isLine) + + self.skelCompIsClosed = isSkeletonClosed(self.skelComp) + length = sum(self.lengths) + patternWidth = length / self.options.frequency + funcOffsetStep = 100 / funcSeries + + resPath = '' + + pattern = inkex.etree.Element(inkex.addNS('path','svg')) + + self.options.strokeHexColor, self.strokeOpacity = getColorAndOpacity(self.options.strokeColor) + + if s: + pattern.set('style', setColorAndOpacity(s, self.options.strokeHexColor, self.strokeOpacity)) + + for j in range(funcSeries): + selectedFunction = self.getFunction(self.options.patternFunction, j * funcOffsetStep) + + pattern.set('d', simplepath.formatPath(drawfunction(self.options.nodes, patternWidth, selectedFunction))) + + # Add path into SVG structure + parent.append(pattern) + + # Compute bounding box + bbox = simpletransform.computeBBox([pattern]) + + width = bbox[1] - bbox[0] + height = bbox[3] - bbox[2] + dx = width + + if dx < 0.01: + exit(_("The total length of the pattern is too small.")) + + patternPath = cubicsuperpath.parsePath(pattern.get('d')) + curPath = deepcopy(patternPath) + + xoffset = self.skelComp[0][0] - bbox[0] + yoffset = self.skelComp[0][1] - (bbox[2] + bbox[3]) / 2 + + patternCopies = max(1, int(round(length / dx))) + width = dx * patternCopies + + newPath = [] + + # Repeat pattern to cover whole skeleton + for subPath in curPath: + for i in range(0, patternCopies, 1): + newPath.append(deepcopy(subPath)) + offset(subPath, dx, 0) + + # Offset pattern to the first node of the skeleton + for subPath in newPath: + offset(subPath, xoffset, yoffset) + + curPath = deepcopy(newPath) + + # Stretch pattern to whole skeleton + for subPath in curPath: + stretch(subPath, length / width, 1, self.skelComp[0]) + + for subPath in curPath: + for ctlpt in subPath: + self.applyDiffeo(ctlpt[1], (ctlpt[0], ctlpt[2])) + + # Check if there is a need to close path manually + if self.skelCompIsClosed: + firstPtX = round(curPath[0][0][1][0], 8) + firstPtY = round(curPath[0][0][1][1], 8) + finalPtX = round(curPath[-1][-1][1][0], 8) + finalPtY = round(curPath[-1][-1][1][1], 8) + + if (firstPtX != finalPtX or firstPtY != finalPtY): + curPath[-1].append(curPath[0][0]) + + curPathComps, curPathLengths = linearize(modifySkeletonPath(curPath)) + + if not isLine: + curPathComps = stretchComps(self.skelComp, curPathComps, fstEnvComps, sndEnvComps, fstEnvBbox, sndEnvBbox, areNested, height / 2, self.options.amplitude / 100.0, self.options.offset) + + resPath += compsToSVGd(curPathComps) + + pattern.set('d', resPath) + + if self.options.remove: + parent.remove(envs[0]) + parent.remove(envs[1]) + +if __name__ == '__main__': + e = GuillochePattern() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_guillotine_plus.inx b/fablabchemnitz_guillotine_plus.inx new file mode 100644 index 0000000..9e8de60 --- /dev/null +++ b/fablabchemnitz_guillotine_plus.inx @@ -0,0 +1,23 @@ + + + <_name>Guillotine Plus + fablabchemnitz.de.guillotine_plus + org.inkscape.output.svg.inkscape + fablabchemnitz_guillotine_plus.py + inkex.py + ~/ + guillotined + 300 + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_guillotine_plus.py b/fablabchemnitz_guillotine_plus.py new file mode 100644 index 0000000..abde88d --- /dev/null +++ b/fablabchemnitz_guillotine_plus.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python +''' +guillotine_plus.py + +Copyright (C) 2010 Craig Marshall, craig9 [at] gmail.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +----------------------- + +This script slices an inkscape drawing along the guides, similarly to +the GIMP plugin called "guillotine". It can optionally export to the +same directory as the SVG file with the same name, but with a number +suffix. e.g. + +/home/foo/drawing.svg + +will export to: + +/home/foo/drawing0.png +/home/foo/drawing1.png +/home/foo/drawing2.png +/home/foo/drawing3.png + +etc. + +''' +# standard library +import locale +import os +import sys +try: + from subprocess import Popen, PIPE + bsubprocess = True +except: + bsubprocess = False +# local library +import inkex +import simplestyle + +locale.setlocale(locale.LC_ALL, '') + +def float_sort(a, b): + ''' + This is used to sort the horizontal and vertical guide positions, + which are floating point numbers, but which are held as text. + ''' + return cmp(float(a), float(b)) + +class Guillotine(inkex.Effect): + """Exports slices made using guides""" + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--directory", action="store", + type="string", dest="directory", + default=None, help="") + + self.OptionParser.add_option("--image", action="store", + type="string", dest="image", + default=None, help="") + + self.OptionParser.add_option("--dpi", action="store", + type="string", dest="dpi", + default="90", help="") + + self.OptionParser.add_option("--ignore", action="store", + type="inkbool", dest="ignore", + default=None, help="") + + def get_guides(self): + ''' + Returns all guide elements as an iterable collection + ''' + root = self.document.getroot() + guides = [] + xpath = self.document.xpath("//sodipodi:guide", + namespaces=inkex.NSS) + for g in xpath: + guide = {} + (x, y) = g.attrib['position'].split(',') + if g.attrib['orientation'][:2] == '0,': + guide['orientation'] = 'horizontal' + guide['position'] = y + guides.append(guide) + elif g.attrib['orientation'][-2:] == ',0': + guide['orientation'] = 'vertical' + guide['position'] = x + guides.append(guide) + return guides + + def get_all_horizontal_guides(self): + ''' + Returns all horizontal guides as a list of floats stored as + strings. Each value is the position from 0 in pixels. + ''' + guides = [] + for g in self.get_guides(): + if g['orientation'] == 'horizontal': + guides.append(g['position']) + return guides + + def get_all_vertical_guides(self): + ''' + Returns all vertical guides as a list of floats stored as + strings. Each value is the position from 0 in pixels. + ''' + guides = [] + for g in self.get_guides(): + if g['orientation'] == 'vertical': + guides.append(g['position']) + return guides + + def get_horizontal_slice_positions(self): + ''' + Make a sorted list of all horizontal guide positions, + including 0 and the document height, but not including + those outside of the canvas + ''' + root = self.document.getroot() + horizontals = ['0'] + height = self.unittouu(root.attrib['height']) + for h in self.get_all_horizontal_guides(): + if h >= 0 and float(h) <= float(height): + horizontals.append(h) + horizontals.append(height) + horizontals.sort(cmp=float_sort) + return horizontals + + def get_vertical_slice_positions(self): + ''' + Make a sorted list of all vertical guide positions, + including 0 and the document width, but not including + those outside of the canvas. + ''' + root = self.document.getroot() + verticals = ['0'] + width = self.unittouu(root.attrib['width']) + for v in self.get_all_vertical_guides(): + if v >= 0 and float(v) <= float(width): + verticals.append(v) + verticals.append(width) + verticals.sort(cmp=float_sort) + return verticals + + def get_slices(self): + ''' + Returns a list of all "slices" as denoted by the guides + on the page. Each slice is really just a 4 element list of + floats (stored as strings), consisting of the X and Y start + position and the X and Y end position. + ''' + hs = self.get_horizontal_slice_positions() + vs = self.get_vertical_slice_positions() + slices = [] + for i in range(len(hs)-1): + for j in range(len(vs)-1): + slices.append([vs[j], hs[i], vs[j+1], hs[i+1]]) + return slices + + def get_filename_parts(self): + ''' + Attempts to get directory and image as passed in by the inkscape + dialog. If the boolean ignore flag is set, then it will ignore + these settings and try to use the settings from the export + filename. + ''' + + if self.options.ignore == False: + if self.options.image == "" or self.options.image is None: + inkex.errormsg("Please enter an image name") + sys.exit(0) + return (self.options.directory, self.options.image) + else: + ''' + First get the export-filename from the document, if the + document has been exported before (TODO: Will not work if it + hasn't been exported yet), then uses this to return a tuple + consisting of the directory to export to, and the filename + without extension. + ''' + svg = self.document.getroot() + att = '{http://www.inkscape.org/namespaces/inkscape}export-filename' + try: + export_file = svg.attrib[att] + except KeyError: + inkex.errormsg("To use the export hints option, you " + + "need to have previously exported the document. " + + "Otherwise no export hints exist!") + sys.exit(-1) + dirname, filename = os.path.split(export_file) + filename = filename.rsplit(".", 1)[0] # Without extension + return (dirname, filename) + + def check_dir_exists(self, dir): + if not os.path.isdir(dir): + os.makedirs(dir) + + def get_localised_string(self, str): + return locale.format("%.f", float(str), 0) + + def export_slice(self, s, filename): + ''' + Runs inkscape's command line interface and exports the image + slice from the 4 coordinates in s, and saves as the filename + given. + ''' + svg_file = self.args[-1] + command = "inkscape -d " + self.options.dpi + " -a %s:%s:%s:%s -e \"%s\" \"%s\" " % (self.get_localised_string(s[0]), self.get_localised_string(s[1]), self.get_localised_string(s[2]), self.get_localised_string(s[3]), filename, svg_file) + if bsubprocess: + p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) + return_code = p.wait() + f = p.stdout + err = p.stderr + else: + _, f, err = os.open3(command) + f.close() + + def export_slices(self, slices): + ''' + Takes the slices list and passes each one with a calculated + filename/directory into export_slice. + ''' + dirname, filename = self.get_filename_parts() + output_files = list() + if dirname == '' or dirname == None: + dirname = './' + + dirname = os.path.expanduser(dirname) + dirname = os.path.expandvars(dirname) + dirname = os.path.abspath(dirname) + if dirname[-1] != os.path.sep: + dirname += os.path.sep + self.check_dir_exists(dirname) + i = 0 + for s in slices: + f = dirname + filename + str(i) + ".png" + output_files.append(f) + self.export_slice(s, f) + i += 1 + inkex.errormsg(_("The sliced bitmaps have been saved as:") + "\n\n" + "\n".join(output_files)) + + def effect(self): + slices = self.get_slices() + self.export_slices(slices) + +if __name__ == "__main__": + e = Guillotine() + e.affect() diff --git a/fablabchemnitz_hatch.inx b/fablabchemnitz_hatch.inx new file mode 100644 index 0000000..36da3ce --- /dev/null +++ b/fablabchemnitz_hatch.inx @@ -0,0 +1,69 @@ + + + <_name>Hatch Fill + fablabchemnitz.de.hatch + org.inkscape.output.svg.inkscape + fablabchemnitz_hatch.py + + + <_param name="Header" type="description" xml:space="preserve"> +This extension fills each closed figure in your drawing +with a path consisting of back and forth drawn "hatch" lines. +If any objects are selected, then only those selected objects +will be filled. + +Hatched figures will be grouped with their fills. + + 3.0 + 45 + false + true + 3.0 + true + 1.0 + 3.0 + + (v2.3.0, June 11, 2019) + + + <_param name="aboutpage" type="description" xml:space="preserve"> +Hatch spacing is the distance between hatch lines, +measured in units of screen pixels (px). Angles are in +degrees from horizontal; for example 90 is vertical. + +The Crosshatch option will apply a second set of +hatches, perpendicular to the first. + +The "Connect nearby ends" option will attempt to connect +nearby line ends with a smoothly flowing curve, to improve +the smoothness of plotting. + +The Range parameter sets the distance (in hatch widths) +over which that option searches for segments to join. +Large values may result in hatches where you don't want +them. Consider using a value in the range of 2-4. + +The Inset option allows you to hold back the edges of the +fill somewhat from the edge of your original object. +This can improve performance, as it allows you to more +reliably "color inside the lines" when using pens. + +The hatches will be the same color and width +as the original object. + +The Tolerance parameter affects how precisely +the hatches try to fill the input paths. + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_hatch.py b/fablabchemnitz_hatch.py new file mode 100644 index 0000000..e5a48ff --- /dev/null +++ b/fablabchemnitz_hatch.py @@ -0,0 +1,1736 @@ +#!/usr/bin/env python +# coding=utf-8 + +# eggbot_hatch.py +# +# Generate hatch fills for the closed paths (polygons) in the currently +# selected document elements. If no elements are selected, then all the +# polygons throughout the document are hatched. The fill rule is an odd/even +# rule: odd numbered intersections (1, 3, 5, etc.) are a hatch line entering +# a polygon while even numbered intersections (2, 4, 6, etc.) are the same +# hatch line exiting the polygon. +# +# This extension first decomposes the selected , , , +# , , , and elements into individual +# moveto and lineto coordinates using the same procedure that eggbot.py uses +# for plotting. These coordinates are then used to build vertex lists. +# Only the vertex lists corresponding to polygons (closed paths) are +# kept. Note that a single graphical element may be composed of several +# subpaths, each subpath potentially a polygon. +# +# Once the lists of all the vertices are built, potential hatch lines are +# "projected" through the bounding box containing all of the vertices. +# For each potential hatch line, all intersections with all the polygon +# edges are determined. These intersections are stored as decimal fractions +# indicating where along the length of the hatch line the intersection +# occurs. These values will always be in the range [0, 1]. A value of 0 +# indicates that the intersection is at the start of the hatch line, a value +# of 0.5 midway, and a value of 1 at the end of the hatch line. +# +# For a given hatch line, all the fractional values are sorted and any +# duplicates removed. Duplicates occur, for instance, when the hatch +# line passes through a polygon vertex and thus intersects two edges +# segments of the polygon: the end of one edge and the start of +# another. +# +# Once sorted and duplicates removed, an odd/even rule is applied to +# determine which segments of the potential hatch line are within +# polygons. These segments found to be within polygons are then saved +# and become the hatch fill lines which will be drawn. +# +# With each saved hatch fill line, information about which SVG graphical +# element it is within is saved. This way, the hatch fill lines can +# later be grouped with the element they are associated with. This makes +# it possible to manipulate the two -- graphical element and hatch lines -- +# as a single object within Inkscape. +# +# Note: we also save the transformation matrix for each graphical element. +# That way, when we group the hatch fills with the element they are +# filling, we can invert the transformation. That is, in order to compute +# the hatch fills, we first have had apply ALL applicable transforms to +# all the graphical elements. We need to do that so that we know where in +# the drawing each of the graphical elements are relative to one another. +# However, this means that the hatch lines have been computed in a setting +# where no further transforms are needed. If we then put these hatch lines +# into the same groups as the elements being hatched in the ORIGINAL +# drawing, then the hatch lines will have transforms applied again. So, +# once we compute the hatch lines, we need to invert the transforms of +# the group they will be placed in and apply this inverse transform to the +# hatch lines. Hence the need to save the transform matrix for every +# graphical element. + +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us + +# Updated by Windell H. Oskay, 6/14/2012 +# Added tolerance parameter + +# Update by Daniel C. Newman, 6/20/2012 +# Add min span/gap width + +# Updated by Windell H. Oskay, 1/8/2016 +# Added live preview and correct issue with nonzero min gap +# https://github.com/evil-mad/EggBot/issues/32 + +# Updated by Sheldon B. Michaels, 1/11/2016 thru 3/15/2016 +# shel at shel dot net +# Added feature: Option to inset the hatch segments from boundaries +# Added feature: Option to join hatch segments that are "nearby", to minimize pen lifts +# The joins are made using cubic Bezier segments. +# https://github.com/evil-mad/EggBot/issues/36 + +# Updated by Nathan Depew, 12/6/2017 +# Modified hatch fill to create hatches as a relevant object it found on the SVG tree +# This prevents extremely complex plots from generating glitches +# Modifications are limited to recursivelyTraverseSvg and effect methods + +# Current software version: +# (v2.3.1, June 19, 2019) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import math + +try: + from plot_utils_import import from_dependency_import # plotink + inkex = from_dependency_import('ink_extensions.inkex') + simplepath = from_dependency_import('ink_extensions.simplepath') + simpletransform = from_dependency_import('ink_extensions.simpletransform') + simplestyle = from_dependency_import('ink_extensions.simplestyle') + cubicsuperpath = from_dependency_import('ink_extensions.cubicsuperpath') + cspsubdiv = from_dependency_import('ink_extensions.cspsubdiv') + bezmisc = from_dependency_import('ink_extensions.bezmisc') +except: + import inkex + import simplepath + import simpletransform + import simplestyle + import cubicsuperpath + import cspsubdiv + import bezmisc + +import fablabchemnitz_plot_utils # https://github.com/evil-mad/plotink + +N_PAGE_WIDTH = 3200 +N_PAGE_HEIGHT = 800 + +F_MINGAP_SMALL_VALUE = 0.0000000001 +# Was 0.00001 in the original version which did not have joined lines. +# Reducing this by a factor of 10^5 decreased probability of occurrence of +# the bug in the original, which got confused when the path barely +# grazed a corner. + +BEZIER_OVERSHOOT_MULTIPLIER = 0.75 # evaluation of cubic Bezier curve equation value, +# at x = 0, with +# endpoints at ( -0.5, 0 ), ( +0.5, 0 ) +# and control points at ( -0.5, 1.0 ), ( +0.5, 1.0 ) + +RADIAN_TOLERANCE_FOR_COLINEAR = 0.1 +# Pragmatically adjusted to allow adjacent segments from the same scan line, even short ones, +# to be classified as having the same angle + +RADIAN_TOLERANCE_FOR_ALTERNATING_DIRECTION = 0.1 +# Pragmatic adjustment again, as with colinearity tolerance + +RECURSION_LIMIT = 500 +# Pragmatic - if too high, risk runtime python error; +# if too low, miss some chances for reducing pen lifts + +EXTREME_POS = 1.0E70 # Extremely large positive number +EXTREME_NEG = -1.0E70 # Extremely large negative number + +MIN_HATCH_FRACTION = 0.25 +# Minimum hatch length, as a fraction of the hatch spacing. + +""" +Geometry 101: Determining if two lines intersect + +A line L is defined by two points in space P1 and P2. Any point P on the +line L satisfies + + P = P1 + s (P2 - P1) + +for some value of the real number s in the range (-infinity, infinity). +If we confine s to the range [0, 1] then we've described the line segment +with end points P1 and P2. + +Consider now the line La defined by the points P1 and P2, and the line Lb +defined by the points P3 and P4. Any points Pa and Pb on the lines La and +Lb therefore satisfy + + Pa = P1 + sa (P2 - P1) + Pb = P3 + sb (P4 - P3) + +for some values of the real numbers sa and sb. To see if these two lines +La and Lb intersect, we wish to see if there are finite values sa and sb +for which + + Pa = Pb + +Or, equivalently, we ask if there exists values of sa and sb for which +the equation + + P1 + sa (P2 - P1) = P3 + sb (P4 - P3) + +holds. If we confine ourselves to a two-dimensional plane, and take + + P1 = (x1, y1) + P2 = (x2, y2) + P3 = (x3, y3) + P4 = (x4, y4) + +we then find that we have two equations in two unknowns, sa and sb, + + x1 + sa ( x2 - x1 ) = x3 + sb ( x4 - x3 ) + y1 + sa ( y2 - y1 ) = y3 + sb ( y4 - y3 ) + +Solving these two equations for sa and sb yields, + + sa = [ ( y1 - y3 ) ( x4 - x3 ) - ( y4 - y3 ) ( x1 - x3 ) ] / d + sb = [ ( y1 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x1 - x3 ) ] / d + +where the denominator, d, is given by + + d = ( y4 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x4 - x3 ) + +Substituting these back for the point (x, y) of intersection gives + + x = x1 + sa ( x2 - x1 ) + y = y1 + sa ( y2 - y1 ) + +Note that + +1. The lines are parallel when d = 0 +2. The lines are coincident d = 0 and the numerators for sa & sb are zero +3. For line segments, sa and sb are in the range [0, 1]; any value outside + that range indicates that the line segments do not intersect. +""" + + +def intersect(p1, p2, p3, p4): + """ + Determine if two line segments defined by the four points p1 & p2 and + p3 & p4 intersect. If they do intersect, then return the fractional + point of intersection "sa" along the first line at which the + intersection occurs. + """ + + # Precompute these values -- note that we're basically shifting from + # + # p = p1 + s (p2 - p1) + # + # to + # + # p = p1 + s d + # + # where D is a direction vector. The solution remains the same of + # course. We'll just be computing D once for each line rather than + # computing it a couple of times. + + d21x = p2[0] - p1[0] + d21y = p2[1] - p1[1] + d43x = p4[0] - p3[0] + d43y = p4[1] - p3[1] + + # Denominator + d = d21x * d43y - d21y * d43x + + # Return now if the denominator is zero + if d == 0: + return -1.0 + + # For our purposes, the first line segment given + # by p1 & p2 is the LONG hatch line running through + # the entire drawing. And, p3 & p4 describe the + # usually much shorter line segment from a polygon. + # As such, we compute sb first as it's more likely + # to indicate "no intersection". That is, sa is + # more likely to indicate an intersection with a + # much a long line containing p3 & p4. + + nb = (p1[1] - p3[1]) * d21x - (p1[0] - p3[0]) * d21y + + # Could first check if abs(nb) > abs(d) or if + # the signs differ. + sb = float(nb) / float(d) + if sb < 0 or sb > 1: + return -1.0 + + na = (p1[1] - p3[1]) * d43x - (p1[0] - p3[0]) * d43y + sa = float(na) / float(d) + if sa < 0 or sa > 1: + return -1.0 + + return sa + + +def interstices(self, p1, p2, paths, hatches, b_hold_back_hatches, f_hold_back_steps): + """ + For the line L defined by the points p1 & p2, determine the segments + of L which lie within the polygons described by the paths stored in + "paths" + + p1 -- (x,y) coordinate [list] + p2 -- (x,y) coordinate [list] + paths -- Dictionary of all the paths to check for intersections + + When an intersection of the line L is found with a polygon edge, then + the fractional distance along the line L is saved along with the + lxml.etree node which contained the intersecting polygon edge. This + fractional distance is always in the range [0, 1]. + + Once all polygons have been checked, the list of fractional distances + corresponding to intersections is sorted and any duplicates removed. + It is then assumed that the first intersection is the line L entering + a polygon; the second intersection the line leaving the polygon. This + line segment defined by the first and second intersection points is + thus a hatch fill line we sought to generate. In general, our hatch + fills become the line segments described by intersection i and i+1 + with i an odd value (1, 3, 5, ...). Since we know the lxml.etree node + corresponding to each intersection, we can then correlate the hatch + fill lines to the graphical elements in the original SVG document. + This enables us to group hatch lines with the elements being hatched. + + The hatch line segments are returned by populating a dictionary. + The dictionary is keyed off of the lxml.etree node pointer. Each + dictionary value is a list of 4-tuples, + + (x1, y1, x2, y2) + + where (x1, y1) and (x2, y2) are the (x,y) coordinates of the line + segment's starting and ending points. + """ + + d_and_a = [] + # p1 & p2 is the hatch line + # p3 & p4 is the polygon edge to check + for path in paths: + for subpath in paths[path]: + p3 = subpath[0] + for p4 in subpath[1:]: + s = intersect(p1, p2, p3, p4) + if 0.0 <= s <= 1.0: + # Save this intersection point along the hatch line + if b_hold_back_hatches: + # We will need to know how the hatch meets the polygon segment, so that we can + # calculate the end of a shorter line that stops short + # of the polygon segment. + # We compute the angle now while we have the information required, + # but do _not_ apply it now, as we need the real,original, intersects + # for the odd/even inside/outside operations yet to come. + # Note that though the intersect() routine _could_ compute the join angle, + # we do it here because we go thru here much less often than we go thru intersect(). + angle_hatch_radians = math.atan2(-(p2[1] - p1[1]), (p2[0] - p1[0])) # from p1 toward p2, cartesian coordinates + angle_segment_radians = math.atan2(-(p4[1] - p3[1]), (p4[0] - p3[0])) # from p3 toward p4, cartesian coordinates + angle_difference_radians = angle_hatch_radians - angle_segment_radians + # coerce to range -pi to +pi + if angle_difference_radians > math.pi: + angle_difference_radians -= 2 * math.pi + elif angle_difference_radians < -math.pi: + angle_difference_radians += 2 * math.pi + f_sin_of_join_angle = math.sin(angle_difference_radians) + f_abs_sin_of_join_angle = abs(f_sin_of_join_angle) + if f_abs_sin_of_join_angle != 0.0: # Worrying about case of intersecting a segment parallel to the hatch + prelim_length_to_be_removed = f_hold_back_steps / f_abs_sin_of_join_angle + b_unconditionally_excise_hatch = False + else: + b_unconditionally_excise_hatch = True + + if not b_unconditionally_excise_hatch: + # The relevant end of the segment is the end from which the hatch approaches at an acute angle. + intersection = [0, 0] + intersection[0] = p1[0] + s * (p2[0] - p1[0]) # compute intersection point of hatch with segment + intersection[1] = p1[1] + s * (p2[1] - p1[1]) # intersecting hatch line starts at p1, vectored toward p2, + # but terminates at intersection + # Note that atan2 returns answer in range -pi to pi + # Which end is the approach end of the hatch to the segment? + # The dot product tells the answer: + # if dot product is positive, p2 is at the p4 end, + # else p2 is at the p3 end + # We really don't need to take the time to actually take + # the cosine of the angle, we are just interested in + # the quadrant within which the angle lies. + # I'm sure there is an elegant way to do this, but I'll settle for results just now. + # If the angle is in quadrants I or IV then p4 is the relevant end, otherwise p3 is + # nb: Y increases down, rather than up + # nb: difference angle has been forced to the range -pi to +pi + if abs(angle_difference_radians) < math.pi / 2: + # It's near the p3 the relevant end from which the hatch departs + dist_intersection_to_relevant_end = math.hypot(p3[0] - intersection[0], p3[1] - intersection[1]) + dist_intersection_to_irrelevant_end = math.hypot(p4[0] - intersection[0], p4[1] - intersection[1]) + else: + # It's near the p4 end from which the hatch departs + dist_intersection_to_relevant_end = math.hypot(p4[0] - intersection[0], p4[1] - intersection[1]) + dist_intersection_to_irrelevant_end = math.hypot(p3[0] - intersection[0], p3[1] - intersection[1]) + + # Now, the problem defined in issue 22 is that we may not need to remove the + # entire preliminary length we've calculated. This problem occurs because + # we have so far been considering the polygon segment as a line of infinite extent. + # Thus, we may be holding back at a point where no holdback is required, when + # calculated holdback is well beyond the position of the segment end. + + # To make matters worse, we do not currently know whether we're + # starting a hatch or terminating a hatch, because the duplicates have + # yet to be removed. All we can do then, is calculate the required + # line shortening for both possibilities - and then choose the correct + # one after duplicate-removal, when actually finalizing the hatches. + + # Let's see if either end, or perhaps both ends, has a case of excessive holdback + + # First, default assumption is that neither end has excessive holdback + length_remove_starting_hatch = prelim_length_to_be_removed + length_remove_ending_hatch = prelim_length_to_be_removed + + # Now check each of the two ends + if prelim_length_to_be_removed > (dist_intersection_to_relevant_end + f_hold_back_steps): + # Yes, would be excessive holdback approaching from this direction + length_remove_starting_hatch = dist_intersection_to_relevant_end + f_hold_back_steps + if prelim_length_to_be_removed > (dist_intersection_to_irrelevant_end + f_hold_back_steps): + # Yes, would be excessive holdback approaching from other direction + length_remove_ending_hatch = dist_intersection_to_irrelevant_end + f_hold_back_steps + + d_and_a.append((s, path, length_remove_starting_hatch, length_remove_ending_hatch)) + else: + d_and_a.append((s, path, 123456.0, 123456.0)) # Mark for complete hatch excision, hatch is parallel to segment + # Just a random number guaranteed large enough to be longer than any hatch length + else: + d_and_a.append((s, path, 0, 0)) # zero length to be removed from hatch + + p3 = p4 + + # Return now if there were no intersections + if len(d_and_a) == 0: + return None + + d_and_a.sort() + + # Remove duplicate intersections. A common case where these arise + # is when the hatch line passes through a vertex where one line segment + # ends and the next one begins. + + # Having sorted the data, it's trivial to just scan through + # removing duplicates as we go and then truncating the array + + n = len(d_and_a) + i_last = 1 + i = 1 + last = d_and_a[0] + while i < n: + if (abs(d_and_a[i][0] - last[0])) > F_MINGAP_SMALL_VALUE: + d_and_a[i_last] = last = d_and_a[i] + i_last += 1 + i += 1 + d_and_a = d_and_a[:i_last] + if len(d_and_a) < 2: + return + + # Now, entries with even valued indices into sa[] are where we start + # a hatch line and odd valued indices where we end the hatch line. + + i = 0 + while i < (len(d_and_a) - 1): + if d_and_a[i][1] not in hatches: + hatches[d_and_a[i][1]] = [] + + x1 = p1[0] + d_and_a[i][0] * (p2[0] - p1[0]) + y1 = p1[1] + d_and_a[i][0] * (p2[1] - p1[1]) + x2 = p1[0] + d_and_a[i + 1][0] * (p2[0] - p1[0]) + y2 = p1[1] + d_and_a[i + 1][0] * (p2[1] - p1[1]) + + # These are the hatch ends if we are _not_ holding off from the boundary. + if not b_hold_back_hatches: + hatches[d_and_a[i][1]].append([[x1, y1], [x2, y2]]) + else: + # User wants us to perform a pseudo inset operation. + # We will accomplish this by trimming back the ends of the hatches. + # The amount by which to trim back depends on the angle between the + # intersecting hatch line with the intersecting polygon segment, and + # may well be different at the two different ends of the hatch line. + + # To visualize this, imagine a hatch intersecting a segment that is + # close to parallel with it. The length of the hatch would have to be + # drastically reduced in order that its closest approach to the + # segment be reduced to the desired distance. + + # Imagine a Cartesian coordinate system, with the X axis representing the + # polygon segment, and a line running through the origin with a small + # positive slope being the intersecting hatch line. + + # We see that we want a Y value of the specified hatch width, and that + # at that Y, the distance from the origin to that point is the + # hypotenuse of the triangle. + # Y / cutlength = sin(angle) + # therefore: + # cutlength = Y / sin(angle) + # Fortunately, we have already stored this angle for exactly this purpose. + # For each end, trim back the hatch line by the amount required by + # its own angle. If the resultant diminished hatch is too short, + # remove it from consideration by marking it as already drawn - a + # fiction, but is much quicker than actually removing the hatch from the list. + + f_min_allowed_hatch_length = self.options.hatchSpacing * MIN_HATCH_FRACTION + f_initial_hatch_length = math.hypot(x2 - x1, y2 - y1) + # We did as much as possible of the inset operation back when we were finding intersections. + # We did it back then because at that point we knew more about the geometry than we know now. + # Now we don't know where the ends of the segments are, so we can't address issue 22 here. + f_length_to_be_removed_from_pt1 = d_and_a[i][3] + f_length_to_be_removed_from_pt2 = d_and_a[i + 1][2] + + if (f_initial_hatch_length - (f_length_to_be_removed_from_pt1 + f_length_to_be_removed_from_pt2)) <= f_min_allowed_hatch_length: + pass # Just don't insert it into the hatch list + else: + """ + Use: + def RelativeControlPointPosition( self, distance, fDeltaX, fDeltaY, deltaX, deltaY ): + # returns the point, relative to 0, 0 offset by deltaX, deltaY, + # which extends a distance of "distance" at a slope defined by fDeltaX and fDeltaY + """ + pt1 = self.RelativeControlPointPosition(f_length_to_be_removed_from_pt1, x2 - x1, y2 - y1, x1, y1) + pt2 = self.RelativeControlPointPosition(f_length_to_be_removed_from_pt2, x1 - x2, y1 - y2, x2, y2) + hatches[d_and_a[i][1]].append([[pt1[0], pt1[1]], [pt2[0], pt2[1]]]) + + # Remember the relative start and end of this hatch segment + last_d_and_a = [d_and_a[i], d_and_a[i + 1]] + + i += 2 + + +def inverseTransform(tran): + """ + An SVG transform matrix looks like + + [ a c e ] + [ b d f ] + [ 0 0 1 ] + + And it's inverse is + + [ d -c cf - de ] + [ -b a be - af ] * ( ad - bc ) ** -1 + [ 0 0 1 ] + + And, no reasonable 2d coordinate transform will have + the products ad and bc equal. + + SVG represents the transform matrix column by column as + matrix(a b c d e f) while Inkscape extensions store the + transform matrix as + + [[a, c, e], [b, d, f]] + + To invert the transform stored Inkscape style, we wish to + produce + + [[d/D, -c/D, (cf - de)/D], [-b/D, a/D, (be-af)/D]] + + where + + D = 1 / (ad - bc) + """ + + D = tran[0][0] * tran[1][1] - tran[1][0] * tran[0][1] + if D == 0: + return None + + return [[tran[1][1] / D, -tran[0][1] / D, + (tran[0][1] * tran[1][2] - tran[1][1] * tran[0][2]) / D], + [-tran[1][0] / D, tran[0][0] / D, + (tran[1][0] * tran[0][2] - tran[0][0] * tran[1][2]) / D]] + + +def subdivideCubicPath(sp, flat, i=1): + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv() rewritten + to avoid recurrence. + """ + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if cspsubdiv.maxdist(b) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def distanceSquared(p1, p2): + """ + Pythagorean distance formula WITHOUT the square root. Since + we just want to know if the distance is less than some fixed + fudge factor, we can just square the fudge factor once and run + with it rather than compute square roots over and over. + """ + + dx = p2[0] - p1[0] + dy = p2[1] - p1[1] + + return dx * dx + dy * dy + + +class Eggbot_Hatch(inkex.Effect): + + def __init__(self): + + inkex.Effect.__init__(self) + + self.xmin, self.ymin = (0.0, 0.0) + self.xmax, self.ymax = (0.0, 0.0) + self.paths = {} + self.grid = [] + self.hatches = {} + self.transforms = {} + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.docWidth = float(N_PAGE_WIDTH) + self.docHeight = float(N_PAGE_HEIGHT) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + self.OptionParser.add_option( + "--holdBackSteps", action="store", type="float", + dest="holdBackSteps", default=3.0, + help="How far hatch strokes stay from boundary (steps)") + self.OptionParser.add_option( + "--hatchScope", action="store", type="float", + dest="hatchScope", default=3.0, + help="Radius searched for segments to join (units of hatch width)") + self.OptionParser.add_option( + "--holdBackHatchFromEdges", action="store", dest="holdBackHatchFromEdges", + type="inkbool", default=True, + help="Stay away from edges, so no need for inset") + self.OptionParser.add_option( + "--reducePenLifts", action="store", dest="reducePenLifts", + type="inkbool", default=True, + help="Reduce plotting time by joining some hatches") + self.OptionParser.add_option( + "--crossHatch", action="store", dest="crossHatch", + type="inkbool", default=False, + help="Generate a cross hatch pattern") + self.OptionParser.add_option( + "--hatchAngle", action="store", type="float", + dest="hatchAngle", default=90.0, + help="Angle of inclination for hatch lines") + self.OptionParser.add_option( + "--hatchSpacing", action="store", type="float", + dest="hatchSpacing", default=10.0, + help="Spacing between hatch lines") + self.OptionParser.add_option( + "--tolerance", action="store", type="float", + dest="tolerance", default=20.0, + help="Allowed deviation from original paths") + self.OptionParser.add_option("--tab", # NOTE: value is not used. + action="store", type="string", dest="tab", default="splash", + help="The active tab when Apply was pressed") + + def getDocProps(self): + + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + + self.docHeight = fablabchemnitz_plot_utils.getLength(self, 'height', N_PAGE_HEIGHT) + self.docWidth = fablabchemnitz_plot_utils.getLength(self, 'width', N_PAGE_WIDTH) + + if self.docHeight is None or self.docWidth is None: + return False + else: + return True + + def handleViewBox(self): + + """ + Set up the document-wide transform in the event that the document has an SVG viewbox + """ + + if self.getDocProps(): + viewbox = self.document.getroot().get('viewBox') + if viewbox: + vinfo = viewbox.strip().replace(',', ' ').split(' ') + if vinfo[2] != 0 and vinfo[3] != 0: + sx = self.docWidth / float(vinfo[2]) + sy = self.docHeight / float(vinfo[3]) + self.docTransform = simpletransform.parseTransform('scale({0:f},{1:f})'.format(sx, sy)) + + def addPathVertices(self, path, node=None, transform=None): + + """ + Decompose the path data from an SVG element into individual + subpaths, each starting with an absolute move-to (x, y) + coordinate followed by one or more absolute line-to (x, y) + coordinates. Each subpath is stored as a list of (x, y) + coordinates, with the first entry understood to be a + move-to coordinate and the rest line-to coordinates. A list + is then made of all the subpath lists and then stored in the + self.paths dictionary using the path's lxml.etree node pointer + as the dictionary key. + """ + + if not path or len(path) == 0: + return + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath(path) + if not sp or len(sp) == 0: + return + + # Get a cubic super duper path + p = cubicsuperpath.CubicSuperPath(sp) + if not p or len(p) == 0: + return + + # Apply any transformation + if transform is not None: + simpletransform.applyTransformToPath(transform, p) + + # Now traverse the simplified path + subpaths = [] + subpath_vertices = [] + for sp in p: + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + if len(subpath_vertices): + if distanceSquared(subpath_vertices[0], subpath_vertices[-1]) < 1: + # Keep the prior subpath: it appears to be a closed path + subpaths.append(subpath_vertices) + subpath_vertices = [] + subdivideCubicPath(sp, float(self.options.tolerance / 100)) + for csp in sp: + # Add this vertex to the list of vertices + subpath_vertices.append(csp[1]) + + # Handle final subpath + if len(subpath_vertices): + if distanceSquared(subpath_vertices[0], subpath_vertices[-1]) < 1: + # Path appears to be closed so let's keep it + subpaths.append(subpath_vertices) + + # Empty path? + if len(subpaths) == 0: + return + + # And add this path to our dictionary of paths + self.paths[node] = subpaths + + # And save the transform for this element in a dictionary keyed + # by the element's lxml node pointer + self.transforms[node] = transform + + def getBoundingBox(self): + + """ + Determine the bounding box for our collection of polygons + """ + + self.xmin, self.xmax = EXTREME_POS, EXTREME_NEG + self.ymin, self.ymax = EXTREME_POS, EXTREME_NEG + for path in self.paths: + for subpath in self.paths[path]: + for vertex in subpath: + if vertex[0] < self.xmin: + self.xmin = vertex[0] + elif vertex[0] > self.xmax: + self.xmax = vertex[0] + if vertex[1] < self.ymin: + self.ymin = vertex[1] + elif vertex[1] > self.ymax: + self.ymax = vertex[1] + + def recursivelyTraverseSvg(self, a_node_list, mat_current=None, parent_visibility='visible'): + """ + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , + + All other SVG elements trigger an error (including ) + + Once a supported graphical element is found, we call functions to + create a hatchfill specific to this element. These hatches and their + corresponding transforms are stored in self.hatches and self.transforms + These two dictionaries are used when we return to the effect method + in joinFillsWithNode() + + """ + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + for node in a_node_list: + + """ + Initialize dictionary for each new node + This allows us to create hatch fills as if each + object to be hatched has been selected individually + + """ + self.xmin, self.ymin = (0.0, 0.0) + self.xmax, self.ymax = (0.0, 0.0) + self.paths = {} + self.grid = [] + + # Ignore invisible nodes + v = node.get('visibility', parent_visibility) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # first apply the current matrix transform to this node's transform + mat_new = simpletransform.composeTransform(mat_current, simpletransform.parseTransform(node.get("transform"))) + + if node.tag in [inkex.addNS('g', 'svg'), 'g']: + self.recursivelyTraverseSvg(node, mat_new, parent_visibility=v) + + elif node.tag in [inkex.addNS('use', 'svg'), 'use']: + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get(inkex.addNS('href', 'xlink')) + + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode: + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = simpletransform.composeTransform(mat_new, simpletransform.parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = mat_new + v = node.get('visibility', v) + self.recursivelyTraverseSvg(refnode, mat_new2, parent_visibility=v) + + elif node.tag == inkex.addNS('path', 'svg'): + + path_data = node.get('d') + if path_data: + self.addPathVertices(path_data, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('rect', 'svg'), 'rect']: + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float(node.get('x')) + y = float(node.get('y')) + + w = float(node.get('width', '0')) + h = float(node.get('height', '0')) + a = [['M ', [x, y]], + [' l ', [w, 0]], + [' l ', [0, h]], + [' l ', [-w, 0]], + [' Z', []], + ] + self.addPathVertices(simplepath.formatPath(a), node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('line', 'svg'), 'line']: + + # Convert + # + # + + x1 = float(node.get('x1')) + y1 = float(node.get('y1')) + x2 = float(node.get('x2')) + y2 = float(node.get('y2')) + + a = [['M ', [x1, y1]], + [' L ', [x2, y2]], + ] + self.addPathVertices(simplepath.formatPath(a), node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('polyline', 'svg'), 'polyline']: + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get('points', '').strip() + if pl == '': + continue + pa = pl.split() + if not pa: + continue + pathLength = len( pa ) + if (pathLength < 4): # Minimum of x1,y1 x2,y2 required. + continue + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while (i < (pathLength - 1 )): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + if d: + self.addPathVertices(d, node, mat_new) + + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('polygon', 'svg'), 'polygon']: + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get('points', '').strip() + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + d += " Z" + self.addPathVertices(d, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('ellipse', 'svg'), 'ellipse', + inkex.addNS('circle', 'svg'), 'circle']: + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag in [inkex.addNS('ellipse', 'svg'), 'ellipse']: + rx = float(node.get('rx', '0')) + ry = float(node.get('ry', '0')) + else: + rx = float(node.get('r', '0')) + ry = rx + + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - rx + x2 = cx + rx + + d = 'M {x1:f},{cy:f} ' \ + 'A {rx:f},{ry:f} ' \ + '0 1 0 {x2:f},{cy:f} ' \ + 'A {rx:f},{ry:f} ' \ + '0 1 0 {x1:f},{cy:f}'.format(x1=x1, + x2=x2, + rx=rx, + ry=ry, + cy=cy) + self.addPathVertices(d, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid(float(self.options.hatchAngle), float(self.options.hatchSpacing), True) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid(float(self.options.hatchAngle + 90.0), float(self.options.hatchSpacing), False) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices(self, (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.options.holdBackHatchFromEdges, self.options.holdBackSteps) + + elif node.tag in [inkex.addNS('pattern', 'svg'), 'pattern']: + pass + elif node.tag in [inkex.addNS('metadata', 'svg'), 'metadata']: + pass + elif node.tag in [inkex.addNS('defs', 'svg'), 'defs']: + pass + elif node.tag in [inkex.addNS('namedview', 'sodipodi'), 'namedview']: + pass + elif node.tag in [inkex.addNS('eggbot', 'svg'), 'eggbot']: + pass + elif node.tag in [inkex.addNS('WCB', 'svg'), 'WCB']: + pass + elif node.tag in [inkex.addNS('text', 'svg'), 'text']: + inkex.errormsg('Warning: unable to draw text, please convert it to a path first.') + pass + elif not isinstance(node.tag, basestring): + pass + else: + inkex.errormsg('Warning: unable to hatch object <{0}>, please convert it to a path first.'.format(node.tag)) + pass + + def joinFillsWithNode(self, node, stroke_width, path): + + """ + Generate a SVG element containing the path data "path". + Then put this new element into a with the supplied + node. This means making a new element and moving node + under it with the new as a sibling element. + """ + + if not path or len(path) == 0: + return + + # Make a new SVG element whose parent is the parent of node + parent = node.getparent() + if parent is None: + parent = self.document.getroot() + g = inkex.etree.SubElement(parent, inkex.addNS('g', 'svg')) + # Move node to be a child of this new element + g.append(node) + + # Now make a element which contains the hatches & is a child + # of the new element + stroke_color = '#000000' # default assumption + stroke_width = '1.0' # default value + + try: + style = node.get('style') + if style is not None: + declarations = style.split(';') + for i, declaration in enumerate(declarations): + parts = declaration.split(':', 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + if prop == 'stroke-width': + stroke_width = val.strip() + elif prop == 'stroke': + val = val.strip() + stroke_color = val + finally: + style = {'stroke': '{0}'.format(stroke_color), 'fill': 'none', 'stroke-width': '{0}'.format(stroke_width)} + line_attribs = {'style': simplestyle.formatStyle(style), 'd': path} + tran = node.get('transform') + if tran is not None and tran != '': + line_attribs['transform'] = tran + inkex.etree.SubElement(g, inkex.addNS('path', 'svg'), line_attribs) + + def makeHatchGrid(self, angle, spacing, init=True): # returns True if succeeds in making grid, else False + + """ + Build a grid of hatch lines which encompasses the entire bounding + box of the graphical elements we are to hatch. + + 1. Figure out the bounding box for all of the graphical elements + 2. Pick a rectangle larger than that bounding box so that we can + later rotate the rectangle and still have it cover the bounding + box of the graphical elements. + 3. Center the rectangle of 2 on the origin (0, 0). + 4. Build the hatch line grid in this rectangle. + 5. Rotate the rectangle by the hatch angle. + 6. Translate the center of the rotated rectangle, (0, 0), to be + the center of the bounding box for the graphical elements. + 7. We now have a grid of hatch lines which overlay the graphical + elements and can now be intersected with those graphical elements. + """ + + # If this is the first call, do some one time initializations + # When generating cross hatches, we may be called more than once + if init: + self.getBoundingBox() + self.grid = [] + + # Determine the width and height of the bounding box containing + # all the polygons to be hatched + w = self.xmax - self.xmin + h = self.ymax - self.ymin + + b_bounding_box_exists = ((w != (EXTREME_NEG - EXTREME_POS)) and (h != (EXTREME_NEG - EXTREME_POS))) + ret_value = b_bounding_box_exists + + if b_bounding_box_exists: + # Nice thing about rectangles is that the diameter of the circle + # encompassing them is the length the rectangle's diagonal... + r = math.sqrt(w * w + h * h) / 2.0 + + # Length of a hatch line will be 2r + # Now generate hatch lines within the square + # centered at (0, 0) and with side length at least d + + # While we could generate these lines running back and forth, + # that makes for weird behavior later when applying odd/even + # rules AND there are nested polygons. Instead, when we + # generate the SVG elements with the hatch line + # segments, we can do the back and forth weaving. + + # Rotation information + ca = math.cos(math.radians(90 - angle)) + sa = math.sin(math.radians(90 - angle)) + + # Translation information + cx = self.xmin + (w / 2) + cy = self.ymin + (h / 2) + + # Since the spacing may be fractional (e.g., 6.5), we + # don't try to use range() or other integer iterator + spacing = float(abs(spacing)) + i = -r + while i <= r: + # Line starts at (i, -r) and goes to (i, +r) + x1 = cx + (i * ca) + (r * sa) # i * ca - (-r) * sa + y1 = cy + (i * sa) - (r * ca) # i * sa + (-r) * ca + x2 = cx + (i * ca) - (r * sa) # i * ca - (+r) * sa + y2 = cy + (i * sa) + (r * ca) # i * sa + (+r) * ca + i += spacing + # Remove any potential hatch lines which are entirely + # outside of the bounding box + if (x1 < self.xmin and x2 < self.xmin) or (x1 > self.xmax and x2 > self.xmax): + continue + if (y1 < self.ymin and y2 < self.ymin) or (y1 > self.ymax and y2 > self.ymax): + continue + self.grid.append((x1, y1, x2, y2)) + + return ret_value + + def effect(self): + + global ref_count + global pt_last_position_abs + # Viewbox handling + self.handleViewBox() + + if self.options.hatchSpacing == 0: + self.options.hatchSpacing = 0.1 # Hardcode minimum value + + ref_count = 0 + pt_last_position_abs = [0, 0] + + # Build a list of the vertices for the document's graphical elements + if self.options.ids: + # Traverse the selected objects + for id_ in self.options.ids: + self.recursivelyTraverseSvg([self.selected[id_]], self.docTransform) + else: + # Traverse the entire document + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + # After recursively traversing the svg, we will have a dictionary of transforms and hatches + # Target stroke width will be (doc width + doc height) / 2 / 1000 + # stroke_width_target = ( self.docHeight + self.docWidth ) / 2000 + # stroke_width_target = 1 + stroke_width_target = 1 + # Each hatch line stroke will be within an SVG object which may + # be subject to transforms. So, on an object by object basis, + # we need to transform our target width to a width suitable + # for that object (so that after the object and its hatches are + # transformed, the result has the desired width). + + # To aid in the process, we use a diagonal line segment of length + # stroke_width_target. We then run this segment through an object's + # inverse transform and see what the resulting length of the inversely + # transformed segment is. We could, alternatively, look at the + # x and y scaling factors in the transform and average them. + s = stroke_width_target / math.sqrt(2) + + # Now, dump the hatch fills sorted by which document element + # they correspond to. This is made easy by the fact that we + # saved the information and used each element's lxml.etree node + # pointer as the dictionary key under which to save the hatch + # fills for that node. + + abs_line_segments = {} # Absolute line segments + n_abs_line_segment_total = 0 + n_pen_lifts = 0 + # To implement + for key in self.hatches: + direction = True + if key in self.transforms: + transform = inverseTransform(self.transforms[key]) + # Determine the scaled stroke width for a hatch line + # We produce a line segment of unit length, transform + # its endpoints and then determine the length of the + # resulting line segment. + pt1 = [0, 0] + pt2 = [s, s] + simpletransform.applyTransformToPoint(transform, pt1) + simpletransform.applyTransformToPoint(transform, pt2) + dx = pt2[0] - pt1[0] + dy = pt2[1] - pt1[1] + stroke_width = math.sqrt(dx * dx + dy * dy) + else: + transform = None + stroke_width = 1.0 + + # The transform also applies to the hatch spacing we use when searching for end connections + transformed_hatch_spacing = stroke_width * self.options.hatchSpacing + + path = '' # regardless of whether or not we're reducing pen lifts + pt_last_position_abs = [0, 0] + pt_last_position_abs[0] = 0 + pt_last_position_abs[1] = 0 + f_distance_moved_with_pen_up = 0 + if not self.options.reducePenLifts: + for segment in self.hatches[key]: + if len(segment) < 2: + continue + pt1 = segment[0] + pt2 = segment[1] + # Okay, we're going to put these hatch lines into the same + # group as the element they hatch. That element is down + # some chain of SVG elements, some of which may have + # transforms attached. But, our hatch lines have been + # computed assuming that those transforms have already + # been applied (since we had to apply them so as to know + # where this element is on the page relative to other + # elements and their transforms). So, we need to invert + # the transforms for this element and then either apply + # that inverse transform here and now or set it in a + # transform attribute of the element. Having it + # set in the path element seems a bit counterintuitive + # after the fact (i.e., what's this transform here for?). + # So, we compute the inverse transform and apply it here. + if transform is not None: + simpletransform.applyTransformToPoint(transform, pt1) + simpletransform.applyTransformToPoint(transform, pt2) + # Now generate the path data for the + if direction: + # Go this direction + path += ('M {0:f},{1:f} l {2:f},{3:f} '.format(pt1[0], pt1[1], pt2[0] - pt1[0], pt2[1] - pt1[1])) + else: + # Or go this direction + path += ('M {0:f},{1:f} l {2:f},{3:f} '.format(pt2[0], pt2[1], pt1[0] - pt2[0], pt1[1] - pt2[1])) + + direction = not direction + self.joinFillsWithNode(key, stroke_width, path[:-1]) + + else: + for segment in self.hatches[key]: + if len(segment) < 2: # Copied from original, no idea why this is needed [sbm] + continue + if direction: + pt1 = segment[0] + pt2 = segment[1] + else: + pt1 = segment[1] + pt2 = segment[0] + # Okay, we're going to put these hatch lines into the same + # group as the element they hatch. That element is down + # some chain of SVG elements, some of which may have + # transforms attached. But, our hatch lines have been + # computed assuming that those transforms have already + # been applied (since we had to apply them so as to know + # where this element is on the page relative to other + # elements and their transforms). So, we need to invert + # the transforms for this element and then either apply + # that inverse transform here and now or set it in a + # transform attribute of the element. Having it + # set in the path element seems a bit counterintuitive + # after the fact (i.e., what's this transform here for?). + # So, we compute the inverse transform and apply it here. + if transform is not None: + simpletransform.applyTransformToPoint(transform, pt1) + simpletransform.applyTransformToPoint(transform, pt2) + + # Now generate the path data for the + # BUT we want to combine as many paths as possible to reduce pen lifts. + # In order to combine paths, we need to know all of the path segments. + # The solution to this conundrum is to generate all path segments, + # but instead of drawing them into the path right away, we put them in + # an array where they'll be available for random access + # by our anti-pen-lift algorithm + abs_line_segments[n_abs_line_segment_total] = [pt1, pt2, False] # False indicates that segment has not yet been drawn + n_abs_line_segment_total += 1 + direction = not direction + + # Now have a nice juicy buffer full of line segments with absolute coordinates + f_proposed_neighborhood_radius_squared = self.ProposeNeighborhoodRadiusSquared(transformed_hatch_spacing) + # Just fixed and simple for now - may make function of neighborhood later + + for ref_count in range(n_abs_line_segment_total): # This is the entire range of segments, + # Sets global ref_count to segment which has an end closest to current pen position. + # Doesn't need to select which end is closest, as that will happen below, with n_ref_end_index. + # When we have gone thru this whole range, we will be completely done. + # We only get here again, after all _connected_ segments have been "drawn". + if not abs_line_segments[ref_count][2]: # Test whether this segment has been drawn + # Has not been drawn yet + + # Before we do any irrevocable changes to path, let's see if we are going to be able to append any segments. + # The below solution is inelegant, but has the virtue of being relatively simple to implement. + # Pre-qualify this segment on the issue of whether it has any connecting segments. + # If it does not, then just add the path for this one segment, and go on to the next. + # If it does have connecting segments, we need to go through the recursive logic. + # Lazily, again, select the desired direction of line ahead of time. + + b_found_segment_to_add = False # default assumption + n_ref_end_index_at_closest = 0 + f_closest_distance_squared = 123456 # just a random large number + for n_ref_end_index in range(2): + pt_reference = abs_line_segments[ref_count][n_ref_end_index] + pt_reference_other_end = abs_line_segments[ref_count][not n_ref_end_index] + f_reference_direction_radians = math.atan2(pt_reference_other_end[1] - pt_reference[1], pt_reference_other_end[0] - pt_reference[0]) # from other end to this end + # The following is just a simple copy from the routine in recursivelyAppendNearbySegments procedure + # Look through all possibilities to choose the closest that fulfills all requirements e.g. direction and colinearity + for innerCount in range(n_abs_line_segment_total): # investigate all segments + if not abs_line_segments[innerCount][2]: + # This segment currently undrawn, so it is a candidate for a path extension + # Need to check both ends of each and every proposed segment so we can find the most appropriate one + # Define pt2 in the reference as the end which we want to extend + for nNewSegmentInitialEndIndex in range(2): + # First try initial end of test segment (aka pt1) vs final end (aka pt2) of reference segment + if innerCount != ref_count: # don't investigate self ends + delta_x = abs_line_segments[innerCount][nNewSegmentInitialEndIndex][0] - pt_reference[0] # proposed initial pt1 X minus existing final pt1 X + delta_y = abs_line_segments[innerCount][nNewSegmentInitialEndIndex][1] - pt_reference[1] # proposed initial pt1 Y minus existing final pt1 Y + if (delta_x * delta_x + delta_y * delta_y) < f_proposed_neighborhood_radius_squared: + f_this_distance_squared = delta_x * delta_x + delta_y * delta_y + pt_new_segment_this_end = abs_line_segments[innerCount][nNewSegmentInitialEndIndex] + pt_new_segment_other_end = abs_line_segments[innerCount][not nNewSegmentInitialEndIndex] + f_new_segment_direction_radians = math.atan2(pt_new_segment_this_end[1] - pt_new_segment_other_end[1], pt_new_segment_this_end[0] - pt_new_segment_other_end[0]) # from other end to this end + # If this end would cause an alternating direction, + # then exclude it + if not self.WouldBeAnAlternatingDirection(f_reference_direction_radians, f_new_segment_direction_radians): + pass + elif f_this_distance_squared < f_closest_distance_squared: + # One other thing could rule out choosing this segment end: + # Want to screen and remove two segments that, while close enough, + # should be disqualified because they are colinear. The reason for this is that + # if they are colinear, they arose from the same global grid line, which means + # that the gap between them arises from intersections with the boundary. + # The idea here is that, all things being more-or-less equal, + # we would like to give preference to connecting to a segment + # which is the reverse of our current direction. This makes for better + # bezier curve join. + # The criterion for being colinear is that the reference segment angle is effectively + # the same as the line connecting the reference segment to the end of the new segment. + f_joiner_direction_radians = math.atan2(pt_new_segment_this_end[1] - pt_reference[1], pt_new_segment_this_end[0] - pt_reference[0]) + if not self.AreCoLinear(f_reference_direction_radians, f_joiner_direction_radians): + # not colinear + f_closest_distance_squared = f_this_distance_squared + b_found_segment_to_add = True + n_ref_end_index_at_closest = n_ref_end_index + + # At last we've looked at all the candidate segment ends, as related to all the reference ends + if not b_found_segment_to_add: + # This segment is solitary. + # Must start a new line, not joined to any previous paths + delta_x = abs_line_segments[ref_count][1][0] - abs_line_segments[ref_count][0][0] # end minus start, in original direction + delta_y = abs_line_segments[ref_count][1][1] - abs_line_segments[ref_count][0][1] # end minus start, in original direction + path += ('M {0:f},{1:f} l {2:f},{3:f} '.format(abs_line_segments[ref_count][0][0], + abs_line_segments[ref_count][0][1], + delta_x, + delta_y)) # delta is from initial point + f_distance_moved_with_pen_up += math.hypot( + abs_line_segments[ref_count][0][0] - pt_last_position_abs[0], + abs_line_segments[ref_count][0][1] - pt_last_position_abs[1]) + pt_last_position_abs[0] = abs_line_segments[ref_count][0][0] + delta_x + pt_last_position_abs[1] = abs_line_segments[ref_count][0][1] + delta_y + abs_line_segments[ref_count][2] = True # True flags that this line segment has been + # added to the path to be drawn, so should + # no longer be a candidate for any kind of move. + n_pen_lifts += 1 + else: + # Found segment to add, and we must get to it in absolute terms + delta_x = (abs_line_segments[ref_count][n_ref_end_index_at_closest][0] - + abs_line_segments[ref_count][not n_ref_end_index_at_closest][0]) + # final point (which was closer to the closest continuation segment) minus initial point = delta_x + + delta_y = (abs_line_segments[ref_count][n_ref_end_index_at_closest][1] - + abs_line_segments[ref_count][not n_ref_end_index_at_closest][1]) + # final point (which was closer to the closest continuation segment) minus initial point = delta_y + + path += ('M {0:f},{1:f} l '.format(abs_line_segments[ref_count][not n_ref_end_index_at_closest][0], + abs_line_segments[ref_count][not n_ref_end_index_at_closest][1])) + f_distance_moved_with_pen_up += math.hypot( + abs_line_segments[ref_count][not n_ref_end_index_at_closest][0] - pt_last_position_abs[0], + abs_line_segments[ref_count][not n_ref_end_index_at_closest][1] - pt_last_position_abs[1]) + pt_last_position_abs[0] = abs_line_segments[ref_count][not n_ref_end_index_at_closest][0] + pt_last_position_abs[1] = abs_line_segments[ref_count][not n_ref_end_index_at_closest][1] + # Note that this does not complete the line, as the completion (the delta_x, delta_y part) is being held in abeyance + + # We are coming up on a problem: + # If we add a curve to the end of the line, we have made the curve extend beyond the end of the line, + # and thus beyond the boundaries we should be respecting. + # The solution is to hold in abeyance the actual plotting of the line, + # holding it available for shrinking if a curve is to be added. + # That is + relative_held_line_pos = {0: delta_x, 1: delta_y} + # delta is from initial point + # Will be printed after we know if it must be modified + # to keep the ending join within bounds + pt_last_position_abs[0] += delta_x + pt_last_position_abs[1] += delta_y + + abs_line_segments[ref_count][2] = True # True flags that this line segment has been + # added to the path to be drawn, so should + # no longer be a candidate for any kind of move. + n_pen_lifts += 1 + # Now comes the speedup logic: + # We've just drawn a segment starting at an absolute, not relative, position. + # It was drawn from pt1 to pt2. + # Look for an as-yet-not-drawn segment which has a beginning or ending + # point "near" the end point of this absolute draw, and leave the pen down + # while moving to and then drawing this found line. + # Do this recursively, marking each segment True to show that + # it has been "drawn" already. + # pt2 is the reference point, ie. the point from which the next segment will start + path = self.recursivelyAppendNearbySegments(transformed_hatch_spacing, + 0, + ref_count, + n_ref_end_index_at_closest, + n_abs_line_segment_total, + abs_line_segments, + path, + relative_held_line_pos) + + self.joinFillsWithNode(key, stroke_width, path[:-1]) + + def recursivelyAppendNearbySegments(self, + transformed_hatch_spacing, + n_recursion_count, + n_ref_segment_count, + n_ref_end_index, + n_abs_line_segment_total, + abs_line_segments, + cumulative_path, + relative_held_line_pos): + + global pt_last_position_abs + f_proposed_neighborhood_radius_squared = self.ProposeNeighborhoodRadiusSquared(transformed_hatch_spacing) + + # Look through all possibilities to choose the closest + b_found_segment_to_add = False # default assumption + n_new_segment_end1_index_at_closest = 0 + n_outer_count_at_closest = -1 + f_closest_distance_squared = 123456789.0 # just a random large number + + pt_reference = abs_line_segments[n_ref_segment_count][n_ref_end_index] + pt_reference_other_end = abs_line_segments[n_ref_segment_count][not n_ref_end_index] + f_reference_delta_x = pt_reference_other_end[0] - pt_reference[0] + f_reference_delta_y = pt_reference_other_end[1] - pt_reference[1] + f_reference_direction_radians = math.atan2(f_reference_delta_y, f_reference_delta_x) # from other end to this end + + for outerCount in range(n_abs_line_segment_total): # investigate all segments + if not abs_line_segments[outerCount][2]: + # This segment currently undrawn, so it is a candidate for a path extension + + # Need to check both ends of each and every proposed segment until we find one in the neighborhood + # Defines pt2 in the reference as the end which we want to extend + + for n_new_segment_end1_index in range(2): + # First try initial end of test segment (aka pt1) vs final end (aka pt2) of reference segment + if outerCount != n_ref_segment_count: # don't investigate self ends + delta_x = abs_line_segments[outerCount][n_new_segment_end1_index][0] - pt_reference[0] # proposed initial pt1 X minus existing final pt1 X + delta_y = abs_line_segments[outerCount][n_new_segment_end1_index][1] - pt_reference[1] # proposed initial pt1 Y minus existing final pt1 Y + if (delta_x * delta_x + delta_y * delta_y) < f_proposed_neighborhood_radius_squared: + f_this_distance_squared = delta_x * delta_x + delta_y * delta_y + pt_new_segment_this_end = abs_line_segments[outerCount][n_new_segment_end1_index] + pt_new_segment_other_end = abs_line_segments[outerCount][not n_new_segment_end1_index] + f_new_segment_Dx = pt_new_segment_this_end[0] - pt_new_segment_other_end[0] + f_new_segment_Dy = pt_new_segment_this_end[1] - pt_new_segment_other_end[1] + f_new_segment_direction_radians = math.atan2(f_new_segment_Dy, f_new_segment_Dx) # from other end to this end + if not self.WouldBeAnAlternatingDirection(f_reference_direction_radians, f_new_segment_direction_radians): + # If this end would cause an alternating direction, + # then exclude it regardless of how close it is + pass + + elif f_this_distance_squared < f_closest_distance_squared: + # One other thing could rule out choosing this segment end: + # Want to screen and remove two segments that, while close enough, + # should be disqualified because they are colinear. The reason for this is that + # if they are colinear, they arose from the same global grid line, which means + # that the gap between them arises from intersections with the boundary. + # The idea here is that, all things being more-or-less equal, + # we would like to give preference to connecting to a segment + # which is the reverse of our current direction. This makes for better + # bezier curve join. + # The criterion for being colinear is that the reference segment angle is effectively + # the same as the line connecting the reference segment to the end of the new segment. + + f_joiner_direction_radians = math.atan2(pt_new_segment_this_end[1] - pt_reference[1], pt_new_segment_this_end[0] - pt_reference[0]) + if not self.AreCoLinear(f_reference_direction_radians, f_joiner_direction_radians): + # not colinear + f_closest_distance_squared = f_this_distance_squared + b_found_segment_to_add = True + n_new_segment_end1_index_at_closest = n_new_segment_end1_index + n_outer_count_at_closest = outerCount + delta_x_at_closest = delta_x + delta_y_at_closest = delta_y + + # At last we've looked at all the candidate segment ends + n_recursion_count += 1 + if not b_found_segment_to_add or n_recursion_count >= RECURSION_LIMIT: + cumulative_path += '{0:f},{1:f} '.format(relative_held_line_pos[0], + relative_held_line_pos[1]) # close out this segment + pt_last_position_abs[0] += relative_held_line_pos[0] + pt_last_position_abs[1] += relative_held_line_pos[1] + return cumulative_path # No undrawn segments were suitable for appending, + # or there were so many that we worry about python recursion limit + else: + n_new_segment_end1_index = n_new_segment_end1_index_at_closest + n_new_segment_end2_index = not n_new_segment_end1_index + # n_new_segment_end1_index is 0 for connecting to pt1, + # and is 1 for connecting to pt2 + count = n_outer_count_at_closest # count is the index of the segment to be appended. + delta_x = delta_x_at_closest # delta from final end of incoming segment to initial end of outgoing segment + delta_y = delta_y_at_closest + + # First, move pen to initial end (may be either its pt1 or its pt2) of new segment + + # Insert a bezier curve for this transition element + # To accomplish this, we need information on the incoming and outgoing segments. + # Specifically, we need to know the lengths and angles of the segments in + # order to decide on control points. + f_in_Dx = abs_line_segments[n_ref_segment_count][n_ref_end_index][0] - abs_line_segments[n_ref_segment_count][not n_ref_end_index][0] + f_in_Dy = abs_line_segments[n_ref_segment_count][n_ref_end_index][1] - abs_line_segments[n_ref_segment_count][not n_ref_end_index][1] + # The outgoing deltas are based on the reverse direction of the segment, i.e. the segment pointing back to the joiner bezier curve + f_out_Dx = abs_line_segments[count][n_new_segment_end1_index][0] - abs_line_segments[count][n_new_segment_end2_index][0] # index is [count][start point = 0, final point = 1][0=x, 1=y] + f_out_Dy = abs_line_segments[count][n_new_segment_end1_index][1] - abs_line_segments[count][n_new_segment_end2_index][1] + + length_of_incoming = math.hypot(f_in_Dx, f_in_Dy) + length_of_outgoing = math.hypot(f_out_Dx, f_out_Dy) + + # We are going to trim-up the ends of the incoming and outgoing segments, + # in order to get a curve which reliably does not extend beyond the boundary. + # Crude readings from inkscape on bezier curve overshoot, using control points extended hatch-spacing distance parallel to segment: + # when end points are in line, overshoot 12/16 in direction of segment + # when at 45 degrees, overshoot 12/16 in direction of segment + # when at 60 degrees, overshoot 12/16 in direction of segment + # Conclusion, at any angle, remove 0.75 * hatch spacing from the length of both lines, + # where 0.75 is, by no coincidence, BEZIER_OVERSHOOT_MULTIPLIER + + # If hatches are getting quite short, we can use a smaller Bezier loop at + # the end to squeeze into smaller spaces. We'll use a normal nice smooth + # curve for non-short hatches + f_desired_shorten_for_smoothest_join = transformed_hatch_spacing * BEZIER_OVERSHOOT_MULTIPLIER # This is what we really want to use for smooth curves + # Separately check incoming vs outgoing lengths to see if bezier distances must be reduced, + # then choose greatest reduction to apply to both - lest we go off-course + # Finally, clip reduction to be no less than 1.0 + f_control_point_divider_incoming = 2.0 * f_desired_shorten_for_smoothest_join / length_of_incoming + f_control_point_divider_outgoing = 2.0 * f_desired_shorten_for_smoothest_join / length_of_outgoing + if f_control_point_divider_incoming > f_control_point_divider_outgoing: + f_largest_desired_control_point_divider = f_control_point_divider_incoming + else: + f_largest_desired_control_point_divider = f_control_point_divider_outgoing + if f_largest_desired_control_point_divider < 1.0: + f_control_point_divider = 1.0 + else: + f_control_point_divider = f_largest_desired_control_point_divider + f_desired_shorten = f_desired_shorten_for_smoothest_join / f_control_point_divider + + pt_delta_to_subtract_from_incoming_end = self.RelativeControlPointPosition(f_desired_shorten, f_in_Dx, f_in_Dy, 0, 0) + # Note that this will be subtracted from the _point held in abeyance_. + relative_held_line_pos[0] -= pt_delta_to_subtract_from_incoming_end[0] + relative_held_line_pos[1] -= pt_delta_to_subtract_from_incoming_end[1] + + pt_delta_to_add_to_outgoing_start = self.RelativeControlPointPosition(f_desired_shorten, f_out_Dx, f_out_Dy, 0, 0) + + # We know that when we tack on a curve, we must chop some off the end of the incoming segment, + # and also chop some off the start of the outgoing segment. + # Now, we know we want the control points to be on a projection of each segment, + # in order that there be no abrupt change of plotting angle. The question is, how + # far beyond the endpoint should we place the control point. + pt_relative_control_point_in = self.RelativeControlPointPosition( + transformed_hatch_spacing / f_control_point_divider, + f_in_Dx, + f_in_Dy, + 0, + 0) + pt_relative_control_point_out = self.RelativeControlPointPosition( + transformed_hatch_spacing / f_control_point_divider, + f_out_Dx, + f_out_Dy, + delta_x, + delta_y) + + cumulative_path += '{0:f},{1:f} '.format(relative_held_line_pos[0], + relative_held_line_pos[1]) # close out this segment, which has been modified + pt_last_position_abs[0] += relative_held_line_pos[0] + pt_last_position_abs[1] += relative_held_line_pos[1] + # add bezier cubic curve + cumulative_path += ('c {0:f},{1:f} {2:f},{3:f} {4:f},{5:f} l '.format(pt_relative_control_point_in[0], + pt_relative_control_point_in[1], + pt_relative_control_point_out[0], + pt_relative_control_point_out[1], + delta_x, + delta_y)) + pt_last_position_abs[0] += delta_x + pt_last_position_abs[1] += delta_y + # Next, move pen in appropriate direction to draw the new segment, given that + # we have just moved to the initial end of the new segment. + # This needs special treatment, as we just did some length changing. + delta_x = abs_line_segments[count][n_new_segment_end2_index][0] - abs_line_segments[count][n_new_segment_end1_index][0] + pt_delta_to_add_to_outgoing_start[0] + delta_y = abs_line_segments[count][n_new_segment_end2_index][1] - abs_line_segments[count][n_new_segment_end1_index][1] + pt_delta_to_add_to_outgoing_start[1] + relative_held_line_pos[0] = delta_x # delta is from initial point + relative_held_line_pos[1] = delta_y # Will be printed after we know if it must be modified + + # Mark this segment as drawn + abs_line_segments[count][2] = True + + cumulative_path = self.recursivelyAppendNearbySegments(transformed_hatch_spacing, + n_recursion_count, + count, + n_new_segment_end2_index, + n_abs_line_segment_total, + abs_line_segments, + cumulative_path, + relative_held_line_pos) + return cumulative_path + + def ProposeNeighborhoodRadiusSquared(self, transformed_hatch_spacing): + return transformed_hatch_spacing * transformed_hatch_spacing * self.options.hatchScope * self.options.hatchScope + # The multiplier of x generates a radius of x^0.5 times the hatch spacing. + + @staticmethod + def RelativeControlPointPosition(distance, f_delta_x, f_delta_y, delta_x, delta_y): + + # returns the point, relative to 0, 0 offset by delta_x, delta_y, + # which extends a distance of "distance" at a slope defined by f_delta_x and f_delta_y + pt_return = [0, 0] + + if f_delta_x == 0: + pt_return[0] = delta_x + pt_return[1] = math.copysign(distance, f_delta_y) + delta_y + elif f_delta_y == 0: + pt_return[0] = math.copysign(distance, f_delta_x) + delta_x + pt_return[1] = delta_y + else: + f_slope = math.atan2(f_delta_y, f_delta_x) + pt_return[0] = distance * math.cos(f_slope) + delta_x + pt_return[1] = distance * math.sin(f_slope) + delta_y + + return pt_return + + @staticmethod + def WouldBeAnAlternatingDirection(f_reference_direction_radians, f_new_segment_direction_radians): + # atan2 returns values in the range -pi to +pi, so we must evaluate difference values + # in the range of -2*pi to +2*pi + # f_dir_diff_rad: Direction difference, radians + f_dir_diff_rad = f_reference_direction_radians - f_new_segment_direction_radians + if f_dir_diff_rad < 0: + f_dir_diff_rad += 2 * math.pi + # Without having changed the vector direction of the difference, we have + # now reduced the range to 0 to 2*pi + f_dir_diff_rad -= math.pi # flip opposite direction to coincide with same direction + # Of course they may not be _exactly_ pi different due to osmosis, so allow a tolerance + b_ret_val = abs(f_dir_diff_rad) < RADIAN_TOLERANCE_FOR_ALTERNATING_DIRECTION + + return b_ret_val + + @staticmethod + def AreCoLinear(f_direction_1_radians, f_direction_2_radians): + # allow slight difference in angles, for floating-point indeterminacy + f_abs_delta_radians = abs(f_direction_1_radians - f_direction_2_radians) + if f_abs_delta_radians < RADIAN_TOLERANCE_FOR_COLINEAR: + return True + elif abs(f_abs_delta_radians - math.pi) < RADIAN_TOLERANCE_FOR_COLINEAR: + return True + else: + return False + + +if __name__ == '__main__': + + e = Eggbot_Hatch() + e.affect() diff --git a/fablabchemnitz_hershey_text_alternative.inx b/fablabchemnitz_hershey_text_alternative.inx new file mode 100644 index 0000000..e2238e8 --- /dev/null +++ b/fablabchemnitz_hershey_text_alternative.inx @@ -0,0 +1,109 @@ + + + <_name>Hershey Text Alternative + fablabchemnitz.de.hershey_text_alternative + fablabchemnitz_hershey_text_alternative.py + inkex.py + + + <_param indent="1" name="splashTitle1" type="description" appearance="header" xml:space="preserve"> +Hershey Text + + <_param indent="2" name="splashTitle1b" type="description" xml:space="preserve">A tool to replace text with stroke fonts + +Version 3.0, 2019-06-16 + + + + + <_item value="HersheySans1">Hershey Sans 1-stroke + <_item value="HersheySansMed">Hershey Sans medium + <_item value="HersheySerifMed">Hershey Serif medium + <_item value="HersheySerifMedItalic">Hershey Serif medium italic + <_item value="HersheySerifBold">Hershey Serif bold + <_item value="HersheySerifBoldItalic">Hershey Serif bold italic + <_item value="HersheyScript1">Hershey Script 1-stroke + <_item value="HersheyScriptMed">Hershey Script medium + <_item value="HersheyGothEnglish">Hershey Gothic English + + <_item value="EMSAllure">EMS Allure + <_item value="EMSElfin">EMS Elfin + <_item value="EMSFelix">EMS Felix + <_item value="EMSNixish">EMS Nixish + <_item value="EMSNixishItalic">EMS Nixish Italic + <_item value="EMSOsmotron">EMS Osmotron + <_item value="EMSReadability">EMS Readability + <_item value="EMSReadabilityItalic">EMS Readability Italic + <_item value="EMSTech">EMS Tech + + <_item value="other">Other (given below) + + <_param name="otherFontDesc" type="description" xml:space="preserve"> +Other SVG font name or path (if "Other" selected above): + + HersheySans1 + false + + + <_param name="utilspage" type="description" appearance="header" xml:space="preserve"> +Hershey Text Utility Functions + + + <_item value="sample">Generate font table + <_item value="table">Generate glyph table in selected font + + <_param name="utilspage" type="description" xml:space="preserve"> + +Sample text to use when generating font table: + +The Quick Brown Fox Jumps Over a Lazy Dog + + + <_param name="aboutpage" type="description" xml:space="preserve"> +This extension renders all text (or all selected text) +in your document into using specialized "stroke" or +"engraving" fonts designed for plotters. + +Whereas regular "outline" fonts (e.g., TrueType) work +by filling in the region inside an invisible outline, +engraving fonts are composed only of individual lines +or strokes; much like human handwriting. + +Engraving fonts are used for creating text paths that +computer controlled drawing and cutting machines (from +pen plotters to CNC routers) can efficiently follow. + +A complete user guide is available to download at: + http://wiki.evilmadscientist.com/hershey + +For extended help, click "Apply" with this tab selected. + + + + + <_param name="aboutpage3" type="description" xml:space="preserve"> +The classic Hershey fonts included are derived from +work by Dr. A. V. Hershey. + +Additional modern "EMS" fonts in this distribution are +derivatives created from fonts licensed under the SIL +Open Font License. + +For full credits and license information, please read the +credits embedded within the SVG fonts included with this +distribution. + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_hershey_text_alternative.py b/fablabchemnitz_hershey_text_alternative.py new file mode 100644 index 0000000..cbd4865 --- /dev/null +++ b/fablabchemnitz_hershey_text_alternative.py @@ -0,0 +1,2002 @@ +# coding=utf-8 +# +# Copyright (C) 2019 - Windell H. Oskay, www.evilmadscientist.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +''' +Hershey Text 3.0, 2019-06-16 + +Copyright 2019, Windell H. Oskay, www.evilmadscientist.com + +Major revisions in Hershey Text 3.0: + +1. Migrate font format to use SVG fonts. + - SVG fonts support unicode, meaning that we can use a full range of + characters. We are no longer limited to the ASCII range that the + historical Hershey font formats used. + - Arbitrary curves are supported within glyphs; we are no longer limited to + the straight line segments used in the historical Hershey format. + - The set of fonts can now be expanded. + +2. Add a mechanism for adding your own SVG fonts, either within the + folder containing the default fonts, or from an external file or directory. + This is particularly important for installations where one does not + have access to edit the contents of the Inkscape extensions directory. + +3. Support font mapping: If a given font face is used for a given block of + text, check first to see if a matching SVG font is present. If not, + substitute with the default (selected) stroke font from the list of + included fonts. + +4. Instead of entering text (one line at a time) in the extension, + this script now converts text (either all text, or all selected text) + in the document, replacing it in place. While not every possible + method of formatting text is supported, many are. + +''' + +import os +import sys +import math + +import inkex +import simplestyle + +from simpletransform import composeTransform, parseTransform, formatTransform + +from lxml import etree +from copy import deepcopy + + +class Hershey( inkex.Effect ): + def __init__( self ): + inkex.Effect.__init__( self ) + + self.OptionParser.add_option( "--tab", \ + action="store", type="string", dest="mode", \ + default="render", \ + help="The active tab or mode when Apply was pressed" ) + + self.OptionParser.add_option( "--fontface", \ + action="store", type="string", dest="fontface", \ + default="HersheySans1", \ + help="The selected font face when Apply was pressed" ) + + self.OptionParser.add_option( "--otherfont", \ + action="store", type="string", dest="otherfont", \ + default="", \ + help="Optional other font name or path to use" ) + + self.OptionParser.add_option( "--preserve", \ + action="store", type="inkbool", dest="preserve_text", \ + default=False, \ + help="Preserve original text") + + self.OptionParser.add_option("--action",\ + type="string", action="store", dest="util_mode",\ + default="sample", + help="The utility option selected") + + self.OptionParser.add_option("--text",\ + type="string", action="store", dest="sample_text",\ + default="sample", + help="Text to use for font table") + + PX_PER_INCH = 96.0 + + help_text = '''====== Hershey Text Help ====== + +The Hershey Text extension is designed to replace text in your document (either +selected text or all text) with specialized "stroke" or "engraving" fonts +designed for plotters. + +Whereas regular "outline" fonts (e.g., TrueType) work by filling in the region +inside an invisible outline, stroke fonts are composed only of individual lines +or strokes with finite width; much like human handwriting when using a physical +pen. + +Stroke fonts are most often used for creating text-like paths that computer +controlled drawing and cutting machines (from pen plotters to CNC routers) can +efficiently follow. + +For a general introduction to stroke fonts, please visit: + www.evilmadscientist.com/go/hershey + + ==== Basic operation ==== + +To use Hershey Text, start with a document that contains text objects. Select +the "Render" tab of Hershey Text, and choose a font face from the pop-up menu. + +When you click Apply, it will render all text elements on your page with the +selected stroke-based typeface. If you would like to convert only certain text +elements, click Apply with just those elements selected. + +If the "Preserve original text" box is checked, then the original text elements +on the page will be preserved even when you click Apply. If it is unchecked, +then the original font elements will be removed once rendered. + +You can generate a list of available SVG fonts or a list of all glyphs available +in a given font by using the tools available on the "Utilities" tab. + + + ==== How Hershey Text works ==== + +Hershey Text works by performing font substitution, starting with the text in +your document and replacing it with paths generated from the characters in the +selected SVG font. + +Hershey Text uses fonts in the SVG font format. While SVG fonts are one of the +few types that support stroke-based characters, it is important to note that +converting an outline font to SVG format does not convert it to a stroke based +font. Indeed, most SVG fonts are actually outline fonts. + +This extension *does not* convert outline fonts into stroke fonts, nor does it +convert other fonts into SVG format. Its sole function is to replace the text +in your document with paths from the selected SVG font. + + + ==== Using an external SVG font ==== + +To use an external SVG font -- one not included with the distribution -- select +"Other" for the name of the font in the pop-up menu on the "Render" tab. Then, +do one of the following: + +(1) Add your SVG font file (perhaps "example.svg") to the "svg_fonts" directory +within your Inkscape extensions directory, and enter the name of the font +("example") in the "Other SVG font name or path" box on the "Render" tab. + +or + +(2) Place your SVG font file anywhere on your computer, and enter the full path +to the file in the "Other SVG font name or path" box on the "Render" tab. +A full path might, for example, look like: + /Users/Robin/Documents/AxiDraw/fonts/path_handwriting.svg + + + + ==== Using SVG fonts: Advanced methods ==== + +In addition to using a single SVG font for substitution, you can also use +font name mapping to automatically use particular stroke fonts in place of +specific font faces, to support various automated workflows and to support +the rapid use of multiple stroke font faces within the same document. + +Several SVG fonts are included with this distribution, including both +single-stroke and multi-stroke fonts. These fonts are included within the +"svg_fonts" directory within your Inkscape extensions directory. + +You can select the font that you would like to use from the pop-up menu on the +"Render" Tab. You can also make use of your own SVG fonts. + +Order of preference for SVG fonts: + +(1) If there is an SVG font with name matching that of the font for a given +piece of text, that font will be used. For example, if the original text is in +font "FancyScript" and there is a file in svg_fonts with name FancyScript.svg, +then FancyScript.svg will be used to render the text. + +(2) Otherwise (if there is no SVG font available matching the name of the font +for a given block of text), the face selected from the "Font face" pop-up menu +will be used as the default font when rendering text with Hershey Text. + +(3) You can also enter text in the "Name/Path" box, which can represent one of +the following: (i) a font name (for a font located in the svg_fonts directory), +(ii) the path to a font file elsewhere on your computer, or (iii) the path to a +directory containing (one or more) font files. + +(3a) Using a font name: +If you move a custom SVG font file into your svg_fonts directory, then you can +enter the name of the SVG font in the "Name/Path" text box and select "Other" +from the pop-up menu. Then, the named font will be used as the default. + +(3b) Using a file path: +If you enter the path to an SVG font file in the "Name/Path" text box and +select "Other" from the pop-up menu. Then, that font will be used as the +default. All SVG fonts located in the same directory as that font file will +also be available for name-based font substitution. If there are multiple +font-name matches, files in an external directory take precedence over ones in +the svg_fonts directory. + +(3c) Using a directory path: +If you enter the path to a directory containing SVG font files in the +"Name/Path" text box, then all SVG font files files in that directory will be +available for name-based font substitution. If there are multiple font-name +matches, files in an external directory take precedence over ones in the +svg_fonts directory. + + + +Tips about using these methods with your own custom fonts: + +(A) These methods can be used to render different text elements with different +SVG font faces. You can even rename a font -- either your own custom one or one +of the bundled ones -- to match the name of a font that you're using. For +example, if you rename a script font you name a font to "Helvetica.svg", +then all text in Helvetica will be replaced with that SVG font. + +(B) Using a directory path (3c) is a particularly helpful method if you do +not have access to modify the svg_fonts directory. + + + + ==== Limitations ==== + +This extension renders text into non-editable paths, generated from the +character geometry of SVG fonts. Once you have rendered the text, the resulting +paths can be edited with path editing tools, but not text editing tools. + +Since this extension works by a process of font substitution, text spanning a +single line will generally stay that way, whereas text flowed in a box (that +may span multiple lines) will be re-flowed from scratch. Style information such +as text size and line spacing can be lost in some cases. + +We recommend that you use the live preview option to achieve best results with +this extension. + + +(c) 2019 Windell H. Oskay +Evil Mad Scientist Laboratories +''' + + + def getLengthInches(self, name): + """ + Get the attribute with name "name", and parse it as a length, + into a value and associated units. Return value in inches. + + This may cause scaling issues in some circumstances. Note, for + example, that Adobe Illustrator uses 72 px per inch, and Inkscape + used 90 px per inch prior to version 0.92. + """ + string_to_parse = self.document.getroot().get(name) + if string_to_parse: + v, u = self.parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == 'in': + return float(v) + elif u == 'mm': + return float(v) / 25.4 + elif u == 'cm': + return float(v) / 2.54 + elif u == 'Q' or u == 'q': + return float(v) / (40.0 * 2.54) + elif u == 'pc': + return float(v) / 6.0 + elif u == 'pt': + return float(v) / 72.0 + elif u == '' or u == 'px': + return float(v) / self.PX_PER_INCH + else: # Unsupported units, including '%' + return None + + def parseLengthWithUnits(self, string_to_parse): + """ + Parse an SVG value which may or may not have units attached. + """ + u = 'px' + s = string_to_parse.strip() + if s[-2:] == 'px': # pixels, at a size of PX_PER_INCH per inch + s = s[:-2] + elif s[-2:] == 'in': # inches + s = s[:-2] + u = 'in' + elif s[-2:] == 'mm': # millimeters + s = s[:-2] + u = 'mm' + elif s[-2:] == 'cm': # centimeters + s = s[:-2] + u = 'cm' + elif s[-2:] == 'pt': # points; 1pt = 1/72th of 1in + s = s[:-2] + u = 'pt' + elif s[-2:] == 'pc': # picas; 1pc = 1/6th of 1in + s = s[:-2] + u = 'pc' + elif s[-1:] == 'Q' or s[-1:] == 'q': # quarter-millimeters. 1q = 1/40th of 1cm + s = s[:-1] + u = 'Q' + elif s[-1:] == '%': + u = '%' + s = s[:-1] + try: + v = float(s) + except: + return None, None + return v, u + + + + def unitsToUserUnits(self, input_string): + """ + Custom replacement for the unittouu routine in inkex.py + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + Importantly, also return None for malformed inputs. + """ + + v, u = self.parseLengthWithUnits(input_string) + if v is None: + return None + elif u == '' or u == 'px': + return float(v) + elif u == 'in': + return float(v) * PX_PER_INCH + elif u == 'mm': + return float(v) * PX_PER_INCH / 25.4 + elif u == 'cm': + return float(v) * PX_PER_INCH / 2.54 + elif u == 'Q' or u == 'q': + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == 'pc': + return float(v) * PX_PER_INCH / 6.0 + elif u == 'pt': + return float(v) * PX_PER_INCH / 72.0 + elif u == '%': + return float(v) / 100.0 + else: + # Unsupported units + return None + + + def vb_scale(self, vb, p_a_r, doc_width, doc_height): + """" + Parse SVG viewbox and generate scaling parameters. + Reference documentation: https://www.w3.org/TR/SVG11/coords.html + + Inputs: + vb: Contents of SVG viewbox attribute + p_a_r: Contents of SVG preserveAspectRatio attribute + doc_width: Width of SVG document + doc_height: Height of SVG document + + Output: sx, sy, ox, oy + Scale parameters (sx,sy) and offset parameters (ox,oy) + + """ + if vb is None: + return 1,1,0,0 # No viewbox; return default transform + else: + vb_array = vb.strip().replace(',', ' ').split() + + if len(vb_array) < 4: + return 1,1,0,0 # invalid viewbox; return default transform + + min_x = float(vb_array[0]) # Viewbox offset: x + min_y = float(vb_array[1]) # Viewbox offset: y + width = float(vb_array[2]) # Viewbox width + height = float(vb_array[3]) # Viewbox height + + if width <= 0 or height <= 0: + return 1,1,0,0 # invalid viewbox; return default transform + + d_width = float(doc_width) + d_height = float(doc_height) + + if d_width <= 0 or d_height <= 0: + return 1,1,0,0 # invalid document size; return default transform + + ar_doc = d_height / d_width # Document aspect ratio + ar_vb = height / width # Viewbox aspect ratio + + # Default values of the two preserveAspectRatio parameters: + par_align = "xmidymid" # "align" parameter (lowercased) + par_mos = "meet" # "meetOrSlice" parameter + + if p_a_r is not None: + par_array = p_a_r.strip().replace(',', ' ').lower().split() + if len(par_array) > 0: + par0 = par_array[0] + if par0 == "defer": + if len(par_array) > 1: + par_align = par_array[1] + if len(par_array) > 2: + par_mos = par_array[2] + else: + par_align = par0 + if len(par_array) > 1: + par_mos = par_array[1] + + if par_align == "none": + # Scale document to fill page. Do not preserve aspect ratio. + # This is not default behavior, nor what happens if par_align + # is not given; the "none" value must be _explicitly_ specified. + + sx = d_width/ width + sy = d_height / height + ox = -min_x + oy = -min_y + return sx,sy,ox,oy + + """ + Other than "none", all situations fall into two classes: + + 1) (ar_doc >= ar_vb AND par_mos == "meet") + or (ar_doc < ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in X. + + 2) All other cases, i.e., + (ar_doc < ar_vb AND par_mos == "meet") + or (ar_doc >= ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in Y. + + Note in cases where the scaled viewbox exceeds the document + (page) boundaries (all "slice" cases and many "meet" cases where + an offset value is given) that this routine does not perform + any clipping, but subsequent clipping to the page boundary + is appropriate. + + Besides "none", there are 9 possible values of par_align: + xminymin xmidymin xmaxymin + xminymid xmidymid xmaxymid + xminymax xmidymax xmaxymax + """ + + if (((ar_doc >= ar_vb) and (par_mos == "meet")) + or ((ar_doc < ar_vb) and (par_mos == "slice"))): + # Case 1: Scale document up until VB fills doc in X. + + sx = d_width / width + sy = sx # Uniform aspect ratio + ox = -min_x + + scaled_vb_height = ar_doc * width + excess_height = scaled_vb_height - height + + if par_align in {"xminymin", "xmidymin", "xmaxymin"}: + # Case: Y-Min: Align viewbox to minimum Y of the viewport. + oy = -min_y + # OK: tested with Tall-Meet, Wide-Slice + + elif par_align in {"xminymax", "xmidymax", "xmaxymax"}: + # Case: Y-Max: Align viewbox to maximum Y of the viewport. + oy = -min_y + excess_height + # OK: tested with Tall-Meet, Wide-Slice + + else: # par_align in {"xminymid", "xmidymid", "xmaxymid"}: + # Default case: Y-Mid: Center viewbox on page in Y + oy = -min_y + excess_height / 2 + # OK: Tested with Tall-Meet, Wide-Slice + + return sx,sy,ox,oy + else: + # Case 2: Scale document up until VB fills doc in Y. + + sy = d_height / height + sx = sy # Uniform aspect ratio + oy = -min_y + + scaled_vb_width = height / ar_doc + excess_width = scaled_vb_width - width + + if par_align in {"xminymin", "xminymid", "xminymax"}: + # Case: X-Min: Align viewbox to minimum X of the viewport. + ox = -min_x + # OK: Tested with Tall-Slice, Wide-Meet + + elif par_align in {"xmaxymin", "xmaxymid", "xmaxymax"}: + # Case: X-Max: Align viewbox to maximum X of the viewport. + ox = -min_x + excess_width + # Need test: Tall-Slice, Wide-Meet + + else: # par_align in {"xmidymin", "xmidymid", "xmidymax"}: + # Default case: X-Mid: Center viewbox on page in X + ox = -min_x + excess_width / 2 + # OK: Tested with Tall-Slice, Wide-Meet + + return sx,sy,ox,oy + return 1,1,0,0 # Catch-all: return default transform + + + def strip_quotes(self, fontname): + ''' + A multi-word font name may have a leading and trailing + single or double quotes, depending on the source. + If so, remove those quotes. + ''' + + if fontname.startswith("'") and fontname.endswith("'"): + return fontname[1:-1] + if fontname.startswith('"') and fontname.endswith('"'): + return fontname[1:-1] + return fontname + + def parse_svg_font( self, node_list ): + ''' + Parse an input svg etree, searching for an SVG font. If an + SVG font is found, parse it and return a "digest" containing + structured information from the font. See below for more + about the digest format. + + If the font is not found cannot be parsed, return none. + + Notable limitations: + + (1) This function only parses the first font face found within the + tree. We may, in the future, support discovering multiple fonts + within an SVG file. + + (2) We are only processing left-to-right and horizontal text, + not vertical text nor RTL. + + (3) This function currently performs only certain recursive searches, + within the element. It will not discover fonts nested within + groups or other elements. So far as we know, that is not a limitation + in practice. (If you have a counterexample please contact Evil Mad + Scientist tech support and let us know!) + + (4) Kerning details are not implemented yet. + ''' + + digest = None + + if node_list is None: + return None + + for node in node_list: + if node.tag == inkex.addNS('defs', 'svg') or node.tag == 'defs': + return self.parse_svg_font(node) # Recursive call + + if node.tag == inkex.addNS( 'font', 'svg' ) or node.tag == 'font': + ''' + === Internal structure for storing font information === + + We parse the SVG font file and create a keyed "digest" + from it that we can use while rendering text on the page. + + This "digest" will be added to a dictionary that maps + each font family name to a single digest. + + The digest itself is a dictionary with the following + keys, some of which may have empty values. This format + will allow us to add additional keys at a later date, + to support additional SVG font features. + + font_id (a string) + + font_family (a string) + + glyphs + A dictionary mapping unicode points to a specific + dictionary for each point. See below for more about + the key format. + The dictionary for a given point will include keys: + glyph_name (string) + horiz_adv_x (numeric) + d (string) + + missing_glyph + A dictionary for a single code point, with keys: + horiz_adv_x (numeric) + d (string) + + geometry + A dictionary containing geometric data + Keys will include: + horiz_adv_x (numeric) -- Default value + units_per_em (numeric) + ascent (numeric) + descent (numeric) + x_height (numeric) + cap_height (numeric) + bbox (string) + underline_position (numeric) + scale + A numeric scaling factor computed from the + units_per_em value, which gives the overall scale + ''' + + digest = dict() + geometry = dict() + glyphs = dict() + missing_glyph = dict() + + digest['font_id'] = node.get('id') + + horiz_adv_x = node.get('horiz-adv-x') + + if horiz_adv_x is not None: + geometry['horiz_adv_x'] = float(horiz_adv_x) + # Note: case of no horiz_adv_x value is not handled. + + glyph_tag = inkex.addNS( 'glyph', 'svg' ) + ff_tag = inkex.addNS( 'font-face', 'svg' ) + mg_tag = inkex.addNS( 'missing-glyph', 'svg' ) + + for element in node: + + if element.tag == 'glyph' or element.tag == glyph_tag: + # First, because it is the most common element + try: + uni_text = element.get('unicode') + except: + # Can't use this point if no unicode mapping. + continue + + if uni_text is None: + continue + + uni_text2 = uni_text + if uni_text in glyphs: + # Skip if that unicode point is already in the + # list of glyphs. (There is not currently support + # for alternate glyphs in the font.) + continue + + glyph_dict = dict() + glyph_dict['glyph_name'] = element.get('glyph-name') + + horiz_adv_x = element.get('horiz-adv-x') + + if horiz_adv_x is not None: + glyph_dict['horiz_adv_x'] = float(horiz_adv_x) + else: + glyph_dict['horiz_adv_x'] = geometry['horiz_adv_x'] + + glyph_dict['d'] = element.get('d') # SVG path data + glyphs[uni_text] = glyph_dict + + elif element.tag == 'font-face' or element.tag == ff_tag: + digest['font_family'] = element.get('font-family') + units_per_em = element.get('units-per-em') + + if units_per_em is None: + # Default: 1000, per SVG specification. + geometry['units_per_em'] = 1000.0 + else: + geometry['units_per_em'] = float(units_per_em) + + ascent = element.get('ascent') + if ascent is not None: + geometry['ascent'] = float(ascent) + + descent = element.get('descent') + if descent is not None: + geometry['descent'] = float(descent) + + ''' + # Skip these attributes that we are not currently using + geometry['x_height'] = element.get('x-height') + geometry['cap_height'] = element.get('cap-height') + geometry['bbox'] = element.get('bbox') + geometry['underline_position'] = element.get('underline-position') + ''' + + elif element.tag == 'missing-glyph' or element.tag == mg_tag: + horiz_adv_x = element.get('horiz-adv-x') + + if horiz_adv_x is not None: + missing_glyph['horiz_adv_x'] = float(horiz_adv_x) + else: + missing_glyph['horiz_adv_x'] = geometry['horiz_adv_x'] + + missing_glyph['d'] = element.get('d') # SVG path data + digest['missing_glyph'] = missing_glyph + + + # Main scaling factor + digest['scale'] = 1.0 / geometry['units_per_em'] + + digest['glyphs'] = glyphs + digest['geometry'] = geometry + + return digest + + + def load_font( self, fontname ): + ''' + Attempt to load an SVG font from a file in our list + of (likely) SVG font files. + If we can, add the contents to the font library. + Otherwise, add a "None" entry to the font library. + ''' + + if fontname is None: + return + + if fontname in self.font_dict: + return # Awesome: The font is already loaded. + + if fontname in self.font_file_list: + the_path = self.font_file_list[fontname] + else: + self.font_dict[fontname] = None + return # Font not located. + try: + ''' + Check to see if there is an SVG font file for us to read. + + At present, only one font file will be read per font family; + the name of the file must be FONT_NAME.svg, where FONT_NAME + is the name of the font family. + + Only the first font found in the font file will be read. + Multiple weights and styles within a font family are not + presently supported. + ''' + + f = open(the_path) + p = etree.XMLParser(huge_tree=True) + font_svg = etree.parse(f, parser=p) + f.close() + # return self.parse_svg_font( font_svg.getroot() ) + self.font_dict[fontname] = self.parse_svg_font( font_svg.getroot() ) + + except IOError as e: + self.font_dict[fontname] = None + pass + except: + inkex.errormsg('Error parsing SVG font at ' + str(the_path)) + self.font_dict[fontname] = None + + + def font_table (self): + # Generate display table of all available SVG fonts + + self.options.preserve_text = False + + # Embed text in group to make manipulation easier: + g = inkex.etree.SubElement(self.current_layer, 'g') # type: lxml.etree.ElementTree + + for fontname in self.font_file_list: + self.load_font(fontname) + + font_size = 0.2 # in inches -- will be scaled by viewbox factor. + font_size_text = str( font_size / self.vb_scale_factor) + 'px' + labeltext_style = simplestyle.formatStyle({ 'stroke' : 'none', \ + 'font-size':font_size_text, 'fill' : 'black', \ + 'font-family' : 'sans-serif', 'text-anchor': 'end'}) + + x_offset = font_size / self.vb_scale_factor + y_offset = 1.5 * x_offset + y = y_offset + + for fontname in sorted(self.font_dict): + text_attribs = {'x':'0','y': str(y),'hershey-ignore':'true'} + textline = inkex.etree.SubElement(g,inkex.addNS('text','svg'),text_attribs ) + textline.text = fontname + + textline.set( 'style',labeltext_style) + + text_attribs = {'x':str(x_offset) ,'y': str(y) } + + sampletext_style = { 'stroke' : 'none', 'font-size':font_size_text, 'fill' : 'black', \ + 'font-family' : fontname, 'text-anchor': 'start'} + + sampleline = inkex.etree.SubElement(g,inkex.addNS('text','svg'),text_attribs ) + + try: # python 2 + sampleline.text = self.options.sample_text.decode('utf-8') + except AttributeError: # python 3 + sampleline.text = self.options.sample_text + + sampleline.set( 'style',simplestyle.formatStyle(sampletext_style)) + + y += y_offset + self.recursively_traverse_svg( g, self.docTransform ) + + + def glyph_table (self): + # Generate display table of glyphs within the current SVG font. + # Sorted display of all printable characters in the font _except_ + # missing glyph. + + self.options.preserve_text = False + + fontname = self.font_load_wrapper('not_a_font_name') # force load of default + + if self.font_load_fail: + inkex.errormsg('Font not found; Unable to generate glyph table.') + return + + # Embed in group to make manipulation easier: + g = inkex.etree.SubElement(self.current_layer, 'g') + + missing_glyph = self.font_dict[fontname]['missing_glyph'] + + glyph_count = 0 + for glyph in self.font_dict[fontname]['glyphs']: + if self.font_dict[fontname]['glyphs'][glyph]['d'] is not None: + glyph_count += 1 + + columns = int(math.floor(math.sqrt(glyph_count))) + + font_size = 0.4 # in inches -- will be scaled by viewbox factor. + font_size_text = str( font_size / self.vb_scale_factor) + 'px' + glyph_style = simplestyle.formatStyle({ 'stroke' : 'none', \ + 'font-size':font_size_text, 'fill' : 'black', \ + 'font-family' : fontname, 'text-anchor': 'start'}) + + x_offset = 1.5 * font_size / self.vb_scale_factor + y_offset = x_offset + x = x_offset + y = y_offset + + draw_position = 0 + + for glyph in sorted(self.font_dict[fontname]['glyphs']): + + if self.font_dict[fontname]['glyphs'][glyph]['d'] is None: + continue + y_pos,x_pos = divmod(draw_position,columns) + x = x_offset * ( x_pos + 1) + y = y_offset * ( y_pos + 1) + text_attribs = {'x':str(x),'y': str(y)} + sampleline = inkex.etree.SubElement(g,inkex.addNS('text','svg'),text_attribs ) + sampleline.text = glyph + sampleline.set( 'style',glyph_style) + draw_position = draw_position + 1 + + self.recursively_traverse_svg( g, self.docTransform ) + + + def find_font_files (self): + ''' + Create list of "plausible" SVG font files + + List items in primary svg_fonts directory, typically located in the + directory where this script is being executed from. + + If there is text given in the "Other name/path" input, that text may + represent one of the following: + + (A) The name of a font file, located in the svg_fonts directory. + - This may be given with or without the .svg suffix. + - If it is a font file, and the font face selected is "other", + then use this as the default font face. + + (B) The path to a font file, located elsewhere. + - If it is a font file, and the font face selected is "other", + then use this as the default font face. + - ALSO: Search the directory where that file is located for + any other SVG fonts. + + (C) The path to a directory + - It may or may not have a trailing separator + - Search that directory for SVG fonts. + + This function will create a list of available files that + appear to be SVG (SVG font) files. It does not parse the files. + We will format it as a dictionary, that maps each file name + (without extension) to a path. + ''' + + self.font_file_list = dict() + + # List contents of primary font directory: + font_directory_name = 'svg_fonts' + + font_dir = os.path.realpath( + os.path.join(os.getcwd(), font_directory_name)) + for dir_item in os.listdir(font_dir): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(font_dir,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + + # split off file extension (e.g., ".svg") + root, ext = os.path.splitext(self.options.otherfont) + + # Check for case "(A)": Input text is the name + # of an item in the primary font directory. + if root in self.font_file_list: + # If we already have that name in our font_file_list, + # and "other" is selected, this is now + # our default font face. + if self.options.fontface == "other": + self.options.fontface = root + return + + test_path = os.path.realpath(self.options.otherfont) + + # Check for case "(B)": A file, not in primary font directory + if os.path.isfile(test_path): + directory, file_name = os.path.split(test_path) + root, ext = os.path.splitext(file_name) + self.font_file_list[root] = test_path + + if self.options.fontface == "other": + self.options.fontface = root + + # Also search the directory where that file + # was located for other SVG files (which may be fonts) + + for dir_item in os.listdir(directory): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(directory,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, _ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + return + + # Check for case "(C)": A directory name + if os.path.isdir(test_path): + for dir_item in os.listdir(test_path): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(test_path,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, _ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + + + + + + + def font_load_wrapper( self, fontname ): + ''' + + This implements the following logic: + + * Check to see if the font name is in our lookup table of fonts, + self.font_dict + + * If the font is not listed in font_dict[]: + * Check to see if there is a corresponding SVG font file that + can be opened and parsed. + + * If the font can be opened and parsed: + * Add that font to font_dict. + * Otherwise + * Add the font name to font_dict as None. + + * If the font has value None in font_dict: + * Try to load fallback font. + + * Fallback font: + * If an SVG font matching that in the SVG is not available, + check to see if the default font is available. That font + is given by self.options.fontface + + * If a font is loaded and available, return the font name. + Otherwise, return none. + + ''' + + self.load_font(fontname) # Load the font if available + + ''' + It *may* be worth building one stroke font (e.g., Hershey Sans 1-stroke) as a + variable defined in this file so that it can be used even if no external + SVG font files are available. + ''' + + if self.font_dict[fontname] is None: + + # If we were not able to load the requested font:: + fontname = self.options.fontface # Fallback + if fontname not in self.font_dict: + self.load_font(fontname) + else: + pass + + if self.font_dict[fontname] is None: + self.font_load_fail = True # Set a flag so that we only generate one copy of this error. + return None + else: + return fontname + + + def get_font_char( self, fontname, char ): + ''' + Given a font face name and a character (unicode point), + return an SVG path, horizontal advance value, + and scaling factor. + + If the font is not available by name, use the default font. + ''' + + fontname = self.font_load_wrapper(fontname) # Load the font if available + + if fontname is None: + return None + + try: + scale_factor = self.font_dict[fontname]['scale'] + except: + scale_factor = 0.001 # Default: 1/1000 + + try: + if char not in self.font_dict[fontname]['glyphs']: + x_adv = self.font_dict[fontname]['missing_glyph']['horiz_adv_x'] + + return self.font_dict[fontname]['missing_glyph']['d'], \ + x_adv, scale_factor + else: + x_adv = self.font_dict[fontname]['glyphs'][char]['horiz_adv_x'] + + return self.font_dict[fontname]['glyphs'][char]['d'], \ + x_adv, scale_factor + except: + return None + + + def handle_viewBox( self ): + + self.svg_height = self.getLengthInches( 'height' ) + self.svg_width = self.getLengthInches( 'width' ) + + self.svg = self.document.getroot() + vb = self.svg.get('viewBox') + if vb: + p_a_r = self.svg.get('preserveAspectRatio') + sx,sy,ox,oy = self.vb_scale(vb, p_a_r, self.svg_width, self.svg_height) + else: + sx = 1.0 / float(self.PX_PER_INCH) # Handle case of no viewbox + sy = sx + ox = 0.0 + oy = 0.0 + + # Initial transform of document is based on viewbox, if present: + self.docTransform = parseTransform( + 'scale({0:.6E},{1:.6E}) translate({2:.6E},{3:.6E})'.format( + sx, sy, ox, oy)) + + self.vb_scale_factor = (sx + sy) / 2.0 + # In case of non-square aspect ratio, use average value. + + + def draw_svg_text(self, chardata, parent): + char = chardata['char'] + font_family = chardata['font_family'] + offset = chardata['offset'] + vertoffset = chardata['vertoffset'] + font_height = chardata['font_height'] + scale = 1.0 + + # Stroke scale factor, including external transformations: + stroke_scale = chardata['stroke_scale'] * self.vb_scale_factor + + try: + path_string, adv_x, scale_factor = self.get_font_char( font_family, char ) + except: + adv_x = 0 + path_string = None + scale_factor = 1.0 + + if self.font_load_fail: + return 0 + + scale *= scale_factor * font_height + + hOffset = 0 + vOffset = 0 + trans="" + + # SVG fonts use inverted Y axis; mirror vertically + scale_text = 'scale('+format(scale,'.6f')+', -'+format(scale,'.6f')+')' + + # Combine scales of external transformations with the scaling + # applied by this function: + stroke_width = self.render_width / (scale * stroke_scale) + + # Stroke-width is a css style element; cannot use scientific notation. + # Thus, use variable width for encoding the stroke width factor: + + log_ten = math.log10(stroke_width) + if log_ten > 0: # For stroke_width > 1 + width_string = "{0:.3f}in".format(stroke_width) + else: + prec = int(math.ceil(-log_ten) + 3) + width_string = "{0:.{1}f}in".format(stroke_width, prec) + + p_style = {'stroke-width': width_string} + + xOffset = offset + hOffset + yOffset = vertoffset + vOffset + + trans += 'translate('+format(xOffset,'.6f')+','+format(yOffset,'.6f')+')' + trans += scale_text + text_attribs = {'d':path_string, 'transform':trans, 'style': simplestyle.formatStyle(p_style)} + + if path_string is not None: + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), text_attribs) + self.OutputGenerated = True + + return offset + float(adv_x) * scale # new horizontal offset value + + + def recursivelyGetEnclosingTransform( self, node ): + + ''' + Determine the cumulative transform which node inherits from + its chain of ancestors. + ''' + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform( node ) + node_transform = node.get( 'transform', None ) + if node_transform is None: + return parent_transform + else: + tr = parseTransform( node_transform ) + if parent_transform is None: + return tr + else: + return composeTransform( parent_transform, tr ) + else: + return self.docTransform + + def recursivelyParseFlowRoot( self, NodeList, parent_info): + + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + line_spacing_local = parent_info['line_spacing'] + text_align_local = parent_info['align'] + + for node in NodeList: + try: + node_style = simplestyle.parseStyle(node.get('style')) + except: + pass + + try: + font_height = node_style['font-size'] + font_height_local = self.unitsToUserUnits(font_height) + except: + pass + + try: + font_family_local = self.strip_quotes(node_style['font-family']) + except: + pass + + try: + line_spacing = node_style['line-height'] + if "%" in line_spacing: # Handle percentage line spacing (e.g., 125%) + line_spacing_local = float(line_spacing.rstrip("%")) / 100.0 + else: + line_spacing_local = float(line_spacing) # (e.g., line-height:1.25) + except: + pass + + try: + text_align_local = node_style['text-align'] # Use text-anchor in text nodes + except: + pass + + if node.text is not None: + self.text_string += node.text + + for char in node.text: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + if ((node.tag == inkex.addNS("flowPara", "svg")) or (node.tag == inkex.addNS("flowSpan", "svg")) + or (node.tag == 'flowPara') or (node.tag == 'flowSpan')): + + the_style = dict() + the_style['font_height'] = font_height_local + the_style['font_family'] = font_family_local + the_style['line_spacing'] = line_spacing_local + the_style['align'] = text_align_local + + self.recursivelyParseFlowRoot( node, the_style ) + + if node.tail is not None: + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + line_spacing_local = parent_info['line_spacing'] + + text_align_local = parent_info['align'] + self.text_string += node.tail + for char in node.tail: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + if node.tag == inkex.addNS("flowPara", "svg"): + self.text_string += "\n" # Conclude every flowpara with a return + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + def recursivelyParseTextNode( self, node, parent_info): + + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + anchor_local = parent_info['anchor'] + x_local = parent_info['x_pos'] + y_local = parent_info['y_pos'] + parent_line_spacing = parent_info['line_spacing'] + + try: + node_style = simplestyle.parseStyle(node.get('style')) + except: + pass + + try: + font_height = node_style["font-size"] + font_height_local = self.unitsToUserUnits(font_height) + except: + pass + + try: + font_family_local = self.strip_quotes(node_style['font-family']) + except: + pass + + try: + anchor_local = node_style['text-anchor'] # Use text-anchor in text nodes + except: + pass + + try: + xTemp = node.get('x') + if xTemp is not None: + x_local = xTemp + except: + pass + + try: + yTemp = node.get('y') + if yTemp is not None: + y_local = yTemp + else: + # Special case, to handle multi-line text given by tspan + # elements that do not have y values + y_local = float(y_local) + self.line_number * parent_line_spacing * font_height_local + except: + pass + + if node.text is not None: + self.text_string += node.text + + for char in node.text: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_aligns.append(anchor_local) + self.text_x.append(x_local) + self.text_y.append(y_local) + + if node.tail is not None: + _stripped_tail = node.tail.strip() + if _stripped_tail is not None: + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + text_align_local = parent_info['anchor'] + x_local = parent_info['x_pos'] + y_local = parent_info['y_pos'] + self.text_string += _stripped_tail + for char in _stripped_tail: + self.text_heights.append(font_height_local) + self.text_families.append(font_family_local) + self.text_aligns.append(text_align_local) + self.text_x.append(x_local) + self.text_y.append(y_local) + + for subNode in node: + # If text is located within a subnode of this node, process that subnode, with this very routine. + + if ((subNode.tag == inkex.addNS( 'tspan', 'svg' )) or (subNode.tag == 'tspan')): + # Note: There may be additional types of text tags that we should recursively search as well. + + node_info = dict() + node_info['font_height'] = font_height_local + node_info['font_family'] = font_family_local + node_info['anchor'] = anchor_local + node_info['x_pos'] = x_local + node_info['y_pos'] = y_local + node_info['line_spacing'] = parent_line_spacing + + self.recursivelyParseTextNode( subNode, node_info) + + # Increment after each tspan: + self.line_number = self.line_number + 1 + + def recursively_traverse_svg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible' ): + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + continue + + # First apply the current matrix transform to this node's tranform + + matNew = composeTransform( matCurrent, parseTransform( node.get( "transform" ) ) ) + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + recurseGroup = True + ink_label = node.get( inkex.addNS( 'label', 'inkscape' ) ) + + if not ink_label: + pass + else: + if (ink_label == 'Hershey Text'): + recurseGroup = False # Do not traverse groups of rendered text. + if recurseGroup: + self.recursively_traverse_svg( node, matNew, v ) + + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use': + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get( inkex.addNS( 'href', 'xlink' ) ) + if not refid: + continue # missing reference + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath( path ) + + if refnode: + local_transform = parseTransform( node.get( "transform" ) ) + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or (y != 0 ): + matNew2 = composeTransform(local_transform, parseTransform('translate({0:.6E},{1:.6E})'.format(x, y))) + else: + matNew2 = local_transform + + try: + ref_group = inkex.etree.SubElement(aNodeList, 'g') # Add a subgroup + except TypeError: + inkex.errormsg('Unable to process selected nodes. Consider unlinking cloned text.') + continue + + try: + id = ref_group.get( 'id' ) + except AttributeError: + id = self.uniqueId(None,True) + ref_group.set( 'id', id) + + ref_group.set( 'transform',formatTransform(local_transform)) + + id_list = [] + + for subnode in refnode: + try: + id = subnode.get( 'id' ) + except AttributeError: + id = self.uniqueId(None,True) + subnode.set( 'id', id) + + if id not in id_list: + ref_group.append( deepcopy(subnode) ) # add a node to the end of our current nodelist + id_list.append(id) + + for subnode in ref_group: + # The copied text elements should be removed at the end, + # or they will persist if original elements are preserved. + self.nodes_to_delete.append(subnode) + + #Preserve original element? + if not self.options.preserve_text: + self.nodes_to_delete.append(node) + + + elif (node.tag == inkex.addNS('text','svg')) or (node.tag == 'text') or (node.tag == inkex.addNS("flowRoot", "svg")): + + # Variables are initially zeroed for each text object. + self.baseline_offset = 0.0 # Baseline Shift + self.indent_offset = 0.0 + self.kern_offset = 0.0 + self.fontSize_offset = 0.0 # Deviation of font size away from nominal + self.newLine = True # Flag for when we start a new line of text, for use with indents. + + startX = 0 # Defaults; Fail gracefully in case xy position is not given. + startY = 0 + + # Default line spacing and font height: 125%, 16 px + line_spacing = "1.25" # Default + font_height = self.unitsToUserUnits("16px") # Default + + startX = node.get('x') # XY Position of element + startY = node.get('y') + + bounding_rect = False + rect_height = 100 #default size of bounding rectangle for flowroot object + rect_width = 100 #default size of bounding rectangle for flowroot object + transform = "" #transform (scale, translate, matrix, etc.) + text_align = "start" + + try: + hershey_ignore = node.get('hershey-ignore') + if hershey_ignore is not None: + continue # If the attribute is present, skip this node. + except: + pass + + try: + node_style = simplestyle.parseStyle(node.get('style')) + except: + pass + + font_height = 0 + try: + font_height_temp = node_style['font-size'] + font_height = self.unitsToUserUnits(font_height_temp) + except: + pass + + try: + font_family = self.strip_quotes(node_style['font-family']) + except: + pass + + try: + line_spacing_temp = node_style['line-height'] + if "%" in line_spacing_temp: # Handle percentage line spacing (e.g., 125%) + line_spacing = float(line_spacing_temp.rstrip("%")) / 100.0 + else: + line_spacing = float(line_spacing_temp) # (e.g., line-height:1.25) + except: + pass + + try: + transform = node.get('transform') + except: + pass + + if (transform is not None): + transform2 = parseTransform( transform ) + + ''' + Compute estimate of transformation scale applied to + this element, for purposes of calculating the + stroke width to apply. When all transforms are applied + and our elements are displayed on the page, we want the + final visible stroke width to be reasonable. + Transformation matrix is [[a c e][b d f]] + scale_x = sqrt(a * a + b * b), + scale_y = sqrt(c * c + d * d) + Take estimated scale as the mean of the two. + ''' + + scale_x = math.sqrt(transform2[0][0] * transform2[0][0] + + transform2[1][0] * transform2[1][0]) + scale_y = math.sqrt(transform2[0][1] * transform2[0][1] + + transform2[1][1] * transform2[1][1]) + + scale_r = (scale_x + scale_y) / 2.0 # Average. ¯\_(ツ)_/¯ + else: + scale_r = 1.0 + + id = node.get('id') + + #Initialize text attribute lists for each top-level text object: + self.text_string = "" + self.text_families = [] # Lis of font family for characters in the string + self.text_heights = [] # List of font heights + self.text_spacings = [] # List of vertical line heights + self.text_aligns = [] # List of horizontal alignment values + self.text_x = [] #List; x-coordinate of text line start + self.text_y = [] #List; y-coordinate of text line start + + # Group generated paths together, to make the rendered letters + # easier to manipulate in Inkscape once generated: + g_attribs = {inkex.addNS('label','inkscape'):'Hershey Text' } + parent = node.getparent() + g = inkex.etree.SubElement(parent, 'g', g_attribs) + style = { 'stroke' : '#000000', 'fill' : 'none', \ + 'stroke-linecap' : 'round', 'stroke-linejoin' : 'round' } + + # Apply rounding to ends to improve final engraved text appearance. + g.set( 'style',simplestyle.formatStyle(style)) + + # Some common variables used in both cases A and B: + strPos = 0 # Position through the full string that we are rendering + i = 0 # Dummy (index) variable for looping over letters in string + w = 0 # Initial spacing offset + wTemp = 0 # Temporary variable for horizontal spacing offset + widthThisLine = 0 # Estimated width of characters to be stored on this line + + ''' + CASE A: Handle flowed text nodes + ''' + + if node.tag == inkex.addNS("flowRoot", "svg"): + + try: + text_align = node_style['text-align'] # Use text-align, not text-anchor, in flowroot + except: + pass + + #selects the flowRegion's child (svg:rect) to get @X and @Y + flowref = self.xpathSingle('/svg:svg//*[@id="%s"]/svg:flowRegion[1]' % id)[0] + + if flowref.tag == inkex.addNS("rect", "svg"): + startX = flowref.get('x', '0') + startY = flowref.get('y', '0') + rect_height = flowref.get('height') + rect_width = float(flowref.get('width')) + bounding_rect = True + + elif flowref.tag == inkex.addNS( 'use', 'svg' ) or flowref.tag == 'use': + pass + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + # 3. We may be able to unlink clones using the code in pathmodifier.py + + # The following code can render text flowed into a rectangle object. + # HOWEVER, it does not handle the various transformations that could occur + # be present on those objects, and does not handle more general cases, such + # as a rotated rectangle -- for which text *should* flow in a diamond shape. + # For the time being, we skip these and issue a warning. + # + # refid = flowref.get( inkex.addNS( 'href', 'xlink' ) ) + # if refid is not None: + # # [1:] to ignore leading '#' in reference + # path = '//*[@id="%s"]' % refid[1:] + # refnode = flowref.xpath( path ) + # if refnode is not None: + # refnode = refnode[0] + # if refnode.tag == inkex.addNS("rect", "svg"): + # startX = refnode.get('x") + # startY = refnode.get('y") + # rect_height = refnode.get('height") + # rect_width = refnode.get('width") + # bounding_rect = True + + if not bounding_rect: + self.warnUnflow = True + continue + + ''' + Recursively loop through content of the flowroot object, + looping through text, flowpara, and other things. + + Create multiple lists: One of text content, + others of style that should be applied to that content. + + then, loop through those lists, one line at a time, + finding how many words fit on a line, etc. + ''' + + the_style = dict() + the_style['font_height'] = font_height + the_style['font_family'] = font_family + the_style['line_spacing'] = line_spacing + the_style['align'] = text_align + + self.recursivelyParseFlowRoot( node, the_style ) + + if (self.text_string == ""): + continue # No convertable text in this SVG element. + + if (self.text_string.isspace()): + continue # No convertable text in this SVG element. + + # Initial vertical offset for the flowed text block: + v = 0 + + # Record that we are on the first line of the paragraph + # for setting the v position of the first line. + first_line = True + + # Keep track of text height on first line, for moving entire text box: + y_offs_overall = 0 + + # Split text by lines AND make a list of how long each + # line is, including the newline characters. + # We need to keep track of this to match up styling + # information to the printable characters. + + text_lines = self.text_string.splitlines() + extd_text_lines = self.text_string.splitlines(True) + strPos_eol = 0 # strPos after end of previous text_line. + + nbsp = u'\xa0' # Unicode non-breaking space character + + for line_number, text_line in enumerate(text_lines): + + line_length = len(text_line) + extd_line_length = len(extd_text_lines[line_number]) + + i = 0 # Position within this text_line. + + # A given text_line may take more than one strip + # to render, if it overflows our box width. + + line_start = 0 # Value of i when the current strip started. + + if line_length == 0: + strPos_temp = strPos_eol + char_height = float(self.text_heights[strPos_temp]) + charline_spacing = float(self.text_spacings[strPos_temp]) + charVSpacing = charline_spacing * char_height + v = v + charVSpacing + else: + while (i < line_length): + + word_start = i # Value of i at beginning of the current word. + + while (i < line_length): # Step through the line + # until we reach the end of the line or word. + # (i.e., until we reach whitespace) + character = text_line[i] # character is unicode (not byte string) + strPos_temp = strPos_eol + i + + char_height = self.text_heights[strPos_temp] + char_family = self.text_families[strPos_temp] + + try: + _a, x_adv, scale_factor = self.get_font_char( char_family, character ) + except: + x_adv = 0 + scale_factor = 1 + + wTemp += x_adv * scale_factor * char_height + + i += 1 + if character.isspace() and not character == nbsp: + break # Break at space, except non-breaking + + render_line = False + if wTemp > rect_width: # If the word will overflow the box + if word_start == line_start: + # This is the first word in the strip, so this + # word (alone) is wider than the box. Render it. + render_line = True + else: # Not the first word in the strip. + # Render the line up UNTIL this word. + render_line = True + i = word_start + elif i >= line_length: + # Render at end of text_line, if not overflowing. + render_line = True + + if render_line: + # Create group for rendering a strip of text: + lineGroup = inkex.etree.SubElement(g, 'g') + + wTemp = 0 + w = 0 + + self.newLine = True + widthThisLine = 0 + lineMaxVSpacing = 0 + + j = line_start + + while ( j < i ): # Calculate max height for the strip: + strPos_temp = strPos_eol + j + char_height = float(self.text_heights[strPos_temp]) + charline_spacing = float(self.text_spacings[strPos_temp]) + charVSpacing = charline_spacing * char_height + if (charVSpacing > lineMaxVSpacing): + lineMaxVSpacing = charVSpacing + j = j + 1 + + v = v + lineMaxVSpacing + + char_data = dict() + char_data['vertoffset']= v + char_data['stroke_scale'] = scale_r + + j = line_start + while ( j < i ): # Render the strip on the page + strPos = strPos_eol + j + + char_height = self.text_heights[strPos] + char_family = self.text_families[strPos] + text_align = self.text_aligns[strPos] + + char_data['char'] = text_line[j] + char_data['font_height'] = char_height + char_data['font_family'] = char_family + char_data['offset'] = w + + w = self.draw_svg_text(char_data, lineGroup) + + widthThisLine = w + firstWordOfLine = False + + j = j + 1 + strPos = strPos + 1 + + line_start = i + + # Alignment for the strip: + + t = "" # Empty string for translation + if (text_align == "center"): # when using text-align + t = 'translate(' + str((float(rect_width) - widthThisLine)/2) + ')' + elif (text_align == "end"): + t = 'translate(' + str(float(rect_width) - widthThisLine) + ')' + if (t != ""): + lineGroup.set( 'transform',t) + + if first_line: + y_offs_overall = lineMaxVSpacing / 3 # Heuristic + first_line = False + + strPos_eol = strPos_eol + extd_line_length + strPos = strPos_eol + + t = 'translate(' + str(startX) + ',' + str(float(startY) - y_offs_overall) + ')' + + else: # If this is a text object, rather than a flowroot object: + ''' + CASE B: Handle regular (non-flowroot) text nodes + ''' + + try: + # Use text-anchor, not text-align, in text (not flowroot) elements + text_align = node_style["text-anchor"] + except: + pass + + ''' + Recursively loop through content of the text object, + looping through text, tspan, and other things as necessary. + (A recursive search since style elements may be nested.) + + Create multiple lists: One of text content, others of the + style that should be applied to that content. + + For each line, want to record the plain text, font size + per character, text alignment, and x,y start values + for that line) + + (We may need to eventually handle additional text types and + tags, as when importing from other SVG sources. We should + try to eventually support additional formulations + of x, y, dx, dy, etc. + https://www.w3.org/TR/SVG/text.html#TSpanElement ) + + then, loop through those lists, one line at a time, + rendering text onto lines. If the x or y values changed, + assume we've started a new line. + + Note: A text element creates a single line + of text; it does not create multiline text by including + line returns within the text itself. Multiple lines of text + are created with multiple text or tspan elements. + ''' + + node_info = dict() + node_info['font_height'] = font_height + node_info['font_family'] = font_family + node_info['anchor'] = text_align + node_info['x_pos'] = startX + node_info['y_pos'] = startY + node_info['line_spacing'] = line_spacing + + # Keep track of line number. Used in cases where daughter + # tspan elements do not have Y positions given. + # Reset to zero on each text element. + self.line_number = 0 + + self.recursivelyParseTextNode( node, node_info) + # self.recursivelyParseTextNode( node, font_height, text_align, startX, startY ) + + if (self.text_string == ""): + continue # No convertable text in this SVG element. + if (self.text_string.isspace()): + continue # No convertable text in this SVG element. + + letter_vals = [q for q in self.text_string] + strLen = len(letter_vals) + + lineGroup = inkex.etree.SubElement(g, 'g') # Use a group for each line. This starts the first. + i = 0 + while (i < strLen): # Loop through the entire text of the string. + + xStartLine = self.text_x[i] # We are starting a new line here. + yStartLine = self.text_y[i] + + while (i < strLen): # Inner while loop, that we will break out of, back to the outer while loop. + + q = letter_vals[i] + charfont_height = self.text_heights[i] + + char_data = dict() + char_data['char'] = q + char_data['font_family'] = self.text_families[i] + + char_data['font_height'] = charfont_height + char_data['offset'] = w + char_data['vertoffset']= 0 + char_data['stroke_scale'] = scale_r + + w = self.draw_svg_text(char_data, lineGroup) + widthThisLine = w + wTemp = w + + # Set the alignment if (A) this is the last character in the string + # or if the next piece of the string is at a different position + + setAlignment = False + iNext = i + 1 + if (iNext >= strLen): # End of the string; this is the last character. + setAlignment = True + elif ((self.text_x[iNext] != xStartLine) or (self.text_y[iNext] != yStartLine) ): + setAlignment = True + + if setAlignment: + text_align = self.text_aligns[i] + # Not currently supporting text alignment that changes in the span; + # Use the text alignment as of the last character. + + # Left (or "start") alignment is default. + # if (text_align == "middle"): Center alignment + # if (text_align == "end"): Right alignment + # + # Strategy: Align every row (left, center, or right) as it is created. + + xShift = 0 + if (text_align == "middle"): # when using text-anchor + xShift = float(xStartLine) - (widthThisLine / 2) + elif (text_align == "end"): + xShift = float(xStartLine) - widthThisLine + else: + xShift = float(xStartLine) + + yShift = float(yStartLine) + + t = 'translate('+format(xShift,'.7f')+','+format(yShift,'.7f')+')' + lineGroup.set( 'transform',t) + + lineGroup = inkex.etree.SubElement(g, 'g') #Create new group for this line + self.newLine = True # Used for managing indent defects + w = 0 + i += 1 + break + i += 1 # Only executed when setAlignment is false. + t = "" + + if len(lineGroup) == 0: + parent = lineGroup.getparent() + parent.remove(lineGroup) + + #End cases A & B. Apply transform to text/flowroot object: + +# if transform is not None: +# t3 = transform + t +# else: +# t3 = t +# g.set( 'transform',str(t3)) +# +# This above five lines are a simplistic approach to applying transformations : +# simply concatenating the transforms. It can end up with applied tranformations of the form: +# "translate(-32.477009,-204.40135)translate(58.688175,293.76318)scale(0.775862068966)" +# +# A more "correct" approach is to instead compose the transformation, using the following +# which results in a more compact file, at the cost of slightly more processing time: + + if (transform is not None): +# transform2 = parseTransform( transform ) + t2 = parseTransform( t ) + result = composeTransform( transform2, t2 ) + t4 = formatTransform(result) + else: + t4 = t + g.set( 'transform',str(t4)) + + if not self.OutputGenerated: + parent.remove(g) #remove empty group + + #Preserve original element? + if not self.options.preserve_text and self.OutputGenerated: + self.nodes_to_delete.append(node) + + def effect( self ): + + # Input sanitization: + self.options.mode = self.options.mode.strip("\"") + self.options.fontface = self.options.fontface.strip("\"") + self.options.otherfont = self.options.otherfont.strip("\"") + self.options.util_mode = self.options.util_mode.strip("\"") + self.options.sample_text = self.options.sample_text.strip("\"") + + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + self.font_load_fail = False + + self.find_font_files() + + # Font dictionary - Dictionary of loaded fonts + self.font_dict = dict() + + self.OutputGenerated = False + + self.warnUnflow = False + self.warnTextPath = False # For future use: Give warning about text attached to path. + + self.nodes_to_delete = [] # List of font elements to remove + # Must save a list and add back at the end, so that any use elements + # still have the original nodes to reference. + + + self.handle_viewBox() + + # Calculate "ideal" effective width of rendered strokes: + # Default: 1/800 of page width or height, whichever is smaller + + _rendered_stroke_scale = 1 / (self.PX_PER_INCH * 800.0) + + self.render_width = 1 + if self.svg_width is not None: + if self.svg_width < self.svg_height: + self.render_width = self.svg_width * _rendered_stroke_scale + else: + self.render_width = self.svg_height * _rendered_stroke_scale + + if self.options.mode == "help": + inkex.errormsg(self.help_text) + elif self.options.mode == "utilities": + + if self.options.util_mode == "sample": + self.font_table() + else: + self.glyph_table() + else: + if self.options.ids: + # Traverse selected objects + for id in self.options.ids: + transform = self.recursivelyGetEnclosingTransform( self.selected[id] ) + self.recursively_traverse_svg( [self.selected[id]], transform) + else: # Traverse entire document + self.recursively_traverse_svg( self.document.getroot(), self.docTransform ) + + for element_to_remove in self.nodes_to_delete: + if element_to_remove is not None: + parent = element_to_remove.getparent() + if parent is not None: + parent.remove(element_to_remove) + + if self.font_load_fail: + inkex.errormsg( 'Warning: unable to load SVG stroke fonts.') + + if self.warnUnflow: + inkex.errormsg( 'Warning: unable to convert text flowed into a frame.\n' + + 'Please use Text > Unflow to convert it prior to use.\n' + + 'If you are unable to identify the object in question, ' + + 'please contact technical support for help.' + ) + +if __name__ == '__main__': + e = Hershey() + e.affect() \ No newline at end of file diff --git a/fablabchemnitz_inkpacking.inx b/fablabchemnitz_inkpacking.inx new file mode 100644 index 0000000..988e29d --- /dev/null +++ b/fablabchemnitz_inkpacking.inx @@ -0,0 +1,101 @@ + + + <_name>InkPACKING + fablabchemnitz.de.inkpacking + fablabchemnitz_inkpacking.py + inkex.py + + + 40 + 30 + 80 + 0.5 + + + + + + + + + true + + + + + + + + true + 0.6 + 0 + 14 + 18 + false + false + 5 + + + + + 0 + 2 + 7 + 3 + 3 + 12 + + + true + 0 + 2 + 7 + 3 + 3 + 12 + + + 13 + 12 + false + + + <_param name="about" type="description">InkPACKING - Professional Packaging for Inkscape + +Author: Celso Junior (celsojr2008 at gmail dot com) + +Usage: Input weight, height and depth of the +desired box, select top, bottom, glue flap options +and slots to have infinite combinations that surely +fulfill your needs in having a complete, suitable +and technically efficient open source Packaging Solution, +which brings to Inkscape users unique advantages in Packaging Design. + +Version : 0.11 PreRelease Testing + +TODO: Mailer Lock; Tuck and Tongle; Gusset Tuck; Arthur Lock +Dust Flaps; Edge Lock; Houghland Snap Lock Bottom +(semi automatic); Quad Lock Bottom; Himes Lock (Automatic Bottom); Security Zipper + +Brazil - 2009 + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_inkpacking.py b/fablabchemnitz_inkpacking.py new file mode 100644 index 0000000..6e8b97d --- /dev/null +++ b/fablabchemnitz_inkpacking.py @@ -0,0 +1,898 @@ +#! /usr/bin/env python +''' +Copyleft ( ) 2009 Celso Junior celsojr2008 at gmail dot com>, + 2015 Maren Hachmann (updated for Inkscape 0.91) +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +__version__ = "0.11" + +import inkex, simplestyle +from math import * +from simplepath import formatPath + +class inkpacking(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--width", + action="store", type="float", + dest="width", default=10.0, + help="") + self.OptionParser.add_option("--height", + action="store", type="float", + dest="height", default=15.0, + help="") + self.OptionParser.add_option("--depth", + action="store", type="float", + dest="depth", default=3.0, + help="") + self.OptionParser.add_option("--unit", + action="store", type="string", + dest="unit", default="mm", + help="") + self.OptionParser.add_option("--topscheme", + action="store", type="string", + dest="topscheme", default="rwlf", + help="") + self.OptionParser.add_option("--botscheme", + action="store", type="string", + dest="botscheme", default="rwlf", + help="") + self.OptionParser.add_option("--paper-thickness", + action="store", type="float", + dest="thickness", default=0.5, + help="") + self.OptionParser.add_option("-t", "--tab-proportion", + action="store", type="float", + dest="tabProportion", default=14, + help="Inner tab propotion for upper tab") + self.OptionParser.add_option("-r", "--lockroundradius", + action="store", type="float", + dest="lockroundradius", default=18, + help="Lock Radius") + self.OptionParser.add_option("-c", "--clueflapsize", + action="store", type="float", + dest="clueflapsize", default=13, + help="Clue Flap Size") + self.OptionParser.add_option("-a", "--clueflapangle", + action="store", type="float", + dest="clueflapangle", default=12, + help="Clue Flap Angle") + self.OptionParser.add_option("--clueflapside", + action="store", type="inkbool", + dest="clueflapside", default=False, + help="") + self.OptionParser.add_option("--pages", + action="store", type="string", + dest="page", default="page1", + help="") + self.OptionParser.add_option("--dustpages", + action="store", type="string", + dest="dustpage", default="page1", + help="") + self.OptionParser.add_option("--about", + action="store", type="string", + dest="about", default="", + help="") + self.OptionParser.add_option("--tfal", + action="store", type="inkbool", + dest="tfal", default=False, + help="") + self.OptionParser.add_option("--bfal", + action="store", type="inkbool", + dest="bfal", default=False, + help="") + self.OptionParser.add_option("--hotmeltprop", + action="store", type="float", + dest="hotmeltprop", default=0.6, + help="") + self.OptionParser.add_option("--createshapes", + action="store", type="inkbool", + dest="createshapes", default=False, + help="") + self.OptionParser.add_option("--createglueshapes", + action="store", type="inkbool", + dest="createglueshapes", default=False, + help="") + self.OptionParser.add_option("--fingergrepa", + action="store", type="inkbool", + dest="fingergrepa", default=False, + help="") + self.OptionParser.add_option("--fingergrepb", + action="store", type="inkbool", + dest="fingergrepb", default=False, + help="") + self.OptionParser.add_option("--fingergrepr", + action="store", type="float", + dest="fingergrepr", default=5, + help="") + + self.OptionParser.add_option("--usetop", + action="store", type="inkbool", + dest="usetop", default=False, + help="") + + self.OptionParser.add_option("--glueflapinoff", + action="store", type="float", + dest="glueflapinoff", default=0, + help="") + self.OptionParser.add_option("--glueflapin45", + action="store", type="float", + dest="glueflapin45", default=2, + help="") + self.OptionParser.add_option("--glueflapinang", + action="store", type="float", + dest="glueflapinang", default=7, + help="") + self.OptionParser.add_option("--glueflapouoff", + action="store", type="float", + dest="glueflapouoff", default=0, + help="") + self.OptionParser.add_option("--glueflapou45", + action="store", type="float", + dest="glueflapou45", default=3, + help="") + self.OptionParser.add_option("--glueflapouang", + action="store", type="float", + dest="glueflapouang", default=12, + help="") + + self.OptionParser.add_option("--bglueflapinoff", + action="store", type="float", + dest="bglueflapinoff", default=0, + help="") + self.OptionParser.add_option("--bglueflapin45", + action="store", type="float", + dest="bglueflapin45", default=2, + help="") + self.OptionParser.add_option("--bglueflapinang", + action="store", type="float", + dest="bglueflapinang", default=7, + help="") + self.OptionParser.add_option("--bglueflapouoff", + action="store", type="float", + dest="bglueflapouoff", default=0, + help="") + self.OptionParser.add_option("--bglueflapou45", + action="store", type="float", + dest="bglueflapou45", default=3, + help="") + self.OptionParser.add_option("--bglueflapouang", + action="store", type="float", + dest="bglueflapouang", default=12, + help="") + + + self.OptionParser.add_option("--roto", + action="store", type="float", + dest="roto", default=0, + help="") + + def effect(self): + + docW = self.getUnittouu(self.document.getroot().get('width')) + docH = self.getUnittouu(self.document.getroot().get('height')) + + roto = self.getUnittouu( str(self.options.roto) + self.options.unit ) + + boxW = self.getUnittouu( str(self.options.width) + self.options.unit ) + boxH = self.getUnittouu( str(self.options.height) + self.options.unit ) + boxD = self.getUnittouu( str(self.options.depth) + self.options.unit ) + boxL = self.getUnittouu( str(self.options.tabProportion) + self.options.unit ) + thck = self.getUnittouu( str(self.options.thickness) + self.options.unit ) + fingergrepr = self.getUnittouu( str(self.options.fingergrepr) + self.options.unit ) + + + + gflapsize = self.getUnittouu( str(self.options.clueflapsize) + self.options.unit ) + gflapangle = self.options.clueflapangle + + gfmirror = self.options.clueflapside + fingergrepa = self.options.fingergrepa + fingergrepb = self.options.fingergrepb + gflapangle = 90 - gflapangle + usetop = self.options.usetop + + + glueflapinoff = self.getUnittouu( str(self.options.glueflapinoff) + self.options.unit ) + glueflapin45 = self.getUnittouu( str(self.options.glueflapin45) + self.options.unit ) + + lockrr = self.getUnittouu( str(self.options.lockroundradius) + self.options.unit ) + + glueflapinang = self.options.glueflapinang + + glueflapindesl = (( (boxD + boxL) / 2 - glueflapinoff - glueflapin45) / sin(radians(90 - glueflapinang)) * sin(radians(glueflapinang))) + + glueflapouoff = self.getUnittouu( str(self.options.glueflapouoff) + self.options.unit ) + glueflapou45 = self.getUnittouu( str(self.options.glueflapou45) + self.options.unit ) + glueflapouang = self.options.glueflapouang + + glueflapoudesl = (( (boxD + boxL) / 2 - glueflapouoff - glueflapou45) / sin(radians(90 - glueflapouang)) * sin(radians(glueflapouang))) + + + + bglueflapinoff = self.getUnittouu( str(self.options.bglueflapinoff) + self.options.unit ) + bglueflapin45 = self.getUnittouu( str(self.options.bglueflapin45) + self.options.unit ) + + bglueflapinang = self.options.bglueflapinang + + bglueflapindesl = (( (boxD + boxL) / 2 - bglueflapinoff - bglueflapin45) / sin(radians(90 - bglueflapinang)) * sin(radians(bglueflapinang))) + + bglueflapouoff = self.getUnittouu( str(self.options.bglueflapouoff) + self.options.unit ) + bglueflapou45 = self.getUnittouu( str(self.options.bglueflapou45) + self.options.unit ) + bglueflapouang = self.options.bglueflapouang + + bglueflapoudesl = (( (boxD + boxL) / 2 - bglueflapouoff - bglueflapou45) / sin(radians(90 - bglueflapouang)) * sin(radians(bglueflapouang))) + + + tpsc = self.options.topscheme + btsc = self.options.botscheme + tfal = self.options.tfal + bfal = self.options.bfal + + hotmeltp = self.options.hotmeltprop + + angx = asin( (boxL - thck) / lockrr ) + angy = (3.141615 / 2) - angx + lockroff = lockrr - (lockrr * sin(angy)) + + box_id = self.uniqueId('box') + + self.box = g = inkex.etree.SubElement(self.current_layer, 'g', {'id':box_id}) + + line_style = simplestyle.formatStyle({ 'stroke': '#000000', 'fill': 'none' }) + + gflapoffy = (gflapsize / sin( (gflapangle / 360) * 6.28 )) * sin( ((90 - gflapangle) / 360 ) * 6.28) + + # Side Glueflap + if not gfmirror: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ gflapsize * -1, gflapoffy ] ], + [ 'L', [ gflapsize * -1, boxH - gflapoffy ] ], + [ 'L', [ 0, boxH ] ], + [ 'M', [ 0 , 0 ] ], + [ 'Z', [] ] + ] + + if gfmirror: + line_path = [ + [ 'M', [ boxW+boxD+boxW+boxD - thck, 0 ] ], + [ 'L', [ boxW+boxD+boxW+boxD - thck + gflapsize , gflapoffy ] ], + [ 'L', [ boxW+boxD+boxW+boxD - thck + gflapsize , boxH - gflapoffy ] ], + [ 'L', [ boxW+boxD+boxW+boxD - thck, boxH ] ], + [ 'M', [ boxW+boxD+boxW+boxD - thck, 0 ] ], + [ 'Z', [] ] + ] + + + + line_atts = { 'style':line_style, 'id':box_id+'-sideglueflap', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + + + # MainBody + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ 0 , boxH ] ], + [ 'M', [ boxW , 0 ] ], + [ 'L', [ boxW , boxH ] ], + [ 'M', [ boxW + boxD , 0 ] ], + [ 'L', [ boxW + boxD, boxH ] ], + [ 'M', [ boxW + boxD + boxW , 0 ] ], + [ 'L', [ boxW + boxD + boxW, boxH ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck , 0 ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck, boxH ] ], + [ 'M', [ 0, 0 ] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-body', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # No Top Option + if tpsc == "notp": + if not fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ boxW, 0 ] ], + [ 'L', [ boxW + boxD , 0 ] ], + [ 'L', [ boxW + boxD + boxW, 0 ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck, 0 ] ], + [ 'Z', [] ] + ] + if fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ boxW / 2 - fingergrepr , 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW - boxW / 2 + fingergrepr, 0] ], + [ 'L', [ boxW , 0 ] ], + [ 'L', [ boxW + boxD, 0 ] ], + [ 'L', [ boxW + boxD + boxW / 2 - fingergrepr , 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD + boxW - boxW / 2 + fingergrepr, 0] ], + [ 'L', [ boxW + boxD + boxW , 0 ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , 0 ] ], + [ 'M', [ 0 , 0] ], + [ 'Z', [] ] + ] + if fingergrepa and fingergrepb: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ boxW / 2 - fingergrepr , 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW - boxW / 2 + fingergrepr, 0] ], + [ 'L', [ boxW , 0 ] ], + [ 'L', [ boxW + boxD / 2 - fingergrepr, 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD - boxD / 2 + fingergrepr, 0] ], + [ 'L', [ boxW + boxD , 0 ] ], + [ 'L', [ boxW + boxD + boxW / 2 - fingergrepr , 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD + boxW - boxW / 2 + fingergrepr, 0] ], + [ 'L', [ boxW + boxD + boxW , 0 ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , 0] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , 0 ] ], + [ 'M', [ 0 , 0] ], + [ 'Z', [] ] + ] + + if not fingergrepa and fingergrepb: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ boxW , 0 ] ], + [ 'L', [ boxW + boxD / 2 - fingergrepr, 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD - boxD / 2 + fingergrepr, 0] ], + [ 'L', [ boxW + boxD , 0 ] ], + [ 'L', [ boxW + boxD + boxW , 0 ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, 0 ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 0, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , 0] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , 0 ] ], + [ 'M', [ 0 , 0] ], + [ 'Z', [] ] + ] + + + line_atts = { 'style':line_style, 'id':box_id+'-topdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # No Bottom Option + if btsc == "nobt": + if not fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ boxW, boxH ] ], + [ 'L', [ boxW + boxD , boxH ] ], + [ 'L', [ boxW + boxD + boxW, boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck, boxH ] ], + [ 'Z', [] ] + ] + if fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ boxW / 2 - fingergrepr , boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW - boxW / 2 + fingergrepr, boxH] ], + [ 'L', [ boxW , boxH ] ], + [ 'L', [ boxW + boxD, boxH ] ], + [ 'L', [ boxW + boxD + boxW / 2 - fingergrepr , boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD + boxW - boxW / 2 + fingergrepr, boxH] ], + [ 'L', [ boxW + boxD + boxW , boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , boxH ] ], + [ 'M', [ 0 , boxH ] ], + [ 'Z', [] ] + ] + if fingergrepa and fingergrepb: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ boxW / 2 - fingergrepr , boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW - boxW / 2 + fingergrepr, boxH] ], + [ 'L', [ boxW , boxH ] ], + [ 'L', [ boxW + boxD / 2 - fingergrepr, boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD - boxD / 2 + fingergrepr, boxH] ], + [ 'L', [ boxW + boxD , boxH ] ], + [ 'L', [ boxW + boxD + boxW / 2 - fingergrepr , boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD + boxW - boxW / 2 + fingergrepr, boxH ] ], + [ 'L', [ boxW + boxD + boxW , boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , boxH ] ], + [ 'M', [ 0 , boxH ] ], + [ 'Z', [] ] + ] + + if not fingergrepa and fingergrepb: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ boxW , boxH ] ], + [ 'L', [ boxW + boxD / 2 - fingergrepr, boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD - boxD / 2 + fingergrepr, boxH ] ], + [ 'L', [ boxW + boxD , boxH ] ], + [ 'L', [ boxW + boxD + boxW , boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, boxH ] ], + [ 'A', [ fingergrepr, fingergrepr , 0 , 1, 1, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , boxH ] ], + [ 'L', [ boxW + boxD + boxW + boxD - thck , boxH ] ], + [ 'M', [ 0 , boxH ] ], + [ 'Z', [] ] + ] + + + line_atts = { 'style':line_style, 'id':box_id+'-botdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Flat Bottom with Lock Flaps + if btsc == "fwlf": + desloc = 0 + inicut = boxW + boxD + if not bfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [ desloc,boxH ] ], + [ 'l', [ 0, boxD * 1] ], + [ 'l', [ 6, 0 ] ], + [ 'l', [ 0, thck * -2] ], + [ 'm', [ 0, thck * 1] ], + [ 'l', [ boxW - 12, 0] ], + [ 'm', [ 0, thck * -1] ], + [ 'l', [ 0, thck * 2] ], + [ 'l', [6, 0 ] ], + [ 'l', [0, boxD * -1] ], + [ 'M', [desloc, boxH ] ], + [ 'm', [0, boxD *1] ], + [ 'm', [thck, 0] ], + [ 'l', [ lockroff , (boxL - thck) * 1 ] ], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0] ], + [ 'l', [lockroff , (boxL - thck) * -1 ] ], + [ 'M', [desloc,boxH + thck * 1] ], + [ 'l', [boxW,0] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-bothead', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut, boxH]], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["a", [fingergrepr, fingergrepr, 0, 0, 1, fingergrepr * 2,0] ], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut, boxH]], + ["l", [boxW , 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + + # Flat Top with Lock Flaps + if tpsc == "fwlf": + desloc = 0 + inicut = boxW + boxD + if not tfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [ desloc,0 ] ], + [ 'l', [ 0, boxD * -1] ], + [ 'l', [ 6, 0 ] ], + [ 'l', [ 0, thck * 2] ], + [ 'm', [ 0, thck * -1] ], + [ 'l', [ boxW - 12, 0] ], + [ 'm', [ 0, thck] ], + [ 'l', [ 0, thck * -2] ], + [ 'l', [6, 0 ] ], + [ 'l', [0, boxD] ], + [ 'M', [desloc, 0 ] ], + [ 'm', [0, boxD *-1] ], + [ 'm', [thck, 0] ], + [ 'l', [ lockroff , (boxL - thck) * -1 ] ], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0] ], + [ 'l', [lockroff , (boxL - thck) ] ], + [ 'M', [desloc,thck * -1] ], + [ 'l', [boxW,0] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-tophead', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["a", [fingergrepr, fingergrepr, 0, 0, 0, fingergrepr * 2,0] ], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW , 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Rounded Bottom with Lock Flaps + if btsc == "rwlf": + desloc = 0 + inicut = boxW + boxD + if not bfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [ desloc,boxH ] ], + [ 'l', [ 0, boxD * 1] ], + [ 'l', [ 6, 0 ] ], + [ 'l', [ 0, thck * -2] ], + [ 'm', [ 0, thck * 1] ], + [ 'l', [ boxW - 12, 0] ], + [ 'm', [ 0, thck * -1] ], + [ 'l', [ 0, thck * 2] ], + [ 'l', [6, 0 ] ], + [ 'l', [0, boxD * -1] ], + [ 'M', [desloc, boxH ] ], + [ 'm', [0, boxD * 1] ], + [ 'm', [thck, 0] ], + [ 'a', [lockrr , lockrr , 0 , 0 , 0, lockroff , (boxL - thck) * 1 ] ], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0] ], + [ 'a', [lockrr , lockrr , roto , 0 , 0, lockroff , (boxL - thck) * - 1 ] ], + [ 'M', [desloc,boxH + thck * 1] ], + [ 'l', [boxW,0] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-bothead', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut,boxH]], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["a", [fingergrepr, fingergrepr, 0, 0, 1, fingergrepr * 2,0] ], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,boxH]], + ["l", [boxW , 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Rounded Top with Lock Flaps + if tpsc == "rwlf": + desloc = 0 + inicut = boxW + boxD + if not tfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [ desloc,0 ] ], + [ 'l', [ 0, boxD * -1] ], + [ 'l', [ 6, 0 ] ], + [ 'l', [ 0, thck * 2] ], + [ 'm', [ 0, thck * -1] ], + [ 'l', [ boxW - 12, 0] ], + [ 'm', [ 0, thck] ], + [ 'l', [ 0, thck * -2] ], + [ 'l', [6, 0 ] ], + [ 'l', [0, boxD] ], + [ 'M', [desloc, 0 ] ], + [ 'm', [0, boxD *-1] ], + [ 'm', [thck, 0] ], + [ 'a', [lockrr , lockrr , 0 , 0 , 1, lockroff , (boxL - thck) * -1 ] ], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0] ], + [ 'a', [lockrr , lockrr , roto , 0 , 1, lockroff , (boxL - thck) ] ], + [ 'M', [desloc,thck * -1] ], + [ 'l', [boxW,0] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-tophead', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["a", [fingergrepr, fingergrepr, 0, 0, 0, fingergrepr * 2,0] ], + ["l", [boxW / 2 - fingergrepr, 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW , 0] ], + ["M", [0,0] ], + ["Z", [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topcut', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # HotMelt Top + if tpsc == "fwnf": + if tfal: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ 0, boxD * -1 ] ], + [ 'L', [ boxW, boxD * -1 ] ], + [ 'L', [ boxW, 0 ] ], + [ 'M', [ boxW, boxD * -1 / 2 ] ], + [ 'M', [ boxW + boxD, boxD * -1 / 2 ] ], + [ 'M', [ boxW + boxD, 0 ] ], + [ 'L', [ boxW + boxD, boxD * -1 * hotmeltp ] ], + [ 'L', [ boxW + boxD + boxW, boxD * -1 * hotmeltp ] ], + [ 'L', [ boxW + boxD + boxW, 0 ] ], + [ 'M', [ boxW + boxD + boxW, boxD * -1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxD * -1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, 0 ] ], + [ 'M', [ 0 , 0 - thck ] ], + [ 'L', [ boxW , 0 - thck ] ], + [ 'M', [ boxW + boxD , 0 - thck ] ], + [ 'L', [ boxW + boxD + boxW , 0 - thck ] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if not tfal: + line_path = [ + [ 'M', [ 0 , 0 ] ], + [ 'L', [ 0, boxD * -1 * hotmeltp ] ], + [ 'L', [ boxW, boxD * -1 * hotmeltp ] ], + [ 'L', [ boxW, 0 ] ], + [ 'M', [ boxW, boxD * -1 / 2 ] ], + [ 'M', [ boxW + boxD, boxD * -1 / 2 ] ], + [ 'M', [ boxW + boxD, 0 ] ], + [ 'L', [ boxW + boxD, boxD * -1 ] ], + [ 'L', [ boxW + boxD + boxW, boxD * -1 ] ], + [ 'L', [ boxW + boxD + boxW, 0 ] ], + [ 'M', [ boxW + boxD + boxW, boxD * -1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxD * -1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, 0 ] ], + [ 'M', [ 0 , 0 - thck ] ], + [ 'L', [ boxW , 0 - thck ] ], + [ 'M', [ boxW + boxD , 0 - thck ] ], + [ 'L', [ boxW + boxD + boxW , 0 - thck ] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-topdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # HotMelt Bottom + if btsc == "fwnf": + if bfal: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ 0, boxH + boxD * 1 ] ], + [ 'L', [ boxW, boxH + boxD * 1 ] ], + [ 'L', [ boxW, boxH ] ], + [ 'M', [ boxW, boxH + boxD * 1 / 2 ] ], + [ 'M', [ boxW + boxD, boxH + boxD * 1 / 2 ] ], + [ 'M', [ boxW + boxD, boxH ] ], + [ 'L', [ boxW + boxD, boxH + boxD * 1 * hotmeltp ] ], + [ 'L', [ boxW + boxD + boxW, boxH + boxD * 1 * hotmeltp ] ], + [ 'L', [ boxW + boxD + boxW, boxH ] ], + [ 'M', [ boxW + boxD + boxW, boxH + boxD * 1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxH + boxD * 1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxH ] ], + [ 'M', [ 0 , boxH + thck ] ], + [ 'L', [ boxW , boxH + thck ] ], + [ 'M', [ boxW + boxD , boxH + thck ] ], + [ 'L', [ boxW + boxD + boxW , boxH + thck ] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if not bfal: + line_path = [ + [ 'M', [ 0 , boxH ] ], + [ 'L', [ 0, boxH + boxD * 1 * hotmeltp ] ], + [ 'L', [ boxW, boxH + boxD * 1 * hotmeltp ] ], + [ 'L', [ boxW, boxH ] ], + [ 'M', [ boxW, boxH + boxD * 1 / 2 ] ], + [ 'M', [ boxW + boxD, boxH + boxD * 1 / 2 ] ], + [ 'M', [ boxW + boxD, boxH ] ], + [ 'L', [ boxW + boxD, boxH + boxD * 1 ] ], + [ 'L', [ boxW + boxD + boxW, boxH + boxD * 1 ] ], + [ 'L', [ boxW + boxD + boxW, boxH ] ], + [ 'M', [ boxW + boxD + boxW, boxH + boxD * 1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxH + boxD * 1 /2 ] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck, boxH ] ], + [ 'M', [ 0 , boxH + thck ] ], + [ 'L', [ boxW , boxH + thck ] ], + [ 'M', [ boxW + boxD , boxH + thck ] ], + [ 'L', [ boxW + boxD + boxW , boxH + thck ] ], + [ 'Z', [] ] + ] + line_atts = { 'style':line_style, 'id':box_id+'-botdraw', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + thck2 = thck / 2 + + # Top Glue Flaps + if tpsc <> "notp": + desclock = thck + if tpsc == "fwnf": + desclock = 0 + if tfal: + line_path = [ + [ 'M', [ boxW , 0 ] ], + [ 'l', [ 0, glueflapinoff * -1] ], + [ 'l', [ glueflapin45, glueflapin45 * -1] ], + [ 'l', [ glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2] ], + [ 'M', [ boxW + boxD , 0 ] ], + [ 'l', [ desclock * -1, 0 ] ], + [ 'l', [ 0, glueflapouoff * -1] ], + [ 'l', [ glueflapou45 * -1, glueflapou45 * -1] ], + [ 'l', [ glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) * -1, 0 ] ], + [ 'M', [ boxW , 0 ] ], + [ 'l', [ boxD - desclock , 0 ] ], + [ 'M', [ boxW + boxW + boxD + boxD - thck , 0 ] ], + [ 'l', [ 0, glueflapinoff * -1] ], + [ 'l', [ glueflapin45 * -1, glueflapin45 * -1] ], + [ 'l', [ glueflapindesl * -1 , ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2] ], + [ 'M', [ boxW + boxD + boxW , 0 ] ], + [ 'l', [ desclock , 0 ] ], + [ 'l', [ 0, glueflapouoff * -1] ], + [ 'l', [ glueflapou45 , glueflapou45 * -1] ], + [ 'l', [ glueflapoudesl , ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck ) , 0 ] ], + [ 'M', [ boxW + boxD + boxW + desclock , 0 ] ], + [ 'l', [ boxD - thck - desclock , 0 ] ], + [ 'Z', [] ] + ] + + if not tfal: + line_path = [ + [ 'M', [ boxW + boxD, 0 ] ], + + [ 'l', [ 0, glueflapinoff * -1] ], + [ 'l', [ glueflapin45 * -1, glueflapin45 * -1] ], + [ 'l', [ glueflapindesl * -1 , ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2] ], + [ 'M', [ boxW , 0 ] ], + [ 'l', [ desclock , 0 ] ], + [ 'l', [ 0, glueflapouoff * -1] ], + [ 'l', [ glueflapou45 , glueflapou45 * -1] ], + [ 'l', [ glueflapoudesl , ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) , 0 ] ], + [ 'M', [ boxW + desclock , 0 ] ], + [ 'l', [ boxD - desclock , 0 ] ], + + [ 'M', [ boxW + boxD + boxW , 0 ] ], + [ 'l', [ 0, glueflapinoff * -1] ], + [ 'l', [ glueflapin45, glueflapin45 * -1] ], + [ 'l', [ glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck , 0 ] ], + [ 'l', [ desclock * -1, 0 ] ], + [ 'l', [ 0, glueflapouoff * -1] ], + [ 'l', [ glueflapou45 * -1, glueflapou45 * -1] ], + [ 'l', [ glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck) * -1, 0 ] ], + [ 'M', [ boxW + boxD + boxW , 0 ] ], + [ 'l', [ boxD -thck - desclock , 0 ] ], + [ 'Z', [] ] + ] + + + line_atts = { 'style':line_style, 'id':box_id+'-topglueflap', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Bottom Glue Flaps + if not usetop: + glueflapinoff = bglueflapinoff + glueflapin45 = bglueflapin45 + glueflapindesl = bglueflapindesl + glueflapouoff = bglueflapouoff + glueflapou45 = bglueflapou45 + glueflapoudesl = bglueflapoudesl + + if btsc <> "nobt": + desclock = thck + if btsc == "fwnf": + desclock = 0 + if bfal: + line_path = [ + [ 'M', [ boxW , boxH ] ], + [ 'l', [ 0, glueflapinoff * 1] ], + [ 'l', [ glueflapin45, glueflapin45 * 1] ], + [ 'l', [ glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * 1 -thck2] ], + [ 'M', [ boxW + boxD , boxH ] ], + [ 'l', [ desclock * -1, 0 ] ], + [ 'l', [ 0, glueflapouoff * 1] ], + [ 'l', [ glueflapou45 * -1, glueflapou45 * 1] ], + [ 'l', [ glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * 1 -thck2 ] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) * -1, 0 ] ], + [ 'M', [ boxW , boxH ] ], + [ 'l', [ boxD - desclock , 0 ] ], + [ 'M', [ boxW + boxW + boxD + boxD - thck , boxH ] ], + [ 'l', [ 0, glueflapinoff * 1] ], + [ 'l', [ glueflapin45 * -1, glueflapin45 * 1] ], + [ 'l', [ glueflapindesl * -1 , ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * 1 - thck2] ], + [ 'M', [ boxW + boxD + boxW , boxH ] ], + [ 'l', [ desclock , 0 ] ], + [ 'l', [ 0, glueflapouoff * 1] ], + [ 'l', [ glueflapou45 , glueflapou45 * 1] ], + [ 'l', [ glueflapoudesl , ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * 1 -thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck ) , 0 ] ], + [ 'M', [ boxW + boxD + boxW + desclock , boxH ] ], + [ 'l', [ boxD - thck - desclock , 0 ] ], + [ 'Z', [] ] + ] + + if not bfal: + line_path = [ + [ 'M', [ boxW + boxD, boxH ] ], + + [ 'l', [ 0, glueflapinoff * 1] ], + [ 'l', [ glueflapin45 * -1, glueflapin45 * 1] ], + [ 'l', [ glueflapindesl * -1 , ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * 1 - thck2] ], + [ 'M', [ boxW , boxH ] ], + [ 'l', [ desclock , 0 ] ], + [ 'l', [ 0, glueflapouoff * 1] ], + [ 'l', [ glueflapou45 , glueflapou45 * 1] ], + [ 'l', [ glueflapoudesl , ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * 1 - thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) , 0 ] ], + [ 'M', [ boxW + desclock , boxH ] ], + [ 'l', [ boxD - desclock , 0 ] ], + + [ 'M', [ boxW + boxD + boxW , boxH ] ], + [ 'l', [ 0, glueflapinoff * 1] ], + [ 'l', [ glueflapin45, glueflapin45 * 1] ], + [ 'l', [ glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * 1 - thck2] ], + [ 'M', [ boxW + boxD + boxW + boxD - thck , boxH ] ], + [ 'l', [ desclock * -1, 0 ] ], + [ 'l', [ 0, glueflapouoff * 1] ], + [ 'l', [ glueflapou45 * -1, glueflapou45 * 1] ], + [ 'l', [ glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * 1 - thck2] ], + [ 'l', [ (boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck) * -1, 0 ] ], + [ 'M', [ boxW + boxD + boxW , boxH ] ], + [ 'l', [ boxD -thck - desclock , 0 ] ], + [ 'Z', [] ] + ] + + + line_atts = { 'style':line_style, 'id':box_id+'-botglueflap', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + def getUnittouu(self, param): + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + +if __name__ == '__main__': + e = inkpacking() + e.affect() diff --git a/fablabchemnitz_input_stl.inx b/fablabchemnitz_input_stl.inx new file mode 100644 index 0000000..7c260f3 --- /dev/null +++ b/fablabchemnitz_input_stl.inx @@ -0,0 +1,50 @@ + + + <_name>Slic3r STL Input + fablabchemnitz.de.input_stl + fablabchemnitz_input_stl.py + + + 1.0 + 0 + 0 + false + false + + + slic3r + <_param name="slic3r_cmd_help" type="description" xml:space="preserve"> +The slic3r command name depends on your operating system, and how slic3r was installed. +Typical values are: + +$HOME/Downloads/Slic3r-1.3.0-x86_64.AppImage (Linux) +$HOME/Slic3r/Slic3r-console.exe (Windows) + + + + + <_param name="inputhelp" type="description" xml:space="preserve"> +- Projects an STL file on the X-Y plane by cutting the objects into "slices". +- Each "slice" is a group of polygons, with a label indicating its z position. +- The polygons are converted to paths for better editing in inkscape. + +- Use Object -> Rows & Columns ... distribute the slices in a grid. + +https://github.com/jnweiger/inkscape-input-stl +(C) 2018 by Jürgen Weigert <jnweiger@gmail.com> +Version 0.6 + +Distribute under GPLv2 or ask. + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_input_stl.py b/fablabchemnitz_input_stl.py new file mode 100644 index 0000000..2c7fb9f --- /dev/null +++ b/fablabchemnitz_input_stl.py @@ -0,0 +1,299 @@ +#! /usr/bin/python +# +# input-stl.py +# (C) 2018 Juergen Weigert , distribute under GPLv2 or ask +# +# This is an input extension for inkscape to read STL files. +# +# Requires: (python-lxml | python3-lxml), slic3r +# For optional(!) rotation support: +# Requires: (python-numpy-stl | python3-numpy-stl) +# If you get ImportError: cannot import name 'mesh' +# although an stl module is installed, then you have the wrong stl module. +# Try 'pip3 uninstall stl; pip3 install numpy-stl' +# +# 2018-12-22 jw, v0.1 Initial draught +# v0.1 First working standalone tool. +# 2018-12-26 jw, v0.3 Mesh rotation support via numpy-stl. Fully optional. +# v0.4 Works fine as an inkscape input extension under Linux. +# 2019-03-01 jw, v0.5 numbers and center option added. +# 2019-07-17 jw, v0.6 fixed ry rotation. +# +# FIXME: should use svg_pathstats(path_d): to compute bounding boxes. + +from __future__ import print_function +import sys, os, re, argparse +import subprocess, tempfile +from lxml import etree +from subprocess import Popen, PIPE + +_version = '0.6' + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + slic3r = 'slic3r-console.exe' +elif sys_platform.startswith('darwin'): + slic3r = 'slic3r' +else: # Linux + slic3r = os.environ['HOME']+ '/Downloads/Slic3r-1.3.0-x86_64.AppImage' + if not os.path.exists(slic3r): + slic3r = 'slic3r' + + +parser = argparse.ArgumentParser(description='convert an STL file to a nice SVG for inkscape. The STL object is projected onto the X-Y plane.') +parser.add_argument('--layer-height', '--layer_height', '-l', default=None, help='slic3r layer height, probably in mm. Default: per slic3r config') +parser.add_argument('--rx', default=None, type=float, help='Rotate STL object around X-Axis before importing.') +parser.add_argument('--ry', default=None, type=float, help='Rotate STL object around Y-Axis before importing.') +parser.add_argument('--numbers', dest='numbers', default='false', help='Add layer numbers.') +parser.add_argument('--center', dest='center', default='false', help='Add center marks.') +parser.add_argument('--stdout', '--tab', default=None, type=str, help=argparse.SUPPRESS) +parser.add_argument('--slic3r-cmd', '--slic3r_cmd', '-s', default=slic3r, help='Command to invoke slic3r. Default is "'+slic3r+'"') +parser.add_argument('--output', '-o', default=None, help='SVG output file name or "-" for stdout. Default: Name derived from STL input.') +parser.add_argument('stlfile', type=str, help='STL input file to convert to SVG with the same name, but ".svg" suffix.') + +args = parser.parse_args() + +# input-stl.inx advertises use of '$HOME' -- windows has HOMEPATH instead of HOME +home = os.environ.get('HOME', os.environ.get('HOMEPATH', 'NO-HOME')) +args.slic3r_cmd = re.sub('^\$HOME(PATH)?', home, args.slic3r_cmd) + +if sys_platform.startswith('win'): + # assert we run the commandline version of slic3r + args.slic3r_cmd = re.sub('slic3r(\.exe)?$', 'slic3r-console.exe', args.slic3r_cmd, flags=re.I) + +stlfile = args.stlfile +tmpstlfile = None + +if args.rx is not None and abs(args.rx) < 0.01: args.rx = None +if args.ry is not None and abs(args.ry) < 0.01: args.ry = None + +if args.rx or args.ry: + try: + import numpy, stl, math + + mesh = stl.Mesh.from_file(stlfile) + if args.rx: mesh.rotate([1.0, 0.0, 0.0], math.radians(float(args.rx))) + if args.ry: mesh.rotate([0.0, 1.0, 0.0], math.radians(float(args.ry))) + stlfile = tmpstlfile = tempfile.gettempdir() + os.path.sep + 'ink-stl-' + str(os.getpid()) + '.stl' + mesh.save(stlfile) + except Exception as e: + print("Rotate failed: " + str(e), file=sys.stderr) + +if args.output == '-': args.stdout = True + +if args.stdout: + svgfile = tempfile.gettempdir() + os.path.sep + 'ink-stl-' + str(os.getpid()) + '.svg' +else: + svgfile = re.sub('\.stl', '.svg', args.stlfile, flags=re.IGNORECASE) + if args.output is not None: svgfile = args.output + +cmd = [args.slic3r_cmd, '--version'] +try: + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except OSError as e: + if args.stdout: + hint="Check your slic3r command setting in the second tab of the STL Input dialog." + else: + hint="Maybe use --slic3r-cmd option?" + print("{0}\nCommand failed: errno={1} {2}\n\n{3}".format(' '.join(cmd), e.errno, e.strerror, hint), file=sys.stderr) + sys.exit(1) +stdout, stderr = proc.communicate() + +# option --layer-height does not work. We use --scale instead... +scale = 1/float(args.layer_height) +cmd = [args.slic3r_cmd, '--no-gui'] +if args.layer_height is not None: + cmd += ['--scale', str(scale), '--first-layer-height', '0.1mm'] # args.layer_height+'mm'] +cmd += ['--export-svg', '-o', svgfile, stlfile] + +magic = 10 # layer width seems to be 0.1mm ??? + +def scale_points(pts, scale): + """ str='276.422496,309.4 260.209984,309.4 260.209984,209.03 276.422496,209.03' + """ + return re.sub('\d*\.\d*', lambda x: str(float(x.group(0))*scale*magic), pts) + + +## CAUTION: keep svg_pathstats() in sync with inkscape-centerlinetrace +def svg_pathstats(path_d): + """ calculate statistics from an svg path: + length (measuring bezier splines as straight lines through the handles). + points (all, including duplicates) + segments (number of not-connected!) path segments. + simple bounding box (ignoring curves of splines, but inclding handles.) + """ + xmin = 1e99 + ymin = 1e99 + xmax = -1e99 + ymax = -1e99 + p_points = 0 + p_length = 0 + p_segments = 0 + + path_d = path_d.lower() + for p in path_d.split('m'): + + pp = re.sub('[cl,]', ' ', p) + pp,closed = re.subn('z\s*$','',pp) + xy = pp.split() + if len(xy) < 2: + # print len(pp) + # print "short path error" + continue + x0 = float(xy[0]) + y0 = float(xy[1]) + if x0 > xmax: xmax = x0 + if x0 < xmin: xmin = x0 + if y0 > ymax: ymax = y0 + if y0 < ymin: ymin = y0 + + p_points += 1 + x = xy[2::2] + y = xy[3::2] + if len(x): + p_segments += 1 + if closed: + x.extend(x0) + y.extend(y0) + + for i in range(len(x)): + p_points += 1 + dx = float(x[i]) - x0 + dy = float(y[i]) - y0 + p_length += math.sqrt( dx * dx + dy * dy ) + x0,y0 = float(x[i]),float(y[i]) + if x0 > xmax: xmax = x0 + if x0 < xmin: xmin = x0 + if y0 > ymax: ymax = y0 + if y0 < ymin: ymin = y0 + + return { 'points':p_points, 'segments':p_segments, 'length':p_length, 'bbox': (xmin,ymin, xmax, ymax) } + + +def bbox_info(slic3r, file): + cmd = [ slic3r, '--no-gui', '--info', file ] + p = Popen(cmd, stdout=PIPE, stderr=PIPE) + out, err = p.communicate() + if len(err): + raise ValueError(err) + + bb = {} + for l in out.decode().split("\n"): + m = re.match('((min|max)_[xyz])\s*=\s*(.*)', l) + if m: bb[m.group(1)] = float(m.group(3)) + if (len(bb) != 6): + raise ValueError("slic3r --info did not return 6 elements for bbox") + return bb + +if args.center != 'false': + bb = bbox_info(args.slic3r_cmd, stlfile) + # Ouch: bbox info gives us stl coordinates. slic3r translates them into svg px using 75dpi. + cx = (-bb['min_x'] + bb['max_x']) * 0.5 * 1/scale * magic * 25.4 / 75 + cy = (-bb['min_y'] + bb['max_y']) * 0.5 * 1/scale * magic * 25.4 / 75 +# print(cx, cy, file=sys.stderr) + + +try: + if args.stdout: + tty = open("/dev/tty", "w") + else: + tty = sys.stderr +except: + tty = sys.stderr + +try: + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except OSError as e: + raise OSError("{0}\nCommand failed: errno={1} {2}".format(' '.join(cmd), e.errno, e.strerror)) +stdout, stderr = proc.communicate() + +if tmpstlfile and os.path.exists(tmpstlfile): + os.unlink(tmpstlfile) + +if not b'Done.' in stdout: + print("Command failed: {0}".format(' '.join(cmd))) + print("OUT: " + str(stdout), file=sys.stderr) + print("ERR: " + str(stderr), file=sys.stderr) + sys.exit(1) + +# slic3r produces correct svg files, but with polygons instead of paths, and with undefined strokes. +# When opened with inkscape, most lines are invisible and polygons cannot be edited. +# To fix these issues, we postprocess the svg file: +# * replace polygon nodes with corresponding path nodes. +# * replace style attribute in polygon nodes with one that has a black stroke + +stream = open(svgfile, 'r') +p = etree.XMLParser(huge_tree=True) +doc = etree.parse(stream, parser=p) +stream.close() + +doc.getroot().addprevious(etree.Comment(' Imported with '+sys.argv[0]+' V'+_version+" by Juergen Weigert ")) +doc.getroot().attrib['{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname'] = 'input-stl.svg' + +## To change the document units to mm, insert directly after the root node: +# e.tag = '{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}namedview' +# e.attrib['id'] = "base" +# e.attrib['{http://www.inkscape.org/namespaces/inkscape}document-units'] = "mm" + +layercount = 0 +for e in doc.iterfind('//{*}g'): + if e.attrib['{http://slic3r.org/namespaces/slic3r}z'] and e.attrib['id']: + e.attrib['{http://www.inkscape.org/namespaces/inkscape}label'] = e.attrib['id'] + ' slic3r:z=' + e.attrib['{http://slic3r.org/namespaces/slic3r}z'] + del e.attrib['{http://slic3r.org/namespaces/slic3r}z'] + # for some fun with our inkscape-paths2openscad extension, add sibling to e: + # Depth: 1mm\nOffset: 31mm + desc = etree.Element('{http://www.w3.org/2000/svg}desc') + desc.attrib['id'] = 'descl'+str(layercount) + desc.text = "Depth: %.2fmm\nRaise: %.2fmm\n" % (1/scale, layercount/scale) + e.append(desc) + layercount+=1 + if args.numbers != 'false': + num = etree.Element('{http://www.w3.org/2000/svg}text') + num.attrib['id'] = 'textnum'+str(layercount) + num.attrib['x'] = str(layercount*2) + num.attrib['y'] = str(layercount*4+10) + num.attrib['style'] = 'fill:#00FF00;fill-opacity:1;stroke:#00FF00;font-family:FreeSans;font-size:10pt;stroke-opacity:1;stroke-width:0.1' + num.text = "%d" % layercount + e.append(num) + if args.center != 'false': + cc = etree.Element('{http://www.w3.org/2000/svg}path') + cc.attrib['id'] = 'ccross'+str(layercount) + cc.attrib['style'] = 'fill:none;fill-opacity:1;stroke:#0000FF;font-family:FreeSans;font-size:10pt;stroke-opacity:1;stroke-width:0.1' + cc.attrib['d'] = 'M %s,%s v 10 M %s,%s h 10 M %s,%s h 4' % (cx, cy-5, cx-5, cy, cx-2, cy+5) + e.append(cc) + + + +polygoncount = 0 +for e in doc.iterfind('//{*}polygon'): + # e.tag = '{http://www.w3.org/2000/svg}polygon' + # e.attrib = {'{http://slic3r.org/namespaces/slic3r}type': 'contour', 'points': '276.422496,309.4 260.209984,309.4 260.209984,209.03 276.422496,209.03', 'style': 'fill: white'} + e.tag = re.sub('polygon$', 'path', e.tag) + polygoncount += 1 + e.attrib['id'] = 'polygon%d' % polygoncount + e.attrib['{http://www.inkscape.org/namespaces/inkscape}connector-curvature'] = '0' + e.attrib['style'] = 'fill:none;fill-opacity:1;stroke:#FF0000;stroke-opacity:1;stroke-width:0.1' + e.attrib['d'] = 'M ' + re.sub(' ', ' L ', scale_points(e.attrib['points'], 1/scale)) + ' Z' + del e.attrib['points'] + if e.attrib.get('{http://slic3r.org/namespaces/slic3r}type') == 'contour': + # remove contour, but keep all slic3r:type='hole', whatever it is worth later. + del e.attrib['{http://slic3r.org/namespaces/slic3r}type'] + +try: + # Available in lxml since 3.5.0 + # Make an xmlns declaration in the svg header, and use the "inkscape:" prefix throughout the document. + etree.cleanup_namespaces(doc.getroot(), top_nsmap={ + 'inkscape': 'http://www.inkscape.org/namespaces/inkscape', + 'sodipodi': 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'}) +except: + pass + +try: + print("{0}: {1} polygons in {2} layers converted to paths.".format(svgfile, polygoncount, layercount), file=tty) +except: + pass + +if args.stdout: + doc.write(sys.stdout) +else: + doc.write(svgfile, pretty_print=True) diff --git a/fablabchemnitz_involute.py b/fablabchemnitz_involute.py new file mode 100644 index 0000000..f0910c7 --- /dev/null +++ b/fablabchemnitz_involute.py @@ -0,0 +1,315 @@ +# Based on gearUtils-03.js by Dr A.R.Collins +# Latest version: + +# Calculation of Bezier coefficients for +# Higuchi et al. approximation to an involute. +# ref: YNU Digital Eng Lab Memorandum 05-1 + +from math import * +from fablabchemnitz_svg import * + +def genInvolutePolar(Rb, R): # Rb = base circle radius + # returns the involute angle as function of radius R. + return (sqrt(R*R - Rb*Rb) / Rb) - acos(Rb / R) + +def rotate(pt, rads): # rotate pt by rads radians about origin + sinA = sin(rads) + cosA = cos(rads) + return [pt[0] * cosA - pt[1] * sinA, + pt[0] * sinA + pt[1] * cosA] + +def toCartesian(radius, angle): # convert polar coords to cartesian + return [radius * cos(angle), radius * sin(angle)] + +def CreateExternalGear(m, Z, phi): + # ****** external gear specifications + addendum = m # distance from pitch circle to tip circle + dedendum = 1.25 * m # pitch circle to root, sets clearance + clearance = dedendum - addendum + + # Calculate radii + Rpitch = Z * m / 2 # pitch circle radius + Rb = Rpitch*cos(phi * pi / 180) # base circle radius + Ra = Rpitch + addendum # tip (addendum) circle radius + Rroot = Rpitch - dedendum # root circle radius + fRad = 1.5 * clearance # fillet radius, max 1.5*clearance + Rf = sqrt((Rroot + fRad) * (Rroot + fRad) - (fRad * fRad)) # radius at top of fillet + if (Rb < Rf): + Rf = Rroot + clearance + + # ****** calculate angles (all in radians) + pitchAngle = 2 * pi / Z # angle subtended by whole tooth (rads) + baseToPitchAngle = genInvolutePolar(Rb, Rpitch) + pitchToFilletAngle = baseToPitchAngle # profile starts at base circle + if (Rf > Rb): # start profile at top of fillet (if its greater) + pitchToFilletAngle -= genInvolutePolar(Rb, Rf) + + filletAngle = atan(fRad / (fRad + Rroot)) # radians + + # ****** generate Higuchi involute approximation + fe = 1 # fraction of profile length at end of approx + fs = 0.01 # fraction of length offset from base to avoid singularity + if (Rf > Rb): + fs = (Rf * Rf - Rb * Rb) / (Ra * Ra - Rb * Rb) # offset start to top of fillet + + # approximate in 2 sections, split 25% along the involute + fm = fs + (fe - fs) / 4 # fraction of length at junction (25% along profile) + dedBez = BezCoeffs(m, Z, phi, 3, fs, fm) + addBez = BezCoeffs(m, Z, phi, 3, fm, fe) + + dedInv = dedBez.involuteBezCoeffs() + addInv = addBez.involuteBezCoeffs() + + # join the 2 sets of coeffs (skip duplicate mid point) + inv = dedInv + addInv[1:] + + # create the back profile of tooth (mirror image) + invR = [0 for i in range(0, len(inv))] # involute profile along back of tooth + for i in range(0, len(inv)): + # rotate all points to put pitch point at y = 0 + pt = rotate(inv[i], -baseToPitchAngle - pitchAngle / 4) + inv[i] = pt + # generate the back of tooth profile nodes, mirror coords in X axis + invR[i] = [pt[0], -pt[1]] + + # ****** calculate section junction points R=back of tooth, Next=front of next tooth) + fillet = toCartesian(Rf, -pitchAngle / 4 - pitchToFilletAngle) # top of fillet + filletR = [fillet[0], -fillet[1]] # flip to make same point on back of tooth + rootR = toCartesian(Rroot, pitchAngle / 4 + pitchToFilletAngle + filletAngle) + rootNext = toCartesian(Rroot, 3 * pitchAngle / 4 - pitchToFilletAngle - filletAngle) + filletNext = rotate(fillet, pitchAngle) # top of fillet, front of next tooth + + # Draw the shapes in SVG + t_inc = 2.0 * pi / float(Z) + thetas = [(x * t_inc) for x in range(Z)] + + svg = SVG_move(fillet, 0) # start at top of fillet + + for theta in thetas: + if (Rf < Rb): + svg += SVG_line(inv[0], theta) # line from fillet up to base circle + + svg += SVG_curve2(inv[1], inv[2], inv[3], + inv[4], inv[5], inv[6], theta) + + svg += SVG_circle(invR[6], Ra, 1, theta) # arc across addendum circle + + # svg = SVG_move(invR[6]) # TEMP + svg += SVG_curve2(invR[5], invR[4], invR[3], + invR[2], invR[1], invR[0], theta) + + if (Rf < Rb): + svg += SVG_line(filletR, theta) # line down to topof fillet + + if (rootNext[1] > rootR[1]): # is there a section of root circle between fillets? + svg += SVG_circle(rootR, fRad, 0, theta) # back fillet + svg += SVG_circle(rootNext, Rroot, 1, theta) # root circle arc + + svg += SVG_circle(filletNext, fRad, 0, theta) + + svg += SVG_close() + + return svg + +def CreateInternalGear(m, Z, phi): + addendum = 0.6 * m # pitch circle to tip circle (ref G.M.Maitra) + dedendum = 1.25 * m # pitch circle to root radius, sets clearance + + # Calculate radii + Rpitch = Z * m / 2 # pitch radius + Rb = Rpitch * cos(phi * pi / 180) # base radius + Ra = Rpitch - addendum # addendum radius + Rroot = Rpitch + dedendum# root radius + clearance = 0.25 * m # gear dedendum - pinion addendum + Rf = Rroot - clearance # radius of top of fillet (end of profile) + fRad = 1.5 * clearance # fillet radius, 1 .. 1.5*clearance + + # ****** calculate subtended angles + pitchAngle = 2 * pi / Z # angle between teeth (rads) + baseToPitchAngle = genInvolutePolar(Rb, Rpitch) + tipToPitchAngle = baseToPitchAngle # profile starts from base circle + if (Ra > Rb): + tipToPitchAngle -= genInvolutePolar(Rb, Ra) # start profile from addendum + pitchToFilletAngle = genInvolutePolar(Rb, Rf) - baseToPitchAngle + filletAngle = 1.414 * clearance / Rf # to make fillet tangential to root + + # ****** generate Higuchi involute approximation + fe = 1 # fraction of involute length at end of approx (fillet circle) + fs = 0.01 # fraction of length offset from base to avoid singularity + if (Ra > Rb): + fs = (Ra*Ra - Rb*Rb) / (Rf*Rf - Rb*Rb) # start profile from addendum (tip circle) + + # approximate in 2 sections, split 25% along the profile + fm = fs + (fe - fs) / 4 + + addBez = BezCoeffs(m, Z, phi, 3, fs, fm) + dedBez = BezCoeffs(m, Z, phi, 3, fm, fe) + addInv = addBez.involuteBezCoeffs() + dedInv = dedBez.involuteBezCoeffs() + + # join the 2 sets of coeffs (skip duplicate mid point) + invR = addInv + dedInv[1:] + + # create the front profile of tooth (mirror image) + inv = [0 for i in range(0, len(invR))] # back involute profile + for i in range(0, len(inv)): + # rotate involute to put center of tooth at y = 0 + pt = rotate(invR[i], pitchAngle / 4 - baseToPitchAngle) + invR[i] = pt + # generate the back of tooth profile, flip Y coords + inv[i] = [pt[0], -pt[1]] + + # ****** calculate coords of section junctions + fillet = [inv[6][0], inv[6][1]] # top of fillet, front of tooth + tip = toCartesian(Ra, -pitchAngle / 4 + tipToPitchAngle) # tip, front of tooth + tipR = [tip[0], -tip[1]] # addendum, back of tooth + rootR = toCartesian(Rroot, pitchAngle / 4 + pitchToFilletAngle + filletAngle) + rootNext = toCartesian(Rroot, 3 * pitchAngle / 4 - pitchToFilletAngle - filletAngle) + filletNext = rotate(fillet, pitchAngle) # top of fillet, front of next tooth + + # Draw the shapes in SVG + t_inc = 2.0 * pi / float(Z) + thetas = [(x * t_inc) for x in range(Z)] + + svg = SVG_move(fillet, 0) # start at top of fillet + + for theta in thetas: + svg += SVG_curve2(inv[5], inv[4], inv[3], + inv[2], inv[1], inv[0], theta) + + if (Ra < Rb): + svg += SVG_line(tip, theta) # line from end of involute to addendum (tip) + + svg += SVG_circle(tipR, Ra, 1, theta) # arc across tip circle + + if (Ra < Rb): + svg += SVG_line(invR[0], theta) # line from addendum to start of involute + + svg += SVG_curve2(invR[1], invR[2], invR[3], + invR[4], invR[5], invR[6], theta) + + if (rootR[1] < rootNext[1]): # there is a section of root circle between fillets + svg += SVG_circle(rootR, fRad, 1, theta) # fillet on back of tooth + + svg += SVG_circle(rootNext, Rroot, 1, theta) # root circle arc + + svg += SVG_circle(filletNext, fRad, 1, theta) # fillet on next + + return svg + +class BezCoeffs: + def chebyExpnCoeffs(self, j, func): + N = 50 # a suitably large number N>>p + c = 0 + for k in range(1, N + 1): + c += func(cos(pi * (k - 0.5) / N)) * cos(pi * j * (k - 0.5) / N) + + return 2 *c / N + + def chebyPolyCoeffs(self, p, func): + coeffs = [0, 0, 0, 0] + fnCoeff = [0, 0, 0, 0] + T = [[1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0] + ] + + # now generate the Chebyshev polynomial coefficient using + # formula T(k+1) = 2xT(k) - T(k-1) which yields + # T = [ [ 1, 0, 0, 0, 0, 0], # T0(x) = +1 + # [ 0, 1, 0, 0, 0, 0], # T1(x) = 0 +x + # [-1, 0, 2, 0, 0, 0], # T2(x) = -1 0 +2xx + # [ 0, -3, 0, 4, 0, 0], # T3(x) = 0 -3x 0 +4xxx + # [ 1, 0, -8, 0, 8, 0], # T4(x) = +1 0 -8xx 0 +8xxxx + # [ 0, 5, 0,-20, 0, 16], # T5(x) = 0 5x 0 -20xxx 0 +16xxxxx + # ... ] + + for k in range(1, p + 1): + for j in range(0, len(T[k]) - 1): + T[k + 1][j + 1] = 2 * T[k][j] + for j in range(0, len(T[k - 1])): + T[k + 1][j] -= T[k - 1][j] + + # convert the chebyshev function series into a simple polynomial + # and collect like terms, out T polynomial coefficients + for k in range(0, p + 1): + fnCoeff[k] = self.chebyExpnCoeffs(k, func) + coeffs[k] = 0 + + for k in range(0, p + 1): + for pwr in range(0, p + 1): + coeffs[pwr] += fnCoeff[k] * T[k][pwr] + + coeffs[0] -= self.chebyExpnCoeffs(0, func) / 2 # fix the 0th coeff + + return coeffs + + # Equation of involute using the Bezier parameter t as variable + def involuteXbez(self, t): + # map t (0 <= t <= 1) onto x (where -1 <= x <= 1) + x = t * 2 - 1 + # map theta (where ts <= theta <= te) from x (-1 <=x <= 1) + theta = x * (self.te - self.ts) / 2 + (self.ts + self.te) / 2 + return self.Rb * (cos(theta) + theta * sin(theta)) + + def involuteYbez(self, t): + # map t (0 <= t <= 1) onto x (where -1 <= x <= 1) + x = t * 2 - 1 + # map theta (where ts <= theta <= te) from x (-1 <=x <= 1) + theta = x * (self.te - self.ts) / 2 + (self.ts + self.te) / 2 + return self.Rb * (sin(theta) - theta * cos(theta)) + + def binom(self, n, k): + coeff = 1 + for i in range(n - k + 1, n + 1): + coeff *= i + + for i in range(1, k + 1): + coeff /= i + + return coeff + + def bezCoeff(self, i, func): + # generate the polynomial coeffs in one go + polyCoeffs = self.chebyPolyCoeffs(self.p, func) + + bc = 0 + for j in range(0, i + 1): + bc += self.binom(i, j) * polyCoeffs[j] / self.binom(self.p, j) + + return bc + + def involuteBezCoeffs(self): + # calc Bezier coeffs + bzCoeffs = [] + for i in range(0, self.p + 1): + bcoeff = [0, 0] + bcoeff[0] = self.bezCoeff(i, self.involuteXbez) + bcoeff[1] = self.bezCoeff(i, self.involuteYbez) + bzCoeffs.append(bcoeff) + + return bzCoeffs + + # Parameters: + # module - sets the size of teeth (see gear design texts) + # numTeeth - number of teeth on the gear + # pressure angle - angle in degrees, usually 14.5 or 20 + # order - the order of the Bezier curve to be fitted [3, 4, 5, ..] + # fstart - fraction of distance along tooth profile to start + # fstop - fraction of distance along profile to stop + def __init__(self, module, numTeeth, pressureAngle, order, fstart, fstop): + self.Rpitch = module * numTeeth / 2 # pitch circle radius + self.phi = pressureAngle # pressure angle + self.Rb = self.Rpitch * cos(self.phi * pi / 180) # base circle radius + self.Ra = self.Rpitch + module # addendum radius (outer radius) + self.ta = sqrt(self.Ra * self.Ra - self.Rb * self.Rb) / self.Rb # involute angle at addendum + self.stop = fstop + + if (fstart < self.stop): + self.start = fstart + + self.te = sqrt(self.stop) * self.ta # involute angle, theta, at end of approx + self.ts = sqrt(self.start) * self.ta # involute angle, theta, at start of approx + self.p = order # order of Bezier approximation diff --git a/fablabchemnitz_isometric_projection.inx b/fablabchemnitz_isometric_projection.inx new file mode 100644 index 0000000..84fdac0 --- /dev/null +++ b/fablabchemnitz_isometric_projection.inx @@ -0,0 +1,24 @@ + + + <_name>Isometric Projection + fablabchemnitz.de.isometric_projection + fablabchemnitz_isometric_projection.py + inkex.py + + + + + + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_isometric_projection.py b/fablabchemnitz_isometric_projection.py new file mode 100644 index 0000000..0b61206 --- /dev/null +++ b/fablabchemnitz_isometric_projection.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import math +import sys +import inkex +from simpletransform import parseTransform, formatTransform +from simpletransform import computeBBox, applyTransformToPoint + +sys.path.append('/usr/share/inkscape/extensions') +inkex.localize() + + +class IsometricProjectionTools(inkex.Effect): + """ + Convert a flat 2D projection to one of the three visible sides in an + isometric projection, and vice versa. + """ + + attrTransformCenterX = inkex.addNS('transform-center-x', 'inkscape') + attrTransformCenterY = inkex.addNS('transform-center-y', 'inkscape') + + # Precomputed values for sine, cosine, and tangent of 30°. + rad_30 = math.radians(30) + cos_30 = math.cos(rad_30) + sin_30 = 0.5 # No point in using math.sin for 30°. + tan_30 = math.tan(rad_30) + + # Combined affine transformation matrices. The bottom row of these 3×3 + # matrices is omitted; it is always [0, 0, 1]. + transformations = { + # From 2D to isometric top down view: + # * scale vertically by cos(30°) + # * shear horizontally by -30° + # * rotate clock-wise 30° + 'to_top': [[cos_30, -cos_30, 0], + [sin_30, sin_30, 0]], + + # From 2D to isometric left-hand side view: + # * scale horizontally by cos(30°) + # * shear vertically by -30° + 'to_left': [[cos_30, 0, 0], + [sin_30, 1, 0]], + + # From 2D to isometric right-hand side view: + # * scale horizontally by cos(30°) + # * shear vertically by 30° + 'to_right': [[cos_30, 0, 0], + [-sin_30, 1, 0]], + + # From isometric top down view to 2D: + # * rotate counter-clock-wise 30° + # * shear horizontally by 30° + # * scale vertically by 1 / cos(30°) + 'from_top': [[tan_30, 1, 0], + [-tan_30, 1, 0]], + + # From isometric left-hand side view to 2D: + # * shear vertically by 30° + # * scale horizontally by 1 / cos(30°) + 'from_left': [[1 / cos_30, 0, 0], + [-tan_30, 1, 0]], + + # From isometric right-hand side view to 2D: + # * shear vertically by -30° + # * scale horizontally by 1 / cos(30°) + 'from_right': [[1 / cos_30, 0, 0], + [tan_30, 1, 0]] + } + + def __init__(self): + """ + Constructor. + """ + + inkex.Effect.__init__(self) + + self.OptionParser.add_option( + '-c', '--conversion', action='store', type='string', + dest='conversion', default='top', + help='Conversion to perform: (top|left|right)') + self.OptionParser.add_option( + '-r', '--reverse', action='store', type='string', + dest='reverse', default="false", + help='Reverse the transformation from isometric projection ' + + 'to flat 2D') + + def getTransformCenter(self, midpoint, node): + """ + Find the transformation center of an object. If the user set it + manually by dragging it in Inkscape, those coordinates are used. + Otherwise, an attempt is made to find the center of the object's + bounding box. + """ + + c_x = node.get(self.attrTransformCenterX) + c_y = node.get(self.attrTransformCenterY) + + # Default to dead-center. + if c_x is None: + c_x = 0.0 + else: + c_x = float(c_x) + if c_y is None: + c_y = 0.0 + else: + c_y = float(c_y) + + x = midpoint[0] + c_x + y = midpoint[1] - c_y + + return [x, y] + + def getMidPoint(self, bbox, node): + """ + Get the coordinates of the center of the bounding box. + """ + + x = bbox[1] - (bbox[1] - bbox[0]) / 2 + y = bbox[3] - (bbox[3] - bbox[2]) / 2 + + return [x, y] + + def translateBetweenPoints(self, matrix, here, there): + """ + Add a translation to a matrix that moves between two points. + """ + + x = there[0] - here[0] + y = there[1] - here[1] + matrix[0][2] += x + matrix[1][2] += y + + def moveTransformationCenter(self, node, midpoint, center_new): + """ + If a transformation center is manually set on the node, move it to + match the transformation performed on the node. + """ + + c_x = node.get(self.attrTransformCenterX) + c_y = node.get(self.attrTransformCenterY) + + if c_x is not None: + x = str(center_new[0] - midpoint[0]) + node.set(self.attrTransformCenterX, x) + if c_y is not None: + y = str(midpoint[1] - center_new[1]) + node.set(self.attrTransformCenterY, y) + + def effect(self): + """ + Apply the transformation. If an element already has a transformation + attribute, it will be combined with the transformation matrix for the + requested conversion. + """ + + if self.options.reverse == "true": + conversion = "from_" + self.options.conversion + else: + conversion = "to_" + self.options.conversion + + if len(self.selected) == 0: + inkex.errormsg(_("Please select an object to perform the " + + "isometric projection transformation on.")) + return + + # Default to the flat 2D to isometric top down view conversion if an + # invalid identifier is passed. + effect_matrix = self.transformations.get( + conversion, self.transformations.get('to_top')) + + for id, node in self.selected.items(): + bbox = computeBBox([node]) + midpoint = self.getMidPoint(bbox, node) + center_old = self.getTransformCenter(midpoint, node) + transform = node.get("transform") + # Combine our transformation matrix with any pre-existing + # transform. + matrix = parseTransform(transform, effect_matrix) + + # Compute the location of the transformation center after applying + # the transformation matrix. + center_new = center_old[:] + applyTransformToPoint(matrix, center_new) + applyTransformToPoint(matrix, midpoint) + + # Add a translation transformation that will move the object to + # keep its transformation center in the same place. + self.translateBetweenPoints(matrix, center_new, center_old) + + node.set('transform', formatTransform(matrix)) + + # Adjust the transformation center. + self.moveTransformationCenter(node, midpoint, center_new) + +# Create effect instance and apply it. +effect = IsometricProjectionTools() +effect.affect() diff --git a/fablabchemnitz_join_paths_optimized.inx b/fablabchemnitz_join_paths_optimized.inx new file mode 100644 index 0000000..c318cb6 --- /dev/null +++ b/fablabchemnitz_join_paths_optimized.inx @@ -0,0 +1,27 @@ + + + <_name>Join Paths + fablabchemnitz.de.join_paths_optimized + fablabchemnitz_join_paths_optimized.py + inkex.py + + + + + + <_param name="subdividePathhelp" type="description" xml:space="preserve">This effect joins the Bezier curves, with straight line segments. If the end nodes are close enough, they are merged into a single one. With the optimized option selected, the new curve starts from the top most curve from the selection. The curves are then joined based on the distance of their closest end point to the previous curve. + + + + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_join_paths_optimized.py b/fablabchemnitz_join_paths_optimized.py new file mode 100644 index 0000000..9fb2b62 --- /dev/null +++ b/fablabchemnitz_join_paths_optimized.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python + +''' +Inkscape extension to join the selected paths. With the optimized option selected, +the next path to be joined is the one, which has one of its end nodes closest to the ending +node of the earlier path. + +Copyright (C) 2019 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex, cubicsuperpath +import copy + +def floatCmpWithMargin(float1, float2, margin): + return abs(float1 - float2) < margin + +def vectCmpWithMargin(vect1, vect2, margin): + return all(floatCmpWithMargin(vect2[i], vect1[i], margin) for i in range(0, len(vect1))) + +def getPartsFromCubicSuper(cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + +def getCubicSuperFromParts(parts): + cbsuper = [] + for part in parts: + subpath = [] + lastPt = None + pt = None + for seg in part: + if(pt == None): + ptLeft = seg[0] + pt = seg[0] + ptRight = seg[1] + subpath.append([ptLeft, pt, ptRight]) + ptLeft = seg[2] + pt = seg[3] + subpath.append([ptLeft, pt, pt]) + cbsuper.append(subpath) + return cbsuper + +def getArrangedIds(pathMap, startPathId): + nextPathId = startPathId + orderPathIds = [nextPathId] + + #Arrange in order + while(len(orderPathIds) < len(pathMap)): + minDist = 9e+100 #A large float + closestId = None + np = pathMap[nextPathId] + npPts = [np[-1][-1][-1]] + if(len(orderPathIds) == 1):#compare both the ends for the first path + npPts.append(np[0][0][0]) + + for key in pathMap: + if(key in orderPathIds): + continue + parts = pathMap[key] + start = parts[0][0][0] + end = parts[-1][-1][-1] + + for i, npPt in enumerate(npPts): + dist = abs(start[0] - npPt[0]) + abs(start[1] - npPt[1]) + if(dist < minDist): + minDist = dist + closestId = key + dist = abs(end[0] - npPt[0]) + abs(end[1] - npPt[1]) + if(dist < minDist): + minDist = dist + pathMap[key] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(parts)] + closestId = key + + #If start point of the first path is closer reverse its direction + if(i > 0 and closestId == key): + pathMap[nextPathId] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(np)] + + orderPathIds.append(closestId) + nextPathId = closestId + return orderPathIds + +class JoinPathsOptimEffect(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + + self.OptionParser.add_option("--optimized", + action="store", type="inkbool", + dest="optimized", default=True) + + self.OptionParser.add_option("--tab", action="store", + type="string", dest="tab", default="sampling", help="Tab") + + + def effect(self): + selections = self.selected + pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS) + + paths = {p.get('id'): getPartsFromCubicSuper(cubicsuperpath.parsePath(p.get('d'))) \ + for p in pathNodes if (p.get('id') in selections.keys() and p.get('d') != "")} + + #paths.keys() Order disturbed + pathIds = [p.get('id') for p in pathNodes if (p.get('id') in paths.keys())] + + if(len(paths) > 1): + if(self.options.optimized): + startPathId = pathIds[0] + pathIds = getArrangedIds(paths, startPathId) + + newParts = [] + firstElem = None + for key in pathIds: + parts = paths[key] + # ~ parts = getPartsFromCubicSuper(cspath) + start = parts[0][0][0] + elem = selections[key] + + if(len(newParts) == 0): + newParts += parts[:] + firstElem = elem + else: + if(vectCmpWithMargin(start, newParts[-1][-1][-1], margin = .01)): + newParts[-1] += parts[0] + else: + newSeg = [newParts[-1][-1][-1], newParts[-1][-1][-1], start, start] + newParts[-1].append(newSeg) + newParts[-1] += parts[0] + + if(len(parts) > 1): + newParts += parts[1:] + + parent = self.getParentNode(elem) + idx = parent.index(elem) + parent.remove(elem) + + newElem = copy.copy(firstElem) + oldId = firstElem.get('id') + newElem.set('d', cubicsuperpath.formatPath(getCubicSuperFromParts(newParts))) + newElem.set('id', oldId + '_joined') + parent.insert(idx, newElem) + +effect = JoinPathsOptimEffect() +effect.affect() diff --git a/fablabchemnitz_jpegexport.inx b/fablabchemnitz_jpegexport.inx new file mode 100644 index 0000000..3a59c5e --- /dev/null +++ b/fablabchemnitz_jpegexport.inx @@ -0,0 +1,31 @@ + + + <_name>JPEG Export + fablabchemnitz.de.jpegexport + fablabchemnitz_jpegexport.py + C:\Users\ + + 100 + 90 + true + true + <_param name="usage" type="description" appearance="header">Usage + Select the objects in the drawing that you wish to export, or make a check at "Export whole page". + +Enter a name for your JPG file (with full path) and choose a background color for the exported image (JPG format does not support transparency). + +Leave background color field blank for white. + +This extension requires that imagemagick is installed, more info and download at http://www.imagemagick.org. + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_jpegexport.py b/fablabchemnitz_jpegexport.py new file mode 100644 index 0000000..ecf5635 --- /dev/null +++ b/fablabchemnitz_jpegexport.py @@ -0,0 +1,200 @@ +#! /usr/bin/env python + +#This program is free software: you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program. If not, see . + +# Author: Giacomo Mirabassi +# Version: 0.2 + +import sys +import os +import re +from distutils.spawn import find_executable + +import subprocess +import math + +import inkex +import simpletransform + +inkex.localize() + +class JPEGExport(inkex.Effect): + + def __init__(self): + """Init the effect library and get options from gui.""" + inkex.Effect.__init__(self) + + self.OptionParser.add_option("--path", action="store", type="string", dest="path", default="", help="") + self.OptionParser.add_option("--bgcol", action="store", type="string", dest="bgcol", default="#ffffff", help="") + self.OptionParser.add_option("--quality", action="store", type="int", dest="quality", default="90", help="") + self.OptionParser.add_option("--density", action="store", type="int", dest="density", default="90", help="") + self.OptionParser.add_option("--page", action="store", type="inkbool", dest="page", default=False, help="") + self.OptionParser.add_option("--fast", action="store", type="inkbool", dest="fast", default=True, help="") + + def effect(self): + """get selected item coords and call command line command to export as a png""" + # The user must supply a directory to export: + if not self.options.path: + inkex.errormsg(_('Please indicate a file name and path to export the jpg.')) + exit() + if not os.path.basename(self.options.path): + inkex.errormsg(_('Please indicate a file name.')) + exit() + if not os.path.dirname(self.options.path): + inkex.errormsg(_('Please indicate a directory other than your system\'s base directory.')) + exit() + + # Test if the directory exists: + if not os.path.exists(os.path.dirname(self.options.path)): + inkex.errormsg(_('The directory "%s" does not exist.') % os.path.dirname(self.options.path)) + exit() + + outfile=self.options.path + curfile = self.args[-1] + + # Test if color is valid + _rgbhexstring = re.compile(r'#[a-fA-F0-9]{6}$') + if not _rgbhexstring.match(self.options.bgcol): + inkex.errormsg(_('Please indicate the background color like this: \"#abc123\" or leave the field empty for white.')) + exit() + + bgcol = self.options.bgcol + + if self.options.page == False: + if len(self.selected) == 0: + inkex.errormsg(_('Please select something.')) + exit() + + coords=self.processSelected() + self.exportArea(int(coords[0]),int(coords[1]),int(coords[2]),int(coords[3]),curfile,outfile,bgcol) + + elif self.options.page == True: + self.exportPage(curfile,outfile,bgcol) + + def processSelected(self): + """Iterate trough nodes and find the bounding coordinates of the selected area""" + startx=None + starty=None + endx=None + endy=None + nodelist=[] + root=self.document.getroot(); + toty=self.getUnittouu(root.attrib['height']) + scale = self.getUnittouu('1px') + props=['x', 'y', 'width', 'height'] + + for id in self.selected: + if self.options.fast == True: # uses simpletransform + nodelist.append(self.getElementById(id)) + else: # uses command line + rawprops=[] + for prop in props: + command=("inkscape", "--without-gui", "--query-id", id, "--query-"+prop, self.args[-1]) + proc=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + proc.wait() + rawprops.append(math.ceil(self.getUnittouu(proc.stdout.read()))) + nodeEndX = rawprops[0] + rawprops[2] + nodeStartY = toty - rawprops[1] - rawprops[3] + nodeEndY = toty - rawprops[1] + + if rawprops[0] < startx or startx is None: + startx = rawprops[0] + + if nodeStartY < starty or starty is None: + starty = nodeStartY + + if nodeEndX > endx or endx is None: + endx = nodeEndX + + if nodeEndY > endy or endy is None: + endy = nodeEndY + + + if self.options.fast == True: # uses simpletransform + bbox = simpletransform.computeBBox(nodelist) + startx = math.ceil(bbox[0]) + endx = math.ceil(bbox[1]) + h = -bbox[2] + bbox[3] + starty = toty - math.ceil(bbox[2]) -h + endy = toty - math.ceil(bbox[2]) + + coords = [startx / scale, starty / scale, endx / scale, endy / scale] + return coords + + def exportArea(self, x0, y0, x1, y1, curfile, outfile, bgcol): + tmp = self.getTmpPath() + command="inkscape -a %s:%s:%s:%s -d %s -e \"%sjpinkexp.png\" -b \"%s\" %s" % (x0, y0, x1, y1, self.options.density, tmp, bgcol, curfile) + + p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = p.wait() + f = p.stdout + err = p.stderr + + self.tojpeg(outfile) + + def exportPage(self, curfile, outfile, bgcol): + tmp = self.getTmpPath() + command = "inkscape -C -d %s -e \"%sjpinkexp.png\" -b\"%s\" %s" % (self.options.density, tmp,bgcol, curfile) + + p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = p.wait() + f = p.stdout + err = p.stderr + + self.tojpeg(outfile) + + + def tojpeg(self,outfile): + tmp = self.getTmpPath() + if os.name == 'nt': + outfile = outfile.encode('string-escape') + + # set the ImageMagick command to run based on what's installed + if find_executable('magick'): + command = "magick \"%sjpinkexp.png\" -sampling-factor 4:4:4 -strip -interlace JPEG -colorspace RGB -quality %s -density %s \"%s\" " % (tmp, self.options.quality, self.options.density, outfile) + # inkex.debug(command) + elif find_executable('convert'): + command = "convert \"%sjpinkexp.png\" -sampling-factor 4:4:4 -strip -interlace JPEG -colorspace RGB -quality %s -density %s \"%s\" " % (tmp, self.options.quality, self.options.density, outfile) + # inkex.debug(command) + else: + inkex.errormsg(_('ImageMagick does not appear to be installed.')) + exit() + + p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = p.wait() + f = p.stdout + err = p.stderr + # inkex.debug(return_code) + + def getTmpPath(self): + """Define the temporary folder path depending on the operating system""" + if os.name == 'nt': + return os.getenv('TEMP') + '\\' + else: + return '/tmp/' + + def getUnittouu(self, param): + try: + return inkex.unittouu(param) + + except AttributeError: + return self.unittouu(param) + +def _main(): + e = JPEGExport() + e.affect() + exit() + +if __name__=="__main__": + _main() diff --git a/fablabchemnitz_lace_circular_ground.inx b/fablabchemnitz_lace_circular_ground.inx new file mode 100644 index 0000000..7a1ebca --- /dev/null +++ b/fablabchemnitz_lace_circular_ground.inx @@ -0,0 +1,46 @@ + + + <_name>Circular Ground from Template + fablabchemnitz.de.lace_circular_ground + org.inkscape.output.svg.inkscape + fablabchemnitz_lace_circular_ground.py + inkex.py + Wrap lace pattern found in template file around a circle. + Note: Drawing can become quite large when "Number of copies around circle" is small or "Diameter" of inside circle is large. + + Grid description + 45.0 + 30 + Patch description + 50 + + + + + + + + 3 + Line Appearance + 1 + + + + + + + + Color: + 255 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lace_circular_ground.py b/fablabchemnitz_lace_circular_ground.py new file mode 100644 index 0000000..1446513 --- /dev/null +++ b/fablabchemnitz_lace_circular_ground.py @@ -0,0 +1,478 @@ +#!/usr/bin/env python2 + +# Copyright (c) 2017, Ben Connors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import os +from math import sin, cos, acos, tan, radians, pi, sqrt, ceil, floor + +import inkex, simplestyle + +__author__ = 'Ben Connors' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Jo Pol', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class Vector: + def __repr__(self): + return 'Vector(%.4f, %.4f)' % (self.dx,self.dy) + + def __hash__(self): + return hash((self.dx,self.dy)) + + def rotate(self,theta): + """ Rotate counterclockwise by theta.""" + return self.mag*Vector(cos(self.theta+theta), + sin(self.theta+theta), + _theta=self.theta+theta) + + def __mul__(self,other): + return Vector(self.dx*other,self.dy*other,_theta=self.theta) + + def __rmul__(self,other): + return self*other + + def __init__(self,dx,dy,_theta=None): + """ Create a vector with the specified components. + _theta should NOT be passed in normal use - this value is passed by + vector functions where the angle of the new vector is known in order + to eliminate that calculation. + """ + self.dx = float(dx) + self.dy = float(dy) + self.mag = sqrt(dx**2 + dy**2) + self.tuple = (dx,dy) + + ## Angle to positive X axis + if _theta == None: + _theta = acos(self.dx/self.mag) + self.theta = 2*pi-_theta if self.dy < 0 else _theta + else: + self.theta = _theta + + +class CircularGround(inkex.Effect): + + def unitToUu(self,param): + """ Convert units. + Converts a number in some units into the units used internally by + Inkscape. + + param is a string representing a number with units attached. An + example would be '3.8mm'. Any units supported by Inkscape + are supported by this function. + + This wrapper function catches changes made to the location + of the function between Inkscape versions. + """ + try: + return self.unittouu(param) + except: + return inkex.unittouu(param) + + def getColorString(self, longColor): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + longColor = long(longColor) + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + return hexColor + + def loadFile(self): + """ Load the specification for the unit cell from the file given. + Note that the specification should be in the following format: + TYPE ROWS COLS + [x1,y1,x2,y2,x3,y3] [x4,y4,x5 ... + + And so on. The TYPE is always CHECKER and is ignored by this program. + ROWS specifies the height of the unit cell (i.e. max_y - min_y) + and COLS specifies the same for the width (i.e. max_x - min_x). + Note that this is not enforced when drawing the unit cell - points + may be outside this range. These values are used to determine the + distance between unit cells (i.e. unit cells may overlap). + """ + # Ensure that file exists and has the proper extension + if not self.options.file: + inkex.errormsg('You must specify a template file.') + exit() + self.options.file = self.options.file.strip() + if self.options.file == '': + inkex.errormsg('You must specify a template file.') + exit() + if not os.path.isfile(self.options.file): + inkex.errormsg('You have not specified a valid path for the template file.\n\nYour entry: '+self.options.file) + exit() + extension = os.path.splitext(self.options.file)[1] + if extension != '.txt': + inkex.errormsg('The file name must end with .txt.\n\nYour entry: '+self.options.file) + exit() + + data = [] + rows, cols = -1, -1 + with open(self.options.file,'r') as f: + for line in f: + line = line.strip() + ## If rows is not a positive integer, we're on the first line + if rows == -1: + tmp = line.split('\t') + _type,cols,rows = tmp[0],int(tmp[1]),int(tmp[2]) + else: + data.append([]) + for cell in line[1:-1].split(']\t['): + cell = cell.strip() + ## The pattern must be rotated 90 degrees clockwise. It's + ## simplest to just do that here + tmp = [float(n) for n in cell.split(',')] + data[-1].append([a for b in zip([rows-i for i in tmp[1::2]],[cols-i for i in tmp[::2]]) for a in b]) + return {'type': _type, 'rows': rows, 'cols': cols, 'data' : data} + + def line(self,points): + """ + Draw a line from point at (x1, y1) to point at (x2, y2). + Style of line is hard coded and specified by 's'. + """ + # define the motions + path = ('M%.4f,%.4fL' % tuple(points[0][:2])) + 'L'.join([('%f,%f' % tuple(a[:2])) for a in points[1:]]) + + # define the stroke style + s = {'stroke-linejoin': 'miter', + 'stroke-width': self.options.linewidth, + 'stroke-opacity': '1.0', + 'fill-opacity': '1.0', + 'stroke': self.options.linecolor, + 'stroke-linecap': 'round', + 'fill': 'none' + } + + + ## Attributes for new element + attribs = {'style' : simplestyle.formatStyle(s), + 'd' : path} + + ## Add new element + inkex.etree.SubElement(self.current_layer, inkex.addNS('path', 'svg'), attribs) + + def baseVectors(self,segments): + """ Create vectors for all vertices on the specified polygon.""" + ## Start at 12 o'clock + theta = pi/2 + ## Move clockwise + dtheta = -2*pi/segments + + vector = Vector(0,self.options.diameter/2) + vectors = [vector] + for i in range(1,segments): + vector = vector.rotate(dtheta) + vectors.append(vector) + return vectors + + def fuzzyEquality(self,a,b): + return (a-b <= 1e-8) + + def circleWrap(self,points,segments): + """ Wrap a grid around the origin. + <> is a list of 2- or 3-tuples. + In the case of 3-tuples, they should be laid out like: (x,y,name) + Whereas 2-tuples should eliminate the name portion. + Only one format may be passed; they may not be mixed. + x- and y- values are rounded to the nearest integer. + If more precision is desired, scale up the points before calling this function. + x-values should be within [0,segments) + Values not within range will be moved within range. + y-values must be greater than 0 + An error will be raised if a y-value is less than 0. + The 'name' portion is not touched by this function; it is merely + passed along. This may be used to identify points or groups of points. + <> is the inside radius (i.e. distance to origin from a point with + a y-value of 0). + <> is the number of segments (sides) of the polygon. + <> is the angle of the diagonal of the square approximation. It must be + somewhere on (0,pi/2). + """ + angle = self.options.angle + if angle <= 0 or angle >= pi/2: + raise ValueError('Angle must be in (0,pi/2)') + + vectors = self.baseVectors(segments) + theta = 2*pi/segments + + """ + Determine the coefficient to multiply the vectors by in order to deal + with a higher x-value. + With R being the large radius (radius to next y-value) and r being the + small radius (radius to current y-value): + + a^2 = r^2 (1 - cos(theta)) ## Cosine law + b^2 = R^2 (1 - cos(theta)) + + To get the most square-like trapezoid: + R - r = 0.5(a+b) + + Subbing in the equations for b^2 and a^2 yields the following lines. + """ + C = sqrt(2*(1-cos(theta))) + val = 2*tan(pi/2-angle) + coeff = (val+C)/(val-C) + diff = coeff-1 + + ## Sort points in order of increasing y-value. + named = False + if len(points[0]) == 3: + named = True + points = [(x,y,name) for x,y,name in sorted(points,key=lambda a: a[1])] + else: + points = [(x,y,None) for x,y in sorted(points,key=lambda a: a[1])] + + done = [] + cur_y = 0 + for point in points: + x,y,name = point + + ## Check constraints + if y < cur_y: + raise ValueError('Invalid point (%d,%d)' % (x,y)) + elif y >= cur_y+1: + ## Multiply vectors accordingly + delta = floor(y-cur_y) + vectors = [(coeff**delta)*v for v in vectors] + cur_y = floor(y) + + ## Wrap x-value to lie in the proper place + ## lazy + while x < 0: + x += segments + while x >= segments: + x -= segments + + if self.fuzzyEquality(y,int(y)) and self.fuzzyEquality(x,int(x)): + x = int(x) + ## Can do it the quick way + wx,wy = vectors[x].tuple + else: + ## Use vector rotation + ## Determine nearest vector (counterclockwise) + pointer = vectors[floor(x)] + ## Scale x and y to be within (0,1) + x -= int(x) + y -= int(y) + c = C*x ## This value is used a lot, cache it + ## Now the angle of rotation must be determined using cosine law + factor = 1 + if not self.fuzzyEquality(x,0): + ## x isn't equal to 0, must rotate vector + n2 = 1+c**2-2*c*cos((pi-theta)/2) + factor = sqrt(n2) + phi = acos((n2+1-c**2)/(2*factor)) + pointer = pointer.rotate(-phi) + ## Correct vector magnitude + pointer = (1+y*diff)*factor*pointer + wx,wy = pointer.tuple + if named: + done.append((wx,wy,name)) + else: + done.append((wx,wy)) + return done + + def createGround(self,unit,rows,cols,scale=1): + """ Return a lace ground. + + This function returns a list of points and corresponding lines that may + be transformed or passed to a drawing function (such as draw_image) in + order to draw a lace ground. + + unit is the pattern for the lace ground, in the format returned by + loadFile. + + rows and cols are integers and represent the number of horizontal repeats + and vertical repeats of the pattern, respectively. + + scale is an optional value that can be used to scale the pattern before it + is repeated. Note that this comes with some constraints - the + template's rows and cols after scaling (i.e. unit['rows']*scale) must + be an integer. For example, a template with 4 rows and 4 cols before + scaling may be scaled by any integer value above 1 and select values + between 1 and 0 (namely 0.25,0.5,0.75). A scale value of 'True' may be + passed if each repeat of the template should fit within a 1x1 square. + """ + data = unit['data'] + unit_rows = unit['rows'] + unit_cols = unit['cols'] + if scale <= 0: + raise ValueError('Scale must be greater than zero') + elif scale != 1: + ## The user wants to scale the template + _data = [] + for row in data: + _row = [] + for c in row: + if scale == True: + _row.append([i for n in zip([a/unit_cols for a in c[::2]],[a/unit_rows for a in c[1::2]]) for i in n]) + else: + _row.append([a*scale for a in c]) + _data.append(_row) + data = _data + unit_rows *= scale + unit_cols *= scale + ## Catching invalid input + if not self.fuzzyEquality(unit_rows,int(unit_rows)): + raise ValueError('Scale factor must result in an integer value for template rows') + if not self.fuzzyEquality(unit_cols,int(unit_cols)): + raise ValueError('Scale factor must result in an integer value for template cols') + unit_rows = int(unit_rows) + unit_cols = int(unit_cols) + line_num = 0 + points = [] + for c in range(cols): + ## Do each column first + x = c*unit_cols + for r in range(rows): + y = r*unit_rows + for row in data: + for x1,y1,x2,y2,x3,y3 in row: + ## In order to draw lines in the correct order, an extra + ## point must be added + p1 = (x+x1,y+y1,'%09da,1'%line_num) + p2 = (x+x2,y+y2,'%09da,2'%line_num) + p1a = (x+x1,y+y1,'%09db,1'%line_num) + p3 = (x+x3,y+y3,'%09db,3'%line_num) + points.extend([p1,p2,p1a,p3]) + line_num += 1 + return points + + def draw(self, points,line=lambda a: None): + """ Draw the image. + points - a list of points, as returned by createGround. + line - a function that draws a line connecting all points in the passed list in order. + """ + groups = {} + ## This loop scales points, sorts them into groups, and gets image parameters + xs = [] + ys = [] + for x,y,n in points: + xs.append(x) + ys.append(y) + sn = n.split(',',1) + ident = 0 + if len(sn) == 2: + ident = int(sn[1]) + n = sn[0] + if n not in groups: + groups[n] = [] + groups[n].append((x,y,ident)) + max_x = max(xs) + min_x = min(xs) + max_y = max(ys) + min_y = min(ys) + ## Sort all groups to draw lines in order + for group in groups: + groups[group].sort(key=lambda a:a[2]) + ## Sort all groups to draw groups in order + groups = sorted([(name,pts) for name,pts in groups.iteritems()],key=lambda a:a[0]) + ## Draw lines + for name,pts in groups: + _pts = [] + for p in pts: + _pts.append([p[0]-min_x,p[1]-min_y]) + self.line(_pts) + + def __init__(self): + inkex.Effect.__init__(self) + # file + self.OptionParser.add_option('--file', + action='store', + type='string', + dest='file') + # Grid description + self.OptionParser.add_option('--angle', + action='store', + type='int', + dest='angle') + self.OptionParser.add_option('--cols', + action='store', + type='int', + dest='cols') + # Patch description + self.OptionParser.add_option('--diameter', + action='store', + type='float', + dest='diameter') + self.OptionParser.add_option('--diamunits', + action='store', + type='string', + dest='diamunits') + self.OptionParser.add_option('--rows', + action='store', + type='int', + dest='rows') + # Line description + self.OptionParser.add_option('--linewidth', + action='store', + type='float', + dest='linewidth') + self.OptionParser.add_option('--lineunits', + action='store', + type='string', + dest='lineunits') + self.OptionParser.add_option('--linecolor', + action='store', + type='string', + dest='linecolor') + + def effect(self): + ## Load the file + unit = self.loadFile() + + # Convert color from long integer to hexidecimal string + self.options.linecolor = self.getColorString(self.options.linecolor) + + ## Change the input to universal units + self.options.diameter = self.unitToUu(str(self.options.diameter)+self.options.diamunits) + self.options.linewidth = self.unitToUu(str(self.options.linewidth)+self.options.lineunits) + + ## Convert the angle + self.options.angle = radians(self.options.angle) + + ## Ensure no y-values are below 0 + min_y = min([b for a in [i[1::2] for row in unit['data'] for i in row] for b in a]) + if min_y < 0: + data = [] + for row in unit['data']: + _row = [] + for c in row: + _row.append([a for b in zip(c[::2],[i-min_y for i in c[1::2]]) for a in b]) + data.append(_row) + unit['data'] = data + + ## Create the ground coordinates + points = self.createGround(unit,self.options.rows,self.options.cols) + + ## Wrap it around a polygon + points = self.circleWrap(points,self.options.cols*unit['cols']) + + ## Draw everything + self.draw(points,line=lambda a: self.line(a)) + +effect = CircularGround() +effect.affect() diff --git a/fablabchemnitz_lace_grid.inx b/fablabchemnitz_lace_grid.inx new file mode 100644 index 0000000..1fa1367 --- /dev/null +++ b/fablabchemnitz_lace_grid.inx @@ -0,0 +1,58 @@ + + + <_name>Regular Grid + fablabchemnitz.de.lace_grid + org.inkscape.output.svg.inkscape + fablabchemnitz_lace_grid.py + inkex.py + Creates a grid of dots of specified angle. + Grid description + 45.0 + 5.0 + + + + + + + + Patch description + 50 + + + + + + + + 50 + + + + + + + + Dot Appearance + 2 + + + + + + + + Color: + 255 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lace_grid.py b/fablabchemnitz_lace_grid.py new file mode 100644 index 0000000..ac5a5a4 --- /dev/null +++ b/fablabchemnitz_lace_grid.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python + +# Copyright (c) 2017, Veronika Irvine +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +from math import sin, cos, radians, ceil +import inkex, simplestyle + +__author__ = 'Veronika Irvine' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class LaceGrid(inkex.Effect): + """ + Create a grid for lace with angle as specified + """ + + def unitToUu(self,param): + """ Convert units. + Converts a number in some units into the units used internally by + Inkscape. + + param is a string representing a number with units attached. An + example would be '3.8mm'. Any units supported by Inkscape + are supported by this function. + + This wrapper function catches changes made to the location + of the function between Inkscape versions. + """ + try: + return self.unittouu(param) + except: + return inkex.unittouu(param) + + def getColorString(self, longColor): + """ Convert the long into a #RRGGBB color value + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + longColor = long(longColor) + if longColor <0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + return hexColor + + def circle(self, x, y, r, fill): + """ + Draw a circle of radius 'r' and origin at (x, y) + """ + + # define the stroke style + s = {'fill': fill} + + # create attributes from style and define path + attribs = {'style':simplestyle.formatStyle(s), + 'cx':str(x), + 'cy':str(y), + 'r':str(r)} + + # insert path object into current layer + inkex.etree.SubElement(self.current_layer, inkex.addNS('circle', 'svg'), attribs) + + def drawDot(self, x, y): + self.circle(x, y, self.options.dotwidth, self.options.dotcolor) + + def draw(self): + + a = self.options.spacing + theta = self.options.angle + + hgrid = a*sin(theta); + vgrid = a*cos(theta) + rows = int(ceil(self.options.height / vgrid)) + cols = int(ceil(self.options.width / hgrid)) + y = 0.0 + + for r in range(rows): + x = 0.0 + if (r % 2 == 1): + x += hgrid + + for c in range(cols/2): + self.drawDot(x, y) + x += 2.0*hgrid; + + y += vgrid; + + def __init__(self): + """ + Constructor. + Defines the options of the script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + # Grid description + self.OptionParser.add_option('--angle', + action='store', + type='float', + dest='angle') + self.OptionParser.add_option('--distance', + action='store', + type='float', + dest='spacing') + self.OptionParser.add_option('--pinunits', + action='store', + type='string', + dest='pinunits') + # Patch description + self.OptionParser.add_option('--width', + action='store', + type='float', + dest='width') + self.OptionParser.add_option('--patchwidthunits', + action='store', + type='string', + dest='patchwidthunits') + self.OptionParser.add_option('--height', + action='store', + type='float', + dest='height') + self.OptionParser.add_option('--patchheightunits', + action='store', + type='string', + dest='patchheightunits') + # Dot description + self.OptionParser.add_option('--dotwidth', + action='store', + type='float', + dest='dotwidth') + self.OptionParser.add_option('--dotunits', + action='store', + type='string', + dest='dotunits') + self.OptionParser.add_option('--dotcolor', + action='store', + type='string', + dest='dotcolor') + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + # Convert user input to universal units + self.options.width = self.unitToUu(str(self.options.width)+self.options.patchwidthunits) + self.options.height = self.unitToUu(str(self.options.height)+self.options.patchheightunits) + self.options.spacing = self.unitToUu(str(self.options.spacing)+self.options.pinunits) + # Convert from diameter to radius + self.options.dotwidth = self.unitToUu(str(self.options.dotwidth)+self.options.dotunits)/2 + # Users expect spacing to be the vertical distance between footside pins + # (vertical distance between every other row) but in the script we use it + # as as diagonal distance between grid points + # therefore convert spacing based on the angle chosen + self.options.angle = radians(self.options.angle) + self.options.spacing = self.options.spacing/(2.0*cos(self.options.angle)) + + # Convert color from long integer to hexidecimal string + self.options.dotcolor = self.getColorString(self.options.dotcolor) + + # Draw a grid of dots based on user inputs + self.draw() + +# Create effect instance and apply it. +effect = LaceGrid() +effect.affect() diff --git a/fablabchemnitz_lace_ground.inx b/fablabchemnitz_lace_ground.inx new file mode 100644 index 0000000..0f97f0b --- /dev/null +++ b/fablabchemnitz_lace_ground.inx @@ -0,0 +1,59 @@ + + + <_name>Ground from Template + fablabchemnitz.de.lace_ground + org.inkscape.output.svg.inkscape + fablabchemnitz_lace_ground.py + inkex.py + Fill a rectangular patch with a lace ground pattern from selected template file. + + Grid description + 45.0 + 5.0 + + + + + + + + Patch description + 50 + + + + + + + + 50 + + + + + + + + Line Appearance + 1 + + + + + + + + Color: + 255 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lace_ground.py b/fablabchemnitz_lace_ground.py new file mode 100644 index 0000000..a777317 --- /dev/null +++ b/fablabchemnitz_lace_ground.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python + +# Copyright (c) 2017, Veronika Irvine +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import os +from math import sin,cos,radians, ceil + +import inkex, simplestyle + +__author__ = 'Veronika Irvine' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class LaceGround(inkex.Effect): + """ + Create a ground for lace from a text file descriptor + using specified angle and spacing + """ + + def unitToUu(self,param): + """ Convert units. + Converts a number in some units into the units used internally by + Inkscape. + + param is a string representing a number with units attached. An + example would be '3.8mm'. Any units supported by Inkscape + are supported by this function. + + This wrapper function catches changes made to the location + of the function between Inkscape versions. + """ + try: + return self.unittouu(param) + except: + return inkex.unittouu(param) + + def getColorString(self, longColor, verbose=False): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + longColor = long(longColor) + if longColor <0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + return hexColor + + def loadFile(self): + # Ensure that file exists and has the proper extension + if not self.options.file: + inkex.errormsg('You must specify a template file.') + exit() + self.options.file = self.options.file.strip() + if self.options.file == '': + inkex.errormsg('You must specify a template file.') + exit() + if not os.path.isfile(self.options.file): + inkex.errormsg('You have not specified a valid path for the template file.\n\nYour entry: '+self.options.file) + exit() + extension = os.path.splitext(self.options.file)[1] + if extension != '.txt': + inkex.errormsg('The file name must end with .txt.\n\nYour entry: '+self.options.file) + exit() + + data = [] + rowCount = 0 + colCount = 0 + with open(self.options.file,'r') as f: + first = True + for line in f: + if first: + # first line of file gives row count and column count + first = False + line = line.strip() + temp = line.split('\t') + type = temp[0] + rowCount = int(temp[1]) + colCount = int(temp[-1]) + + else: + line = line.strip() + line = line.lstrip('[') + line = line.rstrip(']') + rowData = line.split(']\t[') + data.append([]) + for cell in rowData: + cell = cell.strip() + data[-1].append([float(num) for num in cell.split(',')]) + + return {'type':type, 'rowCount':rowCount, 'colCount':colCount, 'data':data} + + def line(self, x1, y1, x2, y2): + """ + Draw a line from point at (x1, y1) to point at (x2, y2). + Style of line is hard coded and specified by 's'. + """ + # define the motions + path = 'M %s,%s L %s,%s' %(x1,y1,x2,y2) + + # define the stroke style + s = {'stroke-linejoin': 'miter', + 'stroke-width': self.options.linewidth, + 'stroke-opacity': '1.0', + 'fill-opacity': '1.0', + 'stroke': self.options.linecolor, + 'stroke-linecap': 'round', + 'fill': 'none' + } + + # create attributes from style and path + attribs = {'style':simplestyle.formatStyle(s), 'd':path} + + # insert path object into current layer + inkex.etree.SubElement(self.current_layer, inkex.addNS('path', 'svg'), attribs) + + def draw(self, data, rowCount, colCount): + a = self.options.spacing + theta = self.options.angle + deltaX = a*sin(theta) + deltaY = a*cos(theta) + maxRows = ceil(self.options.height / deltaY) + maxCols = ceil(self.options.width / deltaX) + + x = 0.0 + y = 0.0 + repeatY = 0 + repeatX = 0 + + while repeatY * rowCount < maxRows: + x = 0.0 + repeatX = 0 + + while repeatX * colCount < maxCols: + + for row in data: + for coords in row: + x1 = x + coords[0]*deltaX + y1 = y + coords[1]*deltaY + x2 = x + coords[2]*deltaX + y2 = y + coords[3]*deltaY + x3 = x + coords[4]*deltaX + y3 = y + coords[5]*deltaY + + self.line(x1,y1,x2,y2) + self.line(x1,y1,x3,y3) + + repeatX += 1 + x += deltaX * colCount + + repeatY += 1 + y += deltaY * rowCount + + def __init__(self): + """ + Constructor. + Defines the '--centerx' option of the script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # file + self.OptionParser.add_option('-f', '--file', action='store', type='string', dest='file', help='File containing lace ground description') + # Grid description + self.OptionParser.add_option('--angle', + action='store', + type='float', + dest='angle') + self.OptionParser.add_option('--distance', + action='store', + type='float', + dest='spacing') + self.OptionParser.add_option('--pinunits', + action='store', + type='string', + dest='pinunits') + self.OptionParser.add_option('--width', + action='store', + type='float', + dest='width') + self.OptionParser.add_option('--patchwidthunits', + action='store', + type='string', + dest='patchwidthunits') + self.OptionParser.add_option('--height', + action='store', + type='float', + dest='height') + self.OptionParser.add_option('--patchheightunits', + action='store', + type='string', + dest='patchheightunits') + self.OptionParser.add_option('--linewidth', + action='store', + type='float', + dest='linewidth') + self.OptionParser.add_option('--lineunits', + action='store', + type='string', + dest='lineunits') + self.OptionParser.add_option('--linecolor', + action='store', + type='string', + dest='linecolor') + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + result = self.loadFile() + + # Convert input to universal units + self.options.width = self.unitToUu(str(self.options.width)+self.options.patchwidthunits) + self.options.height = self.unitToUu(str(self.options.height)+self.options.patchheightunits) + self.options.linewidth = self.unitToUu(str(self.options.linewidth)+self.options.lineunits) + self.options.spacing = self.unitToUu(str(self.options.spacing)+self.options.pinunits) + + # Users expect spacing to be the vertical distance between footside pins + # (vertical distance between every other row) but in the script we use it + # as as diagonal distance between grid points + # therefore convert spacing based on the angle chosen + self.options.angle = radians(self.options.angle) + self.options.spacing = self.options.spacing/(2.0*cos(self.options.angle)) + + # Convert color from long integer to hexidecimal string + self.options.linecolor = self.getColorString(self.options.linecolor) + + # Draw a ground based on file description and user inputs + # For now, assume style is Checker but could change in future + self.draw(result['data'],result['rowCount'],result['colCount']) + +# Create effect instance and apply it. +effect = LaceGround() +effect.affect() diff --git a/fablabchemnitz_lace_polar.inx b/fablabchemnitz_lace_polar.inx new file mode 100644 index 0000000..c025885 --- /dev/null +++ b/fablabchemnitz_lace_polar.inx @@ -0,0 +1,54 @@ + + + <_name>Polar Grid + fablabchemnitz.de.lace_polar + org.inkscape.output.svg.inkscape + fablabchemnitz_lace_polar.py + simplestyle.py + inkex.py + + Creates a printable polar grid of dots with a constant number of dots per circle and the distance between circles changing at the same speed as the distance between the dots on a circle. + Measurement + + + + + + + + Grid style + 45.0 + 180.0 + + <_item value="">diamond + <_item value="rectangle">rectangle + <_item value="hexagon1">hexagon (30°) + <_item value="hexagon2">hexagon (60°, /3) + <_item value="hexagon3">hexagon + triangle (30-45-60°, /2) + <_item value="hexagon4">hexagon + diamond (30°) + <_item value="hexagon5">hexagon + diamond (60°, /2) + <_item value="snow2">snow, hexagon (60°, /6) + <_item value="snow1">snow, hexagon + diamond (60°, /8) + + Grid size + 160 + 100 + + <_option value="outside">outside circle + <_option value="inside">inside circle + + Dot properties + 0.5 + -6711040 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lace_polar.py b/fablabchemnitz_lace_polar.py new file mode 100644 index 0000000..8469993 --- /dev/null +++ b/fablabchemnitz_lace_polar.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python +# Copyright 2015 Jo Pol +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + +from __future__ import division +from math import pi, sin, cos, tan, radians + + +# We will use the inkex module with the predefined +# Effect base class. +import inkex, simplestyle + +__author__ = 'Jo Pol' +__credits__ = ['Veronika Irvine','Jo Pol','Mark Shafer'] +__license__ = 'GPLv3' + +class PolarGrid(inkex.Effect): + """ + Creates a dotted polar grid where distance between the circles + increase with the distance between the dots on the circles + """ + def __init__(self): + """ + Constructor. + """ + + # Call the base class constructor. + inkex.Effect.__init__(self) + + # parse the options + self.OptionParser.add_option('-a', '--angle', action='store', type='float', dest='angleOnFootside', default=45, help='grid angle (degrees)') + self.OptionParser.add_option('-d', '--dots', action='store', type='int', dest='dotsPerCircle', default=180, help='number of dots on a circle') + self.OptionParser.add_option('-o', '--outerDiameter', action='store', type='float', dest='outerDiameter', default=160, help='outer diameter (mm)') + self.OptionParser.add_option('-i', '--innerDiameter', action='store', type='float', dest='innerDiameter', default=100, help='minimum inner diameter (mm)') + self.OptionParser.add_option('-f', '--fill', action='store', type='string', dest='dotFill', default='-6711040', help='dot color') + self.OptionParser.add_option('-A', '--alignment', action='store', type='string', dest='alignment', default='outside', help='exact diameter on [inside|outside]') + self.OptionParser.add_option('-s', '--size', action='store', type='float', dest='dotSize', default=0.5, help='dot diameter (mm)') + self.OptionParser.add_option('-v', '--variant', action='store', type='string', dest='variant', default='', help='omit rows to get [|rectangle|hexagon1]') + self.OptionParser.add_option('-u', '--units', action = 'store', type = 'string', dest = 'units', default = 'mm', help = 'The units the measurements are in') + + def group(self, diameter): + """ + Create a group labeled with the diameter + """ + label = 'diameter: {0:.2f} mm'.format(diameter) + attribs = {inkex.addNS('label', 'inkscape'):label} + return inkex.etree.SubElement(self.gridContainer, inkex.addNS('g', 'svg'), attribs) + + def dots(self, diameter, circleNr, group): + """ + Draw dots on a grid circle + """ + offset = (circleNr % 2) * 0.5 + for dotNr in range (0, self.options.dotsPerCircle): + a = (dotNr + offset) * self.alpha + x = (diameter / 2.0) * cos(a) + y = (diameter / 2.0) * sin(a) + attribs = {'style':self.dotStyle, 'cx':str(x * self.scale), 'cy':str(y * self.scale), 'r':self.dotR} + inkex.etree.SubElement(group, inkex.addNS('circle', 'svg'), attribs) + + def getUnittouu(self, param): + " compatibility between inkscape 0.48 and 0.91 " + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + def getColorString(self, longColor, verbose=False): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + if verbose: inkex.debug("%s ="%(longColor)) + longColor = long(longColor) + if longColor <0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + if verbose: inkex.debug(" %s for color default value"%(hexColor)) + return hexColor + + def iterate(self, diameter, circleNr): + """ + Create a group with a ring of dots. + Returns half of the arc length between the dots + which becomes the distance to the next ring. + """ + group = self.group(diameter) + self.dots(diameter, circleNr, group) + self.generatedCircles.append(group) + return diameter * self.change + + def generate(self): + """ + Generate rings with dots, either inside out or outside in + """ + circleNr = 0 + flag_error = False + minimum = 2 * self.options.dotSize * self.options.dotsPerCircle /pi + if minimum < self.options.innerDiameter: + minimum = self.options.innerDiameter + else: + flag_error = True + if self.options.alignment == 'outside': + diameter = self.options.outerDiameter + while diameter > minimum: + diameter -= self.iterate(diameter, circleNr) + circleNr += 1 + else: + diameter = minimum + while diameter < self.options.outerDiameter: + diameter += self.iterate(diameter, circleNr) + circleNr += 1 + # Display message + if flag_error: + # Leave message on top + font_height = 8 + text_style = { 'font-size': str(font_height), + 'font-family': 'sans-serif', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': '#000000' } + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': '0'} + text = inkex.etree.SubElement(self.gridContainer, 'text', text_atts) + text.text = "Dots overlap. inner changed to %4.1f" % (minimum) + + def removeGroups(self, start, increment): + """ + Remove complete rings with dots + """ + for i in range(start, len(self.generatedCircles), increment): + self.current_layer.remove(self.generatedCircles[i]) + + def removeDots(self, i, offset, step): + """ + Remove dots from one circle + """ + group = self.generatedCircles[i] + dots = list(group) + start = len(dots) - 1 - offset + for j in range(start, -1, 0-step): + group.remove(dots[j]) + + def computations(self, angle): + self.alpha = radians(360.0 / self.options.dotsPerCircle) + correction = pi / (4 * self.options.dotsPerCircle) + correction *= tan(angle*0.93) + self.change = tan(angle - correction) * pi / self.options.dotsPerCircle + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + + # color + self.options.dotFill = self.getColorString(self.options.dotFill) + # constants + self.dotStyle = simplestyle.formatStyle({'fill': self.options.dotFill,'stroke':'none'}) + self.scale = self.getUnittouu("1" + self.options.units) + self.dotR = str(self.options.dotSize * (self.scale/2)) + self.computations(radians(self.options.angleOnFootside)) + + # processing variables + self.generatedCircles = [] + self.gridContainer = self.current_layer + + self.generate() + + if self.options.variant == 'rectangle': + self.removeGroups(1, 2) + elif self.options.variant == 'hexagon1': + self.removeGroups(0, 3) + elif self.options.variant == 'hexagon2' or self.options.variant == 'snow2': + for i in range(0, len(self.generatedCircles), 1): + self.removeDots(i, (((i%2)+1)*2)%3, 3) + elif self.options.variant == 'hexagon3': + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, (i//2+1)%2, 2) + elif self.options.variant == 'hexagon4': + self.removeGroups(0, 4) + elif self.options.variant == 'hexagon5' or self.options.variant == 'snow1': + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, 1, 2) + + self.dotStyle = simplestyle.formatStyle({'fill': 'none','stroke':self.options.dotFill,'stroke-width':0.7}) + self.dotR = str((((self.options.innerDiameter * pi) / self.options.dotsPerCircle) / 2) * self.scale) + self.generatedCircles = [] + if self.options.variant == 'snow2': + self.options.dotsPerCircle = self.options.dotsPerCircle // 3 + self.computations(radians(self.options.angleOnFootside)) + self.generate() + elif self.options.variant == 'snow1': + self.generate() + self.removeGroups(1, 2) + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, i%4, 2) + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, (i+1)%2, 2) + for i in range(2, len(self.generatedCircles), 4): + self.removeDots(i, 0, self.options.dotsPerCircle) + +# Create effect instance and apply it. +if __name__ == '__main__': + PolarGrid().affect() \ No newline at end of file diff --git a/fablabchemnitz_lace_thread_style.inx b/fablabchemnitz_lace_thread_style.inx new file mode 100644 index 0000000..5cad174 --- /dev/null +++ b/fablabchemnitz_lace_thread_style.inx @@ -0,0 +1,38 @@ + + + <_name>Thread Style + fablabchemnitz.de.lace_thread_style + fablabchemnitz_lace_thread_style.py + inkex.py + Complements http://jo-pol.github.io/DiBL/grounds/ + PREPARATIONS + Select all, unclone and ungroup untill the status bar no longer shows groups or clones. + HINT + remove rows and columns from the patch for a faster response. + FINALLY + Select one segment of the thread/line to change then select "apply"'. + ————————————————————— + Tolerance + 0.05 + New thread properties + + + + + + + + 1 + #FF9999 + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lace_thread_style.py b/fablabchemnitz_lace_thread_style.py new file mode 100644 index 0000000..517f154 --- /dev/null +++ b/fablabchemnitz_lace_thread_style.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python +# Copyright 2014 Jo Pol +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +######################################################################### + + +import inkex, cubicsuperpath, bezmisc + +__author__ = 'Jo Pol' +__credits__ = ['Jo Pol','Mark Shafer'] +__license__ = 'GPLv3' + +class ThreadStyle(inkex.Effect): + """ + Apply stroke style of selected path to connected paths + """ + def __init__(self): + """ + Constructor. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + self.OptionParser.add_option('-t', '--tolerance', action='store', type='float', dest='tolerance', default=0.05, help='tolerance (max. distance between segments)') + self.OptionParser.add_option('-u', '--units', action = 'store', type = 'string', dest = 'units', default = 'mm', help = 'The units the measurements are in') + self.OptionParser.add_option('-w', '--width', action='store', type='float', dest='width', default='1', help='thread width') + self.OptionParser.add_option('-c', '--color', action='store', type='string', dest='color', default='#FF9999', help='thread color') + + def getUnittouu(self, param): + " compatibility between inkscape 0.48 and 0.91 " + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + def startPoint(self, cubicSuperPath): + """ + returns the first point of a CubicSuperPath + """ + return cubicSuperPath[0][0][0] + + def endPoint(self, csp): + """ + returns the last point of a CubicSuperPath + """ + return csp[0][len(csp[0]) - 1][len(csp[0][1]) - 1] + + def isBezier(self, item): + return item.tag == inkex.addNS('path', 'svg') and item.get(inkex.addNS('connector-curvature', 'inkscape')) + + def findCandidatesForStyleChange(self, skip): + """ + collect the document items that are a Bezier curve + """ + self.candidates = [] + for item in self.document.getiterator(): + if self.isBezier(item) and item != skip: + csp = cubicsuperpath.parsePath(item.get('d')) + s = self.startPoint(csp) + e = self.endPoint(csp) + self.candidates.append({'s':s, 'e':e, 'i':item}) + + def applyStyle(self, item): + """ + Change the style of the item and remove it form the candidates + """ + item['i'].attrib['style'] = self.style + self.candidates.remove(item) + + def applyToAdjacent(self, point): + while point != None: + p = (point[0], point[1]) + next = None + for item in self.candidates: + if bezmisc.pointdistance(p, (item['s'][0], item['s'][1])) < self.options.tolerance: + self.applyStyle(item) + next = item['e'] + break + elif bezmisc.pointdistance(p, (item['e'][0], item['e'][1])) < self.options.tolerance: + self.applyStyle(item) + next = item['s'] + break + point = next + + def getColorString(self, longColor, verbose=False): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + if verbose: inkex.debug("%s ="%(longColor)) + longColor = long(longColor) + if longColor <0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + if verbose: inkex.debug(" %s for color default value"%(hexColor)) + return hexColor + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + self.options.color = self.getColorString(self.options.color) + conversion = self.getUnittouu("1" + self.options.units) + if len(self.selected) != 1: + inkex.debug('no object selected, or more than one selected') + return + selected = self.selected.values()[0] + if not self.isBezier(selected): + inkex.debug('selected element is not a Bezier curve') + return + self.findCandidatesForStyleChange(selected) + self.style = 'fill:none;stroke:{1};stroke-width:{0}'.format(self.options.width*conversion, self.options.color) + csp = cubicsuperpath.parsePath(selected.get('d')) + self.selected.values()[0].attrib['style'] = self.style + self.applyToAdjacent(self.startPoint(csp)) + self.applyToAdjacent(self.endPoint(csp)) + +# Create effect instance and apply it. +if __name__ == '__main__': + ThreadStyle().affect() diff --git a/fablabchemnitz_laser.inx b/fablabchemnitz_laser.inx new file mode 100644 index 0000000..9b9ed62 --- /dev/null +++ b/fablabchemnitz_laser.inx @@ -0,0 +1,33 @@ + + + <_name>J Tech Photonics Laser Tool + fablabchemnitz.de.laser + fablabchemnitz_laser.py + inkex.py + M03 + M05 + 3000 + 750 + 255 + 0 + 1 + 1 + + output.gcode + true + + mm + in + + + + + + + + path + + + \ No newline at end of file diff --git a/fablabchemnitz_laser.py b/fablabchemnitz_laser.py new file mode 100644 index 0000000..55c22c4 --- /dev/null +++ b/fablabchemnitz_laser.py @@ -0,0 +1,3173 @@ +#!/usr/bin/env python +""" +Modified by Jay Johnson 2015, J Tech Photonics, Inc., jtechphotonics.com +modified by Adam Polak 2014, polakiumengineering.org + +based on Copyright (C) 2009 Nick Drobchenko, nick@cnc-club.ru +based on gcode.py (C) 2007 hugomatic... +based on addnodes.py (C) 2005,2007 Aaron Spike, aaron@ekips.org +based on dots.py (C) 2005 Aaron Spike, aaron@ekips.org +based on interp.py (C) 2005 Aaron Spike, aaron@ekips.org +based on bezmisc.py (C) 2005 Aaron Spike, aaron@ekips.org +based on cubicsuperpath.py (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" +import inkex, simplestyle, simplepath +import cubicsuperpath, simpletransform, bezmisc + +import os +import math +import bezmisc +import re +import copy +import sys +import time +import cmath +import numpy +import codecs +import random +import gettext +_ = gettext.gettext + + +### Check if inkex has errormsg (0.46 version doesnot have one.) Could be removed later. +if "errormsg" not in dir(inkex): + inkex.errormsg = lambda msg: sys.stderr.write((unicode(msg) + "\n").encode("UTF-8")) + + +def bezierslopeatt(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)),t): + ax,ay,bx,by,cx,cy,x0,y0=bezmisc.bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx=3*ax*(t**2)+2*bx*t+cx + dy=3*ay*(t**2)+2*by*t+cy + if dx==dy==0 : + dx = 6*ax*t+2*bx + dy = 6*ay*t+2*by + if dx==dy==0 : + dx = 6*ax + dy = 6*ay + if dx==dy==0 : + print_("Slope error x = %s*t^3+%s*t^2+%s*t+%s, y = %s*t^3+%s*t^2+%s*t+%s, t = %s, dx==dy==0" % (ax,bx,cx,dx,ay,by,cy,dy,t)) + print_(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx, dy = 1, 1 + + return dx,dy +bezmisc.bezierslopeatt = bezierslopeatt + + +def ireplace(self,old,new,count=0): + pattern = re.compile(re.escape(old),re.I) + return re.sub(pattern,new,self,count) + +################################################################################ +### +### Styles and additional parameters +### +################################################################################ + +math.pi2 = math.pi*2 +straight_tolerance = 0.0001 +straight_distance_tolerance = 0.0001 +engraving_tolerance = 0.0001 +loft_lengths_tolerance = 0.0000001 +options = {} +defaults = { +'header': """ +G90 +""", +'footer': """G1 X0 Y0 + +""" +} + +intersection_recursion_depth = 10 +intersection_tolerance = 0.00001 + +styles = { + "loft_style" : { + 'main curve': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', 'stroke-width':'1', 'marker-end':'url(#Arrow2Mend)' }), + }, + "biarc_style" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#8f8', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f88', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#777', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + }, + "biarc_style_dark" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_area" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#880', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#808', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#088', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#999', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#dd5', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#d5d', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#5dd', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_passing feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_fine feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#7f0', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#f70', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#744', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "area artefact": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "area artefact arrow": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "dxf_points": simplestyle.formatStyle({ "stroke": "#ff0000", "fill": "#ff0000"}), + + } + + +################################################################################ +### Cubic Super Path additional functions +################################################################################ + +def csp_simple_bound(csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath : + for p in sp: + minx = min(minx,p[0]) if minx!=None else p[0] + miny = min(miny,p[1]) if miny!=None else p[1] + maxx = max(maxx,p[0]) if maxx!=None else p[0] + maxy = max(maxy,p[1]) if maxy!=None else p[1] + return minx,miny,maxx,maxy + + +def csp_segment_to_bez(sp1,sp2) : + return sp1[1:]+sp2[:2] + + +def bound_to_bound_distance(sp1,sp2,sp3,sp4) : + min_dist = 1e100 + max_dist = 0 + points1 = csp_segment_to_bez(sp1,sp2) + points2 = csp_segment_to_bez(sp3,sp4) + for i in range(4) : + for j in range(4) : + min_, max_ = line_to_line_min_max_distance_2(points1[i-1], points1[i], points2[j-1], points2[j]) + min_dist = min(min_dist,min_) + max_dist = max(max_dist,max_) + print_("bound_to_bound", min_dist, max_dist) + return min_dist, max_dist + +def csp_to_point_distance(csp, p, dist_bounds = [0,1e100], tolerance=.01) : + min_dist = [1e100,0,0,0] + for j in range(len(csp)) : + for i in range(1,len(csp[j])) : + d = csp_seg_to_point_distance(csp[j][i-1],csp[j][i],p,sample_points = 5, tolerance = .01) + if d[0] < dist_bounds[0] : +# draw_pointer( list(csp_at_t(subpath[dist[2]-1],subpath[dist[2]],dist[3])) +# +list(csp_at_t(csp[dist[4]][dist[5]-1],csp[dist[4]][dist[5]],dist[6])),"red","line", comment = math.sqrt(dist[0])) + return [d[0],j,i,d[1]] + else : + if d[0] < min_dist[0] : min_dist = [d[0],j,i,d[1]] + return min_dist + +def csp_seg_to_point_distance(sp1,sp2,p,sample_points = 5, tolerance = .01) : + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + dx, dy = dx-p[0], dy-p[1] + if sample_points < 2 : sample_points = 2 + d = min( [(p[0]-sp1[1][0])**2 + (p[1]-sp1[1][1])**2,0.], [(p[0]-sp2[1][0])**2 + (p[1]-sp2[1][1])**2,1.] ) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i = 0 + while i==0 or abs(f)>0.000001 and i<20 : + t2,t3 = t**2,t**3 + f = (ax*t3+bx*t2+cx*t+dx)*(3*ax*t2+2*bx*t+cx) + (ay*t3+by*t2+cy*t+dy)*(3*ay*t2+2*by*t+cy) + df = (6*ax*t+2*bx)*(ax*t3+bx*t2+cx*t+dx) + (3*ax*t2+2*bx*t+cx)**2 + (6*ay*t+2*by)*(ay*t3+by*t2+cy*t+dy) + (3*ay*t2+2*by*t+cy)**2 + if df!=0 : + t = t - f/df + else : + break + i += 1 + if 0<=t<=1 : + p1 = csp_at_t(sp1,sp2,t) + d1 = (p1[0]-p[0])**2 + (p1[1]-p[1])**2 + if d1 < d[0] : + d = [d1,t] + return d + + +def csp_seg_to_csp_seg_distance(sp1,sp2,sp3,sp4, dist_bounds = [0,1e100], sample_points = 5, tolerance=.01) : + # check the ending points first + dist = csp_seg_to_point_distance(sp1,sp2,sp3[1],sample_points, tolerance) + dist += [0.] + if dist[0] <= dist_bounds[0] : return dist + d = csp_seg_to_point_distance(sp1,sp2,sp4[1],sample_points, tolerance) + if d[0]tolerance and i<30 : + #draw_pointer(csp_at_t(sp1,sp2,t1)) + f1x = 3*ax1*t12+2*bx1*t1+cx1 + f1y = 3*ay1*t12+2*by1*t1+cy1 + f2x = 3*ax2*t22+2*bx2*t2+cx2 + f2y = 3*ay2*t22+2*by2*t2+cy2 + F1[0] = 2*f1x*x + 2*f1y*y + F1[1] = -2*f2x*x - 2*f2y*y + F2[0][0] = 2*(6*ax1*t1+2*bx1)*x + 2*f1x*f1x + 2*(6*ay1*t1+2*by1)*y +2*f1y*f1y + F2[0][1] = -2*f1x*f2x - 2*f1y*f2y + F2[1][0] = -2*f2x*f1x - 2*f2y*f1y + F2[1][1] = -2*(6*ax2*t2+2*bx2)*x + 2*f2x*f2x - 2*(6*ay2*t2+2*by2)*y + 2*f2y*f2y + F2 = inv_2x2(F2) + if F2!=None : + t1 -= ( F2[0][0]*F1[0] + F2[0][1]*F1[1] ) + t2 -= ( F2[1][0]*F1[0] + F2[1][1]*F1[1] ) + t12, t13, t22, t23 = t1*t1, t1*t1*t1, t2*t2, t2*t2*t2 + x,y = ax1*t13+bx1*t12+cx1*t1+dx1 - (ax2*t23+bx2*t22+cx2*t2+dx2), ay1*t13+by1*t12+cy1*t1+dy1 - (ay2*t23+by2*t22+cy2*t2+dy2) + Flast = F + F = x*x+y*y + else : + break + i += 1 + if F < dist[0] and 0<=t1<=1 and 0<=t2<=1: + dist = [F,t1,t2] + if dist[0] <= dist_bounds[0] : + return dist + return dist + + +def csp_to_csp_distance(csp1,csp2, dist_bounds = [0,1e100], tolerance=.01) : + dist = [1e100,0,0,0,0,0,0] + for i1 in range(len(csp1)) : + for j1 in range(1,len(csp1[i1])) : + for i2 in range(len(csp2)) : + for j2 in range(1,len(csp2[i2])) : + d = csp_seg_bound_to_csp_seg_bound_max_min_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2]) + if d[0] >= dist_bounds[1] : continue + if d[1] < dist_bounds[0] : return [d[1],i1,j1,1,i2,j2,1] + d = csp_seg_to_csp_seg_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2], dist_bounds, tolerance=tolerance) + if d[0] < dist[0] : + dist = [d[0], i1,j1,d[1], i2,j2,d[2]] + if dist[0] <= dist_bounds[0] : + return dist + if dist[0] >= dist_bounds[1] : + return dist + return dist +# draw_pointer( list(csp_at_t(csp1[dist[1]][dist[2]-1],csp1[dist[1]][dist[2]],dist[3])) +# + list(csp_at_t(csp2[dist[4]][dist[5]-1],csp2[dist[4]][dist[5]],dist[6])), "#507","line") + + +def csp_split(sp1,sp2,t=.5) : + [x1,y1],[x2,y2],[x3,y3],[x4,y4] = sp1[1], sp1[2], sp2[0], sp2[1] + x12 = x1+(x2-x1)*t + y12 = y1+(y2-y1)*t + x23 = x2+(x3-x2)*t + y23 = y2+(y3-y2)*t + x34 = x3+(x4-x3)*t + y34 = y3+(y4-y3)*t + x1223 = x12+(x23-x12)*t + y1223 = y12+(y23-y12)*t + x2334 = x23+(x34-x23)*t + y2334 = y23+(y34-y23)*t + x = x1223+(x2334-x1223)*t + y = y1223+(y2334-y1223)*t + return [sp1[0],sp1[1],[x12,y12]], [[x1223,y1223],[x,y],[x2334,y2334]], [[x34,y34],sp2[1],sp2[2]] + +def csp_true_bounds(csp) : + # Finds minx,miny,maxx,maxy of the csp and return their (x,y,i,j,t) + minx = [float("inf"), 0, 0, 0] + maxx = [float("-inf"), 0, 0, 0] + miny = [float("inf"), 0, 0, 0] + maxy = [float("-inf"), 0, 0, 0] + for i in range(len(csp)): + for j in range(1,len(csp[i])): + ax,ay,bx,by,cx,cy,x0,y0 = bezmisc.bezierparameterize((csp[i][j-1][1],csp[i][j-1][2],csp[i][j][0],csp[i][j][1])) + roots = cubic_solver(0, 3*ax, 2*bx, cx) + [0,1] + for root in roots : + if type(root) is complex and abs(root.imag)<1e-10: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxx = max([x,y,i,j,root],maxx) + minx = min([x,y,i,j,root],minx) + + roots = cubic_solver(0, 3*ay, 2*by, cy) + [0,1] + for root in roots : + if type(root) is complex and root.imag==0: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxy = max([y,x,i,j,root],maxy) + miny = min([y,x,i,j,root],miny) + maxy[0],maxy[1] = maxy[1],maxy[0] + miny[0],miny[1] = miny[1],miny[0] + + return minx,miny,maxx,maxy + + +############################################################################ +### csp_segments_intersection(sp1,sp2,sp3,sp4) +### +### Returns array containig all intersections between two segmets of cubic +### super path. Results are [ta,tb], or [ta0, ta1, tb0, tb1, "Overlap"] +### where ta, tb are values of t for the intersection point. +############################################################################ +def csp_segments_intersection(sp1,sp2,sp3,sp4) : + a, b = csp_segment_to_bez(sp1,sp2), csp_segment_to_bez(sp3,sp4) + + def polish_intersection(a,b,ta,tb, tolerance = intersection_tolerance) : + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize(a) + ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 = bezmisc.bezierparameterize(b) + i = 0 + F, F1 = [.0,.0], [[.0,.0],[.0,.0]] + while i==0 or (abs(F[0])**2+abs(F[1])**2 > tolerance and i<10): + ta3, ta2, tb3, tb2 = ta**3, ta**2, tb**3, tb**2 + F[0] = ax*ta3+bx*ta2+cx*ta+dx-ax1*tb3-bx1*tb2-cx1*tb-dx1 + F[1] = ay*ta3+by*ta2+cy*ta+dy-ay1*tb3-by1*tb2-cy1*tb-dy1 + F1[0][0] = 3*ax *ta2 + 2*bx *ta + cx + F1[0][1] = -3*ax1*tb2 - 2*bx1*tb - cx1 + F1[1][0] = 3*ay *ta2 + 2*by *ta + cy + F1[1][1] = -3*ay1*tb2 - 2*by1*tb - cy1 + det = F1[0][0]*F1[1][1] - F1[0][1]*F1[1][0] + if det!=0 : + F1 = [ [ F1[1][1]/det, -F1[0][1]/det], [-F1[1][0]/det, F1[0][0]/det] ] + ta = ta - ( F1[0][0]*F[0] + F1[0][1]*F[1] ) + tb = tb - ( F1[1][0]*F[0] + F1[1][1]*F[1] ) + else: break + i += 1 + + return ta, tb + + + def recursion(a,b, ta0,ta1,tb0,tb1, depth_a,depth_b) : + global bezier_intersection_recursive_result + if a==b : + bezier_intersection_recursive_result += [[ta0,tb0,ta1,tb1,"Overlap"]] + return + tam, tbm = (ta0+ta1)/2, (tb0+tb1)/2 + if depth_a>0 and depth_b>0 : + a1,a2 = bez_split(a,0.5) + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a1,b1) : recursion(a1,b1, ta0,tam,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b1) : recursion(a2,b1, tam,ta1,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a1,b2) : recursion(a1,b2, ta0,tam,tbm,tb1, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b2) : recursion(a2,b2, tam,ta1,tbm,tb1, depth_a-1,depth_b-1) + elif depth_a>0 : + a1,a2 = bez_split(a,0.5) + if bez_bounds_intersect(a1,b) : recursion(a1,b, ta0,tam,tb0,tb1, depth_a-1,depth_b) + if bez_bounds_intersect(a2,b) : recursion(a2,b, tam,ta1,tb0,tb1, depth_a-1,depth_b) + elif depth_b>0 : + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a,b1) : recursion(a,b1, ta0,ta1,tb0,tbm, depth_a,depth_b-1) + if bez_bounds_intersect(a,b2) : recursion(a,b2, ta0,ta1,tbm,tb1, depth_a,depth_b-1) + else : # Both segments have been subdevided enougth. Let's get some intersections :). + intersection, t1, t2 = straight_segments_intersection([a[0]]+[a[3]],[b[0]]+[b[3]]) + if intersection : + if intersection == "Overlap" : + t1 = ( max(0,min(1,t1[0]))+max(0,min(1,t1[1])) )/2 + t2 = ( max(0,min(1,t2[0]))+max(0,min(1,t2[1])) )/2 + bezier_intersection_recursive_result += [[ta0+t1*(ta1-ta0),tb0+t2*(tb1-tb0)]] + + global bezier_intersection_recursive_result + bezier_intersection_recursive_result = [] + recursion(a,b,0.,1.,0.,1.,intersection_recursion_depth,intersection_recursion_depth) + intersections = bezier_intersection_recursive_result + for i in range(len(intersections)) : + if len(intersections[i])<5 or intersections[i][4] != "Overlap" : + intersections[i] = polish_intersection(a,b,intersections[i][0],intersections[i][1]) + return intersections + + +def csp_segments_true_intersection(sp1,sp2,sp3,sp4) : + intersections = csp_segments_intersection(sp1,sp2,sp3,sp4) + res = [] + for intersection in intersections : + if ( + (len(intersection)==5 and intersection[4] == "Overlap" and (0<=intersection[0]<=1 or 0<=intersection[1]<=1) and (0<=intersection[2]<=1 or 0<=intersection[3]<=1) ) + or ( 0<=intersection[0]<=1 and 0<=intersection[1]<=1 ) + ) : + res += [intersection] + return res + + +def csp_get_t_at_curvature(sp1,sp2,c, sample_points = 16): + # returns a list containning [t1,t2,t3,...,tn], 0<=ti<=1... + if sample_points < 2 : sample_points = 2 + tolerance = .0000000001 + res = [] + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i, F = 0, 1e100 + while i<2 or abs(F)>tolerance and i<17 : + try : # some numerical calculation could exceed the limits + t2 = t*t + #slopes... + f1x = 3*ax*t2+2*bx*t+cx + f1y = 3*ay*t2+2*by*t+cy + f2x = 6*ax*t+2*bx + f2y = 6*ay*t+2*by + f3x = 6*ax + f3y = 6*ay + d = (f1x**2+f1y**2)**1.5 + F1 = ( + ( (f1x*f3y-f3x*f1y)*d - (f1x*f2y-f2x*f1y)*3.*(f2x*f1x+f2y*f1y)*((f1x**2+f1y**2)**.5) ) / + ((f1x**2+f1y**2)**3) + ) + F = (f1x*f2y-f1y*f2x)/d - c + t -= F/F1 + except: + break + i += 1 + if 0<=t<=1 and F<=tolerance: + if len(res) == 0 : + res.append(t) + for i in res : + if abs(t-i)<=0.001 : + break + if not abs(t-i)<=0.001 : + res.append(t) + return res + + +def csp_max_curvature(sp1,sp2): + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + tolerance = .0001 + F = 0. + i = 0 + while i<2 or F-Flast 0 : return 1e100 + if t1 < 0 : return -1e100 + # Use the Lapitals rule to solve 0/0 problem for 2 times... + t1 = 2*(bx*ay-ax*by)*t+(ay*cx-ax*cy) + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + t1 = bx*ay-ax*by + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + if depth>0 : + # little hack ;^) hope it wont influence anything... + return csp_curvature_at_t(sp1,sp2,t*1.004, depth-1) + return 1e100 + + +def csp_curvature_radius_at_t(sp1,sp2,t) : + c = csp_curvature_at_t(sp1,sp2,t) + if c == 0 : return 1e100 + else: return 1/c + + +def csp_special_points(sp1,sp2) : + # special points = curvature == 0 + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize((sp1[1],sp1[2],sp2[0],sp2[1])) + a = 3*ax*by-3*ay*bx + b = 3*ax*cy-3*cx*ay + c = bx*cy-cx*by + roots = cubic_solver(0, a, b, c) + res = [] + for i in roots : + if type(i) is complex and i.imag==0: + i = i.real + if type(i) is not complex and 0<=i<=1: + res.append(i) + return res + + +def csp_subpath_ccw(subpath): + # Remove all zerro length segments + s = 0 + #subpath = subpath[:] + if (P(subpath[-1][1])-P(subpath[0][1])).l2() > 1e-10 : + subpath[-1][2] = subpath[-1][1] + subpath[0][0] = subpath[0][1] + subpath += [ [subpath[0][1],subpath[0][1],subpath[0][1]] ] + pl = subpath[-1][2] + for sp1 in subpath: + for p in sp1 : + s += (p[0]-pl[0])*(p[1]+pl[1]) + pl = p + return s<0 + + +def csp_at_t(sp1,sp2,t): + ax,bx,cx,dx = sp1[1][0], sp1[2][0], sp2[0][0], sp2[1][0] + ay,by,cy,dy = sp1[1][1], sp1[2][1], sp2[0][1], sp2[1][1] + + x1, y1 = ax+(bx-ax)*t, ay+(by-ay)*t + x2, y2 = bx+(cx-bx)*t, by+(cy-by)*t + x3, y3 = cx+(dx-cx)*t, cy+(dy-cy)*t + + x4,y4 = x1+(x2-x1)*t, y1+(y2-y1)*t + x5,y5 = x2+(x3-x2)*t, y2+(y3-y2)*t + + x,y = x4+(x5-x4)*t, y4+(y5-y4)*t + return [x,y] + + +def csp_splitatlength(sp1, sp2, l = 0.5, tolerance = 0.01): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return csp_split(sp1, sp2, t) + + +def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + +def csplength(csp): + total = 0 + lengths = [] + for sp in csp: + for i in xrange(1,len(sp)): + l = cspseglength(sp[i-1],sp[i]) + lengths.append(l) + total += l + return lengths, total + + +def csp_segments(csp): + l, seg = 0, [0] + for sp in csp: + for i in xrange(1,len(sp)): + l += cspseglength(sp[i-1],sp[i]) + seg += [ l ] + + if l>0 : + seg = [seg[i]/l for i in xrange(len(seg))] + return seg,l + + +def rebuild_csp (csp, segs, s=None): + # rebuild_csp() adds to csp control points making it's segments looks like segs + if s==None : s, l = csp_segments(csp) + + if len(s)>len(segs) : return None + segs = segs[:] + segs.sort() + for i in xrange(len(s)): + d = None + for j in xrange(len(segs)): + d = min( [abs(s[i]-segs[j]),j], d) if d!=None else [abs(s[i]-segs[j]),j] + del segs[d[1]] + for i in xrange(len(segs)): + for j in xrange(0,len(s)): + if segs[i]t2 : t1, t2 = t2, t1 + if t1 == t2 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t) + return [sp1,sp2,sp2,sp3] + elif t1 <= 1e-10 and t2 >= 1.-1e-10 : + return [sp1,sp1,sp2,sp2] + elif t1 <= 1e-10: + sp1,sp2,sp3 = csp_split(sp1,sp2,t2) + return [sp1,sp1,sp2,sp3] + elif t2 >= 1.-1e-10 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + return [sp1,sp2,sp3,sp3] + else: + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + sp2,sp3,sp4 = csp_split(sp2,sp3,(t2-t1)/(1-t1) ) + return [sp1,sp2,sp3,sp4] + + +def csp_subpath_split_by_points(subpath, points) : + # points are [[i,t]...] where i-segment's number + points.sort() + points = [[1,0.]] + points + [[len(subpath)-1,1.]] + parts = [] + for int1,int2 in zip(points,points[1:]) : + if int1==int2 : + continue + if int1[1] == 1. : + int1[0] += 1 + int1[1] = 0. + if int1==int2 : + continue + if int2[1] == 0. : + int2[0] -= 1 + int2[1] = 1. + if int1[0] == 0 and int2[0]==len(subpath)-1:# and small(int1[1]) and small(int2[1]-1) : + continue + if int1[0]==int2[0] : # same segment + sp = csp_split_by_two_points(subpath[int1[0]-1],subpath[int1[0]],int1[1], int2[1]) + if sp[1]!=sp[2] : + parts += [ [sp[1],sp[2]] ] + else : + sp5,sp1,sp2 = csp_split(subpath[int1[0]-1],subpath[int1[0]],int1[1]) + sp3,sp4,sp5 = csp_split(subpath[int2[0]-1],subpath[int2[0]],int2[1]) + if int1[0]==int2[0]-1 : + parts += [ [sp1, [sp2[0],sp2[1],sp3[2]], sp4] ] + else : + parts += [ [sp1,sp2]+subpath[int1[0]+1:int2[0]-1]+[sp3,sp4] ] + return parts + + +def csp_from_arc(start, end, center, r, slope_st) : + # Creates csp that approximise specified arc + r = abs(r) + alpha = (atan2(end[0]-center[0],end[1]-center[1]) - atan2(start[0]-center[0],start[1]-center[1])) % math.pi2 + + sectors = int(abs(alpha)*2/math.pi)+1 + alpha_start = atan2(start[0]-center[0],start[1]-center[1]) + cos_,sin_ = math.cos(alpha_start), math.sin(alpha_start) + k = (4.*math.tan(alpha/sectors/4.)/3.) + if dot(slope_st , [- sin_*k*r, cos_*k*r]) < 0 : + if alpha>0 : alpha -= math.pi2 + else: alpha += math.pi2 + if abs(alpha*r)<0.001 : + return [] + + sectors = int(abs(alpha)*2/math.pi)+1 + k = (4.*math.tan(alpha/sectors/4.)/3.) + result = [] + for i in range(sectors+1) : + cos_,sin_ = math.cos(alpha_start + alpha*i/sectors), math.sin(alpha_start + alpha*i/sectors) + sp = [ [], [center[0] + cos_*r, center[1] + sin_*r], [] ] + sp[0] = [sp[1][0] + sin_*k*r, sp[1][1] - cos_*k*r ] + sp[2] = [sp[1][0] - sin_*k*r, sp[1][1] + cos_*k*r ] + result += [sp] + result[0][0] = result[0][1][:] + result[-1][2] = result[-1][1] + + return result + + +def point_to_arc_distance(p, arc): + ### Distance calculattion from point to arc + P0,P2,c,a = arc + dist = None + p = P(p) + r = (P0-c).mag() + if r>0 : + i = c + (p-c).unit()*r + alpha = ((i-c).angle() - (P0-c).angle()) + if a*alpha<0: + if alpha>0: alpha = alpha-math.pi2 + else: alpha = math.pi2+alpha + if between(alpha,0,a) or min(abs(alpha),abs(alpha-a))tolerance and i<4): + i += 1 + dl = d1*1 + for j in range(n+1): + t = float(j)/n + p = csp_at_t(sp1,sp2,t) + d = min(point_to_arc_distance(p,arc1), point_to_arc_distance(p,arc2)) + d1 = max(d1,d) + n=n*2 + return d1[0] + + +def csp_simple_bound_to_point_distance(p, csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath: + for p_ in sp: + minx = min(minx,p_[0]) if minx!=None else p_[0] + miny = min(miny,p_[1]) if miny!=None else p_[1] + maxx = max(maxx,p_[0]) if maxx!=None else p_[0] + maxy = max(maxy,p_[1]) if maxy!=None else p_[1] + return math.sqrt(max(minx-p[0],p[0]-maxx,0)**2+max(miny-p[1],p[1]-maxy,0)**2) + + +def csp_point_inside_bound(sp1, sp2, p): + bez = [sp1[1],sp1[2],sp2[0],sp2[1]] + x,y = p + c = 0 + for i in range(4): + [x0,y0], [x1,y1] = bez[i-1], bez[i] + if x0-x1!=0 and (y-y0)*(x1-x0)>=(x-x0)*(y1-y0) and x>min(x0,x1) and x<=max(x0,x1) : + c +=1 + return c%2==0 + + +def csp_bound_to_point_distance(sp1, sp2, p): + if csp_point_inside_bound(sp1, sp2, p) : + return 0. + bez = csp_segment_to_bez(sp1,sp2) + min_dist = 1e100 + for i in range(0,4): + d = point_to_line_segment_distance_2(p, bez[i-1],bez[i]) + if d <= min_dist : min_dist = d + return min_dist + + +def line_line_intersect(p1,p2,p3,p4) : # Return only true intersection. + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return False + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + return ("Overlap" if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) else False) + else: return False + else : + return ( + 0<=((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x<=1 and + 0<=((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x<=1 ) + + +def line_line_intersection_points(p1,p2,p3,p4) : # Return only points [ (x,y) ] + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return [] + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + res = [] + if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) : + if 0<=t11<=1 : res += [p1] + if 0<=t12<=1 : res += [p2] + if 0<=t21<=1 : res += [p3] + if 0<=t22<=1 : res += [p4] + return res + else: return [] + else : + t1 = ((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x + t2 = ((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x + if 0<=t1<=1 and 0<=t2<=1 : return [ [p1[0]*(1-t1)+p2[0]*t1, p1[1]*(1-t1)+p2[1]*t1] ] + else : return [] + + +def point_to_point_d2(a,b): + return (a[0]-b[0])**2 + (a[1]-b[1])**2 + + +def point_to_point_d(a,b): + return math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2) + + +def point_to_line_segment_distance_2(p1, p2,p3) : + # p1 - point, p2,p3 - line segment + #draw_pointer(p1) + w0 = [p1[0]-p2[0], p1[1]-p2[1]] + v = [p3[0]-p2[0], p3[1]-p2[1]] + c1 = w0[0]*v[0] + w0[1]*v[1] + if c1 <= 0 : + return w0[0]*w0[0]+w0[1]*w0[1] + c2 = v[0]*v[0] + v[1]*v[1] + if c2 <= c1 : + return (p1[0]-p3[0])**2 + (p1[1]-p3[1])**2 + return (p1[0]- p2[0]-v[0]*c1/c2)**2 + (p1[1]- p2[1]-v[1]*c1/c2) + + +def line_to_line_distance_2(p1,p2,p3,p4): + if line_line_intersect(p1,p2,p3,p4) : return 0 + return min( + point_to_line_segment_distance_2(p1,p3,p4), + point_to_line_segment_distance_2(p2,p3,p4), + point_to_line_segment_distance_2(p3,p1,p2), + point_to_line_segment_distance_2(p4,p1,p2)) + + +def csp_seg_bound_to_csp_seg_bound_max_min_distance(sp1,sp2,sp3,sp4) : + bez1 = csp_segment_to_bez(sp1,sp2) + bez2 = csp_segment_to_bez(sp3,sp4) + min_dist = 1e100 + max_dist = 0. + for i in range(4) : + if csp_point_inside_bound(sp1, sp2, bez2[i]) or csp_point_inside_bound(sp3, sp4, bez1[i]) : + min_dist = 0. + break + for i in range(4) : + for j in range(4) : + d = line_to_line_distance_2(bez1[i-1],bez1[i],bez2[j-1],bez2[j]) + if d < min_dist : min_dist = d + d = (bez2[j][0]-bez1[i][0])**2 + (bez2[j][1]-bez1[i][1])**2 + if max_dist < d : max_dist = d + return min_dist, max_dist + + +def csp_reverse(csp) : + for i in range(len(csp)) : + n = [] + for j in csp[i] : + n = [ [j[2][:],j[1][:],j[0][:]] ] + n + csp[i] = n[:] + return csp + + +def csp_normalized_slope(sp1,sp2,t) : + ax,ay,bx,by,cx,cy,dx,dy=bezmisc.bezierparameterize((sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:])) + if sp1[1]==sp2[1]==sp1[2]==sp2[0] : return [1.,0.] + f1x = 3*ax*t*t+2*bx*t+cx + f1y = 3*ay*t*t+2*by*t+cy + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + + if t == 0 : + f1x = sp2[0][0]-sp1[1][0] + f1y = sp2[0][1]-sp1[1][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + elif t == 1 : + f1x = sp2[1][0]-sp1[2][0] + f1y = sp2[1][1]-sp1[2][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + return [1.,0.] + + +def csp_normalized_normal(sp1,sp2,t) : + nx,ny = csp_normalized_slope(sp1,sp2,t) + return [-ny, nx] + + +def csp_parameterize(sp1,sp2): + return bezmisc.bezierparameterize(csp_segment_to_bez(sp1,sp2)) + + +def csp_concat_subpaths(*s): + + def concat(s1,s2) : + if s1 == [] : return s2 + if s2 == [] : return s1 + if (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 > 0.00001 : + return s1[:-1]+[ [s1[-1][0],s1[-1][1],s1[-1][1]], [s2[0][1],s2[0][1],s2[0][2]] ] + s2[1:] + else : + return s1[:-1]+[ [s1[-1][0],s2[0][1],s2[0][2]] ] + s2[1:] + + if len(s) == 0 : return [] + if len(s) ==1 : return s[0] + result = s[0] + for s1 in s[1:]: + result = concat(result,s1) + return result + + +def csp_draw(csp, color="#05f", group = None, style="fill:none;", width = .1, comment = "") : + if csp!=[] and csp!=[[]] : + if group == None : group = options.doc_root + style += "stroke:"+color+";"+ "stroke-width:%0.4fpx;"%width + args = {"d": cubicsuperpath.formatPath(csp), "style":style} + if comment!="" : args["comment"] = str(comment) + inkex.etree.SubElement( group, inkex.addNS('path','svg'), args ) + + +def csp_subpaths_end_to_start_distance2(s1,s2): + return (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 + + +def csp_clip_by_line(csp,l1,l2) : + result = [] + for i in range(len(csp)): + s = csp[i] + intersections = [] + for j in range(1,len(s)) : + intersections += [ [j,int_] for int_ in csp_line_intersection(l1,l2,s[j-1],s[j])] + splitted_s = csp_subpath_split_by_points(s, intersections) + for s in splitted_s[:] : + clip = False + for p in csp_true_bounds([s]) : + if (l1[1]-l2[1])*p[0] + (l2[0]-l1[0])*p[1] + (l1[0]*l2[1]-l2[0]*l1[1])<-0.01 : + clip = True + break + if clip : + splitted_s.remove(s) + result += splitted_s + return result + + +def csp_subpath_line_to(subpath, points) : + # Appends subpath with line or polyline. + if len(points)>0 : + if len(subpath)>0: + subpath[-1][2] = subpath[-1][1][:] + if type(points[0]) == type([1,1]) : + for p in points : + subpath += [ [p[:],p[:],p[:]] ] + else: + subpath += [ [points,points,points] ] + return subpath + + +def csp_join_subpaths(csp) : + result = csp[:] + done_smf = True + joined_result = [] + while done_smf : + done_smf = False + while len(result)>0: + s1 = result[-1][:] + del(result[-1]) + j = 0 + joined_smf = False + while j0, abc*bcd>0, abc*cad>0 + if m1 and m2 and m3 : return [a,b,c] + if m1 and m2 and not m3 : return [a,b,c,d] + if m1 and not m2 and m3 : return [a,b,d,c] + if not m1 and m2 and m3 : return [a,d,b,c] + if m1 and not (m2 and m3) : return [a,b,d] + if not (m1 and m2) and m3 : return [c,a,d] + if not (m1 and m3) and m2 : return [b,c,d] + + raise ValueError, "csp_segment_convex_hull happend something that shouldnot happen!" + + +################################################################################ +### Bezier additional functions +################################################################################ + +def bez_bounds_intersect(bez1, bez2) : + return bounds_intersect(bez_bound(bez2), bez_bound(bez1)) + + +def bez_bound(bez) : + return [ + min(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + min(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + max(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + max(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + ] + + +def bounds_intersect(a, b) : + return not ( (a[0]>b[2]) or (b[0]>a[2]) or (a[1]>b[3]) or (b[1]>a[3]) ) + + +def tpoint((x1,y1),(x2,y2),t): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + + +def bez_to_csp_segment(bez) : + return [bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]] + + +def bez_split(a,t=0.5) : + a1 = tpoint(a[0],a[1],t) + at = tpoint(a[1],a[2],t) + b2 = tpoint(a[2],a[3],t) + a2 = tpoint(a1,at,t) + b1 = tpoint(b2,at,t) + a3 = tpoint(a2,b1,t) + return [a[0],a1,a2,a3], [a3,b1,b2,a[3]] + + +def bez_at_t(bez,t) : + return csp_at_t([bez[0],bez[0],bez[1]],[bez[2],bez[3],bez[3]],t) + + +def bez_to_point_distance(bez,p,needed_dist=[0.,1e100]): + # returns [d^2,t] + return csp_seg_to_point_distance(bez_to_csp_segment(bez),p,needed_dist) + + +def bez_normalized_slope(bez,t): + return csp_normalized_slope([bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]],t) + +################################################################################ +### Some vector functions +################################################################################ + +def normalize((x,y)) : + l = math.sqrt(x**2+y**2) + if l == 0 : return [0.,0.] + else : return [x/l, y/l] + + +def cross(a,b) : + return a[1] * b[0] - a[0] * b[1] + + +def dot(a,b) : + return a[0] * b[0] + a[1] * b[1] + + +def rotate_ccw(d) : + return [-d[1],d[0]] + + +def vectors_ccw(a,b): + return a[0]*b[1]-b[0]*a[1] < 0 + + +def vector_from_to_length(a,b): + return math.sqrt((a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1])) + +################################################################################ +### Common functions +################################################################################ + +def matrix_mul(a,b) : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + try : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + except : + return None + + +def transpose(a) : + try : + return [ [ a[i][j] for i in range(len(a)) ] for j in range(len(a[0])) ] + except : + return None + + +def det_3x3(a): + return float( + a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[1][0]*a[2][1]*a[0][2] + - a[0][2]*a[1][1]*a[2][0] - a[0][0]*a[2][1]*a[1][2] - a[0][1]*a[2][2]*a[1][0] + ) + + +def inv_3x3(a): # invert matrix 3x3 + det = det_3x3(a) + if det==0: return None + return [ + [ (a[1][1]*a[2][2] - a[2][1]*a[1][2])/det, -(a[0][1]*a[2][2] - a[2][1]*a[0][2])/det, (a[0][1]*a[1][2] - a[1][1]*a[0][2])/det ], + [ -(a[1][0]*a[2][2] - a[2][0]*a[1][2])/det, (a[0][0]*a[2][2] - a[2][0]*a[0][2])/det, -(a[0][0]*a[1][2] - a[1][0]*a[0][2])/det ], + [ (a[1][0]*a[2][1] - a[2][0]*a[1][1])/det, -(a[0][0]*a[2][1] - a[2][0]*a[0][1])/det, (a[0][0]*a[1][1] - a[1][0]*a[0][1])/det ] + ] + + +def inv_2x2(a): # invert matrix 2x2 + det = a[0][0]*a[1][1] - a[1][0]*a[0][1] + if det==0: return None + return [ + [a[1][1]/det, -a[0][1]/det], + [-a[1][0]/det, a[0][0]/det] + ] + + +def small(a) : + global small_tolerance + return abs(a)=0 : + t = m+math.sqrt(n) + m1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + t = m-math.sqrt(n) + n1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + else : + m1 = pow(complex((m+cmath.sqrt(n))/2),1./3) + n1 = pow(complex((m-cmath.sqrt(n))/2),1./3) + x1 = -1./3 * (a + m1 + n1) + x2 = -1./3 * (a + w1*m1 + w2*n1) + x3 = -1./3 * (a + w2*m1 + w1*n1) + return [x1,x2,x3] + elif b!=0: + det = c**2-4*b*d + if det>0 : + return [(-c+math.sqrt(det))/(2*b),(-c-math.sqrt(det))/(2*b)] + elif d == 0 : + return [-c/(b*b)] + else : + return [(-c+cmath.sqrt(det))/(2*b),(-c-cmath.sqrt(det))/(2*b)] + elif c!=0 : + return [-d/c] + else : return [] + + +################################################################################ +### print_ prints any arguments into specified log file +################################################################################ + +def print_(*arg): + f = open(options.log_filename,"a") + for s in arg : + s = str(unicode(s).encode('unicode_escape'))+" " + f.write( s ) + f.write("\n") + f.close() + + +################################################################################ +### Point (x,y) operations +################################################################################ +class P: + def __init__(self, x, y=None): + if not y==None: + self.x, self.y = float(x), float(y) + else: + self.x, self.y = float(x[0]), float(x[1]) + def __add__(self, other): return P(self.x + other.x, self.y + other.y) + def __sub__(self, other): return P(self.x - other.x, self.y - other.y) + def __neg__(self): return P(-self.x, -self.y) + def __mul__(self, other): + if isinstance(other, P): + return self.x * other.x + self.y * other.y + return P(self.x * other, self.y * other) + __rmul__ = __mul__ + def __div__(self, other): return P(self.x / other, self.y / other) + def mag(self): return math.hypot(self.x, self.y) + def unit(self): + h = self.mag() + if h: return self / h + else: return P(0,0) + def dot(self, other): return self.x * other.x + self.y * other.y + def rot(self, theta): + c = math.cos(theta) + s = math.sin(theta) + return P(self.x * c - self.y * s, self.x * s + self.y * c) + def angle(self): return math.atan2(self.y, self.x) + def __repr__(self): return '%f,%f' % (self.x, self.y) + def pr(self): return "%.2f,%.2f" % (self.x, self.y) + def to_list(self): return [self.x, self.y] + def ccw(self): return P(-self.y,self.x) + def l2(self): return self.x*self.x + self.y*self.y + +################################################################################ +### +### Offset function +### +### This function offsets given cubic super path. +### It's based on src/livarot/PathOutline.cpp from Inkscape's source code. +### +### +################################################################################ +def csp_offset(csp, r) : + offset_tolerance = 0.05 + offset_subdivision_depth = 10 + time_ = time.time() + time_start = time_ + print_("Offset start at %s"% time_) + print_("Offset radius %s"% r) + + + def csp_offset_segment(sp1,sp2,r) : + result = [] + t = csp_get_t_at_curvature(sp1,sp2,1/r) + if len(t) == 0 : t =[0.,1.] + t.sort() + if t[0]>.00000001 : t = [0.]+t + if t[-1]<.99999999 : t.append(1.) + for st,end in zip(t,t[1:]) : + c = csp_curvature_at_t(sp1,sp2,(st+end)/2) + sp = csp_split_by_two_points(sp1,sp2,st,end) + if sp[1]!=sp[2]: + if (c>1/r and r<0 or c<1/r and r>0) : + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + else : # This part will be clipped for sure... TODO Optimize it... + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + + if result==[] : + result = offset[:] + else: + if csp_subpaths_end_to_start_distance2(result,offset)<0.0001 : + result = csp_concat_subpaths(result,offset) + else: + + intersection = csp_get_subapths_last_first_intersection(result,offset) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(result[i-1],result[i],t1) + result = result[:i-1] + [ sp1_, sp2_ ] + sp1_,sp2_,sp3_ = csp_split(offset[j-1],offset[j],t2) + result = csp_concat_subpaths( result, [sp2_,sp3_] + offset[j+1:] ) + else : + pass # ??? + #raise ValueError, "Offset curvature clipping error" + #csp_draw([result]) + return result + + + def create_offset_segment(sp1,sp2,r) : + # See Gernot Hoffmann "Bezier Curves" p.34 -> 7.1 Bezier Offset Curves + p0,p1,p2,p3 = P(sp1[1]),P(sp1[2]),P(sp2[0]),P(sp2[1]) + s0,s1,s3 = p1-p0,p2-p1,p3-p2 + n0 = s0.ccw().unit() if s0.l2()!=0 else P(csp_normalized_normal(sp1,sp2,0)) + n3 = s3.ccw().unit() if s3.l2()!=0 else P(csp_normalized_normal(sp1,sp2,1)) + n1 = s1.ccw().unit() if s1.l2()!=0 else (n0.unit()+n3.unit()).unit() + + q0,q3 = p0+r*n0, p3+r*n3 + c = csp_curvature_at_t(sp1,sp2,0) + q1 = q0 + (p1-p0)*(1- (r*c if abs(c)<100 else 0) ) + c = csp_curvature_at_t(sp1,sp2,1) + q2 = q3 + (p2-p3)*(1- (r*c if abs(c)<100 else 0) ) + + + return [[q0.to_list(), q0.to_list(), q1.to_list()],[q2.to_list(), q3.to_list(), q3.to_list()]] + + + def csp_get_subapths_last_first_intersection(s1,s2): + _break = False + for i in range(1,len(s1)) : + sp11, sp12 = s1[-i-1], s1[-i] + for j in range(1,len(s2)) : + sp21,sp22 = s2[j-1], s2[j] + intersection = csp_segments_true_intersection(sp11,sp12,sp21,sp22) + if intersection != [] : + _break = True + break + if _break:break + if _break : + intersection = max(intersection) + return [len(s1)-i,intersection[0], j,intersection[1]] + else : + return [] + + + def csp_join_offsets(prev,next,sp1,sp2,sp1_l,sp2_l,r): + if len(next)>1 : + if (P(prev[-1][1])-P(next[0][1])).l2()<0.001 : + return prev,[],next + intersection = csp_get_subapths_last_first_intersection(prev,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1], next[j],t2) + return prev[:i-1] + [ sp1_, sp2_ ], [], [sp4_,sp5_] + next[j+1:] + + # Offsets do not intersect... will add an arc... + start = (P(csp_at_t(sp1_l,sp2_l,1.)) + r*P(csp_normalized_normal(sp1_l,sp2_l,1.))).to_list() + end = (P(csp_at_t(sp1,sp2,0.)) + r*P(csp_normalized_normal(sp1,sp2,0.))).to_list() + arc = csp_from_arc(start, end, sp1[1], r, csp_normalized_slope(sp1_l,sp2_l,1.) ) + if arc == [] : + return prev,[],next + else: + # Clip prev by arc + if csp_subpaths_end_to_start_distance2(prev,arc)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(prev,arc) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(arc[j-1],arc[j],t2) + prev = prev[:i-1] + [ sp1_, sp2_ ] + arc = [sp4_,sp5_] + arc[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + # Clip next by arc + if next == [] : + return prev,[],arc + if csp_subpaths_end_to_start_distance2(arc,next)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(arc,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(arc[i-1],arc[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1],next[j],t2) + arc = arc[:i-1] + [ sp1_, sp2_ ] + next = [sp4_,sp5_] + next[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + + return prev,arc,next + + + def offset_segment_recursion(sp1,sp2,r, depth, tolerance) : + sp1_r,sp2_r = create_offset_segment(sp1,sp2,r) + err = max( + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.50)) + P(csp_normalized_normal(sp1,sp2,.50))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.75)) + P(csp_normalized_normal(sp1,sp2,.75))*r).to_list())[0], + ) + + if err>tolerance**2 and depth>0: + #print_(csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], tolerance) + if depth > offset_subdivision_depth-2 : + t = csp_max_curvature(sp1,sp2) + t = max(.1,min(.9 ,t)) + else : + t = .5 + sp3,sp4,sp5 = csp_split(sp1,sp2,t) + r1 = offset_segment_recursion(sp3,sp4,r, depth-1, tolerance) + r2 = offset_segment_recursion(sp4,sp5,r, depth-1, tolerance) + return r1[:-1]+ [[r1[-1][0],r1[-1][1],r2[0][2]]] + r2[1:] + else : + #csp_draw([[sp1_r,sp2_r]]) + #draw_pointer(sp1[1]+sp1_r[1], "#057", "line") + #draw_pointer(sp2[1]+sp2_r[1], "#705", "line") + return [sp1_r,sp2_r] + + + ############################################################################ + # Some small definitions + ############################################################################ + csp_len = len(csp) + + ############################################################################ + # Prepare the path + ############################################################################ + # Remove all small segments (segment length < 0.001) + + for i in xrange(len(csp)) : + for j in xrange(len(csp[i])) : + sp = csp[i][j] + if (P(sp[1])-P(sp[0])).mag() < 0.001 : + csp[i][j][0] = sp[1] + if (P(sp[2])-P(sp[0])).mag() < 0.001 : + csp[i][j][2] = sp[1] + for i in xrange(len(csp)) : + for j in xrange(1,len(csp[i])) : + if cspseglength(csp[i][j-1], csp[i][j])<0.001 : + csp[i] = csp[i][:j] + csp[i][j+1:] + if cspseglength(csp[i][-1],csp[i][0])>0.001 : + csp[i][-1][2] = csp[i][-1][1] + csp[i]+= [ [csp[i][0][1],csp[i][0][1],csp[i][0][1]] ] + + # TODO Get rid of self intersections. + + original_csp = csp[:] + # Clip segments which has curvature>1/r. Because their offset will be selfintersecting and very nasty. + + print_("Offset prepared the path in %s"%(time.time()-time_)) + print_("Path length = %s"% sum([len(i)for i in csp] ) ) + time_ = time.time() + + ############################################################################ + # Offset + ############################################################################ + # Create offsets for all segments in the path. And join them together inside each subpath. + unclipped_offset = [[] for i in xrange(csp_len)] + offsets_original = [[] for i in xrange(csp_len)] + join_points = [[] for i in xrange(csp_len)] + intersection = [[] for i in xrange(csp_len)] + for i in xrange(csp_len) : + subpath = csp[i] + subpath_offset = [] + last_offset_len = 0 + for sp1,sp2 in zip(subpath, subpath[1:]) : + segment_offset = csp_offset_segment(sp1,sp2,r) + if subpath_offset == [] : + subpath_offset = segment_offset + + prev_l = len(subpath_offset) + else : + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:],segment_offset,sp1,sp2,sp1_l,sp2_l,r) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Magenta") + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc,next) + prev_l = len(next) + sp1_l, sp2_l = sp1[:], sp2[:] + + # Join last and first offsets togother to close the curve + + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:], subpath_offset[:2], subpath[0], subpath[1], sp1_l,sp2_l, r) + subpath_offset[:2] = next[:] + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Red") + #csp_draw([next],"Red") + + # Collect subpath's offset and save it to unclipped offset list. + unclipped_offset[i] = subpath_offset[:] + + #for k,t in intersection[i]: + # draw_pointer(csp_at_t(subpath_offset[k-1], subpath_offset[k], t)) + + #inkex.etree.SubElement( options.doc_root, inkex.addNS('path','svg'), {"d": cubicsuperpath.formatPath(unclipped_offset), "style":"fill:none;stroke:#0f0;"} ) + print_("Offsetted path in %s"%(time.time()-time_)) + time_ = time.time() + + #for i in range(len(unclipped_offset)): + # csp_draw([unclipped_offset[i]], color = ["Green","Red","Blue"][i%3], width = .1) + #return [] + ############################################################################ + # Now to the clipping. + ############################################################################ + # First of all find all intersection's between all segments of all offseted subpaths, including self intersections. + + #TODO define offset tolerance here + global small_tolerance + small_tolerance = 0.01 + summ = 0 + summ1 = 0 + for subpath_i in xrange(csp_len) : + for subpath_j in xrange(subpath_i,csp_len) : + subpath = unclipped_offset[subpath_i] + subpath1 = unclipped_offset[subpath_j] + for i in xrange(1,len(subpath)) : + # If subpath_i==subpath_j we are looking for self intersections, so + # we'll need search intersections only for xrange(i,len(subpath1)) + for j in ( xrange(i,len(subpath1)) if subpath_i==subpath_j else xrange(len(subpath1))) : + if subpath_i==subpath_j and j==i : + # Find self intersections of a segment + sp1,sp2,sp3 = csp_split(subpath[i-1],subpath[i],.5) + intersections = csp_segments_intersection(sp1,sp2,sp2,sp3) + summ +=1 + for t in intersections : + summ1 += 1 + if not ( small(t[0]-1) and small(t[1]) ) and 0<=t[0]<=1 and 0<=t[1]<=1 : + intersection[subpath_i] += [ [i,t[0]/2],[j,t[1]/2+.5] ] + else : + intersections = csp_segments_intersection(subpath[i-1],subpath[i],subpath1[j-1],subpath1[j]) + summ +=1 + for t in intersections : + summ1 += 1 + #TODO tolerance dependence to cpsp_length(t) + if len(t) == 2 and 0<=t[0]<=1 and 0<=t[1]<=1 and not ( + subpath_i==subpath_j and ( + (j-i-1) % (len(subpath)-1) == 0 and small(t[0]-1) and small(t[1]) or + (i-j-1) % (len(subpath)-1) == 0 and small(t[1]-1) and small(t[0]) ) ) : + intersection[subpath_i] += [ [i,t[0]] ] + intersection[subpath_j] += [ [j,t[1]] ] + #draw_pointer(csp_at_t(subpath[i-1],subpath[i],t[0]),"#f00") + #print_(t) + #print_(i,j) + elif len(t)==5 and t[4]=="Overlap": + intersection[subpath_i] += [ [i,t[0]], [i,t[1]] ] + intersection[subpath_j] += [ [j,t[1]], [j,t[3]] ] + + print_("Intersections found in %s"%(time.time()-time_)) + print_("Examined %s segments"%(summ)) + print_("found %s intersections"%(summ1)) + time_ = time.time() + + ######################################################################## + # Split unclipped offset by intersection points into splitted_offset + ######################################################################## + splitted_offset = [] + for i in xrange(csp_len) : + subpath = unclipped_offset[i] + if len(intersection[i]) > 0 : + parts = csp_subpath_split_by_points(subpath, intersection[i]) + # Close parts list to close path (The first and the last parts are joined together) + if [1,0.] not in intersection[i] : + parts[0][0][0] = parts[-1][-1][0] + parts[0] = csp_concat_subpaths(parts[-1], parts[0]) + splitted_offset += parts[:-1] + else: + splitted_offset += parts[:] + else : + splitted_offset += [subpath[:]] + + #for i in range(len(splitted_offset)): + # csp_draw([splitted_offset[i]], color = ["Green","Red","Blue"][i%3]) + print_("Splitted in %s"%(time.time()-time_)) + time_ = time.time() + + + ######################################################################## + # Clipping + ######################################################################## + result = [] + for subpath_i in range(len(splitted_offset)): + clip = False + s1 = splitted_offset[subpath_i] + for subpath_j in range(len(splitted_offset)): + s2 = splitted_offset[subpath_j] + if (P(s1[0][1])-P(s2[-1][1])).l2()<0.0001 and ( (subpath_i+1) % len(splitted_offset) != subpath_j ): + if dot(csp_normalized_normal(s2[-2],s2[-1],1.),csp_normalized_slope(s1[0],s1[1],0.))*r<-0.0001 : + clip = True + break + if (P(s2[0][1])-P(s1[-1][1])).l2()<0.0001 and ( (subpath_j+1) % len(splitted_offset) != subpath_i ): + if dot(csp_normalized_normal(s2[0],s2[1],0.),csp_normalized_slope(s1[-2],s1[-1],1.))*r>0.0001 : + clip = True + break + + if not clip : + result += [s1[:]] + elif options.offset_draw_clippend_path : + csp_draw([s1],color="Red",width=.1) + draw_pointer( csp_at_t(s2[-2],s2[-1],1.)+ + (P(csp_at_t(s2[-2],s2[-1],1.))+ P(csp_normalized_normal(s2[-2],s2[-1],1.))*10).to_list(),"Green", "line" ) + draw_pointer( csp_at_t(s1[0],s1[1],0.)+ + (P(csp_at_t(s1[0],s1[1],0.))+ P(csp_normalized_slope(s1[0],s1[1],0.))*10).to_list(),"Red", "line" ) + + # Now join all together and check closure and orientation of result + joined_result = csp_join_subpaths(result) + # Check if each subpath from joined_result is closed + #csp_draw(joined_result,color="Green",width=1) + + + for s in joined_result[:] : + if csp_subpaths_end_to_start_distance2(s,s) > 0.001 : + # Remove open parts + if options.offset_draw_clippend_path: + csp_draw([s],color="Orange",width=1) + draw_pointer(s[0][1], comment= csp_subpaths_end_to_start_distance2(s,s)) + draw_pointer(s[-1][1], comment = csp_subpaths_end_to_start_distance2(s,s)) + joined_result.remove(s) + else : + # Remove small parts + minx,miny,maxx,maxy = csp_true_bounds([s]) + if (minx[0]-maxx[0])**2 + (miny[1]-maxy[1])**2 < 0.1 : + joined_result.remove(s) + print_("Clipped and joined path in %s"%(time.time()-time_)) + time_ = time.time() + + ######################################################################## + # Now to the Dummy cliping: remove parts from splitted offset if their + # centers are closer to the original path than offset radius. + ######################################################################## + + r1,r2 = ( (0.99*r)**2, (1.01*r)**2 ) if abs(r*.01)<1 else ((abs(r)-1)**2, (abs(r)+1)**2) + for s in joined_result[:]: + dist = csp_to_point_distance(original_csp, s[int(len(s)/2)][1], dist_bounds = [r1,r2], tolerance = .000001) + if not r1 < dist[0] < r2 : + joined_result.remove(s) + if options.offset_draw_clippend_path: + csp_draw([s], comment = math.sqrt(dist[0])) + draw_pointer(csp_at_t(csp[dist[1]][dist[2]-1],csp[dist[1]][dist[2]],dist[3])+s[int(len(s)/2)][1],"blue", "line", comment = [math.sqrt(dist[0]),i,j,sp] ) + + print_("-----------------------------") + print_("Total offset time %s"%(time.time()-time_start)) + print_() + return joined_result + + + + + +################################################################################ +### +### Biarc function +### +### Calculates biarc approximation of cubic super path segment +### splits segment if needed or approximates it with straight line +### +################################################################################ +def biarc(sp1, sp2, z1, z2, depth=0): + def biarc_split(sp1,sp2, z1, z2, depth): + if depth 0 : raise ValueError, (a,b,c,disq,beta1,beta2) + beta = max(beta1, beta2) + elif asmall and bsmall: + return biarc_split(sp1, sp2, z1, z2, depth) + alpha = beta * r + ab = alpha + beta + P1 = P0 + alpha * TS + P3 = P4 - beta * TE + P2 = (beta / ab) * P1 + (alpha / ab) * P3 + + + def calculate_arc_params(P0,P1,P2): + D = (P0+P2)/2 + if (D-P1).mag()==0: return None, None + R = D - ( (D-P0).mag()**2/(D-P1).mag() )*(P1-D).unit() + p0a, p1a, p2a = (P0-R).angle()%(2*math.pi), (P1-R).angle()%(2*math.pi), (P2-R).angle()%(2*math.pi) + alpha = (p2a - p0a) % (2*math.pi) + if (p0a1000000 or abs(R.y)>1000000 or (R-P0).mag<.1 : + return None, None + else : + return R, alpha + R1,a1 = calculate_arc_params(P0,P1,P2) + R2,a2 = calculate_arc_params(P2,P3,P4) + if R1==None or R2==None or (R1-P0).mag() 1 and depthls : + res += [seg] + else : + if seg[1] == "arc" : + r = math.sqrt((seg[0][0]-seg[2][0])**2+(seg[0][1]-seg[2][1])**2) + x,y = seg[0][0]-seg[2][0], seg[0][1]-seg[2][1] + a = seg[3]/ls*(l-lc) + x,y = x*math.cos(a) - y*math.sin(a), x*math.sin(a) + y*math.cos(a) + x,y = x+seg[2][0], y+seg[2][1] + res += [[ seg[0], "arc", seg[2], a, [x,y], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + if seg[1] == "line" : + res += [[ seg[0], "line", 0, 0, [(seg[4][0]-seg[0][0])/ls*(l-lc),(seg[4][1]-seg[0][1])/ls*(l-lc)], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + i += 1 + if i >= len(subcurve) and not subcurve_closed: + reverse = not reverse + i = i%len(subcurve) + return res + +################################################################################ +### Polygon class +################################################################################ +class Polygon: + def __init__(self, polygon=None): + self.polygon = [] if polygon==None else polygon[:] + + + def move(self, x, y) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + self.polygon[i][j][0] += x + self.polygon[i][j][1] += y + + + def bounds(self) : + minx,miny,maxx,maxy = 1e400, 1e400, -1e400, -1e400 + for poly in self.polygon : + for p in poly : + if minx > p[0] : minx = p[0] + if miny > p[1] : miny = p[1] + if maxx < p[0] : maxx = p[0] + if maxy < p[1] : maxy = p[1] + return minx*1,miny*1,maxx*1,maxy*1 + + + def width(self): + b = self.bounds() + return b[2]-b[0] + + + def rotate_(self,sin,cos) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + x,y = self.polygon[i][j][0], self.polygon[i][j][1] + self.polygon[i][j][0] = x*cos - y*sin + self.polygon[i][j][1] = x*sin + y*cos + + + def rotate(self, a): + cos, sin = math.cos(a), math.sin(a) + self.rotate_(sin,cos) + + + def drop_into_direction(self, direction, surface) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Direction is [dx,dy] + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + if direction[0]**2 + direction[1]**2 <1e-10 : return + direction = normalize(direction) + sin,cos = direction[0], -direction[1] + self.rotate_(-sin,cos) + surface.rotate_(-sin,cos) + self.drop_down(surface, zerro_plane = False) + self.rotate_(sin,cos) + surface.rotate_(sin,cos) + + + def centroid(self): + centroids = [] + sa = 0 + for poly in self.polygon: + cx,cy,a = 0,0,0 + for i in range(len(poly)): + [x1,y1],[x2,y2] = poly[i-1],poly[i] + cx += (x1+x2)*(x1*y2-x2*y1) + cy += (y1+y2)*(x1*y2-x2*y1) + a += (x1*y2-x2*y1) + a *= 3. + if abs(a)>0 : + cx /= a + cy /= a + sa += abs(a) + centroids += [ [cx,cy,a] ] + if sa == 0 : return [0.,0.] + cx,cy = 0.,0. + for c in centroids : + cx += c[0]*c[2] + cy += c[1]*c[2] + cx /= sa + cy /= sa + return [cx,cy] + + + def drop_down(self, surface, zerro_plane = True) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Down means min y (0,-1) + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + # Get surface top point + top = surface.bounds()[3] + if zerro_plane : top = max(0, top) + # Get polygon bottom point + bottom = self.bounds()[1] + self.move(0, top - bottom + 10) + # Now get shortest distance from surface to polygon in positive x=0 direction + # Such distance = min(distance(vertex, edge)...) where edge from surface and + # vertex from polygon and vice versa... + dist = 1e300 + for poly in surface.polygon : + for i in range(len(poly)) : + for poly1 in self.polygon : + for i1 in range(len(poly1)) : + st,end = poly[i-1], poly[i] + vertex = poly1[i1] + if st[0]<=vertex[0]<= end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(vertex[1]-st[1],vertex[1]-end[1]) + else : d = vertex[1] - st[1] - (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + # and vice versa just change the sign because vertex now under the edge + st,end = poly1[i1-1], poly1[i1] + vertex = poly[i] + if st[0]<=vertex[0]<=end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(- vertex[1]+st[1],-vertex[1]+end[1]) + else : d = - vertex[1] + st[1] + (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + + if zerro_plane and dist > 10 + top : dist = 10 + top + #print_(dist, top, bottom) + #self.draw() + self.move(0, -dist) + + + def draw(self,color="#075",width=.1) : + for poly in self.polygon : + csp_draw( [csp_subpath_line_to([],poly+[poly[0]])], color=color,width=width ) + + + def add(self, add) : + if type(add) == type([]) : + self.polygon += add[:] + else : + self.polygon += add.polygon[:] + + + def point_inside(self,p) : + inside = False + for poly in self.polygon : + for i in range(len(poly)): + st,end = poly[i-1], poly[i] + if p==st or p==end : return True # point is a vertex = point is on the edge + if st[0]>end[0] : st, end = end, st # This will be needed to check that edge if open only at rigth end + c = (p[1]-st[1])*(end[0]-st[0])-(end[1]-st[1])*(p[0]-st[0]) + #print_(c) + if st[0]<=p[0]0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + # Check self intersections with other polys + for i2 in range(len(self.polygon)): + if i1==i2 : continue + poly2 = self.polygon[i2] + for j2 in range(len(poly2)): + s1, e1 = poly2[j2-1],poly2[j2] + int_ = line_line_intersection_points(s,e,s1,e1) + for p in int_ : + if point_to_point_d2(p,s)>0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + hull += [poly_] + # Create the dictionary containing all edges in both directions + edges = {} + for poly in self.polygon : + for i in range(len(poly)): + s,e = tuple(poly[i-1]), tuple(poly[i]) + if (point_to_point_d2(e,s)<0.000001) : continue + break_s, break_e = False, False + for p in edges : + if point_to_point_d2(p,s)<0.000001 : + break_s = True + s = p + if point_to_point_d2(p,e)<0.000001 : + break_e = True + e = p + if break_s and break_e : break + l = point_to_point_d(s,e) + if not break_s and not break_e : + edges[s] = [ [s,e,l] ] + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + #draw_pointer(s+e,"red","line") + else : + if e in edges : + for edge in edges[e] : + if point_to_point_d2(edge[1],s)<0.000001 : + break + if point_to_point_d2(edge[1],s)>0.000001 : + edges[e] += [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + + else : + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"green","line") + if s in edges : + for edge in edges[s] : + if point_to_point_d2(edge[1],e)<0.000001 : + break + if point_to_point_d2(edge[1],e)>0.000001 : + edges[s] += [ [s,e, l] ] + #draw_pointer(s+e,"red","line") + else : + edges[s] = [ [s,e,l] ] + #draw_pointer(s+e,"green","line") + + + def angle_quadrant(sin,cos): + # quadrants are (0,pi/2], (pi/2,pi], (pi,3*pi/2], (3*pi/2, 2*pi], i.e. 0 is in the 4-th quadrant + if sin>0 and cos>=0 : return 1 + if sin>=0 and cos<0 : return 2 + if sin<0 and cos<=0 : return 3 + if sin<=0 and cos>0 : return 4 + + + def angle_is_less(sin,cos,sin1,cos1): + # 0 = 2*pi is the largest angle + if [sin1, cos1] == [0,1] : return True + if [sin, cos] == [0,1] : return False + if angle_quadrant(sin,cos)>angle_quadrant(sin1,cos1) : + return False + if angle_quadrant(sin,cos)=0 and cos>0 : return sin0 and cos<=0 : return sin>sin1 + if sin<=0 and cos<0 : return sin>sin1 + if sin<0 and cos>=0 : return sin len_edges : raise ValueError, "Hull error" + loops1 += 1 + next = get_closes_edge_by_angle(edges[last[1]],last) + #draw_pointer(next[0]+next[1],"Green","line", comment=i, width= 1) + #print_(next[0],"-",next[1]) + + last = next + poly += [ list(last[0]) ] + self.polygon += [ poly ] + # Remove all edges that are intersects new poly (any vertex inside new poly) + poly_ = Polygon([poly]) + for p in edges.keys()[:] : + if poly_.point_inside(list(p)) : del edges[p] + self.draw(color="Green", width=1) + + +class Arangement_Genetic: + # gene = [fittness, order, rotation, xposition] + # spieces = [gene]*shapes count + # population = [spieces] + def __init__(self, polygons, material_width): + self.population = [] + self.genes_count = len(polygons) + self.polygons = polygons + self.width = material_width + self.mutation_factor = 0.1 + self.order_mutate_factor = 1. + self.move_mutate_factor = 1. + + + def add_random_species(self,count): + for i in range(count): + specimen = [] + order = range(self.genes_count) + random.shuffle(order) + for j in order: + specimen += [ [j, random.random(), random.random()] ] + self.population += [ [None,specimen] ] + + + def species_distance2(self,sp1,sp2) : + # retun distance, each component is normalized + s = 0 + for j in range(self.genes_count) : + s += ((sp1[j][0]-sp2[j][0])/self.genes_count)**2 + (( sp1[j][1]-sp2[j][1]))**2 + ((sp1[j][2]-sp2[j][2]))**2 + return s + + + def similarity(self,sp1,top) : + # Define similarity as a simple distance between two points in len(gene)*len(spiece) -th dimentions + # for sp2 in top_spieces sum(|sp1-sp2|)/top_count + sim = 0 + for sp2 in top : + sim += math.sqrt(species_distance2(sp1,sp2[1])) + return sim/len(top) + + + def leave_top_species(self,count): + self.population.sort() + res = [ copy.deepcopy(self.population[0]) ] + del self.population[0] + for i in range(count-1) : + t = [] + for j in range(20) : + i1 = random.randint(0,len(self.population)-1) + t += [ [self.population[i1][0],i1] ] + t.sort() + res += [ copy.deepcopy(self.population[t[0][1]]) ] + del self.population[t[0][1]] + self.population = res + #del self.population[0] + #for c in range(count-1) : + # rank = [] + # for i in range(len(self.population)) : + # sim = self.similarity(self.population[i][1],res) + # rank += [ [self.population[i][0] / sim if sim>0 else 1e100,i] ] + # rank.sort() + # res += [ copy.deepcopy(self.population[rank[0][1]]) ] + # print_(rank[0],self.population[rank[0][1]][0]) + # print_(res[-1]) + # del self.population[rank[0][1]] + + self.population = res + + + def populate_species(self,count, parent_count): + self.population.sort() + self.inc = 0 + for c in range(count): + parent1 = random.randint(0,parent_count-1) + parent2 = random.randint(0,parent_count-1) + if parent1==parent2 : parent2 = (parent2+1) % parent_count + parent1, parent2 = self.population[parent1][1], self.population[parent2][1] + i1,i2 = 0, 0 + genes_order = [] + specimen = [ [0,0.,0.] for i in range(self.genes_count) ] + + self.incest_mutation_multiplyer = 1. + self.incest_mutation_count_multiplyer = 1. + + if self.species_distance2(parent1, parent2) <= .01/self.genes_count : + # OMG it's a incest :O!!! + # Damn you bastards! + self.inc +=1 + self.incest_mutation_multiplyer = 2. + self.incest_mutation_count_multiplyer = 2. + else : + if random.random()<.01 : print_(self.species_distance2(parent1, parent2)) + start_gene = random.randint(0,self.genes_count) + end_gene = (max(1,random.randint(0,self.genes_count),int(self.genes_count/4))+start_gene) % self.genes_count + if end_gene0: + end = p[keys[-1]][-1][1] + dist = None + for i in range(len(k)): + start = p[k[i]][0][1] + dist = max( ( -( ( end[0]-start[0])**2+(end[1]-start[1])**2 ) ,i) , dist ) + keys += [k[dist[1]]] + del k[dist[1]] + for k in keys: + subpath = p[k] + c += [ [ [subpath[0][1][0],subpath[0][1][1]] , 'move', 0, 0] ] + for i in range(1,len(subpath)): + sp1 = [ [subpath[i-1][j][0], subpath[i-1][j][1]] for j in range(3)] + sp2 = [ [subpath[i ][j][0], subpath[i ][j][1]] for j in range(3)] + c += biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# l1 = biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# print_((-f(w[k][i-1]),-f(w[k][i]), [i1[5] for i1 in l1]) ) + c += [ [ [subpath[-1][1][0],subpath[-1][1][1]] ,'end',0,0] ] + print_("Curve: " + str(c)) + return c + + + def draw_curve(self, curve, layer, group=None, style=styles["biarc_style"]): + + self.get_defs() + # Add marker to defs if it doesnot exists + if "DrawCurveMarker" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker","orient":"auto","refX":"-8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m -6.55552,-2.41063 0,0 L -13.11104,0 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + if "DrawCurveMarker_r" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker_r","orient":"auto","refX":"8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m 6.55552,-2.41063 0,0 L 13.11104,0 c -1.0473,-1.42323 -1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + for i in [0,1]: + style['biarc%s_r'%i] = simplestyle.parseStyle(style['biarc%s'%i]) + style['biarc%s_r'%i]["marker-start"] = "url(#DrawCurveMarker_r)" + del(style['biarc%s_r'%i]["marker-end"]) + style['biarc%s_r'%i] = simplestyle.formatStyle(style['biarc%s_r'%i]) + + if group==None: + group = inkex.etree.SubElement( self.layers[min(1,len(self.layers)-1)], inkex.addNS('g','svg'), {"gcodetools": "Preview group"} ) + s, arcn = '', 0 + + + a,b,c = [0.,0.], [1.,0.], [0.,1.] + k = (b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]) + a,b,c = self.transform(a, layer, True), self.transform(b, layer, True), self.transform(c, layer, True) + if ((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))*k > 0 : reverse_angle = 1 + else : reverse_angle = -1 + for sk in curve: + si = sk[:] + si[0], si[2] = self.transform(si[0], layer, True), (self.transform(si[2], layer, True) if type(si[2])==type([]) and len(si[2])==2 else si[2]) + + if s!='': + if s[1] == 'line': + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': style['line'], + 'd':'M %s,%s L %s,%s' % (s[0][0], s[0][1], si[0][0], si[0][1]), + "gcodetools": "Preview", + } + ) + elif s[1] == 'arc': + arcn += 1 + sp = s[0] + c = s[2] + s[3] = s[3]*reverse_angle + + a = ( (P(si[0])-P(c)).angle() - (P(s[0])-P(c)).angle() )%math.pi2 #s[3] + if s[3]*a<0: + if a>0: a = a-math.pi2 + else: a = math.pi2+a + r = math.sqrt( (sp[0]-c[0])**2 + (sp[1]-c[1])**2 ) + a_st = ( math.atan2(sp[0]-c[0],- (sp[1]-c[1])) - math.pi/2 ) % (math.pi*2) + st = style['biarc%s' % (arcn%2)][:] + if a>0: + a_end = a_st+a + st = style['biarc%s'%(arcn%2)] + else: + a_end = a_st*1 + a_st = a_st+a + st = style['biarc%s_r'%(arcn%2)] + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': st, + inkex.addNS('cx','sodipodi'): str(c[0]), + inkex.addNS('cy','sodipodi'): str(c[1]), + inkex.addNS('rx','sodipodi'): str(r), + inkex.addNS('ry','sodipodi'): str(r), + inkex.addNS('start','sodipodi'): str(a_st), + inkex.addNS('end','sodipodi'): str(a_end), + inkex.addNS('open','sodipodi'): 'true', + inkex.addNS('type','sodipodi'): 'arc', + "gcodetools": "Preview", + }) + s = si + + + def check_dir(self): + if self.options.directory[-1] not in ["/","\\"]: + if "\\" in self.options.directory : + self.options.directory += "\\" + else : + self.options.directory += "/" + print_("Checking direcrory: '%s'"%self.options.directory) + if (os.path.isdir(self.options.directory)): + if (os.path.isfile(self.options.directory+'header')): + f = open(self.options.directory+'header', 'r') + self.header = f.read() + f.close() + else: + self.header = defaults['header'] + if (os.path.isfile(self.options.directory+'footer')): + f = open(self.options.directory+'footer','r') + self.footer = f.read() + f.close() + else: + self.footer = defaults['footer'] + + if self.options.unit == "G21 (All units in mm)" : + self.header += "G21\n" + elif self.options.unit == "G20 (All units in inches)" : + self.header += "G20\n" + else: + self.error(_("Directory does not exist! Please specify existing directory at options tab!"),"error") + return False + + if self.options.add_numeric_suffix_to_filename : + dir_list = os.listdir(self.options.directory) + if "." in self.options.file : + r = re.match(r"^(.*)(\..*)$",self.options.file) + ext = r.group(2) + name = r.group(1) + else: + ext = "" + name = self.options.file + max_n = 0 + for s in dir_list : + r = re.match(r"^%s_0*(\d+)%s$"%(re.escape(name),re.escape(ext) ), s) + if r : + max_n = max(max_n,int(r.group(1))) + filename = name + "_" + ( "0"*(4-len(str(max_n+1))) + str(max_n+1) ) + ext + self.options.file = filename + + print_("Testing writing rights on '%s'"%(self.options.directory+self.options.file)) + try: + f = open(self.options.directory+self.options.file, "w") + f.close() + except: + self.error(_("Can not write to specified file!\n%s"%(self.options.directory+self.options.file)),"error") + return False + return True + + + +################################################################################ +### +### Generate Gcode +### Generates Gcode on given curve. +### +### Crve defenitnion [start point, type = {'arc','line','move','end'}, arc center, arc angle, end point, [zstart, zend]] +### +################################################################################ + def generate_gcode(self, curve, layer, depth): + tool = self.tools + print_("Tool in g-code generator: " + str(tool)) + def c(c): + c = [c[i] if i.1: + r1, r2 = (P(s[0])-P(s[2])), (P(si[0])-P(s[2])) + if abs(r1.mag()-r2.mag()) < 0.001 : + g += ("G2" if s[3]<0 else "G3") + c(si[0]+[ None, (s[2][0]-s[0][0]),(s[2][1]-s[0][1]) ]) + "\n" + else: + r = (r1.mag()+r2.mag())/2 + g += ("G2" if s[3]<0 else "G3") + c(si[0]) + " R%f" % (r) + "\n" + lg = 'G02' + else: + g += "G1 " + c(si[0]) + " " + feed + "\n" + lg = 'G01' + if si[1] == 'end': + g += tool['gcode after path'] + "\n" + return g + + + def get_transforms(self,g): + root = self.document.getroot() + trans = [] + while (g!=root): + if 'transform' in g.keys(): + t = g.get('transform') + t = simpletransform.parseTransform(t) + trans = simpletransform.composeTransform(t,trans) if trans != [] else t + print_(trans) + g=g.getparent() + return trans + + + def apply_transforms(self,g,csp): + trans = self.get_transforms(g) + if trans != []: + simpletransform.applyTransformToPath(trans, csp) + return csp + + + def transform(self, source_point, layer, reverse=False): + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer not in self.transform_matrix: + for i in range(self.layers.index(layer),-1,-1): + if self.layers[i] in self.orientation_points : + break + + print_(str(self.layers)) + print_(str("I: " + str(i))) + print_("Transform: " + str(self.layers[i])) + if self.layers[i] not in self.orientation_points : + self.error(_("Orientation points for '%s' layer have not been found! Please add orientation points using Orientation tab!") % layer.get(inkex.addNS('label','inkscape')),"no_orientation_points") + elif self.layers[i] in self.transform_matrix : + self.transform_matrix[layer] = self.transform_matrix[self.layers[i]] + else : + orientation_layer = self.layers[i] + if len(self.orientation_points[orientation_layer])>1 : + self.error(_("There are more than one orientation point groups in '%s' layer") % orientation_layer.get(inkex.addNS('label','inkscape')),"more_than_one_orientation_point_groups") + points = self.orientation_points[orientation_layer][0] + if len(points)==2: + points += [ [ [(points[1][0][1]-points[0][0][1])+points[0][0][0], -(points[1][0][0]-points[0][0][0])+points[0][0][1]], [-(points[1][1][1]-points[0][1][1])+points[0][1][0], points[1][1][0]-points[0][1][0]+points[0][1][1]] ] ] + if len(points)==3: + print_("Layer '%s' Orientation points: " % orientation_layer.get(inkex.addNS('label','inkscape'))) + for point in points: + print_(point) + # Zcoordinates definition taken from Orientatnion point 1 and 2 + self.Zcoordinates[layer] = [max(points[0][1][2],points[1][1][2]), min(points[0][1][2],points[1][1][2])] + matrix = numpy.array([ + [points[0][0][0], points[0][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[0][0][0], points[0][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[0][0][0], points[0][0][1], 1], + [points[1][0][0], points[1][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[1][0][0], points[1][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[1][0][0], points[1][0][1], 1], + [points[2][0][0], points[2][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[2][0][0], points[2][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[2][0][0], points[2][0][1], 1] + ]) + + if numpy.linalg.det(matrix)!=0 : + m = numpy.linalg.solve(matrix, + numpy.array( + [[points[0][1][0]], [points[0][1][1]], [1], [points[1][1][0]], [points[1][1][1]], [1], [points[2][1][0]], [points[2][1][1]], [1]] + ) + ).tolist() + self.transform_matrix[layer] = [[m[j*3+i][0] for i in range(3)] for j in range(3)] + + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + + self.transform_matrix_reverse[layer] = numpy.linalg.inv(self.transform_matrix[layer]).tolist() + print_("\n Layer '%s' transformation matrixes:" % layer.get(inkex.addNS('label','inkscape')) ) + print_(self.transform_matrix) + print_(self.transform_matrix_reverse) + + ###self.Zauto_scale[layer] = math.sqrt( (self.transform_matrix[layer][0][0]**2 + self.transform_matrix[layer][1][1]**2)/2 ) + ### Zautoscale is absolete + self.Zauto_scale[layer] = 1 + print_("Z automatic scale = %s (computed according orientation points)" % self.Zauto_scale[layer]) + + x,y = source_point[0], source_point[1] + if not reverse : + t = self.transform_matrix[layer] + else : + t = self.transform_matrix_reverse[layer] + return [t[0][0]*x+t[0][1]*y+t[0][2], t[1][0]*x+t[1][1]*y+t[1][2]] + + + def transform_csp(self, csp_, layer, reverse = False): + csp = [ [ [csp_[i][j][0][:],csp_[i][j][1][:],csp_[i][j][2][:]] for j in range(len(csp_[i])) ] for i in range(len(csp_)) ] + for i in xrange(len(csp)): + for j in xrange(len(csp[i])): + for k in xrange(len(csp[i][j])): + csp[i][j][k] = self.transform(csp[i][j][k],layer, reverse) + return csp + + +################################################################################ +### Errors handling function, notes are just printed into Logfile, +### warnings are printed into log file and warning message is displayed but +### extension continues working, errors causes log and execution is halted +### Notes, warnings adn errors could be assigned to space or comma or dot +### sepparated strings (case is ignoreg). +################################################################################ + def error(self, s, type_= "Warning"): + notes = "Note " + warnings = """ + Warning tools_warning + bad_orientation_points_in_some_layers + more_than_one_orientation_point_groups + more_than_one_tool + orientation_have_not_been_defined + tool_have_not_been_defined + selection_does_not_contain_paths + selection_does_not_contain_paths_will_take_all + selection_is_empty_will_comupe_drawing + selection_contains_objects_that_are_not_paths + """ + errors = """ + Error + wrong_orientation_points + area_tools_diameter_error + no_tool_error + active_layer_already_has_tool + active_layer_already_has_orientation_points + """ + if type_.lower() in re.split("[\s\n,\.]+", errors.lower()) : + print_(s) + inkex.errormsg(s+"\n") + sys.exit() + elif type_.lower() in re.split("[\s\n,\.]+", warnings.lower()) : + print_(s) + if not self.options.suppress_all_messages : + inkex.errormsg(s+"\n") + elif type_.lower() in re.split("[\s\n,\.]+", notes.lower()) : + print_(s) + else : + print_(s) + inkex.errormsg(s) + sys.exit() + + +################################################################################ +### Get defs from svg +################################################################################ + def get_defs(self) : + self.defs = {} + def recursive(g) : + for i in g: + if i.tag == inkex.addNS("defs","svg") : + for j in i: + self.defs[j.get("id")] = i + if i.tag ==inkex.addNS("g",'svg') : + recursive(i) + recursive(self.document.getroot()) + + +################################################################################ +### +### Get Gcodetools info from the svg +### +################################################################################ + def get_info(self): + self.selected_paths = {} + self.paths = {} + self.orientation_points = {} + self.layers = [self.document.getroot()] + self.Zcoordinates = {} + self.transform_matrix = {} + self.transform_matrix_reverse = {} + self.Zauto_scale = {} + + def recursive_search(g, layer, selected=False): + items = g.getchildren() + items.reverse() + for i in items: + if selected: + self.selected[i.get("id")] = i + if i.tag == inkex.addNS("g",'svg') and i.get(inkex.addNS('groupmode','inkscape')) == 'layer': + self.layers += [i] + recursive_search(i,i) + elif i.get('gcodetools') == "Gcodetools orientation group" : + points = self.get_orientation_points(i) + if points != None : + self.orientation_points[layer] = self.orientation_points[layer]+[points[:]] if layer in self.orientation_points else [points[:]] + print_("Found orientation points in '%s' layer: %s" % (layer.get(inkex.addNS('label','inkscape')), points)) + else : + self.error(_("Warning! Found bad orientation points in '%s' layer. Resulting Gcode could be corrupt!") % layer.get(inkex.addNS('label','inkscape')), "bad_orientation_points_in_some_layers") + elif i.tag == inkex.addNS('path','svg'): + if "gcodetools" not in i.keys() : + self.paths[layer] = self.paths[layer] + [i] if layer in self.paths else [i] + if i.get("id") in self.selected : + self.selected_paths[layer] = self.selected_paths[layer] + [i] if layer in self.selected_paths else [i] + elif i.tag == inkex.addNS("g",'svg'): + recursive_search(i,layer, (i.get("id") in self.selected) ) + elif i.get("id") in self.selected : + self.error(_("This extension works with Paths and Dynamic Offsets and groups of them only! All other objects will be ignored!\nSolution 1: press Path->Object to path or Shift+Ctrl+C.\nSolution 2: Path->Dynamic offset or Ctrl+J.\nSolution 3: export all contours to PostScript level 2 (File->Save As->.ps) and File->Import this file."),"selection_contains_objects_that_are_not_paths") + + + recursive_search(self.document.getroot(),self.document.getroot()) + + + def get_orientation_points(self,g): + items = g.getchildren() + items.reverse() + p2, p3 = [], [] + p = None + for i in items: + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (2 points)": + p2 += [i] + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (3 points)": + p3 += [i] + if len(p2)==2 : p=p2 + elif len(p3)==3 : p=p3 + if p==None : return None + points = [] + for i in p : + point = [[],[]] + for node in i : + if node.get('gcodetools') == "Gcodetools orientation point arrow": + point[0] = self.apply_transforms(node,cubicsuperpath.parsePath(node.get("d")))[0][0][1] + if node.get('gcodetools') == "Gcodetools orientation point text": + r = re.match(r'(?i)\s*\(\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*\)\s*',node.text) + point[1] = [float(r.group(1)),float(r.group(2)),float(r.group(3))] + if point[0]!=[] and point[1]!=[]: points += [point] + if len(points)==len(p2)==2 or len(points)==len(p3)==3 : return points + else : return None + +################################################################################ +### +### dxfpoints +### +################################################################################ + def dxfpoints(self): + if self.selected_paths == {}: + self.error(_("Noting is selected. Please select something to convert to drill point (dxfpoint) or clear point sign."),"warning") + for layer in self.layers : + if layer in self.selected_paths : + for path in self.selected_paths[layer]: + if self.options.dxfpoints_action == 'replace': + path.set("dxfpoint","1") + r = re.match("^\s*.\s*(\S+)",path.get("d")) + if r!=None: + print_(("got path=",r.group(1))) + path.set("d","m %s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z" % r.group(1)) + path.set("style",styles["dxf_points"]) + + if self.options.dxfpoints_action == 'save': + path.set("dxfpoint","1") + + if self.options.dxfpoints_action == 'clear' and path.get("dxfpoint") == "1": + path.set("dxfpoint","0") + +################################################################################ +### +### Laser +### +################################################################################ + def laser(self) : + + def get_boundaries(points): + minx,miny,maxx,maxy=None,None,None,None + out=[[],[],[],[]] + for p in points: + if minx==p[0]: + out[0]+=[p] + if minx==None or p[0]maxx: + maxx=p[0] + out[2]=[p] + + if maxy==p[1]: + out[3]+=[p] + if maxy==None or p[1]>maxy: + maxy=p[1] + out[3]=[p] + return out + + + def remove_duplicates(points): + i=0 + out=[] + for p in points: + for j in xrange(i,len(points)): + if p==points[j]: points[j]=[None,None] + if p!=[None,None]: out+=[p] + i+=1 + return(out) + + + def get_way_len(points): + l=0 + for i in xrange(1,len(points)): + l+=math.sqrt((points[i][0]-points[i-1][0])**2 + (points[i][1]-points[i-1][1])**2) + return l + + + def sort_dxfpoints(points): + points=remove_duplicates(points) + + ways=[ + # l=0, d=1, r=2, u=3 + [3,0], # ul + [3,2], # ur + [1,0], # dl + [1,2], # dr + [0,3], # lu + [0,1], # ld + [2,3], # ru + [2,1], # rd + ] + + minimal_way=[] + minimal_len=None + minimal_way_type=None + for w in ways: + tpoints=points[:] + cw=[] + for j in xrange(0,len(points)): + p=get_boundaries(get_boundaries(tpoints)[w[0]])[w[1]] + tpoints.remove(p[0]) + cw+=p + curlen = get_way_len(cw) + if minimal_len==None or curlen < minimal_len: + minimal_len=curlen + minimal_way=cw + minimal_way_type=w + + return minimal_way + + if self.selected_paths == {} : + paths=self.paths + self.error(_("No paths are selected! Trying to work on all available paths."),"warning") + else : + paths = self.selected_paths + + self.check_dir() + gcode = "" + + biarc_group = inkex.etree.SubElement( self.selected_paths.keys()[0] if len(self.selected_paths.keys())>0 else self.layers[0], inkex.addNS('g','svg') ) + print_(("self.layers=",self.layers)) + print_(("paths=",paths)) + for layer in self.layers : + if layer in paths : + print_(("layer",layer)) + p = [] + dxfpoints = [] + for path in paths[layer] : + print_(str(layer)) + if "d" not in path.keys() : + self.error(_("Warning: One or more paths dont have 'd' parameter, try to Ungroup (Ctrl+Shift+G) and Object to Path (Ctrl+Shift+C)!"),"selection_contains_objects_that_are_not_paths") + continue + csp = cubicsuperpath.parsePath(path.get("d")) + csp = self.apply_transforms(path, csp) + if path.get("dxfpoint") == "1": + tmp_curve=self.transform_csp(csp, layer) + x=tmp_curve[0][0][0][0] + y=tmp_curve[0][0][0][1] + print_("got dxfpoint (scaled) at (%f,%f)" % (x,y)) + dxfpoints += [[x,y]] + else: + p += csp + dxfpoints=sort_dxfpoints(dxfpoints) + curve = self.parse_curve(p, layer) + self.draw_curve(curve, layer, biarc_group) + gcode += self.generate_gcode(curve, layer, 0) + + self.export_gcode(gcode) + +################################################################################ +### +### Orientation +### +################################################################################ + def orientation(self, layer=None) : + print_("entering orientations") + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer in self.orientation_points: + self.error(_("Active layer already has orientation points! Remove them or select another layer!"),"active_layer_already_has_orientation_points") + + orientation_group = inkex.etree.SubElement(layer, inkex.addNS('g','svg'), {"gcodetools":"Gcodetools orientation group"}) + + # translate == ['0', '-917.7043'] + if layer.get("transform") != None : + translate = layer.get("transform").replace("translate(", "").replace(")", "").split(",") + else : + translate = [0,0] + + # doc height in pixels (38 mm == 143.62204724px) + doc_height = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + + if self.document.getroot().get('height') == "100%" : + doc_height = 1052.3622047 + print_("Overruding height from 100 percents to %s" % doc_height) + + print_("Document height: " + str(doc_height)); + + if self.options.unit == "G21 (All units in mm)" : + points = [[0.,0.,0.],[100.,0.,0.],[0.,100.,0.]] + orientation_scale = 1 + print_("orientation_scale < 0 ===> switching to mm units=%0.10f"%orientation_scale ) + elif self.options.unit == "G20 (All units in inches)" : + points = [[0.,0.,0.],[5.,0.,0.],[0.,5.,0.]] + orientation_scale = 90 + print_("orientation_scale < 0 ===> switching to inches units=%0.10f"%orientation_scale ) + + points = points[:2] + + print_(("using orientation scale",orientation_scale,"i=",points)) + for i in points : + # X == Correct! + # si == x,y coordinate in px + # si have correct coordinates + # if layer have any tranform it will be in translate so lets add that + si = [i[0]*orientation_scale, (i[1]*orientation_scale)+float(translate[1])] + g = inkex.etree.SubElement(orientation_group, inkex.addNS('g','svg'), {'gcodetools': "Gcodetools orientation point (2 points)"}) + inkex.etree.SubElement( g, inkex.addNS('path','svg'), + { + 'style': "stroke:none;fill:#000000;", + 'd':'m %s,%s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z z' % (si[0], -si[1]+doc_height), + 'gcodetools': "Gcodetools orientation point arrow" + }) + t = inkex.etree.SubElement( g, inkex.addNS('text','svg'), + { + 'style': "font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;", + inkex.addNS("space","xml"):"preserve", + 'x': str(si[0]+10), + 'y': str(-si[1]-10+doc_height), + 'gcodetools': "Gcodetools orientation point text" + }) + t.text = "(%s; %s; %s)" % (i[0],i[1],i[2]) + + +################################################################################ +### +### Effect +### +### Main function of Gcodetools class +### +################################################################################ + def effect(self) : + global options + options = self.options + options.self = self + options.doc_root = self.document.getroot() + # define print_ function + global print_ + if self.options.log_create_log : + try : + if os.path.isfile(self.options.log_filename) : os.remove(self.options.log_filename) + f = open(self.options.log_filename,"a") + f.write("Gcodetools log file.\nStarted at %s.\n%s\n" % (time.strftime("%d.%m.%Y %H:%M:%S"),options.log_filename)) + f.write("%s tab is active.\n" % self.options.active_tab) + f.close() + except : + print_ = lambda *x : None + else : print_ = lambda *x : None + self.get_info() + if self.orientation_points == {} : + self.error(_("Orientation points have not been defined! A default set of orientation points has been automatically added."),"warning") + self.orientation( self.layers[min(0,len(self.layers)-1)] ) + self.get_info() + + self.tools = { + "name": "Laser Engraver", + "id": "Laser Engraver", + "penetration feed": self.options.laser_speed, + "feed": self.options.laser_speed, + "gcode before path": ("G4 P0 \n" + self.options.laser_command + " S" + str(int(self.options.laser_power)) + "\nG4 P" + self.options.power_delay), + "gcode after path": ("G4 P0 \n" + self.options.laser_off_command + " S0" + "\n" + "G1 F" + self.options.travel_speed), + } + + self.get_info() + self.laser() + +e = laser_gcode() +e.affect() diff --git a/fablabchemnitz_lasercut_box.inx b/fablabchemnitz_lasercut_box.inx new file mode 100644 index 0000000..8e9aba2 --- /dev/null +++ b/fablabchemnitz_lasercut_box.inx @@ -0,0 +1,111 @@ + + + <_name>Box Maker - Lasercut Box + fablabchemnitz.de.lasercut_box + fablabchemnitz_lasercut_box.py + inkex.py + + + <_param name="laserboxuse" type="description" xml:space="preserve">Dimensions can measure the external or internal size of the box. +The corner cubes can be omitted. +The document units should be set to mm instead of pixels (assuming you mean to really cut it out with a laser). + + + + + + + + + + + + + 50.0 + 30.0 + 15 + 3.0 + 11 + 11 + 6 + True + True + + + <_param name="laserboxuse2" type="description" xml:space="preserve">The kerf is the amount lost to the burning width of the laser. +Typically in the range 0.1 to 0.4 mm. Check with your laser vendor. This will depend on the material being cut and the speed of the laser. + +Setting the kerf to 0 will create a box that will use the least material. However the material lost to the laser will make for a loose fit and probably require glue. + +If the Kerf is greater than zero then you can have a calculated "Precise fit" or add dimples for a "Press fit". +A "Precise fit" will change the width of the tabs to allow for the material burned away by the laser and make a tight fit. +Dimples will add notches for a "Press fit" (see next tab) + +The pattern will be spread out, using more material, because a common laser cut line cannot be used. + + + + + 0.0 + False + + + <_param name="laserboxuse3" type="description" xml:space="preserve">Dimples are used so that a press-fit can be +made in deformable materials like wood. + +If Dimple is checked then no "precise fit" kerf adjustment is made to the tabs. Instead a small dimple is added to each notch to enable a press fit. + - the dimple size is equal to the kerf size. + +Dimples are useful for flexible materials like wood but are not good for rigid materials like perspex. + +Dimple style is half rounds or triangles. Triangles are cheaper to cut, Half rounds fit better. + + + + + + + + + False + + + + + + + <_param name="laserboxuse4" type="description" xml:space="preserve">Colours: +The color scheme used by Ponoko is used here: +Specifically: + - Blue (0,0,255) is the lasercut line color + - Orange is a non-printing annotation +The lines are all 0.1mm in width - as required by Ponoko. + +Annotations can be shown. They describe the kerf amount only and are shown on each piece. +This can be helpful if printing tests fits for different materials. + + + + + + + + + + + + True + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lasercut_box.py b/fablabchemnitz_lasercut_box.py new file mode 100644 index 0000000..c343f45 --- /dev/null +++ b/fablabchemnitz_lasercut_box.py @@ -0,0 +1,614 @@ +#!/usr/bin/env/python +''' +Copyright (C)2011 Mark Schafer + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# Build a tabbed box for lasercutting with tight fit, and minimal material use options. +# User defines: +# - internal or external dimensions, +# - number of tabs, +# - amount lost to laser (kerf), +# - include corner cubes or not, +# - dimples, or perfect fit (accounting for kerf). +# If zero kerf - will be perfectly packed for minimal laser cuts and material size. + +### Todo +# add option to pack multiple boxes (if zero kerf) - new tab maybe? +# add option for little circles at sharp corners for acrylic +# annotations: - add overlap value as markup - Ponoko annotation color +# choose colours from a dictionary + +### Versions +# 0.1 February 2011 - basic lasercut box with dimples etc +# 0.2 changes to unittouu for Inkscape 0.91 +# 0.3 Option to avoid half-sized tabs at corners. + +__version__ = "0.3" + +import inkex, simplestyle +#from math import * +from simplepath import * +import sys + +class LasercutBox(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-i", "--int_ext", + action="store", type="inkbool", + dest="int_ext", default=False, + help="Are the Dimensions for External or Internal sizing.") + self.OptionParser.add_option("-x", "--width", + action="store", type="float", + dest="width", default=50.0, + help="The Box Width - in the X dimension") + self.OptionParser.add_option("-y", "--height", + action="store", type="float", + dest="height", default=30.0, + help="The Box Height - in the Y dimension") + self.OptionParser.add_option("-z", "--depth", + action="store", type="float", + dest="depth", default=15.0, + help="The Box Depth - in the Z dimension") + self.OptionParser.add_option("-t", "--thickness", + action="store", type="float", + dest="thickness", default=3.0, + help="Material Thickness - critical to know") + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default="cm", + help="The unit of the box dimensions") + self.OptionParser.add_option("-c", "--corners", + action="store", type="inkbool", + dest="corners", default=True, + help="The corner cubes can be removed for a different look") + self.OptionParser.add_option("-H", "--halftabs", + action="store", type="inkbool", + dest="halftabs", default=True, + help="Start/End with half-sized tabs - Avoid with very small tabs") + self.OptionParser.add_option("-p", "--ntab_W", + action="store", type="int", + dest="ntab_W", default=11, + help="Number of tabs in Width") + self.OptionParser.add_option("-q", "--ntab_H", + action="store", type="int", + dest="ntab_H", default=11, + help="Number of tabs in Height") + self.OptionParser.add_option("-r", "--ntab_D", + action="store", type="int", + dest="ntab_D", default=6, + help="Number of tabs in Depth") + self.OptionParser.add_option("-k", "--kerf_size", + action="store", type="float", + dest="kerf_size", default=0.0, + help="Kerf size - amount lost to laser for this material. 0 = loose fit") + self.OptionParser.add_option("-d", "--dimples", + action="store", type="inkbool", + dest="dimples", default=False, + help="Add dimples for press fitting wooden materials") + self.OptionParser.add_option("-s", "--dstyle", + action="store", type="inkbool", + dest="dstyle", default=False, + help="Dimples can be triangles(cheaper) or half rounds(better)") + self.OptionParser.add_option("-g", "--linewidth", + action="store", type="inkbool", + dest="linewidth", default=False, + help="Use the kerf value as the drawn line width") + self.OptionParser.add_option("-j", "--annotation", + action="store", type="inkbool", + dest="annotation", default=True, + help="Show Kerf value as annotation") + #dummy for the doc tab - which is named + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="use", + help="The selected UI-tab when OK was pressed") + #internal useful variables + self.stroke_width = 0.1 #default for visiblity + self.line_style = {'stroke': '#0000FF', # Ponoko blue + 'fill': 'none', + 'stroke-width': self.stroke_width, + 'stroke-linecap': 'butt', + 'stroke-linejoin': 'miter'} + + def annotation(self, x, y, text): + """ Draw text at this location + - change to path + - use annotation color """ + pass + + + def thickness_line(self, dimple, vert_horiz, pos_neg): + """ called to draw dimples (also draws simple lines if no dimple) + - pos_neg is 1, -1 for direction + - vert_horiz is v or h """ + if dimple and self.kerf > 0.0: # we need a dimple + # size is radius = kerf + # short line, half circle, short line + #[ 'C', [x1,y1, x2,y2, x,y] ] x1 is first handle, x2 is second + lines = [] + radius = self.kerf + if self.thick - 2 * radius < 0.2: # correct for large dimples(kerf) on small thicknesses + radius = (self.thick - 0.2) / 2 + short = 0.1 + else: + short = self.thick/2 - radius + if vert_horiz == 'v': # vertical line + # first short line + lines.append(['v', [0, pos_neg*short]]) + # half circle + if pos_neg == 1: # only the DH_sides need reversed tabs to interlock + if self.dimple_tri: + lines.append(['l', [radius, pos_neg*radius]]) + lines.append(['l', [-radius, pos_neg*radius]]) + else: + lines.append(['c', [radius, 0, radius, pos_neg*2*radius, 0, pos_neg*2*radius]]) + else: + if self.dimple_tri: + lines.append(['l', [-radius, pos_neg*radius]]) + lines.append(['l', [radius, pos_neg*radius]]) + else: + lines.append(['c', [-radius, 0, -radius, pos_neg*2*radius, 0, pos_neg*2*radius]]) + # last short line + lines.append(['v', [0, pos_neg*short]]) + else: # horizontal line + # first short line + lines.append(['h', [pos_neg*short, 0]]) + # half circle + if self.dimple_tri: + lines.append(['l', [pos_neg*radius, radius]]) + lines.append(['l', [pos_neg*radius, -radius]]) + else: + lines.append(['c', [0, radius, pos_neg*2*radius, radius, pos_neg*2*radius, 0]]) + # last short line + lines.append(['h', [pos_neg*short, 0]]) + return lines + + # No dimple - so much easier + else: # return a straight v or h line same as thickness + if vert_horiz == 'v': + return [ ['v', [0, pos_neg*self.thick]] ] + else: + return [ ['h', [pos_neg*self.thick, 0]] ] + + + def draw_WH_lid(self, startx, starty, masktop=False): + """ Return an SVG path for the top or bottom of box + - the Width * Height dimension """ + line_path = [] + line_path.append(['M', [startx, starty]]) + # top row of tabs + if masktop and self.kerf ==0.0: # don't draw top for packing with no extra cuts + line_path.append(['m', [self.boxW, 0]]) + else: + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [self.boxW/self.Wtabs/2 + self.pf, 0]]) + line_path.append(['v', [0, self.thick]]) + line_path.append(['h', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + # right hand vertical drop + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, self.boxH/self.Htabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + # bottom row (in reverse) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + line_path.append(['v', [0, self.thick]]) + line_path.append(['h', [-self.boxW/self.Wtabs/2 - self.pf, 0]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + # up the left hand side + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, -self.boxH/self.Htabs/2 - self.pf]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + return line_path + + + def draw_WD_side(self, startx, starty, mask=False, corners=True): + """ Return an SVG path for the long side of box + - the Width * Depth dimension """ + # Draw side of the box (placed below the lid) + line_path = [] + # top row of tabs + if corners: + line_path.append(['M', [startx - self.thick, starty]]) + line_path.append(['v', [0, -self.thick]]) + line_path.append(['h', [self.thick, 0]]) + else: + line_path.append(['M', [startx, starty]]) + line_path.append(['v', [0, -self.thick]]) + # + if self.kerf > 0.0: # if fit perfectly - don't draw double line + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + line_path.append(['v', [0, self.thick]]) + line_path.append(['h', [self.boxW/self.Wtabs/2 - self.pf, 0]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + if corners: line_path.append(['h', [self.thick, 0]]) + else: # move to skipped drawn lines + if corners: + line_path.append(['m', [self.boxW + self.thick, 0]]) + else: + line_path.append(['m', [self.boxW, 0]]) + # + line_path.append(['v', [0, self.thick]]) + if not corners: line_path.append(['h', [self.thick, 0]]) + # RHS + if not self.ht: line_path.append(['l', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + for i in range(int(self.Dtabs)): + line_path.append(['v', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, self.boxD/self.Dtabs/2 - self.pf]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + # + if corners: + line_path.append(['v', [0, self.thick]]) + line_path.append(['h', [-self.thick, 0]]) + else: + line_path.append(['h', [-self.thick, 0]]) + line_path.append(['v', [0, self.thick]]) + # base + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [-self.boxW/self.Wtabs/2 + self.pf, 0]]) + line_path.append(['v', [0, self.thick]]) + line_path.append(['h', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + # + if corners: + line_path.append(['h', [-self.thick, 0]]) + line_path.append(['v', [0, -self.thick]]) + else: + line_path.append(['v', [0, -self.thick]]) + line_path.append(['h', [-self.thick, 0]]) + # LHS + if not self.ht: line_path.append(['l', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + for i in range(int(self.Dtabs)): + line_path.append(['v', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, -self.boxD/self.Dtabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + # + if not corners: line_path.append(['h', [self.thick, 0]]) + return line_path + + + def draw_HD_side(self, startx, starty, corners, mask=False): + """ Return an SVG path for the short side of box + - the Height * Depth dimension """ + line_path = [] + # top row of tabs + line_path.append(['M', [startx, starty]]) + if not(mask and corners and self.kerf == 0.0): + line_path.append(['h', [self.thick, 0]]) + else: + line_path.append(['m', [self.thick, 0]]) + if not self.ht: line_path.append(['l', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Dtabs)): + line_path.append(['h', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + line_path.append(['v', [0, -self.thick]]) + line_path.append(['h', [self.boxD/self.Dtabs/2 + self.pf, 0]]) + #line_path.append(['v', [0, thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', 1): + line_path.append(l) + line_path.append(['h', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + line_path.append(['h', [self.thick, 0]]) + # + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, self.boxH/self.Htabs/2 - self.pf]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + line_path.append(['h', [-self.thick, 0]]) + # + if not self.ht: line_path.append(['l', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Dtabs)): + line_path.append(['h', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + #line_path.append(['v', [0, thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', 1): # this is the weird +1 instead of -1 dimple + line_path.append(l) + line_path.append(['h', [-self.boxD/self.Dtabs/2 - self.pf, 0]]) + line_path.append(['v', [0, -self.thick]]) + line_path.append(['h', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + if not self.ht: line_path.append(['l', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + line_path.append(['h', [-self.thick, 0]]) + # + if self.kerf > 0.0: # if fit perfectly - don't draw double line + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick, 0]]) + line_path.append(['v', [0, -self.boxH/self.Htabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + return line_path + + ### + def thin(self, sel): + """ Parse the svg path - but don't use simplepath.parsePath because + it converts all to M, L and no locals + Instead - parse it ourselves """ + svgtokens = ['M','L','H','V','C','S','Q','T','A','Z'] + for node in sel.iterchildren(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + for t in svgtokens: + d = d.replace(t, ",%s"%t) + d = d.replace(t.lower(), ",%s"%t.lower()) + path = d.split(",") + # remove empty cells + if path.count("") > 0: path.remove("") + #sys.stderr.write("thin Path length=%d\n"% len(path)) + # parse it ourselves + prevx = path[0][-2] + prevy = path[0][-1] + prevtype = path[0][0] + count = 1 + result = [path[0]] + while count < len(path)-1: + line = path[count] + thistype = line[0] + thisx = line[1:].split()[0] + thisy = line[1:].split()[1] + if thistype == prevtype and thistype.lower() in ['h','v']: + # simplify + result.pop() # remove last one + result.append("%s%f %f" % (prevtype, float(thisx) + float(prevx), float(thisy)+float(prevy))) + else: + result.append(line) + count += 1 + prevx = thisx + prevy = thisy + prevtype = thistype + # add last element (unsimplified) + result.append(path[-1]) + # now inject back into d + newd = "" + for j in result: + newd += j + #sys.stderr.write("new length=%d\n" % len(result)) + node.set('d',newd) + + + def trim_svg_path(self, sel): + """ Force the svg we just made into its minimal config + to try to get rid of extra nodes """ + # h and v become single numbers + svgtokens = ['M','L','H','V','C','S','Q','T','A','Z'] + for node in sel.iterchildren(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + for t in svgtokens: + d = d.replace(t, ",%s"%t) + d = d.replace(t.lower(), ",%s"%t.lower()) + path = d.split(",") + # remove empty cells + if path.count("") > 0: path.remove("") + # + count = 1 + result = [path[0]] + while count < len(path): + line = path[count] + thistype = line[0] + thisx = line[1:].split()[0] + thisy = line[1:].split()[1] + if thistype.lower() =='h': + # simplify + result.append("%s%s" % (thistype, thisx)) + elif thistype.lower() =='v': + # simplify + result.append("%s%s" % (thistype, thisy)) + else: + result.append(line) + count += 1 + #result.append(path[-1]) + # now inject back into d + newd = "" + for j in result: + newd += j + node.set('d',newd) + + + + + ###-------------------------------------------- + ### The main function called by the inkscape UI + def effect(self): + # document dimensions (for centering) + docW = self.unittouu(self.document.getroot().get('width')) + docH = self.unittouu(self.document.getroot().get('height')) + # extract fields from UI + self.boxW = self.unittouu(str(self.options.width) + self.options.units) + self.boxH = self.unittouu(str(self.options.height) + self.options.units) + self.boxD = self.unittouu(str(self.options.depth) + self.options.units) + self.thick = self.unittouu(str(self.options.thickness) + self.options.units) + self.kerf = self.unittouu(str(self.options.kerf_size) + self.options.units) + if self.kerf < 0.01: self.kerf = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.Wtabs = self.options.ntab_W + self.Htabs = self.options.ntab_H + self.Dtabs = self.options.ntab_D + self.dimple = self.options.dimples + line_width = self.options.linewidth + corners = self.options.corners + self.dimple_tri = self.options.dstyle + self.annotation = self.options.annotation + self.ht = self.options.halftabs + if not self.ht: + self.Wtabs += 0.5 + self.Htabs += 0.5 + self.Dtabs += 0.5 + + # Correct for thickness in dimensions + if self.options.int_ext: # external so add thickness + self.boxW -= self.thick*2 + self.boxH -= self.thick*2 + self.boxD -= self.thick*2 + # adjust for laser kerf (precise measurement) + self.boxW += self.kerf + self.boxH += self.kerf + self.boxD += self.kerf + + # Precise fit or dimples (if kerf > 0.0) + if self.dimple == False: # and kerf > 0.0: + self.pf = self.kerf + else: + self.pf = 0.0 + + # set the stroke width and line style + sw = self.kerf + if self.kerf == 0.0: sw = self.stroke_width + ls = self.line_style + if line_width: # user wants drawn line width to be same as kerf size + ls['stroke-width'] = sw + line_style = simplestyle.formatStyle(ls) + + ###--------------------------- + ### create the inkscape object + box_id = self.uniqueId('box') + self.box = g = inkex.etree.SubElement(self.current_layer, 'g', {'id':box_id}) + + #Set local position for drawing (will transform to center of doc at end) + lower_pos = 0 + left_pos = 0 + # Draw Lid (using SVG path definitions) + line_path = self.draw_WH_lid(left_pos, lower_pos) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-lid', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the side of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxH + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxH + self.thick # at lower edge of lid + left_pos += 0 + # Draw side of the box (placed below the lid) + line_path = self.draw_WD_side(left_pos, lower_pos, corners=corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-longside1', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the bottom of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxD + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxD + self.thick # at lower edge + left_pos += 0 + # Draw base of the box + line_path = self.draw_WH_lid(left_pos, lower_pos, True) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-base', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the second side of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxH + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxH + self.thick # at lower edge of lid + left_pos += 0 + # Draw side of the box (placed below the lid) + line_path = self.draw_WD_side(left_pos, lower_pos, corners=corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-longside2', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw next on RHS of lid + if self.kerf > 0.0: + left_pos += self.boxW + (2*self.thick) # adequate space (could be a param for separation when kerf > 0) + else: + left_pos += self.boxW # right at right edge of lid + lower_pos = 0 + # Side of the box (placed next to the lid) + line_path = self.draw_HD_side(left_pos, lower_pos, corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-endface2', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw next on RHS of base + if self.kerf > 0.0: + lower_pos += self.boxH + self.boxD + 6*self.thick + else: + lower_pos += self.boxH +self.boxD + 2*self.thick + # Side of the box (placed next to the lid) + line_path = self.draw_HD_side(left_pos, lower_pos, corners, True) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-endface1', 'd':formatPath(line_path) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + + ###---------------------------------------- + # Transform entire drawing to center of doc + lower_pos += self.boxH*2 + self.boxD*2 + 2*self.thick + left_pos += self.boxH + 2*self.thick + g.set( 'transform', 'translate(%f,%f)' % ( (docW-left_pos)/2, (docH-lower_pos)/2)) + + # The implementation algorithm has added intermediate short lines and doubled up when using h,v with extra zeros + self.thin(g) # remove short straight lines + self.trim_svg_path(g) # remove extra zero points + +### +if __name__ == '__main__': + e = LasercutBox() + e.affect() diff --git a/fablabchemnitz_lasercut_jigsaw.inx b/fablabchemnitz_lasercut_jigsaw.inx new file mode 100644 index 0000000..37a5717 --- /dev/null +++ b/fablabchemnitz_lasercut_jigsaw.inx @@ -0,0 +1,85 @@ + + + <_name>Lasercut Jigsaw + fablabchemnitz.de.lasercut_jigsaw + fablabchemnitz_lasercut_jigsaw.py + inkex.py + + + <_param name="laserjigdim" type="description" xml:space="preserve">Dimensions: +Define the Jigsaw size and grid size. + + 100.0 + 80.0 + 5.0 + + + + + + + + false + 20.0 + 5.0 + + Right + Below + Separate + + 5 + 4 + + + <_param name="laserjignot" type="description" xml:space="preserve">Notches: +The interlocking pieces can be shaped here. +Also the random nature of the layout. + + 0.5 + 0.4 + False + 10 + True + 12345 + <_param name="laserjigspace" type="description" xml:space="preserve"> +Empty + + false + + + <_param name="laserjiguse" type="description" xml:space="preserve">Lasercut Jigsaw: + +Jigsaw lines are single for minimal laser cutting. + (The pieces are not discrete shapes.) +The outer edge can be a rectangle or have rounded corners. + +A Surrounding border can be added to frame the jigsaw. + +Notch size is related to the averaged Jigsaw piece size. + +Randomization creates irregularity for unique pieces. + +Adjust Notch size and Randomization to avoid overlapping lines: + - High values of randomization will cause overlapping lines + on small notches. + - Highly unbalanced grids (E.g. 9x2 with 0.5 notches) will + create overlapping lines. + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lasercut_jigsaw.py b/fablabchemnitz_lasercut_jigsaw.py new file mode 100644 index 0000000..40ffcee --- /dev/null +++ b/fablabchemnitz_lasercut_jigsaw.py @@ -0,0 +1,905 @@ +#! /usr/bin/env python +''' +Copyright (C) 2011 Mark Schafer + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# Build a Jigsaw puzzle for Lasercutting. +# User defines: +# - dimensions, +# - number of pieces in X and Y, +# - notch size, +# - random amount of perturbation for uniqueness, +# - border and rounding for border and inner corners +# - random or random seed for repeats + +### 0.1 make basic jigsaw for lasercut - March 2011 +### 0.2 add random seed so repeatable, add pieces for manual booleans - May 2011 +### 0.3 add some no-knob edges - June 2019 + +### Todo +# add option to cut pieces: +# - taking two rows(cols) at a time - reverse the second one and concat on end - add z to close +# - taking a row and a col - do intersect = piece. + +__version__ = "0.3" + +import inkex, simplestyle, simpletransform, cubicsuperpath +from simplepath import * +import sys, math, random, copy + +def randomize(x_y, radius, norm=True, absolute=False): + """ return x,y moved by a random amount inside a radius. + use uniform distribution unless + - norm = True - then use a normal distribution + If absolute is true - ensure random is only added to x,y """ + # if norm: + # r = abs(random.normalvariate(0.0,0.5*radius)) + # else: + # r = random.uniform(0.0,radius) + x, y = x_y + a = random.uniform(0.0,2*math.pi) + x += math.cos(a)*radius + y += math.sin(a)*radius + if absolute: + x = abs(x) + y = abs(y) + return [x, y] + + +def add_rounded_rectangle(startx, starty, radius, width, height, style, name, parent, mask=False): + line_path = [['M', [startx, starty+radius]]] + if radius > 0.0: # rounded corners + line_path.append(['c', [0, -radius/2, radius/2, -radius, radius, -radius]]) + if mask == "Below": + line_path.append(['m', [width-2*radius, 0,]]) + else: + line_path.append(['c', [radius/2, 0, width-2*radius-radius/2, 0, width-2*radius,0 ]]) # top line + line_path.append(['c', [radius/2, 0, radius, radius/2, radius, radius]]) + line_path.append(['c', [0, radius/2, 0, height-2*radius-radius/2, 0, height-2*radius]]) # RHS line + line_path.append(['c', [0, radius/2, -radius/2, radius, -radius, radius]]) + line_path.append(['c', [-radius/2,0, -width+2*radius+radius/2,0, -width+2*radius,0]]) # bottom line + line_path.append(['c', [-radius/2, 0, -radius, -radius/2, -radius, -radius]]) + if mask == "Right": + line_path.append(['m', [0, height]]) + else: + line_path.append(['c', [0, -radius/2, 0, -height+2*radius+radius/2, 0, -height+2*radius]]) # LHS line + else: # square corners + if mask == "Below": + line_path.append(['m', [width, 0]]) + line_path.append(['l', [0, height, -width, 0, 0, -height]]) + elif mask == "Right": + line_path.append(['l', [width, 0, 0, height, -width, 0,]]) + else: # separate + line_path.append(['l', [width, 0, 0, height, -width, 0, 0, -height]]) + # + #sys.stderr.write("%s\n"% line_path) + attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):name, + 'd':formatPath(line_path)} + #sys.stderr.write("%s\n"% attribs) + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), attribs ) + + + +###---------------------- +### all for intersection from http://www.kevlindev.com/gui/index.htm +"""polynomial constructor + Polynomial.prototype.init = function(coefs) { + this.coefs = new Array(); + + for ( var i = coefs.length - 1; i >= 0; i-- ) + this.coefs.push( coefs[i] ); + + this._variable = "t"; + this._s = 0; """ + +def get_derivative(polynomial): + """ Polynomial.prototype.getDerivative = function() { + var derivative = new Polynomial(); + + for ( var i = 1; i < this.coefs.length; i++ ) { + derivative.coefs.push(i*this.coefs[i]); + } + + return derivative; """ + deriv = [] + for i in range(len(polynomial)): + deriv.append(i* polynomial[i]) + return deriv + + +def getroots_in_interval(): + """ Polynomial.prototype.getRootsInInterval = function(min, max) { + var roots = new Array(); + var root; + + if ( this.getDegree() == 1 ) { + root = this.bisection(min, max); + if ( root != null ) roots.push(root); + } else { + // get roots of derivative + var deriv = this.getDerivative(); + var droots = deriv.getRootsInInterval(min, max); + + if ( droots.length > 0 ) { + // find root on [min, droots[0]] + root = this.bisection(min, droots[0]); + if ( root != null ) roots.push(root); + + // find root on [droots[i],droots[i+1]] for 0 <= i <= count-2 + for ( i = 0; i <= droots.length-2; i++ ) { + root = this.bisection(droots[i], droots[i+1]); + if ( root != null ) roots.push(root); + } + + // find root on [droots[count-1],xmax] + root = this.bisection(droots[droots.length-1], max); + if ( root != null ) roots.push(root); + } else { + // polynomial is monotone on [min,max], has at most one root + root = this.bisection(min, max); + if ( root != null ) roots.push(root); + } + } + + return roots; """ + pass + + +def bisection(polynomial, minimum, maximum): + """ Polynomial.prototype.bisection = function(min, max) { + var minValue = this.eval(min); + var maxValue = this.eval(max); + var result; + + if ( Math.abs(minValue) <= Polynomial.TOLERANCE ) + result = min; + else if ( Math.abs(maxValue) <= Polynomial.TOLERANCE ) + result = max; + else if ( minValue * maxValue <= 0 ) { + var tmp1 = Math.log(max - min); + var tmp2 = Math.LN10 * Polynomial.ACCURACY; + var iters = Math.ceil( (tmp1+tmp2) / Math.LN2 ); + + for ( var i = 0; i < iters; i++ ) { + result = 0.5 * (min + max); + var value = this.eval(result); + + if ( Math.abs(value) <= Polynomial.TOLERANCE ) { + break; + } + + if ( value * minValue < 0 ) { + max = result; + maxValue = value; + } else { + min = result; + minValue = value; + } + } + } + + return result; """ + pass + + +##def intersect_bezier(a1, a2, a3, a4, b1, b2, b3, b4): +## """ +## """ +## # Calculate the coefficients of cubic polynomial +## #a = a1.multiply(-1); +## a = [i*-1 for i in a1] +## #b = a2.multiply(3); +## b = [i*3 for i in a2] +## #c = a3.multiply(-3); +## c = [i*-3 for i in a3] +## #d = a.add(b.add(c.add(a4))); +## d = [a[i]+b[i]+c[i]+a4[i] for i in range(len(a))] +## #c13 = new Vector2D(d.x, d.y); +## c13 = copy.deepcopy(d) +## +## #a = a1.multiply(3); +## a = [i*3 for i in a1] +## #b = a2.multiply(-6); +## b = [i*-6 for i in a2] +## #c = a3.multiply(3); +## c = [i*3 for i in a3] +## #d = a.add(b.add(c)); +## d = [a[i]+b[i]+c[i] for i in range(len(a))] +## #c12 = new Vector2D(d.x, d.y); +## c12 = copy.deepcopy(d) +## +## #a = a1.multiply(-3); +## a = [i*-3 for i in a1] +## #b = a2.multiply(3); +## b = [i*3 for i in a2] +## #c = a.add(b); +## c = [a[i]+b[i] for i in range(len(a))] +## #c11 = new Vector2D(c.x, c.y); +## c11 = copy.deepcopy(c) +## #c10 = new Vector2D(a1.x, a1.y); +## c10 = copy.deepcopy(a1) +## +## #a = b1.multiply(-1); +## a = [i*-1 for i in b1] +## #b = b2.multiply(3); +## b = [i*3 for i in b2] +## #c = b3.multiply(-3); +## c = [i*-3 for i in b3] +## #d = a.add(b.add(c.add(b4))); +## d = [a[i]+b[i]+c[i]+b4[i] for i in range(len(a))] +## #c23 = new Vector2D(d.x, d.y); +## c23 = copy.deepcopy(d) +## +## #a = b1.multiply(3); +## a = [i*3 for i in b1] +## #b = b2.multiply(-6); +## b = [i*-6 for i in b2] +## #c = b3.multiply(3); +## c = [i*3 for i in b3] +## #d = a.add(b.add(c)); +## d = [b[i]+c[i] for i in range(len(b))] +## #c22 = new Vector2D(d.x, d.y); +## c22 = copy.deepcopy(d) +## +## #a = b1.multiply(-3); +## a = [i*-3 for i in b1] +## #b = b2.multiply(3); +## b = [i*3 for i in b2] +## #c = a.add(b); +## c = [a[i]+b[i] for i in range(len(a))] +## #c21 = new Vector2D(c.x, c.y); +## c21 = copy.deepcopy(c) +## #c20 = new Vector2D(b1.x, b1.y); +## c20 = copy.deepcopy(b) +## +## c10x2 = c10[0]*c10[0] +## c10x3 = c10[0]*c10[0]*c10[0] +## c10y2 = c10[1]*c10[1] +## c10y3 = c10.y*c10[1]*c10[1] +## c11x2 = c11[0]*c11[0] +## c11x3 = c11[0]*c11[0]*c11[0] +## c11y2 = c11[1]*c11[1] +## c11y3 = c11[1]*c11[1]*c11[1] +## c12x2 = c12[0]*c12[0] +## c12x3 = c12[0]*c12[0]*c12[0] +## c12y2 = c12[1]*c12.[1] +## c12y3 = c12[1]*c12[1]*c12[1] +## c13x2 = c13[0]*c13[0] +## c13x3 = c13[0]*c13[0]*c13[0] +## c13y2 = c13[1]*c13[1] +## c13y3 = c13[1]*c13[1]*c13[1] +## c20x2 = c20[0]*c20[0] +## c20x3 = c20[0]*c20[0]*c20[0] +## c20y2 = c20[1]*c20[1] +## c20y3 = c20[1]*c20[1]*c20[1] +## c21x2 = c21[0]*c21[0] +## c21x3 = c21[0]*c21[0]*c21[0] +## c21y2 = c21[1]*c21[1] +## c22x2 = c22[0]*c22[0] +## c22x3 = c22[0]*c22[0]*c22[0] +## c22y2 = c22[1]*c22[1] +## c23x2 = c23[0]*c23[0] +## c23x3 = c23[0]*c23[0]*c23[0] +## c23y2 = c23[1]*c23[1] +## c23y3 = c23[1]*c23[1]*c23[1] +## # create degree 9 (10 coef) polynomial +## poly = [-c13x3*c23y3 + c13y3*c23x3 - 3*c13.x*c13y2*c23x2*c23.y + 3*c13x2*c13.y*c23.x*c23y2, +## -6*c13.x*c22.x*c13y2*c23.x*c23.y + 6*c13x2*c13.y*c22.y*c23.x*c23.y + 3*c22.x*c13y3*c23x2 - +## 3*c13x3*c22.y*c23y2 - 3*c13.x*c13y2*c22.y*c23x2 + 3*c13x2*c22.x*c13.y*c23y2, +## -6*c21.x*c13.x*c13y2*c23.x*c23.y - 6*c13.x*c22.x*c13y2*c22.y*c23.x + 6*c13x2*c22.x*c13.y*c22.y*c23.y + +## 3*c21.x*c13y3*c23x2 + 3*c22x2*c13y3*c23.x + 3*c21.x*c13x2*c13.y*c23y2 - 3*c13.x*c21.y*c13y2*c23x2 - +## 3*c13.x*c22x2*c13y2*c23.y + c13x2*c13.y*c23.x*(6*c21.y*c23.y + 3*c22y2) + c13x3*(-c21.y*c23y2 - +## 2*c22y2*c23.y - c23.y*(2*c21.y*c23.y + c22y2)), +## c11.x*c12.y*c13.x*c13.y*c23.x*c23.y - c11.y*c12.x*c13.x*c13.y*c23.x*c23.y + 6*c21.x*c22.x*c13y3*c23.x + +## 3*c11.x*c12.x*c13.x*c13.y*c23y2 + 6*c10.x*c13.x*c13y2*c23.x*c23.y - 3*c11.x*c12.x*c13y2*c23.x*c23.y - +## 3*c11.y*c12.y*c13.x*c13.y*c23x2 - 6*c10.y*c13x2*c13.y*c23.x*c23.y - 6*c20.x*c13.x*c13y2*c23.x*c23.y + +## 3*c11.y*c12.y*c13x2*c23.x*c23.y - 2*c12.x*c12y2*c13.x*c23.x*c23.y - 6*c21.x*c13.x*c22.x*c13y2*c23.y - +## 6*c21.x*c13.x*c13y2*c22.y*c23.x - 6*c13.x*c21.y*c22.x*c13y2*c23.x + 6*c21.x*c13x2*c13.y*c22.y*c23.y + +## 2*c12x2*c12.y*c13.y*c23.x*c23.y + c22x3*c13y3 - 3*c10.x*c13y3*c23x2 + 3*c10.y*c13x3*c23y2 + +## 3*c20.x*c13y3*c23x2 + c12y3*c13.x*c23x2 - c12x3*c13.y*c23y2 - 3*c10.x*c13x2*c13.y*c23y2 + +## 3*c10.y*c13.x*c13y2*c23x2 - 2*c11.x*c12.y*c13x2*c23y2 + c11.x*c12.y*c13y2*c23x2 - c11.y*c12.x*c13x2*c23y2 + +## 2*c11.y*c12.x*c13y2*c23x2 + 3*c20.x*c13x2*c13.y*c23y2 - c12.x*c12y2*c13.y*c23x2 - +## 3*c20.y*c13.x*c13y2*c23x2 + c12x2*c12.y*c13.x*c23y2 - 3*c13.x*c22x2*c13y2*c22.y + +## c13x2*c13.y*c23.x*(6*c20.y*c23.y + 6*c21.y*c22.y) + c13x2*c22.x*c13.y*(6*c21.y*c23.y + 3*c22y2) + +## c13x3*(-2*c21.y*c22.y*c23.y - c20.y*c23y2 - c22.y*(2*c21.y*c23.y + c22y2) - c23.y*(2*c20.y*c23.y + 2*c21.y*c22.y)), +## 6*c11.x*c12.x*c13.x*c13.y*c22.y*c23.y + c11.x*c12.y*c13.x*c22.x*c13.y*c23.y + c11.x*c12.y*c13.x*c13.y*c22.y*c23.x - +## c11.y*c12.x*c13.x*c22.x*c13.y*c23.y - c11.y*c12.x*c13.x*c13.y*c22.y*c23.x - 6*c11.y*c12.y*c13.x*c22.x*c13.y*c23.x - +## 6*c10.x*c22.x*c13y3*c23.x + 6*c20.x*c22.x*c13y3*c23.x + 6*c10.y*c13x3*c22.y*c23.y + 2*c12y3*c13.x*c22.x*c23.x - +## 2*c12x3*c13.y*c22.y*c23.y + 6*c10.x*c13.x*c22.x*c13y2*c23.y + 6*c10.x*c13.x*c13y2*c22.y*c23.x + +## 6*c10.y*c13.x*c22.x*c13y2*c23.x - 3*c11.x*c12.x*c22.x*c13y2*c23.y - 3*c11.x*c12.x*c13y2*c22.y*c23.x + +## 2*c11.x*c12.y*c22.x*c13y2*c23.x + 4*c11.y*c12.x*c22.x*c13y2*c23.x - 6*c10.x*c13x2*c13.y*c22.y*c23.y - +## 6*c10.y*c13x2*c22.x*c13.y*c23.y - 6*c10.y*c13x2*c13.y*c22.y*c23.x - 4*c11.x*c12.y*c13x2*c22.y*c23.y - +## 6*c20.x*c13.x*c22.x*c13y2*c23.y - 6*c20.x*c13.x*c13y2*c22.y*c23.x - 2*c11.y*c12.x*c13x2*c22.y*c23.y + +## 3*c11.y*c12.y*c13x2*c22.x*c23.y + 3*c11.y*c12.y*c13x2*c22.y*c23.x - 2*c12.x*c12y2*c13.x*c22.x*c23.y - +## 2*c12.x*c12y2*c13.x*c22.y*c23.x - 2*c12.x*c12y2*c22.x*c13.y*c23.x - 6*c20.y*c13.x*c22.x*c13y2*c23.x - +## 6*c21.x*c13.x*c21.y*c13y2*c23.x - 6*c21.x*c13.x*c22.x*c13y2*c22.y + 6*c20.x*c13x2*c13.y*c22.y*c23.y + +## 2*c12x2*c12.y*c13.x*c22.y*c23.y + 2*c12x2*c12.y*c22.x*c13.y*c23.y + 2*c12x2*c12.y*c13.y*c22.y*c23.x + +## 3*c21.x*c22x2*c13y3 + 3*c21x2*c13y3*c23.x - 3*c13.x*c21.y*c22x2*c13y2 - 3*c21x2*c13.x*c13y2*c23.y + +## c13x2*c22.x*c13.y*(6*c20.y*c23.y + 6*c21.y*c22.y) + c13x2*c13.y*c23.x*(6*c20.y*c22.y + 3*c21y2) + +## c21.x*c13x2*c13.y*(6*c21.y*c23.y + 3*c22y2) + c13x3*(-2*c20.y*c22.y*c23.y - c23.y*(2*c20.y*c22.y + c21y2) - +## c21.y*(2*c21.y*c23.y + c22y2) - c22.y*(2*c20.y*c23.y + 2*c21.y*c22.y)), +## c11.x*c21.x*c12.y*c13.x*c13.y*c23.y + c11.x*c12.y*c13.x*c21.y*c13.y*c23.x + c11.x*c12.y*c13.x*c22.x*c13.y*c22.y - +## c11.y*c12.x*c21.x*c13.x*c13.y*c23.y - c11.y*c12.x*c13.x*c21.y*c13.y*c23.x - c11.y*c12.x*c13.x*c22.x*c13.y*c22.y - +## 6*c11.y*c21.x*c12.y*c13.x*c13.y*c23.x - 6*c10.x*c21.x*c13y3*c23.x + 6*c20.x*c21.x*c13y3*c23.x + +## 2*c21.x*c12y3*c13.x*c23.x + 6*c10.x*c21.x*c13.x*c13y2*c23.y + 6*c10.x*c13.x*c21.y*c13y2*c23.x + +## 6*c10.x*c13.x*c22.x*c13y2*c22.y + 6*c10.y*c21.x*c13.x*c13y2*c23.x - 3*c11.x*c12.x*c21.x*c13y2*c23.y - +## 3*c11.x*c12.x*c21.y*c13y2*c23.x - 3*c11.x*c12.x*c22.x*c13y2*c22.y + 2*c11.x*c21.x*c12.y*c13y2*c23.x + +## 4*c11.y*c12.x*c21.x*c13y2*c23.x - 6*c10.y*c21.x*c13x2*c13.y*c23.y - 6*c10.y*c13x2*c21.y*c13.y*c23.x - +## 6*c10.y*c13x2*c22.x*c13.y*c22.y - 6*c20.x*c21.x*c13.x*c13y2*c23.y - 6*c20.x*c13.x*c21.y*c13y2*c23.x - +## 6*c20.x*c13.x*c22.x*c13y2*c22.y + 3*c11.y*c21.x*c12.y*c13x2*c23.y - 3*c11.y*c12.y*c13.x*c22x2*c13.y + +## 3*c11.y*c12.y*c13x2*c21.y*c23.x + 3*c11.y*c12.y*c13x2*c22.x*c22.y - 2*c12.x*c21.x*c12y2*c13.x*c23.y - +## 2*c12.x*c21.x*c12y2*c13.y*c23.x - 2*c12.x*c12y2*c13.x*c21.y*c23.x - 2*c12.x*c12y2*c13.x*c22.x*c22.y - +## 6*c20.y*c21.x*c13.x*c13y2*c23.x - 6*c21.x*c13.x*c21.y*c22.x*c13y2 + 6*c20.y*c13x2*c21.y*c13.y*c23.x + +## 2*c12x2*c21.x*c12.y*c13.y*c23.y + 2*c12x2*c12.y*c21.y*c13.y*c23.x + 2*c12x2*c12.y*c22.x*c13.y*c22.y - +## 3*c10.x*c22x2*c13y3 + 3*c20.x*c22x2*c13y3 + 3*c21x2*c22.x*c13y3 + c12y3*c13.x*c22x2 + +## 3*c10.y*c13.x*c22x2*c13y2 + c11.x*c12.y*c22x2*c13y2 + 2*c11.y*c12.x*c22x2*c13y2 - +## c12.x*c12y2*c22x2*c13.y - 3*c20.y*c13.x*c22x2*c13y2 - 3*c21x2*c13.x*c13y2*c22.y + +## c12x2*c12.y*c13.x*(2*c21.y*c23.y + c22y2) + c11.x*c12.x*c13.x*c13.y*(6*c21.y*c23.y + 3*c22y2) + +## c21.x*c13x2*c13.y*(6*c20.y*c23.y + 6*c21.y*c22.y) + c12x3*c13.y*(-2*c21.y*c23.y - c22y2) + +## c10.y*c13x3*(6*c21.y*c23.y + 3*c22y2) + c11.y*c12.x*c13x2*(-2*c21.y*c23.y - c22y2) + +## c11.x*c12.y*c13x2*(-4*c21.y*c23.y - 2*c22y2) + c10.x*c13x2*c13.y*(-6*c21.y*c23.y - 3*c22y2) + +## c13x2*c22.x*c13.y*(6*c20.y*c22.y + 3*c21y2) + c20.x*c13x2*c13.y*(6*c21.y*c23.y + 3*c22y2) + +## c13x3*(-2*c20.y*c21.y*c23.y - c22.y*(2*c20.y*c22.y + c21y2) - c20.y*(2*c21.y*c23.y + c22y2) - +## c21.y*(2*c20.y*c23.y + 2*c21.y*c22.y)), +## -c10.x*c11.x*c12.y*c13.x*c13.y*c23.y + c10.x*c11.y*c12.x*c13.x*c13.y*c23.y + 6*c10.x*c11.y*c12.y*c13.x*c13.y*c23.x - +## 6*c10.y*c11.x*c12.x*c13.x*c13.y*c23.y - c10.y*c11.x*c12.y*c13.x*c13.y*c23.x + c10.y*c11.y*c12.x*c13.x*c13.y*c23.x + +## c11.x*c11.y*c12.x*c12.y*c13.x*c23.y - c11.x*c11.y*c12.x*c12.y*c13.y*c23.x + c11.x*c20.x*c12.y*c13.x*c13.y*c23.y + +## c11.x*c20.y*c12.y*c13.x*c13.y*c23.x + c11.x*c21.x*c12.y*c13.x*c13.y*c22.y + c11.x*c12.y*c13.x*c21.y*c22.x*c13.y - +## c20.x*c11.y*c12.x*c13.x*c13.y*c23.y - 6*c20.x*c11.y*c12.y*c13.x*c13.y*c23.x - c11.y*c12.x*c20.y*c13.x*c13.y*c23.x - +## c11.y*c12.x*c21.x*c13.x*c13.y*c22.y - c11.y*c12.x*c13.x*c21.y*c22.x*c13.y - 6*c11.y*c21.x*c12.y*c13.x*c22.x*c13.y - +## 6*c10.x*c20.x*c13y3*c23.x - 6*c10.x*c21.x*c22.x*c13y3 - 2*c10.x*c12y3*c13.x*c23.x + 6*c20.x*c21.x*c22.x*c13y3 + +## 2*c20.x*c12y3*c13.x*c23.x + 2*c21.x*c12y3*c13.x*c22.x + 2*c10.y*c12x3*c13.y*c23.y - 6*c10.x*c10.y*c13.x*c13y2*c23.x + +## 3*c10.x*c11.x*c12.x*c13y2*c23.y - 2*c10.x*c11.x*c12.y*c13y2*c23.x - 4*c10.x*c11.y*c12.x*c13y2*c23.x + +## 3*c10.y*c11.x*c12.x*c13y2*c23.x + 6*c10.x*c10.y*c13x2*c13.y*c23.y + 6*c10.x*c20.x*c13.x*c13y2*c23.y - +## 3*c10.x*c11.y*c12.y*c13x2*c23.y + 2*c10.x*c12.x*c12y2*c13.x*c23.y + 2*c10.x*c12.x*c12y2*c13.y*c23.x + +## 6*c10.x*c20.y*c13.x*c13y2*c23.x + 6*c10.x*c21.x*c13.x*c13y2*c22.y + 6*c10.x*c13.x*c21.y*c22.x*c13y2 + +## 4*c10.y*c11.x*c12.y*c13x2*c23.y + 6*c10.y*c20.x*c13.x*c13y2*c23.x + 2*c10.y*c11.y*c12.x*c13x2*c23.y - +## 3*c10.y*c11.y*c12.y*c13x2*c23.x + 2*c10.y*c12.x*c12y2*c13.x*c23.x + 6*c10.y*c21.x*c13.x*c22.x*c13y2 - +## 3*c11.x*c20.x*c12.x*c13y2*c23.y + 2*c11.x*c20.x*c12.y*c13y2*c23.x + c11.x*c11.y*c12y2*c13.x*c23.x - +## 3*c11.x*c12.x*c20.y*c13y2*c23.x - 3*c11.x*c12.x*c21.x*c13y2*c22.y - 3*c11.x*c12.x*c21.y*c22.x*c13y2 + +## 2*c11.x*c21.x*c12.y*c22.x*c13y2 + 4*c20.x*c11.y*c12.x*c13y2*c23.x + 4*c11.y*c12.x*c21.x*c22.x*c13y2 - +## 2*c10.x*c12x2*c12.y*c13.y*c23.y - 6*c10.y*c20.x*c13x2*c13.y*c23.y - 6*c10.y*c20.y*c13x2*c13.y*c23.x - +## 6*c10.y*c21.x*c13x2*c13.y*c22.y - 2*c10.y*c12x2*c12.y*c13.x*c23.y - 2*c10.y*c12x2*c12.y*c13.y*c23.x - +## 6*c10.y*c13x2*c21.y*c22.x*c13.y - c11.x*c11.y*c12x2*c13.y*c23.y - 2*c11.x*c11y2*c13.x*c13.y*c23.x + +## 3*c20.x*c11.y*c12.y*c13x2*c23.y - 2*c20.x*c12.x*c12y2*c13.x*c23.y - 2*c20.x*c12.x*c12y2*c13.y*c23.x - +## 6*c20.x*c20.y*c13.x*c13y2*c23.x - 6*c20.x*c21.x*c13.x*c13y2*c22.y - 6*c20.x*c13.x*c21.y*c22.x*c13y2 + +## 3*c11.y*c20.y*c12.y*c13x2*c23.x + 3*c11.y*c21.x*c12.y*c13x2*c22.y + 3*c11.y*c12.y*c13x2*c21.y*c22.x - +## 2*c12.x*c20.y*c12y2*c13.x*c23.x - 2*c12.x*c21.x*c12y2*c13.x*c22.y - 2*c12.x*c21.x*c12y2*c22.x*c13.y - +## 2*c12.x*c12y2*c13.x*c21.y*c22.x - 6*c20.y*c21.x*c13.x*c22.x*c13y2 - c11y2*c12.x*c12.y*c13.x*c23.x + +## 2*c20.x*c12x2*c12.y*c13.y*c23.y + 6*c20.y*c13x2*c21.y*c22.x*c13.y + 2*c11x2*c11.y*c13.x*c13.y*c23.y + +## c11x2*c12.x*c12.y*c13.y*c23.y + 2*c12x2*c20.y*c12.y*c13.y*c23.x + 2*c12x2*c21.x*c12.y*c13.y*c22.y + +## 2*c12x2*c12.y*c21.y*c22.x*c13.y + c21x3*c13y3 + 3*c10x2*c13y3*c23.x - 3*c10y2*c13x3*c23.y + +## 3*c20x2*c13y3*c23.x + c11y3*c13x2*c23.x - c11x3*c13y2*c23.y - c11.x*c11y2*c13x2*c23.y + +## c11x2*c11.y*c13y2*c23.x - 3*c10x2*c13.x*c13y2*c23.y + 3*c10y2*c13x2*c13.y*c23.x - c11x2*c12y2*c13.x*c23.y + +## c11y2*c12x2*c13.y*c23.x - 3*c21x2*c13.x*c21.y*c13y2 - 3*c20x2*c13.x*c13y2*c23.y + 3*c20y2*c13x2*c13.y*c23.x + +## c11.x*c12.x*c13.x*c13.y*(6*c20.y*c23.y + 6*c21.y*c22.y) + c12x3*c13.y*(-2*c20.y*c23.y - 2*c21.y*c22.y) + +## c10.y*c13x3*(6*c20.y*c23.y + 6*c21.y*c22.y) + c11.y*c12.x*c13x2*(-2*c20.y*c23.y - 2*c21.y*c22.y) + +## c12x2*c12.y*c13.x*(2*c20.y*c23.y + 2*c21.y*c22.y) + c11.x*c12.y*c13x2*(-4*c20.y*c23.y - 4*c21.y*c22.y) + +## c10.x*c13x2*c13.y*(-6*c20.y*c23.y - 6*c21.y*c22.y) + c20.x*c13x2*c13.y*(6*c20.y*c23.y + 6*c21.y*c22.y) + +## c21.x*c13x2*c13.y*(6*c20.y*c22.y + 3*c21y2) + c13x3*(-2*c20.y*c21.y*c22.y - c20y2*c23.y - +## c21.y*(2*c20.y*c22.y + c21y2) - c20.y*(2*c20.y*c23.y + 2*c21.y*c22.y)), +## -c10.x*c11.x*c12.y*c13.x*c13.y*c22.y + c10.x*c11.y*c12.x*c13.x*c13.y*c22.y + 6*c10.x*c11.y*c12.y*c13.x*c22.x*c13.y - +## 6*c10.y*c11.x*c12.x*c13.x*c13.y*c22.y - c10.y*c11.x*c12.y*c13.x*c22.x*c13.y + c10.y*c11.y*c12.x*c13.x*c22.x*c13.y + +## c11.x*c11.y*c12.x*c12.y*c13.x*c22.y - c11.x*c11.y*c12.x*c12.y*c22.x*c13.y + c11.x*c20.x*c12.y*c13.x*c13.y*c22.y + +## c11.x*c20.y*c12.y*c13.x*c22.x*c13.y + c11.x*c21.x*c12.y*c13.x*c21.y*c13.y - c20.x*c11.y*c12.x*c13.x*c13.y*c22.y - +## 6*c20.x*c11.y*c12.y*c13.x*c22.x*c13.y - c11.y*c12.x*c20.y*c13.x*c22.x*c13.y - c11.y*c12.x*c21.x*c13.x*c21.y*c13.y - +## 6*c10.x*c20.x*c22.x*c13y3 - 2*c10.x*c12y3*c13.x*c22.x + 2*c20.x*c12y3*c13.x*c22.x + 2*c10.y*c12x3*c13.y*c22.y - +## 6*c10.x*c10.y*c13.x*c22.x*c13y2 + 3*c10.x*c11.x*c12.x*c13y2*c22.y - 2*c10.x*c11.x*c12.y*c22.x*c13y2 - +## 4*c10.x*c11.y*c12.x*c22.x*c13y2 + 3*c10.y*c11.x*c12.x*c22.x*c13y2 + 6*c10.x*c10.y*c13x2*c13.y*c22.y + +## 6*c10.x*c20.x*c13.x*c13y2*c22.y - 3*c10.x*c11.y*c12.y*c13x2*c22.y + 2*c10.x*c12.x*c12y2*c13.x*c22.y + +## 2*c10.x*c12.x*c12y2*c22.x*c13.y + 6*c10.x*c20.y*c13.x*c22.x*c13y2 + 6*c10.x*c21.x*c13.x*c21.y*c13y2 + +## 4*c10.y*c11.x*c12.y*c13x2*c22.y + 6*c10.y*c20.x*c13.x*c22.x*c13y2 + 2*c10.y*c11.y*c12.x*c13x2*c22.y - +## 3*c10.y*c11.y*c12.y*c13x2*c22.x + 2*c10.y*c12.x*c12y2*c13.x*c22.x - 3*c11.x*c20.x*c12.x*c13y2*c22.y + +## 2*c11.x*c20.x*c12.y*c22.x*c13y2 + c11.x*c11.y*c12y2*c13.x*c22.x - 3*c11.x*c12.x*c20.y*c22.x*c13y2 - +## 3*c11.x*c12.x*c21.x*c21.y*c13y2 + 4*c20.x*c11.y*c12.x*c22.x*c13y2 - 2*c10.x*c12x2*c12.y*c13.y*c22.y - +## 6*c10.y*c20.x*c13x2*c13.y*c22.y - 6*c10.y*c20.y*c13x2*c22.x*c13.y - 6*c10.y*c21.x*c13x2*c21.y*c13.y - +## 2*c10.y*c12x2*c12.y*c13.x*c22.y - 2*c10.y*c12x2*c12.y*c22.x*c13.y - c11.x*c11.y*c12x2*c13.y*c22.y - +## 2*c11.x*c11y2*c13.x*c22.x*c13.y + 3*c20.x*c11.y*c12.y*c13x2*c22.y - 2*c20.x*c12.x*c12y2*c13.x*c22.y - +## 2*c20.x*c12.x*c12y2*c22.x*c13.y - 6*c20.x*c20.y*c13.x*c22.x*c13y2 - 6*c20.x*c21.x*c13.x*c21.y*c13y2 + +## 3*c11.y*c20.y*c12.y*c13x2*c22.x + 3*c11.y*c21.x*c12.y*c13x2*c21.y - 2*c12.x*c20.y*c12y2*c13.x*c22.x - +## 2*c12.x*c21.x*c12y2*c13.x*c21.y - c11y2*c12.x*c12.y*c13.x*c22.x + 2*c20.x*c12x2*c12.y*c13.y*c22.y - +## 3*c11.y*c21x2*c12.y*c13.x*c13.y + 6*c20.y*c21.x*c13x2*c21.y*c13.y + 2*c11x2*c11.y*c13.x*c13.y*c22.y + +## c11x2*c12.x*c12.y*c13.y*c22.y + 2*c12x2*c20.y*c12.y*c22.x*c13.y + 2*c12x2*c21.x*c12.y*c21.y*c13.y - +## 3*c10.x*c21x2*c13y3 + 3*c20.x*c21x2*c13y3 + 3*c10x2*c22.x*c13y3 - 3*c10y2*c13x3*c22.y + 3*c20x2*c22.x*c13y3 + +## c21x2*c12y3*c13.x + c11y3*c13x2*c22.x - c11x3*c13y2*c22.y + 3*c10.y*c21x2*c13.x*c13y2 - +## c11.x*c11y2*c13x2*c22.y + c11.x*c21x2*c12.y*c13y2 + 2*c11.y*c12.x*c21x2*c13y2 + c11x2*c11.y*c22.x*c13y2 - +## c12.x*c21x2*c12y2*c13.y - 3*c20.y*c21x2*c13.x*c13y2 - 3*c10x2*c13.x*c13y2*c22.y + 3*c10y2*c13x2*c22.x*c13.y - +## c11x2*c12y2*c13.x*c22.y + c11y2*c12x2*c22.x*c13.y - 3*c20x2*c13.x*c13y2*c22.y + 3*c20y2*c13x2*c22.x*c13.y + +## c12x2*c12.y*c13.x*(2*c20.y*c22.y + c21y2) + c11.x*c12.x*c13.x*c13.y*(6*c20.y*c22.y + 3*c21y2) + +## c12x3*c13.y*(-2*c20.y*c22.y - c21y2) + c10.y*c13x3*(6*c20.y*c22.y + 3*c21y2) + +## c11.y*c12.x*c13x2*(-2*c20.y*c22.y - c21y2) + c11.x*c12.y*c13x2*(-4*c20.y*c22.y - 2*c21y2) + +## c10.x*c13x2*c13.y*(-6*c20.y*c22.y - 3*c21y2) + c20.x*c13x2*c13.y*(6*c20.y*c22.y + 3*c21y2) + +## c13x3*(-2*c20.y*c21y2 - c20y2*c22.y - c20.y*(2*c20.y*c22.y + c21y2)), +## -c10.x*c11.x*c12.y*c13.x*c21.y*c13.y + c10.x*c11.y*c12.x*c13.x*c21.y*c13.y + 6*c10.x*c11.y*c21.x*c12.y*c13.x*c13.y - +## 6*c10.y*c11.x*c12.x*c13.x*c21.y*c13.y - c10.y*c11.x*c21.x*c12.y*c13.x*c13.y + c10.y*c11.y*c12.x*c21.x*c13.x*c13.y - +## c11.x*c11.y*c12.x*c21.x*c12.y*c13.y + c11.x*c11.y*c12.x*c12.y*c13.x*c21.y + c11.x*c20.x*c12.y*c13.x*c21.y*c13.y + +## 6*c11.x*c12.x*c20.y*c13.x*c21.y*c13.y + c11.x*c20.y*c21.x*c12.y*c13.x*c13.y - c20.x*c11.y*c12.x*c13.x*c21.y*c13.y - +## 6*c20.x*c11.y*c21.x*c12.y*c13.x*c13.y - c11.y*c12.x*c20.y*c21.x*c13.x*c13.y - 6*c10.x*c20.x*c21.x*c13y3 - +## 2*c10.x*c21.x*c12y3*c13.x + 6*c10.y*c20.y*c13x3*c21.y + 2*c20.x*c21.x*c12y3*c13.x + 2*c10.y*c12x3*c21.y*c13.y - +## 2*c12x3*c20.y*c21.y*c13.y - 6*c10.x*c10.y*c21.x*c13.x*c13y2 + 3*c10.x*c11.x*c12.x*c21.y*c13y2 - +## 2*c10.x*c11.x*c21.x*c12.y*c13y2 - 4*c10.x*c11.y*c12.x*c21.x*c13y2 + 3*c10.y*c11.x*c12.x*c21.x*c13y2 + +## 6*c10.x*c10.y*c13x2*c21.y*c13.y + 6*c10.x*c20.x*c13.x*c21.y*c13y2 - 3*c10.x*c11.y*c12.y*c13x2*c21.y + +## 2*c10.x*c12.x*c21.x*c12y2*c13.y + 2*c10.x*c12.x*c12y2*c13.x*c21.y + 6*c10.x*c20.y*c21.x*c13.x*c13y2 + +## 4*c10.y*c11.x*c12.y*c13x2*c21.y + 6*c10.y*c20.x*c21.x*c13.x*c13y2 + 2*c10.y*c11.y*c12.x*c13x2*c21.y - +## 3*c10.y*c11.y*c21.x*c12.y*c13x2 + 2*c10.y*c12.x*c21.x*c12y2*c13.x - 3*c11.x*c20.x*c12.x*c21.y*c13y2 + +## 2*c11.x*c20.x*c21.x*c12.y*c13y2 + c11.x*c11.y*c21.x*c12y2*c13.x - 3*c11.x*c12.x*c20.y*c21.x*c13y2 + +## 4*c20.x*c11.y*c12.x*c21.x*c13y2 - 6*c10.x*c20.y*c13x2*c21.y*c13.y - 2*c10.x*c12x2*c12.y*c21.y*c13.y - +## 6*c10.y*c20.x*c13x2*c21.y*c13.y - 6*c10.y*c20.y*c21.x*c13x2*c13.y - 2*c10.y*c12x2*c21.x*c12.y*c13.y - +## 2*c10.y*c12x2*c12.y*c13.x*c21.y - c11.x*c11.y*c12x2*c21.y*c13.y - 4*c11.x*c20.y*c12.y*c13x2*c21.y - +## 2*c11.x*c11y2*c21.x*c13.x*c13.y + 3*c20.x*c11.y*c12.y*c13x2*c21.y - 2*c20.x*c12.x*c21.x*c12y2*c13.y - +## 2*c20.x*c12.x*c12y2*c13.x*c21.y - 6*c20.x*c20.y*c21.x*c13.x*c13y2 - 2*c11.y*c12.x*c20.y*c13x2*c21.y + +## 3*c11.y*c20.y*c21.x*c12.y*c13x2 - 2*c12.x*c20.y*c21.x*c12y2*c13.x - c11y2*c12.x*c21.x*c12.y*c13.x + +## 6*c20.x*c20.y*c13x2*c21.y*c13.y + 2*c20.x*c12x2*c12.y*c21.y*c13.y + 2*c11x2*c11.y*c13.x*c21.y*c13.y + +## c11x2*c12.x*c12.y*c21.y*c13.y + 2*c12x2*c20.y*c21.x*c12.y*c13.y + 2*c12x2*c20.y*c12.y*c13.x*c21.y + +## 3*c10x2*c21.x*c13y3 - 3*c10y2*c13x3*c21.y + 3*c20x2*c21.x*c13y3 + c11y3*c21.x*c13x2 - c11x3*c21.y*c13y2 - +## 3*c20y2*c13x3*c21.y - c11.x*c11y2*c13x2*c21.y + c11x2*c11.y*c21.x*c13y2 - 3*c10x2*c13.x*c21.y*c13y2 + +## 3*c10y2*c21.x*c13x2*c13.y - c11x2*c12y2*c13.x*c21.y + c11y2*c12x2*c21.x*c13.y - 3*c20x2*c13.x*c21.y*c13y2 + +## 3*c20y2*c21.x*c13x2*c13.y, +## c10.x*c10.y*c11.x*c12.y*c13.x*c13.y - c10.x*c10.y*c11.y*c12.x*c13.x*c13.y + c10.x*c11.x*c11.y*c12.x*c12.y*c13.y - +## c10.y*c11.x*c11.y*c12.x*c12.y*c13.x - c10.x*c11.x*c20.y*c12.y*c13.x*c13.y + 6*c10.x*c20.x*c11.y*c12.y*c13.x*c13.y + +## c10.x*c11.y*c12.x*c20.y*c13.x*c13.y - c10.y*c11.x*c20.x*c12.y*c13.x*c13.y - 6*c10.y*c11.x*c12.x*c20.y*c13.x*c13.y + +## c10.y*c20.x*c11.y*c12.x*c13.x*c13.y - c11.x*c20.x*c11.y*c12.x*c12.y*c13.y + c11.x*c11.y*c12.x*c20.y*c12.y*c13.x + +## c11.x*c20.x*c20.y*c12.y*c13.x*c13.y - c20.x*c11.y*c12.x*c20.y*c13.x*c13.y - 2*c10.x*c20.x*c12y3*c13.x + +## 2*c10.y*c12x3*c20.y*c13.y - 3*c10.x*c10.y*c11.x*c12.x*c13y2 - 6*c10.x*c10.y*c20.x*c13.x*c13y2 + +## 3*c10.x*c10.y*c11.y*c12.y*c13x2 - 2*c10.x*c10.y*c12.x*c12y2*c13.x - 2*c10.x*c11.x*c20.x*c12.y*c13y2 - +## c10.x*c11.x*c11.y*c12y2*c13.x + 3*c10.x*c11.x*c12.x*c20.y*c13y2 - 4*c10.x*c20.x*c11.y*c12.x*c13y2 + +## 3*c10.y*c11.x*c20.x*c12.x*c13y2 + 6*c10.x*c10.y*c20.y*c13x2*c13.y + 2*c10.x*c10.y*c12x2*c12.y*c13.y + +## 2*c10.x*c11.x*c11y2*c13.x*c13.y + 2*c10.x*c20.x*c12.x*c12y2*c13.y + 6*c10.x*c20.x*c20.y*c13.x*c13y2 - +## 3*c10.x*c11.y*c20.y*c12.y*c13x2 + 2*c10.x*c12.x*c20.y*c12y2*c13.x + c10.x*c11y2*c12.x*c12.y*c13.x + +## c10.y*c11.x*c11.y*c12x2*c13.y + 4*c10.y*c11.x*c20.y*c12.y*c13x2 - 3*c10.y*c20.x*c11.y*c12.y*c13x2 + +## 2*c10.y*c20.x*c12.x*c12y2*c13.x + 2*c10.y*c11.y*c12.x*c20.y*c13x2 + c11.x*c20.x*c11.y*c12y2*c13.x - +## 3*c11.x*c20.x*c12.x*c20.y*c13y2 - 2*c10.x*c12x2*c20.y*c12.y*c13.y - 6*c10.y*c20.x*c20.y*c13x2*c13.y - +## 2*c10.y*c20.x*c12x2*c12.y*c13.y - 2*c10.y*c11x2*c11.y*c13.x*c13.y - c10.y*c11x2*c12.x*c12.y*c13.y - +## 2*c10.y*c12x2*c20.y*c12.y*c13.x - 2*c11.x*c20.x*c11y2*c13.x*c13.y - c11.x*c11.y*c12x2*c20.y*c13.y + +## 3*c20.x*c11.y*c20.y*c12.y*c13x2 - 2*c20.x*c12.x*c20.y*c12y2*c13.x - c20.x*c11y2*c12.x*c12.y*c13.x + +## 3*c10y2*c11.x*c12.x*c13.x*c13.y + 3*c11.x*c12.x*c20y2*c13.x*c13.y + 2*c20.x*c12x2*c20.y*c12.y*c13.y - +## 3*c10x2*c11.y*c12.y*c13.x*c13.y + 2*c11x2*c11.y*c20.y*c13.x*c13.y + c11x2*c12.x*c20.y*c12.y*c13.y - +## 3*c20x2*c11.y*c12.y*c13.x*c13.y - c10x3*c13y3 + c10y3*c13x3 + c20x3*c13y3 - c20y3*c13x3 - +## 3*c10.x*c20x2*c13y3 - c10.x*c11y3*c13x2 + 3*c10x2*c20.x*c13y3 + c10.y*c11x3*c13y2 + +## 3*c10.y*c20y2*c13x3 + c20.x*c11y3*c13x2 + c10x2*c12y3*c13.x - 3*c10y2*c20.y*c13x3 - c10y2*c12x3*c13.y + +## c20x2*c12y3*c13.x - c11x3*c20.y*c13y2 - c12x3*c20y2*c13.y - c10.x*c11x2*c11.y*c13y2 + +## c10.y*c11.x*c11y2*c13x2 - 3*c10.x*c10y2*c13x2*c13.y - c10.x*c11y2*c12x2*c13.y + c10.y*c11x2*c12y2*c13.x - +## c11.x*c11y2*c20.y*c13x2 + 3*c10x2*c10.y*c13.x*c13y2 + c10x2*c11.x*c12.y*c13y2 + +## 2*c10x2*c11.y*c12.x*c13y2 - 2*c10y2*c11.x*c12.y*c13x2 - c10y2*c11.y*c12.x*c13x2 + c11x2*c20.x*c11.y*c13y2 - +## 3*c10.x*c20y2*c13x2*c13.y + 3*c10.y*c20x2*c13.x*c13y2 + c11.x*c20x2*c12.y*c13y2 - 2*c11.x*c20y2*c12.y*c13x2 + +## c20.x*c11y2*c12x2*c13.y - c11.y*c12.x*c20y2*c13x2 - c10x2*c12.x*c12y2*c13.y - 3*c10x2*c20.y*c13.x*c13y2 + +## 3*c10y2*c20.x*c13x2*c13.y + c10y2*c12x2*c12.y*c13.x - c11x2*c20.y*c12y2*c13.x + 2*c20x2*c11.y*c12.x*c13y2 + +## 3*c20.x*c20y2*c13x2*c13.y - c20x2*c12.x*c12y2*c13.y - 3*c20x2*c20.y*c13.x*c13y2 + c12x2*c20y2*c12.y*c13.x +## ] +## roots = poly.getRootsInInterval(0,1); +## # +## for i in range(len(roots)): #( var i = 0; i < roots.length; i++ ) { +## s = roots[i] +## xRoots = [c13.x, +## c12.x, +## c11.x, +## c10.x - c20.x - s*c21.x - s*s*c22.x - s*s*s*c23.x +## ].getRoots() +## yRoots = [c13.y, +## c12.y, +## c11.y, +## c10.y - c20.y - s*c21.y - s*s*c22.y - s*s*s*c23.y +## ].getRoots() +## +## if ( len(xRoots) > 0 and len(yRoots) > 0 ): +## TOLERANCE = 1e-4; +## #label:checkRoots +## # +## for j in range(len(xRoots): #( var j = 0; j < xRoots.length; j++ ) { +## xRoot = xRoots[j] +## # +## if ( 0 <= xRoot and xRoot <= 1 ) { +## for k in range(len(yRoots)): #( var k = 0; k < yRoots.length; k++ ) { +## if ( math.abs( xRoot - yRoots[k] ) < TOLERANCE ): +## result.points.push( c23.multiply(s*s*s).add(c22.multiply(s*s).add(c21.multiply(s).add(c20)))) +## break #checkRoots; +## # +## if ( result.points.length > 0 ): result.status = "Intersection"; +## return result + + + + + + +### +class LasercutJigsaw(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-x", "--width", + action="store", type="float", + dest="width", default=50.0, + help="The Box Width - in the X dimension") + self.OptionParser.add_option("-y", "--height", + action="store", type="float", + dest="height", default=30.0, + help="The Box Height - in the Y dimension") + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default="cm", + help="The unit of the box dimensions") + self.OptionParser.add_option("-w", "--pieces_W", + action="store", type="int", + dest="pieces_W", default=11, + help="How many pieces across") + self.OptionParser.add_option("-z", "--pieces_H", + action="store", type="int", + dest="pieces_H", default=11, + help="How many pieces down") + self.OptionParser.add_option("-k", "--notch_percent", + action="store", type="float", + dest="notch_percent", default=0.0, + help="Notch relative size. 0 to 1. 0.15 is good") + self.OptionParser.add_option("-r", "--rand", + action="store", type="float", + dest="rand", default=0.1, + help="Amount to perturb the basic piece grid.") + self.OptionParser.add_option("-i", "--innerradius", + action="store", type="float", + dest="innerradius", default=5.0, + help="0 implies square corners") + self.OptionParser.add_option("-b", "--border", + action="store", type="inkbool", + dest="border", default=False, + help="Add Outer Surround") + self.OptionParser.add_option("-a", "--borderwidth", + action="store", type="float", + dest="borderwidth", default=10.0, + help="Size of external surrounding border.") + self.OptionParser.add_option("-o", "--outerradius", + action="store", type="float", + dest="outerradius", default=5.0, + help="0 implies square corners") + self.OptionParser.add_option("-p", "--pack", + action="store", type="string", + dest="pack", default="Below", + help="Where to place backing piece on page") + self.OptionParser.add_option("-g", "--use_seed", + action="store", type="inkbool", + dest="use_seed", default=False, + help="Use the kerf value as the drawn line width") + self.OptionParser.add_option("-s", "--seed", + action="store", type="int", + dest="seed", default=12345, + help="Random seed for repeatability") + self.OptionParser.add_option("-j", "--pieces", + action="store", type="inkbool", + dest="pieces", default=False, + help="Make extra pieces for manual boolean separation.") + self.OptionParser.add_option("-n", "--smooth_edges", + action="store", type="inkbool", + dest="smooth_edges", default=False, + help="Allow pieces with smooth edges.") + self.OptionParser.add_option("-f", "--noknob_frequency", + action="store", type="float", + dest="noknob_frequency", default=10, + help="Percentage of smooth-sided edges.") + # dummy for the doc tab - which is named + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", default="use", + help="The selected UI-tab when OK was pressed") + # internal useful variables + self.stroke_width = 0.1 # default for visiblity + self.line_style = {'stroke': '#0000FF', # Ponoko blue + 'fill': 'none', + 'stroke-width': self.stroke_width, + 'stroke-linecap': 'butt', + 'stroke-linejoin': 'miter'} + + + def add_jigsaw_horiz_line(self, startx, starty, stepx, steps, width, style, name, parent): + """ complex version All C smooth + - get ctrl pt offset and use on both sides of each node (negate for smooth)""" + line_path = [] + # starts with an M - then C with first point same as M = smooth (also last point still in C but doubled) + line_path.append(['M', [startx, starty]]) + clist = [startx, starty] # duplicate 1st point so its smooth + for i in range(1,steps+1): + flip = 1 + if random.uniform(0.0,1.0) < 0.5: + flip = -1 + do_smooth = False + if self.smooth_edges: + if random.uniform(0.0,100.0) < self.noknob_frequency: + do_smooth = True + if do_smooth: + pt1 = randomize((startx+i*stepx/2+stepx/2*(i-1), starty), self.random_radius/3, True) + rand1 = randomize((0, 0), self.random_radius/4, True, True) + # up to pt1 + ctrl1 = (-self.notch_step*1.5, self.notch_step*1.5) + clist.extend([pt1[0]+ctrl1[0]-rand1[0], pt1[1]-ctrl1[1]*flip+rand1[1]*flip]) + clist.extend(pt1) + # last ctrl point for next step + clist.extend([pt1[0]-ctrl1[0]+rand1[0], pt1[1]+ctrl1[1]*flip-rand1[1]*flip]) + else: + pt1 = randomize((startx-self.notch_step+i*stepx/2+stepx/2*(i-1), starty+self.notch_step/4*flip), self.random_radius/3, True) + pt2 = randomize((startx-self.notch_step+i*stepx/2+stepx/2*(i-1), starty-self.notch_step*flip), self.random_radius/3, True) + # pt3 is foor tip of the notch - required ? + pt4 = randomize((startx+self.notch_step+i*stepx/2+stepx/2*(i-1), starty-self.notch_step*flip), self.random_radius/3, True) #mirror of 2 + pt5 = randomize((startx+self.notch_step+i*stepx/2+stepx/2*(i-1), starty+self.notch_step/4*flip), self.random_radius/3, True) # mirror of pt1 + # Create random local value for x,y of handle - then reflect to enforce smoothness + rand1 = randomize((0, 0), self.random_radius/4, True, True) + rand2 = randomize((0, 0), self.random_radius/4, True, True) + rand4 = randomize((0, 0), self.random_radius/4, True, True) + rand5 = randomize((0, 0), self.random_radius/4, True, True) + # up to pt1 + #ctrl1_2 = (startx+i*stepx/2+(i-1)*stepx/2, starty-self.notch_step/3) + ctrl1 = (self.notch_step/1.2, -self.notch_step/3) + clist.extend([pt1[0]-ctrl1[0]-rand1[0], pt1[1]-ctrl1[1]*flip+rand1[1]*flip]) + clist.extend(pt1) + # up to pt2 + clist.extend([pt1[0]+ctrl1[0]+rand1[0], pt1[1]+ctrl1[1]*flip-rand1[1]*flip]) + ctrl2 = (0, -self.notch_step/1.2) + clist.extend([pt2[0]+ctrl2[0]-rand2[0], pt2[1]-ctrl2[1]*flip+rand2[1]*flip]) + clist.extend(pt2) + # up to pt4 + clist.extend([pt2[0]-ctrl2[0]+rand2[0], pt2[1]+ctrl2[1]*flip-rand2[1]*flip]) + ctrl4 = (0, self.notch_step/1.2) + clist.extend([pt4[0]+ctrl4[0]-rand4[0], pt4[1]-ctrl4[1]*flip+rand4[1]*flip]) + clist.extend(pt4) + # up to pt5 + clist.extend([pt4[0]-ctrl4[0]+rand4[0], pt4[1]+ctrl4[1]*flip-rand4[1]*flip]) + ctrl5 = (self.notch_step/1.2, self.notch_step/3) + clist.extend([pt5[0]-ctrl5[0]+rand5[0], pt5[1]-ctrl5[1]*flip-rand5[1]*flip]) + clist.extend(pt5) + # last ctrl point for next step + clist.extend([pt5[0]+ctrl5[0]-rand5[0], pt5[1]+ctrl5[1]*flip+rand5[1]*flip]) + # + clist.extend([width, starty, width, starty]) # doubled up at end for smooth curve + line_path.append(['C',clist]) + #sys.stderr.write("%s\n"% line_path) + line_style = simplestyle.formatStyle(style) + attribs = { 'style':line_style, 'id':name, 'd':formatPath(line_path) } + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), attribs ) + + def create_horiz_blocks(self, group, gridy, style): + path = lastpath = 0 + blocks = [] + count = 0 + for node in gridy.iterchildren(): + if node.tag == inkex.addNS('path','svg'): # which they ALL should because we just made them + path = cubicsuperpath.parsePath(node.get('d')) # turn it into a global C style SVG path + #sys.stderr.write("count: %d\n"% count) + if count == 0: # first one so use the top border + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx,lasty-self.inner_radius, lastx,1.5*self.inner_radius, lastx,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.inner_radius/2, self.width-self.inner_radius/2,0, self.width-self.inner_radius,0) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,0, 1.5*self.inner_radius,0, self.inner_radius, 0) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2, 0, 0,self.inner_radius/2, 0,self.inner_radius) + spath += 'z' + #sys.stderr.write("spath: %s\n"% spath) + # + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + else: # internal line - concat a reversed version with the last one + thispath = copy.deepcopy(path) + for i in range(len(thispath[0])): # reverse the internal C pairs + thispath[0][i].reverse() + thispath[0].reverse() # reverse the entire line + lastpath[0].extend(thispath[0]) # append + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':cubicsuperpath.formatPath(lastpath) } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + n.set('d', n.get('d')+'z') # close it + # + count += 1 + lastpath = path + # do the last row + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx,lasty+self.inner_radius, lastx,self.height-1.5*self.inner_radius, lastx,self.height-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.height-self.inner_radius/2, self.width-self.inner_radius/2,self.height, self.width-self.inner_radius,self.height) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,self.height, 1.5*self.inner_radius,self.height, self.inner_radius, self.height) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2, self.height, 0,self.height-self.inner_radius/2, 0,self.height-self.inner_radius) + spath += 'z' + # + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + # + return(blocks) + + + def create_vert_blocks(self, group, gridx, style): + path = lastpath = 0 + blocks = [] + count = 0 + for node in gridx.iterchildren(): + if node.tag == inkex.addNS('path','svg'): # which they ALL should because we just made them + path = cubicsuperpath.parsePath(node.get('d')) # turn it into a global C style SVG path + #sys.stderr.write("count: %d\n"% count) + if count == 0: # first one so use the right border + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx+self.inner_radius/2,lasty, self.width-1.5*self.inner_radius,lasty, self.width-self.inner_radius, lasty) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,lasty, self.width,self.height-self.inner_radius/2, self.width,self.height-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.height-1.5*self.inner_radius, self.width, 1.5*self.inner_radius, self.width,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.inner_radius/2, self.width-self.inner_radius/2,0, self.width-self.inner_radius,0) + spath += 'z' + #sys.stderr.write("spath: %s\n"% spath) + # + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + else: # internal line - concat a reversed version with the last one + thispath = copy.deepcopy(path) + for i in range(len(thispath[0])): # reverse the internal C pairs + thispath[0][i].reverse() + thispath[0].reverse() # reverse the entire line + lastpath[0].extend(thispath[0]) # append + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':cubicsuperpath.formatPath(lastpath) } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + n.set('d', n.get('d')+'z') # close it + # + count += 1 + lastpath = path + # do the last one (LHS) + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx-self.inner_radius,lasty, 1.5*self.inner_radius, lasty, self.inner_radius,lasty) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2,lasty, 0,lasty-self.inner_radius/2, 0,lasty-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (0,lasty-1.5*self.inner_radius, 0,1.5*self.inner_radius, 0,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2,0, self.inner_radius,0, 1.5*self.inner_radius, 0) + spath += 'z' + # + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = inkex.etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + # + return(blocks) + + + def create_pieces(self, jigsaw, gridx, gridy): + """ Loop through each row """ + # Treat outer edge carefully as border runs around. So special code the edges + # Internal lines should be in pairs -with second line reversed and appended to first. Close with a 'z' + # Create new group + g_attribs = {inkex.addNS('label','inkscape'):'JigsawPieces:X' + \ + str( self.pieces_W )+':Y'+str( self.pieces_H ) } + jigsaw_pieces = inkex.etree.SubElement(jigsaw, 'g', g_attribs) + line_style = simplestyle.formatStyle(self.line_style) + # + xblocks = self.create_horiz_blocks(jigsaw_pieces, gridy, line_style) + #sys.stderr.write("count: %s\n"% dir(gridx)) + yblocks = self.create_vert_blocks(jigsaw_pieces, gridx, line_style) + # + # for each xblock intersect it with each Y block + #for x in range(len(xblocks)): + # for y in range(len(yblocks)): + + # delete the paths in xblocks and yblocks + # transform them out of the way for now + for node in xblocks: + node.set('transform', 'translate(%f,%f)' % (self.width, 0)) + simpletransform.fuseTransform(node) + for node in yblocks: + node.set('transform', 'translate(%f,%f)' % (self.width, 0)) + simpletransform.fuseTransform(node) + + + ###-------------------------------------------- + ### The main function called by the Inkscape UI + def effect(self): + # document dimensions (for centering) + docW = self.unittouu(self.document.getroot().get('width')) + docH = self.unittouu(self.document.getroot().get('height')) + # extract fields from UI + self.width = self.unittouu( str(self.options.width) + self.options.units ) + self.height = self.unittouu( str(self.options.height) + self.options.units ) + self.pieces_W = self.options.pieces_W + self.pieces_H = self.options.pieces_H + average_block = (self.width/self.pieces_W + self.height/self.pieces_H) / 2 + self.notch_step = average_block * self.options.notch_percent / 3 # 3 = a useful notch size factor + self.smooth_edges = self.options.smooth_edges + self.noknob_frequency = self.options.noknob_frequency + self.random_radius = self.options.rand * average_block / 5 # 5 = a useful range factor + self.inner_radius = self.options.innerradius + if self.inner_radius < 0.01: self.inner_radius = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.border = self.options.border + self.borderwidth = self.options.borderwidth + self.outer_radius = self.options.outerradius + if self.outer_radius < 0.01: self.outer_radius = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.pack = self.options.pack + # pieces + self.pieces = self.options.pieces + # random function + if not self.options.use_seed: + random.seed(self.options.seed) + + # + # set up the main object in the current layer - group gridlines + g_attribs = {inkex.addNS('label','inkscape'):'Jigsaw:X' + \ + str( self.pieces_W )+':Y'+str( self.pieces_H ) } + jigsaw_group = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + #Group for X grid + g_attribs = {inkex.addNS('label','inkscape'):'X_Gridlines'} + gridx = inkex.etree.SubElement(jigsaw_group, 'g', g_attribs) + #Group for Y grid + g_attribs = {inkex.addNS('label','inkscape'):'Y_Gridlines'} + gridy = inkex.etree.SubElement(jigsaw_group, 'g', g_attribs) + + # Draw the Border + add_rounded_rectangle(0,0, self.inner_radius, self.width, self.height, self.line_style, 'innerborder', jigsaw_group) + # Do the Border + if self.border: + add_rounded_rectangle(-self.borderwidth,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.line_style, 'outerborder', jigsaw_group) + # make a second copy below the jigsaw for the cutout BG + if self.pack == "Below": + add_rounded_rectangle(-self.borderwidth,self.borderwidth+ self.height, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.line_style, 'BG', jigsaw_group, self.pack) + elif self.pack == "Right": + add_rounded_rectangle(self.width+self.borderwidth,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.line_style, 'BG', jigsaw_group, self.pack) + else: # Separate + add_rounded_rectangle(self.width+self.borderwidth*2,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.line_style, 'BG', jigsaw_group) + + # Step through the Grid + Xstep = self.width / (self.pieces_W) + Ystep = self.height / (self.pieces_H) + # Draw Horizontal lines on Y step with Xstep notches + for i in range(1, self.pieces_H): + self.add_jigsaw_horiz_line(0, Ystep*i, Xstep, self.pieces_W, self.width, self.line_style, 'YDiv'+str(i), gridy) + # Draw Vertical lines on X step with Ystep notches + for i in range(1, self.pieces_W): + self.add_jigsaw_horiz_line(0, Xstep*i, Ystep, self.pieces_H, self.height, self.line_style, 'XDiv'+str(i), gridx) + # Rotate lines into pos + # actualy transform can have multiple transforms in it e.g. 'translate(10,10) rotate(10)' + for node in gridx.iterchildren(): + if node.tag == inkex.addNS('path','svg'): + node.set('transform', 'rotate(%d)' % 90) + simpletransform.fuseTransform(node) + node.set('transform', 'translate(%f,%f)' % (self.width, 0)) + simpletransform.fuseTransform(node) + # center the jigsaw + jigsaw_group.set('transform', 'translate(%f,%f)' % ( (docW-self.width)/2, (docH-self.height)/2 ) ) + + # pieces + if self.pieces: + self.create_pieces(jigsaw_group, gridx,gridy) + # needs manual boolean ops until that is exposed or we get all the commented code working up top :-( + + +### +if __name__ == '__main__': + e = LasercutJigsaw() + e.affect() diff --git a/fablabchemnitz_lasercut_sequence.inx b/fablabchemnitz_lasercut_sequence.inx new file mode 100644 index 0000000..5b51733 --- /dev/null +++ b/fablabchemnitz_lasercut_sequence.inx @@ -0,0 +1,18 @@ + + + <_name>Optimize Sequence: Small Holes First + fablabchemnitz.de.lasercut_sequence + fablabchemnitz_lasercut_sequence.py + inkex.py + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_lasercut_sequence.py b/fablabchemnitz_lasercut_sequence.py new file mode 100644 index 0000000..98a433b --- /dev/null +++ b/fablabchemnitz_lasercut_sequence.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python + +# We will use the inkex module with the predefined Effect base class. +import inkex + +import measure +import re +import cubicsuperpath +from simplepath import parsePath +# The simplestyle module provides functions for style parsing. +from simplestyle import * + + + + + +def getArea(path): + return abs(measure.csparea(cubicsuperpath.parsePath(path + "z"))) + + +class LaserSort(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + + + + + def effect(self): + elements = self.document.xpath('//svg:path',namespaces=inkex.NSS) + for el in elements: + + oldpathstring = el.attrib['d'] + + nodes = parsePath(oldpathstring) + + currentSection = [] + sections = [currentSection] + for node in nodes: + command = node.pop(0) + currentSection.append(command + ' ' + ' '.join(map(lambda c: ','.join(map(str, c)), node))) + if command.lower() == 'z': + currentSection = [] + sections.append(currentSection) + + sections = map(lambda n: ' '.join(n), filter(lambda n: len(n) > 0, sections)) + + if (sections[-1][-2].lower() != 'z'): + nonClosedSection = ' ' + sections.pop() + else: + nonClosedSection = '' + + sections = filter(lambda s: s[0].lower() != 'z', sections) + + + sections = sorted(sections, key=getArea) + + + newpathstring = "z ".join(sections) + nonClosedSection + el.set('d', newpathstring) + + + + + +# Create effect instance and apply it. +effect = LaserSort() +effect.affect() diff --git a/fablabchemnitz_leathercase.inx b/fablabchemnitz_leathercase.inx new file mode 100644 index 0000000..dc16ad9 --- /dev/null +++ b/fablabchemnitz_leathercase.inx @@ -0,0 +1,31 @@ + + + <_name>Leather Case + fablabchemnitz.de.leathercase + 80.0 + 165.0 + 10.0 + 10.0 + 10.0 + 2 + + 1 + 2 + + 10.0 + 40.0 + 10.0 + true + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_leathercase.py b/fablabchemnitz_leathercase.py new file mode 100644 index 0000000..9da36b4 --- /dev/null +++ b/fablabchemnitz_leathercase.py @@ -0,0 +1,172 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +A Inkscape extension to generate the pieces for a leather case that can be laser cut. + +The leather case is intended to be used with up to 5 mobile phones. +""" + +import sys, copy +import inkex, simpletransform +import simplestyle +import math + +class LeatherCase1(inkex.Effect): + height = -1.0 + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-w', '--width', action='store', type='float', dest='width', default=80, help='Width (mm)') + self.OptionParser.add_option('-x', '--height', action='store', type='float', dest='height', default=165, help='Height (mm)') + self.OptionParser.add_option('-d', '--depth', action='store', type='float', dest='depth', default=10, help='Depth (mm)') + self.OptionParser.add_option('-H', '--heightMargin', action='store', type='float', dest='heightMargin', default=10, help='Height Margin (mm)') + self.OptionParser.add_option('-r', '--cornerRoundness', action='store', type='float', dest='cornerRoundness', default=10, help='Corner Roundness (mm)') + self.OptionParser.add_option('-i', '--divisions', action='store', type='int', dest='divisions', default=2, help='Divisions') + self.OptionParser.add_option('-a', '--claspAmount', action='store', type='string', dest='claspAmount', default=1, help='Number of Clasps') + self.OptionParser.add_option('-p', '--extraTongueLength', action='store', type='float', dest='extraTongueLength', default=10, help='Extra Tongue Length (mm)') + self.OptionParser.add_option('-t', '--tipTongueLength', action='store', type='float', dest='tipTongueLength', default=40, help='Tip Tongue Length (mm)') + self.OptionParser.add_option('-e', '--extraEdgeWidth', action='store', type='float', dest='extraEdgeWidth', default=10, help='Extra Edge Width (mm)') + self.OptionParser.add_option('-o', '--makeHoles', action='store', type='string', dest='makeHoles', default="true", help='Make Holes') + self.OptionParser.add_option('-g', '--groupObjects', action='store', type='string', dest='groupObjects', default="false", help='Group Objects') + + + + def effect(self): + width = self.options.width + height = self.options.height + depth = self.options.depth + heightMargin = self.options.heightMargin + cornerRoundness = self.options.cornerRoundness + divisions = self.options.divisions + oneClasp = self.options.claspAmount == "1" + extraTongueLength = self.options.extraTongueLength + tipTongueLength = self.options.tipTongueLength + extraEdgeWidth = self.options.extraEdgeWidth + makeHoles = self.options.makeHoles == "true" + group = self.options.groupObjects == "true" + + parent = self.current_layer + + if group: + parent = inkex.etree.SubElement(parent, 'g') + + line_style = { 'stroke-width': 3.5433071 / 15, 'stroke':'#FF0000', 'fill':'none'} + + verticalLine1Size = width - cornerRoundness - 1 + + hole = '' + + if makeHoles: + if oneClasp: + hole = ' m ' + str((height + heightMargin * 2) / 2) + ',' + str(extraTongueLength + 13) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + else: + hole = (' m ' + str((height + heightMargin * 2) / 2 - 55) + ',' + str(extraTongueLength + 13) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + + ' m 110,0' + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + ) + + firstPiece_attribs = {'style' : simplestyle.formatStyle(line_style), + 'transform' : 'matrix(3.5433071,0,0,3.5433071,0,0)', + 'd' : 'M 0,0 l 0,' + str(verticalLine1Size) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-verticalLine1Size) + ' Z' + + hole + } + + + firstPiece = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), firstPiece_attribs ) + + + # Intermediate pieces + for x in range(1, divisions): + intermediatePiece_attribs = {'style' : simplestyle.formatStyle(line_style), + 'transform' : 'matrix(3.5433071,0,0,3.5433071,0,0)', + 'd' : 'M ' + str(10 + x*5) + ',' + str(10 + x*5) + ' l 0,' + str(verticalLine1Size) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-verticalLine1Size) + ' Z' + } + + + intermediatePiece = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), intermediatePiece_attribs ) + + + line_style2 = { 'stroke-width': 3.5433071 / 15, 'stroke':'#00FF00', 'fill':'none'} + plainTongueLength = depth * divisions + extraTongueLength - 1 + (divisions - 1) + totalWidth = height + heightMargin * 2; + hole = '' + + if makeHoles: + if oneClasp: + hole = ' m 30,' + str(-50 -(plainTongueLength + tipTongueLength - 10)) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + else: + hole = (' m -25,' + str(-50 -(plainTongueLength + tipTongueLength - 10)) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + + ' m 110,0' + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2') + + + if oneClasp: + tongue = (' 0,' + str(-plainTongueLength) + + ' c 0,' + str(-tipTongueLength / 2) + ' ' + str(-totalWidth / 4) + ',' + str(-tipTongueLength) + ' ' + str(-totalWidth / 2) + ',' + str(-tipTongueLength) + + ' ' + str(-totalWidth / 4) + ',0 ' + str(-totalWidth / 2) + ',' + str(tipTongueLength / 2) + ' ' + str(-totalWidth / 2) + ',' + str(tipTongueLength) + + ' l 0,' + str(plainTongueLength) + ) + else: + tongue = (' 0,' + str(-(plainTongueLength + tipTongueLength - cornerRoundness)) + + ' c 0,' + str(-cornerRoundness / 2) + ' ' + str(-cornerRoundness / 2) + ',' + str(-cornerRoundness) + ' ' + str(-cornerRoundness) + ',' + str(-cornerRoundness) + + ' l ' + str(-(height + heightMargin * 2 - cornerRoundness * 2)) + ',0' + + ' c ' + str(-cornerRoundness / 2) + ',0 ' + str(-cornerRoundness) + ',' + str(cornerRoundness / 2) + ' ' + str(-cornerRoundness) + ',' + str(cornerRoundness) + + ' l 0,' + str(plainTongueLength + tipTongueLength - cornerRoundness) + ) + + secondPiece_attribs = {'style' : simplestyle.formatStyle(line_style2), + 'transform' : 'matrix(3.5433071,0,0,3.5433071,0,0)', + 'd' : 'M -5,-4 l 0,' + str(verticalLine1Size - 1) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-(verticalLine1Size-1)) + + ' -1,-1' + ' 1,-1' + + tongue + + ' 1,1 -1,1 m ' + + str(totalWidth / 2 - 30) +',-1 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5 ' + + 'm 60,0 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + + 'm 0,50 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + 'm -60,0 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + + hole + } + + secondPiece = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), secondPiece_attribs ) + + line_style3 = { 'stroke-width': 3.5433071 / 15, 'stroke':'#0000FF', 'fill':'none'} + edgeLength = (width - cornerRoundness) * 2 + height + heightMargin * 2 - cornerRoundness * 2 + 3.14159 * cornerRoundness + edgeWidth = depth * divisions + divisions - 1 + extraEdgeWidth + + thirdPiece_attribs = {'style' : simplestyle.formatStyle(line_style3), + 'transform' : 'matrix(3.5433071,0,0,3.5433071,0,0)', + 'd' : 'M 5,5 l 0,' + str(edgeWidth) + + ' ' + str(edgeLength) + ',0' + + ' 0,' + str(-edgeWidth) + ' Z' + } + + thirdPiece = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), thirdPiece_attribs ) + + line_style4 = { 'stroke-width': 3.5433071 / 15, 'stroke':'#FF00FF', 'fill':'none'} + edgeLength = 70 + edgeWidth = 60 + + fourthPiece_attribs = {'style' : simplestyle.formatStyle(line_style4), + 'transform' : 'matrix(3.5433071,0,0,3.5433071,0,0)', + 'd' : 'M 10,10 l 0,' + str(edgeWidth) + + ' ' + str(edgeLength) + ',0' + + ' 0,' + str(-edgeWidth) + ' Z' + } + + fourthPiece = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), fourthPiece_attribs ) + + + +effect = LeatherCase1() +effect.affect() diff --git a/fablabchemnitz_living_hinge.inx b/fablabchemnitz_living_hinge.inx new file mode 100644 index 0000000..c07b13c --- /dev/null +++ b/fablabchemnitz_living_hinge.inx @@ -0,0 +1,46 @@ + + + <_name>Living Hinge + fablabchemnitz.de.living_hinge + fablabchemnitz_living_hinge.py + simpletransform.py + inkex.py + + <_item value="y">vertical cuts + <_item value="x">horizontal cuts + + + <_item value="mm">mm + <_item value="cm">cm + <_item value="in">in + <_item value="px">px + + 19.0 + 3.0 + 1.5 + + + +This extension renders the lines to make the cuts for a living hinge. The cuts run in the choosen direction. + +- direction: choose the direction of the cuts. +- cut length: the length of each cut. +- gap length: the separation between cut lines. +- separation distance: the separation distance between adjacent sets of cut lines. + +The entered value for cut length will be adjusted so that an integer number of whole cut lines lies in the rectangle. The entered value for separation distance will be adjusted so that in integer number of cut lines lies in rectangle. + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_living_hinge.py b/fablabchemnitz_living_hinge.py new file mode 100644 index 0000000..a9134eb --- /dev/null +++ b/fablabchemnitz_living_hinge.py @@ -0,0 +1,275 @@ +#! /usr/bin/env python +""" +living_hinge.py +A module for creating lines to laser cut living hinges + +Copyright (C) 2013 Mark Endicott; drphonon@gmail.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +For a copy of the GNU General Public License +write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +""" +Change in version 0.2 + +Changed self.unittouu to self.unittouu +and self.uutounit to self.uutounit +to make it work with Inkscape 0.91 +Thanks to Pete Prodoehl for pointing this out. +""" + +""" +Change in version 0.3 + +Add a direction option so the cuts can be done in the X or Y direction. +Modification by Sylvain GARNAVAULT; garnav@wanadoo.fr +""" + + +__version__ = "0.3" + +import sys,inkex,simplestyle,gettext +_ = gettext.gettext + +def drawS(parent, XYstring): # Draw lines from a list + name='part' + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': self.unittouu("0.1 mm") } + drw = {'style':simplestyle.formatStyle(style),inkex.addNS('label','inkscape'):name,'d':XYstring} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return + + +class HingeCuts(inkex.Effect): + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + # Define options - Must match to the elements in the .inx file + self.OptionParser.add_option('--direction',action='store',type='string', dest='direction',default='y',help='cuts direction') + self.OptionParser.add_option('--unit',action='store',type='string', dest='unit',default='mm',help='units of measurement') + self.OptionParser.add_option('--cut_length',action='store',type='float', dest='cut_length',default=0,help='length of the cuts for the hinge.') + self.OptionParser.add_option('--gap_length',action='store',type='float', dest='gap_length',default=0,help='separation distance between successive hinge cuts.') + self.OptionParser.add_option('--sep_distance',action='store',type='float', dest='sep_distance',default=0,help='distance between successive lines of hinge cuts.') + + def effect(self): + + unit=self.options.unit + # which direction are we cutting + dir = self.options.direction + # starting cut length. Will be adjusted for get an integer number of cuts in the y-direction. + l = self.unittouu(str(self.options.cut_length) + unit) + # cut separation in the y-direction + d = self.unittouu(str(self.options.gap_length) + unit) + # starting separation between lines of cuts in the x-direction. Will be adjusted to get an integer + # number of cut lines in the x-direction. + dd = self.unittouu(str(self.options.sep_distance) + unit) + + # get selected nodes + if self.selected: + # put lines on the current layer + parent = self.current_layer + for id, node in self.selected.iteritems(): + # inkex.debug("id:" + id) + # for key in node.attrib.keys(): + # inkex.debug(key + ": " + node.get(key)) + x = float(node.get("x")) + dx = float(node.get("width")) + y = float(node.get("y")) + dy = float(node.get("height")) + + # calculate the cut lines for the hinge + if (dir=="y"): + lines, l_actual, d_actual, dd_actual = self.calcYCutLines(x, y, dx, dy, l, d, dd) + else: + lines, l_actual, d_actual, dd_actual = self.calcXCutLines(x, y, dx, dy, l, d, dd) + + + # all the lines are one path. Prepare the string that describes the path. + s = '' + for line in lines: + s = s + "M %s, %s L %s, %s " % (line['x1'], line['y1'], line['x2'], line['y2']) + # add the path to the document + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': self.unittouu("0.1 mm")} + drw = {'style':simplestyle.formatStyle(style), 'd': s} + hinge = inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), drw) + # add a description element to hold the parameters used to create the cut lines + desc = inkex.etree.SubElement(hinge, inkex.addNS('desc', 'svg')) + desc.text = "Hinge cut parameters: actual(requested)\n" \ + "cut length: %.2f %s (%.2f %s)\n" \ + "gap length: %.2f %s (%.2f %s)\n" \ + "separation distance: %.2f %s (%.2f %s)" % (self.uutounit(l_actual, unit), unit, self.uutounit(l, unit), unit, + self.uutounit(d_actual, unit), unit, self.uutounit(d, unit), unit, + self.uutounit(dd_actual, unit), unit, self.uutounit(dd, unit), unit) + else: + inkex.debug("No rectangle(s) have been selected.") + + def calcYCutLines(self, x, y, dx, dy, l, d, dd): + """ + Return a list of cut lines as dicts. Each dict contains the end points for one cut line. + [{x1, y1, x2, y2}, ... ] + + Parameters + x, y: the coordinates of the lower left corner of the bounding rect + dx, dy: width and height of the bounding rect + l: the nominal length of a cut line + d: the separation between cut lines in the y-direction + dd: the nominal separation between cut lines in the x-direction + + l will be adjusted so that there is an integral number of cuts in the y-direction. + dd will be adjusted so that there is an integral number of cuts in the x-direction. + """ + ret = [] + + # use l as a starting guess. Adjust it so that we get an integer number of cuts in the y-direction + # First compute the number of cuts in the y-direction using l. This will not in general be an integer. + p = (dy-d)/(d+l) + #round p to the nearest integer + p = round(p) + #compute the new l that will result in p cuts in the y-direction. + l = (dy-d)/p - d + + # use dd as a starting guess. Adjust it so that we get an even integer number of cut lines in the x-direction. + p = dx/dd + p = round(p) + if p % 2 == 1: + p = p + 1 + dd = dx/p + + # + # Column A cuts + # + currx = 0 + donex = False + while not donex: + doney = False + starty = 0 + endy = (l + d)/2.0 + while not doney: + if endy >= dy: + endy = dy + # Add the end points of the line + ret.append({'x1' : x + currx, 'y1' : y + starty, 'x2': x + currx, 'y2': y + endy}) + starty = endy + d + endy = starty + l + if starty >= dy: + doney = True + currx = currx + dd * 2.0 + if currx - dx > dd: + donex = True +# inkex.debug("lastx: " + str(lastx) + "; currx: " + str(currx)) + # + #Column B cuts + # + currx = dd + donex = False + while not donex: + doney = False + starty = d + endy = starty + l + while not doney: + if endy >= dy: + endy = dy + # create a line + ret.append({'x1' : x + currx, 'y1' : y + starty, 'x2': x + currx, 'y2': y + endy}) + starty = endy + d + endy = starty + l + if starty >= dy: + doney = True + currx = currx + dd*2.0 + if currx > dx: + donex = True + + return (ret, l, d, dd) + + def calcXCutLines(self, x, y, dx, dy, l, d, dd): + """ + Return a list of cut lines as dicts. Each dict contains the end points for one cut line. + [{x1, y1, x2, y2}, ... ] + + Parameters + x, y: the coordinates of the lower left corner of the bounding rect + dx, dy: width and height of the bounding rect + l: the nominal length of a cut line + d: the separation between cut lines in the x-direction + dd: the nominal separation between cut lines in the y-direction + + l will be adjusted so that there is an integral number of cuts in the x-direction. + dd will be adjusted so that there is an integral number of cuts in the y-direction. + """ + ret = [] + + # use l as a starting guess. Adjust it so that we get an integer number of cuts in the y-direction + # First compute the number of cuts in the x-direction using l. This will not in general be an integer. + p = (dx-d)/(d+l) + #round p to the nearest integer + p = round(p) + #compute the new l that will result in p cuts in the x-direction. + l = (dx-d)/p - d + + # use dd as a starting guess. Adjust it so that we get an even integer number of cut lines in the y-direction. + p = dy/dd + p = round(p) + if p % 2 == 1: + p = p + 1 + dd = dy/p + + # + # Rows A cuts + # + curry = 0 + doney = False + while not doney: + donex = False + startx = 0 + endx = (l + d)/2.0 + while not donex: + if endx >= dx: + endx = dx + # Add the end points of the line + ret.append({'x1' : x + startx, 'y1' : y + curry, 'x2': x + endx, 'y2': y + curry}) + startx = endx + d + endx = startx + l + if startx >= dx: + donex = True + curry = curry + dd * 2.0 + if curry - dy > dd: + doney = True + + # + # Rows B cuts + # + curry = dd + doney = False + while not doney: + donex = False + startx = d + endx = startx + l + while not donex: + if endx >= dx: + endx = dx + # create a line + ret.append({'x1' : x + startx, 'y1' : y + curry, 'x2': x + endx, 'y2': y + curry}) + startx = endx + d + endx = startx + l + if startx >= dx: + donex = True + curry = curry + dd*2.0 + if curry > dy: + doney = True + + return (ret, l, d, dd) + + +# Create effect instance and apply it. +effect = HingeCuts() +effect.affect() diff --git a/fablabchemnitz_living_hinge2.inx b/fablabchemnitz_living_hinge2.inx new file mode 100644 index 0000000..059171c --- /dev/null +++ b/fablabchemnitz_living_hinge2.inx @@ -0,0 +1,54 @@ + + + <_name>Box Maker - Living Hinge + fablabchemnitz.de.living_hinge2 + fablabchemnitz_living_hinge2.py + simpletransform.py + inkex.py + + + + + + + + + + + + + + + <_option value="1">Inside + <_option value="0">Outside + + 40.0 + 80.0 + 50.0 + 6.0 + + <_option value="0">Fixed + <_option value="1">Proportional + + 3.0 + 0.1 + 0.01 + + + + + 1.0 + 2.0 + 15.000 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_living_hinge2.py b/fablabchemnitz_living_hinge2.py new file mode 100644 index 0000000..6edc244 --- /dev/null +++ b/fablabchemnitz_living_hinge2.py @@ -0,0 +1,528 @@ +#! /usr/bin/env python +''' +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf and clearance into account + +Original Author -- 2011 elliot white elliot@twot.eu +Forked -- 2013 Reid Borsuk reid.borsuk@live.com +Updated for 0.91 2016 Maren Hachmann marenhachmann@yahoo.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "0.8rb" + +import sys,inkex,simplestyle,gettext,math +_ = gettext.gettext + +def drawS(XYstring): # Draw lines from a list + name='part' + style = { 'stroke': '#000000', 'fill': 'none' } + drw = {'style':simplestyle.formatStyle(style),inkex.addNS('label','inkscape'):name,'d':XYstring} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return + +def draw_SVG_ellipse((centerx, centery), (radiusx, radiusy), start_end): + + style = { 'stroke' : '#000000', + 'fill' : 'none' } + ell_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('cx','sodipodi') :str(centerx), + inkex.addNS('cy','sodipodi') :str(centery), + inkex.addNS('rx','sodipodi') :str(radiusx), + inkex.addNS('ry','sodipodi') :str(radiusy), + inkex.addNS('start','sodipodi') :str(start_end[0]), + inkex.addNS('end','sodipodi') :str(start_end[1]), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :'' + } + + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + +#draw an SVG line segment between the given (raw) points +def draw_SVG_line( (x1, y1), (x2, y2), parent): + style = { 'stroke': '#000000', 'fill': 'none' } + + line_attribs = {'style' : simplestyle.formatStyle(style), + 'd' : 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + +def EllipseCircumference(a, b): + """ + Compute the circumference of an ellipse with semi-axes a and b. + Require a >= 0 and b >= 0. Relative accuracy is about 0.5^53. + """ + import math + x, y = max(a, b), min(a, b) + digits = 53; tol = math.sqrt(math.pow(0.5, digits)) + if digits * y < tol * x: return 4 * x + s = 0; m = 1 + while x - y > tol * y: + x, y = 0.5 * (x + y), math.sqrt(x * y) + m *= 2; s += m * math.pow(x - y, 2) + return math.pi * (math.pow(a + b, 2) - s) / (x + y) + +""" +Gives you a list of points that make up a box. + +Returns string suitable for input to drawS +""" +def box((sx, sy),(ex, ey), leaveLeftSideOpen = False): + s=[] + s='M '+str(sx)+','+str(sy)+' ' + s+='L '+str(ex)+','+str(sy)+' ' + s+='L '+str(ex)+','+str(ey)+' ' + s+='L '+str(sx)+','+str(ey)+' ' + if not leaveLeftSideOpen: + s+='L '+str(sx)+','+str(sy)+' ' + return s + +""" +Side function is used to render any of the sides so needs all this functionality: + isLongSide -- long sides without tabs (for cover), + truncate -- partial sides for the elipse + gap -- extend the tabs on the curved side for ease of movement + thumbTab -- Render individual boxes for slots instead of one continuous line + +isTab is used to specify the male/female designation for a side so they mesh properly. Otherwise the tabs +would be in the same spot for opposing sides, instead of interleaved. + +Returns a list of lines to draw. +""" +def side((rx,ry),(sox,soy),(eox,eoy),tabVec,length,(dirx,diry),isTab,isLongSide,truncate = False, gap = False, thumbTab = False): + # root startOffset endOffset tabVec length direction isTab + + #Long side length= length+((inkex.pi*(length/2))/4 + tmpLength = 0 + correctionLocal = correction + if gap: + correctionLocal = (correction) + if isLongSide > 0: + tmpLength = length + length = isLongSide + + divs=int(length/nomTab) # divisions + if not divs%2: divs-=1 # make divs odd + if isLongSide < 0: + divs = 1 + + divs=float(divs) + tabs=(divs-1)/2 # tabs for side + + if isLongSide < 0: + divs = 1 + tabWidth = length + gapWidth = 0 + elif equalTabs: + gapWidth=tabWidth=length/divs + else: + tabWidth=nomTab + gapWidth=(length-tabs*nomTab)/(divs-tabs) + + if isTab: # kerf correction + gapWidth-=correctionLocal + tabWidth+=correctionLocal + first=correctionLocal/2 + else: + gapWidth+=correctionLocal + tabWidth-=correctionLocal + first=-correctionLocal/2 + + s=[] + firstVec=0; secondVec=tabVec + if gap: + secondVec *= 2 + dirxN=0 if dirx else 1 # used to select operation on x or y + diryN=0 if diry else 1 + (Vx,Vy)=(rx+sox*thickness,ry+soy*thickness) + s='M '+str(Vx)+','+str(Vy)+' ' + + if dirxN: Vy=ry # set correct line start + if diryN: Vx=rx + + if isLongSide > 0: #LongSide is a side without tabs for a portion. + length = tmpLength + divs=int((Z/2)/nomTab) + if not divs%2: divs-=1 + divs = float(divs) + + # generate line as tab or hole using: + # last co-ord:Vx,Vy ; tab dir:tabVec ; direction:dirx,diry ; thickness:thickness + # divisions:divs ; gap width:gapWidth ; tab width:tabWidth + for n in range(1,int(divs)): + if n%2: + Vx=Vx+dirx*gapWidth+dirxN*firstVec+first*dirx + Vy=Vy+diry*gapWidth+diryN*firstVec+first*diry + s+='L '+str(Vx)+','+str(Vy)+' ' + Vx=Vx+dirxN*secondVec + Vy=Vy+diryN*secondVec + s+='L '+str(Vx)+','+str(Vy)+' ' + else: + Vxs = Vx + Vys = Vy + Vx=Vx+dirx*tabWidth+dirxN*firstVec + Vy=Vy+diry*tabWidth+diryN*firstVec + s+='L '+str(Vx)+','+str(Vy)+' ' + Vx=Vx+dirxN*secondVec + Vy=Vy+diryN*secondVec + s+='L '+str(Vx)+','+str(Vy)+' ' + if thumbTab: + drawS(box((Vxs,Vys),(Vx,Vy))) + (secondVec,firstVec)=(-secondVec,-firstVec) # swap tab direction + first=0 + if not truncate: + s+='L '+str(rx+eox*thickness+dirx*length)+','+str(ry+eoy*thickness+diry*length)+' ' + else: #Truncate specifies that a side is incomplete in preperation for a curve + s+='L '+str(rx+eox*thickness+dirx*(length/2))+','+str(ry+eoy*thickness+diry*(length/2))+' ' + return s + + + +#God class. Makes poor design, but not much object oriented in this guy... +class LivingHinge(inkex.Effect): + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + # Define options + self.OptionParser.add_option('--unit',action='store',type='string', + dest='unit',default='mm',help='Measure Units') + self.OptionParser.add_option('--inside',action='store',type='int', + dest='inside',default=0,help='Int/Ext Dimension') + self.OptionParser.add_option('--length',action='store',type='float', + dest='length',default=100,help='Length of Box') + self.OptionParser.add_option('--width',action='store',type='float', + dest='width',default=100,help='Width of Box') + self.OptionParser.add_option('--depth',action='store',type='float', + dest='height',default=100,help='Height of Box') + self.OptionParser.add_option('--tab',action='store',type='float', + dest='tab',default=25,help='Nominal Tab Width') + self.OptionParser.add_option('--equal',action='store',type='int', + dest='equal',default=0,help='Equal/Prop Tabs') + self.OptionParser.add_option('--thickness',action='store',type='float', + dest='thickness',default=10,help='Thickness of Material') + self.OptionParser.add_option('--kerf',action='store',type='float', + dest='kerf',default=0.5,help='Kerf (width) of cut') + self.OptionParser.add_option('--clearance',action='store',type='float', + dest='clearance',default=0.01,help='Clearance of joints') + self.OptionParser.add_option('--style',action='store',type='int', + dest='style',default=25,help='Layout/Style') + self.OptionParser.add_option('--spacing',action='store',type='float', + dest='spacing',default=25,help='Part Spacing') + self.OptionParser.add_option('--hingeOpt',action='store',type='int', + dest='hingeOpt',default=0,help='Hinge type') + self.OptionParser.add_option('--hingeThick',action='store',type='float', + dest='hingeThick',default=0,help='Hinge thickness') + self.OptionParser.add_option('--thumbTab',action='store',type='string', + dest='thumbTab',default=0,help='Add a thumb tab') + """ + Traditional multi-slit design. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + space : gap between slots in the X direction, in user specified units (IE: wood between two rows of slots) + solidGap : gap between slots in the Y direction, in user specified units (IE: how much wood is left between 2 or 3 cuts) + """ + def livingHinge2(self, (Sx, Sy), (Ex, Ey), space = 2, solidGap = 4): + + space = self.unittouu( str(space) + unit ) + solidGap = self.unittouu( str(solidGap) + unit ) + Sy += thickness + Ey -= thickness + + height = Ey - Sy + + width = Ex - Sx + # inkex.debug(width) + horizontalSlots = int(round(width / space)) + # inkex.debug(horizontalSlots) + if horizontalSlots % 2 and horizontalSlots != 1: + horizontalSlots-=1 # make it even so you end with an interior slot + # inkex.debug(horizontalSlots) + space = width / horizontalSlots + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = inkex.etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + for n in range(0,horizontalSlots+1): + if n%2: #odd, exterior slot (slot should go all the way to the part edge) + draw_SVG_line((Sx + (space * n), Sy), (Sx + (space * n), Sy+(height/4)-(solidGap/2)), grp) + draw_SVG_line((Sx + (space * n), Sy+(height/4)+(solidGap/2)), (Sx + (space * n), Ey-(height/4)-(solidGap/2)), grp) + draw_SVG_line((Sx + (space * n), Ey-(height/4)+(solidGap/2)), (Sx + (space * n), Ey), grp) + + else: + #even, interior slot (slot shoud not touch edge of part) + draw_SVG_line((Sx + (space * n), Sy+solidGap), (Sx + (space * n), Sy+(height/2)-(solidGap/2)), grp) + draw_SVG_line((Sx + (space * n), Ey-(height/2)+(solidGap/2)), (Sx + (space * n), (Ey-solidGap)), grp) + + """ + The sprial based designs are built from multiple calls of this function. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + reverse : specifies the spin of the spiral (1 = outer spiral is counterclockwise, -1 otherwise) + space : gap between slots, in user specified units (IE: how thick the wood remainder is) + """ + def livingHinge3(self, (Sx, Sy), (Ex, Ey), reverse = 1, space = 2): + space = self.unittouu( str(space) + unit ) + + height = (Ey - Sy) + + width = (Ex - Sx) + + horizontalSlots = int(math.floor(height / (space))) + if not horizontalSlots%2: horizontalSlots-=1 # make it odd otherwise the below division will result in an outer cut too thin + + space = (height / horizontalSlots) + + horizontalSlots = int(round(horizontalSlots * 1/2)) #We do 2 passes per render, so divide slots requirement in half + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = inkex.etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + centerX = Sx + (width/2) + centerY = Sy + (height/2) + + for n in range(0,horizontalSlots): + newX = (((space/2) + (space*n)) * reverse) + draw_SVG_line(((centerX - newX), centerY + (space/2) + (space * n)), ((centerX - newX ), centerY - (space * 1.5) - (space * n)), grp) + if horizontalSlots - 1 != n: #Last line in center should be omited + draw_SVG_line(((centerX - (space + (space/2 * -reverse)) - (space*n) ), centerY - (space * 1.5) - (space * n)), ((centerX + (space + (space/2 * reverse)) + (space*n) ), centerY - (space * 1.5) - (space * n)), grp) + + draw_SVG_line(((centerX + newX ), centerY - (space/2) - (space * n)), ((centerX + newX ), centerY + (space * 1.5) + (space * n)), grp) + if horizontalSlots - 1 != n: #Last line in center should be omited + draw_SVG_line(((centerX + (space + (space/2 * -reverse)) + (space*n) ), centerY + (space * 1.5) + (space * n)), ((centerX - (space + (space/2 * reverse)) - (space*n) ), centerY + (space * 1.5) + (space * n)), grp) + + """ + The snake based designs are built from multiple calls of this function. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + rotate : False means the traditional flexable design (cuts are prependuclar to long sides). True rotates 90 degrees. + mirror : mirror inverts the left and right slots, used for inverting during double design + space : gap between adjecent slots, in user specified units (IE: wood between two rows of slots, X if rotate is false, Y if true) + solidGap : gap between slot and edge, in user specified units (IE: how much wood is left between cut and edge, Y if rotate is false, X if true) + """ + def livingHinge4(self, (Sx, Sy), (Ex, Ey), rotate = False, mirror = 0, space = 2, solidGap = 5): + + space = self.unittouu( str(space) + unit ) + solidGap = self.unittouu( str(solidGap) + unit ) + Sy += thickness + Ey -= thickness + + height = Ey - Sy + width = Ex - Sx + + if not rotate: + horizontalSlots = int(round(width / space)) + space = width / horizontalSlots + skew = 1 #Paint extra lines at the start and end because in this direction there are no existing lines already + else: + horizontalSlots = int(round(height / space)) + if not horizontalSlots%2: horizontalSlots-=1 #make sure we always end on the same side, otherwise we'll cut off the last tooh + space = height / horizontalSlots + skew = 0 #Don't paint the first and last lines, as they're on the cut already, and double cuts on a laser are messy + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = inkex.etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + for n in range(1 - skew,horizontalSlots + skew): + if not rotate: + if (n+mirror)%2: + draw_SVG_line((Sx + (space * n), Sy + solidGap), (Sx + (space * n), Ey), grp) + else: + draw_SVG_line((Sx + (space * n), Sy), (Sx + (space * n), Ey - solidGap), grp) + else: + if (n+mirror)%2: + draw_SVG_line((Sx + solidGap, Sy + (space * n)), (Ex, Sy + (space * n)), grp) + else: + draw_SVG_line((Sx, Sy + (space * n)), (Ex - solidGap, Sy + (space * n)), grp) + if rotate and not mirror: + draw_SVG_line((Sx, Sy), (Sx, Ey - space), grp) + draw_SVG_line((Ex, Sy + space), (Ex, Ey), grp) + elif mirror: + draw_SVG_line((Sx, Sy + space), (Sx, Ey), grp) + draw_SVG_line((Ex, Sy), (Ex, Ey - space), grp) + + def effect(self): + global parent,nomTab,equalTabs,thickness,correction, Z, unit + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Get the attibutes: + widthDoc = self.unittouu(svg.get('width')) + heightDoc = self.unittouu(svg.get('height')) + + # Create a new layer. + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'newlayer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + parent=self.current_layer + + # Get script's option values. + unit=self.options.unit + inside=self.options.inside + X = self.unittouu( str(self.options.length) + unit ) + Y = self.unittouu( str(self.options.width) + unit ) + Z = self.unittouu( str(self.options.height) + unit ) + thickness = self.unittouu( str(self.options.thickness) + unit ) + nomTab = self.unittouu( str(self.options.tab) + unit ) + equalTabs=self.options.equal + kerf = self.unittouu( str(self.options.kerf) + unit ) + clearance = self.unittouu( str(self.options.clearance) + unit ) + layout=self.options.style + spacing = self.unittouu( str(self.options.spacing) + unit ) + ring = 1 + hingeOpt = self.options.hingeOpt + hingeThick = self.options.hingeThick + thumbTab = self.options.thumbTab + + if inside: # if inside dimension selected correct values to outside dimension + X+=thickness*2 + Y+=thickness*2 + Z+=thickness*2 + + correction=kerf-clearance + + # check input values mainly to avoid python errors + # TODO restrict values to *correct* solutions + # TODO -- Do what the origial author suggested I do. QUALITY! + error=0 + + if min(X,Y,Z)==0: + inkex.errormsg(_('Error: Dimensions must be non zero')) + error=1 + if max(X,Y,Z)>max(widthDoc,heightDoc)*10: # crude test + inkex.errormsg(_('Error: Dimensions Too Large')) + error=1 + if min(X,Y,Z)<3*nomTab: + inkex.errormsg(_('Error: Tab size too large')) + error=1 + if nomTabmin(X,Y,Z)/3: # crude test + inkex.errormsg(_('Error: Material too thick')) + error=1 + if correction>min(X,Y,Z)/3: # crude test + inkex.errormsg(_('Error: Kerf/Clearence too large')) + error=1 + if spacing>max(X,Y,Z)*10: # crude test + inkex.errormsg(_('Error: Spacing too large')) + error=1 + if spacing 0=holes 1=tabs + if layout==0: # Diagramatic Layout TRBL + pieces=[ #center low row + [(2,0,0,1),(3,0,1,1),X,Z,0b1000,-2], + #left middle row + [(1,0,0,0),(2,0,0,1),Z,Y,0b1111,0], + #center middle row + [(2,0,0,1),(2,0,0,1),X,Y,0b0000,0], + #right middle row + [(3,1,0,1),(2,0,0,1),Z+(EllipseCircumference(X/2, Z/2)/4)+thickness,Y,0b1011,1], + #center top row + [(2,0,0,1),(1,0,0,0),X,Z,0b0010,-1]] + elif layout==1: # Inline(compact) Layout + pieces=[#Base + [(1,0,0,0),(1,0,0,0),X,Y,0b0000,0], + #Front panel + [(2,1,0,0),(1,0,0,0),Z,Y,0b1111,0], + #Sides with curves + [(3,1,0,1),(1,0,0,0),X,Z,0b1000,-2], + [(4,2,0,1),(1,0,0,0),X,Z,0b0010,-1], + #Long piece w/ hinge + [(5,3,0,1),(1,0,0,0),Z+(EllipseCircumference(X/2, Z/2)/4)+thickness,Y,0b1011,1] + ] + + for piece in pieces: # generate and draw each piece of the box + (xs,xx,xy,xz)=piece[0] + (ys,yx,yy,yz)=piece[1] + x=xs*spacing+xx*X+xy*Y+xz*Z # root x co-ord for piece + y=ys*spacing+yx*X+yy*Y+yz*Z # root y co-ord for piece + dx=piece[2] + dy=piece[3] + tabs=piece[4] + a=tabs>>3&1; b=tabs>>2&1; c=tabs>>1&1; d=tabs&1 # extract tab status for each side. It's a nasty packed binary flag format, but I'm not fixing it now. + longSide = 0 + shortSide = 0 + skew = 0 + + if piece[5] == 1: + longSide = Z + elif piece[5] < 0: + shortSide = Z + + # generate and draw the sides of each piece + if piece[5] != -1: + drawS(side((x,y),(d,a),(-b,a),-thickness if a else thickness,dx,(1,0),a,longSide)) # side a (top) + else: + drawS(side((x,y),(d,a),(-b,a),-thickness if a else thickness,dx/2,(1,0),a,-1)) # side a (top) when the top participates in a curve + + if piece[5] != -1 and piece[5] != 1: + drawS(side((x+dx+skew,y),(-b,a),(-b,-c),thickness if b else -thickness,dy,(0,1),b,shortSide, False if piece[5] != -2 else True, False if piece[5] != 1 else True)) # side b (right) except for side with living hinge or curves + elif piece[5] == -1: + drawS(side((x+dx+skew,y+dy),(-b,-c),(-b,a),thickness if b else -thickness,dy,(0,-1),b,shortSide, True)) # side b (right) when the right side participates in a curve + else: + #It is a cardnal sin to compare floats, so assume <0.0005 is 0 since the front end only gives you 3 digits of precision + if float(0.0005) <= float(self.options.thumbTab): + side((x+dx+skew,y),(-b,a),(-b,-c),thickness if b else -thickness,dy,(0,1),b,shortSide, False, True, True) #The one call to side that doesn't actually draw. Instead, side draws boxes on its own + drawS(box((x+dx+skew,y+thickness),(x+dx+skew+self.unittouu( thumbTab + unit ),y+dy-thickness), True)) + else: + drawS(side((x+dx+skew,y),(-b,a),(-b,-c),thickness if b else -thickness,dy,(0,1),b,shortSide, False, True)) #side b (right) on the right side of a living hinge + + + if piece[5] != -2: + drawS(side((x,y+dy),(d,-c),(-b,-c),thickness if c else -thickness,dx,(1,0),c,longSide)) # side c (bottom) + else: + drawS(side((x,y+dy),(d,-c),(-b,-c),thickness if c else -thickness,dx/2,(1,0),c,-1)) # side c (bottom) when the bottom participates in a curve + + drawS(side((x,y+dy),(d,-c),(d,a),-thickness if d else thickness,dy,(0,-1),d,0)) # side d (left) + + if piece[5] < 0: + draw_SVG_ellipse((x+(dx/2), y+(dy/2)), ((dx/2), (dy/2)), [(1.5*inkex.pi), 0] if piece[5] == -1 else [0, 0.5*inkex.pi]) #draw the curve + + if piece[5] == 1: #Piece should contain a living hinge + if hingeOpt == 0: #Traditional parallel slit + self.livingHinge2((x+(Z/2), y), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + (dy)), hingeThick) + elif hingeOpt == 1: #Single spiral + if not inside: + self.livingHinge3((x+(Z/2), y+thickness), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + dy - thickness), 1, hingeThick) + else: + self.livingHinge3((x+(Z/2), y + 2*thickness), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + dy - 2*thickness), 1, hingeThick) + + elif hingeOpt == 2: #Double spiral + self.livingHinge3((x+(Z/2), y+thickness), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + (dy/2)), 1, hingeThick) + self.livingHinge3((x+(Z/2), y+(dy/2)), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + dy - thickness), -1, hingeThick) + elif hingeOpt == 3 or hingeOpt == 4: #Both snake-based designs + self.livingHinge4((x+(Z/2), y), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + (dy)), False if hingeOpt == 3 else True, 0, hingeThick) + elif hingeOpt == 5: #Double snake design + self.livingHinge4((x+(Z/2), y), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + (dy/2) + thickness), True, 0, hingeThick) #Add thickness as a cheat so design 4 doesn't have to know if it's a short or long variant + self.livingHinge4((x+(Z/2), y + (dy/2) - thickness), ((x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + dy), True, 1, hingeThick) + +# Create effect instance and apply it. +effect = LivingHinge() +effect.affect() diff --git a/fablabchemnitz_living_hinge3.inx b/fablabchemnitz_living_hinge3.inx new file mode 100644 index 0000000..ed2f556 --- /dev/null +++ b/fablabchemnitz_living_hinge3.inx @@ -0,0 +1,23 @@ + + + <_name>Living Hinge (Size Input) + fablabchemnitz.de.living_hinge3 + 10 + 100 + 1.0 + 3.0 + 30 + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_living_hinge3.py b/fablabchemnitz_living_hinge3.py new file mode 100644 index 0000000..d0d0cae --- /dev/null +++ b/fablabchemnitz_living_hinge3.py @@ -0,0 +1,88 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +A Inkscape extension to generate a pattern that allows to bend wood or MDF one it is laser cut. +""" + +import sys, copy +import inkex, simpletransform +import simplestyle +import math + +class BendWoodCutsPattern(inkex.Effect): + height = -1.0 + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-w', '--width', action='store', type='float', dest='width', default=10, help='Width (mm)') + self.OptionParser.add_option('-x', '--height', action='store', type='float', dest='height', default=100, help='Height (mm)') + self.OptionParser.add_option('-H', '--horizontalLineSeparation', action='store', type='float', dest='horizontalLineSeparation', default=1, help='Horizontal Line Separation (mm)') + self.OptionParser.add_option('-v', '--verticalLineSeparation', action='store', type='float', dest='verticalLineSeparation', default=3, help='Vertical Line Separation (mm)') + self.OptionParser.add_option('-j', '--maxLineLength', action='store', type='float', dest='maxLineLength', default=30, help='Max Line Length (mm)') + self.OptionParser.add_option('-t', '--addInitMarks', action='store', type='string', dest='addInitMarks', default="false", help='Add Init Marks') + self.OptionParser.add_option('-g', '--groupLines', action='store', type='string', dest='groupLines', default="false", help='Group Lines') + +#draw an SVG line segment between the given (raw) points + def draw_SVG_line(self, (x1, y1), (x2, y2), parent): + + if self.height < 0: + svg = self.document.getroot() + self.height = self.unittouu(svg.attrib['height']) + + line_style = { 'stroke-width':0.35433071, 'stroke':'#000000'} + + line_attribs = {'style' : simplestyle.formatStyle(line_style), + 'd' : 'M '+str(x1 * 3.5433071)+','+str(self.height - y1 * 3.5433071)+' L '+str(x2 * 3.5433071)+','+str(self.height - y2 * 3.5433071)} + + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + + def effect(self): + width = self.options.width + height = self.options.height + horizontalLineSeparation = self.options.horizontalLineSeparation + verticalLineSeparation = self.options.verticalLineSeparation + maxLineLength = self.options.maxLineLength + marks = self.options.addInitMarks == "true" + group = self.options.groupLines == "true" + + parent = self.current_layer + + if group: + parent = inkex.etree.SubElement(parent, 'g') + + xLines = int(width / horizontalLineSeparation) + maxLineLength = self.options.maxLineLength + + linesPerColumn = int(math.ceil(height / maxLineLength)) + ll = height / linesPerColumn + + + + for x in range(0, xLines): + if marks: + self.draw_SVG_line((x * horizontalLineSeparation, -3), (x * horizontalLineSeparation, -2), parent) + + if x % 2 == 0: + for y in range(0, linesPerColumn): + self.draw_SVG_line((x * horizontalLineSeparation, y * ll + verticalLineSeparation / 2), (x * horizontalLineSeparation, (y + 1) * ll - verticalLineSeparation / 2), parent) + + else: + for y in range(-1, linesPerColumn): + incy = ll / 2 + + y0 = y * ll + verticalLineSeparation / 2 + incy + if y0 < 0: + y0 = -1 + + y1 = (y + 1) * ll - verticalLineSeparation / 2 + incy + + if y1 > height: + y1 = height + 1 + + self.draw_SVG_line((x * horizontalLineSeparation, y0), (x * horizontalLineSeparation, y1), parent) + + +effect = BendWoodCutsPattern() +effect.affect() diff --git a/fablabchemnitz_longest_continuous_paths.inx b/fablabchemnitz_longest_continuous_paths.inx new file mode 100644 index 0000000..61ce0a9 --- /dev/null +++ b/fablabchemnitz_longest_continuous_paths.inx @@ -0,0 +1,25 @@ + + + <_name>Longest Continuous Path + fablabchemnitz.de.optimize_paths + fablabchemnitz_longest_continuous_paths.py + inkex.py + 0.10 + + Allow + Allow some + Allow none + + false + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_longest_continuous_paths.py b/fablabchemnitz_longest_continuous_paths.py new file mode 100644 index 0000000..b5f74f4 --- /dev/null +++ b/fablabchemnitz_longest_continuous_paths.py @@ -0,0 +1,620 @@ +#!/usr/bin/env python +''' +Copyright (C) 2017 Romain Testuz + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St Fifth Floor, Boston, MA 02139 +''' +import inkex, simplepath, simplestyle +import sys +import math +import random +import colorsys +import os +import numpy +import timeit +#Trick to allow placing symbolic links in the inkscape extension folder +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +import networkx as nx + +MAX_CONSECUTIVE_OVERWRITE_EDGE = 3 +STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO = 3 +OVERWRITE_ALLOW = 0 +OVERWRITE_ALLOW_SOME = 1 +OVERWRITE_ALLOW_NONE = 2 + + +""" +class Graph: + def __init__(self): + self.__adj = {} + self.__data = {} + + def __str__(self): + return str(self.__adj) + + def nodes(self): + nodes = [] + for n in self.__adj: + nodes.append(n) + return nodes + + def edges(self): + edges = [] + for n1 in self.__adj: + for n2 in self.neighbours(n1): + if((n2, n1) not in edges): + edges.append((n1, n2)) + return edges + + def node(self, n): + if n in self.__adj: + return self.__data[n] + else: + raise ValueError('Inexistant node') + + def neighbours(self, n): + if n in self.__adj: + return self.__adj[n] + else: + raise ValueError('Inexistant node') + + def outEdges(self, n): + edges = [] + for n2 in self.neighbours(n): + edges.append((n, n2)) + return edges + + def degree(self, n): + if n in self.__adj: + return len(self.__adj[n]) + else: + raise ValueError('Inexistant node') + + def addNode(self, n, data): + if n not in self.__adj: + self.__adj[n] = [] + self.__data[n] = data + else: + raise ValueError('Node already exists') + + def removeNode(self, n): + if n in self.__adj: + #Remove all edges pointing to node + for n2 in self.__adj: + neighbours = self.__adj[n2] + if n in neighbours: + neighbours.remove(n) + del self.__adj[n] + del self.__data[n] + else: + raise ValueError('Removing inexistant node') + + def addEdge(self, n1, n2): + if(n1 in self.__adj and n2 in self.__adj): + self.__adj[n1].append(n2) + self.__adj[n2].append(n1) + else: + raise ValueError('Adding edge to inexistant node') + + def removeEdge(self, n1, n2): + if(n1 in self.__adj and n2 in self.__adj and + n2 in self.__adj[n1] and n1 in self.__adj[n2]): + self.__adj[n1].remove(n2) + self.__adj[n2].remove(n1) + else: + raise ValueError('Removing inexistant edge') + + def __sortedEdgesByAngle(self, previousEdge, edges): + previousEdgeVectNormalized = numpy.array(self.node(previousEdge[1])) - numpy.array(self.node(previousEdge[0])) + previousEdgeVectNormalized = previousEdgeVectNormalized/numpy.linalg.norm(previousEdgeVectNormalized) + #previousEdgeVectNormalized = numpy.array((0,1)) + def angleKey(outEdge): + edgeVectNormalized = numpy.array(self.node(outEdge[1])) - numpy.array(self.node(outEdge[0])) + edgeVectNormalized = edgeVectNormalized/numpy.linalg.norm(edgeVectNormalized) + return -numpy.dot(previousEdgeVectNormalized, edgeVectNormalized) + + return sorted(edges, key=angleKey) + + def dfsEdges(self): + nodes = self.nodes() + visitedEdges = set() + visitedNodes = set() + edges = {} + dfsEdges = [] + + for startNode in nodes: + #if self.degree(startNode) != 1: + #continue#Makes sure we don't start in the middle of a path + stack = [startNode] + prevEdge = None + while stack: + currentNode = stack[-1] + if currentNode not in visitedNodes: + edges[currentNode] = self.outEdges(currentNode) + visitedNodes.add(currentNode) + + if edges[currentNode]: + if(prevEdge): + edges[currentNode] = self.__sortedEdgesByAngle(prevEdge, edges[currentNode]) + edge = edges[currentNode][0] + if edge not in visitedEdges and (edge[1], edge[0]) not in visitedEdges: + visitedEdges.add(edge) + # Mark the traversed "to" node as to-be-explored. + stack.append(edge[1]) + dfsEdges.append(edge) + prevEdge = edge + edges[currentNode].pop(0) + else: + # No more edges from the current node. + stack.pop() + prevEdge = None + + return dfsEdges +""" + + +class OptimizePaths(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-t", "--tolerance", + action="store", type="float", + dest="tolerance", default=0.1, + help="the distance below which 2 nodes will be merged") + self.OptionParser.add_option("-l", "--enableLog", + action="store", type="inkbool", + dest="enableLog", default=False, + help="Enable logging") + self.OptionParser.add_option("-o", "--overwriteRule", + action="store", type="int", + dest="overwriteRule", default=1, + help="Options to control edge overwrite rules") + + def parseSVG(self): + vertices = [] + edges = [] + + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + path = simplepath.parsePath(d) + startVertex = previousVertex = None + + for command, coords in path: + tcoords = tuple(coords) + if command == 'M': + vertices.append(tcoords) + startVertex = previousVertex = len(vertices)-1 + elif command == 'L': + vertices.append(tcoords) + currentVertex = len(vertices)-1 + edges.append((previousVertex, currentVertex)) + previousVertex = currentVertex + elif command == 'Z': + edges.append((previousVertex, startVertex)) + previousVertex = startVertex + elif (command == 'C' or command == 'S' or command == 'Q' or + command == 'T' or command == 'A'): + endCoords = (tcoords[-2], tcoords[-1]) + vertices.append(endCoords) + currentVertex = len(vertices)-1 + edges.append((previousVertex, currentVertex)) + previousVertex = currentVertex + else: + inkex.debug("This extension only works with paths and currently doesn't support groups") + + return (vertices, edges) + + def buildGraph(self, vertices, edges): + G = nx.Graph() + for i, v in enumerate(vertices): + G.add_node(i, x=v[0], y=v[1]) + #self.log("N "+ str(i) + " (" + str(v[0]) + "," + str(v[1]) + ")") + for e in edges: + G.add_edge(*e) + #self.log("E "+str(e[0]) + " " + str(e[1])) + return G + + @staticmethod + def dist(a, b): + return math.sqrt( (a['x'] - b['x'])**2 + (a['y'] - b['y'])**2 ) + + def log(self, message): + if(self.options.enableLog): + inkex.debug(message) + + def mergeWithTolerance(self, G, tolerance): + mergeTo = {} + for ni in G.nodes(): + for nj in G.nodes(): + if nj <= ni : + continue + #self.log("Test " + str(ni) + " with " + str(nj)) + dist_ij = self.dist(G.nodes[ni], G.nodes[nj]) + if (dist_ij < tolerance) and (nj not in mergeTo) and (ni not in mergeTo): + self.log("Merge " + str(nj) + " with " + str(ni) + " (dist="+str(dist_ij)+")") + mergeTo[nj] = ni + + for n in mergeTo: + newEdges = [] + for neigh_n in G[n]: + newEdge = None + if neigh_n in mergeTo: + newEdge = (mergeTo[n], mergeTo[neigh_n]) + else: + newEdge = (mergeTo[n], neigh_n) + + if newEdge[0] != newEdge[1]:#Don't add self-loops + newEdges.append(newEdge) + + for e in newEdges: + G.add_edge(*e) + #self.log("Added edge: "+str(e[0]) + " " + str(e[1])) + G.remove_node(n) + #self.log("Removed node: " + str(n)) + + @staticmethod + def rgbToHex(rgb): + return '#%02x%02x%02x' % rgb + + #Color should be in hex format ("#RRGGBB"), if not specified a random color will be generated + def addPathToInkscape(self, path, parent, color): + style = "stroke:"+color+";stroke-width:2;fill:none;" + attribs = {'style': style, 'd': simplepath.formatPath(path) } + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), attribs ) + + def removeSomeEdges(self, G, edges): + visitedEdges = set() + + #Contains a list of [start, end] where start is the start index of a duplicate path + #and end is the end index of the duplicate path + edgeRangeToRemove = [] + isPrevEdgeDuplicate = False + duplicatePathStartIndex = -1 + for i,e in enumerate(edges): + isEdgeDuplicate = e in visitedEdges or (e[1],e[0]) in visitedEdges + + if isEdgeDuplicate: + if duplicatePathStartIndex == -1: + duplicatePathStartIndex = i + else: + if duplicatePathStartIndex >= 0: + edgeRangeToRemove.append((duplicatePathStartIndex, i-1)) + duplicatePathStartIndex = -1 + + visitedEdges.add(e) + + if isEdgeDuplicate and i == len(edges)-1: + edgeRangeToRemove.append((duplicatePathStartIndex, i)) + + if self.options.overwriteRule == OVERWRITE_ALLOW: + #The last duplicate path can allways be removed + edgeRangeToRemove = [edgeRangeToRemove[-1]] if edgeRangeToRemove else [] + elif self.options.overwriteRule == OVERWRITE_ALLOW_SOME: #Allow overwrite except for long paths + edgeRangeToRemove = [x for x in edgeRangeToRemove if x[1]-x[0] > MAX_CONSECUTIVE_OVERWRITE_EDGE] + + indicesToRemove = set() + for start, end in edgeRangeToRemove: + indicesToRemove.update(range(start, end+1)) + + cleanedEdges = [e for i, e in enumerate(edges) if i not in indicesToRemove] + + return cleanedEdges + + #Find the first break and rotate the edges to align to this break + #this allows to avoid an extra path + #Return the rotated edges + def shiftEdgesToBreak(self, edges): + if not edges: + return edges + #Only useful if the last edge connects to the first + if edges[0][0] != edges[-1][1]: + return edges + + for i,e in enumerate(edges): + if i == 0: + continue + if edges[i-1][1] != e[0]: + return edges[i:] + edges[:i] + + return edges + + def edgesToPaths(self, edges): + paths = [] + path = [] + + for i,e in enumerate(edges): + if e[0] == -1: + assert not path + elif e[1] == -1: + if path: + paths.append(path) + path = [] + + else: + #Path ends either at the last edge or when the next edge starts somewhere else + endPath = (i == len(edges)-1 or e[1] != edges[i+1][0]) + + if(not path): + path.append(e[0]) + path.append(e[1]) + else: + path.append(e[1]) + + if endPath: + paths.append(path) + path = [] + + if self.options.overwriteRule == OVERWRITE_ALLOW: + assert len(paths) == 1 + + #paths.sort(key=len, reverse=True) + return paths + + def pathsToSVG(self, G, paths): + svgPaths = [] + for path in paths: + svgPath = [] + for nodeIndex, n in enumerate(path): + command = None + if nodeIndex == 0: + command = 'M' + else: + command = 'L' + svgPath.append([command, (G.nodes[n]['x'], G.nodes[n]['y'])]) + svgPaths.append(svgPath) + + #Create a group + parent = inkex.etree.SubElement(self.current_layer, inkex.addNS('g','svg')) + + for pathIndex, svgPath in enumerate(svgPaths): + #Generate a different color for every path + color = colorsys.hsv_to_rgb(pathIndex/float(len(svgPaths)), 1.0, 1.0) + color = tuple(x * 255 for x in color) + color = self.rgbToHex( color ) + self.addPathToInkscape(svgPath, parent, color) + + #Computes the physical path length (it ignores the edge weight) + def pathLength(self, G, path): + length = 0.0 + for i,n in enumerate(path): + if i > 0: + length += self.dist(G.nodes[path[i-1]], G.nodes[path[i]]) + return length + + #Eulerization algorithm: + #1. Find all vertices with odd valence. + #2. Pair them up with their nearest neighbor. + #3. Find the shortest path between each pair. + #4. Duplicate these edges. + #Doesn't modify input graph except compute edge weight + def makeEulerianGraph(self, G): + oddNodes = [] + for n in G.nodes: + if G.degree(n) % 2 != 0: + oddNodes.append(n) + #self.log("Number of nodes with odd degree: " + str(len(oddNodes))) + + if len(oddNodes) == 0: + return G + + self.computeEdgeWeights(G) + + pathsToDuplicate = [] + + while(oddNodes): + n1 = oddNodes[0] + + shortestPaths = [] + #For every other node, find the shortest path to the closest node + for n2 in oddNodes: + if n2 != n1: + #self.log(str(n1) + " " + str(n2)) + shortestPath = nx.astar_path(G, n1, n2, + lambda n1, n2: self.dist(G.nodes[n1], G.nodes[n2]), 'weight') + #self.log(str(len(shortestPath))) + shortestPaths.append(shortestPath) + if len(shortestPath) <= STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO: + #If we find a path of length <= STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO, + #we assume it's good enough (to speed up calculation) + break + #For all the shortest paths from n1, we take the shortest one and therefore get the closest odd node + shortestShortestPath = min(shortestPaths, key=lambda x: self.pathLength(G, x)) + closestNode = shortestShortestPath[-1] + pathsToDuplicate.append(shortestShortestPath) + oddNodes.pop(0) + oddNodes.remove(closestNode) + + numberOfDuplicatedEdges = 0 + lenghtOfDuplicatedEdges = 0.0 + + for path in pathsToDuplicate: + numberOfDuplicatedEdges += len(path)-1 + pathLength = self.pathLength(G, path) + #self.log("Path length: " + str(pathLength)) + lenghtOfDuplicatedEdges += pathLength + #self.log("Number of duplicated edges: " + str(numberOfDuplicatedEdges)) + #self.log("Length of duplicated edges: " + str(lenghtOfDuplicatedEdges)) + + #Convert the graph to a MultiGraph to allow parallel edges + G2 = nx.MultiGraph(G) + for path in pathsToDuplicate: + nx.add_path(G2, path) + + return G2 + + #Doesn't modify input graph + #faster than makeEulerianGraph but creates an extra node + def makeEulerianGraphExtraNode(self, G): + oddNodes = [] + for n in G.nodes: + if G.degree(n) % 2 != 0: + oddNodes.append(n) + if len(oddNodes) == 0: + return G + + G2 = nx.Graph(G) + G2.add_node(-1, x=0, y=0) + for n in oddNodes: + G2.add_edge(n, -1) + + return G2 + + + def computeEdgeWeights(self,G): + for n1,n2 in G.edges(): + dist = self.dist(G.nodes[n1], G.nodes[n2]) + G.add_edge(n1,n2,weight=dist) + + def _getNodePosition(self, G, n): + return (G.nodes[n]['x'], G.nodes[n]['y']) + + def _getBestEdge(self, G, previousEdge, edges): + previousEdgeVectNormalized = numpy.array(self._getNodePosition(G,previousEdge[1])) - numpy.array(self._getNodePosition(G,previousEdge[0])) + #self.log(str(numpy.linalg.norm(previousEdgeVectNormalized)) + " " + str(previousEdge[1]) + " " + str(previousEdge[0])) + previousEdgeVectNormalized = previousEdgeVectNormalized/numpy.linalg.norm(previousEdgeVectNormalized) + #previousEdgeVectNormalized = numpy.array((0,1)) + def angleKey(outEdge): + edgeVectNormalized = numpy.array(self._getNodePosition(G,outEdge[1])) - numpy.array(self._getNodePosition(G,outEdge[0])) + edgeVectNormalized = edgeVectNormalized/numpy.linalg.norm(edgeVectNormalized) + return numpy.dot(previousEdgeVectNormalized, edgeVectNormalized) + + return max(edges, key=angleKey) + + """def eulerian_circuit(self, G): + g = G.__class__(G)#G.copy() + v = next(g.nodes()) + + degree = g.degree + edges = g.edges + + circuit = [] + vertex_stack = [v] + last_vertex = None + while vertex_stack: + current_vertex = vertex_stack[-1] + if degree(current_vertex) == 0: + if last_vertex is not None: + circuit.append((last_vertex, current_vertex)) + self.log(str(last_vertex) + " " + str(current_vertex)) + last_vertex = current_vertex + vertex_stack.pop() + else: + if circuit: + arbitrary_edge = self._getBestEdge(g, circuit[-1], edges(current_vertex)) + else:#For the first iteration we arbitrarily take the first edge + arbitrary_edge = next(edges(current_vertex)) + #self.log(str(arbitrary_edge) + "::" + str(edges[current_vertex])) + + #self.log(str(edges[current_vertex])) + #self.log(" ") + + vertex_stack.append(arbitrary_edge[1]) + g.remove_edge(*arbitrary_edge) + + return circuit""" + + #Walk as straight as possible from node until stuck + def walk(self, node, G): + n = node + e = None + path = [n] + + while G.degree[n]:#Continue until there no unvisited edges from n + if e: + e = self._getBestEdge(G, e, G.edges(n)) + else:#For the first iteration we arbitrarily take the first edge + e = (n, next(iter(G[n]))) + n = e[1] + G.remove_edge(*e) + path.append(n) + + return path + + def eulerian_circuit_hierholzer(self, G): + g = G.copy() + v = next(iter(g.nodes))#First vertex, arbitrary + + cycle = self.walk(v, g) + assert cycle[0] == cycle[-1] + notvisited = set(cycle) + + while len(notvisited) != 0: + v = notvisited.pop() + if g.degree(v) != 0: + i = cycle.index(v) + sub = self.walk(v, g) + assert sub[0] == sub[-1] + cycle = cycle[:i]+sub[:-1]+cycle[i:] + notvisited.update(sub) + + cycleEdges = [] + prevNode = None + for n in cycle: + if prevNode != None: + cycleEdges.append((prevNode, n)) + prevNode = n + return cycleEdges + + def effect(self): + if int(nx.__version__[0]) < 2: + inkex.debug("NetworkX version is: {} but should be >= 2.0.".format(nx.__version__)) + return + + totalTimerStart = timeit.default_timer() + (vertices, edges) = self.parseSVG() + G = self.buildGraph(vertices, edges) + + timerStart = timeit.default_timer() + self.mergeWithTolerance(G, self.options.tolerance) + timerStop = timeit.default_timer() + mergeDuration = timerStop-timerStart + + """for e in G.edges(): + self.log("E "+str(e[0]) + " " + str(e[1])) + for n in G.nodes(): + self.log("Degree of "+str(n) + ": " + str(G.degree(n)))""" + #Split disjoint graphs + connectedGraphs = list(nx.connected_component_subgraphs(G)) + self.log("Number of disconnected graphs: " + str(len(connectedGraphs))) + + paths = [] + makeEulerianDuration = 0 + for connectedGraph in connectedGraphs: + timerStart = timeit.default_timer() + if self.options.overwriteRule == OVERWRITE_ALLOW_NONE: + connectedGraph = self.makeEulerianGraphExtraNode(connectedGraph) + else: + connectedGraph = self.makeEulerianGraph(connectedGraph) + timerStop = timeit.default_timer() + makeEulerianDuration += timerStop-timerStart + #connectedGraph is now likely a multigraph + + pathEdges = self.eulerian_circuit_hierholzer(connectedGraph) + pathEdges = self.removeSomeEdges(connectedGraph, pathEdges) + pathEdges = self.shiftEdgesToBreak(pathEdges) + paths.extend(self.edgesToPaths(pathEdges)) + + self.log("Path number: " + str(len(paths))) + self.log("Total path length: " + str(sum(self.pathLength(G, x) for x in paths))) + + self.pathsToSVG(G, paths) + totalTimerStop = timeit.default_timer() + totalDuration = totalTimerStop-totalTimerStart + self.log("Merge duration: {:f} sec ({:f} min)".format(mergeDuration, mergeDuration/60)) + self.log("Make Eulerian duration: {:f} sec ({:f} min)".format(makeEulerianDuration, makeEulerianDuration/60)) + self.log("Total duration: {:f} sec ({:f} min)".format(totalDuration, totalDuration/60)) + +e = OptimizePaths() +e.affect() diff --git a/fablabchemnitz_lyz_export.inx b/fablabchemnitz_lyz_export.inx new file mode 100644 index 0000000..fca6210 --- /dev/null +++ b/fablabchemnitz_lyz_export.inx @@ -0,0 +1,48 @@ + + + <_name>LaserDraw LYZ Export + fablabchemnitz.de.lyz_export + org.inkscape.output.svg.inkscape + inkex.py + simplestyle.py + simpletransform.py + cubicsuperpath.py + cspsubdiv.py + fablabchemnitz_lyz_library.py + + <_param name="texthelp" type="description"> + Formating can be used to break a design into separate + cutting and engraving files. Red lines indicate cutting, + blue lines indicate engraving, black indicates raster + engraving. + + + + + + + + 1000 + 2.0 + false + + 0.92 or Newer + 0.91 or Older + + + .lyz + image/lyz + <_filetypename>Laser Draw LYZ (*.lyz) + <_filetypetooltip>LaserDraw LYZ Output + TRUE + + + \ No newline at end of file diff --git a/fablabchemnitz_lyz_export.py b/fablabchemnitz_lyz_export.py new file mode 100644 index 0000000..68fff91 --- /dev/null +++ b/fablabchemnitz_lyz_export.py @@ -0,0 +1,560 @@ +#!/usr/bin/env python +''' +This file output script for Inkscape creates Laser Draw (LaserDRW) LYZ files. + +File history: +0.1 Initial code (2/5/2017) +0.2 - Added support for rectangle, circle and ellipse (2/7/2017) + - Added option to automatically convert text to paths +0.3 - Fixed x,y translation when view box is used in SVG file for scaling (2/10/2017) +0.4 - Changed limits in resolution to 100 dpi minimum and 1000 dpi maximum (if you get an out of memory error in LaserDRW try reducing the resolution) +0.5 - Removed some messages that were not needed + - Fixed default resolution in inx files + +Copyright (C) 2017 Scorch www.scorchworks.com +Derived from dxf_outlines.py by Aaron Spike and Alvin Penner + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +# standard library +import math +import tempfile, os, sys, shutil +from subprocess import Popen, PIPE +import zipfile +import re +# local library +import inkex +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +from fablabchemnitz_lyz_library import LYZ_CLASS + +try: + inkex.localize() +except: + pass + +## Subprocess timout stuff ###### +from threading import Timer +def run_external(cmd, timeout_sec): + proc = Popen(cmd, stdout=PIPE, stderr=PIPE) + kill_proc = lambda p: p.kill() + timer = Timer(timeout_sec, kill_proc, [proc]) + try: + timer.start() + stdout,stderr = proc.communicate() + finally: + timer.cancel() +################################## + +class MyEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.flatness = 0.01 + self.lines =[] + self.Cut_Type = {} + self.Xsize=40 + self.Ysize=40 + self.margin = 2 + self.PNG_DATA = None + self.png_area = "--export-area-page" + self.timout = 60 #timeout time for external calls to Inkscape in seconds + + self.OptionParser.add_option("--area_select" , action="store", type="string" , dest="area_select" , default="page_area" ) + self.OptionParser.add_option("--cut_select" , action="store", type="string" , dest="cut_select" , default="zip" ) + self.OptionParser.add_option("--resolution" , action="store", type="int" , dest="resolution" , default=1000 ) + self.OptionParser.add_option("--margin" , action="store", type="float" , dest="margin" , default=2.00 ) + self.OptionParser.add_option("--inkscape_dpi", action="store", type="float" , dest="inkscape_dpi" , default=96.0 ) + self.OptionParser.add_option("--txt2paths" , action="store", type="inkbool" , dest="txt2paths" , default=False ) + + self.layers = ['0'] + self.layer = '0' + self.layernames = [] + + + def stream_binary_data(self,filename): + # Change the format for STDOUT to binary to support + # writing the binary output file through STDOUT + if os.name == 'nt': #if sys.platform == "win32": + try: + import msvcrt + #msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + msvcrt.setmode(1, os.O_BINARY) + except: + pass + # Open the temporary file for reading + out = open(filename,'rb') + # Send the contents of the temp file to STDOUT + sys.stdout.write(out.read()) + out.close() + + + def output(self): + #create OS temp folder + self.tmp_dir = tempfile.mkdtemp() + + if (self.cut_select=="image" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + image_file = os.path.join(self.tmp_dir, "image.lyz") + LYZ.write_file(image_file) + + if (self.cut_select=="all" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="cut") or (self.Cut_Type[ID]=="engrave"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + all_file = os.path.join(self.tmp_dir, "all.lyz") + LYZ.write_file(all_file) + + if (self.cut_select=="raster" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + raster_file = os.path.join(self.tmp_dir, "01_raster_engrave.lyz") + LYZ.write_file(raster_file) + + if (self.cut_select=="vector_red" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="cut"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + cut_file = os.path.join(self.tmp_dir, "03_vector_cut.lyz") + LYZ.write_file(cut_file) + + if (self.cut_select=="vector_blue" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="engrave"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + engrave_file = os.path.join(self.tmp_dir, "02_vector_engrave.lyz") + LYZ.write_file(engrave_file) + + if (self.cut_select=="image" ): + self.stream_binary_data(image_file) + + if (self.cut_select=="all" ): + self.stream_binary_data(all_file) + + if (self.cut_select=="raster" ): + self.stream_binary_data(raster_file) + + if (self.cut_select=="vector_red" ): + self.stream_binary_data(cut_file) + + if (self.cut_select=="vector_blue"): + self.stream_binary_data(engrave_file) + + if (self.cut_select=="zip" ): + # Add image LYZ file? Encode zip file names? + zip_file = os.path.join(self.tmp_dir, "lyz_files.zip") + z = zipfile.ZipFile(zip_file, 'w') + z.write(all_file , os.path.basename(all_file) ) + z.write(raster_file , os.path.basename(raster_file) ) + z.write(cut_file , os.path.basename(cut_file) ) + z.write(engrave_file, os.path.basename(engrave_file)) + z.write(sys.argv[-1], "design.svg" ) + z.close() + self.stream_binary_data(zip_file) + + #Delete the temp folder and file + shutil.rmtree(self.tmp_dir) + + def dxf_line(self,csp,pen_width=0.025,color=None,path_id="",layer="none"): + x1 = csp[0][0] + y1 = csp[0][1] + x2 = csp[1][0] + y2 = csp[1][1] + self.lines.append([x1,-y1,x2,-y2,layer,pen_width,color,path_id]) + + def colmod(self,r,g,b,path_id): + if (r,g,b) ==(255,0,0): + self.Cut_Type[path_id]="cut" + (r,g,b) = (255,255,255) + elif (r,g,b)==(0,0,255): + self.Cut_Type[path_id]="engrave" + (r,g,b) = (255,255,255) + else: + self.Cut_Type[path_id]="raster" + (r,g,b) = (0,0,0) + + return '%02x%02x%02x' % (r,g,b) + + def process_shape(self, node, mat): + rgb = (0,0,0) + path_id = node.get('id') + style = node.get('style') + self.Cut_Type[path_id]="raster" # Set default type to raster + + color_props_fill = ('fill', 'stop-color', 'flood-color', 'lighting-color') + color_props_stroke = ('stroke',) + color_props = color_props_fill + color_props_stroke + + ##################################################### + ## The following is ripped off from Coloreffect.py ## + ##################################################### + if style: + declarations = style.split(';') + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, col) = parts + prop = prop.strip().lower() + #if prop in color_props: + if prop == 'stroke': + col= col.strip() + if simplestyle.isColor(col): + c=simplestyle.parseColor(col) + new_val='#'+self.colmod(c[0],c[1],c[2],path_id) + else: + new_val = col + if new_val != col: + declarations[i] = prop + ':' + new_val + node.set('style', ';'.join(declarations)) + + ##################################################### + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + if not d: + return + p = cubicsuperpath.parsePath(d) + elif node.tag == inkex.addNS('rect','svg'): + x = float(node.get('x')) + y = float(node.get('y')) + width = float(node.get('width')) + height = float(node.get('height')) + #d = "M %f,%f %f,%f %f,%f %f,%f Z" %(x,y, x+width,y, x+width,y+height, x,y+height) + #p = cubicsuperpath.parsePath(d) + rx = 0.0 + ry = 0.0 + if node.get('rx'): + rx=float(node.get('rx')) + if node.get('ry'): + ry=float(node.get('ry')) + + if max(rx,ry) > 0.0: + if rx==0.0 or ry==0.0: + rx = max(rx,ry) + ry = rx + #msg = "rx = %f ry = %f " %(rx,ry) + #inkex.errormsg(_(msg)) + L1 = "M %f,%f %f,%f " %(x+rx , y , x+width-rx , y ) + C1 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+width , y+ry ) + L2 = "M %f,%f %f,%f " %(x+width , y+ry , x+width , y+height-ry) + C2 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+width-rx , y+height ) + L3 = "M %f,%f %f,%f " %(x+width-rx , y+height , x+rx , y+height ) + C3 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x , y+height-ry) + L4 = "M %f,%f %f,%f " %(x , y+height-ry, x , y+ry ) + C4 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+rx , y ) + d = L1 + C1 + L2 + C2 + L3 + C3 + L4 + C4 + else: + d = "M %f,%f %f,%f %f,%f %f,%f Z" %(x,y, x+width,y, x+width,y+height, x,y+height) + p = cubicsuperpath.parsePath(d) + + elif node.tag == inkex.addNS('circle','svg'): + cx = float(node.get('cx') ) + cy = float(node.get('cy')) + r = float(node.get('r')) + d = "M %f,%f A %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f Z" %(cx+r,cy, r,r,cx,cy+r, r,r,cx-r,cy, r,r,cx,cy-r, r,r,cx+r,cy) + p = cubicsuperpath.parsePath(d) + + elif node.tag == inkex.addNS('ellipse','svg'): + cx = float(node.get('cx')) + cy = float(node.get('cy')) + rx = float(node.get('rx')) + ry = float(node.get('ry')) + d = "M %f,%f A %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f Z" %(cx+rx,cy, rx,ry,cx,cy+ry, rx,ry,cx-rx,cy, rx,ry,cx,cy-ry, rx,ry,cx+rx,cy) + p = cubicsuperpath.parsePath(d) + else: + return + trans = node.get('transform') + if trans: + mat = simpletransform.composeTransform(mat, simpletransform.parseTransform(trans)) + simpletransform.applyTransformToPath(mat, p) + + ################################################### + ## Break Curves down into small lines + ################################################### + f = self.flatness + is_flat = 0 + while is_flat < 1: + try: + cspsubdiv.cspsubdiv(p, f) + is_flat = 1 + except IndexError: + break + except: + f += 0.1 + if f>2 : + break + #something has gone very wrong. + ################################################### + for sub in p: + for i in range(len(sub)-1): + s = sub[i] + e = sub[i+1] + self.dxf_line([s[1],e[1]],0.025,rgb,path_id) + + + def process_clone(self, node): + trans = node.get('transform') + x = node.get('x') + y = node.get('y') + mat = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + if trans: + mat = simpletransform.composeTransform(mat, simpletransform.parseTransform(trans)) + if x: + mat = simpletransform.composeTransform(mat, [[1.0, 0.0, float(x)], [0.0, 1.0, 0.0]]) + if y: + mat = simpletransform.composeTransform(mat, [[1.0, 0.0, 0.0], [0.0, 1.0, float(y)]]) + # push transform + if trans or x or y: + self.groupmat.append(simpletransform.composeTransform(self.groupmat[-1], mat)) + # get referenced node + refid = node.get(inkex.addNS('href','xlink')) + refnode = self.getElementById(refid[1:]) + if refnode is not None: + if refnode.tag == inkex.addNS('g','svg'): + self.process_group(refnode) + elif refnode.tag == inkex.addNS('use', 'svg'): + self.process_clone(refnode) + else: + self.process_shape(refnode, self.groupmat[-1]) + # pop transform + if trans or x or y: + self.groupmat.pop() + + def process_group(self, group): + if group.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + style = group.get('style') + if style: + style = simplestyle.parseStyle(style) + if style.has_key('display'): + if style['display'] == 'none' and self.options.layer_option and self.options.layer_option=='visible': + return + layer = group.get(inkex.addNS('label', 'inkscape')) + + layer = layer.replace(' ', '_') + if layer in self.layers: + self.layer = layer + trans = group.get('transform') + if trans: + self.groupmat.append(simpletransform.composeTransform(self.groupmat[-1], simpletransform.parseTransform(trans))) + for node in group: + if node.tag == inkex.addNS('g','svg'): + self.process_group(node) + elif node.tag == inkex.addNS('use', 'svg'): + self.process_clone(node) + else: + self.process_shape(node, self.groupmat[-1]) + if trans: + self.groupmat.pop() + + + def Make_PNG(self): + #create OS temp folder + tmp_dir = tempfile.mkdtemp() + svg_temp_file = os.path.join(tmp_dir, "LYZimage.svg") + png_temp_file = os.path.join(tmp_dir, "LYZpngdata.png") + + dpi = "%d" %(self.options.resolution) + if (self.cut_select=="raster") or (self.cut_select=="all") or (self.cut_select=="zip"): + self.document.write(svg_temp_file) + cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, "--export-background","rgb(255, 255, 255)","--export-background-opacity", "255" ,"--export-png", png_temp_file, svg_temp_file ] + + #p = Popen(cmd, stdout=PIPE, stderr=PIPE) + #stdout, stderr = p.communicate() + run_external(cmd, self.timout) + else: + shutil.copyfile(sys.argv[-1], svg_temp_file) + cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, "--export-background","rgb(255, 255, 255)","--export-background-opacity", "255" ,"--export-png", png_temp_file, svg_temp_file ] + #p = Popen(cmd, stdout=PIPE, stderr=PIPE) + #stdout, stderr = p.communicate() + run_external(cmd, self.timout) + try: + with open(png_temp_file, 'rb') as f: + self.PNG_DATA = f.read() + except: + inkex.errormsg(_("PNG generation timed out.\nTry saving again.\n\n")) + + #Delete the temp folder and any files + shutil.rmtree(tmp_dir) + + def unit2mm(self, string): + # Returns mm given a string representation of units in another system + # a dictionary of unit to user unit conversion factors + uuconv = {'in': 25.4, + 'pt': 25.4/72.0, + 'px': 25.4/self.inkscape_dpi, + 'mm': 1.0, + 'cm': 10.0, + 'm' : 1000.0, + 'km': 1000.0*1000.0, + 'pc': 25.4/6.0, + 'yd': 25.4*12*3, + 'ft': 25.4*12} + + unit = re.compile('(%s)$' % '|'.join(uuconv.keys())) + param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + + p = param.match(string) + u = unit.search(string) + if p: + retval = float(p.string[p.start():p.end()]) + else: + inkex.errormsg(_("Size was not determined returning zero value")) + retval = 0.0 + if u: + retunit = u.string[u.start():u.end()] + else: + inkex.errormsg(_("units not understood assuming px at %d dpi" %(self.inkscape_dpi))) + retunit = 'px' + + try: + return retval * uuconv[retunit] + except KeyError: + return retval + + def effect(self): + + msg = "" + #area_select = self.options.area_select # "page_area", "object_area" + area_select = "page_area" + self.cut_select = self.options.cut_select # "vector_red", "vector_blue", "raster", "all", "image", "Zip" + self.margin = self.options.margin # float value + self.inkscape_dpi = self.options.inkscape_dpi # float value + self.txt2paths = self.options.txt2paths # boolean Value + + + if (self.txt2paths): + #create OS temp folder + tmp_dir = tempfile.mkdtemp() + txt2path_file = os.path.join(tmp_dir, "txt2path.svg") + cmd = [ "inkscape", "--export-text-to-path","--export-plain-svg",txt2path_file, sys.argv[-1] ] + run_external(cmd, self.timout) + self.document.parse(txt2path_file) + #Delete the temp folder and any files + shutil.rmtree(tmp_dir) + + try: + h_uu = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + w_uu = self.unittouu(self.document.getroot().xpath('@width' , namespaces=inkex.NSS)[0]) + except: + h_uu = inkex.unittouu(self.document.getroot().xpath('@height',namespaces=inkex.NSS)[0]) + w_uu = inkex.unittouu(self.document.getroot().xpath('@width',namespaces=inkex.NSS)[0]) + + h_mm = self.unit2mm(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + w_mm = self.unit2mm(self.document.getroot().xpath('@width', namespaces=inkex.NSS)[0]) + + try: + view_box_str = self.document.getroot().xpath('@viewBox', namespaces=inkex.NSS)[0] + view_box_list = view_box_str.split(' ') + Wpix = float(view_box_list[2]) + Hpix = float(view_box_list[3]) + scale = h_mm/Hpix + Dx = float(view_box_list[0]) / ( float(view_box_list[2])/w_mm ) + Dy = float(view_box_list[1]) / ( float(view_box_list[3])/h_mm ) + except: + #inkex.errormsg(_("Using Default Inkscape Scale")) + scale = 25.4/self.inkscape_dpi + Dx = 0 + Dy = 0 + + for node in self.document.getroot().xpath('//svg:g', namespaces=inkex.NSS): + if node.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + layer = node.get(inkex.addNS('label', 'inkscape')) + self.layernames.append(layer.lower()) + # if self.options.layer_name and self.options.layer_option and self.options.layer_option=='name' and not layer.lower() in self.options.layer_name: + # continue + layer = layer.replace(' ', '_') + if layer and not layer in self.layers: + self.layers.append(layer) + + #self.groupmat = [[[scale, 0.0, 0.0], [0.0, -scale, h_mm]]] + self.groupmat = [[[scale, 0.0, 0.0-Dx], + [0.0 , -scale, h_mm+Dy]]] + #doc = self.document.getroot() + self.process_group(self.document.getroot()) + ################################################# + + # msg = msg + self.getDocumentUnit() + "\n" + # msg = msg + "scale = %f\n" %(scale) + msg = msg + "Height(mm)= %f\n" %(h_mm) + msg = msg + "Width (mm)= %f\n" %(w_mm) + # msg = msg + "h_uu = %f\n" %(h_uu) + # msg = msg + "w_uu = %f\n" %(w_uu) + + #inkex.errormsg(_(msg)) + + if (area_select=="object_area"): + self.png_area = "--export-area-drawing" + xmin= self.lines[0][0]+0.0 + xmax= self.lines[0][0]+0.0 + ymin= self.lines[0][1]+0.0 + ymax= self.lines[0][1]+0.0 + for line in self.lines: + x1= line[0] + y1= line[1] + x2= line[2] + y2= line[3] + xmin = min(min(xmin,x1),x2) + ymin = min(min(ymin,y1),y2) + xmax = max(max(xmax,x1),x2) + ymax = max(max(ymax,y1),y2) + else: + self.png_area = "--export-area-page" + xmin= 0.0 + xmax= w_mm + ymin= -h_mm + ymax= 0.0 + + self.Xsize=xmax-xmin + self.Ysize=ymax-ymin + Xcenter=(xmax+xmin)/2.0 + Ycenter=(ymax+ymin)/2.0 + for ii in range(len(self.lines)): + self.lines[ii][0] = self.lines[ii][0]-Xcenter + self.lines[ii][1] = self.lines[ii][1]-Ycenter + self.lines[ii][2] = self.lines[ii][2]-Xcenter + self.lines[ii][3] = self.lines[ii][3]-Ycenter + + if (self.cut_select=="raster") or \ + (self.cut_select=="all" ) or \ + (self.cut_select=="image" ) or \ + (self.cut_select=="zip" ): + self.Make_PNG() + +if __name__ == '__main__': + e = MyEffect() + e.affect() diff --git a/fablabchemnitz_lyz_export_zip.inx b/fablabchemnitz_lyz_export_zip.inx new file mode 100644 index 0000000..fa6d334 --- /dev/null +++ b/fablabchemnitz_lyz_export_zip.inx @@ -0,0 +1,55 @@ + + + <_name>LaserDraw LYZ Export (zip) + fablabchemnitz.de.lyz_export.zip + org.inkscape.output.svg.inkscape + inkex.py + simplestyle.py + simpletransform.py + cubicsuperpath.py + cspsubdiv.py + fablabchemnitz_lyz_library.py + + <_param name="texthelp" type="description"> + Formating can be used to break a design into separate + cutting and engraving files. Red lines indicate cutting, + blue lines indicate engraving, black indicates raster + engraving. + + 1000 + 2.0 + false + + + 0.92 or Newer + 0.91 or Older + + + .zip + application/x-zip + <_filetypename>Laser Draw LYZ (ZIP)(*.zip) + <_filetypetooltip>LaserDraw LYZ Output Zipped + TRUE + + + \ No newline at end of file diff --git a/fablabchemnitz_lyz_library.py b/fablabchemnitz_lyz_library.py new file mode 100644 index 0000000..0dbf6c8 --- /dev/null +++ b/fablabchemnitz_lyz_library.py @@ -0,0 +1,439 @@ +#!/usr/bin/env python +''' +This script reads and writes Laser Draw (LaserDRW) LYZ files. + +File history: +0.1 Initial code (2/5/2017) + +Copyright (C) 2017 Scorch www.scorchworks.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import struct +import sys +import os +from time import time +from shutil import copyfile + +############################################################################## +def show(byte_in): + print "%03d" %ord(byte_in), + + +def possible_values(loc,len,type,bf): + cur= bf.tell() + vals="" + if type=='d' or type=='Q' or type=='>d' or type=='>Q': + tl=8 + elif type=='i' or type=='f' or type=='l' or type=='L' or type=='I': + tl=4 + elif type=='>i' or type=='>f' or type=='>l' or type=='>L' or type=='>I': + tl=4 + elif type=='h' or type=='H' or type=='>h' or type=='>H': + tl=2 + + for i in range(tl): + for j in range(i,(len-tl+1),tl): + bf.seek(loc+j) + vals = vals + "\t"+ str( struct.unpack(type,bf.read(tl))[0] ) + vals = vals+"\n" + bf.seek(cur) + return vals +############################################################################## + + +class LYZ_CLASS: + def __init__(self): + # DEFINE HEADER FIELDS + self.header_fields = [] + + self.header_data = [] + self.feature_list = [] + self.left_over = "" + self.EOF = "" + + ########################## Description ,location,length,type,default value + self.header_fields.append(["EXTENSION" , 9999999, 4, 't', ".LYZ" ]) #0 + self.header_fields.append(["LENGTH" , 9999999, 4, 'i', 221 ]) #1 + self.header_fields.append(["N FEATURES" , 9999999, 4, 'i', 0 ]) #2 + self.header_fields.append(["?A(4)" , 9999999, 4, 'i', 0 ]) #3 + self.header_fields.append(["CREATOR" , 9999999, 50, 't',"Creater: LaserDraw.exe(Lihuiyu software Co., Ltd.)"]) #4 + self.header_fields.append(["?B(14)" , 9999999, 14, 'z',[0,0,0,0,0,0,0,0,0,2,0,0,0,128] ]) #5 + self.header_fields.append(["DESC" , 9999999, 37, 't',"Description: LaserDraw Graphics File."]) #6 + self.header_fields.append(["?C(1)" , 9999999, 1, 'z', [0] ]) #7 + self.header_fields.append(["?D(1)" , 9999999, 1, 'z', [0] ]) #8 + self.header_fields.append(["Time(8)" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) #9 + self.header_fields.append(["TIME(8)" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) #10 + self.header_fields.append(["?G(8)" , 9999999, 4, 'z', [0,0,0,0] ]) #11 + self.header_fields.append(["?H(8)" , 9999999, 4, 'z', [0,0,0,0] ]) #12 + self.header_fields.append(["?I(18)" , 9999999, 18, 'z', [176,8,210,125,0,65,206,0,0,19,17,126,0,36,35,23,0,2] ]) #13 + self.header_fields.append(["OFFSET" , 9999999, 8, 'd', 0.0 ]) #14 #was 84 + self.header_fields.append(["X SIZE" , 9999999, 8, 'd', 42.0 ]) #15 + self.header_fields.append(["Y SIZE" , 9999999, 8, 'd', 42.0 ]) #16 + self.header_fields.append(["BORDER1" , 9999999, 8, 'd', 1.0 ]) #17 + self.header_fields.append(["BORDER2" , 9999999, 8, 'd', 1.0 ]) #18 + self.header_fields.append(["BORDER3" , 9999999, 8, 'd', 1.0 ]) #19 + self.header_fields.append(["BORDER4" , 9999999, 8, 'd', 1.0 ]) #20 + + # DEFINE FEATURE FIELDS + self.feature_fields=[] + ########################## Description ,location,length,type,default value + self.feature_fields.append(["?a(4)" , 9999999, 4, 'i', 0 ]) #0 + self.feature_fields.append(["SHAPE TYPE", 9999999, 1, 'b', 10 ]) #1 + #SHAPE TYPE NUMBERS + #0, circle + #1 square + #2 Square Rounded Corners + #3 Square Bevel Corners + #4 triangle + #5 diamond + #8 Star + #10 line + #12 PNG + #22 line text + self.feature_fields.append(["AC Density", 9999999, 4, 'z', [75,0,0,0] ]) #2 [ACdensity,color 0 or 8, ?,?] + self.feature_fields.append(["?b(1)" , 9999999, 1, 'z', [134] ]) #3 #solid fill 134 + self.feature_fields.append(["AC cnt" , 9999999, 1, 'z', [2] ]) #4 This needs to be 2 for lines + self.feature_fields.append(["?c(1)" , 9999999, 1, 'z', [0] ]) #5 + self.feature_fields.append(["?d(1)" , 9999999, 1, 'z', [6] ]) #6 + self.feature_fields.append(["?e(3)" , 9999999, 3, 'z', [0 ,0 ,0 ] ]) #7 + self.feature_fields.append(["?f(4)" , 9999999, 4, 'i', 16 ]) #8 + self.feature_fields.append(["ZOOM" , 9999999, 8, 'd', 96 ]) #9 + self.feature_fields.append(["?g(8)" , 9999999, 8, 'd', 0 ]) #10 + self.feature_fields.append(["?h(8)" , 9999999, 8, 'd', 0 ]) #11 + self.feature_fields.append(["?i(8)" , 9999999, 8, 'd', 0 ]) #12 + self.feature_fields.append(["?j(8)" , 9999999, 8, 'd', 0 ]) #13 + self.feature_fields.append(["X cent Loc", 9999999, 8, 'd', 0 ]) #14 To the Right of the center of the laser area + self.feature_fields.append(["Y cent Loc", 9999999, 8, 'd', 0 ]) #15 Down from the center of the laser area + self.feature_fields.append(["Width" , 9999999, 8, 'd', 0 ]) #16 + self.feature_fields.append(["Height" , 9999999, 8, 'd', 0 ]) #17 + self.feature_fields.append(["Pen Width" , 9999999, 8, 'd', 0.025 ]) #18 + self.feature_fields.append(["AC Line" , 9999999, 8, 'd', 0.127 ]) #19 + self.feature_fields.append(["Rot(deg)" , 9999999, 8, 'd', 0 ]) #20 + self.feature_fields.append(["Corner Rad", 9999999, 8, 'd', 0 ]) #21 + self.feature_fields.append(["?k(8)" , 9999999, 8, 'd', 0 ]) #22 + self.feature_fields.append(["?l(8)" , 9999999, 8, 'd', 0 ]) #23 + self.feature_fields.append(["?m(8)" , 9999999, 8, 'd', 0 ]) #24 + self.feature_fields.append(["?n(4)" , 9999999, 4, 'i', 4 ]) #25 + self.feature_fields.append(["?o(4)" , 9999999, 4, 'i', 0 ]) #26 + self.feature_fields.append(["?p(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #27 + self.feature_fields.append(["?q(4)" , 9999999, 4, 'z', [255,255,255,0 ] ]) #28 + self.feature_fields.append(["?r(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #29 + self.feature_fields.append(["string_len", 9999999, 4, 'i', 0 ]) #30 + self.feature_fields.append(["filename" , 9999999, 4, 'x', "\000" ]) #31 + self.feature_fields.append(["?u(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #32 + self.feature_fields.append(["ACtexture1", 9999999, 4, 'z', [255,255,255,255] ]) #33 [0 ,0 ,0 ,0 ] + self.feature_fields.append(["ACtexture2", 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #34 + self.feature_fields.append(["?v(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #35 + self.feature_fields.append(["?w(4)" , 9999999, 4, 'z', [2 ,0 ,0 ,0 ] ]) #36 + self.feature_fields.append(["data length", 9999999, 4, 'i', 2 ]) #37 needs to be 2 for line + + self.feature_appendix = [] + for i in range(13): + self.feature_appendix.append([]) + ## Appendix values for Line + self.feature_appendix[10].append(["line X1", 9999999, 4, 'i', -10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line Y1", 9999999, 4, 'i', -10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line X2", 9999999, 4, 'i', 10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line Y2", 9999999, 4, 'i', 10000 ]) #position as 1000*value + self.feature_appendix[10].append(["lineEND", 9999999, 4, 'i', 0 ]) + ##Appendix values for PNG + self.feature_appendix[12].append(["PNGdata", 9999999, 0, 't', "" ]) + self.feature_appendix[12].append(["PNGend" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) + + + def lyz_read(self,loc,len,type,bf): + #try: + if 1==1: + #bf.seek(loc) + if type=='t': + data = bf.read(len) + elif type == 'z': + data = [] + for i in range(len): + data.append(ord(bf.read(1))) + elif type == 'x': + data = "" + for i in range(0,len,4): + data_temp = bf.read(4) + data = data + data_temp[0] + else: + data = struct.unpack(type, bf.read(len))[0] + return data + #except: + # print "Error Reading data (lyz_read)" + # return [] + + + def lyz_write(self,data,type,bf): + #print "type,data: ",type,data + if type=='t': + bf.write(data) + elif type == 'z': + for i in range(len(data)): + #bf.write(chr(data[i])) + bf.write(struct.pack('B',data[i])) + elif type == 'x': + for char in data: + bf.write(char) + bf.write(struct.pack('B',0)) + bf.write(struct.pack('B',0)) + bf.write(struct.pack('B',0)) + else: + bf.write(struct.pack(type,data)) + + def read_header(self,f): + self.header_data=[] + for line in self.header_fields: + #pos = line[1] + len = line[2] + typ = line[3] + self.header_data.append(self.lyz_read(None,len,typ,f)) + + + def read_feature(self,f): + feature_data=[] + for i in range(len(self.feature_fields)): + length = self.feature_fields[i][2] + typ = self.feature_fields[i][3] + + if i==31 and feature_data[1]==12: + string_length = feature_data[-1]*4 + feature_data.append(self.lyz_read(None,string_length,typ,f)) + else: + feature_data.append(self.lyz_read(None,length,typ,f)) + + #if i==30 and feature_data[1]==12: + # self.feature_fields[i+1][2] = feature_data[-1]*4 + + + feat_type = feature_data[1] + if feat_type==10 or feat_type==12: + for i in range(len(self.feature_appendix[feat_type])): + if feat_type==12 and i==0: + length = feature_data[-1] + else: + length = self.feature_appendix[feat_type][i][2] + typ = self.feature_appendix[feat_type][i][3] + feature_data.append(self.lyz_read(None,length,typ,f)) + return feature_data + + + def setup_new_header(self): + self.header_data=[] + for line in self.header_fields: + data = line[4] + self.header_data.append(data) + + + def add_line(self,x1,y1,x2,y2,Pen_Width=.025): + feature_data=[] + for line in self.feature_fields: + data = line[4] + feature_data.append(data) + feature_data.append(int(x1*1000.0)) + feature_data.append(int(y1*1000.0)) + feature_data.append(int(x2*1000.0)) + feature_data.append(int(y2*1000.0)) + feature_data.append(0) + feature_data[1]=10 #set type to line + feature_data[4]=[2] #Not sure what this is for lines but it needs to be 2 + feature_data[18]=Pen_Width + + self.header_data[2]=self.header_data[2]+1 + self.feature_list.append(feature_data) + + def add_png(self,PNG_DATA,Xsixe,Ysize): + filename="filename" + feature_data=[] + for line in self.feature_fields: + data = line[4] + feature_data.append(data) + feature_data.append(PNG_DATA) + feature_data.append([0,0,0,0,0,0,0,0]) + feature_data[1] = 12 # set type to PNG + feature_data[3] = [150] + feature_data[2] = [75, 4, 0, 144] + feature_data[4] = [0] # Number of Anti-Counterfeit lines + feature_data[6] = [12] # if this is not set to [12] the image does not get passed to the engrave window + feature_data[16] = Xsixe # set PNG width + feature_data[17] = Ysize # set PNG height + feature_data[18] = 1.0 + feature_data[26] = 16777215 + feature_data[30]= len(filename) # set filename length + feature_data[31]= filename # set filename + feature_data[33]=[0 ,0 ,0 ,0 ] + feature_data[34]=[255,255,255,255] + feature_data[36]=[226, 29, 5, 175] + feature_data[37]= len(PNG_DATA) # set PNG data length + + self.header_data[2]=self.header_data[2]+1 + self.feature_list.append(feature_data) + + def set_size(self,Xsize,Ysize): + self.header_data[15]=Xsize + self.header_data[16]=Ysize + + def set_margin(self,margin): + self.header_data[17]=margin/2 + self.header_data[18]=margin/2 + self.header_data[19]=margin/2 + self.header_data[20]=margin/2 + + def find_PNG(self,f): + self.PNGstart = -1 + self.PNGend = -1 + f.seek(0) + loc=0 + flag = True + while flag: + byte=f.read(1) + if byte=="": + flag=False + if byte =="P": + if byte =="N": + if byte =="G": + self.PNGstart = f.tell()-4 + if byte =="E": + if byte =="N": + if byte =="D": + self.PNGend = f.tell()+4 + flag = False + f.seek(0) + + + def read_file(self, file_name): + with open(file_name, "rb") as f: + self.find_PNG(f) + PNGlen = self.PNGend-self.PNGstart + self.png_message = "PNGlen: ",PNGlen + self.read_header(f) + for i in range(self.header_data[2]): + data = self.read_feature(f) + self.feature_list.append(data) + + self.left_over = f.read( self.header_data[1]-4-f.tell() ) + + self.EOF = "" + byte = f.read(1) + while byte!="": + self.EOF=self.EOF+byte + byte = f.read(1) + #print possible_values(200+217,348-200,'d',f) + + + def write_file(self, file_name): + with open(file_name, "wb") as f: + for i in range(len(self.header_fields)): + typ = self.header_fields[i][3] + data = self.header_data[i] + self.lyz_write(data,typ,f) + + for j in range(len(self.feature_list)): + for i in range(len(self.feature_fields)): + typ = self.feature_fields[i][3] + data = self.feature_list[j][i] + #print j,i," typ,data: ",typ,data + self.lyz_write(data,typ,f) + + feat_type=self.feature_list[j][1] + if feat_type==10 or feat_type==12: + appendix_data=[] + for i in range(len(self.feature_appendix[feat_type])): + typ = self.feature_appendix[feat_type][i][3] + data = self.feature_list[j][i+len(self.feature_fields)] #appendix_data + #print j,i," typ,data: "typ,data + self.lyz_write(data,typ,f) + + f.write("@EOF") + length=f.tell() + f.seek(4) + f.write(struct.pack('i',length)) + + + def print_header(self): + print "\nHEADER DATA:" + print "--------------------" + for i in range(len(self.header_data)): + print "%11s : " %(self.header_fields[i][0]),self.header_data[i] + + + def print_features(self): + for i in range(len(self.feature_list)): + print "\nFEATURE #%d:" %(i+1) + print "--------------------" + feature = self.feature_list[i] + for j in range(len(self.feature_fields)): + try: + print "%11s : " %(self.feature_fields[j][0]),feature[j] + except: + print "error" + feat_type = feature[1] + if feat_type==10 or feat_type==12: + print "---LINE COORDS---" + for j in range(len(self.feature_appendix[feat_type])): + jj = j+len(self.feature_fields) + if feat_type==12 and jj==38: + print "%11s : " %(self.feature_appendix[feat_type][j][0]),"...." + else: + print "%11s : " %(self.feature_appendix[feat_type][j][0]),feature[jj] + print "--------------------" + + + +if __name__ == "__main__": + ############################### + try: + file_name = sys.argv[1] + print "input: ",file_name + except: + file_name = "" + ############################### + try: + file_out = sys.argv[2] + print "output: ",file_name + except: + file_out = "" + ############################### + + if file_name=="test": + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + #image_file = "squigles.png" + #image_file = "drawing_mod.png" + image_file = "temp.png" + with open(image_file, 'rb') as f: + PNG_DATA = f.read() + LYZ.add_png(PNG_DATA,20,20) + + LYZ.add_line(5,5,-10,-10,0.025) + #LYZ.print_header() + #LYZ.print_features() + LYZ.write_file("test.lyz") + else: + if file_name!="": + LYZ=LYZ_CLASS() + LYZ.read_file(file_name) + LYZ.print_header() + LYZ.print_features() + print "LEFTOVER :", LYZ.left_over + print "EOF :",LYZ.EOF + + if file_out!="": + LYZ.write_file(file_out) + + + diff --git a/fablabchemnitz_mehr_plate.py b/fablabchemnitz_mehr_plate.py new file mode 100644 index 0000000..3351d5a --- /dev/null +++ b/fablabchemnitz_mehr_plate.py @@ -0,0 +1,90 @@ +__version__ = "1.0" +import inkex,simplestyle,math + +class Mehr_plate(): + def __init__(self,size,tabs,starts,thickness,kerf): + #general note svg pos x is right, pos y is down + self.size=size#(X,Y) inner size + self.tabs=tabs#number of tabs (top,right,bottom,left) + self.starts=starts#4 elements array of boolean if true start=high (top,right,bottom,left) + self.kerf=kerf#number, beam radius + self.thickness=thickness#number + self.holes=[]#list of SVG Strings + self.offset=[0.0 if self.starts[3] or self.tabs[3]==0 else self.thickness,0.0 if self.starts[0] or self.tabs[0]==0 else self.thickness]#set global offset so that AABB is at position (0,0) + self.corner_offset=[0.0 if (self.tabs[3]==0 and not self.starts[3]) else self.thickness,0.0 if (self.tabs[0]==0 and not self.starts[0]) else self.thickness] + self.AABB=[self.size[0]+(0.0 if (self.tabs[1]==0 and not self.starts[1]) else self.thickness)+self.corner_offset[0]+2*self.kerf, + self.size[1]+(0.0 if (self.tabs[2]==0 and not self.starts[2]) else self.thickness)+self.corner_offset[1]+2*self.kerf] + + points=[] + for i in range(4): + points+=self.rotate(self.side(i),i*math.pi/2)#creating the points of the four sides and rotate them in the radiant system + self.SVG_String=self.to_SVG_String(points) + #self.AABB=[self.size[0]+2*self.thickness,0] + + def side(self,index): #creating a side as a list of relative points. total lenght should be side lenght+2*kerf. + points=[[2*self.kerf,0.0]] if not self.starts[index] else [] #if this one starts low add two kerf + if (self.starts[(index-1)%4]):#if the privious one ended high add a thickness + points+=[[self.thickness,0.0]] + if self.tabs[index]>0: + parts=self.tabs[index]*2+1#number of parts= number of tabs+number of spaces between tabs +1 + tab_state=self.starts[index]#makes a high part if true, low else + for i in range(parts):#creates the side + points+=[[(self.size[(index%2)]/parts)+2*self.kerf,0.0]] if (tab_state) else [[(self.size[index%2]/parts)-2*self.kerf,0.0]]#a longer part for tabs and a shorter one for the spaces in between + if not (i==parts-1): + points+=[[0.0,self.thickness]] if (tab_state) else [[0.0,-self.thickness]]# if high go down else go up + tab_state=not tab_state #invert tab_state + else: + points+=[[self.size[index%2]+2*self.kerf,0.0]] if (self.starts[index]) else [[self.size[index%2]-2*self.kerf,0.0]]#single line if there are no tabs + if(self.starts[(index+1)%len(self.starts)]):#if the next one starts high add a thickness + points+=[[self.thickness,0.0]] + if not self.starts[index]:#if this one starts and so also ends low add 2 kerf + points+=[[2*self.kerf,0.0]] + return points + + def to_SVG_String(self,PointList):#creates a SVG_String as connected points from list so that AABB upper left corner is at 0,0 + s="M"+str(self.offset[0])+','+str(self.offset[1]) + for i in range(len(PointList)): + s+="l"+str(PointList[i][0])+","+str(PointList[i][1]) + return s + + def rotate(self,pointlist,angle):#rotate all points by angle in 2*pi system + matrix=[[math.cos(angle),-math.sin(angle)],[math.sin(angle),math.cos(angle)]] + ret=[] + for i in range(len(pointlist)): + ret+=[[pointlist[i][0]*matrix[0][0]+pointlist[i][1]*matrix[0][1],pointlist[i][0]*matrix[1][0]+pointlist[i][1]*matrix[1][1]]] + return ret + + def rect(self,pos,size,center=[False,False]):#SVG_String for a rectangle + SVG_String="M"+str(pos[0]-((size[0]/2)if center[0]else 0))+','+str(pos[1]-((size[1]/2)if center[1]else 0)) + SVG_String+='h'+str(size[0])+'v'+str(size[1])+'h'+str(-size[0])+'z' + return SVG_String + + def add_holes(self,direction,position,number_of,center=False): + SVG_String="" + side=self.size[0] if direction=='X' else self.size[1]#geting size of the relevant side + hole_offset=(side/(2*number_of+1))#offset each hole + holesize=[hole_offset-2*self.kerf,self.thickness-2*self.kerf]#size of the holes + for i in range(number_of):#d=(2*i+1)*hole_offset+self.kerf + if direction=='X': + SVG_String+=self.rect([self.corner_offset[0]+self.kerf+(2*i+1)*hole_offset+self.kerf,self.corner_offset[1]+self.kerf+position],holesize,[False,center]) + else: + SVG_String+=self.rect([self.corner_offset[0]+self.kerf+position,(2*i+1)*hole_offset+self.kerf+self.corner_offset[1]+self.kerf],holesize[::-1],[center,False])#reversed axis +# inkex.errormsg(SVG_String) + self.holes+=[SVG_String] + + def draw(self,position,colors,parent): + if len(self.holes)>0:#creating a new group if there are any holes to be drawn + grp_name = 'Group' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + parent = inkex.etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + for s in self.holes: + self.draw_SVG_String(s,colors[1],parent,position)#drawing the holes if there are any + self.draw_SVG_String(self.SVG_String,colors[0],parent,position)#drawing the plate + + def draw_SVG_String(self,SVG_String,color,parent,position=(0,0)):# Adding an SVG_String to the drawing + name='part' + transform='translate('+str(position[0])+','+str(position[1])+')' + style = { 'stroke': color, 'fill': 'none','stroke-width':str(max(self.kerf*2,0.2))} + drw = {'style':simplestyle.formatStyle(style),'transform':transform, inkex.addNS('label','inkscape'):name,'d':SVG_String} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return diff --git a/fablabchemnitz_mehrbox.inx b/fablabchemnitz_mehrbox.inx new file mode 100644 index 0000000..92d618f --- /dev/null +++ b/fablabchemnitz_mehrbox.inx @@ -0,0 +1,74 @@ + + + <_name>Box Maker - Mehr Boxes + fablabchemnitz.de.mehrbox + + + + <_item value="mm">mm + <_item value="cm">cm + <_item value="in">in + + Size Options + + <_item value="1">Inside + <_item value="0">Outside + + 100.0 + 100.0 + 100.0 + Tab Options + + <_item value="number">amount + <_item value="size">size + + 4.0 + 3 + 3 + 3 + Material Options + 4.0 + 0.2 + 1.0 + + + true + true + true + true + true + true + + + Compartments on the X Axis + 1 + + <_item value="even">even + <_item value="relative">relative + <_item value="absolut">absolut + + 20.0;40.0 + false + Compartments on the Y Axis + 1 + + <_item value="even">even + <_item value="relative">relative + <_item value="absolut">absolut + + 20.0;40.0 + false + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_mehrbox.py b/fablabchemnitz_mehrbox.py new file mode 100644 index 0000000..76674a2 --- /dev/null +++ b/fablabchemnitz_mehrbox.py @@ -0,0 +1,199 @@ + #! /usr/bin/env python +''' +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf into account + +Copyright (C) 2018 Thore Mehr thore.mehr@gmail.com +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "1.0" ### please report bugs, suggestions etc to bugs@twot.eu ### + +import math,inkex,simplestyle,fablabchemnitz_mehr_plate + +class mehr_box_maker(inkex.Effect): + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + # Define options + self.OptionParser.add_option('--page',action='store',type='string',dest='page',default='page_1') + self.OptionParser.add_option('--unit',action='store',type='string',dest='unit',default='mm') + self.OptionParser.add_option('--inside',action='store',type='string',dest='inside') + + self.OptionParser.add_option('--X_size',action='store',type='float',dest='X_size',default='0.0') + self.OptionParser.add_option('--Y_size',action='store',type='float',dest='Y_size',default='0.0') + self.OptionParser.add_option('--Z_size',action='store',type='float',dest='Z_size',default='0.0') + + self.OptionParser.add_option('--tab_mode',action='store',type='string',dest='tab_mode',default='number') + self.OptionParser.add_option('--tab_size',action='store',type='float',dest='tab_size',default='0.0') + + + self.OptionParser.add_option('--X_tabs',action='store',type='int',dest='X_tabs',default='0') + self.OptionParser.add_option('--Y_tabs',action='store',type='int',dest='Y_tabs',default='0') + self.OptionParser.add_option('--Z_tabs',action='store',type='int',dest='Z_tabs',default='0') + + self.OptionParser.add_option('--d_top',action='store',type='inkbool',dest='d_top',default=True) + self.OptionParser.add_option('--d_bottom',action='store',type='inkbool',dest='d_bottom',default=True) + self.OptionParser.add_option('--d_left',action='store',type='inkbool',dest='d_left',default=True) + self.OptionParser.add_option('--d_right',action='store',type='inkbool',dest='d_right',default=True) + self.OptionParser.add_option('--d_front',action='store',type='inkbool',dest='d_front',default=True) + self.OptionParser.add_option('--d_back',action='store',type='inkbool',dest='d_back',default=True) + + self.OptionParser.add_option('--thickness',action='store',type='float',dest='thickness',default=4,help='Thickness of Material') + self.OptionParser.add_option('--kerf',action='store',type='float',dest='kerf',default=0.2) + self.OptionParser.add_option('--spaceing',action='store',type='float',dest='spaceing',default=1) + + self.OptionParser.add_option('--X_compartments',action='store',type='int',dest='X_compartments',default=1) + self.OptionParser.add_option('--X_divisions',action='store',type='string',dest='X_divisions') + self.OptionParser.add_option('--X_mode',action='store',type='string',dest='X_mode') + self.OptionParser.add_option('--X_fit',action='store',type='inkbool',dest='X_fit') + + self.OptionParser.add_option('--Y_compartments',action='store',type='int',dest='Y_compartments',default=1) + self.OptionParser.add_option('--Y_divisions',action='store',type='string',dest='Y_divisions') + self.OptionParser.add_option('--Y_mode',action='store',type='string',dest='Y_mode') + self.OptionParser.add_option('--Y_fit',action='store',type='inkbool',dest='Y_fit') + + + def effect(self): + thickness=self.unittouu(str(self.options.thickness)+self.options.unit) + kerf=self.unittouu(str(self.options.kerf)+self.options.unit)/2#kerf is diameter in UI and radius in lib + + spaceing=self.unittouu(str(self.options.spaceing)+self.options.unit) + XYZ=[self.unittouu(str(self.options.X_size)+self.options.unit),self.unittouu(str(self.options.Y_size)+self.options.unit),self.unittouu(str(self.options.Z_size)+self.options.unit)] + + if(self.options.inside=='0'):#if the sizes are outside sizes reduce the size by thickness if the side gets drawn + draw=(self.options.d_left,self.options.d_front,self.options.d_top,self.options.d_right,self.options.d_back,self.options.d_bottom)#order in XYZXYZ + for i in range(6): + XYZ[i%3]-=(thickness if draw[i] else 0)#remove a thickness if drawn + +#compartments on the X axis, devisons in Y direction + X_divisions_distances=[] + if (self.options.X_compartments>1): + if (self.options.X_mode=='even'):#spliting in even compartments + X_divisions_distances=[((XYZ[0])-(self.options.X_compartments-1)*(thickness))/self.options.X_compartments] + else: + for dist in self.options.X_divisions.replace(",",".").split(";"):#fixing seperator, spliting string + X_divisions_distances+=[float(self.unittouu(dist+self.options.unit))]#translate into universal units + X_divisions_distances[0]+=kerf#fixing for kerf + if self.options.X_mode!='absolut':#for even and relative fix list lenght and offset compartments to absolut distances + while (len(X_divisions_distances)XYZ[0])and not self.options.X_fit: + inkex.errormsg("X Axis compartments outside of plate") + if self.options.X_fit: + XYZ[0]=X_divisions_distances[-1]-kerf + X_divisions_distances=X_divisions_distances[0:-1]#cutting the last of + + Y_divisions_distances=[] + if (self.options.Y_compartments>1): + if (self.options.Y_mode=='even'):#spliting in even compartments + Y_divisions_distances=[((XYZ[1])-(self.options.Y_compartments-1)*(thickness))/self.options.Y_compartments] + else: + for dist in self.options.Y_divisions.replace(",",".").split(";"):#fixing seperator, spliting string + Y_divisions_distances+=[float(self.unittouu(dist+self.options.unit))]#translate into universal units + Y_divisions_distances[0]+=kerf#fixing for kerf + if self.options.Y_mode!='absolut':#for even and relative fix list lenght and offset compartments to absolut distances + while (len(Y_divisions_distances)XYZ[1])and not self.options.X_fit: + inkex.errormsg("Y Axis compartments outside of plate") + if self.options.Y_fit: + XYZ[1]=Y_divisions_distances[-1]-kerf + Y_divisions_distances=Y_divisions_distances[0:-1]#cutting the last of + + if (self.options.tab_mode=='number'):#fixed number of tabs + Tabs_XYZ=[self.options.X_tabs,self.options.Y_tabs,self.options.Z_tabs] + else:#compute apropriate number of tabs for the edges + tab_size=float(self.unittouu(str(self.options.tab_size)+self.options.unit)) + Tabs_XYZ=[max(1,int(XYZ[0]/(tab_size))/2),max(1,int(XYZ[1]/(tab_size))/2),max(1,int(XYZ[2]/(tab_size))/2)] + + +#top and bottom plate + tabs_tb=(Tabs_XYZ[0] if self.options.d_back else 0,Tabs_XYZ[1] if self.options.d_right else 0,Tabs_XYZ[0] if self.options.d_front else 0,Tabs_XYZ[1] if self.options.d_left else 0) + start_tb=(True if self.options.d_back else False,True if self.options.d_right else False,True if self.options.d_front else False,True if self.options.d_left else False) + Plate_tb=fablabchemnitz_mehr_plate.Mehr_plate((XYZ[0],XYZ[1]),tabs_tb,start_tb,thickness,kerf)#top and bottom plate + for d in X_divisions_distances: + Plate_tb.add_holes('Y',d,Tabs_XYZ[1]) + for d in Y_divisions_distances: + Plate_tb.add_holes('X',d,Tabs_XYZ[0]) +#left and right plate + tabs_lr=(Tabs_XYZ[2] if self.options.d_back else 0,Tabs_XYZ[1] if self.options.d_top else 0,Tabs_XYZ[2] if self.options.d_front else 0,Tabs_XYZ[1] if self.options.d_bottom else 0) + start_lr=(True if self.options.d_back else False,False,True if self.options.d_front else False,False) + Plate_lr=fablabchemnitz_mehr_plate.Mehr_plate((XYZ[2],XYZ[1]),tabs_lr,start_lr,thickness,kerf)#left and right plate + for d in Y_divisions_distances: + Plate_lr.add_holes('X',d,Tabs_XYZ[2]) +#front and back plate + tabs_fb=(Tabs_XYZ[0] if self.options.d_top else 0,Tabs_XYZ[2] if self.options.d_right else 0,Tabs_XYZ[0] if self.options.d_bottom else 0,Tabs_XYZ[2] if self.options.d_left else 0)# + start_fb=(False,False,False,False) + Plate_fb=fablabchemnitz_mehr_plate.Mehr_plate((XYZ[0],XYZ[2]),tabs_fb,start_fb,thickness,kerf)#font and back plate + for d in X_divisions_distances: + Plate_fb.add_holes('Y',d,Tabs_XYZ[2]) + + Plate_xc=fablabchemnitz_mehr_plate.Mehr_plate((XYZ[2],XYZ[1]),tabs_lr,(False,False,False,False),thickness,kerf) + for d in Y_divisions_distances: + Plate_xc.holes+=[Plate_xc.rect([0,Plate_xc.corner_offset[1]+d+kerf],[Plate_xc.AABB[0]/2-kerf,thickness-2*kerf])] + + Plate_yc=fablabchemnitz_mehr_plate.Mehr_plate((XYZ[0],XYZ[2]),tabs_fb,(False,False,False,False),thickness,kerf) + for d in X_divisions_distances: + Plate_yc.holes+=[Plate_yc.rect([Plate_yc.corner_offset[0]+d+kerf,0],[thickness-2*kerf,Plate_yc.AABB[1]/2-kerf])] + + + X_offset=0 + Y_offset=0 + if(self.options.d_top): + Plate_tb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer)#drawing a plate using black for the outline and red for holes + X_offset+=Plate_tb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_tb.AABB[1]) + if(self.options.d_bottom): + Plate_tb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_tb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_tb.AABB[1]) + + if(self.options.d_left): + Plate_lr.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_lr.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_lr.AABB[1]) + if(self.options.d_right): + Plate_lr.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_lr.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_lr.AABB[1]) + + if(self.options.d_front): + Plate_fb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_fb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_fb.AABB[1]) + if(self.options.d_back): + Plate_fb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_fb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_fb.AABB[1]) + X_offset=0 + for i in range(self.options.X_compartments-1): + Plate_xc.draw([X_offset+spaceing,spaceing+Y_offset],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_xc.AABB[0]+spaceing + X_offset=0 + Y_offset+=spaceing+Plate_xc.AABB[1] + for i in range(self.options.Y_compartments-1): + Plate_yc.draw([X_offset+spaceing,spaceing+Y_offset],["#000000","#ff0000"],self.current_layer) + X_offset+=Plate_yc.AABB[0]+spaceing + + +effect = mehr_box_maker() +effect.affect() diff --git a/fablabchemnitz_metaext.py b/fablabchemnitz_metaext.py new file mode 100644 index 0000000..5ccae21 --- /dev/null +++ b/fablabchemnitz_metaext.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import sys +sys.path.append('/usr/share/inkscape/extensions') + +# We will use the inkex module with the predefined Effect base class. +import inkex +import tempfile + +try: + from subprocess import Popen, PIPE + bsubprocess = True +except: + bsubprocess = False + +class MetaEffect(object): + """ + Inkscape extension running the commands from the list on the selected + objects. + """ + def __init__(self, command_list): + """ + Constructor. + """ + self._command_list = command_list + + + def command_on_selection(self): + selected = ["--select={}".format(id_) + for id_, _ in self.selected.iteritems()] + selected = " ".join(selected) + verbs = ["--verb={}".format(cmd) for cmd in self._command_list] + verbs = " ".join(verbs) + command = "{} {}".format(selected, verbs) + return command + + def run_file(self, filename, cmd): + cmd += " --verb=FileSave --verb=FileQuit" + if bsubprocess: + p = Popen('inkscape "%s" %s' % (filename, cmd), shell=True, + stdout=PIPE, stderr=PIPE) # TODO: gui-less version + rc = p.wait() + f = p.stdout + err = p.stderr + else: + _, f, err = os.popen3("inkscape %s %s" % (filename, cmd)) + + f.close() + err.close() + + def run_commands_on_file(self, command): + """Run the actions on the svg xml tree""" + # First save the document + svgfile = tempfile.mktemp(".svg") + self.document.write(svgfile) + + # Run the action on the document + self.run_file(svgfile, command) + + # Open the resulting file + stream = open(svgfile, 'r') + new_svg_doc = inkex.etree.parse(stream) + stream.close() + + # Clean up. + try: + os.remove(svgfile) + except Exception: + pass + + # Return the new document + return new_svg_doc + + def effect(self, document, selected, doc_ids): + """ + Effect behaviour. + Overrides base class' method + """ + self.document = document + self.selected = selected + whole_tree = self.document.getroot() + svg_id_id = ".//{http://www.w3.org/2000/svg}path[@id]" + prev_ids = set(child.get('id') + for child in whole_tree.findall(svg_id_id)) + + command = self.command_on_selection() + self.document = self.run_commands_on_file(command) + + new_ids = set(child.get('id') + for child in self.document.getroot().findall(svg_id_id)) + diff_ids = list(new_ids.difference(prev_ids)) + self.selected = {} + + for i in diff_ids: + path = '//*[@id="%s"]' % i + for node in self.document.xpath(path, namespaces=inkex.NSS): + self.selected[i] = node + self.doc_ids = {} + docIdNodes = self.document.xpath('//@id', namespaces=inkex.NSS) + for m in docIdNodes: + self.doc_ids[m] = 1 + + document._setroot(self.document.getroot()) + selected.clear() + selected.update(self.selected) + doc_ids.clear() + doc_ids.update(self.doc_ids) diff --git a/fablabchemnitz_mirror.inx b/fablabchemnitz_mirror.inx new file mode 100644 index 0000000..8f30c57 --- /dev/null +++ b/fablabchemnitz_mirror.inx @@ -0,0 +1,18 @@ + + + <_name>Mirror + fablabchemnitz.de.mirror + fablabchemnitz_mirror.py + inkex.py + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_mirror.py b/fablabchemnitz_mirror.py new file mode 100644 index 0000000..c55fc85 --- /dev/null +++ b/fablabchemnitz_mirror.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +""" +Derived from the "envelope" extension by Aaron Spike, aaron@ekips.org +By Apex 2011 +New version Jens Kober 2017 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" +import inkex, cubicsuperpath, simpletransform +from ffgeom import * + +class Project(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + def effect(self): + if len(self.options.ids) < 2: + inkex.errormsg(_("This extension requires two selected paths. \nThe second path must be exactly two nodes long.")) + exit() + + #trafo is selected second + obj = self.selected[self.options.ids[0]] + trafo = self.selected[self.options.ids[1]] + + if trafo.tag == inkex.addNS('path','svg'): + #distil trafo into two node points + trafoPath = cubicsuperpath.parsePath(trafo.get('d')) + t = trafo.get("transform") + # if trafo has a transform, we need to translate the points to world coordinates first + if t != None: + m = simpletransform.parseTransform(t) + simpletransform.applyTransformToPath(m,trafoPath) + if len(trafoPath[0]) < 2: + inkex.errormsg(_("This extension requires that the second selected path be two nodes long.")) + exit() + trafoPath = [[Point(csp[1][0],csp[1][1]) for csp in subs] for subs in trafoPath][0][:2] + + #START HERE!!! + + # origin of mirror line + ox = trafoPath[0]['x'] + oy = trafoPath[0]['y'] + # vector along mirror line + vx = trafoPath[1]['x'] - ox + vy = trafoPath[1]['y'] - oy + + # the transformation first translates the origin of the mirror line to [0 0], then rotates the mirror line onto the x-axis, + # reflects everything over the x-axis, undoes the rotation, and finally undoes the translation + + # alpha = atan2(vy, vx); + + # [1 0 ox] [cos(alpha) -sin(alpha) 0] [1 0 0] [cos(-alpha) -sin(-alpha) 0] [1 0 -ox] + # Transformation = [0 1 oy]*[sin(alpha) cos(alpha) 0]*[0 -1 0]*[sin(-alpha) cos(-alpha) 0]*[0 1 -oy] + # [0 0 1] [ 0 0 1] [0 0 1] [ 0 0 1] [0 0 1] + + # after some simplifications (or using your favorite symbolic math software): + + # [(vx^2-vy^2)/(vx^2+vy^2) (2 vx vy)/(vx^2+vy^2) (2 vy (ox vy-oy vx))/(vx^2+vy^2)] + # Transformation = [ (2 vx vy)/(vx^2+vy^2) -(vx^2-vy^2)/(vx^2+vy^2) -(2 vx (ox vy-oy vx))/(vx^2+vy^2)] + # [ 0 0 1] + + denom = vx**2 + vy**2 + a00 = (vx**2 - vy**2) / denom + a01 = (2 * vx * vy) / denom + a02 = 2 * (ox * vy - oy * vx) / denom + mat=[[a00, a01, vy * a02], [a01, -a00, -vx * a02]] + simpletransform.applyTransformToNode(mat,obj) + + else: + if trafo.tag == inkex.addNS('g','svg'): + inkex.errormsg(_("The second selected object is a group, not a path.\nTry using the procedure Object->Ungroup.")) + else: + inkex.errormsg(_("The second selected object is not a path.\nTry using the procedure Path->Object to Path.")) + exit() + +if __name__ == '__main__': + e = Project() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99 \ No newline at end of file diff --git a/fablabchemnitz_netting.inx b/fablabchemnitz_netting.inx new file mode 100644 index 0000000..15c4f47 --- /dev/null +++ b/fablabchemnitz_netting.inx @@ -0,0 +1,20 @@ + + + <_name>Netting + fablabchemnitz.de.netting + fablabchemnitz_netting.py + inkex.py + <_param name="title" type="description">This effect net in the a path alternately. + 1.0 + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_netting.py b/fablabchemnitz_netting.py new file mode 100644 index 0000000..9198d79 --- /dev/null +++ b/fablabchemnitz_netting.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +''' +netting.py +Sunabe kazumichi 2010/3/4 +http://dp48069596.lolipop.jp/ + + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +this program nets in the line. +''' +import random, math, inkex, simplestyle, cubicsuperpath + + +class RadiusRandomize(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-w", "--s_width", + action="store", type="float", + dest="s_width", default=1.0, + help="atrke width") + self.OptionParser.add_option("--title") + + def effect(self): + path_strings = [] + net_strings= ["M"] + my_path = inkex.etree.Element(inkex.addNS('path','svg')) + s = {'stroke-width': self.options.s_width, 'stroke': '#000000', 'fill': 'none' } + my_path.set('style', simplestyle.formatStyle(s)) + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + p = cubicsuperpath.parsePath(d) + for subpath in p: + for i, csp in enumerate(subpath): + path_strings.append("%f,%f" % ( csp[1][0], csp[1][1])) + node.set('d',cubicsuperpath.formatPath(p)) + + while len(path_strings)>0 : + net_strings.append(path_strings.pop(0)) + if len(path_strings)>0 : + net_strings.append(path_strings.pop()) + my_path.set('d', " ".join(net_strings)) + self.current_layer.append( my_path ) + + + + +e = RadiusRandomize() +e.affect() + diff --git a/fablabchemnitz_ofsplot.inx b/fablabchemnitz_ofsplot.inx new file mode 100644 index 0000000..a88d261 --- /dev/null +++ b/fablabchemnitz_ofsplot.inx @@ -0,0 +1,23 @@ + + + <_name>Ofsplot (Offset Paths) + fablabchemnitz.de.ofsplot + fablabchemnitz_ofsplot.py + 10 + 0.8 + 0.8 + 0 + 0.8 + <_param name="settingsHelp" type="description">Python library pyclipper needs to be installed. Use Flatten Bezier plugin in advance of this plugin. + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_ofsplot.py b/fablabchemnitz_ofsplot.py new file mode 100644 index 0000000..47d5317 --- /dev/null +++ b/fablabchemnitz_ofsplot.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +from __future__ import print_function + +import inkex +import cubicsuperpath, simplestyle, copy, math, re, bezmisc, simplepath +import pyclipper +import sys + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + + + +class ofsplot(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--count", + action="store", type="int", + dest="count", default=10, + help="Number of offset operations") + self.OptionParser.add_option("--ofs", + action="store", type="float", + dest="offset", default=2, + help="Offset amount") + self.OptionParser.add_option("--init_ofs", + action="store", type="float", + dest="init_offset", default=2, + help="Initial Offset Amount") + self.OptionParser.add_option("--copy_org", + action="store", type="inkbool", + dest="copy_org", default=True, + help="copy original path") + self.OptionParser.add_option("--ofs_incr", + action="store", type="float", + dest="offset_increase", default=2, + help="Offset increase between iterations") + + + + + def effect(self): + + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + p = cubicsuperpath.parsePath(node.get('d')) + + scale_factor=5.0 + + + pco = pyclipper.PyclipperOffset() + + new = [] + + + # load in initial paths + for sub in p: + sub_simple = [] + h1_simple = [] + h2_simple = [] + for item in sub: + itemx = [float(z)*scale_factor for z in item[1]] + sub_simple.append(itemx) + #eprint(itemx) + #h1_simple.append(item[0]-item[1]) # handle 1 offset + #h2_simple.append(item[2]-item[1]) # handle 2 offset + + pco.AddPath(sub_simple, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON) + + + + # calculate offset paths for different offset amounts + offset_list = [] + offset_list.append(self.options.init_offset) + for i in range(0,self.options.count+1): + ofs_inc = +math.pow(float(i)*self.options.offset_increase,2) + if self.options.offset_increase <0: + ofs_inc = -ofs_inc + offset_list.append(offset_list[0]+float(i)*self.options.offset+ofs_inc) + + + solutions = [] + for offset in offset_list: + solution = pco.Execute(offset*scale_factor) + solutions.append(solution) + if len(solution)<=0: + continue # no more loops to go, will provide no results. + + + # re-arrange solutions to fit expected format & add to array + for solution in solutions: + for sol in solution: + solx = [[float(s[0])/scale_factor, float(s[1])/scale_factor] for s in sol] + sol_p = [[a,a,a] for a in solx] + sol_p.append(sol_p[0][:]) + new.append(sol_p) + + + + + # add old, just to keep (make optional!) + if self.options.copy_org: + for sub in p: + new.append(sub) + + node.set('d',cubicsuperpath.formatPath(new)) + + +if __name__ == '__main__': + e = ofsplot() + e.affect() + diff --git a/fablabchemnitz_paste_length.inx b/fablabchemnitz_paste_length.inx new file mode 100644 index 0000000..2d2ee5e --- /dev/null +++ b/fablabchemnitz_paste_length.inx @@ -0,0 +1,35 @@ + + + <_name>Scale To Path Length + fablabchemnitz.de.paste_length + fablabchemnitz_paste_length.py + inkex.py + + + + <_item value="center">Center + <_item value="topLeft">Top Left + <_item value="topRight">Top Right + <_item value="bottomLeft">Bottom Left + <_item value="bottomRight">Bottom Right + + 1 + 5 + + + <_param name="pasteLengthhelp" type="description" xml:space="preserve">This effect makes the length of all the destination paths the same as that of the source path, while maintaining their shapes. The source is the topmost path in the selection. Precision field denotes the number of significant digits, to which the length is rounded. + + + + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_paste_length.py b/fablabchemnitz_paste_length.py new file mode 100644 index 0000000..4225fcb --- /dev/null +++ b/fablabchemnitz_paste_length.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python + +''' +Inkscape extension to copy length of the source path to the selected +destination path(s) + +Copyright (C) 2018 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex, cubicsuperpath, bezmisc, simpletransform, sys + +class PasteLengthEffect(inkex.Effect): + + def __init__(self): + + inkex.Effect.__init__(self) + + self.OptionParser.add_option('-s', '--scale', action = 'store', + type = 'float', dest = 'scale', default = '1', + help = 'Additionally scale the length by') + + self.OptionParser.add_option('-f', '--scaleFrom', action = 'store', + type = 'string', dest = 'scaleFrom', default = 'center', + help = 'Scale Path From') + + self.OptionParser.add_option('-p', '--precision', action = 'store', + type = 'int', dest = 'precision', default = '5', + help = 'Number of significant digits') + + self.OptionParser.add_option("--tab", action="store", + type="string", dest="tab", default="sampling", help="Tab") + + def scaleCubicSuper(self, cspath, scaleFactor, scaleFrom): + + xmin, xmax, ymin, ymax = simpletransform.refinedBBox(cspath) + + if(scaleFrom == 'topLeft'): + oldOrigin= [xmin, ymin] + elif(scaleFrom == 'topRight'): + oldOrigin= [xmax, ymin] + elif(scaleFrom == 'bottomLeft'): + oldOrigin= [xmin, ymax] + elif(scaleFrom == 'bottomRight'): + oldOrigin= [xmax, ymax] + else: #if(scaleFrom == 'center'): + oldOrigin= [xmin + (xmax - xmin) / 2., ymin + (ymax - ymin) / 2.] + + newOrigin = [oldOrigin[0] * scaleFactor , oldOrigin[1] * scaleFactor ] + + for subpath in cspath: + for bezierPt in subpath: + for i in range(0, len(bezierPt)): + + bezierPt[i] = [bezierPt[i][0] * scaleFactor, + bezierPt[i][1] * scaleFactor] + + bezierPt[i][0] += (oldOrigin[0] - newOrigin[0]) + bezierPt[i][1] += (oldOrigin[1] - newOrigin[1]) + + def getPartsFromCubicSuper(self, cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + + def getLength(self, cspath, tolerance): + parts = self.getPartsFromCubicSuper(cspath) + curveLen = 0 + + for i, part in enumerate(parts): + for j, seg in enumerate(part): + curveLen += bezmisc.bezierlengthSimpson((seg[0], seg[1], seg[2], seg[3]), + tolerance = tolerance) + + return curveLen + + def effect(self): + scale = self.options.scale + scaleFrom = self.options.scaleFrom + + tolerance = 10 ** (-1 * self.options.precision) + + printOut = False + selections = self.selected + pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS) + outStrs = [str(len(pathNodes))] + + paths = [(pathNode.get('id'), cubicsuperpath.parsePath(pathNode.get('d'))) \ + for pathNode in pathNodes if (pathNode.get('id') in selections.keys())] + + if(len(paths) > 1): + srcPath = paths[-1][1] + srclen = self.getLength(srcPath, tolerance) + paths = paths[:len(paths)-1] + for key, cspath in paths: + curveLen = self.getLength(cspath, tolerance) + + self.scaleCubicSuper(cspath, scaleFactor = scale * (srclen / curveLen), \ + scaleFrom = scaleFrom) + selections[key].set('d', cubicsuperpath.formatPath(cspath)) + else: + inkex.errormsg(_("Please select at least two paths, with the path whose \ + length is to be copied at the top. You may have to convert the shape \ + to path with path->Object to Path.")) + +effect = PasteLengthEffect() +effect.affect() diff --git a/fablabchemnitz_path2flex.inx b/fablabchemnitz_path2flex.inx new file mode 100644 index 0000000..d9b0bed --- /dev/null +++ b/fablabchemnitz_path2flex.inx @@ -0,0 +1,40 @@ + + + <_name>Box Maker - Path To Flex + fablabchemnitz.de.path2flex + org.inkscape.output.svg.inkscape + fablabchemnitz_path2flex.py + inkex.py + simpletransform.py + cubicsuperpath.py + cspsubdiv.py + bezmisc.py + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 3.0 + 50.0 + 2 + 1000.0 + true + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_path2flex.py b/fablabchemnitz_path2flex.py new file mode 100644 index 0000000..7b9665c --- /dev/null +++ b/fablabchemnitz_path2flex.py @@ -0,0 +1,1395 @@ +#!/usr/bin/env python +# coding: utf8 + + +# paths2flex.py + +# This is an Inkscape extension to generate boxes with sides as flex which follow a path selected in inkscape +# The Inkscape objects must first be converted to paths (Path > Object to Path). +# Some paths may not work well -- if the curves are too small for example. + +# Written by Thierry Houdoin (thierry@fablab-lannion.org), december 2018 +# This work is largely inspred from path2openSCAD.py, written by Daniel C. Newman + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import math +import os.path +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc +import re + +DEFAULT_WIDTH = 100 +DEFAULT_HEIGHT = 100 + +objStyle = simplestyle.formatStyle( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + }) + +objStyleStart = simplestyle.formatStyle( + {'stroke': '#FF0000', + 'stroke-width': 0.1, + 'fill': 'none' + }) + + +class inkcape_draw_cartesian: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, x, y): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' M ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + + def LineTo(self, x, y): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' L ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + + def Line(self, x1, y1, x2, y2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' M ' + str(round(x1-self.offsetX, 3)) + ',' + str(round(y1-self.offsetY, 3)) + ' L ' + str(round(x2-self.offsetX, 3)) + ',' + str(round(y2-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + inkex.etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + def GenPathStart(self): + line_attribs = {'style': objStyleStart, 'd': self.Path} + inkex.etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + +class Line: + def __init__(self, a, b, c): + self.a = a + self.b = b + self.c = c + def __str__(self): + return "Line a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + + def Intersect(self, Line2): + ''' Return the point which is at the intersection between the two lines + ''' + det = Line2.a * self.b - self.a*Line2.b; + if abs(det) < 1e-6: # Line are parallel, return None + return None + return ((Line2.b*self.c - Line2.c*self.b)/det, (self.a*Line2.c - Line2.a*self.c)/det) + + def square_line_distance(self, pt): + ''' + Compute the distance between point and line + Distance between point and line is (a * pt.x + b * pt.y + c)*(a * pt.x + b * pt.y + c)/(a*a + b*b) + ''' + return (self.a * pt[0] + self.b * pt[1] + self.c)*(self.a * pt[0]+ self.b * pt[1] + self.c)/(self.a*self.a + self.b*self.b) + +class Segment(Line): + def __init__(self, A, B): + self.xA = A[0] + self.xB = B[0] + self.yA = A[1] + self.yB = B[1] + self.xm = min(self.xA, self.xB) + self.xM = max(self.xA, self.xB) + self.ym = min(self.yA, self.yB) + self.yM = max(self.yA, self.yB) + Line.__init__( self, A[1] - B[1], B[0] - A[0], A[0] * B[1] - B[0] * A[1] ) + + def __str__(self): + return "Segment "+str([A,B])+ " a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + + def InSegment(self, Pt): + if Pt[0] < self.xm or Pt[0] > self.xM: + return 0 # Impossible lower than xmin or greater than xMax + if Pt[1] < self.ym or Pt[1] > self.yM: + return 0 # Impossible lower than ymin or greater than yMax + return 1 + + def __str__(self): + return "Seg"+str([(self.xA, self.yA), (self.xB, self.yB)])+" Line a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + + + +def pointInBBox( pt, bbox ): + + ''' + Determine if the point pt=[x, y] lies on or within the bounding + box bbox=[xmin, xmax, ymin, ymax]. + ''' + + # if ( x < xmin ) or ( x > xmax ) or ( y < ymin ) or ( y > ymax ) + if ( pt[0] < bbox[0] ) or ( pt[0] > bbox[1] ) or \ + ( pt[1] < bbox[2] ) or ( pt[1] > bbox[3] ): + return False + else: + return True + +def bboxInBBox( bbox1, bbox2 ): + + ''' + Determine if the bounding box bbox1 lies on or within the + bounding box bbox2. NOTE: we do not test for strict enclosure. + + Structure of the bounding boxes is + + bbox1 = [ xmin1, xmax1, ymin1, ymax1 ] + bbox2 = [ xmin2, xmax2, ymin2, ymax2 ] + ''' + + # if ( xmin1 < xmin2 ) or ( xmax1 > xmax2 ) or ( ymin1 < ymin2 ) or ( ymax1 > ymax2 ) + + if ( bbox1[0] < bbox2[0] ) or ( bbox1[1] > bbox2[1] ) or \ + ( bbox1[2] < bbox2[2] ) or ( bbox1[3] > bbox2[3] ): + return False + else: + return True + +def pointInPoly( p, poly, bbox=None ): + + ''' + Use a ray casting algorithm to see if the point p = [x, y] lies within + the polygon poly = [[x1,y1],[x2,y2],...]. Returns True if the point + is within poly, lies on an edge of poly, or is a vertex of poly. + ''' + + if ( p is None ) or ( poly is None ): + return False + + # Check to see if the point lies outside the polygon's bounding box + if not bbox is None: + if not pointInBBox( p, bbox ): + return False + + # Check to see if the point is a vertex + if p in poly: + return True + + # Handle a boundary case associated with the point + # lying on a horizontal edge of the polygon + x = p[0] + y = p[1] + p1 = poly[0] + p2 = poly[1] + for i in range( len( poly ) ): + if i != 0: + p1 = poly[i-1] + p2 = poly[i] + if ( y == p1[1] ) and ( p1[1] == p2[1] ) and \ + ( x > min( p1[0], p2[0] ) ) and ( x < max( p1[0], p2[0] ) ): + return True + + n = len( poly ) + inside = False + + p1_x,p1_y = poly[0] + for i in range( n + 1 ): + p2_x,p2_y = poly[i % n] + if y > min( p1_y, p2_y ): + if y <= max( p1_y, p2_y ): + if x <= max( p1_x, p2_x ): + if p1_y != p2_y: + intersect = p1_x + (y - p1_y) * (p2_x - p1_x) / (p2_y - p1_y) + if x <= intersect: + inside = not inside + else: + inside = not inside + p1_x,p1_y = p2_x,p2_y + + return inside + +def polyInPoly( poly1, bbox1, poly2, bbox2 ): + + ''' + Determine if polygon poly2 = [[x1,y1],[x2,y2],...] + contains polygon poly1. + + The bounding box information, bbox=[xmin, xmax, ymin, ymax] + is optional. When supplied it can be used to perform rejections. + Note that one bounding box containing another is not sufficient + to imply that one polygon contains another. It's necessary, but + not sufficient. + ''' + + # See if poly1's bboundin box is NOT contained by poly2's bounding box + # if it isn't, then poly1 cannot be contained by poly2. + + if ( not bbox1 is None ) and ( not bbox2 is None ): + if not bboxInBBox( bbox1, bbox2 ): + return False + + # To see if poly1 is contained by poly2, we need to ensure that each + # vertex of poly1 lies on or within poly2 + + for p in poly1: + if not pointInPoly( p, poly2, bbox2 ): + return False + + # Looks like poly1 is contained on or in Poly2 + + return True + +def subdivideCubicPath( sp, flat, i=1 ): + + ''' + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + ''' + + while True: + while True: + if i >= len( sp ): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = ( p0, p1, p2, p3 ) + + if cspsubdiv.maxdist( b ) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt( b, 0.5 ) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +# Second degree equation solver. +# Return a tuple with the two real solutions, raise an error if there is no real solution +def Solve2nd(a, b, c): + delta = b**2 - 4*a*c + if ( delta < 0 ): + print("No real solution") + return none + x1 = (-b + math.sqrt(delta))/(2*a) + x2 = (-b - math.sqrt(delta))/(2*a) + return (x1, x2) + +# Compute distance between two points +def distance2points(x0, y0, x1, y1): + return math.hypot(x0-x1,y0-y1) + + + + + +class Path2Flex( inkex.Effect ): + + def __init__( self ): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + self.OptionParser.add_option('--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit, should be one of ') + + self.OptionParser.add_option('--thickness', action = 'store', + type = 'float', dest = 'thickness', default = '3.0', + help = 'Material thickness') + + self.OptionParser.add_option('--zc', action = 'store', + type = 'float', dest = 'zc', default = '50.0', + help = 'Flex height') + + self.OptionParser.add_option('--notch_interval', action = 'store', + type = 'int', dest = 'notch_interval', default = '2', + help = 'Interval between notches') + + self.OptionParser.add_option('--max_size_flex', action = 'store', + type = 'float', dest = 'max_size_flex', default = '1000.0', + help = 'Max size of a single band of flex, above this limit it will be cut') + + self.OptionParser.add_option('--Mode_Debug', action = 'store', + type = 'inkbool', dest = 'Mode_Debug', default = 'false', + help = 'Output Debug information in file') + + # Dictionary of paths we will construct. It's keyed by the SVG node + # it came from. Such keying isn't too useful in this specific case, + # but it can be useful in other applications when you actually want + # to go back and update the SVG document + self.paths = {} + + self.flexnotch = [] + # Debug Output file + self.fDebug = None + + # Dictionary of warnings issued. This to prevent from warning + # multiple times about the same problem + self.warnings = {} + + #Get bounding rectangle + self.xmin, self.xmax = ( 1.0E70, -1.0E70 ) + self.ymin, self.ymax = ( 1.0E70, -1.0E70 ) + self.cx = float( DEFAULT_WIDTH ) / 2.0 + self.cy = float( DEFAULT_HEIGHT ) / 2.0 + + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def DebugMsg(self, s): + if self.fDebug: + self.fDebug.write(s) + + # Generate long vertical lines for flex + # Parameters : StartX, StartY, size, nunmber of lines and +1 if lines goes up and -1 down + def GenLinesFlex(self, StartX, StartY, Size, nLine, UpDown, path): + for i in range(nLine): + path.Line(StartX, StartY, StartX, StartY + UpDown*Size) + self.DebugMsg("GenLinesFlex from "+str((StartX, StartY))+" to "+str((StartX, StartY + UpDown*Size))+'\n') + StartY += UpDown*(Size+2) + + + # Generate the path link to a flex step + # + def generate_step_flex(self, step, size_notch, ShortMark, LongMark, nMark, index): + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + #External part of the notch, fraction of total notch + notch_useful = 2.0 / (self.notchesInterval + 2) + # First, link towards next step + # Line from ((step+1)*size_notch, 0) to ((step+0.5)*size_notch, 0 + path.Line((step+1)*size_notch, 0, (step+notch_useful)*size_notch, 0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # Then ShortLine from ((step+notch_useful)*size_notch, ShortMark) towards ((step+notch_useful)*size_notch, -Thickness) + path.Line((step+notch_useful)*size_notch, ShortMark,(step+notch_useful)*size_notch, -self.thickness) + # Then notch + path.LineTo(step*size_notch, -self.thickness) + # Then short mark towards other side (step*size_notch, shortmark) + path.LineTo(step*size_notch, ShortMark) + if ShortMark != 0: #Only if there is flex + # Then line towards center + self.GenLinesFlex(step*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + # Then notch + path.Line(step*size_notch, self.height - ShortMark, step*size_notch, self.height + self.thickness) + path.LineTo((step+notch_useful)*size_notch, self.height + self.thickness) + path.LineTo((step+notch_useful)*size_notch, self.height - ShortMark ) + if ShortMark != 0: + #Then nMark-1 Lines + self.GenLinesFlex((step+notch_useful)*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + #Then Long lines internal to notch + self.GenLinesFlex((step+notch_useful/2)*size_notch, 1 - self.thickness, (self.height + 2.0*self.thickness)/nMark - 2, nMark, 1, path) + # link towards next One + path.Line((step+notch_useful)*size_notch, self.height, (step+1)*size_notch, self.height) + if ShortMark != 0: + # notchesInterval *nMark Long lines up to next notch or 2 shorts and nMark-1 long + i = 1 + while i < self.notchesInterval: + pos = (i + 2.0) / (self.notchesInterval + 2.0) + if i % 2 : + #odd draw from bottom to top, nMark lines + self.GenLinesFlex((step+pos)*size_notch, self.height - 1, self.height /nMark - 2.0, nMark, -1, path) + else: + # even draw from top to bottom nMark+1 lines, 2 short and nMark-1 Long + path.Line((step+pos)*size_notch, 3, (step+pos)*size_notch, ShortMark) + self.GenLinesFlex((step+pos)*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + path.Line((step+pos)*size_notch, self.height - ShortMark, (step+pos)*size_notch, self.height - 3) + i += 1 + # Write path to inkscape + path.GenPath() + + def GenerateStartFlex(self, size_notch, ShortMark, LongMark, nMark, index): + ''' + Draw the start pattern + The notch is only 1 mm wide, to enable putting both start and end notch in the same hole in the cover + ''' + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + #External part of the notch, fraction of total notch + notch_useful = 1.0 / (self.notchesInterval + 2) + notch_in = self.notchesInterval / (self.notchesInterval + 2.0) + # First, link towards next step + # Line from (, 0) to 0, 0 + path.Line(-notch_in*size_notch, 0, 0, 0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # Then ShortLine from (-notch_in*size_notch, ShortMark) towards -notch_in*size_notch, Thickness) + path.Line(-notch_in*size_notch, ShortMark, -notch_in*size_notch, -self.thickness) + # Then notch (beware, only size_notch/4 here) + path.LineTo((notch_useful-1)*size_notch, -self.thickness) + # Then edge, full length + path.LineTo((notch_useful-1)*size_notch, self.height+self.thickness) + # Then notch + path.LineTo(-notch_in*size_notch, self.height + self.thickness) + path.LineTo(-notch_in*size_notch, self.height - ShortMark + 1 ) + if ShortMark != 0: + #Then nMark - 1 Lines + self.GenLinesFlex(-notch_in*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + # link towards next One + path.Line(-notch_in*size_notch, self.height, 0, self.height) + if ShortMark != 0: + # notchesInterval *nMark Long lines up to next notch or 2 shorts and nMark-1 long + i = 1 + while i < self.notchesInterval: + pos = (i - self.notchesInterval) / (self.notchesInterval + 2.0) + if i % 2 : + #odd draw from bottom to top, nMark lines + self.GenLinesFlex(pos*size_notch, self.height - 1, self.height /nMark - 2.0, nMark, -1, path) + else: + # even draw from top to bottom nMark+1 lines, 2 short and nMark-1 Long + path.Line(pos*size_notch, 3, pos*size_notch, ShortMark) + self.GenLinesFlex(pos*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + path.Line(pos*size_notch, self.height - ShortMark, pos*size_notch, self.height - 3) + i += 1 + path.GenPath() + + + def GenerateEndFlex(self, step, size_notch, ShortMark, LongMark, nMark, index): + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + delta_notch = 1.0 / (self.notchesInterval + 2.0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # ShortLine from (step*size_notch, ShortMark) towards step*size_notch, -Thickness) + path.Line(step*size_notch, ShortMark, step*size_notch, -self.thickness) + # Then notch (beware, only 1mm here) + path.LineTo((step+delta_notch)*size_notch, -self.thickness) + # Then edge, full length + path.LineTo((step+delta_notch)*size_notch, self.height+self.thickness) + # Then notch + path.LineTo(step*size_notch, self.height + self.thickness) + path.LineTo(step*size_notch, self.height - ShortMark) + if ShortMark != 0: + #Then nMark - 1 Lines + self.GenLinesFlex(step*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + path.GenPath() + + + def GenFlex(self, parent, num_notch, size_notch, xOffset, yOffset): + group = inkex.etree.SubElement(parent, 'g') + self.group = group + #Compute number of vertical lines. Each long mark should be at most 50mm long to avoid failures + nMark = int(self.height / 50) + 1 + nMark = max(nMark, 2) # At least 2 marks + #Then compute number of flex bands + FlexLength = num_notch * size_notch + nb_flex_band = int (FlexLength // self.max_flex_size) + 1 + notch_per_band = num_notch / nb_flex_band + 1 + self.DebugMsg("Generate flex structure with "+str(nb_flex_band)+" bands, "+str(num_notch)+" notches, offset ="+str((xOffset, yOffset))+'\n') + #Sizes of short and long lines to make flex + LongMark = (self.height / nMark) - 2.0 #Long Mark equally divide the height + ShortMark = LongMark/2 # And short mark should lay at center of long marks + idx_notch = 0 + while num_notch > 0: + self.OffsetFlex = (xOffset, yOffset) + self.GenerateStartFlex(size_notch, ShortMark, LongMark, nMark, idx_notch) + idx_notch += 1 + notch = 0 + if notch_per_band > num_notch: + notch_per_band = num_notch #for the last one + while notch < notch_per_band - 1: + self.generate_step_flex(notch, size_notch, ShortMark, LongMark, nMark, idx_notch) + notch += 1 + idx_notch += 1 + num_notch -= notch_per_band + if num_notch == 0: + self.GenerateEndFlex(notch, size_notch, ShortMark, LongMark, nMark, 0) + else: + self.GenerateEndFlex(notch, size_notch, ShortMark, LongMark, nMark, idx_notch) + xOffset -= size_notch * notch_per_band + 10 + + def getPathVertices( self, path, node=None ): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + ''' + self.DebugMsg("Entering getPathVertices, len="+str(len(path))+"\n") + if ( not path ) or ( len( path ) == 0 ): + # Nothing to do + return None + + # parsePath() may raise an exception. This is okay + simple_path = simplepath.parsePath( path ) + if ( not simple_path ) or ( len( simple_path ) == 0 ): + # Path must have been devoid of any real content + return None + self.DebugMsg("After parsePath in getPathVertices, len="+str(len(simple_path))+"\n") + self.DebugMsg(" Path = "+str(simple_path)+'\n') + + # Get a cubic super path + cubic_super_path = cubicsuperpath.CubicSuperPath( simple_path ) + if ( not cubic_super_path ) or ( len( cubic_super_path ) == 0 ): + # Probably never happens, but... + return None + self.DebugMsg("After CubicSuperPath in getPathVertices, len="+str(len(cubic_super_path))+"\n") + + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + index_sp = 0 + for sp in cubic_super_path: + + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + self.DebugMsg("Processing SubPath"+str(index_sp)+" SubPath List len="+str(len( subpath_list))+" Vertices list length="+str(len( subpath_vertices)) +"\n") + + if len( subpath_vertices ): + subpath_list.append( subpath_vertices ) + + subpath_vertices = [] + self.DebugMsg("Before subdivideCubicPath len="+str(len( sp)) +"\n") + self.DebugMsg(" Bsp="+str(sp)+'\n') + subdivideCubicPath( sp, 0.1 ) + self.DebugMsg("After subdivideCubicPath len="+str(len( sp)) +"\n") + self.DebugMsg(" Asp="+str(sp)+'\n') + + + # Note the first point of the subpath + first_point = sp[0][1] + subpath_vertices.append( first_point ) + sp_xmin = first_point[0] + sp_xmax = first_point[0] + sp_ymin = first_point[1] + sp_ymax = first_point[1] + + n = len( sp ) + + # Traverse each point of the subpath + for csp in sp[1:n]: + + # Append the vertex to our list of vertices + pt = csp[1] + subpath_vertices.append( pt ) + #self.DebugMsg("Append subpath_vertice '"+str(pt)+"len="+str(len( subpath_vertices)) +"\n") + + + # Track the bounding box of this subpath + if pt[0] < sp_xmin: + sp_xmin = pt[0] + elif pt[0] > sp_xmax: + sp_xmax = pt[0] + if pt[1] < sp_ymin: + sp_ymin = pt[1] + elif pt[1] > sp_ymax: + sp_ymax = pt[1] + + # Track the bounding box of the overall drawing + # This is used for centering the polygons in OpenSCAD around the (x,y) origin + if sp_xmin < self.xmin: + self.xmin = sp_xmin + if sp_xmax > self.xmax: + self.xmax = sp_xmax + if sp_ymin < self.ymin: + self.ymin = sp_ymin + if sp_ymax > self.ymax: + self.ymax = sp_ymax + + # Handle the final subpath + if len( subpath_vertices ): + subpath_list.append( subpath_vertices ) + + if len( subpath_list ) > 0: + self.paths[node] = subpath_list + + ''' + self.DebugMsg("After getPathVertices\n") + index_i = 0 + for i in self.paths[node]: + index_j = 0 + for j in i: + self.DebugMsg('Path '+str(index_i)+" élément "+str(index_j)+" = "+str(j)+'\n') + index_j += 1 + index_i += 1 + ''' + + def DistanceOnPath(self, p, pt, index): + ''' + Return the distances before and after the point pt on the polygon p + The point pt is in the segment index of p, that is between p[index] and p[index+1] + ''' + i = 0 + before = 0 + after = 0 + while i < index: + # First walk through polygon up to p[index] + before += distance2points(p[i+1][0], p[i+1][1], p[i][0], p[i][1]) + i += 1 + #For the segment index compute the part before and after + before += distance2points(pt[0], pt[1], p[index][0], p[index][1]) + after += distance2points(pt[0], pt[1], p[index+1][0], p[index+1][1]) + i = index + 1 + while i < len(p)-1: + after += distance2points(p[i+1][0], p[i+1][1], p[i][0], p[i][1]) + i += 1 + return (before, after) + + # Compute position of next notch. + # Next notch will be on the path p, and at a distance notch_size from previous point + # Return new index in path p + def compute_next_notch(self, notch_points, p, Angles_p, last_index_in_p, notch_size): + index_notch = len(notch_points) + # Coordinates of last notch + Ox = notch_points[index_notch - 1][0] + Oy = notch_points[index_notch - 1][1] + CurAngle = Angles_p[last_index_in_p-1] + #self.DebugMsg("Enter cnn:last_index_in_p="+str(last_index_in_p)+" CurAngle="+str(round(CurAngle*180/math.pi))+" Segment="+str((p[last_index_in_p-1], p[last_index_in_p]))+" Length="+str(distance2points(p[last_index_in_p-1][0], p[last_index_in_p-1][1], p[last_index_in_p][0], p[last_index_in_p][1]))+"\n") + DeltaAngle = 0 + while last_index_in_p < (len(p) - 1) and distance2points(Ox, Oy, p[last_index_in_p][0], p[last_index_in_p][1]) < notch_size + DeltaAngle*self.thickness/2.0: + Diff_angle = Angles_p[last_index_in_p] - CurAngle + if Diff_angle > math.pi: + Diff_angle -= 2*math.pi + elif Diff_angle < -math.pi: + Diff_angle += 2*math.pi + Diff_angle = abs(Diff_angle) + DeltaAngle += Diff_angle + CurAngle = Angles_p[last_index_in_p] + #self.DebugMsg("cnn:last_index_in_p="+str(last_index_in_p)+" Angle="+str(round(Angles_p[last_index_in_p]*180/math.pi))+" Diff_angle="+str(round(Diff_angle*180/math.pi))+" DeltaAngle="+str(round(DeltaAngle*180/math.pi))+" Distance="+str(distance2points(Ox, Oy, p[last_index_in_p][0], p[last_index_in_p][1]))+"/"+str(notch_size + DeltaAngle*self.thickness/2.0)+"\n") + last_index_in_p += 1 # Go to next point in polygon + + + # Starting point for the line x0, y0 is p[last_index_in_p-1] + x0 = p[last_index_in_p-1][0] + y0 = p[last_index_in_p-1][1] + # End point for the line x1, y1 is p[last_index_in_p] + x1 = p[last_index_in_p][0] + y1 = p[last_index_in_p][1] + + Distance_notch = notch_size + DeltaAngle*self.thickness/2.0 + #self.DebugMsg(" compute_next_notch("+str(index_notch)+") Use Segment="+str(last_index_in_p)+" DeltaAngle="+str(round(DeltaAngle*180/math.pi))+"°, notch_size="+str(notch_size)+" Distance_notch="+str(Distance_notch)+'\n') + + # The actual notch position will be on the line between last_index_in_p-1 and last_index_in_p and at a distance Distance_notch of Ox,Oy + # The intersection of a line and a circle could be computed as a second degree equation in a general case + # Specific case, when segment is vertical + if abs(x1-x0) <0.001: + # easy case, x= x0 so y = sqrt(d2 - x*x) + solx1 = x0 + solx2 = x0 + soly1 = Oy + math.sqrt(Distance_notch**2 - (x0 - Ox)**2) + soly2 = Oy - math.sqrt(Distance_notch**2 - (x0 - Ox)**2) + else: + Slope = (y1 - y0) / (x1 - x0) + # The actual notch position will be on the line between last_index_in_p-1 and last_index_in_p and at a distance notch size of Ox,Oy + # The intersection of a line and a circle could be computed as a second degree equation + # The coefficients of this equation are computed below + a = 1.0 + Slope**2 + b = 2*Slope*y0 - 2*Slope**2*x0 - 2*Ox - 2*Slope*Oy + c = Slope**2*x0**2 + y0**2 -2*Slope*x0*y0 + 2*Slope*x0*Oy - 2*y0*Oy + Ox**2 + Oy**2 - Distance_notch**2 + solx1, solx2 = Solve2nd(a, b, c) + soly1 = y0 + Slope*(solx1-x0) + soly2 = y0 + Slope*(solx2-x0) + # Now keep the point which is between (x0,y0) and (x1, y1) + # The distance between (x1,y1) and the "good" solution will be lower than the distance between (x0,y0) and (x1,y1) + distance1 = distance2points(x1, y1, solx1, soly1) + distance2 = distance2points(x1, y1, solx2, soly2) + if distance1 < distance2: + #Keep solx1 + solx = solx1 + soly = soly1 + else: + #Keep solx2 + solx = solx2 + soly = soly2 + notch_points.append((solx, soly, last_index_in_p-1)) + if abs(distance2points(solx, soly, Ox, Oy) - Distance_notch) > 1: + #Problem + self.DebugMsg("Problem in compute_next_notch: x0,y0 ="+str((x0,y0))+" x1,y1="+str((x1,y1))+'\n') + self.DebugMsg("Len(p)="+str(len(p))+'\n') + self.DebugMsg("Slope="+str(Slope)+'\n') + self.DebugMsg("solx1="+str(solx1)+" soly1="+str(soly1)+" soly1="+str(solx2)+" soly1="+str(soly2)+'\n') + self.DebugMsg(str(index_notch)+": Adding new point ("+str(solx)+","+ str(soly) + "), distance is "+ str(distance2points(solx, soly, Ox, Oy))+ " New index in path :"+str(last_index_in_p)+'\n') + + #self.DebugMsg(str(index_notch)+": Adding new point ("+str(solx)+","+ str(soly) + "), distance is "+ str(distance2points(solx, soly, Ox, Oy))+ " New index in path :"+str(last_index_in_p)+'\n') + return last_index_in_p + + def DrawPoly(self, p, parent): + group = inkex.etree.SubElement(parent, 'g') + Newpath = inkcape_draw_cartesian((self.xmin - self.xmax - 10, 0), group) + self.DebugMsg('DrawPoly First element (0) : '+str(p[0])+ ' Call MoveTo('+ str(p[0][0])+','+str(p[0][1])+'\n') + Newpath.MoveTo(p[0][0], p[0][1]) + n = len( p ) + index = 1 + for point in p[1:n]: + Newpath.LineTo(point[0], point[1]) + index += 1 + Newpath.GenPath() + + def Simplify(self, poly, max_error): + ''' + Simplify the polygon, remove vertices which are aligned or too close from others + The parameter give the max error, below this threshold, points will be removed + return the simplified polygon, which is modified in place + ''' + #First point + LastIdx = 0 + limit = max_error * max_error #Square because distance will be square ! + i = 1 + while i < len(poly)-1: + #Build segment between Vertex[i-1] and Vertex[i+1] + Seg = Segment(poly[LastIdx], poly[i+1]) + #self.DebugMsg("Pt["+str(i)+"]/"+str(len(poly))+" ="+str(poly[i])+" Segment="+str(Seg)+"\n") + # Compute square of distance between Vertex[i] and Segment + dis_square = Seg.square_line_distance(poly[i]) + if dis_square < max_error: + # Too close, remove this point + poly.pop(i) #and do NOT increment index + #self.DebugMsg("Simplify, removing pt "+str(i)+"="+str(poly[i])+" in Segment : "+str(Seg)+" now "+str(len(poly))+" vertices\n") + else: + LastIdx = i + i += 1 #Increment index + # No need to process last point, it should NOT be modified and stay equal to first one + return poly + + def MakePolyCCW(self, p): + ''' + Take for polygon as input and make it counter clockwise. + If already CCW, just return the polygon, if not reverse it + To determine if polygon is CCW, compute area. If > 0 the polygon is CCW + ''' + area = 0 + for i in range(len(p)-1): + area += p[i][0]*p[i+1][1] - p[i+1][0]*p[i][1] + self.DebugMsg("poly area = "+str(area/2)+"\n") + if area < 0: + # Polygon is cloackwise, reverse + p.reverse() + self.DebugMsg("Polygon was clockwise, reverse it\n") + return p + + def ComputeAngles(self, p): + ''' + Compute a list with angles of all edges of the polygon + Return this list + ''' + angles = [] + for i in range(len(p)-1): + a = math.atan2(p[i+1][1] - p[i][1], p[i+1][0] - p[i][0]) + angles.append(a) + # Last value is not defined as Pt n-1 = Pt 0, set it to angle[0] + angles.append(angles[0]) + return angles + + def writeModifiedPath( self, node, parent ): + ''' + Take the paths (polygons) computed from previous step and generate + 1) The input path with notches + 2) The flex structure associated with the path with notches (same length and number of notches) + ''' + path = self.paths[node] + if ( path is None ) or ( len( path ) == 0 ): + return + self.DebugMsg('Enter writeModifiedPath, node='+str(node)+' '+str(len(path))+' paths, global Offset'+str((self.xmin - self.xmax - 10, 0))+'\n') + + # First, if there are several paths, checks if one path is included in the first one. + # If not exchange such as the first one is the bigger one. + # All paths which are not the first one will have notches reverted to be outside the polygon instead of inside the polygon. + # On the finbal paths, these notches will always be inside the form. + if len(path) > 1: + OrderPathModified = True + # Arrange paths such as greater one is first, all others + while OrderPathModified: + OrderPathModified = False + for i in range(1, len(path)): + if polyInPoly(path[i], None, path[0], None): + self.DebugMsg("Path "+str(i)+" is included in path 0\n") + elif polyInPoly(path[0], None, path[i], None): + self.DebugMsg("Path "+str(i)+" contains path 0, exchange\n") + path[0], path[i] = path[i], path[0] + OrderPathModified = True + + index_path = 0 + xFlexOffset = self.xmin - 2*self.xmax - 20 + yFlexOffset = self.height - self.ymax - 10 + for p in path: + self.DebugMsg('Processing Path, '+str(index_path)+" Len(path)="+str(len(p))+'\n') + self.DebugMsg('p='+str(p)+'\n') + reverse_notch = False + if index_path > 0 and polyInPoly(p, None, path[0], None): + reverse_notch = True # For included path, reverse notches + #Simplify path, remove unnecessary vertices + p = self.Simplify(p, 0.1) + self.DebugMsg("---After simplification, path has "+str(len(p))+" vertices\n") + #Ensure that polygon is counter clockwise + p = self.MakePolyCCW(p) + self.DrawPoly(p, parent) + #Now compute path length. Path length is the sum of length of edges + length_path = 0 + n = len( p ) + index = 1 + while index < n: + length_path += math.hypot((p[index][0] - p[index-1][0]), (p[index][1] - p[index-1][1])) + index += 1 + + angles = self.ComputeAngles(p) + # compute the sum of angles difference and check that it is 2*pi + SumAngle = 0.0 + for i in range(len(p)-1): + Delta_angle = angles[i+1] - angles[i] + if Delta_angle > math.pi: + Delta_angle -= 2*math.pi + elif Delta_angle < -math.pi: + Delta_angle += 2*math.pi + Delta_angle = abs(Delta_angle) + self.DebugMsg("idx="+str(i)+" Angle1 ="+str(round(angles[i]*180/math.pi,3))+" Angle 2="+str(round(angles[i+1]*180/math.pi,3))+" Delta angle="+str(round(Delta_angle*180/math.pi, 3))+"°\n") + SumAngle += Delta_angle + self.DebugMsg("Sum of angles="+str(SumAngle*180/math.pi)+"°\n") + + # Flex length will be path length - thickness*SumAngle/2 to keep flex aligned on the shortest path + flex_length = length_path - self.thickness*SumAngle/2 + + self.DebugMsg('Path length ='+str(length_path)+" Flex length ="+str(flex_length)+" Difference="+str(length_path-flex_length)+'\n') + + #Default notch size is notchesInterval + 2mm + #Actual notch size will be adjusted to match the length + notch_number = int(round(flex_length / (self.notchesInterval + 2), 0)) + notch_size = flex_length / notch_number + self.DebugMsg('Number of notches ='+str(notch_number)+' ideal notch size =' + str(round(notch_size,3)) +'\n') + + + # Compute position of the points on the path that will become notches + # Starting at 0, each point will be at distance actual_notch_size from the previous one, at least on one side of the notch (the one with the smallest distance) + # On the path (middle line) the actual distance will be notch_size + thickness*delta_angle/2 where delta angle is the difference between the angle at starting point and end point + # As notches are not aligned to vertices, the actual length of the path will be different from the computed one (lower in fact) + # To avoid a last notch too small, we will repeat the process until the size of the last notch is OK (less than .1mm error) + # Use an algorithm which corrects the notch_size by computing previous length of the last notch + + nb_try = 0 + size_last_notch = 0 + oldSize = 0 + BestDifference = 9999999 + BestNotchSize = notch_size + mode_linear = False + delta_notch = -0.01 #In most cases, should reduce notch size + while nb_try < 100: + notch_points = [ (p[0][0], p[0][1], 0) ] # Build a list of tuples with corrdinates (x,y) and offset within polygon which is 0 the the starting point + index = 1 # Notch index + last_index_in_p = 1 # Start at 1, index 0 is the current one + self.DebugMsg("Pass "+str(nb_try)+" First point ("+str(p[0][0])+","+ str(p[0][1]) + ' notch_size='+str(notch_size)+'\n') + while index < notch_number: + #Compute next notch point and append it to the list + last_index_in_p = self.compute_next_notch(notch_points, p, angles, last_index_in_p, notch_size) + #before, after = self.DistanceOnPath(p, notch_points[index], last_index_in_p-1) + #self.DebugMsg(" Notch "+str(index)+" placed in "+str(notch_points[index])+" distance before ="+str(before)+" after="+str(after)+" total="+str(before+after)+'\n') + index += 1 + size_last_notch = distance2points(p[n-1][0], p[n-1][1], notch_points[index-1][0], notch_points[index-1][1]) + self.DebugMsg("Last notch size :"+str(size_last_notch)+'\n') + if abs(notch_size - size_last_notch) < BestDifference: + BestNotchSize = notch_size + BestDifference = abs(notch_size - size_last_notch) + if abs(notch_size - size_last_notch) <= 0.1: + break + # Change size_notch, cut small part in each notch + # The 0.5 factor is used to avoid non convergent series (too short then too long...) + if mode_linear: + if notch_size > size_last_notch and delta_notch > 0: + delta_notch -= delta_notch*0.99 + elif notch_size < size_last_notch and delta_notch < 0: + delta_notch -= delta_notch*0.99 + notch_size += delta_notch + self.DebugMsg("Linear mode, changing delta_notch size :"+str(delta_notch)+" --> notch_size="+str(notch_size)+'\n') + else: + if notch_size > size_last_notch and delta_notch > 0: + delta_notch = -0.5*delta_notch + self.DebugMsg("Changing delta_notch size :"+str(delta_notch)+'\n') + elif notch_size < size_last_notch and delta_notch < 0: + delta_notch = -0.5*delta_notch + self.DebugMsg("Changing delta_notch size :"+str(delta_notch)+'\n') + notch_size += delta_notch + if abs(delta_notch) < 0.002: + mode_linear = True + + # Change size_notch, cut small part in each notch + oldSize = notch_size + # The 0.5 factor is used to avoid non convergent series (too short then too long...) + notch_size -= 0.5*(notch_size - size_last_notch)/notch_number + nb_try += 1 + + if nb_try >= 100: + self.DebugMsg("Algorithm doesn't converge, use best results :"+str(BestNotchSize)+" which gave last notch size difference "+str(BestDifference)+'\n') + notch_size = BestNotchSize + + # Now draw the actual notches + group = inkex.etree.SubElement(parent, 'g') + # First draw a start line which will help to position flex. + Startpath = inkcape_draw_cartesian(((self.xmin - self.xmax - 10), 0), group) + index_in_p = notch_points[0][2] + AngleSlope = math.atan2( p[index_in_p+1][1] - p[index_in_p][1], p[index_in_p+1][0] - p[index_in_p][0]) + #Now compute both ends of the notch, + AngleOrtho = AngleSlope + math.pi/2 + Line_Start = (notch_points[0][0] + self.thickness/2*math.cos(AngleOrtho), notch_points[0][1] + self.thickness/2*math.sin(AngleOrtho)) + Line_End = (notch_points[0][0] - self.thickness/2*math.cos(AngleOrtho), notch_points[0][1] - self.thickness/2*math.sin(AngleOrtho)) + self.DebugMsg("Start line Start"+str(Line_Start)+" End("+str(Line_End)+" Start inside "+str(pointInPoly(Line_Start, p))+ " End inside :"+str(pointInPoly(Line_End, p))+'\n') + #Notch End should be inside the path and Notch Start outside... If not reverse + if pointInPoly(Line_Start, p): + Line_Start, Line_End = Line_End, Line_Start + AngleOrtho += math.pi + elif not pointInPoly(Line_End, p): + #Specific case, neither one is in Polygon (Open path ?), take the lowest Y as Line_End + if Line_End[1] > Line_Start[0]: + Line_Start, Line_End = Line_End, Line_Start + AngleOrtho += math.pi + #Now compute a new Start, inside the polygon Start = 3*End - 2*Start + newLine_Start = (3*Line_End[0] - 2*Line_Start[0], 3*Line_End[1] - 2*Line_Start[1]) + Startpath.MoveTo(newLine_Start[0], newLine_Start[1] ) + Startpath.LineTo(Line_End[0], Line_End[1] ) + self.DebugMsg("Draw StartLine start from "+str((newLine_Start[0], newLine_Start[1] ))+" to "+str((Line_End[0], Line_End[1] ))+'\n') + Startpath.GenPathStart() + + #Then draw the notches + Newpath = inkcape_draw_cartesian(((self.xmin - self.xmax - 10), 0), group) + self.DebugMsg("Generate path with "+str(notch_number)+" notches, offset ="+str(((self.xmin - self.xmax - 10), 0))+'\n') + isClosed = distance2points(p[n-1][0], p[n-1][1], p[0][0], p[0][1] ) < 0.1 + # Each notch is a tuple with (X, Y, index_in_p). index_in_p will be used to compute slope of line of the notch + # The notch will be thickness long, and there will be a part 'inside' the path and a part 'outside' the path + # The longest part will be outside + index = 0 + NX0 = 0 + NX1 = 0 + NX2 = 0 + NX3 = 0 + NY0 = 0 + NY1 = 0 + NY2 = 0 + NY3 = 0 + N_Angle = 0 + Notch_Pos = [] + while index < notch_number: + # Line slope of the path at notch point is + index_in_p = notch_points[index][2] + N_Angle = angles[index_in_p] + AngleSlope = math.atan2( p[index_in_p+1][1] - p[index_in_p][1], p[index_in_p+1][0] - p[index_in_p][0]) + self.DebugMsg("Draw notch "+str(index)+" Slope is "+str(AngleSlope*180/math.pi)+'\n') + self.DebugMsg("Ref="+str(notch_points[index])+'\n') + self.DebugMsg("Path points:"+str((p[index_in_p][0], p[index_in_p][1]))+', '+ str((p[index_in_p+1][0], p[index_in_p+1][1]))+'\n') + #Now compute both ends of the notch, + AngleOrtho = AngleSlope + math.pi/2 + Notch_Start = (notch_points[index][0] + self.thickness/2*math.cos(AngleOrtho), notch_points[index][1] + self.thickness/2*math.sin(AngleOrtho)) + Notch_End = (notch_points[index][0] - self.thickness/2*math.cos(AngleOrtho), notch_points[index][1] - self.thickness/2*math.sin(AngleOrtho)) + self.DebugMsg("Notch "+str(index)+": Start"+str(Notch_Start)+" End("+str(Notch_End)+" Start inside "+str(pointInPoly(Notch_Start, p))+ " End inside :"+str(pointInPoly(Notch_End, p))+'\n') + #Notch End should be inside the path and Notch Start outside... If not reverse + if pointInPoly(Notch_Start, p): + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + elif not pointInPoly(Notch_End, p): + #Specific case, neither one is in Polygon (Open path ?), take the lowest Y as Notch_End + if Notch_End[1] > Notch_Start[0]: + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + #if should reverse notches, do it now + if reverse_notch: + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + if AngleOrtho > 2*math.pi: + AngleOrtho -= 2*math.pi + ln = 2.0 + if index == 0: + Newpath.MoveTo(Notch_Start[0], Notch_Start[1] ) + first = (Notch_Start[0], Notch_Start[1] ) + if not isClosed: + ln = 1.0 # Actual, different Notch size for the first one when open path + else: + Newpath.LineTo(Notch_Start[0], Notch_Start[1] ) + if not isClosed and index == notch_number - 1: + ln = 1.0 + self.DebugMsg("LineTo starting point from :"+str((x,y))+" to "+str((Notch_Start[0], Notch_Start[1]))+" Length ="+str(distance2points(x, y, Notch_Start[0], Notch_Start[1]))+'\n') + Newpath.LineTo(Notch_End[0], Notch_End[1] ) + NX0 = Notch_Start[0] + NY0 = Notch_Start[1] + NX1 = Notch_End[0] + NY1 = Notch_End[1] + self.DebugMsg("Draw notch_1 start from "+str((Notch_Start[0], Notch_Start[1] ))+" to "+str((Notch_End[0], Notch_End[1] ))+'Center is '+str(((Notch_Start[0]+Notch_End[0])/2, (Notch_Start[1]+Notch_End[1])/2))+'\n') + #Now draw a line parallel to the path, which is notch_size*(2/(notchesInterval+2)) long. Internal part of the notch + x = Notch_End[0] + (notch_size*ln)/(self.notchesInterval+ln)*math.cos(AngleSlope) + y = Notch_End[1] + (notch_size*ln)/(self.notchesInterval+ln)*math.sin(AngleSlope) + Newpath.LineTo(x, y ) + NX2 = x + NY2 = y + self.DebugMsg("Draw notch_2 to "+str((x, y))+'\n') + #Then a line orthogonal, which is thickness long, reverse from first one + x = x + self.thickness*math.cos(AngleOrtho) + y = y + self.thickness*math.sin(AngleOrtho) + Newpath.LineTo(x, y ) + NX3 = x + NY3 = y + self.DebugMsg("Draw notch_3 to "+str((x, y))+'\n') + Notch_Pos.append((NX0, NY0, NX1, NY1, NX2, NY2, NX3, NY3, N_Angle)) + # No need to draw the last segment, it will be drawn when starting the next notch + index += 1 + #And the last one if the path is closed + if isClosed: + self.DebugMsg("Path is closed, draw line to start point "+str((p[0][0], p[0][1] ) )+'\n') + Newpath.LineTo(first[0], first[1] ) + else: + self.DebugMsg("Path is open\n") + Newpath.GenPath() + # Analyze notches for debugging purpose + for i in range(len(Notch_Pos)): + self.DebugMsg("Notch "+str(i)+" Pos="+str(Notch_Pos[i])+" Angle="+str(round(Notch_Pos[i][8]*180/math.pi))+"\n") + if ( i > 0 ): + self.DebugMsg(" FromLast Notch N3-N0="+str(distance2points(Notch_Pos[i-1][6], Notch_Pos[i-1][7], Notch_Pos[i][0], Notch_Pos[i][1]))+"\n") + self.DebugMsg(" Distances: N0-N3="+str(distance2points(Notch_Pos[i][0], Notch_Pos[i][1], Notch_Pos[i][6], Notch_Pos[i][7]))+" N1-N2="+str(distance2points(Notch_Pos[i][2], Notch_Pos[i][3], Notch_Pos[i][4], Notch_Pos[i][5]))+"\n") + # For each notch determine if we need flex or not. Flex is only needed if there is some curves + # So if notch[i]-1 notch[i] notch[i+1] are aligned, no need to generate flex in i-1 and i + for index in range(notch_number): + self.flexnotch.append(1) # By default all notches need flex + index = 1 + while index < notch_number-1: + det = (notch_points[index+1][0]- notch_points[index-1][0])*(notch_points[index][1] - notch_points[index-1][1]) - (notch_points[index+1][1] - notch_points[index-1][1])*(notch_points[index][0] - notch_points[index-1][0]) + self.DebugMsg("Notch "+str(index)+": det="+str(det)) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[index-1] = 0 # No need for flex for this one and the following + self.flexnotch[index] = 0 + self.DebugMsg(" no flex in notch "+str(index-1)+" and "+str(index)) + index += 1 + self.DebugMsg("\n") + # For the last one try notch_number - 2, notch_number - 1 and 0 + det = (notch_points[0][0]- notch_points[notch_number - 2][0])*(notch_points[notch_number - 1][1] - notch_points[notch_number - 2][1]) - (notch_points[0][1] - notch_points[notch_number - 2][1])*(notch_points[notch_number - 1][0] - notch_points[notch_number - 2][0]) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[notch_number-2] = 0 # No need for flex for this one and the following + self.flexnotch[notch_number-1] = 0 + # and the first one with notch_number - 1, 0 and 1 + det = (notch_points[1][0]- notch_points[notch_number-1][0])*(notch_points[0][1] - notch_points[notch_number-1][1]) - (notch_points[1][1] - notch_points[notch_number-1][1])*(notch_points[0][0] - notch_points[notch_number-1][0]) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[notch_number-1] = 0 # No need for flex for this one and the following + self.flexnotch[0] = 0 + self.DebugMsg("FlexNotch ="+str(self.flexnotch)+"\n") + # Generate Associated flex + self.GenFlex(parent, notch_number, notch_size, xFlexOffset, yFlexOffset) + yFlexOffset -= self.height + 10 + index_path += 1 + + + def recursivelyTraverseSvg( self, aNodeList): + + ''' + [ This too is largely lifted from eggbot.py and path2openscad.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + Except for path, all elements are first converted into a path the processed + + Supported SVG elements: + + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + self.DebugMsg("Node type :" + node.tag + '\n') + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + self.DebugMsg("Group detected, recursive call\n") + self.recursivelyTraverseSvg( node ) + + elif node.tag == inkex.addNS( 'path', 'svg' ): + self.DebugMsg("Path detected, ") + path_data = node.get( 'd') + if path_data: + self.getPathVertices( path_data, node ) + else: + self.DebugMsg("NO path data present\n") + + elif node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + # Create a path with the outline of the rectangle + x = float( node.get( 'x' ) ) + y = float( node.get( 'y' ) ) + if ( not x ) or ( not y ): + pass + w = float( node.get( 'width', '0' ) ) + h = float( node.get( 'height', '0' ) ) + + self.DebugMsg('Rectangle X='+ str(x)+',Y='+str(y)+', W='+str(w)+' H='+str(h)+'\n' ) + + a = [] + a.append( ['M ', [x, y]] ) + a.append( [' l ', [w, 0]] ) + a.append( [' l ', [0, h]] ) + a.append( [' l ', [-w, 0]] ) + a.append( [' Z', []] ) + self.getPathVertices( simplepath.formatPath( a ), node ) + + elif node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + # Convert + # + # + + x1 = float( node.get( 'x1' ) ) + y1 = float( node.get( 'y1' ) ) + x2 = float( node.get( 'x2' ) ) + y2 = float( node.get( 'y2' ) ) + self.DebugMsg('Line X1='+ str(x1)+',Y1='+str(y1)+', X2='+str(x2)+' Y2='+str(y2)+'\n' ) + + if ( not x1 ) or ( not y1 ) or ( not x2 ) or ( not y2 ): + pass + a = [] + a.append( ['M ', [x1, y1]] ) + a.append( [' L ', [x2, y2]] ) + self.getPathVertices( simplepath.formatPath( a ), node ) + + + elif node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + self.DebugMsg('PolyLine :'+ d +'\n' ) + + + self.getPathVertices( d, node ) + + elif node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d += " Z" + self.DebugMsg('Polygon :'+ d +'\n' ) + self.getPathVertices( d, node ) + + elif node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + rx = float( node.get( 'rx', '0' ) ) + ry = float( node.get( 'ry', '0' ) ) + else: + rx = float( node.get( 'r', '0' ) ) + ry = rx + if rx == 0 or ry == 0: + pass + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % ( x1, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f ' % ( x2, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f' % ( x1, cy ) + self.DebugMsg('Arc :'+ d +'\n' ) + self.getPathVertices( d, node ) + + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS( 'metadata', 'svg' ) or node.tag == 'metadata': + + pass + + elif node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs': + + pass + + elif node.tag == inkex.addNS( 'desc', 'svg' ) or node.tag == 'desc': + + pass + + elif node.tag == inkex.addNS( 'namedview', 'sodipodi' ) or node.tag == 'namedview': + + pass + + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + + pass + + elif node.tag == inkex.addNS( 'text', 'svg' ) or node.tag == 'text': + + inkex.errormsg( 'Warning: unable to draw text, please convert it to a path first.' ) + + pass + + elif node.tag == inkex.addNS( 'title', 'svg' ) or node.tag == 'title': + + pass + + elif node.tag == inkex.addNS( 'image', 'svg' ) or node.tag == 'image': + + if not self.warnings.has_key( 'image' ): + inkex.errormsg( gettext.gettext( 'Warning: unable to draw bitmap images; ' + + 'please convert them to line art first. Consider using the "Trace bitmap..." ' + + 'tool of the "Path" menu. Mac users please note that some X11 settings may ' + + 'cause cut-and-paste operations to paste in bitmap copies.' ) ) + self.warnings['image'] = 1 + pass + + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS( 'radialGradient', 'svg' ) or node.tag == 'radialGradient': + + # Similar to pattern + pass + + elif node.tag == inkex.addNS( 'linearGradient', 'svg' ) or node.tag == 'linearGradient': + + # Similar in pattern + pass + + elif node.tag == inkex.addNS( 'style', 'svg' ) or node.tag == 'style': + + # This is a reference to an external style sheet and not the value + # of a style attribute to be inherited by child elements + pass + + elif node.tag == inkex.addNS( 'cursor', 'svg' ) or node.tag == 'cursor': + + pass + + elif node.tag == inkex.addNS( 'color-profile', 'svg' ) or node.tag == 'color-profile': + + # Gamma curves, color temp, etc. are not relevant to single color output + pass + + elif not isinstance( node.tag, basestring ): + + # This is likely an XML processing instruction such as an XML + # comment. lxml uses a function reference for such node tags + # and as such the node tag is likely not a printable string. + # Further, converting it to a printable string likely won't + # be very useful. + + pass + + else: + + inkex.errormsg( 'Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag ) + pass + + + def effect( self ): + + # convert units + unit = self.options.unit + self.thickness = self.unittouu(str(self.options.thickness) + unit) + self.height = self.unittouu(str(self.options.zc) + unit) + self.max_flex_size = self.unittouu(str(self.options.max_size_flex) + unit) + self.notchesInterval = int(self.options.notch_interval) + + svg = self.document.getroot() + docWidth = self.unittouu(svg.get('width')) + docHeigh = self.unittouu(svg.attrib['height']) + + # Open Debug file if requested + if self.options.Mode_Debug: + try: + self.fDebug = open( 'DebugPath2Flex.txt', 'w') + except IOError: + print ('cannot open debug output file') + self.DebugMsg("Start processing\n") + + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know it's extrema on the x-axis.) + + # Traverse the selected objects + for id in self.options.ids: + self.recursivelyTraverseSvg( [self.selected[id]] ) + # Determine the center of the drawing's bounding box + self.cx = self.xmin + ( self.xmax - self.xmin ) / 2.0 + self.cy = self.ymin + ( self.ymax - self.ymin ) / 2.0 + + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Flex_Path') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # For each path, build a polygon with notches and the corresponding flex. + for key in self.paths: + self.writeModifiedPath( key, layer ) + + if self.fDebug: + self.fDebug.close() + +if __name__ == '__main__': + + e = Path2Flex() + e.affect() diff --git a/fablabchemnitz_pathops.inx b/fablabchemnitz_pathops.inx new file mode 100644 index 0000000..43faa14 --- /dev/null +++ b/fablabchemnitz_pathops.inx @@ -0,0 +1,33 @@ + + + <_name>PathOps Custom + fablabchemnitz.de.pathops.custom + fablabchemnitz_pathops.py + inkex.py + + + + + + + + + + + 500 + true + true + false + + + Apply Inkscape path operations to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops.py b/fablabchemnitz_pathops.py new file mode 100644 index 0000000..e979de1 --- /dev/null +++ b/fablabchemnitz_pathops.py @@ -0,0 +1,479 @@ +#!/usr/bin/env python +""" +pathops.py - Inkscape extension to apply multiple path operations + +This extension takes a selection of path and a group of paths, or several +paths, and applies a path operation with the top-most path in the z-order, and +each selected path or each child of a selected group underneath. + +Copyright (C) 2014 Ryan Lerch (multiple difference) + 2016 Maren Hachmann + (refactoring, extend to multibool) + 2017 su_v + Rewrite to support large selections (process in chunks), to + improve performance (support groups, z-sort ids with python + instead of external query), and to extend GUI options. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +""" +# pylint: disable=too-many-ancestors + +# standard library +import os +from subprocess import Popen, PIPE +import time + +# local library +try: + import inkex_local as inkex +except ImportError: + import inkex +import simplestyle + + +__version__ = '0.4' + + +# Global "constants" +SVG_SHAPES = ('rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon') + + +# ----- general helper functions + +def timed(f): + """Minimalistic timer for functions.""" + # pylint: disable=invalid-name + start = time.time() + ret = f() + elapsed = time.time() - start + return ret, elapsed + + +# ----- SVG element helper functions + +def get_defs(node): + """Find in children of *node*, return first one found.""" + path = '/svg:svg//svg:defs' + try: + return node.xpath(path, namespaces=inkex.NSS)[0] + except IndexError: + return inkex.etree.SubElement(node, inkex.addNS('defs', 'svg')) + + +def is_group(node): + """Check node for group tag.""" + return node.tag == inkex.addNS('g', 'svg') + + +def is_path(node): + """Check node for path tag.""" + return node.tag == inkex.addNS('path', 'svg') + + +def is_basic_shape(node): + """Check node for SVG basic shape tag.""" + return node.tag in (inkex.addNS(tag, 'svg') for tag in SVG_SHAPES) + + +def is_custom_shape(node): + """Check node for Inkscape custom shape type.""" + return inkex.addNS('type', 'sodipodi') in node.attrib + + +def is_shape(node): + """Check node for SVG basic shape tag or Inkscape custom shape type.""" + return is_basic_shape(node) or is_custom_shape(node) + + +def has_path_effect(node): + """Check node for Inkscape path-effect attribute.""" + return inkex.addNS('path-effect', 'inkscape') in node.attrib + + +def is_modifiable_path(node): + """Check node for editable path data.""" + return is_path(node) and not (has_path_effect(node) or + is_custom_shape(node)) + + +def is_image(node): + """Check node for image tag.""" + return node.tag == inkex.addNS('image', 'svg') + + +def is_text(node): + """Check node for text tag.""" + return node.tag == inkex.addNS('text', 'svg') + + +def does_pathops(node): + """Check whether node is supported by Inkscape path operations.""" + return (is_path(node) or + is_shape(node) or + is_text(node)) + + +# ----- list processing helper functions + +def z_sort(node, alist): + """Return new list sorted in document order (depth-first traversal).""" + ordered = [] + id_list = list(alist) + count = len(id_list) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + ordered.append(element_id) + count -= 1 + if not count: + break + return ordered + + +def z_iter(node, alist): + """Return iterator over ids in document order (depth-first traversal).""" + id_list = list(alist) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + yield element_id + + +def chunks(alist, max_len): + """Chunk a list into sublists of max_len length.""" + for i in range(0, len(alist), max_len): + yield alist[i:i+max_len] + + +# ----- process external command, files + +def run(cmd_format, stdin_str=None, verbose=False): + """Run command""" + if verbose: + inkex.debug(cmd_format) + out = err = None + myproc = Popen(cmd_format, shell=False, + stdin=PIPE, stdout=PIPE, stderr=PIPE) + out, err = myproc.communicate(stdin_str) + if myproc.returncode == 0: + return out + elif err is not None: + inkex.errormsg(err) + + +def create_pathops(top_path, id_list, ink_verb): + """Create the list of commands to execute for a single pathop.""" + # build list with command line arguments + cmdlist = [] + for node_id in id_list: + cmdlist.append("--select=" + top_path) + cmdlist.append("--verb=EditDuplicate") + cmdlist.append("--select=" + node_id) + cmdlist.append("--verb=" + ink_verb) + cmdlist.append("--verb=EditDeselect") + return cmdlist + + +def run_pathops(svgfile, cmds, max_ops, dry_run=False): + """Run the pathops in chunks of max_ops commands.""" + count = 0 + chunk = cmds[:max_ops] + cmds = cmds[max_ops:] + while len(chunk) > 0: + # build list with command line arguments + count += 1 + cmdlist = [] + cmdlist.append("inkscape") + for cmd in chunk: + cmdlist += cmd + cmdlist.append("--verb=FileSave") + cmdlist.append("--verb=FileQuit") + cmdlist.append("-f") + cmdlist.append(svgfile) + # process command list + if dry_run: + inkex.debug("\n# Processing {}. chunk ".format(count) + + "with {} objects ...".format(len(chunk))) + inkex.debug(cmdlist) + else: + run(cmdlist) + chunk = cmds[:max_ops] + cmds = cmds[max_ops:] + return count + + +def cleanup(tempfile): + """Clean up tempfile.""" + try: + os.remove(tempfile) + except Exception: # pylint: disable=broad-except + pass + + +# ----- PathOps() class, methods + +class PathOps(inkex.Effect): + """Effect-based class to apply Inkscape path operations.""" + + def __init__(self): + """Init base class.""" + inkex.Effect.__init__(self) + + # options + self.OptionParser.add_option("--ink_verb", + action="store", type="string", + dest="ink_verb", default="SelectionDiff", + help="Inkscape verb for path op") + self.OptionParser.add_option("--max_ops", + action="store", type="int", + dest="max_ops", default=500, + help="Max ops per external run") + self.OptionParser.add_option("--recursive_sel", + action="store", type="inkbool", + dest="recursive_sel", default=True, + help="Recurse beyond one group level") + self.OptionParser.add_option("--keep_top", + action="store", type="inkbool", + dest="keep_top", default=True, + help="Keep top element when done") + self.OptionParser.add_option("--default_stroke", + action="store", type="string", + dest="default_stroke", default="#000000", + help="Default stroke color") + self.OptionParser.add_option("--default_stroke_width", + action="store", type="string", + dest="default_stroke_width", + default="1px", + help="Default stroke width") + self.OptionParser.add_option("--dry_run", + action="store", type="inkbool", + dest="dry_run", default=False, + help="Dry-run without exec") + + def update_attrib(self, node, prop, val): + """Update checked property.""" + if not self.options.dry_run: + node.attrib[prop] = val + + def check_props(self, node): + """Check properties and modify as needed based on options.""" + if self.options.ink_verb == 'SelectionCutPath': + sdict = simplestyle.parseStyle(node.get('style')) + fill_color = sdict.get('fill', '') + if fill_color == 'none' or fill_color.startswith('url('): + fill_color = None + stroke_color = fill_color or self.options.default_stroke + stroke_width = self.unittouu(self.options.default_stroke_width) + prop = 'stroke' + if prop not in sdict or sdict[prop] == 'none': + sdict[prop] = stroke_color + if prop in node.attrib and node.attrib[prop] == 'none': + self.update_attrib(node, prop, stroke_color) + prop = 'stroke-width' + if prop not in sdict: + sdict[prop] = stroke_width + self.update_attrib(node, 'style', simplestyle.formatStyle(sdict)) + + def recurse_selection(self, node, id_list, level=0, current=0): + """Recursively process selection, add checked elements to id list.""" + current += 1 + if not level or current <= level: + if is_group(node): + for child in node: + id_list = self.recurse_selection( + child, id_list, level, current) + if does_pathops(node): + self.check_props(node) + id_list.append(node.get('id')) + return id_list + + def get_selected_ids(self): + """Return a list of valid ids for inkscape path operations.""" + id_list = [] + if not len(self.selected): + pass + else: + # level = 0: unlimited recursion into groups + # level = 1: process top-level groups only + level = 0 if self.options.recursive_sel else 1 + for node in self.selected.values(): + self.recurse_selection(node, id_list, level) + if len(id_list) < 2: + inkex.errormsg("This extension requires at least 2 elements " + "of type path, shape or text. " + "The elements can be part of selected groups, " + "or directly selected.") + return None + else: + return id_list + + def get_sorted_ids(self): + """Return id of top-most object, and a list with z-sorted ids.""" + top_path = None + sorted_ids = None + id_list = self.get_selected_ids() + if id_list is not None: + sorted_ids = list(z_iter(self.document.getroot(), id_list)) + top_path = sorted_ids.pop() + return (top_path, sorted_ids) + + def loop_pathops(self, top_path, other_paths): + """Loop through selected items and run external command(s).""" + # init variables + max_ops = self.options.max_ops or 500 + ink_verb = self.options.ink_verb or "SelectionDiff" + full_stack = False + if ink_verb == "Trim": + ink_verb = "SelectionDiff" + full_stack = True + dry_run = self.options.dry_run + tempfile = os.path.splitext(self.svg_file)[0] + "-pathops.svg" + # prepare + if dry_run: + inkex.debug("# Top object id: {}".format(top_path)) + inkex.debug("# Other objects total: {}".format(len(other_paths))) + else: + with open(tempfile, 'wb') as copycat: + self.document.write(copycat) + # create a list of commands to execute + cmds = [] + while len(other_paths) > 0: + cmds.append(create_pathops(top_path, other_paths, ink_verb)) + if full_stack: + # now we make the second path the new top and perform the + # same operation again on it and the remaining paths + top_path = other_paths.pop() + else: + break + # run the commands, if necessary in chunks of up to max_ops at a time + count = run_pathops(tempfile, cmds, max_ops, dry_run) + # finish up + if dry_run: + inkex.debug("\n# {} chunks processed, ".format(count) + + "with {} total objects.".format(len(other_paths))) + else: + # replace current document with content of temp copy + xmlparser = inkex.etree.XMLParser(huge_tree=True) + self.document = inkex.etree.parse(tempfile, parser=xmlparser) + # optionally delete top-most element when done + if not self.options.keep_top: + top_node = self.getElementById(top_path) + if top_node is not None: + top_node.getparent().remove(top_node) + # purge missing tagrefs (see below) + self.update_tagrefs() + # clean up + cleanup(tempfile) + + def effect(self): + """Main entry point to process current document.""" + if self.has_tagrefs(): + # unsafe to use with extensions ... + inkex.errormsg("This document uses Inkscape selection sets. " + "Modifying the content with a PathOps extension " + "may cause Inkscape to crash on reload or close. " + "Please delete the selection sets, " + "save the document under a new name and " + "try again in a new Inkscape session.") + else: + # process selection + top_path, other_paths = self.get_sorted_ids() + if top_path is None or other_paths is None: + return + else: + self.loop_pathops(top_path, other_paths) + + # ----- workaround to avoid crash on quit + + # If selection set tagrefs have been deleted as a result of the + # extension's modifications of the drawing content, inkscape will + # crash when closing the document window later on unless the tagrefs + # are checked and cleaned up manually by the extension script. + + # NOTE: crash on reload in the main process (after the extension has + # finished) still happens if Selection Sets dialog was actually + # opened and used in the current session ... the extension could + # create fake (invisible) objects which reuse the ids? + # No, fake placeholder elements do not prevent the crash on reload + # if the dialog was opened before. + + # TODO: these checks (and the purging of obsolete tagrefs) probably + # should be applied in Effect() itself, instead of relying on + # workarounds in derived classes that modify drawing content. + + @staticmethod + def get_tagrefs(node): + """Find tagrefs in node, return list.""" + inkscape_tagrefs = [] + try: + inkscape_tagrefs = node.findall( + "inkscape:tag/inkscape:tagref", namespaces=inkex.NSS) + except TypeError: + # fallback for lxml < 2.3.0 + path = 'inkscape:tag/inkscape:tagref' + inkscape_tagrefs = node.xpath(path, namespaces=inkex.NSS) + return inkscape_tagrefs + + def has_tagrefs(self): + """Check whether document has selection sets with tagrefs.""" + defs = get_defs(self.document.getroot()) + return True if len(self.get_tagrefs(defs)) else False + + def update_tagrefs(self, mode='purge'): + """Check tagrefs for deleted objects.""" + defs = get_defs(self.document.getroot()) + inkscape_tagrefs = self.get_tagrefs(defs) + if len(inkscape_tagrefs): + for tagref in inkscape_tagrefs: + href = tagref.get(inkex.addNS('href', 'xlink'))[1:] + if self.getElementById(href) is None: + if mode == 'purge': + tagref.getparent().remove(tagref) + elif mode == 'placeholder': + temp = inkex.etree.Element(inkex.addNS('path', 'svg')) + temp.set('id', href) + temp.set('d', 'M 0,0 Z') + self.document.getroot().append(temp) + + # ----- workaround to fix Effect() performance with large selections + + def collect_ids(self, doc=None): + """Iterate all elements, build id dicts (doc_ids, selected).""" + doc = self.document if doc is None else doc + id_list = list(self.options.ids) + for node in doc.getroot().iter(tag=inkex.etree.Element): + if 'id' in node.attrib: + node_id = node.get('id') + self.doc_ids[node_id] = 1 + if node_id in id_list: + self.selected[node_id] = node + id_list.remove(node_id) + + def getselected(self): + """Overload Effect() method.""" + self.collect_ids() + + def getdocids(self): + """Overload Effect() method.""" + pass + + +if __name__ == '__main__': + ME = PathOps() + ME.affect() + +# vim: et shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=79 diff --git a/fablabchemnitz_pathops_combine.inx b/fablabchemnitz_pathops_combine.inx new file mode 100644 index 0000000..f613fc4 --- /dev/null +++ b/fablabchemnitz_pathops_combine.inx @@ -0,0 +1,20 @@ + + + <_name>Combine + fablabchemnitz.de.pathops.combine + fablabchemnitz_pathops.py + inkex.py + SelectionCombine + + + Apply Inkscape 'Combine' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_cutpath.inx b/fablabchemnitz_pathops_cutpath.inx new file mode 100644 index 0000000..bb598ba --- /dev/null +++ b/fablabchemnitz_pathops_cutpath.inx @@ -0,0 +1,20 @@ + + + <_name>Cut Path + fablabchemnitz.de.pathops.cut_path + fablabchemnitz_pathops.py + inkex.py + SelectionCutPath + + + Apply Inkscape 'Cut Path' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_difference.inx b/fablabchemnitz_pathops_difference.inx new file mode 100644 index 0000000..1fac1a8 --- /dev/null +++ b/fablabchemnitz_pathops_difference.inx @@ -0,0 +1,20 @@ + + + <_name>Difference + fablabchemnitz.de.pathops.difference + fablabchemnitz_pathops.py + inkex.py + SelectionDiff + + + Apply Inkscape 'Difference' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_division.inx b/fablabchemnitz_pathops_division.inx new file mode 100644 index 0000000..67fdc70 --- /dev/null +++ b/fablabchemnitz_pathops_division.inx @@ -0,0 +1,20 @@ + + + <_name>Division + fablabchemnitz.de.pathops.division + fablabchemnitz_pathops.py + inkex.py + SelectionDivide + + + Apply Inkscape 'Division' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_exclusion.inx b/fablabchemnitz_pathops_exclusion.inx new file mode 100644 index 0000000..1bee111 --- /dev/null +++ b/fablabchemnitz_pathops_exclusion.inx @@ -0,0 +1,20 @@ + + + <_name>Exclusion + fablabchemnitz.de.pathops.exclusion + fablabchemnitz_pathops.py + inkex.py + SelectionSymDiff + + + Apply Inkscape 'Exclusion' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_intersection.inx b/fablabchemnitz_pathops_intersection.inx new file mode 100644 index 0000000..2d719b2 --- /dev/null +++ b/fablabchemnitz_pathops_intersection.inx @@ -0,0 +1,20 @@ + + + <_name>Intersection + fablabchemnitz.de.pathops.intersect + fablabchemnitz_pathops.py + inkex.py + SelectionIntersect + + + Apply Inkscape 'Intersection' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_trim.inx b/fablabchemnitz_pathops_trim.inx new file mode 100644 index 0000000..8a5d0a3 --- /dev/null +++ b/fablabchemnitz_pathops_trim.inx @@ -0,0 +1,20 @@ + + + <_name>Trim + fablabchemnitz.de.pathops.trim + fablabchemnitz_pathops.py + inkex.py + Trim + + + Apply Inkscape 'Difference' path operation recursively down the stack on multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_pathops_union.inx b/fablabchemnitz_pathops_union.inx new file mode 100644 index 0000000..47ac317 --- /dev/null +++ b/fablabchemnitz_pathops_union.inx @@ -0,0 +1,20 @@ + + + <_name>Union + fablabchemnitz.de.pathops.union + fablabchemnitz_pathops.py + inkex.py + SelectionUnion + + + Apply Inkscape 'Union' path operation to multiple objects. + all + + + \ No newline at end of file diff --git a/fablabchemnitz_paths2openscad.inx b/fablabchemnitz_paths2openscad.inx new file mode 100644 index 0000000..b0a42ea --- /dev/null +++ b/fablabchemnitz_paths2openscad.inx @@ -0,0 +1,154 @@ + + + <_name>Paths to OpenSCAD + fablabchemnitz.de.paths2openscad + org.inkscape.output.svg.inkscape + + + {NAME}.scad + <_param name="fname_help" type="description">Use '{NAME}.scad' here to use the name from svg. + 5.0 + <_param name="zsize_help" type="description">Default 3D extrude depth (when no zsize is parsed from an svg object). + true + <_param name="parsedesc_help" type="description">Read the extruded zsize, zoffset, scale per svg object from its description or ID. See the Extrusion Syntax tab for details. + <_param name="spacer" type="description"> + + + false + <_param name="scadview_help" type="description">Start OpenSCAD to view the 3D-model. + <_param name="spacer" type="description"> + + + false + <_param name="scad2stl_help" type="description">Also save an .stl file next to the specified output file. + <_param name="spacer" type="description"> + + + false + <_param name="stlpost_help" type="description">Start e.g. a slicer after converting to STL. See the Commands tab for details. + false + <_param name="spacer" type="description"> + + + + + 0.2 + <_param name="smoothness_help" type="description">Used when rendering curves. Smaller values are smoother. Range: 0.0001 to 5 + + 0 + + + + + + + <_param name="outline_header" type="description" appearance="header">Outline Mode + <_param name="outline_help" type="description">Objects are extruded into 3D either in normal mode, or in outline mode. Normally filled areas are extruded, ignoring the line width. Objects with no fill are rendered in outline mode. + +Note: the 'Scale: XX %' instruction has no effect in outline mode. + 1.0 + 100.0 + + + + + + + False + <_param name="spacer" type="description"> + + + + + <_param name="commands_help" type="description">Placeholders: You can use '{NAME}.scad' for the OpenSCAD file to read as specified as 'Output file' in the main tab. You can use '{NAME}.stl' for an STL file to write. + + <_param name="commands_help_warn" type="description"> +Beware, Windows and Mac users: The shipped defaults are for Linux. + <_param name="commands_help_mac" type="description"> +Mac: /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD + <_param name="spacer" type="description"> + + + + openscad '{NAME}.scad' + <_param name="scadviewcmd_help" type="description">Is only started, if no command of the same name is running. Always started non-blocking. A running OpenSCAD automatically picks up changed file contents. Defaults: + <_param name="scadviewcmd_default_linux" type="description">Linux: openscad '{NAME}.scad' + <_param name="spacer" type="description"> + + + + openscad '{NAME}.scad' -o '{NAME}.stl' + <_param name="stlpostcmd_help" type="description">Automatically run, when STL postprocessing is requested. + <_param name="spacer" type="description"> + + + + cura '{NAME}.stl' & + <_param name="stlpostcmd_help" type="description">Append an '&' for non-blocking. + <_param name="spacer" type="description"> + + + + + <_param name="extrusion_1" type="description" xml:space="preserve">The depth (Z-Axis) and other parameters can be defined through an svg object's description. The menu 'Object->Object Properties ...' (Shift-Ctrl-O) shows details of one selected object. + +If an object's ID is in either name_XXX_mm or name_XXXmm +format, then XXX is translated into zsize in millimeters. +Use . or _ as separator for a decimal number. +Note that all whitespace or comma are saved as '_' in ID. + + <_param name="extrusion_2" type="description" appearance="header">Syntax for the object property description + <_param name="extrusion_3" type="description" xml:space="preserve">Depth: 10 mm + Linear extrusion length (or Z-Size)) of the object. + +Antimatter: true + Object is part of the difference set, which is + cut away from all other objects. + +Offset: 4.5 mm + Move an object upwards to create a balcony (or window). + +Taper: 90 % or Taper: 120,60 % + Scale the object along its Z-axis. The bottom surface always + is as drawn, but the top surface is scaled to this value. + If two values are given (separated by Komma), different + scaling applies along X- and Y-axis. + +Parameters in the objects take precedence over groups. + + + <_param name="aboutpage" type="description" xml:space="preserve"> +This extension converts Inkscape paths to +extruded polygons in OpenSCAD. Before +using, some objects must firat be converted to paths +with the "Path > Object to Path" menu item. + +Inkscape's units of pixels are converted +to millimeters using the SVG standard's +definition of 96 px = 1 inch = 25.4 mm. +(Before inkscape 0.92 the standard was 90 px per inch, +Adobe products often use 75 px per inch) + +v0.25 +Dan Newman (dan newman @ mtbaldy us) +Josef Skladanka (jskladan @ redhat com) +Juergen Weigert (juergen @ fabmail org) + +Find updates at https://github.com/fablabnbg/inkscape-paths2openscad/releases + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_paths2openscad.py b/fablabchemnitz_paths2openscad.py new file mode 100644 index 0000000..829fbd1 --- /dev/null +++ b/fablabchemnitz_paths2openscad.py @@ -0,0 +1,1430 @@ +#!/usr/bin/env python3 +# +# paths2openscad.py +# +# This is an Inkscape extension to output paths to extruded OpenSCAD polygons +# The Inkscape objects must first be converted to paths (Path > Object to +# Path). Some paths may not work well -- the paths have to be polygons. As +# such, paths derived from text may meet with mixed results. + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# 10 June 2012 +# +# 15 June 2012 +# Updated by Dan Newman to handle a single level of polygon nesting. +# This is sufficient to handle most fonts. +# If you want to nest two polygons, combine them into a single path +# within Inkscape with "Path > Combine Path". +# +# 15 August 2014 +# Updated by Josef Skladanka to automatically set extruded heights +# +# 2017-03-11, juergen@fabmail.org +# 0.12 parse svg width="400mm" correctly. Came out downscaled by 3... +# +# 2017-04-08, juergen@fabmail.org +# 0.13 allow letter 'a' prefix on zsize values for anti-matter. +# All anti-matter objects are subtracted from all normal objects. +# raise: Offset along Z axis, to make cut-outs and balconies. +# Refactored object_merge_extrusion_values() from convertPath(). +# Inheriting extrusion values from enclosing groups. +# +# 2017-04-10, juergen@fabmail.org +# 0.14 Started merging V7 outline mode by Neon22. +# (http://www.thingiverse.com/thing:1065500) +# Toplevel object from http://www.thingiverse.com/thing:1286041 +# is already included. +# +# 2017-04-16, juergen@fabmail.org +# 0.15 Fixed https://github.com/fablabnbg/inkscape-paths2openscad/ +# issues/1#issuecomment-294257592 +# Line width of V7 code became a minimum line width, +# rendering is now based on stroke-width +# Refactored LengthWithUnit() from getLength() +# Finished merge with v7 code. +# Subpath in subpath are now handled very nicely. +# Added msg_extrude_by_hull_and_paths() outline mode with nested paths. +# +# 2017-06-12, juergen@fabmail.org +# 0.16 Feature added: scale: XXX to taper the object while extruding. + +# 2017-06-15, juergen@fabmail.org +# 0.17 scale is now centered on each path. and supports an optional second +# value for explicit Y scaling. Renamed the autoheight command line +# option to 'parsedesc' with default true. Renamed dict auto to +# extrusion. Rephrased all prose to refer to extrusion syntax rather +# than auto zsize. +# 2017-06-18, juergen@fabmail.org +# 0.18 pep8 relaxed. all hard 80 cols line breaks removed. +# Refactored the commands into a separate tab in the inx. +# Added 'View in OpenSCAD' feature with pidfile for single instance. +# +# 2017-08-10, juergen@fabmail.org +# 0.19 fix style="" elements. +# +# 2017-11-14, juergen@fabmail.org +# 0.20 do not traverse into objects with style="display:none" +# some precondition checks had 'pass' but should have 'continue'. +# +# 2018-01-21, juergen@fabmail.org +# 0.21 start a new openscad instance if the command has changed. +# +# 2018-01-27, juergen@fabmail.org +# 0.22 command comparison fixed. do not use 0.21 ! +# +# 2018-02-18, juergen@fabmail.org +# 0.23 fixed rect with x=0 not rendered. +# FIXME: should really use inksvg.py here too! +# +# 2018.09-09, juergen@fabmail.org +# 0.24 merged module feature, renamed Heigh,Raise to Zsize,Zoffset +# +# 2019-01-18, juergen@fabmail.org +# 0.25 Allow Depth,Offset instead of Zsize,Zoffset +# Simplify the syntax description page. +# Added parameter line_width_scale. +# Added parameter chamfer, and module chamfer_sphere for doing minkowski +# +# CAUTION: keep the version number in sync with paths2openscad.inx about page + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import os.path +import inkex +import simplepath +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc +import re +import time +import string +import tempfile +import gettext + +VERSION = '0.25'; # CAUTION: Keep in sync with all *.inx files +DEFAULT_WIDTH = 100 +DEFAULT_HEIGHT = 100 +# Parse all these as 56.7 mm zsize: +# "path1234_56_7_mm", "pat1234____57.7mm", "path1234_57.7__mm" +# +# The verbs Height and Raise are deprecated. Use Zsize and Zoffset, (or Depth and Offset) instead. +RE_AUTO_ZSIZE_ID = re.compile(r".*?_+([aA]?\d+(?:[_\.]\d+)?)_*mm$") +RE_AUTO_ZSIZE_DESC = re.compile(r"^(?:[Hh]eight|[Dd]epth|[Zz]-?size):\s*([aA]?\d+(?:\.\d+)?) ?mm$", re.MULTILINE) +RE_AUTO_SCALE_DESC = re.compile(r"^(?:sc|[Ss]cale|[Tt]aper):\s*(\d+(?:\.\d+)?(?: ?, ?\d+(?:\.\d+)?)?) ?%$", re.MULTILINE) +RE_AUTO_ZOFFSET_DESC = re.compile(r"^(?:[Rr]aise|[Zz]-?offset|[Oo]ffset):\s*(\d+(?:\.\d+)?) ?mm$", re.MULTILINE) +DESC_TAGS = ['desc', inkex.addNS('desc', 'svg')] + +# CAUTION: keep these defaults in sync with paths2openscad.inx +INX_SCADVIEW = os.getenv('INX_SCADVIEW', "openscad '{NAME}.scad'") +INX_SCAD2STL = os.getenv('INX_SCAD2STL', "openscad '{NAME}.scad' -o '{NAME}.stl'") +INX_STL_POSTPROCESSING = os.getenv('INX_STL_POSTPROCESSING', "cura '{NAME}.stl' &") + + +def IsProcessRunning(pid): + ''' + Windows code from https://stackoverflow.com/questions/7647167/check-if-a-process-is-running-in-python-in-linux-unix + ''' + sys_platform = sys.platform.lower() + if sys_platform.startswith('win'): + import subprocess + + ps = subprocess.Popen(r'tasklist.exe /NH /FI "PID eq %d"' % (pid), shell=True, stdout=subprocess.PIPE) + output = ps.stdout.read() + ps.stdout.close() + ps.wait() + if processId in output: + return True + return False + else: + # OSX sys_platform.startswith('darwin'): + # and Linux + try: + os.kill(pid, 0) + return True + except OSError: + return False + + +def parseLengthWithUnits(str, default_unit='px'): + ''' + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + With inkscape 0.91 we need other units too: e.g. svg:width="400mm" + ''' + + u = default_unit + s = str.strip() + if s[-2:] in ('px', 'pt', 'pc', 'mm', 'cm', 'in', 'ft'): + u = s[-2:] + s = s[:-2] + elif s[-1:] in ('m', '%'): + u = s[-1:] + s = s[:-1] + + try: + v = float(s) + except: + return None, None + + return v, u + + +def pointInBBox(pt, bbox): + ''' + Determine if the point pt=[x, y] lies on or within the bounding + box bbox=[xmin, xmax, ymin, ymax]. + ''' + + # if ( x < xmin ) or ( x > xmax ) or ( y < ymin ) or ( y > ymax ) + if (pt[0] < bbox[0]) or (pt[0] > bbox[1]) or (pt[1] < bbox[2]) or (pt[1] > bbox[3]): + return False + else: + return True + + +def bboxInBBox(bbox1, bbox2): + ''' + Determine if the bounding box bbox1 lies on or within the + bounding box bbox2. NOTE: we do not test for strict enclosure. + + Structure of the bounding boxes is + + bbox1 = [ xmin1, xmax1, ymin1, ymax1 ] + bbox2 = [ xmin2, xmax2, ymin2, ymax2 ] + ''' + + # if ( xmin1 < xmin2 ) or ( xmax1 > xmax2 ) or + # ( ymin1 < ymin2 ) or ( ymax1 > ymax2 ) + + if (bbox1[0] < bbox2[0]) or (bbox1[1] > bbox2[1]) or (bbox1[2] < bbox2[2]) or (bbox1[3] > bbox2[3]): + return False + else: + return True + + +def pointInPoly(p, poly, bbox=None): + ''' + Use a ray casting algorithm to see if the point p = [x, y] lies within + the polygon poly = [[x1,y1],[x2,y2],...]. Returns True if the point + is within poly, lies on an edge of poly, or is a vertex of poly. + ''' + + if (p is None) or (poly is None): + return False + + # Check to see if the point lies outside the polygon's bounding box + if bbox is not None: + if not pointInBBox(p, bbox): + return False + + # Check to see if the point is a vertex + if p in poly: + return True + + # Handle a boundary case associated with the point + # lying on a horizontal edge of the polygon + x = p[0] + y = p[1] + p1 = poly[0] + p2 = poly[1] + for i in range(len(poly)): + if i != 0: + p1 = poly[i - 1] + p2 = poly[i] + if (y == p1[1]) and (p1[1] == p2[1]) and (x > min(p1[0], p2[0])) and (x < max(p1[0], p2[0])): + return True + + n = len(poly) + inside = False + + p1_x, p1_y = poly[0] + for i in range(n + 1): + p2_x, p2_y = poly[i % n] + if y > min(p1_y, p2_y): + if y <= max(p1_y, p2_y): + if x <= max(p1_x, p2_x): + if p1_y != p2_y: + intersect = p1_x + (y - p1_y) * (p2_x - p1_x) / (p2_y - p1_y) + if x <= intersect: + inside = not inside + else: + inside = not inside + p1_x, p1_y = p2_x, p2_y + + return inside + + +def polyInPoly(poly1, bbox1, poly2, bbox2): + ''' + Determine if polygon poly2 = [[x1,y1],[x2,y2],...] + contains polygon poly1. + + The bounding box information, bbox=[xmin, xmax, ymin, ymax] + is optional. When supplied it can be used to perform rejections. + Note that one bounding box containing another is not sufficient + to imply that one polygon contains another. It's necessary, but + not sufficient. + ''' + + # See if poly1's bboundin box is NOT contained by poly2's bounding box + # if it isn't, then poly1 cannot be contained by poly2. + + if (bbox1 is not None) and (bbox2 is not None): + if not bboxInBBox(bbox1, bbox2): + return False + + # To see if poly1 is contained by poly2, we need to ensure that each + # vertex of poly1 lies on or within poly2 + + for p in poly1: + if not pointInPoly(p, poly2, bbox2): + return False + + # Looks like poly1 is contained on or in Poly2 + + return True + + +def subdivideCubicPath(sp, flat, i=1): + ''' + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + ''' + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if cspsubdiv.maxdist(b) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def msg_linear_extrude(id, prefix): + msg = ' translate (%s_%d_center) linear_extrude(height=h, convexity=10, scale=0.01*s)\n' + \ + ' translate (-%s_%d_center) polygon(%s_%d_points);\n' + return msg % (id, prefix, id, prefix, id, prefix) + + +def msg_linear_extrude_by_paths(id, prefix): + msg = ' translate (%s_%d_center) linear_extrude(height=h, convexity=10, scale=0.01*s)\n' + \ + ' translate (-%s_%d_center) polygon(%s_%d_points, %s_%d_paths);\n' + return msg % (id, prefix, id, prefix, id, prefix, id, prefix) + + +def msg_extrude_by_hull(id, prefix): + msg = ' for (t = [0: len(%s_%d_points)-2]) {\n' % (id, prefix) + \ + ' hull() {\n' + \ + ' translate(%s_%d_points[t]) \n' % (id, prefix) + \ + ' cylinder(h=h, r=w/2, $fn=res);\n' + \ + ' translate(%s_%d_points[t + 1]) \n' % (id, prefix) + \ + ' cylinder(h=h, r=w/2, $fn=res);\n' + \ + ' }\n' + \ + ' }\n' + return msg + + +def msg_extrude_by_hull_and_paths(id, prefix): + msg = ' for (p = [0: len(%s_%d_paths)-1]) {\n' % (id, prefix) + \ + ' pp = %s_%d_paths[p];\n' % (id, prefix) + \ + ' for (t = [0: len(pp)-2]) {\n' + \ + ' hull() {\n' + \ + ' translate(%s_%d_points[pp[t]])\n' % (id, prefix) + \ + ' cylinder(h=h, r=w/2, $fn=res);\n' + \ + ' translate(%s_%d_points[pp[t+1]])\n' % (id, prefix) + \ + ' cylinder(h=h, r=w/2, $fn=res);\n' + \ + ' }\n' + \ + ' }\n' + \ + ' }\n' + return msg + + +class OpenSCAD(inkex.Effect): + def __init__(self): + + inkex.localize() # does not help for localizing my *.inx file + inkex.Effect.__init__(self) + + self.OptionParser.add_option( + "--tab", # NOTE: value is not used. + action="store", type="string", dest="tab", default="splash", + help="The active tab when Apply was pressed") + + self.OptionParser.add_option( + '--smoothness', dest='smoothness', type='float', default=float(0.2), action='store', + help='Curve smoothing (less for more)') + + self.OptionParser.add_option( + '--chamfer', dest='chamfer', type='float', default=float(1.), action='store', + help='Add a chamfer radius, displacing all object walls outwards [mm]') + + self.OptionParser.add_option( + '--chamfer_fn', dest='chamfer_fn', type='int', default=int(4), action='store', + help='Chamfer precision ($fn when generating the minkowski sphere)') + + self.OptionParser.add_option( + '--depth', '--zsize', dest='zsize', type='string', default='5', action='store', + help='Depth (Z-size) [mm]') + + self.OptionParser.add_option( + '--min_line_width', dest='min_line_width', type='float', default=float(1), action='store', + help='Line width for non closed curves [mm]') + + self.OptionParser.add_option( + '--line_width_scale_perc', dest='line_width_scale_perc', type='float', default=float(1), action='store', + help='Percentage of SVG line width. Use e.g. 26.46 to compensate a px/mm confusion. Default: 100 [%]') + + self.OptionParser.add_option( + "-n", '--line_fn', dest='line_fn', type='int', default=int(4), action='store', + help='Line width precision ($fn when constructing hull)') + + self.OptionParser.add_option( + "--force_line", action="store", type="inkbool", dest="force_line", default=False, + help="Force outline mode.") + + self.OptionParser.add_option( + '--fname', dest='fname', type='string', default='{NAME}.scad', action='store', + help='openSCAD output file derived from the svg file name.') + + self.OptionParser.add_option( + '--parsedesc', dest='parsedesc', type='string', default='true', action='store', + help='Parse zsize and other parameters from object descriptions') + + self.OptionParser.add_option( + '--scadview', dest='scadview', type='string', default='false', action='store', + help='Open the file with openscad ( details see --scadviewcmd option )') + self.OptionParser.add_option( + '--scadviewcmd', dest='scadviewcmd', type='string', default=INX_SCADVIEW, action='store', + help='Command used start an openscad viewer. Use {SCAD} for the openSCAD input.') + + self.OptionParser.add_option( + '--scad2stl', dest='scad2stl', type='string', default='false', action='store', + help='Also convert to STL ( details see --scad2stlcmd option )') + self.OptionParser.add_option( + '--scad2stlcmd', dest='scad2stlcmd', type='string', default=INX_SCAD2STL, action='store', + help='Command used to convert to STL. You can use {NAME}.scad for the openSCAD file to read and ' + + '{NAME}.stl for the STL file to write.') + + self.OptionParser.add_option( + '--stlpost', dest='stlpost', type='string', default='false', action='store', + help='Start e.g. a slicer. This implies the --scad2stl option. ( see --stlpostcmd )') + self.OptionParser.add_option( + '--stlpostcmd', dest='stlpostcmd', type='string', default=INX_STL_POSTPROCESSING, action='store', + help='Command used for post processing an STL file (typically a slicer). You can use {NAME}.stl for the STL file.') + + self.OptionParser.add_option( + '--stlmodule', dest='stlmodule', type='string', default='false', action='store', + help='Output configured to comment out final rendering line, to create a module file for import.') + + self.dpi = 90.0 # factored out for inkscape-0.92 + self.px_used = False # raw px unit depends on correct dpi. + self.cx = float(DEFAULT_WIDTH) / 2.0 + self.cy = float(DEFAULT_HEIGHT) / 2.0 + self.xmin, self.xmax = (1.0E70, -1.0E70) + self.ymin, self.ymax = (1.0E70, -1.0E70) + + # Dictionary of paths we will construct. It's keyed by the SVG node + # it came from. Such keying isn't too useful in this specific case, + # but it can be useful in other applications when you actually want + # to go back and update the SVG document + self.paths = {} + + # Output file handling + self.call_list = [] + self.call_list_neg = [] # anti-matter (holes via difference) + self.pathid = int(0) + + # Output file + self.f = None + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + + self.docWidth = float(DEFAULT_WIDTH) + self.docHeight = float(DEFAULT_HEIGHT) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + # Dictionary of warnings issued. This to prevent from warning + # multiple times about the same problem + self.warnings = {} + + def getLength(self, name, default): + + ''' + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + units of cm, ft, in, m, mm, pc, or pt. Convert to pixels. + + Note that SVG defines 90 px = 1 in = 25.4 mm. + Note: Since inkscape 0.92 we use the CSS standard of 96 px = 1 in. + ''' + str = self.document.getroot().get(name) + if str: + return self.LengthWithUnit(str) + else: + # No width specified; assume the default value + return float(default) + + def LengthWithUnit(self, strn, default_unit='px'): + v, u = parseLengthWithUnits(strn, default_unit) + if v is None: + # Couldn't parse the value + return None + elif (u == 'mm'): + return float(v) * (self.dpi / 25.4) + elif (u == 'cm'): + return float(v) * (self.dpi * 10.0 / 25.4) + elif (u == 'm'): + return float(v) * (self.dpi * 1000.0 / 25.4) + elif (u == 'in'): + return float(v) * self.dpi + elif (u == 'ft'): + return float(v) * 12.0 * self.dpi + elif (u == 'pt'): + # Use modern "Postscript" points of 72 pt = 1 in instead + # of the traditional 72.27 pt = 1 in + return float(v) * (self.dpi / 72.0) + elif (u == 'pc'): + return float(v) * (self.dpi / 6.0) + elif (u == 'px'): + self.px_used = True + return float(v) + else: + # Unsupported units + return None + + def getDocProps(self): + + ''' + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + ''' + + inkscape_version = self.document.getroot().get( + "{http://www.inkscape.org/namespaces/inkscape}version") + sodipodi_docname = self.document.getroot().get( + "{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname") + if sodipodi_docname is None: + sodipodi_docname = "inkscape" + self.basename = re.sub(r"\.SVG", "", sodipodi_docname, flags=re.I) + # a simple 'inkscape:version' does not work here. sigh.... + # + # BUG: + # inkscape 0.92 uses 96 dpi, inkscape 0.91 uses 90 dpi. + # From inkscape 0.92 we receive an svg document that has + # both inkscape:version and sodipodi:docname if the document + # was ever saved before. If not, both elements are missing. + # + import lxml.etree + # inkex.errormsg(lxml.etree.tostring(self.document.getroot())) + if inkscape_version: + ''' + inkscape:version="0.91 r" + inkscape:version="0.92.0 ..." + inkscape:version="0.92.4 (unknown)" + See also https://github.com/fablabnbg/paths2openscad/issues/1 + ''' + # inkex.errormsg("inkscape:version="+inkscape_version) + m = re.match(r"(\d+)\.(\d+)", inkscape_version) + if m: + if int(m.group(1)) > 0 or int(m.group(2)) > 91: + self.dpi = 96 # 96dpi since inkscape 0.92 + # inkex.errormsg("switching to 96 dpi") + + # BUGFIX https://github.com/fablabnbg/inkscape-paths2openscad/issues/1 + # get zsize and width after dpi. This is needed for e.g. mm units. + self.docHeight = self.getLength('height', DEFAULT_HEIGHT) + self.docWidth = self.getLength('width', DEFAULT_WIDTH) + self.inkscape_version = re.sub(" *\(unknown\) *", "", inkscape_version) + + if (self.docHeight is None) or (self.docWidth is None): + return False + else: + return True + + def handleViewBox(self): + + ''' + Set up the document-wide transform in the event that the document has + an SVG viewbox + ''' + + if self.getDocProps(): + viewbox = self.document.getroot().get('viewBox') + if viewbox: + vinfo = viewbox.strip().replace(',', ' ').split(' ') + if (vinfo[2] != 0) and (vinfo[3] != 0): + sx = self.docWidth / float(vinfo[2]) + sy = self.docHeight / float(vinfo[3]) + self.docTransform = simpletransform.parseTransform('scale(%f,%f)' % (sx, sy)) + + def getPathVertices(self, path, node=None, transform=None): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + ''' + + if (not path) or (len(path) == 0): + # Nothing to do + return None + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath(path) + if (not sp) or (len(sp) == 0): + # Path must have been devoid of any real content + return None + + # Get a cubic super path + p = cubicsuperpath.CubicSuperPath(sp) + if (not p) or (len(p) == 0): + # Probably never happens, but... + return None + + if transform: + simpletransform.applyTransformToPath(transform, p) + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + + for sp in p: + + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + if len(subpath_vertices): + subpath_list.append([subpath_vertices, [sp_xmin, sp_xmax, sp_ymin, sp_ymax]]) + + subpath_vertices = [] + subdivideCubicPath(sp, float(self.options.smoothness)) + + # Note the first point of the subpath + first_point = sp[0][1] + subpath_vertices.append(first_point) + sp_xmin = first_point[0] + sp_xmax = first_point[0] + sp_ymin = first_point[1] + sp_ymax = first_point[1] + + n = len(sp) + + # Traverse each point of the subpath + for csp in sp[1:n]: + + # Append the vertex to our list of vertices + pt = csp[1] + subpath_vertices.append(pt) + + # Track the bounding box of this subpath + if pt[0] < sp_xmin: + sp_xmin = pt[0] + elif pt[0] > sp_xmax: + sp_xmax = pt[0] + if pt[1] < sp_ymin: + sp_ymin = pt[1] + elif pt[1] > sp_ymax: + sp_ymax = pt[1] + + # Track the bounding box of the overall drawing + # This is used for centering the polygons in OpenSCAD around the + # (x,y) origin + if sp_xmin < self.xmin: + self.xmin = sp_xmin + if sp_xmax > self.xmax: + self.xmax = sp_xmax + if sp_ymin < self.ymin: + self.ymin = sp_ymin + if sp_ymax > self.ymax: + self.ymax = sp_ymax + + # Handle the final subpath + if len(subpath_vertices): + subpath_list.append([subpath_vertices, [sp_xmin, sp_xmax, sp_ymin, sp_ymax]]) + + if len(subpath_list) > 0: + self.paths[node] = subpath_list + + def getPathStyle(self, node): + style = node.get('style', '') + ret = {} + # fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1 + for elem in style.split(';'): + if len(elem): + try: + (key, val) = elem.strip().split(':') + except: + print >> sys.stderr, "unparsable element '{1}' in style '{0}'".format(elem, style) + ret[key] = val + return ret + + def convertPath(self, node): + + def object_merge_extrusion_values(extrusion, node): + + """ Parser for description and ID fields for extrusion parameters. + This recurse into parents, to inherit values from enclosing + groups. + """ + p = node.getparent() + if p is not None and p.tag in (inkex.addNS('g', 'svg'), 'g'): + object_merge_extrusion_values(extrusion, p) + + # let the node override inherited values + rawid = node.get('id', '') + if rawid is not None: + zsize = RE_AUTO_ZSIZE_ID.findall(rawid) + if zsize: + extrusion['zsize'] = zsize[-1].replace("_", ".") + # let description contents override id contents. + for tagname in DESC_TAGS: + desc_node = node.find("./%s" % tagname) + if desc_node is not None: + zsize = RE_AUTO_ZSIZE_DESC.findall(desc_node.text) + if zsize: + extrusion['zsize'] = zsize[-1] + zscale = RE_AUTO_SCALE_DESC.findall(desc_node.text) + if zscale: + if ',' in zscale[-1]: + extrusion['scale'] = '[' + zscale[-1] + ']' + else: + extrusion['scale'] = zscale[-1] + zoffset = RE_AUTO_ZOFFSET_DESC.findall(desc_node.text) + if zoffset: + extrusion['zoffset'] = zoffset[-1] + if extrusion['zsize'][0] in ('a', 'A'): + extrusion['neg'] = True + extrusion['zsize'] = extrusion['zsize'][1:] + # END object_merge_extrusion_values + + path = self.paths[node] + if (path is None) or (len(path) == 0): + return + + # Determine which polys contain which + + contains = [[] for i in xrange(len(path))] + contained_by = [[] for i in xrange(len(path))] + + for i in range(0, len(path)): + for j in range(i + 1, len(path)): + if polyInPoly(path[j][0], path[j][1], path[i][0], path[i][1]): + # subpath i contains subpath j + contains[i].append(j) + # subpath j is contained in subpath i + contained_by[j].append(i) + elif polyInPoly(path[i][0], path[i][1], path[j][0], path[j][1]): + # subpath j contains subpath i + contains[j].append(i) + # subpath i is containd in subpath j + contained_by[i].append(j) + + # Generate an OpenSCAD module for this path + rawid = node.get('id', '') + if (rawid is None) or (rawid == ''): + id = str(self.pathid) + 'x' + rawid = id + self.pathid += 1 + else: + id = re.sub('[^A-Za-z0-9_]+', '', rawid) + + style = self.getPathStyle(node) + stroke_width = style.get('stroke-width', '1') + + # FIXME: works with document units == 'mm', but otherwise untested.. + stroke_width_mm = self.LengthWithUnit(stroke_width, default_unit='mm') + stroke_width_mm = str(stroke_width_mm * 25.4 / self.dpi) # px to mm + fill_color = style.get('fill', '#FFF') + if (fill_color == 'none'): + filled = False + else: + filled = True + if (filled is False and style.get('stroke', 'none') == 'none'): + inkex.errormsg("WARNING: " + rawid + " has fill:none and stroke:none, object ignored.") + return + + # inkex.errormsg('filled='+str(filled)) + # inkex.errormsg(id+': style='+str(style)) + + # #### global data for msg_*() functions. #### + # fold subpaths into a single list of points and index paths. + prefix = 0 + for i in range(0, len(path)): + # Skip this subpath if it is contained by another one + if len(contained_by[i]) != 0: + continue + subpath = path[i][0] + bbox = path[i][1] # [xmin, xmax, ymin, ymax] + + # + polycenter = id + '_' + str(prefix) + '_center = [%f,%f]' % ((bbox[0] + bbox[1]) * .5 - self.cx, + (bbox[2] + bbox[3]) * .5 - self.cy) + polypoints = id + '_' + str(prefix) + '_points = [' + # polypaths = [[0,1,2], [3,4,5]] # this path is two triangle + polypaths = id + '_' + str(prefix) + '_paths = [[' + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + for point in subpath: + polypoints += '[%f,%f],' % ((point[0] - self.cx), + (point[1] - self.cy)) + polypoints = polypoints[:-1] + polypoints += '];\n' + self.f.write(polycenter + ";\n") + self.f.write(polypoints) + prefix += 1 + else: + # This subpath contains other subpaths + # collect all points into polypoints + # also collect the indices into polypaths + for point in subpath: + polypoints += '[%f,%f],' % ((point[0] - self.cx), + (point[1] - self.cy)) + count = len(subpath) + for k in range(0, count): + polypaths += '%d,' % (k) + polypaths = polypaths[:-1] + '],\n\t\t\t\t[' + # The nested paths + for j in contains[i]: + for point in path[j][0]: + polypoints += '[%f,%f],' % ((point[0] - self.cx), + (point[1] - self.cy)) + for k in range(count, count + len(path[j][0])): + polypaths += '%d,' % k + count += len(path[j][0]) + polypaths = polypaths[:-1] + '],\n\t\t\t\t[' + polypoints = polypoints[:-1] + polypoints += '];\n' + polypaths = polypaths[:-7] + '];\n' + # write the polys and paths + self.f.write(polycenter + ";\n") + self.f.write(polypoints) + self.f.write(polypaths) + prefix += 1 + # #### end global data for msg_*() functions. #### + + self.f.write('module poly_' + id + '(h, w, s, res=line_fn)\n{\n') + self.f.write(' scale([25.4/%g, -25.4/%g, 1]) union()\n {\n' % (self.dpi, self.dpi)) + + # And add the call to the call list + # Z-size is set by the overall module parameter + # unless an extrusion zsize is parsed from the description or ID. + extrusion = {'zsize': 'h', 'zoffset': '0', 'scale': 100.0, 'neg': False} + if self.options.parsedesc == 'true': + object_merge_extrusion_values(extrusion, node) + + call_item = 'translate ([0,0,%s]) poly_%s(%s, min_line_mm(%s), %s);\n' % ( + extrusion['zoffset'], id, extrusion['zsize'], stroke_width_mm, extrusion['scale']) + + if extrusion['neg']: + self.call_list_neg.append(call_item) + else: + self.call_list.append(call_item) + + prefix = 0 + for i in range(0, len(path)): + + # Skip this subpath if it is contained by another one + if len(contained_by[i]) != 0: + continue + + subpath = path[i][0] + bbox = path[i][1] + + if filled and not self.options.force_line: + + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + poly = msg_linear_extrude(id, prefix) + else: + # This subpath contains other subpaths + poly = msg_linear_extrude_by_paths(id, prefix) + + else: # filled == False -> outline mode + + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + poly = msg_extrude_by_hull(id, prefix) + else: + # This subpath contains other subpaths + poly = msg_extrude_by_hull_and_paths(id, prefix) + + self.f.write(poly) + prefix += 1 + + # End the module + self.f.write(' }\n}\n') + + def recursivelyTraverseSvg(self, aNodeList, matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible'): + + ''' + [ This too is largely lifted from eggbot.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get('visibility', parent_visibility) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + continue + + s = node.get('style', '') + if s == 'display:none': + continue + + # First apply the current matrix transform to this node's tranform + matNew = simpletransform.composeTransform( + matCurrent, simpletransform.parseTransform(node.get("transform"))) + + if node.tag == inkex.addNS('g', 'svg') or node.tag == 'g': + + self.recursivelyTraverseSvg(node, matNew, v) + + elif node.tag == inkex.addNS('use', 'svg') or node.tag == 'use': + + # A element refers to another SVG element via an + # xlink:href="#blah" attribute. We will handle the element by + # doing an XPath search through the document, looking for the + # element with the matching id="blah" attribute. We then + # recursively process that element after applying any necessary + # (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not + # apply to path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG + # still calls for processing the referenced element. The + # referenced element is hidden only if its visibility is + # "inherit" or "hidden". + + refid = node.get(inkex.addNS('href', 'xlink')) + if not refid: + continue + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath(path) + if refnode: + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + # Note: the transform has already been applied + if (x != 0) or (y != 0): + matNew2 = composeTransform(matNew, parseTransform('translate(%f,%f)' % (x, y))) + else: + matNew2 = matNew + v = node.get('visibility', v) + self.recursivelyTraverseSvg(refnode, matNew2, v) + + elif node.tag == inkex.addNS('path', 'svg'): + + path_data = node.get('d') + if path_data: + self.getPathVertices(path_data, node, matNew) + + elif node.tag == inkex.addNS('rect', 'svg') or node.tag == 'rect': + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float(node.get('x')) + y = float(node.get('y')) + w = float(node.get('width', '0')) + h = float(node.get('height', '0')) + a = [] + a.append(['M ', [x, y]]) + a.append([' l ', [w, 0]]) + a.append([' l ', [0, h]]) + a.append([' l ', [-w, 0]]) + a.append([' Z', []]) + self.getPathVertices(simplepath.formatPath(a), node, matNew) + + elif node.tag == inkex.addNS('line', 'svg') or node.tag == 'line': + + # Convert + # + # + + x1 = float(node.get('x1')) + y1 = float(node.get('y1')) + x2 = float(node.get('x2')) + y2 = float(node.get('y2')) + if (not x1) or (not y1) or (not x2) or (not y2): + continue + a = [] + a.append(['M ', [x1, y1]]) + a.append([' L ', [x2, y2]]) + self.getPathVertices(simplepath.formatPath(a), node, matNew) + + elif node.tag == inkex.addNS('polyline', 'svg') or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get('points', '').strip() + if pl == '': + continue + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + self.getPathVertices(d, node, matNew) + + elif node.tag == inkex.addNS('polygon', 'svg') or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get('points', '').strip() + if pl == '': + continue + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + d += " Z" + self.getPathVertices(d, node, matNew) + + elif node.tag == inkex.addNS('ellipse', 'svg') or node.tag == 'ellipse' or \ + node.tag == inkex.addNS('circle', 'svg') or node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree + # arcs. In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 + # are ignored + + if node.tag == inkex.addNS('ellipse', 'svg') or node.tag == 'ellipse': + rx = float(node.get('rx', '0')) + ry = float(node.get('ry', '0')) + else: + rx = float(node.get('r', '0')) + ry = rx + if rx == 0 or ry == 0: + continue + + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % (x1, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f ' % (x2, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f' % (x1, cy) + self.getPathVertices(d, node, matNew) + + elif node.tag == inkex.addNS('pattern', 'svg') or node.tag == 'pattern': + pass + + elif node.tag == inkex.addNS('metadata', 'svg') or node.tag == 'metadata': + pass + + elif node.tag == inkex.addNS('defs', 'svg') or node.tag == 'defs': + pass + + elif node.tag == inkex.addNS('desc', 'svg') or node.tag == 'desc': + pass + + elif node.tag == inkex.addNS('namedview', 'sodipodi') or node.tag == 'namedview': + pass + + elif node.tag == inkex.addNS('eggbot', 'svg') or node.tag == 'eggbot': + pass + + elif node.tag == inkex.addNS('text', 'svg') or node.tag == 'text': + texts = [] + plaintext = '' + for tnode in node.iterfind('.//'): # all subtree + if tnode is not None and tnode.text is not None: + texts.append(tnode.text) + if len(texts): + plaintext = "', '".join(texts).encode('latin-1') + inkex.errormsg('Warning: text "%s"' % plaintext) + inkex.errormsg('Warning: unable to draw text, please convert it to a path first.') + + elif node.tag == inkex.addNS('title', 'svg') or node.tag == 'title': + pass + + elif node.tag == inkex.addNS('image', 'svg') or node.tag == 'image': + if 'image' not in self.warnings: + inkex.errormsg( + gettext.gettext( + 'Warning: unable to draw bitmap images; please convert them to line art first. ' + 'Consider using the "Trace bitmap..." tool of the "Path" menu. Mac users please ' + 'note that some X11 settings may cause cut-and-paste operations to paste in bitmap copies.')) + self.warnings['image'] = 1 + + elif node.tag == inkex.addNS('pattern', 'svg') or node.tag == 'pattern': + pass + + elif node.tag == inkex.addNS('radialGradient', 'svg') or node.tag == 'radialGradient': + # Similar to pattern + pass + + elif node.tag == inkex.addNS('linearGradient', 'svg') or node.tag == 'linearGradient': + # Similar in pattern + pass + + elif node.tag == inkex.addNS('style', 'svg') or node.tag == 'style': + # This is a reference to an external style sheet and not the + # value of a style attribute to be inherited by child elements + pass + + elif node.tag == inkex.addNS('cursor', 'svg') or node.tag == 'cursor': + pass + + elif node.tag == inkex.addNS('color-profile', 'svg') or node.tag == 'color-profile': + # Gamma curves, color temp, etc. are not relevant to single + # color output + pass + + elif not isinstance(node.tag, basestring): + # This is likely an XML processing instruction such as an XML + # comment. lxml uses a function reference for such node tags + # and as such the node tag is likely not a printable string. + # Further, converting it to a printable string likely won't + # be very useful. + pass + + else: + inkex.errormsg('Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag) + pass + + def recursivelyGetEnclosingTransform(self, node): + + ''' + Determine the cumulative transform which node inherits from + its chain of ancestors. + ''' + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform(node) + node_transform = node.get('transform', None) + if node_transform is None: + return parent_transform + else: + tr = simpletransform.parseTransform(node_transform) + if parent_transform is None: + return tr + else: + return simpletransform.composeTransform(parent_transform, tr) + else: + return self.docTransform + + def effect(self): + + # Viewbox handling + self.handleViewBox() + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know it's extrema on the x-axis.) + + if self.options.ids: + # Traverse the selected objects + for id in self.options.ids: + transform = self.recursivelyGetEnclosingTransform(self.selected[id]) + self.recursivelyTraverseSvg([self.selected[id]], transform) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + # Determine the center of the drawing's bounding box + self.cx = self.xmin + (self.xmax - self.xmin) / 2.0 + self.cy = self.ymin + (self.ymax - self.ymin) / 2.0 + + # Determine which polygons lie entirely within other polygons + try: + if os.sep not in self.options.fname and 'PWD' in os.environ: + # current working directory of an extension seems to be the extension dir. + # Workaround using PWD, if available... + self.options.fname = self.options.fname.format(**{'NAME': self.basename}) + self.options.fname = os.environ['PWD'] + '/' + self.options.fname + scad_fname = os.path.expanduser(self.options.fname) + if '/' != os.sep: + scad_fname = scad_fname.replace('/', os.sep) + self.f = open(scad_fname, 'w') + + self.f.write('// Generated by inkscape %s + inkscape-paths2openscad %s\n' % (self.inkscape_version, VERSION)) + self.f.write('// %s from "%s.svg"\n' % (time.ctime(), self.basename)) + + # for use in options.fname basename is derived from the sodipodi_docname by + # stripping the svg extension - or if there is no sodipodi_docname basename is 'inkscape'. + # for use in scadviewcmd, scad2stlcmd and stlpostcmd basename is rederived from + # options.fname by stripping an scad extension. + self.basename = re.sub(r"\.scad", "", scad_fname, flags=re.I) + + self.f.write(''' +// Module names are of the form poly_(). As a result, +// you can associate a polygon in this OpenSCAD program with the corresponding +// SVG element in the Inkscape document by looking for the XML element with +// the attribute id=\"inkscape-path-id\". + +// fudge value is used to ensure that subtracted solids are a tad taller +// in the z dimension than the polygon being subtracted from. This helps +// keep the resulting .stl file manifold. +fudge = 0.1; +''') + if self.options.chamfer < 0.001: self.options.chamfer = None + + # writeout users parameters + self.f.write('zsize = %s;\n' % (self.options.zsize)) + self.f.write('line_fn = %d;\n' % (self.options.line_fn)) + if self.options.chamfer: + self.f.write('chamfer = %s;\n' % (self.options.chamfer)) + self.f.write('chamfer_fn = %d;\n' % (self.options.chamfer_fn)) + self.f.write('min_line_width = %s;\n' % (self.options.min_line_width)) + self.f.write('line_width_scale = %s;\n' % (self.options.line_width_scale_perc * 0.01)) + self.f.write('function min_line_mm(w) = max(min_line_width, w * line_width_scale) * %g/25.4;\n\n' % self.dpi) + + for key in self.paths: + self.f.write('\n') + self.convertPath(key) + + if self.options.chamfer: + self.f.write(''' +module chamfer_sphere(rad=chamfer, res=chamfer_fn) +{ + if(res <= 4) + { + // octaeder: 3 sided faces = 8 + polyhedron( + points = [ [.0, .0, rad], [.0, .0, -rad], [ rad, .0, .0], [-rad, .0, .0], [.0, rad, .0], [.0, -rad, .0] ], + faces = [ [4, 2, 0], [3, 4, 0], [5, 3, 0], [2, 5, 0], [5, 2, 1], [3, 5, 1], [4, 3, 1], [2 , 4, 1] ]); + } + else + { + sphere(r=rad, center=true, $fn=res); + } +} +''') + + # Come up with a name for the module based on the file name. + name = os.path.splitext(os.path.basename(self.options.fname))[0] + # Remove all punctuation except underscore. + name = re.sub('[' + string.punctuation.replace('_', '') + ']', '', name) + + self.f.write('\nmodule %s(h)\n{\n' % name) + mi = '' + if self.options.chamfer: + mi = ' ' + self.f.write(' minkowski()\n {\n') + + + # Now output the list of modules to call + self.f.write('%s difference()\n%s {\n%s union()\n%s {\n' % (mi,mi,mi,mi)) + for call in self.call_list: + self.f.write('%s %s' % (mi,call)) + self.f.write('%s }\n%s union()\n%s {\n' % (mi,mi,mi)) + for call in self.call_list_neg: + self.f.write('%s %s' % (mi,call)) + self.f.write('%s }\n%s }\n' % (mi,mi)) + if self.options.chamfer: + self.f.write(' chamfer_sphere();\n }\n') + + + # The module that calls all the other ones. + if self.options.stlmodule == 'true': + self.f.write('}\n\n//%s(zsize);\n' % (name)) + else: + self.f.write('}\n\n%s(zsize);\n' % (name)) + self.f.close() + + except IOError as e: + inkex.errormsg('Unable to write file ' + self.options.fname) + inkex.errormsg("ERROR: " + str(e)) + + if self.options.scadview == 'true': + pidfile = tempfile.gettempdir() + os.sep + "paths2openscad.pid" + running = False + cmd = self.options.scadviewcmd.format(**{'SCAD': scad_fname, 'NAME': self.basename}) + try: + m = re.match(r"(\d+)\s+(.*)", open(pidfile).read()) + oldpid = int(m.group(1)) + oldcmd = m.group(2) + # print >> sys.stderr, "pid {1} seen in {0}".format(pidfile, oldpid) + # print >> sys.stderr, "cmd {0}, oldcmd {1}".format(cmd, oldcmd) + if cmd == oldcmd: + # we found a pidfile and the cmd in there is still identical. + # If we change the filename in the inkscape extension gui, the cmd differs, and + # the still running openscad would not pick up our changes. + # If the command is identical, we check if the pid in the pidfile is alive. + # If so, we assume, the still running openscad will pick up the changes. + # + # WARNING: too much magic here. We cannot really test, if the last assumption holds. + # Comment out the next line to always start a new instance of openscad. + running = IsProcessRunning(oldpid) + # print >> sys.stderr, "running {0}".format(running) + except: + pass + if not running: + import subprocess + try: + tty = open("/dev/tty", "w") + except: + tty = subprocess.PIPE + try: + proc = subprocess.Popen(cmd, shell=True, stdin=tty, stdout=tty, stderr=tty) + except OSError as e: + raise OSError("%s failed: errno=%d %s" % (cmd, e.errno, e.strerror)) + try: + open(pidfile, "w").write(str(proc.pid) + "\n" + cmd + "\n") + except: + pass + else: + # BUG alert: + # If user changes the file viewed in openscad (save with different name, re-open that name + # without closing openscad, again, the still running openscad does not + # pick up the changes. and we have no way to tell the difference if it did. + pass + + if self.options.scad2stl == 'true' or self.options.stlpost == 'true': + stl_fname = self.basename + '.stl' + cmd = self.options.scad2stlcmd.format(**{'SCAD': scad_fname, 'STL': stl_fname, 'NAME': self.basename}) + try: + os.unlink(stl_fname) + except: + pass + + import subprocess + try: + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError as e: + raise OSError("{0} failed: errno={1} {2}".format(cmd, e.errno, e.strerror)) + stdout, stderr = proc.communicate() + + len = -1 + try: + len = os.path.getsize(stl_fname) + except: + pass + if len < 1000: + print >> sys.stderr, "CMD: {0}".format(cmd) + print >> sys.stderr, "WARNING: {0} is very small: {1} bytes.".format(stl_fname, len) + print >> sys.stderr, "= " * 24 + print >> sys.stderr, "STDOUT:\n", stdout, "= " * 24 + print >> sys.stderr, "STDERR:\n", stderr, "= " * 24 + if len <= 0: # something is wrong. better stop here + self.options.stlpost = 'false' + + if self.options.stlpost == 'true': + cmd = self.options.stlpostcmd.format(**{'STL': self.basename + '.stl', 'NAME': self.basename}) + try: + tty = open("/dev/tty", "w") + except: + tty = subprocess.PIPE + + try: + proc = subprocess.Popen(cmd, shell=True, stdin=tty, stdout=tty, stderr=tty) + except OSError as e: + raise OSError("%s failed: errno=%d %s" % (cmd, e.errno, e.strerror)) + + stdout, stderr = proc.communicate() + if stdout or stderr: + print >> sys.stderr, "CMD: ", cmd, "\n", "= " * 24 + if stdout: + print >> sys.stderr, "STDOUT:\n", stdout, "= " * 24 + if stderr: + print >> sys.stderr, "STDERR:\n", stderr, "= " * 24 + + +if __name__ == '__main__': + e = OpenSCAD() + e.affect() diff --git a/fablabchemnitz_pathselection.inx b/fablabchemnitz_pathselection.inx new file mode 100644 index 0000000..94b3166 --- /dev/null +++ b/fablabchemnitz_pathselection.inx @@ -0,0 +1,29 @@ + + + <_name>Colorize Path Lengths + fablabchemnitz.de.pathselection + fablabchemnitz_pathselection.py + inkex.py + + + + + 12 + 25 + 40 + 60 + 60 + 0.1 + 10 + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_pathselection.py b/fablabchemnitz_pathselection.py new file mode 100644 index 0000000..5706df1 --- /dev/null +++ b/fablabchemnitz_pathselection.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python +''' +pathselection.py + +Sunabe kazumichi 2009/9/29 +http://dp48069596.lolipop.jp/ + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +''' +import inkex, simplestyle, simplepath,sys,cubicsuperpath, bezmisc, locale +import math +# Set current system locale +locale.setlocale(locale.LC_ALL, '') + +def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) +def csplength(csp): + lengths = [] + for sp in csp: + lengths.append([]) + for i in xrange(1,len(sp)): + l = cspseglength(sp[i-1],sp[i]) + lengths[-1].append(l) + return lengths + +def roughBBox(path): + xmin,xMax,ymin,yMax=path[0][0][0],path[0][0][0],path[0][0][1],path[0][0][1] + for pathcomp in path: + for pt in pathcomp: + xmin=min(xmin,pt[0]) + xMax=max(xMax,pt[0]) + ymin=min(ymin,pt[1]) + yMax=max(yMax,pt[1]) + if xMax-xmin==0: + tn=0 + else : + tn=(yMax-ymin)/(xMax-xmin) + return tn + +class Length(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-s", "--selection", + action="store", type="string", + dest="selection", default=True, + help="select path with length or slant") + self.OptionParser.add_option("-1", "--len1", + action="store", type="float", + dest="len1", default=12) + self.OptionParser.add_option("-2", "--len2", + action="store", type="float", + dest="len2", default=25) + self.OptionParser.add_option("-3", "--len3", + action="store", type="float", + dest="len3", default=40) + self.OptionParser.add_option("-4", "--len4", + action="store", type="float", + dest="len4", default=60) + self.OptionParser.add_option("-5", "--len5", + action="store", type="float", + dest="len5", default=60) + self.OptionParser.add_option("-6", "--hor", + action="store", type="float", + dest="hor", default=0.2) + self.OptionParser.add_option("-7", "--ver", + action="store", type="float", + dest="ver", default=10) + + def effect(self): + # loop over all selected paths + if self.options.selection=="Path_lengthselection": + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + l1,l2,l3,l4,l5=[],[],[],[],[] + p = cubicsuperpath.parsePath(node.get('d')) + slengths= csplength(p) + b=[slengths, p] + + # path length select + for x in range(0,len(slengths)): + if sum(b[0][x])sum(b[0][x])>=self.options.len1 : + l2.append(b[1][x]) + if self.options.len3>sum(b[0][x])>=self.options.len2 : + l3.append(b[1][x]) + if self.options.len4>sum(b[0][x])>=self.options.len3 : + l4.append(b[1][x]) + if sum(b[0][x])>=self.options.len4 : + l5.append(b[1][x]) + + # make path + lensel=[l1,l2,l3,l4,l5] + strlen=['#FF0001','#00FF02','#AAFF03','#87CEE4','#000FF5'] + for i,x in zip(strlen,lensel): + s = {'stroke-linejoin': 'miter', 'stroke-width': '0.5px', + 'stroke-opacity': '1.0', 'fill-opacity': '1.0', + 'stroke': i, 'stroke-linecap': 'butt', 'fill': 'none'} + attribs={'style':simplestyle.formatStyle(s),'d':cubicsuperpath.formatPath(x)} + inkex.etree.SubElement(node.getparent(),inkex.addNS('path','svg'),attribs) + + if self.options.selection=="Path_slantselection": + for id, node in self.selected.iteritems(): + if node.tag == inkex.addNS('path','svg'): + hor1,ver2,slan3=[],[],[] + p = cubicsuperpath.parsePath(node.get('d')) + + # path slant select + for i,x in enumerate(p): + tn=roughBBox(x) + if tnself.options.ver: + ver2.append(p[i]) + else: + slan3.append(p[i]) + + # make path + slnsel=[hor1,ver2,slan3] + strsln=['#FF0001','#00FF02','#000FF5'] + for i,x in zip(strsln,slnsel): + s = {'stroke-linejoin': 'miter', 'stroke-width': '0.5px', + 'stroke-opacity': '1.0', 'fill-opacity': '1.0', + 'stroke': i, 'stroke-linecap': 'butt', 'fill': 'none'} + attribs={'style':simplestyle.formatStyle(s),'d':cubicsuperpath.formatPath(x)} + inkex.etree.SubElement(node.getparent(),inkex.addNS('path','svg'),attribs) + +e = Length() +e.affect() diff --git a/fablabchemnitz_plaster.inx b/fablabchemnitz_plaster.inx new file mode 100644 index 0000000..9b0c8fd --- /dev/null +++ b/fablabchemnitz_plaster.inx @@ -0,0 +1,132 @@ + + + <_name>The Plaster Tool - Plotty + fablabchemnitz.de.plaster + fablabchemnitz_plaster.py + inkex.py + + + File export settings + ~/Desktop + output.gcode + false + false + InkScape performance + false + (disable for slow computers or huge images; raises performance) + + + 7000 + 2000 + 200 + 4 + 1 + 100,0 + + mm + in + + + + Pen adjusting + 0 + 33,0 + 45,0 + Laser adjusting + 0 + 0 + + + 0 + G4 P1000; wait 1 second + 0.000 + 0.000 + 0,0 + + [Partial] Repeat geometry outline only + [Full] Repeat whole program + + 0,0 + 0,0 + + + Random laser power + false + 0,0 + 0,0 + Random down position pen angle (pressure) + false + 0,0 + 0,0 + Random tooling speed + false + 0,0 + 0,0 + Note: minimum tooling speed is 1.0 + Random dwell time + false + 0,0 + 0,0 + + + Machine type + + Laser + Plotter + + Controller firmware/wiring + + + + + + Other GCode modifications + ;plugin code by Mario Voigt (FabLab Chemnitz) + ;plugin code by Mario Voigt (FabLab Chemnitz) + Safety + true + true + + + This dirty program creates GCode in x,y dimensions for cartesian CNC machines with tool type plotter/laser. It can handle a single servo motor for pen up and down movements. The z dimension is not implemented. Also multiple tools are not supported. Please define the hardware index of your single laser diode (tool index) and/or pen servo motor (servo index) to use this plugin. It's just intended to use with simple machine constructions. If you build a multi tool machine like a 3D printer with integrated/changeable sub tools for milling, 3D scanning, plotting or laser cutting, you just should pimp this plugin for your own needs. + + + 1) Header, Footer, Repeat commands: Separate each line with '\n' to put more commands on input line + 2) Usage of servo motor (common syntax): M340 P°TOOLINDEX° S°ANGLE° + 3) Export directory: Put in '~/Desktop' to quickly push the file to your Desktop + 4) Pen Up/Down Increment (+/-): You can use this to regulate the pressure or to grind deeper with your pen/cutter/... for each loop + 5) X/Y-Offset: Use this for quickly creating a pattern in X, Y or combined XY directions + 6) Tooling speed: Define the speed of your pen or laser diode in mm/min or in/min + 7) If your image does not update scale and returns wrong dimensions in GCode, please delete orientation points group 'gcodetools' and run this plugin again! + 8) Pen moves in wrong direction: Just swap Pos 1 and Pos 2! + 9) Use of this plugin with multiple machines: If you hate to reconfigure this plugin each time you swap the machine just make use of a dirty trick: Just copy and rename the plaster.inx file into °ROOT°/share/extensions. You'll have to change the value "_name" and "id" below. + + + The Plaster (Plotter-Laser) Tool is based on ... + * Repetier Laser Tool (GNU GPL) from Hot-World GmbH und Co. KG (http://www.repetier.com) + * EggBot Hatch (GNU GPL v2) from Evil Mad Scientist (http://www.evilmadscientist.com) + * Inkscape Laser Tool Plug-in (GNU GPL) from JTECH Photonics (http://www.jtechphotonics.com) + * THLaser Laser Plug-in (GNU GPL) from think|haus (http://www.thinkhaus.org) + ------------------------------------------------------------------------ + (Re-)written by Mario Voigt (FabLab Chemnitz) (https://gitea.fablabchemnitz.de) + ------------------------------------------------------------------------ + Last update: 03.11.2019 + you found a bug or got some fresh code? Just report to mario.voigt@stadtfabrikanten.org. Thanks! + + + + + + + + + path + + + \ No newline at end of file diff --git a/fablabchemnitz_plaster.py b/fablabchemnitz_plaster.py new file mode 100644 index 0000000..1847689 --- /dev/null +++ b/fablabchemnitz_plaster.py @@ -0,0 +1,3397 @@ +#!/usr/bin/env python +""" +Modified by Mario Voigt 2016, Stoutwind, stoutwind.de +Modified by Marcus Littwin 2015, Hot-World GmbH & Co. KG, repetier.com +Modified by Jay Johnson 2015, J Tech Photonics, Inc., jtechphotonics.com +modified by Adam Polak 2014, polakiumengineering.org + +based on Copyright (C) 2009 Nick Drobchenko, nick@cnc-club.ru +based on gcode.py (C) 2007 hugomatic... +based on addnodes.py (C) 2005,2007 Aaron Spike, aaron@ekips.org +based on dots.py (C) 2005 Aaron Spike, aaron@ekips.org +based on interp.py (C) 2005 Aaron Spike, aaron@ekips.org +based on bezmisc.py (C) 2005 Aaron Spike, aaron@ekips.org +based on cubicsuperpath.py (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" +import inkex, simplestyle, simplepath +import cubicsuperpath, simpletransform, bezmisc + +import os +import math +import bezmisc +import re +import copy +import sys +import time +import cmath +import numpy +import codecs +import random +import gettext +_ = gettext.gettext + + +### Check if inkex has errormsg (0.46 version doesnot have one.) Could be removed later. +if "errormsg" not in dir(inkex): + inkex.errormsg = lambda msg: sys.stderr.write((unicode(msg) + "\n").encode("UTF-8")) + + +def bezierslopeatt(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)),t): + ax,ay,bx,by,cx,cy,x0,y0=bezmisc.bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx=3*ax*(t**2)+2*bx*t+cx + dy=3*ay*(t**2)+2*by*t+cy + if dx==dy==0 : + dx = 6*ax*t+2*bx + dy = 6*ay*t+2*by + if dx==dy==0 : + dx = 6*ax + dy = 6*ay + if dx==dy==0 : + print_("Slope error x = %s*t^3+%s*t^2+%s*t+%s, y = %s*t^3+%s*t^2+%s*t+%s, t = %s, dx==dy==0" % (ax,bx,cx,dx,ay,by,cy,dy,t)) + print_(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx, dy = 1, 1 + + return dx,dy +bezmisc.bezierslopeatt = bezierslopeatt + + +def ireplace(self,old,new,count=0): + pattern = re.compile(re.escape(old),re.I) + return re.sub(pattern,new,self,count) + +def get_delay(self): + delay = self.options.delay_time + if self.options.randomize_delay: + mindelay = self.options.delay_time - self.options.randomize_delay_lowerval + maxdelay = self.options.delay_time + self.options.randomize_delay_upperval + delay = round(random.uniform(mindelay, maxdelay),4) + if delay < 0: + delay = 0 + return delay + +################################################################################ +### +### Styles and additional parameters +### +################################################################################ + +math.pi2 = math.pi*2 +straight_tolerance = 0.0001 +straight_distance_tolerance = 0.0001 +options = {} + +intersection_recursion_depth = 10 +intersection_tolerance = 0.00001 + +styles = { + "loft_style" : { + 'main curve': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', 'stroke-width':'1', 'marker-end':'url(#Arrow2Mend)' }), + }, + "biarc_style" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#8f8', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f88', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#777', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + }, + "biarc_style_dark" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_area" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#880', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#808', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#088', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#999', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#dd5', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#d5d', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#5dd', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_passing feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_fine feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#7f0', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#f70', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#744', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "area artefact": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "area artefact arrow": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "dxf_points": simplestyle.formatStyle({ "stroke": "#ff0000", "fill": "#ff0000"}), + + } + + +################################################################################ +### Cubic Super Path additional functions +################################################################################ + +def csp_simple_bound(csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath : + for p in sp: + minx = min(minx,p[0]) if minx!=None else p[0] + miny = min(miny,p[1]) if miny!=None else p[1] + maxx = max(maxx,p[0]) if maxx!=None else p[0] + maxy = max(maxy,p[1]) if maxy!=None else p[1] + return minx,miny,maxx,maxy + + +def csp_segment_to_bez(sp1,sp2) : + return sp1[1:]+sp2[:2] + + +def bound_to_bound_distance(sp1,sp2,sp3,sp4) : + min_dist = 1e100 + max_dist = 0 + points1 = csp_segment_to_bez(sp1,sp2) + points2 = csp_segment_to_bez(sp3,sp4) + for i in range(4) : + for j in range(4) : + min_, max_ = line_to_line_min_max_distance_2(points1[i-1], points1[i], points2[j-1], points2[j]) + min_dist = min(min_dist,min_) + max_dist = max(max_dist,max_) + print_("bound_to_bound", min_dist, max_dist) + return min_dist, max_dist + +def csp_to_point_distance(csp, p, dist_bounds = [0,1e100], tolerance=.01) : + min_dist = [1e100,0,0,0] + for j in range(len(csp)) : + for i in range(1,len(csp[j])) : + d = csp_seg_to_point_distance(csp[j][i-1],csp[j][i],p,sample_points = 5, tolerance = .01) + if d[0] < dist_bounds[0] : +# draw_pointer( list(csp_at_t(subpath[dist[2]-1],subpath[dist[2]],dist[3])) +# +list(csp_at_t(csp[dist[4]][dist[5]-1],csp[dist[4]][dist[5]],dist[6])),"red","line", comment = math.sqrt(dist[0])) + return [d[0],j,i,d[1]] + else : + if d[0] < min_dist[0] : min_dist = [d[0],j,i,d[1]] + return min_dist + +def csp_seg_to_point_distance(sp1,sp2,p,sample_points = 5, tolerance = .01) : + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + dx, dy = dx-p[0], dy-p[1] + if sample_points < 2 : sample_points = 2 + d = min( [(p[0]-sp1[1][0])**2 + (p[1]-sp1[1][1])**2,0.], [(p[0]-sp2[1][0])**2 + (p[1]-sp2[1][1])**2,1.] ) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i = 0 + while i==0 or abs(f)>0.000001 and i<20 : + t2,t3 = t**2,t**3 + f = (ax*t3+bx*t2+cx*t+dx)*(3*ax*t2+2*bx*t+cx) + (ay*t3+by*t2+cy*t+dy)*(3*ay*t2+2*by*t+cy) + df = (6*ax*t+2*bx)*(ax*t3+bx*t2+cx*t+dx) + (3*ax*t2+2*bx*t+cx)**2 + (6*ay*t+2*by)*(ay*t3+by*t2+cy*t+dy) + (3*ay*t2+2*by*t+cy)**2 + if df!=0 : + t = t - f/df + else : + break + i += 1 + if 0<=t<=1 : + p1 = csp_at_t(sp1,sp2,t) + d1 = (p1[0]-p[0])**2 + (p1[1]-p[1])**2 + if d1 < d[0] : + d = [d1,t] + return d + + +def csp_seg_to_csp_seg_distance(sp1,sp2,sp3,sp4, dist_bounds = [0,1e100], sample_points = 5, tolerance=.01) : + # check the ending points first + dist = csp_seg_to_point_distance(sp1,sp2,sp3[1],sample_points, tolerance) + dist += [0.] + if dist[0] <= dist_bounds[0] : return dist + d = csp_seg_to_point_distance(sp1,sp2,sp4[1],sample_points, tolerance) + if d[0]tolerance and i<30 : + #draw_pointer(csp_at_t(sp1,sp2,t1)) + f1x = 3*ax1*t12+2*bx1*t1+cx1 + f1y = 3*ay1*t12+2*by1*t1+cy1 + f2x = 3*ax2*t22+2*bx2*t2+cx2 + f2y = 3*ay2*t22+2*by2*t2+cy2 + F1[0] = 2*f1x*x + 2*f1y*y + F1[1] = -2*f2x*x - 2*f2y*y + F2[0][0] = 2*(6*ax1*t1+2*bx1)*x + 2*f1x*f1x + 2*(6*ay1*t1+2*by1)*y +2*f1y*f1y + F2[0][1] = -2*f1x*f2x - 2*f1y*f2y + F2[1][0] = -2*f2x*f1x - 2*f2y*f1y + F2[1][1] = -2*(6*ax2*t2+2*bx2)*x + 2*f2x*f2x - 2*(6*ay2*t2+2*by2)*y + 2*f2y*f2y + F2 = inv_2x2(F2) + if F2!=None : + t1 -= ( F2[0][0]*F1[0] + F2[0][1]*F1[1] ) + t2 -= ( F2[1][0]*F1[0] + F2[1][1]*F1[1] ) + t12, t13, t22, t23 = t1*t1, t1*t1*t1, t2*t2, t2*t2*t2 + x,y = ax1*t13+bx1*t12+cx1*t1+dx1 - (ax2*t23+bx2*t22+cx2*t2+dx2), ay1*t13+by1*t12+cy1*t1+dy1 - (ay2*t23+by2*t22+cy2*t2+dy2) + Flast = F + F = x*x+y*y + else : + break + i += 1 + if F < dist[0] and 0<=t1<=1 and 0<=t2<=1: + dist = [F,t1,t2] + if dist[0] <= dist_bounds[0] : + return dist + return dist + + +def csp_to_csp_distance(csp1,csp2, dist_bounds = [0,1e100], tolerance=.01) : + dist = [1e100,0,0,0,0,0,0] + for i1 in range(len(csp1)) : + for j1 in range(1,len(csp1[i1])) : + for i2 in range(len(csp2)) : + for j2 in range(1,len(csp2[i2])) : + d = csp_seg_bound_to_csp_seg_bound_max_min_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2]) + if d[0] >= dist_bounds[1] : continue + if d[1] < dist_bounds[0] : return [d[1],i1,j1,1,i2,j2,1] + d = csp_seg_to_csp_seg_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2], dist_bounds, tolerance=tolerance) + if d[0] < dist[0] : + dist = [d[0], i1,j1,d[1], i2,j2,d[2]] + if dist[0] <= dist_bounds[0] : + return dist + if dist[0] >= dist_bounds[1] : + return dist + return dist +# draw_pointer( list(csp_at_t(csp1[dist[1]][dist[2]-1],csp1[dist[1]][dist[2]],dist[3])) +# + list(csp_at_t(csp2[dist[4]][dist[5]-1],csp2[dist[4]][dist[5]],dist[6])), "#507","line") + + +def csp_split(sp1,sp2,t=.5) : + [x1,y1],[x2,y2],[x3,y3],[x4,y4] = sp1[1], sp1[2], sp2[0], sp2[1] + x12 = x1+(x2-x1)*t + y12 = y1+(y2-y1)*t + x23 = x2+(x3-x2)*t + y23 = y2+(y3-y2)*t + x34 = x3+(x4-x3)*t + y34 = y3+(y4-y3)*t + x1223 = x12+(x23-x12)*t + y1223 = y12+(y23-y12)*t + x2334 = x23+(x34-x23)*t + y2334 = y23+(y34-y23)*t + x = x1223+(x2334-x1223)*t + y = y1223+(y2334-y1223)*t + return [sp1[0],sp1[1],[x12,y12]], [[x1223,y1223],[x,y],[x2334,y2334]], [[x34,y34],sp2[1],sp2[2]] + +def csp_true_bounds(csp) : + # Finds minx,miny,maxx,maxy of the csp and return their (x,y,i,j,t) + minx = [float("inf"), 0, 0, 0] + maxx = [float("-inf"), 0, 0, 0] + miny = [float("inf"), 0, 0, 0] + maxy = [float("-inf"), 0, 0, 0] + for i in range(len(csp)): + for j in range(1,len(csp[i])): + ax,ay,bx,by,cx,cy,x0,y0 = bezmisc.bezierparameterize((csp[i][j-1][1],csp[i][j-1][2],csp[i][j][0],csp[i][j][1])) + roots = cubic_solver(0, 3*ax, 2*bx, cx) + [0,1] + for root in roots : + if type(root) is complex and abs(root.imag)<1e-10: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxx = max([x,y,i,j,root],maxx) + minx = min([x,y,i,j,root],minx) + + roots = cubic_solver(0, 3*ay, 2*by, cy) + [0,1] + for root in roots : + if type(root) is complex and root.imag==0: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxy = max([y,x,i,j,root],maxy) + miny = min([y,x,i,j,root],miny) + maxy[0],maxy[1] = maxy[1],maxy[0] + miny[0],miny[1] = miny[1],miny[0] + + return minx,miny,maxx,maxy + + +############################################################################ +### csp_segments_intersection(sp1,sp2,sp3,sp4) +### +### Returns array containig all intersections between two segmets of cubic +### super path. Results are [ta,tb], or [ta0, ta1, tb0, tb1, "Overlap"] +### where ta, tb are values of t for the intersection point. +############################################################################ +def csp_segments_intersection(sp1,sp2,sp3,sp4) : + a, b = csp_segment_to_bez(sp1,sp2), csp_segment_to_bez(sp3,sp4) + + def polish_intersection(a,b,ta,tb, tolerance = intersection_tolerance) : + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize(a) + ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 = bezmisc.bezierparameterize(b) + i = 0 + F, F1 = [.0,.0], [[.0,.0],[.0,.0]] + while i==0 or (abs(F[0])**2+abs(F[1])**2 > tolerance and i<10): + ta3, ta2, tb3, tb2 = ta**3, ta**2, tb**3, tb**2 + F[0] = ax*ta3+bx*ta2+cx*ta+dx-ax1*tb3-bx1*tb2-cx1*tb-dx1 + F[1] = ay*ta3+by*ta2+cy*ta+dy-ay1*tb3-by1*tb2-cy1*tb-dy1 + F1[0][0] = 3*ax *ta2 + 2*bx *ta + cx + F1[0][1] = -3*ax1*tb2 - 2*bx1*tb - cx1 + F1[1][0] = 3*ay *ta2 + 2*by *ta + cy + F1[1][1] = -3*ay1*tb2 - 2*by1*tb - cy1 + det = F1[0][0]*F1[1][1] - F1[0][1]*F1[1][0] + if det!=0 : + F1 = [ [ F1[1][1]/det, -F1[0][1]/det], [-F1[1][0]/det, F1[0][0]/det] ] + ta = ta - ( F1[0][0]*F[0] + F1[0][1]*F[1] ) + tb = tb - ( F1[1][0]*F[0] + F1[1][1]*F[1] ) + else: break + i += 1 + + return ta, tb + + + def recursion(a,b, ta0,ta1,tb0,tb1, depth_a,depth_b) : + global bezier_intersection_recursive_result + if a==b : + bezier_intersection_recursive_result += [[ta0,tb0,ta1,tb1,"Overlap"]] + return + tam, tbm = (ta0+ta1)/2, (tb0+tb1)/2 + if depth_a>0 and depth_b>0 : + a1,a2 = bez_split(a,0.5) + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a1,b1) : recursion(a1,b1, ta0,tam,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b1) : recursion(a2,b1, tam,ta1,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a1,b2) : recursion(a1,b2, ta0,tam,tbm,tb1, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b2) : recursion(a2,b2, tam,ta1,tbm,tb1, depth_a-1,depth_b-1) + elif depth_a>0 : + a1,a2 = bez_split(a,0.5) + if bez_bounds_intersect(a1,b) : recursion(a1,b, ta0,tam,tb0,tb1, depth_a-1,depth_b) + if bez_bounds_intersect(a2,b) : recursion(a2,b, tam,ta1,tb0,tb1, depth_a-1,depth_b) + elif depth_b>0 : + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a,b1) : recursion(a,b1, ta0,ta1,tb0,tbm, depth_a,depth_b-1) + if bez_bounds_intersect(a,b2) : recursion(a,b2, ta0,ta1,tbm,tb1, depth_a,depth_b-1) + else : # Both segments have been subdevided enougth. Let's get some intersections :). + intersection, t1, t2 = straight_segments_intersection([a[0]]+[a[3]],[b[0]]+[b[3]]) + if intersection : + if intersection == "Overlap" : + t1 = ( max(0,min(1,t1[0]))+max(0,min(1,t1[1])) )/2 + t2 = ( max(0,min(1,t2[0]))+max(0,min(1,t2[1])) )/2 + bezier_intersection_recursive_result += [[ta0+t1*(ta1-ta0),tb0+t2*(tb1-tb0)]] + + global bezier_intersection_recursive_result + bezier_intersection_recursive_result = [] + recursion(a,b,0.,1.,0.,1.,intersection_recursion_depth,intersection_recursion_depth) + intersections = bezier_intersection_recursive_result + for i in range(len(intersections)) : + if len(intersections[i])<5 or intersections[i][4] != "Overlap" : + intersections[i] = polish_intersection(a,b,intersections[i][0],intersections[i][1]) + return intersections + + +def csp_segments_true_intersection(sp1,sp2,sp3,sp4) : + intersections = csp_segments_intersection(sp1,sp2,sp3,sp4) + res = [] + for intersection in intersections : + if ( + (len(intersection)==5 and intersection[4] == "Overlap" and (0<=intersection[0]<=1 or 0<=intersection[1]<=1) and (0<=intersection[2]<=1 or 0<=intersection[3]<=1) ) + or ( 0<=intersection[0]<=1 and 0<=intersection[1]<=1 ) + ) : + res += [intersection] + return res + + +def csp_get_t_at_curvature(sp1,sp2,c, sample_points = 16): + # returns a list containning [t1,t2,t3,...,tn], 0<=ti<=1... + if sample_points < 2 : sample_points = 2 + tolerance = .0000000001 + res = [] + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i, F = 0, 1e100 + while i<2 or abs(F)>tolerance and i<17 : + try : # some numerical calculation could exceed the limits + t2 = t*t + #slopes... + f1x = 3*ax*t2+2*bx*t+cx + f1y = 3*ay*t2+2*by*t+cy + f2x = 6*ax*t+2*bx + f2y = 6*ay*t+2*by + f3x = 6*ax + f3y = 6*ay + d = (f1x**2+f1y**2)**1.5 + F1 = ( + ( (f1x*f3y-f3x*f1y)*d - (f1x*f2y-f2x*f1y)*3.*(f2x*f1x+f2y*f1y)*((f1x**2+f1y**2)**.5) ) / + ((f1x**2+f1y**2)**3) + ) + F = (f1x*f2y-f1y*f2x)/d - c + t -= F/F1 + except: + break + i += 1 + if 0<=t<=1 and F<=tolerance: + if len(res) == 0 : + res.append(t) + for i in res : + if abs(t-i)<=0.001 : + break + if not abs(t-i)<=0.001 : + res.append(t) + return res + + +def csp_max_curvature(sp1,sp2): + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + tolerance = .0001 + F = 0. + i = 0 + while i<2 or F-Flast 0 : return 1e100 + if t1 < 0 : return -1e100 + # Use the Lapitals rule to solve 0/0 problem for 2 times... + t1 = 2*(bx*ay-ax*by)*t+(ay*cx-ax*cy) + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + t1 = bx*ay-ax*by + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + if depth>0 : + # little hack ;^) hope it wont influence anything... + return csp_curvature_at_t(sp1,sp2,t*1.004, depth-1) + return 1e100 + + +def csp_curvature_radius_at_t(sp1,sp2,t) : + c = csp_curvature_at_t(sp1,sp2,t) + if c == 0 : return 1e100 + else: return 1/c + + +def csp_special_points(sp1,sp2) : + # special points = curvature == 0 + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize((sp1[1],sp1[2],sp2[0],sp2[1])) + a = 3*ax*by-3*ay*bx + b = 3*ax*cy-3*cx*ay + c = bx*cy-cx*by + roots = cubic_solver(0, a, b, c) + res = [] + for i in roots : + if type(i) is complex and i.imag==0: + i = i.real + if type(i) is not complex and 0<=i<=1: + res.append(i) + return res + + +def csp_subpath_ccw(subpath): + # Remove all zerro length segments + s = 0 + #subpath = subpath[:] + if (P(subpath[-1][1])-P(subpath[0][1])).l2() > 1e-10 : + subpath[-1][2] = subpath[-1][1] + subpath[0][0] = subpath[0][1] + subpath += [ [subpath[0][1],subpath[0][1],subpath[0][1]] ] + pl = subpath[-1][2] + for sp1 in subpath: + for p in sp1 : + s += (p[0]-pl[0])*(p[1]+pl[1]) + pl = p + return s<0 + + +def csp_at_t(sp1,sp2,t): + ax,bx,cx,dx = sp1[1][0], sp1[2][0], sp2[0][0], sp2[1][0] + ay,by,cy,dy = sp1[1][1], sp1[2][1], sp2[0][1], sp2[1][1] + + x1, y1 = ax+(bx-ax)*t, ay+(by-ay)*t + x2, y2 = bx+(cx-bx)*t, by+(cy-by)*t + x3, y3 = cx+(dx-cx)*t, cy+(dy-cy)*t + + x4,y4 = x1+(x2-x1)*t, y1+(y2-y1)*t + x5,y5 = x2+(x3-x2)*t, y2+(y3-y2)*t + + x,y = x4+(x5-x4)*t, y4+(y5-y4)*t + return [x,y] + + +def csp_splitatlength(sp1, sp2, l = 0.5, tolerance = 0.01): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return csp_split(sp1, sp2, t) + + +def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + +def csplength(csp): + total = 0 + lengths = [] + for sp in csp: + for i in xrange(1,len(sp)): + l = cspseglength(sp[i-1],sp[i]) + lengths.append(l) + total += l + return lengths, total + + +def csp_segments(csp): + l, seg = 0, [0] + for sp in csp: + for i in xrange(1,len(sp)): + l += cspseglength(sp[i-1],sp[i]) + seg += [ l ] + + if l>0 : + seg = [seg[i]/l for i in xrange(len(seg))] + return seg,l + + +def rebuild_csp (csp, segs, s=None): + # rebuild_csp() adds to csp control points making it's segments looks like segs + if s==None : s, l = csp_segments(csp) + + if len(s)>len(segs) : return None + segs = segs[:] + segs.sort() + for i in xrange(len(s)): + d = None + for j in xrange(len(segs)): + d = min( [abs(s[i]-segs[j]),j], d) if d!=None else [abs(s[i]-segs[j]),j] + del segs[d[1]] + for i in xrange(len(segs)): + for j in xrange(0,len(s)): + if segs[i]t2 : t1, t2 = t2, t1 + if t1 == t2 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t) + return [sp1,sp2,sp2,sp3] + elif t1 <= 1e-10 and t2 >= 1.-1e-10 : + return [sp1,sp1,sp2,sp2] + elif t1 <= 1e-10: + sp1,sp2,sp3 = csp_split(sp1,sp2,t2) + return [sp1,sp1,sp2,sp3] + elif t2 >= 1.-1e-10 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + return [sp1,sp2,sp3,sp3] + else: + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + sp2,sp3,sp4 = csp_split(sp2,sp3,(t2-t1)/(1-t1) ) + return [sp1,sp2,sp3,sp4] + + +def csp_subpath_split_by_points(subpath, points) : + # points are [[i,t]...] where i-segment's number + points.sort() + points = [[1,0.]] + points + [[len(subpath)-1,1.]] + parts = [] + for int1,int2 in zip(points,points[1:]) : + if int1==int2 : + continue + if int1[1] == 1. : + int1[0] += 1 + int1[1] = 0. + if int1==int2 : + continue + if int2[1] == 0. : + int2[0] -= 1 + int2[1] = 1. + if int1[0] == 0 and int2[0]==len(subpath)-1:# and small(int1[1]) and small(int2[1]-1) : + continue + if int1[0]==int2[0] : # same segment + sp = csp_split_by_two_points(subpath[int1[0]-1],subpath[int1[0]],int1[1], int2[1]) + if sp[1]!=sp[2] : + parts += [ [sp[1],sp[2]] ] + else : + sp5,sp1,sp2 = csp_split(subpath[int1[0]-1],subpath[int1[0]],int1[1]) + sp3,sp4,sp5 = csp_split(subpath[int2[0]-1],subpath[int2[0]],int2[1]) + if int1[0]==int2[0]-1 : + parts += [ [sp1, [sp2[0],sp2[1],sp3[2]], sp4] ] + else : + parts += [ [sp1,sp2]+subpath[int1[0]+1:int2[0]-1]+[sp3,sp4] ] + return parts + + +def csp_from_arc(start, end, center, r, slope_st) : + # Creates csp that approximise specified arc + r = abs(r) + alpha = (atan2(end[0]-center[0],end[1]-center[1]) - atan2(start[0]-center[0],start[1]-center[1])) % math.pi2 + + sectors = int(abs(alpha)*2/math.pi)+1 + alpha_start = atan2(start[0]-center[0],start[1]-center[1]) + cos_,sin_ = math.cos(alpha_start), math.sin(alpha_start) + k = (4.*math.tan(alpha/sectors/4.)/3.) + if dot(slope_st , [- sin_*k*r, cos_*k*r]) < 0 : + if alpha>0 : alpha -= math.pi2 + else: alpha += math.pi2 + if abs(alpha*r)<0.001 : + return [] + + sectors = int(abs(alpha)*2/math.pi)+1 + k = (4.*math.tan(alpha/sectors/4.)/3.) + result = [] + for i in range(sectors+1) : + cos_,sin_ = math.cos(alpha_start + alpha*i/sectors), math.sin(alpha_start + alpha*i/sectors) + sp = [ [], [center[0] + cos_*r, center[1] + sin_*r], [] ] + sp[0] = [sp[1][0] + sin_*k*r, sp[1][1] - cos_*k*r ] + sp[2] = [sp[1][0] - sin_*k*r, sp[1][1] + cos_*k*r ] + result += [sp] + result[0][0] = result[0][1][:] + result[-1][2] = result[-1][1] + + return result + + +def point_to_arc_distance(p, arc): + ### Distance calculattion from point to arc + P0,P2,c,a = arc + dist = None + p = P(p) + r = (P0-c).mag() + if r>0 : + i = c + (p-c).unit()*r + alpha = ((i-c).angle() - (P0-c).angle()) + if a*alpha<0: + if alpha>0: alpha = alpha-math.pi2 + else: alpha = math.pi2+alpha + if between(alpha,0,a) or min(abs(alpha),abs(alpha-a))tolerance and i<4): + i += 1 + dl = d1*1 + for j in range(n+1): + t = float(j)/n + p = csp_at_t(sp1,sp2,t) + d = min(point_to_arc_distance(p,arc1), point_to_arc_distance(p,arc2)) + d1 = max(d1,d) + n=n*2 + return d1[0] + + +def csp_simple_bound_to_point_distance(p, csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath: + for p_ in sp: + minx = min(minx,p_[0]) if minx!=None else p_[0] + miny = min(miny,p_[1]) if miny!=None else p_[1] + maxx = max(maxx,p_[0]) if maxx!=None else p_[0] + maxy = max(maxy,p_[1]) if maxy!=None else p_[1] + return math.sqrt(max(minx-p[0],p[0]-maxx,0)**2+max(miny-p[1],p[1]-maxy,0)**2) + + +def csp_point_inside_bound(sp1, sp2, p): + bez = [sp1[1],sp1[2],sp2[0],sp2[1]] + x,y = p + c = 0 + for i in range(4): + [x0,y0], [x1,y1] = bez[i-1], bez[i] + if x0-x1!=0 and (y-y0)*(x1-x0)>=(x-x0)*(y1-y0) and x>min(x0,x1) and x<=max(x0,x1) : + c +=1 + return c%2==0 + + +def csp_bound_to_point_distance(sp1, sp2, p): + if csp_point_inside_bound(sp1, sp2, p) : + return 0. + bez = csp_segment_to_bez(sp1,sp2) + min_dist = 1e100 + for i in range(0,4): + d = point_to_line_segment_distance_2(p, bez[i-1],bez[i]) + if d <= min_dist : min_dist = d + return min_dist + + +def line_line_intersect(p1,p2,p3,p4) : # Return only true intersection. + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return False + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + return ("Overlap" if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) else False) + else: return False + else : + return ( + 0<=((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x<=1 and + 0<=((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x<=1 ) + + +def line_line_intersection_points(p1,p2,p3,p4) : # Return only points [ (x,y) ] + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return [] + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + res = [] + if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) : + if 0<=t11<=1 : res += [p1] + if 0<=t12<=1 : res += [p2] + if 0<=t21<=1 : res += [p3] + if 0<=t22<=1 : res += [p4] + return res + else: return [] + else : + t1 = ((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x + t2 = ((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x + if 0<=t1<=1 and 0<=t2<=1 : return [ [p1[0]*(1-t1)+p2[0]*t1, p1[1]*(1-t1)+p2[1]*t1] ] + else : return [] + + +def point_to_point_d2(a,b): + return (a[0]-b[0])**2 + (a[1]-b[1])**2 + + +def point_to_point_d(a,b): + return math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2) + + +def point_to_line_segment_distance_2(p1, p2,p3) : + # p1 - point, p2,p3 - line segment + #draw_pointer(p1) + w0 = [p1[0]-p2[0], p1[1]-p2[1]] + v = [p3[0]-p2[0], p3[1]-p2[1]] + c1 = w0[0]*v[0] + w0[1]*v[1] + if c1 <= 0 : + return w0[0]*w0[0]+w0[1]*w0[1] + c2 = v[0]*v[0] + v[1]*v[1] + if c2 <= c1 : + return (p1[0]-p3[0])**2 + (p1[1]-p3[1])**2 + return (p1[0]- p2[0]-v[0]*c1/c2)**2 + (p1[1]- p2[1]-v[1]*c1/c2) + + +def line_to_line_distance_2(p1,p2,p3,p4): + if line_line_intersect(p1,p2,p3,p4) : return 0 + return min( + point_to_line_segment_distance_2(p1,p3,p4), + point_to_line_segment_distance_2(p2,p3,p4), + point_to_line_segment_distance_2(p3,p1,p2), + point_to_line_segment_distance_2(p4,p1,p2)) + + +def csp_seg_bound_to_csp_seg_bound_max_min_distance(sp1,sp2,sp3,sp4) : + bez1 = csp_segment_to_bez(sp1,sp2) + bez2 = csp_segment_to_bez(sp3,sp4) + min_dist = 1e100 + max_dist = 0. + for i in range(4) : + if csp_point_inside_bound(sp1, sp2, bez2[i]) or csp_point_inside_bound(sp3, sp4, bez1[i]) : + min_dist = 0. + break + for i in range(4) : + for j in range(4) : + d = line_to_line_distance_2(bez1[i-1],bez1[i],bez2[j-1],bez2[j]) + if d < min_dist : min_dist = d + d = (bez2[j][0]-bez1[i][0])**2 + (bez2[j][1]-bez1[i][1])**2 + if max_dist < d : max_dist = d + return min_dist, max_dist + + +def csp_reverse(csp) : + for i in range(len(csp)) : + n = [] + for j in csp[i] : + n = [ [j[2][:],j[1][:],j[0][:]] ] + n + csp[i] = n[:] + return csp + + +def csp_normalized_slope(sp1,sp2,t) : + ax,ay,bx,by,cx,cy,dx,dy=bezmisc.bezierparameterize((sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:])) + if sp1[1]==sp2[1]==sp1[2]==sp2[0] : return [1.,0.] + f1x = 3*ax*t*t+2*bx*t+cx + f1y = 3*ay*t*t+2*by*t+cy + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + + if t == 0 : + f1x = sp2[0][0]-sp1[1][0] + f1y = sp2[0][1]-sp1[1][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + elif t == 1 : + f1x = sp2[1][0]-sp1[2][0] + f1y = sp2[1][1]-sp1[2][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + return [1.,0.] + + +def csp_normalized_normal(sp1,sp2,t) : + nx,ny = csp_normalized_slope(sp1,sp2,t) + return [-ny, nx] + + +def csp_parameterize(sp1,sp2): + return bezmisc.bezierparameterize(csp_segment_to_bez(sp1,sp2)) + + +def csp_concat_subpaths(*s): + + def concat(s1,s2) : + if s1 == [] : return s2 + if s2 == [] : return s1 + if (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 > 0.00001 : + return s1[:-1]+[ [s1[-1][0],s1[-1][1],s1[-1][1]], [s2[0][1],s2[0][1],s2[0][2]] ] + s2[1:] + else : + return s1[:-1]+[ [s1[-1][0],s2[0][1],s2[0][2]] ] + s2[1:] + + if len(s) == 0 : return [] + if len(s) ==1 : return s[0] + result = s[0] + for s1 in s[1:]: + result = concat(result,s1) + return result + + +def csp_draw(csp, color="#05f", group = None, style="fill:none;", width = .1, comment = "") : + if csp!=[] and csp!=[[]] : + if group == None : group = options.doc_root + style += "stroke:"+color+";"+ "stroke-width:%0.4fpx;"%width + args = {"d": cubicsuperpath.formatPath(csp), "style":style} + if comment!="" : args["comment"] = str(comment) + inkex.etree.SubElement( group, inkex.addNS('path','svg'), args ) + + +def csp_subpaths_end_to_start_distance2(s1,s2): + return (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 + + +def csp_clip_by_line(csp,l1,l2) : + result = [] + for i in range(len(csp)): + s = csp[i] + intersections = [] + for j in range(1,len(s)) : + intersections += [ [j,int_] for int_ in csp_line_intersection(l1,l2,s[j-1],s[j])] + splitted_s = csp_subpath_split_by_points(s, intersections) + for s in splitted_s[:] : + clip = False + for p in csp_true_bounds([s]) : + if (l1[1]-l2[1])*p[0] + (l2[0]-l1[0])*p[1] + (l1[0]*l2[1]-l2[0]*l1[1])<-0.01 : + clip = True + break + if clip : + splitted_s.remove(s) + result += splitted_s + return result + + +def csp_subpath_line_to(subpath, points) : + # Appends subpath with line or polyline. + if len(points)>0 : + if len(subpath)>0: + subpath[-1][2] = subpath[-1][1][:] + if type(points[0]) == type([1,1]) : + for p in points : + subpath += [ [p[:],p[:],p[:]] ] + else: + subpath += [ [points,points,points] ] + return subpath + + +def csp_join_subpaths(csp) : + result = csp[:] + done_smf = True + joined_result = [] + while done_smf : + done_smf = False + while len(result)>0: + s1 = result[-1][:] + del(result[-1]) + j = 0 + joined_smf = False + while j0, abc*bcd>0, abc*cad>0 + if m1 and m2 and m3 : return [a,b,c] + if m1 and m2 and not m3 : return [a,b,c,d] + if m1 and not m2 and m3 : return [a,b,d,c] + if not m1 and m2 and m3 : return [a,d,b,c] + if m1 and not (m2 and m3) : return [a,b,d] + if not (m1 and m2) and m3 : return [c,a,d] + if not (m1 and m3) and m2 : return [b,c,d] + + raise ValueError, "csp_segment_convex_hull happend something that shouldnot happen!" + + +################################################################################ +### Bezier additional functions +################################################################################ + +def bez_bounds_intersect(bez1, bez2) : + return bounds_intersect(bez_bound(bez2), bez_bound(bez1)) + + +def bez_bound(bez) : + return [ + min(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + min(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + max(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + max(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + ] + + +def bounds_intersect(a, b) : + return not ( (a[0]>b[2]) or (b[0]>a[2]) or (a[1]>b[3]) or (b[1]>a[3]) ) + + +def tpoint((x1,y1),(x2,y2),t): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + + +def bez_to_csp_segment(bez) : + return [bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]] + + +def bez_split(a,t=0.5) : + a1 = tpoint(a[0],a[1],t) + at = tpoint(a[1],a[2],t) + b2 = tpoint(a[2],a[3],t) + a2 = tpoint(a1,at,t) + b1 = tpoint(b2,at,t) + a3 = tpoint(a2,b1,t) + return [a[0],a1,a2,a3], [a3,b1,b2,a[3]] + + +def bez_at_t(bez,t) : + return csp_at_t([bez[0],bez[0],bez[1]],[bez[2],bez[3],bez[3]],t) + + +def bez_to_point_distance(bez,p,needed_dist=[0.,1e100]): + # returns [d^2,t] + return csp_seg_to_point_distance(bez_to_csp_segment(bez),p,needed_dist) + + +def bez_normalized_slope(bez,t): + return csp_normalized_slope([bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]],t) + +################################################################################ +### Some vector functions +################################################################################ + +def normalize((x,y)) : + l = math.sqrt(x**2+y**2) + if l == 0 : return [0.,0.] + else : return [x/l, y/l] + + +def cross(a,b) : + return a[1] * b[0] - a[0] * b[1] + + +def dot(a,b) : + return a[0] * b[0] + a[1] * b[1] + + +def rotate_ccw(d) : + return [-d[1],d[0]] + + +def vectors_ccw(a,b): + return a[0]*b[1]-b[0]*a[1] < 0 + + +def vector_from_to_length(a,b): + return math.sqrt((a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1])) + +################################################################################ +### Common functions +################################################################################ + +def matrix_mul(a,b) : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + try : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + except : + return None + + +def transpose(a) : + try : + return [ [ a[i][j] for i in range(len(a)) ] for j in range(len(a[0])) ] + except : + return None + + +def det_3x3(a): + return float( + a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[1][0]*a[2][1]*a[0][2] + - a[0][2]*a[1][1]*a[2][0] - a[0][0]*a[2][1]*a[1][2] - a[0][1]*a[2][2]*a[1][0] + ) + + +def inv_3x3(a): # invert matrix 3x3 + det = det_3x3(a) + if det==0: return None + return [ + [ (a[1][1]*a[2][2] - a[2][1]*a[1][2])/det, -(a[0][1]*a[2][2] - a[2][1]*a[0][2])/det, (a[0][1]*a[1][2] - a[1][1]*a[0][2])/det ], + [ -(a[1][0]*a[2][2] - a[2][0]*a[1][2])/det, (a[0][0]*a[2][2] - a[2][0]*a[0][2])/det, -(a[0][0]*a[1][2] - a[1][0]*a[0][2])/det ], + [ (a[1][0]*a[2][1] - a[2][0]*a[1][1])/det, -(a[0][0]*a[2][1] - a[2][0]*a[0][1])/det, (a[0][0]*a[1][1] - a[1][0]*a[0][1])/det ] + ] + + +def inv_2x2(a): # invert matrix 2x2 + det = a[0][0]*a[1][1] - a[1][0]*a[0][1] + if det==0: return None + return [ + [a[1][1]/det, -a[0][1]/det], + [-a[1][0]/det, a[0][0]/det] + ] + + +def small(a) : + global small_tolerance + return abs(a)=0 : + t = m+math.sqrt(n) + m1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + t = m-math.sqrt(n) + n1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + else : + m1 = pow(complex((m+cmath.sqrt(n))/2),1./3) + n1 = pow(complex((m-cmath.sqrt(n))/2),1./3) + x1 = -1./3 * (a + m1 + n1) + x2 = -1./3 * (a + w1*m1 + w2*n1) + x3 = -1./3 * (a + w2*m1 + w1*n1) + return [x1,x2,x3] + elif b!=0: + det = c**2-4*b*d + if det>0 : + return [(-c+math.sqrt(det))/(2*b),(-c-math.sqrt(det))/(2*b)] + elif d == 0 : + return [-c/(b*b)] + else : + return [(-c+cmath.sqrt(det))/(2*b),(-c-cmath.sqrt(det))/(2*b)] + elif c!=0 : + return [-d/c] + else : return [] + + +################################################################################ +### print_ prints any arguments into specified log file +################################################################################ + +def print_(*arg): + f = open(options.log_filename,"a") + for s in arg : + s = str(unicode(s).encode('unicode_escape'))+" " + f.write( s ) + f.write("\n") + f.close() + + +################################################################################ +### Point (x,y) operations +################################################################################ +class P: + def __init__(self, x, y=None): + if not y==None: + self.x, self.y = float(x), float(y) + else: + self.x, self.y = float(x[0]), float(x[1]) + def __add__(self, other): return P(self.x + other.x, self.y + other.y) + def __sub__(self, other): return P(self.x - other.x, self.y - other.y) + def __neg__(self): return P(-self.x, -self.y) + def __mul__(self, other): + if isinstance(other, P): + return self.x * other.x + self.y * other.y + return P(self.x * other, self.y * other) + __rmul__ = __mul__ + def __div__(self, other): return P(self.x / other, self.y / other) + def mag(self): return math.hypot(self.x, self.y) + def unit(self): + h = self.mag() + if h: return self / h + else: return P(0,0) + def dot(self, other): return self.x * other.x + self.y * other.y + def rot(self, theta): + c = math.cos(theta) + s = math.sin(theta) + return P(self.x * c - self.y * s, self.x * s + self.y * c) + def angle(self): return math.atan2(self.y, self.x) + def __repr__(self): return '%f,%f' % (self.x, self.y) + def pr(self): return "%.2f,%.2f" % (self.x, self.y) + def to_list(self): return [self.x, self.y] + def ccw(self): return P(-self.y,self.x) + def l2(self): return self.x*self.x + self.y*self.y + +################################################################################ +### +### Offset function +### +### This function offsets given cubic super path. +### It's based on src/livarot/PathOutline.cpp from Inkscape's source code. +### +### +################################################################################ +def csp_offset(csp, r) : + offset_tolerance = 0.05 + offset_subdivision_depth = 10 + time_ = time.time() + time_start = time_ + print_("Offset start at %s"% time_) + print_("Offset radius %s"% r) + + + def csp_offset_segment(sp1,sp2,r) : + result = [] + t = csp_get_t_at_curvature(sp1,sp2,1/r) + if len(t) == 0 : t =[0.,1.] + t.sort() + if t[0]>.00000001 : t = [0.]+t + if t[-1]<.99999999 : t.append(1.) + for st,end in zip(t,t[1:]) : + c = csp_curvature_at_t(sp1,sp2,(st+end)/2) + sp = csp_split_by_two_points(sp1,sp2,st,end) + if sp[1]!=sp[2]: + if (c>1/r and r<0 or c<1/r and r>0) : + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + else : # This part will be clipped for sure... TODO Optimize it... + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + + if result==[] : + result = offset[:] + else: + if csp_subpaths_end_to_start_distance2(result,offset)<0.0001 : + result = csp_concat_subpaths(result,offset) + else: + + intersection = csp_get_subapths_last_first_intersection(result,offset) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(result[i-1],result[i],t1) + result = result[:i-1] + [ sp1_, sp2_ ] + sp1_,sp2_,sp3_ = csp_split(offset[j-1],offset[j],t2) + result = csp_concat_subpaths( result, [sp2_,sp3_] + offset[j+1:] ) + else : + pass # ??? + #raise ValueError, "Offset curvature clipping error" + #csp_draw([result]) + return result + + + def create_offset_segment(sp1,sp2,r) : + # See Gernot Hoffmann "Bezier Curves" p.34 -> 7.1 Bezier Offset Curves + p0,p1,p2,p3 = P(sp1[1]),P(sp1[2]),P(sp2[0]),P(sp2[1]) + s0,s1,s3 = p1-p0,p2-p1,p3-p2 + n0 = s0.ccw().unit() if s0.l2()!=0 else P(csp_normalized_normal(sp1,sp2,0)) + n3 = s3.ccw().unit() if s3.l2()!=0 else P(csp_normalized_normal(sp1,sp2,1)) + n1 = s1.ccw().unit() if s1.l2()!=0 else (n0.unit()+n3.unit()).unit() + + q0,q3 = p0+r*n0, p3+r*n3 + c = csp_curvature_at_t(sp1,sp2,0) + q1 = q0 + (p1-p0)*(1- (r*c if abs(c)<100 else 0) ) + c = csp_curvature_at_t(sp1,sp2,1) + q2 = q3 + (p2-p3)*(1- (r*c if abs(c)<100 else 0) ) + + + return [[q0.to_list(), q0.to_list(), q1.to_list()],[q2.to_list(), q3.to_list(), q3.to_list()]] + + + def csp_get_subapths_last_first_intersection(s1,s2): + _break = False + for i in range(1,len(s1)) : + sp11, sp12 = s1[-i-1], s1[-i] + for j in range(1,len(s2)) : + sp21,sp22 = s2[j-1], s2[j] + intersection = csp_segments_true_intersection(sp11,sp12,sp21,sp22) + if intersection != [] : + _break = True + break + if _break:break + if _break : + intersection = max(intersection) + return [len(s1)-i,intersection[0], j,intersection[1]] + else : + return [] + + + def csp_join_offsets(prev,next,sp1,sp2,sp1_l,sp2_l,r): + if len(next)>1 : + if (P(prev[-1][1])-P(next[0][1])).l2()<0.001 : + return prev,[],next + intersection = csp_get_subapths_last_first_intersection(prev,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1], next[j],t2) + return prev[:i-1] + [ sp1_, sp2_ ], [], [sp4_,sp5_] + next[j+1:] + + # Offsets do not intersect... will add an arc... + start = (P(csp_at_t(sp1_l,sp2_l,1.)) + r*P(csp_normalized_normal(sp1_l,sp2_l,1.))).to_list() + end = (P(csp_at_t(sp1,sp2,0.)) + r*P(csp_normalized_normal(sp1,sp2,0.))).to_list() + arc = csp_from_arc(start, end, sp1[1], r, csp_normalized_slope(sp1_l,sp2_l,1.) ) + if arc == [] : + return prev,[],next + else: + # Clip prev by arc + if csp_subpaths_end_to_start_distance2(prev,arc)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(prev,arc) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(arc[j-1],arc[j],t2) + prev = prev[:i-1] + [ sp1_, sp2_ ] + arc = [sp4_,sp5_] + arc[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + # Clip next by arc + if next == [] : + return prev,[],arc + if csp_subpaths_end_to_start_distance2(arc,next)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(arc,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(arc[i-1],arc[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1],next[j],t2) + arc = arc[:i-1] + [ sp1_, sp2_ ] + next = [sp4_,sp5_] + next[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + + return prev,arc,next + + + def offset_segment_recursion(sp1,sp2,r, depth, tolerance) : + sp1_r,sp2_r = create_offset_segment(sp1,sp2,r) + err = max( + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.50)) + P(csp_normalized_normal(sp1,sp2,.50))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.75)) + P(csp_normalized_normal(sp1,sp2,.75))*r).to_list())[0], + ) + + if err>tolerance**2 and depth>0: + #print_(csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], tolerance) + if depth > offset_subdivision_depth-2 : + t = csp_max_curvature(sp1,sp2) + t = max(.1,min(.9 ,t)) + else : + t = .5 + sp3,sp4,sp5 = csp_split(sp1,sp2,t) + r1 = offset_segment_recursion(sp3,sp4,r, depth-1, tolerance) + r2 = offset_segment_recursion(sp4,sp5,r, depth-1, tolerance) + return r1[:-1]+ [[r1[-1][0],r1[-1][1],r2[0][2]]] + r2[1:] + else : + #csp_draw([[sp1_r,sp2_r]]) + #draw_pointer(sp1[1]+sp1_r[1], "#057", "line") + #draw_pointer(sp2[1]+sp2_r[1], "#705", "line") + return [sp1_r,sp2_r] + + + ############################################################################ + # Some small definitions + ############################################################################ + csp_len = len(csp) + + ############################################################################ + # Prepare the path + ############################################################################ + # Remove all small segments (segment length < 0.001) + + for i in xrange(len(csp)) : + for j in xrange(len(csp[i])) : + sp = csp[i][j] + if (P(sp[1])-P(sp[0])).mag() < 0.001 : + csp[i][j][0] = sp[1] + if (P(sp[2])-P(sp[0])).mag() < 0.001 : + csp[i][j][2] = sp[1] + for i in xrange(len(csp)) : + for j in xrange(1,len(csp[i])) : + if cspseglength(csp[i][j-1], csp[i][j])<0.001 : + csp[i] = csp[i][:j] + csp[i][j+1:] + if cspseglength(csp[i][-1],csp[i][0])>0.001 : + csp[i][-1][2] = csp[i][-1][1] + csp[i]+= [ [csp[i][0][1],csp[i][0][1],csp[i][0][1]] ] + + # TODO Get rid of self intersections. + + original_csp = csp[:] + # Clip segments which has curvature>1/r. Because their offset will be selfintersecting and very nasty. + + print_("Offset prepared the path in %s"%(time.time()-time_)) + print_("Path length = %s"% sum([len(i)for i in csp] ) ) + time_ = time.time() + + ############################################################################ + # Offset + ############################################################################ + # Create offsets for all segments in the path. And join them together inside each subpath. + unclipped_offset = [[] for i in xrange(csp_len)] + offsets_original = [[] for i in xrange(csp_len)] + join_points = [[] for i in xrange(csp_len)] + intersection = [[] for i in xrange(csp_len)] + for i in xrange(csp_len) : + subpath = csp[i] + subpath_offset = [] + last_offset_len = 0 + for sp1,sp2 in zip(subpath, subpath[1:]) : + segment_offset = csp_offset_segment(sp1,sp2,r) + if subpath_offset == [] : + subpath_offset = segment_offset + + prev_l = len(subpath_offset) + else : + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:],segment_offset,sp1,sp2,sp1_l,sp2_l,r) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Magenta") + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc,next) + prev_l = len(next) + sp1_l, sp2_l = sp1[:], sp2[:] + + # Join last and first offsets togother to close the curve + + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:], subpath_offset[:2], subpath[0], subpath[1], sp1_l,sp2_l, r) + subpath_offset[:2] = next[:] + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Red") + #csp_draw([next],"Red") + + # Collect subpath's offset and save it to unclipped offset list. + unclipped_offset[i] = subpath_offset[:] + + #for k,t in intersection[i]: + # draw_pointer(csp_at_t(subpath_offset[k-1], subpath_offset[k], t)) + + #inkex.etree.SubElement( options.doc_root, inkex.addNS('path','svg'), {"d": cubicsuperpath.formatPath(unclipped_offset), "style":"fill:none;stroke:#0f0;"} ) + print_("Offsetted path in %s"%(time.time()-time_)) + time_ = time.time() + + #for i in range(len(unclipped_offset)): + # csp_draw([unclipped_offset[i]], color = ["Green","Red","Blue"][i%3], width = .1) + #return [] + ############################################################################ + # Now to the clipping. + ############################################################################ + # First of all find all intersection's between all segments of all offseted subpaths, including self intersections. + + #TODO define offset tolerance here + global small_tolerance + small_tolerance = 0.01 + summ = 0 + summ1 = 0 + for subpath_i in xrange(csp_len) : + for subpath_j in xrange(subpath_i,csp_len) : + subpath = unclipped_offset[subpath_i] + subpath1 = unclipped_offset[subpath_j] + for i in xrange(1,len(subpath)) : + # If subpath_i==subpath_j we are looking for self intersections, so + # we'll need search intersections only for xrange(i,len(subpath1)) + for j in ( xrange(i,len(subpath1)) if subpath_i==subpath_j else xrange(len(subpath1))) : + if subpath_i==subpath_j and j==i : + # Find self intersections of a segment + sp1,sp2,sp3 = csp_split(subpath[i-1],subpath[i],.5) + intersections = csp_segments_intersection(sp1,sp2,sp2,sp3) + summ +=1 + for t in intersections : + summ1 += 1 + if not ( small(t[0]-1) and small(t[1]) ) and 0<=t[0]<=1 and 0<=t[1]<=1 : + intersection[subpath_i] += [ [i,t[0]/2],[j,t[1]/2+.5] ] + else : + intersections = csp_segments_intersection(subpath[i-1],subpath[i],subpath1[j-1],subpath1[j]) + summ +=1 + for t in intersections : + summ1 += 1 + #TODO tolerance dependence to cpsp_length(t) + if len(t) == 2 and 0<=t[0]<=1 and 0<=t[1]<=1 and not ( + subpath_i==subpath_j and ( + (j-i-1) % (len(subpath)-1) == 0 and small(t[0]-1) and small(t[1]) or + (i-j-1) % (len(subpath)-1) == 0 and small(t[1]-1) and small(t[0]) ) ) : + intersection[subpath_i] += [ [i,t[0]] ] + intersection[subpath_j] += [ [j,t[1]] ] + #draw_pointer(csp_at_t(subpath[i-1],subpath[i],t[0]),"#f00") + #print_(t) + #print_(i,j) + elif len(t)==5 and t[4]=="Overlap": + intersection[subpath_i] += [ [i,t[0]], [i,t[1]] ] + intersection[subpath_j] += [ [j,t[1]], [j,t[3]] ] + + print_("Intersections found in %s"%(time.time()-time_)) + print_("Examined %s segments"%(summ)) + print_("found %s intersections"%(summ1)) + time_ = time.time() + + ######################################################################## + # Split unclipped offset by intersection points into splitted_offset + ######################################################################## + splitted_offset = [] + for i in xrange(csp_len) : + subpath = unclipped_offset[i] + if len(intersection[i]) > 0 : + parts = csp_subpath_split_by_points(subpath, intersection[i]) + # Close parts list to close path (The first and the last parts are joined together) + if [1,0.] not in intersection[i] : + parts[0][0][0] = parts[-1][-1][0] + parts[0] = csp_concat_subpaths(parts[-1], parts[0]) + splitted_offset += parts[:-1] + else: + splitted_offset += parts[:] + else : + splitted_offset += [subpath[:]] + + #for i in range(len(splitted_offset)): + # csp_draw([splitted_offset[i]], color = ["Green","Red","Blue"][i%3]) + print_("Splitted in %s"%(time.time()-time_)) + time_ = time.time() + + + ######################################################################## + # Clipping + ######################################################################## + result = [] + for subpath_i in range(len(splitted_offset)): + clip = False + s1 = splitted_offset[subpath_i] + for subpath_j in range(len(splitted_offset)): + s2 = splitted_offset[subpath_j] + if (P(s1[0][1])-P(s2[-1][1])).l2()<0.0001 and ( (subpath_i+1) % len(splitted_offset) != subpath_j ): + if dot(csp_normalized_normal(s2[-2],s2[-1],1.),csp_normalized_slope(s1[0],s1[1],0.))*r<-0.0001 : + clip = True + break + if (P(s2[0][1])-P(s1[-1][1])).l2()<0.0001 and ( (subpath_j+1) % len(splitted_offset) != subpath_i ): + if dot(csp_normalized_normal(s2[0],s2[1],0.),csp_normalized_slope(s1[-2],s1[-1],1.))*r>0.0001 : + clip = True + break + + if not clip : + result += [s1[:]] + elif options.offset_draw_clippend_path : + csp_draw([s1],color="Red",width=.1) + draw_pointer( csp_at_t(s2[-2],s2[-1],1.)+ + (P(csp_at_t(s2[-2],s2[-1],1.))+ P(csp_normalized_normal(s2[-2],s2[-1],1.))*10).to_list(),"Green", "line" ) + draw_pointer( csp_at_t(s1[0],s1[1],0.)+ + (P(csp_at_t(s1[0],s1[1],0.))+ P(csp_normalized_slope(s1[0],s1[1],0.))*10).to_list(),"Red", "line" ) + + # Now join all together and check closure and orientation of result + joined_result = csp_join_subpaths(result) + # Check if each subpath from joined_result is closed + #csp_draw(joined_result,color="Green",width=1) + + + for s in joined_result[:] : + if csp_subpaths_end_to_start_distance2(s,s) > 0.001 : + # Remove open parts + if options.offset_draw_clippend_path: + csp_draw([s],color="Orange",width=1) + draw_pointer(s[0][1], comment= csp_subpaths_end_to_start_distance2(s,s)) + draw_pointer(s[-1][1], comment = csp_subpaths_end_to_start_distance2(s,s)) + joined_result.remove(s) + else : + # Remove small parts + minx,miny,maxx,maxy = csp_true_bounds([s]) + if (minx[0]-maxx[0])**2 + (miny[1]-maxy[1])**2 < 0.1 : + joined_result.remove(s) + print_("Clipped and joined path in %s"%(time.time()-time_)) + time_ = time.time() + + ######################################################################## + # Now to the Dummy cliping: remove parts from splitted offset if their + # centers are closer to the original path than offset radius. + ######################################################################## + + r1,r2 = ( (0.99*r)**2, (1.01*r)**2 ) if abs(r*.01)<1 else ((abs(r)-1)**2, (abs(r)+1)**2) + for s in joined_result[:]: + dist = csp_to_point_distance(original_csp, s[int(len(s)/2)][1], dist_bounds = [r1,r2], tolerance = .000001) + if not r1 < dist[0] < r2 : + joined_result.remove(s) + if options.offset_draw_clippend_path: + csp_draw([s], comment = math.sqrt(dist[0])) + draw_pointer(csp_at_t(csp[dist[1]][dist[2]-1],csp[dist[1]][dist[2]],dist[3])+s[int(len(s)/2)][1],"blue", "line", comment = [math.sqrt(dist[0]),i,j,sp] ) + + print_("-----------------------------") + print_("Total offset time %s"%(time.time()-time_start)) + print_() + return joined_result + + + + + +################################################################################ +### +### Biarc function +### +### Calculates biarc approximation of cubic super path segment +### splits segment if needed or approximates it with straight line +### +################################################################################ +def biarc(sp1, sp2, z1, z2, depth=0): + def biarc_split(sp1,sp2, z1, z2, depth): + if depth 0 : raise ValueError, (a,b,c,disq,beta1,beta2) + beta = max(beta1, beta2) + elif asmall and bsmall: + return biarc_split(sp1, sp2, z1, z2, depth) + alpha = beta * r + ab = alpha + beta + P1 = P0 + alpha * TS + P3 = P4 - beta * TE + P2 = (beta / ab) * P1 + (alpha / ab) * P3 + + + def calculate_arc_params(P0,P1,P2): + D = (P0+P2)/2 + if (D-P1).mag()==0: return None, None + R = D - ( (D-P0).mag()**2/(D-P1).mag() )*(P1-D).unit() + p0a, p1a, p2a = (P0-R).angle()%(2*math.pi), (P1-R).angle()%(2*math.pi), (P2-R).angle()%(2*math.pi) + alpha = (p2a - p0a) % (2*math.pi) + if (p0a1000000 or abs(R.y)>1000000 or (R-P0).mag<.1 : + return None, None + else : + return R, alpha + R1,a1 = calculate_arc_params(P0,P1,P2) + R2,a2 = calculate_arc_params(P2,P3,P4) + if R1==None or R2==None or (R1-P0).mag() options.biarc_tolerance and depthls : + res += [seg] + else : + if seg[1] == "arc" : + r = math.sqrt((seg[0][0]-seg[2][0])**2+(seg[0][1]-seg[2][1])**2) + x,y = seg[0][0]-seg[2][0], seg[0][1]-seg[2][1] + a = seg[3]/ls*(l-lc) + x,y = x*math.cos(a) - y*math.sin(a), x*math.sin(a) + y*math.cos(a) + x,y = x+seg[2][0], y+seg[2][1] + res += [[ seg[0], "arc", seg[2], a, [x,y], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + if seg[1] == "line" : + res += [[ seg[0], "line", 0, 0, [(seg[4][0]-seg[0][0])/ls*(l-lc),(seg[4][1]-seg[0][1])/ls*(l-lc)], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + i += 1 + if i >= len(subcurve) and not subcurve_closed: + reverse = not reverse + i = i%len(subcurve) + return res + +################################################################################ +### Polygon class +################################################################################ +class Polygon: + def __init__(self, polygon=None): + self.polygon = [] if polygon==None else polygon[:] + + + def move(self, x, y) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + self.polygon[i][j][0] += x + self.polygon[i][j][1] += y + + + def bounds(self) : + minx,miny,maxx,maxy = 1e400, 1e400, -1e400, -1e400 + for poly in self.polygon : + for p in poly : + if minx > p[0] : minx = p[0] + if miny > p[1] : miny = p[1] + if maxx < p[0] : maxx = p[0] + if maxy < p[1] : maxy = p[1] + return minx*1,miny*1,maxx*1,maxy*1 + + + def width(self): + b = self.bounds() + return b[2]-b[0] + + + def rotate_(self,sin,cos) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + x,y = self.polygon[i][j][0], self.polygon[i][j][1] + self.polygon[i][j][0] = x*cos - y*sin + self.polygon[i][j][1] = x*sin + y*cos + + + def rotate(self, a): + cos, sin = math.cos(a), math.sin(a) + self.rotate_(sin,cos) + + + def drop_into_direction(self, direction, surface) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Direction is [dx,dy] + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + if direction[0]**2 + direction[1]**2 <1e-10 : return + direction = normalize(direction) + sin,cos = direction[0], -direction[1] + self.rotate_(-sin,cos) + surface.rotate_(-sin,cos) + self.drop_down(surface, zerro_plane = False) + self.rotate_(sin,cos) + surface.rotate_(sin,cos) + + + def centroid(self): + centroids = [] + sa = 0 + for poly in self.polygon: + cx,cy,a = 0,0,0 + for i in range(len(poly)): + [x1,y1],[x2,y2] = poly[i-1],poly[i] + cx += (x1+x2)*(x1*y2-x2*y1) + cy += (y1+y2)*(x1*y2-x2*y1) + a += (x1*y2-x2*y1) + a *= 3. + if abs(a)>0 : + cx /= a + cy /= a + sa += abs(a) + centroids += [ [cx,cy,a] ] + if sa == 0 : return [0.,0.] + cx,cy = 0.,0. + for c in centroids : + cx += c[0]*c[2] + cy += c[1]*c[2] + cx /= sa + cy /= sa + return [cx,cy] + + + def drop_down(self, surface, zerro_plane = True) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Down means min y (0,-1) + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + # Get surface top point + top = surface.bounds()[3] + if zerro_plane : top = max(0, top) + # Get polygon bottom point + bottom = self.bounds()[1] + self.move(0, top - bottom + 10) + # Now get shortest distance from surface to polygon in positive x=0 direction + # Such distance = min(distance(vertex, edge)...) where edge from surface and + # vertex from polygon and vice versa... + dist = 1e300 + for poly in surface.polygon : + for i in range(len(poly)) : + for poly1 in self.polygon : + for i1 in range(len(poly1)) : + st,end = poly[i-1], poly[i] + vertex = poly1[i1] + if st[0]<=vertex[0]<= end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(vertex[1]-st[1],vertex[1]-end[1]) + else : d = vertex[1] - st[1] - (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + # and vice versa just change the sign because vertex now under the edge + st,end = poly1[i1-1], poly1[i1] + vertex = poly[i] + if st[0]<=vertex[0]<=end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(- vertex[1]+st[1],-vertex[1]+end[1]) + else : d = - vertex[1] + st[1] + (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + + if zerro_plane and dist > 10 + top : dist = 10 + top + #print_(dist, top, bottom) + #self.draw() + self.move(0, -dist) + + + def draw(self,color="#075",width=.1) : + for poly in self.polygon : + csp_draw( [csp_subpath_line_to([],poly+[poly[0]])], color=color,width=width ) + + + def add(self, add) : + if type(add) == type([]) : + self.polygon += add[:] + else : + self.polygon += add.polygon[:] + + + def point_inside(self,p) : + inside = False + for poly in self.polygon : + for i in range(len(poly)): + st,end = poly[i-1], poly[i] + if p==st or p==end : return True # point is a vertex = point is on the edge + if st[0]>end[0] : st, end = end, st # This will be needed to check that edge if open only at rigth end + c = (p[1]-st[1])*(end[0]-st[0])-(end[1]-st[1])*(p[0]-st[0]) + #print_(c) + if st[0]<=p[0]0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + # Check self intersections with other polys + for i2 in range(len(self.polygon)): + if i1==i2 : continue + poly2 = self.polygon[i2] + for j2 in range(len(poly2)): + s1, e1 = poly2[j2-1],poly2[j2] + int_ = line_line_intersection_points(s,e,s1,e1) + for p in int_ : + if point_to_point_d2(p,s)>0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + hull += [poly_] + # Create the dictionary containing all edges in both directions + edges = {} + for poly in self.polygon : + for i in range(len(poly)): + s,e = tuple(poly[i-1]), tuple(poly[i]) + if (point_to_point_d2(e,s)<0.000001) : continue + break_s, break_e = False, False + for p in edges : + if point_to_point_d2(p,s)<0.000001 : + break_s = True + s = p + if point_to_point_d2(p,e)<0.000001 : + break_e = True + e = p + if break_s and break_e : break + l = point_to_point_d(s,e) + if not break_s and not break_e : + edges[s] = [ [s,e,l] ] + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + #draw_pointer(s+e,"red","line") + else : + if e in edges : + for edge in edges[e] : + if point_to_point_d2(edge[1],s)<0.000001 : + break + if point_to_point_d2(edge[1],s)>0.000001 : + edges[e] += [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + + else : + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"green","line") + if s in edges : + for edge in edges[s] : + if point_to_point_d2(edge[1],e)<0.000001 : + break + if point_to_point_d2(edge[1],e)>0.000001 : + edges[s] += [ [s,e, l] ] + #draw_pointer(s+e,"red","line") + else : + edges[s] = [ [s,e,l] ] + #draw_pointer(s+e,"green","line") + + + def angle_quadrant(sin,cos): + # quadrants are (0,pi/2], (pi/2,pi], (pi,3*pi/2], (3*pi/2, 2*pi], i.e. 0 is in the 4-th quadrant + if sin>0 and cos>=0 : return 1 + if sin>=0 and cos<0 : return 2 + if sin<0 and cos<=0 : return 3 + if sin<=0 and cos>0 : return 4 + + + def angle_is_less(sin,cos,sin1,cos1): + # 0 = 2*pi is the largest angle + if [sin1, cos1] == [0,1] : return True + if [sin, cos] == [0,1] : return False + if angle_quadrant(sin,cos)>angle_quadrant(sin1,cos1) : + return False + if angle_quadrant(sin,cos)=0 and cos>0 : return sin0 and cos<=0 : return sin>sin1 + if sin<=0 and cos<0 : return sin>sin1 + if sin<0 and cos>=0 : return sin len_edges : raise ValueError, "Hull error" + loops1 += 1 + next = get_closes_edge_by_angle(edges[last[1]],last) + #draw_pointer(next[0]+next[1],"Green","line", comment=i, width= 1) + #print_(next[0],"-",next[1]) + + last = next + poly += [ list(last[0]) ] + self.polygon += [ poly ] + # Remove all edges that are intersects new poly (any vertex inside new poly) + poly_ = Polygon([poly]) + for p in edges.keys()[:] : + if poly_.point_inside(list(p)) : del edges[p] + self.draw(color="Green", width=1) + + +class Arangement_Genetic: + # gene = [fittness, order, rotation, xposition] + # spieces = [gene]*shapes count + # population = [spieces] + def __init__(self, polygons, material_width): + self.population = [] + self.genes_count = len(polygons) + self.polygons = polygons + self.width = material_width + self.mutation_factor = 0.1 + self.order_mutate_factor = 1. + self.move_mutate_factor = 1. + + + def add_random_species(self,count): + for i in range(count): + specimen = [] + order = range(self.genes_count) + random.shuffle(order) + for j in order: + specimen += [ [j, random.random(), random.random()] ] + self.population += [ [None,specimen] ] + + + def species_distance2(self,sp1,sp2) : + # retun distance, each component is normalized + s = 0 + for j in range(self.genes_count) : + s += ((sp1[j][0]-sp2[j][0])/self.genes_count)**2 + (( sp1[j][1]-sp2[j][1]))**2 + ((sp1[j][2]-sp2[j][2]))**2 + return s + + + def similarity(self,sp1,top) : + # Define similarity as a simple distance between two points in len(gene)*len(spiece) -th dimentions + # for sp2 in top_spieces sum(|sp1-sp2|)/top_count + sim = 0 + for sp2 in top : + sim += math.sqrt(species_distance2(sp1,sp2[1])) + return sim/len(top) + + + def leave_top_species(self,count): + self.population.sort() + res = [ copy.deepcopy(self.population[0]) ] + del self.population[0] + for i in range(count-1) : + t = [] + for j in range(20) : + i1 = random.randint(0,len(self.population)-1) + t += [ [self.population[i1][0],i1] ] + t.sort() + res += [ copy.deepcopy(self.population[t[0][1]]) ] + del self.population[t[0][1]] + self.population = res + #del self.population[0] + #for c in range(count-1) : + # rank = [] + # for i in range(len(self.population)) : + # sim = self.similarity(self.population[i][1],res) + # rank += [ [self.population[i][0] / sim if sim>0 else 1e100,i] ] + # rank.sort() + # res += [ copy.deepcopy(self.population[rank[0][1]]) ] + # print_(rank[0],self.population[rank[0][1]][0]) + # print_(res[-1]) + # del self.population[rank[0][1]] + + self.population = res + + + def populate_species(self,count, parent_count): + self.population.sort() + self.inc = 0 + for c in range(count): + parent1 = random.randint(0,parent_count-1) + parent2 = random.randint(0,parent_count-1) + if parent1==parent2 : parent2 = (parent2+1) % parent_count + parent1, parent2 = self.population[parent1][1], self.population[parent2][1] + i1,i2 = 0, 0 + genes_order = [] + specimen = [ [0,0.,0.] for i in range(self.genes_count) ] + + self.incest_mutation_multiplyer = 1. + self.incest_mutation_count_multiplyer = 1. + + if self.species_distance2(parent1, parent2) <= .01/self.genes_count : + # OMG it's a incest :O!!! + # Damn you bastards! + self.inc +=1 + self.incest_mutation_multiplyer = 2. + self.incest_mutation_count_multiplyer = 2. + else : + if random.random()<.01 : print_(self.species_distance2(parent1, parent2)) + start_gene = random.randint(0,self.genes_count) + end_gene = (max(1,random.randint(0,self.genes_count),int(self.genes_count/4))+start_gene) % self.genes_count + if end_gene (int value; M106 S0 turns off diode) + # Repetier on FAN PIN: M106 S<1 .. 255> (int value; M106 S0 turns off diode) + # Repetier on TOOL PIN: M3 S<1 .. 255> (int value; M5 S0 turns off diode) you need to enable laser mode via M452 + # GRBL: M106 S<0 .. 12000> (int value; M107 turns off diode) + # + # notes to laser mode: + # laser diode should only be turned on when movement is done. Should be ensured in GCode to avoid burning material + # diode has to be turned off at travel moves + # in Repetier firmware this can be accomplished using code M452 to activate laser mode + # + # Pen Angle has to be converted from floating angle value to fitting integer values + # Marlin: M280 0 .. 180 (float value) + # Repetier: M340 500 .. 2500 (int value) + # Smoothie: M280 5 .. 10 (float value; 0 turns off the servo) + targetpower = str(round(self.laserpower_uneffected_converted,4)) + ";(target power: " + str(round(self.options.laserpower,4)) + " percent)\n" + if self.options.gcode_flavour_preset == "repetier_laser": + gcode_tool_header = "M452;enable laser mode\nM3 S" + targetpower + gcode_tool_footer = "M3 S0\n" + elif self.options.gcode_flavour_preset == "repetier_fan": + gcode_tool_header = "M106 S" + targetpower + gcode_tool_footer = "" + if self.options.machine_type == "plotter": + if self.options.gcode_flavour_preset == "repetier_laser" or self.options.gcode_flavour_preset == "repetier_fan": + gcode_tool_header = "M340 P" + str(self.options.pen_index) + " S" + str(round(self.pen_up_angle_uneffected_converted,4)) + ";(target: " + str(self.options.pen_up_angle) + " degrees) pen up\n" + gcode_tool_footer = "" + #inkex.errormsg("pen_down_angle_converted = " + str(self.pen_down_angle_converted) + \ + #"\npen_up_angle_converted = " + str(self.pen_up_angle_converted) + \ + #"\npen_down_angle_uneffected_converted = " + str(self.pen_down_angle_uneffected_converted) +\ + #"\npen_up_angle_uneffected_converted = " + str(self.pen_up_angle_uneffected_converted)) + + #Custom User Header + header_command_lines = self.options.header_command.split("\\n") + gcode_custom_header = "" + for header_command_line in header_command_lines: + gcode_custom_header += header_command_line + "\n" + + #Custom User Repeat command + repeatings_command_lines = self.options.repeatings_command.split("\\n") + gcode_custom_repeat = "\n;BEGIN OF CUSTOM REPEAT COMMAND\n" + for repeatings_command_line in repeatings_command_lines: + gcode_custom_repeat += repeatings_command_line + "\n" + gcode_custom_repeat += ";END OF CUSTOM REPEAT COMMAND\n" + + #Custom User Footer + footer_command_lines = self.options.footer_command.split("\\n") + gcode_custom_footer = "" + for footer_command_line in footer_command_lines: + gcode_custom_footer += footer_command_line + "\n" + + #Auto-Homing + option_autohoming = "" + if self.options.auto_homing: + option_autohoming = "G28 XY;homing\n" + + #Disable tool at the end + option_auto_disable_tool = "" + if self.options.auto_disable_tool: + if self.options.machine_type == "plotter": + if self.options.gcode_flavour_preset == "repetier_laser" or self.options.gcode_flavour_preset == "repetier_fan": + option_auto_disable_tool = "G4 P" + str(get_delay(self)) + ";dwell\n" +\ + "M340 P" + str(self.options.pen_index) + " S0; pen disable\n" +\ + "G4 P" + str(get_delay(self)) + ";dwell\n" + elif self.options.machine_type == "laser": + if self.options.gcode_flavour_preset == "repetier_fan": + option_auto_disable_tool = "G4 P" + str(get_delay(self)) + ";dwell\n" +\ + "M106 S0; laser disable\n" +\ + "G4 P" + str(get_delay(self)) + ";dwell\n" + #Create new file and write gcode into it + f = open(self.dirname+self.options.file, "w") + finalgcode = ";BEGIN OF GCODE" +\ + "\n;MACHINE TYPE: " +\ + self.options.machine_type +\ + "\n;USING GCODE FLAVOUR: " +\ + self.options.gcode_flavour_preset +\ + "\n\nG90;absolute coordinates\n" +\ + gcode_flavour_units +\ + ";units in mm or in\n" +\ + "T" + str(self.options.tool_index) + ";change to defined tool index\n" +\ + gcode_tool_header +\ + "\n;BEGIN OF CUSTOM HEADER\n" +\ + gcode_custom_header +\ + ";END OF CUSTOM HEADER\n\n" +\ + option_autohoming +\ + "\nG0 F" +\ + self.options.travel_speed +\ + ";init feedrate\n" +\ + gcode +\ + gcode_tool_footer +\ + "\n;BEGIN OF CUSTOM FOOTER\n" +\ + gcode_custom_footer +\ + ";END OF CUSTOM FOOTER\n\n" + \ + option_auto_disable_tool +\ + ";END OF GCODE\n" + gcode_pass = finalgcode + if self.options.repeatings_mode == "full" : + for y in range(1,self.options.repeatings + 1): + finalgcode += "\n;LOOP #" + str(y) + "\n" + gcode_custom_repeat + "\n" + gcode_pass + f.write(finalgcode) + f.close() + + def __init__(self): + self.dirname = '' + inkex.Effect.__init__(self) + self.OptionParser.add_option("", "--main_tabs", action="store", type="string", dest="main_tabs", default="", help="") + self.OptionParser.add_option("-d", "--directory", action="store", type="string", dest="directory", default="~/Desktop", help="Output directory") + self.OptionParser.add_option("", "--header-command", action="store", type="string", dest="header_command", default="", help="Header GCode") + self.OptionParser.add_option("", "--footer-command", action="store", type="string", dest="footer_command", default="", help="Footer GCode") + self.OptionParser.add_option("-f", "--filename", action="store", type="string", dest="file", default="output.gcode", help="File name") + self.OptionParser.add_option("", "--add-numeric-suffix-to-filename", action="store", type="inkbool", dest="add_numeric_suffix_to_filename", default=False, help="Add numeric suffix to file name") + self.OptionParser.add_option("", "--tooling-speed", action="store", type="int", dest="tooling_speed", default="2000", help="Plotter speed (mm/min)") + self.OptionParser.add_option("", "--travel-speed", action="store", type="string", dest="travel_speed", default="3000", help="Travel speed (mm/min)") + self.OptionParser.add_option("", "--pen-index", action="store", type="int", dest="pen_index", default="0", help="Servo Index") + self.OptionParser.add_option("", "--tool-index", action="store", type="int", dest="tool_index", default="0", help="Tool Index") + self.OptionParser.add_option("", "--pen-down-angle", action="store", type="float", dest="pen_down_angle", default="900", help="Pen Up Impulse (max. 2500)") + self.OptionParser.add_option("", "--pen-up-angle", action="store", type="float", dest="pen_up_angle", default="600", help="Pen Down Impulse (min. 500)") + self.OptionParser.add_option("", "--delay-time", action="store", type="int", dest="delay_time", default="500", help="Servo Speed (dwell time)") + self.OptionParser.add_option("", "--repeatings", action="store", type="int", dest="repeatings", default="0", help="Quantity of repeatings") + self.OptionParser.add_option("", "--repeatings-command", action="store", type="string", dest="repeatings_command", default="", help="Some special command before repeating") + self.OptionParser.add_option("", "--repeatings-offset-x", action="store", type="float", dest="repeatings_offset_x", default="0.000", help="") + self.OptionParser.add_option("", "--repeatings-offset-y", action="store", type="float", dest="repeatings_offset_y", default="0.000", help="") + self.OptionParser.add_option("", "--repeatings-mode", action="store", type="string", dest="repeatings_mode", default='partial', help="Defines the loop mode") + self.OptionParser.add_option("", "--repeatings-pen-increment", action="store", type="float", dest="repeatings_pen_increment", default='0', help="Defines the increment of pen movement") + self.OptionParser.add_option("", "--suppress-all-messages", action="store", type="inkbool", dest="suppress_all_messages", default=True, help="Hide messages during g-code generation") + self.OptionParser.add_option("", "--create-log", action="store", type="inkbool", dest="log_create_log", default=True, help="Create log files") + self.OptionParser.add_option("", "--log-filename", action="store", type="string", dest="log_filename", default='', help="Create log files") + self.OptionParser.add_option("", "--draw-calculation-paths", action="store", type="inkbool", dest="draw_calculation_paths", default=False, help="Draw additional graphics to debug engraving path") + self.OptionParser.add_option("", "--coordinates-unit", action="store", type="string", dest="coordinates_unit", default="MM", help="Units") + self.OptionParser.add_option("", "--biarc-max-split-depth", action="store", type="int", dest="biarc_max_split_depth", default="4", help="Defines maximum depth of splitting while approximating using biarcs.") + self.OptionParser.add_option("", "--biarc-tolerance", action="store", type="float", dest="biarc_tolerance", default="1", help="Tolerance used when calculating biarc interpolation") + self.OptionParser.add_option("", "--gcode-flavour-preset", action="store", type="string", dest="gcode_flavour_preset", default="repetier", help="Defines correct GCodes/MCodes") + self.OptionParser.add_option("", "--machine-type", action="store", type="string", dest="machine_type", default="plotter", help="Defines the machine type") + self.OptionParser.add_option("", "--show-output-path", action="store", type="inkbool", dest="show_output_path", default=True, help="Show popup with saved output") + self.OptionParser.add_option("", "--laserpower", action="store", type="float", dest="laserpower", default="10.0", help="Laser power in percentage") + self.OptionParser.add_option("", "--laserpower-increment", action="store", type="float", dest="laserpower_increment", default="0.0", help="Laser power increment/decrement") + self.OptionParser.add_option("", "--scale-uniform", action="store", type="float", dest="scale_uniform", default="100.0", help="Scale") + self.OptionParser.add_option("", "--scale-increment", action="store", type="float", dest="scale_increment", default="0.0", help="Scale increment") + self.OptionParser.add_option("", "--auto-homing", action="store", type="inkbool", dest="auto_homing", default=True, help="Auto homing XY") + self.OptionParser.add_option("", "--auto-disable-tool", action="store", type="inkbool", dest="auto_disable_tool", default=True, help="Auto disable servo motor") + self.OptionParser.add_option("", "--randomize-speed", action="store", type="inkbool", dest="randomize_speed", default=False, help="Randomize speed") + self.OptionParser.add_option("", "--randomize-speed-lowerval", action="store", type="float", dest="randomize_speed_lowerval", default="0.0", help="Randomize speed, lower value") + self.OptionParser.add_option("", "--randomize-speed-upperval", action="store", type="float", dest="randomize_speed_upperval", default="0.0", help="Randomize speed, upper value") + self.OptionParser.add_option("", "--randomize-penangle", action="store", type="inkbool", dest="randomize_penangle", default=False, help="Randomize angle") + self.OptionParser.add_option("", "--randomize-penangle-lowerval", action="store", type="float", dest="randomize_penangle_lowerval", default="0.0", help="Randomize angle, lower value") + self.OptionParser.add_option("", "--randomize-penangle-upperval", action="store", type="float", dest="randomize_penangle_upperval", default="0.0", help="Randomize angle, upper value") + self.OptionParser.add_option("", "--randomize-laserpower", action="store", type="inkbool", dest="randomize_laserpower", default=False, help="Randomize laser power") + self.OptionParser.add_option("", "--randomize-laserpower-lowerval", action="store", type="float", dest="randomize_laserpower_lowerval", default="0.0", help="Randomize laser power, lower value") + self.OptionParser.add_option("", "--randomize-laserpower-upperval", action="store", type="float", dest="randomize_laserpower_upperval", default="0.0", help="Randomize laser power, upper value") + self.OptionParser.add_option("", "--randomize-delay", action="store", type="inkbool", dest="randomize_delay", default=False, help="Randomize delay") + self.OptionParser.add_option("", "--randomize-delay-lowerval", action="store", type="float", dest="randomize_delay_lowerval", default="0.0", help="Randomize delay, lower value") + self.OptionParser.add_option("", "--randomize-delay-upperval", action="store", type="float", dest="randomize_delay_upperval", default="0.0", help="Randomize delay, upper value") + + #GLOBALS + self.pen_down_angle_uneffected_converted = 0 #converted + self.pen_up_angle_uneffected_converted = 0 #converted + self.repeatings_pen_increment_converted = 0 #converted + self.laserpower_uneffected_converted = 0 #converted + self.laserpower_increment_converted = 0 #converted + self.pen_down_angle_converted = 0 #converted + self.pen_up_angle_converted = 0 #converted + self.laserpower_converted = 0 #converted + self.offset_x = 0.0 + self.offset_y = 0.0 + self.pen_pos_min = 0 + self.pen_pos_max = 0 + self.laserpower_min = 0 + self.laserpower_max = 0 + + def parse_curve(self, p, layer, w = None, f = None): + c = [] + if len(p)==0 : + return [] + p = self.transform_csp(p, layer) + + + ### Sort to reduce Rapid distance + k = range(1,len(p)) + keys = [0] + while len(k)>0: + end = p[keys[-1]][-1][1] + dist = None + for i in range(len(k)): + start = p[k[i]][0][1] + dist = max( ( -( ( end[0]-start[0])**2+(end[1]-start[1])**2 ) ,i) , dist ) + keys += [k[dist[1]]] + del k[dist[1]] + for k in keys: + subpath = p[k] + c += [ [ [subpath[0][1][0],subpath[0][1][1]] , 'move', 0, 0] ] + for i in range(1,len(subpath)): + sp1 = [ [subpath[i-1][j][0], subpath[i-1][j][1]] for j in range(3)] + sp2 = [ [subpath[i ][j][0], subpath[i ][j][1]] for j in range(3)] + c += biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# l1 = biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# print_((-f(w[k][i-1]),-f(w[k][i]), [i1[5] for i1 in l1]) ) + c += [ [ [subpath[-1][1][0],subpath[-1][1][1]] ,'end',0,0] ] + print_("Curve: " + str(c)) + return c + + + def draw_curve(self, curve, layer, group=None, style=styles["biarc_style"]): + + self.get_defs() + # Add marker to defs if it does not exist + if "DrawCurveMarker" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker","orient":"auto","refX":"-8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m -6.55552,-2.41063 0,0 L -13.11104,0 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + if "DrawCurveMarker_r" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker_r","orient":"auto","refX":"8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m 6.55552,-2.41063 0,0 L 13.11104,0 c -1.0473,-1.42323 -1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + for i in [0,1]: + style['biarc%s_r'%i] = simplestyle.parseStyle(style['biarc%s'%i]) + style['biarc%s_r'%i]["marker-start"] = "url(#DrawCurveMarker_r)" + del(style['biarc%s_r'%i]["marker-end"]) + style['biarc%s_r'%i] = simplestyle.formatStyle(style['biarc%s_r'%i]) + + if group==None: + group = inkex.etree.SubElement( self.layers[min(1,len(self.layers)-1)], inkex.addNS('g','svg'), {"gcodetools": "Preview group"} ) + s, arcn = '', 0 + + + a,b,c = [0.,0.], [1.,0.], [0.,1.] + k = (b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]) + a,b,c = self.transform(a, layer, True), self.transform(b, layer, True), self.transform(c, layer, True) + if ((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))*k > 0 : reverse_angle = 1 + else : reverse_angle = -1 + for sk in curve: + si = sk[:] + si[0], si[2] = self.transform(si[0], layer, True), (self.transform(si[2], layer, True) if type(si[2])==type([]) and len(si[2])==2 else si[2]) + + if s!='': + if s[1] == 'line': + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': style['line'], + 'd':'M %s,%s L %s,%s' % (s[0][0], s[0][1], si[0][0], si[0][1]), + "gcodetools": "Preview", + } + ) + elif s[1] == 'arc': + arcn += 1 + sp = s[0] + c = s[2] + s[3] = s[3]*reverse_angle + + a = ( (P(si[0])-P(c)).angle() - (P(s[0])-P(c)).angle() )%math.pi2 #s[3] + if s[3]*a<0: + if a>0: a = a-math.pi2 + else: a = math.pi2+a + r = math.sqrt( (sp[0]-c[0])**2 + (sp[1]-c[1])**2 ) + a_st = ( math.atan2(sp[0]-c[0],- (sp[1]-c[1])) - math.pi/2 ) % (math.pi*2) + st = style['biarc%s' % (arcn%2)][:] + if a>0: + a_end = a_st+a + st = style['biarc%s'%(arcn%2)] + else: + a_end = a_st*1 + a_st = a_st+a + st = style['biarc%s_r'%(arcn%2)] + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': st, + inkex.addNS('cx','sodipodi'): str(c[0]), + inkex.addNS('cy','sodipodi'): str(c[1]), + inkex.addNS('rx','sodipodi'): str(r), + inkex.addNS('ry','sodipodi'): str(r), + inkex.addNS('start','sodipodi'): str(a_st), + inkex.addNS('end','sodipodi'): str(a_end), + inkex.addNS('open','sodipodi'): 'true', + inkex.addNS('type','sodipodi'): 'arc', + "gcodetools": "Preview", + }) + s = si + + def check_dir(self): + self.dirname = self.options.directory + if self.dirname == '' or self.dirname == None: + self.dirname = './' + + self.dirname = os.path.expanduser(self.dirname) + self.dirname = os.path.expandvars(self.dirname) + self.dirname = os.path.abspath(self.dirname) + if self.dirname[-1] != os.path.sep: + self.dirname += os.path.sep + if not os.path.isdir(self.dirname): + os.makedirs(self.dirname) + + if self.options.add_numeric_suffix_to_filename : + dir_list = os.listdir(self.dirname) + if "." in self.options.file : + r = re.match(r"^(.*)(\..*)$",self.options.file) + ext = r.group(2) + name = r.group(1) + else: + ext = "" + name = self.options.file + max_n = 0 + for s in dir_list : + r = re.match(r"^%s_0*(\d+)%s$"%(re.escape(name),re.escape(ext) ), s) + if r : + max_n = max(max_n,int(r.group(1))) + filename = name + "_" + ( "0"*(4-len(str(max_n+1))) + str(max_n+1) ) + ext + self.options.file = filename + + print_("Testing writing rights on '%s'"%(self.dirname+self.options.file)) + try: + f = open(self.dirname+self.options.file, "w") + f.close() + except: + self.error(_("Can not write to specified file!\n%s"%(self.dirname+self.options.file)),"error") + return False + return True + + + +################################################################################ +### +### Generate Gcode +### Generates Gcode on given curve. +### +### Curve definition [start point, type = {'arc','line','move','end'}, arc center, arc angle, end point, [zstart, zend]] +### +################################################################################ + def generate_gcode(self, curve, layer, depth): + + def get_cooordinate_line(index, c): + c = [c[i] if i 1: #blocks randomizing for the really first positioning line in gcode which means travelling to the start geometry with a pen in down position + #Randomize tooling speed + if self.options.randomize_speed: + minspeed = self.options.tooling_speed - self.options.randomize_speed_lowerval + maxspeed = self.options.tooling_speed + self.options.randomize_speed_upperval + if minspeed <= 0: + minspeed = 1.0 #disable feedrate of zero + coordinate_line += " F" + str(round(random.uniform(minspeed, maxspeed),4)) + + #Randomize pen angle + if self.options.machine_type == "plotter": + if self.options.randomize_penangle: + minangle = self.pen_down_angle_converted - math.ceil((self.pen_pos_max - self.pen_pos_min) / (180.0 - 0.0) * self.options.randomize_penangle_lowerval) + self.pen_pos_min + maxangle = self.pen_down_angle_converted + math.ceil((self.pen_pos_max - self.pen_pos_min) / (180.0 - 0.0) * self.options.randomize_penangle_upperval) + self.pen_pos_min + newangle = round(random.uniform(minangle, maxangle),4) + if newangle > self.pen_pos_max: + newangle = self.pen_pos_max + if newangle < self.pen_pos_min: + newangle = self.pen_pos_min + coordinate_line += "\nM340 P" + str(self.options.pen_index) + " S" + str(newangle) + + #Randomize laser power + elif self.options.machine_type == "laser": + if self.options.randomize_laserpower: + minpower = self.laserpower_converted - math.ceil((self.laserpower_max - self.laserpower_min) / (100.0 - 0.0) * self.options.randomize_laserpower_lowerval) + self.laserpower_min + maxpower = self.laserpower_converted + math.ceil((self.laserpower_max - self.laserpower_min) / (100.0 - 0.0) * self.options.randomize_laserpower_upperval) + self.laserpower_min + newpower = round(random.uniform(minpower, maxpower),4) + if newpower > self.laserpower_max: + newpower = self.laserpower_max + if newpower < self.laserpower_min: + newpower = self.laserpower_min + if self.options.gcode_flavour_preset == "repetier_fan": + coordinate_line += "\nM106 S" + str(newpower) + elif self.options.gcode_flavour_preset == "repetier_laser": + coordinate_line += "\nM3 S" + str(newpower) + return coordinate_line + + def calculate_angle(a, current_a): + return min( + [abs(a-current_a%math.pi2+math.pi2), a+current_a-current_a%math.pi2+math.pi2], + [abs(a-current_a%math.pi2-math.pi2), a+current_a-current_a%math.pi2-math.pi2], + [abs(a-current_a%math.pi2), a+current_a-current_a%math.pi2])[1] + if len(curve)==0 : return "" + + try : + self.last_used_tool == None + except : + self.last_used_tool = None + print_("working on curve") + print_("Curve: " + str(curve)) + g = "" + + lg, f = 'G00', "F" + str(self.options.tooling_speed) + ";feedrate" + current_a = 0 + if self.options.machine_type == "plotter": + gcode_after_path = \ + "G4 P" + str(get_delay(self)) + ";dwell\n" +\ + "M340 P" + str(self.options.pen_index) + " S" + str(round(self.pen_up_angle_converted,4)) + ";(target: " + str(self.options.pen_up_angle) + " degrees) pen up\n"+\ + "G0 F" + str(self.options.travel_speed) + ";feedrate\n"+\ + "G4 P" + str(get_delay(self)) + ";dwell\n" + elif self.options.machine_type == "laser": + gcode_after_path = \ + "G0 F" + str(self.options.travel_speed) + ";feedrate \n" + for index in range(1,len(curve)): + # Creating Gcode for curve between s=curve[index-1] and si=curve[index] start at s[0] end at s[4]=si[0] + s, si = curve[index-1], curve[index] + feed = f if lg not in ['G01','G02','G03'] else '' + if s[1] == 'move': + if self.options.machine_type == "plotter": + tempcmd = "G4 P" + str(get_delay(self)) + ";dwell\n" +\ + "M340 P" + str(self.options.pen_index) + " S" + str(round(self.pen_down_angle_converted,4)) + ";(target: " + str(self.options.pen_down_angle) + " degrees) pen down + new path begins\n" + elif self.options.machine_type == "laser": + tempcmd = "M3 S" + str(self.laserpower_converted) + ";(target power: " + str(round(self.options.laserpower,4)) + " percent)\n" + g += "G0" + get_cooordinate_line(index, si[0]) + "\n" +\ + tempcmd + lg = 'G00' + elif s[1] == 'end': + g += gcode_after_path + lg = 'G00' + elif s[1] == 'line': + if lg=="G00": g += "G0 " + feed + "\n" + g += "G1" + get_cooordinate_line(index, si[0]) + "\n" + lg = 'G01' + elif s[1] == 'arc': + r = [(s[2][0]-s[0][0]), (s[2][1]-s[0][1])] + if lg=="G00": g += "G0 " + feed + "\n" + if (r[0]**2 + r[1]**2)>.1: + r1, r2 = (P(s[0])-P(s[2])), (P(si[0])-P(s[2])) + if abs(r1.mag()-r2.mag()) < 0.001 : + g += ("G2" if s[3]<0 else "G3") + get_cooordinate_line(index, si[0]+[ None, (s[2][0]-s[0][0]),(s[2][1]-s[0][1]) ]) + "\n" + else: + r = (r1.mag()+r2.mag())/2 + g += ("G2" if s[3]<0 else "G3") + get_cooordinate_line(index, si[0]) + " R%f" % (r) + "\n" + lg = 'G02' + else: + g += "G1" +get_cooordinate_line(index, si[0]) + " " + feed + "\n" + lg = 'G01' + if si[1] == 'end': + g += gcode_after_path + return g + + + def get_transforms(self,g): + root = self.document.getroot() + trans = [] + while (g!=root): + if 'transform' in g.keys(): + t = g.get('transform') + t = simpletransform.parseTransform(t) + trans = simpletransform.composeTransform(t,trans) if trans != [] else t + print_(trans) + g=g.getparent() + return trans + + + def apply_transforms(self,g,csp): + trans = self.get_transforms(g) + if trans != []: + simpletransform.applyTransformToPath(trans, csp) + return csp + + + def transform(self, source_point, layer, reverse=False): + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer not in self.transform_matrix: + for i in range(self.layers.index(layer),-1,-1): + if self.layers[i] in self.orientation_points : + break + + print_(str(self.layers)) + print_(str("I: " + str(i))) + print_("Transform: " + str(self.layers[i])) + if self.layers[i] not in self.orientation_points : + self.error(_("Orientation points for '%s' layer have not been found! Please add orientation points using Orientation tab!") % layer.get(inkex.addNS('label','inkscape')),"no_orientation_points") + elif self.layers[i] in self.transform_matrix : + self.transform_matrix[layer] = self.transform_matrix[self.layers[i]] + else : + orientation_layer = self.layers[i] + if len(self.orientation_points[orientation_layer])>1 : + self.error(_("There are more than one orientation point groups in '%s' layer") % orientation_layer.get(inkex.addNS('label','inkscape')),"more_than_one_orientation_point_groups") + points = self.orientation_points[orientation_layer][0] + if len(points)==2: + points += [ [ [(points[1][0][1]-points[0][0][1])+points[0][0][0], -(points[1][0][0]-points[0][0][0])+points[0][0][1]], [-(points[1][1][1]-points[0][1][1])+points[0][1][0], points[1][1][0]-points[0][1][0]+points[0][1][1]] ] ] + if len(points)==3: + print_("Layer '%s' Orientation points: " % orientation_layer.get(inkex.addNS('label','inkscape'))) + for point in points: + print_(point) + # Zcoordinates definition taken from Orientatnion point 1 and 2 + self.Zcoordinates[layer] = [max(points[0][1][2],points[1][1][2]), min(points[0][1][2],points[1][1][2])] + matrix = numpy.array([ + [points[0][0][0], points[0][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[0][0][0], points[0][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[0][0][0], points[0][0][1], 1], + [points[1][0][0], points[1][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[1][0][0], points[1][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[1][0][0], points[1][0][1], 1], + [points[2][0][0], points[2][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[2][0][0], points[2][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[2][0][0], points[2][0][1], 1] + ]) + + if numpy.linalg.det(matrix)!=0 : + m = numpy.linalg.solve(matrix, + numpy.array( + [[points[0][1][0]], [points[0][1][1]], [1], [points[1][1][0]], [points[1][1][1]], [1], [points[2][1][0]], [points[2][1][1]], [1]] + ) + ).tolist() + self.transform_matrix[layer] = [[m[j*3+i][0] for i in range(3)] for j in range(3)] + + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + + self.transform_matrix_reverse[layer] = numpy.linalg.inv(self.transform_matrix[layer]).tolist() + print_("\n Layer '%s' transformation matrixes:" % layer.get(inkex.addNS('label','inkscape')) ) + print_(self.transform_matrix) + print_(self.transform_matrix_reverse) + + ###self.Zauto_scale[layer] = math.sqrt( (self.transform_matrix[layer][0][0]**2 + self.transform_matrix[layer][1][1]**2)/2 ) + ### Zautoscale is absolete + self.Zauto_scale[layer] = 1 + print_("Z automatic scale = %s (computed according orientation points)" % self.Zauto_scale[layer]) + + x,y = source_point[0], source_point[1] + if not reverse : + t = self.transform_matrix[layer] + else : + t = self.transform_matrix_reverse[layer] + return [t[0][0]*x+t[0][1]*y+t[0][2], t[1][0]*x+t[1][1]*y+t[1][2]] + + + def transform_csp(self, csp_, layer, reverse = False): + csp = [ [ [csp_[i][j][0][:],csp_[i][j][1][:],csp_[i][j][2][:]] for j in range(len(csp_[i])) ] for i in range(len(csp_)) ] + for i in xrange(len(csp)): + for j in xrange(len(csp[i])): + for k in xrange(len(csp[i][j])): + csp[i][j][k] = self.transform(csp[i][j][k],layer, reverse) + return csp + + +################################################################################ +### Errors handling function, notes are just printed into Logfile, +### warnings are printed into log file and warning message is displayed but +### extension continues working, errors causes log and execution is halted +### Notes, warnings adn errors could be assigned to space or comma or dot +### sepparated strings (case is ignoreg). +################################################################################ + def error(self, s, type_= "Warning"): + notes = "Note " + warnings = """ + Warning tools_warning + bad_orientation_points_in_some_layers + more_than_one_orientation_point_groups + more_than_one_tool + orientation_have_not_been_defined + tool_have_not_been_defined + selection_does_not_contain_paths + selection_does_not_contain_paths_will_take_all + selection_is_empty_will_comupe_drawing + selection_contains_objects_that_are_not_paths + """ + errors = """ + Error + wrong_orientation_points + area_tools_diameter_error + no_tool_error + active_layer_already_has_tool + active_layer_already_has_orientation_points + """ + if type_.lower() in re.split("[\s\n,\.]+", errors.lower()) : + print_(s) + inkex.errormsg(s+"\n") + sys.exit() + elif type_.lower() in re.split("[\s\n,\.]+", warnings.lower()) : + print_(s) + if not self.options.suppress_all_messages : + inkex.errormsg(s+"\n") + elif type_.lower() in re.split("[\s\n,\.]+", notes.lower()) : + print_(s) + else : + print_(s) + inkex.errormsg(s) + sys.exit() + + +################################################################################ +### Get defs from svg +################################################################################ + def get_defs(self) : + self.defs = {} + def recursive(g) : + for i in g: + if i.tag == inkex.addNS("defs","svg") : + for j in i: + self.defs[j.get("id")] = i + if i.tag ==inkex.addNS("g",'svg') : + recursive(i) + recursive(self.document.getroot()) + + +################################################################################ +### +### Get Gcodetools info from the svg +### +################################################################################ + def get_info(self): + self.selected_paths = {} + self.paths = {} + self.orientation_points = {} + self.layers = [self.document.getroot()] + self.Zcoordinates = {} + self.transform_matrix = {} + self.transform_matrix_reverse = {} + self.Zauto_scale = {} + + def recursive_search(g, layer, selected=False): + items = g.getchildren() + items.reverse() + for i in items: + if selected: + self.selected[i.get("id")] = i + if i.tag == inkex.addNS("g",'svg') and i.get(inkex.addNS('groupmode','inkscape')) == 'layer': + self.layers += [i] + recursive_search(i,i) + elif i.get('gcodetools') == "Gcodetools orientation group" : + points = self.get_orientation_points(i) + if points != None : + self.orientation_points[layer] = self.orientation_points[layer]+[points[:]] if layer in self.orientation_points else [points[:]] + print_("Found orientation points in '%s' layer: %s" % (layer.get(inkex.addNS('label','inkscape')), points)) + else : + self.error(_("Warning! Found bad orientation points in '%s' layer. Resulting Gcode could be corrupt!") % layer.get(inkex.addNS('label','inkscape')), "bad_orientation_points_in_some_layers") + elif i.tag == inkex.addNS('path','svg'): + if "gcodetools" not in i.keys() : + self.paths[layer] = self.paths[layer] + [i] if layer in self.paths else [i] + if i.get("id") in self.selected : + self.selected_paths[layer] = self.selected_paths[layer] + [i] if layer in self.selected_paths else [i] + elif i.tag == inkex.addNS("g",'svg'): + recursive_search(i,layer, (i.get("id") in self.selected) ) + elif i.get("id") in self.selected : + self.error(_("This extension works with Paths and Dynamic Offsets and groups of them only! All other objects will be ignored!\nSolution 1: press Path->Object to path or Shift+Ctrl+C.\nSolution 2: Path->Dynamic offset or Ctrl+J.\nSolution 3: export all contours to PostScript level 2 (File->Save As->.ps) and File->Import this file."),"selection_contains_objects_that_are_not_paths") + + + recursive_search(self.document.getroot(),self.document.getroot()) + + + def get_orientation_points(self,g): + items = g.getchildren() + items.reverse() + p2, p3 = [], [] + p = None + for i in items: + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (2 points)": + p2 += [i] + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (3 points)": + p3 += [i] + if len(p2)==2 : p=p2 + elif len(p3)==3 : p=p3 + if p==None : return None + points = [] + for i in p : + point = [[],[]] + for node in i : + if node.get('gcodetools') == "Gcodetools orientation point arrow": + point[0] = self.apply_transforms(node,cubicsuperpath.parsePath(node.get("d")))[0][0][1] + if node.get('gcodetools') == "Gcodetools orientation point text": + r = re.match(r'(?i)\s*\(\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*\)\s*',node.text) + point[1] = [float(r.group(1)),float(r.group(2)),float(r.group(3))] + if point[0]!=[] and point[1]!=[]: points += [point] + if len(points)==len(p2)==2 or len(points)==len(p3)==3 : return points + else : return None + +################################################################################ +### +### dxfpoints +### +################################################################################ + def dxfpoints(self): + if self.selected_paths == {}: + self.error(_("Noting is selected. Please select something to convert to drill point (dxfpoint) or clear point sign."),"warning") + for layer in self.layers : + if layer in self.selected_paths : + for path in self.selected_paths[layer]: + if self.options.dxfpoints_action == 'replace': + path.set("dxfpoint","1") + r = re.match("^\s*.\s*(\S+)",path.get("d")) + if r!=None: + print_(("got path=",r.group(1))) + path.set("d","m %s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z" % r.group(1)) + path.set("style",styles["dxf_points"]) + + if self.options.dxfpoints_action == 'save': + path.set("dxfpoint","1") + + if self.options.dxfpoints_action == 'clear' and path.get("dxfpoint") == "1": + path.set("dxfpoint","0") + +################################################################################ +### +### Machine +### +################################################################################ + def machine(self) : + # Define laser command and laser power. Power has to be converted from percentage to fitting integer values + # Marlin: M106 S<1 .. 255> (int value; M106 S0 turns off diode) + # Repetier on FAN PIN: M106 S<1 .. 255> (int value; M106 S0 turns off diode) + # Repetier on TOOL PIN: M3 S<1 .. 255> (int value; M5 S0 turns off diode) you need to enable laser mode via M452 + # GRBL: M106 S<0 .. 12000> (int value; M107 turns off diode) + # + # notes to laser mode: + # laser diode should only be turned on when movement is done. Should be ensured in GCode to avoid burning material + # diode has to be turned off at travel moves + # in Repetier firmware this can be accomplished using code M452 to activate laser mode + # Pen Angle has to be converted from floating angle value to fitting integer values + # Marlin: M280 0 .. 180 (float value) + # Repetier: M340 500 .. 2500 (int value) + # Smoothie: M280 5 .. 10 (float value; 0 turns off the servo) + if self.options.gcode_flavour_preset == "repetier_laser" or self.options.gcode_flavour_preset == "repetier_fan": + self.pen_pos_min = 500 + self.pen_pos_max = 2500 + self.laserpower_min = 0 + self.laserpower_max = 255 + + self.pen_down_angle_uneffected_converted = math.ceil((self.pen_pos_max - self.pen_pos_min) / (180.0 - 0.0) * self.options.pen_down_angle) + self.pen_pos_min + self.pen_down_angle_converted = self.pen_down_angle_uneffected_converted #this value gets modified by pen increment later + self.pen_up_angle_uneffected_converted = math.ceil((self.pen_pos_max - self.pen_pos_min) / (180.0 - 0.0) * self.options.pen_up_angle) + self.pen_pos_min + self.pen_up_angle_converted = self.pen_up_angle_uneffected_converted #this value gets modified by pen increment later + self.repeatings_pen_increment_converted = math.ceil((self.pen_pos_max - self.pen_pos_min) / (180.0 - 0.0) * self.options.repeatings_pen_increment) + self.laserpower_uneffected_converted = math.ceil((self.laserpower_max - self.laserpower_min) / (100.0 - 0.0) * self.options.laserpower) + self.laserpower_min + self.laserpower_converted = self.laserpower_uneffected_converted #this value gets modified by laser power increment later + self.laserpower_increment_converted = math.ceil((self.laserpower_max - self.laserpower_min) / (100.0 - 0.0) * self.options.laserpower_increment) + + def get_boundaries(points): + minx,miny,maxx,maxy=None,None,None,None + out=[[],[],[],[]] + for p in points: + if minx==p[0]: + out[0]+=[p] + if minx==None or p[0]maxx: + maxx=p[0] + out[2]=[p] + + if maxy==p[1]: + out[3]+=[p] + if maxy==None or p[1]>maxy: + maxy=p[1] + out[3]=[p] + return out + + + def remove_duplicates(points): + i=0 + out=[] + for p in points: + for j in xrange(i,len(points)): + if p==points[j]: points[j]=[None,None] + if p!=[None,None]: out+=[p] + i+=1 + return(out) + + + def get_way_len(points): + l=0 + for i in xrange(1,len(points)): + l+=math.sqrt((points[i][0]-points[i-1][0])**2 + (points[i][1]-points[i-1][1])**2) + return l + + + def sort_dxfpoints(points): + points=remove_duplicates(points) + + ways=[ + # l=0, d=1, r=2, u=3 + [3,0], # ul + [3,2], # ur + [1,0], # dl + [1,2], # dr + [0,3], # lu + [0,1], # ld + [2,3], # ru + [2,1], # rd + ] + + minimal_way=[] + minimal_len=None + minimal_way_type=None + for w in ways: + tpoints=points[:] + cw=[] + for j in xrange(0,len(points)): + p=get_boundaries(get_boundaries(tpoints)[w[0]])[w[1]] + tpoints.remove(p[0]) + cw+=p + curlen = get_way_len(cw) + if minimal_len==None or curlen < minimal_len: + minimal_len=curlen + minimal_way=cw + minimal_way_type=w + + return minimal_way + + if self.selected_paths == {} : + paths=self.paths + self.error(_("No paths are selected! Trying to work on all available paths."),"warning") + else : + paths = self.selected_paths + + self.check_dir() + gcode = "" + + biarc_group = inkex.etree.SubElement( self.selected_paths.keys()[0] if len(self.selected_paths.keys())>0 else self.layers[0], inkex.addNS('g','svg') ) + print_(("self.layers=",self.layers)) + print_(("paths=",paths)) + for layer in self.layers : + if layer in paths : + print_(("layer",layer)) + p = [] + dxfpoints = [] + for path in paths[layer] : + print_(str(layer)) + if "d" not in path.keys() : + self.error(_("Warning: One or more paths dont have 'd' parameter, try to Ungroup (Ctrl+Shift+G) and Object to Path (Ctrl+Shift+C)!"),"selection_contains_objects_that_are_not_paths") + continue + csp = cubicsuperpath.parsePath(path.get("d")) + csp = self.apply_transforms(path, csp) + if path.get("dxfpoint") == "1": + tmp_curve=self.transform_csp(csp, layer) + x=tmp_curve[0][0][0][0] + y=tmp_curve[0][0][0][1] + print_("got dxfpoint (scaled) at (%f,%f)" % (x,y)) + dxfpoints += [[x,y]] + else: + p += csp + dxfpoints=sort_dxfpoints(dxfpoints) + curve = self.parse_curve(p, layer) + if self.options.draw_calculation_paths : + self.draw_curve(curve, layer, biarc_group) + + #Generate Code (first) + gcode += self.generate_gcode(curve, layer, 0) + + #Generate more loop code and add it if users selected 'partial' + if self.options.repeatings_mode == "partial" : + for x in range(1,self.options.repeatings + 1): + #Pen Increment Modifications + self.pen_up_angle_converted += self.repeatings_pen_increment_converted + self.pen_down_angle_converted += self.repeatings_pen_increment_converted + self.options.pen_up_angle += self.options.repeatings_pen_increment + self.options.pen_down_angle += self.options.repeatings_pen_increment + if self.pen_up_angle_converted > self.pen_pos_max: + self.pen_up_angle_converted = self.pen_pos_max + if self.pen_up_angle_converted < self.pen_pos_min: + self.pen_up_angle_converted = self.pen_pos_min + if self.pen_down_angle_converted > self.pen_pos_max: + self.pen_down_angle_converted = self.pen_pos_max + if self.pen_down_angle_converted < self.pen_pos_min: + self.pen_down_angle_converted = self.pen_pos_min + #Laser Power Increment Modifications + self.laserpower_converted += self.laserpower_increment_converted + self.options.laserpower += self.options.laserpower_increment + if self.laserpower_converted > self.laserpower_max: + self.laserpower_converted = self.laserpower_max + if self.laserpower_converted < self.laserpower_min: + self.laserpower_converted = self.laserpower_min + #Offset Increment Modifications + self.offset_x += self.options.repeatings_offset_x + self.offset_y += self.options.repeatings_offset_y + #Scale Modifications + self.options.scale_uniform += self.options.scale_increment + + gcode += "\n;LOOP #" + str(x) + "\n" + self.generate_gcode(curve, layer, 0) + self.export_gcode(gcode) + if self.options.show_output_path: + inkex.errormsg(_("Saved at location:") + "\n" + self.dirname + self.options.file) + +################################################################################ +### +### Orientation +### +################################################################################ + def orientation(self, layer=None) : + print_("entering orientations") + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer in self.orientation_points: + self.error(_("Active layer already has orientation points! Remove them or select another layer!"),"active_layer_already_has_orientation_points") + + orientation_group = inkex.etree.SubElement(layer, inkex.addNS('g','svg'), {"gcodetools":"Gcodetools orientation group"}) + + # translate == ['0', '-917.7043'] + if layer.get("transform") != None : + translate = layer.get("transform").replace("translate(", "").replace(")", "").split(",") + else : + translate = [0,0] + + # doc height in pixels (38 mm == 134.64566px) + doc_height = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + + if self.document.getroot().get('height') == "100%" : + doc_height = 1052.3622047 + print_("Overriding height from 100 percents to %s" % doc_height) + + print_("Document height: " + str(doc_height)); + + if self.options.coordinates_unit == "MM": + points = [[0.,0.,0.],[100.,0.,0.],[0.,100.,0.]] + #2019.08.08 - geaendert (Mario Voigt) orientation_scale = 3.5433070660 + orientation_scale = 3.5433070660 + print_("orientation_scale < 0 ===> switching to mm units=%0.10f"%orientation_scale ) + elif self.options.coordinates_unit == "IN": + points = [[0.,0.,0.],[5.,0.,0.],[0.,5.,0.]] + orientation_scale = 90 + print_("orientation_scale < 0 ===> switching to inches units=%0.10f"%orientation_scale ) + + points = points[:2] + + print_(("using orientation scale",orientation_scale,"i=",points)) + for i in points : + # X == Correct! + # si == x,y coordinate in px + # si have correct coordinates + # if layer have any tranform it will be in translate so lets add that + si = [i[0]*orientation_scale, (i[1]*orientation_scale)+float(translate[1])] + g = inkex.etree.SubElement(orientation_group, inkex.addNS('g','svg'), {'gcodetools': "Gcodetools orientation point (2 points)"}) + inkex.etree.SubElement( g, inkex.addNS('path','svg'), + { + 'style': "stroke:none;fill:#000000;", + 'd':'m %s,%s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z z' % (si[0], -si[1]+doc_height), + 'gcodetools': "Gcodetools orientation point arrow" + }) + t = inkex.etree.SubElement( g, inkex.addNS('text','svg'), + { + 'style': "font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;", + inkex.addNS("space","xml"):"preserve", + 'x': str(si[0]+10), + 'y': str(-si[1]-10+doc_height), + 'gcodetools': "Gcodetools orientation point text" + }) + t.text = "(%s; %s; %s)" % (i[0],i[1],i[2]) + + +################################################################################ +### +### Effect +### +### Main function of Gcodetools class +### +################################################################################ + def effect(self) : + global options + options = self.options + options.self = self + options.doc_root = self.document.getroot() + # define print_ function + global print_ + if self.options.log_create_log : + try : + if os.path.isfile(self.options.log_filename) : os.remove(self.options.log_filename) + f = open(self.options.log_filename,"a") + f.write("Gcodetools log file.\nStarted at %s.\n%s\n" % (time.strftime("%d.%m.%Y %H:%M:%S"),options.log_filename)) + f.close() + except : + print_ = lambda *x : None + else : print_ = lambda *x : None + self.get_info() + if self.orientation_points == {} : + self.error(_("Orientation points have not been defined! A default set of orientation points has been automatically added."),"warning") + self.orientation( self.layers[min(0,len(self.layers)-1)] ) + self.get_info() + + self.get_info() + self.machine() + +e = plotter_gcode() +e.affect() \ No newline at end of file diff --git a/fablabchemnitz_plot_utils.py b/fablabchemnitz_plot_utils.py new file mode 100644 index 0000000..1858824 --- /dev/null +++ b/fablabchemnitz_plot_utils.py @@ -0,0 +1,752 @@ +# -*- coding: utf-8 -*- +# plot_utils.py +# Common plotting utilities for EiBotBoard +# https://github.com/evil-mad/plotink +# +# Intended to provide some common interfaces that can be used by +# EggBot, WaterColorBot, AxiDraw, and similar machines. +# +# See below for version information +# +# +# The MIT License (MIT) +# +# Copyright (c) 2019 Windell H. Oskay, Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from math import sqrt + +try: + from plot_utils_import import from_dependency_import + cspsubdiv = from_dependency_import('ink_extensions.cspsubdiv') + simplepath = from_dependency_import('ink_extensions.simplepath') + bezmisc = from_dependency_import('ink_extensions.bezmisc') + ffgeom = from_dependency_import('ink_extensions.ffgeom') +except: + import cspsubdiv + import simplepath + import bezmisc + import ffgeom + +def version(): # Version number for this document + return "0.16" # Dated 2019-06-18 + +__version__ = version() + +PX_PER_INCH = 96.0 +# This value has changed to 96 px per inch, as of version 0.12 of this library. +# Prior versions used 90 PPI, corresponding the value used in Inkscape < 0.92. +# For use with Inkscape 0.91 (or older), use PX_PER_INCH = 90.0 + +trivial_svg = """ + + + """ + +def checkLimits(value, lower_bound, upper_bound): + # Limit a value to within a range. + # Return constrained value with error boolean. + if value > upper_bound: + return upper_bound, True + if value < lower_bound: + return lower_bound, True + return value, False + + +def checkLimitsTol(value, lower_bound, upper_bound, tolerance): + # Limit a value to within a range. + # Return constrained value with error boolean. + # Allow a range of tolerance where we constrain the value without an error message. + + if value > upper_bound: + if value > (upper_bound + tolerance): + return upper_bound, True # Truncate & throw error + else: + return upper_bound, False # Truncate with no error + if value < lower_bound: + if value < (lower_bound - tolerance): + return lower_bound, True # Truncate & throw error + else: + return lower_bound, False # Truncate with no error + return value, False # Return original value without error + + +def clip_code(x, y, x_min, x_max, y_min, y_max): + # Encode point position with respect to boundary box + code = 0 + if x < x_min: + code = 1 # Left + if x > x_max: + code |= 2 # Right + if y < y_min: + code |= 4 # Top + if y > y_max: + code |= 8 # Bottom + return code + + +def clip_segment(segment, bounds): + """ + Given an input line segment [[x1,y1],[x2,y2]], as well as a + rectangular bounding region [[x_min,y_min],[x_max,y_max]], clip and + keep the part of the segment within the bounding region, using the + Cohen–Sutherland algorithm. + Return a boolean value, "accept", indicating that the output + segment is non-empty, as well as truncated segment, + [[x1',y1'],[x2',y2']], giving the portion of the input line segment + that fits within the bounds. + """ + + x1 = segment[0][0] + y1 = segment[0][1] + x2 = segment[1][0] + y2 = segment[1][1] + + x_min = bounds[0][0] + y_min = bounds[0][1] + x_max = bounds[1][0] + y_max = bounds[1][1] + + while True: # Repeat until return + code_1 = clip_code(x1, y1, x_min, x_max, y_min, y_max) + code_2 = clip_code(x2, y2, x_min, x_max, y_min, y_max) + + # Trivial accept: + if code_1 == 0 and code_2 == 0: + return True, segment # Both endpoints are within bounds. + # Trivial reject, if both endpoints are outside, and on the same side: + if code_1 & code_2: + return False, segment # Verify with bitwise AND. + + # Otherwise, at least one point is out of bounds; not trivial. + if code_1 != 0: + code = code_1 + else: + code = code_2 + + # Clip at a single boundary; may need to do this up to twice per vertex + + if code & 1: # Vertex on LEFT side of bounds: + x = x_min # Find intersection of our segment with x_min + slope = (y2 - y1) / (x2 - x1) + y = slope * (x_min - x1) + y1 + + elif code & 2: # Vertex on RIGHT side of bounds: + x = x_max # Find intersection of our segment with x_max + slope = (y2 - y1) / (x2 - x1) + y = slope * (x_max - x1) + y1 + + elif code & 4: # Vertex on TOP side of bounds: + y = y_min # Find intersection of our segment with y_min + slope = (x2 - x1) / (y2 - y1) + x = slope * (y_min - y1) + x1 + + elif code & 8: # Vertex on BOTTOM side of bounds: + y = y_max # Find intersection of our segment with y_max + slope = (x2 - x1) / (y2 - y1) + x = slope * (y_max - y1) + x1 + + if code == code_1: + x1 = x + y1 = y + else: + x2 = x + y2 = y + segment = [[x1,y1],[x2,y2]] # Now checking this clipped segment + + +def constrainLimits(value, lower_bound, upper_bound): + # Limit a value to within a range. + return max(lower_bound, min(upper_bound, value)) + + +def distance(x, y): + """ + Pythagorean theorem + """ + return sqrt(x * x + y * y) + + +def dotProductXY(input_vector_first, input_vector_second): + temp = input_vector_first[0] * input_vector_second[0] + input_vector_first[1] * input_vector_second[1] + if temp > 1: + return 1 + elif temp < -1: + return -1 + else: + return temp + + +def getLength(altself, name, default): + """ + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + Return value in px. + """ + string_to_parse = altself.document.getroot().get(name) + + if string_to_parse: + v, u = parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == '' or u == 'px': + return float(v) + elif u == 'in': + return float(v) * PX_PER_INCH + elif u == 'mm': + return float(v) * PX_PER_INCH / 25.4 + elif u == 'cm': + return float(v) * PX_PER_INCH / 2.54 + elif u == 'Q' or u == 'q': + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == 'pc': + return float(v) * PX_PER_INCH / 6.0 + elif u == 'pt': + return float(v) * PX_PER_INCH / 72.0 + elif u == '%': + return float(default) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float(default) + + +def getLengthInches(altself, name): + """ + Get the attribute with name "name", and parse it as a length, + into a value and associated units. Return value in inches. + + As of version 0.11, units of 'px' or no units ('') are interpreted + as imported px, at a resolution of 96 px per inch, as per the SVG + specification. (Prior versions returned None in this case.) + + This allows certain imported SVG files, (imported with units of px) + to plot while they would not previously. However, it may also cause + new scaling issues in some circumstances. Note, for example, that + Adobe Illustrator uses 72 px per inch, and Inkscape used 90 px per + inch prior to version 0.92. + """ + string_to_parse = altself.document.getroot().get(name) + if string_to_parse: + v, u = parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == 'in': + return float(v) + elif u == 'mm': + return float(v) / 25.4 + elif u == 'cm': + return float(v) / 2.54 + elif u == 'Q' or u == 'q': + return float(v) / (40.0 * 2.54) + elif u == 'pc': + return float(v) / 6.0 + elif u == 'pt': + return float(v) / 72.0 + elif u == '' or u == 'px': + return float(v) / 96.0 + else: + # Unsupported units, including '%' + return None + + +def parseLengthWithUnits(string_to_parse): + """ + Parse an SVG value which may or may not have units attached. + There is a more general routine to consider in scour.py if more + generality is ever needed. + """ + u = 'px' + s = string_to_parse.strip() + if s[-2:] == 'px': # pixels, at a size of PX_PER_INCH per inch + s = s[:-2] + elif s[-2:] == 'in': # inches + s = s[:-2] + u = 'in' + elif s[-2:] == 'mm': # millimeters + s = s[:-2] + u = 'mm' + elif s[-2:] == 'cm': # centimeters + s = s[:-2] + u = 'cm' + elif s[-2:] == 'pt': # points; 1pt = 1/72th of 1in + s = s[:-2] + u = 'pt' + elif s[-2:] == 'pc': # picas; 1pc = 1/6th of 1in + s = s[:-2] + u = 'pc' + elif s[-1:] == 'Q' or s[-1:] == 'q': # quarter-millimeters. 1q = 1/40th of 1cm + s = s[:-1] + u = 'Q' + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float(s) + except: + return None, None + + return v, u + + +def unitsToUserUnits(input_string): + """ + Custom replacement for the unittouu routine in inkex.py + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + """ + + v, u = parseLengthWithUnits(input_string) + if v is None: + return None + elif u == '' or u == 'px': + return float(v) + elif u == 'in': + return float(v) * PX_PER_INCH + elif u == 'mm': + return float(v) * PX_PER_INCH / 25.4 + elif u == 'cm': + return float(v) * PX_PER_INCH / 2.54 + elif u == 'Q' or u == 'q': + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == 'pc': + return float(v) * PX_PER_INCH / 6.0 + elif u == 'pt': + return float(v) * PX_PER_INCH / 72.0 + elif u == '%': + return float(v) / 100.0 + else: + # Unsupported units + return None + + +def subdivideCubicPath(sp, flat, i=1): + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(). I rewrote the recursive + call because it caused recursion-depth errors on complicated line segments. + """ + + while True: + while True: + if i >= len(sp): + return + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if cspsubdiv.maxdist(b) > flat: + break + i += 1 + + one, two = bezmisc.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +def max_dist_from_n_points(input): + """ + Like cspsubdiv.maxdist, but it can check for distances of any number of points >= 0. + + `input` is an ordered collection of points, each point specified as an x- and y-coordinate. + The first point and the last point define the segment we are finding distances from. + + does not mutate `input` + """ + assert len(input) >= 3, "There must be points (other than begin/end) to check." + + points = [ffgeom.Point(point[0], point[1]) for point in input] + segment = ffgeom.Segment(points.pop(0), points.pop()) + + distances = [segment.distanceToPoint(point) for point in points] + return max(distances) + +def supersample(vertices, tolerance): + """ + Given a list of vertices, remove some according to the following algorithm. + + Suppose that the vertex list consists of points A, B, C, D, E, and so forth, which define segments AB, BC, CD, DE, EF, and so on. + + We first test to see if vertex B can be removed, by using perpDistanceToPoint to check whether the distance between B and segment AC is less than tolerance. + If B can be removed, then check to see if the next vertex, C, can be removed. Both B and C can be removed if the both the distance between B and AD is less than Tolerance and the distance between C and AD is less than Tolerance. Continue removing additional vertices, so long as the perpendicular distance between every point removed and the resulting segment is less than tolerance (and the end of the vertex list is not reached). +If B cannot be removed, then move onto vertex C, and perform the same checks, until the end of the vertex list is reached. + """ + if len(vertices) <= 2: # there is nothing to delete + return vertices + + start_index = 0 # can't remove first vertex + while start_index < len(vertices) - 2: + end_index = start_index + 2 + # test the removal of (start_index, end_index), exclusive until we can't advance end_index + while (max_dist_from_n_points(vertices[start_index:end_index + 1]) < tolerance + and end_index < len(vertices)): + end_index += 1 # try removing the next vertex too + + vertices[start_index + 1:end_index - 1] = [] # delete (start_index, end_index), exclusive + start_index += 1 + +def userUnitToUnits(distance_uu, unit_string): + """ + Custom replacement for the uutounit routine in inkex.py + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + """ + + if distance_uu is None: # Couldn't parse the value + return None + elif unit_string == '' or unit_string == 'px': + return float(distance_uu) + elif unit_string == 'in': + return float(distance_uu) / PX_PER_INCH + elif unit_string == 'mm': + return float(distance_uu) / (PX_PER_INCH / 25.4) + elif unit_string == 'cm': + return float(distance_uu) / (PX_PER_INCH / 2.54) + elif unit_string == 'Q' or unit_string == 'q': + return float(distance_uu) / (PX_PER_INCH / (40.0 * 2.54)) + elif unit_string == 'pc': + return float(distance_uu) / (PX_PER_INCH / 6.0) + elif unit_string == 'pt': + return float(distance_uu) / (PX_PER_INCH / 72.0) + elif unit_string == '%': + return float(distance_uu) * 100.0 + else: + # Unsupported units + return None + + +def vb_scale(vb, p_a_r, doc_width, doc_height): + """" + Parse SVG viewbox and generate scaling parameters. + Reference documentation: https://www.w3.org/TR/SVG11/coords.html + + Inputs: + vb: Contents of SVG viewbox attribute + p_a_r: Contents of SVG preserveAspectRatio attribute + doc_width: Width of SVG document + doc_height: Height of SVG document + + Output: sx, sy, ox, oy + Scale parameters (sx,sy) and offset parameters (ox,oy) + + """ + if vb is None: + return 1,1,0,0 # No viewbox; return default transform + else: + vb_array = vb.strip().replace(',', ' ').split() + + if len(vb_array) < 4: + return 1,1,0,0 # invalid viewbox; return default transform + + min_x = float(vb_array[0]) # Viewbox offset: x + min_y = float(vb_array[1]) # Viewbox offset: y + width = float(vb_array[2]) # Viewbox width + height = float(vb_array[3]) # Viewbox height + + if width <= 0 or height <= 0: + return 1,1,0,0 # invalid viewbox; return default transform + + d_width = float(doc_width) + d_height = float(doc_height) + + if d_width <= 0 or d_height <= 0: + return 1,1,0,0 # invalid document size; return default transform + + ar_doc = d_height / d_width # Document aspect ratio + ar_vb = height / width # Viewbox aspect ratio + + # Default values of the two preserveAspectRatio parameters: + par_align = "xmidymid" # "align" parameter (lowercased) + par_mos = "meet" # "meetOrSlice" parameter + + if p_a_r is not None: + par_array = p_a_r.strip().replace(',', ' ').lower().split() + if len(par_array) > 0: + par0 = par_array[0] + if par0 == "defer": + if len(par_array) > 1: + par_align = par_array[1] + if len(par_array) > 2: + par_mos = par_array[2] + else: + par_align = par0 + if len(par_array) > 1: + par_mos = par_array[1] + + if par_align == "none": + # Scale document to fill page. Do not preserve aspect ratio. + # This is not default behavior, nor what happens if par_align + # is not given; the "none" value must be _explicitly_ specified. + + sx = d_width/ width + sy = d_height / height + ox = -min_x + oy = -min_y + return sx,sy,ox,oy + + """ + Other than "none", all situations fall into two classes: + + 1) (ar_doc >= ar_vb AND par_mos == "meet") + or (ar_doc < ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in X. + + 2) All other cases, i.e., + (ar_doc < ar_vb AND par_mos == "meet") + or (ar_doc >= ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in Y. + + Note in cases where the scaled viewbox exceeds the document + (page) boundaries (all "slice" cases and many "meet" cases where + an offset value is given) that this routine does not perform + any clipping, but subsequent clipping to the page boundary + is appropriate. + + Besides "none", there are 9 possible values of par_align: + xminymin xmidymin xmaxymin + xminymid xmidymid xmaxymid + xminymax xmidymax xmaxymax + """ + + if (((ar_doc >= ar_vb) and (par_mos == "meet")) + or ((ar_doc < ar_vb) and (par_mos == "slice"))): + # Case 1: Scale document up until VB fills doc in X. + + sx = d_width / width + sy = sx # Uniform aspect ratio + ox = -min_x + + scaled_vb_height = ar_doc * width + excess_height = scaled_vb_height - height + + if par_align in {"xminymin", "xmidymin", "xmaxymin"}: + # Case: Y-Min: Align viewbox to minimum Y of the viewport. + oy = -min_y + # OK: tested with Tall-Meet, Wide-Slice + + elif par_align in {"xminymax", "xmidymax", "xmaxymax"}: + # Case: Y-Max: Align viewbox to maximum Y of the viewport. + oy = -min_y + excess_height + # OK: tested with Tall-Meet, Wide-Slice + + else: # par_align in {"xminymid", "xmidymid", "xmaxymid"}: + # Default case: Y-Mid: Center viewbox on page in Y + oy = -min_y + excess_height / 2 + # OK: Tested with Tall-Meet, Wide-Slice + + return sx,sy,ox,oy + else: + # Case 2: Scale document up until VB fills doc in Y. + + sy = d_height / height + sx = sy # Uniform aspect ratio + oy = -min_y + + scaled_vb_width = height / ar_doc + excess_width = scaled_vb_width - width + + if par_align in {"xminymin", "xminymid", "xminymax"}: + # Case: X-Min: Align viewbox to minimum X of the viewport. + ox = -min_x + # OK: Tested with Tall-Slice, Wide-Meet + + elif par_align in {"xmaxymin", "xmaxymid", "xmaxymax"}: + # Case: X-Max: Align viewbox to maximum X of the viewport. + ox = -min_x + excess_width + # Need test: Tall-Slice, Wide-Meet + + else: # par_align in {"xmidymin", "xmidymid", "xmidymax"}: + # Default case: X-Mid: Center viewbox on page in X + ox = -min_x + excess_width / 2 + # OK: Tested with Tall-Slice, Wide-Meet + + return sx,sy,ox,oy + return 1,1,0,0 # Catch-all: return default transform + + +def vInitial_VF_A_Dx(v_final, acceleration, delta_x): + """ + Kinematic calculation: Maximum allowed initial velocity to arrive at distance X + with specified final velocity, and given maximum linear acceleration. + + Calculate and return the (real) initial velocity, given an final velocity, + acceleration rate, and distance interval. + + Uses the kinematic equation Vi^2 = Vf^2 - 2 a D_x , where + Vf is the final velocity, + a is the acceleration rate, + D_x (delta x) is the distance interval, and + Vi is the initial velocity. + + We are looking at the positive root only-- if the argument of the sqrt + is less than zero, return -1, to indicate a failure. + """ + initial_v_squared = (v_final * v_final) - (2 * acceleration * delta_x) + if initial_v_squared > 0: + return sqrt(initial_v_squared) + else: + return -1 + + +def vFinal_Vi_A_Dx(v_initial, acceleration, delta_x): + """ + Kinematic calculation: Final velocity with constant linear acceleration. + + Calculate and return the (real) final velocity, given an initial velocity, + acceleration rate, and distance interval. + + Uses the kinematic equation Vf^2 = 2 a D_x + Vi^2, where + Vf is the final velocity, + a is the acceleration rate, + D_x (delta x) is the distance interval, and + Vi is the initial velocity. + + We are looking at the positive root only-- if the argument of the sqrt + is less than zero, return -1, to indicate a failure. + """ + final_v_squared = (2 * acceleration * delta_x) + (v_initial * v_initial) + if final_v_squared > 0: + return sqrt(final_v_squared) + else: + return -1 + + +def pathdata_first_point(path): + """ + Return the first (X,Y) point from an SVG path data string + + Input: A path data string; the text of the 'd' attribute of an SVG path + Output: Two floats in a list representing the x and y coordinates of the first point + """ + + # Path origin's default values are used to see if we have + # Written anything to the path_origin variable yet + MaxLength = len(path) + ix = 0 + tempString = '' + x_val = '' + y_val = '' + # Check one char at a time + # until we have the moveTo Command + while ix < MaxLength: + if path[ix].upper() == 'M': + break + # Increment until we have M + ix = ix + 1 + + # Parse path until we reach a digit, decimal point or negative sign + while ix < MaxLength: + if(path[ix].isdigit()) or path[ix] == '.' or path[ix] == '-': + break + ix = ix + 1 + + # Add digits and decimal points to x_val + # Stop parsing when next character is neither a digit nor a decimal point + while ix < MaxLength: + if (path[ix].isdigit()): + tempString = tempString + path[ix] + x_val = float(tempString ) + ix = ix + 1 + # If next character is a decimal place, save the decimal and continue parsing + # This allows for paths without leading zeros to be parsed correctly + elif (path[ix] == '.' or path[ix] == '-'): + tempString = tempString + path[ix] + ix = ix + 1 + else: + ix = ix + 1 + break + + # Reset tempString for y coordinate + tempString = '' + + # Parse path until we reach a digit or decimal point + while ix < MaxLength: + if(path[ix].isdigit()) or path[ix] == '.' or path[ix] == '-': + break + ix = ix + 1 + + # Add digits and decimal points to y_val + # Stop parsin when next character is neither a digit nor a decimal point + while ix < MaxLength: + if (path[ix].isdigit() ): + tempString = tempString + path[ix] + y_val = float(tempString) + ix = ix + 1 + # If next character is a decimal place, save the decimal and continue parsing + # This allows for paths without leading zeros to be parsed correctly + elif (path[ix] == '.' or path[ix] == '-'): + tempString = tempString + path[ix] + ix = ix + 1 + else: + ix = ix + 1 + break + return [x_val,y_val] + + +def pathdata_last_point(path): + """ + Return the last (X,Y) point from an SVG path data string + + Input: A path data string; the text of the 'd' attribute of an SVG path + Output: Two floats in a list representing the x and y coordinates of the last point + """ + + command, params = simplepath.parsePath(path)[-1] # parsePath splits path into segments + + if command.upper() == 'Z': + return pathdata_first_point(path) # Trivial case + + """ + Otherwise: The last command should be in the set 'MLCQA' + - All commands converted to absolute by parsePath. + - Can ignore Z (case handled) + - Can ignore H,V, since those are converted to L by parsePath. + - Can ignore S, converted to C by parsePath. + - Can ignore T, converted to Q by parsePath. + + MLCQA: Commands all ending in (X,Y) pair. + """ + + x_val = params[-2] # Second to last parameter given + y_val = params[-1] # Last parameter given + + return [x_val,y_val] diff --git a/fablabchemnitz_png.py b/fablabchemnitz_png.py new file mode 100644 index 0000000..45e5a13 --- /dev/null +++ b/fablabchemnitz_png.py @@ -0,0 +1,2751 @@ +#!/usr/bin/env python + +# png.py - PNG encoder/decoder in pure Python +# +# Copyright (C) 2006 Johann C. Rocholl +# Portions Copyright (C) 2009 David Jones +# And probably portions Copyright (C) 2006 Nicko van Someren +# +# Original concept by Johann C. Rocholl. +# +# LICENCE (MIT) +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +Pure Python PNG Reader/Writer + +This Python module implements support for PNG images (see PNG +specification at http://www.w3.org/TR/2003/REC-PNG-20031110/ ). It reads +and writes PNG files with all allowable bit depths +(1/2/4/8/16/24/32/48/64 bits per pixel) and colour combinations: +greyscale (1/2/4/8/16 bit); RGB, RGBA, LA (greyscale with alpha) with +8/16 bits per channel; colour mapped images (1/2/4/8 bit). +Adam7 interlacing is supported for reading and +writing. A number of optional chunks can be specified (when writing) +and understood (when reading): ``tRNS``, ``bKGD``, ``gAMA``. + +For help, type ``import png; help(png)`` in your python interpreter. + +A good place to start is the :class:`Reader` and :class:`Writer` +classes. + +Requires Python 2.3. Limited support is available for Python 2.2, but +not everything works. Best with Python 2.4 and higher. Installation is +trivial, but see the ``README.txt`` file (with the source distribution) +for details. + +This file can also be used as a command-line utility to convert +`Netpbm `_ PNM files to PNG, and the +reverse conversion from PNG to PNM. The interface is similar to that +of the ``pnmtopng`` program from Netpbm. Type ``python png.py --help`` +at the shell prompt for usage and a list of options. + +A note on spelling and terminology +---------------------------------- + +Generally British English spelling is used in the documentation. So +that's "greyscale" and "colour". This not only matches the author's +native language, it's also used by the PNG specification. + +The major colour models supported by PNG (and hence by PyPNG) are: +greyscale, RGB, greyscale--alpha, RGB--alpha. These are sometimes +referred to using the abbreviations: L, RGB, LA, RGBA. In this case +each letter abbreviates a single channel: *L* is for Luminance or Luma +or Lightness which is the channel used in greyscale images; *R*, *G*, +*B* stand for Red, Green, Blue, the components of a colour image; *A* +stands for Alpha, the opacity channel (used for transparency effects, +but higher values are more opaque, so it makes sense to call it +opacity). + +A note on formats +----------------- + +When getting pixel data out of this module (reading) and presenting +data to this module (writing) there are a number of ways the data could +be represented as a Python value. Generally this module uses one of +three formats called "flat row flat pixel", "boxed row flat pixel", and +"boxed row boxed pixel". Basically the concern is whether each pixel +and each row comes in its own little tuple (box), or not. + +Consider an image that is 3 pixels wide by 2 pixels high, and each pixel +has RGB components: + +Boxed row flat pixel:: + + list([R,G,B, R,G,B, R,G,B], + [R,G,B, R,G,B, R,G,B]) + +Each row appears as its own list, but the pixels are flattened so +that three values for one pixel simply follow the three values for +the previous pixel. This is the most common format used, because it +provides a good compromise between space and convenience. PyPNG regards +itself as at liberty to replace any sequence type with any sufficiently +compatible other sequence type; in practice each row is an array (from +the array module), and the outer list is sometimes an iterator rather +than an explicit list (so that streaming is possible). + +Flat row flat pixel:: + + [R,G,B, R,G,B, R,G,B, + R,G,B, R,G,B, R,G,B] + +The entire image is one single giant sequence of colour values. +Generally an array will be used (to save space), not a list. + +Boxed row boxed pixel:: + + list([ (R,G,B), (R,G,B), (R,G,B) ], + [ (R,G,B), (R,G,B), (R,G,B) ]) + +Each row appears in its own list, but each pixel also appears in its own +tuple. A serious memory burn in Python. + +In all cases the top row comes first, and for each row the pixels are +ordered from left-to-right. Within a pixel the values appear in the +order, R-G-B-A (or L-A for greyscale--alpha). + +There is a fourth format, mentioned because it is used internally, +is close to what lies inside a PNG file itself, and has some support +from the public API. This format is called packed. When packed, +each row is a sequence of bytes (integers from 0 to 255), just as +it is before PNG scanline filtering is applied. When the bit depth +is 8 this is essentially the same as boxed row flat pixel; when the +bit depth is less than 8, several pixels are packed into each byte; +when the bit depth is 16 (the only value more than 8 that is supported +by the PNG image format) each pixel value is decomposed into 2 bytes +(and `packed` is a misnomer). This format is used by the +:meth:`Writer.write_packed` method. It isn't usually a convenient +format, but may be just right if the source data for the PNG image +comes from something that uses a similar format (for example, 1-bit +BMPs, or another PNG file). + +And now, my famous members +-------------------------- +""" + +# http://www.python.org/doc/2.2.3/whatsnew/node5.html +from __future__ import generators + +__version__ = "0.0.16" + +from array import array +try: # See :pyver:old + import itertools +except ImportError: + pass +import math +# http://www.python.org/doc/2.4.4/lib/module-operator.html +import operator +import struct +import sys +import zlib +# http://www.python.org/doc/2.4.4/lib/module-warnings.html +import warnings +try: + # `cpngfilters` is a Cython module: it must be compiled by + # Cython for this import to work. + # If this import does work, then it overrides pure-python + # filtering functions defined later in this file (see `class + # pngfilters`). + import cpngfilters as pngfilters +except ImportError: + pass + + +__all__ = ['Image', 'Reader', 'Writer', 'write_chunks', 'from_array'] + + +# The PNG signature. +# http://www.w3.org/TR/PNG/#5PNG-file-signature +_signature = struct.pack('8B', 137, 80, 78, 71, 13, 10, 26, 10) + +_adam7 = ((0, 0, 8, 8), + (4, 0, 8, 8), + (0, 4, 4, 8), + (2, 0, 4, 4), + (0, 2, 2, 4), + (1, 0, 2, 2), + (0, 1, 1, 2)) + +def group(s, n): + # See http://www.python.org/doc/2.6/library/functions.html#zip + return zip(*[iter(s)]*n) + +def isarray(x): + """Same as ``isinstance(x, array)`` except on Python 2.2, where it + always returns ``False``. This helps PyPNG work on Python 2.2. + """ + + try: + return isinstance(x, array) + except TypeError: + # Because on Python 2.2 array.array is not a type. + return False + +try: + array.tobytes +except AttributeError: + try: # see :pyver:old + array.tostring + except AttributeError: + def tostring(row): + l = len(row) + return struct.pack('%dB' % l, *row) + else: + def tostring(row): + """Convert row of bytes to string. Expects `row` to be an + ``array``. + """ + return row.tostring() +else: + def tostring(row): + """ Python3 definition, array.tostring() is deprecated in Python3 + """ + return row.tobytes() + +# Conditionally convert to bytes. Works on Python 2 and Python 3. +try: + bytes('', 'ascii') + def strtobytes(x): return bytes(x, 'iso8859-1') + def bytestostr(x): return str(x, 'iso8859-1') +except (NameError, TypeError): + # We get NameError when bytes() does not exist (most Python + # 2.x versions), and TypeError when bytes() exists but is on + # Python 2.x (when it is an alias for str() and takes at most + # one argument). + strtobytes = str + bytestostr = str + +def interleave_planes(ipixels, apixels, ipsize, apsize): + """ + Interleave (colour) planes, e.g. RGB + A = RGBA. + + Return an array of pixels consisting of the `ipsize` elements of + data from each pixel in `ipixels` followed by the `apsize` elements + of data from each pixel in `apixels`. Conventionally `ipixels` + and `apixels` are byte arrays so the sizes are bytes, but it + actually works with any arrays of the same type. The returned + array is the same type as the input arrays which should be the + same type as each other. + """ + + itotal = len(ipixels) + atotal = len(apixels) + newtotal = itotal + atotal + newpsize = ipsize + apsize + # Set up the output buffer + # See http://www.python.org/doc/2.4.4/lib/module-array.html#l2h-1356 + out = array(ipixels.typecode) + # It's annoying that there is no cheap way to set the array size :-( + out.extend(ipixels) + out.extend(apixels) + # Interleave in the pixel data + for i in range(ipsize): + out[i:newtotal:newpsize] = ipixels[i:itotal:ipsize] + for i in range(apsize): + out[i+ipsize:newtotal:newpsize] = apixels[i:atotal:apsize] + return out + +def check_palette(palette): + """Check a palette argument (to the :class:`Writer` class) + for validity. Returns the palette as a list if okay; raises an + exception otherwise. + """ + + # None is the default and is allowed. + if palette is None: + return None + + p = list(palette) + if not (0 < len(p) <= 256): + raise ValueError("a palette must have between 1 and 256 entries") + seen_triple = False + for i,t in enumerate(p): + if len(t) not in (3,4): + raise ValueError( + "palette entry %d: entries must be 3- or 4-tuples." % i) + if len(t) == 3: + seen_triple = True + if seen_triple and len(t) == 4: + raise ValueError( + "palette entry %d: all 4-tuples must precede all 3-tuples" % i) + for x in t: + if int(x) != x or not(0 <= x <= 255): + raise ValueError( + "palette entry %d: values must be integer: 0 <= x <= 255" % i) + return p + +def check_sizes(size, width, height): + """Check that these arguments, in supplied, are consistent. + Return a (width, height) pair. + """ + + if not size: + return width, height + + if len(size) != 2: + raise ValueError( + "size argument should be a pair (width, height)") + if width is not None and width != size[0]: + raise ValueError( + "size[0] (%r) and width (%r) should match when both are used." + % (size[0], width)) + if height is not None and height != size[1]: + raise ValueError( + "size[1] (%r) and height (%r) should match when both are used." + % (size[1], height)) + return size + +def check_color(c, greyscale, which): + """Checks that a colour argument for transparent or + background options is the right form. Returns the colour + (which, if it's a bar integer, is "corrected" to a 1-tuple). + """ + + if c is None: + return c + if greyscale: + try: + l = len(c) + except TypeError: + c = (c,) + if len(c) != 1: + raise ValueError("%s for greyscale must be 1-tuple" % + which) + if not isinteger(c[0]): + raise ValueError( + "%s colour for greyscale must be integer" % which) + else: + if not (len(c) == 3 and + isinteger(c[0]) and + isinteger(c[1]) and + isinteger(c[2])): + raise ValueError( + "%s colour must be a triple of integers" % which) + return c + +class Error(Exception): + def __str__(self): + return self.__class__.__name__ + ': ' + ' '.join(self.args) + +class FormatError(Error): + """Problem with input file format. In other words, PNG file does + not conform to the specification in some way and is invalid. + """ + +class ChunkError(FormatError): + pass + + +class Writer: + """ + PNG encoder in pure Python. + """ + + def __init__(self, width=None, height=None, + size=None, + greyscale=False, + alpha=False, + bitdepth=8, + palette=None, + transparent=None, + background=None, + gamma=None, + compression=None, + interlace=False, + bytes_per_sample=None, # deprecated + planes=None, + colormap=None, + maxval=None, + chunk_limit=2**20): + """ + Create a PNG encoder object. + + Arguments: + + width, height + Image size in pixels, as two separate arguments. + size + Image size (w,h) in pixels, as single argument. + greyscale + Input data is greyscale, not RGB. + alpha + Input data has alpha channel (RGBA or LA). + bitdepth + Bit depth: from 1 to 16. + palette + Create a palette for a colour mapped image (colour type 3). + transparent + Specify a transparent colour (create a ``tRNS`` chunk). + background + Specify a default background colour (create a ``bKGD`` chunk). + gamma + Specify a gamma value (create a ``gAMA`` chunk). + compression + zlib compression level: 0 (none) to 9 (more compressed); + default: -1 or None. + interlace + Create an interlaced image. + chunk_limit + Write multiple ``IDAT`` chunks to save memory. + + The image size (in pixels) can be specified either by using the + `width` and `height` arguments, or with the single `size` + argument. If `size` is used it should be a pair (*width*, + *height*). + + `greyscale` and `alpha` are booleans that specify whether + an image is greyscale (or colour), and whether it has an + alpha channel (or not). + + `bitdepth` specifies the bit depth of the source pixel values. + Each source pixel value must be an integer between 0 and + ``2**bitdepth-1``. For example, 8-bit images have values + between 0 and 255. PNG only stores images with bit depths of + 1,2,4,8, or 16. When `bitdepth` is not one of these values, + the next highest valid bit depth is selected, and an ``sBIT`` + (significant bits) chunk is generated that specifies the + original precision of the source image. In this case the + supplied pixel values will be rescaled to fit the range of + the selected bit depth. + + The details of which bit depth / colour model combinations the + PNG file format supports directly, are somewhat arcane + (refer to the PNG specification for full details). Briefly: + "small" bit depths (1,2,4) are only allowed with greyscale and + colour mapped images; colour mapped images cannot have bit depth + 16. + + For colour mapped images (in other words, when the `palette` + argument is specified) the `bitdepth` argument must match one of + the valid PNG bit depths: 1, 2, 4, or 8. (It is valid to have a + PNG image with a palette and an ``sBIT`` chunk, but the meaning + is slightly different; it would be awkward to press the + `bitdepth` argument into service for this.) + + The `palette` option, when specified, causes a colour mapped + image to be created: the PNG colour type is set to 3; greyscale + must not be set; alpha must not be set; transparent must not be + set; the bit depth must be 1,2,4, or 8. When a colour mapped + image is created, the pixel values are palette indexes and + the `bitdepth` argument specifies the size of these indexes + (not the size of the colour values in the palette). + + The palette argument value should be a sequence of 3- or + 4-tuples. 3-tuples specify RGB palette entries; 4-tuples + specify RGBA palette entries. If both 4-tuples and 3-tuples + appear in the sequence then all the 4-tuples must come + before all the 3-tuples. A ``PLTE`` chunk is created; if there + are 4-tuples then a ``tRNS`` chunk is created as well. The + ``PLTE`` chunk will contain all the RGB triples in the same + sequence; the ``tRNS`` chunk will contain the alpha channel for + all the 4-tuples, in the same sequence. Palette entries + are always 8-bit. + + If specified, the `transparent` and `background` parameters must + be a tuple with three integer values for red, green, blue, or + a simple integer (or singleton tuple) for a greyscale image. + + If specified, the `gamma` parameter must be a positive number + (generally, a float). A ``gAMA`` chunk will be created. + Note that this will not change the values of the pixels as + they appear in the PNG file, they are assumed to have already + been converted appropriately for the gamma specified. + + The `compression` argument specifies the compression level to + be used by the ``zlib`` module. Values from 1 to 9 specify + compression, with 9 being "more compressed" (usually smaller + and slower, but it doesn't always work out that way). 0 means + no compression. -1 and ``None`` both mean that the default + level of compession will be picked by the ``zlib`` module + (which is generally acceptable). + + If `interlace` is true then an interlaced image is created + (using PNG's so far only interace method, *Adam7*). This does + not affect how the pixels should be presented to the encoder, + rather it changes how they are arranged into the PNG file. + On slow connexions interlaced images can be partially decoded + by the browser to give a rough view of the image that is + successively refined as more image data appears. + + .. note :: + + Enabling the `interlace` option requires the entire image + to be processed in working memory. + + `chunk_limit` is used to limit the amount of memory used whilst + compressing the image. In order to avoid using large amounts of + memory, multiple ``IDAT`` chunks may be created. + """ + + # At the moment the `planes` argument is ignored; + # its purpose is to act as a dummy so that + # ``Writer(x, y, **info)`` works, where `info` is a dictionary + # returned by Reader.read and friends. + # Ditto for `colormap`. + + width, height = check_sizes(size, width, height) + del size + + if width <= 0 or height <= 0: + raise ValueError("width and height must be greater than zero") + if not isinteger(width) or not isinteger(height): + raise ValueError("width and height must be integers") + # http://www.w3.org/TR/PNG/#7Integers-and-byte-order + if width > 2**32-1 or height > 2**32-1: + raise ValueError("width and height cannot exceed 2**32-1") + + if alpha and transparent is not None: + raise ValueError( + "transparent colour not allowed with alpha channel") + + if bytes_per_sample is not None: + warnings.warn('please use bitdepth instead of bytes_per_sample', + DeprecationWarning) + if bytes_per_sample not in (0.125, 0.25, 0.5, 1, 2): + raise ValueError( + "bytes per sample must be .125, .25, .5, 1, or 2") + bitdepth = int(8*bytes_per_sample) + del bytes_per_sample + if not isinteger(bitdepth) or bitdepth < 1 or 16 < bitdepth: + raise ValueError("bitdepth (%r) must be a postive integer <= 16" % + bitdepth) + + self.rescale = None + if palette: + if bitdepth not in (1,2,4,8): + raise ValueError("with palette, bitdepth must be 1, 2, 4, or 8") + if transparent is not None: + raise ValueError("transparent and palette not compatible") + if alpha: + raise ValueError("alpha and palette not compatible") + if greyscale: + raise ValueError("greyscale and palette not compatible") + else: + # No palette, check for sBIT chunk generation. + if alpha or not greyscale: + if bitdepth not in (8,16): + targetbitdepth = (8,16)[bitdepth > 8] + self.rescale = (bitdepth, targetbitdepth) + bitdepth = targetbitdepth + del targetbitdepth + else: + assert greyscale + assert not alpha + if bitdepth not in (1,2,4,8,16): + if bitdepth > 8: + targetbitdepth = 16 + elif bitdepth == 3: + targetbitdepth = 4 + else: + assert bitdepth in (5,6,7) + targetbitdepth = 8 + self.rescale = (bitdepth, targetbitdepth) + bitdepth = targetbitdepth + del targetbitdepth + + if bitdepth < 8 and (alpha or not greyscale and not palette): + raise ValueError( + "bitdepth < 8 only permitted with greyscale or palette") + if bitdepth > 8 and palette: + raise ValueError( + "bit depth must be 8 or less for images with palette") + + transparent = check_color(transparent, greyscale, 'transparent') + background = check_color(background, greyscale, 'background') + + # It's important that the true boolean values (greyscale, alpha, + # colormap, interlace) are converted to bool because Iverson's + # convention is relied upon later on. + self.width = width + self.height = height + self.transparent = transparent + self.background = background + self.gamma = gamma + self.greyscale = bool(greyscale) + self.alpha = bool(alpha) + self.colormap = bool(palette) + self.bitdepth = int(bitdepth) + self.compression = compression + self.chunk_limit = chunk_limit + self.interlace = bool(interlace) + self.palette = check_palette(palette) + + self.color_type = 4*self.alpha + 2*(not greyscale) + 1*self.colormap + assert self.color_type in (0,2,3,4,6) + + self.color_planes = (3,1)[self.greyscale or self.colormap] + self.planes = self.color_planes + self.alpha + # :todo: fix for bitdepth < 8 + self.psize = (self.bitdepth/8) * self.planes + + def make_palette(self): + """Create the byte sequences for a ``PLTE`` and if necessary a + ``tRNS`` chunk. Returned as a pair (*p*, *t*). *t* will be + ``None`` if no ``tRNS`` chunk is necessary. + """ + + p = array('B') + t = array('B') + + for x in self.palette: + p.extend(x[0:3]) + if len(x) > 3: + t.append(x[3]) + p = tostring(p) + t = tostring(t) + if t: + return p,t + return p,None + + def write(self, outfile, rows): + """Write a PNG image to the output file. `rows` should be + an iterable that yields each row in boxed row flat pixel + format. The rows should be the rows of the original image, + so there should be ``self.height`` rows of ``self.width * + self.planes`` values. If `interlace` is specified (when + creating the instance), then an interlaced PNG file will + be written. Supply the rows in the normal image order; + the interlacing is carried out internally. + + .. note :: + + Interlacing will require the entire image to be in working + memory. + """ + + if self.interlace: + fmt = 'BH'[self.bitdepth > 8] + a = array(fmt, itertools.chain(*rows)) + return self.write_array(outfile, a) + else: + nrows = self.write_passes(outfile, rows) + if nrows != self.height: + raise ValueError( + "rows supplied (%d) does not match height (%d)" % + (nrows, self.height)) + + def write_passes(self, outfile, rows, packed=False): + """ + Write a PNG image to the output file. + + Most users are expected to find the :meth:`write` or + :meth:`write_array` method more convenient. + + The rows should be given to this method in the order that + they appear in the output file. For straightlaced images, + this is the usual top to bottom ordering, but for interlaced + images the rows should have already been interlaced before + passing them to this function. + + `rows` should be an iterable that yields each row. When + `packed` is ``False`` the rows should be in boxed row flat pixel + format; when `packed` is ``True`` each row should be a packed + sequence of bytes. + """ + + # http://www.w3.org/TR/PNG/#5PNG-file-signature + outfile.write(_signature) + + # http://www.w3.org/TR/PNG/#11IHDR + write_chunk(outfile, 'IHDR', + struct.pack("!2I5B", self.width, self.height, + self.bitdepth, self.color_type, + 0, 0, self.interlace)) + + # See :chunk:order + # http://www.w3.org/TR/PNG/#11gAMA + if self.gamma is not None: + write_chunk(outfile, 'gAMA', + struct.pack("!L", int(round(self.gamma*1e5)))) + + # See :chunk:order + # http://www.w3.org/TR/PNG/#11sBIT + if self.rescale: + write_chunk(outfile, 'sBIT', + struct.pack('%dB' % self.planes, + *[self.rescale[0]]*self.planes)) + + # :chunk:order: Without a palette (PLTE chunk), ordering is + # relatively relaxed. With one, gAMA chunk must precede PLTE + # chunk which must precede tRNS and bKGD. + # See http://www.w3.org/TR/PNG/#5ChunkOrdering + if self.palette: + p,t = self.make_palette() + write_chunk(outfile, 'PLTE', p) + if t: + # tRNS chunk is optional. Only needed if palette entries + # have alpha. + write_chunk(outfile, 'tRNS', t) + + # http://www.w3.org/TR/PNG/#11tRNS + if self.transparent is not None: + if self.greyscale: + write_chunk(outfile, 'tRNS', + struct.pack("!1H", *self.transparent)) + else: + write_chunk(outfile, 'tRNS', + struct.pack("!3H", *self.transparent)) + + # http://www.w3.org/TR/PNG/#11bKGD + if self.background is not None: + if self.greyscale: + write_chunk(outfile, 'bKGD', + struct.pack("!1H", *self.background)) + else: + write_chunk(outfile, 'bKGD', + struct.pack("!3H", *self.background)) + + # http://www.w3.org/TR/PNG/#11IDAT + if self.compression is not None: + compressor = zlib.compressobj(self.compression) + else: + compressor = zlib.compressobj() + + # Choose an extend function based on the bitdepth. The extend + # function packs/decomposes the pixel values into bytes and + # stuffs them onto the data array. + data = array('B') + if self.bitdepth == 8 or packed: + extend = data.extend + elif self.bitdepth == 16: + # Decompose into bytes + def extend(sl): + fmt = '!%dH' % len(sl) + data.extend(array('B', struct.pack(fmt, *sl))) + else: + # Pack into bytes + assert self.bitdepth < 8 + # samples per byte + spb = int(8/self.bitdepth) + def extend(sl): + a = array('B', sl) + # Adding padding bytes so we can group into a whole + # number of spb-tuples. + l = float(len(a)) + extra = math.ceil(l / float(spb))*spb - l + a.extend([0]*int(extra)) + # Pack into bytes + l = group(a, spb) + l = map(lambda e: reduce(lambda x,y: + (x << self.bitdepth) + y, e), l) + data.extend(l) + if self.rescale: + oldextend = extend + factor = \ + float(2**self.rescale[1]-1) / float(2**self.rescale[0]-1) + def extend(sl): + oldextend(map(lambda x: int(round(factor*x)), sl)) + + # Build the first row, testing mostly to see if we need to + # changed the extend function to cope with NumPy integer types + # (they cause our ordinary definition of extend to fail, so we + # wrap it). See + # http://code.google.com/p/pypng/issues/detail?id=44 + enumrows = enumerate(rows) + del rows + + # First row's filter type. + data.append(0) + # :todo: Certain exceptions in the call to ``.next()`` or the + # following try would indicate no row data supplied. + # Should catch. + i,row = enumrows.next() + try: + # If this fails... + extend(row) + except: + # ... try a version that converts the values to int first. + # Not only does this work for the (slightly broken) NumPy + # types, there are probably lots of other, unknown, "nearly" + # int types it works for. + def wrapmapint(f): + return lambda sl: f(map(int, sl)) + extend = wrapmapint(extend) + del wrapmapint + extend(row) + + for i,row in enumrows: + # Add "None" filter type. Currently, it's essential that + # this filter type be used for every scanline as we do not + # mark the first row of a reduced pass image; that means we + # could accidentally compute the wrong filtered scanline if + # we used "up", "average", or "paeth" on such a line. + data.append(0) + extend(row) + if len(data) > self.chunk_limit: + compressed = compressor.compress(tostring(data)) + if len(compressed): + write_chunk(outfile, 'IDAT', compressed) + # Because of our very witty definition of ``extend``, + # above, we must re-use the same ``data`` object. Hence + # we use ``del`` to empty this one, rather than create a + # fresh one (which would be my natural FP instinct). + del data[:] + if len(data): + compressed = compressor.compress(tostring(data)) + else: + compressed = '' + flushed = compressor.flush() + if len(compressed) or len(flushed): + write_chunk(outfile, 'IDAT', compressed + flushed) + # http://www.w3.org/TR/PNG/#11IEND + write_chunk(outfile, 'IEND') + return i+1 + + def write_array(self, outfile, pixels): + """ + Write an array in flat row flat pixel format as a PNG file on + the output file. See also :meth:`write` method. + """ + + if self.interlace: + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.array_scanlines(pixels)) + + def write_packed(self, outfile, rows): + """ + Write PNG file to `outfile`. The pixel data comes from `rows` + which should be in boxed row packed format. Each row should be + a sequence of packed bytes. + + Technically, this method does work for interlaced images but it + is best avoided. For interlaced images, the rows should be + presented in the order that they appear in the file. + + This method should not be used when the source image bit depth + is not one naturally supported by PNG; the bit depth should be + 1, 2, 4, 8, or 16. + """ + + if self.rescale: + raise Error("write_packed method not suitable for bit depth %d" % + self.rescale[0]) + return self.write_passes(outfile, rows, packed=True) + + def convert_pnm(self, infile, outfile): + """ + Convert a PNM file containing raw pixel data into a PNG file + with the parameters set in the writer object. Works for + (binary) PGM, PPM, and PAM formats. + """ + + if self.interlace: + pixels = array('B') + pixels.fromfile(infile, + (self.bitdepth/8) * self.color_planes * + self.width * self.height) + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.file_scanlines(infile)) + + def convert_ppm_and_pgm(self, ppmfile, pgmfile, outfile): + """ + Convert a PPM and PGM file containing raw pixel data into a + PNG outfile with the parameters set in the writer object. + """ + pixels = array('B') + pixels.fromfile(ppmfile, + (self.bitdepth/8) * self.color_planes * + self.width * self.height) + apixels = array('B') + apixels.fromfile(pgmfile, + (self.bitdepth/8) * + self.width * self.height) + pixels = interleave_planes(pixels, apixels, + (self.bitdepth/8) * self.color_planes, + (self.bitdepth/8)) + if self.interlace: + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.array_scanlines(pixels)) + + def file_scanlines(self, infile): + """ + Generates boxed rows in flat pixel format, from the input file + `infile`. It assumes that the input file is in a "Netpbm-like" + binary format, and is positioned at the beginning of the first + pixel. The number of pixels to read is taken from the image + dimensions (`width`, `height`, `planes`) and the number of bytes + per value is implied by the image `bitdepth`. + """ + + # Values per row + vpr = self.width * self.planes + row_bytes = vpr + if self.bitdepth > 8: + assert self.bitdepth == 16 + row_bytes *= 2 + fmt = '>%dH' % vpr + def line(): + return array('H', struct.unpack(fmt, infile.read(row_bytes))) + else: + def line(): + scanline = array('B', infile.read(row_bytes)) + return scanline + for y in range(self.height): + yield line() + + def array_scanlines(self, pixels): + """ + Generates boxed rows (flat pixels) from flat rows (flat pixels) + in an array. + """ + + # Values per row + vpr = self.width * self.planes + stop = 0 + for y in range(self.height): + start = stop + stop = start + vpr + yield pixels[start:stop] + + def array_scanlines_interlace(self, pixels): + """ + Generator for interlaced scanlines from an array. `pixels` is + the full source image in flat row flat pixel format. The + generator yields each scanline of the reduced passes in turn, in + boxed row flat pixel format. + """ + + # http://www.w3.org/TR/PNG/#8InterlaceMethods + # Array type. + fmt = 'BH'[self.bitdepth > 8] + # Value per row + vpr = self.width * self.planes + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # Pixels per row (of reduced image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # number of values in reduced image row. + row_len = ppr*self.planes + for y in range(ystart, self.height, ystep): + if xstep == 1: + offset = y * vpr + yield pixels[offset:offset+vpr] + else: + row = array(fmt) + # There's no easier way to set the length of an array + row.extend(pixels[0:row_len]) + offset = y * vpr + xstart * self.planes + end_offset = (y+1) * vpr + skip = self.planes * xstep + for i in range(self.planes): + row[i::self.planes] = \ + pixels[offset+i:end_offset:skip] + yield row + +def write_chunk(outfile, tag, data=strtobytes('')): + """ + Write a PNG chunk to the output file, including length and + checksum. + """ + + # http://www.w3.org/TR/PNG/#5Chunk-layout + outfile.write(struct.pack("!I", len(data))) + tag = strtobytes(tag) + outfile.write(tag) + outfile.write(data) + checksum = zlib.crc32(tag) + checksum = zlib.crc32(data, checksum) + checksum &= 2**32-1 + outfile.write(struct.pack("!I", checksum)) + +def write_chunks(out, chunks): + """Create a PNG file by writing out the chunks.""" + + out.write(_signature) + for chunk in chunks: + write_chunk(out, *chunk) + +def filter_scanline(type, line, fo, prev=None): + """Apply a scanline filter to a scanline. `type` specifies the + filter type (0 to 4); `line` specifies the current (unfiltered) + scanline as a sequence of bytes; `prev` specifies the previous + (unfiltered) scanline as a sequence of bytes. `fo` specifies the + filter offset; normally this is size of a pixel in bytes (the number + of bytes per sample times the number of channels), but when this is + < 1 (for bit depths < 8) then the filter offset is 1. + """ + + assert 0 <= type < 5 + + # The output array. Which, pathetically, we extend one-byte at a + # time (fortunately this is linear). + out = array('B', [type]) + + def sub(): + ai = -fo + for x in line: + if ai >= 0: + x = (x - line[ai]) & 0xff + out.append(x) + ai += 1 + def up(): + for i,x in enumerate(line): + x = (x - prev[i]) & 0xff + out.append(x) + def average(): + ai = -fo + for i,x in enumerate(line): + if ai >= 0: + x = (x - ((line[ai] + prev[i]) >> 1)) & 0xff + else: + x = (x - (prev[i] >> 1)) & 0xff + out.append(x) + ai += 1 + def paeth(): + # http://www.w3.org/TR/PNG/#9Filter-type-4-Paeth + ai = -fo # also used for ci + for i,x in enumerate(line): + a = 0 + b = prev[i] + c = 0 + + if ai >= 0: + a = line[ai] + c = prev[ai] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: Pr = a + elif pb <= pc: Pr = b + else: Pr = c + + x = (x - Pr) & 0xff + out.append(x) + ai += 1 + + if not prev: + # We're on the first line. Some of the filters can be reduced + # to simpler cases which makes handling the line "off the top" + # of the image simpler. "up" becomes "none"; "paeth" becomes + # "left" (non-trivial, but true). "average" needs to be handled + # specially. + if type == 2: # "up" + type = 0 + elif type == 3: + prev = [0]*len(line) + elif type == 4: # "paeth" + type = 1 + if type == 0: + out.extend(line) + elif type == 1: + sub() + elif type == 2: + up() + elif type == 3: + average() + else: # type == 4 + paeth() + return out + + +def from_array(a, mode=None, info={}): + """Create a PNG :class:`Image` object from a 2- or 3-dimensional + array. One application of this function is easy PIL-style saving: + ``png.from_array(pixels, 'L').save('foo.png')``. + + .. note : + + The use of the term *3-dimensional* is for marketing purposes + only. It doesn't actually work. Please bear with us. Meanwhile + enjoy the complimentary snacks (on request) and please use a + 2-dimensional array. + + Unless they are specified using the *info* parameter, the PNG's + height and width are taken from the array size. For a 3 dimensional + array the first axis is the height; the second axis is the width; + and the third axis is the channel number. Thus an RGB image that is + 16 pixels high and 8 wide will use an array that is 16x8x3. For 2 + dimensional arrays the first axis is the height, but the second axis + is ``width*channels``, so an RGB image that is 16 pixels high and 8 + wide will use a 2-dimensional array that is 16x24 (each row will be + 8*3==24 sample values). + + *mode* is a string that specifies the image colour format in a + PIL-style mode. It can be: + + ``'L'`` + greyscale (1 channel) + ``'LA'`` + greyscale with alpha (2 channel) + ``'RGB'`` + colour image (3 channel) + ``'RGBA'`` + colour image with alpha (4 channel) + + The mode string can also specify the bit depth (overriding how this + function normally derives the bit depth, see below). Appending + ``';16'`` to the mode will cause the PNG to be 16 bits per channel; + any decimal from 1 to 16 can be used to specify the bit depth. + + When a 2-dimensional array is used *mode* determines how many + channels the image has, and so allows the width to be derived from + the second array dimension. + + The array is expected to be a ``numpy`` array, but it can be any + suitable Python sequence. For example, a list of lists can be used: + ``png.from_array([[0, 255, 0], [255, 0, 255]], 'L')``. The exact + rules are: ``len(a)`` gives the first dimension, height; + ``len(a[0])`` gives the second dimension; ``len(a[0][0])`` gives the + third dimension, unless an exception is raised in which case a + 2-dimensional array is assumed. It's slightly more complicated than + that because an iterator of rows can be used, and it all still + works. Using an iterator allows data to be streamed efficiently. + + The bit depth of the PNG is normally taken from the array element's + datatype (but if *mode* specifies a bitdepth then that is used + instead). The array element's datatype is determined in a way which + is supposed to work both for ``numpy`` arrays and for Python + ``array.array`` objects. A 1 byte datatype will give a bit depth of + 8, a 2 byte datatype will give a bit depth of 16. If the datatype + does not have an implicit size, for example it is a plain Python + list of lists, as above, then a default of 8 is used. + + The *info* parameter is a dictionary that can be used to specify + metadata (in the same style as the arguments to the + :class:``png.Writer`` class). For this function the keys that are + useful are: + + height + overrides the height derived from the array dimensions and allows + *a* to be an iterable. + width + overrides the width derived from the array dimensions. + bitdepth + overrides the bit depth derived from the element datatype (but + must match *mode* if that also specifies a bit depth). + + Generally anything specified in the + *info* dictionary will override any implicit choices that this + function would otherwise make, but must match any explicit ones. + For example, if the *info* dictionary has a ``greyscale`` key then + this must be true when mode is ``'L'`` or ``'LA'`` and false when + mode is ``'RGB'`` or ``'RGBA'``. + """ + + # We abuse the *info* parameter by modifying it. Take a copy here. + # (Also typechecks *info* to some extent). + info = dict(info) + + # Syntax check mode string. + bitdepth = None + try: + # Assign the 'L' or 'RGBA' part to `gotmode`. + if mode.startswith('L'): + gotmode = 'L' + mode = mode[1:] + elif mode.startswith('RGB'): + gotmode = 'RGB' + mode = mode[3:] + else: + raise Error() + if mode.startswith('A'): + gotmode += 'A' + mode = mode[1:] + + # Skip any optional ';' + while mode.startswith(';'): + mode = mode[1:] + + # Parse optional bitdepth + if mode: + try: + bitdepth = int(mode) + except (TypeError, ValueError): + raise Error() + except Error: + raise Error("mode string should be 'RGB' or 'L;16' or similar.") + mode = gotmode + + # Get bitdepth from *mode* if possible. + if bitdepth: + if info.get('bitdepth') and bitdepth != info['bitdepth']: + raise Error("mode bitdepth (%d) should match info bitdepth (%d)." % + (bitdepth, info['bitdepth'])) + info['bitdepth'] = bitdepth + + # Fill in and/or check entries in *info*. + # Dimensions. + if 'size' in info: + # Check width, height, size all match where used. + for dimension,axis in [('width', 0), ('height', 1)]: + if dimension in info: + if info[dimension] != info['size'][axis]: + raise Error( + "info[%r] should match info['size'][%r]." % + (dimension, axis)) + info['width'],info['height'] = info['size'] + if 'height' not in info: + try: + l = len(a) + except TypeError: + raise Error( + "len(a) does not work, supply info['height'] instead.") + info['height'] = l + # Colour format. + if 'greyscale' in info: + if bool(info['greyscale']) != ('L' in mode): + raise Error("info['greyscale'] should match mode.") + info['greyscale'] = 'L' in mode + if 'alpha' in info: + if bool(info['alpha']) != ('A' in mode): + raise Error("info['alpha'] should match mode.") + info['alpha'] = 'A' in mode + + planes = len(mode) + if 'planes' in info: + if info['planes'] != planes: + raise Error("info['planes'] should match mode.") + + # In order to work out whether we the array is 2D or 3D we need its + # first row, which requires that we take a copy of its iterator. + # We may also need the first row to derive width and bitdepth. + a,t = itertools.tee(a) + row = t.next() + del t + try: + row[0][0] + threed = True + testelement = row[0] + except (IndexError, TypeError): + threed = False + testelement = row + if 'width' not in info: + if threed: + width = len(row) + else: + width = len(row) // planes + info['width'] = width + + # Not implemented yet + assert not threed + + if 'bitdepth' not in info: + try: + dtype = testelement.dtype + # goto the "else:" clause. Sorry. + except AttributeError: + try: + # Try a Python array.array. + bitdepth = 8 * testelement.itemsize + except AttributeError: + # We can't determine it from the array element's + # datatype, use a default of 8. + bitdepth = 8 + else: + # If we got here without exception, we now assume that + # the array is a numpy array. + if dtype.kind == 'b': + bitdepth = 1 + else: + bitdepth = 8 * dtype.itemsize + info['bitdepth'] = bitdepth + + for thing in 'width height bitdepth greyscale alpha'.split(): + assert thing in info + return Image(a, info) + +# So that refugee's from PIL feel more at home. Not documented. +fromarray = from_array + +class Image: + """A PNG image. You can create an :class:`Image` object from + an array of pixels by calling :meth:`png.from_array`. It can be + saved to disk with the :meth:`save` method. + """ + + def __init__(self, rows, info): + """ + .. note :: + + The constructor is not public. Please do not call it. + """ + + self.rows = rows + self.info = info + + def save(self, file): + """Save the image to *file*. If *file* looks like an open file + descriptor then it is used, otherwise it is treated as a + filename and a fresh file is opened. + + In general, you can only call this method once; after it has + been called the first time and the PNG image has been saved, the + source data will have been streamed, and cannot be streamed + again. + """ + + w = Writer(**self.info) + + try: + file.write + def close(): pass + except AttributeError: + file = open(file, 'wb') + def close(): file.close() + + try: + w.write(file, self.rows) + finally: + close() + +class _readable: + """ + A simple file-like interface for strings and arrays. + """ + + def __init__(self, buf): + self.buf = buf + self.offset = 0 + + def read(self, n): + r = self.buf[self.offset:self.offset+n] + if isarray(r): + r = r.tostring() + self.offset += n + return r + + +class Reader: + """ + PNG decoder in pure Python. + """ + + def __init__(self, _guess=None, **kw): + """ + Create a PNG decoder object. + + The constructor expects exactly one keyword argument. If you + supply a positional argument instead, it will guess the input + type. You can choose among the following keyword arguments: + + filename + Name of input file (a PNG file). + file + A file-like object (object with a read() method). + bytes + ``array`` or ``string`` with PNG data. + + """ + if ((_guess is not None and len(kw) != 0) or + (_guess is None and len(kw) != 1)): + raise TypeError("Reader() takes exactly 1 argument") + + # Will be the first 8 bytes, later on. See validate_signature. + self.signature = None + self.transparent = None + # A pair of (len,type) if a chunk has been read but its data and + # checksum have not (in other words the file position is just + # past the 4 bytes that specify the chunk type). See preamble + # method for how this is used. + self.atchunk = None + + if _guess is not None: + if isarray(_guess): + kw["bytes"] = _guess + elif isinstance(_guess, str): + kw["filename"] = _guess + elif hasattr(_guess, 'read'): + kw["file"] = _guess + + if "filename" in kw: + self.file = open(kw["filename"], "rb") + elif "file" in kw: + self.file = kw["file"] + elif "bytes" in kw: + self.file = _readable(kw["bytes"]) + else: + raise TypeError("expecting filename, file or bytes array") + + + def chunk(self, seek=None, lenient=False): + """ + Read the next PNG chunk from the input file; returns a + (*type*,*data*) tuple. *type* is the chunk's type as a string + (all PNG chunk types are 4 characters long). *data* is the + chunk's data content, as a string. + + If the optional `seek` argument is + specified then it will keep reading chunks until it either runs + out of file or finds the type specified by the argument. Note + that in general the order of chunks in PNGs is unspecified, so + using `seek` can cause you to miss chunks. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + self.validate_signature() + + while True: + # http://www.w3.org/TR/PNG/#5Chunk-layout + if not self.atchunk: + self.atchunk = self.chunklentype() + length,type = self.atchunk + self.atchunk = None + data = self.file.read(length) + if len(data) != length: + raise ChunkError('Chunk %s too short for required %i octets.' + % (type, length)) + checksum = self.file.read(4) + if len(checksum) != 4: + raise ValueError('Chunk %s too short for checksum.', tag) + if seek and type != seek: + continue + verify = zlib.crc32(strtobytes(type)) + verify = zlib.crc32(data, verify) + # Whether the output from zlib.crc32 is signed or not varies + # according to hideous implementation details, see + # http://bugs.python.org/issue1202 . + # We coerce it to be positive here (in a way which works on + # Python 2.3 and older). + verify &= 2**32 - 1 + verify = struct.pack('!I', verify) + if checksum != verify: + (a, ) = struct.unpack('!I', checksum) + (b, ) = struct.unpack('!I', verify) + message = "Checksum error in %s chunk: 0x%08X != 0x%08X." % (type, a, b) + if lenient: + warnings.warn(message, RuntimeWarning) + else: + raise ChunkError(message) + return type, data + + def chunks(self): + """Return an iterator that will yield each chunk as a + (*chunktype*, *content*) pair. + """ + + while True: + t,v = self.chunk() + yield t,v + if t == 'IEND': + break + + def undo_filter(self, filter_type, scanline, previous): + """Undo the filter for a scanline. `scanline` is a sequence of + bytes that does not include the initial filter type byte. + `previous` is decoded previous scanline (for straightlaced + images this is the previous pixel row, but for interlaced + images, it is the previous scanline in the reduced image, which + in general is not the previous pixel row in the final image). + When there is no previous scanline (the first row of a + straightlaced image, or the first row in one of the passes in an + interlaced image), then this argument should be ``None``. + + The scanline will have the effects of filtering removed, and the + result will be returned as a fresh sequence of bytes. + """ + + # :todo: Would it be better to update scanline in place? + # Yes, with the Cython extension making the undo_filter fast, + # updating scanline inplace makes the code 3 times faster + # (reading 50 images of 800x800 went from 40s to 16s) + result = scanline + + if filter_type == 0: + return result + + if filter_type not in (1,2,3,4): + raise FormatError('Invalid PNG Filter Type.' + ' See http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters .') + + # Filter unit. The stride from one pixel to the corresponding + # byte from the previous pixel. Normally this is the pixel + # size in bytes, but when this is smaller than 1, the previous + # byte is used instead. + fu = max(1, self.psize) + + # For the first line of a pass, synthesize a dummy previous + # line. An alternative approach would be to observe that on the + # first line 'up' is the same as 'null', 'paeth' is the same + # as 'sub', with only 'average' requiring any special case. + if not previous: + previous = array('B', [0]*len(scanline)) + + def sub(): + """Undo sub filter.""" + + ai = 0 + # Loop starts at index fu. Observe that the initial part + # of the result is already filled in correctly with + # scanline. + for i in range(fu, len(result)): + x = scanline[i] + a = result[ai] + result[i] = (x + a) & 0xff + ai += 1 + + def up(): + """Undo up filter.""" + + for i in range(len(result)): + x = scanline[i] + b = previous[i] + result[i] = (x + b) & 0xff + + def average(): + """Undo average filter.""" + + ai = -fu + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = result[ai] + b = previous[i] + result[i] = (x + ((a + b) >> 1)) & 0xff + ai += 1 + + def paeth(): + """Undo Paeth filter.""" + + # Also used for ci. + ai = -fu + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = c = 0 + else: + a = result[ai] + c = previous[ai] + b = previous[i] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + result[i] = (x + pr) & 0xff + ai += 1 + + # Call appropriate filter algorithm. Note that 0 has already + # been dealt with. + (None, + pngfilters.undo_filter_sub, + pngfilters.undo_filter_up, + pngfilters.undo_filter_average, + pngfilters.undo_filter_paeth)[filter_type](fu, scanline, previous, result) + return result + + def deinterlace(self, raw): + """ + Read raw pixel data, undo filters, deinterlace, and flatten. + Return in flat row flat pixel format. + """ + + # Values per row (of the target image) + vpr = self.width * self.planes + + # Make a result array, and make it big enough. Interleaving + # writes to the output array randomly (well, not quite), so the + # entire output array must be in memory. + fmt = 'BH'[self.bitdepth > 8] + a = array(fmt, [0]*vpr*self.height) + source_offset = 0 + + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # The previous (reconstructed) scanline. None at the + # beginning of a pass to indicate that there is no previous + # line. + recon = None + # Pixels per row (reduced pass image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # Row size in bytes for this pass. + row_size = int(math.ceil(self.psize * ppr)) + for y in range(ystart, self.height, ystep): + filter_type = raw[source_offset] + source_offset += 1 + scanline = raw[source_offset:source_offset+row_size] + source_offset += row_size + recon = self.undo_filter(filter_type, scanline, recon) + # Convert so that there is one element per pixel value + flat = self.serialtoflat(recon, ppr) + if xstep == 1: + assert xstart == 0 + offset = y * vpr + a[offset:offset+vpr] = flat + else: + offset = y * vpr + xstart * self.planes + end_offset = (y+1) * vpr + skip = self.planes * xstep + for i in range(self.planes): + a[offset+i:end_offset:skip] = \ + flat[i::self.planes] + return a + + def iterboxed(self, rows): + """Iterator that yields each scanline in boxed row flat pixel + format. `rows` should be an iterator that yields the bytes of + each row in turn. + """ + + def asvalues(raw): + """Convert a row of raw bytes into a flat row. Result may + or may not share with argument""" + + if self.bitdepth == 8: + return raw + if self.bitdepth == 16: + raw = tostring(raw) + return array('H', struct.unpack('!%dH' % (len(raw)//2), raw)) + assert self.bitdepth < 8 + width = self.width + # Samples per byte + spb = 8//self.bitdepth + out = array('B') + mask = 2**self.bitdepth - 1 + shifts = map(self.bitdepth.__mul__, reversed(range(spb))) + for o in raw: + out.extend(map(lambda i: mask&(o>>i), shifts)) + return out[:width] + + return itertools.imap(asvalues, rows) + + def serialtoflat(self, bytes, width=None): + """Convert serial format (byte stream) pixel data to flat row + flat pixel. + """ + + if self.bitdepth == 8: + return bytes + if self.bitdepth == 16: + bytes = tostring(bytes) + return array('H', + struct.unpack('!%dH' % (len(bytes)//2), bytes)) + assert self.bitdepth < 8 + if width is None: + width = self.width + # Samples per byte + spb = 8//self.bitdepth + out = array('B') + mask = 2**self.bitdepth - 1 + shifts = map(self.bitdepth.__mul__, reversed(range(spb))) + l = width + for o in bytes: + out.extend([(mask&(o>>s)) for s in shifts][:l]) + l -= spb + if l <= 0: + l = width + return out + + def iterstraight(self, raw): + """Iterator that undoes the effect of filtering, and yields + each row in serialised format (as a sequence of bytes). + Assumes input is straightlaced. `raw` should be an iterable + that yields the raw bytes in chunks of arbitrary size. + """ + + # length of row, in bytes + rb = self.row_bytes + a = array('B') + # The previous (reconstructed) scanline. None indicates first + # line of image. + recon = None + for some in raw: + a.extend(some) + while len(a) >= rb + 1: + filter_type = a[0] + scanline = a[1:rb+1] + del a[:rb+1] + recon = self.undo_filter(filter_type, scanline, recon) + yield recon + if len(a) != 0: + # :file:format We get here with a file format error: + # when the available bytes (after decompressing) do not + # pack into exact rows. + raise FormatError( + 'Wrong size for decompressed IDAT chunk.') + assert len(a) == 0 + + def validate_signature(self): + """If signature (header) has not been read then read and + validate it; otherwise do nothing. + """ + + if self.signature: + return + self.signature = self.file.read(8) + if self.signature != _signature: + raise FormatError("PNG file has invalid signature.") + + def preamble(self, lenient=False): + """ + Extract the image metadata by reading the initial part of + the PNG file up to the start of the ``IDAT`` chunk. All the + chunks that precede the ``IDAT`` chunk are read and either + processed for metadata or discarded. + + If the optional `lenient` argument evaluates to True, checksum + failures will raise warnings rather than exceptions. + """ + + self.validate_signature() + + while True: + if not self.atchunk: + self.atchunk = self.chunklentype() + if self.atchunk is None: + raise FormatError( + 'This PNG file has no IDAT chunks.') + if self.atchunk[1] == 'IDAT': + return + self.process_chunk(lenient=lenient) + + def chunklentype(self): + """Reads just enough of the input to determine the next + chunk's length and type, returned as a (*length*, *type*) pair + where *type* is a string. If there are no more chunks, ``None`` + is returned. + """ + + x = self.file.read(8) + if not x: + return None + if len(x) != 8: + raise FormatError( + 'End of file whilst reading chunk length and type.') + length,type = struct.unpack('!I4s', x) + type = bytestostr(type) + if length > 2**31-1: + raise FormatError('Chunk %s is too large: %d.' % (type,length)) + return length,type + + def process_chunk(self, lenient=False): + """Process the next chunk and its data. This only processes the + following chunk types, all others are ignored: ``IHDR``, + ``PLTE``, ``bKGD``, ``tRNS``, ``gAMA``, ``sBIT``. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + type, data = self.chunk(lenient=lenient) + method = '_process_' + type + m = getattr(self, method, None) + if m: + m(data) + + def _process_IHDR(self, data): + # http://www.w3.org/TR/PNG/#11IHDR + if len(data) != 13: + raise FormatError('IHDR chunk has incorrect length.') + (self.width, self.height, self.bitdepth, self.color_type, + self.compression, self.filter, + self.interlace) = struct.unpack("!2I5B", data) + + check_bitdepth_colortype(self.bitdepth, self.color_type) + + if self.compression != 0: + raise Error("unknown compression method %d" % self.compression) + if self.filter != 0: + raise FormatError("Unknown filter method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters ." + % self.filter) + if self.interlace not in (0,1): + raise FormatError("Unknown interlace method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#8InterlaceMethods ." + % self.interlace) + + # Derived values + # http://www.w3.org/TR/PNG/#6Colour-values + colormap = bool(self.color_type & 1) + greyscale = not (self.color_type & 2) + alpha = bool(self.color_type & 4) + color_planes = (3,1)[greyscale or colormap] + planes = color_planes + alpha + + self.colormap = colormap + self.greyscale = greyscale + self.alpha = alpha + self.color_planes = color_planes + self.planes = planes + self.psize = float(self.bitdepth)/float(8) * planes + if int(self.psize) == self.psize: + self.psize = int(self.psize) + self.row_bytes = int(math.ceil(self.width * self.psize)) + # Stores PLTE chunk if present, and is used to check + # chunk ordering constraints. + self.plte = None + # Stores tRNS chunk if present, and is used to check chunk + # ordering constraints. + self.trns = None + # Stores sbit chunk if present. + self.sbit = None + + def _process_PLTE(self, data): + # http://www.w3.org/TR/PNG/#11PLTE + if self.plte: + warnings.warn("Multiple PLTE chunks present.") + self.plte = data + if len(data) % 3 != 0: + raise FormatError( + "PLTE chunk's length should be a multiple of 3.") + if len(data) > (2**self.bitdepth)*3: + raise FormatError("PLTE chunk is too long.") + if len(data) == 0: + raise FormatError("Empty PLTE is not allowed.") + + def _process_bKGD(self, data): + try: + if self.colormap: + if not self.plte: + warnings.warn( + "PLTE chunk is required before bKGD chunk.") + self.background = struct.unpack('B', data) + else: + self.background = struct.unpack("!%dH" % self.color_planes, + data) + except struct.error: + raise FormatError("bKGD chunk has incorrect length.") + + def _process_tRNS(self, data): + # http://www.w3.org/TR/PNG/#11tRNS + self.trns = data + if self.colormap: + if not self.plte: + warnings.warn("PLTE chunk is required before tRNS chunk.") + else: + if len(data) > len(self.plte)/3: + # Was warning, but promoted to Error as it + # would otherwise cause pain later on. + raise FormatError("tRNS chunk is too long.") + else: + if self.alpha: + raise FormatError( + "tRNS chunk is not valid with colour type %d." % + self.color_type) + try: + self.transparent = \ + struct.unpack("!%dH" % self.color_planes, data) + except struct.error: + raise FormatError("tRNS chunk has incorrect length.") + + def _process_gAMA(self, data): + try: + self.gamma = struct.unpack("!L", data)[0] / 100000.0 + except struct.error: + raise FormatError("gAMA chunk has incorrect length.") + + def _process_sBIT(self, data): + self.sbit = data + if (self.colormap and len(data) != 3 or + not self.colormap and len(data) != self.planes): + raise FormatError("sBIT chunk has incorrect length.") + + def read(self, lenient=False): + """ + Read the PNG file and decode it. Returns (`width`, `height`, + `pixels`, `metadata`). + + May use excessive memory. + + `pixels` are returned in boxed row flat pixel format. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + def iteridat(): + """Iterator that yields all the ``IDAT`` chunks as strings.""" + while True: + try: + type, data = self.chunk(lenient=lenient) + except ValueError, e: + raise ChunkError(e.args[0]) + if type == 'IEND': + # http://www.w3.org/TR/PNG/#11IEND + break + if type != 'IDAT': + continue + # type == 'IDAT' + # http://www.w3.org/TR/PNG/#11IDAT + if self.colormap and not self.plte: + warnings.warn("PLTE chunk is required before IDAT chunk") + yield data + + def iterdecomp(idat): + """Iterator that yields decompressed strings. `idat` should + be an iterator that yields the ``IDAT`` chunk data. + """ + + # Currently, with no max_length paramter to decompress, this + # routine will do one yield per IDAT chunk. So not very + # incremental. + d = zlib.decompressobj() + # Each IDAT chunk is passed to the decompressor, then any + # remaining state is decompressed out. + for data in idat: + # :todo: add a max_length argument here to limit output + # size. + yield array('B', d.decompress(data)) + yield array('B', d.flush()) + + self.preamble(lenient=lenient) + raw = iterdecomp(iteridat()) + + if self.interlace: + raw = array('B', itertools.chain(*raw)) + arraycode = 'BH'[self.bitdepth>8] + # Like :meth:`group` but producing an array.array object for + # each row. + pixels = itertools.imap(lambda *row: array(arraycode, row), + *[iter(self.deinterlace(raw))]*self.width*self.planes) + else: + pixels = self.iterboxed(self.iterstraight(raw)) + meta = dict() + for attr in 'greyscale alpha planes bitdepth interlace'.split(): + meta[attr] = getattr(self, attr) + meta['size'] = (self.width, self.height) + for attr in 'gamma transparent background'.split(): + a = getattr(self, attr, None) + if a is not None: + meta[attr] = a + if self.plte: + meta['palette'] = self.palette() + return self.width, self.height, pixels, meta + + + def read_flat(self): + """ + Read a PNG file and decode it into flat row flat pixel format. + Returns (*width*, *height*, *pixels*, *metadata*). + + May use excessive memory. + + `pixels` are returned in flat row flat pixel format. + + See also the :meth:`read` method which returns pixels in the + more stream-friendly boxed row flat pixel format. + """ + + x, y, pixel, meta = self.read() + arraycode = 'BH'[meta['bitdepth']>8] + pixel = array(arraycode, itertools.chain(*pixel)) + return x, y, pixel, meta + + def palette(self, alpha='natural'): + """Returns a palette that is a sequence of 3-tuples or 4-tuples, + synthesizing it from the ``PLTE`` and ``tRNS`` chunks. These + chunks should have already been processed (for example, by + calling the :meth:`preamble` method). All the tuples are the + same size: 3-tuples if there is no ``tRNS`` chunk, 4-tuples when + there is a ``tRNS`` chunk. Assumes that the image is colour type + 3 and therefore a ``PLTE`` chunk is required. + + If the `alpha` argument is ``'force'`` then an alpha channel is + always added, forcing the result to be a sequence of 4-tuples. + """ + + if not self.plte: + raise FormatError( + "Required PLTE chunk is missing in colour type 3 image.") + plte = group(array('B', self.plte), 3) + if self.trns or alpha == 'force': + trns = array('B', self.trns or '') + trns.extend([255]*(len(plte)-len(trns))) + plte = map(operator.add, plte, group(trns, 1)) + return plte + + def asDirect(self): + """Returns the image data as a direct representation of an + ``x * y * planes`` array. This method is intended to remove the + need for callers to deal with palettes and transparency + themselves. Images with a palette (colour type 3) + are converted to RGB or RGBA; images with transparency (a + ``tRNS`` chunk) are converted to LA or RGBA as appropriate. + When returned in this format the pixel values represent the + colour value directly without needing to refer to palettes or + transparency information. + + Like the :meth:`read` method this method returns a 4-tuple: + + (*width*, *height*, *pixels*, *meta*) + + This method normally returns pixel values with the bit depth + they have in the source image, but when the source PNG has an + ``sBIT`` chunk it is inspected and can reduce the bit depth of + the result pixels; pixel values will be reduced according to + the bit depth specified in the ``sBIT`` chunk (PNG nerds should + note a single result bit depth is used for all channels; the + maximum of the ones specified in the ``sBIT`` chunk. An RGB565 + image will be rescaled to 6-bit RGB666). + + The *meta* dictionary that is returned reflects the `direct` + format and not the original source image. For example, an RGB + source image with a ``tRNS`` chunk to represent a transparent + colour, will have ``planes=3`` and ``alpha=False`` for the + source image, but the *meta* dictionary returned by this method + will have ``planes=4`` and ``alpha=True`` because an alpha + channel is synthesized and added. + + *pixels* is the pixel data in boxed row flat pixel format (just + like the :meth:`read` method). + + All the other aspects of the image data are not changed. + """ + + self.preamble() + + # Simple case, no conversion necessary. + if not self.colormap and not self.trns and not self.sbit: + return self.read() + + x,y,pixels,meta = self.read() + + if self.colormap: + meta['colormap'] = False + meta['alpha'] = bool(self.trns) + meta['bitdepth'] = 8 + meta['planes'] = 3 + bool(self.trns) + plte = self.palette() + def iterpal(pixels): + for row in pixels: + row = map(plte.__getitem__, row) + yield array('B', itertools.chain(*row)) + pixels = iterpal(pixels) + elif self.trns: + # It would be nice if there was some reasonable way + # of doing this without generating a whole load of + # intermediate tuples. But tuples does seem like the + # easiest way, with no other way clearly much simpler or + # much faster. (Actually, the L to LA conversion could + # perhaps go faster (all those 1-tuples!), but I still + # wonder whether the code proliferation is worth it) + it = self.transparent + maxval = 2**meta['bitdepth']-1 + planes = meta['planes'] + meta['alpha'] = True + meta['planes'] += 1 + typecode = 'BH'[meta['bitdepth']>8] + def itertrns(pixels): + for row in pixels: + # For each row we group it into pixels, then form a + # characterisation vector that says whether each + # pixel is opaque or not. Then we convert + # True/False to 0/maxval (by multiplication), + # and add it as the extra channel. + row = group(row, planes) + opa = map(it.__ne__, row) + opa = map(maxval.__mul__, opa) + opa = zip(opa) # convert to 1-tuples + yield array(typecode, + itertools.chain(*map(operator.add, row, opa))) + pixels = itertrns(pixels) + targetbitdepth = None + if self.sbit: + sbit = struct.unpack('%dB' % len(self.sbit), self.sbit) + targetbitdepth = max(sbit) + if targetbitdepth > meta['bitdepth']: + raise Error('sBIT chunk %r exceeds bitdepth %d' % + (sbit,self.bitdepth)) + if min(sbit) <= 0: + raise Error('sBIT chunk %r has a 0-entry' % sbit) + if targetbitdepth == meta['bitdepth']: + targetbitdepth = None + if targetbitdepth: + shift = meta['bitdepth'] - targetbitdepth + meta['bitdepth'] = targetbitdepth + def itershift(pixels): + for row in pixels: + yield map(shift.__rrshift__, row) + pixels = itershift(pixels) + return x,y,pixels,meta + + def asFloat(self, maxval=1.0): + """Return image pixels as per :meth:`asDirect` method, but scale + all pixel values to be floating point values between 0.0 and + *maxval*. + """ + + x,y,pixels,info = self.asDirect() + sourcemaxval = 2**info['bitdepth']-1 + del info['bitdepth'] + info['maxval'] = float(maxval) + factor = float(maxval)/float(sourcemaxval) + def iterfloat(): + for row in pixels: + yield map(factor.__mul__, row) + return x,y,iterfloat(),info + + def _as_rescale(self, get, targetbitdepth): + """Helper used by :meth:`asRGB8` and :meth:`asRGBA8`.""" + + width,height,pixels,meta = get() + maxval = 2**meta['bitdepth'] - 1 + targetmaxval = 2**targetbitdepth - 1 + factor = float(targetmaxval) / float(maxval) + meta['bitdepth'] = targetbitdepth + def iterscale(): + for row in pixels: + yield map(lambda x: int(round(x*factor)), row) + if maxval == targetmaxval: + return width, height, pixels, meta + else: + return width, height, iterscale(), meta + + def asRGB8(self): + """Return the image data as an RGB pixels with 8-bits per + sample. This is like the :meth:`asRGB` method except that + this method additionally rescales the values so that they + are all between 0 and 255 (8-bit). In the case where the + source image has a bit depth < 8 the transformation preserves + all the information; where the source image has bit depth + > 8, then rescaling to 8-bit values loses precision. No + dithering is performed. Like :meth:`asRGB`, an alpha channel + in the source image will raise an exception. + + This function returns a 4-tuple: + (*width*, *height*, *pixels*, *metadata*). + *width*, *height*, *metadata* are as per the + :meth:`read` method. + + *pixels* is the pixel data in boxed row flat pixel format. + """ + + return self._as_rescale(self.asRGB, 8) + + def asRGBA8(self): + """Return the image data as RGBA pixels with 8-bits per + sample. This method is similar to :meth:`asRGB8` and + :meth:`asRGBA`: The result pixels have an alpha channel, *and* + values are rescaled to the range 0 to 255. The alpha channel is + synthesized if necessary (with a small speed penalty). + """ + + return self._as_rescale(self.asRGBA, 8) + + def asRGB(self): + """Return image as RGB pixels. RGB colour images are passed + through unchanged; greyscales are expanded into RGB + triplets (there is a small speed overhead for doing this). + + An alpha channel in the source image will raise an + exception. + + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``. + """ + + width,height,pixels,meta = self.asDirect() + if meta['alpha']: + raise Error("will not convert image with alpha channel to RGB") + if not meta['greyscale']: + return width,height,pixels,meta + meta['greyscale'] = False + typecode = 'BH'[meta['bitdepth'] > 8] + def iterrgb(): + for row in pixels: + a = array(typecode, [0]) * 3 * width + for i in range(3): + a[i::3] = row + yield a + return width,height,iterrgb(),meta + + def asRGBA(self): + """Return image as RGBA pixels. Greyscales are expanded into + RGB triplets; an alpha channel is synthesized if necessary. + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``, and + ``metadata['alpha']`` will be ``True``. + """ + + width,height,pixels,meta = self.asDirect() + if meta['alpha'] and not meta['greyscale']: + return width,height,pixels,meta + typecode = 'BH'[meta['bitdepth'] > 8] + maxval = 2**meta['bitdepth'] - 1 + maxbuffer = struct.pack('=' + typecode, maxval) * 4 * width + def newarray(): + return array(typecode, maxbuffer) + + if meta['alpha'] and meta['greyscale']: + # LA to RGBA + def convert(): + for row in pixels: + # Create a fresh target row, then copy L channel + # into first three target channels, and A channel + # into fourth channel. + a = newarray() + pngfilters.convert_la_to_rgba(row, a) + yield a + elif meta['greyscale']: + # L to RGBA + def convert(): + for row in pixels: + a = newarray() + pngfilters.convert_l_to_rgba(row, a) + yield a + else: + assert not meta['alpha'] and not meta['greyscale'] + # RGB to RGBA + def convert(): + for row in pixels: + a = newarray() + pngfilters.convert_rgb_to_rgba(row, a) + yield a + meta['alpha'] = True + meta['greyscale'] = False + return width,height,convert(),meta + +def check_bitdepth_colortype(bitdepth, colortype): + """Check that `bitdepth` and `colortype` are both valid, + and specified in a valid combination. Returns if valid, + raise an Exception if not valid. + """ + + if bitdepth not in (1,2,4,8,16): + raise FormatError("invalid bit depth %d" % bitdepth) + if colortype not in (0,2,3,4,6): + raise FormatError("invalid colour type %d" % colortype) + # Check indexed (palettized) images have 8 or fewer bits + # per pixel; check only indexed or greyscale images have + # fewer than 8 bits per pixel. + if colortype & 1 and bitdepth > 8: + raise FormatError( + "Indexed images (colour type %d) cannot" + " have bitdepth > 8 (bit depth %d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + if bitdepth < 8 and colortype not in (0,3): + raise FormatError("Illegal combination of bit depth (%d)" + " and colour type (%d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + +def isinteger(x): + try: + return int(x) == x + except (TypeError, ValueError): + return False + + +# === Legacy Version Support === + +# :pyver:old: PyPNG works on Python versions 2.3 and 2.2, but not +# without some awkward problems. Really PyPNG works on Python 2.4 (and +# above); it works on Pythons 2.3 and 2.2 by virtue of fixing up +# problems here. It's a bit ugly (which is why it's hidden down here). +# +# Generally the strategy is one of pretending that we're running on +# Python 2.4 (or above), and patching up the library support on earlier +# versions so that it looks enough like Python 2.4. When it comes to +# Python 2.2 there is one thing we cannot patch: extended slices +# http://www.python.org/doc/2.3/whatsnew/section-slices.html. +# Instead we simply declare that features that are implemented using +# extended slices will not work on Python 2.2. +# +# In order to work on Python 2.3 we fix up a recurring annoyance involving +# the array type. In Python 2.3 an array cannot be initialised with an +# array, and it cannot be extended with a list (or other sequence). +# Both of those are repeated issues in the code. Whilst I would not +# normally tolerate this sort of behaviour, here we "shim" a replacement +# for array into place (and hope no-one notices). You never read this. +# +# In an amusing case of warty hacks on top of warty hacks... the array +# shimming we try and do only works on Python 2.3 and above (you can't +# subclass array.array in Python 2.2). So to get it working on Python +# 2.2 we go for something much simpler and (probably) way slower. +try: + array('B').extend([]) + array('B', array('B')) +# :todo:(drj) Check that TypeError is correct for Python 2.3 +except TypeError: + # Expect to get here on Python 2.3 + try: + class _array_shim(array): + true_array = array + def __new__(cls, typecode, init=None): + super_new = super(_array_shim, cls).__new__ + it = super_new(cls, typecode) + if init is None: + return it + it.extend(init) + return it + def extend(self, extension): + super_extend = super(_array_shim, self).extend + if isinstance(extension, self.true_array): + return super_extend(extension) + if not isinstance(extension, (list, str)): + # Convert to list. Allows iterators to work. + extension = list(extension) + return super_extend(self.true_array(self.typecode, extension)) + array = _array_shim + except TypeError: + # Expect to get here on Python 2.2 + def array(typecode, init=()): + if type(init) == str: + return map(ord, init) + return list(init) + +# Further hacks to get it limping along on Python 2.2 +try: + enumerate +except NameError: + def enumerate(seq): + i=0 + for x in seq: + yield i,x + i += 1 + +try: + reversed +except NameError: + def reversed(l): + l = list(l) + l.reverse() + for x in l: + yield x + +try: + itertools +except NameError: + class _dummy_itertools: + pass + itertools = _dummy_itertools() + def _itertools_imap(f, seq): + for x in seq: + yield f(x) + itertools.imap = _itertools_imap + def _itertools_chain(*iterables): + for it in iterables: + for element in it: + yield element + itertools.chain = _itertools_chain + + +# === Support for users without Cython === + +try: + pngfilters +except NameError: + class pngfilters(object): + def undo_filter_sub(filter_unit, scanline, previous, result): + """Undo sub filter.""" + + ai = 0 + # Loops starts at index fu. Observe that the initial part + # of the result is already filled in correctly with + # scanline. + for i in range(filter_unit, len(result)): + x = scanline[i] + a = result[ai] + result[i] = (x + a) & 0xff + ai += 1 + undo_filter_sub = staticmethod(undo_filter_sub) + + def undo_filter_up(filter_unit, scanline, previous, result): + """Undo up filter.""" + + for i in range(len(result)): + x = scanline[i] + b = previous[i] + result[i] = (x + b) & 0xff + undo_filter_up = staticmethod(undo_filter_up) + + def undo_filter_average(filter_unit, scanline, previous, result): + """Undo up filter.""" + + ai = -filter_unit + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = result[ai] + b = previous[i] + result[i] = (x + ((a + b) >> 1)) & 0xff + ai += 1 + undo_filter_average = staticmethod(undo_filter_average) + + def undo_filter_paeth(filter_unit, scanline, previous, result): + """Undo Paeth filter.""" + + # Also used for ci. + ai = -filter_unit + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = c = 0 + else: + a = result[ai] + c = previous[ai] + b = previous[i] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + result[i] = (x + pr) & 0xff + ai += 1 + undo_filter_paeth = staticmethod(undo_filter_paeth) + + def convert_la_to_rgba(row, result): + for i in range(3): + result[i::4] = row[0::2] + result[3::4] = row[1::2] + convert_la_to_rgba = staticmethod(convert_la_to_rgba) + + def convert_l_to_rgba(row, result): + """Convert a grayscale image to RGBA. This method assumes + the alpha channel in result is already correctly + initialized. + """ + for i in range(3): + result[i::4] = row + convert_l_to_rgba = staticmethod(convert_l_to_rgba) + + def convert_rgb_to_rgba(row, result): + """Convert an RGB image to RGBA. This method assumes the + alpha channel in result is already correctly initialized. + """ + for i in range(3): + result[i::4] = row[i::3] + convert_rgb_to_rgba = staticmethod(convert_rgb_to_rgba) + + +# === Command Line Support === + +def read_pam_header(infile): + """ + Read (the rest of a) PAM header. `infile` should be positioned + immediately after the initial 'P7' line (at the beginning of the + second line). Returns are as for `read_pnm_header`. + """ + + # Unlike PBM, PGM, and PPM, we can read the header a line at a time. + header = dict() + while True: + l = infile.readline().strip() + if l == strtobytes('ENDHDR'): + break + if not l: + raise EOFError('PAM ended prematurely') + if l[0] == strtobytes('#'): + continue + l = l.split(None, 1) + if l[0] not in header: + header[l[0]] = l[1] + else: + header[l[0]] += strtobytes(' ') + l[1] + + required = ['WIDTH', 'HEIGHT', 'DEPTH', 'MAXVAL'] + required = [strtobytes(x) for x in required] + WIDTH,HEIGHT,DEPTH,MAXVAL = required + present = [x for x in required if x in header] + if len(present) != len(required): + raise Error('PAM file must specify WIDTH, HEIGHT, DEPTH, and MAXVAL') + width = int(header[WIDTH]) + height = int(header[HEIGHT]) + depth = int(header[DEPTH]) + maxval = int(header[MAXVAL]) + if (width <= 0 or + height <= 0 or + depth <= 0 or + maxval <= 0): + raise Error( + 'WIDTH, HEIGHT, DEPTH, MAXVAL must all be positive integers') + return 'P7', width, height, depth, maxval + +def read_pnm_header(infile, supported=('P5','P6')): + """ + Read a PNM header, returning (format,width,height,depth,maxval). + `width` and `height` are in pixels. `depth` is the number of + channels in the image; for PBM and PGM it is synthesized as 1, for + PPM as 3; for PAM images it is read from the header. `maxval` is + synthesized (as 1) for PBM images. + """ + + # Generally, see http://netpbm.sourceforge.net/doc/ppm.html + # and http://netpbm.sourceforge.net/doc/pam.html + + supported = [strtobytes(x) for x in supported] + + # Technically 'P7' must be followed by a newline, so by using + # rstrip() we are being liberal in what we accept. I think this + # is acceptable. + type = infile.read(3).rstrip() + if type not in supported: + raise NotImplementedError('file format %s not supported' % type) + if type == strtobytes('P7'): + # PAM header parsing is completely different. + return read_pam_header(infile) + # Expected number of tokens in header (3 for P4, 4 for P6) + expected = 4 + pbm = ('P1', 'P4') + if type in pbm: + expected = 3 + header = [type] + + # We have to read the rest of the header byte by byte because the + # final whitespace character (immediately following the MAXVAL in + # the case of P6) may not be a newline. Of course all PNM files in + # the wild use a newline at this point, so it's tempting to use + # readline; but it would be wrong. + def getc(): + c = infile.read(1) + if not c: + raise Error('premature EOF reading PNM header') + return c + + c = getc() + while True: + # Skip whitespace that precedes a token. + while c.isspace(): + c = getc() + # Skip comments. + while c == '#': + while c not in '\n\r': + c = getc() + if not c.isdigit(): + raise Error('unexpected character %s found in header' % c) + # According to the specification it is legal to have comments + # that appear in the middle of a token. + # This is bonkers; I've never seen it; and it's a bit awkward to + # code good lexers in Python (no goto). So we break on such + # cases. + token = strtobytes('') + while c.isdigit(): + token += c + c = getc() + # Slight hack. All "tokens" are decimal integers, so convert + # them here. + header.append(int(token)) + if len(header) == expected: + break + # Skip comments (again) + while c == '#': + while c not in '\n\r': + c = getc() + if not c.isspace(): + raise Error('expected header to end with whitespace, not %s' % c) + + if type in pbm: + # synthesize a MAXVAL + header.append(1) + depth = (1,3)[type == strtobytes('P6')] + return header[0], header[1], header[2], depth, header[3] + +def write_pnm(file, width, height, pixels, meta): + """Write a Netpbm PNM/PAM file. + """ + + bitdepth = meta['bitdepth'] + maxval = 2**bitdepth - 1 + # Rudely, the number of image planes can be used to determine + # whether we are L (PGM), LA (PAM), RGB (PPM), or RGBA (PAM). + planes = meta['planes'] + # Can be an assert as long as we assume that pixels and meta came + # from a PNG file. + assert planes in (1,2,3,4) + if planes in (1,3): + if 1 == planes: + # PGM + # Could generate PBM if maxval is 1, but we don't (for one + # thing, we'd have to convert the data, not just blat it + # out). + fmt = 'P5' + else: + # PPM + fmt = 'P6' + file.write('%s %d %d %d\n' % (fmt, width, height, maxval)) + if planes in (2,4): + # PAM + # See http://netpbm.sourceforge.net/doc/pam.html + if 2 == planes: + tupltype = 'GRAYSCALE_ALPHA' + else: + tupltype = 'RGB_ALPHA' + file.write('P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\n' + 'TUPLTYPE %s\nENDHDR\n' % + (width, height, planes, maxval, tupltype)) + # Values per row + vpr = planes * width + # struct format + fmt = '>%d' % vpr + if maxval > 0xff: + fmt = fmt + 'H' + else: + fmt = fmt + 'B' + for row in pixels: + file.write(struct.pack(fmt, *row)) + file.flush() + +def color_triple(color): + """ + Convert a command line colour value to a RGB triple of integers. + FIXME: Somewhere we need support for greyscale backgrounds etc. + """ + if color.startswith('#') and len(color) == 4: + return (int(color[1], 16), + int(color[2], 16), + int(color[3], 16)) + if color.startswith('#') and len(color) == 7: + return (int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16)) + elif color.startswith('#') and len(color) == 13: + return (int(color[1:5], 16), + int(color[5:9], 16), + int(color[9:13], 16)) + +def _add_common_options(parser): + """Call *parser.add_option* for each of the options that are + common between this PNG--PNM conversion tool and the gen + tool. + """ + parser.add_option("-i", "--interlace", + default=False, action="store_true", + help="create an interlaced PNG file (Adam7)") + parser.add_option("-t", "--transparent", + action="store", type="string", metavar="#RRGGBB", + help="mark the specified colour as transparent") + parser.add_option("-b", "--background", + action="store", type="string", metavar="#RRGGBB", + help="save the specified background colour") + parser.add_option("-g", "--gamma", + action="store", type="float", metavar="value", + help="save the specified gamma value") + parser.add_option("-c", "--compression", + action="store", type="int", metavar="level", + help="zlib compression level (0-9)") + return parser + +def _main(argv): + """ + Run the PNG encoder with options from the command line. + """ + + # Parse command line arguments + from optparse import OptionParser + import re + version = '%prog ' + __version__ + parser = OptionParser(version=version) + parser.set_usage("%prog [options] [imagefile]") + parser.add_option('-r', '--read-png', default=False, + action='store_true', + help='Read PNG, write PNM') + parser.add_option("-a", "--alpha", + action="store", type="string", metavar="pgmfile", + help="alpha channel transparency (RGBA)") + _add_common_options(parser) + + (options, args) = parser.parse_args(args=argv[1:]) + + # Convert options + if options.transparent is not None: + options.transparent = color_triple(options.transparent) + if options.background is not None: + options.background = color_triple(options.background) + + # Prepare input and output files + if len(args) == 0: + infilename = '-' + infile = sys.stdin + elif len(args) == 1: + infilename = args[0] + infile = open(infilename, 'rb') + else: + parser.error("more than one input file") + outfile = sys.stdout + if sys.platform == "win32": + import msvcrt, os + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + + if options.read_png: + # Encode PNG to PPM + png = Reader(file=infile) + width,height,pixels,meta = png.asDirect() + write_pnm(outfile, width, height, pixels, meta) + else: + # Encode PNM to PNG + format, width, height, depth, maxval = \ + read_pnm_header(infile, ('P5','P6','P7')) + # When it comes to the variety of input formats, we do something + # rather rude. Observe that L, LA, RGB, RGBA are the 4 colour + # types supported by PNG and that they correspond to 1, 2, 3, 4 + # channels respectively. So we use the number of channels in + # the source image to determine which one we have. We do not + # care about TUPLTYPE. + greyscale = depth <= 2 + pamalpha = depth in (2,4) + supported = map(lambda x: 2**x-1, range(1,17)) + try: + mi = supported.index(maxval) + except ValueError: + raise NotImplementedError( + 'your maxval (%s) not in supported list %s' % + (maxval, str(supported))) + bitdepth = mi+1 + writer = Writer(width, height, + greyscale=greyscale, + bitdepth=bitdepth, + interlace=options.interlace, + transparent=options.transparent, + background=options.background, + alpha=bool(pamalpha or options.alpha), + gamma=options.gamma, + compression=options.compression) + if options.alpha: + pgmfile = open(options.alpha, 'rb') + format, awidth, aheight, adepth, amaxval = \ + read_pnm_header(pgmfile, 'P5') + if amaxval != '255': + raise NotImplementedError( + 'maxval %s not supported for alpha channel' % amaxval) + if (awidth, aheight) != (width, height): + raise ValueError("alpha channel image size mismatch" + " (%s has %sx%s but %s has %sx%s)" + % (infilename, width, height, + options.alpha, awidth, aheight)) + writer.convert_ppm_and_pgm(infile, pgmfile, outfile) + else: + writer.convert_pnm(infile, outfile) + + +if __name__ == '__main__': + try: + _main(sys.argv) + except Error, e: + print >>sys.stderr, e + diff --git a/fablabchemnitz_polyhedra.py b/fablabchemnitz_polyhedra.py new file mode 100644 index 0000000..c244e0d --- /dev/null +++ b/fablabchemnitz_polyhedra.py @@ -0,0 +1,246 @@ +#! /usr/bin/env python +''' +Copyright (C) 2010 Jonathan Manton (jmanton @ illinois.edu) +Copyright (C) 2007 Aaron Spike (aaron @ ekips.org) +Copyright (C) 2007 Tavmjong Bah (tavmjong @ free.fr) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# this program is loosely based on the gear extension for inkscape + +import inkex +from fablabchemnitz_polyhedrondata import angleOverride, polyhedronData +import simplestyle, sys +from math import * + +def points_to_svgd(p): + f = p[0] + p = p[1:] + svgd = 'M%.3f,%.3f' % f + for x in p: + svgd += 'L%.3f,%.3f' % x + return svgd + +# these are designed to be 100px wide - they have to be scaled +no_tab = { 'cut' : ['m 0,0 100,0'], 'perf' : []} + +notab = {0 : no_tab} +simpletab = {0: {'cut': ['m 0,0 20,19 60,0 l 20,-19'], 'perf' : ['m 0,0 100,0']}} +# tab array - 0 = slot/tab, 1 = two tabs, 2 = single tab (alternate tab and nothing), 3 = none +tabStyle = [{ \ + 50 : {'cut': ['m 0,0 35,0 0,2 -6,0 c 0,0 1,8 6,12 8,6 22,6 30,0 5,-4 6,-12 6,-12 l -6,0 0,-2 35,0'], 'perf' : ['M 42,0 58,0']}, \ + 24 : {'cut': ['m 0,0 55,0 0,2 -6,0 c 0,0 1,3 6,6 8,3 19,6 27,8 5,-4 9,-14 9,-14 l -6,0 0,-2 15,0'], 'perf' : ['M 62,0 78,0']}, \ + 18 : {'cut' : ['m 0,0 65,0 0,2 -6,0 c 0,0 1,3 6,6 8,2 11,2 19,3 5,-4 9,-10 7,-9 l -6,0 0,-2 15,0'], 'perf' : ['m 72,0 6,0']}, \ + 6 : {'cut': ['m 0,0 70,0 2,7 10,1 5,-6 -2,0 0,-2 15,0'], 'perf' : ['m 74,0 7,0']}, + 0 : { 'cut' : ['m 0,0 100,0'], 'perf' : []}}, simpletab, simpletab, notab] +slotStyle = [{\ + 50: {'cut': ['m 0,0 20,19 60,0 l 20,-19','m 28,-3 4,5 36,0 4,-5'], 'perf' : ['M 0,0 28,0','M 100,0 72,0']}, \ + 24 : {'cut': ['M 100,0 90,18 30,11 20,0 0,0', 'm 92,-3 -4,5 -36,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 20,0 48,0']}, \ + 18 : {'cut' : ['M 100,0 90,16 40,9 35,0 0,0', 'm 92,-3 -4,5 -26,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 35,0 58,0']}, \ + 6 : {'cut' : ['M 100,0 98,10 88,9 84,2 86,2 86,0 0,0'], 'perf' : ['m 96,0 -6,0']}, + 0 : { 'cut' : ['m 0,0 100,0'], 'perf' : [] }}, simpletab, notab, notab] + + +class Polyhedra(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-p", "--poly", + action="store", type="string", + dest="poly", default='Cube', + help="polygon net to render") + self.OptionParser.add_option("-s", "--size", + action="store", type="float", + dest="size", default=100.0, + help="size of first edge, in px") + self.OptionParser.add_option("-t", "--tabs", + action="store", type="int", + dest="tabs", default=0, + help="tab style") + + def get_tab(self, limitAngle): + return(self.get_connector('tab', limitAngle)) + + def get_slot(self, limitAngle): + return(self.get_connector('slot', limitAngle)) + + def get_connector(self, type, limitAngle): + + if(self.options.tabs == 1): # two tabs + return(self.gen_tab(limitAngle/2)) + + if(self.options.tabs == 2): # one tab + if(type == 'tab'): + return(self.gen_tab(limitAngle)) + else: + return(no_tab) + + if(self.options.tabs == 3): # no tabs or slots + return(no_tab) + + # otherwise, get stuff from the array of specially modified tab/slots + + if(type == 'tab'): + source = tabStyle + else: + source = slotStyle + + cuttable = source[self.options.tabs].keys() + cuttable.sort() # sorts in-place. Ugh. + cuttable.reverse() # in-place. Ugh. + for angle in cuttable: + if(limitAngle >= angle): + return(source[self.options.tabs][angle]) + + def gen_tab(self, theta_degrees): + theta = radians(min(theta_degrees,90)) + minOffset = 8 + tabAngle = radians(40) + minTabLength = 40 + tabHeight = 19 # must be >= minOffset + tabWidth = 100 + + # determine if we need to sqash down side of tab by limit angle + bX = minOffset * cos(theta) / sin(theta) + aX = bX - (minOffset * cos(tabAngle) / sin(tabAngle)) + if(theta >= tabAngle): + tab_cut = [(0,0), (tabHeight/sin(tabAngle) * cos(tabAngle), tabHeight)] + tab_perf = [(0,0), (tabWidth,0)] + else: + if (aX > (tabWidth - minTabLength)): # too stubby, don't put a tab + return(no_tab) + tab_cut = [(0,0), (aX,0), (bX, minOffset)] + tab_perf = [(aX,0), (tabWidth,0)] + + # now see if we also have to squash the other side of the tab - this happens + # for very small angles where the tab height on the far side would still be + # too high and would intersect with the other tab + + # first, find where the tab would intersect the limit angle if we just put + # out a line of infinite length at the tab angle. + bmult = tabWidth / (cos(theta) * sin(tabAngle) / sin(theta) + cos(tabAngle)) + tiY = bmult * sin(tabAngle) + + # now see if that intersection is too low. If so, limit the tab's height + tiY = min(tiY, tabHeight) + tab_cut.append((tabWidth - tiY / sin(tabAngle) * cos(tabAngle), tiY)) + tab_cut.append((tabWidth, 0)) + + return({'cut' : [points_to_svgd(tab_cut)], 'perf' : [points_to_svgd(tab_perf)]}) + + def effect(self): + + poly = self.options.poly + size = self.options.size + + eC = polyhedronData[poly]['edgeCoordinates'] + iEI = polyhedronData[poly]['insideEdgeIndices'] + oEI = polyhedronData[poly]['outsideEdgeIndices'] + oED = polyhedronData[poly]['outsideEdgeDegrees'] + sidelen = sqrt((eC[oEI[0][0]-1][0] - eC[oEI[0][1]-1][0])**2 + \ + (eC[oEI[0][0]-1][1] - eC[oEI[0][1]-1][1])**2) + scale = size / sidelen + + + # Translate group, Rotate path. + t = 'translate(' + str( self.view_center[0] ) + ',' + str( self.view_center[1] ) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ), + 'transform':t } + g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + + gsub_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ) + 'border' } + gsub = inkex.etree.SubElement(g, 'g', gsub_attribs) + + # Create SVG Path for gear + cutStyle = { 'stroke': '#0000FF', 'fill': 'none' } + perfStyle = { 'stroke': '#FF0000', 'fill': 'none' } + textStyle = { + 'font-size': str( size/4 ), + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': '#222' + } + + numOEI = len(oEI) + for edgeIndex in range(numOEI): + eX1 = eC[oEI[edgeIndex][0]-1][0] + eY1 = eC[oEI[edgeIndex][0]-1][1] + eX2 = eC[oEI[edgeIndex][1]-1][0] + eY2 = eC[oEI[edgeIndex][1]-1][1] + + origin = (eX1 * scale, eY1 * scale) + edgelen = sqrt((eX1 - eX2)**2 + (eY1 - eY2)**2) + edgesize = size * (edgelen / sidelen) + + + prevAngle = (oED[(edgeIndex - 1) % numOEI] + 180 - oED[edgeIndex]) % 360 + nextAngle = (oED[edgeIndex] + 180 - oED[(edgeIndex + 1) % numOEI]) % 360 + if angleOverride.has_key(poly): + if angleOverride[poly].has_key('prev'): + if angleOverride[poly]['prev'].has_key(edgeIndex): + prevAngle = angleOverride[poly]['prev'][edgeIndex] + if angleOverride[poly].has_key('next'): + if angleOverride[poly]['next'].has_key(edgeIndex): + nextAngle = angleOverride[poly]['next'][edgeIndex] + trans = 'translate(' + str(origin[0]) + ',' + str(origin[1]) + ') rotate(' + str(oED[edgeIndex] ) + ') scale(' + str(edgesize/100.0) + ')' + + limitAngle = min(prevAngle, nextAngle) + tab = self.get_tab(limitAngle) + slot = self.get_slot(limitAngle) + + # the "special" tabs are all skewed one way or the other, to + # make room for tight turns. This determines if it is the previous + # or next angle that is the tight one, and flips the tab or slot if + # needed. + + if(nextAngle == limitAngle): + trans += ' translate(100.0, 0) scale(-1,1)' + + tab_group_attribs = {inkex.addNS('label','inkscape'):'tab', 'transform': trans } + tab_group = inkex.etree.SubElement(gsub, 'g', tab_group_attribs) + midX = (eX2 - eX1)/2 + eX1 + midY = (eY2 - eY1)/2 + eY1 + text_attrib = {'style': simplestyle.formatStyle(textStyle), + 'x' : str(midX * scale), 'y' : str(midY * scale) } + # inkex.etree.SubElement(gsub, 'text', text_attrib).text = str(edgeIndex) + if ((edgeIndex % 2) == 0): + edgetype = tab + else: + edgetype = slot + + for path in edgetype['cut']: + gear_attribs = {'style':simplestyle.formatStyle(cutStyle), 'd':path} + gear = inkex.etree.SubElement(tab_group, inkex.addNS('path','svg'), gear_attribs ) + + for path in edgetype['perf']: + gear_attribs = {'style':simplestyle.formatStyle(perfStyle), 'd':path} + gear = inkex.etree.SubElement(tab_group, inkex.addNS('path','svg'), gear_attribs ) + + gsub_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ) + 'inside' } + gsub = inkex.etree.SubElement(g, 'g', gsub_attribs) + + for edge in iEI: + points = [(eC[edge[0]-1][0] * scale, eC[edge[0]-1][1] * scale), (eC[edge[1]-1][0] * scale, eC[edge[1]-1][1] * scale)] + path = points_to_svgd( points ) + perf_attribs = {'style':simplestyle.formatStyle(perfStyle), 'd':path} + gear = inkex.etree.SubElement(gsub, inkex.addNS('path','svg'), perf_attribs ) + +if __name__ == '__main__': + e = Polyhedra() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_polyhedra_archimedean.inx b/fablabchemnitz_polyhedra_archimedean.inx new file mode 100644 index 0000000..b7ae5e6 --- /dev/null +++ b/fablabchemnitz_polyhedra_archimedean.inx @@ -0,0 +1,45 @@ + + + <_name>Polyhedra - Archimedean + fablabchemnitz.de.polyhedra.archimedean + fablabchemnitz_polyhedra.py + inkex.py + +<_option value="TruncatedTetrahedron">TruncatedTetrahedron +<_option value="TruncatedCube">TruncatedCube +<_option value="TruncatedOctahedron">TruncatedOctahedron +<_option value="TruncatedDodecahedron">TruncatedDodecahedron +<_option value="TruncatedIcosahedron">TruncatedIcosahedron + +<_option value="Cuboctahedron">Cuboctahedron +<_option value="Icosidodecahedron">Icosidodecahedron + +<_option value="SmallRhombicosidodecahedron">SmallRhombicosidodecahedron +<_option value="SmallRhombicuboctahedron">SmallRhombicuboctahedron +<_option value="GreatRhombicosidodecahedron">GreatRhombicosidodecahedron +<_option value="GreatRhombicuboctahedron">GreatRhombicuboctahedron + +<_option value="SnubCube">SnubCube +<_option value="SnubDodecahedron">SnubDodecahedron + +100.0 + + <_item value="0">Tab and Slot + <_item value="1">Double Tabs + <_item value="2">Single Tabs + <_item value="3">None + + + + + all + + + + + + + + diff --git a/fablabchemnitz_polyhedra_archimedeandual.inx b/fablabchemnitz_polyhedra_archimedeandual.inx new file mode 100644 index 0000000..375f5e2 --- /dev/null +++ b/fablabchemnitz_polyhedra_archimedeandual.inx @@ -0,0 +1,43 @@ + + + <_name>Polyhedra - Archimedean Dual + fablabchemnitz.de.polyhedra.archimedeandual + fablabchemnitz_polyhedra.py + inkex.py + +<_option value="DeltoidalHexecontahedron">DeltoidalHexecontahedron +<_option value="DeltoidalIcositetrahedron">DeltoidalIcositetrahedron +<_option value="DisdyakisDodecahedron">DisdyakisDodecahedron +<_option value="DisdyakisTriacontahedron">DisdyakisTriacontahedron +<_option value="PentagonalIcositetrahedron">PentagonalIcositetrahedron +<_option value="PentagonalHexecontahedron">PentagonalHexecontahedron +<_option value="PentakisDodecahedron">PentakisDodecahedron +<_option value="RhombicDodecahedron">RhombicDodecahedron +<_option value="RhombicTriacontahedron">RhombicTriacontahedron +<_option value="SmallTriakisOctahedron">SmallTriakisOctahedron +<_option value="TetrakisHexahedron">TetrakisHexahedron +<_option value="TriakisIcosahedron">TriakisIcosahedron +<_option value="TriakisTetrahedron">TriakisTetrahedron + + +100.0 + + <_item value="0">Tab and Slot + <_item value="1">Double Tabs + <_item value="2">Single Tabs + <_item value="3">None + + + + + all + + + + + + + + diff --git a/fablabchemnitz_polyhedra_other.inx b/fablabchemnitz_polyhedra_other.inx new file mode 100644 index 0000000..3533799 --- /dev/null +++ b/fablabchemnitz_polyhedra_other.inx @@ -0,0 +1,33 @@ + + + <_name>Polyhedra - Other + fablabchemnitz.de.polyhedra.other + fablabchemnitz_polyhedra.py + inkex.py + + +<_option value="ElongatedDodecahedron">ElongatedDodecahedron +<_option value="MathematicaPolyhedron">MathematicaPolyhedron + + +100.0 + + <_item value="0">Tab and Slot + <_item value="1">Double Tabs + <_item value="2">Single Tabs + <_item value="3">None + + + + + all + + + + + + + + diff --git a/fablabchemnitz_polyhedra_platonic.inx b/fablabchemnitz_polyhedra_platonic.inx new file mode 100644 index 0000000..424bc89 --- /dev/null +++ b/fablabchemnitz_polyhedra_platonic.inx @@ -0,0 +1,34 @@ + + + <_name>Polyhedra - Platonic + fablabchemnitz.de.polyhedra.platonic + fablabchemnitz_polyhedra.py + inkex.py + +<_option value="Tetrahedron">Tetrahedron +<_option value="Cube">Cube +<_option value="Octahedron">Octahedron +<_option value="Dodecahedron">Dodecahedron +<_option value="Icosahedron">Icosahedron + + +100.0 + + <_item value="0">Tab and Slot + <_item value="1">Double Tabs + <_item value="2">Single Tabs + <_item value="3">None + + + + all + + + + + + + + diff --git a/fablabchemnitz_polyhedrondata.py b/fablabchemnitz_polyhedrondata.py new file mode 100644 index 0000000..4963256 --- /dev/null +++ b/fablabchemnitz_polyhedrondata.py @@ -0,0 +1,1428 @@ +# Copyright (C) 2010 Jonathan Manton (jmanton @ illinois.edu) + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# net data produced with Mathematica using the notebook at http://jmantonfablab.googlecode.com/svn/trunk/papercuts/polyhedra/autonets/polydatagen.nb +# angle overrides manually produced, with help from debugging mode on net generation that also outputs the vertex number of the outer edges of the nets. + +angleOverride = {\ + 'SnubCube' : {'prev' : {19 : 24., 38 : 24.}, 'next' : {16 : 24., 35 : 24.}}, \ + 'SnubDodecahedron' : {'prev' : {10 : 24., 17 : 24., 21 : 24. , 28 : 24., 32: 24., 39: 24. , 43 : 24., 50 : 24., 54 : 24., 69 : 24., 76 : 24., 80 : 24., 87 : 24., 91 : 24., 98 : 24., 102 : 24., 109 : 24., 113 : 24.}, \ + 'next' : {7 : 24., 14 : 24., 18 : 24., 25 : 24. , 29 : 24., 36 : 24. , 40 : 24., 47 : 24., 51 : 24., 66 : 24., 73 : 24., 77 : 24., 84 : 24., 88 : 24., 95 : 24., 99 : 24., 106 : 24., 110 : 24.}},\ + 'GreatRhombicosidodecahedron' : {'prev' : {16: 18., 25: 18., 46: 18., 55: 18., 68: 18., 77: 18., 90: 18., 99: 18., 112: 18., 136: 18., 145: 18., 166: 18., 175: 18., 188: 18., 197: 18., 210: 18., 219: 18., 232: 18. }, \ + 'next' : {13 : 18., 22: 18., 43: 18., 52: 18., 65: 18., 74: 18., 87: 18., 96: 18., 109: 18., 133: 18., 142: 18., 163: 18., 172: 18., 185: 18., 194: 18., 207: 18., 216: 18., 229: 18.}}, \ + 'SmallRhombicosidodecahedron' : {'prev' : {10 : 24., 11 : 24., 24 : 24., 25 : 24., 35 : 24., 36 : 24., 46 : 24., 47: 24., 59 : 24., 73: 24., 74: 24., 84: 24., 85: 24., 95: 24., 96: 24., 106: 24., 107: 24. }, \ + 'next' : {6: 24. , 7 : 24., 20 : 24. , 21 : 24., 31 : 24., 32 : 24., 42 : 24., 43 : 24., 56 : 24., 69 : 24., 70: 24., 80: 24., 81: 24., 91:24., 92: 24., 102: 24., 103: 24. }}, \ + 'TruncatedIcosahedron' : {'prev' : {8 : 24., 12 : 24., 22: 24., 26: 24., 33: 24., 37: 24., 44: 24., 48: 24., 55: 24., 67: 24., 71: 24., 78: 24., 82: 24., 89: 24., 93: 24., 100: 24., 104: 24., 114: 24.}, \ + 'next' : {5 : 24., 9 : 24., 19: 24., 23: 24., 30: 24., 34: 24., 41: 24., 45: 24., 52: 24., 64: 24., 68: 24., 75: 24., 79: 24., 86: 24., 90: 24., 97: 24., 101: 24., 111: 24. }}, \ + 'DeltoidalHexecontahedron' : {'prev' : {6: 24., 44: 24., 56: 24., 68: 24., 80: 24., 92: 24., 104: 24., 116: 24.}, \ + 'next' : {3: 24., 41: 24., 53: 24., 65: 24., 77: 24., 89: 24., 101: 24., 113: 24.}}, \ + 'PentagonalIcositetrahedron' : {'prev' : {16: 24., 22: 24.}, \ + 'next' : {13: 24., 19: 24.}}, \ + 'PentagonalHexecontahedron' : {'prev' : {10: 12., 28: 12., 65: 12., 83: 12., 101: 12., 119: 12., 156: 12., 174: 12.}, \ + 'next' : {7: 12., 25: 12., 62: 12., 80: 12., 98: 12., 116: 12., 153: 12., 171: 12.}}, \ + 'PentakisDodecahedron' : {'prev' : {4: 18., 25: 18., 31: 18., 37: 18., 43: 18., 48: 18., 54: 18., 60: 18.}, \ + 'next' : {1: 18., 22: 18., 28: 18., 34: 18., 40: 18., 45: 18., 51: 18., 57: 18. }} \ +} + + +polyhedronData = \ +{'Cube' : {'edgeCoordinates' : [[0., 1.], [0., 2.], [1., 0.], [1., \ +1.], [1., 2.], [1., 3.], [2., 0.], [2., 1.], [2., 2.], [2., 3.], [3., \ +1.], [3., 2.], [4., 1.], [4., 2.]], 'outsideEdgeIndices' : [[1, 2], \ +[2, 5], [5, 6], [6, 10], [10, 9], [9, 12], [12, 14], [14, 13], [13, \ +11], [11, 8], [8, 7], [7, 3], [3, 4], [4, 1]], 'outsideEdgeDegrees' : \ +[90., 0., 90., 0., -90., 0., 0., -90., 180., 180., -90., 180., 90., \ +180.], 'insideEdgeIndices' : [[4, 5], [4, 8], [5, 9], [8, 9], [11, \ +12]]}, 'Dodecahedron' : {'edgeCoordinates' : [[2.11803, 0.], \ +[4.73607, 0.], [5.73607, 0.], [6.3541, 0.], [7.3541, 0.], [1.30902, \ +0.587785], [2.92705, 0.587785], [0.809017, 0.951057], [3.42705, \ +0.951057], [4.42705, 0.951057], [6.04508, 0.951057], [7.66312, \ +0.951057], [0., 1.53884], [1.61803, 1.53884], [2.61803, 1.53884], \ +[4.23607, 1.53884], [5.23607, 1.53884], [6.8541, 1.53884], [7.8541, \ +1.53884], [0.309017, 2.4899], [1.30902, 2.4899], [2.92705, 2.4899], \ +[3.92705, 2.4899], [5.54508, 2.4899], [6.54508, 2.4899], [8.16312, \ +2.4899], [0.5, 3.07768], [2.11803, 3.07768], [3.73607, 3.07768], \ +[4.73607, 3.07768], [7.3541, 3.07768], [5.23607, 3.44095], [6.8541, \ +3.44095], [0.809017, 4.02874], [1.80902, 4.02874], [2.42705, \ +4.02874], [3.42705, 4.02874], [6.04508, 4.02874]], \ +'outsideEdgeIndices' : [[13, 20], [20, 21], [21, 27], [27, 34], [34, \ +35], [35, 28], [28, 36], [36, 37], [37, 29], [29, 22], [22, 23], [23, \ +30], [30, 24], [24, 32], [32, 38], [38, 33], [33, 25], [25, 31], [31, \ +26], [26, 19], [19, 18], [18, 12], [12, 5], [5, 4], [4, 11], [11, 3], \ +[3, 2], [2, 10], [10, 17], [17, 16], [16, 9], [9, 15], [15, 7], [7, \ +1], [1, 6], [6, 14], [14, 8], [8, 13]], 'outsideEdgeDegrees' : [72., \ +0., 144., 72., 0., -72., 72., 0., -72., -144., 0., 36., -36., 108., \ +36., -36., -108., 36., -36., -108., 180., -36., -108., 180., 108., \ +-108., 180., 108., 36., 180., -144., 144., -72., -144., 144., 72., \ +-144., 144.], 'insideEdgeIndices' : [[11, 17], [11, 18], [14, 15], \ +[14, 21], [15, 22], [16, 23], [17, 24], [18, 25], [21, 28], [22, 28], \ +[24, 25]]}, 'Icosahedron' : {'edgeCoordinates' : [[1., 0.], [2., 0.], \ +[3., 0.], [4., 0.], [5., 0.], [0.5, 0.866025], [1.5, 0.866025], [2.5, \ +0.866025], [3.5, 0.866025], [4.5, 0.866025], [5.5, 0.866025], [0., \ +1.73205], [1., 1.73205], [2., 1.73205], [3., 1.73205], [4., 1.73205], \ +[5., 1.73205], [0.5, 2.59808], [1.5, 2.59808], [2.5, 2.59808], [3.5, \ +2.59808], [4.5, 2.59808]], 'outsideEdgeIndices' : [[12, 18], [18, \ +13], [13, 19], [19, 14], [14, 20], [20, 15], [15, 21], [21, 16], [16, \ +22], [22, 17], [17, 11], [11, 5], [5, 10], [10, 4], [4, 9], [9, 3], \ +[3, 8], [8, 2], [2, 7], [7, 1], [1, 6], [6, 12]], \ +'outsideEdgeDegrees' : [60., -60., 60., -60., 60., -60., 60., -60., \ +60., -60., -60., -120., 120., -120., 120., -120., 120., -120., 120., \ +-120., 120., 120.], 'insideEdgeIndices' : [[6, 7], [6, 13], [7, 8], \ +[7, 13], [7, 14], [8, 9], [8, 14], [8, 15], [9, 10], [9, 15], [9, \ +16], [10, 11], [10, 16], [10, 17], [12, 13], [13, 14], [14, 15], [15, \ +16], [16, 17]]}, 'Octahedron' : {'edgeCoordinates' : [[2., 0.], [0.5, \ +0.866025], [1.5, 0.866025], [2.5, 0.866025], [3.5, 0.866025], [0., \ +1.73205], [1., 1.73205], [2., 1.73205], [3., 1.73205], [1.5, \ +2.59808]], 'outsideEdgeIndices' : [[6, 7], [7, 10], [10, 8], [8, 9], \ +[9, 5], [5, 4], [4, 1], [1, 3], [3, 2], [2, 6]], 'outsideEdgeDegrees' \ +: [0., 60., -60., 0., -60., 180., -120., 120., 180., 120.], \ +'insideEdgeIndices' : [[2, 7], [3, 4], [3, 7], [3, 8], [4, 8], [4, \ +9], [7, 8]]}, 'Tetrahedron' : {'edgeCoordinates' : [[0., 0.], [0.5, \ +0.866025], [1., 0.], [1., 1.73205], [1.5, 0.866025], [2., 0.]], \ +'outsideEdgeIndices' : [[1, 2], [2, 4], [4, 5], [5, 6], [6, 3], [3, \ +1]], 'outsideEdgeDegrees' : [60., 60., -60., -60., 180., 180.], \ +'insideEdgeIndices' : [[2, 3], [2, 5], [3, 5]]}, 'Cuboctahedron' : \ +{'edgeCoordinates' : [[0., 1.86603], [0., 2.86603], [0.5, 1.], \ +[0.866025, 2.36603], [0.866025, 3.36603], [1.36603, 0.5], [1.36603, \ +1.5], [1.86603, 2.36603], [1.86603, 3.36603], [2.23205, 0.], \ +[2.23205, 1.], [2.73205, 1.86603], [2.73205, 2.86603], [3.23205, 0.], \ +[3.23205, 1.], [3.59808, 2.36603], [4.09808, 0.5], [4.09808, 1.5], \ +[4.59808, 2.36603], [4.9641, 1.], [5.4641, 1.86603], [5.9641, 1.]], \ +'outsideEdgeIndices' : [[1, 4], [4, 2], [2, 5], [5, 9], [9, 13], [13, \ +8], [8, 12], [12, 16], [16, 19], [19, 21], [21, 22], [22, 20], [20, \ +18], [18, 15], [15, 17], [17, 14], [14, 10], [10, 6], [6, 11], [11, \ +7], [7, 3], [3, 1]], 'outsideEdgeDegrees' : [30., 150., 30., 0., \ +-30., -150., -30., 30., 0., -30., -60., 180., 150., -150., -30., \ +-150., 180., 150., 30., 150., -150., 120.], 'insideEdgeIndices' : \ +[[4, 5], [4, 7], [4, 8], [7, 8], [8, 9], [10, 11], [11, 12], [11, \ +15], [12, 15], [14, 15], [16, 18], [18, 19], [20, 21]]}, \ +'GreatRhombicosidodecahedron' : {'edgeCoordinates' : [[0., 5.63692], \ +[0.309017, 4.68586], [0.309017, 6.58797], [0.618034, 8.04179], \ +[0.618034, 10.7738], [1.11803, 4.09808], [1.11803, 7.17576], \ +[1.11803, 8.90781], [1.11803, 9.90781], [1.11803, 11.6399], [2.11803, \ +3.44371], [2.11803, 4.09808], [2.11803, 7.17576], [2.11803, 8.90781], \ +[2.11803, 9.90781], [2.11803, 11.6399], [2.36603, 9.08063], [2.61803, \ +2.57768], [2.61803, 8.04179], [2.61803, 10.7738], [2.67504, 8.12957], \ +[2.67504, 10.0317], [2.92705, 4.68586], [2.92705, 6.58797], [2.98406, \ +3.94371], [2.98406, 6.67576], [2.98406, 12.1399], [3.23607, 5.63692], \ +[3.48406, 3.07768], [3.48406, 4.80973], [3.48406, 5.80973], [3.48406, \ +7.54179], [3.48406, 10.6195], [3.48406, 11.2738], [4.48406, 3.07768], \ +[4.48406, 4.80973], [4.48406, 5.80973], [4.48406, 7.54179], [4.48406, \ +10.6195], [4.73205, 5.63692], [4.73205, 13.1787], [4.98406, 3.94371], \ +[4.98406, 6.67576], [5.04107, 4.68586], [5.04107, 6.58797], [5.04107, \ +12.2276], [5.04107, 14.1298], [5.29308, 8.12957], [5.29308, 10.0317], \ +[5.35008, 8.04179], [5.35008, 10.7738], [5.60209, 9.08063], [5.85008, \ +4.09808], [5.85008, 7.17576], [5.85008, 8.90781], [5.85008, 9.90781], \ +[5.85008, 11.6399], [5.85008, 14.7175], [6.85008, 3.44371], [6.85008, \ +4.09808], [6.85008, 7.17576], [6.85008, 8.90781], [6.85008, 9.90781], \ +[6.85008, 11.6399], [6.85008, 14.7175], [7.09808, 9.08063], [7.35008, \ +2.57768], [7.35008, 8.04179], [7.35008, 10.7738], [7.40709, 8.12957], \ +[7.40709, 10.0317], [7.6591, 4.68586], [7.6591, 6.58797], [7.6591, \ +12.2276], [7.6591, 14.1298], [7.71611, 3.94371], [7.71611, 6.67576], \ +[7.71611, 12.1399], [7.96812, 5.63692], [7.96812, 13.1787], [8.21611, \ +3.07768], [8.21611, 4.80973], [8.21611, 5.80973], [8.21611, 7.54179], \ +[8.21611, 10.6195], [8.21611, 11.2738], [9.21611, 3.07768], [9.21611, \ +4.80973], [9.21611, 5.80973], [9.21611, 7.54179], [9.21611, 10.6195], \ +[9.4641, 5.63692], [9.71611, 3.94371], [9.71611, 6.67576], [9.77312, \ +4.68586], [9.77312, 6.58797], [10.0251, 8.12957], [10.0251, 10.0317], \ +[10.0821, 8.04179], [10.0821, 10.7738], [10.3341, 9.08063], [10.5821, \ +4.09808], [10.5821, 7.17576], [10.5821, 8.90781], [10.5821, 9.90781], \ +[10.5821, 11.6399], [11.5821, 3.44371], [11.5821, 4.09808], [11.5821, \ +7.17576], [11.5821, 8.90781], [11.5821, 9.90781], [11.5821, 11.6399], \ +[11.8301, 9.08063], [12.0821, 2.57768], [12.0821, 8.04179], [12.0821, \ +10.7738], [12.1391, 8.12957], [12.1391, 10.0317], [12.3912, 4.68586], \ +[12.3912, 6.58797], [12.4482, 3.94371], [12.4482, 6.67576], [12.4482, \ +12.1399], [12.7002, 5.63692], [12.9482, 3.07768], [12.9482, 4.80973], \ +[12.9482, 5.80973], [12.9482, 7.54179], [12.9482, 10.6195], [12.9482, \ +11.2738], [13.9482, 3.07768], [13.9482, 4.80973], [13.9482, 5.80973], \ +[13.9482, 7.54179], [13.9482, 10.6195], [14.1962, 5.63692], [14.4482, \ +3.94371], [14.4482, 6.67576], [14.5052, 4.68586], [14.5052, 6.58797], \ +[14.7572, 8.12957], [14.7572, 10.0317], [14.8142, 8.04179], [14.8142, \ +10.7738], [15.0662, 9.08063], [15.3142, 4.09808], [15.3142, 7.17576], \ +[15.3142, 8.90781], [15.3142, 9.90781], [15.3142, 11.6399], [16.3142, \ +3.44371], [16.3142, 4.09808], [16.3142, 7.17576], [16.3142, 8.90781], \ +[16.3142, 9.90781], [16.3142, 11.6399], [16.5622, 1.53884], [16.5622, \ +9.08063], [16.8142, 2.57768], [16.8142, 8.04179], [16.8142, 10.7738], \ +[16.8712, 0.587785], [16.8712, 2.4899], [16.8712, 8.12957], [16.8712, \ +10.0317], [17.1232, 4.68586], [17.1232, 6.58797], [17.1802, 3.94371], \ +[17.1802, 6.67576], [17.1802, 12.1399], [17.4322, 5.63692], [17.6802, \ +0.], [17.6802, 3.07768], [17.6802, 4.80973], [17.6802, 5.80973], \ +[17.6802, 7.54179], [17.6802, 10.6195], [17.6802, 11.2738], [18.6802, \ +0.], [18.6802, 3.07768], [18.6802, 4.80973], [18.6802, 5.80973], \ +[18.6802, 7.54179], [18.6802, 10.6195], [18.9282, 5.63692], [19.1802, \ +3.94371], [19.1802, 6.67576], [19.2372, 4.68586], [19.2372, 6.58797], \ +[19.4892, 0.587785], [19.4892, 2.4899], [19.4892, 8.12957], [19.4892, \ +10.0317], [19.5462, 8.04179], [19.5462, 10.7738], [19.7982, 1.53884], \ +[19.7982, 9.08063], [20.0462, 4.09808], [20.0462, 7.17576], [20.0462, \ +8.90781], [20.0462, 9.90781], [20.0462, 11.6399], [21.0462, 3.44371], \ +[21.0462, 4.09808], [21.0462, 7.17576], [21.0462, 8.90781], [21.0462, \ +9.90781], [21.0462, 11.6399], [21.2942, 9.08063], [21.5462, 2.57768], \ +[21.5462, 8.04179], [21.5462, 10.7738], [21.6032, 8.12957], [21.6032, \ +10.0317], [21.8553, 4.68586], [21.8553, 6.58797], [21.9123, 3.94371], \ +[21.9123, 6.67576], [21.9123, 12.1399], [22.1643, 5.63692], [22.4123, \ +3.07768], [22.4123, 4.80973], [22.4123, 5.80973], [22.4123, 7.54179], \ +[22.4123, 10.6195], [22.4123, 11.2738], [23.4123, 3.07768], [23.4123, \ +4.80973], [23.4123, 5.80973], [23.4123, 7.54179], [23.4123, 10.6195], \ +[23.9123, 3.94371], [23.9123, 6.67576], [24.2213, 8.12957], [24.2213, \ +10.0317], [24.2783, 8.04179], [24.5303, 9.08063], [24.7783, \ +7.17576]], 'outsideEdgeIndices' : [[1, 3], [3, 7], [7, 4], [4, 8], \ +[8, 9], [9, 5], [5, 10], [10, 16], [16, 27], [27, 34], [34, 20], [20, \ +15], [15, 14], [14, 19], [19, 32], [32, 21], [21, 17], [17, 22], [22, \ +33], [33, 39], [39, 49], [49, 52], [52, 48], [48, 38], [38, 50], [50, \ +55], [55, 56], [56, 51], [51, 57], [57, 46], [46, 41], [41, 47], [47, \ +58], [58, 65], [65, 75], [75, 80], [80, 74], [74, 64], [64, 78], [78, \ +86], [86, 69], [69, 63], [63, 62], [62, 68], [68, 84], [84, 70], [70, \ +66], [66, 71], [71, 85], [85, 91], [91, 98], [98, 101], [101, 97], \ +[97, 90], [90, 99], [99, 104], [104, 105], [105, 100], [100, 106], \ +[106, 112], [112, 123], [123, 130], [130, 116], [116, 111], [111, \ +110], [110, 115], [115, 128], [128, 117], [117, 113], [113, 118], \ +[118, 129], [129, 135], [135, 142], [142, 145], [145, 141], [141, \ +134], [134, 143], [143, 148], [148, 149], [149, 144], [144, 150], \ +[150, 156], [156, 170], [170, 178], [178, 161], [161, 155], [155, \ +154], [154, 160], [160, 176], [176, 164], [164, 158], [158, 165], \ +[165, 177], [177, 184], [184, 193], [193, 197], [197, 192], [192, \ +183], [183, 194], [194, 200], [200, 201], [201, 195], [195, 202], \ +[202, 208], [208, 219], [219, 226], [226, 212], [212, 207], [207, \ +206], [206, 211], [211, 224], [224, 213], [213, 209], [209, 214], \ +[214, 225], [225, 231], [231, 235], [235, 237], [237, 234], [234, \ +230], [230, 236], [236, 238], [238, 233], [233, 229], [229, 228], \ +[228, 232], [232, 227], [227, 221], [221, 210], [210, 203], [203, \ +217], [217, 222], [222, 223], [223, 218], [218, 205], [205, 216], \ +[216, 220], [220, 215], [215, 204], [204, 198], [198, 188], [188, \ +185], [185, 189], [189, 199], [199, 187], [187, 182], [182, 181], \ +[181, 186], [186, 180], [180, 191], [191, 196], [196, 190], [190, \ +179], [179, 172], [172, 162], [162, 157], [157, 163], [163, 173], \ +[173, 159], [159, 151], [151, 168], [168, 174], [174, 175], [175, \ +169], [169, 153], [153, 167], [167, 171], [171, 166], [166, 152], \ +[152, 146], [146, 139], [139, 136], [136, 140], [140, 147], [147, \ +138], [138, 133], [133, 132], [132, 137], [137, 131], [131, 125], \ +[125, 114], [114, 107], [107, 121], [121, 126], [126, 127], [127, \ +122], [122, 109], [109, 120], [120, 124], [124, 119], [119, 108], \ +[108, 102], [102, 95], [95, 92], [92, 96], [96, 103], [103, 94], [94, \ +89], [89, 88], [88, 93], [93, 87], [87, 81], [81, 67], [67, 59], [59, \ +76], [76, 82], [82, 83], [83, 77], [77, 61], [61, 73], [73, 79], [79, \ +72], [72, 60], [60, 53], [53, 44], [44, 40], [40, 45], [45, 54], [54, \ +43], [43, 37], [37, 36], [36, 42], [42, 35], [35, 29], [29, 18], [18, \ +11], [11, 25], [25, 30], [30, 31], [31, 26], [26, 13], [13, 24], [24, \ +28], [28, 23], [23, 12], [12, 6], [6, 2], [2, 1]], \ +'outsideEdgeDegrees' : [72., 36., 120., 60., 90., 120., 60., 0., 30., \ +-60., -150., -120., -90., -60., -30., 144., 108., 72., 36., 0., -36., \ +-72., -108., -144., 30., 60., 90., 120., 60., 144., 108., 72., 36., \ +0., -36., -72., -108., -144., 30., -60., -150., -120., -90., -60., \ +-30., 144., 108., 72., 36., 0., -36., -72., -108., -144., 30., 60., \ +90., 120., 60., 0., 30., -60., -150., -120., -90., -60., -30., 144., \ +108., 72., 36., 0., -36., -72., -108., -144., 30., 60., 90., 120., \ +60., 0., 30., -60., -150., -120., -90., -60., -30., 144., 108., 72., \ +36., 0., -36., -72., -108., -144., 30., 60., 90., 120., 60., 0., 30., \ +-60., -150., -120., -90., -60., -30., 144., 108., 72., 36., 0., -36., \ +-72., -108., -144., 30., -60., -150., -120., -90., -60., -120., 180., \ +-150., 120., 30., 60., 90., 120., 150., -36., -72., -108., -144., \ +180., 144., 108., 72., 36., -150., -120., -90., -60., -120., -36., \ +-72., -108., -144., 180., 144., 108., 72., 36., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108.], \ +'insideEdgeIndices' : [[7, 13], [8, 14], [9, 15], [13, 19], [16, 20], \ +[25, 29], [26, 32], [30, 36], [31, 37], [32, 38], [38, 43], [50, 54], \ +[54, 61], [55, 62], [56, 63], [57, 64], [61, 68], [64, 69], [76, 81], \ +[77, 84], [82, 88], [83, 89], [84, 90], [90, 94], [99, 103], [103, \ +109], [104, 110], [105, 111], [109, 115], [112, 116], [121, 125], \ +[122, 128], [126, 132], [127, 133], [128, 134], [134, 138], [143, \ +147], [147, 153], [148, 154], [149, 155], [153, 160], [156, 161], \ +[168, 173], [169, 176], [173, 180], [174, 181], [175, 182], [176, \ +183], [183, 187], [194, 199], [199, 205], [200, 206], [201, 207], \ +[205, 211], [208, 212], [217, 221], [218, 224], [222, 228], [223, \ +229], [224, 230], [230, 233]]}, 'GreatRhombicuboctahedron' : \ +{'edgeCoordinates' : [[0., 4.12132], [0., 5.12132], [0.707107, \ +2.41421], [0.707107, 3.41421], [0.707107, 5.82843], [0.707107, \ +6.82843], [1.70711, 2.41421], [1.70711, 3.41421], [1.70711, 5.82843], \ +[1.70711, 6.82843], [1.91421, 3.25529], [1.91421, 5.98735], [2.41421, \ +2.38927], [2.41421, 4.12132], [2.41421, 5.12132], [2.41421, 6.85337], \ +[3.41421, 0.707107], [3.41421, 1.70711], [3.41421, 2.38927], \ +[3.41421, 4.12132], [3.41421, 5.12132], [3.41421, 6.85337], [3.41421, \ +7.53553], [3.41421, 8.53553], [3.91421, 3.25529], [3.91421, 5.98735], \ +[4.12132, 0.], [4.12132, 2.41421], [4.12132, 3.41421], [4.12132, \ +5.82843], [4.12132, 6.82843], [4.12132, 9.24264], [5.12132, 0.], \ +[5.12132, 2.41421], [5.12132, 3.41421], [5.12132, 5.82843], [5.12132, \ +6.82843], [5.12132, 9.24264], [5.32843, 3.25529], [5.32843, 5.98735], \ +[5.82843, 0.707107], [5.82843, 1.70711], [5.82843, 2.38927], \ +[5.82843, 4.12132], [5.82843, 5.12132], [5.82843, 6.85337], [5.82843, \ +7.53553], [5.82843, 8.53553], [6.82843, 2.38927], [6.82843, 4.12132], \ +[6.82843, 5.12132], [6.82843, 6.85337], [7.32843, 3.25529], [7.32843, \ +5.98735], [7.53553, 2.41421], [7.53553, 3.41421], [7.53553, 5.82843], \ +[7.53553, 6.82843], [8.53553, 2.41421], [8.53553, 3.41421], [8.53553, \ +5.82843], [8.53553, 6.82843], [8.74264, 3.25529], [8.74264, 5.98735], \ +[9.24264, 2.38927], [9.24264, 4.12132], [9.24264, 5.12132], [9.24264, \ +6.85337], [10.2426, 2.38927], [10.2426, 4.12132], [10.2426, 5.12132], \ +[10.2426, 6.85337], [10.7426, 3.25529], [10.7426, 5.98735], [10.9497, \ +2.41421], [10.9497, 3.41421], [10.9497, 5.82843], [10.9497, 6.82843], \ +[11.9497, 2.41421], [11.9497, 3.41421], [11.9497, 5.82843], [11.9497, \ +6.82843], [12.1569, 3.25529], [12.1569, 5.98735], [12.6569, 2.38927], \ +[12.6569, 4.12132], [12.6569, 5.12132], [12.6569, 6.85337], [13.6569, \ +2.38927], [13.6569, 4.12132], [13.6569, 5.12132], [13.6569, 6.85337], \ +[14.1569, 3.25529], [14.1569, 5.98735]], 'outsideEdgeIndices' : [[1, \ +2], [2, 5], [5, 6], [6, 10], [10, 9], [9, 15], [15, 12], [12, 16], \ +[16, 22], [22, 26], [26, 21], [21, 30], [30, 31], [31, 23], [23, 24], \ +[24, 32], [32, 38], [38, 48], [48, 47], [47, 37], [37, 36], [36, 45], \ +[45, 40], [40, 46], [46, 52], [52, 54], [54, 51], [51, 57], [57, 58], \ +[58, 62], [62, 61], [61, 67], [67, 64], [64, 68], [68, 72], [72, 74], \ +[74, 71], [71, 77], [77, 78], [78, 82], [82, 81], [81, 87], [87, 84], \ +[84, 88], [88, 92], [92, 94], [94, 91], [91, 90], [90, 93], [93, 89], \ +[89, 85], [85, 83], [83, 86], [86, 80], [80, 79], [79, 75], [75, 76], \ +[76, 70], [70, 73], [73, 69], [69, 65], [65, 63], [63, 66], [66, 60], \ +[60, 59], [59, 55], [55, 56], [56, 50], [50, 53], [53, 49], [49, 43], \ +[43, 39], [39, 44], [44, 35], [35, 34], [34, 42], [42, 41], [41, 33], \ +[33, 27], [27, 17], [17, 18], [18, 28], [28, 29], [29, 20], [20, 25], \ +[25, 19], [19, 13], [13, 11], [11, 14], [14, 8], [8, 7], [7, 3], [3, \ +4], [4, 1]], 'outsideEdgeDegrees' : [90., 45., 90., 0., -90., -45., \ +120., 60., 0., -60., -120., 45., 90., 135., 90., 45., 0., -45., -90., \ +-135., -90., -45., 120., 60., 0., -60., -120., 45., 90., 0., -90., \ +-45., 120., 60., 0., -60., -120., 45., 90., 0., -90., -45., 120., \ +60., 0., -60., -120., -90., -60., -120., 180., 120., 60., -135., \ +-90., 180., 90., 135., -60., -120., 180., 120., 60., -135., -90., \ +180., 90., 135., -60., -120., 180., 120., 60., -135., -90., -45., \ +-90., -135., 180., 135., 90., 45., 90., 135., -60., -120., 180., \ +120., 60., -135., -90., 180., 90., 135.], 'insideEdgeIndices' : [[4, \ +8], [5, 9], [14, 15], [14, 20], [15, 21], [20, 21], [28, 34], [29, \ +35], [30, 36], [31, 37], [44, 45], [44, 50], [45, 51], [50, 51], [56, \ +60], [57, 61], [66, 67], [66, 70], [67, 71], [70, 71], [76, 80], [77, \ +81], [86, 87], [86, 90], [87, 91]]}, 'Icosidodecahedron' : \ +{'edgeCoordinates' : [[0., 2.20071], [0.379874, 3.36984], [0.587785, \ +1.39169], [0.78661, 4.28339], [0.994522, 2.30524], [1.12302, \ +2.70071], [1.33093, 0.722562], [1.3744, 5.0924], [1.78113, 4.17886], \ +[1.98904, 2.20071], [1.98904, 3.20071], [2.19696, 1.22256], [2.19696, \ +4.17886], [2.32545, 0.], [2.53336, 0.978148], [2.60369, 5.0924], \ +[2.9401, 1.89169], [2.9401, 3.50973], [3.27651, 0.309017], [3.52789, \ +2.70071], [3.59821, 4.98787], [3.80613, 4.00973], [3.93462, 1.78716], \ +[3.93462, 3.61426], [4.14253, 0.809017], [4.27103, 2.03158], \ +[4.54927, 4.67886], [4.92914, 3.50973], [5.13706, 1.53158], [5.13706, \ +2.53158], [5.54379, 1.61803], [5.7517, 4.42327], [5.8802, 3.20071], \ +[6.15844, 0.553432], [6.15844, 3.50973], [6.49485, 5.0924], [6.53831, \ +1.72256], [6.74623, 1.36245], [6.74623, 2.70071], [7.15296, \ +0.448903], [7.15296, 3.61426], [7.36087, 4.5924], [7.36087, 5.5924], \ +[7.48937, 2.03158], [7.74075, 4.42327], [8.14748, 0.553432], \ +[8.14748, 3.50973], [8.3554, 1.53158], [8.3554, 2.53158], [8.48389, \ +5.0924], [8.76213, 1.61803], [9.09854, 3.20071], [9.14201, 3.61426], \ +[9.34992, 0.809017], [9.34992, 4.5924], [9.75665, 1.72256], [9.96457, \ +2.70071], [10.0931, 3.92327]], 'outsideEdgeIndices' : [[1, 5], [5, \ +10], [10, 6], [6, 2], [2, 4], [4, 8], [8, 9], [9, 11], [11, 13], [13, \ +16], [16, 21], [21, 27], [27, 22], [22, 18], [18, 24], [24, 28], [28, \ +33], [33, 39], [39, 35], [35, 32], [32, 36], [36, 43], [43, 42], [42, \ +41], [41, 45], [45, 50], [50, 55], [55, 58], [58, 53], [53, 47], [47, \ +52], [52, 57], [57, 56], [56, 54], [54, 51], [51, 49], [49, 48], [48, \ +46], [46, 40], [40, 34], [34, 38], [38, 44], [44, 37], [37, 31], [31, \ +30], [30, 29], [29, 26], [26, 20], [20, 23], [23, 25], [25, 19], [19, \ +14], [14, 15], [15, 17], [17, 12], [12, 7], [7, 3], [3, 1]], \ +'outsideEdgeDegrees' : [6., -6., 150., 138., 66., 54., -66., -78., \ +78., 66., -6., -18., -138., -150., 6., -6., -18., -30., 126., 114., \ +42., 30., -90., -102., 54., 42., -30., -42., -162., -174., -18., \ +-30., -102., -114., 126., 114., -90., -102., -174., 174., 54., 42., \ +-162., -174., 114., -90., 150., 138., -66., -78., -150., -162., 78., \ +66., -138., -150., 138., 126.], 'insideEdgeIndices' : [[3, 5], [4, \ +9], [6, 11], [10, 11], [10, 12], [10, 17], [11, 18], [13, 18], [15, \ +19], [17, 20], [17, 23], [18, 20], [20, 24], [21, 22], [26, 30], [28, \ +30], [30, 33], [35, 41], [36, 42], [37, 39], [38, 40], [39, 41], [39, \ +44], [41, 47], [44, 48], [44, 49], [45, 47], [47, 49], [49, 52], [51, \ +56], [53, 55]]}, 'SmallRhombicosidodecahedron' : {'edgeCoordinates' : \ +[[0., 5.31473], [0.172816, 2.4487], [0.172816, 3.4487], [0.587785, \ +4.50571], [0.587785, 6.12374], [0.672816, 1.58268], [0.672816, \ +4.31473], [0.672816, 6.31473], [1.17282, 2.4487], [1.17282, 3.4487], \ +[1.17282, 7.18075], [1.53884, 1.08268], [1.53884, 4.81473], [1.53884, \ +5.81473], [2.03884, 1.9487], [2.03884, 3.9487], [2.03884, 6.68075], \ +[2.12387, 2.13968], [2.12387, 3.75772], [2.53884, 4.81473], [2.53884, \ +5.81473], [2.71166, 2.9487], [2.73205, 5.31473], [2.90487, 2.4487], \ +[2.90487, 3.4487], [3.31984, 4.50571], [3.31984, 6.12374], [3.40487, \ +1.58268], [3.40487, 4.31473], [3.40487, 6.31473], [3.90487, 2.4487], \ +[3.90487, 3.4487], [3.90487, 7.18075], [4.11278, 8.1589], [4.27089, \ +1.08268], [4.27089, 4.81473], [4.27089, 5.81473], [4.77089, 1.9487], \ +[4.77089, 3.9487], [4.77089, 6.68075], [4.85592, 2.13968], [4.85592, \ +3.75772], [5.1073, 8.26343], [5.27089, 4.81473], [5.27089, 5.81473], \ +[5.44371, 2.9487], [5.4641, 5.31473], [5.51404, 7.34988], [5.63692, \ +2.4487], [5.63692, 3.4487], [6.05189, 4.50571], [6.05189, 6.12374], \ +[6.13692, 1.58268], [6.13692, 4.31473], [6.13692, 6.31473], [6.63692, \ +2.4487], [6.63692, 3.4487], [6.63692, 7.18075], [7.00294, 1.08268], \ +[7.00294, 4.81473], [7.00294, 5.81473], [7.50294, 1.9487], [7.50294, \ +3.9487], [7.50294, 6.68075], [7.58797, 2.13968], [7.58797, 3.75772], \ +[8.00294, 4.81473], [8.00294, 5.81473], [8.17576, 2.9487], [8.19615, \ +5.31473], [8.36897, 2.4487], [8.36897, 3.4487], [8.78394, 4.50571], \ +[8.78394, 6.12374], [8.86897, 1.58268], [8.86897, 4.31473], [8.86897, \ +6.31473], [9.36897, 2.4487], [9.36897, 3.4487], [9.36897, 7.18075], \ +[9.73499, 1.08268], [9.73499, 4.81473], [9.73499, 5.81473], [10.235, \ +1.9487], [10.235, 3.9487], [10.235, 6.68075], [10.32, 2.13968], \ +[10.32, 3.75772], [10.735, 4.81473], [10.735, 5.81473], [10.8579, \ +0.913545], [10.9078, 2.9487], [10.9282, 5.31473], [11.101, 2.4487], \ +[11.101, 3.4487], [11.2646, 0.], [11.516, 4.50571], [11.516, \ +6.12374], [11.601, 1.58268], [11.601, 4.31473], [11.601, 6.31473], \ +[12.101, 2.4487], [12.101, 3.4487], [12.101, 7.18075], [12.2591, \ +0.104528], [12.467, 1.08268], [12.467, 4.81473], [12.467, 5.81473], \ +[12.967, 1.9487], [12.967, 3.9487], [12.967, 6.68075], [13.0521, \ +2.13968], [13.0521, 3.75772], [13.467, 4.81473], [13.467, 5.81473], \ +[13.6399, 2.9487], [13.8331, 3.4487], [14.3331, 4.31473]], \ +'outsideEdgeIndices' : [[1, 5], [5, 14], [14, 8], [8, 11], [11, 17], \ +[17, 21], [21, 20], [20, 29], [29, 36], [36, 26], [26, 23], [23, 27], \ +[27, 37], [37, 30], [30, 33], [33, 34], [34, 43], [43, 48], [48, 40], \ +[40, 45], [45, 44], [44, 54], [54, 60], [60, 51], [51, 47], [47, 52], \ +[52, 61], [61, 55], [55, 58], [58, 64], [64, 68], [68, 67], [67, 76], \ +[76, 82], [82, 73], [73, 70], [70, 74], [74, 83], [83, 77], [77, 80], \ +[80, 86], [86, 90], [90, 89], [89, 100], [100, 107], [107, 97], [97, \ +93], [93, 98], [98, 108], [108, 101], [101, 104], [104, 111], [111, \ +115], [115, 114], [114, 118], [118, 117], [117, 110], [110, 103], \ +[103, 113], [113, 116], [116, 112], [112, 102], [102, 109], [109, \ +106], [106, 105], [105, 96], [96, 91], [91, 99], [99, 94], [94, 95], \ +[95, 85], [85, 79], [79, 88], [88, 92], [92, 87], [87, 78], [78, 84], \ +[84, 81], [81, 75], [75, 71], [71, 72], [72, 63], [63, 57], [57, 66], \ +[66, 69], [69, 65], [65, 56], [56, 62], [62, 59], [59, 53], [53, 49], \ +[49, 50], [50, 39], [39, 32], [32, 42], [42, 46], [46, 41], [41, 31], \ +[31, 38], [38, 35], [35, 28], [28, 24], [24, 25], [25, 16], [16, 10], \ +[10, 19], [19, 22], [22, 18], [18, 9], [9, 15], [15, 12], [12, 6], \ +[6, 2], [2, 3], [3, 7], [7, 13], [13, 4], [4, 1]], \ +'outsideEdgeDegrees' : [54., -18., 150., 60., -30., -60., -90., -30., \ +30., -162., 126., 54., -18., 150., 60., 78., 6., -66., -138., -60., \ +-90., -30., 30., -162., 126., 54., -18., 150., 60., -30., -60., -90., \ +-30., 30., -162., 126., 54., -18., 150., 60., -30., -60., -90., -30., \ +30., -162., 126., 54., -18., 150., 60., -30., -60., -90., -30., \ +-120., 150., -150., 18., -54., -126., 162., -30., -120., -102., \ +-174., 114., 42., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 60., 30., -162., 126.], \ +'insideEdgeIndices' : [[2, 9], [3, 10], [6, 9], [7, 10], [9, 10], \ +[13, 14], [13, 16], [13, 20], [14, 17], [14, 21], [16, 20], [24, 31], \ +[25, 29], [25, 32], [28, 31], [29, 32], [31, 32], [33, 40], [36, 37], \ +[36, 39], [36, 44], [37, 40], [37, 45], [39, 44], [49, 56], [50, 54], \ +[50, 57], [53, 56], [54, 57], [56, 57], [60, 61], [60, 63], [60, 67], \ +[61, 64], [61, 68], [63, 67], [71, 78], [72, 76], [72, 79], [75, 78], \ +[76, 79], [78, 79], [82, 83], [82, 85], [82, 89], [83, 86], [83, 90], \ +[85, 89], [94, 102], [95, 100], [95, 103], [99, 102], [99, 106], \ +[100, 103], [102, 103], [107, 108], [107, 110], [107, 114], [108, \ +111], [108, 115], [110, 114]]}, 'SmallRhombicuboctahedron' : \ +{'edgeCoordinates' : [[0., 1.], [0., 2.], [0., 3.], [0., 4.], [1., \ +1.], [1., 2.], [1., 3.], [1., 4.], [1.5, 1.13397], [1.5, 3.86603], \ +[2., 0.], [2., 1.], [2., 2.], [2., 3.], [2., 4.], [2., 5.], [3., 0.], \ +[3., 1.], [3., 2.], [3., 3.], [3., 4.], [3., 5.], [3.5, 1.13397], \ +[3.5, 3.86603], [4., 1.], [4., 2.], [4., 3.], [4., 4.], [5., 1.], \ +[5., 2.], [5., 3.], [5., 4.], [5.5, 1.13397], [5.5, 3.86603], [6., \ +1.], [6., 2.], [6., 3.], [6., 4.], [7., 1.], [7., 2.], [7., 3.], [7., \ +4.], [7.5, 1.13397], [7.5, 3.86603], [8., 2.], [8., 3.]], \ +'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 4], [4, 8], [8, 7], [7, \ +10], [10, 14], [14, 15], [15, 16], [16, 22], [22, 21], [21, 20], [20, \ +24], [24, 27], [27, 28], [28, 32], [32, 31], [31, 34], [34, 37], [37, \ +38], [38, 42], [42, 41], [41, 44], [44, 46], [46, 45], [45, 43], [43, \ +40], [40, 39], [39, 35], [35, 36], [36, 33], [33, 30], [30, 29], [29, \ +25], [25, 26], [26, 23], [23, 19], [19, 18], [18, 17], [17, 11], [11, \ +12], [12, 13], [13, 9], [9, 6], [6, 5], [5, 1]], 'outsideEdgeDegrees' \ +: [90., 90., 90., 0., -90., 60., -60., 90., 90., 0., -90., -90., 60., \ +-60., 90., 0., -90., 60., -60., 90., 0., -90., 60., -60., -90., \ +-120., 120., -90., 180., 90., -120., 120., -90., 180., 90., -120., \ +120., -90., -90., 180., 90., 90., -120., 120., -90., 180.], \ +'insideEdgeIndices' : [[2, 6], [3, 7], [6, 7], [6, 13], [7, 14], [12, \ +18], [13, 14], [13, 19], [14, 20], [15, 21], [19, 20], [19, 26], [20, \ +27], [26, 27], [26, 30], [27, 31], [30, 31], [30, 36], [31, 37], [36, \ +37], [36, 40], [37, 41], [40, 41], [40, 45], [41, 46]]}, 'SnubCube' : \ +{'edgeCoordinates' : [[0., 2.23205], [0., 3.23205], [0.866025, \ +1.73205], [0.866025, 2.73205], [1.36603, 0.866025], [1.36603, \ +3.59808], [1.86603, 1.73205], [1.86603, 2.73205], [1.86603, 3.73205], \ +[2.73205, 1.23205], [2.73205, 2.23205], [2.73205, 3.23205], [3.23205, \ +1.36603], [3.23205, 4.09808], [3.23205, 5.09808], [3.73205, 2.23205], \ +[3.73205, 3.23205], [3.73205, 4.23205], [4.09808, 4.59808], [4.09808, \ +5.59808], [4.23205, 1.36603], [4.59808, 1.73205], [4.59808, 2.73205], \ +[4.59808, 3.73205], [4.59808, 6.4641], [5.09808, 0.866025], [5.09808, \ +1.86603], [5.09808, 4.59808], [5.09808, 5.59808], [5.59808, 0.], \ +[5.59808, 2.73205], [5.59808, 3.73205], [5.59808, 4.73205], [5.9641, \ +5.09808], [6.09808, 0.866025], [6.09808, 1.86603], [6.4641, 2.23205], \ +[6.4641, 3.23205], [6.4641, 4.23205], [6.9641, 1.36603], [6.9641, \ +2.36603], [6.9641, 5.09808], [7.4641, 3.23205], [7.4641, 4.23205], \ +[8.33013, 2.73205], [8.33013, 3.73205]], 'outsideEdgeIndices' : [[1, \ +2], [2, 4], [4, 6], [6, 8], [8, 9], [9, 12], [12, 14], [14, 17], [17, \ +18], [18, 24], [24, 19], [19, 15], [15, 20], [20, 25], [25, 29], [29, \ +34], [34, 28], [28, 32], [32, 33], [33, 39], [39, 42], [42, 44], [44, \ +46], [46, 45], [45, 43], [43, 41], [41, 38], [38, 37], [37, 31], [31, \ +36], [36, 40], [40, 35], [35, 30], [30, 26], [26, 21], [21, 27], [27, \ +23], [23, 22], [22, 16], [16, 13], [13, 11], [11, 10], [10, 7], [7, \ +5], [5, 3], [3, 1]], 'outsideEdgeDegrees' : [90., -30., 60., -60., \ +90., -30., 60., -60., 90., -30., 120., 150., 30., 60., -60., -30., \ +-150., -60., 90., -30., 60., -60., -30., -90., 150., -120., 120., \ +-90., 150., -60., -30., -150., -120., 120., 150., 30., 120., -90., \ +150., -120., 120., -90., 150., -120., 120., 150.], \ +'insideEdgeIndices' : [[1, 4], [3, 4], [3, 7], [4, 8], [7, 8], [7, \ +11], [8, 11], [8, 12], [11, 12], [11, 16], [12, 17], [16, 17], [16, \ +23], [17, 23], [17, 24], [19, 20], [19, 28], [20, 29], [23, 24], [23, \ +31], [24, 28], [24, 32], [26, 27], [26, 35], [27, 31], [27, 36], [28, \ +29], [31, 32], [31, 38], [32, 38], [32, 39], [35, 36], [38, 39], [38, \ +43], [39, 44], [43, 44], [43, 46]]}, 'SnubDodecahedron' : \ +{'edgeCoordinates' : [[0., 8.41355], [0.406737, 7.5], [0.743145, \ +9.08268], [1.40126, 7.60453], [1.60917, 8.58268], [1.60917, 9.58268], \ +[2.4752, 7.08268], [2.4752, 8.08268], [2.4752, 9.08268], [2.4752, \ +10.0827], [2.4752, 11.0827], [2.59808, 8.91355], [3.00481, 8.], \ +[3.34122, 6.58268], [3.34122, 7.58268], [3.34122, 9.58268], [3.34122, \ +10.5827], [3.54913, 11.5608], [3.99933, 8.10453], [4.20725, 5.08268], \ +[4.20725, 6.08268], [4.20725, 7.08268], [4.20725, 8.08268], [4.20725, \ +9.08268], [4.20725, 10.0827], [4.33013, 6.91355], [4.54365, 11.6654], \ +[4.73686, 6.], [4.95039, 10.7518], [5.07327, 4.58268], [5.07327, \ +5.58268], [5.07327, 7.58268], [5.07327, 8.58268], [5.07327, 9.58268], \ +[5.07327, 10.5827], [5.07327, 11.5827], [5.28118, 9.56082], [5.73139, \ +6.10453], [5.9393, 3.08268], [5.9393, 4.08268], [5.9393, 5.08268], \ +[5.9393, 6.08268], [5.9393, 7.08268], [5.9393, 8.08268], [5.9393, \ +10.0827], [5.9393, 11.0827], [6.06218, 4.91355], [6.27571, 9.66535], \ +[6.46891, 4.], [6.68244, 8.75181], [6.80532, 2.58268], [6.80532, \ +3.58268], [6.80532, 5.58268], [6.80532, 6.58268], [6.80532, 7.58268], \ +[6.80532, 8.58268], [6.80532, 9.58268], [6.80532, 10.5827], [7.01323, \ +7.56082], [7.46344, 4.10453], [7.67135, 1.08268], [7.67135, 2.08268], \ +[7.67135, 3.08268], [7.67135, 4.08268], [7.67135, 5.08268], [7.67135, \ +6.08268], [7.67135, 8.08268], [7.67135, 9.08268], [7.79423, 2.91355], \ +[8.00776, 7.66535], [8.20097, 2.], [8.41449, 6.75181], [8.53737, \ +0.582676], [8.53737, 1.58268], [8.53737, 3.58268], [8.53737, \ +4.58268], [8.53737, 5.58268], [8.53737, 6.58268], [8.53737, 7.58268], \ +[8.53737, 8.58268], [8.74529, 5.56082], [9.19549, 2.10453], [9.4034, \ +0.0826761], [9.4034, 1.08268], [9.4034, 2.08268], [9.4034, 3.08268], \ +[9.4034, 4.08268], [9.4034, 6.08268], [9.4034, 7.08268], [9.52628, \ +0.913545], [9.73981, 5.66535], [9.93302, 0.], [10.1465, 4.75181], \ +[10.2694, 1.58268], [10.2694, 2.58268], [10.2694, 3.58268], [10.2694, \ +4.58268], [10.2694, 5.58268], [10.2694, 6.58268], [10.4773, 3.56082], \ +[10.9275, 0.104528], [11.1354, 1.08268], [11.1354, 2.08268], \ +[11.1354, 4.08268], [11.1354, 5.08268], [11.4719, 3.66535], [11.8786, \ +2.75181], [12.0015, 0.582676], [12.0015, 1.58268], [12.0015, \ +2.58268], [12.0015, 3.58268], [12.0015, 4.58268], [12.8675, 2.08268], \ +[12.8675, 3.08268], [13.0754, 4.06082], [13.7335, 2.58268], [14.0699, \ +4.16535], [14.4767, 3.25181]], 'outsideEdgeIndices' : [[1, 3], [3, \ +6], [6, 10], [10, 11], [11, 17], [17, 18], [18, 27], [27, 29], [29, \ +25], [25, 35], [35, 36], [36, 46], [46, 58], [58, 45], [45, 34], [34, \ +33], [33, 37], [37, 48], [48, 50], [50, 44], [44, 56], [56, 57], [57, \ +68], [68, 80], [80, 67], [67, 55], [55, 54], [54, 59], [59, 70], [70, \ +72], [72, 66], [66, 78], [78, 79], [79, 89], [89, 99], [99, 88], [88, \ +77], [77, 76], [76, 81], [81, 91], [91, 93], [93, 87], [87, 97], [97, \ +98], [98, 105], [105, 112], [112, 104], [104, 96], [96, 95], [95, \ +100], [100, 106], [106, 107], [107, 103], [103, 110], [110, 111], \ +[111, 114], [114, 115], [115, 117], [117, 118], [118, 116], [116, \ +113], [113, 109], [109, 108], [108, 102], [102, 101], [101, 92], [92, \ +90], [90, 94], [94, 84], [84, 83], [83, 73], [73, 61], [61, 74], [74, \ +85], [85, 86], [86, 82], [82, 71], [71, 69], [69, 75], [75, 63], [63, \ +62], [62, 51], [51, 39], [39, 52], [52, 64], [64, 65], [65, 60], [60, \ +49], [49, 47], [47, 53], [53, 41], [41, 40], [40, 30], [30, 20], [20, \ +31], [31, 42], [42, 43], [43, 38], [38, 28], [28, 26], [26, 32], [32, \ +22], [22, 21], [21, 14], [14, 7], [7, 15], [15, 23], [23, 24], [24, \ +19], [19, 13], [13, 12], [12, 16], [16, 9], [9, 8], [8, 5], [5, 4], \ +[4, 2], [2, 1]], 'outsideEdgeDegrees' : [42., 30., 30., 90., -30., \ +78., 6., -66., -138., 30., 90., -30., -30., -150., -150., -90., 78., \ +6., -66., -138., 30., 90., -30., -30., -150., -150., -90., 78., 6., \ +-66., -138., 30., 90., -30., -30., -150., -150., -90., 78., 6., -66., \ +-138., 30., 90., -30., -30., -150., -150., -90., 78., 6., -66., \ +-138., 30., 90., -30., 78., 6., -66., -138., -150., -150., -90., \ +150., -102., -174., 114., 42., -150., -90., 150., 150., 30., 30., \ +90., -102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., -102., -174., 114.], \ +'insideEdgeIndices' : [[3, 5], [5, 6], [5, 9], [6, 9], [9, 10], [10, \ +16], [10, 17], [14, 15], [14, 22], [15, 22], [16, 17], [16, 24], [16, \ +25], [17, 25], [22, 23], [23, 32], [23, 33], [24, 25], [24, 33], [24, \ +34], [25, 34], [30, 31], [30, 41], [31, 41], [32, 33], [32, 43], [32, \ +44], [33, 44], [34, 35], [35, 45], [35, 46], [41, 42], [42, 53], [42, \ +54], [43, 44], [43, 54], [43, 55], [44, 55], [45, 46], [51, 52], [51, \ +63], [52, 63], [53, 54], [53, 65], [53, 66], [54, 66], [55, 56], [56, \ +67], [56, 68], [63, 64], [64, 75], [64, 76], [65, 66], [65, 76], [65, \ +77], [66, 77], [67, 68], [73, 74], [73, 84], [74, 84], [75, 76], [75, \ +86], [75, 87], [76, 87], [77, 78], [78, 88], [78, 89], [84, 85], [85, \ +94], [85, 95], [86, 87], [86, 95], [86, 96], [87, 96], [88, 89], [94, \ +95], [94, 102], [94, 103], [95, 103], [96, 97], [97, 104], [97, 105], \ +[102, 103], [102, 109], [103, 109], [104, 105], [109, 110], [110, \ +113], [110, 114], [113, 114], [114, 116]]}, 'TruncatedCube' : \ +{'edgeCoordinates' : [[0., 3.12132], [0., 4.12132], [0.707107, \ +2.41421], [0.707107, 4.82843], [1.70711, 2.41421], [1.70711, \ +4.82843], [2.15539, 2.15539], [2.15539, 5.08725], [2.41421, \ +0.707107], [2.41421, 1.70711], [2.41421, 3.12132], [2.41421, \ +4.12132], [2.41421, 5.53553], [2.41421, 6.53553], [3.12132, 0.], \ +[3.12132, 2.41421], [3.12132, 4.82843], [3.12132, 7.24264], [4.12132, \ +0.], [4.12132, 2.41421], [4.12132, 4.82843], [4.12132, 7.24264], \ +[4.82843, 0.707107], [4.82843, 1.70711], [4.82843, 3.12132], \ +[4.82843, 4.12132], [4.82843, 5.53553], [4.82843, 6.53553], [5.08725, \ +2.15539], [5.08725, 5.08725], [5.53553, 2.41421], [5.53553, 4.82843], \ +[6.53553, 2.41421], [6.53553, 4.82843], [7.24264, 3.12132], [7.24264, \ +4.12132], [7.50146, 2.15539], [7.50146, 5.08725], [7.94975, 2.41421], \ +[7.94975, 4.82843], [8.94975, 2.41421], [8.94975, 4.82843], [9.65685, \ +3.12132], [9.65685, 4.12132], [9.91567, 2.15539], [9.91567, \ +5.08725]], 'outsideEdgeIndices' : [[1, 2], [2, 4], [4, 6], [6, 12], \ +[12, 8], [8, 17], [17, 13], [13, 14], [14, 18], [18, 22], [22, 28], \ +[28, 27], [27, 21], [21, 30], [30, 26], [26, 32], [32, 34], [34, 38], \ +[38, 36], [36, 40], [40, 42], [42, 46], [46, 44], [44, 43], [43, 45], \ +[45, 41], [41, 39], [39, 35], [35, 37], [37, 33], [33, 31], [31, 25], \ +[25, 29], [29, 20], [20, 24], [24, 23], [23, 19], [19, 15], [15, 9], \ +[9, 10], [10, 16], [16, 7], [7, 11], [11, 5], [5, 3], [3, 1]], \ +'outsideEdgeDegrees' : [90., 45., 0., -45., 105., -15., 135., 90., \ +45., 0., -45., -90., -135., 15., -105., 45., 0., 15., -105., 45., 0., \ +15., -105., -90., -75., 165., 180., 135., -75., 165., 180., 135., \ +-75., 165., -45., -90., -135., 180., 135., 90., 45., -165., 75., \ +-135., 180., 135.], 'insideEdgeIndices' : [[11, 12], [11, 16], [12, \ +17], [16, 20], [17, 21], [20, 25], [21, 26], [25, 26], [33, 35], [34, \ +36], [35, 36], [41, 43], [42, 44]]}, 'TruncatedDodecahedron' : \ +{'edgeCoordinates' : [[10.5902, 0.], [11.5902, 0.], [9.78115, \ +0.587785], [12.3992, 0.587785], [13.3773, 0.795697], [8.16312, \ +1.2606], [9.47214, 1.53884], [12.7082, 1.53884], [7.66312, 2.12663], \ +[8.66312, 2.12663], [13.5172, 2.12663], [14.5172, 2.12663], [9.78115, \ +2.4899], [12.3992, 2.4899], [9.67662, 2.67095], [12.5037, 2.67095], \ +[6.8541, 2.71441], [9.47214, 2.71441], [12.7082, 2.71441], [15.3262, \ +2.71441], [10.5902, 3.07768], [11.5902, 3.07768], [6.54508, 3.66547], \ +[9.78115, 3.66547], [12.3992, 3.66547], [15.6353, 3.66547], [6.8541, \ +4.61653], [9.47214, 4.61653], [12.7082, 4.61653], [15.3262, 4.61653], \ +[7.66312, 5.20431], [8.66312, 5.20431], [13.5172, 5.20431], [14.5172, \ +5.20431], [8.80301, 5.35967], [13.3773, 5.35967], [8.78115, 5.56758], \ +[9.78115, 5.56758], [12.3992, 5.56758], [13.3992, 5.56758], [15.4308, \ +5.61105], [4.14961, 6.1119], [7.97214, 6.15537], [10.5902, 6.15537], \ +[11.5902, 6.15537], [14.2082, 6.15537], [6.99399, 6.36328], [2.23607, \ +6.51864], [3.23607, 6.51864], [5.8541, 6.51864], [6.8541, 6.51864], \ +[11.0902, 7.02139], [1.42705, 7.10642], [4.04508, 7.10642], [5.04508, \ +7.10642], [7.66312, 7.10642], [10.8992, 7.10642], [11.2812, 7.10642], \ +[14.5172, 7.10642], [1.11803, 8.05748], [4.3541, 8.05748], [4.73607, \ +8.05748], [7.97214, 8.05748], [10.5902, 8.05748], [11.5902, 8.05748], \ +[14.2082, 8.05748], [4.54508, 8.14251], [8.78115, 8.64527], [9.78115, \ +8.64527], [12.3992, 8.64527], [13.3992, 8.64527], [8.64127, 8.80062], \ +[1.42705, 9.00854], [4.04508, 9.00854], [5.04508, 9.00854], [7.66312, \ +9.00854], [11.4856, 9.052], [0.204489, 9.55286], [2.23607, 9.59632], \ +[3.23607, 9.59632], [5.8541, 9.59632], [6.8541, 9.59632], [2.25792, \ +9.80423], [6.83225, 9.80423], [1.11803, 9.95959], [2.11803, 9.95959], \ +[6.97214, 9.95959], [7.97214, 9.95959], [0.309017, 10.5474], \ +[2.92705, 10.5474], [6.16312, 10.5474], [8.78115, 10.5474], [0., \ +11.4984], [3.23607, 11.4984], [5.8541, 11.4984], [9.09017, 11.4984], \ +[4.04508, 12.0862], [5.04508, 12.0862], [0.309017, 12.4495], \ +[2.92705, 12.4495], [6.16312, 12.4495], [8.78115, 12.4495], [3.13154, \ +12.493], [5.95863, 12.493], [3.23607, 12.674], [5.8541, 12.674], \ +[1.11803, 13.0373], [2.11803, 13.0373], [6.97214, 13.0373], [7.97214, \ +13.0373], [2.92705, 13.6251], [6.16312, 13.6251], [7.47214, 13.9033], \ +[2.25792, 14.3682], [3.23607, 14.5761], [5.8541, 14.5761], [4.04508, \ +15.1639], [5.04508, 15.1639]], 'outsideEdgeIndices' : [[93, 99], [99, \ +107], [107, 108], [108, 100], [100, 94], [94, 103], [103, 97], [97, \ +105], [105, 111], [111, 114], [114, 115], [115, 117], [117, 118], \ +[118, 116], [116, 112], [112, 106], [106, 98], [98, 104], [104, 95], \ +[95, 101], [101, 109], [109, 113], [113, 110], [110, 102], [102, 96], \ +[96, 92], [92, 88], [88, 87], [87, 91], [91, 84], [84, 81], [81, 82], \ +[82, 76], [76, 72], [72, 63], [63, 68], [68, 69], [69, 64], [64, 57], \ +[57, 44], [44, 52], [52, 45], [45, 58], [58, 65], [65, 77], [77, 70], \ +[70, 71], [71, 66], [66, 59], [59, 46], [46, 40], [40, 39], [39, 36], \ +[36, 29], [29, 33], [33, 34], [34, 41], [41, 30], [30, 26], [26, 20], \ +[20, 12], [12, 11], [11, 19], [19, 25], [25, 16], [16, 22], [22, 14], \ +[14, 8], [8, 5], [5, 4], [4, 2], [2, 1], [1, 3], [3, 7], [7, 13], \ +[13, 21], [21, 15], [15, 24], [24, 18], [18, 10], [10, 6], [6, 9], \ +[9, 17], [17, 23], [23, 27], [27, 31], [31, 32], [32, 28], [28, 35], \ +[35, 38], [38, 37], [37, 43], [43, 47], [47, 56], [56, 51], [51, 50], \ +[50, 55], [55, 62], [62, 75], [75, 67], [67, 74], [74, 61], [61, 54], \ +[54, 42], [42, 49], [49, 48], [48, 53], [53, 60], [60, 73], [73, 79], \ +[79, 80], [80, 83], [83, 90], [90, 86], [86, 85], [85, 78], [78, 89], \ +[89, 93]], 'outsideEdgeDegrees' : [72., 36., 0., -36., -72., 96., \ +-24., 144., 108., 132., 12., 36., 0., -36., -72., -108., -144., 24., \ +-96., 72., 36., 60., -60., -36., -72., -108., -144., 180., 144., \ +-48., -168., 0., -36., -12., -132., 36., 0., -36., -72., -108., 60., \ +-60., 108., 72., 96., -24., 0., -36., -72., -108., -144., 180., -12., \ +-132., 36., 0., 24., -96., -72., -108., -144., 180., 144., 108., \ +-84., 156., -36., -72., -48., -168., -144., 180., 144., 108., 72., \ +36., -156., 84., -108., -144., -120., 120., 144., 108., 72., 36., 0., \ +-36., 132., 12., 180., 144., 168., 48., -144., 180., 144., 108., 72., \ +-120., 120., -72., -108., -84., 156., 180., 144., 108., 72., 36., 0., \ +168., 48., -144., 180., -156., 84., 108.], 'insideEdgeIndices' : [[4, \ +8], [9, 10], [21, 22], [21, 24], [22, 25], [24, 28], [25, 29], [28, \ +38], [29, 39], [30, 34], [38, 44], [39, 45], [43, 56], [44, 45], [49, \ +54], [56, 63], [63, 76], [65, 70], [74, 75], [74, 80], [75, 81], [80, \ +90], [81, 91], [85, 89], [90, 94], [91, 95], [94, 97], [95, 98], [97, \ +98], [109, 110], [111, 115]]}, 'TruncatedIcosahedron' : \ +{'edgeCoordinates' : [[2.5, 0.], [1.69098, 0.587785], [3.30902, \ +0.587785], [2., 1.53884], [3., 1.53884], [5., 1.53884], [6., \ +1.53884], [8., 1.53884], [9., 1.53884], [11., 1.53884], [12., \ +1.53884], [14., 1.53884], [15., 1.53884], [1.5, 2.40487], [3.5, \ +2.40487], [4.5, 2.40487], [6.5, 2.40487], [7.5, 2.40487], [9.5, \ +2.40487], [10.5, 2.40487], [12.5, 2.40487], [13.5, 2.40487], [15.5, \ +2.40487], [1., 2.59808], [4., 2.59808], [7., 2.59808], [10., \ +2.59808], [13., 2.59808], [0.190983, 3.18586], [1.80902, 3.18586], \ +[3.19098, 3.18586], [4.80902, 3.18586], [6.19098, 3.18586], [7.80902, \ +3.18586], [9.19098, 3.18586], [10.809, 3.18586], [12.191, 3.18586], \ +[13.809, 3.18586], [2., 3.27089], [3., 3.27089], [5., 3.27089], [6., \ +3.27089], [8., 3.27089], [9., 3.27089], [11., 3.27089], [12., \ +3.27089], [14., 3.27089], [15., 3.27089], [0.5, 4.13692], [1.5, \ +4.13692], [3.5, 4.13692], [4.5, 4.13692], [6.5, 4.13692], [7.5, \ +4.13692], [9.5, 4.13692], [10.5, 4.13692], [12.5, 4.13692], [13.5, \ +4.13692], [15.5, 4.13692], [0., 5.00294], [2., 5.00294], [3., \ +5.00294], [5., 5.00294], [6., 5.00294], [8., 5.00294], [9., 5.00294], \ +[11., 5.00294], [12., 5.00294], [14., 5.00294], [15., 5.00294], [0.5, \ +5.86897], [1.5, 5.86897], [3.5, 5.86897], [4.5, 5.86897], [6.5, \ +5.86897], [7.5, 5.86897], [9.5, 5.86897], [10.5, 5.86897], [12.5, \ +5.86897], [13.5, 5.86897], [1.69098, 5.954], [3.30902, 5.954], \ +[4.69098, 5.954], [6.30902, 5.954], [7.69098, 5.954], [9.30902, \ +5.954], [10.691, 5.954], [12.309, 5.954], [13.691, 5.954], [15.309, \ +5.954], [2.5, 6.54179], [5.5, 6.54179], [8.5, 6.54179], [11.5, \ +6.54179], [14.5, 6.54179], [0., 6.73499], [2., 6.73499], [3., \ +6.73499], [5., 6.73499], [6., 6.73499], [8., 6.73499], [9., 6.73499], \ +[11., 6.73499], [12., 6.73499], [14., 6.73499], [0.5, 7.60102], [1.5, \ +7.60102], [3.5, 7.60102], [4.5, 7.60102], [6.5, 7.60102], [7.5, \ +7.60102], [9.5, 7.60102], [10.5, 7.60102], [12.5, 7.60102], [13.5, \ +7.60102], [3.19098, 8.55208], [4.80902, 8.55208], [4., 9.13986]], \ +'outsideEdgeIndices' : [[60, 71], [71, 96], [96, 106], [106, 107], \ +[107, 97], [97, 72], [72, 61], [61, 81], [81, 91], [91, 82], [82, \ +62], [62, 73], [73, 98], [98, 108], [108, 116], [116, 118], [118, \ +117], [117, 109], [109, 99], [99, 74], [74, 63], [63, 83], [83, 92], \ +[92, 84], [84, 64], [64, 75], [75, 100], [100, 110], [110, 111], \ +[111, 101], [101, 76], [76, 65], [65, 85], [85, 93], [93, 86], [86, \ +66], [66, 77], [77, 102], [102, 112], [112, 113], [113, 103], [103, \ +78], [78, 67], [67, 87], [87, 94], [94, 88], [88, 68], [68, 79], [79, \ +104], [104, 114], [114, 115], [115, 105], [105, 80], [80, 69], [69, \ +89], [89, 95], [95, 90], [90, 70], [70, 59], [59, 48], [48, 23], [23, \ +13], [13, 12], [12, 22], [22, 47], [47, 58], [58, 38], [38, 28], [28, \ +37], [37, 57], [57, 46], [46, 21], [21, 11], [11, 10], [10, 20], [20, \ +45], [45, 56], [56, 36], [36, 27], [27, 35], [35, 55], [55, 44], [44, \ +19], [19, 9], [9, 8], [8, 18], [18, 43], [43, 54], [54, 34], [34, \ +26], [26, 33], [33, 53], [53, 42], [42, 17], [17, 7], [7, 6], [6, \ +16], [16, 41], [41, 52], [52, 32], [32, 25], [25, 31], [31, 51], [51, \ +40], [40, 15], [15, 5], [5, 3], [3, 1], [1, 2], [2, 4], [4, 14], [14, \ +39], [39, 50], [50, 30], [30, 24], [24, 29], [29, 49], [49, 60]], \ +'outsideEdgeDegrees' : [60., 120., 60., 0., -60., -120., -60., 108., \ +36., -36., -108., 60., 120., 60., 108., 36., -36., -108., -60., \ +-120., -60., 108., 36., -36., -108., 60., 120., 60., 0., -60., -120., \ +-60., 108., 36., -36., -108., 60., 120., 60., 0., -60., -120., -60., \ +108., 36., -36., -108., 60., 120., 60., 0., -60., -120., -60., 108., \ +36., -36., -108., -60., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., -72., -144., 144., 72., \ +120., 60., 120., -72., -144., 144., 72., 120.], 'insideEdgeIndices' : \ +[[4, 5], [39, 40], [41, 42], [43, 44], [45, 46], [47, 48], [49, 50], \ +[50, 61], [51, 52], [51, 62], [52, 63], [53, 54], [53, 64], [54, 65], \ +[55, 56], [55, 66], [56, 67], [57, 58], [57, 68], [58, 69], [61, 62], \ +[63, 64], [65, 66], [67, 68], [69, 70], [71, 72], [73, 74], [75, 76], \ +[77, 78], [79, 80], [108, 109]]}, 'TruncatedOctahedron' : \ +{'edgeCoordinates' : [[0., 2.59808], [0.5, 1.73205], [0.5, 3.4641], \ +[0.5, 4.4641], [1.5, 1.73205], [1.5, 3.4641], [1.5, 4.4641], [2., \ +1.59808], [2., 2.59808], [2., 4.33013], [3., 0.866025], [3., \ +1.59808], [3., 2.59808], [3., 4.33013], [3.5, 0.], [3.5, 1.73205], \ +[3.5, 3.4641], [3.5, 4.4641], [4.5, 0.], [4.5, 1.73205], [4.5, \ +3.4641], [4.5, 4.4641], [4.5, 5.19615], [5., 0.866025], [5., \ +1.59808], [5., 2.59808], [5., 4.33013], [5., 6.06218], [6., 1.59808], \ +[6., 2.59808], [6., 4.33013], [6., 6.06218], [6.5, 1.73205], [6.5, \ +3.4641], [6.5, 4.4641], [6.5, 5.19615], [7.5, 1.73205], [7.5, \ +3.4641], [7.5, 4.4641], [8., 1.59808], [8., 2.59808], [8., 4.33013], \ +[9., 1.59808], [9., 2.59808], [9., 4.33013], [9.5, 3.4641]], \ +'outsideEdgeIndices' : [[1, 3], [3, 4], [4, 7], [7, 6], [6, 10], [10, \ +14], [14, 17], [17, 18], [18, 22], [22, 21], [21, 27], [27, 23], [23, \ +28], [28, 32], [32, 36], [36, 31], [31, 34], [34, 35], [35, 39], [39, \ +38], [38, 42], [42, 45], [45, 46], [46, 44], [44, 43], [43, 40], [40, \ +41], [41, 37], [37, 33], [33, 30], [30, 29], [29, 25], [25, 26], [26, \ +20], [20, 24], [24, 19], [19, 15], [15, 11], [11, 16], [16, 13], [13, \ +12], [12, 8], [8, 9], [9, 5], [5, 2], [2, 1]], 'outsideEdgeDegrees' : \ +[60., 90., 0., -90., 60., 0., -60., 90., 0., -90., 60., 120., 60., \ +0., -60., -120., -60., 90., 0., -90., 60., 0., -60., -120., -90., \ +180., 90., -120., 180., 120., -90., 180., 90., -120., -60., -120., \ +180., 120., 60., 120., -90., 180., 90., -120., 180., 120.], \ +'insideEdgeIndices' : [[3, 6], [6, 9], [9, 13], [13, 17], [16, 20], \ +[17, 21], [21, 26], [26, 30], [27, 31], [30, 34], [34, 38], [38, 41], \ +[41, 44]]}, 'TruncatedTetrahedron' : {'edgeCoordinates' : [[0., \ +1.73205], [0.5, 0.866025], [0.5, 2.59808], [1., 0.], [1.5, 0.866025], \ +[1.5, 2.59808], [2., 0.], [2., 1.73205], [2.5, 2.59808], [3., 0.], \ +[3., 1.73205], [3.5, 0.866025], [3.5, 2.59808], [4., 0.], [4.5, \ +0.866025], [4.5, 2.59808], [5., 0.], [5., 1.73205], [5.5, 2.59808], \ +[6., 0.], [6., 1.73205], [6.5, 0.866025]], 'outsideEdgeIndices' : \ +[[1, 3], [3, 6], [6, 8], [8, 9], [9, 11], [11, 13], [13, 16], [16, \ +18], [18, 19], [19, 21], [21, 22], [22, 20], [20, 17], [17, 15], [15, \ +14], [14, 12], [12, 10], [10, 7], [7, 5], [5, 4], [4, 2], [2, 1]], \ +'outsideEdgeDegrees' : [60., 0., -60., 60., -60., 60., 0., -60., 60., \ +-60., -60., -120., 180., 120., -120., 120., -120., 180., 120., -120., \ +120., 120.], 'insideEdgeIndices' : [[2, 5], [5, 8], [8, 11], [11, \ +12], [12, 15], [15, 18], [18, 21]]}, 'DeltoidalHexecontahedron' : \ +{'edgeCoordinates' : [[0., 5.24151], [0.24835, 4.27284], [0.597438, \ +3.33575], [0.735523, 5.91901], [1.44482, 2.13209], [1.53837, \ +6.51519], [1.5881, 3.1994], [1.69317, 1.16342], [1.71721, 4.73332], \ +[2.04226, 0.226332], [2.14857, 3.25565], [2.18034, 2.80959], \ +[2.33226, 7.75479], [2.44369, 6.09045], [2.58061, 6.78612], [2.84461, \ +6.28852], [2.98319, 3.40577], [3.03292, 0.0899751], [3.06779, \ +8.43229], [3.09238, 3.58615], [3.16203, 1.6239], [3.24828, 4.57393], \ +[3.29918, 5.57263], [3.50745, 5.53976], [3.87064, 9.02847], [3.88851, \ +2.98103], [4.03243, 0.0588187], [4.04947, 7.24659], [4.48084, \ +5.76892], [4.53325, 0.924372], [4.6931, 1.46451], [4.744, 2.46321], \ +[4.75401, 4.25401], [4.77595, 8.60372], [4.8697, 2.29393], [5.04412, \ +5.76577], [5.11805, 1.32526], [5.42464, 6.09943], [5.46714, \ +0.388167], [5.58054, 7.0872], [5.60522, 2.97143], [5.63144, 8.0859], \ +[6.01488, 5.52573], [6.26323, 4.55706], [6.40807, 3.56761], [6.4578, \ +0.25181], [6.58691, 1.78573], [6.61232, 3.61997], [6.75041, 6.20323], \ +[7.24269, 6.47701], [7.31339, 3.14286], [7.45731, 0.220653], \ +[7.60298, 3.48362], [7.73209, 5.01754], [7.75298, 2.79065], [7.95813, \ +1.08621], [8.20626, 6.74445], [8.36491, 1.99973], [8.60249, 3.45246], \ +[8.79511, 3.36669], [8.89816, 6.02245], [9.10331, 4.31801], [9.48701, \ +2.6447], [9.51009, 5.23154], [10.2512, 1.99967], [10.5073, 5.30593], \ +[10.519, 7.9539], [10.5406, 3.76695], [10.9049, 7.03133], [11.1488, \ +8.73065], [11.1812, 2.3672], [11.2381, 6.57715], [11.5068, 5.27478], \ +[11.5803, 1.36702], [11.6419, 2.69135], [11.857, 9.43668], [11.8855, \ +4.93896], [11.8885, 2.31834], [11.9528, 4.37971], [12.0022, 5.93212], \ +[12.2722, 0.645027], [12.2917, 7.6994], [12.2953, 3.23187], [12.3019, \ +3.44262], [12.8142, 9.14734], [12.9322, 6.29966], [13.0364, 0.], \ +[13.2925, 3.30626], [13.3258, 1.76728], [13.4216, 4.84018], [13.7356, \ +8.75869], [13.8183, 6.76319], [13.8297, 7.76313], [13.8958, 6.5671], \ +[13.9664, 0.367534], [14.204, 7.51842], [14.292, 3.27511], [14.4846, \ +3.18934], [14.4985, 7.99861], [14.5877, 5.8451], [14.738, 2.38004], \ +[14.7928, 4.14066], [14.8525, 0.831067], [14.8639, 1.831], [15.1765, \ +2.46734], [15.1996, 5.05419], [15.2067, 8.70463], [15.3519, 5.20008], \ +[15.6413, 6.96736], [15.9407, 1.82232], [16.1639, 8.41529], [16.1969, \ +5.12858], [16.2302, 3.5896], [16.2819, 5.56761], [16.7527, 5.03753], \ +[16.8707, 2.18985], [17.0853, 8.02664], [17.1679, 6.03114], [17.1793, \ +7.03108], [17.6741, 4.64888], [17.7568, 2.65338], [17.7682, \ +3.65332]], 'outsideEdgeIndices' : [[1, 4], [4, 6], [6, 14], [14, 23], \ +[23, 22], [22, 24], [24, 16], [16, 28], [28, 15], [15, 13], [13, 19], \ +[19, 25], [25, 34], [34, 42], [42, 40], [40, 38], [38, 29], [29, 33], \ +[33, 36], [36, 43], [43, 49], [49, 54], [54, 50], [50, 57], [57, 61], \ +[61, 64], [64, 66], [66, 73], [73, 79], [79, 90], [90, 77], [77, 80], \ +[80, 72], [72, 82], [82, 69], [69, 67], [67, 70], [70, 76], [76, 85], \ +[85, 91], [91, 93], [93, 92], [92, 86], [86, 94], [94, 96], [96, \ +109], [109, 99], [99, 107], [107, 111], [111, 117], [117, 119], [119, \ +118], [118, 114], [114, 108], [108, 100], [100, 106], [106, 112], \ +[112, 113], [113, 115], [115, 120], [120, 122], [122, 121], [121, \ +116], [116, 110], [110, 105], [105, 98], [98, 102], [102, 97], [97, \ +101], [101, 89], [89, 104], [104, 103], [103, 95], [95, 87], [87, \ +81], [81, 74], [74, 78], [78, 83], [83, 88], [88, 84], [84, 75], [75, \ +68], [68, 71], [71, 65], [65, 63], [63, 60], [60, 62], [62, 59], [59, \ +53], [53, 48], [48, 44], [44, 45], [45, 51], [51, 47], [47, 55], [55, \ +58], [58, 56], [56, 52], [52, 46], [46, 39], [39, 37], [37, 35], [35, \ +41], [41, 32], [32, 31], [31, 21], [21, 30], [30, 27], [27, 18], [18, \ +10], [10, 8], [8, 5], [5, 12], [12, 17], [17, 26], [26, 20], [20, \ +11], [11, 9], [9, 7], [7, 3], [3, 2], [2, 1]], 'outsideEdgeDegrees' : \ +[42.6486, 36.5969, -25.1345, -31.1861, -92.9175, 74.9792, 131.517, \ +38.4907, -162.594, 104.38, 42.6486, 36.5969, -25.1345, -31.1861, \ +-92.9175, -98.9692, -160.7, -79.778, 79.137, -13.8888, 42.6486, \ +-50.3773, 108.538, 15.5119, -46.2194, -52.2711, 4.26627, -1.78542, \ +-63.5167, 17.4057, 176.321, 83.2949, 139.832, 46.8064, -154.278, \ +112.696, 50.9643, 44.9126, -16.8187, -22.8704, -84.6017, -90.6534, \ +-152.385, 15.5119, 72.0493, -20.9766, 137.938, 44.9126, -16.8187, \ +-22.8704, -84.6017, -90.6534, -152.385, -158.436, 139.832, -52.2711, \ +4.26627, -88.7596, 70.1555, -22.8704, -84.6017, -90.6534, -152.385, \ +-158.436, 139.832, 133.781, 72.0493, -120.054, -63.5167, -156.543, \ +2.37247, -90.6534, -152.385, -158.436, 139.832, 133.781, 72.0493, \ +65.9976, 4.26627, 172.163, -131.3, 135.674, -65.4105, -158.436, \ +139.832, 133.781, 72.0493, -120.054, 178.215, 172.163, 110.432, \ +-81.6718, -25.1345, -118.16, 40.7548, -52.2711, -114.002, -120.054, \ +178.215, 172.163, 110.432, 104.38, 42.6486, -149.455, -92.9175, \ +174.057, -27.0283, -120.054, 178.215, 172.163, 110.432, 104.38, \ +42.6486, 36.5969, -25.1345, 142.762, -160.7, 106.274, -94.8113, \ +172.163, 110.432, 104.38], 'insideEdgeIndices' : [[2, 9], [4, 9], [8, \ +21], [9, 14], [9, 22], [12, 21], [18, 21], [19, 28], [20, 22], [21, \ +26], [22, 33], [24, 29], [26, 32], [26, 33], [28, 29], [28, 34], [28, \ +40], [33, 41], [33, 44], [37, 47], [41, 45], [41, 47], [43, 44], [44, \ +54], [46, 47], [47, 56], [53, 54], [54, 61], [54, 62], [62, 64], [62, \ +68], [63, 68], [66, 68], [68, 79], [70, 82], [78, 89], [79, 84], [80, \ +86], [81, 89], [82, 85], [82, 86], [82, 93], [86, 90], [88, 89], [88, \ +90], [88, 97], [89, 95], [90, 100], [90, 102], [94, 100], [100, 109], \ +[102, 106], [102, 113], [105, 113], [109, 111], [109, 114], [109, \ +119], [113, 116], [113, 122]]}, 'DeltoidalIcositetrahedron' : \ +{'edgeCoordinates' : [[0., 2.83078], [0.0111126, 3.07792], [0.289775, \ +1.57078], [0.412803, 4.30683], [0.753236, 0.982143], [0.927224, \ +4.85149], [0.996875, 2.90978], [1.49376, 2.04196], [1.56964, 3.7295], \ +[1.91007, 0.404813], [2.1312, 5.32267], [2.15291, 0.357629], \ +[2.22076, 1.35532], [2.35533, 4.34811], [2.3773, 5.34787], [2.50958, \ +2.84176], [3.15199, 1.71976], [3.2501, 3.90157], [3.44177, 0.459757], \ +[3.65179, 5.13048], [3.71356, 3.31293], [3.93769, 2.33837], [4.09193, \ +0.832016], [4.83245, 1.89183], [4.91469, 2.12514], [4.96458, \ +1.88284], [5.00241, 3.41506], [5.5548, 0.732533], [5.91156, 2.20414], \ +[6.14858, 0.275679], [6.26557, 3.13938], [6.57284, 4.93183], \ +[6.60628, 1.48485], [6.80446, 3.65985], [7.39468, 2.50954], [7.41174, \ +0.], [7.47959, 0.997696], [7.65874, 0.0138732], [7.75144, 3.98115], \ +[7.86502, 4.97467], [8.10544, 4.91639], [8.29286, 1.57958], [8.44615, \ +3.26186], [8.88308, 0.42927], [8.90266, 2.37214], [9.23455, 4.28655], \ +[9.42197, 0.949744], [9.67049, 3.67725], [9.87966, 2.15891], \ +[9.90211, 2.40528]], 'outsideEdgeIndices' : [[1, 7], [7, 2], [2, 4], \ +[4, 9], [9, 6], [6, 11], [11, 14], [14, 15], [15, 20], [20, 18], [18, \ +16], [16, 21], [21, 27], [27, 31], [31, 35], [35, 34], [34, 32], [32, \ +40], [40, 39], [39, 41], [41, 46], [46, 43], [43, 48], [48, 50], [50, \ +45], [45, 49], [49, 47], [47, 42], [42, 44], [44, 38], [38, 37], [37, \ +36], [36, 30], [30, 33], [33, 28], [28, 26], [26, 29], [29, 25], [25, \ +22], [22, 24], [24, 23], [23, 17], [17, 19], [19, 12], [12, 13], [13, \ +10], [10, 5], [5, 8], [8, 3], [3, 1]], 'outsideEdgeDegrees' : \ +[4.53063, 170.32, 71.8991, -26.522, 119.794, 21.3727, -77.0483, \ +88.7412, -9.67985, -108.101, -124.943, 21.3727, 4.53063, -12.3115, \ +-29.1536, 117.162, 100.32, 1.89899, -96.5221, 69.2675, -29.1536, \ +-127.575, 18.7411, -79.68, -178.101, -12.3115, -110.733, 150.846, \ +-62.8378, -161.259, 100.32, -93.8904, 167.689, 69.2675, -144.417, \ +117.162, 18.7411, -175.469, 167.689, -26.522, -124.943, 136.636, \ +-77.0483, -175.469, 86.1096, -108.101, 153.478, 55.057, -158.627, \ +102.952], 'insideEdgeIndices' : [[7, 8], [7, 9], [8, 13], [8, 16], \ +[9, 14], [9, 16], [13, 17], [14, 18], [16, 17], [17, 22], [21, 22], \ +[25, 27], [29, 31], [29, 33], [33, 35], [33, 37], [34, 39], [35, 42], \ +[35, 43], [37, 42], [39, 43], [42, 45], [43, 45]]}, \ +'DisdyakisDodecahedron' : {'edgeCoordinates' : [[0., 2.57676], \ +[0.085127, 2.06871], [0.191077, 3.90076], [0.314609, 4.13055], \ +[0.697332, 0.879308], [0.88902, 0.702332], [0.995539, 2.48241], \ +[1.31356, 5.02024], [1.42548, 3.38527], [1.69629, 1.769], [1.78429, \ +5.22948], [1.9414, 4.2419], [2.12342, 0.186845], [2.46326, 1.12733], \ +[2.60372, 2.75187], [2.63664, 0.142471], [2.923, 4.05092], [3.11408, \ +5.37491], [3.32899, 1.62784], [3.8732, 3.17364], [3.9412, 0.438438], \ +[4.14179, 2.21038], [4.16042, 0.579887], [4.96769, 1.64656], \ +[5.13875, 2.13246], [5.17776, 3.4696], [5.2812, 1.63741], [6.02492, \ +0.525498], [6.13856, 2.15213], [6.23552, 0.37151], [6.46284, \ +3.09809], [6.91602, 1.5232], [7.349, 5.25137], [7.46257, 3.91849], \ +[7.5206, 0.], [7.70558, 2.60304], [7.7511, 0.973074], [8.03554, \ +0.0143809], [8.45363, 4.05193], [8.55417, 1.56895], [8.66804, \ +5.02867], [8.91874, 3.16668], [9.12577, 4.79235], [9.29532, 2.24029], \ +[9.29789, 0.457034], [9.49957, 0.622536], [10.0712, 3.84594], \ +[10.1801, 1.77422], [10.1811, 3.60933], [10.2947, 2.27646]], \ +'outsideEdgeIndices' : [[1, 3], [3, 9], [9, 4], [4, 8], [8, 12], [12, \ +11], [11, 18], [18, 17], [17, 15], [15, 20], [20, 26], [26, 31], [31, \ +36], [36, 34], [34, 33], [33, 41], [41, 39], [39, 43], [43, 47], [47, \ +42], [42, 49], [49, 50], [50, 44], [44, 48], [48, 46], [46, 40], [40, \ +45], [45, 38], [38, 37], [37, 35], [35, 30], [30, 32], [32, 28], [28, \ +27], [27, 29], [29, 25], [25, 22], [22, 24], [24, 23], [23, 19], [19, \ +21], [21, 16], [16, 14], [14, 13], [13, 6], [6, 10], [10, 5], [5, 2], \ +[2, 7], [7, 1]], 'outsideEdgeDegrees' : [81.7878, -22.6655, 146.142, \ +41.689, -51.109, 99.0392, 6.24114, -98.2122, -103.808, 18.3785, \ +12.7824, -16.1242, -21.7203, 100.466, 94.8703, -9.58298, -102.381, \ +47.7672, -45.0309, -149.484, 19.3237, -85.1297, -177.928, -27.7795, \ +-120.578, 134.969, -56.223, -160.676, 106.526, -103.326, 163.876, \ +59.4224, -131.77, 123.777, 30.9789, -178.873, 175.531, -34.3208, \ +-127.119, 128.428, -62.7643, -167.218, 99.9844, -109.867, 157.335, \ +52.8812, -138.311, 117.236, 24.4377, 174.586], 'insideEdgeIndices' : \ +[[3, 7], [4, 12], [5, 7], [6, 14], [7, 9], [7, 10], [7, 15], [9, 12], \ +[9, 15], [10, 14], [10, 15], [12, 15], [12, 17], [12, 18], [14, 15], \ +[14, 19], [14, 21], [15, 19], [15, 22], [19, 22], [20, 22], [22, 23], \ +[22, 26], [25, 26], [26, 29], [28, 29], [29, 31], [29, 32], [29, 36], \ +[30, 37], [32, 36], [32, 37], [33, 39], [34, 39], [36, 37], [36, 39], \ +[36, 40], [36, 42], [36, 44], [37, 40], [37, 45], [39, 42], [39, 47], \ +[40, 44], [42, 44], [44, 46], [44, 49]]}, 'DisdyakisTriacontahedron' \ +: {'edgeCoordinates' : [[0., 5.2298], [0.104202, 6.22435], [0.243333, \ +7.21463], [0.600263, 1.88276], [0.704465, 2.87731], [0.843596, \ +3.86759], [0.843794, 4.69313], [1.19178, 7.53157], [1.44406, \ +1.34609], [1.66335, 6.03321], [1.70595, 4.18648], [1.79204, 4.18453], \ +[2.15079, 7.81495], [2.26361, 2.68617], [2.30621, 0.839446], \ +[2.68608, 4.49496], [2.75105, 4.46791], [2.79812, 7.16203], [2.83199, \ +7.08285], [2.90232, 8.15658], [3.04145, 9.14686], [3.10267, 5.40405], \ +[3.14409, 1.38531], [3.43225, 3.73582], [3.48473, 6.39758], [3.48701, \ +6.32724], [3.89546, 1.04331], [3.96224, 1.96031], [3.9899, 9.4638], \ +[3.99966, 2.03787], [4.08727, 2.98021], [4.13879, 3.02814], [4.46147, \ +7.96544], [4.48473, 6.39479], [4.56323, 4.82593], [4.73925, \ +0.506645], [4.9489, 9.74718], [5.08724, 3.34509], [5.4842, 6.42719], \ +[5.55881, 1.84672], [5.60141, 0.], [5.63011, 9.01508], [5.90079, \ +7.33628], [6.02394, 3.69521], [6.04624, 3.62846], [6.12814, 4.68976], \ +[6.19729, 5.68737], [6.26727, 5.68004], [6.28513, 8.25947], [6.43928, \ +0.545861], [6.86773, 3.15854], [6.92284, 3.09236], [7.10748, \ +2.10956], [7.11821, 6.25599], [7.25743, 1.12087], [7.68729, 4.49862], \ +[7.72989, 2.6519], [8.08927, 6.01713], [8.56776, 3.19776], [9.05132, \ +5.74426], [9.23596, 4.76145], [9.38592, 3.77276], [9.45508, 3.78575], \ +[9.84873, 6.34769], [10.4261, 3.5469], [10.6669, 6.9227], [10.6898, \ +2.76459], [10.7744, 5.07862], [10.8744, 1.78178], [11.0935, \ +0.806084], [11.405, 3.34236], [11.4872, 3.36802], [11.5463, 6.4467], \ +[12.0646, 0.56723], [12.2351, 3.94789], [12.3053, 3.94303], [12.3393, \ +4.94245], [12.4085, 5.94006], [12.4129, 2.09895], [12.7445, 7.54828], \ +[13.0434, 0.36269], [13.0806, 8.4901], [13.1848, 3.46703], [13.2168, \ +6.57443], [13.2312, 6.64331], [13.4497, 9.41951], [13.6629, 1.1477], \ +[13.9081, 4.86143], [14.0469, 2.96039], [14.0804, 3.02227], [14.2023, \ +6.40445], [14.2544, 1.95402], [14.2651, 2.03947], [14.4462, 9.50352], \ +[14.4842, 1.06377], [14.5506, 7.93617], [14.8779, 3.62571], [15.1811, \ +6.19991], [15.2498, 6.21533], [15.4344, 5.23253], [15.445, 9.55242], \ +[15.4553, 0.824915], [15.6535, 4.25683], [15.696, 4.20071], [15.8006, \ +6.98492], [15.8036, 2.35663], [15.872, 7.03303], [15.934, 8.68017], \ +[16.3921, 7.79125], [16.4341, 0.620376], [16.6246, 4.01797], [16.698, \ +3.97288], [16.8685, 7.11704], [16.9729, 5.54969], [17.0536, 1.40539], \ +[17.187, 3.10063], [17.6034, 3.81343], [17.6451, 2.21171], [17.8673, \ +7.16594], [18.2229, 4.59844], [18.3563, 6.29369], [18.8144, \ +5.40477]], 'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 8], [8, 13], \ +[13, 19], [19, 26], [26, 34], [34, 25], [25, 33], [33, 18], [18, 20], \ +[20, 21], [21, 29], [29, 37], [37, 42], [42, 49], [49, 43], [43, 39], \ +[39, 35], [35, 47], [47, 46], [46, 48], [48, 56], [56, 54], [54, 58], \ +[58, 60], [60, 64], [64, 66], [66, 73], [73, 78], [78, 88], [88, 84], \ +[84, 91], [91, 85], [85, 96], [96, 80], [80, 82], [82, 86], [86, 94], \ +[94, 101], [101, 108], [108, 109], [109, 105], [105, 98], [98, 100], \ +[100, 99], [99, 114], [114, 107], [107, 113], [113, 119], [119, 121], \ +[121, 122], [122, 120], [120, 117], [117, 111], [111, 103], [103, \ +97], [97, 104], [104, 106], [106, 112], [112, 116], [116, 118], [118, \ +115], [115, 110], [110, 102], [102, 95], [95, 93], [93, 90], [90, \ +83], [83, 89], [89, 79], [79, 92], [92, 87], [87, 81], [81, 74], [74, \ +70], [70, 69], [69, 67], [67, 72], [72, 76], [76, 77], [77, 75], [75, \ +68], [68, 71], [71, 65], [65, 63], [63, 61], [61, 62], [62, 59], [59, \ +57], [57, 51], [51, 44], [44, 38], [38, 45], [45, 40], [40, 52], [52, \ +53], [53, 55], [55, 50], [50, 41], [41, 36], [36, 27], [27, 30], [30, \ +32], [32, 24], [24, 31], [31, 14], [14, 28], [28, 23], [23, 15], [15, \ +9], [9, 4], [4, 5], [5, 6], [6, 12], [12, 17], [17, 22], [22, 16], \ +[16, 10], [10, 11], [11, 7], [7, 1]], 'outsideEdgeDegrees' : \ +[84.0188, 82.0024, 18.4783, 16.4619, -47.0623, -49.0787, 3.87299, \ +179.84, 58.0781, -154.219, 84.0188, 82.0024, 18.4783, 16.4619, \ +-47.0623, -49.0787, -112.603, -114.619, -119.905, 27.7973, -93.9648, \ +82.0024, -39.7597, 107.943, -13.819, -15.8353, 37.1163, 35.0999, \ +-28.4242, -30.4406, -35.7269, 111.976, -9.78616, 166.181, 44.419, \ +-167.878, 70.3597, 68.3433, 4.81911, 2.80272, -60.7214, -62.7378, \ +-126.262, -128.278, -75.3267, 100.64, -21.1216, 126.581, 4.81911, \ +2.80272, -60.7214, -62.7378, -126.262, -128.278, 168.197, 166.181, \ +-140.867, 35.0999, -86.6621, 61.0406, -60.7214, -62.7378, -126.262, \ +-128.278, 168.197, 166.181, 102.657, 100.64, 153.592, -30.4406, \ +-152.203, -4.49992, -126.262, -128.278, 168.197, 166.181, 102.657, \ +100.64, 37.1163, 35.0999, 88.0516, -95.9812, 142.257, -70.0405, \ +168.197, 166.181, 102.657, -81.3759, -144.9, -146.916, 149.559, \ +147.543, -159.505, 16.4619, -105.3, 42.4026, -79.3595, -81.3759, \ +-144.9, -146.916, 149.559, 147.543, 84.0188, 82.0024, 134.954, \ +-49.0787, -170.841, -23.138, -144.9, -146.916, 149.559, 147.543, \ +84.0188, 82.0024, 18.4783, 16.4619, 69.4135, -114.619, 123.619, \ +-88.6785, 149.559, 147.543], 'insideEdgeIndices' : [[1, 10], [2, 10], \ +[3, 10], [4, 14], [5, 14], [6, 14], [7, 10], [8, 10], [9, 14], [10, \ +13], [10, 19], [10, 22], [10, 26], [12, 14], [14, 15], [14, 17], [14, \ +23], [14, 24], [17, 24], [17, 35], [20, 33], [21, 33], [22, 26], [22, \ +35], [24, 35], [26, 35], [27, 40], [29, 33], [30, 40], [32, 35], [32, \ +38], [32, 40], [33, 34], [33, 37], [33, 39], [33, 42], [33, 43], [33, \ +49], [34, 35], [34, 39], [35, 38], [35, 44], [35, 46], [36, 40], [38, \ +40], [40, 41], [40, 50], [40, 53], [40, 55], [44, 46], [44, 56], [46, \ +56], [51, 56], [56, 57], [56, 58], [56, 59], [56, 60], [56, 61], [56, \ +62], [60, 61], [60, 68], [61, 68], [63, 68], [64, 68], [65, 68], [66, \ +68], [67, 79], [68, 73], [68, 77], [68, 78], [69, 79], [70, 79], [72, \ +79], [74, 79], [76, 79], [76, 83], [76, 88], [77, 78], [77, 88], [79, \ +81], [79, 83], [79, 87], [82, 96], [83, 88], [86, 96], [88, 90], [88, \ +91], [88, 97], [88, 98], [88, 100], [88, 103], [90, 97], [90, 106], \ +[91, 96], [91, 98], [93, 106], [94, 96], [95, 106], [96, 98], [96, \ +101], [96, 105], [96, 108], [96, 109], [97, 106], [100, 103], [100, \ +114], [102, 106], [103, 114], [106, 110], [106, 115], [106, 116], \ +[106, 118], [111, 114], [113, 114], [114, 117], [114, 119], [114, \ +120], [114, 121], [114, 122]]}, 'PentagonalHexecontahedron' : \ +{'edgeCoordinates' : [[0., 3.61618], [0.169343, 8.16626], [0.173198, \ +5.37131], [0.342541, 9.92139], [0.470873, 2.73398], [0.555895, \ +4.44744], [0.640216, 7.28406], [0.725238, 8.99751], [0.807422, \ +6.14446], [0.976765, 10.6945], [1.47087, 2.73319], [1.64022, \ +7.28326], [1.78829, 5.94978], [1.95763, 10.4999], [2.02544, 1.90105], \ +[2.19479, 6.45112], [2.29729, 4.27559], [2.46663, 8.82567], [2.47478, \ +6.01642], [2.66415, 11.2075], [3.02076, 1.99767], [3.19011, 6.54774], \ +[3.39989, 6.39612], [3.40493, 2.92093], [3.57428, 7.47101], [3.59775, \ +7.37635], [3.62139, 10.9182], [3.81769, 9.9377], [3.97312, 4.77916], \ +[4.06955, 4.76454], [4.13738, 1.71513], [4.14246, 9.32923], [4.17098, \ +5.75939], [4.38611, 3.11405], [4.43658, 9.75451], [4.55545, 7.66412], \ +[4.60825, 0.832933], [4.60978, 11.5096], [4.67851, 4.07034], \ +[4.69327, 2.54639], [4.84786, 8.62042], [4.89495, 3.20596], [4.89899, \ +4.20595], [4.90746, 8.87231], [4.99248, 10.5858], [5.244, 12.2828], \ +[5.60825, 0.832137], [5.78272, 4.67396], [5.78979, 6.4238], [5.82903, \ +8.81353], [5.90746, 8.87151], [6.16282, 0.], [6.22487, 12.0881], \ +[6.43467, 2.37454], [6.46203, 8.03937], [6.61216, 4.11537], [6.66263, \ +4.19883], [6.73387, 10.4139], [6.93139, 12.7958], [7.15814, \ +0.0966189], [7.40317, 5.74632], [7.45735, 8.13599], [7.49656, \ +4.75069], [7.53727, 4.49507], [7.53964, 6.42241], [7.54231, 1.01988], \ +[7.84152, 9.05926], [7.88863, 12.5065], [8.01192, 7.30386], [8.08493, \ +11.526], [8.1105, 2.87811], [8.2371, 6.29819], [8.24115, 7.29818], \ +[8.27895, 9.59251], [8.30836, 3.85834], [8.41857, 4.36353], [8.52349, \ +1.213], [8.81589, 2.16929], [8.9504, 3.92436], [9.00944, 11.1448], \ +[9.10929, 10.1498], [9.12487, 7.76619], [9.50498, 3.09223], [9.77682, \ +5.46677], [9.95431, 7.2076], [10.5003, 3.18885], [10.8794, 7.58729], \ +[10.8845, 4.11211], [10.9451, 7.65938], [11.2375, 8.61567], [11.4527, \ +5.97033], [11.6505, 6.95056], [11.8656, 4.30522], [12.158, 5.26152], \ +[12.2187, 8.80879], [12.2237, 5.3336], [12.6029, 9.73205], [13.1488, \ +5.7133], [13.3263, 7.45413], [13.5982, 9.82867], [13.9783, 5.15471], \ +[13.9939, 2.77112], [14.0937, 1.77611], [14.1528, 8.99653], [14.2873, \ +10.7516], [14.5797, 11.7079], [14.6846, 8.55737], [14.7948, 9.06256], \ +[14.8242, 3.32838], [14.862, 5.62272], [14.8661, 6.62271], [14.9927, \ +10.0428], [15.0182, 1.39494], [15.0912, 5.61704], [15.2145, 0.4144], \ +[15.2616, 3.86164], [15.5609, 11.901], [15.5635, 6.49849], [15.5659, \ +8.42583], [15.6066, 8.1702], [15.6458, 4.7849], [15.7, 7.17458], \ +[15.945, 12.8243], [16.1718, 0.1251], [16.3693, 2.50698], [16.4405, \ +8.72207], [16.491, 8.80553], [16.6411, 4.88152], [16.6685, 10.5464], \ +[16.8783, 0.832791], [16.9403, 12.9209], [17.1957, 4.04939], \ +[17.2741, 4.10736], [17.3134, 6.4971], [17.3204, 8.24694], [17.4949, \ +12.0888], [17.8592, 0.638114], [18.1107, 2.33514], [18.1957, \ +4.04859], [18.2042, 8.71494], [18.2082, 9.71493], [18.2553, 4.30048], \ +[18.4099, 10.3745], [18.4246, 8.85056], [18.4934, 1.41126], [18.4949, \ +12.088], [18.5477, 5.25677], [18.6666, 3.16639], [18.7171, 9.80685], \ +[18.9322, 7.16151], [18.9607, 3.59166], [18.9658, 11.2058], [19.0336, \ +8.15635], [19.13, 8.14174], [19.2855, 2.98319], [19.4818, 2.00265], \ +[19.5054, 5.54455], [19.5289, 5.44989], [19.6982, 9.99997], [19.7033, \ +6.52478], [19.9131, 6.37315], [20.0824, 10.9232], [20.439, 1.71335], \ +[20.6284, 6.90448], [20.6365, 4.09523], [20.8059, 8.6453], [20.9084, \ +6.46977], [21.0777, 11.0198], [21.1455, 2.42104], [21.3149, 6.97112], \ +[21.4629, 5.63764], [21.6323, 10.1877], [22.1264, 2.22636], [22.2957, \ +6.77644], [22.3779, 3.92339], [22.4629, 5.63684], [22.5473, 8.47346], \ +[22.6323, 10.1869], [22.7606, 2.99951], [22.93, 7.54959], [22.9338, \ +4.75464], [23.1032, 9.30471]], 'outsideEdgeIndices' : [[1, 6], [6, \ +3], [3, 9], [9, 13], [13, 17], [17, 19], [19, 23], [23, 26], [26, \ +36], [36, 25], [25, 22], [22, 16], [16, 12], [12, 7], [7, 2], [2, 8], \ +[8, 4], [4, 10], [10, 14], [14, 20], [20, 27], [27, 28], [28, 18], \ +[18, 32], [32, 41], [41, 50], [50, 55], [55, 51], [51, 44], [44, 35], \ +[35, 45], [45, 38], [38, 46], [46, 53], [53, 59], [59, 68], [68, 70], \ +[70, 80], [80, 81], [81, 74], [74, 58], [58, 67], [67, 62], [62, 69], \ +[69, 65], [65, 49], [49, 61], [61, 72], [72, 73], [73, 82], [82, 85], \ +[85, 87], [87, 92], [92, 89], [89, 90], [90, 95], [95, 97], [97, \ +100], [100, 104], [104, 99], [99, 107], [107, 120], [120, 126], [126, \ +135], [135, 127], [127, 119], [119, 108], [108, 112], [112, 105], \ +[105, 106], [106, 117], [117, 123], [123, 131], [131, 136], [136, \ +146], [146, 152], [152, 143], [143, 129], [129, 141], [141, 140], \ +[140, 153], [153, 150], [150, 154], [154, 144], [144, 149], [149, \ +159], [159, 162], [162, 168], [168, 172], [172, 178], [178, 182], \ +[182, 177], [177, 180], [180, 174], [174, 170], [170, 166], [166, \ +164], [164, 160], [160, 157], [157, 147], [147, 158], [158, 161], \ +[161, 167], [167, 171], [171, 176], [176, 181], [181, 175], [175, \ +179], [179, 173], [173, 169], [169, 163], [163, 156], [156, 155], \ +[155, 165], [165, 151], [151, 142], [142, 133], [133, 128], [128, \ +132], [132, 139], [139, 148], [148, 138], [138, 145], [145, 137], \ +[137, 130], [130, 124], [124, 115], [115, 113], [113, 103], [103, \ +102], [102, 109], [109, 125], [125, 116], [116, 121], [121, 114], \ +[114, 118], [118, 134], [134, 122], [122, 111], [111, 110], [110, \ +101], [101, 98], [98, 96], [96, 91], [91, 94], [94, 93], [93, 88], \ +[88, 86], [86, 83], [83, 79], [79, 84], [84, 76], [76, 63], [63, 57], \ +[57, 48], [48, 56], [56, 64], [64, 75], [75, 71], [71, 78], [78, 77], \ +[77, 66], [66, 60], [60, 52], [52, 47], [47, 37], [37, 31], [31, 40], \ +[40, 54], [54, 42], [42, 43], [43, 30], [30, 33], [33, 29], [29, 39], \ +[39, 34], [34, 24], [24, 21], [21, 15], [15, 11], [11, 5], [5, 1]], \ +'outsideEdgeDegrees' : [56.2276, 112.501, 50.6375, -11.2259, \ +-73.0893, 84.1783, 22.3149, 78.5881, 16.7248, -168.865, -112.592, \ +-174.455, 123.681, 179.954, 118.091, 56.2276, 112.501, 50.6375, \ +-11.2259, 45.0474, -16.816, -78.6794, -140.543, 16.7248, -45.1386, \ +11.1346, -50.7287, 123.681, 179.954, 118.091, 56.2276, 112.501, \ +50.6375, -11.2259, 45.0474, -16.816, -78.6794, -22.4062, -84.2695, \ +-146.133, 152.004, -50.7287, -112.592, -56.3189, -118.182, 179.954, \ +-22.7781, 33.4952, 89.7684, 27.905, -33.9583, 22.3149, -39.5485, \ +134.861, 72.998, 11.1346, 67.4079, 5.54451, -56.3189, -118.182, \ +39.0853, -22.7781, 33.4952, -28.3682, 146.042, -157.685, 140.452, \ +78.5881, 134.861, 72.998, 11.1346, 67.4079, 5.54451, -56.3189, \ +-0.0456262, -61.909, -123.772, 174.364, -28.3682, -90.2316, -33.9583, \ +-95.8217, 78.5881, 134.861, 72.998, 11.1346, 67.4079, 5.54451, \ +-56.3189, -0.0456262, -61.909, -123.772, -67.4991, -129.363, 168.774, \ +106.911, -95.8217, -157.685, -101.412, -163.275, 11.1346, 67.4079, \ +5.54451, -56.3189, -0.0456262, -61.909, -123.772, -67.4991, -129.363, \ +168.774, -134.953, 163.184, 101.321, 39.4572, -163.275, 134.861, \ +-168.865, 129.271, -56.3189, -0.0456262, -61.909, -123.772, -67.4991, \ +-129.363, 168.774, -134.953, 163.184, 101.321, 157.594, 95.7305, \ +33.8671, -27.9963, 129.271, 67.4079, 123.681, 61.8178, -0.0456262, \ +157.222, -146.505, -90.2316, -152.095, 146.042, -157.685, 140.452, \ +-45.1386, -107.002, -168.865, -112.592, -174.455, 123.681, 61.8178, \ +-140.915, 157.222, -146.505, 151.632, -33.9583, 22.3149, -39.5485, \ +-101.412, -45.1386, -107.002, -168.865, -112.592, -174.455, 123.681, \ +179.954, 118.091, 56.2276, -5.63576, 151.632, 89.7684, 146.042, \ +84.1783, -101.412, -45.1386, -107.002, -168.865, -112.592, -174.455, \ +123.681, 179.954, 118.091], 'insideEdgeIndices' : [[6, 17], [8, 18], \ +[11, 17], [12, 18], [14, 18], [17, 24], [17, 29], [18, 25], [23, 33], \ +[33, 49], [36, 41], [36, 49], [43, 48], [45, 58], [47, 54], [48, 49], \ +[49, 55], [51, 58], [53, 58], [54, 56], [54, 66], [54, 71], [55, 62], \ +[58, 70], [61, 63], [72, 84], [84, 85], [84, 88], [84, 91], [91, 92], \ +[92, 99], [95, 99], [98, 99], [99, 111], [112, 129], [113, 125], \ +[117, 129], [120, 122], [121, 128], [125, 130], [125, 132], [125, \ +138], [127, 129], [128, 134], [129, 136], [134, 135], [134, 147], \ +[134, 150], [135, 140], [142, 147], [150, 160], [154, 166], [158, \ +165], [159, 166], [165, 169], [165, 171], [165, 175], [166, 172], \ +[166, 177]]}, 'PentagonalIcositetrahedron' : {'edgeCoordinates' : \ +[[0., 4.35723], [0.394152, 2.18944], [0.430299, 5.25992], [0.638786, \ +3.58785], [1.4608, 0.808884], [1.60521, 3.8448], [1.8137, 2.17273], \ +[1.84984, 5.24321], [2.18817, 7.17717], [2.21608, 5.12629], [2.244, \ +3.07542], [2.32771, 5.7644], [2.34838, 2.82554], [2.44667, 1.83038], \ +[2.47589, 5.40966], [2.62746, 0.], [3.05021, 7.684], [3.21042, \ +3.33237], [3.38274, 4.31741], [3.39121, 1.50199], [3.48951, \ +0.506832], [3.69969, 6.12918], [3.87201, 7.11422], [4.34917, \ +4.57436], [4.37708, 2.52349], [4.43405, 0.178442], [4.52149, 5.5594], \ +[4.61501, 2.22151], [4.74332, 2.40657], [4.77946, 5.47705], [4.83843, \ +7.37118], [4.98795, 3.80498], [5.1285, 0.897986], [5.74528, 6.27892], \ +[5.95438, 4.06193], [6.16286, 2.38986], [6.19901, 5.46034], [6.42084, \ +2.3075], [6.56525, 5.34342], [6.59316, 3.29255], [7.11787, 6.09878], \ +[7.24264, 1.73773], [7.55959, 3.5495], [7.6984, 4.80326], [7.73191, \ +4.53454], [8.46643, 2.45725], [8.48984, 6.46356], [8.69833, 4.79149], \ +[8.72625, 2.74061], [8.92014, 7.36625], [9.09248, 2.6237], [9.12863, \ +5.69418], [9.14005, 2.24221], [9.33712, 4.02211], [9.72058, \ +0.946689], [9.92007, 7.35448], [10.3035, 4.27906], [10.5006, \ +6.05896], [10.512, 2.60699], [10.5482, 5.67747], [10.7205, 0.934917], \ +[10.7224, 6.02015], [10.9423, 3.50967], [11.1253, 3.70928], [11.1508, \ +1.8376], [11.7083, 7.04165], [11.8891, 5.21127], [11.9423, 3.4979], \ +[11.9874, 4.21611], [12.5228, 2.20238], [12.6528, 6.71326], [12.7511, \ +5.7181], [13.3283, 3.74991], [13.5729, 5.14832]], \ +'outsideEdgeIndices' : [[1, 3], [3, 8], [8, 6], [6, 10], [10, 19], \ +[19, 15], [15, 22], [22, 12], [12, 9], [9, 17], [17, 23], [23, 31], \ +[31, 34], [34, 27], [27, 24], [24, 30], [30, 37], [37, 35], [35, 39], \ +[39, 45], [45, 48], [48, 44], [44, 41], [41, 47], [47, 50], [50, 56], \ +[56, 58], [58, 52], [52, 60], [60, 67], [67, 62], [62, 66], [66, 71], \ +[71, 72], [72, 74], [74, 73], [73, 69], [69, 64], [64, 57], [57, 63], \ +[63, 68], [68, 70], [70, 65], [65, 61], [61, 55], [55, 53], [53, 59], \ +[59, 51], [51, 54], [54, 49], [49, 43], [43, 46], [46, 42], [42, 38], \ +[38, 40], [40, 36], [36, 29], [29, 32], [32, 25], [25, 20], [20, 28], \ +[28, 33], [33, 26], [26, 21], [21, 16], [16, 5], [5, 14], [14, 13], \ +[13, 18], [18, 11], [11, 7], [7, 2], [2, 4], [4, 1]], \ +'outsideEdgeDegrees' : [64.5134, -0.674489, -99.9228, 64.5134, \ +-34.7349, 129.701, 30.4531, -165.111, 95.641, 30.4531, -34.7349, \ +14.8893, -50.2986, -149.547, -99.9228, 64.5134, -0.674489, -99.9228, \ +64.5134, -34.7349, 14.8893, 179.326, 114.138, 14.8893, 64.5134, \ +-0.674489, -65.8624, -165.111, -0.674489, -19.1711, 145.265, 46.0168, \ +-19.1711, -84.359, -34.7349, -99.9228, 160.829, -149.547, 145.265, \ +-50.2986, -0.674489, -65.8624, -165.111, -115.487, 179.326, 114.138, \ +14.8893, 179.326, 80.0772, -115.487, 145.265, -50.2986, -149.547, \ +145.265, 80.0772, -115.487, 179.326, 80.0772, -115.487, -133.983, \ +30.4531, -68.7952, -133.983, 160.829, -149.547, 145.265, 46.0168, \ +95.641, 30.4531, -165.111, -115.487, 179.326, 80.0772, 129.701], \ +'insideEdgeIndices' : [[4, 6], [6, 11], [14, 20], [18, 19], [18, 25], \ +[19, 24], [20, 21], [22, 23], [22, 27], [24, 32], [32, 35], [35, 40], \ +[40, 43], [43, 45], [47, 52], [48, 52], [48, 54], [54, 57], [57, 60], \ +[59, 63], [59, 65], [67, 69], [67, 72]]}, 'PentakisDodecahedron' : \ +{'edgeCoordinates' : [[0., 3.34303], [0.26284, 2.24678], [0.695721, \ +1.61552], [0.924979, 3.98745], [0.934661, 2.98749], [0.958561, \ +0.519262], [1.35498, 4.62068], [1.37947, 2.09187], [1.61782, \ +3.52442], [1.6207, 2.25993], [1.63038, 1.25998], [1.86226, 3.36107], \ +[2.07519, 0.364349], [2.27996, 5.26509], [2.28964, 4.26514], [2.5483, \ +2.6335], [2.55798, 1.63355], [2.62653, 1.34765], [2.82082, 0.537294], \ +[2.97568, 3.53757], [3.21724, 4.63871], [3.22012, 3.37421], [3.36391, \ +3.63066], [3.48296, 2.27796], [3.49264, 1.27801], [3.77418, 2.23756], \ +[3.93745, 0.382381], [4.15478, 3.01867], [4.43632, 3.97823], \ +[4.48879, 1.36568], [4.59959, 2.12305], [5.15093, 3.10635], [5.31421, \ +1.25117], [5.59574, 2.21072], [5.71429, 4.37323], [5.97906, \ +0.871881], [6.14447, 3.33122], [6.26756, 2.95143], [6.38661, \ +1.59874], [6.41135, 3.20787], [6.52776, 5.1537], [6.5304, 1.85518], \ +[6.69288, 4.16743], [6.69368, 0.], [6.97521, 0.959552], [7.20222, \ +2.59589], [7.48375, 3.55544], [7.50131, 3.84892], [7.55107, 4.68075], \ +[7.64703, 1.70027], [7.76608, 0.347571], [7.8334, 1.47288], [8.19837, \ +2.68356], [8.31478, 4.62939], [8.36165, 0.828385], [8.47805, \ +2.77421], [8.4799, 3.64312], [8.64318, 1.78794], [9.27077, 3.03113], \ +[9.33809, 4.15644], [9.43405, 1.17596], [9.50137, 2.30127]], \ +'outsideEdgeIndices' : [[1, 4], [4, 12], [12, 15], [15, 9], [9, 7], \ +[7, 14], [14, 21], [21, 20], [20, 16], [16, 22], [22, 28], [28, 23], \ +[23, 29], [29, 32], [32, 38], [38, 46], [46, 40], [40, 43], [43, 37], \ +[37, 35], [35, 41], [41, 49], [49, 47], [47, 57], [57, 48], [48, 54], \ +[54, 60], [60, 59], [59, 53], [53, 58], [58, 56], [56, 62], [62, 61], \ +[61, 55], [55, 50], [50, 45], [45, 52], [52, 51], [51, 44], [44, 36], \ +[36, 42], [42, 34], [34, 39], [39, 33], [33, 31], [31, 24], [24, 25], \ +[25, 26], [26, 30], [30, 27], [27, 19], [19, 17], [17, 11], [11, 18], \ +[18, 13], [13, 6], [6, 3], [3, 10], [10, 5], [5, 8], [8, 2], [2, 1]], \ +'outsideEdgeDegrees' : [34.8641, -33.7546, 64.6986, -132.208, \ +103.483, 34.8641, -33.7546, -102.373, -115.301, 47.7922, -20.8265, \ +142.267, 17.9577, -50.661, -7.89843, -20.8265, 142.267, 73.6484, \ +-123.258, 112.433, 43.8139, -24.8048, -93.4235, 5.02965, 168.123, \ +43.8139, -24.8048, -93.4235, -162.042, -63.5891, 99.5045, -24.8048, \ +-93.4235, -162.042, 129.339, -132.208, 30.8858, -93.4235, -162.042, \ +129.339, 60.7203, 159.173, -37.7329, -162.042, 129.339, 172.102, \ +-89.4452, 73.6484, -50.661, -119.28, 172.102, 103.483, -158.064, \ +5.02965, -119.28, 172.102, 103.483, 34.8641, 133.317, -63.5891, \ +172.102, 103.483], 'insideEdgeIndices' : [[1, 5], [2, 5], [3, 11], \ +[4, 5], [5, 12], [6, 11], [7, 15], [10, 11], [10, 12], [10, 16], [10, \ +17], [11, 13], [12, 16], [12, 20], [14, 15], [15, 20], [15, 21], [16, \ +17], [16, 24], [17, 24], [17, 25], [19, 25], [22, 24], [24, 28], [25, \ +27], [25, 30], [28, 29], [28, 31], [28, 32], [31, 32], [31, 34], [32, \ +34], [33, 34], [34, 38], [35, 43], [36, 45], [38, 42], [40, 47], [41, \ +43], [42, 45], [42, 46], [42, 50], [43, 47], [43, 49], [44, 45], [45, \ +51], [46, 47], [46, 50], [46, 53], [47, 53], [50, 53], [50, 58], [53, \ +57], [54, 57], [55, 58], [57, 59], [57, 60], [58, 61], [58, 62]]}, \ +'RhombicDodecahedron' : {'edgeCoordinates' : [[0.272166, 2.11695], \ +[0., 1.1547], [0.816497, 0.57735], [1.08866, 1.5396], [1.08866, \ +2.6943], [1.36083, 0.57735], [1.90516, 2.11695], [2.17732, 0.], \ +[2.17732, 1.1547], [2.44949, 2.11695], [2.99382, 0.57735], [3.26599, \ +1.5396], [3.26599, 2.6943], [3.53815, 0.57735], [4.08248, 2.11695], \ +[4.35465, 0.], [4.35465, 1.1547], [4.62681, 2.11695], [5.17115, \ +0.57735], [5.44331, 1.5396], [5.44331, 2.6943], [5.71548, 0.57735], \ +[6.25981, 2.11695], [6.53197, 0.], [6.53197, 1.1547], [7.34847, \ +0.57735]], 'outsideEdgeIndices' : [[2, 1], [1, 5], [5, 7], [7, 9], \ +[9, 10], [10, 13], [13, 15], [15, 17], [17, 18], [18, 21], [21, 23], \ +[23, 25], [25, 26], [26, 24], [24, 22], [22, 20], [20, 19], [19, 16], \ +[16, 14], [14, 12], [12, 11], [11, 8], [8, 6], [6, 4], [4, 3], [3, \ +2]], 'outsideEdgeDegrees' : [74.2068, 35.2644, -35.2644, -74.2068, \ +74.2068, 35.2644, -35.2644, -74.2068, 74.2068, 35.2644, -35.2644, \ +-74.2068, -35.2644, -144.736, 144.736, 105.793, -105.793, -144.736, \ +144.736, 105.793, -105.793, -144.736, 144.736, 105.793, -105.793, \ +144.736], 'insideEdgeIndices' : [[1, 4], [4, 7], [6, 9], [9, 11], \ +[10, 12], [12, 15], [14, 17], [17, 19], [18, 20], [20, 23], [22, \ +25]]}, 'RhombicTriacontahedron' : {'edgeCoordinates' : [[0.0898056, \ +3.04338], [5.64274, 4.03934], [5.64274, 0.995959], [5.64274, \ +2.04742], [5.64274, 2.04742], [6.49339, 1.52169], [6.49339, 4.56507], \ +[1.79111, 3.04338], [1.79111, 0.], [9.40456, 0.995959], [9.40456, \ +2.04742], [7.52365, 0.995959], [7.52365, 2.04742], [8.46411, \ +2.51765], [8.46411, 3.56911], [8.46411, 0.525731], [7.52365, \ +4.03934], [7.52365, 2.04742], [10.2552, 1.52169], [6.58319, 2.51765], \ +[6.58319, 3.56911], [6.58319, 0.525731], [9.31476, 3.04338], \ +[9.31476, 0.], [8.3743, 1.52169], [8.3743, 4.56507], [3.76183, \ +0.995959], [3.76183, 2.04742], [7.43385, 3.04338], [7.43385, 0.], \ +[4.70228, 2.51765], [4.70228, 3.56911], [4.70228, 0.525731], \ +[3.76183, 4.03934], [3.76183, 2.04742], [4.61248, 1.52169], [4.61248, \ +4.56507], [2.82137, 2.51765], [2.82137, 3.56911], [2.82137, \ +0.525731], [5.55293, 3.04338], [5.55293, 0.], [0., 4.03934], [0., \ +2.04742], [3.67202, 3.04338], [3.67202, 0.], [1.88091, 4.03934], \ +[1.88091, 0.995959], [1.88091, 2.04742], [1.88091, 2.04742], \ +[1.03026, 1.52169], [1.97072, 3.04338], [2.91117, 1.52169], [3.85163, \ +3.04338], [4.79209, 1.52169], [5.73254, 3.04338], [6.673, 1.52169], \ +[7.61346, 3.04338], [8.55391, 1.52169], [0.940456, 2.51765], \ +[0.940456, 3.56911], [0.940456, 0.525731], [0.850651, 1.52169], \ +[0.850651, 4.56507], [2.73156, 1.52169], [2.73156, 4.56507]], \ +'outsideEdgeIndices' : [[44, 1], [1, 43], [43, 64], [64, 61], [61, \ +8], [8, 49], [49, 52], [52, 47], [47, 66], [66, 39], [39, 45], [45, \ +28], [28, 54], [54, 34], [34, 37], [37, 32], [32, 41], [41, 4], [4, \ +56], [56, 2], [2, 7], [7, 21], [21, 29], [29, 13], [13, 58], [58, \ +17], [17, 26], [26, 15], [15, 23], [23, 11], [11, 19], [19, 10], [10, \ +24], [24, 16], [16, 59], [59, 14], [14, 25], [25, 12], [12, 30], [30, \ +22], [22, 57], [57, 20], [20, 6], [6, 3], [3, 42], [42, 33], [33, \ +55], [55, 31], [31, 36], [36, 27], [27, 46], [46, 40], [40, 53], [53, \ +38], [38, 65], [65, 48], [48, 9], [9, 62], [62, 51], [51, 60], [60, \ +63], [63, 44]], 'outsideEdgeDegrees' : [84.8476, 95.1524, 31.7175, \ +-84.8476, -31.7175, -84.8476, 84.8476, 95.1524, 31.7175, -84.8476, \ +-31.7175, -84.8476, 84.8476, 95.1524, 31.7175, -84.8476, -31.7175, \ +-84.8476, 84.8476, 95.1524, 31.7175, -84.8476, -31.7175, -84.8476, \ +84.8476, 95.1524, 31.7175, -84.8476, -31.7175, -84.8476, -31.7175, \ +-148.283, -95.1524, 148.283, 84.8476, 95.1524, -95.1524, -148.283, \ +-95.1524, 148.283, 84.8476, 95.1524, -95.1524, -148.283, -95.1524, \ +148.283, 84.8476, 95.1524, -95.1524, -148.283, -95.1524, 148.283, \ +84.8476, 95.1524, -95.1524, -148.283, -95.1524, 148.283, 84.8476, \ +95.1524, -95.1524, 148.283], 'insideEdgeIndices' : [[1, 60], [1, 61], \ +[3, 55], [4, 6], [4, 55], [8, 60], [10, 59], [11, 59], [12, 57], [13, \ +25], [13, 57], [14, 23], [14, 58], [15, 58], [20, 29], [20, 56], [21, \ +56], [27, 53], [28, 36], [28, 53], [31, 41], [31, 54], [32, 54], [38, \ +45], [38, 52], [39, 52], [48, 51], [49, 51], [49, 65]]}, \ +'SmallTriakisOctahedron' : {'edgeCoordinates' : [[0., 1.51832], \ +[1.70711, 1.51832], [2.70711, 0.997316], [2.70711, 2.03933], \ +[3.70711, 1.51832], [3.70711, 4.55496], [0.853553, 2.03933], \ +[5.41421, 1.51832], [0.926777, 3.03664], [1.85355, 1.51832], \ +[2.78033, 3.03664], [2.78033, 0.], [4.63388, 3.03664], [5.56066, \ +1.51832], [0.78033, 3.03664], [1.78033, 2.51564], [3.56066, 1.51832], \ +[3.56066, 4.55496], [4.56066, 2.03933], [2.63388, 3.03664], [2.63388, \ +0.], [3.63388, 3.55765], [3.63388, 2.51564], [3.63388, 3.55765], \ +[4.48744, 3.03664], [5.48744, 2.51564], [6.34099, 3.03664]], \ +'outsideEdgeIndices' : [[1, 15], [15, 7], [7, 9], [9, 20], [20, 4], \ +[4, 11], [11, 18], [18, 22], [22, 6], [6, 25], [25, 19], [19, 13], \ +[13, 27], [27, 14], [14, 26], [26, 8], [8, 5], [5, 23], [23, 17], \ +[17, 12], [12, 3], [3, 21], [21, 10], [10, 16], [16, 2], [2, 1]], \ +'outsideEdgeDegrees' : [62.7994, -85.8009, 85.8009, 0., -85.8009, \ +85.8009, 62.7994, -85.8009, 85.8009, -62.7994, -85.8009, 85.8009, 0., \ +-117.201, 94.1991, -94.1991, 180., 94.1991, -94.1991, -117.201, \ +94.1991, -94.1991, 117.201, 94.1991, -94.1991, 180.], \ +'insideEdgeIndices' : [[1, 7], [2, 7], [2, 9], [3, 10], [3, 17], [4, \ +10], [4, 17], [5, 19], [5, 25], [8, 13], [8, 19], [9, 16], [10, 17], \ +[10, 20], [11, 17], [11, 22], [11, 23], [11, 25], [13, 26], [16, 20], \ +[22, 25], [23, 25], [26, 27]]}, 'TetrakisHexahedron' : \ +{'edgeCoordinates' : [[0., 2.44849], [0.578072, 3.64999], [0.959843, \ +0.707993], [0.960697, 2.72609], [1.12983, 1.74049], [1.53791, \ +1.9095], [1.83637, 3.209], [1.84046, 4.54233], [1.92054, 0.985593], \ +[2.08968, 0.], [2.41358, 2.39241], [2.49776, 0.169003], [2.58376, \ +3.87337], [2.79621, 1.4685], [3.15689, 1.72346], [3.16098, 3.05678], \ +[3.16598, 4.68641], [3.45645, 3.3851], [3.90429, 2.38783], [4.48151, \ +1.57124], [4.48651, 3.20087], [4.77698, 1.89956], [5.3592, 2.71259], \ +[5.74748, 3.63413], [6.1025, 2.04364], [6.31817, 2.4291]], \ +'outsideEdgeIndices' : [[1, 2], [2, 7], [7, 8], [8, 17], [17, 18], \ +[18, 13], [13, 16], [16, 21], [21, 24], [24, 26], [26, 23], [23, 25], \ +[25, 22], [22, 19], [19, 20], [20, 15], [15, 11], [11, 14], [14, 12], \ +[12, 9], [9, 10], [10, 3], [3, 6], [6, 4], [4, 5], [5, 1]], \ +'outsideEdgeDegrees' : [64.3067, -19.3139, 89.8242, 6.20355, \ +-77.4171, 150.773, -54.7449, 6.20355, 18.9623, -64.6583, 163.531, \ +-41.9861, -173.796, 150.773, -54.7449, 173.445, 138.014, -67.5036, \ +-102.935, 125.255, -80.2624, 147.927, 64.3067, 125.255, -80.2624, \ +147.927], 'insideEdgeIndices' : [[1, 4], [2, 4], [3, 9], [4, 7], [6, \ +7], [6, 9], [6, 11], [6, 14], [7, 11], [7, 13], [7, 16], [8, 13], [9, \ +14], [11, 16], [13, 17], [15, 16], [15, 19], [16, 19], [19, 21], [21, \ +22], [21, 23], [22, 23], [23, 24]]}, 'TriakisIcosahedron' : \ +{'edgeCoordinates' : [[0., 1.50693], [8.8695, 1.50693], [8.8695, \ +4.52078], [4.43475, 3.01385], [4.43475, 0.], [5.29656, 3.52109], \ +[5.29656, 2.50661], [6.15836, 3.01385], [6.15836, 0.], [4.38446, \ +3.01385], [4.38446, 0.], [7.95741, 2.01417], [7.95741, 0.999684], \ +[7.07046, 3.52109], [7.07046, 2.50661], [6.18351, 2.01417], [6.18351, \ +0.999684], [9.70616, 3.01385], [4.40961, 2.01417], [4.40961, \ +0.999684], [8.81921, 1.50693], [8.81921, 4.52078], [3.52265, \ +3.52109], [3.52265, 2.50661], [7.04531, 1.50693], [7.04531, 4.52078], \ +[2.6357, 2.01417], [2.6357, 0.999684], [5.27141, 1.50693], [5.27141, \ +4.52078], [8.84436, 3.52109], [8.84436, 2.50661], [0.88695, 3.01385], \ +[0.88695, 0.], [1.7739, 1.50693], [1.7739, 4.52078], [3.5478, \ +1.50693], [3.5478, 4.52078], [5.3217, 1.50693], [5.3217, 4.52078], \ +[7.0956, 1.50693], [7.0956, 4.52078], [7.93226, 3.01385], [7.93226, \ +0.], [1.74875, 3.52109], [1.74875, 2.50661], [2.61056, 3.01385], \ +[2.61056, 0.], [0.861803, 2.01417], [0.861803, 0.999684], [1.72361, \ +1.50693], [1.72361, 4.52078], [3.49751, 1.50693], [3.49751, 4.52078], \ +[0.836656, 3.01385], [0.836656, 0.], [7.98255, 3.01385], [7.98255, \ +0.], [6.20865, 3.01385], [6.20865, 0.], [2.66085, 3.01385], [2.66085, \ +0.]], 'outsideEdgeIndices' : [[1, 55], [55, 49], [49, 33], [33, 52], \ +[52, 45], [45, 36], [36, 47], [47, 27], [27, 61], [61, 54], [54, 23], \ +[23, 38], [38, 10], [10, 19], [19, 4], [4, 30], [30, 6], [6, 40], \ +[40, 8], [8, 16], [16, 59], [59, 26], [26, 14], [14, 42], [42, 43], \ +[43, 12], [12, 57], [57, 22], [22, 31], [31, 3], [3, 18], [18, 2], \ +[2, 32], [32, 21], [21, 58], [58, 13], [13, 44], [44, 41], [41, 15], \ +[15, 25], [25, 60], [60, 17], [17, 9], [9, 39], [39, 7], [7, 29], \ +[29, 5], [5, 20], [20, 11], [11, 37], [37, 24], [24, 53], [53, 62], \ +[62, 28], [28, 48], [48, 35], [35, 46], [46, 51], [51, 34], [34, 50], \ +[50, 56], [56, 1]], 'outsideEdgeDegrees' : [60.9606, -88.559, 88.559, \ +60.9606, -88.559, 88.559, -60.9606, -88.559, 88.559, 60.9606, \ +-88.559, 88.559, -60.9606, -88.559, 88.559, 60.9606, -88.559, 88.559, \ +-60.9606, -88.559, 88.559, 60.9606, -88.559, 88.559, -60.9606, \ +-88.559, 88.559, 60.9606, -88.559, 88.559, -60.9606, -119.039, \ +91.441, -91.441, -119.039, 91.441, -91.441, 119.039, 91.441, -91.441, \ +-119.039, 91.441, -91.441, 119.039, 91.441, -91.441, -119.039, \ +91.441, -91.441, 119.039, 91.441, -91.441, -119.039, 91.441, -91.441, \ +119.039, 91.441, -91.441, -119.039, 91.441, -91.441, 119.039], \ +'insideEdgeIndices' : [[1, 49], [1, 50], [1, 51], [4, 6], [4, 7], [4, \ +8], [4, 29], [6, 8], [7, 8], [8, 39], [10, 23], [10, 24], [10, 37], \ +[10, 61], [12, 21], [12, 41], [13, 21], [13, 41], [14, 43], [14, 59], \ +[15, 43], [15, 59], [16, 25], [16, 39], [17, 25], [17, 39], [18, 31], \ +[18, 32], [18, 57], [19, 29], [19, 37], [20, 29], [20, 37], [21, 41], \ +[21, 57], [23, 61], [24, 61], [25, 39], [25, 59], [27, 35], [27, 53], \ +[28, 35], [28, 53], [29, 37], [31, 57], [32, 57], [33, 45], [33, 46], \ +[33, 47], [33, 51], [35, 47], [35, 53], [41, 43], [43, 59], [45, 47], \ +[46, 47], [49, 51], [50, 51], [53, 61]]}, 'TriakisTetrahedron' : \ +{'edgeCoordinates' : [[0., 0.606607], [0.977366, 0.818161], [1.01852, \ +2.14208], [1.16255, 1.80087], [1.55235, 0.], [1.8107, 0.265391], \ +[1.99588, 1.24809], [1.99588, 2.35364], [2.18107, 0.265391], \ +[2.18107, 3.33634], [2.82922, 1.80087], [3.0144, 0.818161], [3.19959, \ +1.80087], [3.84774, 0.265391]], 'outsideEdgeIndices' : [[1, 4], [4, \ +8], [8, 3], [3, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 9], \ +[9, 7], [7, 6], [6, 2], [2, 5], [5, 1]], 'outsideEdgeDegrees' : \ +[45.7708, 33.5573, -167.787, 45.7708, -67.1146, -79.3281, 79.3281, \ +-67.1146, 180., 100.672, -100.672, 146.443, -54.9012, 158.656], \ +'insideEdgeIndices' : [[1, 2], [2, 4], [4, 6], [4, 7], [4, 11], [7, \ +11], [8, 10], [8, 11], [9, 11], [9, 12], [12, 14]]}, \ +'MathematicaPolyhedron' : {'edgeCoordinates' : [[0., 0.5], [0., 1.5], \ +[0., 2.5], [0., 3.5], [0.866025, 1.], [0.866025, 2.], [0.866025, 3.], \ +[1.73205, 0.5], [1.73205, 1.5], [1.73205, 2.5], [2.59808, 0.], \ +[2.59808, 1.], [2.59808, 2.], [2.59808, 3.], [2.59808, 4.], [2.59808, \ +5.], [3.4641, 2.5], [3.4641, 3.5], [3.4641, 4.5], [4.33013, 2.], \ +[4.33013, 3.], [4.33013, 4.], [5.19615, 1.5], [5.19615, 2.5], \ +[5.19615, 3.5], [5.19615, 4.5], [5.19615, 5.5], [5.19615, 6.5], \ +[6.06218, 4.], [6.06218, 5.], [6.06218, 6.], [6.9282, 3.5], [6.9282, \ +4.5], [6.9282, 5.5], [7.79423, 3.], [7.79423, 4.], [7.79423, 5.], \ +[7.79423, 6.], [7.79423, 7.], [7.79423, 8.], [8.66025, 5.5], \ +[8.66025, 6.5], [8.66025, 7.5], [9.52628, 5.], [9.52628, 6.], \ +[9.52628, 7.], [10.3923, 4.5], [10.3923, 5.5], [10.3923, 6.5], \ +[10.3923, 7.5], [10.3923, 8.5], [10.3923, 9.5], [11.2583, 7.], \ +[11.2583, 8.], [11.2583, 9.], [12.1244, 6.5], [12.1244, 7.5], \ +[12.1244, 8.5], [12.9904, 6.], [12.9904, 7.], [12.9904, 8.], \ +[12.9904, 9.]], 'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 4], [4, \ +7], [7, 6], [6, 10], [10, 14], [14, 15], [15, 16], [16, 19], [19, \ +18], [18, 22], [22, 26], [26, 27], [27, 28], [28, 31], [31, 30], [30, \ +34], [34, 38], [38, 39], [39, 40], [40, 43], [43, 42], [42, 46], [46, \ +50], [50, 51], [51, 52], [52, 55], [55, 54], [54, 58], [58, 62], [62, \ +61], [61, 60], [60, 59], [59, 56], [56, 57], [57, 53], [53, 49], [49, \ +48], [48, 47], [47, 44], [44, 45], [45, 41], [41, 37], [37, 36], [36, \ +35], [35, 32], [32, 33], [33, 29], [29, 25], [25, 24], [24, 23], [23, \ +20], [20, 21], [21, 17], [17, 13], [13, 12], [12, 11], [11, 8], [8, \ +9], [9, 5], [5, 1]], 'outsideEdgeDegrees' : [90., 90., 90., -30., \ +-90., 30., 30., 90., 90., -30., -90., 30., 30., 90., 90., -30., -90., \ +30., 30., 90., 90., -30., -90., 30., 30., 90., 90., -30., -90., 30., \ +30., -90., -90., -90., 150., 90., -150., -150., -90., -90., 150., \ +90., -150., -150., -90., -90., 150., 90., -150., -150., -90., -90., \ +150., 90., -150., -150., -90., -90., 150., 90., -150., -150.], \ +'insideEdgeIndices' : [[2, 5], [2, 6], [3, 6], [3, 7], [5, 6], [6, \ +9], [8, 12], [9, 10], [9, 12], [9, 13], [10, 13], [13, 14], [14, 17], \ +[14, 18], [15, 18], [15, 19], [17, 18], [18, 21], [20, 24], [21, 22], \ +[21, 24], [21, 25], [22, 25], [25, 26], [26, 29], [26, 30], [27, 30], \ +[27, 31], [29, 30], [30, 33], [32, 36], [33, 34], [33, 36], [33, 37], \ +[34, 37], [37, 38], [38, 41], [38, 42], [39, 42], [39, 43], [41, 42], \ +[42, 45], [44, 48], [45, 46], [45, 48], [45, 49], [46, 49], [49, 50], \ +[50, 53], [50, 54], [51, 54], [51, 55], [53, 54], [54, 57], [56, 60], \ +[57, 58], [57, 60], [57, 61], [58, 61]]}, 'ElongatedDodecahedron' : \ +{'edgeCoordinates' : [[1.13364, 0.963525], [1.13364, 2.96353], \ +[0.267617, 1.46353], [0.267617, 2.46353], [1.99967, 1.46353], \ +[1.99967, 2.46353], [2.86569, 0.963525], [2.86569, 2.96353], \ +[3.73172, 1.46353], [3.73172, 2.46353], [4.59774, 0.963525], \ +[4.59774, 2.96353], [5.46377, 1.46353], [5.46377, 2.46353], [6.32979, \ +0.963525], [6.32979, 2.96353], [7.19582, 1.46353], [7.19582, \ +2.46353], [6.06218, 3.92705], [5.19615, 3.42705], [4.33013, 3.92705], \ +[3.4641, 3.42705], [2.59808, 3.92705], [1.73205, 3.42705], [1.40126, \ +0.], [0., 3.42705], [2.26728, 0.5], [3.13331, 0.], [3.99933, 0.5], \ +[4.86536, 0.], [5.73139, 0.5], [6.59741, 0.], [7.46344, 0.5], \ +[0.866025, 3.92705]], 'outsideEdgeIndices' : [[26, 34], [34, 2], [2, \ +6], [6, 24], [24, 23], [23, 8], [8, 10], [10, 22], [22, 21], [21, \ +12], [12, 14], [14, 20], [20, 19], [19, 16], [16, 18], [18, 17], [17, \ +33], [33, 32], [32, 15], [15, 13], [13, 31], [31, 30], [30, 11], [11, \ +9], [9, 29], [29, 28], [28, 7], [7, 5], [5, 27], [27, 25], [25, 1], \ +[1, 3], [3, 4], [4, 26]], 'outsideEdgeDegrees' : [30., -74.4775, \ +-30., 105.522, 30., -74.4775, -30., 105.522, 30., -74.4775, -30., \ +105.522, 30., -74.4775, -30., -90., -74.4775, -150., 105.522, 150., \ +-74.4775, -150., 105.522, 150., -74.4775, -150., 105.522, 150., \ +-74.4775, -150., 105.522, 150., 90., 105.522], 'insideEdgeIndices' : \ +[[1, 5], [2, 4], [5, 6], [6, 8], [7, 9], [9, 10], [10, 12], [11, 13], \ +[13, 14], [14, 16], [15, 17]]}} + +# for poly in polyhedronData.keys(): + # print poly + # print '<_option value="' + poly + '">' + poly + '' diff --git a/fablabchemnitz_printing_marks_dotted.inx b/fablabchemnitz_printing_marks_dotted.inx new file mode 100644 index 0000000..a59686c --- /dev/null +++ b/fablabchemnitz_printing_marks_dotted.inx @@ -0,0 +1,48 @@ + + + <_name>Printing Marks Dotted + fablabchemnitz.de.printing_marks_dotted + fablabchemnitz_printing_marks_dotted.py + inkex.py + + + true + false + false + true + false + true + false + + + + <_item value="canvas">Canvas + <_item value="selection">Selection + + + px + pt + in + cm + mm + + 5 + <_param name="bleed_settings" type="description" appearance="header">Bleed Margin + 5 + 5 + 5 + 5 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_printing_marks_dotted.py b/fablabchemnitz_printing_marks_dotted.py new file mode 100644 index 0000000..d6fb05d --- /dev/null +++ b/fablabchemnitz_printing_marks_dotted.py @@ -0,0 +1,524 @@ +#!/usr/bin/env python +''' +This extension allows you to draw crop, registration and other +printing marks in Inkscape. + +Authors: + Nicolas Dufour - Association Inkscape-fr + Aurelio A. Heckert + +Copyright (C) 2008 Authors + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +from subprocess import Popen, PIPE, STDOUT +import math + +import inkex +import simplestyle +from lxml import etree + +class Printing_Marks (inkex.Effect): + + # Default parameters + stroke_width = 0.25 + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--where", + action="store", type="string", + dest="where_to_crop", default=True, + help="Apply crop marks to...") + self.OptionParser.add_option("--crop_marks", + action="store", type="inkbool", + dest="crop_marks", default=True, + help="Draw crop Marks?") + self.OptionParser.add_option("--dotted_crop_marks", + action="store", type="inkbool", + dest="dotted_crop_marks", default=True, + help="Draw dotted crop Marks?") + self.OptionParser.add_option("--bleed_marks", + action="store", type="inkbool", + dest="bleed_marks", default=False, + help="Draw Bleed Marks?") + self.OptionParser.add_option("--registration_marks", + action="store", type="inkbool", + dest="reg_marks", default=False, + help="Draw Registration Marks?") + self.OptionParser.add_option("--star_target", + action="store", type="inkbool", + dest="star_target", default=False, + help="Draw Star Target?") + self.OptionParser.add_option("--colour_bars", + action="store", type="inkbool", + dest="colour_bars", default=False, + help="Draw Colour Bars?") + self.OptionParser.add_option("--page_info", + action="store", type="inkbool", + dest="page_info", default=False, + help="Draw Page Information?") + self.OptionParser.add_option("--unit", + action="store", type="string", + dest="unit", default="px", + help="Draw measurment") + self.OptionParser.add_option("--crop_offset", + action="store", type="float", + dest="crop_offset", default=0, + help="Offset") + self.OptionParser.add_option("--bleed_top", + action="store", type="float", + dest="bleed_top", default=0, + help="Bleed Top Size") + self.OptionParser.add_option("--bleed_bottom", + action="store", type="float", + dest="bleed_bottom", default=0, + help="Bleed Bottom Size") + self.OptionParser.add_option("--bleed_left", + action="store", type="float", + dest="bleed_left", default=0, + help="Bleed Left Size") + self.OptionParser.add_option("--bleed_right", + action="store", type="float", + dest="bleed_right", default=0, + help="Bleed Right Size") + self.OptionParser.add_option("--tab", + action="store", type="string", + dest="tab", + help="The selected UI-tab when OK was pressed") + + def addMarker(self): + svg = self.document.getroot() + xpathStr = '//marker[@id="scissorsCroper"]' + maskElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if maskElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + line_attribs = {'markerWidth': "8.2212915", + 'markerHeight': "4.8983894", + 'orient': "auto", + 'id':"scissorsCroper"} + markerElement = inkex.etree.SubElement(defs[0],inkex.addNS('marker','svg'), line_attribs) + line_attribs = {'style': "fill:#000000;stroke:#ffffff;stroke-width:0.2;stroke-miterlimit:4;stroke-opacity:1", + 'id': "scissorsCroperPath", + 'd': "m -3.09375,-2.59375 c -0.2875213,-0.019086 -0.5530997,0.080418 -0.78125,0.25 -0.2281503,0.1695818 -0.4212781,0.4427198 -0.4375,0.75 -0.014236,0.2696628 0.032949,0.4281517 0.09375,0.53125 0.011692,0.019827 0.022314,0.017924 0.03125,0.03125 -0.074992,0.019409 -0.1886388,0.0360237 -0.34375,0.0625 -0.3217609,0.0549221 -0.7596575,0.13825127 -1.21875,0.375 l -3.03125,-1.125 c -0.2710413,-0.1042898 -0.5662791,-0.1829987 -0.875,-0.15625 -0.3087209,0.026749 -0.621076,0.1687088 -0.84375,0.4375 a 0.20792008,0.20792008 0 0 0 -0.03125,0.03125 0.20792008,0.20792008 0 0 0 -0.03125,0.0625 0.20792008,0.20792008 0 0 0 0,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.03125 0.20792008,0.20792008 0 0 0 0.09375,0.0625 l 2.9375,1.15625 -2.96875,1.125 a 0.20792008,0.20792008 0 0 0 -0.09375,0.0625 0.20792008,0.20792008 0 0 0 -0.03125,0.03125 0.20792008,0.20792008 0 0 0 -0.03125,0.0625 0.20792008,0.20792008 0 0 0 0,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.03125 C -10.094168,1.9539272 -9.4699318,1.9749423 -9,1.84375 L -5.71875,0.6875 c 0.481754,0.20541523 0.912658,0.3186677 1.1875,0.375 0.1483249,0.030401 0.2392409,0.045912 0.3125,0.0625 0.03663,0.00829 0.024599,-0.00324 0.03125,0 -0.0079,0.02335 -0.010635,0.041757 -0.03125,0.09375 -0.053917,0.1359822 -0.1506131,0.3500538 -0.09375,0.625 0.074929,0.3622982 0.3561361,0.6217769 0.65625,0.75 0.3001139,0.1282231 0.6300895,0.1440646 0.9375,0.03125 0.6444683,-0.175589 0.9014775,-0.9349259 0.625,-1.5 C -2.2324842,0.83910622 -2.4880622,0.66240891 -2.75,0.5625 -3.0119378,0.46259109 -3.2717529,0.42256233 -3.53125,0.4375 c -0.2805605,0.0161501 -0.5796777,0.0351178 -0.8125,-0.03125 -0.1944918,-0.0554414 -0.3308104,-0.18103045 -0.46875,-0.375 0.1925418,-0.25215792 0.4169804,-0.350782 0.71875,-0.375 0.3394341,-0.0272407 0.7247815,0.0434012 1.0625,0 0.010025,-6.5986e-4 0.021283,9.2632e-4 0.03125,0 0.5937358,-0.0551819 1.1050788,-0.57908524 1.0625,-1.1875 -0.00523,-0.6217326 -0.5853909,-1.0659264 -1.15625,-1.0625 z M -2.9375,-1.875 c 0.1401777,0.04894 0.2268596,0.139783 0.25,0.25 a 0.20792008,0.20792008 0 0 0 0.03125,0.03125 c 0.046997,0.1597651 -0.018243,0.2935457 -0.15625,0.40625 -0.1380068,0.1127043 -0.3531142,0.176154 -0.5,0.125 -0.1652738,-0.046651 -0.2408416,-0.1796945 -0.25,-0.34375 -0.00916,-0.1640555 0.046643,-0.3414062 0.21875,-0.4375 0.104863,-0.058549 0.2664752,-0.08005 0.40625,-0.03125 z m -0.21875,3.03125 c 0.2392165,0.047351 0.4697735,0.2941069 0.4375,0.53125 -0.010405,0.1211995 -0.066062,0.2235316 -0.1875,0.28125 C -3.0276883,2.0264684 -3.2009829,2.0387215 -3.3125,2 A 0.20792008,0.20792008 0 0 0 -3.34375,2 C -3.6474031,1.9320987 -3.710744,1.2999504 -3.40625,1.1875 a 0.20792008,0.20792008 0 0 0 0.03125,0 c 0.072689,-0.036572 0.1390112,-0.047034 0.21875,-0.03125 z"} + pathElement = inkex.etree.SubElement(markerElement, inkex.addNS('path','svg'), line_attribs) + + def draw_crop_line(self, x1, y1, x2, y2, name, parent): + if self.options.dotted_crop_marks == True: + self.addMarker() + style = { 'stroke': '#FFFFFF', 'stroke-width': str(self.stroke_width), + 'fill': 'none'} + else: + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none'} + line_attribs = {'style': simplestyle.formatStyle(style), + 'id': name, + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + inkex.etree.SubElement(parent, 'path', line_attribs) + if self.options.dotted_crop_marks == True: + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none' , 'marker-end':'url(#scissorsCroper)', + 'stroke-dasharray' :'0.5,0.25', 'stroke-miterlimit':"4"} + + line_attribs = {'style': simplestyle.formatStyle(style), + 'id': name + "_dotted", + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + inkex.etree.SubElement(parent, 'path', line_attribs) + + def draw_bleed_line(self, x1, y1, x2, y2, name, parent): + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none', + 'stroke-miterlimit': '4', 'stroke-dasharray': '4, 2, 1, 2', + 'stroke-dashoffset': '0' } + line_attribs = {'style': simplestyle.formatStyle(style), + 'id': name, + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + inkex.etree.SubElement(parent, 'path', line_attribs) + + def draw_reg_circles(self, cx, cy, r, name, colours, parent): + for i in range(len(colours)): + style = {'stroke':colours[i], 'stroke-width':str(r / len(colours)), + 'fill':'none'} + circle_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):name, + 'cx':str(cx), 'cy':str(cy), + 'r':str((r / len(colours)) * (i + 0.5))} + inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), + circle_attribs) + + def draw_reg_marks(self, cx, cy, rotate, name, parent): + colours = ['#000000','#00ffff','#ff00ff','#ffff00','#000000'] + g = inkex.etree.SubElement(parent, 'g', { 'id': name }) + for i in range(len(colours)): + style = {'fill':colours[i], 'fill-opacity':'1', 'stroke':'none'} + r = (self.mark_size/2) + step = r + stroke = r / len(colours) + regoffset = stroke * i + regmark_attribs = {'style': simplestyle.formatStyle(style), + 'd': 'm' +\ + ' '+str(-regoffset)+','+str(r) +\ + ' '+str(-stroke) +',0' +\ + ' '+str(step) +','+str(-r) +\ + ' '+str(-step) +','+str(-r) +\ + ' '+str(stroke) +',0' +\ + ' '+str(step) +','+str(r) +\ + ' '+str(-step) +','+str(r) +\ + ' z', + 'transform': 'translate('+str(cx)+','+str(cy)+ \ + ') rotate('+str(rotate)+')'} + inkex.etree.SubElement(g, 'path', regmark_attribs) + + def draw_star_target(self, cx, cy, name, parent): + r = (self.mark_size/2) + style = {'fill':'#000 device-cmyk(1,1,1,1)', 'fill-opacity':'1', 'stroke':'none'} + d = ' M 0,0' + i = 0 + while i < ( 2 * math.pi ): + i += math.pi / 16 + d += ' L 0,0 ' +\ + ' L '+ str(math.sin(i)*r) +','+ str(math.cos(i)*r) +\ + ' L '+ str(math.sin(i+0.09)*r) +','+ str(math.cos(i+0.09)*r) + regmark_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('label','inkscape'):name, + 'transform':'translate('+str(cx)+','+str(cy)+')', + 'd':d} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), + regmark_attribs) + + def draw_coluor_bars(self, cx, cy, rotate, name, parent): + g = inkex.etree.SubElement(parent, 'g', { + 'id':name, + 'transform':'translate('+str(cx)+','+str(cy)+\ + ') rotate('+str(rotate)+')' }) + l = min( self.mark_size / 3, max(self.area_w,self.area_h) / 45 ) + for bar in [{'c':'*', 'stroke':'#000', 'x':0, 'y':-(l+1)}, + {'c':'r', 'stroke':'#0FF', 'x':0, 'y':0}, + {'c':'g', 'stroke':'#F0F', 'x':(l*11)+1, 'y':-(l+1)}, + {'c':'b', 'stroke':'#FF0', 'x':(l*11)+1, 'y':0} + ]: + i = 0 + while i <= 1: + cr = '255' + cg = '255' + cb = '255' + if bar['c'] == 'r' or bar['c'] == '*' : cr = str(255*i) + if bar['c'] == 'g' or bar['c'] == '*' : cg = str(255*i) + if bar['c'] == 'b' or bar['c'] == '*' : cb = str(255*i) + r_att = {'fill':'rgb('+cr+','+cg+','+cb+')', + 'stroke':bar['stroke'], + 'stroke-width':'0.5', + 'x':str((l*i*10)+bar['x']), 'y':str(bar['y']), + 'width':str(l), 'height':str(l)} + r = inkex.etree.SubElement(g, 'rect', r_att) + i += 0.1 + + def get_selection_area(self): + scale = self.unittouu('1px') # convert to document units + sel_area = {} + min_x, min_y, max_x, max_y = False, False, False, False + for id in self.options.ids: + sel_area[id] = {} + for att in [ "x", "y", "width", "height" ]: + args = [ "inkscape", "-I", id, "--query-"+att, self.svg_file ] + sel_area[id][att] = scale* \ + float(Popen(args, stdout=PIPE, stderr=PIPE).communicate()[0]) + current_min_x = sel_area[id]["x"] + current_min_y = sel_area[id]["y"] + current_max_x = sel_area[id]["x"] + \ + sel_area[id]["width"] + current_max_y = sel_area[id]["y"] + \ + sel_area[id]["height"] + if not min_x: min_x = current_min_x + if not min_y: min_y = current_min_y + if not max_x: max_x = current_max_x + if not max_y: max_y = current_max_y + if current_min_x < min_x: min_x = current_min_x + if current_min_y < min_y: min_y = current_min_y + if current_max_x > max_x: max_x = current_max_x + if current_max_y > max_y: max_y = current_max_y + #inkex.errormsg( '>> '+ id + + # ' min_x:'+ str(min_x) + + # ' min_y:'+ str(min_y) + + # ' max_x:'+ str(max_x) + + # ' max_y:'+ str(max_y) ) + self.area_x1 = min_x + self.area_y1 = min_y + self.area_x2 = max_x + self.area_y2 = max_y + self.area_w = max_x - min_x + self.area_h = max_y - min_y + + def effect(self): + self.mark_size = self.unittouu('1cm') + self.min_mark_margin = self.unittouu('3mm') + + if self.options.where_to_crop == 'selection' : + self.get_selection_area() + #inkex.errormsg('Sory, the crop to selection is a TODO feature') + #exit(1) + else : + svg = self.document.getroot() + self.area_w = self.unittouu(svg.get('width')) + self.area_h = self.unittouu(svg.attrib['height']) + self.area_x1 = 0 + self.area_y1 = 0 + self.area_x2 = self.area_w + self.area_y2 = self.area_h + + # Get SVG document dimensions + # self.width must be replaced by self.area_x2. same to others. + svg = self.document.getroot() + #self.width = width = self.unittouu(svg.get('width')) + #self.height = height = self.unittouu(svg.attrib['height']) + + # Convert parameters to user unit + offset = self.unittouu(str(self.options.crop_offset) + \ + self.options.unit) + bt = self.unittouu(str(self.options.bleed_top) + self.options.unit) + bb = self.unittouu(str(self.options.bleed_bottom) + self.options.unit) + bl = self.unittouu(str(self.options.bleed_left) + self.options.unit) + br = self.unittouu(str(self.options.bleed_right) + self.options.unit) + # Bleed margin + if bt < offset : bmt = 0 + else : bmt = bt - offset + if bb < offset : bmb = 0 + else : bmb = bb - offset + if bl < offset : bml = 0 + else : bml = bl - offset + if br < offset : bmr = 0 + else : bmr = br - offset + + # Define the new document limits + offset_left = self.area_x1 - offset + offset_right = self.area_x2 + offset + offset_top = self.area_y1 - offset + offset_bottom = self.area_y2 + offset + + # Get middle positions + middle_vertical = self.area_y1 + ( self.area_h / 2 ) + middle_horizontal = self.area_x1 + ( self.area_w / 2 ) + + # Test if printing-marks layer existis + layer = self.document.xpath( + '//*[@id="printing-marks" and @inkscape:groupmode="layer"]', + namespaces=inkex.NSS) + if layer: svg.remove(layer[0]) # remove if it existis + # Create a new layer + layer = inkex.etree.SubElement(svg, 'g') + layer.set('id', 'printing-marks') + layer.set(inkex.addNS('label', 'inkscape'), 'Printing Marks') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + # Crop Mark + if self.options.crop_marks == True: + # Create a group for Crop Mark + g_attribs = {inkex.addNS('label','inkscape'):'CropMarks', + 'id':'CropMarks'} + g_crops = inkex.etree.SubElement(layer, 'g', g_attribs) + + # Top left Mark + self.draw_crop_line(self.area_x1, offset_top, + self.area_x1, offset_top - self.mark_size, + 'cropTL1', g_crops) + self.draw_crop_line(offset_left, self.area_y1, + offset_left - self.mark_size, self.area_y1, + 'cropTL2', g_crops) + + # Top right Mark + self.draw_crop_line(self.area_x2, offset_top, + self.area_x2, offset_top - self.mark_size, + 'cropTR1', g_crops) + self.draw_crop_line(offset_right, self.area_y1, + offset_right + self.mark_size, self.area_y1, + 'cropTR2', g_crops) + + # Bottom left Mark + self.draw_crop_line(self.area_x1, offset_bottom, + self.area_x1, offset_bottom + self.mark_size, + 'cropBL1', g_crops) + self.draw_crop_line(offset_left, self.area_y2, + offset_left - self.mark_size, self.area_y2, + 'cropBL2', g_crops) + + # Bottom right Mark + self.draw_crop_line(self.area_x2, offset_bottom, + self.area_x2, offset_bottom + self.mark_size, + 'cropBR1', g_crops) + self.draw_crop_line(offset_right, self.area_y2, + offset_right + self.mark_size, self.area_y2, + 'cropBR2', g_crops) + + # Bleed Mark + if self.options.bleed_marks == True: + # Create a group for Bleed Mark + g_attribs = {inkex.addNS('label','inkscape'):'BleedMarks', + 'id':'BleedMarks'} + g_bleed = inkex.etree.SubElement(layer, 'g', g_attribs) + + # Top left Mark + self.draw_bleed_line(self.area_x1 - bl, offset_top - bmt, + self.area_x1 - bl, offset_top - bmt - self.mark_size, + 'bleedTL1', g_bleed) + self.draw_bleed_line(offset_left - bml, self.area_y1 - bt, + offset_left - bml - self.mark_size, self.area_y1 - bt, + 'bleedTL2', g_bleed) + + # Top right Mark + self.draw_bleed_line(self.area_x2 + br, offset_top - bmt, + self.area_x2 + br, offset_top - bmt - self.mark_size, + 'bleedTR1', g_bleed) + self.draw_bleed_line(offset_right + bmr, self.area_y1 - bt, + offset_right + bmr + self.mark_size, self.area_y1 - bt, + 'bleedTR2', g_bleed) + + # Bottom left Mark + self.draw_bleed_line(self.area_x1 - bl, offset_bottom + bmb, + self.area_x1 - bl, offset_bottom + bmb + self.mark_size, + 'bleedBL1', g_bleed) + self.draw_bleed_line(offset_left - bml, self.area_y2 + bb, + offset_left - bml - self.mark_size, self.area_y2 + bb, + 'bleedBL2', g_bleed) + + # Bottom right Mark + self.draw_bleed_line(self.area_x2 + br, offset_bottom + bmb, + self.area_x2 + br, offset_bottom + bmb + self.mark_size, + 'bleedBR1', g_bleed) + self.draw_bleed_line(offset_right + bmr, self.area_y2 + bb, + offset_right + bmr + self.mark_size, self.area_y2 + bb, + 'bleedBR2', g_bleed) + + # Registration Mark + if self.options.reg_marks == True: + # Create a group for Registration Mark + g_attribs = {inkex.addNS('label','inkscape'):'RegistrationMarks', + 'id':'RegistrationMarks'} + g_center = inkex.etree.SubElement(layer, 'g', g_attribs) + + # Left Mark + cx = max( bml + offset, self.min_mark_margin ) + self.draw_reg_marks(self.area_x1 - cx - (self.mark_size/2), + middle_vertical - self.mark_size*1.5, + '0', 'regMarkL', g_center) + + # Right Mark + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_reg_marks(self.area_x2 + cx + (self.mark_size/2), + middle_vertical - self.mark_size*1.5, + '180', 'regMarkR', g_center) + + # Top Mark + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_reg_marks(middle_horizontal, + self.area_y1 - cy - (self.mark_size/2), + '90', 'regMarkT', g_center) + + # Bottom Mark + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_reg_marks(middle_horizontal, + self.area_y2 + cy + (self.mark_size/2), + '-90', 'regMarkB', g_center) + + # Star Target + if self.options.star_target == True: + # Create a group for Star Target + g_attribs = {inkex.addNS('label','inkscape'):'StarTarget', + 'id':'StarTarget'} + g_center = inkex.etree.SubElement(layer, 'g', g_attribs) + + if self.area_h < self.area_w : + # Left Star + cx = max( bml + offset, self.min_mark_margin ) + self.draw_star_target(self.area_x1 - cx - (self.mark_size/2), + middle_vertical, + 'starTargetL', g_center) + # Right Star + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_star_target(self.area_x2 + cx + (self.mark_size/2), + middle_vertical, + 'starTargetR', g_center) + else : + # Top Star + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_star_target(middle_horizontal - self.mark_size*1.5, + self.area_y1 - cy - (self.mark_size/2), + 'starTargetT', g_center) + # Bottom Star + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_star_target(middle_horizontal - self.mark_size*1.5, + self.area_y2 + cy + (self.mark_size/2), + 'starTargetB', g_center) + + + # Colour Bars + if self.options.colour_bars == True: + # Create a group for Colour Bars + g_attribs = {inkex.addNS('label','inkscape'):'ColourBars', + 'id':'PrintingColourBars'} + g_center = inkex.etree.SubElement(layer, 'g', g_attribs) + + if self.area_h > self.area_w : + # Left Bars + cx = max( bml + offset, self.min_mark_margin ) + self.draw_coluor_bars(self.area_x1 - cx - (self.mark_size/2), + middle_vertical + self.mark_size, + 90, + 'PrintingColourBarsL', g_center) + # Right Bars + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_coluor_bars(self.area_x2 + cx + (self.mark_size/2), + middle_vertical + self.mark_size, + 90, + 'PrintingColourBarsR', g_center) + else : + # Top Bars + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_coluor_bars(middle_horizontal + self.mark_size, + self.area_y1 - cy - (self.mark_size/2), + 0, + 'PrintingColourBarsT', g_center) + # Bottom Bars + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_coluor_bars(middle_horizontal + self.mark_size, + self.area_y2 + cy + (self.mark_size/2), + 0, + 'PrintingColourBarsB', g_center) + + + # Page Information + if self.options.page_info == True: + # Create a group for Page Information + g_attribs = {inkex.addNS('label','inkscape'):'PageInformation', + 'id':'PageInformation'} + g_pag_info = inkex.etree.SubElement(layer, 'g', g_attribs) + y_margin = max( bmb + offset, self.min_mark_margin ) + txt_attribs = { + 'style': 'font-size:12px;font-style:normal;font-weight:normal;fill:#000000;font-family:Bitstream Vera Sans,sans-serif;text-anchor:middle;text-align:center', + 'x': str(middle_horizontal), + 'y': str(self.area_y2+y_margin+self.mark_size+20) + } + txt = inkex.etree.SubElement(g_pag_info, 'text', txt_attribs) + txt.text = 'Page size: ' +\ + str(round(self.uutounit(self.area_w,self.options.unit),2)) +\ + 'x' +\ + str(round(self.uutounit(self.area_h,self.options.unit),2)) +\ + ' ' + self.options.unit + + +if __name__ == '__main__': + e = Printing_Marks() + e.affect() diff --git a/fablabchemnitz_purge_short_lines.inx b/fablabchemnitz_purge_short_lines.inx new file mode 100644 index 0000000..e6e4575 --- /dev/null +++ b/fablabchemnitz_purge_short_lines.inx @@ -0,0 +1,19 @@ + + + <_name>Purge Short Lines + fablabchemnitz.de.purge_short_lines + fablabchemnitz_purge_short_lines.py + inkex.py + 10 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_purge_short_lines.py b/fablabchemnitz_purge_short_lines.py new file mode 100644 index 0000000..b9a1005 --- /dev/null +++ b/fablabchemnitz_purge_short_lines.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import sys +sys.path.append('/usr/share/inkscape/extensions') + +# Purge short lines +# This script is designed to be used to clean up/simplify 2D vector exports from +# SketchUp. It ignores everything but paths between exactly 2 points. + +import inkex +import math +from simplestyle import * + +debug = False + +class EnerothPurgeShortEdges(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('-w', '--length', action = 'store', + type = 'float', dest = 'length', default = 10.0) + + def effect(self): + length = self.options.length + svg = self.document.getroot() + + if len(self.selected)==0: + self.iterate_node(self.document.getroot()) + else: + for id, node in self.selected.iteritems(): + self.iterate_node(node) + + def iterate_node(self, node): + self.do_node(node) + for child in node: + self.iterate_node(child) + + def do_node(self, node): + if node.attrib.has_key('d'): + points = [] + + instruction = None + prev_coords = [0,0] + + words = node.get('d').split(' ') + for i, word in enumerate(words): + if len(word) == 1: + instruction = word + # inkex.debug(word) + else: + # Sometimes there is the case that "coords" returns only an array like [-1.29] (only one coordinate) instead of XY coordinates. Reason is the type "map" + coords = map(lambda c: float(c), word.split(',')) + # inkex.debug(coords) + if instruction.lower() == instruction: + # inkex.debug("coords len=" + str(len(coords)) + "prev_coords len=" + str(len(prev_coords))) + coords[0] += prev_coords[0] + coords[1] += prev_coords[1] + # if len(coords) == 2: + # coords[1] += prev_coords[1] + prev_coords = coords + # Assume all coordinates are points of straight lines (instructor being M, m, L or l) + # inkex.debug("X=" + str(coords[0]) + "Y=" + str(coords[1])) + points.append(coords) + # inkex.debug("pointsCount=" + str(len(points))) + + if len(points) == 2: + length = math.sqrt((points[0][0]-points[1][0])**2 + (points[0][1]-points[1][1])**2) + # inkex.debug("length=" + str(length)) + if debug: + inkex.debug(length) + if length < self.options.length: + # inkex.debug("delete") + node.getparent().remove(node) + +EnerothPurgeShortEdges().affect() \ No newline at end of file diff --git a/fablabchemnitz_quickjoint.inx b/fablabchemnitz_quickjoint.inx new file mode 100644 index 0000000..bd0e8d7 --- /dev/null +++ b/fablabchemnitz_quickjoint.inx @@ -0,0 +1,42 @@ + + + <_name>Quick Joint + fablabchemnitz.de.quickjoint + fablabchemnitz_quickjoint.py + inkex.py + Adding box joint tabs or slots to selected object! + + Version 0.3 + + + + 0 + 1 + + + 1 + + + 3.0 + 0.14 + + mm + px + pt + in + cm + + False + False + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_quickjoint.py b/fablabchemnitz_quickjoint.py new file mode 100644 index 0000000..1a5bf1c --- /dev/null +++ b/fablabchemnitz_quickjoint.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python +""" +Copyright (C) 2017 Jarrett Rainier jrainier@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +""" +import inkex, os, cmath, simplepath, simplestyle +try: + from subprocess import Popen, PIPE + bsubprocess = True +except: + bsubprocess = False + +debugEn = False +def debugMsg(input): + if debugEn: + inkex.debug(input) + +def numlines(path): + retval = 0 + for elem in path: + if elem[0] == "L" or elem[0] == "V" or elem[0] == "H" or elem[0] == "Z": + retval = retval + 1 + return retval + +def getmnumber(path): + retval = 0 + for elem in path: + if elem[0] == "M": + return retval + retval = retval + 1 + return retval + +def getlinenumber(path, side): + current = -1 + total = 0 + for elem in path: + if elem[0] == "L" or elem[0] == "V" or elem[0] == "H" or elem[0] == "Z": + current += 1 + if current == side: + return total + total += 1 + return -1 + +class QuickJoint(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-s", "--side", + action="store", type="int", + dest="side", default=0, + help="Object face to tabify") + self.OptionParser.add_option("-n", "--numtabs", + action="store", type="int", + dest="numtabs", default=1, + help="Number of tabs to add") + self.OptionParser.add_option("-l", "--numslots", + action="store", type="int", + dest="numslots", default=1, + help="Number of slots to add") + self.OptionParser.add_option("-t", "--thickness", + action="store", type="float", + dest="thickness", default=3.0, + help="Material thickness") + self.OptionParser.add_option("-k", "--kerf", + action="store", type="float", + dest="kerf", default=0.14, + help="Measured kerf of cutter") + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default="mm", + help="Measurement units") + self.OptionParser.add_option("-e", "--edgefeatures", + action="store", type="inkbool", + dest="edgefeatures", default=False, + help="Allow tabs to go right to edges") + self.OptionParser.add_option("-f", "--flipside", + action="store", type="inkbool", + dest="flipside", default=False, + help="Flip side of lines that tabs are drawn onto") + self.OptionParser.add_option("-a", "--activetab", + action="store", type="string", + dest="activetab", default='', + help="Tab or slot menus") + + def to_complex(self, line): + debugMsg("To complex: ") + debugMsg(line) + return complex(line[0], line[1]) + + def get_length(self, line): + polR, polPhi = cmath.polar(line) + return polR + + def draw_parallel(self, start, guideLine, stepDistance): + polR, polPhi = cmath.polar(guideLine) + polR = stepDistance + return (cmath.rect(polR, polPhi) + start) + + def draw_perpendicular(self, start, guideLine, stepDistance, invert = False): + polR, polPhi = cmath.polar(guideLine) + polR = stepDistance + debugMsg(polPhi) + if invert: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + debugMsg(polPhi) + debugMsg(cmath.rect(polR, polPhi)) + return (cmath.rect(polR, polPhi) + start) + + def draw_box(self, start, guideLine, xDistance, yDistance, kerf): + polR, polPhi = cmath.polar(guideLine) + + #Kerf expansion + if self.flipside: + start -= cmath.rect(kerf / 2, polPhi) + start -= cmath.rect(kerf / 2, polPhi + (cmath.pi / 2)) + else: + start -= cmath.rect(kerf / 2, polPhi) + start -= cmath.rect(kerf / 2, polPhi - (cmath.pi / 2)) + + lines = [] + lines.append(['M', [start.real, start.imag]]) + + #Horizontal + polR = xDistance + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + #Vertical + polR = yDistance + if self.flipside: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + #Horizontal + polR = xDistance + if self.flipside: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + lines.append(['Z', []]) + + return lines + + def draw_tabs(self, path, line): + #Male tab creation + + if line == 0: + #todo: wrap around? + #find edge case where this throws + #probably an open shape + throw() + + + start = self.to_complex(path[line - 1][1]) + + #Line is between last and first (closed) nodes + closePath = False + if path[line][0] == "Z": + line = getmnumber(path) + closePath = True + + end = self.to_complex(path[line][1]) + debugMsg(start) + debugMsg(end) + + debugMsg("5-") + debugMsg(line) + debugMsg(path[line - 1]) + debugMsg(path[line]) + + if self.edgefeatures == False: + segCount = (self.numtabs * 2) + drawValley = False + else: + segCount = (self.numtabs * 2) - 1 + drawValley = False + + distance = end - start + debugMsg(distance) + debugMsg("segCount - " + str(segCount)) + + try: + if self.edgefeatures: + segLength = self.get_length(distance) / segCount + else: + segLength = self.get_length(distance) / (segCount + 1) + except: + segLength = self.get_length(distance) + + debugMsg("segLength - " + str(segLength)) + newLines = [] + + if self.edgefeatures == False: + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("Initial - " + str(start)) + + + for i in range(segCount): + if drawValley == True: + #Vertical + start = self.draw_perpendicular(start, distance, self.thickness, self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("ValleyV - " + str(start)) + drawValley = False + #Horizontal + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("ValleyH - " + str(start)) + else: + #Vertical + start = self.draw_perpendicular(start, distance, self.thickness, not self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("HillV - " + str(start)) + drawValley = True + #Horizontal + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("HillH - " + str(start)) + + if self.edgefeatures == True: + start = self.draw_perpendicular(start, distance, self.thickness, self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg("Final - " + str(start)) + + if closePath: + newLines.append(['Z', []]) + return newLines + + + def draw_slots(self, path): + #Female slot creation + + start = self.to_complex(path[0][1]) + end = self.to_complex(path[1][1]) + + if self.edgefeatures == False: + segCount = (self.numslots * 2) + else: + segCount = (self.numslots * 2) - 1 + + distance = end - start + debugMsg(distance) + debugMsg("segCount - " + str(segCount)) + + try: + if self.edgefeatures: + segLength = self.get_length(distance) / segCount + else: + segLength = self.get_length(distance) / (segCount + 1) + except: + segLength = self.get_length(distance) + + debugMsg("segLength - " + str(segLength)) + newLines = [] + + line_style = simplestyle.formatStyle({ 'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.unittouu('1px')) }) + + for i in range(segCount): + if (self.edgefeatures and (i % 2) == 0) or (not self.edgefeatures and (i % 2)): + newLines = self.draw_box(start, distance, segLength, self.thickness, self.kerf) + debugMsg(newLines) + + slot_id = self.uniqueId('slot') + g = inkex.etree.SubElement(self.current_layer, 'g', {'id':slot_id}) + + line_atts = { 'style':line_style, 'id':slot_id+'-inner-close-tab', 'd':simplepath.formatPath(newLines) } + inkex.etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + #Find next point + polR, polPhi = cmath.polar(distance) + polR = segLength + start = cmath.rect(polR, polPhi) + start + + def effect(self): + self.side = self.options.side + self.numtabs = self.options.numtabs + self.numslots = self.options.numslots + self.thickness = self.unittouu(str(self.options.thickness) + self.options.units) + self.kerf = self.unittouu(str(self.options.kerf) + self.options.units) + self.units = self.options.units + self.edgefeatures = self.options.edgefeatures + self.flipside = self.options.flipside + self.activetab = self.options.activetab + + for id, node in self.selected.iteritems(): + debugMsg(node) + if node.tag == inkex.addNS('path','svg'): + #p = cubicsuperpath.parsePath(node.get('d')) + p = simplepath.parsePath(node.get('d')) + + debugMsg('1') + debugMsg(p) + numLines = numlines(p) + lineNum = getlinenumber(p, self.side % numLines) + + newPath = [] + if self.activetab == '"tabpage"': + newPath = self.draw_tabs(p, lineNum) + debugMsg('2') + debugMsg(p[:lineNum]) + debugMsg('3') + debugMsg(newPath) + debugMsg('4') + debugMsg( p[lineNum + 1:]) + finalPath = p[:lineNum] + newPath + p[lineNum + 1:] + + debugMsg(finalPath) + + node.set('d',simplepath.formatPath(finalPath)) + elif self.activetab == '"slotpage"': + newPath = self.draw_slots(p) + + +if __name__ == '__main__': + e = QuickJoint() + e.affect() diff --git a/fablabchemnitz_raster2laser.inx b/fablabchemnitz_raster2laser.inx new file mode 100644 index 0000000..13936ef --- /dev/null +++ b/fablabchemnitz_raster2laser.inx @@ -0,0 +1,74 @@ + + + Raster 2 Laser GCode + fablabchemnitz.de.raster2laser + fablabchemnitz_raster2laser.py + inkex.py + Raster 2 Laser GCode generator + created by 305 Engineering with VE7FRG Remix + + + true + + <_item value="#ffffff">White + <_item value="#000000">Black + + + <_item value="1">1 pixel/mm + <_item value="2">2 pixel/mm + <_item value="5">5 pixel/mm + <_item value="10">10 pixel/mm + + + <_item value="1">0.21R + 0.71G + 0.07B + <_item value="2">(R+G+B)/3 + <_item value="3">R + <_item value="4">G + <_item value="5">B + <_item value="6">Max Color + <_item value="7">Min Color + + + <_item value="1">B/W fixed threshold + <_item value="2">B/W random threshold + <_item value="3">Halftone + <_item value="4">Halftone row + <_item value="5">Halftone column + <_item value="6">Grayscale + + 128 + 40 + 3 + 255 + + <_item value="1">256 + <_item value="2">128 + <_item value="4">64 + <_item value="8">32 + <_item value="16">16 + <_item value="32">8 + + 200 + false + + <_item value="1">G28 (Standard) + <_item value="2">$H (GRBL) + <_item value="3">No Homing + <_item value="4">CR-10 Laser home X-47 Y-27 Z100 + + M106 + M107 + false + If "Preview only" is true the gcode file will not be generated. + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_raster2laser.py b/fablabchemnitz_raster2laser.py new file mode 100644 index 0000000..c38197d --- /dev/null +++ b/fablabchemnitz_raster2laser.py @@ -0,0 +1,631 @@ +''' +# ---------------------------------------------------------------------------- +# Copyright (C) 2014 305engineering <305engineering@gmail.com> +# Original concept by 305engineering. +# +# "THE MODIFIED BEER-WARE LICENSE" (Revision: my own :P): +# <305engineering@gmail.com> wrote this file. As long as you retain this notice you +# can do whatever you want with this stuff (except sell). If we meet some day, +# and you think this stuff is worth it, you can buy me a beer in return. +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# ---------------------------------------------------------------------------- +''' + + +import sys +import os +import re + +sys.path.append('/usr/share/inkscape/extensions') +sys.path.append('/Applications/Inkscape.app/Contents/Resources/extensions') + +import subprocess +import math + +import inkex +import fablabchemnitz_png +import array + + +class GcodeExport(inkex.Effect): + +######## Invoked by _main() + def __init__(self): + """init the effect library and get options from gui""" + inkex.Effect.__init__(self) + + # Image export options + self.OptionParser.add_option("-d", "--directory",action="store", type="string", dest="directory", default="/home/",help="Directory for files") ####check_dir + self.OptionParser.add_option("-f", "--filename", action="store", type="string", dest="filename", default="-1.0", help="File name") + self.OptionParser.add_option("","--add-numeric-suffix-to-filename", action="store", type="inkbool", dest="add_numeric_suffix_to_filename", default=True,help="Add numeric suffix to filename") + self.OptionParser.add_option("","--bg_color",action="store",type="string",dest="bg_color",default="",help="") + self.OptionParser.add_option("","--resolution",action="store", type="int", dest="resolution", default="5",help="") #Usare il valore su float(xy)/resolution e un case per i DPI dell export + + + # How to convert to grayscale + self.OptionParser.add_option("","--grayscale_type",action="store", type="int", dest="grayscale_type", default="1",help="") + + # Conversion Mode in Black and White + self.OptionParser.add_option("","--conversion_type",action="store", type="int", dest="conversion_type", default="1",help="") + + # Modal Options + self.OptionParser.add_option("","--BW_Max",action="store", type="int", dest="BW_Max", default="255",help="") + self.OptionParser.add_option("","--Laser_Min",action="store", type="int", dest="Laser_Min", default="40",help="") + self.OptionParser.add_option("","--Dim_Test_Times",action="store", type="int", dest="Dim_Test_Times", default="3",help="") + self.OptionParser.add_option("","--BW_threshold",action="store", type="int", dest="BW_threshold", default="128",help="") + self.OptionParser.add_option("","--grayscale_resolution",action="store", type="int", dest="grayscale_resolution", default="1",help="") + + #Black Velocity and Moving + self.OptionParser.add_option("","--speed_ON",action="store", type="int", dest="speed_ON", default="1200",help="") + + # Mirror Y + self.OptionParser.add_option("","--flip_y",action="store", type="inkbool", dest="flip_y", default=False,help="") + + # Homing + self.OptionParser.add_option("","--homing",action="store", type="int", dest="homing", default="4",help="") + + # Commands + self.OptionParser.add_option("","--laseron", action="store", type="string", dest="laseron", default="M106", help="") + self.OptionParser.add_option("","--laseroff", action="store", type="string", dest="laseroff", default="M107", help="") + + + # Preview = BN image only + self.OptionParser.add_option("","--preview_only",action="store", type="inkbool", dest="preview_only", default=False,help="") + + #inkex.errormsg("BLA BLA BLA Message to display") #DEBUG + + +######## Invoked by __init __ () +######## Here everything is done + def effect(self): + + + current_file = self.args[-1] + bg_color = self.options.bg_color + + + ##Implementare check_dir + + if (os.path.isdir(self.options.directory)) == True: + + ##CODE THAT IS THE DIRECTORY + #inkex.errormsg("OK") #DEBUG + + + #I add a suffix to the filename to not overwrite the files + if self.options.add_numeric_suffix_to_filename : + dir_list = os.listdir(self.options.directory) #List all the files in the work directory + temp_name = self.options.filename + max_n = 0 + for s in dir_list : + r = re.match(r"^%s_0*(\d+)%s$"%(re.escape(temp_name),'.png' ), s) + if r : + max_n = max(max_n,int(r.group(1))) + self.options.filename = temp_name + "_" + ( "0"*(4-len(str(max_n+1))) + str(max_n+1) ) + + + #Generate file paths to use + + + suffix = "" + if self.options.conversion_type == 1: + suffix = "_BWfix_"+str(self.options.BW_threshold)+"_" + elif self.options.conversion_type == 2: + suffix = "_BWrnd_" + elif self.options.conversion_type == 3: + suffix = "_H_" + elif self.options.conversion_type == 4: + suffix = "_Hrow_" + elif self.options.conversion_type == 5: + suffix = "_Hcol_" + else: + if self.options.grayscale_resolution == 1: + suffix = "_Gray_256_" + elif self.options.grayscale_resolution == 2: + suffix = "_Gray_128_" + elif self.options.grayscale_resolution == 4: + suffix = "_Gray_64_" + elif self.options.grayscale_resolution == 8: + suffix = "_Gray_32_" + elif self.options.grayscale_resolution == 16: + suffix = "_Gray_16_" + elif self.options.grayscale_resolution == 32: + suffix = "_Gray_8_" + else: + suffix = "_Gray_" + + + pos_file_png_exported = os.path.join(self.options.directory,self.options.filename+".png") + pos_file_png_BW = os.path.join(self.options.directory,self.options.filename+suffix+"preview.png") + pos_file_gcode = os.path.join(self.options.directory,self.options.filename+suffix+".gcode") + posDimTest_file_gcode = os.path.join(self.options.directory,self.options.filename+suffix+"DimTest.gcode") + + #Export the image to PNG + self.exportPage(pos_file_png_exported,current_file,bg_color) + + + + #TO DO + #Manipulate the PNG image to generate the Gcode file + self.PNGtoGcode(pos_file_png_exported,pos_file_png_BW,pos_file_gcode) + + if self.options.Dim_Test_Times >= 1: + self.exportDimensionTest(pos_file_png_exported, pos_file_png_BW, posDimTest_file_gcode) + + else: + inkex.errormsg("Directory does not exist! Please specify existing directory!") + + + + +######## EXPORT IMAGE IN PNG +######## Invoked by effect () + + def exportPage(self,pos_file_png_exported,current_file,bg_color): + ######## CREATING THE FILE PNG ######## + #Create the image inside the folder named "pos_file_png_exported" + #-d 127 = resolution 127DPI => 5 pixels / mm 1pixel = 0.2mm + ###command="inkscape -C -e \"%s\" -b\"%s\" %s -d 127" % (pos_file_png_exported,bg_color,current_file) + + if self.options.resolution == 1: + DPI = 25.4 + elif self.options.resolution == 2: + DPI = 50.8 + elif self.options.resolution == 5: + DPI = 127 + else: + DPI = 254 + + command="inkscape -C -e \"%s\" -b\"%s\" %s -d %s" % (pos_file_png_exported,bg_color,current_file,DPI) #Command from command line to export to PNG + + p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return_code = p.wait() + f = p.stdout + err = p.stderr + + +######## Create a dimensional test of image + def exportDimensionTest(self,pos_file_png_exported,pos_file_png_BW,posDimTest_file_gcode): + #if self.options.Dim_Test_Times > 0: + reader = fablabchemnitz_png.Reader(pos_file_png_exported)#PNG files generated + w, h, pixels, metadata = reader.read_flat() + file_testgcode = open(posDimTest_file_gcode, 'w') #Create the dimenstional test file + file_testgcode.write('; Generated with:\n; "Raster 2 Laser Gcode generator"\n; by 305 Engineering\n; With a remix by VE7FRG\n;\n;\n') + file_testgcode.write('G21; Set units to millimeters\n') + file_testgcode.write('G90; Use absolute coordinates\n') + file_testgcode.write('G92; Coordinate Offset\n') + + if self.options.homing == 1: + file_testgcode.write('G28 X0 Y0; home all axes\n') + file_testgcode.write('M42 P44 S0; Turn on LEDs\n') + file_testgcode.write('M42 P64 S0; Turn on VENT Fans\n') + elif self.options.homing == 2: + file_testgcode.write('$H; home all axes\n') + elif self.options.homing == 4: + file_testgcode.write('G28; home all axes\n') + file_testgcode.write('G92 X-47 Y-27; Coordinate Offset for CR-10 Mini\n') + file_testgcode.write('G0 Z100; Set laser head 100mm above surface\n') + else: + pass + + file_testgcode.write(self.options.laseron + ' S' + str(self.options.Laser_Min) + '\n') + file_testgcode.write('; This is the number of width: '+ str(w) + '\n') + file_testgcode.write('; This is the number of height: '+ str(h) + '\n') + file_testgcode.write('; This is the number of tests: '+ str(self.options.Dim_Test_Times) + '\n') + file_testgcode.write('; This is the resolution number '+ str(self.options.resolution) + '\n') + p=1 + while p <= self.options.Dim_Test_Times: + file_testgcode.write('G1 X' + str(w / self.options.resolution) + '\n') + file_testgcode.write('G1 Y' + str(h / self.options.resolution) + '\n') + file_testgcode.write('G1 X0\n') + file_testgcode.write('G1 Y0\n') + + p = p+1 + file_testgcode.write(self.options.laseroff + '\n') + file_testgcode.write('M42 P44 S255; Turn on LEDs\n') + file_testgcode.close() + + +######## CREATE IMAGE IN B / W AND THEN GENERATE GCODE +######## Richiamata da effect() + + def PNGtoGcode(self,pos_file_png_exported,pos_file_png_BW,pos_file_gcode): + + ######## CREATE IMAGE IN GRAY SCALE ######## + #I scroll the image and make it a list array + + reader = fablabchemnitz_png.Reader(pos_file_png_exported)#PNG files generated + + w, h, pixels, metadata = reader.read_flat() + + + matrice = [[255 for i in range(w)]for j in range(h)] #List al posto di un array + + + #I write a new image in 8bit Gray scale + #Pixel by pixel copy + + if self.options.grayscale_type == 1: + #0.21R + 0.71G + 0.07B + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + matrice[y][x] = int(pixels[pixel_position]*0.21 + pixels[(pixel_position+1)]*0.71 + pixels[(pixel_position+2)]*0.07) + + elif self.options.grayscale_type == 2: + #(R+G+B)/3 + for y in range(h): #Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + matrice[y][x] = int((pixels[pixel_position] + pixels[(pixel_position+1)]+ pixels[(pixel_position+2)]) / 3 ) + + elif self.options.grayscale_type == 3: + #R + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + matrice[y][x] = int(pixels[pixel_position]) + + elif self.options.grayscale_type == 4: + #G + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + matrice[y][x] = int(pixels[(pixel_position+1)]) + + elif self.options.grayscale_type == 5: + #B + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + matrice[y][x] = int(pixels[(pixel_position+2)]) + + elif self.options.grayscale_type == 6: + #Max Color + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + list_RGB = pixels[pixel_position] , pixels[(pixel_position+1)] , pixels[(pixel_position+2)] + matrice[y][x] = int(max(list_RGB)) + + else: + #Min Color + for y in range(h): # Y ranges from 0 to h-1 + for x in range(w): # X varies from 0 to w-1 + pixel_position = (x + y * w)*4 if metadata['alpha'] else (x + y * w)*3 + list_RGB = pixels[pixel_position] , pixels[(pixel_position+1)] , pixels[(pixel_position+2)] + matrice[y][x] = int(min(list_RGB)) + + + ####Master matrix contains the grayscale image + + + ######## GENERATE BLACK AND BLACK IMAGE ######## + #Scorro matrice and generate matrice_BN + B=255 + N=0 + + matrice_BN = [[255 for i in range(w)]for j in range(h)] + + + if self.options.conversion_type == 1: + #B/W fixed threshold + soglia = self.options.BW_threshold + for y in range(h): + for x in range(w): + if matrice[y][x] >= soglia : + matrice_BN[y][x] = B + else: + matrice_BN[y][x] = N + + + elif self.options.conversion_type == 2: + #B/W random threshold + from random import randint + for y in range(h): + for x in range(w): + soglia = randint(20,235) + if matrice[y][x] >= soglia : + matrice_BN[y][x] = B + else: + matrice_BN[y][x] = N + + + elif self.options.conversion_type == 3: + #Halftone + Step1 = [[B,B,B,B,B],[B,B,B,B,B],[B,B,N,B,B],[B,B,B,B,B],[B,B,B,B,B]] + Step2 = [[B,B,B,B,B],[B,B,N,B,B],[B,N,N,N,B],[B,B,N,B,B],[B,B,B,B,B]] + Step3 = [[B,B,N,B,B],[B,N,N,N,B],[N,N,N,N,N],[B,N,N,N,B],[B,B,N,B,B]] + Step4 = [[B,N,N,N,B],[N,N,N,N,N],[N,N,N,N,N],[N,N,N,N,N],[B,N,N,N,B]] + + for y in range(h/5): + for x in range(w/5): + media = 0 + for y2 in range(5): + for x2 in range(5): + media += matrice[y*5+y2][x*5+x2] + media = media /25 + for y3 in range(5): + for x3 in range(5): + if media >= 250 and media <= 255: + matrice_BN[y*5+y3][x*5+x3] = B + if media >= 190 and media < 250: + matrice_BN[y*5+y3][x*5+x3] = Step1[y3][x3] + if media >= 130 and media < 190: + matrice_BN[y*5+y3][x*5+x3] = Step2[y3][x3] + if media >= 70 and media < 130: + matrice_BN[y*5+y3][x*5+x3] = Step3[y3][x3] + if media >= 10 and media < 70: + matrice_BN[y*5+y3][x*5+x3] = Step4[y3][x3] + if media >= 0 and media < 10: + matrice_BN[y*5+y3][x*5+x3] = N + + + elif self.options.conversion_type == 4: + #Halftone row + Step1r = [B,B,N,B,B] + Step2r = [B,N,N,B,B] + Step3r = [B,N,N,N,B] + Step4r = [N,N,N,N,B] + + for y in range(h): + for x in range(w/5): + media = 0 + for x2 in range(5): + media += matrice[y][x*5+x2] + media = media /5 + for x3 in range(5): + if media >= 250 and media <= 255: + matrice_BN[y][x*5+x3] = B + if media >= 190 and media < 250: + matrice_BN[y][x*5+x3] = Step1r[x3] + if media >= 130 and media < 190: + matrice_BN[y][x*5+x3] = Step2r[x3] + if media >= 70 and media < 130: + matrice_BN[y][x*5+x3] = Step3r[x3] + if media >= 10 and media < 70: + matrice_BN[y][x*5+x3] = Step4r[x3] + if media >= 0 and media < 10: + matrice_BN[y][x*5+x3] = N + + + elif self.options.conversion_type == 5: + #Halftone column + Step1c = [B,B,N,B,B] + Step2c = [B,N,N,B,B] + Step3c = [B,N,N,N,B] + Step4c = [N,N,N,N,B] + + for y in range(h/5): + for x in range(w): + media = 0 + for y2 in range(5): + media += matrice[y*5+y2][x] + media = media /5 + for y3 in range(5): + if media >= 250 and media <= 255: + matrice_BN[y*5+y3][x] = B + if media >= 190 and media < 250: + matrice_BN[y*5+y3][x] = Step1c[y3] + if media >= 130 and media < 190: + matrice_BN[y*5+y3][x] = Step2c[y3] + if media >= 70 and media < 130: + matrice_BN[y*5+y3][x] = Step3c[y3] + if media >= 10 and media < 70: + matrice_BN[y*5+y3][x] = Step4c[y3] + if media >= 0 and media < 10: + matrice_BN[y*5+y3][x] = N + + else: + #Grayscale + if self.options.grayscale_resolution == 1: + matrice_BN = matrice + else: + for y in range(h): + for x in range(w): + if matrice[y][x] <= 1: + matrice_BN[y][x] == 0 + + if matrice[y][x] >= 254: + matrice_BN[y][x] == 255 + + if matrice[y][x] > 1 and matrice[y][x] <254: + matrice_BN[y][x] = ( matrice[y][x] // self.options.grayscale_resolution ) * self.options.grayscale_resolution + + + + ####Ora matrice_BN contiene l'immagine in Bianco (255) e Nero (0) + + + #### SAVE BLACK AND BLACK IMAGE #### + file_img_BN = open(pos_file_png_BW, 'wb') #Create the file + Costruttore_img = fablabchemnitz_png.Writer(w, h, greyscale=True, bitdepth=8) #Setting the image file + Costruttore_img.write(file_img_BN, matrice_BN) #Image file builder + file_img_BN.close() #Close the file + + + #### GENERO IL FILE GCODE #### + if self.options.preview_only == False: #Genero Gcode solo se devo + + if self.options.flip_y == False: #Inverto asse Y solo se flip_y = False + #-> coordinate Cartesiane (False) Coordinate "informatiche" (True) + matrice_BN.reverse() + + + Laser_ON = False + F_G01 = self.options.speed_ON + Scala = self.options.resolution + Scaler = float(self.options.BW_Max)/255 + + file_gcode = open(pos_file_gcode, 'w') #Create the file + + #Configurazioni iniziali standard Gcode + file_gcode.write('; Generated with:\n; "Raster 2 Laser Gcode generator"\n; by 305 Engineering\n; With a remix by VE7FRG\n;\n;\n') + #HOMING + + file_gcode.write('G21; Set units to millimeters\n') + file_gcode.write('G90; Use absolute coordinates\n') + file_gcode.write('G92; Coordinate Offset\n') + if self.options.homing == 1: + file_gcode.write('G28; home all axes\n') + file_gcode.write('M42 P44 S0; Turn on LEDs\n') + file_gcode.write('M42 P64 S0; Turn on VENT Fans\n') + elif self.options.homing == 2: + file_gcode.write('$H; home all axes\n') + elif self.options.homing == 4: + file_gcode.write('G28 X0 Y0; home all axes\n') + file_gcode.write('G92 X-47 Y-27; Coordinate Offset for CR-10 Mini\n') + file_gcode.write('G0 Z100; Set laser head 100mm above surface\n') + else: + pass + +# file_gcode.write('G90; Use absolute coordinates\n') +# file_gcode.write('G92; Coordinate Offset\n') + + #Creazione del Gcode + + #allargo la matrice per lavorare su tutta l'immagine + for y in range(h): + matrice_BN[y].append(B) + w = w+1 + + if self.options.conversion_type != 6: + for y in range(h): + if y % 2 == 0 : + for x in range(w): + if matrice_BN[y][x] == N : + if Laser_ON == False : + #file_gcode.write('G00 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G00) + '\n') + file_gcode.write('G00 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + '\n') #tolto il Feed sul G00 + file_gcode.write(self.options.laseron + '\n') + Laser_ON = True + if Laser_ON == True : #DEVO evitare di uscire dalla matrice + if x == w-1 : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) +' F' + str(F_G01) + '\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + else: + if matrice_BN[y][x+1] != N : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + else: + for x in reversed(range(w)): + if matrice_BN[y][x] == N : + if Laser_ON == False : + #file_gcode.write('G00 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G00) + '\n') + file_gcode.write('G00 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + '\n') #tolto il Feed sul G00 + file_gcode.write(self.options.laseron + '\n') + Laser_ON = True + if Laser_ON == True : #DEVO evitare di uscire dalla matrice + if x == 0 : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) +' F' + str(F_G01) + '\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + else: + if matrice_BN[y][x-1] != N : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + + else: ##SCALA DI GRIGI + for y in range(h): + if y % 2 == 0 : + for x in range(w): + if matrice_BN[y][x] != B : + if Laser_ON == False : + file_gcode.write('G00 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) +'\n') + file_gcode.write(self.options.laseron + ' '+ ' S' + str(int(round(float((255 - matrice_BN[y][x])*Scaler)))) +'\n') + Laser_ON = True + + if Laser_ON == True : #DEVO evitare di uscire dalla matrice + if x == w-1 : #controllo fine riga + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) +' F' + str(F_G01) + '\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + + else: + if matrice_BN[y][x+1] == B : + file_gcode.write('G1 X' + str(float(x+1)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + + elif matrice_BN[y][x] != matrice_BN[y][x+1] : + file_gcode.write('G1 X' + str(float(x+1)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + file_gcode.write(self.options.laseron + ' '+ ' S' + str(int(round(float((255 - matrice_BN[y][x])*Scaler)))) +'\n') + + + else: + for x in reversed(range(w)): + if matrice_BN[y][x] != B : + if Laser_ON == False : + file_gcode.write('G00 X' + str(float(x+1)/Scala) + ' Y' + str(float(y)/Scala) +'\n') + #file_gcode.write(self.options.laseron + ' '+ ' S' + str(self.options.BW_Max - matrice_BN[y][x]) +'\n') + file_gcode.write(self.options.laseron + ' '+ ' S' + str(int(round(float((255 - matrice_BN[y][x])*Scaler)))) +'\n') + Laser_ON = True + + if Laser_ON == True : #DEVO evitare di uscire dalla matrice + if x == 0 : #controllo fine riga ritorno + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) +' F' + str(F_G01) + '\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + + else: + if matrice_BN[y][x-1] == B : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + file_gcode.write(self.options.laseroff + '\n') + Laser_ON = False + + elif matrice_BN[y][x] != matrice_BN[y][x-1] : + file_gcode.write('G1 X' + str(float(x)/Scala) + ' Y' + str(float(y)/Scala) + ' F' + str(F_G01) +'\n') + #file_gcode.write(self.options.laseron + ' '+ ' S' + str(self.options.BW_Max - matrice_BN[y][x-1]) +'\n') + file_gcode.write(self.options.laseron + ' '+ ' S' + str(int(round(float((255 - matrice_BN[y][x])*Scaler)))) +'\n') + + + + #Configurazioni finali standard Gcode + file_gcode.write('G00 X0 Y0; home\n') + #HOMING + if self.options.homing == 1: + file_gcode.write('G28 X0 Y0; home all axes\n') + file_gcode.write('M42 P44 S255; Turn on LEDs\n') + file_gcode.write('M42 P64 S255; Turn on VENT Fans\n') + elif self.options.homing == 2: + file_gcode.write('$H; home all axes\n') + else: + pass + + file_gcode.close() #Chiudo il file + + + + +######## ######## ######## ######## ######## ######## ######## ######## ######## + + +def _main(): + e=GcodeExport() + e.affect() + + exit() + +if __name__=="__main__": + _main() + + + + + + + diff --git a/fablabchemnitz_ratchet.inx b/fablabchemnitz_ratchet.inx new file mode 100644 index 0000000..cb86e91 --- /dev/null +++ b/fablabchemnitz_ratchet.inx @@ -0,0 +1,57 @@ + + + + <_name>Ratchet + fablabchemnitz.de.ratchet + fablabchemnitz_ratchet.py + 12 + true + 1.000 + 30.000 + 28.000 + + + + + + + + + <_param name="header_description" type="description" appearance="header">Author / License + <_param name="some_description" type="description" xml:space="preserve"> written by Kie (inkscape@kitamura-studios.com) + Draw Ratchet Copyright (C) 2016 Kie Brooks + Distributed under GPLv3 or later + + This is a simple extension to save time drawing ratchets. + + + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_ratchet.py b/fablabchemnitz_ratchet.py new file mode 100644 index 0000000..710e6be --- /dev/null +++ b/fablabchemnitz_ratchet.py @@ -0,0 +1,129 @@ +#!/usr/bin/python +# +# Copyright (C) 2016 Kie Brooks +# Distributed under GPLv3 or later. +# draw_ratchet +# version 0.1 +# +# This file is part of draw_ratchet +# +# draw_ratchet is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# +# description : +# draw ratchet gears to arbitrary sizes and precision +# +# I am not an engineer, I am sure this little program could be improved or made much more complex, +# it may contain horrible flaws but it fills my current need and should be easy to improve on. +# Alternatively pay me some money and I might do it for you ;P +# +# This program is used by inkscape. +# It can be found in the menu : extensions -> render -> ratchet +# see file draw_ratch.inx +# (directory ~/.config/inkscape/extensions/) + +import inkex, simplestyle +import math + +Line_style = { 'stroke' : '#000000', + 'stroke-width' : '0.5px', + 'fill' : 'none' } + +### SVG shape helpers +def draw_SVG_circle(parent, r, cx, cy, name, style): + " structure an SVG circle entity under parent " + circ_attribs = {'style': simplestyle.formatStyle(style), + 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'): name} + circle = inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + +### +class Ratchet(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--centre_hole", action="store", type='inkbool', + dest="centre_hole", default=True, help="Show or not") + self.OptionParser.add_option("--teeth", action="store", type="int", + dest="teeth", default=12, help="Number of teeth around outside") + self.OptionParser.add_option("--centre_hole_diam", action="store", type="float", + dest="centre_hole_diam", default=1, help="Dia of central hole") + self.OptionParser.add_option("--diam_in", action="store", type="float", + dest="diam_in", default=28, help="Inner diamter of the Ratchet") + self.OptionParser.add_option("--diam_out", action="store", type="float", + dest="diam_out", default=30, help="Outer diamter of the Ratchet") + self.OptionParser.add_option('--vtooth_shape', action='store', type='string', + dest='vtooth_shape', default='straight', help="Shape of tooth") + self.OptionParser.add_option('--htooth_shape', action='store', type='string', + dest='htooth_shape', default='curve', help="Shape of tooth") + + + + def effect(self): + # sort out the options + teeth = self.options.teeth + diam_in = self.options.diam_in + diam_out = self.options.diam_out + vtooth_shape = self.options.vtooth_shape + htooth_shape = self.options.htooth_shape + # Create group center of view + t = 'translate(%s,%s)' % (self.view_center[0], self.view_center[1]) + grp_attribs = {inkex.addNS('label','inkscape'):'Ratchet', 'transform':t} + grp = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + # + # Central hole (at origin) + if self.options.centre_hole: + draw_SVG_circle(grp, self.options.centre_hole_diam, 0,0, 'Central_hole', Line_style) + #Polygon drawing + # + # L - line : x posn, y posn + # A - arc : radius x, radius y, x-axis rotation, large arc flag, sweep flag + # Points on the ratchet + # b + # |\ + # | \ |\ + # \ | \ | \ + # \ | \| \ + # a c \ + path = "M%s %s " %(diam_in,0) + for i in range(teeth): + angle = math.radians(i * 360/ teeth) + x_a = diam_in * math.cos(angle) + y_a = diam_in * math.sin(angle) + x_b = diam_out * math.cos(angle) + y_b = diam_out * math.sin(angle) + if vtooth_shape == "straight": + path += ' L %s %s ' %(x_b, y_b) + else: + path += " A %s,%s 0 0 0 %s %s" % (diam_in, diam_in, x_b, y_b) + # + angle_next = math.radians((i+1) * 360 / teeth) + x_c = diam_in * math.cos(angle_next) + y_c = diam_in * math.sin(angle_next) + if htooth_shape == "straight": + path += ' L %s %s ' %(x_c, y_c) + else: # Arc + path += " A %s,%s 0 0 1 %s %s" % (diam_in, diam_in, x_c, y_c) + # close path + path += 'z' + # draw it + line_attribs = {'style' : simplestyle.formatStyle(Line_style), inkex.addNS('label','inkscape') : 'Cone' } + line_attribs['d'] = path + inkex.etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs ) + + +effect = Ratchet() +effect.affect() \ No newline at end of file diff --git a/fablabchemnitz_remove_redundant.inx b/fablabchemnitz_remove_redundant.inx new file mode 100644 index 0000000..b4df9a5 --- /dev/null +++ b/fablabchemnitz_remove_redundant.inx @@ -0,0 +1,18 @@ + + + <_name>Purge Duplicate Path Segments + fablabchemnitz.de.remove_redundant + fablabchemnitz_remove_redundant.py + inkex.py + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_remove_redundant.py b/fablabchemnitz_remove_redundant.py new file mode 100644 index 0000000..7bc7fed --- /dev/null +++ b/fablabchemnitz_remove_redundant.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +''' +Copyright (C) 2010 David Turner + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St Fifth Floor, Boston, MA 02139 +''' +import inkex, simplepath + +import sys + +from collections import defaultdict + +class FixedRadiusSearch(): + def __init__(self, r=0.1): + self.r = r + self.seen = defaultdict(list) + + def round(self, f): + return int(round(f/self.r)) + + def bin(self, p): + return (self.round(p[0]), self.round(p[1])) + + def test(self, p, q): + return abs(self.round(p[0] - q[0])) <= 1 and abs(self.round(p[1] - q[1])) <= 1 + + def search(self, p): + b = self.bin(p) + for i in xrange(b[0]-1, b[0]+2): + for j in xrange(b[1]-1, b[1]+2): + for q in self.seen[(i, j)]: + if self.test(p, q): + return q + return None + + def add(self, p): + self.seen[self.bin(p)].append(p) + + def get_or_add(self, p): + result = self.search(p) + if result == None: + self.add(p) + return p + return result + +class RemoveRedundant(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + def effect(self): + + pathTag = inkex.addNS('path','svg') + + seenSegments = set() + coordsCache = FixedRadiusSearch() + + for id, node in self.selected.iteritems(): + if node.tag == pathTag: + d = node.get('d') + path = simplepath.parsePath(d) + newPath = [] + start = prev = None + pathclosed = True + for command, coords in path: + newCoords = [] + for x, y in zip(*[iter(coords)]*2): + newCoords.extend(list(coordsCache.get_or_add((x, y)))) + coords = newCoords + tcoords = tuple(coords) + + if command == 'M': + newPath.append([command, coords]) + start = prev = tcoords + pathclosed = True + elif command == 'L': + if ('L', prev, tcoords) in seenSegments or \ + ('L', tcoords, prev) in seenSegments: + newPath.append(['M', coords]) + pathclosed = False + else: + newPath.append([command, coords]) + seenSegments.add(('L', prev, tcoords)) + prev = tcoords + elif command == 'Z': + if ('L', prev, start) in seenSegments or \ + ('L', start, prev) in seenSegments: + newPath.append(['M', start]) + else: + if pathclosed: + newPath.append([command, coords]) + else: + newPath.append(['L', start]) + seenSegments.add(('L', prev, start)) + prev = start + elif command == 'C': + if ('C', prev, tcoords) in seenSegments or \ + ('C', tcoords[4:], (tcoords[2:4], tcoords[0:2], prev)) in seenSegments: + newPath.append(['M', coords[4:]]) + else: + newPath.append(['C', coords]) + seenSegments.add(('C', prev, tcoords)) + prev = tcoords[4:] + else: + newPath.append([command, coords]) + while len(newPath) and newPath[-1][0] == 'M': + newPath = newPath[:-1] + node.set('d',simplepath.formatPath(newPath)) + + +e = RemoveRedundant() +e.affect() diff --git a/fablabchemnitz_render_knob_scale.inx b/fablabchemnitz_render_knob_scale.inx new file mode 100644 index 0000000..337f25e --- /dev/null +++ b/fablabchemnitz_render_knob_scale.inx @@ -0,0 +1,52 @@ + + + <_name>Knob Scale + fablabchemnitz.de.render_knob_scale + fablabchemnitz_render_knob_scale.py + inkex.py + + + 0 + 0 + 200 + 300 + 1 + true + false + + px + mm + + + + 11 + 22 + 6 + 11 + + Marks inwards + Marks outwards + Dots + + + + false + 0 + 30 + 30 + -100 + 100 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_render_knob_scale.py b/fablabchemnitz_render_knob_scale.py new file mode 100644 index 0000000..dbab0cf --- /dev/null +++ b/fablabchemnitz_render_knob_scale.py @@ -0,0 +1,291 @@ +#! /usr/bin/python +''' +Copyright (C) 2017 Artem Synytsyn a.synytsyn@gmail.com + +#TODO: Code cleaning and refactoring + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' + +import inkex +import simplestyle, sys +from math import * +# The simplestyle module provides functions for style parsing. +from simplestyle import * + + + + +class Knob_Scale(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + # General settings + self.OptionParser.add_option("--x", + action="store", type="int", + dest="x", default=0.0, + help="Center X") + self.OptionParser.add_option("--y", + action="store", type="int", + dest="y", default=0.0, + help="Center Y") + self.OptionParser.add_option("--radius", + action="store", type="int", + dest="radius", default=100.0, + help="Knob radius") + self.OptionParser.add_option("--linewidth", + action="store", type="int", + dest="linewidth", default=1, + help="") + self.OptionParser.add_option("--angle", + action="store", type="float", + dest="angle", default=260.0, + help="Angle of the knob scale in degrees") + self.OptionParser.add_option("--draw_arc", + action="store", type="inkbool", + dest="draw_arc", default='True', + help="") + self.OptionParser.add_option("--draw_centering_circle", + action="store", type="inkbool", + dest="draw_centering_circle", default='False', + help="") + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default="px", + help="units to measure size of knob") + # Tick settings + self.OptionParser.add_option("--n_ticks", + action="store", type="int", + dest="n_ticks", default=5, + help="") + self.OptionParser.add_option("--ticksize", + action="store", type="int", + dest="ticksize", default=10, + help="") + self.OptionParser.add_option("--n_subticks", + action="store", type="int", + dest="n_subticks", default=10, + help="") + self.OptionParser.add_option("--subticksize", + action="store", type="int", + dest="subticksize", default=5, + help="") + self.OptionParser.add_option("--style", + action="store", type="string", + dest="style", default='marks_outwards', + help="Style of marks") + + # Label settings + self.OptionParser.add_option("--labels_enabled", + action="store", type="inkbool", + dest="labels_enabled", default='False', + help="") + self.OptionParser.add_option("--rounding_level", + action="store", type="int", + dest="rounding_level", default=0, + help="") + self.OptionParser.add_option("--text_size", + action="store", type="int", + dest="text_size", default=1, + help="") + self.OptionParser.add_option("--text_offset", + action="store", type="int", + dest="text_offset", default=20, + help="") + self.OptionParser.add_option("--start_value", + action="store", type="float", + dest="start_value", default=0, + help="") + self.OptionParser.add_option("--stop_value", + action="store", type="float", + dest="stop_value", default=10, + help="") + # Dummy + self.OptionParser.add_option("","--tab") + + def draw_text(self, textvalue, radius, angular_position, text_size, parent): + # Create text element + text = inkex.etree.Element(inkex.addNS('text','svg')) + text.text = textvalue + + # Set text position to center of document. + text.set('x', str(self.x_offset + radius*cos(angular_position))) + text.set('y', str(self.y_offset + radius*sin(angular_position) + text_size/2)) + + # Center text horizontally with CSS style. + style = { + 'text-align' : 'center', + 'text-anchor': 'middle', + 'alignment-baseline' : 'center', + 'font-size' : str(text_size), + 'vertical-align' : 'middle' + } + + text.set('style', formatStyle(style)) + parent.append(text) + def draw_knob_arc(self, radius, parent, angle, transform='' ): + + start_point_angle = (angle - pi)/2.0 + end_point_angle = pi - start_point_angle + + style = { 'stroke' : '#000000', + 'stroke-width' : str(self.options.linewidth), + 'fill' : 'none' } + ell_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('cx','sodipodi') :str(self.x_offset), + inkex.addNS('cy','sodipodi') :str(self.y_offset), + inkex.addNS('rx','sodipodi') :str(radius), + inkex.addNS('ry','sodipodi') :str(radius), + inkex.addNS('start','sodipodi') :str(end_point_angle), + inkex.addNS('end','sodipodi') :str(start_point_angle), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :transform + + } + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + + def draw_centering_circle(self, radius, parent): + + style = { 'stroke' : '#000000', + 'stroke-width' : '1', + 'fill' : 'none' } + ell_attribs = {'style':simplestyle.formatStyle(style), + inkex.addNS('cx','sodipodi') :str(self.x_offset), + inkex.addNS('cy','sodipodi') :str(self.y_offset), + inkex.addNS('rx','sodipodi') :str(radius), + inkex.addNS('ry','sodipodi') :str(radius), + inkex.addNS('type','sodipodi') :'arc' + } + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + + def draw_circle_mark(self, x_offset, y_offset, radius, mark_angle, mark_length, parent): + + cx = x_offset + radius*cos(mark_angle) + cy = y_offset + radius*sin(mark_angle) + r = mark_length / 2.0 + + style = { + 'stroke': '#000000', + 'stroke-width':'0', + 'fill': '#000000' + } + + circ_attribs = { + 'style':simplestyle.formatStyle(style), + 'cx':str(cx), + 'cy':str(cy), + 'r':str(r) + } + circle = inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + def draw_knob_line_mark(self, x_offset, y_offset, radius, mark_angle, mark_length, parent): + x1 = x_offset + radius*cos(mark_angle) + y1 = y_offset + radius*sin(mark_angle) + x2 = x_offset + (radius + mark_length)*cos(mark_angle) + y2 = y_offset + (radius + mark_length)*sin(mark_angle) + + line_style = { 'stroke': '#000000', + 'stroke-width': str(self.options.linewidth), + 'fill': 'none' + } + + line_attribs = {'style' : simplestyle.formatStyle(line_style), + inkex.addNS('label','inkscape') : "none", + 'd' : 'M '+str(x1) +',' + + str(y1) +' L '+str(x2) + +','+str(y2) } + + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + def draw_tick(self, radius, mark_angle, mark_size, parent): + if (self.options.style == 'marks_inwards') or (self.options.style == 'marks_outwards'): + self.draw_knob_line_mark(self.x_offset, self.y_offset, radius, mark_angle, mark_size, parent) + elif self.options.style == 'marks_circles': + self.draw_circle_mark(self.x_offset, self.y_offset, radius, mark_angle, mark_size, parent) + + def effect(self): + + parent = self.current_layer + radius = self.unittouu(str(self.options.radius) + self.options.units) + self.x_offset = self.unittouu(str(self.options.x) + self.options.units) + self.y_offset = self.unittouu(str(self.options.y) + self.options.units) + #print >>sys.stderr, "x_offset: %s\n" % x_offset + #print >>sys.stderr, "y_offset: %s\n" % y_offset + #radius = self.options.radius + angle = self.options.angle*pi/180.0 + n_ticks = self.options.n_ticks + n_subticks = self.options.n_subticks + is_outer = True + if self.options.style == 'marks_inwards': + is_outer = False + + tick_length = self.unittouu(str(self.options.ticksize) + self.options.units) + subtick_length = self.unittouu(str(self.options.subticksize) + self.options.units) + arc_radius = radius + + + # Labeling settings + start_num = self.options.start_value + end_num = self.options.stop_value + text_spacing = self.unittouu(str(self.options.text_offset) + self.options.units) + text_size = self.unittouu(str(self.options.text_size) + self.options.units) + + if not is_outer: + subtick_radius = radius + tick_length - subtick_length + arc_radius = radius + tick_length + else: + subtick_radius = radius + arc_radius = radius + + if self.options.draw_arc: + self.draw_knob_arc(arc_radius, parent, angle) + + if self.options.draw_centering_circle: + self.draw_centering_circle(arc_radius + tick_length + text_size + text_spacing, parent) + + ticks_delta = angle / (n_ticks - 1) + start_ticks_angle = 1.5*pi - 0.5*angle + for tick in range(n_ticks): + self.draw_tick(radius, start_ticks_angle + ticks_delta*tick, + tick_length, parent) + + if self.options.labels_enabled: + if self.options.rounding_level > 0: + tick_text = str(round(start_num + + float(tick) * (end_num - start_num) / (n_ticks - 1), + self.options.rounding_level)) + else: + tick_text = str(int(start_num + float(tick) * (end_num - start_num) / (n_ticks - 1))) + + self.draw_text(tick_text, radius + tick_length + text_spacing, + start_ticks_angle + ticks_delta*tick, + text_size, + parent) + + if tick == (n_ticks - 1): + break + + subticks_delta = ticks_delta / (n_subticks + 1) + subtick_start_angle = start_ticks_angle + ticks_delta*tick + subticks_delta + for subtick in range(n_subticks): + self.draw_tick(subtick_radius, subtick_start_angle + subticks_delta*subtick, + subtick_length, parent) + + + +if __name__ == '__main__': + e = Knob_Scale() + e.affect() + diff --git a/fablabchemnitz_render_scale.inx b/fablabchemnitz_render_scale.inx new file mode 100644 index 0000000..9ebcdd8 --- /dev/null +++ b/fablabchemnitz_render_scale.inx @@ -0,0 +1,54 @@ + + + <_name>Vertical / Horizontal Scale + fablabchemnitz.de.render_scale + inkex.py + fablabchemnitz_render_scale.py + Generates scales + ********************************* + Global parameters + -10 + 10 + false + + + 90° + + 1 + 7 + Labels + 12 + Suffix currently doesn't support several special characters + + 0 + 10 + Markers + 10 + 2.0 + 5 + 2.0 + 75 + 1 + 1.0 + 50 + Units + + mm + cm + inch + pixel + point + + + + all + + + + + + + + diff --git a/fablabchemnitz_render_scale.py b/fablabchemnitz_render_scale.py new file mode 100644 index 0000000..d0854cb --- /dev/null +++ b/fablabchemnitz_render_scale.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python +''' +Copyright (C) 2009 Sascha Poczihoski, sascha@junktech.de + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +TODO + - fix bug: special chars in suffix +''' + +import sys, math +sys.path.append('/usr/share/inkscape/extensions') # or another path, as necessary +import inkex +from simplestyle import * + + +class ScaleGen(inkex.Effect): + """ + Example Inkscape effect extension. + Creates a new layer with a "Hello World!" text centered in the middle of the document. + """ + def __init__(self): + """ + Constructor. + Defines the "--what" option of a script. + """ + # Call the base class constructor. + inkex.Effect.__init__(self) + + # Define string option "--what" with "-w" shortcut and default value "World". + self.OptionParser.add_option('-f', '--scalefrom', action = 'store', + type = 'int', dest = 'scalefrom', default = '0', + help = 'Measure from...') + self.OptionParser.add_option('-t', '--scaleto', action = 'store', + type = 'int', dest = 'scaleto', default = '20', + help = 'Measure to...') + self.OptionParser.add_option('-c', '--reverse', action = 'store', + type = 'string', dest = 'reverse', default = 'false', + help = 'Reverse order:') + self.OptionParser.add_option('', '--rotate', action = 'store', + type = 'string', dest = 'rotate', default = '0', + help = 'Rotate:') + self.OptionParser.add_option('-b', '--scaleres', action = 'store', + type = 'int', dest = 'scaleres', default = '100', + help = 'Measure resolution:') + self.OptionParser.add_option('-g', '--scaleheight', action = 'store', + type = 'int', dest = 'scaleheight', default = '100', + help = 'Height of scale:') + self.OptionParser.add_option('-s', '--fontsize', action = 'store', + type = 'int', dest = 'fontsize', default = '16', + help = 'Font Size:') + self.OptionParser.add_option('-i', '--suffix', action = 'store', + type = 'string', dest = 'suffix', default = '', + help = 'Suffix:') + + # label offset + self.OptionParser.add_option('-x', '--labeloffseth', action = 'store', + type = 'int', dest = 'labeloffseth', default = '45', + help = 'Label offset h:') + self.OptionParser.add_option('-y', '--labeloffsetv', action = 'store', + type = 'int', dest = 'labeloffsetv', default = '45', + help = 'Label offset v:') + + # marker div + self.OptionParser.add_option('-m', '--mark0', action = 'store', + type = 'int', dest = 'mark0', default = '10', + help = 'Div of labeled marker:') + self.OptionParser.add_option('-n', '--mark1', action = 'store', + type = 'int', dest = 'mark1', default = '5', + help = 'Div of bold marker:') + self.OptionParser.add_option('-o', '--mark2', action = 'store', + type = 'int', dest = 'mark2', default = '1', + help = 'Div of standard marker:') + + # marker strength + self.OptionParser.add_option('-p', '--mark0str', action = 'store', + type = 'float', dest = 'mark0str', default = '10.0', + help = 'Strength of labeled marker:') + self.OptionParser.add_option('-q', '--mark1str', action = 'store', + type = 'float', dest = 'mark1str', default = '5.0', + help = 'Strength of bold marker:') + self.OptionParser.add_option('-r', '--mark2str', action = 'store', + type = 'float', dest = 'mark2str', default = '1.0', + help = 'Strength of standard marker:') + + # marker width + self.OptionParser.add_option('-w', '--mark1wid', action = 'store', + type = 'int', dest = 'mark1wid', default = '75', + help = 'Width of bold marker (\%):') + self.OptionParser.add_option('-v', '--mark2wid', action = 'store', + type = 'int', dest = 'mark2wid', default = '50', + help = 'Width of standard marker (\%):') + + self.OptionParser.add_option('-u', '--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit:') + + def addLabel(self, i, x, y, grp, fontsize): + res = self.options.scaleres + pos = i*res + fontsize/2 + text = inkex.etree.SubElement(grp, inkex.addNS('text','svg')) + text.text = str(i)+self.options.suffix.encode("utf8") + #rotate = self.options.rotate + fs = str(fontsize) + style = {'text-align' : 'center', 'text-anchor': 'middle', 'font-size': fs} + text.set('style', formatStyle(style)) +# text.set('x', str(inkex.unittouu(str(x)+self.options.unit)+self.options.labeloffseth)) +# text.set('y', str(inkex.unittouu(str(y)+self.options.unit)+self.options.labeloffsetv)) + text.set('x', str(float(x)+int(self.options.labeloffseth))) + text.set('y', str(float(y)+int(self.options.labeloffsetv))) + grp.append(text) + + def addLine(self, i, scalefrom, scaleto, grp, grpLabel, type=2): + reverse = self.options.reverse + rotate = self.options.rotate + unit = self.options.unit + fontsize = self.options.fontsize + res = self.options.scaleres + label = False + if reverse=='true': + # Count absolut i for labeling + counter = 0 + for n in range(scalefrom, i): + counter += 1 + n = scaleto-counter-1 + else: + n = i + + if type==0: + line_style = { 'stroke': 'red', + 'stroke-width': str(self.options.mark0str) } + x1 = 0 + y1 = i*res + x2 = self.options.scaleheight + y2 = i*res + + label = True + + if type==1: + line_style = { 'stroke': 'black', + 'stroke-width': str(self.options.mark1str) } + x1 = 0 + y1 = i*res + x2 = self.options.scaleheight*0.01*self.options.mark1wid + y2 = i*res + + if type==2: + line_style = { 'stroke': 'black', + 'stroke-width': str(self.options.mark2str) } + x1 = 0 + y1 = i*res + x2 = self.options.scaleheight*0.01*self.options.mark2wid + y2 = i*res + + x1 = str(self.unittouu(str(x1)+unit) ) + y1 = str(self.unittouu(str(y1)+unit) ) + x2 = str(self.unittouu(str(x2)+unit) ) + y2 = str(self.unittouu(str(y2)+unit) ) + if rotate=='90': + tx = x1 + x1 = y1 + y1 = tx + + tx = x2 + x2 = y2 + y2 = tx + + if label==True: + self.addLabel(n , x2, y2, grpLabel, fontsize) + line_attribs = {'style' : formatStyle(line_style), + inkex.addNS('label','inkscape') : 'name', + 'd' : 'M '+x1+','+y1+' L '+x2+','+y2} + + line = inkex.etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs ) + + + def effect(self): + + scalefrom = self.options.scalefrom + scaleto = self.options.scaleto + scaleheight = self.options.scaleheight + mark0 = self.options.mark0 + mark1 = self.options.mark1 + mark2 = self.options.mark2 + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Again, there are two ways to get the attributes: + width = svg.get('width') + height = svg.get('height') + + # Create new group + centre = self.view_center #Put in in the centre of the current view + grp_transform = 'translate' + str( centre ) + + grp_name = 'Scale Labels' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name, + 'transform':grp_transform } + grpLabel = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + + grp_name = 'Scale Mark labeled' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name, + 'transform':grp_transform } + grpMark0 = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + grp_name = 'Scale Mark medium' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name, + 'transform':grp_transform } + grpMark1 = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + grp_name = 'Scale Mark default' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name, + 'transform':grp_transform } + grpMark2 = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + + # to allow positive to negative counts + if scalefrom < scaleto: + scaleto += 1 + else: + temp = scaleto + scaleto = scalefrom+1 + scalefrom = temp + + skip = 0 + for i in range(scalefrom, scaleto): + if (i % mark0)==0: + div = 0 # This a the labeled marker + grpMark = grpMark0 + elif (i % mark1)==0: + div = 1 # the medium marker + grpMark = grpMark1 + elif (i % mark2)==0: + div = 2 # the default marker + grpMark = grpMark2 + else: + skip=1 # Don't print a marker this time + if skip==0: + self.addLine(i, scalefrom, scaleto, grpMark, grpLabel, div) # addLabel is called from inside + skip = 0 + + +# Create effect instance and apply it. +effect = ScaleGen() +effect.affect() + diff --git a/fablabchemnitz_reorder_sequence.inx b/fablabchemnitz_reorder_sequence.inx new file mode 100644 index 0000000..0ad2c46 --- /dev/null +++ b/fablabchemnitz_reorder_sequence.inx @@ -0,0 +1,30 @@ + + + <_name>Optimize Sequence: Travel Distances + fablabchemnitz.de.reorder_sequence + fablabchemnitz_reorder_sequence.py + inkex.py + <_param indent="5" name="splashpage" type="description" appearance="header">EggBot Plot Optimization Tool + <_param name="Header" type="description" xml:space="preserve"> +This utility will re-order objects within each layer of your +document, to reduce pen-up travel distance and time. + + + <_option value="2">Reorder within groups + <_option value="1">Preserve groups + <_option value="3">Break apart groups + + <_param name="Footer" type="description" indent="3" xml:space="preserve"> +v 2.5. Copyright 2019, Evil Mad Scientist + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_reorder_sequence.py b/fablabchemnitz_reorder_sequence.py new file mode 100644 index 0000000..ef92347 --- /dev/null +++ b/fablabchemnitz_reorder_sequence.py @@ -0,0 +1,1255 @@ +# coding=utf-8 +# +# SVG Path Ordering Extension +# This extension uses a simple TSP algorithm to order the paths so as +# to reduce plotting time by plotting nearby paths consecutively. +# +# Copyright 2019, Windell H. Oskay, Evil Mad Science LLC +# www.evilmadscientist.com +# +# +# While written from scratch, this is a derivative in spirit of the work by +# Matthew Beckler and Daniel C. Newman for the EggBot project. +# +# The MIT License (MIT) +# +# Copyright (c) 2019 Windell H. Oskay, Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import sys +sys.path.append('pyaxidraw') + +try: + from fablabchemnitz_plot_utils import from_dependency_import # plotink + inkex = from_dependency_import('ink_extensions.inkex') + simpletransform = from_dependency_import('ink_extensions.simpletransform') + simplestyle = from_dependency_import('ink_extensions.simplestyle') +except: + import inkex + import simpletransform + import simplestyle + + +import gettext +import math +import fablabchemnitz_plot_utils # https://github.com/evil-mad/plotink Requires version 0.15 +from lxml import etree + +""" +TODOs: + +* Apparent difference in execution time for portrait vs landscape document orientation. + Seems to be related to the _change_ + +* Implement path functions + + +<_option value=0>Leave as is +<_option value=1>Reorder subpaths +<_option value=2>Break apart + + +self.OptionParser.add_option( "--path_handling",\ +action="store", type="int", dest="path_handling",\ +default=1,help="How compound paths are handled") + + +* Consider re-introducing GUI method for rendering: + +false + + +""" + +class ReorderEffect(inkex.Effect): + """ + Inkscape effect extension. + Re-order the objects in the SVG document for faster plotting. + Respect layers: Initialize a new dictionary of objects for each layer, and sort + objects within that layer only + Objects in root of document are treated as being on a _single_ layer, and will all + be sorted. + + """ + + def __init__( self ): + inkex.Effect.__init__( self ) + + self.OptionParser.add_option( "--reordering",\ + action="store", type="int", dest="reordering",\ + default=1,help="How groups are handled") + + self.auto_rotate = True + + def effect(self): + # Main entry point of the program + + self.svg_width = 0 + self.svg_height = 0 + self.air_total_default = 0 + self.air_total_sorted = 0 + self.printPortrait = False + + # Rendering is available for debug purposes. It only previews + # pen-up movements that are reordered and typically does not + # include all possible movement. + + self.preview_rendering = False + self.layer_index = 0 # index for coloring layers + + self.svg = self.document.getroot() + + self.DocUnits = "in" # Default + self.DocUnits = self.getDocumentUnit() + + self.unit_scaling = 1 + + self.getDocProps() + + """ + Set up the document-wide transforms to handle SVG viewbox + """ + + matCurrent = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + viewbox = self.svg.get( 'viewBox' ) + + vb = self.svg.get('viewBox') + if vb: + p_a_r = self.svg.get('preserveAspectRatio') + sx,sy,ox,oy = fablabchemnitz_plot_utils.vb_scale(vb, p_a_r, self.svg_width, self.svg_height) + else: + sx = 1.0 / float(fablabchemnitz_plot_utils.PX_PER_INCH) # Handle case of no viewbox + sy = sx + ox = 0.0 + oy = 0.0 + + # Initial transform of document is based on viewbox, if present: + matCurrent = simpletransform.parseTransform('scale({0:.6E},{1:.6E}) translate({2:.6E},{3:.6E})'.format(sx, sy, ox, oy)) + # Set up x_last, y_last, which keep track of last known pen position + # The initial position is given by the expected initial pen position + + self.y_last = 0 + + if (self.printPortrait): + self.x_last = self.svg_width + else: + self.x_last = 0 + + parent_vis='visible' + + self.root_nodes = [] + + if self.preview_rendering: + # Remove old preview layers, if rendering is enabled + for node in self.svg: + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + if ( node.get( inkex.addNS( 'groupmode', 'inkscape' ) ) == 'layer' ): + LayerName = node.get( inkex.addNS( 'label', 'inkscape' ) ) + if LayerName == '% Preview': + self.svg.remove( node ) + + preview_transform = simpletransform.parseTransform( + 'translate({2:.6E},{3:.6E}) scale({0:.6E},{1:.6E})'.format( + 1.0/sx, 1.0/sy, -ox, -oy)) + path_attrs = { 'transform': simpletransform.formatTransform(preview_transform)} + self.preview_layer = etree.Element(inkex.addNS('g', 'svg'), + path_attrs, nsmap=inkex.NSS) + + + self.preview_layer.set( inkex.addNS('groupmode', 'inkscape' ), 'layer' ) + self.preview_layer.set( inkex.addNS( 'label', 'inkscape' ), '% Preview' ) + self.svg.append( self.preview_layer ) + + + # Preview stroke width: 1/1000 of page width or height, whichever is smaller + if self.svg_width < self.svg_height: + width_du = self.svg_width / 1000.0 + else: + width_du = self.svg_height / 1000.0 + + """ + Stroke-width is a css style element, and cannot accept scientific notation. + + Thus, in cases with large scaling (i.e., high values of 1/sx, 1/sy) + resulting from the viewbox attribute of the SVG document, it may be necessary to use + a _very small_ stroke width, so that the stroke width displayed on the screen + has a reasonable width after being displayed greatly magnified thanks to the viewbox. + + Use log10(the number) to determine the scale, and thus the precision needed. + """ + + log_ten = math.log10(width_du) + if log_ten > 0: # For width_du > 1 + width_string = "{0:.3f}".format(width_du) + else: + prec = int(math.ceil(-log_ten) + 3) + width_string = "{0:.{1}f}".format(width_du, prec) + + self.p_style = {'stroke-width': width_string, 'fill': 'none', + 'stroke-linejoin': 'round', 'stroke-linecap': 'round'} + + self.svg = self.parse_svg(self.svg, matCurrent) + + + def parse_svg(self, input_node, mat_current=None, parent_vis='visible'): + """ + Input: An SVG node (usually) containing other nodes: + The SVG root, a layer, sublayer, or other group. + Output: The re-ordered node. The contents are reordered with the greedy + algorithm, except: + - Layers and sublayers are preserved. The contents of each are + re-ordered for faster plotting. + - Groups are either preserved, broken apart, or re-ordered within + the group, depending on the value of group_mode. + """ + + coord_dict = {} + # coord_dict maps a node ID to the following data: + # Is the node plottable, first coordinate pair, last coordinate pair. + # i.e., Node_id -> (Boolean: plottable, Xi, Yi, Xf, Yf) + + group_dict = {} + # group_dict maps a node ID for a group to the contents of that group. + # The contents may be a preserved nested group or a flat list, depending + # on the selected group handling mode. Example: + # group_dict = {'id_1': , + # 'id_2': + + nodes_to_delete = [] + + counter = 0 # TODO: Replace this with better unique ID system + + # Account for input_node's transform and any transforms above it: + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + try: + matNew = simpletransform.composeTransform( mat_current, + simpletransform.parseTransform( input_node.get( "transform" ))) + except AttributeError: + matNew = mat_current + + for node in input_node: + # Step through each object within the top-level input node + + try: + id = node.get( 'id' ) + except AttributeError: + id = self.uniqueId(None,True) + + # First check for object visibility: + skip_object = False + + # Check for "display:none" in the node's style attribute: + style = simplestyle.parseStyle(node.get('style')) + if 'display' in style.keys() and style['display'] == 'none': + skip_object = True # Plot neither this object nor its children + + # The node may have a display="none" attribute as well: + if node.get( 'display' ) == 'none': + skip_object = True # Plot neither this object nor its children + + # Visibility attributes control whether a given object will plot. + # Children of hidden (not visible) parents may be plotted if + # they assert visibility. + visibility = node.get( 'visibility', parent_vis ) + + if 'visibility' in style.keys(): + visibility = style['visibility'] # Style may override attribute. + + if visibility == 'inherit': + visibility = parent_vis + + if visibility != 'visible': + skip_object = True # Skip this object and its children + + # Next, check to see if this inner node is itself a group or layer: + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + # Use the user-given option to decide what to do with subgroups: + subgroup_mode = self.options.reordering + +# Values of the parameter: +# subgroup_mode=="1": Preserve groups +# subgroup_mode=="2": Reorder within groups +# subgroup_mode=="3": Break apart groups + + if node.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + # The node is a layer or sub-layer, not a regular group. + # Parse it separately, and re-order its contents. + + subgroup_mode = 2 # Always sort within each layer. + self.layer_index += 1 + + layer_name = node.get( inkex.addNS( 'label', 'inkscape' ) ) + + if sys.version_info < (3,): # Yes this is ugly. More elegant suggestions welcome. :) + layer_name = layer_name.encode( 'ascii', 'ignore' ) #Drop non-ascii characters + else: + layer_name = str(layer_name) + layer_name.lstrip # Remove leading whitespace + + if layer_name: + if layer_name[0] == '%': # First character is '%'; This + skip_object = True # is a documentation layer; skip plotting. + self.layer_index -= 1 # Set this back to previous value. + + if skip_object: + # Do not re-order hidden groups or layers. + subgroup_mode = 1 # Preserve this group + + if subgroup_mode == 3: + # Break apart this non-layer subgroup and add it to + # the set of things to be re-ordered. + + nodes_to_delete.append(node) + nodes_inside_group = self.group2NodeDict(node) + + for a_node in nodes_inside_group: + try: + id = a_node.get( 'id' ) + except AttributeError: + id = self.uniqueId(None,True) + + # Use getFirstPoint and getLastPoint on each object: + start_plottable, first_point = self.getFirstPoint(a_node, matNew) + end_plottable, last_point = self.getLastPoint(a_node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = a_node + + elif subgroup_mode == 2: + # Reorder a layer or subgroup with a recursive call. + + node = self.parse_svg(node, matNew, visibility) + + # Capture the first and last x,y coordinates of the optimized node + start_plottable, first_point = self.group_first_pt(node, matNew) + end_plottable, last_point = self.group_last_pt(node, matNew) + + # Then add this optimized node to the coord_dict + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = node + + else: # (subgroup_mode == 1) + # Preserve the group, but find its first and last point so + # that it can be re-ordered with respect to other items + + if skip_object: + start_plottable = False + end_plottable = False + first_point = [(-1.), (-1.)] + last_point = [(-1.), (-1.)] + else: + start_plottable, first_point = self.group_first_pt(node, matNew) + end_plottable, last_point = self.group_last_pt(node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = node + + else: # Handle objects that are not groups + if skip_object: + start_plottable = False + end_plottable = False + first_point = [(-1.), (-1.)] + last_point = [(-1.), (-1.)] + else: + start_plottable, first_point = self.getFirstPoint(node, matNew) + end_plottable, last_point = self.getLastPoint(node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + group_dict[id] = node # Entry in group_dict is this node + + # Perform the re-ordering: + ordered_element_list = self.ReorderNodeList(coord_dict, group_dict) + + # Once a better order for the svg elements has been determined, + # All there is do to is to reintroduce the nodes to the parent in the correct order + for elt in ordered_element_list: + # Creates identical node at the correct location according to ordered_element_list + input_node.append(elt) + # Once program is finished parsing through + for element_to_remove in nodes_to_delete: + try: + input_node.remove(element_to_remove) + except ValueError: + inkex.errormsg(str(element_to_remove.get('id'))+" is not a member of " + str(input_node.get('id'))) + + return input_node + + + def break_apart_path(self, path): + """ + An SVG path may contain multiple distinct portions, that are normally separated + by pen-up movements. + + This function takes the path data string from an SVG path, parses it, and returns + a dictionary of independent path data strings, each of which represents a single + pen-down movement. It is equivalent to the Inkscape function Path > Break Apart + + Input: path data string, representing a single SVG path + Output: Dictionary of (separated) path data strings + + """ + MaxLength = len(path) + ix = 0 + move_to_location = [] + path_dictionary = {} + path_list = [] + path_number = 1 + + # Search for M or m location + while ix < MaxLength: + if(path[ix] == 'm' or path[ix] == 'M'): + move_to_location.append(ix) + ix = ix + 1 + # Iterate through every M or m location in our list of move to instructions + # Slice the path string according to path beginning and ends as indicated by the + # location of these instructions + + for counter, m in enumerate(move_to_location): + if (m == move_to_location[-1]): + # last entry + path_list.append(path[m:MaxLength].rstrip()) + else: + path_list.append(path[m:move_to_location[counter + 1]].rstrip()) + + for counter, current_path in enumerate(path_list): + + # Enumerate over every entry in the path looking for relative m commands + if current_path[0] == 'm' and counter > 0: + # If path contains relative m command, the best case is when the last command + # was a Z or z. In this case, all relative operations are performed relative to + # initial x, y coordinates of the previous path + + if path_list[counter -1][-1].upper() == 'Z': + current_path_x, current_path_y,index = self.getFirstPoint(current_path, matNew) + prev_path_x, prev_path_y,ignore = self.getFirstPoint(path_list[counter-1]) + adapted_x = current_path_x + prev_path_x + adapted_y = current_path_y + prev_path_y + # Now we can replace the path data with an Absolute Move to instruction + # HOWEVER, we need to adapt all the data until we reach a different command in the case of a repeating + path_list[counter] = "m "+str(adapted_x)+","+str(adapted_y) + ' ' +current_path[index:] + + # If there is no z or absolute commands, we need to parse the entire path + else: + + # scan path for absolute coordinates. If present, begin parsing from their index + # instead of the beginning + prev_path = path_list[counter-1] + prev_path_length = len(prev_path) + jx = 0 + x_val, y_val = 0,0 + # Check one char at a time + # until we have the moveTo Command + last_command = '' + is_absolute_command = False + repeated_command = False + # name of command + # how many parameters we need to skip + accepted_commands = { + 'M':0, + 'L':0, + 'H':0, + 'V':0, + 'C':4, + 'S':2, + 'Q':2, + 'T':0, + 'A':5 + } + + # If there is an absolute command which specifies a new initial point + # then we can save time by setting our index directly to its location in the path data + # See if an accepted_command is present in the path data. If it is present further in the + # string than any command found before, then set the pointer to that location + # if a command is not found, find() will return a -1. jx is initialized to 0, so if no matches + # are found, the program will parse from the beginning to the end of the path + + for keys in 'MLCSQTA': # TODO: Compare to last_point; see if we can clean up this part + if(prev_path.find(keys) > jx): + jx = prev_path.find(keys) + + while jx < prev_path_length: + + temp_x_val = '' + temp_y_val = '' + num_of_params_to_skip = 0 + + # SVG Path commands can be repeated + if (prev_path[jx].isdigit() and last_command): + repeated_command = True + else: + repeated_command = False + + if (prev_path[jx].isalpha() and prev_path[jx].upper() in accepted_commands) or repeated_command: + + if repeated_command: + #is_relative_command is saved from last iteration of the loop + current_command = last_command + else: + # If the character is accepted, we must parse until reach the x y coordinates + is_absolute_command = prev_path[jx].isupper() + current_command = prev_path[jx].upper() + + # Each command has a certain number of parameters we must pass before we reach the + # information we care about. We will parse until we know that we have reached them + + # Get to start of next number + # We will know we have reached a number if the current character is a +/- sign + # or current character is a digit + while jx < prev_path_length: + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + # We need to parse past the unused parameters in our command + # The number of parameters to parse past is dependent on the command and stored + # as the value of accepted_command + # Spaces and commas are used to deliniate paramters + while jx < prev_path_length and num_of_params_to_skip < accepted_commands[current_command]: + if(prev_path[jx].isspace() or prev_path[jx] == ','): + num_of_params_to_skip = num_of_params_to_skip + 1 + jx = jx + 1 + + # Now, we are in front of the x character + + if current_command.upper() == 'V': + temp_x_val = 0 + + if current_command.upper() == 'H': + temp_y_val = 0 + + # Parse until next character is a digit or +/- character + while jx < prev_path_length and current_command.upper() != 'V': + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + # Save each next character until we reach a space + while jx < prev_path_length and current_command.upper() != 'V' and not (prev_path[jx].isspace() or prev_path[jx] == ','): + temp_x_val = temp_x_val + prev_path[jx] + jx = jx + 1 + + # Then we know we have completely parsed the x character + + # Now we are in front of the y character + + # Parse until next character is a digit or +/- character + while jx < prev_path_length and current_command.upper() != 'H': + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + ## Save each next character until we reach a space + while jx < prev_path_length and current_command.upper() != 'H' and not (prev_path[jx].isspace() or prev_path[jx] == ','): + temp_y_val = temp_y_val + prev_path[jx] + jx = jx + 1 + + # Then we know we have completely parsed the y character + + if is_absolute_command: + + if current_command == 'H': + # Absolute commands create new x,y position + try: + x_val = float(temp_x_val) + except ValueError: + pass + elif current_command == 'V': + # Absolute commands create new x,y position + try: + y_val = float(temp_y_val) + except ValueError: + pass + else: + # Absolute commands create new x,y position + try: + x_val = float(temp_x_val) + y_val = float(temp_y_val) + except ValueError: + pass + else: + + if current_command == 'h': + # Absolute commands create new x,y position + try: + x_val = x_val + float(temp_x_val) + except ValueError: + pass + elif current_command == 'V': + # Absolute commands create new x,y position + try: + y_val = y_val + float(temp_y_val) + except ValueError: + pass + else: + # Absolute commands create new x,y position + try: + x_val = x_val + float(temp_x_val) + y_val = y_val + float(temp_y_val) + except ValueError: + pass + last_command = current_command + jx = jx + 1 + x,y,index = self.getFirstPoint(current_path,None) + path_list[counter] = "m "+str(x_val+x)+","+str(y_val+y) + ' ' + current_path[index:] + + for counter, path in enumerate(path_list): + path_dictionary['AxiDraw_Path'+ str(counter)] = path + + return path_dictionary + + + def getFirstPoint(self, node, matCurrent): + """ + Input: (non-group) node and parent transformation matrix + Output: Boolean value to indicate if the svg element is plottable and + two floats stored in a list representing the x and y coordinates we plot first + """ + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( node.get( "transform" ) ) ) + + point = [float(-1), float(-1)] + try: + if node.tag == inkex.addNS( 'path', 'svg' ): + + pathdata = node.get('d') + + point = fablabchemnitz_plot_utils.pathdata_first_point(pathdata) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + """ + The x,y coordinates for a rect are included in their specific attributes + If there is a transform, we need translate the x & y coordinates to their + correct location via applyTransformToPoint. + """ + + point[0] = float( node.get( 'x' ) ) + point[1] = float( node.get( 'y' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + """ + The x1 and y1 attributes are where we will start to draw + So, get them, apply the transform matrix, and return the point + """ + + point[0] = float( node.get( 'x1' ) ) + point[1] = float( node.get( 'y1' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + + if node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + pl = node.get( 'points', '' ).strip() + + if pl == '': + return False, point + + pa = pl.replace(',',' ').split() # replace comma with space before splitting + + if not pa: + return False, point + pathLength = len( pa ) + if (pathLength < 4): # Minimum of x1,y1 x2,y2 required. + return False, point + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while (i < (pathLength - 1 )): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + point = fablabchemnitz_plot_utils.pathdata_first_point(d) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if (node.tag == inkex.addNS( 'polygon', 'svg' ) or + node.tag == 'polygon'): + """ + We need to extract x1 and y1 from these: + + We accomplish this with Python string strip + and split methods. Then apply transforms + """ + # Strip() removes all whitespace from the start and end of p1 + pl = node.get( 'points', '' ).strip() + if (pl == ''): + # If pl is blank there has been an error, return False and -1,-1 to indicate a problem has occured + return False, point + # Split string by whitespace + pa = pl.split() + if not len( pa ): + # If pa is blank there has been an error, return False and -1,-1 to indicate a problem has occured + return False, point + # pa[0] = "x1,y1 + # split string via comma to get x1 and y1 individually + # then point = [x1,x2] + point = pa[0].split(",") + + point = [float(point[0]),float(point[1])] + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse': + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + rx = float( node.get( 'rx', '0' ) ) + + point[0] = cx - rx + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + r = float( node.get( 'r', '0' ) ) + point[0] = cx - r + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS('symbol', 'svg') or node.tag == 'symbol': + # A symbol is much like a group, except that + # it's an invisible object. + return False, point # Skip this element. + + if node.tag == inkex.addNS('use', 'svg') or node.tag == 'use': + + """ + A element refers to another SVG element via an xlink:href="#blah" + attribute. We will handle the element by doing an XPath search through + the document, looking for the element with the matching id="blah" + attribute. We then recursively process that element after applying + any necessary (x,y) translation. + + Notes: + 1. We ignore the height and g attributes as they do not apply to + path-like elements, and + 2. Even if the use element has visibility="hidden", SVG still calls + for processing the referenced element. The referenced element is + hidden only if its visibility is "inherit" or "hidden". + 3. We may be able to unlink clones using the code in pathmodifier.py + """ + + refid = node.get(inkex.addNS('href', 'xlink')) + + if refid is not None: + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode is not None: + + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = simpletransform.composeTransform(matNew, simpletransform.parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = matNew + # Note that the referenced object may be a 'symbol`, + # which acts like a group, or it may be a simple + # object. + + if len(refnode) > 0: + plottable, the_point = self.group_first_pt(refnode[0], mat_new2) + else: + plottable, the_point = self.group_first_pt(refnode, mat_new2) + + return plottable, the_point + except: + pass + + # Svg Object is not a plottable element + # In this case, return False to indicate a non-plottable element + # and a default point + + return False, point + + def getLastPoint(self, node, matCurrent): + """ + Input: XML tree node and transformation matrix + Output: Boolean value to indicate if the svg element is plottable or not and + two floats stored in a list representing the x and y coordinates we plot last + """ + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( node.get( "transform" ) ) ) + + # If we return a negative value, we know that this function did not work + point = [float(-1), float(-1)] + try: + if node.tag == inkex.addNS( 'path', 'svg' ): + + path = node.get('d') + + point = fablabchemnitz_plot_utils.pathdata_last_point(path) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + """ + The x,y coordinates for a rect are included in their specific attributes + If there is a transform, we need translate the x & y coordinates to their + correct location via applyTransformToPoint. + """ + + point[0] = float( node.get( 'x' ) ) + point[1] = float( node.get( 'y' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point # Same start and end points + + if node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + """ + The x2 and y2 attributes are where we will end our drawing + So, get them, apply the transform matrix, and return the point + """ + + point[0] = float( node.get( 'x2' ) ) + point[1] = float( node.get( 'y2' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + pl = node.get( 'points', '' ).strip() + + if pl == '': + return False, point + + pa = pl.replace(',',' ').split() + if not pa: + return False, point + pathLength = len( pa ) + if (pathLength < 4): # Minimum of x1,y1 x2,y2 required. + return False, point + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while (i < (pathLength - 1 )): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + endpoint = fablabchemnitz_plot_utils.pathdata_last_point(d) + simpletransform.applyTransformToPoint(matNew, endpoint) + + return True, endpoint + + if node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + """ + We need to extract x1 and y1 from these: + + We accomplish this with Python string strip + and split methods. Then apply transforms + """ + # Strip() removes all whitespace from the start and end of p1 + pl = node.get( 'points', '' ).strip() + if (pl == ''): + # If pl is blank there has been an error, return -1,-1 to indicate a problem has occured + return False, point + # Split string by whitespace + pa = pl.split() + if not len( pa ): + # If pl is blank there has been an error, return -1,-1 to indicate a problem has occured + return False, point + # pa[0] = "x1,y1 + # split string via comma to get x1 and y1 individually + # then point = [x1,x2] + point = pa[0].split(",") + + point = [float(point[0]),float(point[1])] + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + rx = float( node.get( 'rx', '0' ) ) + + point[0] = cx - rx + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'circle', 'svg' ) or node.tag == 'circle': + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + r = float( node.get( 'r', '0' ) ) + point[0] = cx - r + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS('symbol', 'svg') or node.tag == 'symbol': + # A symbol is much like a group, except that it should only be + # rendered when called within a "use" tag. + return False, point # Skip this element. + + if node.tag == inkex.addNS('use', 'svg') or node.tag == 'use': + + """ + A element refers to another SVG element via an xlink:href="#blah" + attribute. We will handle the element by doing an XPath search through + the document, looking for the element with the matching id="blah" + attribute. We then recursively process that element after applying + any necessary (x,y) translation. + + Notes: + 1. We ignore the height and g attributes as they do not apply to + path-like elements, and + 2. Even if the use element has visibility="hidden", SVG still calls + for processing the referenced element. The referenced element is + hidden only if its visibility is "inherit" or "hidden". + 3. We may be able to unlink clones using the code in pathmodifier.py + """ + + refid = node.get(inkex.addNS('href', 'xlink')) + if refid is not None: + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode is not None: + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = simpletransform.composeTransform(matNew, simpletransform.parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = matNew + if len(refnode) > 0: + plottable, the_point = self.group_last_pt(refnode[0], mat_new2) + else: + plottable, the_point = self.group_last_pt(refnode, mat_new2) + return plottable, the_point + except: + pass + + # Svg Object is not a plottable element; + # Return False and a default point + return False, point + + + def group_first_pt(self, group, matCurrent = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + """ + Input: A Node which we have found to be a group + Output: Boolean value to indicate if a point is plottable + float values for first x,y coordinates of svg element + """ + + if len(group) == 0: # Empty group -- The object may not be a group. + return self.getFirstPoint(group, matCurrent) + + success = False + point = [float(-1), float(-1)] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( group.get( "transform" ) ) ) + + # Step through the group, we examine each element until we find a plottable object + for subnode in group: + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_first_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for first plottable object + success, point = self.group_first_pt(subnode, matNew) + if success: + # Subnode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + else: + # Node is not a group + # Get its first (x,y) coordinates + # Also get a Boolean value to indicate if the subnode is plottable or not + # If subnode is not plottable, continue to next subnode in the group + success, point = self.getFirstPoint(subnode, matNew) + + if success: + # Subnode inside group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + return success, point + + + def group_last_pt(self, group, matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + """ + Input: A Node which we have found to be a group + Output: The last node within the group which can be plotted + """ + + if len(group) == 0: # Empty group -- Did someone send an object that isn't a group? + return self.getLastPoint(group, matCurrent) + + success = False + point = [float(-1),float(-1)] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( group.get( "transform" ) ) ) + + # Step through the group, we examine each element until we find a plottable object + for subnode in reversed(group): + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_last_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for last plottable object + success, point = self.group_last_pt(subnode, matNew) + if success: + # Subnode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + else: + # Node is not a group + # Get its first (x,y) coordinates + # Also get a Boolean value to indicate if the subnode is plottable or not + # If subnode is not plottable, continue to next subnode in the group + success, point = self.getLastPoint(subnode, matNew) + if success: + + # Subode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + return success, point + + + def group2NodeDict(self, group, mat_current=None): + + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( mat_current, simpletransform.parseTransform( group.get( "transform" ) ) ) + + nodes_in_group = [] + + # Step through the group, we examine each element until we find a plottable object + for subnode in group: + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_first_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for first plottable object + nodes_in_group.extend(self.group2NodeDict(subnode, matNew)) + else: + simpletransform.applyTransformToNode(matNew, subnode) + nodes_in_group.append(subnode) + return nodes_in_group + + + def ReorderNodeList(self, coord_dict, group_dict): + # Re-order the given set of SVG elements, using a simple "greedy" algorithm. + # The first object will be the element closest to the origin + # After this choice, the algorithm loops through all remaining elements looking for the element whose first x,y + # coordinates are closest to the the previous choice's last x,y coordinates + # This process continues until all elements have been sorted into ordered_element_list and removed from group_dict + + ordered_layer_element_list = [] + + # Continue until all elements have been re-ordered + while group_dict: + + nearest_dist = float('inf') + for key,node in group_dict.items(): + # Is this node non-plottable? + # If so, exit loop and append element to ordered_layer_element_list + if not coord_dict[key][0]: + # Object is not Plottable + nearest = node + nearest_id = key + continue + + # If we reach this point, node is plottable and needs to be considered in our algo + entry_x = coord_dict[key][1] # x-coordinate of first point of the path + entry_y = coord_dict[key][2] # y-coordinate of first point of the path + + exit_x = coord_dict[key][3] # x-coordinate of last point of the path + exit_y = coord_dict[key][4] # y-coordinate of last point of the path + + object_dist = (entry_x-self.x_last)*(entry_x-self.x_last) + (entry_y-self.y_last) * (entry_y-self.y_last) + # This is actually the distance squared; calculating it rather than the pythagorean distance + # saves a square root calculation. Right now, we only care about _which distance is less_ + # not the exact value of it, so this is a harmless shortcut. + # If this distance is smaller than the previous element's distance, then replace the previous + # element's entry with our current element's distance + if nearest_dist >= object_dist: + # We have found an element closer than the previous closest element + nearest = node + nearest_id = key + nearest_dist = object_dist + nearest_start_x = entry_x + nearest_start_y = entry_y + + # Now that the closest object has been determined, it is time to add it to the + # optimized list of closest objects + ordered_layer_element_list.append(nearest) + + # To determine the closest object in the next iteration of the loop, + # we must save the last x,y coor of this element + # If this element is plottable, then save the x,y coordinates + # If this element is non-plottable, then do not save the x,y coordinates + if coord_dict[nearest_id][0]: + + # Also, draw line indicating that we've found a new point. + if self.preview_rendering: + preview_path = [] # pen-up path data for preview + + preview_path.append("M{0:.3f} {1:.3f}".format( + self.x_last, self.y_last)) + preview_path.append("{0:.3f} {1:.3f}".format( + nearest_start_x, nearest_start_y)) + self.p_style.update({'stroke': self.color_index(self.layer_index)}) + path_attrs = { + 'style': simplestyle.formatStyle( self.p_style ), + 'd': " ".join(preview_path)} + + etree.SubElement( self.preview_layer, + inkex.addNS( 'path', 'svg '), path_attrs, nsmap=inkex.NSS ) + + self.x_last = coord_dict[nearest_id][3] + self.y_last = coord_dict[nearest_id][4] + + # Remove this element from group_dict to indicate it has been optimized + del group_dict[nearest_id] + + # Once all elements have been removed from the group_dictionary + # Return the optimized list of svg elements in the layer + return ordered_layer_element_list + + + def color_index(self, index): + index = index % 9 + + if index == 0: + return "rgb(255, 0, 0))" + elif index == 1: + return "rgb(170, 85, 0))" + elif index == 2: + return "rgb(85, 170, 0))" + elif index == 3: + return "rgb(0, 255, 0))" + elif index == 4: + return "rgb(0, 170, 85))" + elif index == 5: + return "rgb(0, 85, 170))" + elif index == 6: + return "rgb(0, 0, 255))" + elif index == 7: + return "rgb(85, 0, 170))" + else: + return "rgb(170, 0, 85))" + + + def getDocProps(self): + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + + self.svg_height = fablabchemnitz_plot_utils.getLengthInches(self, 'height') + self.svg_width = fablabchemnitz_plot_utils.getLengthInches(self, 'width') + + width_string = self.svg.get('width') + if width_string: + value, units = fablabchemnitz_plot_utils.parseLengthWithUnits(width_string) + self.doc_units = units + + if self.auto_rotate and (self.svg_height > self.svg_width): + self.printPortrait = True + if self.svg_height is None or self.svg_width is None: + return False + else: + return True + + + def get_output(self): + # Return serialized copy of svg document output + result = etree.tostring(self.document) + return result.decode("utf-8") + +# Create effect instance and apply it. + +if __name__ == '__main__': + effect = ReorderEffect() + effect.affect() diff --git a/fablabchemnitz_repetier.inx b/fablabchemnitz_repetier.inx new file mode 100644 index 0000000..fa2428e --- /dev/null +++ b/fablabchemnitz_repetier.inx @@ -0,0 +1,26 @@ + + + <_name>Repetier Laser Tool + fablabchemnitz.de.repetier + fablabchemnitz_repetier.py + inkex.py + 3000 + 100 + 100 + 1 + 1 + + output.gcode + true + + + + + + + path + + + \ No newline at end of file diff --git a/fablabchemnitz_repetier.py b/fablabchemnitz_repetier.py new file mode 100644 index 0000000..1fb0895 --- /dev/null +++ b/fablabchemnitz_repetier.py @@ -0,0 +1,3179 @@ +#!/usr/bin/env python +""" +Modified by Marcus Littwin 2015, Hot-World GmbH & Co. KG, repetier.com +Modified by Jay Johnson 2015, J Tech Photonics, Inc., jtechphotonics.com +modified by Adam Polak 2014, polakiumengineering.org +based on Copyright (C) 2009 Nick Drobchenko, nick@cnc-club.ru +based on gcode.py (C) 2007 hugomatic... +based on addnodes.py (C) 2005,2007 Aaron Spike, aaron@ekips.org +based on dots.py (C) 2005 Aaron Spike, aaron@ekips.org +based on interp.py (C) 2005 Aaron Spike, aaron@ekips.org +based on bezmisc.py (C) 2005 Aaron Spike, aaron@ekips.org +based on cubicsuperpath.py (C) 2005 Aaron Spike, aaron@ekips.org +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" +import inkex, simplestyle, simplepath +import cubicsuperpath, simpletransform, bezmisc + +import os +import math +import bezmisc +import re +import copy +import sys +import time +import cmath +import numpy +import codecs +import random +import gettext +_ = gettext.gettext + + +### Check if inkex has errormsg (0.46 version doesnot have one.) Could be removed later. +if "errormsg" not in dir(inkex): + inkex.errormsg = lambda msg: sys.stderr.write((unicode(msg) + "\n").encode("UTF-8")) + + +def bezierslopeatt(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)),t): + ax,ay,bx,by,cx,cy,x0,y0=bezmisc.bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx=3*ax*(t**2)+2*bx*t+cx + dy=3*ay*(t**2)+2*by*t+cy + if dx==dy==0 : + dx = 6*ax*t+2*bx + dy = 6*ay*t+2*by + if dx==dy==0 : + dx = 6*ax + dy = 6*ay + if dx==dy==0 : + print_("Slope error x = %s*t^3+%s*t^2+%s*t+%s, y = %s*t^3+%s*t^2+%s*t+%s, t = %s, dx==dy==0" % (ax,bx,cx,dx,ay,by,cy,dy,t)) + print_(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx, dy = 1, 1 + + return dx,dy +bezmisc.bezierslopeatt = bezierslopeatt + + +def ireplace(self,old,new,count=0): + pattern = re.compile(re.escape(old),re.I) + return re.sub(pattern,new,self,count) + +################################################################################ +### +### Styles and additional parameters +### +################################################################################ + +math.pi2 = math.pi*2 +straight_tolerance = 0.0001 +straight_distance_tolerance = 0.0001 +engraving_tolerance = 0.0001 +loft_lengths_tolerance = 0.0000001 +options = {} +defaults = { +'header': """ +G90 +""", +'footer': """G0 X0 Y0 +M18 +""" +} + +intersection_recursion_depth = 10 +intersection_tolerance = 0.00001 + +styles = { + "loft_style" : { + 'main curve': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', 'stroke-width':'1', 'marker-end':'url(#Arrow2Mend)' }), + }, + "biarc_style" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#88f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#8f8', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f88', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#777', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + }, + "biarc_style_dark" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_area" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#33a', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#3a3', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#a33', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#222', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#880', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#808', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#088', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#999', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_dark_i" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#dd5', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#d5d', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'line': simplestyle.formatStyle({ 'stroke': '#5dd', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'1' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_passing feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#07f', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#0f7', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#f44', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "biarc_style_lathe_fine feed" : { + 'biarc0': simplestyle.formatStyle({ 'stroke': '#7f0', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'biarc1': simplestyle.formatStyle({ 'stroke': '#f70', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'line': simplestyle.formatStyle({ 'stroke': '#744', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'.4' }), + 'area': simplestyle.formatStyle({ 'stroke': '#aaa', 'fill': 'none', "marker-end":"url(#DrawCurveMarker)", 'stroke-width':'0.3' }), + }, + "area artefact": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "area artefact arrow": simplestyle.formatStyle({ 'stroke': '#ff0000', 'fill': '#ffff00', 'stroke-width':'1' }), + "dxf_points": simplestyle.formatStyle({ "stroke": "#ff0000", "fill": "#ff0000"}), + + } + + +################################################################################ +### Cubic Super Path additional functions +################################################################################ + +def csp_simple_bound(csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath : + for p in sp: + minx = min(minx,p[0]) if minx!=None else p[0] + miny = min(miny,p[1]) if miny!=None else p[1] + maxx = max(maxx,p[0]) if maxx!=None else p[0] + maxy = max(maxy,p[1]) if maxy!=None else p[1] + return minx,miny,maxx,maxy + + +def csp_segment_to_bez(sp1,sp2) : + return sp1[1:]+sp2[:2] + + +def bound_to_bound_distance(sp1,sp2,sp3,sp4) : + min_dist = 1e100 + max_dist = 0 + points1 = csp_segment_to_bez(sp1,sp2) + points2 = csp_segment_to_bez(sp3,sp4) + for i in range(4) : + for j in range(4) : + min_, max_ = line_to_line_min_max_distance_2(points1[i-1], points1[i], points2[j-1], points2[j]) + min_dist = min(min_dist,min_) + max_dist = max(max_dist,max_) + print_("bound_to_bound", min_dist, max_dist) + return min_dist, max_dist + +def csp_to_point_distance(csp, p, dist_bounds = [0,1e100], tolerance=.01) : + min_dist = [1e100,0,0,0] + for j in range(len(csp)) : + for i in range(1,len(csp[j])) : + d = csp_seg_to_point_distance(csp[j][i-1],csp[j][i],p,sample_points = 5, tolerance = .01) + if d[0] < dist_bounds[0] : +# draw_pointer( list(csp_at_t(subpath[dist[2]-1],subpath[dist[2]],dist[3])) +# +list(csp_at_t(csp[dist[4]][dist[5]-1],csp[dist[4]][dist[5]],dist[6])),"red","line", comment = math.sqrt(dist[0])) + return [d[0],j,i,d[1]] + else : + if d[0] < min_dist[0] : min_dist = [d[0],j,i,d[1]] + return min_dist + +def csp_seg_to_point_distance(sp1,sp2,p,sample_points = 5, tolerance = .01) : + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + dx, dy = dx-p[0], dy-p[1] + if sample_points < 2 : sample_points = 2 + d = min( [(p[0]-sp1[1][0])**2 + (p[1]-sp1[1][1])**2,0.], [(p[0]-sp2[1][0])**2 + (p[1]-sp2[1][1])**2,1.] ) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i = 0 + while i==0 or abs(f)>0.000001 and i<20 : + t2,t3 = t**2,t**3 + f = (ax*t3+bx*t2+cx*t+dx)*(3*ax*t2+2*bx*t+cx) + (ay*t3+by*t2+cy*t+dy)*(3*ay*t2+2*by*t+cy) + df = (6*ax*t+2*bx)*(ax*t3+bx*t2+cx*t+dx) + (3*ax*t2+2*bx*t+cx)**2 + (6*ay*t+2*by)*(ay*t3+by*t2+cy*t+dy) + (3*ay*t2+2*by*t+cy)**2 + if df!=0 : + t = t - f/df + else : + break + i += 1 + if 0<=t<=1 : + p1 = csp_at_t(sp1,sp2,t) + d1 = (p1[0]-p[0])**2 + (p1[1]-p[1])**2 + if d1 < d[0] : + d = [d1,t] + return d + + +def csp_seg_to_csp_seg_distance(sp1,sp2,sp3,sp4, dist_bounds = [0,1e100], sample_points = 5, tolerance=.01) : + # check the ending points first + dist = csp_seg_to_point_distance(sp1,sp2,sp3[1],sample_points, tolerance) + dist += [0.] + if dist[0] <= dist_bounds[0] : return dist + d = csp_seg_to_point_distance(sp1,sp2,sp4[1],sample_points, tolerance) + if d[0]tolerance and i<30 : + #draw_pointer(csp_at_t(sp1,sp2,t1)) + f1x = 3*ax1*t12+2*bx1*t1+cx1 + f1y = 3*ay1*t12+2*by1*t1+cy1 + f2x = 3*ax2*t22+2*bx2*t2+cx2 + f2y = 3*ay2*t22+2*by2*t2+cy2 + F1[0] = 2*f1x*x + 2*f1y*y + F1[1] = -2*f2x*x - 2*f2y*y + F2[0][0] = 2*(6*ax1*t1+2*bx1)*x + 2*f1x*f1x + 2*(6*ay1*t1+2*by1)*y +2*f1y*f1y + F2[0][1] = -2*f1x*f2x - 2*f1y*f2y + F2[1][0] = -2*f2x*f1x - 2*f2y*f1y + F2[1][1] = -2*(6*ax2*t2+2*bx2)*x + 2*f2x*f2x - 2*(6*ay2*t2+2*by2)*y + 2*f2y*f2y + F2 = inv_2x2(F2) + if F2!=None : + t1 -= ( F2[0][0]*F1[0] + F2[0][1]*F1[1] ) + t2 -= ( F2[1][0]*F1[0] + F2[1][1]*F1[1] ) + t12, t13, t22, t23 = t1*t1, t1*t1*t1, t2*t2, t2*t2*t2 + x,y = ax1*t13+bx1*t12+cx1*t1+dx1 - (ax2*t23+bx2*t22+cx2*t2+dx2), ay1*t13+by1*t12+cy1*t1+dy1 - (ay2*t23+by2*t22+cy2*t2+dy2) + Flast = F + F = x*x+y*y + else : + break + i += 1 + if F < dist[0] and 0<=t1<=1 and 0<=t2<=1: + dist = [F,t1,t2] + if dist[0] <= dist_bounds[0] : + return dist + return dist + + +def csp_to_csp_distance(csp1,csp2, dist_bounds = [0,1e100], tolerance=.01) : + dist = [1e100,0,0,0,0,0,0] + for i1 in range(len(csp1)) : + for j1 in range(1,len(csp1[i1])) : + for i2 in range(len(csp2)) : + for j2 in range(1,len(csp2[i2])) : + d = csp_seg_bound_to_csp_seg_bound_max_min_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2]) + if d[0] >= dist_bounds[1] : continue + if d[1] < dist_bounds[0] : return [d[1],i1,j1,1,i2,j2,1] + d = csp_seg_to_csp_seg_distance(csp1[i1][j1-1],csp1[i1][j1],csp2[i2][j2-1],csp2[i2][j2], dist_bounds, tolerance=tolerance) + if d[0] < dist[0] : + dist = [d[0], i1,j1,d[1], i2,j2,d[2]] + if dist[0] <= dist_bounds[0] : + return dist + if dist[0] >= dist_bounds[1] : + return dist + return dist +# draw_pointer( list(csp_at_t(csp1[dist[1]][dist[2]-1],csp1[dist[1]][dist[2]],dist[3])) +# + list(csp_at_t(csp2[dist[4]][dist[5]-1],csp2[dist[4]][dist[5]],dist[6])), "#507","line") + + +def csp_split(sp1,sp2,t=.5) : + [x1,y1],[x2,y2],[x3,y3],[x4,y4] = sp1[1], sp1[2], sp2[0], sp2[1] + x12 = x1+(x2-x1)*t + y12 = y1+(y2-y1)*t + x23 = x2+(x3-x2)*t + y23 = y2+(y3-y2)*t + x34 = x3+(x4-x3)*t + y34 = y3+(y4-y3)*t + x1223 = x12+(x23-x12)*t + y1223 = y12+(y23-y12)*t + x2334 = x23+(x34-x23)*t + y2334 = y23+(y34-y23)*t + x = x1223+(x2334-x1223)*t + y = y1223+(y2334-y1223)*t + return [sp1[0],sp1[1],[x12,y12]], [[x1223,y1223],[x,y],[x2334,y2334]], [[x34,y34],sp2[1],sp2[2]] + +def csp_true_bounds(csp) : + # Finds minx,miny,maxx,maxy of the csp and return their (x,y,i,j,t) + minx = [float("inf"), 0, 0, 0] + maxx = [float("-inf"), 0, 0, 0] + miny = [float("inf"), 0, 0, 0] + maxy = [float("-inf"), 0, 0, 0] + for i in range(len(csp)): + for j in range(1,len(csp[i])): + ax,ay,bx,by,cx,cy,x0,y0 = bezmisc.bezierparameterize((csp[i][j-1][1],csp[i][j-1][2],csp[i][j][0],csp[i][j][1])) + roots = cubic_solver(0, 3*ax, 2*bx, cx) + [0,1] + for root in roots : + if type(root) is complex and abs(root.imag)<1e-10: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxx = max([x,y,i,j,root],maxx) + minx = min([x,y,i,j,root],minx) + + roots = cubic_solver(0, 3*ay, 2*by, cy) + [0,1] + for root in roots : + if type(root) is complex and root.imag==0: + root = root.real + if type(root) is not complex and 0<=root<=1: + y = ay*(root**3)+by*(root**2)+cy*root+y0 + x = ax*(root**3)+bx*(root**2)+cx*root+x0 + maxy = max([y,x,i,j,root],maxy) + miny = min([y,x,i,j,root],miny) + maxy[0],maxy[1] = maxy[1],maxy[0] + miny[0],miny[1] = miny[1],miny[0] + + return minx,miny,maxx,maxy + + +############################################################################ +### csp_segments_intersection(sp1,sp2,sp3,sp4) +### +### Returns array containig all intersections between two segmets of cubic +### super path. Results are [ta,tb], or [ta0, ta1, tb0, tb1, "Overlap"] +### where ta, tb are values of t for the intersection point. +############################################################################ +def csp_segments_intersection(sp1,sp2,sp3,sp4) : + a, b = csp_segment_to_bez(sp1,sp2), csp_segment_to_bez(sp3,sp4) + + def polish_intersection(a,b,ta,tb, tolerance = intersection_tolerance) : + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize(a) + ax1,ay1,bx1,by1,cx1,cy1,dx1,dy1 = bezmisc.bezierparameterize(b) + i = 0 + F, F1 = [.0,.0], [[.0,.0],[.0,.0]] + while i==0 or (abs(F[0])**2+abs(F[1])**2 > tolerance and i<10): + ta3, ta2, tb3, tb2 = ta**3, ta**2, tb**3, tb**2 + F[0] = ax*ta3+bx*ta2+cx*ta+dx-ax1*tb3-bx1*tb2-cx1*tb-dx1 + F[1] = ay*ta3+by*ta2+cy*ta+dy-ay1*tb3-by1*tb2-cy1*tb-dy1 + F1[0][0] = 3*ax *ta2 + 2*bx *ta + cx + F1[0][1] = -3*ax1*tb2 - 2*bx1*tb - cx1 + F1[1][0] = 3*ay *ta2 + 2*by *ta + cy + F1[1][1] = -3*ay1*tb2 - 2*by1*tb - cy1 + det = F1[0][0]*F1[1][1] - F1[0][1]*F1[1][0] + if det!=0 : + F1 = [ [ F1[1][1]/det, -F1[0][1]/det], [-F1[1][0]/det, F1[0][0]/det] ] + ta = ta - ( F1[0][0]*F[0] + F1[0][1]*F[1] ) + tb = tb - ( F1[1][0]*F[0] + F1[1][1]*F[1] ) + else: break + i += 1 + + return ta, tb + + + def recursion(a,b, ta0,ta1,tb0,tb1, depth_a,depth_b) : + global bezier_intersection_recursive_result + if a==b : + bezier_intersection_recursive_result += [[ta0,tb0,ta1,tb1,"Overlap"]] + return + tam, tbm = (ta0+ta1)/2, (tb0+tb1)/2 + if depth_a>0 and depth_b>0 : + a1,a2 = bez_split(a,0.5) + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a1,b1) : recursion(a1,b1, ta0,tam,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b1) : recursion(a2,b1, tam,ta1,tb0,tbm, depth_a-1,depth_b-1) + if bez_bounds_intersect(a1,b2) : recursion(a1,b2, ta0,tam,tbm,tb1, depth_a-1,depth_b-1) + if bez_bounds_intersect(a2,b2) : recursion(a2,b2, tam,ta1,tbm,tb1, depth_a-1,depth_b-1) + elif depth_a>0 : + a1,a2 = bez_split(a,0.5) + if bez_bounds_intersect(a1,b) : recursion(a1,b, ta0,tam,tb0,tb1, depth_a-1,depth_b) + if bez_bounds_intersect(a2,b) : recursion(a2,b, tam,ta1,tb0,tb1, depth_a-1,depth_b) + elif depth_b>0 : + b1,b2 = bez_split(b,0.5) + if bez_bounds_intersect(a,b1) : recursion(a,b1, ta0,ta1,tb0,tbm, depth_a,depth_b-1) + if bez_bounds_intersect(a,b2) : recursion(a,b2, ta0,ta1,tbm,tb1, depth_a,depth_b-1) + else : # Both segments have been subdevided enougth. Let's get some intersections :). + intersection, t1, t2 = straight_segments_intersection([a[0]]+[a[3]],[b[0]]+[b[3]]) + if intersection : + if intersection == "Overlap" : + t1 = ( max(0,min(1,t1[0]))+max(0,min(1,t1[1])) )/2 + t2 = ( max(0,min(1,t2[0]))+max(0,min(1,t2[1])) )/2 + bezier_intersection_recursive_result += [[ta0+t1*(ta1-ta0),tb0+t2*(tb1-tb0)]] + + global bezier_intersection_recursive_result + bezier_intersection_recursive_result = [] + recursion(a,b,0.,1.,0.,1.,intersection_recursion_depth,intersection_recursion_depth) + intersections = bezier_intersection_recursive_result + for i in range(len(intersections)) : + if len(intersections[i])<5 or intersections[i][4] != "Overlap" : + intersections[i] = polish_intersection(a,b,intersections[i][0],intersections[i][1]) + return intersections + + +def csp_segments_true_intersection(sp1,sp2,sp3,sp4) : + intersections = csp_segments_intersection(sp1,sp2,sp3,sp4) + res = [] + for intersection in intersections : + if ( + (len(intersection)==5 and intersection[4] == "Overlap" and (0<=intersection[0]<=1 or 0<=intersection[1]<=1) and (0<=intersection[2]<=1 or 0<=intersection[3]<=1) ) + or ( 0<=intersection[0]<=1 and 0<=intersection[1]<=1 ) + ) : + res += [intersection] + return res + + +def csp_get_t_at_curvature(sp1,sp2,c, sample_points = 16): + # returns a list containning [t1,t2,t3,...,tn], 0<=ti<=1... + if sample_points < 2 : sample_points = 2 + tolerance = .0000000001 + res = [] + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + for k in range(sample_points) : + t = float(k)/(sample_points-1) + i, F = 0, 1e100 + while i<2 or abs(F)>tolerance and i<17 : + try : # some numerical calculation could exceed the limits + t2 = t*t + #slopes... + f1x = 3*ax*t2+2*bx*t+cx + f1y = 3*ay*t2+2*by*t+cy + f2x = 6*ax*t+2*bx + f2y = 6*ay*t+2*by + f3x = 6*ax + f3y = 6*ay + d = (f1x**2+f1y**2)**1.5 + F1 = ( + ( (f1x*f3y-f3x*f1y)*d - (f1x*f2y-f2x*f1y)*3.*(f2x*f1x+f2y*f1y)*((f1x**2+f1y**2)**.5) ) / + ((f1x**2+f1y**2)**3) + ) + F = (f1x*f2y-f1y*f2x)/d - c + t -= F/F1 + except: + break + i += 1 + if 0<=t<=1 and F<=tolerance: + if len(res) == 0 : + res.append(t) + for i in res : + if abs(t-i)<=0.001 : + break + if not abs(t-i)<=0.001 : + res.append(t) + return res + + +def csp_max_curvature(sp1,sp2): + ax,ay,bx,by,cx,cy,dx,dy = csp_parameterize(sp1,sp2) + tolerance = .0001 + F = 0. + i = 0 + while i<2 or F-Flast 0 : return 1e100 + if t1 < 0 : return -1e100 + # Use the Lapitals rule to solve 0/0 problem for 2 times... + t1 = 2*(bx*ay-ax*by)*t+(ay*cx-ax*cy) + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + t1 = bx*ay-ax*by + if t1 > 0 : return 1e100 + if t1 < 0 : return -1e100 + if depth>0 : + # little hack ;^) hope it wont influence anything... + return csp_curvature_at_t(sp1,sp2,t*1.004, depth-1) + return 1e100 + + +def csp_curvature_radius_at_t(sp1,sp2,t) : + c = csp_curvature_at_t(sp1,sp2,t) + if c == 0 : return 1e100 + else: return 1/c + + +def csp_special_points(sp1,sp2) : + # special points = curvature == 0 + ax,ay,bx,by,cx,cy,dx,dy = bezmisc.bezierparameterize((sp1[1],sp1[2],sp2[0],sp2[1])) + a = 3*ax*by-3*ay*bx + b = 3*ax*cy-3*cx*ay + c = bx*cy-cx*by + roots = cubic_solver(0, a, b, c) + res = [] + for i in roots : + if type(i) is complex and i.imag==0: + i = i.real + if type(i) is not complex and 0<=i<=1: + res.append(i) + return res + + +def csp_subpath_ccw(subpath): + # Remove all zerro length segments + s = 0 + #subpath = subpath[:] + if (P(subpath[-1][1])-P(subpath[0][1])).l2() > 1e-10 : + subpath[-1][2] = subpath[-1][1] + subpath[0][0] = subpath[0][1] + subpath += [ [subpath[0][1],subpath[0][1],subpath[0][1]] ] + pl = subpath[-1][2] + for sp1 in subpath: + for p in sp1 : + s += (p[0]-pl[0])*(p[1]+pl[1]) + pl = p + return s<0 + + +def csp_at_t(sp1,sp2,t): + ax,bx,cx,dx = sp1[1][0], sp1[2][0], sp2[0][0], sp2[1][0] + ay,by,cy,dy = sp1[1][1], sp1[2][1], sp2[0][1], sp2[1][1] + + x1, y1 = ax+(bx-ax)*t, ay+(by-ay)*t + x2, y2 = bx+(cx-bx)*t, by+(cy-by)*t + x3, y3 = cx+(dx-cx)*t, cy+(dy-cy)*t + + x4,y4 = x1+(x2-x1)*t, y1+(y2-y1)*t + x5,y5 = x2+(x3-x2)*t, y2+(y3-y2)*t + + x,y = x4+(x5-x4)*t, y4+(y5-y4)*t + return [x,y] + + +def csp_splitatlength(sp1, sp2, l = 0.5, tolerance = 0.01): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return csp_split(sp1, sp2, t) + + +def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + +def csplength(csp): + total = 0 + lengths = [] + for sp in csp: + for i in xrange(1,len(sp)): + l = cspseglength(sp[i-1],sp[i]) + lengths.append(l) + total += l + return lengths, total + + +def csp_segments(csp): + l, seg = 0, [0] + for sp in csp: + for i in xrange(1,len(sp)): + l += cspseglength(sp[i-1],sp[i]) + seg += [ l ] + + if l>0 : + seg = [seg[i]/l for i in xrange(len(seg))] + return seg,l + + +def rebuild_csp (csp, segs, s=None): + # rebuild_csp() adds to csp control points making it's segments looks like segs + if s==None : s, l = csp_segments(csp) + + if len(s)>len(segs) : return None + segs = segs[:] + segs.sort() + for i in xrange(len(s)): + d = None + for j in xrange(len(segs)): + d = min( [abs(s[i]-segs[j]),j], d) if d!=None else [abs(s[i]-segs[j]),j] + del segs[d[1]] + for i in xrange(len(segs)): + for j in xrange(0,len(s)): + if segs[i]t2 : t1, t2 = t2, t1 + if t1 == t2 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t) + return [sp1,sp2,sp2,sp3] + elif t1 <= 1e-10 and t2 >= 1.-1e-10 : + return [sp1,sp1,sp2,sp2] + elif t1 <= 1e-10: + sp1,sp2,sp3 = csp_split(sp1,sp2,t2) + return [sp1,sp1,sp2,sp3] + elif t2 >= 1.-1e-10 : + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + return [sp1,sp2,sp3,sp3] + else: + sp1,sp2,sp3 = csp_split(sp1,sp2,t1) + sp2,sp3,sp4 = csp_split(sp2,sp3,(t2-t1)/(1-t1) ) + return [sp1,sp2,sp3,sp4] + + +def csp_subpath_split_by_points(subpath, points) : + # points are [[i,t]...] where i-segment's number + points.sort() + points = [[1,0.]] + points + [[len(subpath)-1,1.]] + parts = [] + for int1,int2 in zip(points,points[1:]) : + if int1==int2 : + continue + if int1[1] == 1. : + int1[0] += 1 + int1[1] = 0. + if int1==int2 : + continue + if int2[1] == 0. : + int2[0] -= 1 + int2[1] = 1. + if int1[0] == 0 and int2[0]==len(subpath)-1:# and small(int1[1]) and small(int2[1]-1) : + continue + if int1[0]==int2[0] : # same segment + sp = csp_split_by_two_points(subpath[int1[0]-1],subpath[int1[0]],int1[1], int2[1]) + if sp[1]!=sp[2] : + parts += [ [sp[1],sp[2]] ] + else : + sp5,sp1,sp2 = csp_split(subpath[int1[0]-1],subpath[int1[0]],int1[1]) + sp3,sp4,sp5 = csp_split(subpath[int2[0]-1],subpath[int2[0]],int2[1]) + if int1[0]==int2[0]-1 : + parts += [ [sp1, [sp2[0],sp2[1],sp3[2]], sp4] ] + else : + parts += [ [sp1,sp2]+subpath[int1[0]+1:int2[0]-1]+[sp3,sp4] ] + return parts + + +def csp_from_arc(start, end, center, r, slope_st) : + # Creates csp that approximise specified arc + r = abs(r) + alpha = (atan2(end[0]-center[0],end[1]-center[1]) - atan2(start[0]-center[0],start[1]-center[1])) % math.pi2 + + sectors = int(abs(alpha)*2/math.pi)+1 + alpha_start = atan2(start[0]-center[0],start[1]-center[1]) + cos_,sin_ = math.cos(alpha_start), math.sin(alpha_start) + k = (4.*math.tan(alpha/sectors/4.)/3.) + if dot(slope_st , [- sin_*k*r, cos_*k*r]) < 0 : + if alpha>0 : alpha -= math.pi2 + else: alpha += math.pi2 + if abs(alpha*r)<0.001 : + return [] + + sectors = int(abs(alpha)*2/math.pi)+1 + k = (4.*math.tan(alpha/sectors/4.)/3.) + result = [] + for i in range(sectors+1) : + cos_,sin_ = math.cos(alpha_start + alpha*i/sectors), math.sin(alpha_start + alpha*i/sectors) + sp = [ [], [center[0] + cos_*r, center[1] + sin_*r], [] ] + sp[0] = [sp[1][0] + sin_*k*r, sp[1][1] - cos_*k*r ] + sp[2] = [sp[1][0] - sin_*k*r, sp[1][1] + cos_*k*r ] + result += [sp] + result[0][0] = result[0][1][:] + result[-1][2] = result[-1][1] + + return result + + +def point_to_arc_distance(p, arc): + ### Distance calculattion from point to arc + P0,P2,c,a = arc + dist = None + p = P(p) + r = (P0-c).mag() + if r>0 : + i = c + (p-c).unit()*r + alpha = ((i-c).angle() - (P0-c).angle()) + if a*alpha<0: + if alpha>0: alpha = alpha-math.pi2 + else: alpha = math.pi2+alpha + if between(alpha,0,a) or min(abs(alpha),abs(alpha-a))tolerance and i<4): + i += 1 + dl = d1*1 + for j in range(n+1): + t = float(j)/n + p = csp_at_t(sp1,sp2,t) + d = min(point_to_arc_distance(p,arc1), point_to_arc_distance(p,arc2)) + d1 = max(d1,d) + n=n*2 + return d1[0] + + +def csp_simple_bound_to_point_distance(p, csp): + minx,miny,maxx,maxy = None,None,None,None + for subpath in csp: + for sp in subpath: + for p_ in sp: + minx = min(minx,p_[0]) if minx!=None else p_[0] + miny = min(miny,p_[1]) if miny!=None else p_[1] + maxx = max(maxx,p_[0]) if maxx!=None else p_[0] + maxy = max(maxy,p_[1]) if maxy!=None else p_[1] + return math.sqrt(max(minx-p[0],p[0]-maxx,0)**2+max(miny-p[1],p[1]-maxy,0)**2) + + +def csp_point_inside_bound(sp1, sp2, p): + bez = [sp1[1],sp1[2],sp2[0],sp2[1]] + x,y = p + c = 0 + for i in range(4): + [x0,y0], [x1,y1] = bez[i-1], bez[i] + if x0-x1!=0 and (y-y0)*(x1-x0)>=(x-x0)*(y1-y0) and x>min(x0,x1) and x<=max(x0,x1) : + c +=1 + return c%2==0 + + +def csp_bound_to_point_distance(sp1, sp2, p): + if csp_point_inside_bound(sp1, sp2, p) : + return 0. + bez = csp_segment_to_bez(sp1,sp2) + min_dist = 1e100 + for i in range(0,4): + d = point_to_line_segment_distance_2(p, bez[i-1],bez[i]) + if d <= min_dist : min_dist = d + return min_dist + + +def line_line_intersect(p1,p2,p3,p4) : # Return only true intersection. + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return False + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + return ("Overlap" if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) else False) + else: return False + else : + return ( + 0<=((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x<=1 and + 0<=((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x<=1 ) + + +def line_line_intersection_points(p1,p2,p3,p4) : # Return only points [ (x,y) ] + if (p1[0]==p2[0] and p1[1]==p2[1]) or (p3[0]==p4[0] and p3[1]==p4[1]) : return [] + x = (p2[0]-p1[0])*(p4[1]-p3[1]) - (p2[1]-p1[1])*(p4[0]-p3[0]) + if x==0 : # Lines are parallel + if (p3[0]-p1[0])*(p2[1]-p1[1]) == (p3[1]-p1[1])*(p2[0]-p1[0]) : + if p3[0]!=p4[0] : + t11 = (p1[0]-p3[0])/(p4[0]-p3[0]) + t12 = (p2[0]-p3[0])/(p4[0]-p3[0]) + t21 = (p3[0]-p1[0])/(p2[0]-p1[0]) + t22 = (p4[0]-p1[0])/(p2[0]-p1[0]) + else: + t11 = (p1[1]-p3[1])/(p4[1]-p3[1]) + t12 = (p2[1]-p3[1])/(p4[1]-p3[1]) + t21 = (p3[1]-p1[1])/(p2[1]-p1[1]) + t22 = (p4[1]-p1[1])/(p2[1]-p1[1]) + res = [] + if (0<=t11<=1 or 0<=t12<=1) and (0<=t21<=1 or 0<=t22<=1) : + if 0<=t11<=1 : res += [p1] + if 0<=t12<=1 : res += [p2] + if 0<=t21<=1 : res += [p3] + if 0<=t22<=1 : res += [p4] + return res + else: return [] + else : + t1 = ((p4[0]-p3[0])*(p1[1]-p3[1]) - (p4[1]-p3[1])*(p1[0]-p3[0]))/x + t2 = ((p2[0]-p1[0])*(p1[1]-p3[1]) - (p2[1]-p1[1])*(p1[0]-p3[0]))/x + if 0<=t1<=1 and 0<=t2<=1 : return [ [p1[0]*(1-t1)+p2[0]*t1, p1[1]*(1-t1)+p2[1]*t1] ] + else : return [] + + +def point_to_point_d2(a,b): + return (a[0]-b[0])**2 + (a[1]-b[1])**2 + + +def point_to_point_d(a,b): + return math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2) + + +def point_to_line_segment_distance_2(p1, p2,p3) : + # p1 - point, p2,p3 - line segment + #draw_pointer(p1) + w0 = [p1[0]-p2[0], p1[1]-p2[1]] + v = [p3[0]-p2[0], p3[1]-p2[1]] + c1 = w0[0]*v[0] + w0[1]*v[1] + if c1 <= 0 : + return w0[0]*w0[0]+w0[1]*w0[1] + c2 = v[0]*v[0] + v[1]*v[1] + if c2 <= c1 : + return (p1[0]-p3[0])**2 + (p1[1]-p3[1])**2 + return (p1[0]- p2[0]-v[0]*c1/c2)**2 + (p1[1]- p2[1]-v[1]*c1/c2) + + +def line_to_line_distance_2(p1,p2,p3,p4): + if line_line_intersect(p1,p2,p3,p4) : return 0 + return min( + point_to_line_segment_distance_2(p1,p3,p4), + point_to_line_segment_distance_2(p2,p3,p4), + point_to_line_segment_distance_2(p3,p1,p2), + point_to_line_segment_distance_2(p4,p1,p2)) + + +def csp_seg_bound_to_csp_seg_bound_max_min_distance(sp1,sp2,sp3,sp4) : + bez1 = csp_segment_to_bez(sp1,sp2) + bez2 = csp_segment_to_bez(sp3,sp4) + min_dist = 1e100 + max_dist = 0. + for i in range(4) : + if csp_point_inside_bound(sp1, sp2, bez2[i]) or csp_point_inside_bound(sp3, sp4, bez1[i]) : + min_dist = 0. + break + for i in range(4) : + for j in range(4) : + d = line_to_line_distance_2(bez1[i-1],bez1[i],bez2[j-1],bez2[j]) + if d < min_dist : min_dist = d + d = (bez2[j][0]-bez1[i][0])**2 + (bez2[j][1]-bez1[i][1])**2 + if max_dist < d : max_dist = d + return min_dist, max_dist + + +def csp_reverse(csp) : + for i in range(len(csp)) : + n = [] + for j in csp[i] : + n = [ [j[2][:],j[1][:],j[0][:]] ] + n + csp[i] = n[:] + return csp + + +def csp_normalized_slope(sp1,sp2,t) : + ax,ay,bx,by,cx,cy,dx,dy=bezmisc.bezierparameterize((sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:])) + if sp1[1]==sp2[1]==sp1[2]==sp2[0] : return [1.,0.] + f1x = 3*ax*t*t+2*bx*t+cx + f1y = 3*ay*t*t+2*by*t+cy + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + + if t == 0 : + f1x = sp2[0][0]-sp1[1][0] + f1y = sp2[0][1]-sp1[1][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + elif t == 1 : + f1x = sp2[1][0]-sp1[2][0] + f1y = sp2[1][1]-sp1[2][1] + if abs(f1x*f1x+f1y*f1y) > 1e-20 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + f1x = sp2[1][0]-sp1[1][0] + f1y = sp2[1][1]-sp1[1][1] + if f1x*f1x+f1y*f1y != 0 : + l = math.sqrt(f1x*f1x+f1y*f1y) + return [f1x/l, f1y/l] + else : + return [1.,0.] + + +def csp_normalized_normal(sp1,sp2,t) : + nx,ny = csp_normalized_slope(sp1,sp2,t) + return [-ny, nx] + + +def csp_parameterize(sp1,sp2): + return bezmisc.bezierparameterize(csp_segment_to_bez(sp1,sp2)) + + +def csp_concat_subpaths(*s): + + def concat(s1,s2) : + if s1 == [] : return s2 + if s2 == [] : return s1 + if (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 > 0.00001 : + return s1[:-1]+[ [s1[-1][0],s1[-1][1],s1[-1][1]], [s2[0][1],s2[0][1],s2[0][2]] ] + s2[1:] + else : + return s1[:-1]+[ [s1[-1][0],s2[0][1],s2[0][2]] ] + s2[1:] + + if len(s) == 0 : return [] + if len(s) ==1 : return s[0] + result = s[0] + for s1 in s[1:]: + result = concat(result,s1) + return result + + +def csp_draw(csp, color="#05f", group = None, style="fill:none;", width = .1, comment = "") : + if csp!=[] and csp!=[[]] : + if group == None : group = options.doc_root + style += "stroke:"+color+";"+ "stroke-width:%0.4fpx;"%width + args = {"d": cubicsuperpath.formatPath(csp), "style":style} + if comment!="" : args["comment"] = str(comment) + inkex.etree.SubElement( group, inkex.addNS('path','svg'), args ) + + +def csp_subpaths_end_to_start_distance2(s1,s2): + return (s1[-1][1][0]-s2[0][1][0])**2 + (s1[-1][1][1]-s2[0][1][1])**2 + + +def csp_clip_by_line(csp,l1,l2) : + result = [] + for i in range(len(csp)): + s = csp[i] + intersections = [] + for j in range(1,len(s)) : + intersections += [ [j,int_] for int_ in csp_line_intersection(l1,l2,s[j-1],s[j])] + splitted_s = csp_subpath_split_by_points(s, intersections) + for s in splitted_s[:] : + clip = False + for p in csp_true_bounds([s]) : + if (l1[1]-l2[1])*p[0] + (l2[0]-l1[0])*p[1] + (l1[0]*l2[1]-l2[0]*l1[1])<-0.01 : + clip = True + break + if clip : + splitted_s.remove(s) + result += splitted_s + return result + + +def csp_subpath_line_to(subpath, points) : + # Appends subpath with line or polyline. + if len(points)>0 : + if len(subpath)>0: + subpath[-1][2] = subpath[-1][1][:] + if type(points[0]) == type([1,1]) : + for p in points : + subpath += [ [p[:],p[:],p[:]] ] + else: + subpath += [ [points,points,points] ] + return subpath + + +def csp_join_subpaths(csp) : + result = csp[:] + done_smf = True + joined_result = [] + while done_smf : + done_smf = False + while len(result)>0: + s1 = result[-1][:] + del(result[-1]) + j = 0 + joined_smf = False + while j0, abc*bcd>0, abc*cad>0 + if m1 and m2 and m3 : return [a,b,c] + if m1 and m2 and not m3 : return [a,b,c,d] + if m1 and not m2 and m3 : return [a,b,d,c] + if not m1 and m2 and m3 : return [a,d,b,c] + if m1 and not (m2 and m3) : return [a,b,d] + if not (m1 and m2) and m3 : return [c,a,d] + if not (m1 and m3) and m2 : return [b,c,d] + + raise ValueError, "csp_segment_convex_hull happend something that shouldnot happen!" + + +################################################################################ +### Bezier additional functions +################################################################################ + +def bez_bounds_intersect(bez1, bez2) : + return bounds_intersect(bez_bound(bez2), bez_bound(bez1)) + + +def bez_bound(bez) : + return [ + min(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + min(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + max(bez[0][0], bez[1][0], bez[2][0], bez[3][0]), + max(bez[0][1], bez[1][1], bez[2][1], bez[3][1]), + ] + + +def bounds_intersect(a, b) : + return not ( (a[0]>b[2]) or (b[0]>a[2]) or (a[1]>b[3]) or (b[1]>a[3]) ) + + +def tpoint((x1,y1),(x2,y2),t): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + + +def bez_to_csp_segment(bez) : + return [bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]] + + +def bez_split(a,t=0.5) : + a1 = tpoint(a[0],a[1],t) + at = tpoint(a[1],a[2],t) + b2 = tpoint(a[2],a[3],t) + a2 = tpoint(a1,at,t) + b1 = tpoint(b2,at,t) + a3 = tpoint(a2,b1,t) + return [a[0],a1,a2,a3], [a3,b1,b2,a[3]] + + +def bez_at_t(bez,t) : + return csp_at_t([bez[0],bez[0],bez[1]],[bez[2],bez[3],bez[3]],t) + + +def bez_to_point_distance(bez,p,needed_dist=[0.,1e100]): + # returns [d^2,t] + return csp_seg_to_point_distance(bez_to_csp_segment(bez),p,needed_dist) + + +def bez_normalized_slope(bez,t): + return csp_normalized_slope([bez[0],bez[0],bez[1]], [bez[2],bez[3],bez[3]],t) + +################################################################################ +### Some vector functions +################################################################################ + +def normalize((x,y)) : + l = math.sqrt(x**2+y**2) + if l == 0 : return [0.,0.] + else : return [x/l, y/l] + + +def cross(a,b) : + return a[1] * b[0] - a[0] * b[1] + + +def dot(a,b) : + return a[0] * b[0] + a[1] * b[1] + + +def rotate_ccw(d) : + return [-d[1],d[0]] + + +def vectors_ccw(a,b): + return a[0]*b[1]-b[0]*a[1] < 0 + + +def vector_from_to_length(a,b): + return math.sqrt((a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1])) + +################################################################################ +### Common functions +################################################################################ + +def matrix_mul(a,b) : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + try : + return [ [ sum([a[i][k]*b[k][j] for k in range(len(a[0])) ]) for j in range(len(b[0]))] for i in range(len(a))] + except : + return None + + +def transpose(a) : + try : + return [ [ a[i][j] for i in range(len(a)) ] for j in range(len(a[0])) ] + except : + return None + + +def det_3x3(a): + return float( + a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[1][0]*a[2][1]*a[0][2] + - a[0][2]*a[1][1]*a[2][0] - a[0][0]*a[2][1]*a[1][2] - a[0][1]*a[2][2]*a[1][0] + ) + + +def inv_3x3(a): # invert matrix 3x3 + det = det_3x3(a) + if det==0: return None + return [ + [ (a[1][1]*a[2][2] - a[2][1]*a[1][2])/det, -(a[0][1]*a[2][2] - a[2][1]*a[0][2])/det, (a[0][1]*a[1][2] - a[1][1]*a[0][2])/det ], + [ -(a[1][0]*a[2][2] - a[2][0]*a[1][2])/det, (a[0][0]*a[2][2] - a[2][0]*a[0][2])/det, -(a[0][0]*a[1][2] - a[1][0]*a[0][2])/det ], + [ (a[1][0]*a[2][1] - a[2][0]*a[1][1])/det, -(a[0][0]*a[2][1] - a[2][0]*a[0][1])/det, (a[0][0]*a[1][1] - a[1][0]*a[0][1])/det ] + ] + + +def inv_2x2(a): # invert matrix 2x2 + det = a[0][0]*a[1][1] - a[1][0]*a[0][1] + if det==0: return None + return [ + [a[1][1]/det, -a[0][1]/det], + [-a[1][0]/det, a[0][0]/det] + ] + + +def small(a) : + global small_tolerance + return abs(a)=0 : + t = m+math.sqrt(n) + m1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + t = m-math.sqrt(n) + n1 = pow(t/2,1./3) if t>=0 else -pow(-t/2,1./3) + else : + m1 = pow(complex((m+cmath.sqrt(n))/2),1./3) + n1 = pow(complex((m-cmath.sqrt(n))/2),1./3) + x1 = -1./3 * (a + m1 + n1) + x2 = -1./3 * (a + w1*m1 + w2*n1) + x3 = -1./3 * (a + w2*m1 + w1*n1) + return [x1,x2,x3] + elif b!=0: + det = c**2-4*b*d + if det>0 : + return [(-c+math.sqrt(det))/(2*b),(-c-math.sqrt(det))/(2*b)] + elif d == 0 : + return [-c/(b*b)] + else : + return [(-c+cmath.sqrt(det))/(2*b),(-c-cmath.sqrt(det))/(2*b)] + elif c!=0 : + return [-d/c] + else : return [] + + +################################################################################ +### print_ prints any arguments into specified log file +################################################################################ + +def print_(*arg): + f = open(options.log_filename,"a") + for s in arg : + s = str(unicode(s).encode('unicode_escape'))+" " + f.write( s ) + f.write("\n") + f.close() + + +################################################################################ +### Point (x,y) operations +################################################################################ +class P: + def __init__(self, x, y=None): + if not y==None: + self.x, self.y = float(x), float(y) + else: + self.x, self.y = float(x[0]), float(x[1]) + def __add__(self, other): return P(self.x + other.x, self.y + other.y) + def __sub__(self, other): return P(self.x - other.x, self.y - other.y) + def __neg__(self): return P(-self.x, -self.y) + def __mul__(self, other): + if isinstance(other, P): + return self.x * other.x + self.y * other.y + return P(self.x * other, self.y * other) + __rmul__ = __mul__ + def __div__(self, other): return P(self.x / other, self.y / other) + def mag(self): return math.hypot(self.x, self.y) + def unit(self): + h = self.mag() + if h: return self / h + else: return P(0,0) + def dot(self, other): return self.x * other.x + self.y * other.y + def rot(self, theta): + c = math.cos(theta) + s = math.sin(theta) + return P(self.x * c - self.y * s, self.x * s + self.y * c) + def angle(self): return math.atan2(self.y, self.x) + def __repr__(self): return '%f,%f' % (self.x, self.y) + def pr(self): return "%.2f,%.2f" % (self.x, self.y) + def to_list(self): return [self.x, self.y] + def ccw(self): return P(-self.y,self.x) + def l2(self): return self.x*self.x + self.y*self.y + +################################################################################ +### +### Offset function +### +### This function offsets given cubic super path. +### It's based on src/livarot/PathOutline.cpp from Inkscape's source code. +### +### +################################################################################ +def csp_offset(csp, r) : + offset_tolerance = 0.05 + offset_subdivision_depth = 10 + time_ = time.time() + time_start = time_ + print_("Offset start at %s"% time_) + print_("Offset radius %s"% r) + + + def csp_offset_segment(sp1,sp2,r) : + result = [] + t = csp_get_t_at_curvature(sp1,sp2,1/r) + if len(t) == 0 : t =[0.,1.] + t.sort() + if t[0]>.00000001 : t = [0.]+t + if t[-1]<.99999999 : t.append(1.) + for st,end in zip(t,t[1:]) : + c = csp_curvature_at_t(sp1,sp2,(st+end)/2) + sp = csp_split_by_two_points(sp1,sp2,st,end) + if sp[1]!=sp[2]: + if (c>1/r and r<0 or c<1/r and r>0) : + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + else : # This part will be clipped for sure... TODO Optimize it... + offset = offset_segment_recursion(sp[1],sp[2],r, offset_subdivision_depth, offset_tolerance) + + if result==[] : + result = offset[:] + else: + if csp_subpaths_end_to_start_distance2(result,offset)<0.0001 : + result = csp_concat_subpaths(result,offset) + else: + + intersection = csp_get_subapths_last_first_intersection(result,offset) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(result[i-1],result[i],t1) + result = result[:i-1] + [ sp1_, sp2_ ] + sp1_,sp2_,sp3_ = csp_split(offset[j-1],offset[j],t2) + result = csp_concat_subpaths( result, [sp2_,sp3_] + offset[j+1:] ) + else : + pass # ??? + #raise ValueError, "Offset curvature clipping error" + #csp_draw([result]) + return result + + + def create_offset_segment(sp1,sp2,r) : + # See Gernot Hoffmann "Bezier Curves" p.34 -> 7.1 Bezier Offset Curves + p0,p1,p2,p3 = P(sp1[1]),P(sp1[2]),P(sp2[0]),P(sp2[1]) + s0,s1,s3 = p1-p0,p2-p1,p3-p2 + n0 = s0.ccw().unit() if s0.l2()!=0 else P(csp_normalized_normal(sp1,sp2,0)) + n3 = s3.ccw().unit() if s3.l2()!=0 else P(csp_normalized_normal(sp1,sp2,1)) + n1 = s1.ccw().unit() if s1.l2()!=0 else (n0.unit()+n3.unit()).unit() + + q0,q3 = p0+r*n0, p3+r*n3 + c = csp_curvature_at_t(sp1,sp2,0) + q1 = q0 + (p1-p0)*(1- (r*c if abs(c)<100 else 0) ) + c = csp_curvature_at_t(sp1,sp2,1) + q2 = q3 + (p2-p3)*(1- (r*c if abs(c)<100 else 0) ) + + + return [[q0.to_list(), q0.to_list(), q1.to_list()],[q2.to_list(), q3.to_list(), q3.to_list()]] + + + def csp_get_subapths_last_first_intersection(s1,s2): + _break = False + for i in range(1,len(s1)) : + sp11, sp12 = s1[-i-1], s1[-i] + for j in range(1,len(s2)) : + sp21,sp22 = s2[j-1], s2[j] + intersection = csp_segments_true_intersection(sp11,sp12,sp21,sp22) + if intersection != [] : + _break = True + break + if _break:break + if _break : + intersection = max(intersection) + return [len(s1)-i,intersection[0], j,intersection[1]] + else : + return [] + + + def csp_join_offsets(prev,next,sp1,sp2,sp1_l,sp2_l,r): + if len(next)>1 : + if (P(prev[-1][1])-P(next[0][1])).l2()<0.001 : + return prev,[],next + intersection = csp_get_subapths_last_first_intersection(prev,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1], next[j],t2) + return prev[:i-1] + [ sp1_, sp2_ ], [], [sp4_,sp5_] + next[j+1:] + + # Offsets do not intersect... will add an arc... + start = (P(csp_at_t(sp1_l,sp2_l,1.)) + r*P(csp_normalized_normal(sp1_l,sp2_l,1.))).to_list() + end = (P(csp_at_t(sp1,sp2,0.)) + r*P(csp_normalized_normal(sp1,sp2,0.))).to_list() + arc = csp_from_arc(start, end, sp1[1], r, csp_normalized_slope(sp1_l,sp2_l,1.) ) + if arc == [] : + return prev,[],next + else: + # Clip prev by arc + if csp_subpaths_end_to_start_distance2(prev,arc)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(prev,arc) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(prev[i-1],prev[i],t1) + sp3_,sp4_,sp5_ = csp_split(arc[j-1],arc[j],t2) + prev = prev[:i-1] + [ sp1_, sp2_ ] + arc = [sp4_,sp5_] + arc[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + # Clip next by arc + if next == [] : + return prev,[],arc + if csp_subpaths_end_to_start_distance2(arc,next)>0.00001 : + intersection = csp_get_subapths_last_first_intersection(arc,next) + if intersection != [] : + i,t1,j,t2 = intersection + sp1_,sp2_,sp3_ = csp_split(arc[i-1],arc[i],t1) + sp3_,sp4_,sp5_ = csp_split(next[j-1],next[j],t2) + arc = arc[:i-1] + [ sp1_, sp2_ ] + next = [sp4_,sp5_] + next[j+1:] + #else : raise ValueError, "Offset curvature clipping error" + + return prev,arc,next + + + def offset_segment_recursion(sp1,sp2,r, depth, tolerance) : + sp1_r,sp2_r = create_offset_segment(sp1,sp2,r) + err = max( + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.50)) + P(csp_normalized_normal(sp1,sp2,.50))*r).to_list())[0], + csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.75)) + P(csp_normalized_normal(sp1,sp2,.75))*r).to_list())[0], + ) + + if err>tolerance**2 and depth>0: + #print_(csp_seg_to_point_distance(sp1_r,sp2_r, (P(csp_at_t(sp1,sp2,.25)) + P(csp_normalized_normal(sp1,sp2,.25))*r).to_list())[0], tolerance) + if depth > offset_subdivision_depth-2 : + t = csp_max_curvature(sp1,sp2) + t = max(.1,min(.9 ,t)) + else : + t = .5 + sp3,sp4,sp5 = csp_split(sp1,sp2,t) + r1 = offset_segment_recursion(sp3,sp4,r, depth-1, tolerance) + r2 = offset_segment_recursion(sp4,sp5,r, depth-1, tolerance) + return r1[:-1]+ [[r1[-1][0],r1[-1][1],r2[0][2]]] + r2[1:] + else : + #csp_draw([[sp1_r,sp2_r]]) + #draw_pointer(sp1[1]+sp1_r[1], "#057", "line") + #draw_pointer(sp2[1]+sp2_r[1], "#705", "line") + return [sp1_r,sp2_r] + + + ############################################################################ + # Some small definitions + ############################################################################ + csp_len = len(csp) + + ############################################################################ + # Prepare the path + ############################################################################ + # Remove all small segments (segment length < 0.001) + + for i in xrange(len(csp)) : + for j in xrange(len(csp[i])) : + sp = csp[i][j] + if (P(sp[1])-P(sp[0])).mag() < 0.001 : + csp[i][j][0] = sp[1] + if (P(sp[2])-P(sp[0])).mag() < 0.001 : + csp[i][j][2] = sp[1] + for i in xrange(len(csp)) : + for j in xrange(1,len(csp[i])) : + if cspseglength(csp[i][j-1], csp[i][j])<0.001 : + csp[i] = csp[i][:j] + csp[i][j+1:] + if cspseglength(csp[i][-1],csp[i][0])>0.001 : + csp[i][-1][2] = csp[i][-1][1] + csp[i]+= [ [csp[i][0][1],csp[i][0][1],csp[i][0][1]] ] + + # TODO Get rid of self intersections. + + original_csp = csp[:] + # Clip segments which has curvature>1/r. Because their offset will be selfintersecting and very nasty. + + print_("Offset prepared the path in %s"%(time.time()-time_)) + print_("Path length = %s"% sum([len(i)for i in csp] ) ) + time_ = time.time() + + ############################################################################ + # Offset + ############################################################################ + # Create offsets for all segments in the path. And join them together inside each subpath. + unclipped_offset = [[] for i in xrange(csp_len)] + offsets_original = [[] for i in xrange(csp_len)] + join_points = [[] for i in xrange(csp_len)] + intersection = [[] for i in xrange(csp_len)] + for i in xrange(csp_len) : + subpath = csp[i] + subpath_offset = [] + last_offset_len = 0 + for sp1,sp2 in zip(subpath, subpath[1:]) : + segment_offset = csp_offset_segment(sp1,sp2,r) + if subpath_offset == [] : + subpath_offset = segment_offset + + prev_l = len(subpath_offset) + else : + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:],segment_offset,sp1,sp2,sp1_l,sp2_l,r) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Magenta") + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc,next) + prev_l = len(next) + sp1_l, sp2_l = sp1[:], sp2[:] + + # Join last and first offsets togother to close the curve + + prev, arc, next = csp_join_offsets(subpath_offset[-prev_l:], subpath_offset[:2], subpath[0], subpath[1], sp1_l,sp2_l, r) + subpath_offset[:2] = next[:] + subpath_offset = csp_concat_subpaths(subpath_offset[:-prev_l+1],prev,arc) + #csp_draw([prev],"Blue") + #csp_draw([arc],"Red") + #csp_draw([next],"Red") + + # Collect subpath's offset and save it to unclipped offset list. + unclipped_offset[i] = subpath_offset[:] + + #for k,t in intersection[i]: + # draw_pointer(csp_at_t(subpath_offset[k-1], subpath_offset[k], t)) + + #inkex.etree.SubElement( options.doc_root, inkex.addNS('path','svg'), {"d": cubicsuperpath.formatPath(unclipped_offset), "style":"fill:none;stroke:#0f0;"} ) + print_("Offsetted path in %s"%(time.time()-time_)) + time_ = time.time() + + #for i in range(len(unclipped_offset)): + # csp_draw([unclipped_offset[i]], color = ["Green","Red","Blue"][i%3], width = .1) + #return [] + ############################################################################ + # Now to the clipping. + ############################################################################ + # First of all find all intersection's between all segments of all offseted subpaths, including self intersections. + + #TODO define offset tolerance here + global small_tolerance + small_tolerance = 0.01 + summ = 0 + summ1 = 0 + for subpath_i in xrange(csp_len) : + for subpath_j in xrange(subpath_i,csp_len) : + subpath = unclipped_offset[subpath_i] + subpath1 = unclipped_offset[subpath_j] + for i in xrange(1,len(subpath)) : + # If subpath_i==subpath_j we are looking for self intersections, so + # we'll need search intersections only for xrange(i,len(subpath1)) + for j in ( xrange(i,len(subpath1)) if subpath_i==subpath_j else xrange(len(subpath1))) : + if subpath_i==subpath_j and j==i : + # Find self intersections of a segment + sp1,sp2,sp3 = csp_split(subpath[i-1],subpath[i],.5) + intersections = csp_segments_intersection(sp1,sp2,sp2,sp3) + summ +=1 + for t in intersections : + summ1 += 1 + if not ( small(t[0]-1) and small(t[1]) ) and 0<=t[0]<=1 and 0<=t[1]<=1 : + intersection[subpath_i] += [ [i,t[0]/2],[j,t[1]/2+.5] ] + else : + intersections = csp_segments_intersection(subpath[i-1],subpath[i],subpath1[j-1],subpath1[j]) + summ +=1 + for t in intersections : + summ1 += 1 + #TODO tolerance dependence to cpsp_length(t) + if len(t) == 2 and 0<=t[0]<=1 and 0<=t[1]<=1 and not ( + subpath_i==subpath_j and ( + (j-i-1) % (len(subpath)-1) == 0 and small(t[0]-1) and small(t[1]) or + (i-j-1) % (len(subpath)-1) == 0 and small(t[1]-1) and small(t[0]) ) ) : + intersection[subpath_i] += [ [i,t[0]] ] + intersection[subpath_j] += [ [j,t[1]] ] + #draw_pointer(csp_at_t(subpath[i-1],subpath[i],t[0]),"#f00") + #print_(t) + #print_(i,j) + elif len(t)==5 and t[4]=="Overlap": + intersection[subpath_i] += [ [i,t[0]], [i,t[1]] ] + intersection[subpath_j] += [ [j,t[1]], [j,t[3]] ] + + print_("Intersections found in %s"%(time.time()-time_)) + print_("Examined %s segments"%(summ)) + print_("found %s intersections"%(summ1)) + time_ = time.time() + + ######################################################################## + # Split unclipped offset by intersection points into splitted_offset + ######################################################################## + splitted_offset = [] + for i in xrange(csp_len) : + subpath = unclipped_offset[i] + if len(intersection[i]) > 0 : + parts = csp_subpath_split_by_points(subpath, intersection[i]) + # Close parts list to close path (The first and the last parts are joined together) + if [1,0.] not in intersection[i] : + parts[0][0][0] = parts[-1][-1][0] + parts[0] = csp_concat_subpaths(parts[-1], parts[0]) + splitted_offset += parts[:-1] + else: + splitted_offset += parts[:] + else : + splitted_offset += [subpath[:]] + + #for i in range(len(splitted_offset)): + # csp_draw([splitted_offset[i]], color = ["Green","Red","Blue"][i%3]) + print_("Splitted in %s"%(time.time()-time_)) + time_ = time.time() + + + ######################################################################## + # Clipping + ######################################################################## + result = [] + for subpath_i in range(len(splitted_offset)): + clip = False + s1 = splitted_offset[subpath_i] + for subpath_j in range(len(splitted_offset)): + s2 = splitted_offset[subpath_j] + if (P(s1[0][1])-P(s2[-1][1])).l2()<0.0001 and ( (subpath_i+1) % len(splitted_offset) != subpath_j ): + if dot(csp_normalized_normal(s2[-2],s2[-1],1.),csp_normalized_slope(s1[0],s1[1],0.))*r<-0.0001 : + clip = True + break + if (P(s2[0][1])-P(s1[-1][1])).l2()<0.0001 and ( (subpath_j+1) % len(splitted_offset) != subpath_i ): + if dot(csp_normalized_normal(s2[0],s2[1],0.),csp_normalized_slope(s1[-2],s1[-1],1.))*r>0.0001 : + clip = True + break + + if not clip : + result += [s1[:]] + elif options.offset_draw_clippend_path : + csp_draw([s1],color="Red",width=.1) + draw_pointer( csp_at_t(s2[-2],s2[-1],1.)+ + (P(csp_at_t(s2[-2],s2[-1],1.))+ P(csp_normalized_normal(s2[-2],s2[-1],1.))*10).to_list(),"Green", "line" ) + draw_pointer( csp_at_t(s1[0],s1[1],0.)+ + (P(csp_at_t(s1[0],s1[1],0.))+ P(csp_normalized_slope(s1[0],s1[1],0.))*10).to_list(),"Red", "line" ) + + # Now join all together and check closure and orientation of result + joined_result = csp_join_subpaths(result) + # Check if each subpath from joined_result is closed + #csp_draw(joined_result,color="Green",width=1) + + + for s in joined_result[:] : + if csp_subpaths_end_to_start_distance2(s,s) > 0.001 : + # Remove open parts + if options.offset_draw_clippend_path: + csp_draw([s],color="Orange",width=1) + draw_pointer(s[0][1], comment= csp_subpaths_end_to_start_distance2(s,s)) + draw_pointer(s[-1][1], comment = csp_subpaths_end_to_start_distance2(s,s)) + joined_result.remove(s) + else : + # Remove small parts + minx,miny,maxx,maxy = csp_true_bounds([s]) + if (minx[0]-maxx[0])**2 + (miny[1]-maxy[1])**2 < 0.1 : + joined_result.remove(s) + print_("Clipped and joined path in %s"%(time.time()-time_)) + time_ = time.time() + + ######################################################################## + # Now to the Dummy cliping: remove parts from splitted offset if their + # centers are closer to the original path than offset radius. + ######################################################################## + + r1,r2 = ( (0.99*r)**2, (1.01*r)**2 ) if abs(r*.01)<1 else ((abs(r)-1)**2, (abs(r)+1)**2) + for s in joined_result[:]: + dist = csp_to_point_distance(original_csp, s[int(len(s)/2)][1], dist_bounds = [r1,r2], tolerance = .000001) + if not r1 < dist[0] < r2 : + joined_result.remove(s) + if options.offset_draw_clippend_path: + csp_draw([s], comment = math.sqrt(dist[0])) + draw_pointer(csp_at_t(csp[dist[1]][dist[2]-1],csp[dist[1]][dist[2]],dist[3])+s[int(len(s)/2)][1],"blue", "line", comment = [math.sqrt(dist[0]),i,j,sp] ) + + print_("-----------------------------") + print_("Total offset time %s"%(time.time()-time_start)) + print_() + return joined_result + + + + + +################################################################################ +### +### Biarc function +### +### Calculates biarc approximation of cubic super path segment +### splits segment if needed or approximates it with straight line +### +################################################################################ +def biarc(sp1, sp2, z1, z2, depth=0): + def biarc_split(sp1,sp2, z1, z2, depth): + if depth 0 : raise ValueError, (a,b,c,disq,beta1,beta2) + beta = max(beta1, beta2) + elif asmall and bsmall: + return biarc_split(sp1, sp2, z1, z2, depth) + alpha = beta * r + ab = alpha + beta + P1 = P0 + alpha * TS + P3 = P4 - beta * TE + P2 = (beta / ab) * P1 + (alpha / ab) * P3 + + + def calculate_arc_params(P0,P1,P2): + D = (P0+P2)/2 + if (D-P1).mag()==0: return None, None + R = D - ( (D-P0).mag()**2/(D-P1).mag() )*(P1-D).unit() + p0a, p1a, p2a = (P0-R).angle()%(2*math.pi), (P1-R).angle()%(2*math.pi), (P2-R).angle()%(2*math.pi) + alpha = (p2a - p0a) % (2*math.pi) + if (p0a1000000 or abs(R.y)>1000000 or (R-P0).mag<.1 : + return None, None + else : + return R, alpha + R1,a1 = calculate_arc_params(P0,P1,P2) + R2,a2 = calculate_arc_params(P2,P3,P4) + if R1==None or R2==None or (R1-P0).mag() 1 and depthls : + res += [seg] + else : + if seg[1] == "arc" : + r = math.sqrt((seg[0][0]-seg[2][0])**2+(seg[0][1]-seg[2][1])**2) + x,y = seg[0][0]-seg[2][0], seg[0][1]-seg[2][1] + a = seg[3]/ls*(l-lc) + x,y = x*math.cos(a) - y*math.sin(a), x*math.sin(a) + y*math.cos(a) + x,y = x+seg[2][0], y+seg[2][1] + res += [[ seg[0], "arc", seg[2], a, [x,y], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + if seg[1] == "line" : + res += [[ seg[0], "line", 0, 0, [(seg[4][0]-seg[0][0])/ls*(l-lc),(seg[4][1]-seg[0][1])/ls*(l-lc)], [seg[5][0],seg[5][1]/ls*(l-lc)] ]] + i += 1 + if i >= len(subcurve) and not subcurve_closed: + reverse = not reverse + i = i%len(subcurve) + return res + +################################################################################ +### Polygon class +################################################################################ +class Polygon: + def __init__(self, polygon=None): + self.polygon = [] if polygon==None else polygon[:] + + + def move(self, x, y) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + self.polygon[i][j][0] += x + self.polygon[i][j][1] += y + + + def bounds(self) : + minx,miny,maxx,maxy = 1e400, 1e400, -1e400, -1e400 + for poly in self.polygon : + for p in poly : + if minx > p[0] : minx = p[0] + if miny > p[1] : miny = p[1] + if maxx < p[0] : maxx = p[0] + if maxy < p[1] : maxy = p[1] + return minx*1,miny*1,maxx*1,maxy*1 + + + def width(self): + b = self.bounds() + return b[2]-b[0] + + + def rotate_(self,sin,cos) : + for i in range(len(self.polygon)) : + for j in range(len(self.polygon[i])) : + x,y = self.polygon[i][j][0], self.polygon[i][j][1] + self.polygon[i][j][0] = x*cos - y*sin + self.polygon[i][j][1] = x*sin + y*cos + + + def rotate(self, a): + cos, sin = math.cos(a), math.sin(a) + self.rotate_(sin,cos) + + + def drop_into_direction(self, direction, surface) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Direction is [dx,dy] + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + if direction[0]**2 + direction[1]**2 <1e-10 : return + direction = normalize(direction) + sin,cos = direction[0], -direction[1] + self.rotate_(-sin,cos) + surface.rotate_(-sin,cos) + self.drop_down(surface, zerro_plane = False) + self.rotate_(sin,cos) + surface.rotate_(sin,cos) + + + def centroid(self): + centroids = [] + sa = 0 + for poly in self.polygon: + cx,cy,a = 0,0,0 + for i in range(len(poly)): + [x1,y1],[x2,y2] = poly[i-1],poly[i] + cx += (x1+x2)*(x1*y2-x2*y1) + cy += (y1+y2)*(x1*y2-x2*y1) + a += (x1*y2-x2*y1) + a *= 3. + if abs(a)>0 : + cx /= a + cy /= a + sa += abs(a) + centroids += [ [cx,cy,a] ] + if sa == 0 : return [0.,0.] + cx,cy = 0.,0. + for c in centroids : + cx += c[0]*c[2] + cy += c[1]*c[2] + cx /= sa + cy /= sa + return [cx,cy] + + + def drop_down(self, surface, zerro_plane = True) : + # Polygon is a list of simple polygons + # Surface is a polygon + line y = 0 + # Down means min y (0,-1) + if len(self.polygon) == 0 or len(self.polygon[0])==0 : return + # Get surface top point + top = surface.bounds()[3] + if zerro_plane : top = max(0, top) + # Get polygon bottom point + bottom = self.bounds()[1] + self.move(0, top - bottom + 10) + # Now get shortest distance from surface to polygon in positive x=0 direction + # Such distance = min(distance(vertex, edge)...) where edge from surface and + # vertex from polygon and vice versa... + dist = 1e300 + for poly in surface.polygon : + for i in range(len(poly)) : + for poly1 in self.polygon : + for i1 in range(len(poly1)) : + st,end = poly[i-1], poly[i] + vertex = poly1[i1] + if st[0]<=vertex[0]<= end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(vertex[1]-st[1],vertex[1]-end[1]) + else : d = vertex[1] - st[1] - (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + # and vice versa just change the sign because vertex now under the edge + st,end = poly1[i1-1], poly1[i1] + vertex = poly[i] + if st[0]<=vertex[0]<=end[0] or end[0]<=vertex[0]<=st[0] : + if st[0]==end[0] : d = min(- vertex[1]+st[1],-vertex[1]+end[1]) + else : d = - vertex[1] + st[1] + (end[1]-st[1])*(vertex[0]-st[0])/(end[0]-st[0]) + if dist > d : dist = d + + if zerro_plane and dist > 10 + top : dist = 10 + top + #print_(dist, top, bottom) + #self.draw() + self.move(0, -dist) + + + def draw(self,color="#075",width=.1) : + for poly in self.polygon : + csp_draw( [csp_subpath_line_to([],poly+[poly[0]])], color=color,width=width ) + + + def add(self, add) : + if type(add) == type([]) : + self.polygon += add[:] + else : + self.polygon += add.polygon[:] + + + def point_inside(self,p) : + inside = False + for poly in self.polygon : + for i in range(len(poly)): + st,end = poly[i-1], poly[i] + if p==st or p==end : return True # point is a vertex = point is on the edge + if st[0]>end[0] : st, end = end, st # This will be needed to check that edge if open only at rigth end + c = (p[1]-st[1])*(end[0]-st[0])-(end[1]-st[1])*(p[0]-st[0]) + #print_(c) + if st[0]<=p[0]0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + # Check self intersections with other polys + for i2 in range(len(self.polygon)): + if i1==i2 : continue + poly2 = self.polygon[i2] + for j2 in range(len(poly2)): + s1, e1 = poly2[j2-1],poly2[j2] + int_ = line_line_intersection_points(s,e,s1,e1) + for p in int_ : + if point_to_point_d2(p,s)>0.000001 and point_to_point_d2(p,e)>0.000001 : + poly_ += [p] + hull += [poly_] + # Create the dictionary containing all edges in both directions + edges = {} + for poly in self.polygon : + for i in range(len(poly)): + s,e = tuple(poly[i-1]), tuple(poly[i]) + if (point_to_point_d2(e,s)<0.000001) : continue + break_s, break_e = False, False + for p in edges : + if point_to_point_d2(p,s)<0.000001 : + break_s = True + s = p + if point_to_point_d2(p,e)<0.000001 : + break_e = True + e = p + if break_s and break_e : break + l = point_to_point_d(s,e) + if not break_s and not break_e : + edges[s] = [ [s,e,l] ] + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + #draw_pointer(s+e,"red","line") + else : + if e in edges : + for edge in edges[e] : + if point_to_point_d2(edge[1],s)<0.000001 : + break + if point_to_point_d2(edge[1],s)>0.000001 : + edges[e] += [ [e,s,l] ] + #draw_pointer(s+e,"red","line") + + else : + edges[e] = [ [e,s,l] ] + #draw_pointer(s+e,"green","line") + if s in edges : + for edge in edges[s] : + if point_to_point_d2(edge[1],e)<0.000001 : + break + if point_to_point_d2(edge[1],e)>0.000001 : + edges[s] += [ [s,e, l] ] + #draw_pointer(s+e,"red","line") + else : + edges[s] = [ [s,e,l] ] + #draw_pointer(s+e,"green","line") + + + def angle_quadrant(sin,cos): + # quadrants are (0,pi/2], (pi/2,pi], (pi,3*pi/2], (3*pi/2, 2*pi], i.e. 0 is in the 4-th quadrant + if sin>0 and cos>=0 : return 1 + if sin>=0 and cos<0 : return 2 + if sin<0 and cos<=0 : return 3 + if sin<=0 and cos>0 : return 4 + + + def angle_is_less(sin,cos,sin1,cos1): + # 0 = 2*pi is the largest angle + if [sin1, cos1] == [0,1] : return True + if [sin, cos] == [0,1] : return False + if angle_quadrant(sin,cos)>angle_quadrant(sin1,cos1) : + return False + if angle_quadrant(sin,cos)=0 and cos>0 : return sin0 and cos<=0 : return sin>sin1 + if sin<=0 and cos<0 : return sin>sin1 + if sin<0 and cos>=0 : return sin len_edges : raise ValueError, "Hull error" + loops1 += 1 + next = get_closes_edge_by_angle(edges[last[1]],last) + #draw_pointer(next[0]+next[1],"Green","line", comment=i, width= 1) + #print_(next[0],"-",next[1]) + + last = next + poly += [ list(last[0]) ] + self.polygon += [ poly ] + # Remove all edges that are intersects new poly (any vertex inside new poly) + poly_ = Polygon([poly]) + for p in edges.keys()[:] : + if poly_.point_inside(list(p)) : del edges[p] + self.draw(color="Green", width=1) + + +class Arangement_Genetic: + # gene = [fittness, order, rotation, xposition] + # spieces = [gene]*shapes count + # population = [spieces] + def __init__(self, polygons, material_width): + self.population = [] + self.genes_count = len(polygons) + self.polygons = polygons + self.width = material_width + self.mutation_factor = 0.1 + self.order_mutate_factor = 1. + self.move_mutate_factor = 1. + + + def add_random_species(self,count): + for i in range(count): + specimen = [] + order = range(self.genes_count) + random.shuffle(order) + for j in order: + specimen += [ [j, random.random(), random.random()] ] + self.population += [ [None,specimen] ] + + + def species_distance2(self,sp1,sp2) : + # retun distance, each component is normalized + s = 0 + for j in range(self.genes_count) : + s += ((sp1[j][0]-sp2[j][0])/self.genes_count)**2 + (( sp1[j][1]-sp2[j][1]))**2 + ((sp1[j][2]-sp2[j][2]))**2 + return s + + + def similarity(self,sp1,top) : + # Define similarity as a simple distance between two points in len(gene)*len(spiece) -th dimentions + # for sp2 in top_spieces sum(|sp1-sp2|)/top_count + sim = 0 + for sp2 in top : + sim += math.sqrt(species_distance2(sp1,sp2[1])) + return sim/len(top) + + + def leave_top_species(self,count): + self.population.sort() + res = [ copy.deepcopy(self.population[0]) ] + del self.population[0] + for i in range(count-1) : + t = [] + for j in range(20) : + i1 = random.randint(0,len(self.population)-1) + t += [ [self.population[i1][0],i1] ] + t.sort() + res += [ copy.deepcopy(self.population[t[0][1]]) ] + del self.population[t[0][1]] + self.population = res + #del self.population[0] + #for c in range(count-1) : + # rank = [] + # for i in range(len(self.population)) : + # sim = self.similarity(self.population[i][1],res) + # rank += [ [self.population[i][0] / sim if sim>0 else 1e100,i] ] + # rank.sort() + # res += [ copy.deepcopy(self.population[rank[0][1]]) ] + # print_(rank[0],self.population[rank[0][1]][0]) + # print_(res[-1]) + # del self.population[rank[0][1]] + + self.population = res + + + def populate_species(self,count, parent_count): + self.population.sort() + self.inc = 0 + for c in range(count): + parent1 = random.randint(0,parent_count-1) + parent2 = random.randint(0,parent_count-1) + if parent1==parent2 : parent2 = (parent2+1) % parent_count + parent1, parent2 = self.population[parent1][1], self.population[parent2][1] + i1,i2 = 0, 0 + genes_order = [] + specimen = [ [0,0.,0.] for i in range(self.genes_count) ] + + self.incest_mutation_multiplyer = 1. + self.incest_mutation_count_multiplyer = 1. + + if self.species_distance2(parent1, parent2) <= .01/self.genes_count : + # OMG it's a incest :O!!! + # Damn you bastards! + self.inc +=1 + self.incest_mutation_multiplyer = 2. + self.incest_mutation_count_multiplyer = 2. + else : + if random.random()<.01 : print_(self.species_distance2(parent1, parent2)) + start_gene = random.randint(0,self.genes_count) + end_gene = (max(1,random.randint(0,self.genes_count),int(self.genes_count/4))+start_gene) % self.genes_count + if end_gene0: + end = p[keys[-1]][-1][1] + dist = None + for i in range(len(k)): + start = p[k[i]][0][1] + dist = max( ( -( ( end[0]-start[0])**2+(end[1]-start[1])**2 ) ,i) , dist ) + keys += [k[dist[1]]] + del k[dist[1]] + for k in keys: + subpath = p[k] + c += [ [ [subpath[0][1][0],subpath[0][1][1]] , 'move', 0, 0] ] + for i in range(1,len(subpath)): + sp1 = [ [subpath[i-1][j][0], subpath[i-1][j][1]] for j in range(3)] + sp2 = [ [subpath[i ][j][0], subpath[i ][j][1]] for j in range(3)] + c += biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# l1 = biarc(sp1,sp2,0,0) if w==None else biarc(sp1,sp2,-f(w[k][i-1]),-f(w[k][i])) +# print_((-f(w[k][i-1]),-f(w[k][i]), [i1[5] for i1 in l1]) ) + c += [ [ [subpath[-1][1][0],subpath[-1][1][1]] ,'end',0,0] ] + print_("Curve: " + str(c)) + return c + + + def draw_curve(self, curve, layer, group=None, style=styles["biarc_style"]): + + self.get_defs() + # Add marker to defs if it doesnot exists + if "DrawCurveMarker" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker","orient":"auto","refX":"-8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m -6.55552,-2.41063 0,0 L -13.11104,0 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + if "DrawCurveMarker_r" not in self.defs : + defs = inkex.etree.SubElement( self.document.getroot(), inkex.addNS("defs","svg")) + marker = inkex.etree.SubElement( defs, inkex.addNS("marker","svg"), {"id":"DrawCurveMarker_r","orient":"auto","refX":"8","refY":"-2.41063","style":"overflow:visible"}) + inkex.etree.SubElement( marker, inkex.addNS("path","svg"), + { "d":"m 6.55552,-2.41063 0,0 L 13.11104,0 c -1.0473,-1.42323 -1.04126,-3.37047 0,-4.82126", + "style": "fill:#000044; fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" } + ) + for i in [0,1]: + style['biarc%s_r'%i] = simplestyle.parseStyle(style['biarc%s'%i]) + style['biarc%s_r'%i]["marker-start"] = "url(#DrawCurveMarker_r)" + del(style['biarc%s_r'%i]["marker-end"]) + style['biarc%s_r'%i] = simplestyle.formatStyle(style['biarc%s_r'%i]) + + if group==None: + group = inkex.etree.SubElement( self.layers[min(1,len(self.layers)-1)], inkex.addNS('g','svg'), {"gcodetools": "Preview group"} ) + s, arcn = '', 0 + + + a,b,c = [0.,0.], [1.,0.], [0.,1.] + k = (b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]) + a,b,c = self.transform(a, layer, True), self.transform(b, layer, True), self.transform(c, layer, True) + if ((b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]))*k > 0 : reverse_angle = 1 + else : reverse_angle = -1 + for sk in curve: + si = sk[:] + si[0], si[2] = self.transform(si[0], layer, True), (self.transform(si[2], layer, True) if type(si[2])==type([]) and len(si[2])==2 else si[2]) + + if s!='': + if s[1] == 'line': + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': style['line'], + 'd':'M %s,%s L %s,%s' % (s[0][0], s[0][1], si[0][0], si[0][1]), + "gcodetools": "Preview", + } + ) + elif s[1] == 'arc': + arcn += 1 + sp = s[0] + c = s[2] + s[3] = s[3]*reverse_angle + + a = ( (P(si[0])-P(c)).angle() - (P(s[0])-P(c)).angle() )%math.pi2 #s[3] + if s[3]*a<0: + if a>0: a = a-math.pi2 + else: a = math.pi2+a + r = math.sqrt( (sp[0]-c[0])**2 + (sp[1]-c[1])**2 ) + a_st = ( math.atan2(sp[0]-c[0],- (sp[1]-c[1])) - math.pi/2 ) % (math.pi*2) + st = style['biarc%s' % (arcn%2)][:] + if a>0: + a_end = a_st+a + st = style['biarc%s'%(arcn%2)] + else: + a_end = a_st*1 + a_st = a_st+a + st = style['biarc%s_r'%(arcn%2)] + inkex.etree.SubElement( group, inkex.addNS('path','svg'), + { + 'style': st, + inkex.addNS('cx','sodipodi'): str(c[0]), + inkex.addNS('cy','sodipodi'): str(c[1]), + inkex.addNS('rx','sodipodi'): str(r), + inkex.addNS('ry','sodipodi'): str(r), + inkex.addNS('start','sodipodi'): str(a_st), + inkex.addNS('end','sodipodi'): str(a_end), + inkex.addNS('open','sodipodi'): 'true', + inkex.addNS('type','sodipodi'): 'arc', + "gcodetools": "Preview", + }) + s = si + + + def check_dir(self): + if self.options.directory[-1] not in ["/","\\"]: + if "\\" in self.options.directory : + self.options.directory += "\\" + else : + self.options.directory += "/" + print_("Checking direcrory: '%s'"%self.options.directory) + if (os.path.isdir(self.options.directory)): + if (os.path.isfile(self.options.directory+'header')): + f = open(self.options.directory+'header', 'r') + self.header = f.read() + f.close() + else: + self.header = defaults['header'] + if (os.path.isfile(self.options.directory+'footer')): + f = open(self.options.directory+'footer','r') + self.footer = f.read() + f.close() + else: + self.footer = defaults['footer'] + + if self.options.unit == "G21 (All units in mm)" : + self.header += "G21\n" + elif self.options.unit == "G20 (All units in inches)" : + self.header += "G20\n" + else: + self.error(_("Directory does not exist! Please specify existing directory at options tab!"),"error") + return False + + if self.options.add_numeric_suffix_to_filename : + dir_list = os.listdir(self.options.directory) + if "." in self.options.file : + r = re.match(r"^(.*)(\..*)$",self.options.file) + ext = r.group(2) + name = r.group(1) + else: + ext = "" + name = self.options.file + max_n = 0 + for s in dir_list : + r = re.match(r"^%s_0*(\d+)%s$"%(re.escape(name),re.escape(ext) ), s) + if r : + max_n = max(max_n,int(r.group(1))) + filename = name + "_" + ( "0"*(4-len(str(max_n+1))) + str(max_n+1) ) + ext + self.options.file = filename + + print_("Testing writing rights on '%s'"%(self.options.directory+self.options.file)) + try: + f = open(self.options.directory+self.options.file, "w") + f.close() + except: + self.error(_("Can not write to specified file!\n%s"%(self.options.directory+self.options.file)),"error") + return False + return True + + + +################################################################################ +### +### Generate Gcode +### Generates Gcode on given curve. +### +### Crve defenitnion [start point, type = {'arc','line','move','end'}, arc center, arc angle, end point, [zstart, zend]] +### +################################################################################ + def generate_gcode(self, curve, layer, depth): + tool = self.tools + print_("Tool in g-code generator: " + str(tool)) + def c(c): + c = [c[i] if i.1: + r1, r2 = (P(s[0])-P(s[2])), (P(si[0])-P(s[2])) + if abs(r1.mag()-r2.mag()) < 0.001 : + g += ("G2" if s[3]<0 else "G3") + c(si[0]+[ None, (s[2][0]-s[0][0]),(s[2][1]-s[0][1]) ]) + "\n" + else: + r = (r1.mag()+r2.mag())/2 + g += ("G2" if s[3]<0 else "G3") + c(si[0]) + " R%f" % (r) + "\n" + lg = 'G02' + else: + g += "G1" +c(si[0]) + feed + "\n" + lg = 'G01' + if si[1] == 'end': + g += tool['gcode after path'] + "\n" + return g + + + def get_transforms(self,g): + root = self.document.getroot() + trans = [] + while (g!=root): + if 'transform' in g.keys(): + t = g.get('transform') + t = simpletransform.parseTransform(t) + trans = simpletransform.composeTransform(t,trans) if trans != [] else t + print_(trans) + g=g.getparent() + return trans + + + def apply_transforms(self,g,csp): + trans = self.get_transforms(g) + if trans != []: + simpletransform.applyTransformToPath(trans, csp) + return csp + + + def transform(self, source_point, layer, reverse=False): + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer not in self.transform_matrix: + for i in range(self.layers.index(layer),-1,-1): + if self.layers[i] in self.orientation_points : + break + + print_(str(self.layers)) + print_(str("I: " + str(i))) + print_("Transform: " + str(self.layers[i])) + if self.layers[i] not in self.orientation_points : + self.error(_("Orientation points for '%s' layer have not been found! Please add orientation points using Orientation tab!") % layer.get(inkex.addNS('label','inkscape')),"no_orientation_points") + elif self.layers[i] in self.transform_matrix : + self.transform_matrix[layer] = self.transform_matrix[self.layers[i]] + else : + orientation_layer = self.layers[i] + if len(self.orientation_points[orientation_layer])>1 : + self.error(_("There are more than one orientation point groups in '%s' layer") % orientation_layer.get(inkex.addNS('label','inkscape')),"more_than_one_orientation_point_groups") + points = self.orientation_points[orientation_layer][0] + if len(points)==2: + points += [ [ [(points[1][0][1]-points[0][0][1])+points[0][0][0], -(points[1][0][0]-points[0][0][0])+points[0][0][1]], [-(points[1][1][1]-points[0][1][1])+points[0][1][0], points[1][1][0]-points[0][1][0]+points[0][1][1]] ] ] + if len(points)==3: + print_("Layer '%s' Orientation points: " % orientation_layer.get(inkex.addNS('label','inkscape'))) + for point in points: + print_(point) + # Zcoordinates definition taken from Orientatnion point 1 and 2 + self.Zcoordinates[layer] = [max(points[0][1][2],points[1][1][2]), min(points[0][1][2],points[1][1][2])] + matrix = numpy.array([ + [points[0][0][0], points[0][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[0][0][0], points[0][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[0][0][0], points[0][0][1], 1], + [points[1][0][0], points[1][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[1][0][0], points[1][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[1][0][0], points[1][0][1], 1], + [points[2][0][0], points[2][0][1], 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, points[2][0][0], points[2][0][1], 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, points[2][0][0], points[2][0][1], 1] + ]) + + if numpy.linalg.det(matrix)!=0 : + m = numpy.linalg.solve(matrix, + numpy.array( + [[points[0][1][0]], [points[0][1][1]], [1], [points[1][1][0]], [points[1][1][1]], [1], [points[2][1][0]], [points[2][1][1]], [1]] + ) + ).tolist() + self.transform_matrix[layer] = [[m[j*3+i][0] for i in range(3)] for j in range(3)] + + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + else : + self.error(_("Orientation points are wrong! (if there are two orientation points they sould not be the same. If there are three orientation points they should not be in a straight line.)"),"wrong_orientation_points") + + self.transform_matrix_reverse[layer] = numpy.linalg.inv(self.transform_matrix[layer]).tolist() + print_("\n Layer '%s' transformation matrixes:" % layer.get(inkex.addNS('label','inkscape')) ) + print_(self.transform_matrix) + print_(self.transform_matrix_reverse) + + ###self.Zauto_scale[layer] = math.sqrt( (self.transform_matrix[layer][0][0]**2 + self.transform_matrix[layer][1][1]**2)/2 ) + ### Zautoscale is absolete + self.Zauto_scale[layer] = 1 + print_("Z automatic scale = %s (computed according orientation points)" % self.Zauto_scale[layer]) + + x,y = source_point[0], source_point[1] + if not reverse : + t = self.transform_matrix[layer] + else : + t = self.transform_matrix_reverse[layer] + return [t[0][0]*x+t[0][1]*y+t[0][2], t[1][0]*x+t[1][1]*y+t[1][2]] + + + def transform_csp(self, csp_, layer, reverse = False): + csp = [ [ [csp_[i][j][0][:],csp_[i][j][1][:],csp_[i][j][2][:]] for j in range(len(csp_[i])) ] for i in range(len(csp_)) ] + for i in xrange(len(csp)): + for j in xrange(len(csp[i])): + for k in xrange(len(csp[i][j])): + csp[i][j][k] = self.transform(csp[i][j][k],layer, reverse) + return csp + + +################################################################################ +### Errors handling function, notes are just printed into Logfile, +### warnings are printed into log file and warning message is displayed but +### extension continues working, errors causes log and execution is halted +### Notes, warnings adn errors could be assigned to space or comma or dot +### sepparated strings (case is ignoreg). +################################################################################ + def error(self, s, type_= "Warning"): + notes = "Note " + warnings = """ + Warning tools_warning + bad_orientation_points_in_some_layers + more_than_one_orientation_point_groups + more_than_one_tool + orientation_have_not_been_defined + tool_have_not_been_defined + selection_does_not_contain_paths + selection_does_not_contain_paths_will_take_all + selection_is_empty_will_comupe_drawing + selection_contains_objects_that_are_not_paths + """ + errors = """ + Error + wrong_orientation_points + area_tools_diameter_error + no_tool_error + active_layer_already_has_tool + active_layer_already_has_orientation_points + """ + if type_.lower() in re.split("[\s\n,\.]+", errors.lower()) : + print_(s) + inkex.errormsg(s+"\n") + sys.exit() + elif type_.lower() in re.split("[\s\n,\.]+", warnings.lower()) : + print_(s) + if not self.options.suppress_all_messages : + inkex.errormsg(s+"\n") + elif type_.lower() in re.split("[\s\n,\.]+", notes.lower()) : + print_(s) + else : + print_(s) + inkex.errormsg(s) + sys.exit() + + +################################################################################ +### Get defs from svg +################################################################################ + def get_defs(self) : + self.defs = {} + def recursive(g) : + for i in g: + if i.tag == inkex.addNS("defs","svg") : + for j in i: + self.defs[j.get("id")] = i + if i.tag ==inkex.addNS("g",'svg') : + recursive(i) + recursive(self.document.getroot()) + + +################################################################################ +### +### Get Gcodetools info from the svg +### +################################################################################ + def get_info(self): + self.selected_paths = {} + self.paths = {} + self.orientation_points = {} + self.layers = [self.document.getroot()] + self.Zcoordinates = {} + self.transform_matrix = {} + self.transform_matrix_reverse = {} + self.Zauto_scale = {} + + def recursive_search(g, layer, selected=False): + items = g.getchildren() + items.reverse() + for i in items: + if selected: + self.selected[i.get("id")] = i + if i.tag == inkex.addNS("g",'svg') and i.get(inkex.addNS('groupmode','inkscape')) == 'layer': + self.layers += [i] + recursive_search(i,i) + elif i.get('gcodetools') == "Gcodetools orientation group" : + points = self.get_orientation_points(i) + if points != None : + self.orientation_points[layer] = self.orientation_points[layer]+[points[:]] if layer in self.orientation_points else [points[:]] + print_("Found orientation points in '%s' layer: %s" % (layer.get(inkex.addNS('label','inkscape')), points)) + else : + self.error(_("Warning! Found bad orientation points in '%s' layer. Resulting Gcode could be corrupt!") % layer.get(inkex.addNS('label','inkscape')), "bad_orientation_points_in_some_layers") + elif i.tag == inkex.addNS('path','svg'): + if "gcodetools" not in i.keys() : + self.paths[layer] = self.paths[layer] + [i] if layer in self.paths else [i] + if i.get("id") in self.selected : + self.selected_paths[layer] = self.selected_paths[layer] + [i] if layer in self.selected_paths else [i] + elif i.tag == inkex.addNS("g",'svg'): + recursive_search(i,layer, (i.get("id") in self.selected) ) + elif i.get("id") in self.selected : + self.error(_("This extension works with Paths and Dynamic Offsets and groups of them only! All other objects will be ignored!\nSolution 1: press Path->Object to path or Shift+Ctrl+C.\nSolution 2: Path->Dynamic offset or Ctrl+J.\nSolution 3: export all contours to PostScript level 2 (File->Save As->.ps) and File->Import this file."),"selection_contains_objects_that_are_not_paths") + + + recursive_search(self.document.getroot(),self.document.getroot()) + + + def get_orientation_points(self,g): + items = g.getchildren() + items.reverse() + p2, p3 = [], [] + p = None + for i in items: + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (2 points)": + p2 += [i] + if i.tag == inkex.addNS("g",'svg') and i.get("gcodetools") == "Gcodetools orientation point (3 points)": + p3 += [i] + if len(p2)==2 : p=p2 + elif len(p3)==3 : p=p3 + if p==None : return None + points = [] + for i in p : + point = [[],[]] + for node in i : + if node.get('gcodetools') == "Gcodetools orientation point arrow": + point[0] = self.apply_transforms(node,cubicsuperpath.parsePath(node.get("d")))[0][0][1] + if node.get('gcodetools') == "Gcodetools orientation point text": + r = re.match(r'(?i)\s*\(\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*;\s*(-?\s*\d*(?:,|\.)*\d*)\s*\)\s*',node.text) + point[1] = [float(r.group(1)),float(r.group(2)),float(r.group(3))] + if point[0]!=[] and point[1]!=[]: points += [point] + if len(points)==len(p2)==2 or len(points)==len(p3)==3 : return points + else : return None + +################################################################################ +### +### dxfpoints +### +################################################################################ + def dxfpoints(self): + if self.selected_paths == {}: + self.error(_("Noting is selected. Please select something to convert to drill point (dxfpoint) or clear point sign."),"warning") + for layer in self.layers : + if layer in self.selected_paths : + for path in self.selected_paths[layer]: + if self.options.dxfpoints_action == 'replace': + path.set("dxfpoint","1") + r = re.match("^\s*.\s*(\S+)",path.get("d")) + if r!=None: + print_(("got path=",r.group(1))) + path.set("d","m %s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z" % r.group(1)) + path.set("style",styles["dxf_points"]) + + if self.options.dxfpoints_action == 'save': + path.set("dxfpoint","1") + + if self.options.dxfpoints_action == 'clear' and path.get("dxfpoint") == "1": + path.set("dxfpoint","0") + +################################################################################ +### +### Laser +### +################################################################################ + def laser(self) : + + def get_boundaries(points): + minx,miny,maxx,maxy=None,None,None,None + out=[[],[],[],[]] + for p in points: + if minx==p[0]: + out[0]+=[p] + if minx==None or p[0]maxx: + maxx=p[0] + out[2]=[p] + + if maxy==p[1]: + out[3]+=[p] + if maxy==None or p[1]>maxy: + maxy=p[1] + out[3]=[p] + return out + + + def remove_duplicates(points): + i=0 + out=[] + for p in points: + for j in xrange(i,len(points)): + if p==points[j]: points[j]=[None,None] + if p!=[None,None]: out+=[p] + i+=1 + return(out) + + + def get_way_len(points): + l=0 + for i in xrange(1,len(points)): + l+=math.sqrt((points[i][0]-points[i-1][0])**2 + (points[i][1]-points[i-1][1])**2) + return l + + + def sort_dxfpoints(points): + points=remove_duplicates(points) + + ways=[ + # l=0, d=1, r=2, u=3 + [3,0], # ul + [3,2], # ur + [1,0], # dl + [1,2], # dr + [0,3], # lu + [0,1], # ld + [2,3], # ru + [2,1], # rd + ] + + minimal_way=[] + minimal_len=None + minimal_way_type=None + for w in ways: + tpoints=points[:] + cw=[] + for j in xrange(0,len(points)): + p=get_boundaries(get_boundaries(tpoints)[w[0]])[w[1]] + tpoints.remove(p[0]) + cw+=p + curlen = get_way_len(cw) + if minimal_len==None or curlen < minimal_len: + minimal_len=curlen + minimal_way=cw + minimal_way_type=w + + return minimal_way + + if self.selected_paths == {} : + paths=self.paths + self.error(_("No paths are selected! Trying to work on all available paths."),"warning") + else : + paths = self.selected_paths + + self.check_dir() + gcode = "" + + biarc_group = inkex.etree.SubElement( self.selected_paths.keys()[0] if len(self.selected_paths.keys())>0 else self.layers[0], inkex.addNS('g','svg') ) + print_(("self.layers=",self.layers)) + print_(("paths=",paths)) + for layer in self.layers : + if layer in paths : + print_(("layer",layer)) + p = [] + dxfpoints = [] + for path in paths[layer] : + print_(str(layer)) + if "d" not in path.keys() : + self.error(_("Warning: One or more paths dont have 'd' parameter, try to Ungroup (Ctrl+Shift+G) and Object to Path (Ctrl+Shift+C)!"),"selection_contains_objects_that_are_not_paths") + continue + csp = cubicsuperpath.parsePath(path.get("d")) + csp = self.apply_transforms(path, csp) + if path.get("dxfpoint") == "1": + tmp_curve=self.transform_csp(csp, layer) + x=tmp_curve[0][0][0][0] + y=tmp_curve[0][0][0][1] + print_("got dxfpoint (scaled) at (%f,%f)" % (x,y)) + dxfpoints += [[x,y]] + else: + p += csp + dxfpoints=sort_dxfpoints(dxfpoints) + curve = self.parse_curve(p, layer) + self.draw_curve(curve, layer, biarc_group) + gcode += self.generate_gcode(curve, layer, 0) + + self.export_gcode(gcode) + +################################################################################ +### +### Orientation +### +################################################################################ + def orientation(self, layer=None) : + print_("entering orientations") + if layer == None : + layer = self.current_layer if self.current_layer is not None else self.document.getroot() + if layer in self.orientation_points: + self.error(_("Active layer already has orientation points! Remove them or select another layer!"),"active_layer_already_has_orientation_points") + + orientation_group = inkex.etree.SubElement(layer, inkex.addNS('g','svg'), {"gcodetools":"Gcodetools orientation group"}) + + # translate == ['0', '-917.7043'] + if layer.get("transform") != None : + translate = layer.get("transform").replace("translate(", "").replace(")", "").split(",") + else : + translate = [0,0] + + # doc height in pixels (38 mm == 134.64566px) + doc_height = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + + if self.document.getroot().get('height') == "100%" : + doc_height = 1052.3622047 + print_("Overruding height from 100 percents to %s" % doc_height) + + print_("Document height: " + str(doc_height)); + + if self.options.unit == "G21 (All units in mm)" : + points = [[0.,0.,0.],[100.,0.,0.],[0.,100.,0.]] + #orientation_scale = 3.5433070660 + #print_("orientation_scale < 0 ===> switching to mm units=%0.10f"%orientation_scale ) + elif self.options.unit == "G20 (All units in inches)" : + points = [[0.,0.,0.],[5.,0.,0.],[0.,5.,0.]] + #orientation_scale = 90 + #print_("orientation_scale < 0 ===> switching to inches units=%0.10f"%orientation_scale ) + + points = points[:2] + + #print_(("using orientation scale",orientation_scale,"i=",points)) + for i in points : + # X == Correct! + # si == x,y coordinate in px + # si have correct coordinates + # if layer have any tranform it will be in translate so lets add that + #si = [i[0]*orientation_scale, (i[1]*orientation_scale)+float(translate[1])] + g = inkex.etree.SubElement(orientation_group, inkex.addNS('g','svg'), {'gcodetools': "Gcodetools orientation point (2 points)"}) + inkex.etree.SubElement( g, inkex.addNS('path','svg'), + { + 'style': "stroke:none;fill:#000000;", + #'d':'m %s,%s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z z' % (si[0], -si[1]+doc_height), + 'd':'m %s,%s 2.9375,-6.343750000001 0.8125,1.90625 6.843748640396,-6.84374864039 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.812500000001 z z' % (i[0], -i[1]+doc_height), + 'gcodetools': "Gcodetools orientation point arrow" + }) + t = inkex.etree.SubElement( g, inkex.addNS('text','svg'), + { + 'style': "font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;", + inkex.addNS("space","xml"):"preserve", + #'x': str(si[0]+10), + #'y': str(-si[1]-10+doc_height), + 'x': str(i[0]+10), + 'y': str(-i[1]-10+doc_height), + 'gcodetools': "Gcodetools orientation point text" + }) + t.text = "(%s; %s; %s)" % (i[0],i[1],i[2]) + + +################################################################################ +### +### Effect +### +### Main function of Gcodetools class +### +################################################################################ + def effect(self) : + global options + options = self.options + options.self = self + options.doc_root = self.document.getroot() + # define print_ function + global print_ + if self.options.log_create_log : + try : + if os.path.isfile(self.options.log_filename) : os.remove(self.options.log_filename) + f = open(self.options.log_filename,"a") + f.write("Gcodetools log file.\nStarted at %s.\n%s\n" % (time.strftime("%d.%m.%Y %H:%M:%S"),options.log_filename)) + f.write("%s tab is active.\n" % self.options.active_tab) + f.close() + except : + print_ = lambda *x : None + else : print_ = lambda *x : None + self.get_info() + if self.orientation_points == {} : + self.error(_("Orientation points have not been defined! A default set of orientation points has been automatically added."),"warning") + self.orientation( self.layers[min(0,len(self.layers)-1)] ) + self.get_info() + + self.tools = { + "name": "Laser Engraver", + "id": "Laser Engraver", + "penetration feed": self.options.laser_speed, + "feed": self.options.laser_speed, + # RP added delay before path + "gcode before path": (""), + "gcode after path": ("G0 F" + self.options.travel_speed), + } + + self.get_info() + self.laser() + +e = laser_gcode() +e.affect() diff --git a/fablabchemnitz_robotbox.inx b/fablabchemnitz_robotbox.inx new file mode 100644 index 0000000..4ac89db --- /dev/null +++ b/fablabchemnitz_robotbox.inx @@ -0,0 +1,40 @@ + + + <_name>Robot Boxes + fablabchemnitz.de.robotbox + fablabchemnitz_robotbox.py + inkex.py + 62.0 + 38.0 + 23.0 + 1.0 + 1.0 + 5.0 + 5.0 + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_robotbox.py b/fablabchemnitz_robotbox.py new file mode 100644 index 0000000..ef0e09e --- /dev/null +++ b/fablabchemnitz_robotbox.py @@ -0,0 +1,425 @@ +#! /usr/bin/env python +''' +Draw box with given width, height and depth. + +Use "Extensions / Modify Path / Convert to dashes" to convert dashed bend lines to CNC-friendly style. + +Copyright (C) 2015 Anton Moiseev (1i7.livejournal.com) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import simplestyle, sys +from simplepath import formatPath + +class RobotBox(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-x", "--width", + action="store", type="float", + dest="width", default=62.0, + help="The Box Width - in the X dimension") + self.OptionParser.add_option("-y", "--height", + action="store", type="float", + dest="height", default=38.0, + help="The Box Height - in the Y dimension") + self.OptionParser.add_option("-z", "--depth", + action="store", type="float", + dest="depth", default=23.0, + help="The Box Depth - in the Z dimension") + self.OptionParser.add_option("-p", "--paper-thickness", + action="store", type="float", + dest="thickness", default=1.0, + help="Paper thickness - important for thick carton") + self.OptionParser.add_option("-c", "--cramp-height", + action="store", type="float", + dest="cramp_height", default=1.0, + help="Cramp ear height - render cramping ears and slots on the left and right walls (0 for no cramp)") + self.OptionParser.add_option("-d", "--dash-width", + action="store", type="float", + dest="dash_width", default=5.0, + help="Bend line dash width") + self.OptionParser.add_option("-s", "--dash-step", + action="store", type="float", + dest="dash_step", default=5.0, + help="Bend line dash step") + self.OptionParser.add_option("-b", "--bendline-surface", + action="store", type="string", + dest="bend_surface", default="inner", + help="Bend line surface (innder or outer) - depends on the way you will make actual bends") + self.OptionParser.add_option("-u", "--unit", + action="store", type="string", + dest="unit", default="mm", + help="The unit of dimensions") + + def effect(self): + + width = self.unittouu( str(self.options.width) + self.options.unit ) + height = self.unittouu( str(self.options.height) + self.options.unit ) + depth = self.unittouu( str(self.options.depth) + self.options.unit ) + thickness = self.unittouu( str(self.options.thickness) + self.options.unit ) + cramp_height = self.unittouu( str(self.options.cramp_height) + self.options.unit ) + dash_width = self.unittouu( str(self.options.dash_width) + self.options.unit ) + dash_step = self.unittouu( str(self.options.dash_step) + self.options.unit ) + bend_surface = self.options.bend_surface + + # bend correction: it makes sense when compose the box whether the bend line would + # lay on the inner or outer surface of the thick carton + bcorr = 0 + if bend_surface == "inner": + bcorr = 0 + elif bend_surface == "outer": + bcorr = thickness + else :# "middle" + bcorr = thickness/2 + + # small ears (to be hidden inside the box borders) length + ear1 = height / 2 - bcorr*2 + + # slot width - make slots a bit thiner than ears (thickness) + slot_width_factor = 0.8 + slot_width = thickness * slot_width_factor + + # big ears skew = ~25 degrees + # skew_shift = depth*2/3 * tg(25) + skew_shift = depth*2/3 * 0.47 + + # render 2 cramps as 1/5 of box height with same (1/5 of height) step + cramp_width = height/5 + + # Generate box points + # Details on the shape here: + # https://github.com/1i7/metalrobot/blob/master/inkscape/extensions/robotbox-devel/draft1.svg + # https://github.com/1i7/metalrobot/blob/master/inkscape/extensions/robotbox-devel/draft2.svg + + # points for straight lines of the left bound + left_points = [ + # start from left bottom "ear" and go left and up + # ear 1 + 0,0, -ear1,0, + -ear1,depth, 0,depth, + # ear 2 + 0,depth+bcorr*2, -((thickness-bcorr)+slot_width+bcorr),depth+bcorr*2, -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2),depth+bcorr*2, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr),depth+bcorr*2, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth),depth+bcorr*2 + ] + + # render cramping ears if set + if cramp_height > 0: + left_cramp_x = -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth) + + left_points += [ + # left cramp ear1 + left_cramp_x,(depth+bcorr*2)+cramp_width, left_cramp_x-cramp_height,(depth+bcorr*2)+cramp_width+thickness, + left_cramp_x-cramp_height,(depth+bcorr*2)+cramp_width*2-thickness, left_cramp_x,(depth+bcorr*2)+cramp_width*2, + + # left cramp ear2 + left_cramp_x,(depth+bcorr*2)+cramp_width*3, left_cramp_x-cramp_height,(depth+bcorr*2)+cramp_width*3+thickness, + left_cramp_x-cramp_height,(depth+bcorr*2)+cramp_width*4-thickness, left_cramp_x,(depth+bcorr*2)+cramp_width*4 + ] + + + left_points += [ + # ear 2 finish + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height, 0,(depth+bcorr*2)+height, + # ear 3 + 0,(depth+bcorr*2)+(height+bcorr*2), -ear1,(depth+bcorr*2)+(height+bcorr*2), + -ear1,(depth+bcorr*2)+(height+bcorr*2)+depth, 0,(depth+bcorr*2)+(height+bcorr*2)+depth, bcorr+thickness+(thickness-bcorr),(depth+bcorr*2)+(height+bcorr*2)+depth, + # ear 4 + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), (bcorr+thickness+(thickness-bcorr))-depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+skew_shift, + (bcorr+thickness+(thickness-bcorr))-depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height-skew_shift, (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height + ] + + + # points for straight lines of the right bound + right_base_x = bcorr+thickness+width+thickness+bcorr + right_points = [ + # ear 7 + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height, right_base_x-(bcorr+thickness+(thickness-bcorr))+depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height-skew_shift, + right_base_x-(bcorr+thickness+(thickness-bcorr))+depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+skew_shift, right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + # ear 8 + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+depth, right_base_x,(depth+bcorr*2)+(height+bcorr*2)+depth, right_base_x+ear1,(depth+bcorr*2)+(height+bcorr*2)+depth, + right_base_x+ear1,(depth+bcorr*2)+(height+bcorr*2), right_base_x,(depth+bcorr*2)+(height+bcorr*2), + # ear 9 + right_base_x,(depth+bcorr*2)+height, right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth),(depth+bcorr*2)+height + ] + + # render cramping ears if set + if cramp_height > 0: + right_cramp_x = right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth) + right_points += [ + # right cramp ear1 + right_cramp_x,(depth+bcorr*2)+height-cramp_width, right_cramp_x+cramp_height,(depth+bcorr*2)+height-cramp_width-thickness, + right_cramp_x+cramp_height,(depth+bcorr*2)+height-cramp_width*2+thickness, right_cramp_x,(depth+bcorr*2)+height-cramp_width*2, + + # right cramp ear2 + right_cramp_x,(depth+bcorr*2)+height-cramp_width*3, right_cramp_x+cramp_height,(depth+bcorr*2)+height-cramp_width*3-thickness, + right_cramp_x+cramp_height,(depth+bcorr*2)+height-cramp_width*4+thickness, right_cramp_x,(depth+bcorr*2)+height-cramp_width*4 + ] + + right_points += [ + # ear 9 finish + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), right_base_x,(depth+bcorr*2), + # ear 10 + right_base_x,depth, right_base_x+ear1,depth, + right_base_x+ear1,0, right_base_x,0 + ] + + + bound_points = [ + [ 'M', left_points ], + # ear 5: manual shape (drawn for 62x38x23 box), converted to proportion based on depth value + # m 0,0 c -39.88719,-0.7697 -90.44391,-0.7593 -73.26685,35.3985 11.37507,22.1855 33.21015,45.182 73.26685,46.0975 z + [ 'L', [ + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + [ 'C', [ +# -39.88719, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)-0.7697, +# -90.44391, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)-0.7593, +# -73.26685, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985, +# -73.26685+11.37507, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985+22.1855, +# -73.26685+33.21015, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985+45.182, + + -(bcorr+(thickness-bcorr))-depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr))-depth/10*11, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr))-depth/8*7, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*7, + -(bcorr+(thickness-bcorr))-depth/8*6, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*11, + -(bcorr+(thickness-bcorr))-depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth, + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth + ] ], + # now go to the right and go down in reverse order + # ear 6: manual shape (drawn for 62x38x23 box), converted to proportion based on depth value + [ 'L', [ + right_base_x+(bcorr+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth + ] ], + [ 'C', [ + right_base_x+(bcorr+(thickness-bcorr))+depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth, + right_base_x+(bcorr+(thickness-bcorr))+depth/8*6, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*11, + right_base_x+(bcorr+(thickness-bcorr))+depth/8*7, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*7, + right_base_x+(bcorr+(thickness-bcorr))+depth/10*11, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr))+depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + [ 'L', [ + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + # ear 7 + [ 'L', right_points ], + [ 'Z', [] ] + ] + + # render slots for cramp ears + # slot for left cramp ear1 + slot_l1 = [ [ 'M', [ + bcorr,(depth+bcorr*2)+cramp_width, bcorr+thickness,(depth+bcorr*2)+cramp_width, + bcorr+thickness,(depth+bcorr*2)+cramp_width*2, bcorr,(depth+bcorr*2)+cramp_width*2 + ] ], + [ 'Z', [] ] + ] + + # slot for left cramp ear2 + slot_l2 = [ [ 'M', [ + bcorr,(depth+bcorr*2)+cramp_width*3, bcorr+thickness,(depth+bcorr*2)+cramp_width*3, + bcorr+thickness,(depth+bcorr*2)+cramp_width*4, bcorr,(depth+bcorr*2)+cramp_width*4 + ] ], + [ 'Z', [] ] + ] + + # slot for right cramp ear1 + slot_r1 = [ [ 'M', [ + right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width, right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width, + right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*2, right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*2 + ] ], + [ 'Z', [] ] + ] + + # slot for right cramp ear2 + slot_r2 = [ [ 'M', [ + right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*3, right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*3, + right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*4, right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*4 + ] ], + [ 'Z', [] ] + ] + + # vertical bends + # left + bend_line_vl1 = [ [ 'M', [ 0, 0, + 0, depth ] ] ] + bend_line_vl2 = [ [ 'M', [ + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height ] ] ] + bend_line_vl3 = [ [ 'M', [ + 0, (depth+bcorr*2)+(height+bcorr*2), + 0, (depth+bcorr*2)+(height+bcorr*2)+depth ] ] ] + bend_line_vl4 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height ] ] ] + bend_line_vl5 = [ [ 'M', [ + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth ] ] ] + + + bend_line_vl6 = [ [ 'M', [ -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2), (depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2), (depth+bcorr*2)+height ] ] ] + bend_line_vl7 = [ [ 'M', [ -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2)+height ] ] ] + + # right + bend_line_vr1 = [ [ 'M', [ + right_base_x, 0, + right_base_x, depth ] ] ] + bend_line_vr2 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height ] ] ] + bend_line_vr3 = [ [ 'M', [ + right_base_x, (depth+bcorr*2)+(height+bcorr*2), + right_base_x, (depth+bcorr*2)+(height+bcorr*2)+depth ] ] ] + bend_line_vr4 = [ [ 'M', [ + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height ] ] ] + bend_line_vr5 = [ [ 'M', [ + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth ] ] ] + + + bend_line_vr6 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2), (depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2), (depth+bcorr*2)+height ] ] ] + bend_line_vr7 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2)+height ] ] ] + + # horizontal bends + bend_line_h1 = [ [ 'M', [ + 0,depth+bcorr, + right_base_x, depth+bcorr ] ] ] + bend_line_h2 = [ [ 'M', [ + 0,(depth+bcorr*2)+height+bcorr, + right_base_x, (depth+bcorr*2)+height+bcorr ] ] ] + bend_line_h3 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+depth+bcorr, + right_base_x-(bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+depth+bcorr ] ] ] + bend_line_h4 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height+thickness+bcorr, + right_base_x-(bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height+thickness+bcorr ] ] ] + + + # Embed drawing in group to make animation easier: + # Translate group + t = 'translate(' + str( self.view_center[0] ) + ',' + str( self.view_center[1] ) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'RobotBox', 'transform':t } + g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + + # Create SVG Path for box bounds + style = { 'stroke': '#000000', 'fill': 'none' } + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bound_points )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + # Create SVG paths for crmap slots if set + # render slots for cramp ears + if cramp_height > 0: + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( slot_l1 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( slot_l2 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( slot_r1 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( slot_r2 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + # Create SVG Paths for bend lines + # draw bend lines with blue + style = { 'stroke': '#44aaff', 'fill': 'none', + 'stroke-dasharray': str(dash_width) + ',' + str(dash_step), + # positive dash offset moves dash backward + 'stroke-dashoffset': str(dash_width) } + + # left + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl1 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl2 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl3 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl4 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl5 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl6 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vl7 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + # right + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr1 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr2 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr3 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr4 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr5 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr6 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_vr7 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + # horizontal + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_h1 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_h2 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_h3 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + + path_attribs = {'style':simplestyle.formatStyle(style), 'd':formatPath( bend_line_h4 )} + inkex.etree.SubElement(g, inkex.addNS('path','svg'), path_attribs ) + +if __name__ == '__main__': + e = RobotBox() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_roland_cutstudio.inx b/fablabchemnitz_roland_cutstudio.inx new file mode 100644 index 0000000..4dc5b43 --- /dev/null +++ b/fablabchemnitz_roland_cutstudio.inx @@ -0,0 +1,18 @@ + + + <_name>Open in Roland CutStudio + fablabchemnitz.de.roland_cutstudio + fablabchemnitz_roland_cutstudio.py + + + path + + + + + + + + diff --git a/fablabchemnitz_roland_cutstudio.py b/fablabchemnitz_roland_cutstudio.py new file mode 100644 index 0000000..e0283e9 --- /dev/null +++ b/fablabchemnitz_roland_cutstudio.py @@ -0,0 +1,319 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +''' +Roland CutStudio export script +Copyright (C) 2014 Max Gaukler + +skeleton based on Visicut Inkscape Plugin : +Copyright (C) 2012 Thomas Oster, thomas.oster@rwth-aachen.de + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import sys +import os +from subprocess import Popen +import subprocess +import shutil +import numpy + +def debug(s): + sys.stderr.write(s+"\n"); +selectedElements=[] +for arg in sys.argv[1:]: + if arg[0] == "-": + if len(arg) >= 5 and arg[0:5] == "--id=": + selectedElements +=[arg[5:]] + else: + filename = arg + +def which(program, extraPaths=[], subdir=None): + """ + find program in the $PATH environment variable and in $extraPaths. + If $subdir is given, also look in the given subdirectory of each $PATH entry. + """ + pathlist=os.environ["PATH"].split(os.pathsep) + if "nt" in os.name: + pathlist.append(os.environ.get("ProgramFiles","C:\Program Files\\")) + pathlist.append(os.environ.get("ProgramFiles(x86)","C:\Program Files (x86)\\")) + pathlist.append("C:\Program Files\\") # needed for 64bit inkscape on 64bit Win7 machines + pathlist.append(os.path.dirname(os.path.dirname(os.getcwd()))) # portable application in the current directory + if subdir: + pathlist = [os.path.join(p, subdir) for p in pathlist] + pathlist + def is_exe(fpath): + return os.path.isfile(fpath) and (os.access(fpath, os.X_OK) or fpath.endswith(".exe")) + for path in pathlist: + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + raise Exception(str(program) + str(pathlist)) + + +# Strip SVG to only contain selected elements, convert objects to paths, unlink clones +# This code was simply copied from the VisiCut inkscape-plugin. Some parts may be unnecessary, but as long as it works, I don't care. +# Inkscape version: takes care of special cases where the selected objects depend on non-selected ones. +# Examples are linked clones, flowtext limited to a shape and linked flowtext boxes (overflow into the next box). +# +# Inkscape is called with certain "verbs" (gui actions) to do the required cleanup +# The idea is similar to http://bazaar.launchpad.net/~nikitakit/inkscape/svg2sif/view/head:/share/extensions/synfig_prepare.py#L181 , but more primitive - there is no need for more complicated preprocessing here +def stripSVG_inkscape(src,dest,elements): + # Selection commands: select items, invert selection, delete + selection=[] + for el in elements: + selection += ["--select="+el] + if len(elements)>0: + #selection += ["--verb=FitCanvasToSelection"] # TODO add a user configuration option whether to keep the page size (and by this the position relative to the page) + selection += ["--verb=EditInvertInAllLayers","--verb=EditDelete"] + import shutil + shutil.copyfile(src, dest) + hidegui=["--without-gui"] + # currently this only works with gui because of a bug in inkscape: https://bugs.launchpad.net/inkscape/+bug/843260 + hidegui=[] + + command = [INKSCAPEBIN]+hidegui+[dest,"--verb=UnlockAllInAllLayers","--verb=UnhideAllInAllLayers"] + selection + ["--verb=EditSelectAllInAllLayers","--verb=EditUnlinkClone","--verb=ObjectToPath","--verb=FileSave","--verb=FileQuit"] + inkscape_output="(not yet run)" + try: + # run inkscape, buffer output + inkscape=subprocess.Popen(command, stdout=subprocess.PIPE,stderr=subprocess.STDOUT) + inkscape_output=inkscape.communicate()[0] + except: + sys.stderr.write("Error: cleaning the document with inkscape failed. Something might still be shown in visicut, but it could be incorrect. Exception information: \n" + str(sys.exc_info()[0]) + "Inkscape's output was:\n" + inkscape_output) + + +# header +# for debugging purposes you can open the resulting EPS file in Inkscape, +# select all, ungroup multiple times +# --> now you can view the exported lines in inkscape +prefix=""" +%!PS-Adobe-3.0 EPSF-3.0 +%%LanguageLevel: 2 +%%BoundingBox -10000 -10000 10000 10000 +%%EndComments +%%BeginSetup +%%EndSetup +%%BeginProlog +% This code (until EndProlog) is from an inkscape-exported EPS, copyright unknown, see cairo-library +save +50 dict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: -10000 -10000 10000 10000 +%%EndPageSetup +% This is a severely crippled fucked-up pseudo-postscript for importing in Roland CutStudio +% Do not even try to open it with something else +% FIXME opening with inkscape currently does not show any objects, although it worked some time in the past + +% Inkscape header, not used by cutstudio +% Start +q -10000 -10000 10000 10000 rectclip q + +0 g +0.286645 w +0 J +0 j +[] 0.0 d +4 M q +% Cutstudio Start +""" +postfix=""" +% Cutstudio End + +%this is necessary for CutStudio so that the last line isnt skipped: +0 0 m + +% Inkscape footer +S Q +Q Q +showpage +%%Trailer +end restore +%%EOF +""" + +def EPS2CutstudioEPS(src, dest): + def outputFromStack(stack, n, transformCoordinates=True): + arr=stack[-(n+1):-1] + if transformCoordinates: + arrTransformed=[] + for i in range(n/2): + arrTransformed+=transform(arr[2*i], arr[2*i+1]) + return output(arrTransformed+[stack[-1]]) + else: + return output(arr+[stack[-1]]) + def transform(x, y): + #debug("trafo from: {} {}".format(x, y)) + p=numpy.matrix([[float(x),float(y),1]]).transpose() + multiply = lambda a, b: a*b + # concatenate transformations by multiplying: new = transformation x previousTransformtaion + m=reduce(multiply, scalingStack[::-1]) + m=m.transpose() + #debug("with {}".format(m)) + pnew=m*p + x=float(pnew[0]) + y=float(pnew[1]) + #debug("to: {} {}".format(x, y)) + return [x, y] + def outputMoveto(x, y): + [xx, yy]=transform(x, y) + return output([str(xx), str(yy), "m"]) + def outputLineto(x, y): + [xx, yy]=transform(x, y) + return output([str(xx), str(yy), "l"]) + def output(array): + array=map(str, array) + output=" ".join(array) + #debug("OUTPUT: "+output) + return output + "\n" + stack=[] + scalingStack=[numpy.matrix(numpy.identity(3))] + lastMoveCoordinates=None + outputStr=prefix + inputFile=open(src) + outputFile=open(dest, "w") + for line in inputFile.readlines(): + line=line.strip() + if line.startswith("%"): + # comment line + continue + if line.endswith("re W n"): + continue # ignore clipping rectangle + #debug(line) + for item in line.split(" "): + item=item.strip() + if item=="": + continue + #debug("INPUT: " + item.__repr__()) + stack.append(item) + if item=="h": # close path + assert lastMoveCoordinates, "closed path before first moveto" + outputStr += outputLineto(float(lastMoveCoordinates[0]), float(lastMoveCoordinates[1])) + elif item == "c": # bezier curveto + outputStr += outputFromStack(stack, 6) + stack=[] + elif item=="re": # rectangle + x=float(stack[-5]) + y=float(stack[-4]) + dx=float(stack[-3]) + dy=float(stack[-2]) + outputStr += outputMoveto(x, y) + outputStr += outputLineto(x+dx, y) + outputStr += outputLineto(x+dx, y+dy) + outputStr += outputLineto(x, y+dy) + outputStr += outputLineto(x, y) + elif item=="cm": # matrix transformation + newTrafo=numpy.matrix([[float(stack[-7]), float(stack[-6]), 0], [float(stack[-5]), float(stack[-4]), 0], [float(stack[-3]), float(stack[-2]), 1]]) + #debug("applying trafo "+str(newTrafo)) + scalingStack[-1]*=newTrafo + elif item=="q": # save graphics state to stack + scalingStack.append(numpy.matrix(numpy.identity(3))) + elif item=="Q": # pop graphics state from stack + scalingStack.pop() + elif item in ["m", "l"]: + if item=="m": # moveto + lastMoveCoordinates=stack[-3:-1] + elif item=="l": # lineto + pass + outputStr += outputFromStack(stack, 2) + stack=[] + else: + pass # do nothing + outputStr += postfix + outputFile.write(outputStr) + outputFile.close() + +if os.name=="nt": # windows + INKSCAPEBIN = which("inkscape.exe", subdir="Inkscape") + INKSCAPEBIN_NOGUI = which("inkscape.com", subdir="Inkscape") +else: + INKSCAPEBIN=which("inkscape") + INKSCAPEBIN_NOGUI = INKSCAPEBIN + +assert os.path.isfile(INKSCAPEBIN), "cannot find inkscape binary " + INKSCAPEBIN +assert os.path.isfile(INKSCAPEBIN_NOGUI), "cannot find inkscape binary " + INKSCAPEBIN_NOGUI + +if len(selectedElements)==0: + shutil.copyfile(filename, filename+".filtered.svg") +else: + # only take selected elements + stripSVG_inkscape(src=filename, dest=filename+".filtered.svg", elements=selectedElements) + +#assert 0==subprocess.call([INKSCAPEBIN,"-z",filename+".orig.svg","-T", "--export-plain-svg="+filename+".plain.svg"]), "plain-SVG conversion failed" +#os.unlink(filename+".orig.svg") +cmd = [INKSCAPEBIN_NOGUI,"-z",filename+".filtered.svg","-T", "--export-ignore-filters", "--export-eps="+filename+".inkscape.eps"] +assert 0 == subprocess.call(cmd), 'EPS conversion failed: command returned error: ' + '"' + '" "'.join(cmd) + '"' +#os.unlink(filename+".plain.svg") +EPS2CutstudioEPS(filename+".inkscape.eps", filename+".cutstudio.eps") + +if os.name=="nt": + DETACHED_PROCESS = 8 # start as "daemon" + Popen([which("CutStudio\CutStudio.exe"), "/import", filename+".cutstudio.eps"], creationflags=DETACHED_PROCESS, close_fds=True) +else: + #raise Exception("CutStudio on Mac and on Linux-Wine not yet supported, please open cutstudio yourself.") + Popen(["inkscape", filename+".filtered.svg"]) + #Popen(["inkscape", filename+".cutstudio.eps"]) + pass +#os.unlink(filename+".filtered.svg") +#os.unlink(filename) +#os.unlink(filename+".cutstudio.eps") diff --git a/fablabchemnitz_rounder.inx b/fablabchemnitz_rounder.inx new file mode 100644 index 0000000..b220324 --- /dev/null +++ b/fablabchemnitz_rounder.inx @@ -0,0 +1,28 @@ + + + <_name>Rounder + fablabchemnitz.de.rounder + fablabchemnitz_rounder.py + <_param name="titleMain" type="description">Rounding helpers. + <_param name="precision" type="int" min="0" max="20" _gui-text="Rounding precission">2 + <_param name="paths" type="boolean" _gui-text="Round nodes">True + <_param name="ctrl" type="boolean" _gui-text="Round handles">False + <_param name="along" type="boolean" _gui-text="Move handles following node movement">True + <_param name="half" type="boolean" _gui-text="Allow round to half if nearest">False + <_param name="strokewidth" type="boolean" _gui-text="Round stroke width">False + <_param name="widthheight" type="boolean" _gui-text="Round width and height">False + <_param name="position" type="boolean" _gui-text="Round position X and Y">False + <_param name="opacity" type="boolean" _gui-text="Round global opacity">False + <_param name="strokeopacity" type="boolean" _gui-text="Round stroke opacity">False + <_param name="fillopacity" type="boolean" _gui-text="Round fill opacity">False + + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_rounder.py b/fablabchemnitz_rounder.py new file mode 100644 index 0000000..13fb6de --- /dev/null +++ b/fablabchemnitz_rounder.py @@ -0,0 +1,193 @@ +#! /usr/bin/python +''' +Rounder 0.4 +Based in deprecated "Path Rounder 0.2" +Based in radiusrand script from Aaron Spike and make it by Jabier Arraiza, +jabier.arraiza@marker.es +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +import random, math, inkex, cubicsuperpath, re + +class svgRounder(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--p","--precision", + action="store", type="int", + dest="precision", default=3, + help="Precision") + self.OptionParser.add_option("-c", "--ctrl", + action="store", type="inkbool", + dest="ctrl", default = False, + help="Round node handles") + self.OptionParser.add_option("-a", "--along", + action="store", type="inkbool", + dest="along", default = True, + help="Move handles following node movement") + self.OptionParser.add_option("--half", + action="store", type="inkbool", + dest="half", default = False, + help="Allow round to half if nearest") + self.OptionParser.add_option("-p", "--paths", + action="store", type="inkbool", + dest="paths", default = True, + help="Affect to paths") + self.OptionParser.add_option("-w", "--widthheight", + action="store", type="inkbool", + dest="widthheight", default = False, + help="Affect to width and height of objects") + self.OptionParser.add_option("-x", "--position", + action="store", type="inkbool", + dest="position", default = False, + help="Affect to position of objects") + self.OptionParser.add_option("-s", "--strokewidth", + action="store", type="inkbool", + dest="strokewidth", default = False, + help="Affect to stroke width of objects") + self.OptionParser.add_option("-o", "--opacity", + action="store", type="inkbool", + dest="opacity", default = False, + help="Affect to global opacity of objects") + self.OptionParser.add_option("--strokeopacity", + action="store", type="inkbool", + dest="strokeopacity", default = False, + help="Affect to stroke opcacity of objects") + self.OptionParser.add_option("--fillopacity", + action="store", type="inkbool", + dest="fillopacity", default = False, + help="Affect to fill opcacity of objects") + + def roundFloat(self, n): + if self.options.half: + if self.options.precision == 0: + return str(round(n * 2) / 2) + else: + return str(round(n * (self.options.precision) * 10 * 2) / ((self.options.precision) * 10 * 2)) + else: + return str(round(n, self.options.precision)) + + def roundit(self, p): + x = self.roundFloat(p[0]) + y = self.roundFloat(p[1]) + return [float(x) - p[0], float(y) - p[1]] + + def path_round_it(self,node): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + p = cubicsuperpath.parsePath(d) + for subpath in p: + for csp in subpath: + delta = self.roundit(csp[1]) + if self.options.along: + csp[0][0]+=delta[0] + csp[0][1]+=delta[1] + csp[1][0]+=delta[0] + csp[1][1]+=delta[1] + if self.options.along: + csp[2][0]+=delta[0] + csp[2][1]+=delta[1] + if self.options.ctrl: + delta = self.roundit(csp[0]) + csp[0][0]+=delta[0] + csp[0][1]+=delta[1] + delta = self.roundit(csp[2]) + csp[2][0]+=delta[0] + csp[2][1]+=delta[1] + node.set('d',cubicsuperpath.formatPath(p)) + elif node.tag == inkex.addNS('g','svg'): + for e in node: + self.path_round_it(e) + + def roundStroke(self,matchobj): + return 'stroke-width:' + self.roundFloat(float( matchobj.group(1))) + matchobj.group(2); + + def roundOpacity(self,matchobj): + return matchobj.group(1) + matchobj.group(2) + self.roundFloat(float( matchobj.group(3))) + matchobj.group(4); + + def roundWHXY(self,matchobj): + return matchobj.group(1) + self.roundFloat(float( matchobj.group(2))) + matchobj.group(3); + + + def stroke_round_it(self, node): + if node.tag == inkex.addNS('g','svg'): + for e in node: + self.stroke_round_it(e) + else: + style = node.get('style') + if style: + style = re.sub('stroke-width:(.*?)(;|$)',self.roundStroke, style) + node.set('style',style) + def opacity_round_it(self, node, typeOpacity): + if node.tag == inkex.addNS('g','svg'): + for e in node: + self.opacity_round_it(e) + else: + style = node.get('style') + if style: + style = re.sub('(^|;)(' + typeOpacity + ':)(.*?)(;|$)',self.roundOpacity, style) + node.set('style',style) + + def widthheight_round_it(self, node): + if node.tag == inkex.addNS('g','svg'): + for e in node: + self.widthheight_round_it(e) + else: + width = node.get('width') + if width: + width = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, width) + node.set('width',width) + height = node.get('height') + if height: + height = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, height) + node.set('height',height) + + def position_round_it(self, node): + if node.tag == inkex.addNS('g','svg'): + for e in node: + self.position_round_it(e) + else: + x = node.get('x') + if x: + x = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, x) + node.set('x', x) + y = node.get('y') + if y: + y = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, y) + node.set('y', y) + + def effect(self): + for id, node in self.selected.iteritems(): + if self.options.paths: + self.path_round_it(node) + if self.options.strokewidth: + self.stroke_round_it(node) + if self.options.widthheight: + self.widthheight_round_it(node) + if self.options.position: + self.position_round_it(node) + if self.options.opacity: + self.opacity_round_it(node, "opacity") + if self.options.strokeopacity: + self.opacity_round_it(node, "stroke-opacity") + if self.options.fillopacity: + self.opacity_round_it(node, "fill-opacity") + +if __name__ == '__main__': + e = svgRounder() + e.affect() + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 diff --git a/fablabchemnitz_scatter.inx b/fablabchemnitz_scatter.inx new file mode 100644 index 0000000..c74f8e3 --- /dev/null +++ b/fablabchemnitz_scatter.inx @@ -0,0 +1,24 @@ + + + <_name>Scatter 2 + fablabchemnitz.de.scatter2 + pathmodifier.py + fablabchemnitz_scatter.py + inkex.py + This effect scatters pattern objects randomly around segment points of arbitrary "skeleton" paths. The pattern is the top most object in the selection. Random_off:density=1,offset=0 + true + 6 + 3 + 20.0 + 20.0 + + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_scatter.py b/fablabchemnitz_scatter.py new file mode 100644 index 0000000..c87ab6c --- /dev/null +++ b/fablabchemnitz_scatter.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +''' +scatter.py +Sunabe kazumichi 2009/9/29 +http://dp48069596.lolipop.jp/ + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +attention:when rotation degree become large, patterns are deformed largely. +therefore,restricted the rotation in range -30 + + <_name>Box Maker - Schroff + fablabchemnitz.de.boxmaker.schroff + + fablabchemnitz_boxmaker.py + simpletransform.py + inkex.py + + mm + 1 + 1 + 1 + 84 + 0.0 + 0.0 + 65 + + + 10.0 + 17.4 + 0.0 + 0.0 + + 6.0 + + <_option value="0">Fixed + <_option value="1">Proportional + + + 3.0 + 0.1 + 0.01 + 0 + 0 + + 1 + 2 + + 1.0 + + + all + + + + + + + + diff --git a/fablabchemnitz_sewing_patterns.py b/fablabchemnitz_sewing_patterns.py new file mode 100644 index 0000000..9d6cd32 --- /dev/null +++ b/fablabchemnitz_sewing_patterns.py @@ -0,0 +1,823 @@ +# !/usr/bin/python +# +# sewing_patterns.py +# Inkscape extension-Effects-Sewing Patterns +# Copyright (C) 2010, 2011, 2012 Susan Spencer, Steve Conklin < www.taumeta.org > +# +# This program is free software:you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. Attribution must be given in +# all derived works. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see < http://www.gnu.org/licenses/ > + +import sys, subprocess, math, inkex, gettext +sys.path.append('/usr/share/inkscape/extensions') +from simplestyle import * + + +def debug(errmsg, file = 'bell'): + #audio files directory: /usr/share/sounds/ubuntu/stereo + sounds(file) + inkex.errormsg(gettext.gettext(errmsg)) + +def sounds(file): + subprocess.call(['/usr/bin/canberra-gtk-play', '--id', file ]) + +#--- +class Point(): + '''Python object class to create variables that represent a named Cartesian point. + Accepts id, x, y. Returns object with .id, .x, .y attributes. + Example: a5 = Point('a5', 10.0, 15.32) returns variable a5 where a5.id = 'a5', a5.x = 10.0, a5.y = 15.32xt + If called with no parameters the defaults are id = '', x = 0, y = 0 + The python object's id attribute enables it to be represented on the canvas as an svg object with the same id. + ''' + def __init__(self, id = '', x = 0.0, y = 0.0): #if no parameters are passed in then the default values id = '', x = 0, y = 0 are used + self.id = id + self.x = x + self.y = y + self.y = y + +def patternPointXY(parent, id, x, y): + '''Accepts parent, id, x, y. Returns object of class Point. Calls addPoint() & addText() to create a pattern point on canvas.''' + # create python variable + pnt = Point(id, x, y) + # create svg circle red 5px radius + addCircle(parent, id, x, y, radius = 5, fill = 'red', stroke = 'red', stroke_width = '1', reference = 'true') + #draw label 8px right and 8px above circle + addText(parent, id + '_text', x + 8, y-8, id, fontsize = '30', textalign = 'left', textanchor = 'left', reference = 'true') #the id is used for two things here: the text object's id and the text object's content. + return pnt # return python variable for use in remainder of pattern + +def patternPoint(parent, id, pnt): + """Wrapper for patternPointXY. Accepts a Point object instead of X & Y values.""" + return patternPointXY(parent, id, pnt.x, pnt.y) + +def controlPointXY(parent, id, x, y): + '''Accepts parent, id, x, y. Returns object of class Point. Calls addPoint() & addText() to create a pattern point with label on canvas.''' + # create python variable + pnt = Point(id, x, y) + # create unfilled grey circle 5px radius + addCircle(parent, id, x, y, radius = 5, fill = 'none', stroke = 'gray', stroke_width = '1', reference = 'true') + #draw label 8px right and 8px above circle + addText(parent, id + '_text', x + 8, y-8, id, fontsize = '30', textalign = 'left', textanchor = 'left', reference = 'true') #the id is used twice: the text object id and the text object content. + return pnt # return python variable for use in remainder of pattern + +def controlPoint(parent, id, pnt): + """Wrapper for controlPointXY. Accepts a Point object instead of X & Y values.""" + return controlPointXY(parent, id, pnt.x, pnt.y) + +def pointList( * args): + """Accepts list of args. Returns array of args.""" + list = [] + for arg in args: + list.append(arg) + return list + +#---tests for position--- +def isRight(pnt1, pnt2): + '''returns 1 if pnt2 is to the right of pnt1''' + right = 0 + if pnt2.x > pnt1.x: + right = 1 + return right + +def isLeft(pnt1, pnt2): + '''returns 1 if pnt2 is to the left of pnt1''' + left = 0 + if pnt2.x < pnt1.x: + left = 1 + return left + +def isAbove(pnt1, pnt2): + '''returns 1 if pnt2 is above pnt1''' + up = 0 + if pnt2.y < pnt1.y: + up = 1 + return up + +def isBelow(pnt1, pnt2): + '''returns 1 if pnt2 is below pnt1''' + down = 0 + if pnt2.y > pnt1.y: + down = 1 + return down + +def lowest(pnts): + """Accepts array pnts[]. Returns lowest point in array.""" + low = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isBelow(low, item): #if item is below current low + updatePoint('', low, item) + return low + +def highest(pnts): + """Accepts array pnts[]. Returns highest point in array.""" + high = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isAbove(high, item): #if item is above current high + updatePoint(high, item) + return high + +def leftmost(pnts): + """Accepts array pnts[]. Returns leftmost point in array.""" + left = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isLeft(left, item): + updatePoint(left, item) + return left + +def rightmost(pnts): + """Accepts array pnts[]. Returns rightmost point in array.""" + right = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isRight(right, item): + updatePoint(right, item) + return right + +#---functions to calculate points. These functions do not create SVG objects--- + +def updatePoint(p1, p2): + '''Accepts p1 and p2 of class Point. Updates p1 with x & y values from p2''' + p1.x = p2.x + p1.y = p2.y + return + +def right(p1, n): + '''Accepts point p1 and float n. Returns (x,y) to the right of p1 at (p1.x + n, p1.y)''' + return Point('', p1.x + n, p1.y) + +def left(p1, n): + '''Accepts point p1 and float n. Returns p2 to the left of p1 at (p1.x-n, p1.y)''' + return Point('', p1.x-n, p1.y) + +def up(p1, n): + '''Accepts point p1 and float n. Returns p2 above p1 at (p1.x, p1.y-n)''' + return Point('', p1.x, p1.y-n) + +def down(p1, n): + '''Accepts point p1 and float n. Returns p2 below p1 at (p1.x, p1.y + n)''' + return Point('', p1.x, p1.y + n) + +def symmetric(p1, p2, type = 'vertical'): + """ + Accepts p1 and p2 of class Point, and optional type is either 'vertical' or 'horizontal with default 'vertical'. + Returns p3 of class Point as "mirror image" of p1 relative to p2 + If type == 'vertical': pnt is on opposite side of vertical line x = p2.x from p1 + If type == 'horizontal': pnt is on opposite side of horizontal line y = p2.y from p1 + """ + p3 = Point() + dx = p2.x - p1.x + dy = p2.y - p1.y + if (type == 'vertical'): + p3.x = p2.x + dx + p3.y = p1.y + elif (type == 'horizontal'): + p3.x = p1.x + p3.y = p2.y + dy + return p3 + +def polar(p1, length, angle): + ''' + Adapted from http://www.teacherschoice.com.au/maths_library/coordinates/polar_-_rectangular_conversion.htm + Accepts p1 as type Point, length as float, angle as float. angle is in radians + Returns p2 as type Point, calculated at length and angle from p1, + Angles start at position 3:00 and move clockwise due to y increasing downwards on Cairo Canvas + ''' + id = '' + r = length + x = p1.x + (r * math.cos(angle)) + y = p1.y + (r * math.sin(angle)) + p2 = Point(id, x, y) + return p2 + +def midPoint(p1, p2, n = 0.5): + '''Accepts points p1 & p2, and n where 0 < n < 1. Returns point p3 as midpoint b/w p1 & p2''' + p3 = Point('', (p1.x + p2.x) * n, (p1.y + p2.y) * n) + return p3 + + +#---measurements +def distance(p1, p2): + '''Accepts two points p1 & p2. Returns the distance between p1 & p2.''' + return ( ((p2.x-p1.x) ** 2) + ((p2.y-p1.y) ** 2) ) ** 0.5 + +def angleOfDegree(degree): + '''Accepts degree. Returns radians.''' + return degree * math.pi/180.0 + +def angleOfLine(p1, p2): + """ Accepts points p1 & p2. Returns the angle of the vector between them. Uses atan2.""" + return math.atan2(p2.y-p1.y, p2.x-p1.x) + +def angleOfVector(p1, v, p2): + '''Accepts three points o1, v, and p2. Returns radians of the angle formed between the three points.''' + return abs(angleOfLine(v, p1)-angleOfLine(v, p2)) + +def slopeOfLine(p1, p2): + """ Accepts two point objects and returns the slope """ + if ((p2.x-p1.x) != 0): + m = (p2.y-p1.y)/(p2.x-p1.x) + else: + #TODO: better error handling here + debug('Vertical Line in slopeOfLine') + m = None + return m + +def slopeOfAngle(radians): + ''' + Accepts angle (radians) + Returns the slope as tangent radians + ''' + #get tangent of radians + return math.tan(radians) + +#---intersections & extensions + +def extendLine(p1, p2, length, rotation=0): + """ + Accepts two directed points of a line, and a length to extend the line + Finds point along line at length from p2 in direction p1->p2 + """ + return onLineAtLength(p2, p1, -length) + +def onLineAtLength(p1, p2, length, rotation=0): + """ + Accepts points p1 and p2, distance, and an optional rotation angle. + Returns coordinate pair on the line at length measured from p1 towards p2 + If length is negative, will return a coordinate pair at length measured + from p1 in opposite direction from p2. + The result is optionally rotated about the first point by the rotation angle in degrees + """ + lineangle = angleOfLine(p1, p2) + angle = lineangle + rotation * (math.pi/180) + x = (length * math.cos(angle)) + p1.x + y = (length * math.sin(angle)) + p1.y + return Point('', x, y) + +def onLineAtX(p1, p2, x): + #on line p1-p2, given x find y + if (p1.x == p2.x):# vertical line + raise ValueError('Points form a vertical line, infinite answers possible') + return None + else: + m = (p2.y - p1.y)/(p2.x - p1.x) + b = p2.y - (m * p2.x) + return Point('', x, (m * x) + b) + +def onLineAtY(p1, p2, y): + #on line p1-p2, find x given y + if (p1.y == p2.y): #if horizontal line + raise ValueError('Points form a horizontal line, infinite answers possible') + return None + elif (p1.x == p2.x): # if vertical line + return Point('', p1.x, y) + else: + m = (p1.y - p2.y)/(p1.x - p2.x) + b = p2.y - (m * p2.x) + return Point('', (y - b)/m, y) + +def intersectLines(p1, p2, p3, p4): + """ + Find intersection between two lines. Accepts p1, p2, p3, p4 as class Point. Returns p5 as class Point + Intersection does not have to be within the supplied line segments + """ + x, y = 0.0, 0.0 + if (p1.x == p2.x): #if 1st line vertical, use slope of 2nd line + x = p1.x + m2 = slopeOfLine(p3, p4) + b2 = p3.y-m2 * p3.x + y = m2 * x + b2 + elif (p3.x == p4.x): #if 2nd line vertical, use slope of 1st line + x = p3.x + m1 = slopeOfLine(p1, p2) + b1 = p1.y-m1 * p1.x + y = m1 * x + b1 + else: #otherwise use ratio of difference between points + m1 = (p2.y-p1.y)/(p2.x-p1.x) + m2 = (p4.y-p3.y)/(p4.x-p3.x) + b1 = p1.y-m1 * p1.x + b2 = p3.y-m2 * p3.x + #if (abs(b1-b2) < 0.01) and (m1 == m2): + #x = p1.x + #else: + #x = (b2-b1)/(m1-m2) + if (m1 == m2): + #TODO: better error handling here + debug(' ** ** * Parallel lines in intersectLines ** ** * ') + else: + x = (b2-b1)/(m1-m2) + y = (m1 * x) + b1 # arbitrary choice, could have used m2 & b2 + p5 = Point("", x, y) + return p5 + +def intersectLineRay(P1, P2, R1, angle): + ''' + Accepts two points defining a line, and a point and angle defining a ray. + Returns point where they intersect. + ''' + #define a line R1-R2 by finding point R2 along ray 25 pixels (arbitary) from R1 + R2 = polar(R1, 1 * 25, angle) + pnt = intersectLines(P1, P2, R1, R2) + return pnt + +def onRayAtX(P, angle, x): + ''' + Accepts point P and angle of line. + Returns point along ray at x + ''' + #convert degrees to slope + m = slopeOfAngle(angle) + #solve for y + #(P.y - y)/(P.x - x) = m + y = P.y - m * (P.x - x) + return Point('', x, y) + +def onRayAtY(P, angle, y): + ''' + Accepts point P and angle of line. + Returns point along ray at y + ''' + #convert degrees to slope + m = slopeOfAngle(angle) + #solve for x + #(P.y - y)/(P.x - x) = m + x = P.x - (P.y - y)/m + return Point('', x, y) + +def intersectCircles(C1, r1, C2, r2): + """ + Accepts C1, r1, C2, r2 where C1 & C2 are center points of each circle, and r1 & r2 are the radius of each circle. + Returns an array of points of intersection. + """ + x0, y0 = C1.x, C1.y + x1, y1 = C2.x, C2.y + d = distance(C1, C2) # distance b/w circle centers + dx, dy = (x1-x0), (y1-y0) # negate y b/c canvas increases top to bottom + pnts = [] + if (d == 0): + #intersections = 0 + #TODO: better error handling here + debug('center of both circles are the same in intersectCircles()') + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + return + elif (d < abs(r1-r2)): + #intersections = 0 + #TODO: better error handling here + debug('one circle is within the other in intersectCircles()') + debug('d = ', d) + debug('r1 - r2 = ', (r1-r2)) + debug('d < abs(r1 - r2) ?', (d < abs(r1-r2))) + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + return + elif (d > (r1 + r2)): + #intersections = 0 + #TODO: better error handling here + debug('circles do not intersect in intersectCircles()') + debug('d = ', d) + debug('r1 + r2 = ', (r1 + r2)) + debug('d > abs(r1 + r2) ?', (d > abs(r1 + r2))) + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + # TODO:possible kluge -check if this is acceptable using a small margin of error between r1 & r2 (0.5 * CM)?: + #r2 = d-r1 + return + else: + #intersections = 2 or intersections = 1 + a = ((r1 * r1)-(r2 * r2) + (d * d))/(2.0 * d) + x2 = x0 + (dx * a/d) + y2 = y0 + (dy * a/d) + h = math.sqrt((r1 * r1)-(a * a)) + rx = -dy * (h/d) + ry = dx * (h/d) + X1 = x2 + rx + Y1 = y2 + ry + X2 = x2-rx + Y2 = y2-ry + pnts.append(Point("", X1, Y1)) + pnts.append(Point("", X2, Y2)) + return pnts + +def onCircleAtX(C, r, x): + """ + Finds points on circle where p.x=x + Accepts C as an object of class Point or xy coords for the center of the circle, + r as the radius, and x to find the points on the circle + Returns an array P + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + #print 'C =', C.x, C.y + #print 'r =', r + #print 'x =', x + P = [] + if abs(x - C.x) > r: + print('abs(x - C.x) > r ...', abs(x - C.x), ' > ', r) + print('x is outside radius of circle in intersections.onCircleAtX()') + else: + translated_x = x - C.x # center of translated circle is (0, 0) as translated_x is the difference b/w C.x & x + translated_y1 = abs(math.sqrt(r**2 - translated_x**2)) + translated_y2 = -(translated_y1) + y1 = translated_y1 + C.y # translate back to C.y + y2 = translated_y2 + C.y # translate back to C.y + P.append(Point('', x, y1)) + P.append(Point('', x, y2)) + return P + +def onCircleAtY(C, r, y): + """ + Finds points one or two points on circle where P.y=y + Accepts C of class Point or coords as circle center, r of type float as radius, and y of type float) + Returns an array P + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + #print('C =', C.x, C.y) + #print('r =', r) + #print('x = ', y)) + P = [] + if abs(y - C.y) > r: + print('abs(y - C.y) > r ...', abs(y - C.y), ' > ', r) + print('y is outside radius in onCircleAtY() -- no intersection') + else: + translated_y = y - C.y + translated_x1 = abs(math.sqrt(r**2 - translated_y**2)) + translated_x2 = -translated_x1 + x1 = translated_x1 + C.x + x2 = translated_x2 + C.x + P.append(Point('', x1, y)) + P.append(Point('', x2, y)) + return P + +def intersectLineCircle(P1, P2, C, r): + """ + Finds intersection of a line segment and a circle. + Accepts circle center point object C, radius r, and two line point objects P1 & P2 + Returns an array P with up to two coordinate pairs as P.intersections P[0] & P[1] + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + + #print('C =', C.x, C.y) + #print('P1 =', P1.x, P1.y) + #print('P2 =', P2.x, P2.y) + #print('r =', r, 'pts', ', ', r / CM, 'cm') + + p1, p2 = Point('', '', ''), Point('', '', '') + P = [] + + if P1.x == P2.x: #vertical line + if abs(P1.x - C.x) > r: + print('no intersections for vertical line P1', P1.name, P1.x, P1.y, ', P2', P2.name, P2.x, P2.y, ', and Circle', C.name, C.x, C.y, ', radius', r) + return None + else: + #print('Vertical line') + p1.x = P1.x + p2.x = P1.x + p1.y = C.y + sqrt(r**2 - (P1.x - C.x)**2) + p2.y = C.y - sqrt(r**2 - (P1.x - C.x)**2) + elif P1.y == P2.y: #horizontal line + if abs(P1.y-C.y) > r: + print('no intersections for horizontal line P1', P1.name, P1.x, P1.y, ', P2', P2.name, P2.x, P2.y, ', and Circle', C.name, C.x, C.y, ', radius', r) + return None + else: + #print('Horizontal line') + p1.y = P1.y + p2.y = P1.y + p1.x = C.x + sqrt(r**2 - (P1.y - C.y)**2) + p2.x = C.x - sqrt(r**2 - (P1.y - C.y)**2) + else: + a = (P2.x - P1.x)**2 + (P2.y - P1.y)**2 + b = 2.0 * ((P2.x - P1.x) * (P1.x - C.x)) + ((P2.y - P1.y) * (P1.y - C.y)) + c = C.x**2 + C.y**2 + P1.x**2 + P1.y**2 - (2.0 * (C.x * P1.x + C.y * P1.y)) - r**2 + i = b**2 - 4.0 * a * c + if i < 0.0: + print('no intersections b/w line', P1.name, P1.x, P1.y, '--', P2.name, P2.x, P2.y, 'and Circle', C.name, C.x, C.y, 'with radius', r) + return None + elif i == 0.0: + # one intersection + #print('one intersection') + mu = -b/(2.0 * a) + p1.x, p1.y = P1.x + mu * (P2.x - P1.x), P1.y + mu * (P2.y - P1.y) + elif i > 0.0: + # two intersections + #print('two intersections') + # first intersection + mu1 = (-b + math.sqrt(i)) / (2.0*a) + p1.x, p1.y = P1.x + mu1 * (P2.x - P1.x), P1.y + mu1 * (P2.y - P1.y) + # second intersection + mu2 = (-b - math.sqrt(i)) / (2.0*a) + p2.x, p2.y = P1.x + mu2 * (P2.x - P1.x), P1.y + mu2 * (P2.y - P1.y) + P.append(p1) + P.append(p2) + return P + +def intersectChordCircle(C, r, P, chord_length): + ''' Accepts center of circle, radius of circle, a point on the circle, and chord length. + Returns an array of two points on the circle at chord_length distance away from original point''' + d = chord_length + # point on circle given chordlength & starting point = 2 * asin(d/2r) + d_div_2r = d/(2.0 * r) + angle = 2 * asin(d_div_2r) + pnts = [] + pnts.append(polar(C, r, angle)) + pnts.append(polar(C, r, - angle)) + return pnts + +def intersectLineCurve(P1, P2, curve, n = 100): + ''' + Accepts two points of a line P1 & P2, and an array of connected bezier curves [P11, C11, C12, P12, C21, C22, P22, C31, C32, P32, ...] + Returns an array points_found[] of point objects where line intersected with the curve, and tangents_found[] of tangent angle at that point + ''' + # get polar equation for line for P1-P2 + # point furthest away from 1st point in curve[] is the fixed point & sets the direction of the angle towards the curve + #if distance(P1, curve[0]) > = distance(P2, curve[0] ): + # fixed_pnt = P1 + # angle = angleOfLine(P1, P2) + #else: + # fixed_pnt = P2 + # angle = angleOfLine(P2, P1) + #debug('intersectLineCurve...') + #debug('....P1 = ' + P1.id + ' ' + str(P1.x) + ', ' + str(P1.y)) + #debug('....P2 = ' + P2.id + ' ' + str(P2.x) + ', ' + str(P2.y)) + #for pnt in curve: + #debug( '....curve = ' + pnt.id + ' ' + str(pnt.x) + ', ' + str(pnt.y)) + fixed_pnt = P1 + angle = angleOfLine(P1, P2) + intersections = 0 + points_found = [] + tangents_found = [] + pnt = Point() + j = 0 + while j <= len(curve) -4: # for each bezier curve in curveArray + intersection_estimate = intersectLines(P1, P2, curve[j], curve[j + 3]) # is there an intersection? + if intersection_estimate != None or intersection_estimate != '': + interpolatedPoints = interpolateCurve(curve[j], curve[j + 1], curve[j + 2], curve[j + 3], n) #interpolate this bezier curve, n = 100 + k = 0 + while k < len(interpolatedPoints)-1: + length = distance(fixed_pnt, interpolatedPoints[k]) + pnt_on_line = polar(fixed_pnt, length, angle) + range = distance(interpolatedPoints[k], interpolatedPoints[k + 1]) # TODO:improve margin of error + length = distance(pnt_on_line, interpolatedPoints[k]) + #debug(str(k) + 'pntOnCurve = ' + \ + # str(interpolatedPoints[k].x) + ', ' + str(interpolatedPoints[k].y) + \ + # 'intersectLineAtLength = ' + str(pnt_on_line.x) + ', ' + str( pnt_on_line.y)\ + # + 'length = ' + str(length) + 'range = ' + str(range)) + if ( length <= range): + #debug('its close enough!') + if k > 1: + if (interpolatedPoints[k-1] not in points_found) and (interpolatedPoints[k-2] not in points_found): + points_found.append(interpolatedPoints[k]) + tangents_found.append(angleOfLine(interpolatedPoints[k-1], interpolatedPoints[k + 1])) + intersections += 1 + elif k == 1: + if (curve[0] not in intersections): + points_found.append(interpolatedPoints[1]) + tangents_found.append(angleOfLine(curve[0], interpolatedPoints[2])) + intersections += 1 + else: + intersections.append(curve[0]) + tangents_found.append(angleOfLine(curve[0], curve[1])) + k += 1 + j += 3 # skip j up to P3 of the current curve to be used as P0 start of next curve + if intersections == 0: + #TODO: better error handling here + debug('no intersections found in intersectLineCurve(' + P1.id + ', ' + P2.id + ' and curve') + #return points_found, tangents_found + return points_found + +def interpolateCurve(P0, C1, C2, P1, t = 100): + ''' + Accepts curve points P0, C1, C2, P1 & number of interpolations t + Returns array of interpolated points of class Point + Adapted from http://www.planetclegg.com/projects/WarpingTextToSplines.htm + ''' + # calculate coefficients for two knot points P0 & P1 ; C1 & C2 are the controlpoints. + # x coefficients + A = P1.x-(3 * C2.x) + (3 * C1.x)-P0.x + B = (3 * C2.x)-(6 * C1.x) + (3 * P0.x) + C = (3 * C1.x)-(3 * P0.x) + D = P0.x + # y coefficients + E = P1.y-(3 * C2.y) + (3 * C1.y)-P0.y + F = (3 * C2.y)-(6 * C1.y) + (3 * P0.y) + G = (3 * C1.y)-(3 * P0.y) + H = P0.y + # calculate interpolated points + interpolatedPoints = [] + maxPoint = float(t) + i = 0 + while ( i <= t): + j = i/maxPoint # j can't be an integer, i/t is an integer..always 0. + x = A * (j ** 3) + B * (j ** 2) + C * j + D + y = E * (j ** 3) + F * (j ** 2) + G * j + H + interpolatedPoints.append(Point('', x, y)) + i += 1 + return interpolatedPoints + +#---rotations +def slashAndSpread(pivot, angle, *args): + """ + Accepts pivot point, angle of rotation, and the points to be rotated. + Accepts positive & negative angles. + """ + if (angle == 0.0): + print('Angle = 0 -- Slash and Spread not possible') + else: + list = [] + for arg in args: + list.append(arg) + i = 0 + for pnt in list: + length = distance(pivot, pnt) + rotated_pnt = polar(pivot, length, angleOfLine(pivot, pnt) + angle) # if angle > 0 spread clockwise. if angle < 0 spread counterclockwise + updatePoint(pnt, rotated_pnt) + return + +#---darts +def foldDart(dart, inside_pnt, seam_allowance): + ''' + Accepts dart, and the nearest point in the direction dart will be folded + Returns dart.m, dart.oc, dart.ic, dart.angle + dart.m = middle dart leg at seamline (to be included in seamline path) + dart.oc = inside dart leg at cuttingline (to be included in dartline path) + dart.oc = outside dart leg at cuttingline (to be included in dartline path) + ''' + mid_pnt = midPoint(dart.i, dart.o) + dart_length = distance(dart, dart.i) + i_angle = angleOfLine(dart, dart.i) + c_angle = angleOfLine(dart, inside_pnt) + dart_angle = abs(angleOfVector(dart.i, dart, dart.o)) + dart_half_angle = dart_angle/2.0 + + #determine which direction the dart will be folded + #if ((dart.i.x > dart.x) and (dart.i.y > dart.y)) or ((dart.i.x < dart.x) and (dart.i.y > dart.y)): + #x & y vectors not the same sign + #dart_half_angle = -dart_half_angle + if i_angle > c_angle: + dart_half_angle = -dart_half_angle + elif dart_angle < c_angle: + #dart straddles 0 angle + dart_half_angle = -dart_half_angle + + fold_angle = i_angle + dart_half_angle + fold_pnt = intersectLineRay(dart.i, inside_pnt, dart, fold_angle) + dart.m = onLineAtLength(dart, mid_pnt, distance(dart, fold_pnt)) #dart midpoint at seamline + dart.oc = polar(dart, distance(dart, dart.o) + seam_allowance, angleOfLine(dart, dart.o)) #dart outside leg at cuttingline + dart.ic = extendLine(dart, dart.i, seam_allowance) #dart inside leg at cuttingline + #create or update dart.angles + dart.angle = angleOfVector(dart.i, dart, dart.o) + return + +#---base, pattern & patternpiece groups +def base(parent, id): + '''Create a base group to contain all patterns, parent should be the document''' + newBase = addGroup(parent, id) + newBase.set(inkex.addNS('label', 'inkscape'), id) + newBase.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newBase + +def pattern(parent, id): + '''Create a pattern group to hold a single pattern, parent should be the base group''' + newPattern = addGroup(parent, id) + newPattern.set(inkex.addNS('label', 'inkscape'), id) + newPattern.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newPattern + +def patternPiece(parent, id, name, fabric = 2, interfacing = 0, lining = 0): + '''Create a pattern piece group to hold a single pattern piece, parent should be a pattern group''' + newPatternPiece = addGroup(parent, id) + newPatternPiece.set(inkex.addNS('label', 'inkscape'), name) + newPatternPiece.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newPatternPiece + +#---svg + +def addCircle(parent, id, x, y, radius = 5, fill = 'red', stroke = 'red', stroke_width = '1', reference = 'false'): + '''create & write a circle to canvas & set it's attributes''' + circ = inkex.etree.SubElement(parent, inkex.addNS('circle', 'svg')) + circ.set('id', id) + circ.set('cx', str(x)) + circ.set('cy', str(y)) + circ.set('r', str(radius)) + circ.set('fill', fill) + circ.set('stroke', stroke) + circ.set('stroke-width', stroke_width) + if reference == 'true': + circ.attrib['reference'] = 'true' + return + +def addSquare(parent, id, w, h, x, y, reference='false'): + # create & write a square element, set its attributes + square = inkex.etree.SubElement(parent, inkex.addNS('rect', 'svg')) + square.set('id', id) + square.set('width', str(w)) + square.set('height', str(h)) + square.set('x', str(x)) + square.set('y', str(y)) + square.set('stroke', 'none') + square.set('fill', '#000000') + square.set('stroke-width', '1') + if (reference == 'true'): + square.attrib['reference'] = 'true' + return + +def addText(parent, id, x, y, text, fontsize = '12', textalign = 'left', textanchor = 'left', reference = 'false'): + '''Create a text element, set its attributes, then write to canvas. + The text element is different than other elements -- > Set attributes first then write to canvas using append method. + There is no inkex.etree.SubElement() method for creating a text element & placing it into the document in one step. + Use inkex's etree.Element() method to create an unattached text svg object, + then use a document object's append() method to place it on the document canvas''' + #create a text element with inkex's Element() + txt = inkex.etree.Element(inkex.addNS('text', 'svg')) + #set attributes of the text element + txt.set('id', id) + txt.set('x', str(x)) + txt.set('y', str(y)) + txt.text = text + style = {'text-align':textalign, 'text-anchor':textanchor, 'font-size':fontsize} + txt.set('style', formatStyle(style)) + if reference == 'true': + txt.attrib['reference'] = 'true' + #txt.setAttribute('reference', 'true') #alternative syntax + #add to canvas in the parent group + parent.append(txt) + return + +def addLayer(parent, id): + '''Create & write an inkscape group-layer to canvas''' + new_layer = inkex.etree.SubElement(parent, 'g') + new_layer.set('id', id) + new_layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + new_layer.set(inkex.addNS('label', 'inkscape'), '%s layer' % (id)) + return new_layer + +def addGroup(parent, id): + '''Create & write an svg group to canvas''' + new_layer = inkex.etree.SubElement(parent, 'g') + new_layer.set('id', id) + return new_layer + +def addPath(parent, id, path_str, path_type): + '''Accepts parent, id, path string, path type. Creates attribute dictionary. Creates & writes path.''' + reference = 'false' + if path_type == 'seamline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1', 'stroke-dasharray':'15, 5', 'stroke-dashoffset':'0'} + elif path_type == 'cuttingline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + elif path_type == 'gridline': + path_style = {'stroke':'gray', 'stroke-width':'4', 'fill':'none', 'opacity':'1', 'stroke-dasharray':'6, 6', 'stroke-dashoffset':'0'} + reference = 'true' + elif path_type == 'dartline': + path_style = {'stroke':'gray', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + elif path_type == 'grainline': + path_style = {'stroke':'DimGray', 'stroke-width':'3', 'fill':'none', 'opacity':'1', \ + 'marker-start':'url(#ArrowStart)', 'marker-end':'url(#ArrowEnd)'} + elif path_type == 'slashline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + svg_path = inkex.etree.SubElement(parent, inkex.addNS('path', 'svg')) + svg_path.set('id', id) + svg_path.set('d', path_str) + svg_path.set('style', formatStyle(path_style)) + if reference == 'true': + svg_path.attrib['reference'] = 'true' + return svg_path + +def formatPath( * args): + """ + Accepts a series of pseudo svg path arguments 'M', 'L', 'C' , and point objects. + Returns path_string which is a string formatted for use as the 'd' path attribute in an svg object. + """ + tokens = [] # initialize an empty array + # put all the parameters in * args into the array + for arg in args: + tokens.append(arg) + com = ', ' + path_string = '' + i = 0 + while (i < len(tokens)): + cmd = tokens[i] + if (cmd == 'M') or (cmd == 'L'): + path_string += " %s %g %g" % (cmd, tokens[i + 1].x, tokens[i + 1].y) + i = i + 2 + elif (cmd == 'C'): + path_string += " %s %g %g %g %g %g %g" % (cmd, tokens[i + 1].x, \ + tokens[i + 1].y, tokens[i + 2].x, tokens[i + 2].y, tokens[i + 3].x, tokens[i + 3].y) + i = i + 4 + return path_string + +def addDefs(doc): + '''Add defs group with markers to the document''' + defs = inkex.etree.SubElement(doc, inkex.addNS('defs', 'svg')) + #add start arrow + marker = inkex.etree.SubElement(defs, 'marker', {'id':'ArrowStart', 'orient':'auto', 'refX':'0.0', 'refY':'0.0', 'style':'overflow:visible'}) + inkex.etree.SubElement(marker, 'path', {'d':'M 0, 0 L 0, 5 L -20, 0 L 0, -5 z', 'style':'fill:DimGray; stroke:DimGray; stroke-width:0.5'}) + #add end arrow + marker = inkex.etree.SubElement(defs, 'marker', {'id':'ArrowEnd', 'orient':'auto', 'refX':'0.0', 'refY':'0.0', 'style':'overflow:visible'}) + inkex.etree.SubElement(marker, 'path', {'d':'M 0, 0 L 0, 5 L 20, 0 L 0, -5 z', 'style':'fill:DimGray; stroke:DimGray; stroke-width:0.5'}) + diff --git a/fablabchemnitz_shapereco.inx b/fablabchemnitz_shapereco.inx new file mode 100644 index 0000000..024d05b --- /dev/null +++ b/fablabchemnitz_shapereco.inx @@ -0,0 +1,50 @@ + + + <_name>Shape Recognition + fablabchemnitz.de.shapereco + fablabchemnitz_shapereco.py + inkex.py + + + + <_param name="title" type="description">Simple shape + recognition. From a selection of one or many path, find straight + lines, recognizes those parallel or with similar angles or + lenght. Recognizes rectangles, circle and ellipses. + false + true + + + + Segment extension + true + 0.03 + + + 0.5 + Merge aligned consecutive segments + true + Remove very small segments/sub-paths + true + + + + true + true + true + true + true + + + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_shapereco.py b/fablabchemnitz_shapereco.py new file mode 100644 index 0000000..6be58c8 --- /dev/null +++ b/fablabchemnitz_shapereco.py @@ -0,0 +1,1810 @@ +#!/usr/bin/env python +''' +Copyright (C) 2017 , Pierre-Antoine Delsart + +This file is part of InkscapeShapeReco. + +InkscapeShapeReco is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with InkscapeShapeReco; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +Quick description: +This extension uses all selected path, ignoring all other selected objects. +It tries to regularize hand drawn paths BY : + - evaluating if the path is a full circle or ellipse + - else finding sequences of aligned points and replacing them by a simple segment. + - changing the segments angles to the closest remarkable angle (pi/2, pi/3, pi/6, etc...) + - eqalizing all segments lengths which are close to each other + - replacing 4 segments paths by a rectangle object if this makes sens (giving the correct rotation to the rectangle). + +Requires numpy. + +''' + +import sys +sys.path.append('/usr/share/inkscape/extensions') +import inkex +import simplepath +import gettext +_ = gettext.gettext + + + + +import numpy +numpy.set_printoptions(precision=3) +# ************************************************************* +# a list of geometric helper functions +def toArray(parsedList): + """Interprets a list of [(command, args),...] + where command is a letter coding for a svg path command + args are the argument of the command + """ + interpretCommand = { + 'C' : lambda x, prevL : x[-2:], # bezier curve. Ignore the curve. + 'L' : lambda x, prevL : x[0:2], + 'M' : lambda x, prevL : x[0:2], + 'Z' : lambda x, prevL : prevL[0], + } + + points =[] + for i,(c, arg) in enumerate(parsedList): + #debug('toArray ', i, c , arg) + newp = interpretCommand[c](arg, points) + points.append( newp) + a=numpy.array( points ) + + # Some times we have points *very* close to each other + # these do not bring any meaning full info, so we remove them + # + x,y, w,h = computeBox(a) + sizeC = 0.5*(w+h) + #deltas = numpy.zeros((len(a),2) ) + deltas = a[1:] - a[:-1] + #deltas[-1] = a[0] - a[-1] + deltaD = numpy.sqrt(numpy.sum( deltas**2, 1 )) + sortedDind = numpy.argsort(deltaD) + # expand longuest segments + nexp = int(len(deltaD)*0.9) + newpoints=[ None ]*len(a) + medDelta = deltaD[sortedDind[len(deltaD)/2] ] + for i,ind in enumerate(sortedDind): + if deltaD[ind]/sizeC<0.005: continue + if i>nexp: + np = int(deltaD[ind]/medDelta) + pL = [a[ind]] + #print i,'=',ind,'adding ', np,' _ ', deltaD[ind], a[ind], a[ind+1] + for j in range(np-1): + f = float(j+1)/np + #print '------> ', (1-f)*a[ind]+f*a[ind+1] + pL.append( (1-f)*a[ind]+f*a[ind+1] ) + newpoints[ind] = pL + else: + newpoints[ind]=[a[ind]] + if(D(a[0],a[-1])/sizeC > 0.005 ) : + newpoints[-1]=[a[-1]] + + points = numpy.concatenate([p for p in newpoints if p!=None] ) + ## print ' medDelta ', medDelta, deltaD[sortedDind[-1]] + ## print len(a) ,' ------> ', len(points) + + rel_norms = numpy.sqrt(numpy.sum( deltas**2, 1 )) / sizeC + keep = numpy.concatenate([numpy.where( rel_norms >0.005 )[0],numpy.array([len(a)-1])]) + + #return a[keep] , [ parsedList[i] for i in keep] + #print len(a),' ',len(points) + return points , [] + +rotMat = numpy.matrix( [[1,-1],[1,1]] )/numpy.sqrt(2) +unrotMat = numpy.matrix( [[1,1],[-1,1]] )/numpy.sqrt(2) + +def setupKnownAngles(): + pi = numpy.pi + #l = [ i*pi/8 for i in range(0, 9)] +[ i*pi/6 for i in [1,2,4,5,] ] + l = [ i*pi/8 for i in range(0, 9)] +[ i*pi/6 for i in [1,2,4,5,] ] + [i*pi/12 for i in (1,5,7,11)] + knownAngle = numpy.array( l ) + return numpy.concatenate( [-knownAngle[:0:-1], knownAngle ]) +knownAngle = setupKnownAngles() + +_twopi = 2*numpy.pi +_pi = numpy.pi + +def deltaAngle(a1,a2): + d = a1 - a2 + return d if d > -_pi else d+_twopi + +def closeAngleAbs(a1,a2): + d = abs(a1 - a2 ) + return min( abs(d-_pi), abs( _twopi - d) , d) + +def deltaAngleAbs(a1,a2): + return abs(in_mPi_pPi(a1 - a2 )) + +def in_mPi_pPi(a): + if(a>_pi): return a-_twopi + if(a<-_pi): return a+_twopi + return a +vec_in_mPi_pPi = numpy.vectorize(in_mPi_pPi) +from numpy import sqrt + +def D2(p1, p2): + return ((p1-p2)**2).sum() + +def D(p1, p2): + return sqrt(D2(p1,p2) ) + +def norm(p): + return sqrt( (p**2).sum() ) + +def computeBox(a): + """returns the bounding box enclosing the array of points a + in the form (x,y, width, height) """ + xmin , ymin = a[:,0].min(), a[:,1].min() + xmax , ymax = a[:,0].max(), a[:,1].max() + + return xmin, ymin, xmax-xmin, ymax-ymin + +def dirAndLength(p1,p2): + #l = max(D(p1, p2) ,1e-4) + l = D(p1,p2) + uv = (p1-p2)/l + return l,uv + +def length(p1,p2): + return sqrt( D2(p1,p2) ) + +def barycenter(points): + """ + """ + return points.sum(axis=0)/len(points) + + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +# ************************************************************* +# Internal Objects +class Path(object): + """Private representation of a sequence of points. + A SVG node of type 'path' is splitted in several of these Path objects. + """ + next = None # next Path in the sequence of path corresponding to a SVG node + prev = None # previous Path in the sequence of path corresponding to a SVG node + sourcepoints = None # the full list of points from which this path is a subset + + normalv = None # normal vector to this Path + + def __init__(self, points): + """points an array of points """ + self.points = points + self.init() + + def init(self): + self.effectiveNPoints = len(self.points) + if self.effectiveNPoints>1: + self.length , self.univ = dirAndLength(self.points[0], self.points[-1]) + else: + self.length , self.univ = 0, numpy.array([0,0]) + if self.effectiveNPoints>0: + self.pointN=self.points[-1] + self.point1=self.points[0] + + def isSegment(self): + return False + + def quality(self): + return 1000 + + def dump(self): + n = len(self.points) + if n>0: + return 'path at '+str(self.points[0])+ ' to '+ str(self.points[-1])+' npoints=%d / %d (eff)'%(n,self.effectiveNPoints) + else: + return 'path Void !' + + def setNewLength(self, l): + self.newLength = l + + def removeLastPoints(self,n): + self.points = self.points[:-n] + self.init() + def removeFirstPoints(self,n): + self.points = self.points[n:] + self.init() + + def costheta(self,seg): + return self.unitv.dot(seg.unitv) + + def translate(self, tr): + """Translate this path by tr""" + self.points = self.points + tr + + def asSVGCommand(self, firstP=False): + svgCommands = [] + com = 'M' if firstP else 'L' + for p in self.points: + svgCommands.append( [com, [p[0], p[1]] ] ) + com='L' + return svgCommands + + + def setIntersectWithNext(self, next=None): + pass + + def mergedWithNext(self, newPath=None): + """ Returns the combination of self and self.next. + sourcepoints has to be set + """ + if newPath is None: newPath = Path( numpy.concatenate([self.points, self.next.points]) ) + + newPath.sourcepoints = self.sourcepoints + newPath.prev = self.prev + if self.prev : newPath.prev.next = newPath + newPath.next = self.next.next + if newPath.next: + newPath.next.prev = newPath + return newPath + +# ************************************************************* +# +class Segment(Path): + """ A segment. Defined by its line equation ax+by+c=0 and the points from orignal paths + it is ensured that a**2+b**2 = 1 + """ + QUALITYCUT = 0.9 + + newAngle = None # temporary angle set during the "parralelization" step + newLength = None # temporary lenght set during the "parralelization" step + + # Segment Builders + @staticmethod + def from2Points( p1, p2, refPoints = None): + dirV = p2-p1 + center = 0.5*(p2+p1) + return Segment.fromCenterAndDir(center, dirV, refPoints) + + @staticmethod + def fromCenterAndDir( center, dirV, refPoints=None): + b = dirV[0] + a = -dirV[1] + c = - (a*center[0]+b*center[1]) + + if refPoints is None: + refPoints = numpy.array([ center-0.5*dirV, center+0.5*dirV] ) + s = Segment( a, b, c, refPoints) + return s + + + def __init__(self, a,b,c, points, doinit=True): + """a,b,c: the line parameters. + points : the array of 2D points represented by this Segment + doinit : if true will compute additionnal parameters to this Segment (first/last points, unit vector,...) + """ + self.a = a + self.b = b + self.c = c + + self.points = points + d = numpy.sqrt(a**2+b**2) + if d != 1. : + self.a /= d + self.b /= d + self.c /= d + + if doinit : + self.init() + + + def init(self): + a,b,c = self.a, self.b, self.c + x,y = self.points[0] + self.point1 = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + x,y = self.points[-1] + self.pointN = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + uv = self.computeDirLength() + self.distancesToLine = self.computeDistancesToLine(self.points) + self.normalv = numpy.array( [ a, b ]) + + self.angle = numpy.arccos( uv[0] )*numpy.sign(uv[1] ) + + + def computeDirLength(self): + """re-compute and set unit vector and length """ + self.length , uv = dirAndLength(self.pointN, self.point1) + self.unitv = uv + return uv + + def isSegment(self): + return True + + def recomputeEndPoints(self): + a,b,c = self.a, self.b, self.c + x,y = self.points[0] + self.point1 = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + x,y = self.points[-1] + self.length = numpy.sqrt( D2(self.pointN, self.point1) ) + + def projectPoint(self,p): + """ return the point projection of p onto this segment""" + a,b,c = self.a, self.b, self.c + x,y = p + return numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + + + def intersect(self, seg): + """Returns the intersection of this line with the line seg""" + nu, nv = self.normalv, seg.normalv + u = numpy.array([[-self.c],[-seg.c]]) + doRotation = min(nu.min(),nv.min()) <1e-4 + if doRotation: + # rotate to avoid numerical issues + nu = numpy.array(rotMat.dot(nu))[0] + nv = numpy.array(rotMat.dot(nv))[0] + m = numpy.matrix( (nu, nv) ) + + i = (m**-1).dot(u) + i=numpy.array( i).swapaxes(0,1)[0] + debug(' intersection ' ,nu, nv, self.angle, seg.angle, ' --> ',i) + if doRotation: + i = unrotMat.dot(i).A1 + debug(' ' ,i) + + + return i + + def setIntersectWithNext(self, next=None): + """Modify self such as self.pointN is the intersection with next segment """ + if next is None: + next = self.next + if next and next.isSegment(): + if abs(self.normalv.dot(next.unitv)) < 1e-3: + return + debug(' Intersect',self, next, ' from ', self.point1, self.pointN, ' to ' ,next.point1, next.pointN,) + inter = self.intersect(next) + debug(' --> ', inter, ' d=', D(self.pointN, inter) ) + next.point1 = inter + self.pointN = inter + self.computeDirLength() + next.computeDirLength() + + def computeDistancesToLine(self, points): + """points: array of points. + returns the array of distances to this segment""" + return abs(self.a*points[:,0]+self.b*points[:,1]+self.c) + + + def distanceTo(self,point): + return abs(self.a*point[0]+self.b*point[1]+self.c) + + def inverse(self): + """swap all x and y values. """ + def inv(v): + v[0], v[1] = v[1] , v[0] + for v in [self.point1 , self.pointN , self.unitv, self.normalv]: + inv(v) + + self.points = numpy.roll(self.points,1,axis=1) + self.a, self.b = self.b, self.a + self.angle = numpy.arccos( self.unitv[0] )*numpy.sign(self.unitv[1] ) + return + + def dumpShort(self): + return 'seg '+' '+str(self.point1 )+'to '+str(self.pointN)+ ' npoints=%d | angle,offset=(%.2f,%.2f )'%(len(self.points),self.angle, self.c)+' ',self.normalv + + def dump(self): + v = self.variance() + n = len(self.points) + return 'seg '+str(self.point1 )+' , '+str(self.pointN)+ ' v/l=%.2f / %.2f = %.2f r*sqrt(n)=%.2f npoints=%d | angle,offset=(%.2f,%.2f )'%(v, self.length, v/self.length,v/self.length*numpy.sqrt(n) ,n , self.angle, self.c) + + def variance(self): + d = self.distancesToLine + return numpy.sqrt( (d**2).sum()/len(d) ) + + def quality(self): + n = len(self.points) + return min(self.variance()/self.length*numpy.sqrt(n) , 1000) + + def formatedSegment(self, firstP=False): + return self.asSVGCommand(firstP) + + def asSVGCommand(self, firstP=False): + + if firstP: + segment = [ ['M',[self.point1[0],self.point1[1] ] ], + ['L',[self.pointN[0],self.pointN[1] ] ] + ] + else: + segment = [ ['L',[self.pointN[0],self.pointN[1] ] ] ] + #debug("Segment, format : ", segment) + return segment + + def replaceInList(self, startPos, fullList): + code0 = fullList[startPos][0] + segment = [ [code0,[self.point1[0],self.point1[1] ] ], + ['L',[self.pointN[0],self.pointN[1] ] ] + ] + l = fullList[:startPos]+segment+fullList[startPos+len(self.points):] + return l + + + + + def mergedWithNext(self, doRefit=True): + """ Returns the combination of self and self.next. + sourcepoints has to be set + """ + spoints = numpy.concatenate([self.points,self.next.points]) + + if doRefit: + newSeg = fitSingleSegment(spoints) + else: + newSeg = Segment.fromCenterAndDir(barycenter(spoints), self.unitv, spoints) + + newSeg = Path.mergedWithNext(self, newSeg) + return newSeg + + + + def center(self): + return 0.5*(self.point1+self.pointN) + + def box(self): + return computeBox(self.points) + + + def translate(self, tr): + """Translate this segment by tr """ + c = self.c -self.a*tr[0] -self.b*tr[1] + self.c =c + self.pointN = self.pointN+tr + self.point1 = self.point1+tr + self.points +=tr + + def adjustToNewAngle(self): + """reset all parameters so that self.angle is change to self.newAngle """ + + self.a,self.b,self.c = parametersFromPointAngle( 0.5*(self.point1+self.pointN), self.newAngle) + + #print 'adjustToNewAngle ', self, self.angle, self.newAngle + self.angle = self.newAngle + self.normalv = numpy.array( [ self.a, self.b ]) + self.unitv = numpy.array( [ self.b, -self.a ]) + if abs(self.angle) > numpy.pi/2 : + if self.b > 0: self.unitv *= -1 + elif self.b<0 : self.unitv *= -1 + + self.point1 = self.projectPoint(self.point1) # reset point1 + if self.next is None or not self.next.isSegment(): + # move the last point (no intersect with next) + + pN = self.projectPoint(self.pointN) + dirN = pN - self.point1 + lN = length(pN, self.point1) + self.pointN = dirN/lN*self.length + self.point1 + #print ' ... adjusting last seg angle ',p.dump() , ' normalv=', p.normalv, 'unitv ', p.unitv + else: + self.setIntersectWithNext() + + def adjustToNewDistance(self): + self.pointN = self.newLength* self.unitv + self.point1 + self.length = self.newLength + + def tempLength(self): + if self.newLength : return self.newLength + else : return self.length + + def tempAngle(self): + if self.newAngle: return self.newAngle + return self.angle + + + + +# ************************************************************* +# ************************************************************* +# Groups of Path +# +class PathGroup(object): + """A group of Path representing one SVG node. + - a list of Path + - a list of SVG commands describe the full node (=SVG path element) + - a reference to the inkscape node object + + """ + listOfPaths = [] + refSVGPathList = [] + isClosing = False + refNode = None + + def __init__(self, listOfPaths, refSVGPathList, refNode=None, isClosing=False): + self.refNode = refNode + self.listOfPaths = listOfPaths + self.refSVGPathList = refSVGPathList + self.isClosing=isClosing + + def addToNode(self, node): + newList = reformatList( self.listOfPaths) + ele = addPath( newList , node) + debug("PathGroup ", newList) + return ele + + def setNodeStyle(self,ele, node): + style = node.get('style') + ele.set('style', style) + + + + @staticmethod + def toSegments(points, refSVGPathList, refNode, isClosing=False): + """ + """ + segs = [ Segment.from2Points(p, points[i+1], points[i:i+2] ) for (i,p) in enumerate(points[:-1]) ] + resetPrevNextSegment(segs) + return PathGroup( segs, refSVGPathList, refNode , isClosing) + +class TangentEnvelop(PathGroup): + """Specialization where the Path objects are all Segments and represent tangents to a curve """ + def addToNode(self, node): + newList = [ ] + for s in self.listOfPaths: + newList += s.asSVGCommand(firstP=True) + debug("TangentEnvelop ", newList) + ele = addPath( newList , node) + return ele + + def setNodeStyle(self,ele, node): + style = node.get('style')+';marker-end:url(#Arrow1Lend)' + style + ele.set('style', style) + + +class Circle(PathGroup): + """Specialization where the list of Path objects + is to be replaced by a Circle specified by a center and a radius. + + If an other radius 'rmax' is given than the object represents an ellipse. + """ + isClosing= True + def __init__(self, center, rad, refNode=None, rmax=None, angle=0.): + self.listOfPaths = [] + self.refNode = refNode + self.center = numpy.array(center) + self.radius = rad + if rmax: + self.type ='ellipse' + else: + self.type = 'circle' + self.rmax = rmax + self.angle = angle + + def addToNode(self, refnode): + """Add a node in the xml structure corresponding to this rect + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = inkex.etree.Element('{http://www.w3.org/2000/svg}'+self.type) + + ele.set('cx',str(self.center[0])) + ele.set('cy',str(self.center[1])) + if self.rmax: + ele.set('ry',str(self.radius)) + ele.set('rx',str(self.rmax)) + ele.set('transform', 'rotate(%3.2f,%f,%f)'%(numpy.degrees(self.angle),self.center[0],self.center[1])) + else: + ele.set('r',str(self.radius)) + refnode.xpath('..')[0].append(ele) + return ele + + +class Rectangle(PathGroup): + """Specialization where the list of Path objects + is to be replaced by a Rectangle specified by a center and size (w,h) and a rotation angle. + + """ + def __init__(self, center, size, angle, listOfPaths, refNode=None): + self.listOfPaths = listOfPaths + self.refNode = refNode + self.center = center + self.size = size + self.bbox = size + self.angle = angle + pos = self.center - numpy.array( size )/2 + if angle != 0. : + cosa = numpy.cos(angle) + sina = numpy.sin(angle) + self.rotMat = numpy.matrix( [ [ cosa, sina], [-sina, cosa] ] ) + self.rotMatstr = 'matrix(%1.7f,%1.7f,%1.7f,%1.7f,0,0)'%(cosa, sina, -sina, cosa) + + + #debug(' !!!!! Rotated rectangle !!', self.size, self.bbox, ' angles ', a, self.angle ,' center',self.center) + else : + self.rotMatstr = None + self.pos = pos + debug(' !!!!! Rectangle !!', self.size, self.bbox, ' angles ', self.angle ,' center',self.center) + + def addToNode(self, refnode): + """Add a node in the xml structure corresponding to this rect + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = inkex.etree.Element('{http://www.w3.org/2000/svg}rect') + self.fill(ele) + refnode.xpath('..')[0].append(ele) + return ele + + def fill(self,ele): + w, h = self.size + ele.set('width',str(w)) + ele.set('height',str(h)) + w, h = self.bbox + ele.set('x',str(self.pos[0])) + ele.set('y',str(self.pos[1])) + if self.rotMatstr: + ele.set('transform', 'rotate(%3.2f,%f,%f)'%(numpy.degrees(self.angle),self.center[0],self.center[1])) + #ele.set('transform', self.rotMatstr) + + @staticmethod + def isRectangle( pathGroup): + """Check if the segments in pathGroups can form a rectangle. + Returns a Rectangle or None""" + #print 'xxxxxxxx isRectangle',pathGroups + if isinstance(pathGroup, Circle ): return None + segmentList = [p for p in pathGroup.listOfPaths if p.isSegment() ]#or p.effectiveNPoints >0] + if len(segmentList) != 4: + debug( 'rectangle Failed at length ', len(segmentList)) + return None + a,b,c,d = segmentList + + if length(a.point1, d.pointN)> 0.2*(a.length+d.length)*0.5: + debug('rectangle test failed closing ', length(a.point1, d.pointN), a.length, d.length) + return None + + Aac , Abd = closeAngleAbs(a.angle,c.angle), closeAngleAbs(b.angle , d.angle) + if min(Aac,Abd) > 0.07 or max(Aac, Abd) >0.27 : + debug( 'rectangle Failed at angles', Aac, Abd) + return None + notsimilarL = lambda d1,d2: abs(d1-d2)>0.20*min(d1,d2) + + pi , twopi = numpy.pi,2*numpy.pi + angles = numpy.array( [p.angle for p in segmentList] ) + minAngleInd = numpy.argmin( numpy.minimum( abs(angles), abs( abs(angles)-pi), abs( abs(angles)-twopi) ) ) + rotAngle = angles[minAngleInd] + width = (segmentList[minAngleInd].length + segmentList[(minAngleInd+2)%4].length)*0.5 + height = (segmentList[(minAngleInd+1)%4].length + segmentList[(minAngleInd+3)%4].length)*0.5 + # set rectangle center as the bbox center + x,y,w,h = computeBox( numpy.concatenate( [ p.points for p in segmentList]) ) + r = Rectangle( numpy.array( [x+w/2, y+h/2]), (width, height), rotAngle, pathGroup.listOfPaths, pathGroup.refNode) + + debug( ' found a rectangle !! ', a.length, b.length, c.length, d.length ) + return r + + +# ************************************************************* +# Object manipulation functions + +def toRemarkableShape( group ): + """Test if PathGroup instance 'group' looks like a remarkable shape (ex: Rectangle). + if so returns a new shape instance else returns group unchanged""" + r = Rectangle.isRectangle( group ) + if r : return r + return group + + +def resetPrevNextSegment(segs): + for i, seg in enumerate(segs[:-1]): + s = segs[i+1] + seg.next = s + s.prev = seg + return segs + + +def fitSingleSegment(a): + xmin,ymin,w,h = computeBox(a) + inverse = w ', tangents ) + + if averaged: + # average over neighbours + avTan = numpy.array(tangents) + avTan[:-1] += tangents[1:] + avTan[1:] += tangents[:-1] + if isClosing: + tangents[0]+=tangents[-1] + tangents[1]+=tangents[0] + avTan *= 1./3 + if not isClosing: + avTan[0] *=1.5 + avTan[-1] *=1.5 + + return avTan + + +def clusterAngles(array, dAng=0.15): + """Cluster together consecutive angles with similar values (within 'dAng'). + array : flat array of angles + returns [ ..., (indi_0, indi_1),...] where each tuple are indices of cluster i + """ + N = len(array) + + closebyAng = numpy.zeros( (N,4) , dtype=int) + + for i,a in enumerate(array): + cb = closebyAng[i] + cb[0] =i + cb[2]=i + cb[3]=i + c=i-1 + # find number of angles within dAng in nearby positions + while c>-1: # indices below i + d=closeAngleAbs(a,array[c]) + if d>dAng: + break + cb[1]+=1 + cb[2]=c + c-=1 + c=i+1 + while cdAng: + break + cb[1]+=1 + cb[3]=c + c+=1 + closebyAng= closebyAng[numpy.argsort(closebyAng[:,1]) ] + + clusteredPos = numpy.zeros(N, dtype=int) + clusters = [] + for cb in reversed(closebyAng): + if clusteredPos[cb[0]]==1: + continue + # try to build a cluster + minI = cb[2] + while clusteredPos[minI]==1: + minI+=1 + maxI = cb[3] + while clusteredPos[maxI]==1: + maxI-=1 + for i in range(minI, maxI+1): + clusteredPos[i] = 1 + clusters.append( (minI, maxI) ) + + return clusters + + + + +def adjustAllAngles(paths): + for p in paths: + if p.isSegment() and p.newAngle is not None: + p.adjustToNewAngle() + # next translate to fit end points + tr = numpy.zeros(2) + for p in paths[1:]: + if p.isSegment() and p.prev.isSegment(): + tr = p.prev.pointN - p.point1 + debug(' translating ',p,' prev is', p.prev, ' ',tr, ) + p.translate(tr) + +def adjustAllDistances(paths): + for p in paths: + if p.isSegment() and p.newLength is not None: + p.adjustToNewDistance() + # next translate to fit end points + tr = numpy.zeros(2) + for p in paths[1:]: + if p.isSegment() and p.prev.isSegment(): + tr = p.prev.pointN - p.point1 + p.translate(tr) + + +def mergeConsecutiveParralels(segments): + ignoreNext=False + newList=[] + for s in segments: + if ignoreNext: + ignoreNext=False + continue + if not s.isSegment(): + newList.append(s) + continue + if s.next is None: + newList.append(s) + continue + if not s.next.isSegment(): + newList.append(s) + continue + d = closeAngleAbs(s.angle ,s.next.angle) + if d<0.001: + debug("merging ", s.angle ,s.next.angle ) + snew = s.mergedWithNext(doRefit=False) + ignoreNext=True + newList.append(snew) + else: + newList.append(s) + if len(segments)>len(newList): + debug("merged parallel ", segments , '-->', newList) + return newList + + + +##************************************** +## +class SegmentExtender: + """Extend Segments part of a list of Path by aggregating points from neighbouring Path objects. + + There are 2 concrete subclasses for extending forward and backward (due to technical reasons). + """ + + def __init__(self, relD, fitQ): + self.relD = relD + self.fitQ = fitQ + + def nextPaths(self,seg): + pL = [] + p = self.getNext(seg) # prev or next + while p : + if p.isSegment(): break + if p.mergedObj is None: break + pL.append(p) + p = self.getNext(p) + if pL==[]: + return [] + return pL + + def extend(self,seg): + nextPathL = self.nextPaths(seg) + debug('extend ',self.extDir, seg , nextPathL, seg.length , len(nextPathL)) + if nextPathL==[]: return seg + pointsToTest = numpy.concatenate( [p.points for p in nextPathL] ) + mergeD = seg.length*self.relD + #print seg.point1 , seg.pointN, pointsToTest + pointsToFit, addedPoints = self.pointsToFit(seg,pointsToTest , mergeD) + if len(pointsToFit)==0: + return seg + newseg = fitSingleSegment(pointsToFit) + if newseg.quality()>self.fitQ: # fit failed + return seg + debug( ' EXTENDING ! ', len(seg.points), len(addedPoints) ) + self.removePath(seg, newseg, nextPathL, addedPoints ) + newseg.points = pointsToFit + seg.mergedObj= newseg + newseg.sourcepoints = seg.sourcepoints + + return newseg + + @staticmethod + def extendSegments(segmentList, relD=0.03, qual=0.5): + """Perform Segment extension from list of Path segmentList + returns the updated list of Path objects""" + fwdExt = FwdExtender(relD, qual) + bwdExt = BwdExtender(relD, qual) + # tag all objects with an attribute pointing to the extended object + for seg in segmentList: + seg.mergedObj = seg # by default the extended object is self + # extend each segments, starting by the longest + for seg in sorted(segmentList, key = lambda s : s.length, reverse=True): + if seg.isSegment(): + newseg=fwdExt.extend(seg) + seg.mergedObj = bwdExt.extend(newseg) + # the extension procedure has marked as None the mergedObj + # which have been swallowed by an extension. + # filter them out : + updatedSegs=[seg.mergedObj for seg in segmentList if seg.mergedObj] + return updatedSegs + + +class FwdExtender(SegmentExtender): + extDir='Fwd' + def getNext(self, seg): + return seg.next + def pointsToFit(self, seg, pointsToTest, mergeD): + distancesToLine =abs(seg.a*pointsToTest[:,0]+seg.b*pointsToTest[:,1]+seg.c) + goodInd=len(pointsToTest) + for i,d in reversed(list(enumerate(distancesToLine))): + if d tomerge ', len(mList)) + if len(mList)<2: + delattr(seg, 'merged') + updatedSegs.append(seg) + continue + points= numpy.concatenate( [p.points for p in mList] ) + newseg = fitSingleSegment(points) + if newseg.quality()>q: + delattr(seg, 'merged') + updatedSegs.append(seg) + continue + for p in mList: + setattr(seg, 'merged',True) + newseg.sourcepoints = seg.sourcepoints + debug(' --> post merge qual = ', newseg.quality() , seg.pointN, ' --> ', newseg.pointN, newseg.angle) + newseg.prev = mList[0].prev + newseg.next = mList[-1].next + updatedSegs.append(newseg) + if not hasattr(segList[-1], 'merged') : updatedSegs.append( segList[-1]) + return updatedSegs + + + + +def parametersFromPointAngle(point, angle): + unitv = numpy.array([ numpy.cos(angle), numpy.sin(angle) ]) + ortangle = angle+numpy.pi/2 + normal = numpy.array([ numpy.cos(ortangle), numpy.sin(ortangle) ]) + genOffset = -normal.dot(point) + a, b = normal + return a, b , genOffset + + + +def addPath(newList, refnode): + """Add a node in the xml structure corresponding to the content of newList + newList : list of Segment or Path + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = inkex.etree.Element('{http://www.w3.org/2000/svg}path') + ele.set('d', simplepath.formatPath(newList)) + refnode.xpath('..')[0].append(ele) + return ele + +def reformatList( listOfPaths): + """ Returns a SVG paths list (same format as simplepath.parsePath) from a list of Path objects + - Segments in paths are added in the new list + - simple Path are retrieved from the original refSVGPathList and put in the new list (thus preserving original bezier curves) + """ + newList = [] + first = True + for seg in listOfPaths: + newList += seg.asSVGCommand(first) + first = False + return newList + + +def clusterValues( values, relS=0.1 , refScaleAbs='range' ): + """form clusters of similar quantities from input 'values'. + Clustered values are not necessarily contiguous in the input array. + Clusters size (that is max-min) is < relS*cluster_average """ + if len(values)==0: + return [] + if len(values.shape)==1: + sortedV = numpy.stack([ values , numpy.arange(len(values))] ,1) + else: + # Assume value.shape = (N,2) and index are ok + sortedV = values + sortedV = sortedV[ numpy.argsort(sortedV[:,0]) ] + + sortedVV = sortedV[:,0] + refScale = sortedVV[-1]-sortedVV[0] + #sortedVV += 2*min(sortedVV)) # shift to avoid numerical issues around 0 + + #print sortedVV + class Cluster: + def __init__(self, delta, sum, indices): + self.delta = delta + self.sum = sum + self.N=len(indices) + self.indices = indices + def size(self): + return self.delta/refScale + + def combine(self, c): + #print ' combine ', self.indices[0], c.indices[-1], ' -> ', sortedVV[c.indices[-1]] - sortedVV[self.indices[0]] + newC = Cluster(sortedVV[c.indices[-1]] - sortedVV[self.indices[0]], + self.sum+c.sum, + self.indices+c.indices) + return newC + + def originIndices(self): + return tuple(int(sortedV[i][1]) for i in self.indices) + + def size_local(self): + return self.delta / sum( sortedVV[i] for i in self.indices) *len(self.indices) + def size_range(self): + return self.delta/refScale + def size_abs(self): + return self.delta + + if refScaleAbs=='range': + Cluster.size = size_range + elif refScaleAbs=='local': + Cluster.size = size_local + elif refScaleAbs=='abs': + Cluster.size = size_abs + + class ClusterPair: + next=None + prev=None + def __init__(self, c1, c2 ): + self.c1=c1 + self.c2=c2 + self.refresh() + def refresh(self): + self.potentialC =self.c1.combine(self.c2) + self.size = self.potentialC.size() + def setC1(self, c1): + self.c1=c1 + self.refresh() + def setC2(self, c2): + self.c2=c2 + self.refresh() + + #ave = 0.5*(sortedVV[1:,0]+sortedV[:-1,0]) + #deltaR = (sortedV[1:,0]-sortedV[:-1,0])/ave + + cList = [Cluster(0,v,(i,)) for (i,v) in enumerate(sortedVV) ] + cpList = [ ClusterPair( c, cList[i+1] ) for (i,c) in enumerate(cList[:-1]) ] + resetPrevNextSegment( cpList ) + + #print cpList + def reduceCL( cList ): + if len(cList)<=1: + return cList + cp = min(cList, key=lambda cp:cp.size) + #print '==', cp.size , relS, cp.c1.indices , cp.c2.indices, cp.potentialC.indices + + while cp.size < relS: + if cp.next: + cp.next.setC1(cp.potentialC) + cp.next.prev = cp.prev + if cp.prev: + cp.prev.setC2(cp.potentialC) + cp.prev.next = cp.next + cList.remove(cp) + if len(cList)<2: + break + cp = min(cList, key=lambda cp:cp.size) + #print ' -----> ', [ (cp.c1.indices , cp.c2.indices) for cp in cList] + return cList + + cpList = reduceCL(cpList) + if len(cpList)==1: + cp = cpList[0] + if cp.potentialC.size() remove !', p, p.length , len(p.points)) + for p in paths: + if len(p.points)==0 : + remove(p) + continue + # select only path between 2 segments + next, prev = p.next, p.prev + if next is None: next = prev + if prev is None: prev = next + if not next.isSegment() or not prev.isSegment() : continue + #diag = getdiag(p.points) + diag ,w, h = getdiag(p.points) + + debug(p, p.pointN, ' removing edge diag = ', diag, p.length, ' l=',next.length+prev.length , 'totDim ', (wTot,hTot)) + debug( ' ---> ',prev, next) + + + # remove last or first very small in anycase + doRemove = prev==next and (diag < 0.05*(wTot+hTot)*0.5 ) + if not doRemove: + # check if this small + isLarge = diag > (next.length+prev.length)*0.1 # check size relative to neighbour + isLarge = isLarge or w > 0.2*wTot or h > 0.2*hTot # check size w.r.t total size + + # is it the small side of a long rectangle ? + dd = prev.distanceTo(next.pointN) + rect = abs(prev.unitv.dot(next.unitv))>0.98 and diag > dd*0.5 + doRemove = not( isLarge or rect ) + + if doRemove: + remove(p) + + if next != prev: + prev.setIntersectWithNext(next) + debug('removed Segments ', removeSeg) + for p in removeSeg: + paths.remove(p) + + + + + + def prepareParrallelize(self,segs): + """Group Segment by their angles (segments are grouped together if their deltAangle is within 0.15 rad) + The 'newAngle' member of segments in a group are then set to the mean angle of the group (where angles are all + considered in [-pi, pi]) + + segs : list of segments + """ + + angles = numpy.array([s.angle for s in segs ]) + angles[numpy.where(angles<0)] += _pi # we care about direction, not angle orientation + clList = clusterValues(angles, 0.15, refScaleAbs='abs') + + for cl in clList: + meanA = angles[list(cl)].mean() + for i in cl: + seg = segs[i] + seg.newAngle = meanA if seg.angle>=0. else meanA-_pi + + + def prepareDistanceEqualization(self,segs, relDelta=0.1): + """ Input segments are grouped according to their length : + - for each length L, find all other lengths within L*relDelta. of L. + - Find the larger of such subgroup. + - repeat the procedure on remaining lengths until none is left. + Each length in a group is set to the mean length of the group + + segs : a list of segments + relDelta : float, minimum relative distance. + """ + + lengths = numpy.array( [x.tempLength() for x in segs] ) + clusters = clusterValues(lengths) + + if len(clusters)==1: + # deal with special case with low num of segments + # --> don't let a single segment alone + if len(clusters[0])+1==len(segs): + clusters[0]=range(len(segs)) # all + + allDist = [] + for cl in clusters: + dmean = sum( lengths[i] for i in cl ) / len(cl) + allDist.append(dmean) + for i in cl: + segs[i].setNewLength(dmean) + debug( i,' set newLength ',dmean, segs[i].length, segs[i].dumpShort()) + + return allDist + + + def prepareRadiusEqualization(self, circles, otherDists, relSize=0.2): + """group circles radius and distances into cluster. + Then set circles radius according to the mean of the clusters they belong to.""" + ncircles = len(circles) + lengths = numpy.array( [c.radius for c in circles]+otherDists ) + indices = numpy.array( range(ncircles+len(otherDists) ) ) + clusters = clusterValues(numpy.stack([ lengths, indices ],1 ), relSize, refScaleAbs='local' ) + + debug('prepareRadiusEqualization radius ', repr(lengths)) + debug('prepareRadiusEqualization clusters ', clusters) + allDist = [] + for cl in clusters: + dmean = sum( lengths[i] for i in cl ) / len(cl) + #print cl , dmean , + allDist.append(dmean) + if len(cl)==1: + continue + for i in cl: + if i< ncircles: + circles[i].radius = dmean + debug(' post radius ',[c.radius for c in circles] ) + return allDist + + + def centerCircOnSeg(self, circles, segments, relSize=0.18): + """ move centers of circles onto the segments if close enough""" + for circ in circles: + circ.moved = False + for seg in segments: + for circ in circles: + d = seg.distanceTo(circ.center) + #debug( ' ', seg.projectPoint(circ.center)) + if d < circ.radius*relSize and not circ.moved : + circ.center = seg.projectPoint(circ.center) + circ.moved = True + + + def adjustToKnownAngle(self, paths): + """ Check current angle against remarkable angles. If close enough, change it + paths : a list of segments""" + for seg in paths: + a = seg.tempAngle() + i = (abs(vec_in_mPi_pPi(knownAngle - a) )).argmin() + seg.newAngle = knownAngle[i] + debug( ' Known angle ', seg, seg.tempAngle(),' -> ', knownAngle[i]) + ## if abs(knownAngle[i] - a) < 0.08: + + + + def checkForCircle(self, points, tangents): + """Determine if the points and their tangents represent a circle + + The difficulty is to be able to recognize ellipse while avoiding paths small fluctuations a + nd false positive due to badly drawn rectangle or non-convex closed curves. + + Method : we consider angle of tangent as function of lenght on path. + For circles these are : angle = c1 x lenght + c0. (c1 ~1) + + We calculate dadl = d(angle)/d(length) and compare to c1. + We use 3 criteria : + * num(dadl > 6) : number of sharp angles + * length(dadl<0.3)/totalLength : lengths of straight lines within the path. + * totalLength/(2pi x radius) : fraction of lenght vs a plain circle + + Still failing to recognize elongated ellipses... + + """ + if len(points)<10: + return False, 0 + + if all(points[0]==points[-1]): # last exactly equals the first. + # Ignore last point for this check + points = points[:-1] + tangents = tangents[:-1] + #print 'Removed last ', points + xmin,ymin, w, h = computeBox( points) + diag2=(w*w+h*h) + + diag = sqrt(diag2)*0.5 + norms = numpy.sqrt(numpy.sum( tangents**2, 1 )) + + angles = numpy.arctan2( tangents[:,1], tangents[:,0] ) + #debug( 'angle = ', repr(angles)) + N = len(angles) + + deltas = points[1:] - points[:-1] + deltasD = numpy.concatenate([ [D(points[0],points[-1])/diag], numpy.sqrt(numpy.sum( deltas**2, 1 )) / diag] ) + + # locate and avoid the point when swicthing + # from -pi to +pi. The point is around the minimum + imin = numpy.argmin(angles) + debug(' imin ',imin) + angles = numpy.roll(angles, -imin) + deltasD = numpy.roll(deltasD, -imin) + n=int(N*0.1) + # avoid fluctuations by removing points around the min + angles=angles[n:-n] + deltasD=deltasD[n:-n] + deltasD = deltasD.cumsum() + N = len(angles) + + # smooth angles to avoid artificial bumps + angles = smoothArray(angles, n=max(int(N*0.03),2) ) + + deltaA = angles[1:] - angles[:-1] + deltasDD = (deltasD[1:] -deltasD[:-1]) + deltasDD[numpy.where(deltasDD==0.)] = 1e-5*deltasD[0] + dAdD = abs(deltaA/deltasDD) + belowT, count = True,0 + for v in dAdD: + if v>6 and belowT: + count+=1 + belowT = False + belowT= (v<6) + + self.temp = (deltasD,angles, tangents, dAdD ) + fracStraight = numpy.sum(deltasDD[numpy.where(dAdD<0.3)])/(deltasD[-1]-deltasD[0]) + curveLength = deltasD[-1]/3.14 + #print "SSS ",count , fracStraight + if curveLength> 1.4 or fracStraight>0.4 or count > 6: + isCircle =False + else: + isCircle= (count < 4 and fracStraight<=0.3) or \ + (fracStraight<=0.1 and count<5) + + if not isCircle: + return False, 0 + + # It's a circle ! + radius = points - numpy.array([xmin+w*0.5,ymin+h*0.5]) + radius_n = numpy.sqrt(numpy.sum( radius**2, 1 )) # normalize + + mini = numpy.argmin(radius_n) + rmin = radius_n[mini] + maxi = numpy.argmax(radius_n) + rmax = radius_n[maxi] + # void points around maxi and mini to make sure the 2nd max is found + # on the "other" side + n = len(radius_n) + radius_n[maxi]=0 + radius_n[mini]=0 + for i in range(1,n/8+1): + radius_n[(maxi+i)%n]=0 + radius_n[(maxi-i)%n]=0 + radius_n[(mini+i)%n]=0 + radius_n[(mini-i)%n]=0 + radius_n_2 = [ r for r in radius_n if r>0] + rmax_2 = max(radius_n_2) + rmin_2 = min(radius_n_2) # not good !! + anglemax = numpy.arccos( radius[maxi][0]/rmax)*numpy.sign(radius[maxi][1]) + return True, (xmin+w*0.5,ymin+h*0.5, 0.5*(rmin+rmin_2), 0.5*(rmax+rmax_2), anglemax) + + + + + def tangentEnvelop(self, svgCommandsList, refNode): + a, svgCommandsList = toArray(svgCommandsList) + tangents = buildTangents(a) + + newSegs = [ Segment.fromCenterAndDir( p, t ) for (p,t) in zip(a,tangents) ] + debug("build envelop ", newSegs[0].point1 , newSegs[0].pointN) + clustersInd = clusterAngles( [s.angle for s in newSegs] ) + debug("build envelop cluster: ", clustersInd) + + return TangentEnvelop( newSegs, svgCommandsList, refNode) + + + def segsFromTangents(self,svgCommandsList, refNode): + """Finds segments part in a list of points represented by svgCommandsList. + + The method is to build the (averaged) tangent vectors to the curve. + Aligned points will have tangent with similar angle, so we cluster consecutive angles together + to define segments. + Then we extend segments to connected points not already part of other segments. + Then we merge consecutive segments with similar angles. + + """ + sourcepoints, svgCommandsList = toArray(svgCommandsList) + + d = D(sourcepoints[0],sourcepoints[-1]) + x,y,wTot,hTot = computeBox(sourcepoints) + aR = min(wTot/hTot, hTot/wTot) + maxDim = max(wTot, hTot) + isClosing = aR*0.2 > d/maxDim + debug('isClosing ', isClosing, maxDim, d) + if d==0: + # then we remove the last point to avoid null distance + # in other calculations + sourcepoints = sourcepoints[:-1] + svgCommandsList = svgCommandsList[:-1] + + if len(sourcepoints) < 4: + return PathGroup.toSegments(sourcepoints, svgCommandsList, refNode, isClosing=isClosing) + + tangents = buildTangents(sourcepoints, isClosing=isClosing) + + # global quantities : + + # Check if circle ----------------------- + if isClosing: + if len(sourcepoints)<9: + return PathGroup.toSegments(sourcepoints, svgCommandsList, refNode, isClosing=True) + isCircle, res = self.checkForCircle( sourcepoints, tangents) + debug("Is Circle = ", isCircle ) + if isCircle: + x,y,rmin, rmax,angle = res + debug("Circle -> ", rmin, rmax,angle ) + if rmin/rmax>0.7: + circ = Circle((x,y),0.5*(rmin+rmax), refNode ) + else: + circ = Circle((x,y),rmin, refNode, rmax=rmax, angle=angle) + circ.points = sourcepoints + return circ + # ----------------------- + + + + # cluster points by angle of their tangents ------------- + tgSegs = [ Segment.fromCenterAndDir( p, t ) for (p,t) in zip(sourcepoints,tangents) ] + clustersInd = clusterAngles( [s.angle for s in tgSegs] ) + clustersInd.sort( ) + debug("build envelop cluster: ", clustersInd) + + # build Segments from clusters + newSegs = [] + for imin, imax in clustersInd: + if imin+1< imax: # consider clusters with more than 3 points + seg = fitSingleSegment(sourcepoints[imin:imax+1]) + elif imin+1==imax: # 2 point path : we build a segment + seg = Segment.from2Points(sourcepoints[imin], sourcepoints[imax] , sourcepoints[imin:imax+1]) + else: + seg = Path( sourcepoints[imin:imax+1] ) + seg.sourcepoints = sourcepoints + newSegs.append( seg ) + resetPrevNextSegment( newSegs ) + debug(newSegs) + # ----------------------- + + + # ----------------------- + # Merge consecutive Path objects + updatedSegs=[] + def toMerge(p): + l=[p] + setattr(p, 'merged', True) + if p.next and not p.next.isSegment(): + l += toMerge(p.next) + return l + + for i,seg in enumerate(newSegs[:-1]): + if seg.isSegment(): + updatedSegs.append( seg) + continue + if hasattr(seg,'merged'): continue + mergeList = toMerge(seg) + debug('merging ', mergeList) + p = Path(numpy.concatenate([ p.points for p in mergeList]) ) + debug('merged == ', p.points) + updatedSegs.append(p) + + if not hasattr(newSegs[-1],'merged'): updatedSegs.append( newSegs[-1]) + debug("merged path", updatedSegs) + newSegs = resetPrevNextSegment( updatedSegs ) + + + # Extend segments ----------------------------------- + if self.options.segExtensionEnable: + newSegs = SegmentExtender.extendSegments( newSegs, self.options.segExtensionDtoSeg, self.options.segExtensionQual ) + debug("extended segs", newSegs) + newSegs = resetPrevNextSegment( newSegs ) + debug("extended segs", newSegs) + + # ---------------------------------------- + + + # --------------------------------------- + # merge consecutive segments with close angle + updatedSegs=[] + + if self.options.segAngleMergeEnable: + newSegs = mergeConsecutiveCloseAngles( newSegs , mangle=0.2 ) + newSegs=resetPrevNextSegment(newSegs) + debug(' __ 2nd angle merge') + newSegs = mergeConsecutiveCloseAngles( newSegs, mangle=0.35 ) # 2nd pass + newSegs=resetPrevNextSegment(newSegs) + debug('after merge ', len(newSegs), newSegs) + # Check if first and last also have close angles. + if isClosing and len(newSegs)>2 : + first ,last = newSegs[0], newSegs[-1] + if first.isSegment() and last.isSegment(): + if closeAngleAbs( first.angle, last.angle) < 0.1: + # force merge + points= numpy.concatenate( [ last.points, first.points] ) + newseg = fitSingleSegment(points) + newseg.next = first.next + last.prev.next = None + newSegs[0]=newseg + newSegs.pop() + + # ----------------------------------------------------- + # remove negligible Path/Segments between 2 large Segments + if self.options.segRemoveSmallEdge: + self.removeSmallEdge(newSegs , wTot, hTot) + newSegs=resetPrevNextSegment(newSegs) + + debug('after remove small ', len(newSegs),newSegs) + # ----------------------------------------------------- + + # ----------------------------------------------------- + # Extend segments to their intersections + for p in newSegs: + if p.isSegment() and p.next: + p.setIntersectWithNext() + # ----------------------------------------------------- + + return PathGroup(newSegs, svgCommandsList, refNode, isClosing) + + + + def extractShapesFromID( self, *nids, **options ): + """for debugging purpose """ + eList = [] + for nid in nids: + el = self.getElementById(nid) + if el is None: + print "Cant find ", nid + return + eList.append(el) + class tmp: + pass + + self.options = self.OptionParser.parse_args()[0] + self.options._update_careful(options) + nodes=self.extractShapes(eList) + self.shape = nodes[0] + + + def buildShape(self, node): + def rotationAngle(tr): + if tr and tr.startswith('rotate'): + # retrieve the angle : + return float(tr[7:-1].split(',')) + else: + return 0. + + if node.tag.endswith('path'): + parsedSVGCommands = node.get('d') + g = self.segsFromTangents(simplepath.parsePath(parsedSVGCommands), node) + #g = self.tangentEnvelop(simplepath.parsePath(parsedSVGCommands), node) + elif node.tag.endswith('rect'): + tr = node.get('transform',None) + if tr and tr.startswith('matrix'): + return None # can't deal with scaling + recSize = numpy.array([node.get('width'),node.get('height')]) + recCenter = numpy.array([node.get('x'),node.get('y')]) + recSize/2 + angle=rotationAngle(tr) + g = Rectangle( recSize, recCenter, 0 , [], node) + elif node.tag.endswith('circle'): + g = Circle(node.get('cx'),node.get('cy'), node.get('r'), [], node ) + elif node.tag.endswith('ellipse'): + if tr and tr.startswith('matrix'): + return None # can't deal with scaling + angle=rotationAngle(tr) + rx = node.get('rx') + ry = node.get('ry') + g = Circle(node.get('cx'),node.get('cy'), ry, rmax=rx , angle=angle, refNode=node ) + + return g + + def extractShapes( self, nodes ): + """The main function. + nodes : a list of nodes""" + analyzedNodes = [] + + # convert nodes to list of segments (PathGroup) or Circle + for n in nodes : + g = self.buildShape(n) + if g : + analyzedNodes.append( g ) + + # uniformize shapes + if self.options.doUniformization: + analyzedNodes = self.uniformizeShapes(analyzedNodes) + + return analyzedNodes + + + def uniformizeShapes(self, pathGroupList): + allSegs = [ p for g in pathGroupList for p in g.listOfPaths if p.isSegment() ] + + if self.options.doParrallelize: + self.prepareParrallelize(allSegs) + if self.options.doKnownAngle: + self.adjustToKnownAngle(allSegs) + + adjustAng = self.options.doKnownAngle or self.options.doParrallelize + for group in pathGroupList: + # first pass : independently per path + if adjustAng: + adjustAllAngles(group.listOfPaths) + group.listOfPaths[:] = mergeConsecutiveParralels(group.listOfPaths) + if self.options.doEqualizeDist: + self.prepareDistanceEqualization([p for p in group.listOfPaths if p.isSegment()], 0.12) + adjustAllDistances(group.listOfPaths) + ## # then 2nd global pass, with tighter criteria + if self.options.doEqualizeDist: + allShapeDist=self.prepareDistanceEqualization(allSegs, 0.05) + for group in pathGroupList: + adjustAllDistances(group.listOfPaths) + else: + allShapeDist = [] + + for g in pathGroupList: + if g.isClosing and not isinstance(g,Circle): + debug('Closing intersec ', g.listOfPaths[0].point1, g.listOfPaths[0].pointN ) + g.listOfPaths[-1].setIntersectWithNext(g.listOfPaths[0]) + + + circles=[ group for group in pathGroupList if isinstance(group, Circle)] + if self.options.doEqualizeRadius: + self.prepareRadiusEqualization(circles, allShapeDist) + if self.options.doCenterCircOnSeg: + self.centerCircOnSeg(circles, allSegs) + + pathGroupList = [toRemarkableShape(g) for g in pathGroupList] + return pathGroupList + + + def addShapesToDoc(self, pathGroupList): + for group in pathGroupList: + debug("final ", group.listOfPaths, group.refNode ) + # change to Rectangle if possible : + #finalshape = toRemarkableShape( group ) + ele = group.addToNode( group.refNode) + group.setNodeStyle(ele, group.refNode) + if not self.options.keepOrigin: + group.refNode.xpath('..')[0].remove(group.refNode) + + + +if __name__ == '__main__': + e = ShapeReco() + e.affect() diff --git a/fablabchemnitz_shapes.inx b/fablabchemnitz_shapes.inx new file mode 100644 index 0000000..6a73b07 --- /dev/null +++ b/fablabchemnitz_shapes.inx @@ -0,0 +1,94 @@ + + + <_name>Shapes + fablabchemnitz.de.shapes + org.inkscape.output.svg.inkscape + fablabchemnitz_shapes.py + inkex.py + Create shapes using the bounding box +of the selected objects + + + + <_item value="rombus">Rombus + <_item value="chamfer">Chamfer + <_item value="chamferinv">Chamfer inverse + <_item value="rect">Rect inside + <_item value="round">Round inside + <_item value="roundinv">Round inside inverse + <_item value="cross">Cross + <_item value="starcenter">Star from center + <_item value="starcorners">Star from corners + <_item value="crosscornersquad">Crossed corners quads + <_item value="crosscornerstri">Crossed corners tris + <_item value="crosscornersround">Crossed corners round + + 20 + + + + <_item value="isosceles">Isosceles + <_item value="equi">Equilateral + <_item value="rect">Rectangle + + false + false + + + + <_item value="tri">Triangle + <_item value="trirect">Rectangle + <_item value="squ">Square + <_item value="rnd">Rounded + <_item value="wav">Wave + + + <_item value="out">Outside + <_item value="ins">Inside + <_item value="alt">Alternate + + 2.0 + 0.0 + + + + <_item value="arrowfilled">Filled + <_item value="arrowstick">Stick + + 20.0 + 40.0 + 10.0 + + + + <_item value="trapecio">Rect + <_item value="blob">Blob + <_item value="oval">Oval + + 0.0 + Need to perform boolean operations. + + + 0.0 + + px + pt + in + cm + mm + + false + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_shapes.py b/fablabchemnitz_shapes.py new file mode 100644 index 0000000..954e711 --- /dev/null +++ b/fablabchemnitz_shapes.py @@ -0,0 +1,516 @@ +#!/usr/bin/env python +''' +shapes.py + +Copyright (C) 2015-2017 Paco Garcia, www.arakne.es + +2017_07_30: added crossed corners + copy class of original object if exists +2017_08_09: rombus moved to From corners tab +2017_08_17: join circles not need boolen operations now + join circles added Oval +2017_08_25: fixed error in objects without style + in oval sets the minimal radius necessary + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +----------------------- + +''' +import locale, os, sys, tempfile, webbrowser, math +try: + from subprocess import Popen, PIPE + bsubprocess = True +except: + bsubprocess = False + +import inkex, simplestyle, simpletransform +from fablabchemnitz_arakne_xy import * + +defStyle = [['stroke-width','0.5'],['fill','#f0ff00'],['stroke','#ff0000']] + +locale.setlocale(locale.LC_ALL, '') + +class Shapes(inkex.Effect): + def addOpt(self, name, Type="string", Default=""): + self.OptionParser.add_option("--" + name, action="store", type=Type, dest=name, default=Default, help="") + + def __init__(self): + inkex.Effect.__init__(self) + sOP = self.OptionParser + self.addOpt("tab") + self.addOpt("chamfertype") + sOP.add_option("--size", action="store", type="float", dest="size", default="20", help="" ) + sOP.add_option("--incdec", action="store", type="float", dest="incdec", default="0", help="" ) + sOP.add_option("--tritype", action="store", type="string", dest="tritype", default="", help="" ) + self.addOpt("spikestype") + self.addOpt("spikesdir") + self.addOpt("unit") + sOP.add_option("--spikesize", action="store", type="float", dest="spikesize", default="2.0", help="" ) + sOP.add_option("--spikesep", action="store", type="float", dest="spikesep", default="0.0", help="" ) + sOP.add_option("--arrowtype", action="store", type="string", dest="arrowtype", default="", help="" ) + sOP.add_option("--headWidth", action="store", type="float", dest="headWidth", default="20.0", help="" ) + sOP.add_option("--headHeight", action="store", type="float", dest="headHeight", default="40.0", help="" ) + sOP.add_option("--arrowWidth", action="store", type="float", dest="arrowWidth", default="10.0", help="" ) + self.addOpt("squareselection", "inkbool", "false") + self.addOpt("trihside", "inkbool", "false") + self.addOpt("trivside", "inkbool", "false") + self.addOpt("copyfill", "inkbool", "false") + #sOP.add_option("--copyfill", action="store", type="inkbool", dest="copyfill", default="false", help="" ) + sOP.add_option("--deleteorigin", action="store", type="inkbool", dest="deleteorigin", default="false", help="" ) + sOP.add_option("--joincirctype", action="store", type="string", dest="joincirctype", default="", help="" ) + sOP.add_option("--joinradius", action="store", type="float", dest="joinradius", default="0.0", help="" ) + + def getU(self, val): + return self.unittouu( str(val) + self.options.unit ) + + def addEle(self, ele, parent, props): + elem = inkex.etree.SubElement(parent, ele) + for n in props: elem.set(n,props[n]) + return elem + + def chStyles(self,node,sty): + style = simplestyle.parseStyle(node.get('style')) + for n in sty: + if style.has_key(n[0]): style.pop(n[0], None) + if n[1]!="": style[n[0]]=n[1] + node.set('style',simplestyle.formatStyle(style)) + + def unit2uu(self, val): + if hasattr(self,"unittouu") is True: + return self.unittouu(val) + else: + return inkex.unittouu(val) + + def limits(self, node): + s = simpletransform.computeBBox([node]) + l,r,t,b = (s[0],s[1],s[2],s[3]) + an,al = (r - l, b - t) + incdec = self.getU(self.options.incdec) + l, t, r, b, an, al = (l - incdec, t - incdec, r + incdec, b + incdec, an + incdec*2, al + incdec*2) + return (l,r,t,b,an,al) + + def estilo(self, nn, orig, style=defStyle): + if self.options.copyfill: + if orig.get('style'): + nn.set("style", orig.get('style')) + if orig.get('class'): + nn.set("class", orig.get('class')) + else: + self.chStyles(nn,style) + + def circleABCD(self,p,r,abcd="ABCD",inverse=False,xtra=None): + aa = r * 0.551915024494 + parts={ + 'A':[XY(0,-r),XY(aa,-r), XY(r, -aa),XY(r,0)], + 'B':[XY(r,0), XY(r, aa), XY(aa, r),XY(0,r)], + 'C':[XY(0,r), XY(-aa,r), XY(-r, aa),XY(-r,0)], + 'D':[XY(-r,0),XY(-r,-aa),XY(-aa,-r),XY(0,-r)]} + #pA = parts[abcd[0]] + pA = [XY(p)+N for N in parts[abcd[0]]] + for aa in abcd[1:]: + pA = pA + [XY(p)+N for N in parts[aa][1:]] + if inverse==True: pA.reverse() + listA = XYList(pA) + if xtra: + for n in xtra: + listA[n].extend(xtra[n]) + return listA + + def draw(self, node, sh='"rombus"'): + #inkex.errormsg(sh) + sO = self.options + l, r, t, b, an, al = self.limits(node) + sqSel = sO.squareselection + copyfill = sO.copyfill + deleteorigin=sO.deleteorigin + + side = min(al,an) + if sqSel: + incx=(an-side)/2.0 + l,r,an =(l+incx,r-incx,side) + incy=(al-side)/2.0 + t +=incy + b -=incy + al = side + cX, cY = (an/2.0,al/2.0) + + pp = node.getparent() + varBez = 0.551915024494 + a = self.getU(sO.size) + a_2, a2 = (a / 2.0,a * 2.0) + dS = "m %sz" + pnts = [[l+cX,t],[cX,cY],[-cX,cY],[-cX,-cY]] + aa = a * varBez + chtype=sO.chamfertype + tritype=sO.tritype + if sh=='"chamfer"': + an2, al2 = ((an-a)/2.0,(al-a)/2.0) + if chtype=="rombus" and a>0: + pnts=[[l+cX - a_2,t],[a,0],[an2,al2],[0,a],[-an2,al2],[-a,0],[-an2,-al2],[0,-a]] + if chtype=="chamfer": + pnts=[[l+a,t],[an - a2,0],[a,a],[0,al-a2],[-a,a],[-(an - a2),0],[-a,-a],[0,-(al-a2)]] + if chtype=="chamferinv": + pnts=[[l,t],[a,0],[-a,a],[an-a,0," z m"],[a,0],[0,a],[a,al," z m"],[0,-a],[-a,a],[-an+a,0," z m"],[-a,-a],[0,a]] + if chtype=="round": + pnts = circQ(XY(l,t),a,"B",0,{1:"C"}) + circQ(XY(l,b),a,"A",0,{0:"L",1:"C"}) + circQ(XY(r,b),a,"D",0,{0:"L",1:"C"}) + circQ(XY(r,t),a,"C",0,{0:"L",1:"C"}) + if chtype=="roundinv": + pnts=[[l,t],[a,0],[0,aa,"c "],[-aa,a],[-a,a],[an-a,0,"z m "],[a,0],[0,a],[-aa,0," c"],[-a,-aa],[-a,-a], + [a,al-a,"z m "],[0,a],[-a,0],[0,-aa,"c "],[aa,-a],[a,-a],[-an,0,"z m "],[0,a],[a,0],[0,-aa,"c "],[-aa,-a],[-a,-a]] + if chtype=="rect": + pnts=[[l+a,t],[an - a2,0],[0,a],[a,0],[0,al-a2],[-a,0],[0,a],[-(an-a2),0],[0,-a],[-a,0],[0,-(al-a2)],[a,0]] + if chtype=="cross": + pnts=[[l+an2,t],[a,0],[0,al2],[an2,0],[0,a],[-an2,0],[0,al2],[-a,0],[0,-al2],[-an2,0],[0,-a],[an2,0]] + if chtype=="starcorners": + pnts=[[l,t],[cX,al2],[cX,-al2],[-an2,cY],[an2,cY],[-cX,-al2],[-cX,al2],[an2,-cY]] + if chtype=="starcenter": + pnts=[[l+cX,t],[a_2,al2], [an2,a_2], [-an2,a_2],[-a_2,al2],[-a_2,-al2],[-an2,-a_2],[an2,-a_2]] + if chtype=="crosscornersquad": + pnts=[[l-a,t],[0,-a],[a,0],[0,al+a*2],[-a,0],[0,-a],[an+a*2,0],[0,a],[-a,0],[0,-al-a*2],[a,0],[0,a]] + if chtype=="crosscornerstri": + pnts=[[l-a,t],[a,-a],[0,al+a*2],[-a,-a],[an+a*2,0],[-a,a], [0,-al-a*2],[a,a]] + if chtype=="crosscornersround": + dS = "M %sZ" + aa2 = a_2 * varBez + p1 = circQ(XY(r + a_2, t - a_2),a_2,"DAB",1) + p2 = circQ(XY(r + a_2, b + a_2),a_2,"ABC",1) + p3 = circQ(XY(l - a_2, b + a_2),a_2,"BCD",1) + p4 = circQ(XY(l - a_2, t - a_2),a_2,"CDA",1) + pnts = p1 + [[r,t],[r,b+a_2-aa2]] + p2 + [[r+a_2-aa2,b],[l-a_2+aa2,b]] + p3 + [[l,b+a_2-aa],[l,t-a_2+aa]] + p4 + pnts[1].append(" C") + + if sh=='"triangles"': + trihside, trivside=(sO.trihside, sO.trivside) + if tritype=="isosceles": pnts=[[l+cX,t],[cX,al],[-an,0]] + if tritype=="equi": + sqrt3 = 1.7320508075 + height = sqrt3/2*side + tcx, tcy = ((an - side)/2.0, (al - height)/2.0) + pnts=[[cX+l,t+tcy],[an/2.0-tcx,height],[-side,0]] + if tritype=="rect": + x1 = l + tern(not trivside and trihside,an,0) + x2 = tern(not trivside and trihside,0,an) + x3 = tern(trivside and trihside,0,-an) + pnts=[[x1,t],[x2,tern(not trivside,al,0)],[x3,tern(not trivside,0,al)]] + if sh=='"spikes"': + spikestype = sO.spikestype + spikesdir = sO.spikesdir + ssep = self.getU(sO.spikesep) + ss = self.getU(sO.spikesize) + anX, anY = (int( (an+ssep) / (ss * 2 + ssep)), int( (al+ssep) / (ss * 2 + ssep))) + iniX, iniY = (((an+ssep) - (anX * (ss * 2 + ssep))) / 2.0, ((al+ssep) - (anY * (ss * 2 + ssep))) / 2.0) + dir = 1 + pnts = [[l,t],[iniX,0]] + if spikesdir=='ins': dir = -1.0 + if spikestype=="tri": + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[ss,-ss*dir],[ss,ss*dir]]) + if ssep>0 and n < (anX-1): pnts.append([ssep,0]) + pnts.extend([[iniX,0],[0,iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[ss * dir,ss],[-ss * dir,ss]]) + if ssep>0 and n < (anY-1): pnts.append([0, ssep]) + pnts.extend([[0,iniY],[-iniX,0]]) + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-ss,ss*dir],[-ss,-ss*dir]]) + if ssep>0 and n < (anX-1): pnts.append([-ssep,0]) + pnts.extend([[-iniX,0],[0,-iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-ss*dir,-ss],[ss*dir,-ss]]) + if ssep>0 and n < (anY-1): pnts.append([0, -ssep]) + if spikestype=="trirect": + anX, anY = ( int((an + ssep) / (ss + ssep)), int((al + ssep) / (ss + ssep)) ) + iniX, iniY = (((an + ssep) - (anX * (ss + ssep))) / 2.0, ((al + ssep) - (anY * (ss + ssep))) / 2.0) + pnts = [[l,t],[iniX,0]] + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,-ss*dir],[ss,ss*dir]]) + if ssep>0 and n < (anX-1): pnts.append([ssep,0]) + pnts.extend([[iniX,0],[0,iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[ss * dir,0],[-ss * dir,ss]]) + if ssep>0 and n < (anY-1): pnts.append([0, ssep]) + pnts.extend([[0,iniY],[-iniX,0]]) + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,ss*dir],[-ss,-ss*dir]]) + if ssep>0 and n < (anX-1): pnts.append([-ssep,0]) + pnts.extend([[-iniX,0],[0,-iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-ss*dir,0],[ss*dir,-ss]]) + if ssep>0 and n < (anY-1): pnts.append([0, -ssep]) + if spikestype=="squ": + anX, anY = ( int((an + ssep) / (ss + ssep)), int((al + ssep) / (ss + ssep)) ) + iniX, iniY = (((an + ssep) - (anX * (ss + ssep))) / 2.0, ((al + ssep) - (anY * (ss + ssep))) / 2.0) + pnts = [[l,t],[iniX,0]] + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,-ss * dir], [ss,0], [0,ss * dir]]) + if ssep>0 and n < (anX-1): pnts.append([ssep,0]) + pnts.extend([[iniX,0],[0,iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[ss * dir,0],[0,ss],[-ss * dir,0]]) + if ssep>0 and n < (anY-1): pnts.append([0,ssep]) + pnts.extend([[0,iniY],[-iniX,0]]) + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,ss * dir],[-ss,0],[0,-ss * dir]]) + if ssep>0 and n < (anX-1): pnts.append([-ssep,0]) + pnts.extend([[-iniX,0],[0,-iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-ss * dir,0],[0,-ss],[ss * dir,0]]) + if ssep>0 and n < (anY-1): pnts.append([0,-ssep]) + + if spikestype=="rnd": + dif = ss - (ss*varBez) + dBez = ss*varBez + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,-dBez * dir," c"],[dif,-ss * dir],[ss,-ss * dir],#fijo + [dBez,0],[ss,dif * dir],[ss,ss * dir]]) #fijo + if ssep>0 and n < (anX-1): pnts.append([ssep,0,' l']) + pnts.extend([[iniX,0," l"],[0,iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[dBez * dir,0," c"],[ss * dir,dif],[ss * dir,ss],#fijo + [0,dBez],[-dif * dir,ss],[-ss * dir,ss]]) #fijo + if ssep>0 and n < (anY-1): pnts.append([0,ssep,' l']) + pnts.extend([[0,iniY,' l'],[-iniX,0]]) + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,dBez * dir," c"],[-dif,ss * dir],[-ss,ss * dir],#fijo + [-dBez,0],[-ss,-dif * dir],[-ss,-ss * dir]]) #fijo + if ssep>0 and n < (anX-1): pnts.append([-ssep,0,' l']) + pnts.extend([[-iniX,0,' l'],[0,-iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-dBez * dir,0," c"],[-ss * dir,-dif],[-ss * dir,-ss],#fijo + [0,-dBez],[dif * dir,-ss],[ss * dir,-ss]]) #fijo + if ssep>0 and n < (anY-1): pnts.append([0,-ssep,' l']) + + if spikestype=="wav": + dif = ss - (ss*varBez) + dBez = ss*varBez + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,-dBez * dir," c"],[dif,-ss * dir],[ss,-ss * dir],#fijo + [0,dBez*dir],[dBez,ss*dir],[ss,ss * dir]]) #fijo + if ssep>0 and n < (anX-1): pnts.append([ssep,0,' l']) + pnts.extend([[iniX,0," l"],[0,iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[dBez * dir,0," c"],[ss * dir,dif],[ss * dir,ss],#fijo + [-dBez*dir,0],[-ss*dir,dBez],[-ss * dir,ss]]) #fijo + if ssep>0 and n < (anY-1): pnts.append([0,ssep,' l']) + pnts.extend([[0,iniY,' l'],[-iniX,0]]) + for n in range(anX): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[0,dBez * dir," c"],[-dif,ss * dir],[-ss,ss * dir],#fijo + [0,-dBez*dir], [-dif, -ss*dir],[-ss,-ss * dir]]) #fijo + if ssep>0 and n < (anX-1): pnts.append([-ssep,0,' l']) + + pnts.extend([[-iniX,0,' l'],[0,-iniY]]) + for n in range(anY): + if spikesdir == 'alt' : dir = 1 if n % 2 == 1 else -1 + pnts.extend([[-dBez * dir,0," c"],[-ss * dir,-dif],[-ss * dir,-ss],#fijo + [dBez*dir,0],[ss*dir,-dBez],[ss * dir,-ss]]) #fijo + if ssep>0 and n < (anY-1): pnts.append([0,-ssep,' l']) + if sh=='"arrow"': + arrowType=sO.arrowtype + headH, headW, arrowW = (self.getU(sO.headHeight), self.getU(sO.headWidth), self.getU(sO.arrowWidth)) + hw2=headW/2.0 + if arrowType=="arrowfilled": + pnts=[[l+cX,t],[hw2,headH],[-(headW-arrowW)/2.0,0],[0,al-headH],[-arrowW,0],[0,-(al-headH)],[-(headW-arrowW)/2.0,0]] + else: + dS = "m %s" + pnts=[[l+cX,t],[0,al],[-hw2,-al+headH,"m "],[hw2,-headH],[hw2,headH]] + d = "" + for n in pnts: + ss = "" if len(n)<3 else n[2] + d += "%s%s,%s " % (ss, str(n[0]),str(n[1])) + nn = self.addEle('path',pp, {'d':dS % (d)}) + self.estilo(nn,node) + + if deleteorigin: node.getparent().remove(node) + + def makeRel(self,arr): + b = arr[:] + for n in range(1,len(arr)): + s = b[n] + for i in range(0,n): + s = s - arr[i] + b[n] = s + return b + + def circle(self,p,r): + varBez = 0.551915024494 + dS = "m %s" + aa = r * varBez + d="" + pnts=[[p.x - r,p.y],[0,aa,"c "],[r - aa,r],[r,r],[aa,0,"c "],[r,-r+aa],[r,-r],[0,-aa,"c "],[-r+aa,-r],[-r,-r],[-aa,0,"c "],[-r,r-aa],[-r, r]] + for n in pnts: + ss = "" if len(n)<3 else n[2] + d += "%s%s,%s " % (ss, str(n[0]),str(n[1])) + return d + + def addTxt(self, node, x, y, text, dy = 0): + new2 = self.addEle(inkex.addNS('text','svg'), node,{'x':str(x),'y':str(y)}) + new = inkex.etree.SubElement(new2, inkex.addNS('tspan','svg'), {inkex.addNS('role','sodipodi'): 'line'}) + new.set('style','text-align:center; vertical-align:bottom; font-size:10; fill-opacity:1.0;stroke:none; font-weight:normal; font-style:normal; fill:#000000') + new.set('dy', str(dy)) + new.text = str(text) + + def circsCone(self, sels, sh='"rombus"'): + sO = self.options + copyfill = sO.copyfill + deleteorigin = sO.deleteorigin + joincirctype = sO.joincirctype + r2 = sO.joinradius + + for nodos in range(len(sels)-1): + node = sels[nodos] + node2 = sels[nodos+1] + lA, rA, tA, bA, anA, alA = self.limits(node) + lB, rB, tB, bB, anB, alB = self.limits(node2) + rA, cY = (anA/2.0,alA/2.0) + rB, cY2 = (anB/2.0,alB/2.0) + + PtA = XY(lA + rA, tA + cY) + PtB = XY(lB + rB, tB + cY2) + if (circleInCircle(PtA,rA,PtB,rB) or circleInCircle(PtB,rB,PtA,rA)): + pass + else: + pp = node.getparent() + rotAB = XY(PtB).getAngle(PtA) + dist = PtA.hipo(PtB) + if joincirctype=='trapecio': + # alineamos las esferas en Y + rDif = rA - rB + Axis = XY(-rDif,0) + D2 = math.sqrt((dist*dist) - (rDif*rDif)) / dist + P1 = XY(Axis).mul(rA / dist) + P2 = XY(-dist,0) + XY(Axis).mul(rB / dist) + r = P1.VDist(P2) + Rot1 = XY(P2.x,rB * D2).getAngleD(XY(P2.x + r, rA * D2)) + curva1a = bezs2XYList(createArcBez(rA,-90 -Rot1, -270 + Rot1)) + d = XYListSt(curva1a, rotAB, PtA) + pnts2 = bezs2XYList(createArcBez(rB, 90 + Rot1, 270 - Rot1),XY(-dist,0)) + d2 = XYListSt(pnts2, rotAB, PtA) + nn = self.addEle('path',pp, {'d':"M%s L%sZ" % (d,d2)}) + self.estilo(nn,node) + # ################## B L O B ############## + if joincirctype=='blob': + if ((r2==0) and (dist<(rA+rB))): + r2 = dist - rB + if (r2 > 0): + rad1 = rA + r2 + rad2 = rB + r2 + a = (math.pow(dist,2) - math.pow(rB+r2,2) + math.pow(rA+r2,2))/(dist*2) + else: + r2 = dist - rA - rB + rad1 = dist - rB + rad2 = dist - rA + a = (math.pow(dist-rB,2) - math.pow(dist-rA,2) + math.pow(dist,2))/(dist*2); + # alineamos las esferas en Y + + rt = math.atan2(PtB.y - PtA.y, PtB.x - PtA.x) + # # distancia del centro 1 a la interseccion de los circulos + x = (dist * dist - rad2 * rad2 + rad1 * rad1) / (dist*2) + if (rad1 * rad1 - x * x) > 0 : + catB = math.sqrt(rad1 * rad1 - x * x) + + rt = math.degrees(XY(0,0).getAngle(XY(-x, -catB))) + rt2 = math.degrees(XY(0,0).getAngle(XY(-(dist - x), -catB))) + + curva1 = bezs2XYList(createArcBez(rA, rt, -rt)) + curva1.reverse() + curva2 = bezs2XYList(createArcBez(r2, -180 + rt, -rt2),XY(-x, -catB)) + curva3 = bezs2XYList(createArcBez(rB, rt2+180,180-rt2),XY(-dist, 0)) + curva3.reverse() + curva4 = bezs2XYList(createArcBez(r2, rt2, 180 - rt),XY(-x, catB)) + + curva1= curva1+curva2[1:]+curva3[1:]+curva4[1:] + sCurva1 = XYListSt(curva1, rotAB, PtA) + + nn = self.addEle('path',pp,{'d':"M %s" % (sCurva1)}) + self.estilo(nn,node) +# ################################################ +# ################## O V A L ##################### +# ################################################ + if joincirctype=='oval': + minR2 = dist + min(rA,rB) + if r2 < minR2: + r2 = minR2 + info('Changed radius to '+str(minR2)) + rad1 = r2 - rA + rad2 = r2 - rB + a = (math.pow(dist,2) - math.pow(rB+r2,2) + math.pow(rA+r2,2))/(dist*2) + + rt = math.atan2(PtB.y - PtA.y, PtB.x - PtA.x) + D = dist #XY(PtA).sub(PtB).vlength() # distancia entre los centros + # distancia del centro 1 a la interseccion de los circulos + x = (D*D - rad2 * rad2 + rad1 * rad1) / (D*2) + catB = math.sqrt(rad1 * rad1 - x * x) + + rotAB=XY(PtB).getAngle(PtA) + rot1 = math.degrees(XY(0,0).getAngle(XY(-x,-catB))) + 180.0 + curva1 = bezs2XYList(createArcBez(rA, -rot1, rot1)) + curva1.reverse() + rot2 = math.degrees(XY(-dist,0).getAngle(XY(-x,-catB))) +180.0 + curva2 = bezs2XYList(createArcBez(r2, -rot2,-rot1),XY(-x,catB)) + curva2.reverse() + curva3 = bezs2XYList(createArcBez(rB, rot2,-rot2),XY(-dist,0)) + curva3.reverse() + curva4 = bezs2XYList(createArcBez(r2, rot1,rot2),XY(-x,-catB)) + curva4.reverse() + curva1= curva1+curva2[1:]+curva3[1:]+curva4[1:] #+curva3[1:]+curva4[1:] + sCurva1 = XYListSt(curva1, rotAB, PtA) + # curva1 + nn = self.addEle('path',pp,{'d':"M %sZ" % (sCurva1),'style':'stroke-width:0.02;fill:#cc0000;stroke:#000000;'}) + self.estilo(nn,node) + if deleteorigin: node.getparent().remove(node) + + def draw_shapes(self): + tab = str(self.options.tab) + sels = [] + for id, node in self.selected.iteritems(): + sels.append(node) + if tab != '"extra"': + for id, node in self.selected.iteritems(): + self.draw(node, tab) + else: + if len(sels)<2: + inkex.errormsg('Select at least two objects') + else: + self.circsCone(sels, tab) + + def loc_str(self, str): + return locale.format("%.f", float(str), 0) + + def effect(self): + slices = self.draw_shapes() + +if __name__ == "__main__": + e = Shapes() + e.affect() +# 576, 545, 537, 507 \ No newline at end of file diff --git a/fablabchemnitz_sheet_conus.inx b/fablabchemnitz_sheet_conus.inx new file mode 100644 index 0000000..0dd1c9e --- /dev/null +++ b/fablabchemnitz_sheet_conus.inx @@ -0,0 +1,36 @@ + + + <_name>Sheet Metal Conus + fablabchemnitz.de.sheet_metal_conus + fablabchemnitz_sheet_conus.py + inkex.py + simplestyle.py + simpletransform.py + + + + + + + + 300.0 + 100.0 + 200.0 + 0.4 + false + Constructs a flat pattern projection (sheet cutting layout) +that can be rolled or bent into a cone or frustum (truncated cone). +If Cut diameter=0 then cone will not be truncated. + 0 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_sheet_conus.py b/fablabchemnitz_sheet_conus.py new file mode 100644 index 0000000..db24327 --- /dev/null +++ b/fablabchemnitz_sheet_conus.py @@ -0,0 +1,477 @@ +#!/usr/bin/env python + +# Distributed under the terms of the GNU Lesser General Public License v3.0 + +import sys +import math +import simplestyle +import simpletransform +import inkex +from copy import deepcopy + +# Helper functions +def calc_angle_between_points(p1, p2): + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + return math.degrees(math.atan2(yDiff, xDiff)) +def calc_dist_between_points(p1, p2): + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + return math.sqrt(yDiff*yDiff + xDiff*xDiff) +def normalize(p1, p2): + " p1,p2 defines a vector return normalized " + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + magn = calc_dist_between_points(p1,p2) + return (xDiff/magn, yDiff/magn) +def polar_to_cartesian(cx, cy, radius, angle_degrees): + " So we can make arcs in the 'A' svg syntax. " + angle_radians = math.radians(angle_degrees) + return (cx + (radius * math.cos(angle_radians)), + cy + (radius * math.sin(angle_radians))) +def point_on_circle(radius, angle): + " return xy coord of the point at distance radius from origin at angle " + x = radius * math.cos(angle) + y = radius * math.sin(angle) + return [x, y] + + +class SheetMetalConus(inkex.Effect): + """ Program to unfold a frustum of a cone or a cone + (if parameter diaCut=0) and generate a sheet cutting layout + or flat pattern projection that can be rolled or bend up into a (truncated) cone shape. + """ + color_marker_dim = '#703cd6' # purple + color_marker_chords = '#9d2222' # red + color_marker_base = '#36ba36' # green + # Arrowed lines + dimline_style = {'stroke' : '#000000', + 'stroke-width' : '0.75px', + 'fill' : 'none', + 'marker-start' : 'url(#ArrowDIN-start)', + 'marker-end' : 'url(#ArrowDIN-end)' } + + def __init__(self): + """ Parses the command line options ( Base diameter, cut diameter and height of cone). + """ + inkex.Effect.__init__(self) # Call the base class constructor. + # Describe parameters + self.OptionParser.add_option('-b', '--diaBase', action = 'store', + type = 'float', dest = 'diaBase', default = 300.0, + help = 'The diameter of the cones base.') + + self.OptionParser.add_option('-c', '--diaCut', action = 'store', + type = 'float', dest = 'diaCut', default = 100.0, + help = 'The diameter of cones cut (0.0 if cone is not cut.') + + self.OptionParser.add_option('-l', '--heightCone', action = 'store', + type = 'float', dest = 'heightCone', default = 200.0, + help = 'The height of the (cut) cone.') + + self.OptionParser.add_option('-u', '--units', action = 'store', + type = 'string', dest = 'units', default = 'mm', + help = 'The units in which the cone values are given. mm or in for real objects') + + self.OptionParser.add_option('-w', '--strokeWidth', action = 'store', + type = 'float', dest = 'strokeWidth', default = 0.3, + help = 'The line thickness in given unit. For laser cutting it should be rather small.') + + self.OptionParser.add_option('-f', '--strokeColour', action = 'store', + type = 'string', dest = 'strokeColour', default = 896839168, # Blue + help = 'The line colour.') + + self.OptionParser.add_option('-d', '--verbose', action = 'store', + type = 'inkbool', dest = 'verbose', default = False, + help = 'Enable verbose output of calculated parameters. Used for debugging or is someone needs the calculated values.') + + def getUnittouu(self, param): + " compatibility between inkscape 0.48 and 0.91 " + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + def getColorString(self, longColor, verbose=False): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + if verbose: inkex.debug("%s ="%(longColor)) + longColor = long(longColor) + if longColor <0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + hexColor = '#' + hexColor.rjust(6, '0').upper() + if verbose: inkex.debug(" %s for color default value"%(hexColor)) + return hexColor + + # Marker arrows + def makeMarkerstyle(self, name, rotate): + " Markers added to defs for reuse " + defs = self.xpathSingle('/svg:svg//svg:defs') + if defs == None: + defs = inkex.etree.SubElement(self.document.getroot(),inkex.addNS('defs','svg')) + marker = inkex.etree.SubElement(defs ,inkex.addNS('marker','svg')) + marker.set('id', name) + marker.set('orient', 'auto') + marker.set('refX', '0.0') + marker.set('refY', '0.0') + marker.set('style', 'overflow:visible') + marker.set(inkex.addNS('stockid','inkscape'), name) + + arrow = inkex.etree.Element("path") + # definition of arrows in beautiful DIN-shapes: + if name.startswith('ArrowDIN-'): + if rotate: + arrow.set('d', 'M 8,0 -8,2.11 -8,-2.11 z') + else: + arrow.set('d', 'M -8,0 8,-2.11 8,2.11 z') + if name.startswith('ArrowDINout-'): + if rotate: + arrow.set('d', 'M 0,0 16,2.11 16,0.5 26,0.5 26,-0.5 16,-0.5 16,-2.11 z') + else: + arrow.set('d', 'M 0,0 -16,2.11 -16,0.5 -26,0.5 -26,-0.5 -16,-0.5 -16,-2.11 z') + arrow.set('style', 'fill:#000000;stroke:none') + marker.append(arrow) + + def set_arrow_dir(self, option, style): + if option=='inside': + # inside + self.arrowlen = 6.0 + style['marker-start'] = 'url(#ArrowDIN-start)' + style['marker-end'] = 'url(#ArrowDIN-end)' + self.makeMarkerstyle('ArrowDIN-start', False) + self.makeMarkerstyle('ArrowDIN-end', True) + else: + # outside + self.arrowlen = 0 + style['marker-start'] = 'url(#ArrowDINout-start)' + style['marker-end'] = 'url(#ArrowDINout-end)' + self.makeMarkerstyle('ArrowDINout-start', False) + self.makeMarkerstyle('ArrowDINout-end', True) + + def drawDimArc(self, center, start, end, radius, style, parent, gap=0, lowside=True): + " just the arrowed arc line " + angle = abs(end-start) + # inside or outside + inside = True + critical_length = 35 + dist = calc_dist_between_points(point_on_circle(radius, start), point_on_circle(radius, end)) + if angle < 45 and dist > critical_length: inside = False + # change start and end angles to make room for arrow markers + arrow_angle = math.degrees(math.sin(self.arrowlen/radius)) + if lowside: + start += arrow_angle + angle -= arrow_angle + anglefac = 1 + else: + start -= arrow_angle + angle -= arrow_angle + anglefac = -1 + # + if gap == 0: + line_attribs = {'style' : simplestyle.formatStyle(style), + 'd' : self.build_arc(center, start, angle*anglefac, radius, lowside) } + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + else: # leave a gap for label + gap_angle = math.degrees(math.sin(gap/radius)) + startstyle = deepcopy(style) + startstyle['marker-start'] = None + line_attribs = {'style' : simplestyle.formatStyle(startstyle), + 'd' : self.build_arc(center, start, angle*anglefac/2-gap_angle/2*anglefac, radius, lowside) } + ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + endstyle = deepcopy(style) + endstyle['marker-end'] = None + line_attribs = {'style' : simplestyle.formatStyle(endstyle), + 'd' : self.build_arc(center, angle/2*anglefac+gap_angle/2*anglefac, angle*anglefac, radius, lowside) } + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + # return pos in center of gap (or arc) + textposangle = angle/2*anglefac + return (point_on_circle(radius, math.radians(textposangle))) + + def drawDimension(self, a, b, style, parent): + " draw arrowed dimensions using markers " + # draw arrows as inside or outside dimension + critical_length = 35. + if calc_dist_between_points(a,b) > critical_length: + self.set_arrow_dir('inside', style) + else: + self.set_arrow_dir('outside', style) + attribs = {'style' : simplestyle.formatStyle(style)} + # account for length change so arrows fit + norm = normalize(a, b) + dim_start_x = a[0] + self.arrowlen*norm[0] + dim_start_y = a[1] + self.arrowlen*norm[1] + dim_end_x = b[0] - self.arrowlen*norm[0] + dim_end_y = b[1] - self.arrowlen*norm[1] + # + attribs['d'] = 'M %f,%f %f,%f' % (dim_start_x, dim_start_y, dim_end_x, dim_end_y) + dimline = inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), attribs) + return dimline + + def calculateCone(self, dictCone): + """ Calculates all relevant values in order to construct a cone. + These values are: + - short radius + - long radius + - angle of cone layout + - chord of base diameter + - chord of cut diameter + - coordinates of points A, B, C and D + """ + dBase = dictCone['diaBase'] + dCut = dictCone['diaCut'] + hCone = dictCone['heightCone'] + base = dBase - dCut + # radius from top of cone to cut + if dCut > 0: + shortRadius = math.sqrt( dCut*dCut/4 + (dCut*hCone)/base * (dCut*hCone)/base ) + else: + shortRadius=0.0 + dictCone['shortRadius'] = shortRadius + ## radius from top of cone to base of cone + longRadius=math.sqrt( dBase*dBase/4 + (dBase*hCone)/base * (dBase*hCone)/base ) + dictCone['longRadius'] = longRadius + + ## angle of circle sector + angle=(math.pi * dBase) / longRadius + dictCone['angle'] = angle + # chord is the straight line between the 2 endpoints of an arc. + # Not used directly, but available in verbose output. + chordBase = longRadius * math.sqrt( 2* (1-math.cos(angle)) ) + dictCone['chordBase'] = chordBase + chordCut = shortRadius * math.sqrt( 2* (1-math.cos(angle)) ) + dictCone['chordCut'] = chordCut + + # calculate coordinates of points A, B, C and D + # center M is at (0,0) and points A and B are on the x-axis: + ptA = (shortRadius, 0.0) + ptB = (longRadius, 0.0) + # we can calculate points C and D with the given radii and the calculated angle + ptC=(longRadius * math.cos(angle), longRadius * math.sin(angle)) + ptD=(shortRadius * math.cos(angle), shortRadius * math.sin(angle)) + dictCone['ptA'] = ptA + dictCone['ptB'] = ptB + dictCone['ptC'] = ptC + dictCone['ptD'] = ptD + + def effect(self): + """ Effect behaviour. + - Overrides base class' method and draws rolled out sheet metal cone into SVG document. + """ + # calc scene scale + convFactor = self.getUnittouu("1" + self.options.units) + # convert color + self.options.strokeColour = self.getColorString(self.options.strokeColour) + # Store all the relevants values in a dictionary for easy access + dictCone={'diaBase': self.options.diaBase, + 'diaCut': self.options.diaCut, + 'heightCone': self.options.heightCone } + # Get all values needed in order to draw cone layout: + self.calculateCone(dictCone) + + # Draw the cone layout: + # Make top level group + t = 'translate(%s,%s)' % (self.view_center[0], self.view_center[1]) + grp_attribs = {inkex.addNS('label','inkscape'):'Sheet Metal Conus Group', 'transform':t} + grp = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs) + + linestyle = { 'stroke' : self.options.strokeColour, 'fill' : 'none', + 'stroke-width': str(self.getUnittouu(str(self.options.strokeWidth) + self.options.units)) } + line_attribs = {'style' : simplestyle.formatStyle(linestyle), inkex.addNS('label','inkscape') : 'Cone' } + + # Connect the points into a single path of lines and arcs + zeroCenter=(0.0, 0.0) + angle = math.degrees(dictCone['angle']) + path = "" + path += self.build_line(dictCone['ptA'], dictCone['ptB'], convFactor) # A,B + path += " " + self.build_arc(zeroCenter, 0.0, angle, dictCone['longRadius']*convFactor) + path += " " + self.build_line(dictCone['ptC'], dictCone['ptD'], convFactor) # C,D + path += self.build_arc(zeroCenter, 0.0, angle, dictCone['shortRadius']*convFactor) + line_attribs['d'] = path + ell = inkex.etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs ) + + # Draw Dimensions Markup + if self.options.verbose == True: + grp_attribs = {inkex.addNS('label','inkscape'):'markup'} + markup_group = inkex.etree.SubElement(grp, 'g', grp_attribs) + self.beVerbose(dictCone, convFactor, markup_group) + + def build_arc(self, (x,y), start_angle, end_angle, radius, reverse=True, swap=False): + " Make an arc - use degrees" + # Not using internal arc rep - instead construct path A in svg style directly + # so we can append lines to make single path + start = polar_to_cartesian(x, y, radius, end_angle) + end = polar_to_cartesian(x, y, radius, start_angle) + arc_flag = 0 if reverse else 1 + sweep = 0 if (end_angle-start_angle) <=180 else 1 + if swap: sweep = 1-sweep + path = 'M %s,%s' % (start[0], start[1]) + path += " A %s,%s 0 %d %d %s %s" % (radius, radius, sweep, arc_flag, end[0], end[1]) + return path + + def build_line(self, (x1, y1), (x2, y2), unitFactor): + path = 'M %s,%s L %s,%s' % (x1*unitFactor, y1*unitFactor, x2*unitFactor, y2*unitFactor) + return path + + def beVerbose(self, dictCone, unitFactor, parent): + """ Verbose output of calculated values. + Can be used for debugging purposes or if calculated values needed. + """ + # unpack + base_dia = dictCone['diaBase'] + cut_dia = dictCone['diaCut'] + cone_height = dictCone['heightCone'] + shortradius = dictCone['shortRadius'] + longradius = dictCone['longRadius'] + angle = dictCone['angle'] + chord_base = dictCone['chordBase'] + chord_cut = dictCone['chordCut'] + ptA = dictCone['ptA'] + ptB = dictCone['ptB'] + ptC = dictCone['ptC'] + ptD = dictCone['ptD'] + + # styles for markup + stroke_width = max(0.1, self.getUnittouu(str(self.options.strokeWidth/2) + self.options.units)) + line_style = { 'stroke': self.color_marker_dim, 'stroke-width': str(stroke_width), 'fill':'none' } + arrow_style = self.dimline_style + font_height = min(32, max( 8, int(self.getUnittouu(str(longradius/40) + self.options.units)))) + text_style = { 'font-size': str(font_height), + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': self.color_marker_dim } + # verbose message for debug window + msg = "Base diameter: " + str(base_dia) + "Cut diameter: " + str(cut_dia) + \ + "\nCone height: " + str(cone_height) + "\nShort radius: " + str(shortradius) + \ + "\nLong radius: " + str(longradius) + "\nAngle of circle sector: " + str(angle) + \ + " radians (= " + str(math.degrees(angle)) + " degrees)" + \ + "\nChord length of base arc: " + str(chord_base) + \ + "\nChord length of cut arc: " + str(chord_cut) + #inkex.debug( msg) + + # Mark center + marker_length = max(5, longradius* unitFactor/100) + line_attribs = {'style' : simplestyle.formatStyle(line_style), + inkex.addNS('label','inkscape') : 'center', + 'd' : 'M -{0},-{0} L {0},{0}'.format(marker_length)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : simplestyle.formatStyle(line_style), + inkex.addNS('label','inkscape') : 'center', + 'd' : 'M -{0},{0} L {0},-{0}'.format(marker_length)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # Draw tick marks + line_attribs = {'style' : simplestyle.formatStyle(line_style), 'd' : 'M 0,-3 L 0,-30'} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + if cut_dia != 0: + line_attribs = {'style' : simplestyle.formatStyle(line_style), 'd' : 'M {0},-3 L {0},-30'.format(shortradius * unitFactor)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : simplestyle.formatStyle(line_style), 'd' : 'M {0},-3 L {0},-30'.format(longradius * unitFactor)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # span line + arrow_style['stroke'] = self.color_marker_dim + self.drawDimension((0,-10), (shortradius * unitFactor, -10), arrow_style, parent) + self.drawDimension((shortradius * unitFactor,-10), (longradius * unitFactor, -10), arrow_style, parent) + # labels for short, long radii + if cut_dia >= 0.001: + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': str(shortradius*unitFactor/2), + 'y': str(-15) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(shortradius) + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': str((shortradius + (longradius-shortradius)/2)*unitFactor), + 'y': str(-15) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(longradius) + # Draw angle + lowside = math.degrees(angle) < 180 + value = math.degrees(angle) if lowside else 360-math.degrees(angle) + # radial limit lines + line_attribs = {'style' : simplestyle.formatStyle(line_style), 'd' : 'M 3,0 L %4.2f,0' % (ptA[0]*unitFactor*0.8)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : simplestyle.formatStyle(line_style), 'd' : 'M %4.2f,%4.2f L %4.2f,%4.2f' % (ptD[0]*unitFactor*0.02, ptD[1]*unitFactor*0.02,ptD[0]*unitFactor*0.8, ptD[1]*unitFactor*0.8)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # arc + arc_rad = ptA[0]*unitFactor*0.50 + gap = self.getUnittouu(str(font_height*2)+"pt") + textpos = self.drawDimArc((0,0), 0, value, arc_rad, arrow_style, parent, gap, lowside) + # angle label + textpos[1] += font_height/4 if lowside else font_height/2 + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': str(textpos[0]), + 'y': str(textpos[1]) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.2f deg" %(value) + # chord lines + dash_style = deepcopy(arrow_style) + dash_style['stroke'] = self.color_marker_chords + dash_style['stroke-dasharray'] = '4, 2, 1, 2' + line = self.drawDimension((ptA[0]*unitFactor, ptA[1]*unitFactor), (ptD[0]*unitFactor, ptD[1]*unitFactor), dash_style, parent) + line = self.drawDimension((ptB[0]*unitFactor, ptB[1]*unitFactor), (ptC[0]*unitFactor, ptC[1]*unitFactor), dash_style, parent) + # chord labels + centerx = ptB[0]*unitFactor + (ptC[0]-ptB[0])*unitFactor/2 + centery = ptB[1]*unitFactor + (ptC[1]-ptB[1])*unitFactor/2 + line_angle = calc_angle_between_points(ptC, ptB) + ypos = centery+font_height+2 if line_angle<0 else centery-2 + text_style['fill'] = self.color_marker_chords + text_atts = {'style':simplestyle.formatStyle(text_style), + 'transform': 'rotate(%f)' % (line_angle) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + scale_matrix = [[1, 0.0, centerx], [0.0, 1, ypos]] # needs cos,sin corrections + simpletransform.applyTransformToNode(scale_matrix, text) + text.text = "%4.2f" % (chord_base) + if cut_dia >= 0.001: + centerx = ptA[0]*unitFactor + (ptD[0]-ptA[0])*unitFactor/2 + centery = ptA[1]*unitFactor + (ptD[1]-ptA[1])*unitFactor/2 + xpos = centerx - font_height*math.sin(math.radians(abs(line_angle))) + ypos = centery-2 if line_angle>0 else centery+font_height+2 + text = inkex.etree.SubElement(parent, 'text', text_atts) + scale_matrix = [[1, 0.0, centerx], [0.0, 1, ypos]] + simpletransform.applyTransformToNode(scale_matrix, text) + text.text = "%4.2f" % (chord_cut) + # frustum lines + frustrum_repos = [[1, 0.0, 1], [0.0, 1, math.sqrt(pow(shortradius*unitFactor,2)-pow(cut_dia*unitFactor/2,2))]] + text_style['fill'] = self.color_marker_base + line_style['stroke'] = self.color_marker_base + arrow_style['stroke'] = self.color_marker_base + line_attribs = {'style': simplestyle.formatStyle(line_style), + 'd': 'M %f,%f L %f,%f %f,%f %f,%f z' %(-cut_dia/2*unitFactor,0, cut_dia/2*unitFactor,0, base_dia/2*unitFactor,cone_height*unitFactor, -base_dia/2*unitFactor,cone_height*unitFactor)} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + simpletransform.applyTransformToNode(frustrum_repos, line) + # ticks + line_attribs = {'style': simplestyle.formatStyle(line_style), + 'd': 'M %f,%f L %f,%f' %(-(5+cut_dia/2*unitFactor),0, -(5+base_dia/2*unitFactor),0 )} + line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + simpletransform.applyTransformToNode(frustrum_repos, line) + # + line = self.drawDimension((-base_dia/2*unitFactor,0), (-base_dia/2*unitFactor,cone_height*unitFactor), arrow_style, parent) + simpletransform.applyTransformToNode(frustrum_repos, line) + # frustum text + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': str(-(18+base_dia/2*unitFactor)), + 'y': str(cone_height*unitFactor/2) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(cone_height) + simpletransform.applyTransformToNode(frustrum_repos, text) + if cut_dia >= 0.001: + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', + 'y': str(font_height) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(cut_dia) + simpletransform.applyTransformToNode(frustrum_repos, text) + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', + 'y': str(cone_height*unitFactor+font_height) } + text = inkex.etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(base_dia) + simpletransform.applyTransformToNode(frustrum_repos, text) + + + +# Create effect instance and apply it. +effect = SheetMetalConus() +effect.affect() + + diff --git a/fablabchemnitz_shelves.inx b/fablabchemnitz_shelves.inx new file mode 100644 index 0000000..96f6198 --- /dev/null +++ b/fablabchemnitz_shelves.inx @@ -0,0 +1,39 @@ + + + <_name>Parametric Shelves + fablabchemnitz.de.shelves + inkex.py + fablabchemnitz_shelves.py + + <_item value="mm">mm + <_item value="cm">cm + <_item value="m">m + <_item value="km">km + <_item value="in">in + <_item value="ft">ft + <_item value="yd">yd + <_item value="pt">pt + <_item value="px">px + <_item value="pc">pc + + 1.2 + 0.3 + 0.05 + 100 + 100 + 40 + 10; 20; 35 + 0.6 + 10 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_shelves.py b/fablabchemnitz_shelves.py new file mode 100644 index 0000000..4e30ccd --- /dev/null +++ b/fablabchemnitz_shelves.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python + +#import Inkscape_helper.inkscape_helper as helper +import fablabchemnitz_shelves_helper as doc + +#import simplestyle + + +#Note: keep in mind that SVG coordinates start in the top-left corner i.e. with an inverted y-axis + + +class Shelves(doc.Effect): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + doc.Effect.__init__(self) + + self.OptionParser.add_option('--unit', action = 'store', + type = 'string', dest = 'unit', default = 'cm', + help = 'Unit, should be one of ') + + self.OptionParser.add_option('--tool_diameter', action = 'store', + type = 'float', dest = 'tool_diameter', default = '0.3', + help = 'Tool diameter') + + self.OptionParser.add_option('--tolerance', action = 'store', + type = 'float', dest = 'tolerance', default = '0.05', + help = '') + + self.OptionParser.add_option('--thickness', action = 'store', + type = 'float', dest = 'thickness', default = '1.2', + help = 'Material thickness') + + self.OptionParser.add_option('--width', action = 'store', + type = 'float', dest = 'width', default = '3.0', + help = 'Box width') + + self.OptionParser.add_option('--height', action = 'store', + type = 'float', dest = 'height', default = '10.0', + help = 'Box height') + + self.OptionParser.add_option('--depth', action = 'store', + type = 'float', dest = 'depth', default = '3.0', + help = 'Box depth') + + self.OptionParser.add_option('--shelves', action = 'store', + type = 'string', dest = 'shelve_list', default = '', + help = 'semicolon separated list of shelve heigths') + + self.OptionParser.add_option('--groove_depth', action = 'store', + type = 'float', dest = 'groove_depth', default = '0.5', + help = 'Groove depth') + + self.OptionParser.add_option('--tab_size', action = 'store', + type = 'float', dest = 'tab_size', default = '10', + help = 'Approximate tab width (tabs will be evenly spaced along the length of the edge)') + + def effect(self): + """ + Draws a shelved cupboard, based on provided parameters + """ + + # input sanity check and unit conversion + error = False + + if self.options.unit not in self.knownUnits: + doc.errormsg('Error: unknown unit. '+ self.options.unit) + error = True + unit = self.options.unit + + if min(self.options.height, self.options.width, self.options.depth) == 0: + doc.errormsg('Error: Dimensions must be non zero') + error = True + + shelves = [] + + for s in self.options.shelve_list.split(';'): + try: + shelves.append(self.unittouu(str(s).strip() + unit)) + except ValueError: + doc.errormsg('Error: nonnumeric value in shelves (' + s + ')') + error = True + + if error: + exit() + + height = self.unittouu(str(self.options.height) + unit) + width = self.unittouu(str(self.options.width) + unit) + depth = self.unittouu(str(self.options.depth) + unit) + thickness = self.unittouu(str(self.options.thickness) + unit) + groove_depth = self.unittouu(str(self.options.groove_depth) + unit) + tab_size = self.unittouu(str(self.options.tab_size) + unit) + tolerance = self.unittouu(str(self.options.tolerance) + unit) + tool_diameter = self.unittouu(str(self.options.tool_diameter) + unit) + + doc_root = self.document.getroot() + docWidth = self.unittouu(doc_root.get('width')) + docHeigh = self.unittouu(doc_root.attrib['height']) + + layer = doc.layer(doc_root, 'Shelves') + + def H(x): + return doc.Coordinate(x, 0) + + def V(x): + return doc.Coordinate(0, x) + + def tab_count(dist, desired_tab_size): + F = int(dist // desired_tab_size) + if F / 2 % 2 == 0: # make sure we have an odd number of tabs + n = F // 2 + else: + n = (F - 1) // 2 + + return 2 * n + 1 + + # create groups for the different parts + g_l_side = doc.group(layer) + g_r_side = doc.group(layer) + g_top = doc.group(layer) + g_bottom = doc.group(layer) + g_back = doc.group(layer) + g_divider = doc.group(layer) + + h_spacing = H(10 + thickness) + v_spacing = V(10 + thickness) + + v_tab_count = tab_count(height, tab_size) + v_tab = V(height / v_tab_count) + h_tab_count = tab_count(width, tab_size) + h_tab = H(width / h_tab_count) + d_tab_count = tab_count(depth, tab_size) + d_tab_size = depth / d_tab_count + + h_tab_height = V(thickness) + + top_origin = h_spacing * 2 + v_spacing + H(depth) + left_side_origin = h_spacing + v_spacing * 2 + V(depth) + back_origin = left_side_origin + h_spacing + H(depth) + right_side_origin = back_origin + h_spacing + H(width) + bottom_origin = back_origin + v_spacing + V(height) + + def draw_tabbed_edge(parent, edge_start, tab, inset, count, invert = False): + start = edge_start + (inset if invert else doc.Coordinate(0, 0)) + for i in range(count): + if (i % 2 == 0) != invert: + t_offset = inset + else: + t_offset = doc.Coordinate(0, 0) + end = start + tab + #inkex.debug(str((i, start, end, t_offset))) + doc.draw_line(parent, start, end) + if i < count - 1: # skip last one + start = edge_start + t_offset + tab * (i + 1) + doc.draw_line(parent, end, start) + + # top + doc.draw_line(g_top, top_origin, top_origin + H(width)) + draw_tabbed_edge(g_top, top_origin, V(d_tab_size), H(thickness), d_tab_count, False) + draw_tabbed_edge(g_top, top_origin + H(width) , V(d_tab_size), H(-thickness), d_tab_count, False) + draw_tabbed_edge(g_top, top_origin + V(depth), h_tab, V(-thickness), h_tab_count, True) + # groove + groove_style = doc.groove_style + center_v_groove_l = (width - thickness) / 2 - tolerance + groove_l_side = top_origin + H(center_v_groove_l) + groove_r_side = groove_l_side + H(thickness + tolerance * 2) + doc.draw_line(g_top, groove_l_side, groove_l_side + V(depth), groove_style) + doc.draw_line(g_top, groove_r_side, groove_r_side + V(depth), groove_style) + + + # left + doc.draw_line(g_l_side, left_side_origin, left_side_origin + V(height)) + draw_tabbed_edge(g_l_side, left_side_origin + H(depth), v_tab, H(-thickness), v_tab_count, True) + draw_tabbed_edge(g_l_side, left_side_origin, H(d_tab_size), V(thickness), d_tab_count, True) + draw_tabbed_edge(g_l_side, left_side_origin + V(height), H(d_tab_size), V(-thickness), d_tab_count, True) + + # back + draw_tabbed_edge(g_back, back_origin, v_tab, H(thickness), v_tab_count, False) + draw_tabbed_edge(g_back, back_origin + H(width), v_tab, H(-thickness), v_tab_count, False) + draw_tabbed_edge(g_back, back_origin, h_tab, V(thickness), h_tab_count, False) + draw_tabbed_edge(g_back, back_origin + V(height), h_tab, V(-thickness), h_tab_count, False) + # groove + groove_l_side = back_origin + H(center_v_groove_l) + groove_r_side = groove_l_side + H(thickness + tolerance * 2) + doc.draw_line(g_back, groove_l_side, groove_l_side + V(height), groove_style) + doc.draw_line(g_back, groove_r_side, groove_r_side + V(height), groove_style) + + # right + doc.draw_line(g_r_side, right_side_origin + H(depth), right_side_origin + H(depth) + V(height)) + draw_tabbed_edge(g_r_side, right_side_origin, v_tab, H(thickness), v_tab_count, True) + draw_tabbed_edge(g_r_side, right_side_origin, H(d_tab_size), V(thickness), d_tab_count, True) + draw_tabbed_edge(g_r_side, right_side_origin + V(height), H(d_tab_size), V(-thickness), d_tab_count, True) + + # bottom + doc.draw_line(g_bottom, bottom_origin + V(depth), bottom_origin + V(depth) + H(width)) + draw_tabbed_edge(g_bottom, bottom_origin, V(d_tab_size), H(thickness), d_tab_count, False) + draw_tabbed_edge(g_bottom, bottom_origin + H(width) , V(d_tab_size), H(-thickness), d_tab_count, False) + draw_tabbed_edge(g_bottom, bottom_origin, h_tab, V(thickness), h_tab_count, True) + # groove + groove_l_side = bottom_origin + H(center_v_groove_l) + groove_r_side = groove_l_side + H(thickness + tolerance * 2) + doc.draw_line(g_bottom, groove_l_side, groove_l_side + V(depth), groove_style) + doc.draw_line(g_bottom, groove_r_side, groove_r_side + V(depth), groove_style) + + #shelves + prev_top = 0 + gr_short = thickness - groove_depth + tool_diameter / 2 # avoid that the grooves are visible from the outside + for s in shelves: + s_top = prev_top + thickness + s - tolerance + s_bottom = s_top + thickness + tolerance * 2 + + doc.draw_line(g_l_side, left_side_origin + V(s_top), left_side_origin + V(s_top) + H(depth - gr_short), groove_style) + doc.draw_line(g_l_side, left_side_origin + V(s_bottom), left_side_origin + V(s_bottom) + H(depth - gr_short), groove_style) + + doc.draw_line(g_r_side, right_side_origin + V(s_top) + H(gr_short), right_side_origin + V(s_top) + H(depth), groove_style) + doc.draw_line(g_r_side, right_side_origin + V(s_bottom) + H(gr_short), right_side_origin + V(s_bottom) + H(depth), groove_style) + + doc.draw_line(g_back, back_origin + V(s_top) + H(gr_short), back_origin + V(s_top) + H(width - gr_short), groove_style) + doc.draw_line(g_back, back_origin + V(s_bottom) + H(gr_short), back_origin + V(s_bottom) + H(width - gr_short), groove_style) + + prev_top = s_top + +# Create effect instance and apply it. +effect = Shelves() +effect.affect() diff --git a/fablabchemnitz_shelves_helper.py b/fablabchemnitz_shelves_helper.py new file mode 100644 index 0000000..d78ad02 --- /dev/null +++ b/fablabchemnitz_shelves_helper.py @@ -0,0 +1,479 @@ +#!/usr/bin/env python +from __future__ import division +import inkex +import simplestyle + + +from math import * +from collections import namedtuple + + +#Note: keep in mind that SVG coordinates start in the top-left corner i.e. with an inverted y-axis + +errormsg = inkex.errormsg +debug = inkex.debug + +default_style = simplestyle.formatStyle( + {'stroke': '#000000', + 'stroke-width': '1', + 'fill': 'none' + }) + +groove_style = simplestyle.formatStyle( + {'stroke': '#0000FF', + 'stroke-width': '1', + 'fill': 'none' + }) + +mark_style = simplestyle.formatStyle( + {'stroke': '#00FF00', + 'stroke-width': '1', + 'fill': 'none' + }) + +def draw_rectangle(parent, w, h, x, y, rx=0, ry=0, style=default_style): + attribs = { + 'style': style, + 'height': str(h), + 'width': str(w), + 'x': str(x), + 'y': str(y) + } + if rx != 0 and ry != 0: + attribs['rx'] = str(rx) + attribs['ry'] = str(ry) + inkex.etree.SubElement(parent, inkex.addNS('rect', 'svg'), attribs) + +def draw_ellipse(parent, rx, ry, center, start_end=(0, 2*pi), style=default_style, transform=''): + ell_attribs = {'style': style, + inkex.addNS('cx', 'sodipodi'): str(center.x), + inkex.addNS('cy', 'sodipodi'): str(center.y), + inkex.addNS('rx', 'sodipodi'): str(rx), + inkex.addNS('ry', 'sodipodi'): str(ry), + inkex.addNS('start', 'sodipodi'): str(start_end[0]), + inkex.addNS('end', 'sodipodi'): str(start_end[1]), + inkex.addNS('open', 'sodipodi'): 'true', #all ellipse sectors we will draw are open + inkex.addNS('type', 'sodipodi'): 'arc', + 'transform': transform + } + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), ell_attribs) + + +def draw_arc(parent, rx, ry, x_axis_rot, style=default_style): + arc_attribs = {'style': style, + 'rx': str(rx), + 'ry': str(ry), + 'x-axis-rotation': str(x_axis_rot), + 'large-arc': '', + 'sweep': '', + 'x': '', + 'y': '' + } + #name='part' + style = {'stroke': '#000000', 'fill': 'none'} + drw = {'style':simplestyle.formatStyle(style),inkex.addNS('label','inkscape'):name,'d':XYstring} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), drw) + inkex.addNS('', 'svg') + +def draw_text(parent, coordinate, txt, style=default_style): + text = inkex.etree.Element(inkex.addNS('text', 'svg')) + text.text = txt + text.set('x', str(coordinate.x)) + text.set('y', str(coordinate.y)) + style = {'text-align': 'center', 'text-anchor': 'middle'} + text.set('style', simplestyle.formatStyle(style)) + parent.append(text) + +#draw an SVG line segment between the given (raw) points +def draw_line(parent, start, end, style = default_style): + line_attribs = {'style': style, + 'd': 'M '+str(start.x)+','+str(start.y)+' L '+str(end.x)+','+str(end.y)} + + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), line_attribs) + +def layer(parent, layer_name): + layer = inkex.etree.SubElement(parent, 'g') + layer.set(inkex.addNS('label', 'inkscape'), layer_name) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + +def group(parent): + return inkex.etree.SubElement(parent, 'g') + + +class IntersectionError(ValueError): + """Raised when two lines do not intersect.""" + +def on_segment(pt, start, end): + """Check if pt is between start and end. The three points are presumed to be collinear.""" + pt -= start + end -= start + ex, ey = end.x, end.y + px, py = pt.x, pt.y + px *= cmp(ex, 0) + py *= cmp(ey, 0) + return px >= 0 and px <= abs(ex) and py >= 0 and py <= abs(ey) + +def intersection (s1, e1, s2, e2, on_segments = True): + D = (s1.x - e1.x) * (s2.y - e2.y) - (s1.y - e1.y) * (s2.x - e2.x) + if D == 0: + raise IntersectionError("Lines from {s1} to {e1} and {s2} to {e2} are parallel") + N1 = s1.x * e1.y - s1.y * e1.x + N2 = s2.x * e2.y - s2.y * e2.x + I = ((s2 - e2) * N1 - (s1 - e1) * N2) / D + + if on_segments and not (on_segment(I, s1, e1) and on_segment(I, s2, e2)): + raise IntersectionError("Intersection {0} is not on line segments [{1} -> {2}] [{3} -> {4}]".format(I, s1, e1, s2, e2)) + return I + + +def inner_product(a, b): + return a.x * b.x + a.y * b.y + +class Coordinate: + def __init__(self, x, y): + self.x = float(x) + self.y = float(y) + + @property + def t(self): + return atan2(self.y, self.x) + + #@t.setter + #def t(self, value): + + @property + def r(self): + return hypot(self.x, self.y) + + #@r.setter + #def r(self, value): + + def __repr__(self): + return self.__str__() + + def __str__(self): + return "(%f, %f)" % (self.x, self.y) + + def __eq__(self, other): + return self.x == other.x and self.y == other.y + + def __add__(self, other): + return Coordinate(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Coordinate(self.x - other.x, self.y - other.y) + + def __mul__(self, factor): + return Coordinate(self.x * factor, self.y * factor) + + def __rmul__(self, other): + return self * other + + def __div__(self, quotient): + return Coordinate(self.x / quotient, self.y / quotient) + + def __truediv__(self, quotient): + return self.__div__(quotient) + + + +class Effect(inkex.Effect): + """ + + """ + def __init__(self, options=None): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + if options != None: + for opt in options: + if len(opt) == 2: + self.OptionParser.add_option('--' + opt[0], type = opt[1], dest = opt[0]) + else: + self.OptionParser.add_option('--' + opt[0], type = opt[1], dest = opt[0],default = opt[2], help = opt[3]) + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def effect(self): + """ + + """ + pass + + +def _format_1st(command, is_absolute): + return command.upper() if is_absolute else command.lower() + +class Path: + def __init__(self): + self.nodes = [] + + def move_to(self, coord, absolute=False): + self.nodes.append("{0} {1} {2}".format(_format_1st('m', absolute), coord.x, coord.y)) + + def line_to(self, coord, absolute=False): + self.nodes.append("{0} {1} {2}".format(_format_1st('l', absolute), coord.x, coord.y)) + + def h_line_to(self, dist, absolute=False): + self.nodes.append("{0} {1}".format(_format_1st('h', absolute), dist)) + + def v_line_to(self, dist, absolute=False): + self.nodes.append("{0} {1}".format(_format_1st('v', absolute), dist)) + + def arc_to(self, rx, ry, x, y, rotation=0, pos_sweep=True, large_arc=False, absolute=False): + self.nodes.append("{0} {1} {2} {3} {4} {5} {6} {7}".format(_format_1st('a', absolute), rx, ry, rotation, 1 if large_arc else 0, 1 if pos_sweep else 0, x, y)) + + def close(self): + self.nodes.append('z') + + def path(self, parent, style): + attribs = {'style': style, + 'd': ' '.join(self.nodes)} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), attribs) + + def curve(parent, segments, style, closed=True): + #pathStr = 'M '+ segments[0] + pathStr = ' '.join(segments) + if closed: + pathStr += ' z' + attributes = { + 'style': style, + 'd': pathStr} + inkex.etree.SubElement(parent, inkex.addNS('path', 'svg'), attributes) + + def remove_last(self): + self.nodes.pop() + + +PathPoint = namedtuple('PathPoint', 't coord tangent curvature c_dist') + +class PathSegment(): + + def __init__(self): + raise NotImplementedError + + @property + def lenth(self): + raise NotImplementedError + + def subdivide(self, part_length): + raise NotImplementedError + # also need: + + # find a way do do curvature dependent spacing + # - based on deviation from a standard radius? + # - or ratio between thickness and curvature? + #def point_at_distance(d): + # pass + + +class Line(PathSegment): + + def __init__(self, start, end): + self.start = start + self.end = end + + @property + def length(self): + return (self.end - self.start).r + + def subdivide(self, part_length, start_offset=0): # note: start_offset should be smaller than part_length + nr_parts = int((self.length - start_offset) // part_length) + k_o = start_offset / self.length + k2t = lambda k : k_o + k * part_length / self.length + pp = lambda t : PathPoint(t, self.start + t * (self.end - self.start), self.end - self.start, 0, t * self.length) + points = [pp(k2t(k)) for k in range(nr_parts + 1)] + return(points, self.length - points[-1].c_dist) + + + +class BezierCurve(PathSegment): + nr_points = 10 + def __init__(self, P): # number of points is limited to 3 or 4 + + if len(P) == 3: # quadratic + self.B = lambda t : (1 - t)**2 * P[0] + 2 * (1 - t) * t * P[1] + t**2 * P[2] + Bd = lambda t : 2 * (1 - t) * (P[1] - P[0]) + 2 * t * (P[2] - P[1]) + Bdd = lambda t : 2 * (P[2] - 2 * P[1] + P[0]) + elif len(P) == 4: #cubic + self.B = lambda t : (1 - t)**3 * P[0] + 3 * (1 - t)**2 * t * P[1] + 3 * (1 - t) * t**2 * P[2] + t**3 * P[3] + Bd = lambda t : 3 * (1 - t)**2 * (P[1] - P[0]) + 6 * (1 - t) * t * (P[2] - P[1]) + 3 * t**2 * (P[3] - P[2]) + Bdd = lambda t : 6 * (1 - t) * (P[2] - 2 * P[1] + P[0]) + 6 * t * (P[3] - 2 * P[2] + P[1]) + + self.tangent = lambda t : Bd(t) + self.curvature = lambda t : (Bd(t).x * Bdd(t).y - Bd(t).y * Bdd(t).x) / hypot(Bd(t).x, Bd(t).y)**3 + + self.distances = [0] # cumulative distances for each 't' + prev_pt = self.B(0) + for i in range(self.nr_points): + t = (i + 1) / self.nr_points + pt = self.B(t) + self.distances.append(self.distances[-1] + hypot(prev_pt.x - pt.x, prev_pt.y - pt.y)) + prev_pt = pt + self.length = self.distances[-1] + + @classmethod + def quadratic(cls, start, c, end): + bezier = cls() + + @classmethod + def cubic(cls, start, c1, c2, end): + bezier = cls() + + def __make_eq__(self): + pass + + @property + def length(self): + return self.length + + def subdivide(self, part_length, start_offset=0): + nr_parts = int((self.length - start_offset) / part_length + 10E-10) + print "NR PARTS:", nr_parts, self.length, start_offset, part_length, int(self.length / part_length), self.length - 2 * part_length + k_o = start_offset / self.length + k2t = lambda k : k_o + k * part_length / self.length + points = [self.pathpoint_at_t(k2t(k)) for k in range(nr_parts + 1)] + return(points, self.length - points[-1].c_dist) + + + def pathpoint_at_t(self, t): + """pathpoint on the curve from t=0 to point at t.""" + step = 1 / self.nr_points + pt_idx = int(t / step) + #print "index", pt_idx, self.distances[pt_idx] + length = self.distances[pt_idx] + ip_fact = (t - pt_idx * step) / step + + if ip_fact > 0 and t < 1: # not a perfect match, need to interpolate + length += ip_fact * (self.distances[pt_idx + 1] - self.distances[pt_idx]) + + return PathPoint(t, self.B(t), self.tangent(t), self.curvature(t), length) + + + def t_at_length(self, length): + """interpolated t where the curve is at the given length""" + if length == self.length: + return 1 + i_small = 0 + i_big = self.nr_points + 1 + + while i_big - i_small > 1: # binary search + i_half = i_small + (i_big - i_small) // 2 + if self.distances[i_half] <= length: + i_small = i_half + else: + i_big = i_half + + small_dist = self.distances[i_small] + return i_small / self.nr_points + (length - small_dist) * (self.distances[i_big] - small_dist) # interpolated length + +class Ellipse(): + nrPoints = 1000 #used for piecewise linear circumference calculation (ellipse circumference is tricky to calculate) + # approximate circumfere: c = pi * (3 * (a + b) - sqrt(10 * a * b + 3 * (a ** 2 + b ** 2))) + + def __init__(self, w, h): + self.h = h + self.w = w + EllipsePoint = namedtuple('EllipsePoint', 'angle coord cDist') + self.ellData = [EllipsePoint(0, Coordinate(w/2, 0), 0)] # (angle, x, y, cumulative distance from angle = 0) + angle = 0 + self.angleStep = 2 * pi / self.nrPoints + #note: the render angle (ra) corresponds to the angle from the ellipse center (ca) according to: + # ca = atan(w/h * tan(ra)) + for i in range(self.nrPoints): + angle += self.angleStep + prev = self.ellData[-1] + x, y = w / 2 * cos(angle), h / 2 * sin(angle) + self.ellData.append(EllipsePoint(angle, Coordinate(x, y), prev.cDist + hypot(prev.coord.x - x, prev.coord.y - y))) + self.circumference = self.ellData[-1].cDist + #inkex.debug("circ: %d" % self.circumference) + + def rAngle(self, a): + """Convert an angle measured from ellipse center to the angle used to generate ellData (used for lookups)""" + cf = 0 + if a > pi / 2: + cf = pi + if a > 3 * pi / 2: + cf = 2 * pi + return atan(self.w / self.h * tan(a)) + cf + + def coordinateFromAngle(self, angle): + """Coordinate of the point at angle.""" + return Coordinate(self.w / 2 * cos(angle), self.h / 2 * sin(angle)) + + def notchCoordinate(self, angle, notchHeight): + """Coordinate for a notch at the given angle. The notch is perpendicular to the ellipse.""" + angle %= (2 * pi) + #some special cases to avoid divide by zero: + if angle == 0: + return (0, Coordinate(self.w / 2 + notchHeight, 0)) + elif angle == pi: + return (pi, Coordinate(-self.w / 2 - notchHeight, 0)) + elif angle == pi / 2: + return(pi / 2, doc.Coordinate(0, self.h / 2 + notchHeight)) + elif angle == 3 * pi / 2: + return(3 * pi / 2, Coordinate(0, -self.h / 2 - notchHeight)) + + x = self.w / 2 * cos(angle) + derivative = self.h / self.w * -x / sqrt((self.w / 2) ** 2 - x ** 2) + if angle > pi: + derivative = -derivative + + normal = -1 / derivative + nAngle = atan(normal) + if angle > pi / 2 and angle < 3 * pi / 2: + nAngle += pi + + nCoordinate = self.coordinateFromAngle(angle) + Coordinate(cos(nAngle), sin(nAngle)) * notchHeight + return nCoordinate + + + def distFromAngles(self, a1, a2): + """Distance accross the surface from point at angle a2 to point at angle a2. Measured in CCW sense.""" + i1 = int(self.rAngle(a1) / self.angleStep) + p1 = self.rAngle(a1) % self.angleStep + l1 = self.ellData[i1 + 1].cDist - self.ellData[i1].cDist + i2 = int(self.rAngle(a2) / self.angleStep) + p2 = self.rAngle(a2) % self.angleStep + l2 = self.ellData[i2 + 1].cDist - self.ellData[i2].cDist + if a1 <= a2: + len = self.ellData[i2].cDist - self.ellData[i1].cDist + l2 * p2 - l1 * p1 + else: + len = self.circumference + self.ellData[i2].cDist - self.ellData[i1].cDist + return len + + def angleFromDist(self, startAngle, relDist): + """Returns the angle that you get when starting at startAngle and moving a distance (dist) in CCW direction""" + si = int(self.rAngle(startAngle) / self.angleStep) + p = self.rAngle(startAngle) % self.angleStep + + l = self.ellData[si + 1].cDist - self.ellData[si].cDist + + startDist = self.ellData[si].cDist + p * l + + absDist = relDist + startDist + + if absDist > self.ellData[-1].cDist: # wrap around zero angle + absDist -= self.ellData[-1].cDist + + iMin = 0 + iMax = self.nrPoints + count = 0 + while iMax - iMin > 1: # binary search + count += 1 + iHalf = iMin + (iMax - iMin) // 2 + if self.ellData[iHalf].cDist < absDist: + iMin = iHalf + else: + iMax = iHalf + + stepDist = self.ellData[iMax].cDist - self.ellData[iMin].cDist + return self.ellData[iMin].angle + self.angleStep * (absDist - self.ellData[iMin].cDist)/stepDist diff --git a/fablabchemnitz_sheriff_star.inx b/fablabchemnitz_sheriff_star.inx new file mode 100644 index 0000000..7bb6218 --- /dev/null +++ b/fablabchemnitz_sheriff_star.inx @@ -0,0 +1,44 @@ + + + +<_name>Sheriff Star +fablabchemnitz.de.sheriff-star +fablabchemnitz_sheriff_star.py +inkex.py + + + + + 6 + 10 + 58 + false + + + <_param name="help_info" type="description"> +This extension creates a sheriff star in the currently selected circle or ellipse. + +The outer vertices (points of the star) are connected through a point on the (usually hidden) inner circle. This inner connection point is located at an angle halfway between the angles of the two outer vertices. The radius of this inner circle is expressed as a percentage of the radius of the selected circle or ellipse. + +Small circles are placed at the tip of each point of the star. The radius of these small circles is expressed as a percentage of the selected circle's radius (for ellipses, the x-radius is used). + +The components that make up the star are left as separate objects so that additional processing can be performed. + + + + + + + path + + + + + + + + + + diff --git a/fablabchemnitz_sheriff_star.py b/fablabchemnitz_sheriff_star.py new file mode 100644 index 0000000..3e16d09 --- /dev/null +++ b/fablabchemnitz_sheriff_star.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +""" +Sheriff Star +Create n-pointed sheriff star. +""" +import inkex +from math import * + +def addPathCommand(a, cmd): + for x in cmd: + a.append(str(x)) + +class SheriffStarEffect(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option('--tab', + action = 'store', type = 'string', dest = 'tab') + self.OptionParser.add_option('--points', + action='store', type='int', dest='points', default=5, + help='Number of points (or sides)') + self.OptionParser.add_option('--star-tip-ratio', + action='store', type='float', dest='star_tip_ratio', default=10, + help='Star tip circle % (star tip circle radius as a percentage of the outer radius)') + self.OptionParser.add_option('--inner-ratio', + action='store', type='float', dest='inner_ratio', default=58, + help='Inner circle % (inner radius as a percentage of the outer radius)') + self.OptionParser.add_option('--show-inner-circle', + action='store', type='inkbool', dest='show_inner_circle', default=False, + help='Show inner circle') + + def effect(self): + layer = self.current_layer; + + if len(self.selected) == 0: + inkex.errormsg('Please select a circle or ellipse.') + exit() + + numValid = 0 + for id, obj in self.selected.iteritems(): + cx,cy, rx,ry = 0,0, 0,0 + style = '' + isValid = False + if obj.tag == inkex.addNS('circle','svg'): + isValid = True + cx = float(obj.get('cx')) + cy = float(obj.get('cy')) + rx = float(obj.get('r')) + ry = rx + elif obj.tag == inkex.addNS('ellipse', 'svg'): + isValid = True + cx = float(obj.get('cx')) + cy = float(obj.get('cy')) + rx = float(obj.get('rx')) + ry = float(obj.get('ry')) + elif obj.tag == inkex.addNS('path', 'svg'): + if obj.get(inkex.addNS('type', 'sodipodi')) == 'arc': + isValid = True + cx = float(obj.get(inkex.addNS('cx', 'sodipodi'))) + cy = float(obj.get(inkex.addNS('cy', 'sodipodi'))) + rx = float(obj.get(inkex.addNS('rx', 'sodipodi'))) + ry = float(obj.get(inkex.addNS('ry', 'sodipodi'))) + + if not isValid: + continue; + + numValid += 1 + style = obj.get('style') + transform = obj.get('transform') + isEllipse = False + if rx != ry: + isEllipse = True + + skip = 1 + sides = self.options.points + innerRatio = float(self.options.inner_ratio) / 100.0 + starTipRatio = float(self.options.star_tip_ratio) / 100.0 + showInnerCircle = self.options.show_inner_circle + + if showInnerCircle: + if not isEllipse: + cin = inkex.etree.SubElement(layer, inkex.addNS('circle','svg')) + cin.set('r', str(rx * innerRatio)) + else: + cin = inkex.etree.SubElement(layer, inkex.addNS('ellipse','svg')) + cin.set('rx', str(rx * innerRatio)) + cin.set('ry', str(ry * innerRatio)) + cin.set('cx', str(cx)) + cin.set('cy', str(cy)) + cin.set('style', style) + if transform: + cin.set('transform', transform) + + tau = 2*pi + origin = -(tau / 4) + out_pts = [] + in_pts = [] + for i in range(sides): + # Outer points (on outer circle) + theta = (i * (tau / sides)) + px = cx + rx * cos(origin + theta) + py = cy + ry * sin(origin + theta) + out_pts.append([px, py]) + + # Inner points (on inner circle) + theta = ((i + (skip / 2.0)) * (tau / sides)) + px = cx + rx * innerRatio * cos(origin + theta) + py = cy + ry * innerRatio * sin(origin + theta) + in_pts.append([px, py]) + + # Add circles at each star tip. + for pt in out_pts: + cin = inkex.etree.SubElement(layer, inkex.addNS('circle','svg')) + cin.set('r', str(rx * starTipRatio)) + cin.set('cx', str(pt[0])) + cin.set('cy', str(pt[1])) + cin.set('style', style) + if transform: + cin.set('transform', transform) + + pts = [] + pt_done = {} + for i in range(sides): + if i in pt_done: + continue; + + p1 = out_pts[i] + addPathCommand(pts, ['M', p1[0], p1[1]]) + + pt_done[i] = True + start_index = i + curr = start_index + next = (curr + skip) % sides + while next != start_index: + p = out_pts[next] + pt_done[next] = True + + addPathCommand(pts, ['L', in_pts[curr][0], in_pts[curr][1]]) + addPathCommand(pts, ['L', p[0], p[1]]) + + curr = next + next = (curr + skip) % sides + addPathCommand(pts, ['L', in_pts[curr][0], in_pts[curr][1]]) + addPathCommand(pts, ['z']) + + # Create star polygon as a single path. + l1 = inkex.etree.SubElement(layer, inkex.addNS('path','svg')) + l1.set('style', style) + if transform: + l1.set('transform', transform) + l1.set('d', ' '.join(pts)) + + if numValid == 0: + inkex.errormsg('Selection must contain a circle or ellipse.') + +if __name__ == '__main__': + effect = SheriffStarEffect() + effect.affect() diff --git a/fablabchemnitz_shirt_waist_allington.inx b/fablabchemnitz_shirt_waist_allington.inx new file mode 100644 index 0000000..3536b5b --- /dev/null +++ b/fablabchemnitz_shirt_waist_allington.inx @@ -0,0 +1,36 @@ + + + <_name>Shirt Waist (Sara May Allington) + fablabchemnitz.de.shirt_waist + fablabchemnitz_shirt_waist_allington.py + inkex.py + fablabchemnitz_sewing_patterns.py + + + + + 15.0 + 15.5 + 13.5 + 39.0 + 25.0 + 15.0 + 13.5 + 7.75 + 10.75 + 20.00 + 9.50 + 12.50 + 8.00 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_shirt_waist_allington.py b/fablabchemnitz_shirt_waist_allington.py new file mode 100644 index 0000000..81e4547 --- /dev/null +++ b/fablabchemnitz_shirt_waist_allington.py @@ -0,0 +1,478 @@ +# !/usr/bin/python +# +# shirt_waist_allington.py +# Inkscape extension-Effects-Sewing Patterns-Shirt Waist Allington +# Copyright (C) 2010, 2011, 2012 Susan Spencer, Steve Conklin + +''' +Licensing paragraph: + +1. CODE LICENSE: GPL 2.0+ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +2. PATTERN LICENSE: CC BY-NC 3.0 +The output of this code is a pattern and is considered a +visual artwork. The pattern is licensed under +Attribution-NonCommercial 3.0 (CC BY-NC 3.0) + +Items made from the pattern may be sold; +the pattern may not be sold. + +End of Licensing paragraph. +''' + +import sys, subprocess, math, inkex, gettext +sys.path.append('/usr/share/inkscape/extensions') +from simplestyle import * +from fablabchemnitz_sewing_patterns import * + +class ShirtWaistAllington(inkex.Effect): + def __init__(self): + + inkex.Effect.__init__(self) + + self.OptionParser.add_option('--m_unit', action = 'store', type = 'string', dest = 'unit', default = 'Inches', help = 'Centimeters or Inches?') + self.OptionParser.add_option('--m_front_waist_length', action = 'store', \ + type = 'float', dest = 'm_front_waist_length', default = '15.0', help = 'Front Waist Length') + self.OptionParser.add_option('--m_back_waist_length', action = 'store', \ + type = 'float', dest = 'm_back_waist_length', default = '15.5', help = 'Back Waist Length') + self.OptionParser.add_option('--m_neck_circumference', action = 'store', \ + type = 'float', dest = 'm_neck_circumference', default = '13.5', help = 'Neck Circumference') + self.OptionParser.add_option('--m_bust_circumference', action = 'store', \ + type = 'float', dest = 'm_bust_circumference', default = '39.0', help = 'Bust Circumference') + self.OptionParser.add_option('--m_waist_circumference', action = 'store', \ + type = 'float', dest = 'm_waist_circumference', default = '25.0', help = 'Waist Circumference') + self.OptionParser.add_option('--m_armscye_circumference', action = 'store', \ + type = 'float', dest = 'm_armscye_circumference', default = '15.0', help = 'Armscye circumference') + self.OptionParser.add_option('--m_across_back', action = 'store', \ + type = 'float', dest = 'm_across_back', default = '13.5', help = 'Across Back') + self.OptionParser.add_option('--m_shoulder', action = 'store', \ + type = 'float', dest = 'm_shoulder', default = '6.5', help = 'Shoulder') + self.OptionParser.add_option('--m_side', action = 'store', \ + type = 'float', dest = 'm_side', default = '7.75', help = 'Side') + self.OptionParser.add_option('--m_upper_front_height', action = 'store', \ + type = 'float', dest = 'm_upper_front_height', default = '10.75', help = 'Upper Front Height') + self.OptionParser.add_option('--m_overarm_length', action = 'store', \ + type = 'float', dest = 'm_overarm_length', default = '20.00', help = 'Overarm Length') + self.OptionParser.add_option('--m_elbow_height', action = 'store', \ + type = 'float', dest = 'm_elbow_height', default = '9.50', help = 'Elbow Height - from wrist to elbow') + self.OptionParser.add_option('--m_elbow_circumference', action = 'store', \ + type = 'float', dest = 'm_elbow_circumference', default = '12.50', help = 'Elbow Circumference - arm bent') + self.OptionParser.add_option('--m_hand_circumference', action = 'store', \ + type = 'float', dest = 'm_hand_circumference', default = '8.00', help = 'Hand Circumference') + + + def effect(self): + + def printPoint(pnt): + debug(' %s = %f, %f')%pnt.id, pnt.x, pnt.y + + INCH_to_PX = 90.0 #inkscape uses 90 pixels per 1 inch + CM_to_INCH = 1/2.54 + CM_to_PX = CM_to_INCH*INCH_to_PX + CM = CM_to_PX # CM - shorthand when using centimeters + IN = INCH_to_PX # IN - shorthand when using inches + + #all measurements must be converted to px + munit = self.options.unit + if munit == 'Centimeters': + MEASUREMENT_CONVERSION = CM + else: + MEASUREMENT_CONVERSION = IN + + #convert measurements + front_waist_length = self.options.m_front_waist_length * MEASUREMENT_CONVERSION + neck_circumference = self.options.m_neck_circumference * MEASUREMENT_CONVERSION + bust_circumference = self.options.m_bust_circumference * MEASUREMENT_CONVERSION + waist_circumference = self.options.m_waist_circumference * MEASUREMENT_CONVERSION + armscye_circumference = self.options.m_armscye_circumference * MEASUREMENT_CONVERSION + across_back = self.options.m_across_back * MEASUREMENT_CONVERSION + shoulder = self.options.m_shoulder * MEASUREMENT_CONVERSION + side = self.options.m_side * MEASUREMENT_CONVERSION + upper_front_height = self.options.m_upper_front_height * MEASUREMENT_CONVERSION + overarm_length = self.options.m_overarm_length * MEASUREMENT_CONVERSION + elbow_height = self.options.m_elbow_height * MEASUREMENT_CONVERSION + elbow_circumference = self.options.m_elbow_circumference * MEASUREMENT_CONVERSION + hand_circumference = self.options.m_hand_circumference * MEASUREMENT_CONVERSION + + #constants + ANGLE90 = angleOfDegree(90) + ANGLE180 = angleOfDegree(180) + SEAM_ALLOWANCE = (5/8.0)*IN + BORDER = 1*IN + NOTE_HEIGHT = 1*IN + + #get the document, set initial width & height + doc = self.document.getroot() # self.document is the canvas seen in Inkscape + #add defs group with markers to document + addDefs(doc) + + #width_orig = inkex.unittouu(doc.get('width')) + #height_orig = inkex.unittouu(doc.get('height')) + #doc_width = 4*BORDER+4*SEAM_ALLOWANCE + bust_circumference/2.0 + #doc_height = 2*BORDER+3*SEAM_ALLOWANCE+(upper_front_height+side) + #doc.set('width', str(doc_width)) #temporary document width, doc is resized near end of pattern file + #doc.set('height', str(doc_height)) #temporary document height, doc is resized near end of pattern file + + + #create a base group in the document to hold all patterns + pattern_base = base(doc, 'pattern_base') + #create a pattern group for each pattern, put pattern group in base group - there can be multiple patterns + bodice = pattern(pattern_base, 'bodice') + # create a group for each pattern piece, put pattern piece group in pattern group + A = patternPiece(bodice, 'A', 'bodice_front', fabric = 2, interfacing = 0, lining = 0) + B = patternPiece(bodice, 'B', 'bodice_back', fabric = 2, interfacing = 0, lining = 0) + C = patternPiece(bodice, 'C', 'bodice_sleeve', fabric = 2, interfacing = 0, lining = 0) + D = patternPiece(bodice, 'D', 'bodice_cuff', fabric = 2, interfacing = 0, lining = 0) + + #pattern notes + notes = [] + notes.append('Define Seam Allowances: Select File/Inkscape Preferences/Steps and set Outset to 56.25px (5/8" seam allowance)') + notes.append('Create Seam Allowances: Press CTRL-F, type "cuttingline" in the ID field, click the Find button, press CTRL-)') + notes.append('Remove Points & Gridlines: Press CTRL-F, type "reference" in the Attribute field, click Find button, press DELETE') + notes.append('Print: Save as a PDF file, open PDF with PDF viewer (Adobe, Evince, Okular, xPDF), print from Print Preview option') + + #pattern points + b1 = patternPointXY(B, 'b1', 0, 0) #B + b2 = patternPoint(B, 'b2', down(b1, front_waist_length)) #A + b3 = patternPoint(B, 'b3', up(b2, side)) #C + a1 = patternPoint(A, 'a1', left(b3, bust_circumference/2.0)) #D + b4 = patternPoint(B, 'b4', left(b3, across_back/2.0)) #E + b5 = patternPoint(B, 'b5', up(b4, armscye_circumference/3.0)) #F + b6 = patternPoint(B, 'b6', up(b1, 0.5*IN)) #G + b7 = patternPoint(B, 'b7', left(b6, 1.5*IN)) #H + b8 = patternPoint(B, 'b8', onLineAtLength(b5, b7, -0.5*IN)) #I + a2 = patternPoint(A, 'a2', left(b4, armscye_circumference/4.0)) #J + a3 = patternPoint(A, 'a3', midPoint(a2, b4)) #K + a4 = patternPoint(A, 'a4', up(a2, 2.5*IN)) #L + a5 = patternPoint(A, 'a5', up(b5, 1.5*IN)) #M + a6 = patternPoint(A, 'a6', left(a5, 2*IN)) #N + a7 = patternPoint(A, 'a7', left(a6, distance(b7, b8))) #O + a8 = patternPointXY(A, 'a8', a7.x, b3.y - (upper_front_height - distance(b1, b7))) #P + a9 = patternPoint(A, 'a9', down(a8, neck_circumference/4.0)) #Q + a10 = patternPoint(A, 'a10', up(a9, 0.5*IN)) #R + a11 = patternPoint(A, 'a11', left(a10, (neck_circumference/6.0)+0.25*IN )) #S + b9 = patternPoint(B, 'b9', midPoint(a3, b4)) #T on back bodice B + a12 = patternPoint(A, 'a12', b9) #T on front bodice A + b10 = patternPoint(B, 'b10', down(b9, side)) #U + b11 = patternPoint(B , 'b11', right(b10, 1*IN)) #V + a13 = patternPoint(A, 'a13', left(b10, 1*IN)) #W + a14 = patternPoint(A, 'a14', onLineAtLength(a11, a1, front_waist_length)) #X + a15 = patternPoint(A, 'a15', down(a8, distance(a8, a14))) #Y - new point at front waist + b12 = patternPoint(B, 'b12', up(b4, distance(b5, b4)/3.0)) #Z - new point at back armscye + #temporary armscye curve from a3 to b12 to find top point of side seam + length = distance(a3, b12)/3.0 + temp_b12_c1 = right(a3, length) #don't create an svg controlpoint circle for this point + temp_b12_c2 = down(b12, length) #or for this point + #find top point of side seam with intersection of side and armscye curve, save to two points a16 and b13 + curve1 = pointList(a3, temp_b12_c1, temp_b12_c2, b12) + intersections = intersectLineCurve(b10, b9, curve1) #this line is directional from b10 to b9 + b13 = patternPoint(B, 'b13', intersections[0]) # AA on bodice back B -use 1st intersection found, in this case there's only one intersection + a16 = patternPoint(A, 'a16', b13) #AA on bodice back A + + #front control points - path runs counterclockwise from front neck center a11 + #front neck control points from a8 to a11 + length = distance(a8, a11)/3.0 + a11.c2 = controlPoint(A, 'a11.c2', right(a11, 1.5*length)) + a11.c1 = controlPoint(A, 'a11.c1', polar(a8, length, angleOfLine(a8, a11.c2))) + #front waist control points from a14 to a15 + length = distance(a14, a15)/3.0 + a15.c1 = controlPoint(A, 'a15.c1', polar(a14, length, angleOfLine(a14, a11)+ANGLE90)) #control handle line is perpendicular to line a14-a11 + a15.c2 = controlPoint(A, 'a15.c2', left(a15, length)) + #front waist control points from a15 to a13 + length = distance(a15, a13)/3.0 + a13.c1 = controlPoint(A, 'a13.c1', right(a15, 1.5*length)) + a13.c2 = controlPoint(A, 'a13.c2', polar(a13, length, angleOfLine(a13, a13.c1))) #second control aimed at first control point + #front side control points from a13 to a12 + length = distance(a13, a12)/3.0 + a12.c1 = controlPoint(A, 'a12.c1', up(a13, length)) + a12.c2 = controlPoint(A, 'a12.c2', down(a12, length)) + #front armscye control points from a16 to a3 to a4 to 16 + length1 = distance(a16, a3)/3.0 + length2 = distance(a3, a4)/3.0 + length3 = distance(a4, a6)/3.0 + angle1 = angleOfLine(a16, a3) + angle2 = ANGLE180 + angle3 = (angle1+angle2)/2.0 + a3.c1 = controlPoint(A, 'a3.c1', polar(a16, length1, angle1)) + a3.c2 = controlPoint(A, 'a3.c2', polar(a3, length1, angle3-ANGLE180)) + a4.c1 = controlPoint(A, 'a4.c1', polar(a3, length2, angle3)) + angle4 = angleOfLine(a3, a6) + angle5 = angleOfLine(a4, a6) + angle6 = (angle4+angle5)/2.0 + a4.c2 = controlPoint(A, 'a4.c2', polar(a4, 1.5*length2, angle6-ANGLE180)) + a6.c1 = controlPoint(A, 'a6.c1', polar(a4, length3, angle6)) + a6.c2 = controlPoint(A, 'a6.c2', polar(a6, length3/2.0, angleOfLine(a8, a6)+ANGLE90)) + + #back control points - path runs clockwise from back nape b1 + #back neck control points from b7 to b1 + length = distance(b7, b1)/3.0 + b1.c1 = controlPoint(B, 'b1.c1', down(b7, length/2.0)) #short control point handle + b1.c2 = controlPoint(B, 'b1.c2', left(b1, length*2)) #long control point handle + #back side control points from b11 to b9 + length = distance(b11, b9)/3.0 + b9.c1 = controlPoint(B, 'b9.c1', up(b11, length)) + b9.c2 = controlPoint(B, 'b9.c2', down(b9, length)) + #back armscye points from b13 to b12 to b8 + length1 = distance(b13, b12)/3.0 + length2 = distance(b12, b8)/3.0 + angle1 = angleOfLine(b13, b8) + b12.c1 = controlPoint(B, 'b12.c1', polar(b13, length1, angleOfLine(a3.c1, a16))) + b12.c2 = controlPoint(B, 'b12.c2', polar(b12, length1, angle1-ANGLE180)) + b8.c1 = controlPoint(B, 'b8.c1', polar(b12, length2, angle1)) + b8.c2 = controlPoint(B, 'b8.c2', polar(b8, length2/2.0, angleOfLine(b7, b8)-ANGLE90)) + + #sleeve C + c1 = patternPointXY(C, 'c1', 0.0, 0.0) #A + c2 = patternPoint(C, 'c2', down(c1, overarm_length)) #B + c3 = patternPoint(C, 'c3', up(c2, elbow_height)) #C + c4 = patternPoint(C, 'c4', right(c2, 1*IN)) #D + c5 = patternPoint(C, 'c5', right(c3, 0.5*IN)) #E + c6 = patternPoint(C, 'c6', left(c1, 1*IN)) #F + c7 = patternPoint(C, 'c7', right(c4, 1*IN)) #G + c8 = patternPoint(C, 'c8', right(c7, hand_circumference+2*IN)) #H + c9 = patternPoint(C, 'c9', right(c8, 1*IN)) #I + c10 = patternPoint(C, 'c10', right(c5, 1*IN) )#J + c11 = patternPoint(C, 'c11', right(c10, elbow_circumference)) #K + c12 = patternPoint(C, 'c12', right(c11, 0.5*IN)) #L + c13 = patternPoint(C, 'c13', right(c1, armscye_circumference)) #M + c14 = patternPoint(C, 'c14', right(c13, 2*IN)) #N + c15 = patternPoint(C, 'c15', up(c1, 2.5*IN)) #O + c16 = patternPoint(C, 'c16', right(c1, 1.5*IN)) #P + c17 = patternPoint(C, 'c17', left(c13, 3*IN)) #Q + c18 = patternPointXY(C, 'c18', c16.x, c15.y) #R + c19 = patternPointXY(C, 'c19', c17.x, c15.y) #S + c20 = patternPoint(C, 'c20', midPoint(c16, c17)) #T + c21 = patternPoint(C, 'c21', up(c20, distance(c20, c18))) #U - above T + c22 = patternPoint(C, 'c22', down(midPoint(c7, c8), 0.75*IN)) #V - was U + c23 = patternPoint(C, 'c23', right(c4, distance(c4, c8)*3/5.0)) #W + c24 = patternPoint(C, 'c24', up(c23, distance(c4, c3)/3.0)) #X - was V + c25 = patternPoint(C, 'c25', down(c23, 0.75*IN)) #Y - new point + # sleeve C control points + # sleevecap c6 to c18 to c21 to c19 to c13 to c14 + length1 = distance(c6, c18)/3.0 + length2 = distance(c18, c21)/3.0 + c21.c2 = controlPoint(C, 'c21.c2', left(c21, length2)) + c21.c1 = controlPoint(C, 'c21.c1', polar(c18, length2, angleOfLine(c18, c21.c2))) + angle = angleOfLine(c6, c18)+angleOfVector(c18, c6, c1)/2.0 + c18.c1 = controlPoint(C, 'c18.c1', polar(c6, length1, angle)) + c18.c2 = controlPoint(C, 'c18.c2', polar(c18, length1, angleOfLine(c21.c1, c18))) + length1 = distance(c21, c19)/3.0 + length2 = distance(c19, c13)/3.0 + length3 = distance(c13, c14)/3.0 + c19.c1 = controlPoint(C, 'c19.c1', right(c21, length1)) + c19.c2 = controlPoint(C, 'c19.c2', polar(c19, length1, angleOfLine(c19, c19.c1))) + c13.c1 = controlPoint(C, 'c13.c1', polar(c19, length2, angleOfLine(c19.c2, c19))) + angle1 = angleOfLine(c13.c1, c13)/2.0 + c13.c2 = controlPoint(C, 'c13.c2', polar(c13, length2, angle1+ANGLE180)) + c14.c1 = controlPoint(C, 'c14.c1', polar(c13, length3, angle1)) + c14.c2 = controlPoint(C, 'c14.c2', polar(c14, length3, angleOfLine(c18.c1, c6))) + # c14 to c12 + length = distance(c14, c12)/3.0 + c12.c2 = controlPoint(C, 'c12.c2', polar(c12, length, angleOfLine(c9, c12))) + c12.c1 = controlPoint(C, 'c12.c1', polar(c14, length, angleOfLine(c14, c12.c2))) + # c9 to c25 + length = distance(c9, c25)/3.0 + c25.c2 = controlPoint(C, 'c25.c2', right(c25, length)) + c25.c1 = controlPoint(C, 'c25.c1', polar(c9, length, angleOfLine(c9, c25.c2))) + #c22 to c4 + length = distance(c22, c4)/3.0 + c4.c1 = controlPoint(C, 'c4.c1', left(c22, length)) + c4.c2 = controlPoint(C, 'c4.c2', polar(c4, length, angleOfLine(c4, c4.c1))) + #c5 to c6 + length = distance(c5, c6)/3.0 + c6.c1 = controlPoint(C, 'c6.c1', polar(c5, length, angleOfLine(c4, c5))) + c6.c2 = controlPoint(C, 'c6.c2', polar(c6, length, angleOfLine(c6, c6.c1))) + + + #cuff D + d1 = patternPointXY(D, 'd1', 0, 0) + d2 = patternPoint(D, 'd2', right(d1, hand_circumference+2*IN)) + d3 = patternPoint(D, 'd3', down(d2, 3*IN)) + d4 = patternPoint(D, 'd4', up(d3, 0.75*IN)) + d5 = patternPoint(D, 'd5', left(d3, 1*IN)) + d6 = patternPoint(D, 'd6', down(d1, 3*IN)) + d7 = patternPoint(D, 'd7', right(d6, 1*IN)) + d8 = patternPoint(D, 'd8', up(d6, 0.75*IN)) + length1 = 0.7*distance(d1, d6) + length2 = 0.75*IN + d9 = patternPointXY(D, 'd9', d1.x+0.5*IN, d1.y+length1) + d10 = patternPoint(D, 'd10', right(d9, length2)) + d11 = patternPointXY(D, 'd11', d2.x-0.5*IN, d2.y+length1) + d12 = patternPoint(D, 'd12', left(d11, length2)) + #cuff D control points + length = distance(d4, d5)/3.0 + d5.c1 = controlPoint(D, 'd5.c1', down(d4, length)) + d5.c2 = controlPoint(D, 'd5.c2', right(d5, length)) + d8.c1 = controlPoint(D, 'd8.c1', left(d7, length)) + d8.c2 = controlPoint(D, 'd8.c2', down(d8, length)) + + # all points are defined, now create paths with them... + # pattern marks, labels, grainlines, seamlines, cuttinglines, darts, etc. + + #bodice front A + #letter + pnt1 = Point('', a8.x, a6.c1.y) + addText(A, 'A_letter', pnt1.x, pnt1.y, 'A', fontsize = '72') + #label + pnt2 = down(pnt1, 0.5*IN) + addText(A, 'A_label', pnt2.x, pnt2.y, 'Bodice Front', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(A, 'A_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + aG1 = down(a11, front_waist_length/3.0) + aG2 = polar(aG1, front_waist_length/2.0, angleOfLine(a11, a14)) + path_str = formatPath('M', aG1, 'L', aG2) + A_grainline = addPath(A, 'A_grainline', path_str, 'grainline') + # gridline - helpful for troubleshooting during design phase + path_str = formatPath('M', a1, 'L', a3, 'M', a4, 'L', a2, 'M', a8, 'L', a15, 'M', a11, 'L', a10, 'M', a7, 'L', a5) + A_gridline = addPath(A, 'A_gridline', path_str, 'gridline') + #seamline & cuttingline + path_str = formatPath('M', a11, 'L', a14, 'C', a15.c1, a15.c2, a15, 'C', a13.c1, a13.c2, a13, 'C', a12.c1, a12.c2, a12) + path_str = path_str+formatPath('L', a16, 'C', a3.c1, a3.c2, a3, 'C', a4.c1, a4.c2, a4, 'C', a6.c1, a6.c2, a6, 'L', a8, 'C', a11.c1, a11.c2, a11) + A_seamline = addPath(A, 'A_seamline', path_str, 'seamline') + A_cuttingline = addPath(A, 'A_cuttingline', path_str, 'cuttingline') + + #bodice back B + #letter + pnt1 = Point('', b8.x*2/3.0, b8.c2.y) + addText(B, 'B_letter', pnt1.x, pnt1.y, 'B', fontsize = '72') # + #label + pnt2 = down(pnt1, 0.5*IN) + addText(B, 'B_name', pnt2.x, pnt2.y, 'Bodice Back', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(B, 'B_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + bG1 = down(b7, front_waist_length/3.0) + bG2 = down(bG1, front_waist_length/2.0) + path_str = formatPath('M', bG1, 'L', bG2) + B_grainline = addPath(B, 'B_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', b1, 'L', b2, 'M', b11, 'L', b9, 'M', b9, 'L', b10, 'M', b7, 'L', b6, 'L', b1, 'M', b11, 'L', b10) + B_gridline = addPath(B, 'B_gridline', path_str, 'gridline') + #seamline & cuttingline + path_str = formatPath('M', b1, 'L', b2, 'L', b11, 'C', b9.c1, b9.c2, b9, 'L', b13, 'C', b12.c1, b12.c2, b12, 'C', b8.c1, b8.c2, b8, 'L', b7, 'C', b1.c1, b1.c2, b1) + B_seamline = addPath(B, 'B_seamline', path_str, 'seamline') + B_cuttingline = addPath(B, 'B_cuttingline', path_str, 'cuttingline') + + #bodice sleeve C + #letter + pnt1 = Point('', c19.c1.x, c12.c1.y) + addText(C, 'C_letter', pnt1.x, pnt1.y, 'C', fontsize = '72') # + #label + pnt2 = down(pnt1, 0.5*IN) + addText(C, 'C_name', pnt2.x, pnt2.y, 'Bodice Sleeve', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(C, 'C_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + cG1 = c20 + cG2 = down(cG1, overarm_length/2.0) + path_str = formatPath('M', cG1, 'L', cG2) + C_grainline = addPath(C, 'C_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', c15, 'L', c2, 'M', c15, 'L', c19, 'M', c2, 'L', c9, 'M', c3, 'L', c12, 'M', c6, 'L', c14, 'M', c18, 'L', c16, 'M', c19, 'L', c17) + C_gridline = addPath(C, 'C_gridline', path_str, 'gridline') + # slashline + path_str = formatPath('M', c24, 'L', c25) + C_slashline = addPath(C, 'C_slashline', path_str, 'slashline') + #seamline & cuttingline + path_str = formatPath('M', c6, 'C', c18.c1, c18.c2, c18, 'C', c21.c1, c21.c2, c21, 'C', c19.c1, c19.c2, c19, 'C', c13.c1, c13.c2, c13, 'C', c14.c1, c14.c2, c14) + path_str += formatPath('C', c12.c1, c12.c2, c12, 'L', c9, 'C', c25.c1, c25.c2, c25, 'L', c22, 'C', c4.c1, c4.c2, c4, 'L', c5, 'C', c6.c1, c6.c2, c6) + C_seamline = addPath(C, 'C_seamline', path_str, 'seamline') + C_cuttingline = addPath(C, 'C_cuttingline', path_str, 'cuttingline') + + #bodice cuff D + #letter + pnt1 = Point('', d7.x, d6.y/4.0) + addText(D, 'D_letter', pnt1.x, pnt1.y, 'D', fontsize = '38') # + #label + pnt2 = right(pnt1, 1*IN) + addText(D, 'C_name', pnt2.x, pnt2.y, 'Bodice Sleeve Cuff', fontsize = '30') + #label + pnt3 = right(pnt2, 4*IN) + addText(D, 'C_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '24') + pnt3 = down(pnt3, 0.3*IN) + addText(D, 'C_finterfacing', pnt3.x, pnt3.y, 'Cut 2 of interfacing', fontsize = '24') + #grainline points + pnt1 = midPoint(d1, d6) + dG1 = right(pnt1, distance(d1, d2)/4.0) + dG2 = right(dG1, distance(d1, d2)/2.0) + path_str = formatPath('M', dG1, 'L', dG2) + D_grainline = addPath(D, 'D_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', d1, 'L', d2, 'L', d4, 'L', d5, 'L', d7, 'L', d8, 'L', d1) + D_gridline = addPath(D, 'D_gridline', path_str, 'gridline') + # slashline + path_str = formatPath('M', d9, 'L', d10, 'M', d11, 'L', d12) + D_slashline = addPath(D, 'D_slashline', path_str, 'slashline') + #seamline & cuttingline + path_str = formatPath('M', d1, 'L', d2, 'L', d4, 'C', d5.c1, d5.c2, d5, 'L', d7, 'C', d8.c1, d8.c2, d8, 'L', d1) + D_seamline = addPath(D, 'D_seamline', path_str, 'seamline') + D_cuttingline = addPath(D, 'D_cuttingline', path_str, 'cuttingline') + + #layout patterns on document in rows + dx = BORDER+SEAM_ALLOWANCE #left border, allow width for seam allowance + dy = BORDER+NOTE_HEIGHT+2*SEAM_ALLOWANCE # print pattern under the note header, allow height for seam allowance plus extra space + pattern_buffer = 3*SEAM_ALLOWANCE #between any two patterns need 2 seam allowances plus additional space + # first row + pattern_offset = dx + row_offset = dy + #layout bodice front A + adx = pattern_offset-a14.x #left border offset dx, translate leftmost A point a14 to this offset + ady = row_offset-a8.y #upper height offset dy, translate highest A point a8 + A.set('transform', 'translate('+str(adx)+' '+str(ady)+')') + pattern_offset = adx+a12.x+pattern_buffer + #layout bodice front B + bdx = pattern_offset-b9.x #translate leftmost B point + bdy = row_offset-b6.y #translate highest B point + B.set('transform', 'translate('+str(bdx)+' '+str(bdy)+')') + + #2nd row + pattern_offset = dx + row_offset = ady+a15.y+pattern_offset # row_offset + lowest point from previous row, plus pattern_offset + #layout sleeve C + cdx = pattern_offset-c6.x + cdy = row_offset-c21.y + C.set('transform', 'translate('+str(cdx)+' '+str(cdy)+')') + pattern_offset = cdx+c14.x+pattern_buffer + #layout cuff D + ddx = pattern_offset-d1.x + ddy = row_offset-d1.y + D.set('transform', 'translate('+str(ddx)+' '+str(ddy)+')') + #3rd row, use this to calculate document height + row_offset = cdy+c25.y + + #resize document to fit pattern piece layout + width = ddx+d2.x # use pattern piece that appears farthest to the right in Inkscape canvas + doc_width = width+2*SEAM_ALLOWANCE+2*BORDER + doc.set('width', str(doc_width)) + doc_height = row_offset+SEAM_ALLOWANCE+BORDER + doc.set('height', str(doc_height)) + + #Place notes on document after pattern pieces are transformed so that notes are centered on correct width + x = doc_width/2.0 + y = BORDER + i = 0 + for item in notes: + addText(bodice, 'note'+str(i), x, y, item, fontsize = '28', textalign = 'center', textanchor = 'middle', reference = 'false') + y = y+0.33*IN + + +effect = ShirtWaistAllington() +effect.affect() + diff --git a/fablabchemnitz_slider_electrodes.inx b/fablabchemnitz_slider_electrodes.inx new file mode 100644 index 0000000..63d3272 --- /dev/null +++ b/fablabchemnitz_slider_electrodes.inx @@ -0,0 +1,20 @@ + + + <_name>Slider Electrodes + fablabchemnitz.de.slider_electrodes + inkex.py + fablabchemnitz_slider_electrodes.py + 5 + 5 + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_slider_electrodes.py b/fablabchemnitz_slider_electrodes.py new file mode 100644 index 0000000..d7014fc --- /dev/null +++ b/fablabchemnitz_slider_electrodes.py @@ -0,0 +1,71 @@ +from cStringIO import StringIO +import inkex +import simplestyle + +class SliderElectrodes(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-c", "--count", action="store", type="int", dest="count", default=5, help="Number of electrodes") + self.OptionParser.add_option("-s", "--spikes", action="store", type="int", dest="spikes", default=5, help="Number of spikes") + + def genPathString(self, bounds, spikeWidth, first=False, last=False): + s = StringIO() + + cx = bounds[0] + cy = bounds[1] + stepx = spikeWidth + stepy = (bounds[3] - bounds[1]) / (2.0 * self.options.spikes) + + s.write(" M %f, %f " % (bounds[0], bounds[1])) + + if first: + s.write(" L %f, %f " % (bounds[0], bounds[3])) + else: + for i in range(self.options.spikes): + s.write(" L %f, %f " % (bounds[0] + stepx, bounds[1] + (2 * i + 1) * stepy)) + s.write(" L %f, %f " % (bounds[0], bounds[1] + (2 * i + 2) * stepy)) + + if last: + s.write(" L %f, %f " % (bounds[2], bounds[3])) + s.write(" L %f, %f " % (bounds[2], bounds[1])) + else: + s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3])) + for i in range(self.options.spikes): + s.write(" L %f, %f " % (bounds[2], bounds[3] - (2 * i + 1) * stepy)) + s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3] - (2 * i + 2) * stepy)) + s.write(" Z ") + return s.getvalue() + + def effect(self): + svg = self.document.getroot() + width = self.unittouu(self.document.getroot().get('width')) + height = self.unittouu(self.document.getroot().get('height')) + + group = inkex.etree.SubElement(self.current_layer, 'g', { + inkex.addNS('label', 'inkscape') : 'Slider electrodes' + }) + + style = { + 'stroke' : 'none', + 'fill' : '#000000' + } + + eWidth = width / self.options.count + spikeWidth = 0.6 * eWidth + + for eid in range(self.options.count): + if eid == 0: + path = self.genPathString((eid * eWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth, first=True) + elif eid == self.options.count - 1: + path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth, height), spikeWidth, last=True) + else: + path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth) + + e = inkex.etree.SubElement(group, inkex.addNS('path', 'svg'), { + 'style' : simplestyle.formatStyle(style), + 'd' : path + }) + +if __name__ == '__main__': + effect = SliderElectrodes() + effect.affect() diff --git a/fablabchemnitz_split_bezier.inx b/fablabchemnitz_split_bezier.inx new file mode 100644 index 0000000..8cf3eae --- /dev/null +++ b/fablabchemnitz_split_bezier.inx @@ -0,0 +1,38 @@ + + + <_name>Split Bezier (Subdivide Path) + fablabchemnitz.de.split_bezier + fablabchemnitz_split_bezier.py + inkex.py + + + 10 + + px + pt + in + mm + cm + % + Subdivision Count + + 5 + + + + <_param name="subdividePathhelp" type="description" xml:space="preserve">This effect subdivides the bezier path into individual segments based on the maximum length or the subdivision count provided. Precision field denotes the number of significant digits, to which the length is rounded. + + + + + path + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_split_bezier.py b/fablabchemnitz_split_bezier.py new file mode 100644 index 0000000..35abcb9 --- /dev/null +++ b/fablabchemnitz_split_bezier.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python + +''' +Inkscape extension to subdivide the selected bezier paths based on max length value or count + +Copyright (C) 2018 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex, cubicsuperpath, bezmisc, simpletransform, sys +import copy +from math import ceil + +DEF_ERR_MARGIN = 0.0001 + +def getPartsFromCubicSuper(cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + +def getCubicSuperFromParts(parts): + cbsuper = [] + for part in parts: + subpath = [] + lastPt = None + pt = None + for seg in part: + if(pt == None): + ptLeft = seg[0] + pt = seg[0] + ptRight = seg[1] + subpath.append([ptLeft, pt, ptRight]) + ptLeft = seg[2] + pt = seg[3] + subpath.append([ptLeft, pt, pt]) + cbsuper.append(subpath) + return cbsuper + +def floatCmpWithMargin(float1, float2, margin = DEF_ERR_MARGIN): + return abs(float1 - float2) < margin + + +class SubdividePathEffect(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + + self.OptionParser.add_option('--maxLength', action = 'store', + type = 'float', dest = 'maxLength', default = '10', + help = 'Maximum Length of New Segments') + + self.OptionParser.add_option('--unit', action = 'store', + type = 'string', dest = 'unit', default = 'mm', + help = 'Unit of Measurement') + + self.OptionParser.add_option('--precision', action = 'store', + type = 'int', dest = 'precision', default = '5', + help = 'Number of significant digits') + + self.OptionParser.add_option("--tab", action="store", + type="string", dest="tab", default="sampling", help="Tab") + + self.OptionParser.add_option("--separateSegs", + action="store", type="inkbool", + dest="separateSegs", default=True) + + def effect(self): + + maxL = None + separateSegs = self.options.separateSegs + + if(self.options.unit != 'perc' and self.options.unit != 'count'): + maxL = self.options.maxLength * self.unittouu('1'+self.options.unit) + + # ~ inkex.errormsg(_(str(maxL))) + tolerance = 10 ** (-1 * self.options.precision) + + selections = self.selected + pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS) + + paths = [(pathNode.get('id'), cubicsuperpath.parsePath(pathNode.get('d'))) \ + for pathNode in pathNodes if (pathNode.get('id') in selections.keys())] + + if(len(paths) > 0): + for key, cspath in paths: + parts = getPartsFromCubicSuper(cspath) + partsSplit = False + + for i, part in enumerate(parts): + + newSegs = [] + for j, seg in enumerate(part): + + segL = bezmisc.bezierlengthSimpson((seg[0], seg[1], + seg[2], seg[3]), tolerance = tolerance) + + if(maxL != None): + divL = maxL + elif(self.options.unit == 'perc'): + divL = segL * self.options.maxLength / 100 + else: + divL = segL / ceil(self.options.maxLength) + + if(segL > divL): + + coveredL = 0 + s = seg + s1 = None + s2 = DEF_ERR_MARGIN #Just in case + + while(not floatCmpWithMargin(segL, coveredL)): + if(s == seg): + sL = segL + else: + sL = bezmisc.bezierlengthSimpson((s[0], s[1], + s[2], s[3]), tolerance = tolerance) + + if(floatCmpWithMargin(segL, coveredL + divL)): + s2 = s + break + else: + if(segL > (coveredL + divL)): + t1L = divL + else: + t1L = segL - coveredL + + t1 = bezmisc.beziertatlength((s[0], s[1], s[2], s[3]), + l = t1L / sL , tolerance = tolerance) + s1, s2 = bezmisc.beziersplitatt((s[0], s[1], s[2], s[3]), t1) + coveredL += t1L + newSegs.append(s1) + s = s2 + newSegs.append(s2) + else: + newSegs.append(seg) + + if(len(newSegs) > len(part)): + parts[i] = newSegs + partsSplit = True + + if(partsSplit or separateSegs): + elem = selections[key] + if(separateSegs): + parent = self.getParentNode(elem) + idx = parent.index(elem) + parent.remove(elem) + allSegs = [seg for part in parts for seg in part] + idSuffix = 0 + for seg in allSegs: + cspath = getCubicSuperFromParts([[seg]]) + newElem = copy.copy(elem) + oldId = newElem.get('id') + newElem.set('d', cubicsuperpath.formatPath(cspath)) + newElem.set('id', oldId + str(idSuffix).zfill(5)) + parent.insert(idx, newElem) + idSuffix += 1 + else: + cspath = getCubicSuperFromParts(parts) + elem.set('d', cubicsuperpath.formatPath(cspath)) + +effect = SubdividePathEffect() +effect.affect() diff --git a/fablabchemnitz_sprockets.inx b/fablabchemnitz_sprockets.inx new file mode 100644 index 0000000..8b02799 --- /dev/null +++ b/fablabchemnitz_sprockets.inx @@ -0,0 +1,34 @@ + + + <_name>Sprocket + fablabchemnitz.de.sprockets + fablabchemnitz_sprockets.py + inkex.py + 24 + + <_item value="ANSI #25">ANSI #25 + <_item value="ANSI #35">ANSI #35 + <_item value="ANSI #40">ANSI #40 + <_item value="ANSI #50">ANSI #50 + <_item value="ANSI #60">ANSI #60 + <_item value="ANSI #80">ANSI #80 + <_item value="ANSI #100">ANSI #100 + <_item value="ANSI #120">ANSI #120 + <_item value="ANSI #140">ANSI #140 + <_item value="ANSI #160">ANSI #160 + <_item value="ANSI #180">ANSI #180 + <_item value="ANSI #200">ANSI #200 + <_item value="ANSI #240">ANSI #240 + + + all + + + + + + + + diff --git a/fablabchemnitz_sprockets.py b/fablabchemnitz_sprockets.py new file mode 100644 index 0000000..a833c25 --- /dev/null +++ b/fablabchemnitz_sprockets.py @@ -0,0 +1,221 @@ +#! /usr/bin/env python +''' +Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Based on gears.py by Aaron Spike and Tavmjong Bah +''' + +import inkex +import simplestyle +import sys +from math import * +from fablabchemnitz_svg import * + +class Sprockets(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("-t", "--teeth", + action="store", type="int", + dest="teeth", default=24, + help="Number of teeth") + self.OptionParser.add_option("-s", "--size", + action="store", type="string", + dest="size", default="ANSI #40", + help="Chain size (common values ANSI #35, ANSI #40, ANSI #60)") + + def get_pitch(self, size): + return self.unittouu({ + 'ANSI #25': '6.35mm', + 'ANSI #35': '9.53mm', + 'ANSI #40': '12.70mm', + 'ANSI #41': '12.70mm', + 'ANSI #50': '15.88mm', + 'ANSI #60': '19.05mm', + 'ANSI #80': '25.40mm', + 'ANSI #100': '31.75mm', + 'ANSI #120': '38.10mm', + 'ANSI #140': '44.45mm', + 'ANSI #160': '50.80mm', + 'ANSI #180': '57.15mm', + 'ANSI #200': '63.50mm', + 'ANSI #240': '76.20mm' + }[size]) + + def get_roller_diameter(self, size): + return self.unittouu({ + 'ANSI #25': '3.30mm', + 'ANSI #35': '5.08mm', + 'ANSI #40': '7.77mm', + 'ANSI #41': '7.92mm', + 'ANSI #50': '10.16mm', + 'ANSI #60': '11.91mm', + 'ANSI #80': '15.88mm', + 'ANSI #100': '19.05mm', + 'ANSI #120': '22.23mm', + 'ANSI #140': '25.40mm', + 'ANSI #160': '28.58mm', + 'ANSI #180': '37.08mm', + 'ANSI #200': '39.67mm', + 'ANSI #240': '47.63mm' + }[size]) + + def invertX(self, p): + return (-p[0], p[1]) + + def effect(self): + size = self.options.size + + P = self.get_pitch(size) + N = self.options.teeth + PD = P / sin(pi / N) + PR = PD / 2 + + # Equations taken from + # http://www.gearseds.com/files/design_draw_sprocket_5.pdf + # Also referenced: + # http://en.wikipedia.org/wiki/Roller_chain (of course) + # and + # Chains for Power Transmission and Material Handling: + # Design and Applications Handbook + # American Chain Association, 1982 + + Dr = self.get_roller_diameter(size) + Ds = 1.0005 * Dr + self.unittouu('0.003in') + R = Ds / 2 # seating curve radius + A = radians(35 + 60 / N) + B = radians(18 - 56 / N) + ac = 0.8 * Dr + M = ac * cos(A) + T = ac * sin(A) + E = 1.3025 * Dr + self.unittouu('0.0015in') # transition radius + ab = 1.4 * Dr + W = ab * cos(pi / N) + V = ab * sin(pi / N) + F = Dr * (0.8 * cos(radians(18 - 56 / N)) + 1.4 * cos(radians(17 - 64 / N)) - 1.3025) - self.unittouu('0.0015in') # topping curve radius + + svg = "" + + t_inc = 2.0 * pi / float(N) + thetas = [(x * t_inc) for x in range(N)] + + for theta in thetas: + # Seating curve center + seatC = (0, -PR) + + # Transitional curve center + c = (M, -PR - T) + + # Calculate line cx, angle A from x axis + # Y = mX + b + cx_m = -tan(A) # Negative because we're in -Y space + cx_b = c[1] - cx_m * c[0] + + # Calculate intersection of cx with circle S to get point x + # http://math.stackexchange.com/questions/228841/how-do-i-calculate-the-intersections-of-a-straight-line-and-a-circle + qA = cx_m * cx_m + 1 + qB = 2 * (cx_m * cx_b - cx_m * seatC[1] - seatC[0]) + qC = seatC[1] * seatC[1] - R * R + seatC[0] * seatC[0] - 2 * cx_b * seatC[1] + cx_b * cx_b + cx_X = (-qB - sqrt(qB * qB - 4 * qA * qC)) / (2 * qA) + + # Seating curve/Transitional curve junction + x = (cx_X, cx_m * cx_X + cx_b) + + # Calculate line cy, angle B past cx + cy_m = -tan(A - B) + cy_b = c[1] - cy_m * c[0] + + # Calculate point y (E along cy from c) + # http://www.physicsforums.com/showthread.php?t=419561 + yX = c[0] - E / sqrt(1 + cy_m * cy_m) + + # Transitional curve/Tangent line junction + y = (yX, cy_m * yX + cy_b) + + # Solve for circle T with radius E which passes through x and y + # http://mathforum.org/library/drmath/view/53027.html + # http://stackoverflow.com/questions/12264841/determine-circle-center-based-on-two-points-radius-known-with-solve-optim + z = ((x[0] + y[0]) / 2, (x[1] + y[1]) / 2) + x_diff = y[0] - x[0] + y_diff = y[1] - x[1] + q = sqrt(x_diff * x_diff + y_diff * y_diff) + tX = z[0] + sqrt(E * E - (q / 2) * (q / 2)) * (x[1] - y[1]) / q + tY = z[1] + sqrt(E * E - (q / 2) * (q / 2)) * (y[0] - x[0]) / q + + # Transitional curve center + tranC = (tX, tY) + + # Tangent line -- tangent to transitional curve at point y + tanl_m = -(tranC[0] - y[0]) / (tranC[1] - y[1]) + tanl_b = -y[0] * tanl_m + y[1] + t_off = (y[0] - 10, tanl_m * (y[0] - 10) + tanl_b) + + # Topping curve center + topC = (-W, -PR + V) + + # Adjust F to force topping curve tangent to tangent line + F = abs(topC[1] - tanl_m * topC[0] - tanl_b) / sqrt(tanl_m * tanl_m + 1) * 1.0001 # Final fudge needed to overcome numerical instability + + # Find intersection point between topping curve and tangent line + ttA = tanl_m * tanl_m + 1 + ttB = 2 * (tanl_m * tanl_b - tanl_m * topC[1] - topC[0]) + ttC = topC[1] * topC[1] - F * F + topC[0] * topC[0] - 2 * tanl_b * topC[1] + tanl_b * tanl_b + tanl_X = (-ttB - sqrt(ttB * ttB - 4 * ttA * ttC)) / (2 * ttA) + + # Tagent line/Topping curve junction + tanl = (tanl_X, tanl_m * tanl_X + tanl_b) + + # Calculate tip line, angle t_inc/2 from Y axis + tip_m = -tan(pi / 2 + t_inc / 2) # Negative because we're in -Y space + tip_b = 0 + + # Calculate intersection of tip line with topping curve + tA = tip_m * tip_m + 1 + tB = 2 * (tip_m * tip_b - tip_m * topC[1] - topC[0]) + tC = topC[1] * topC[1] - F * F + topC[0] * topC[0] - 2 * tip_b * topC[1] + tip_b * tip_b + tip_X = (-tB - sqrt(tB * tB - 4 * tA * tC)) / (2 * tA) + + # Topping curve top + tip = (tip_X, tip_m * tip_X + tip_b) + + # Set initial location if needed + if (theta == 0): + svg += SVG_move(tip, theta) + + svg += SVG_circle(tanl, F, 1, theta) # Topping curve left + svg += SVG_line(y, theta) # Tangent line left + svg += SVG_circle(x, E, 0, theta) # Transitional curve left + svg += SVG_circle(self.invertX(x), R, 0, theta) # Seating curve + svg += SVG_circle(self.invertX(y), E, 0, theta) # Transitionl curve right + svg += SVG_line(self.invertX(tanl), theta) # Tangent line right + svg += SVG_circle(self.invertX(tip), F, 1, theta) # Topping curve right + + svg += SVG_close() + + # Insert as a new element + sprocket_style = { 'stroke': '#000000', + 'stroke-width': '0.1', + 'fill': 'none' + } + g_attribs = {inkex.addNS('label','inkscape'): 'Sprocket ' + size + "-" + str(N), + 'transform': 'translate(' + str(self.view_center[0]) + ',' + str(self.view_center[1]) + ')', + 'style' : simplestyle.formatStyle(sprocket_style), + 'd' : svg } + g = inkex.etree.SubElement(self.current_layer, inkex.addNS('path','svg'), g_attribs) + +if __name__ == '__main__': + e = Sprockets() + e.affect() diff --git a/fablabchemnitz_streaks.inx b/fablabchemnitz_streaks.inx new file mode 100644 index 0000000..09e642c --- /dev/null +++ b/fablabchemnitz_streaks.inx @@ -0,0 +1,48 @@ + + + <_name>Streaks + fablabchemnitz.de.streaks + fablabchemnitz_streaks.py + inkex.py + + + <_param name="h" type="description">Fills a box with a texture + made of vertical line segments. + 0 + <_param name="help" type="description" xml:space="preserve"> + ----------- + + 2 + + + 2 + 50 + true + <_param name="help" type="description" xml:space="preserve">----------- + true + 500 + 500 + + + 8 + true + true + true + true + 100 + <_param name="h" type="description">This sets the size of a dot relative to + the total height. Higher is shorter. + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_streaks.py b/fablabchemnitz_streaks.py new file mode 100644 index 0000000..7adc62f --- /dev/null +++ b/fablabchemnitz_streaks.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import sys +sys.path.append('/usr/share/inkscape/extensions') + +import random +rr = random.randint(1,10) + +# We will use the inkex module with the predefined Effect base class. +import inkex +# The simplestyle module provides functions for style parsing. +from simplestyle import * + +class StreaksEffect(inkex.Effect): + """ + Fill a box with vertical streaks. + """ + def __init__(self): + # Call the base class constructor. + inkex.Effect.__init__(self) + + self.OptionParser.add_option('-b', '--blur', action = 'store', + type = 'int', dest = 'blur', default = 2, + help = 'No help') + + self.OptionParser.add_option('-l', '--linno', action = 'store', + type = 'int', dest = 'linno', default = 50, + help = 'No help') + + self.OptionParser.add_option('-x', '--xrand', action = 'store', + type = 'inkbool', dest = 'xrand', default = True, + help = 'No help') + + self.OptionParser.add_option('-p', '--pagep', action = 'store', + type = 'inkbool', dest = 'pagep', default = True, + help = 'No help') + + self.OptionParser.add_option('-X', '--cusx', action = 'store', + type = 'int', dest = 'cusx', default = 500, + help = 'No help') + + self.OptionParser.add_option('-Y', '--cusy', action = 'store', + type = 'int', dest = 'cusy', default = 500, + help = 'No help') + + self.OptionParser.add_option('-s', '--segLen', action = 'store', + type = 'int', dest = 'segLen', default = 8, + help = 'No help') + + self.OptionParser.add_option('-y', '--yrand', action = 'store', + type = 'inkbool', dest = 'yrand', default = True, + help = 'No help') + + self.OptionParser.add_option('-u', '--dashp', action = 'store', + type = 'inkbool', dest = 'dashp', default = True, + help = 'No help') + + self.OptionParser.add_option('-v', '--blankp', action = 'store', + type = 'inkbool', dest = 'blankp', default = True, + help = 'No help') + + self.OptionParser.add_option('-w', '--dotp', action = 'store', + type = 'inkbool', dest = 'dotp', default = True, + help = 'No help') + + self.OptionParser.add_option('-d', '--dits', action = 'store', + type = 'int', dest = 'dits', default = 100, + help = 'No help') + + self.OptionParser.add_option('', '--strokeColour', action = 'store', + type = 'str', dest = 'strokeColour', default = 255, + help = 'No help') + + self.OptionParser.add_option('', '--strokeWidth', action = 'store', + type = 'int', dest = 'strokeWidth', default = 2, + help = 'No help') + + self.OptionParser.add_option("", "--Nmain", action="store", + type="string", dest="active_tab", default='title', + help="Active tab.") + + def effect(self): + """ + Effect behaviour. + Overrides base class' method. + """ + blur = int( self.options.blur ) + linno = int( self.options.linno ) + xrand = bool( self.options.xrand ) + pagep = bool( self.options.pagep ) + cusx = int( self.options.cusx ) + cusy = int( self.options.cusy ) + segLen = int( self.options.segLen ) + yrand = bool( self.options.yrand ) + dashp = bool( self.options.dashp ) + blankp = bool( self.options.blankp ) + dotp = bool( self.options.dotp ) + dits = int( self.options.dits ) + strokeColour = int( self.options.strokeColour ) + strokeWidth = int( self.options.strokeWidth ) + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + if pagep : + try : + width = inkex.unittouu(svg.get('width')) + height = inkex.unittouu(svg.attrib['height']) + except AttributeError : + width = self.unittouu(svg.get('width')) + height = self.unittouu(svg.attrib['height']) +# inkex.errormsg("Page size %d %d" % (width, height)) + else : + width = cusx + height = cusy + + + # Find defs node. + for child in svg : + if -1 != child.tag.find("defs") : + break + else: + inkex.errormsg("No defs child found") + defs = child + + if blur : + filter = inkex.etree.SubElement(defs, "filter") + filter.set(inkex.addNS('collect', 'inkscape'), 'always' ) + filname = self.uniqueId( 'filter' ) + filter.set('id' , filname) + + finfo = inkex.etree.SubElement(filter, 'feGaussianBlur' ) + finfo.set(inkex.addNS('collect', 'inkscape'), 'always' ) + finfo.set( 'stdDeviation', str( blur ) ) + + """ Debug + for i in xrange( len(svg)) : + k = svg[i].attrib + for ky in k : + inkex.errormsg(ky) + + # Clean any old layers + flag = False + for i in xrange( len(svg)) : + dic = svg[i].attrib + for key in dic: + if -1 != key.find("label") : + if 'Streak Layer' == dic[key] : + del svg[i] + flag = True + if flag : + inkex.errormsg("Found old Streak layer") + else: + inkex.errormsg("Clean") +""" + # Create a new layer. + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Streak Layer' ) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # Create path element + path = inkex.etree.Element(inkex.addNS('path','svg')) + + alpha = strokeColour & 255 + color = ( strokeColour >> 8 ) & int( 'ffffff', 16 ) + style = { + 'stroke' : '#%06X' % color, + 'stroke-width' : str(strokeWidth), + } +# inkex.errormsg("Colour %s" % strokeColour) + + if blur : style['filter'] = 'url(#' + filname +')' + + + path.set('style', formatStyle(style)) + + pathstring = '' + seglim = int(height / segLen) + ditlen = int(height / dits) + + + xco = 0 + while xco < width : + y = 0 + flag = random.randint(0, 2) + while y < height : + if yrand : + yinc = random.randint(1, seglim) + else : + yinc = seglim + if flag == 1 and dashp: #Draw dash + pathstring += ' M '+str(xco)+','+str(y)+' L '+str(xco)+','+str(min( y + yinc, height)) + y += yinc + ditlen + elif flag == 2 and dotp: #Draw dots + ylim = min( y + yinc, height ) + while y < ylim : + pathstring += ' M '+str(xco)+','+str(y)+' L '+str(xco)+','+str(min( y + ditlen, height)) + y += 2*ditlen + elif flag == 0 and blankp : + y += yinc #Adding blank space + elif not (dashp or dotp or blankp) : #Squiggle if user turns them off + sdit = str(2*ditlen)+' ' + pathstring += ' M '+str(xco)+','+str(y)+' q '+ 2*sdit + '0 ' +sdit + for i in xrange(int(height/(2*ditlen))) : + pathstring += 't 0 '+sdit + y = height + flag = (flag + 1)%3 + if xrand : + xco += random.randint(0, int(2 * width / linno) ) + else : + xco += width / linno + path.set('d', pathstring ) + + # Connect elements together. + layer.append(path) + +# Create effect instance and apply it. +effect = StreaksEffect() +effect.affect() +sys.exit( 0 ) + diff --git a/fablabchemnitz_svg.py b/fablabchemnitz_svg.py new file mode 100644 index 0000000..6301457 --- /dev/null +++ b/fablabchemnitz_svg.py @@ -0,0 +1,34 @@ +from math import * + +def rotate(p, t): + return (p[0] * cos(t) - p[1] * sin(t), p[0] * sin(t) + p[1] * cos(t)) + +def SVG_move(p, t): + pp = rotate(p, t) + return 'M ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_line(p, t): + pp = rotate(p, t) + return 'L ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_circle(p, r, sweep, t): + pp = rotate(p, t) + return 'A ' + str(r) + ',' + str(r) + ' 0 0,' + str(sweep) + ' ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_curve(p, c1, c2, t): + pp = rotate(p, t) + c1p = rotate(c1, t) + c2p = rotate(c2, t) + return 'C ' + str(pp[0]) + ',' + str(pp[1]) + ' ' + str(c1p[0]) + ',' + str(c1p[1]) + ' ' + str(c2p[0]) + ',' + str(c2p[1]) + '\n' + +def SVG_curve2(p1, c11, c12, p2, c21, c22, t): + p1p = rotate(p1, t) + c11p = rotate(c11, t) + c12p = rotate(c12, t) + p2p = rotate(p2, t) + c21p = rotate(c21, t) + c22p = rotate(c22, t) + return 'C ' + str(p1p[0]) + ',' + str(p1p[1]) + ' ' + str(c11p[0]) + ',' + str(c11p[1]) + ' ' + str(c12p[0]) + ',' + str(c12p[1]) + ' ' + str(p2p[0]) + ',' + str(p2p[1]) + ' ' + str(c21p[0]) + ',' + str(c21p[1]) + ' ' + str(c22p[0]) + ',' + str(c22p[1]) + '\n' + +def SVG_close(): + return 'Z\n' diff --git a/fablabchemnitz_svg2fcsketch.inx b/fablabchemnitz_svg2fcsketch.inx new file mode 100644 index 0000000..eca1edf --- /dev/null +++ b/fablabchemnitz_svg2fcsketch.inx @@ -0,0 +1,29 @@ + + + <_name>FreeCAD Sketch Export + fablabchemnitz.de.svg2fcsketch + org.inkscape.output.svg.inkscape + fablabchemnitz_svg2fcsketch.py + + .fcstd + text/plain + <_filetypename>FreeCAD-0.17 Sketch (*.fcstd) + <_filetypetooltip>Export path objects to a FreeCAD sketch file + true + + + + true + + (C) 2018 Jürgen Weigert (juergen@fabmail.org) and contributors. + For updates, praise or bug reports please refer to + https://github.com/jnweiger/inkscape-svg2fcsketch + + + Version 0.8 + + + + \ No newline at end of file diff --git a/fablabchemnitz_svg2fcsketch.py b/fablabchemnitz_svg2fcsketch.py new file mode 100644 index 0000000..07c1905 --- /dev/null +++ b/fablabchemnitz_svg2fcsketch.py @@ -0,0 +1,1983 @@ +#! /usr/bin/python +# +# (C) 2018 juergen@fabmail.org +# Distribute under GPL-2.0 or ask. +# +# References: +# https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Sketcher/TestSketcherApp.py +# /usr/lib/freecad-daily/Mod/Sketcher/SketcherExample.py +# https://en.wikipedia.org/wiki/Rytz%27s_construction#Computer_aided_solution +# http://wiki.inkscape.org/wiki/index.php/Python_modules_for_extensions +# https://en.wikipedia.org/wiki/Composite_B%C3%A9zier_curve +# https://en.wikipedia.org/wiki/B-spline#Relationship_to_piecewise/composite_B%C3%A9zier +# +# v0.1 jw, initial draft refactoring inksvg to make it fit here. +# v0.2 jw, Introducing class SketchPathGen to seperate the sketch generator from the svg parser. +# v0.3 jw, correct _coord_from_svg() size and offset handling. Suppress +# silly version printing, that would ruin an inkscape extension. +# V0.4 jw, Added GuiDocument.xml for visibility and camera defaults. +# Using BoundBox() to compute camera placement. +# V0.5 jw, objEllipse() done correctly with _ellipse_vertices2d() +# V0.6 jw, objArc() done. ArcOfCircle() is a strange beast with rotation and mirroring. +# V0.7 jw, pathString() done. +# V0.8 jw, imported class SubPathTracker() from src/examples/sketch_spline.py +# + +from optparse import OptionParser +import os, sys, math, re + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): + sys.path.append('~/.config/inkscape/extensions') +else: # Linux + sys.path.append('/usr/share/inkscape/extensions/') + +import cubicsuperpath + +sys.path.append('/usr/lib/freecad-daily/lib/') # prefer daily over normal. +sys.path.append('/usr/lib/freecad/lib/') + +verbose=-1 # -1=quiet, 0=normal, 1=babble +epsilon = 0.00001 + +if verbose <= 0: + os.dup2(1,99) # hack to avoid silly version string printing. + f = open("/dev/null", "w") + os.dup2(f.fileno(), 1) + +# The version printing code has +# src/App/Application.cpp: if (!(mConfig["Verbose"] == "Strict")) +# but we cannot call SetConfig('Verbose', 'Strict') early enough. +from FreeCAD import Base, BoundBox +sys.stdout.flush() # push silly version string into /dev/null + +if verbose <= 0: + f.close() + os.dup2(99,1) # back in cansas. + +import Part, Sketcher # causes SEGV if Base is not yet imported from FreeCAD +import ProfileLib.RegularPolygon as Poly + +# CAUTION: Keep in sync with with svg2fcsketch.inx ca. line 3 and line 24 +__version__ = '0.8' + +#! /usr/bin/python +# +# inksvg.py - parse an svg file into a plain list of paths. +# +# (C) 2017 juergen@fabmail.org, authors of eggbot and others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +################# +# 2017-12-04 jw, v1.0 Refactored class InkSvg from cookiecutter extension +# 2017-12-07 jw, v1.1 Added roundedRectBezier() +# 2017-12-10 jw, v1.3 Added styleDasharray() with stroke-dashoffset +# 2017-12-14 jw, v1.4 Added matchStrokeColor() +# 2017-12-21 jw, v1.5 Changed getPathVertices() to construct a to self.paths list, instead of +# a dictionary. (Preserving native ordering) +# 2017-12-22 jw, v1.6 fixed "use" to avoid errors with unknown global symbal 'composeTransform' +# 2017-12-25 jw, v1.7 Added getNodeStyle(), cssDictAdd(), expanded matchStrokeColor() to use +# inline style defs. Added a warning message for not-implemented CSS styles. +# v1.7a Added getNodeStyleOne() made getNodeStyle() recurse through parents. +# 2018-03-10 jw, v1.7b Added search paths to find inkex. +# v1.7c Refactoring for simpler interface without subclassing. +# Added load(), getElementsByIds() methods. +# 2018-03-21 jw, v1.7d Added handleViewBox() to load(). +# Added traverse(). + +import gettext +import re +import sys + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): + sys.path.append('~/.config/inkscape/extensions') +else: # Linux + sys.path.append('/usr/share/inkscape/extensions/') + +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc + +from lxml import etree + +class PathGenerator(): + """ + A PathGenerator has methods for different svg objects. It compiles an + internal representation of them all, handling transformations and linear + interpolation of curved path segments. + + The base class PathGenerator is dummy (abstract) class that raises an + NotImplementedError() on each method entry point. It serves as documentation for + the generator interface. + """ + def __init__(self): + self._svg = None + + def registerSvg(self, svg): + self._svg = svg + svg.stats = self.stats + + def pathString(self, d, node, mat): + """ + d is expected formatted as an svg path string here. + """ + raise NotImplementedError("See example inksvg.LinearPathGen.pathString()") + + def pathList(self, d, node, mat): + """ + d is expected as an [[cmd, [args]], ...] arrray + """ + raise NotImplementedError("See example inksvg.LinearPathGen.pathList()") + + def objRect(x, y, w, h, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objRect()") + + def objRoundedRect(self, x, y, w, h, rx, ry, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objRoundedRect()") + + def objEllipse(self, cx, xy, rx, ry, node, mat): + raise NotImplementedError("See example inksvg.LinearPathGen.objEllipse()") + + def objArc(self, d, cx, cy, rx, ry, st, en, cl, node, mat): + """ + SVG does not have an arc element. Inkscape creates officially a path element, + but also (redundantly) provides the original arc values. + Implementations can choose to work with the path d and ignore the rest, + or work with the cx, cy, rx, ry, ... parameters and ignore d. + Note: the parameter closed=True/False is actually derived from looking at the last + command of path d. Hackish, but there is no 'sodipodi:closed' element, or similar. + """ + raise NotImplementedError("See example inksvg.LinearPathGen.objArc()") + + + +class LinearPathGen(PathGenerator): + + def __init__(self, smoothness=0.2): + self.smoothness = max(0.0001, smoothness) + + def pathString(self, d, node, mat): + """ + d is expected formatted as an svg path string here. + """ + print("calling getPathVertices", self.smoothness) + self._svg.getPathVertices(d, node, mat, self.smoothness) + + def pathList(self, d, node, mat): + """ + d is expected as an [[cmd, [args]], ...] arrray + """ + return self.pathString(simplepath.formatPath(d), node, mat) + + def objRect(x, y, w, h, node, mat): + """ + Manually transform + + + + into + + + + I.e., explicitly draw three sides of the rectangle and the + fourth side implicitly + """ + a = [] + a.append(['M ', [x, y]]) + a.append([' l ', [w, 0]]) + a.append([' l ', [0, h]]) + a.append([' l ', [-w, 0]]) + a.append([' Z', []]) + self.pathList(a, node, matNew) + + def objRoundedRect(self, x, y, w, h, rx, ry, node, mat): + print("calling roundedRectBezier") + d = self._svg.roundedRectBezier(x, y, w, h, rx, ry) + self._svg.getPathVertices(d, node, mat, self.smoothness) + + def objEllipse(self, cx, xy, rx, ry, node, mat): + """ + Convert circles and ellipses to a path with two 180 degree + arcs. In general (an ellipse), we convert + + + + to + + + + where + + X1 = CX - RX + X2 = CX + RX + + Note: ellipses or circles with a radius attribute of value 0 + are ignored + """ + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % (x1, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f ' % (x2, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f' % (x1, cy) + self.pathString(d, node, matNew) + + def objArc(self, d, cx, cy, rx, ry, st, en, cl, node, mat): + """ + We ignore the cx, cy, rx, ry data, and are happy that inkscape + also provides the same information as a path. + """ + self.pathString(d, node, matNew) + + + +class InkSvg(): + """ + Usage example with subclassing: + + # + # class ThunderLaser(inkex.Effect): + # def __init__(self): + # inkex.localize() + # inkex.Effect.__init__(self) + # def effect(self): + # svg = InkSvg(document=self.document, pathgen=LinearPathGen(smoothness=0.2)) + # svg.handleViewBox() + # svg.recursivelyTraverseSvg(self.document.getroot(), svg.docTransform) + # for tup in svg.paths: + # node = tup[0] + # ... + # e = ThunderLaser() + # e.affect() + # + + Simple usage example with method invocation: + + # svg = InkSvg(pathgen=LinearPathGen(smoothness=0.01)) + # svg.load(svgfile) + # svg.traverse([ids...]) + # print(svg.pathgen.path) + + """ + __version__ = "1.7c" + DEFAULT_WIDTH = 100 + DEFAULT_HEIGHT = 100 + + # imports from inkex + NSS = inkex.NSS + + def getElementsByIds(self, ids): + """ + ids be a string of a comma seperated values, or a list of strings. + Returns a list of xml nodes. + """ + if not self.document: + raise ValueError("no document loaded.") + if isinstance(ids, (bytes, str)): ids = [ ids ] # handle some scalars + ids = ','.join(ids).split(',') # merge into a string and re-split + + ## OO-Fail: + # cannot use inkex.getElementById() -- it returns only the first element of each hit. + # cannot use inkex.getselected() -- it returns the last element of each hit only. + """Collect selected nodes""" + nodes = [] + for id in ids: + if id != '': # empty strings happen after splitting... + path = '//*[@id="%s"]' % id + el_list = self.document.xpath(path, namespaces=InkSvg.NSS) + if el_list: + for node in el_list: + nodes.append(node) + else: + raise ValueError("id "+id+" not found in the svg document.") + return nodes + + + def load(self, filename): + inkex.localize() + # OO-Fail: cannot call inkex.Effect.parse(), Effect constructor has so many side-effects. + stream = open(filename, 'r') + p = etree.XMLParser(huge_tree=True) + self.document = etree.parse(stream, parser=p) + stream.close() + # initialize a coordinate system that can be picked up by pathgen. + self.handleViewBox() + + def traverse(self, ids=None): + """ + Recursively traverse the SVG document. If ids are given, all matching nodes + are taken as start positions for traversal. Otherwise traveral starts at + the root node of the document. + """ + selected = [] + if ids is not None: + selected = self.getElementsByIds(ids) + if len(selected): + # Traverse the selected objects + for node in selected: + transform = self.recursivelyGetEnclosingTransform(node) + self.recursivelyTraverseSvg([node], transform) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + + def getNodeStyleOne(self, node): + """ + Finds style declarations by .class, #id or by tag.class syntax, + and of course by a direct style='...' attribute. + """ + sheet = '' + selectors = [] + classes = node.get('class', '') # classes == None can happen here. + if classes is not None and classes != '': + selectors = ["."+cls for cls in re.split('[\s,]+', classes)] + selectors += [node.tag+sel for sel in selectors] + node_id = node.get('id', '') + if node_id is not None and node_id != '': + selectors += [ "#"+node_id ] + for sel in selectors: + if sel in self.css_dict: + sheet += '; '+self.css_dict[sel] + style = node.get('style', '') + if style is not None and style != '': + sheet += '; '+style + return simplestyle.parseStyle(sheet) + + def getNodeStyle(self, node): + """ + Recurse into parent group nodes, like simpletransform.ComposeParents + Calling getNodeStyleOne() for each. + """ + combined_style = {} + parent = node.getparent() + if parent.tag == inkex.addNS('g','svg') or parent.tag == 'g': + combined_style = self.getNodeStyle(parent) + style = self.getNodeStyleOne(node) + for s in style: + combined_style[s] = style[s] # overwrite or add + return combined_style + + + def styleDasharray(self, path_d, node): + """ + Check the style of node for a stroke-dasharray, and apply it to the + path d returning the result. d is returned unchanged, if no + stroke-dasharray was found. + + ## Extracted from inkscape extension convert2dashes; original + ## comments below. + ## Added stroke-dashoffset handling, made it a universal operator + ## on nodes and 'd' paths. + + This extension converts a path into a dashed line using 'stroke-dasharray' + It is a modification of the file addnodes.py + + Copyright (C) 2005,2007 Aaron Spike, aaron@ekips.org + Copyright (C) 2009 Alvin Penner, penner@vaxxine.com + """ + + def tpoint((x1,y1), (x2,y2), t = 0.5): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + def cspbezsplit(sp1, sp2, t = 0.5): + m1=tpoint(sp1[1],sp1[2],t) + m2=tpoint(sp1[2],sp2[0],t) + m3=tpoint(sp2[0],sp2[1],t) + m4=tpoint(m1,m2,t) + m5=tpoint(m2,m3,t) + m=tpoint(m4,m5,t) + return [[sp1[0][:],sp1[1][:],m1], [m4,m,m5], [m3,sp2[1][:],sp2[2][:]]] + def cspbezsplitatlength(sp1, sp2, l = 0.5, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return cspbezsplit(sp1, sp2, t) + def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + style = self.getNodeStyle(node) + if not style.has_key('stroke-dasharray'): + return path_d + dashes = [] + if style['stroke-dasharray'].find(',') > 0: + dashes = [float (dash) for dash in style['stroke-dasharray'].split(',') if dash] + if not dashes: + return path_d + + dashoffset = 0.0 + if style.has_key('stroke-dashoffset'): + dashoffset = float(style['stroke-dashoffset']) + if dashoffset < 0.0: dashoffset = 0.0 + if dashoffset > dashes[0]: dashoffset = dashes[0] # avoids a busy-loop below! + + p = cubicsuperpath.parsePath(path_d) + new = [] + for sub in p: + idash = 0 + dash = dashes[0] + # print("initial dash length: ", dash, dashoffset) + dash = dash - dashoffset + length = 0 + new.append([sub[0][:]]) + i = 1 + while i < len(sub): + dash = dash - length + length = cspseglength(new[-1][-1], sub[i]) + while dash < length: + new[-1][-1], next, sub[i] = cspbezsplitatlength(new[-1][-1], sub[i], dash/length) + if idash % 2: # create a gap + new.append([next[:]]) + else: # splice the curve + new[-1].append(next[:]) + length = length - dash + idash = (idash + 1) % len(dashes) + dash = dashes[idash] + if idash % 2: + new.append([sub[i]]) + else: + new[-1].append(sub[i]) + i+=1 + return cubicsuperpath.formatPath(new) + + def matchStrokeColor(self, node, rgb, eps=None, avg=True): + """ + Return True if the line color found in the style attribute of elem + does not differ from rgb in any of the components more than eps. + The default eps with avg=True is 64. + With avg=False the default is eps=85 (33% on a 0..255 scale). + + In avg mode, the average of all three color channel differences is + compared against eps. Otherwise each color channel difference is + compared individually. + + The special cases None, False, True for rgb are interpreted logically. + Otherwise rgb is expected as a list of three integers in 0..255 range. + Missing style attribute or no stroke element is interpreted as False. + Unparseable stroke elements are interpreted as 'black' (0,0,0). + Hexadecimal stroke formats of '#RRGGBB' or '#RGB' are understood + as well as 'rgb(100%, 0%, 0%) or 'red' relying on simplestyle. + """ + if eps is None: + eps = 64 if avg == True else 85 + if rgb is None or rgb is False: return False + if rgb is True: return True + style = self.getNodeStyle(node) + s = style.get('stroke', '') + if s == '': return False + c = simplestyle.parseColor(s) + if sum: + s = abs(rgb[0]-c[0]) + abs(rgb[1]-c[1]) + abs(rgb[2]-c[2]) + if s < 3*eps: + return True + return False + if abs(rgb[0]-c[0]) > eps: return False + if abs(rgb[1]-c[1]) > eps: return False + if abs(rgb[2]-c[2]) > eps: return False + return True + + def cssDictAdd(self, text): + """ + Represent css cdata as a hash in css_dict. + Implements what is seen on: http://www.blooberry.com/indexdot/css/examples/cssembedded.htm + """ + text=re.sub('^\s*( + + + + + + + + + + %s + +""" % ('Sketch_'+docname, camera_xml) + +try: + import zipfile + z = zipfile.ZipFile(fcstdfile, 'a') + z.writestr('GuiDocument.xml', guidoc_xml) + z.close() +except: + print(guidoc_xml) + print("Warning: Failed to add GuiDocument.xml to %s -- camera and visibility are undefined." % fcstdfile) + +if verbose > -1: + print("%s written." % fcstdfile) + +if not options.outfile: + sys.stdout.write(open(fcstdfile).read()) + os.unlink(fcstdfile) diff --git a/fablabchemnitz_svg2shenzhen_export.inx b/fablabchemnitz_svg2shenzhen_export.inx new file mode 100644 index 0000000..42906fd --- /dev/null +++ b/fablabchemnitz_svg2shenzhen_export.inx @@ -0,0 +1,31 @@ + + + <_name>Export Kicad + net.svg2shenzhen.export.layers + svg2shenzhen/export.py + Export Drawing to Kicad PCB Format + ~/ + + + + + + 5 + 600 + true + false + true + false + + + all + + + + + + + + diff --git a/fablabchemnitz_svg2shenzhen_prepare.inx b/fablabchemnitz_svg2shenzhen_prepare.inx new file mode 100644 index 0000000..24d5196 --- /dev/null +++ b/fablabchemnitz_svg2shenzhen_prepare.inx @@ -0,0 +1,22 @@ + + + <_name>Prepare Document + net.svg2shenzhen.prepare.doc + svg2shenzhen/prepare.py + Prepare document for Kicad Export + 100 + 100 + SVG2SHENZHEN SVGSZ_VER + + + all + + + + + + + + diff --git a/fablabchemnitz_svgo_inkscape.inx b/fablabchemnitz_svgo_inkscape.inx new file mode 100644 index 0000000..c0e6d1b --- /dev/null +++ b/fablabchemnitz_svgo_inkscape.inx @@ -0,0 +1,100 @@ + + + <_name>SVGO Output + org.inkscape.output.svgo + + + true + true + true + true + true + false + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + false + true + true + false + false + false + false + false + + + <_param name="instructions" type="description" xml:space="preserve"> +[ cleanupAttrs ] cleanup attributes from newlines, trailing and repeating spaces +[ removeDoctype ] remove doctype declaration +[ removeXMLProcInst ] remove XML processing instructions +[ removeComments ] remove comments +[ removeMetadata ] remove metadata +[ removeTitle ] remove title (disabled by default) +[ removeDesc ] remove desc (only non-meaningful by default) +[ removeUselessDefs ] remove elements of defs without id +[ removeEditorsNSData ] remove editors namespaces, elements and attributes +[ removeEmptyAttrs ] remove empty attributes +[ removeHiddenElems ] remove hidden elements +[ removeEmptyText ] remove empty Text elements +[ removeEmptyContainers ] remove empty Container elements +[ removeViewBox ] remove viewBox attribute when possible (disabled by default) +[ cleanUpEnableBackground ] remove or cleanup enable-background attribute when possible +[ convertStyleToAttrs ] convert styles into attributes +[ convertColors ] convert colors (from rgb() to #rrggbb, from #rrggbb to #rgb) +[ convertPathData ] convert Path data to relative or absolute whichever is shorter, convert one segment to another, trim useless delimiters, smart rounding and much more +[ convertTransform ] collapse multiple transforms into one, convert matrices to the short aliases and much more +[ removeUnknownsAndDefaults ] remove unknown elements content and attributes, remove attrs with default values + + + + <_param name="instructions" type="description" xml:space="preserve"> +[ removeNonInheritableGroupAttrs ] remove non-inheritable group's "presentation" attributes +[ removeUselessStrokeAndFill ] remove useless stroke and fill attrs +[ removeUnusedNS ] remove unused namespaces declaration +[ cleanupIDs ] remove unused and minify used IDs +[ cleanupNumericValues ] round numeric values to the fixed precision, remove default 'px' units +[ moveElemsAttrsToGroup ] move elements attributes to the existing group wrapper +[ moveGroupAttrsToElems ] move some group attributes to the content elements +[ collapseGroups ] collapse useless groups +[ removeRasterImages ] remove raster images (disabled by default) +[ mergePaths ] merge multiple Paths into one +[ convertShapeToPath ] convert some basic shapes to path +[ sortAttrs ] sort element attributes for epic readability (disabled by default) +[ transformsWithOnePath ] apply transforms, crop by real width, center vertical alignment and resize SVG with one Path inside (disabled by default) +[ removeDimensions ] remove width/height attributes if viewBox is present (disabled by default) +[ removeAttrs ] remove attributes by pattern (disabled by default) +[ addClassesToSVGElement ] add classnames to an outer svg element (disabled by default) + + + + + .svg + image/svg+xml + <_filetypename>Optimized with svgo (*.svg) + <_filetypetooltip>Scalable Vector Graphics + + + \ No newline at end of file diff --git a/fablabchemnitz_thunderlaser.inx b/fablabchemnitz_thunderlaser.inx new file mode 100644 index 0000000..505b37d --- /dev/null +++ b/fablabchemnitz_thunderlaser.inx @@ -0,0 +1,135 @@ + + + + Thunderlaser RUIDA (*.rd) + fablabchemnitz.de.thunderlaser + org.inkscape.output.svg.inkscape + inkex.py + fablabchemnitz_thunderlaser.py + + + Cut Settings + + + Speed,MinPower,MaxPower: Material + + 35,50,65: Birch Plywood 3 mm + 25,50,65: Birch Plywood 4 mm + 20,60,70: Birch Plywood 5 mm + + + + Speed,MinPower,MaxPower: Material + + 25,55,70: Acrylic (PMMA) 3 mm + 20,55,70: Acrylic (PMMA) 4 mm + 15,55,70: Acrylic (PMMA) 5 mm + + + + Speed,MinPower,MaxPower: Material + + 300,26,65: Cardboard (FinnP) 1 mm + 80,50,70: Cardboard (FinnP) 3 mm + 100,50,70: PU foam 10 mm + + + + 30 + 50 + 70 + + + + Any + Cut nothing + Red + Green + Blue + Black + White + Cyan + Magenta + Yellow + + + Mark Settings + + + Speed,MinPower,MaxPower: Material + + 1000,8,25: Birch Plywood + 1000,7,18: Cardboard (Finnpappe) + + + + 30 + 50 + 70 + + + + Mark nothing + Any + Red + Green + Blue + Black + White + Cyan + Magenta + Yellow + + + See also: http://wiki.fablab-nuernberg.de/w/Nova_35 + + + 0.2 + Used when rendering curves. Smaller values are smoother. Range: 0.0001 to 5 + + + + 900 + 600 + + false + Used for a quick area check togehter with "Move only", or for a clean frame cut afterwards. + + false + Preview. Use together with "Bounding Box" mode for a quick area check. + + /COM1 + USB connection or a file name with a ".rd" extension. The number of the USB or COM port may need adjustment. + + false + Used for debugging and developent only! + + + inkscape-thunderlaser extension from https://github.com/jnweiger/inkscape-thunderlaser + +(C) 2017 by Jürgen Weigert [juewei@fabmail.org] and contributors. + +Thanks to Stefan Schuermanns for the descrambler https://stefan.schuermans.info/rdcam/ (and giving instructions with wine!) + +Thanks to Klaus Kaempf for writing the disassembler https://github.com/kkaempf/ruida for the file format. + + + Version 1.8 + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_thunderlaser.py b/fablabchemnitz_thunderlaser.py new file mode 100644 index 0000000..5ac9794 --- /dev/null +++ b/fablabchemnitz_thunderlaser.py @@ -0,0 +1,1940 @@ +#! /usr/bin/python3 +# +# thunderlaser.py -- driver for exporting an SVG drawing as an RDCAM file for a Thunderlaser RUIDA machine. +# +# This is an Inkscape extension to output paths in rdcam format. +# recursivelyTraverseSvg() is originally from eggbot. Thank! +# inkscape-paths2openscad and inkscape-silhouette contain copies of recursivelyTraverseSvg() +# with almost identical features, but different inmplementation details. The version used here is derived from +# inkscape-paths2openscad. +# +# 1.5a - cut/mark color filtering implemented via colorname2rgb() and svg.matchStrokeColor(). +# Works with dummy device. TODO: ruida output using Layers. +# 1.5b - using class Ruida through the new layer interface. +# TODO: ruida output using multiple layers, currently only layer 0 is used. +# 1.5c - _removed _before _tags and _attributes in *.inx, to disable false automatic translations. +# That does not seem to work. Strings are still subject to automatic translations. +# Replaced all empty gui-text="" with repetitive noise, to avoid 0.91 +# translating "" into a 16 lines boiler plate text. +# 1.6 - juergen@fabmail.org +# multi layer support added. Can now mark and cut in one job. +# 1.6b - bugfix release: [ ] bbox, [ ] move only, did always cut. +# Updated InkSvg() class preserves native order of SVG elements. +# 1.7 - Updated InkSvg() class to use inline style defs by class name, tag or id. +# 1.7a - Survive SVG with comments. +# 1.7b - allow empty path_lists if one of the colors is 'any'. +# 1.8 - Support bodor laser. +# +# python2 compatibility: +from __future__ import print_function + +import sys + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + sys.path.append('C:\Program Files\Inkscape\share\extensions') +elif sys_platform.startswith('darwin'): + sys.path.append('~/.config/inkscape/extensions') +else: # Linux + sys.path.append('/usr/share/inkscape/extensions/') + + +#! /usr/bin/python +# +# inksvg.py - parse an svg file into a plain list of paths. +# +# (C) 2017 juergen@fabmail.org, authors of eggbot and others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +################# +# 2017-12-04 jw, v1.0 Refactored class InkSvg from cookiecutter extension +# 2017-12-07 jw, v1.1 Added roundedRectBezier() +# 2017-12-10 jw, v1.3 Added styleDasharray() with stroke-dashoffset +# 2017-12-14 jw, v1.4 Added matchStrokeColor() +# 2017-12-21 jw, v1.5 Changed getPathVertices() to construct a to self.paths list, instead of +# a dictionary. (Preserving native ordering) +# 2017-12-22 jw, v1.6 fixed "use" to avoid errors with unknown global symbal 'composeTransform' +# 2017-12-25 jw, v1.7 Added getNodeStyle(), cssDictAdd(), expanded matchStrokeColor() to use +# inline style defs. Added a warning message for not-implemented CSS styles. +# v1.7a Added getNodeStyleOne() made getNodeStyle() recurse through parents. + +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc + +import gettext +import re + + + +class InkSvg(): + """ + """ + __version__ = "1.7a" + DEFAULT_WIDTH = 100 + DEFAULT_HEIGHT = 100 + + def getNodeStyleOne(self, node): + """ + Finds style declarations by .class, #id or by tag.class syntax, + and of course by a direct style='...' attribute. + """ + sheet = '' + selectors = [] + classes = node.get('class', '') # classes == None can happen here. + if classes is not None and classes != '': + selectors = ["."+cls for cls in re.split('[\s,]+', classes)] + selectors += [node.tag+sel for sel in selectors] + node_id = node.get('id', '') + if node_id is not None and node_id != '': + selectors += [ "#"+node_id ] + for sel in selectors: + if sel in self.css_dict: + sheet += '; '+self.css_dict[sel] + style = node.get('style', '') + if style is not None and style != '': + sheet += '; '+style + return simplestyle.parseStyle(sheet) + + def getNodeStyle(self, node): + """ + Recurse into parent group nodes, like simpletransform.ComposeParents + Calling getNodeStyleOne() for each. + """ + combined_style = {} + parent = node.getparent() + if parent.tag == inkex.addNS('g','svg') or parent.tag == 'g': + combined_style = self.getNodeStyle(parent) + style = self.getNodeStyleOne(node) + for s in style: + combined_style[s] = style[s] # overwrite or add + return combined_style + + + def styleDasharray(self, path_d, node): + """ + Check the style of node for a stroke-dasharray, and apply it to the + path d returning the result. d is returned unchanged, if no + stroke-dasharray was found. + + ## Extracted from inkscape extension convert2dashes; original + ## comments below. + ## Added stroke-dashoffset handling, made it a universal operator + ## on nodes and 'd' paths. + + This extension converts a path into a dashed line using 'stroke-dasharray' + It is a modification of the file addnodes.py + + Copyright (C) 2005,2007 Aaron Spike, aaron@ekips.org + Copyright (C) 2009 Alvin Penner, penner@vaxxine.com + """ + + def tpoint((x1,y1), (x2,y2), t = 0.5): + return [x1+t*(x2-x1),y1+t*(y2-y1)] + def cspbezsplit(sp1, sp2, t = 0.5): + m1=tpoint(sp1[1],sp1[2],t) + m2=tpoint(sp1[2],sp2[0],t) + m3=tpoint(sp2[0],sp2[1],t) + m4=tpoint(m1,m2,t) + m5=tpoint(m2,m3,t) + m=tpoint(m4,m5,t) + return [[sp1[0][:],sp1[1][:],m1], [m4,m,m5], [m3,sp2[1][:],sp2[2][:]]] + def cspbezsplitatlength(sp1, sp2, l = 0.5, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + t = bezmisc.beziertatlength(bez, l, tolerance) + return cspbezsplit(sp1, sp2, t) + def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezmisc.bezierlength(bez, tolerance) + + style = self.getNodeStyle(node) + if not style.has_key('stroke-dasharray'): + return path_d + dashes = [] + if style['stroke-dasharray'].find(',') > 0: + dashes = [float (dash) for dash in style['stroke-dasharray'].split(',') if dash] + if not dashes: + return path_d + + dashoffset = 0.0 + if style.has_key('stroke-dashoffset'): + dashoffset = float(style['stroke-dashoffset']) + if dashoffset < 0.0: dashoffset = 0.0 + if dashoffset > dashes[0]: dashoffset = dashes[0] # avoids a busy-loop below! + + p = cubicsuperpath.parsePath(path_d) + new = [] + for sub in p: + idash = 0 + dash = dashes[0] + # print("initial dash length: ", dash, dashoffset) + dash = dash - dashoffset + length = 0 + new.append([sub[0][:]]) + i = 1 + while i < len(sub): + dash = dash - length + length = cspseglength(new[-1][-1], sub[i]) + while dash < length: + new[-1][-1], next, sub[i] = cspbezsplitatlength(new[-1][-1], sub[i], dash/length) + if idash % 2: # create a gap + new.append([next[:]]) + else: # splice the curve + new[-1].append(next[:]) + length = length - dash + idash = (idash + 1) % len(dashes) + dash = dashes[idash] + if idash % 2: + new.append([sub[i]]) + else: + new[-1].append(sub[i]) + i+=1 + return cubicsuperpath.formatPath(new) + + def matchStrokeColor(self, node, rgb, eps=None, avg=True): + """ + Return True if the line color found in the style attribute of elem + does not differ from rgb in any of the components more than eps. + The default eps with avg=True is 64. + With avg=False the default is eps=85 (33% on a 0..255 scale). + + In avg mode, the average of all three color channel differences is + compared against eps. Otherwise each color channel difference is + compared individually. + + The special cases None, False, True for rgb are interpreted logically. + Otherwise rgb is expected as a list of three integers in 0..255 range. + Missing style attribute or no stroke element is interpreted as False. + Unparseable stroke elements are interpreted as 'black' (0,0,0). + Hexadecimal stroke formats of '#RRGGBB' or '#RGB' are understood + as well as 'rgb(100%, 0%, 0%) or 'red' relying on simplestyle. + """ + if eps is None: + eps = 64 if avg == True else 85 + if rgb is None or rgb is False: return False + if rgb is True: return True + style = self.getNodeStyle(node) + s = style.get('stroke', '') + if s == '': return False + c = simplestyle.parseColor(s) + if sum: + s = abs(rgb[0]-c[0]) + abs(rgb[1]-c[1]) + abs(rgb[2]-c[2]) + if s < 3*eps: + return True + return False + if abs(rgb[0]-c[0]) > eps: return False + if abs(rgb[1]-c[1]) > eps: return False + if abs(rgb[2]-c[2]) > eps: return False + return True + + def cssDictAdd(self, text): + """ + Represent css cdata as a hash in css_dict. + Implements what is seen on: http://www.blooberry.com/indexdot/css/examples/cssembedded.htm + """ + text=re.sub('^\s*( + + + + + + + + + + 12 + 24 + (Image is always on the outer edge) + 3 + 0.1 + + + Draws a ring of black pulse markers. + true + 3 + 3 + Ratio can define duration of trigger pulse. + 0.1 + Phase is offset from division edge. + 0.1 + + + Show Image template. + true + 150 + + + <_param name="use2" type="description" xml:space="preserve">This builds a Zoetrope for printing onto a spinning disk. +Define the final Diameter of the disk and how many images +appear around the circumference. + +Additionally a circle of black pulse markers can be printed +to trigger a strobe. The width and phase of the markers can +be adjusted. The ring can be set at any radius. + +Finally indicate dpi and draw a rectangular image template, +This, along with the distorted reference, can be used in a +paint program to prepare the images to fit on this Zoetrope. + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/fablabchemnitz_zoetrope.py b/fablabchemnitz_zoetrope.py new file mode 100644 index 0000000..fba7d12 --- /dev/null +++ b/fablabchemnitz_zoetrope.py @@ -0,0 +1,304 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +''' +Zoetrope maker. +- prints disk of given diameter and number of images around the outside. +Also includes a pulse trigger ring to trigger a strobe. +- Width and phase of the pulse can be defined. +Prints a distorted and undistorted image reference sizes +- for use in a paint program to distort the source inages to fit onto the Disk. + +Neon22 - github 2016 +MIT license +''' + +import inkex # Required +import simplestyle # will be needed here for styles support + +from math import cos, sin, radians, pi + +__version__ = '0.2' + +inkex.localize() + +### Helper functions +def point_on_circle(radius, angle): + " return xy coord of the point at distance radius from origin at angle " + x = radius * cos(angle) + y = radius * sin(angle) + return (x, y) + +def draw_SVG_circle(parent, r, cx, cy, name, style): + " structre an SVG circle entity under parent " + circ_attribs = {'style': simplestyle.formatStyle(style), + 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'): name} + circle = inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + +Black = '#000000' + + +class Zoetrope(inkex.Effect): + + def __init__(self): + " define how the options are mapped from the inx file " + inkex.Effect.__init__(self) # initialize the super class + + # Define your list of parameters defined in the .inx file + self.OptionParser.add_option("-u", "--units", + action="store", type="string", + dest="units", default='mm', + help="Units this dialog is using") + + self.OptionParser.add_option("-d", "--diameter", + action="store", type="float", + dest="diameter", default=1.0, + help="Diameter of disk") + + self.OptionParser.add_option("-n", "--divisions", + action="store", type="int", + dest="divisions", default=24, + help="Number of divisions") + + self.OptionParser.add_option("-i", "--height", + action="store", type="float", + dest="height", default=1.0, + help="Image height") + + self.OptionParser.add_option("-t", "--trigger", + action="store", type="inkbool", + dest="trigger", default=False, + help="Trigger") + + self.OptionParser.add_option("-q", "--triggerradius", + action="store", type="float", + dest="triggerradius", default=1.0, + help="Height of trigger line") + + self.OptionParser.add_option("-e", "--thick", + action="store", type="float", + dest="thick", default=1.0, + help="Thickness of trigger line") + + self.OptionParser.add_option("-r", "--ratio", + action="store", type="float", + dest="ratio", default=0.5, + help="Ratio of trigger pulse") + + self.OptionParser.add_option("-p", "--phase", + action="store", type="float", + dest="phase", default=0, + help="Delay of trigger pulse") + + self.OptionParser.add_option("-w", "--stroke_width", + action="store", type="float", + dest="stroke_width", default=0.1, + help="Line thickness") + + self.OptionParser.add_option("-m", "--template", + action="store", type="inkbool", + dest="template", default=False, + help="Show Image Distortion template") + + self.OptionParser.add_option("-k", "--dpi", + action="store", type="int", + dest="dpi", default=300, + help="To calculate useful image size") + + # here so we can have tabs - but we do not use it directly - else error + self.OptionParser.add_option("", "--active-tab", + action="store", type="string", + dest="active_tab", default='', + help="Active tab. Not used now.") + + def getUnittouu(self, param): + " for 0.48 and 0.91 compatibility " + try: + return inkex.unittouu(param) + except AttributeError: + return self.unittouu(param) + + def calc_unit_factor(self): + """ return the scale factor for all dimension conversions. + - Everything in inkscape is expected to be in 90dpi pixel units + """ + unit_factor = self.getUnittouu(str(1.0) + self.options.units) + return unit_factor + + def polar_to_cartesian(self, cx, cy, radius, angle): + " So we can make arcs in the 'A' svg syntax. " + angle_radians = radians(angle) + return (cx + (radius * cos(angle_radians)), + cy + (radius * sin(angle_radians))) + + def build_arc(self, x,y, start_angle, end_angle, radius, reverse=True): + " Make a filled arc " + # Not using internal arc rep - instead construct path A in svg style directly + # so we can append lines to make single path + start = self.polar_to_cartesian(x, y, radius, end_angle) + end = self.polar_to_cartesian(x, y, radius, start_angle) + arc_flag = 0 if reverse else 1 + sweep = 0 if (end_angle-start_angle) <=180 else 1 + path = 'M %s,%s' % (start[0], start[1]) + path += " A %s,%s 0 %d %d %s %s" % (radius, radius, sweep, arc_flag, end[0], end[1]) + return path + + def build_trigger_arc(self, angle, radius1, radius2): + """ return path + - using -ve angles to get pulse on CCW side of division line + """ + path = self.build_arc(0,0, -angle, 0, radius1) + # shorten and reverse second arc to connect + path += " L"+self.build_arc(0,0, 0, -angle, radius2, False)[1:] + path += " Z" # close + return path + + + +### ------------------------------------------------------------------- +### This is the main function and is called when the extension is run. + + def effect(self): + """ Calculate Zoetrope from inputs. + - Make gropups for each drawn entity type. + - add explanatory text + - Show trigger pulse ring, distortion and image templates + """ + # convert import options + unit_factor = self.calc_unit_factor() + path_stroke_width = self.options.stroke_width * unit_factor + diameter = self.options.diameter * unit_factor + divisions = self.options.divisions + image_height = self.options.height * unit_factor + triggerradius = self.options.triggerradius * unit_factor + thick = self.options.thick * unit_factor + cross = diameter/50 + + # This finds center of current view in inkscape + t = 'translate(%s,%s)' % (self.view_center[0], self.view_center[1] ) + # Make a nice useful name + g_attribs = { inkex.addNS('label','inkscape'): 'Zoetrope', + 'transform': t, + 'info':'N: '+str(divisions)+';' } + # add the group to the document's current layer + topgroup = inkex.etree.SubElement(self.current_layer, 'g', g_attribs ) + # Group for pulse triggers + g_attr = { inkex.addNS('label','inkscape'): 'Pulse track'} + pulsegroup = inkex.etree.SubElement(topgroup, 'g', g_attr ) + # Group for Labels + t = 'translate(%s,%s)' % (0, diameter/1.9 ) + g_attr = { inkex.addNS('label','inkscape'): 'Label', 'transform': t } + labelgroup = inkex.etree.SubElement(topgroup, 'g', g_attr ) + + # Center cross + line_style = { 'stroke': Black, 'fill': 'none', 'stroke-width': path_stroke_width } + fill_style = { 'stroke': 'none', 'fill': Black, 'stroke-width': 'none' } + d = 'M {0},0 L {1},0 M 0,{0} L 0,{1}'.format(-cross,cross) + cross_attribs = { inkex.addNS('label','inkscape'): 'Center cross', + 'style': simplestyle.formatStyle(line_style), 'd': d } + cross_path = inkex.etree.SubElement(topgroup, inkex.addNS('path','svg'), cross_attribs ) + + # Main Disk + draw_SVG_circle(topgroup, diameter/2, 0, 0, 'outer_ring', line_style) + draw_SVG_circle(topgroup, diameter/2-image_height, 0, 0, 'image_ring', line_style) + # radials + trigger_angle = (360.0/divisions) * self.options.ratio + angle = 360.0/divisions + angle_radians = radians(angle) + arc_path = self.build_trigger_arc(trigger_angle, triggerradius, triggerradius + thick) + for i in range(divisions): + startpt = point_on_circle(cross*2, angle_radians*i) + if self.options.trigger: + endpt = point_on_circle(triggerradius, angle_radians*i) + else: + endpt = point_on_circle(diameter/2, angle_radians*i) + path = "M%s,%s L%s,%s"%(startpt[0], startpt[1], endpt[0], endpt[1]) + radial_attr = {inkex.addNS('label','inkscape'): 'radial', + 'style': simplestyle.formatStyle(line_style), 'd': path } + inkex.etree.SubElement(topgroup, inkex.addNS('path','svg'), radial_attr ) + # second part of radial line (and trigger ring) if needed + if self.options.trigger: + # radial lines + startpt = point_on_circle(triggerradius + thick, angle_radians*i) + endpt = point_on_circle(diameter/2, angle_radians*i) + path = "M%s,%s L%s,%s"%(startpt[0], startpt[1], endpt[0], endpt[1]) + radial_attr = {inkex.addNS('label','inkscape'): 'radial', + 'style': simplestyle.formatStyle(line_style), 'd': path } + inkex.etree.SubElement(topgroup, inkex.addNS('path','svg'), radial_attr ) + # add the arcs # CCW rotation + arc_offset = angle*i - (angle-trigger_angle)*self.options.phase + t = 'rotate(%s)' % (arc_offset) + attribs = { inkex.addNS('label','inkscape'): 'trigger', + 'style': simplestyle.formatStyle(fill_style), 'd': arc_path , 'transform': t,} + inkex.etree.SubElement(pulsegroup, inkex.addNS('path','svg'), attribs ) + # Add animation of bouncing ball + # Add pale grid on each image so can draw directly on template + + # + if self.options.trigger: + draw_SVG_circle(pulsegroup, triggerradius, 0, 0, 'trigger_ring', line_style) + draw_SVG_circle(pulsegroup, triggerradius + thick, 0, 0, 'trigger_ring', line_style) + + # text Label + font_height = min(32, max( 8, int(diameter/50.0))) + text_style = { 'font-size': str(font_height), + 'font-family': 'sans-serif', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': Black } + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': '0' } + text = inkex.etree.SubElement(labelgroup, 'text', text_atts) + text.text = "Zoetrope" + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': str(font_height*1.2) } + text = inkex.etree.SubElement(labelgroup, 'text', text_atts) + text.text = "Diameter = %4.2f%s. Divisions = %d" % (self.options.diameter, self.options.units, divisions) + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': str(font_height*2.4) } + if self.options.trigger: + text = inkex.etree.SubElement(labelgroup, 'text', text_atts) + text.text = "Pulse Duty = %4.2f, Phase = %4.2f" % (self.options.ratio, self.options.phase) + + # Distortion pattern + if self.options.template: + # Group for Labels + t = 'translate(%s,%s)' % (0, -image_height-font_height*5 ) + g_attr = { inkex.addNS('label','inkscape'): 'Template', 'transform': t } + templategroup = inkex.etree.SubElement(topgroup, 'g', g_attr ) + # Draw template + arc_path = self.build_trigger_arc(angle, diameter/2, diameter/2-image_height) + t = 'rotate(%s)' % (-90+angle/2) + attribs = { inkex.addNS('label','inkscape'): 'distorted image', + 'style': simplestyle.formatStyle(line_style), 'd': arc_path , 'transform': t} + image = inkex.etree.SubElement(templategroup, inkex.addNS('path','svg'), attribs ) + # Draw Image info + image_width = pi*diameter/divisions + ystart = -diameter/2.0 + image_height + image_ratio = image_width / image_height + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': str(ystart + font_height*2) } + text = inkex.etree.SubElement(templategroup, 'text', text_atts) + text.text = "Aspect ratio=1:%4.2f" % (image_ratio) + # template rect + attr = {'x':str(-image_width*1.8), 'y':str(-diameter/2), + 'width':str(image_width), + 'height':str(image_height), + 'style':simplestyle.formatStyle(line_style)} + template_sq = inkex.etree.SubElement(templategroup, 'rect', attr) + # suggested sizes + # image_height is in 90dpi pixels + dpi_factor = self.getUnittouu('1in')/float(self.options.dpi) + h = int(image_height / float(dpi_factor)) + w = int(h*image_ratio) + text_atts = {'style':simplestyle.formatStyle(text_style), + 'x': '0', 'y': str(ystart + font_height*3.2) } + text = inkex.etree.SubElement(templategroup, 'text', text_atts) + text.text = "At %d dpi. Image = %d x %d pixels" % (self.options.dpi, w, h) + +if __name__ == '__main__': + e = Zoetrope() + e.affect() + diff --git a/inkstitch.py b/inkstitch.py new file mode 100644 index 0000000..80296f7 --- /dev/null +++ b/inkstitch.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +import os +import subprocess +import sys +import traceback + + +# ink/stitch +# +# stub.py: pyinstaller execution stub +# +# pyinstaller packages the inkstitch extensions into nice tidy executables. +# That's great, but Inkscape can't execute a plain binary as an extension(!). +# +# This Python script exists only to execute the actual extension binary. It +# can be copied to, e.g., "embroider_params.py", in which case it will look +# for a binary at inkstitch/bin/embroider_params. +script_name = os.path.basename(__file__) + +if script_name.endswith('.py'): + binary_name = script_name[:-3] +else: + # Probably not right, but we can at least try. + binary_name = script_name + +binary_path = os.path.join("inkstitch", "bin", binary_name) + +args = sys.argv[:] +args[0] = binary_path + +# os.execve works here for Linux, but only this seems to get the +# extension output to Inkscape on Windows +try: + extension = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = extension.communicate() +except BaseException: + print >> sys.stderr, "Unexpected error launching Ink/Stitch." + print >> sys.stderr, "If you're having trouble, please file an issue here, including the text below:" + print >> sys.stderr, " https://github.com/inkstitch/inkstitch/issues\n" + print >> sys.stderr, "Tried to launch:", binary_path + print >> sys.stderr, "Arguments:", args + print >> sys.stderr, "Debugging information:\n" + print >> sys.stderr, traceback.format_exc() + sys.exit(1) + +if sys.platform == "win32": + import msvcrt + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + +if sys.stdout.encoding: + stdout = stdout.decode(sys.stdout.encoding) + +sys.stdout.write(stdout) +sys.stdout.flush() + +stderr = stderr.strip() +if stderr: + if sys.stderr.encoding: + stderr = stderr.decode(sys.stderr.encoding) + + sys.stderr.write(stderr) + sys.stderr.flush() + +sys.exit(extension.returncode) diff --git a/inkstitch/bin/Include/pyconfig.h b/inkstitch/bin/Include/pyconfig.h new file mode 100644 index 0000000..5d1c90a --- /dev/null +++ b/inkstitch/bin/Include/pyconfig.h @@ -0,0 +1,776 @@ +#ifndef Py_CONFIG_H +#define Py_CONFIG_H + +/* pyconfig.h. NOT Generated automatically by configure. + +This is a manually maintained version used for the Watcom, +Borland and Microsoft Visual C++ compilers. It is a +standard part of the Python distribution. + +WINDOWS DEFINES: +The code specific to Windows should be wrapped around one of +the following #defines + +MS_WIN64 - Code specific to the MS Win64 API +MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs) +MS_WINDOWS - Code specific to Windows, but all versions. +MS_WINCE - Code specific to Windows CE +Py_ENABLE_SHARED - Code if the Python core is built as a DLL. + +Also note that neither "_M_IX86" or "_MSC_VER" should be used for +any purpose other than "Windows Intel x86 specific" and "Microsoft +compiler specific". Therefore, these should be very rare. + + +NOTE: The following symbols are deprecated: +NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT +MS_CORE_DLL. + +WIN32 is still required for the locale module. + +*/ + +#ifdef _WIN32_WCE +#define MS_WINCE +#endif + +/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */ +#ifdef USE_DL_EXPORT +# define Py_BUILD_CORE +#endif /* USE_DL_EXPORT */ + +/* Visual Studio 2005 introduces deprecation warnings for + "insecure" and POSIX functions. The insecure functions should + be replaced by *_s versions (according to Microsoft); the + POSIX functions by _* versions (which, according to Microsoft, + would be ISO C conforming). Neither renaming is feasible, so + we just silence the warnings. */ + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +/* Windows CE does not have these */ +#ifndef MS_WINCE +#define HAVE_IO_H +#define HAVE_SYS_UTIME_H +#define HAVE_TEMPNAM +#define HAVE_TMPFILE +#define HAVE_TMPNAM +#define HAVE_CLOCK +#define HAVE_STRERROR +#endif + +#ifdef HAVE_IO_H +#include +#endif + +#define HAVE_HYPOT +#define HAVE_STRFTIME +#define DONT_HAVE_SIG_ALARM +#define DONT_HAVE_SIG_PAUSE +#define LONG_BIT 32 +#define WORD_BIT 32 +#define PREFIX "" +#define EXEC_PREFIX "" + +#define MS_WIN32 /* only support win32 and greater. */ +#define MS_WINDOWS +#ifndef PYTHONPATH +# define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" +#endif +#define NT_THREADS +#define WITH_THREAD +#ifndef NETSCAPE_PI +#define USE_SOCKET +#endif + +/* CE6 doesn't have strdup() but _strdup(). Assume the same for earlier versions. */ +#if defined(MS_WINCE) +# include +# define strdup _strdup +#endif + +#ifdef MS_WINCE +/* Windows CE does not support environment variables */ +#define getenv(v) (NULL) +#define environ (NULL) +#endif + +/* Compiler specific defines */ + +/* ------------------------------------------------------------------------*/ +/* Microsoft C defines _MSC_VER */ +#ifdef _MSC_VER + +/* We want COMPILER to expand to a string containing _MSC_VER's *value*. + * This is horridly tricky, because the stringization operator only works + * on macro arguments, and doesn't evaluate macros passed *as* arguments. + * Attempts simpler than the following appear doomed to produce "_MSC_VER" + * literally in the string. + */ +#define _Py_PASTE_VERSION(SUFFIX) \ + ("[MSC v." _Py_STRINGIZE(_MSC_VER) " " SUFFIX "]") +/* e.g., this produces, after compile-time string catenation, + * ("[MSC v.1200 32 bit (Intel)]") + * + * _Py_STRINGIZE(_MSC_VER) expands to + * _Py_STRINGIZE1((_MSC_VER)) expands to + * _Py_STRINGIZE2(_MSC_VER) but as this call is the result of token-pasting + * it's scanned again for macros and so further expands to (under MSVC 6) + * _Py_STRINGIZE2(1200) which then expands to + * "1200" + */ +#define _Py_STRINGIZE(X) _Py_STRINGIZE1((X)) +#define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X +#define _Py_STRINGIZE2(X) #X + +/* MSVC defines _WINxx to differentiate the windows platform types + + Note that for compatibility reasons _WIN32 is defined on Win32 + *and* on Win64. For the same reasons, in Python, MS_WIN32 is + defined on Win32 *and* Win64. Win32 only code must therefore be + guarded as follows: + #if defined(MS_WIN32) && !defined(MS_WIN64) + Some modules are disabled on Itanium processors, therefore we + have MS_WINI64 set for those targets, otherwise MS_WINX64 +*/ +#ifdef _WIN64 +#define MS_WIN64 +#endif + +/* set the COMPILER */ +#ifdef MS_WIN64 +#if defined(_M_IA64) +#define COMPILER _Py_PASTE_VERSION("64 bit (Itanium)") +#define MS_WINI64 +#elif defined(_M_X64) || defined(_M_AMD64) +#ifdef __INTEL_COMPILER +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)") +#endif /* __INTEL_COMPILER */ +#define MS_WINX64 +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)") +#endif +#endif /* MS_WIN64 */ + +/* set the version macros for the windows headers */ +#ifdef MS_WINX64 +/* 64 bit only runs on XP or greater */ +#define Py_WINVER _WIN32_WINNT_WINXP +#define Py_NTDDI NTDDI_WINXP +#else +/* Python 2.6+ requires Windows 2000 or greater */ +#ifdef _WIN32_WINNT_WIN2K +#define Py_WINVER _WIN32_WINNT_WIN2K +#else +#define Py_WINVER 0x0500 +#endif +#define Py_NTDDI NTDDI_WIN2KSP4 +#endif + +/* We only set these values when building Python - we don't want to force + these values on extensions, as that will affect the prototypes and + structures exposed in the Windows headers. Even when building Python, we + allow a single source file to override this - they may need access to + structures etc so it can optionally use new Windows features if it + determines at runtime they are available. +*/ +#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_MODULE) +#ifndef NTDDI_VERSION +#define NTDDI_VERSION Py_NTDDI +#endif +#ifndef WINVER +#define WINVER Py_WINVER +#endif +#ifndef _WIN32_WINNT +#define _WIN32_WINNT Py_WINVER +#endif +#endif + +/* _W64 is not defined for VC6 or eVC4 */ +#ifndef _W64 +#define _W64 +#endif + +/* Define like size_t, omitting the "unsigned" */ +#ifdef MS_WIN64 +typedef __int64 ssize_t; +#else +typedef _W64 int ssize_t; +#endif +#define HAVE_SSIZE_T 1 + +#if defined(MS_WIN32) && !defined(MS_WIN64) +#ifdef _M_IX86 +#ifdef __INTEL_COMPILER +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)") +#endif /* __INTEL_COMPILER */ +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)") +#endif +#endif /* MS_WIN32 && !MS_WIN64 */ + +typedef int pid_t; + +#include +#define Py_IS_NAN _isnan +#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X)) +#define Py_IS_FINITE(X) _finite(X) +#define copysign _copysign + +/* VS 2010 and above already defines hypot as _hypot */ +#if _MSC_VER < 1600 +#define hypot _hypot +#endif + +#endif /* _MSC_VER */ + +/* define some ANSI types that are not defined in earlier Win headers */ +#if defined(_MSC_VER) && _MSC_VER >= 1200 +/* This file only exists in VC 6.0 or higher */ +#include +#endif + +/* ------------------------------------------------------------------------*/ +/* The Borland compiler defines __BORLANDC__ */ +/* XXX These defines are likely incomplete, but should be easy to fix. */ +#ifdef __BORLANDC__ +#define COMPILER "[Borland]" + +#ifdef _WIN32 +/* tested with BCC 5.5 (__BORLANDC__ >= 0x0550) + */ + +typedef int pid_t; +/* BCC55 seems to understand __declspec(dllimport), it is used in its + own header files (winnt.h, ...) - so we can do nothing and get the default*/ + +#undef HAVE_SYS_UTIME_H +#define HAVE_UTIME_H +#define HAVE_DIRENT_H + +/* rename a few functions for the Borland compiler */ +#include +#define _chsize chsize +#define _setmode setmode + +#else /* !_WIN32 */ +#error "Only Win32 and later are supported" +#endif /* !_WIN32 */ + +#endif /* BORLANDC */ + +/* ------------------------------------------------------------------------*/ +/* egcs/gnu-win32 defines __GNUC__ and _WIN32 */ +#if defined(__GNUC__) && defined(_WIN32) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ +/* Suggested by Rene Liebscher to avoid a GCC 2.91.* + bug that requires structure imports. More recent versions of the + compiler don't exhibit this bug. +*/ +#if (__GNUC__==2) && (__GNUC_MINOR__<=91) +#warning "Please use an up-to-date version of gcc! (>2.91 recommended)" +#endif + +#define COMPILER "[gcc]" +#define hypot _hypot +#define PY_LONG_LONG long long +#define PY_LLONG_MIN LLONG_MIN +#define PY_LLONG_MAX LLONG_MAX +#define PY_ULLONG_MAX ULLONG_MAX +#endif /* GNUC */ + +/* ------------------------------------------------------------------------*/ +/* lcc-win32 defines __LCC__ */ +#if defined(__LCC__) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ + +#define COMPILER "[lcc-win32]" +typedef int pid_t; +/* __declspec() is supported here too - do nothing to get the defaults */ + +#endif /* LCC */ + +/* ------------------------------------------------------------------------*/ +/* End of compilers - finish up */ + +#ifndef NO_STDIO_H +# include +#endif + +/* 64 bit ints are usually spelt __int64 unless compiler has overridden */ +#define HAVE_LONG_LONG 1 +#ifndef PY_LONG_LONG +# define PY_LONG_LONG __int64 +# define PY_LLONG_MAX _I64_MAX +# define PY_LLONG_MIN _I64_MIN +# define PY_ULLONG_MAX _UI64_MAX +#endif + +/* For Windows the Python core is in a DLL by default. Test +Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ +#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED) +# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */ +# define MS_COREDLL /* deprecated old symbol */ +#endif /* !MS_NO_COREDLL && ... */ + +/* All windows compilers that use this header support __declspec */ +#define HAVE_DECLSPEC_DLL + +/* For an MSVC DLL, we can nominate the .lib files used by extensions */ +#ifdef MS_COREDLL +# ifndef Py_BUILD_CORE /* not building the core - must be an ext */ +# if defined(_MSC_VER) + /* So MSVC users need not specify the .lib file in + their Makefile (other compilers are generally + taken care of by distutils.) */ +# ifdef _DEBUG +# pragma comment(lib,"python27_d.lib") +# else +# pragma comment(lib,"python27.lib") +# endif /* _DEBUG */ +# endif /* _MSC_VER */ +# endif /* Py_BUILD_CORE */ +#endif /* MS_COREDLL */ + +#if defined(MS_WIN64) +/* maintain "win32" sys.platform for backward compatibility of Python code, + the Win64 API should be close enough to the Win32 API to make this + preferable */ +# define PLATFORM "win32" +# define SIZEOF_VOID_P 8 +# define SIZEOF_TIME_T 8 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 8 +# define SIZEOF_SIZE_T 8 +/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG, + sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t). + On Win64 the second condition is not true, but if fpos_t replaces off_t + then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 + should define this. */ +# define HAVE_LARGEFILE_SUPPORT +#elif defined(MS_WIN32) +# define PLATFORM "win32" +# define HAVE_LARGEFILE_SUPPORT +# define SIZEOF_VOID_P 4 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 4 +# define SIZEOF_SIZE_T 4 + /* MS VS2005 changes time_t to a 64-bit type on all platforms */ +# if defined(_MSC_VER) && _MSC_VER >= 1400 +# define SIZEOF_TIME_T 8 +# else +# define SIZEOF_TIME_T 4 +# endif +#endif + +#ifdef _DEBUG +# define Py_DEBUG +#endif + + +#ifdef MS_WIN32 + +#define SIZEOF_SHORT 2 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_DOUBLE 8 +#define SIZEOF_FLOAT 4 + +/* VC 7.1 has them and VC 6.0 does not. VC 6.0 has a version number of 1200. + Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't + define these. + If some compiler does not provide them, modify the #if appropriately. */ +#if defined(_MSC_VER) +#if _MSC_VER > 1300 +#define HAVE_UINTPTR_T 1 +#define HAVE_INTPTR_T 1 +#else +/* VC6, VS 2002 and eVC4 don't support the C99 LL suffix for 64-bit integer literals */ +#define Py_LL(x) x##I64 +#endif /* _MSC_VER > 1200 */ +#endif /* _MSC_VER */ + +#endif + +/* define signed and unsigned exact-width 32-bit and 64-bit types, used in the + implementation of Python long integers. */ +#ifndef PY_UINT32_T +#if SIZEOF_INT == 4 +#define HAVE_UINT32_T 1 +#define PY_UINT32_T unsigned int +#elif SIZEOF_LONG == 4 +#define HAVE_UINT32_T 1 +#define PY_UINT32_T unsigned long +#endif +#endif + +#ifndef PY_UINT64_T +#if SIZEOF_LONG_LONG == 8 +#define HAVE_UINT64_T 1 +#define PY_UINT64_T unsigned PY_LONG_LONG +#endif +#endif + +#ifndef PY_INT32_T +#if SIZEOF_INT == 4 +#define HAVE_INT32_T 1 +#define PY_INT32_T int +#elif SIZEOF_LONG == 4 +#define HAVE_INT32_T 1 +#define PY_INT32_T long +#endif +#endif + +#ifndef PY_INT64_T +#if SIZEOF_LONG_LONG == 8 +#define HAVE_INT64_T 1 +#define PY_INT64_T PY_LONG_LONG +#endif +#endif + +/* Fairly standard from here! */ + +/* Define to 1 if you have the `copysign' function. */ +#define HAVE_COPYSIGN 1 + +/* Define to 1 if you have the `round' function. */ +#if _MSC_VER >= 1800 +#define HAVE_ROUND 1 +#endif + +/* Define to 1 if you have the `isinf' macro. */ +#define HAVE_DECL_ISINF 1 + +/* Define to 1 if you have the `isnan' function. */ +#define HAVE_DECL_ISNAN 1 + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to empty if the keyword does not work. */ +/* #define const */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_CONIO_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_DIRECT_H 1 +#endif + +/* Define if you have dirent.h. */ +/* #define DIRENT 1 */ + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +/* #undef GETGROUPS_T */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#define HAVE_TZNAME + +/* Define to `int' if doesn't define. */ +/* #undef mode_t */ + +/* Define if you don't have dirent.h, but have ndir.h. */ +/* #undef NDIR */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `int' if doesn't define. */ +/* #undef pid_t */ + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you don't have dirent.h, but have sys/dir.h. */ +/* #undef SYSDIR */ + +/* Define if you don't have dirent.h, but have sys/ndir.h. */ +/* #undef SYSNDIR */ + +/* Define if you can safely include both and . */ +/* #undef TIME_WITH_SYS_TIME */ + +/* Define if your declares struct tm. */ +/* #define TM_IN_SYS_TIME 1 */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef VOID_CLOSEDIR */ + +/* Define if getpgrp() must be called as getpgrp(0) + and (consequently) setpgrp() as setpgrp(0, 0). */ +/* #undef GETPGRP_HAVE_ARGS */ + +/* Define this if your time.h defines altzone */ +/* #define HAVE_ALTZONE */ + +/* Define if you have the putenv function. */ +#ifndef MS_WINCE +#define HAVE_PUTENV +#endif + +/* Define if your compiler supports function prototypes */ +#define HAVE_PROTOTYPES + +/* Define if you can safely include both and + (which you can't on SCO ODT 3.0). */ +/* #undef SYS_SELECT_WITH_SYS_TIME */ + +/* Define if you want documentation strings in extension modules */ +#define WITH_DOC_STRINGS 1 + +/* Define if you want to compile in rudimentary thread support */ +/* #undef WITH_THREAD */ + +/* Define if you want to use the GNU readline library */ +/* #define WITH_READLINE 1 */ + +/* Define if you want to have a Unicode type. */ +#define Py_USING_UNICODE + +/* Define as the size of the unicode type. */ +/* This is enough for unicodeobject.h to do the "right thing" on Windows. */ +#define Py_UNICODE_SIZE 2 + +/* Use Python's own small-block memory-allocator. */ +#define WITH_PYMALLOC 1 + +/* Define if you have clock. */ +/* #define HAVE_CLOCK */ + +/* Define when any dynamic module loading is enabled */ +#define HAVE_DYNAMIC_LOADING + +/* Define if you have ftime. */ +#ifndef MS_WINCE +#define HAVE_FTIME +#endif + +/* Define if you have getpeername. */ +#define HAVE_GETPEERNAME + +/* Define if you have getpgrp. */ +/* #undef HAVE_GETPGRP */ + +/* Define if you have getpid. */ +#ifndef MS_WINCE +#define HAVE_GETPID +#endif + +/* Define if you have gettimeofday. */ +/* #undef HAVE_GETTIMEOFDAY */ + +/* Define if you have getwd. */ +/* #undef HAVE_GETWD */ + +/* Define if you have lstat. */ +/* #undef HAVE_LSTAT */ + +/* Define if you have the mktime function. */ +#define HAVE_MKTIME + +/* Define if you have nice. */ +/* #undef HAVE_NICE */ + +/* Define if you have readlink. */ +/* #undef HAVE_READLINK */ + +/* Define if you have select. */ +/* #undef HAVE_SELECT */ + +/* Define if you have setpgid. */ +/* #undef HAVE_SETPGID */ + +/* Define if you have setpgrp. */ +/* #undef HAVE_SETPGRP */ + +/* Define if you have setsid. */ +/* #undef HAVE_SETSID */ + +/* Define if you have setvbuf. */ +#define HAVE_SETVBUF + +/* Define if you have siginterrupt. */ +/* #undef HAVE_SIGINTERRUPT */ + +/* Define if you have symlink. */ +/* #undef HAVE_SYMLINK */ + +/* Define if you have tcgetpgrp. */ +/* #undef HAVE_TCGETPGRP */ + +/* Define if you have tcsetpgrp. */ +/* #undef HAVE_TCSETPGRP */ + +/* Define if you have times. */ +/* #undef HAVE_TIMES */ + +/* Define if you have uname. */ +/* #undef HAVE_UNAME */ + +/* Define if you have waitpid. */ +/* #undef HAVE_WAITPID */ + +/* Define to 1 if you have the `wcscoll' function. */ +#ifndef MS_WINCE +#define HAVE_WCSCOLL 1 +#endif + +/* Define if the zlib library has inflateCopy */ +#define HAVE_ZLIB_COPY 1 + +/* Define if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_ERRNO_H 1 +#endif + +/* Define if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_FCNTL_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_PROCESS_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SIGNAL_H 1 +#endif + +/* Define if you have the prototypes. */ +#define HAVE_STDARG_PROTOTYPES + +/* Define if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_AUDIOIO_H */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_PARAM_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_SELECT_H 1 */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SYS_STAT_H 1 +#endif + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIMES_H 1 */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SYS_TYPES_H 1 +#endif + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UN_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTSNAME_H 1 */ + +/* Define if you have the header file. */ +/* #undef HAVE_THREAD_H */ + +/* Define if you have the header file. */ +/* #define HAVE_UNISTD_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_UTIME_H 1 */ + +/* Define if the compiler provides a wchar.h header file. */ +#define HAVE_WCHAR_H 1 + +/* Define if you have the dl library (-ldl). */ +/* #undef HAVE_LIBDL */ + +/* Define if you have the mpc library (-lmpc). */ +/* #undef HAVE_LIBMPC */ + +/* Define if you have the nsl library (-lnsl). */ +#define HAVE_LIBNSL 1 + +/* Define if you have the seq library (-lseq). */ +/* #undef HAVE_LIBSEQ */ + +/* Define if you have the socket library (-lsocket). */ +#define HAVE_LIBSOCKET 1 + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Define if you have the termcap library (-ltermcap). */ +/* #undef HAVE_LIBTERMCAP */ + +/* Define if you have the termlib library (-ltermlib). */ +/* #undef HAVE_LIBTERMLIB */ + +/* Define if you have the thread library (-lthread). */ +/* #undef HAVE_LIBTHREAD */ + +/* WinSock does not use a bitmask in select, and uses + socket handles greater than FD_SETSIZE */ +#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE + +/* Define if C doubles are 64-bit IEEE 754 binary format, stored with the + least significant byte first */ +#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1 + +#endif /* !Py_CONFIG_H */ diff --git a/inkstitch/bin/Microsoft.VC90.CRT.manifest b/inkstitch/bin/Microsoft.VC90.CRT.manifest new file mode 100644 index 0000000..ddf03b1 --- /dev/null +++ b/inkstitch/bin/Microsoft.VC90.CRT.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/bin/Microsoft.VC90.MFC.manifest b/inkstitch/bin/Microsoft.VC90.MFC.manifest new file mode 100644 index 0000000..8e41a4f --- /dev/null +++ b/inkstitch/bin/Microsoft.VC90.MFC.manifest @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/bin/_bsddb.pyd b/inkstitch/bin/_bsddb.pyd new file mode 100644 index 0000000..e688897 Binary files /dev/null and b/inkstitch/bin/_bsddb.pyd differ diff --git a/inkstitch/bin/_ctypes.pyd b/inkstitch/bin/_ctypes.pyd new file mode 100644 index 0000000..147df73 Binary files /dev/null and b/inkstitch/bin/_ctypes.pyd differ diff --git a/inkstitch/bin/_elementtree.pyd b/inkstitch/bin/_elementtree.pyd new file mode 100644 index 0000000..8e796fd Binary files /dev/null and b/inkstitch/bin/_elementtree.pyd differ diff --git a/inkstitch/bin/_hashlib.pyd b/inkstitch/bin/_hashlib.pyd new file mode 100644 index 0000000..2336e16 Binary files /dev/null and b/inkstitch/bin/_hashlib.pyd differ diff --git a/inkstitch/bin/_multiprocessing.pyd b/inkstitch/bin/_multiprocessing.pyd new file mode 100644 index 0000000..69d5306 Binary files /dev/null and b/inkstitch/bin/_multiprocessing.pyd differ diff --git a/inkstitch/bin/_socket.pyd b/inkstitch/bin/_socket.pyd new file mode 100644 index 0000000..356039a Binary files /dev/null and b/inkstitch/bin/_socket.pyd differ diff --git a/inkstitch/bin/_ssl.pyd b/inkstitch/bin/_ssl.pyd new file mode 100644 index 0000000..f9ba6b2 Binary files /dev/null and b/inkstitch/bin/_ssl.pyd differ diff --git a/inkstitch/bin/_testcapi.pyd b/inkstitch/bin/_testcapi.pyd new file mode 100644 index 0000000..398735b Binary files /dev/null and b/inkstitch/bin/_testcapi.pyd differ diff --git a/inkstitch/bin/_tkinter.pyd b/inkstitch/bin/_tkinter.pyd new file mode 100644 index 0000000..d9f981c Binary files /dev/null and b/inkstitch/bin/_tkinter.pyd differ diff --git a/inkstitch/bin/_win32sysloader.pyd b/inkstitch/bin/_win32sysloader.pyd new file mode 100644 index 0000000..ac1ca16 Binary files /dev/null and b/inkstitch/bin/_win32sysloader.pyd differ diff --git a/inkstitch/bin/bz2.pyd b/inkstitch/bin/bz2.pyd new file mode 100644 index 0000000..8e9737d Binary files /dev/null and b/inkstitch/bin/bz2.pyd differ diff --git a/inkstitch/bin/certifi/cacert.pem b/inkstitch/bin/certifi/cacert.pem new file mode 100644 index 0000000..9ca290f --- /dev/null +++ b/inkstitch/bin/certifi/cacert.pem @@ -0,0 +1,4618 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=Class 2 Primary CA O=Certplus +# Subject: CN=Class 2 Primary CA O=Certplus +# Label: "Certplus Class 2 Primary CA" +# Serial: 177770208045934040241468760488327595043 +# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b +# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb +# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Label: "Deutsche Telekom Root CA 2" +# Serial: 38 +# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 +# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf +# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL +BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV +BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw +MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B +LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F +ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem +hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 +EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn +Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 +zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ +96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m +j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g +DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ +8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j +X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH +hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB +KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 +Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL +BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 +BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO +jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 +loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c +qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ +2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ +JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre +zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf +LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ +x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 +oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL +BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ +SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n +a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 +NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT +CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u +Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO +dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI +VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV +9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY +2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY +vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt +bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb +x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ +l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK +TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj +Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw +DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG +7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk +MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr +gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk +GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS +3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm +Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ +l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c +JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP +L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa +LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG +mpv0 +-----END CERTIFICATE----- diff --git a/inkstitch/bin/icons/pencil.png b/inkstitch/bin/icons/pencil.png new file mode 100644 index 0000000..70e1d60 Binary files /dev/null and b/inkstitch/bin/icons/pencil.png differ diff --git a/inkstitch/bin/icons/pencil_20x20.png b/inkstitch/bin/icons/pencil_20x20.png new file mode 100644 index 0000000..cd902ba Binary files /dev/null and b/inkstitch/bin/icons/pencil_20x20.png differ diff --git a/inkstitch/bin/inkstitch.exe.manifest b/inkstitch/bin/inkstitch.exe.manifest new file mode 100644 index 0000000..ff8d10f --- /dev/null +++ b/inkstitch/bin/inkstitch.exe.manifest @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..52cf23e Binary files /dev/null and b/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..545daf9 Binary files /dev/null and b/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..48da6f7 Binary files /dev/null and b/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..87099f4 Binary files /dev/null and b/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..cd73072 Binary files /dev/null and b/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..9df526a Binary files /dev/null and b/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..d45fb05 Binary files /dev/null and b/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..7b8dd3b Binary files /dev/null and b/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..124e8f6 Binary files /dev/null and b/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..c41138d Binary files /dev/null and b/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..9deee6b Binary files /dev/null and b/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..387e61e Binary files /dev/null and b/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..e93776c Binary files /dev/null and b/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..f5e1044 Binary files /dev/null and b/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..8f64f14 Binary files /dev/null and b/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..7ad0979 Binary files /dev/null and b/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..515050e Binary files /dev/null and b/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..f40e18a Binary files /dev/null and b/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..aad06cc Binary files /dev/null and b/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..2a8dee4 Binary files /dev/null and b/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..a015c5f Binary files /dev/null and b/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..69a53b8 Binary files /dev/null and b/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..88e66b4 Binary files /dev/null and b/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..f1dc5c1 Binary files /dev/null and b/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..e6b5d81 Binary files /dev/null and b/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..28515b8 Binary files /dev/null and b/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..9e569b9 Binary files /dev/null and b/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..3aa28fc Binary files /dev/null and b/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..8374a9d Binary files /dev/null and b/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo b/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo new file mode 100644 index 0000000..9199645 Binary files /dev/null and b/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo differ diff --git a/inkstitch/bin/lxml._elementpath.pyd b/inkstitch/bin/lxml._elementpath.pyd new file mode 100644 index 0000000..766fcef Binary files /dev/null and b/inkstitch/bin/lxml._elementpath.pyd differ diff --git a/inkstitch/bin/lxml.etree.pyd b/inkstitch/bin/lxml.etree.pyd new file mode 100644 index 0000000..8471ee8 Binary files /dev/null and b/inkstitch/bin/lxml.etree.pyd differ diff --git a/inkstitch/bin/markupsafe._speedups.pyd b/inkstitch/bin/markupsafe._speedups.pyd new file mode 100644 index 0000000..2378094 Binary files /dev/null and b/inkstitch/bin/markupsafe._speedups.pyd differ diff --git a/inkstitch/bin/numpy.core._multiarray_tests.pyd b/inkstitch/bin/numpy.core._multiarray_tests.pyd new file mode 100644 index 0000000..d233e68 Binary files /dev/null and b/inkstitch/bin/numpy.core._multiarray_tests.pyd differ diff --git a/inkstitch/bin/numpy.core.multiarray.pyd b/inkstitch/bin/numpy.core.multiarray.pyd new file mode 100644 index 0000000..74a0d9b Binary files /dev/null and b/inkstitch/bin/numpy.core.multiarray.pyd differ diff --git a/inkstitch/bin/numpy.core.umath.pyd b/inkstitch/bin/numpy.core.umath.pyd new file mode 100644 index 0000000..af83e81 Binary files /dev/null and b/inkstitch/bin/numpy.core.umath.pyd differ diff --git a/inkstitch/bin/numpy.fft.fftpack_lite.pyd b/inkstitch/bin/numpy.fft.fftpack_lite.pyd new file mode 100644 index 0000000..c3673ef Binary files /dev/null and b/inkstitch/bin/numpy.fft.fftpack_lite.pyd differ diff --git a/inkstitch/bin/numpy.linalg._umath_linalg.pyd b/inkstitch/bin/numpy.linalg._umath_linalg.pyd new file mode 100644 index 0000000..82e725b Binary files /dev/null and b/inkstitch/bin/numpy.linalg._umath_linalg.pyd differ diff --git a/inkstitch/bin/numpy.linalg.lapack_lite.pyd b/inkstitch/bin/numpy.linalg.lapack_lite.pyd new file mode 100644 index 0000000..b071709 Binary files /dev/null and b/inkstitch/bin/numpy.linalg.lapack_lite.pyd differ diff --git a/inkstitch/bin/numpy.random.mtrand.pyd b/inkstitch/bin/numpy.random.mtrand.pyd new file mode 100644 index 0000000..3c3194d Binary files /dev/null and b/inkstitch/bin/numpy.random.mtrand.pyd differ diff --git a/inkstitch/bin/print/resources/barlow-bold.ttf b/inkstitch/bin/print/resources/barlow-bold.ttf new file mode 100644 index 0000000..af27240 Binary files /dev/null and b/inkstitch/bin/print/resources/barlow-bold.ttf differ diff --git a/inkstitch/bin/print/resources/barlow-condensed-bold.ttf b/inkstitch/bin/print/resources/barlow-condensed-bold.ttf new file mode 100644 index 0000000..cb5e617 Binary files /dev/null and b/inkstitch/bin/print/resources/barlow-condensed-bold.ttf differ diff --git a/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf b/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf new file mode 100644 index 0000000..d9352f0 Binary files /dev/null and b/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf differ diff --git a/inkstitch/bin/print/resources/barlow-extra-bold.ttf b/inkstitch/bin/print/resources/barlow-extra-bold.ttf new file mode 100644 index 0000000..45456d4 Binary files /dev/null and b/inkstitch/bin/print/resources/barlow-extra-bold.ttf differ diff --git a/inkstitch/bin/print/resources/barlow.ttf b/inkstitch/bin/print/resources/barlow.ttf new file mode 100644 index 0000000..7885fbf Binary files /dev/null and b/inkstitch/bin/print/resources/barlow.ttf differ diff --git a/inkstitch/bin/print/resources/barlow_condensed.ttf b/inkstitch/bin/print/resources/barlow_condensed.ttf new file mode 100644 index 0000000..7885fbf Binary files /dev/null and b/inkstitch/bin/print/resources/barlow_condensed.ttf differ diff --git a/inkstitch/bin/print/resources/favicon.ico b/inkstitch/bin/print/resources/favicon.ico new file mode 100644 index 0000000..1b5455b Binary files /dev/null and b/inkstitch/bin/print/resources/favicon.ico differ diff --git a/inkstitch/bin/print/resources/inkstitch-logo.svg b/inkstitch/bin/print/resources/inkstitch-logo.svg new file mode 100644 index 0000000..138318b --- /dev/null +++ b/inkstitch/bin/print/resources/inkstitch-logo.svg @@ -0,0 +1,98 @@ + + + +image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/bin/print/resources/inkstitch.js b/inkstitch/bin/print/resources/inkstitch.js new file mode 100644 index 0000000..a5d57e2 --- /dev/null +++ b/inkstitch/bin/print/resources/inkstitch.js @@ -0,0 +1,734 @@ +var electron = require('electron'); + +$.postJSON = function(url, data, success=null) { + return $.ajax(url, { + type: 'POST', + data: JSON.stringify(data), + contentType: 'application/json', + success: success + }); +}; + +var realistic_rendering = {}; +var realistic_cache = {}; +var normal_rendering = {}; + +//function to chunk opd view into pieces + // source: https://stackoverflow.com/questions/3366529/wrap-every-3-divs-in-a-div +$.fn.chunk = function(size) { + var arr = []; + for (var i = 0; i < this.length; i += size) { + arr.push(this.slice(i, i + size)); + } + return this.pushStack(arr, "chunk", size); +} + +// build operator detailed view (opd) +function buildOpd(thumbnail_size = $('#operator-detailedview-thumbnail-size').val() ) { + + var thumbnail_size = parseInt(thumbnail_size); + var thumbnail_size_mm = thumbnail_size + 'mm'; + + var thumbnail_layout = (thumbnail_size >= 60) ? 'medium' : 'small'; + + // remove old settings + $('div.page.operator-detailedview header').remove(); + $('div.page.operator-detailedview footer').remove(); + $('div.page.operator-detailedview .job-headline').remove(); + $('div.page.operator-detailedview .opd-color-block').parentsUntil('div.page.operator-detailedview').addBack().unwrap(); + $('.opd-color-block').removeClass('medium large'); + $('.opd-color-block').removeAttr('style'); + + // set thumbnail size + $('.operator-svg.operator-preview').css({ + 'width': thumbnail_size_mm, + 'height': thumbnail_size_mm, + 'max-width': thumbnail_size_mm + }); + + // calculate number of blocks per page + var num_blocks_per_page = 1; + if(thumbnail_layout == 'medium') { + $('.opd-color-block').addClass('medium'); + // set width to be able to calculate the height + $('.opd-color-block').css({ 'width': thumbnail_size_mm }); + // calculate max height -> source: https://stackoverflow.com/questions/6060992/element-with-the-max-height-from-a-set-of-elements + var color_box_height = Math.max.apply(null, $('.opd-color-block').map(function () { return $(this).height(); }).get()); + var container_height = $('#opd-info').height(); + var num_rows = Math.floor(container_height / color_box_height); + var num_columns = Math.floor(175 / thumbnail_size); + // if only two blocks fit into one row, use 50% of the space for each of them + if(num_columns == 2) { $('.opd-color-block').css({ 'width': 'calc(50% - 2mm)' }); } + // set equal height for all color blocks + $('.opd-color-block').css({ 'height': color_box_height }); + // set number of color blocks per page for medium thumbnails + num_blocks_per_page = num_columns * num_rows; + // use layout for large thumbnails if only 2 or less color blocks fit on one page + if(num_blocks_per_page <= 2) { + $('.opd-color-block').removeClass('medium').removeAttr('style').addClass('large'); + thumbnail_layout = 'large'; + // set number of color blocks per page for large thumbnails + num_blocks_per_page = 2; + } + } else { + // set number of color blocks per page for small thumbnails + num_blocks_per_page = Math.floor(220 / thumbnail_size); + } + // set number of color blocks per page to 1 if it defaults to zero + // this should never happen, but we want to avoid the browser to crash + num_blocks_per_page = (num_blocks_per_page <= 0) ? '1' : num_blocks_per_page; + + // adjust to new settings + var header = $('#opd-info header').prop('outerHTML'); + var footer = $('#opd-info footer').prop('outerHTML'); + var job_headline = $('#opd-info .job-headline').prop('outerHTML'); + var opd_visibility = ($('#operator-detailedview').is(':checked')) ? 'block' :'none'; + var paper_size = $('#printing-size').val(); + $('.opd-color-block').chunk(num_blocks_per_page).wrap('
'); + $('div.operator-detailedview').prepend(header); + $('.operator-job-info').prepend(job_headline); + $('div.operator-detailedview').append(footer); + // update page numbers + setPageNumbers(); +} + +// set pagenumbers +function setPageNumbers() { + var totalPageNum = $('body').find('.page:visible').length; + $('span.total-page-num').text(totalPageNum); + $('.page:visible span.page-num').each(function( index ) { + $(this).text(index + 1); + }); +} + +// Calculate estimated time +function setEstimatedTime() { + var speed = Math.floor($('#machine-speed').val() / 60); // convert to seconds + speed = (speed <= 0) ? 1 : speed; + var timeTrim = ($('#time-trims').val() == '') ? 0 : parseInt($('#time-trims').val()); + var addToTotal = ($('#time-additional').val() == '') ? 0 : parseInt($('#time-additional').val()); + var timeColorChange = ($('#time-color-change').val() == '') ? 0 : parseInt($('#time-color-change').val()); + + // operator detailed view + $('.estimated-time').each(function(index, item) { + var selector = $(this); + var stitchCount = parseInt($(selector).closest('p').find('.num-stitches').text().match(/\d+/)); + var numTrims = parseInt($( selector ).closest('div').find('p span.num-trims').text().match(/\d+/)); + var estimatedTime = stitchCount/speed + (timeTrim * numTrims); + writeEstimatedTime( selector, estimatedTime ); + }); + + // client detailed view + $('.cld-estimated-time').each(function(index, item) { + var selector = $(this); + var stitchCount = parseInt($(selector).closest('div.page').find('main .detailed .color-info span.num-stitches').text().match(/\d+/)); + var numTrims = parseInt($( selector ).closest('div.page').find('main .detailed .color-info span.num-trims').text().match(/\d+/)); + var estimatedTime = stitchCount/speed + (timeTrim * numTrims); + writeEstimatedTime( selector, estimatedTime ); + }); + + var stitchCount = parseInt($('.total-num-stitches').first().text().match(/\d+/)); + var numTrims = parseInt($('.total-trims').first().text().match(/\d+/)); + var numColorBlocks = parseInt($('.num-color-blocks').first().text().match(/\d+/))-1; // the last color-block is not a color change + var selector = '.total-estimated-time'; + var estimatedTime = stitchCount/speed + (timeTrim * numTrims) + (timeColorChange * numColorBlocks) + addToTotal; + writeEstimatedTime( selector, estimatedTime ); +} + +function attachLeadingZero(n) { + return (n < 10) ? ("0" + n) : n; +} + +function writeEstimatedTime( selector, estimatedTime ) { + var hours = attachLeadingZero(Math.floor(estimatedTime / 3600)); + var minutes = attachLeadingZero(Math.floor((estimatedTime - (hours*3600)) / 60)); + var seconds = attachLeadingZero(Math.floor(estimatedTime % 60)); + $(selector).text( hours + ':' + minutes + ':' + seconds ); +} + +// Scale SVG (fit || full size) +function scaleSVG(element, scale = 'fit') { + + // always center svg + transform = "translate(-50%, -50%)"; + + if(scale == 'fit') { + var scale = Math.min( + element.width() / element.find('svg').width(), + element.height() / element.find('svg').height() + ); + } + + transform += " scale(" + scale + ")"; + var label = parseInt(scale*100); + + element.find('svg').css({ transform: transform }); + element.find('.scale').text(label); +} + +// set preview svg scale to fit into its box if display block and transform is not set +function scaleAllSvg() { + $('.page').each(function() { + if( $(this).css('display') == 'block' ) { + if( $(this).find('.inksimulation svg').css('transform') == 'none') { + scaleSVG($(this).find('.inksimulation'), 'fit'); + } + } + }); +} + +var saveTimerHandles = {}; + +function setSVGTransform(figure, transform) { + var field_name = $(figure).data('field-name'); + var scale = transform.match(/-?[\d\.]+/g)[0]; + figure.find('svg').css({ transform: transform }); + figure.find(".scale").text(parseInt(scale*100)); + + // avoid spamming updates + if (saveTimerHandles[field_name] != null) + clearTimeout(saveTimerHandles[field_name]); + + saveTimerHandles[field_name] = setTimeout(function() { + $.postJSON('/settings/' + field_name, {value: transform}); + }, 250); +} + +$(function() { + /* SCALING AND MOVING SVG */ + + /* Mousewheel scaling */ + $('figure.inksimulation').on( 'DOMMouseScroll mousewheel', function (e) { + if(e.ctrlKey == true) { + + var svg = $(this).find('svg'); + var transform = svg.css('transform').match(/-?[\d\.]+/g); + var scale = parseFloat(transform[0]); + + if (e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0) { + // scroll down = zoom out + scale *= 0.97; + if (scale < 0.01) + scale = 0.01; + } else { + //scroll up + scale *= 1.03; + } + + // set modified scale + transform[0] = scale; + transform[3] = scale; + + setSVGTransform($(this), 'matrix(' + transform + ')'); + + //prevent page fom scrolling + return false; + } + }); + + /* Fit SVG */ + $('button.svg-fit').click(function() { + var svgfigure = $(this).closest('figure'); + scaleSVG(svgfigure, 'fit'); + }); + + /* Full Size SVG */ + $('button.svg-full').click(function() { + var svgfigure = $(this).closest('figure'); + scaleSVG(svgfigure, '1'); + }); + + /* Drag SVG */ + $('figure.inksimulation').on('mousedown', function(e) { + var p0 = { x: e.pageX, y: e.pageY }; + var start_transform = $(this).find('svg').css('transform').match(/-?[\d\.]+/g); + var start_offset = { x: parseFloat(start_transform[4]), y: parseFloat(start_transform[5]) }; + + $(this).css({cursor: 'move'}); + $(this).on('mousemove', function(e) { + var p1 = { x: e.pageX, y: e.pageY }; + // set modified translate + var transform = $(this).find('svg').css('transform').match(/-?[\d\.]+/g); + transform[4] = start_offset.x + (p1.x - p0.x); + transform[5] = start_offset.y + (p1.y - p0.y); + + // I'd ike to use setSVGTransform() here but this code runs many + // times per second and it's just too CPU-intensive. + $(this).find('svg').css({transform: 'matrix(' + transform + ')'}); + }); + }).on('mouseup', function(e) { + $(this).css({cursor: 'auto'}); + $(this).data('p0', null); + $(this).off('mousemove'); + + // set it using setSVGTransform() to ensure that it's saved to the server + setSVGTransform($(this), $(this).find('svg').css('transform')); + }); + + // ignore mouse events on the buttons (Fill, 100%, Apply to All) + $('figure.inksimulation div').on('mousedown mouseup', function(e) { + e.stopPropagation(); + }); + + /* Apply transforms to All */ + $('button.svg-apply').click(function() { + var transform = $(this).parent().siblings('svg').css('transform'); + $('.inksimulation').each(function() { + setSVGTransform($(this), transform); + }) + }); + + /* Contendeditable Fields */ + + $('body').on('focusout', '[contenteditable="true"]:not(.info-text)', function() { + /* change svg scale */ + var content = $(this).text(); + var field_name = $(this).attr('data-field-name'); + if(field_name == 'svg-scale') { + var scale = parseInt(content); + var svg = $(this).parent().siblings('svg'); + var transform = svg.css('transform').match(/-?[\d\.]+/g); + + transform[0] = scale / 100; + transform[3] = scale / 100; + svg.css({ transform: 'matrix(' + transform + ')' }); + } else { + /* When we focus out from a contenteditable field, we want to + * set the same content to all fields with the same classname */ + $('[data-field-name="' + field_name + '"]').text(content); + $.postJSON('/settings/' + field_name, {value: content}); + } + }); + + // load up initial metadata values + $.getJSON('/settings', function(settings) { + $.each(settings, function(field_name, value) { + $('[data-field-name="' + field_name + '"]').each(function(i, item) { + var item = $(item); + if (item.is(':checkbox')) { + item.prop('checked', value).trigger('initialize'); + } else if (item.is('img')) { + item.attr('src', value); + } else if (item.is('select')) { + item.val(value).trigger('initialize'); + } else if (item.is('input[type=range]')) { + item.val(value).trigger('initialize'); + $('#display-thumbnail-size').text(value + 'mm'); + } else if (item.is('input[type=number]')) { + item.val(value).trigger('initialize'); + } else if (item.is('figure.inksimulation')) { + setSVGTransform(item, value); + } else if (item.is('div.footer-info')) { + $('#footer-info-text').html($.parseHTML(value)); + item.html($.parseHTML(value)); + } else if (item.is('#custom-page-content')) { + $('#custom-page-content').html($.parseHTML(value)); + } else { + item.text(value); + } + }); + }); + + // wait until page size is set (if they've specified one) and then scale SVGs to fit and build operator detailed view + setTimeout(function() { + scaleAllSvg(); + buildOpd(); + }, 500); + }); + + $('body').on('keypress', '[contenteditable="true"]:not(.info-text)', function(e) { + if (e.which == 13) { + // pressing enter defocuses the element + this.blur(); + // also suppress the enter keystroke to avoid adding a new line + return false; + } else { + return true; + } + }); + + $('#footer-info-text[contenteditable="true"]').keypress(function(e) { + if (e.which == 13) { + if($(this).find('div').length > 2) { + return false; + } else { + return true; + } + } + }); + + $('.info-text[contenteditable="true"]').focusout(function() { + updateEditableText($(this)); + }); + + /* Settings Bar */ + + $('button.close').click(function() { + window.close(); + }); + + $('button.print').click(function() { + var pageSize = $('select#printing-size').find(':selected').text(); + electron.ipcRenderer.send('open-pdf', pageSize) + }); + + $('button.save-pdf').click(function() { + var pageSize = $('select#printing-size').find(':selected').text(); + electron.ipcRenderer.send('save-pdf', pageSize) + }); + + $('button.settings').click(function(){ + $('#settings-ui').show(); + }); + + $('#close-settings').click(function(){ + $('#settings-ui').hide(); + }); + + /* Settings */ + + // Settings Tabs + $('#tabs button').click(function() { + var active_fieldset_position = $(this).index() +1; + $('#settings-ui #fieldsets-ui > fieldset').css({'display': 'none'}); + $('#settings-ui #fieldsets-ui > fieldset:nth-child('+active_fieldset_position+')').css({'display': 'block'}); + $('#tabs .tab.active').removeClass("active"); + $(this).addClass("active"); + }); + + // Footer + function getEditMode(element){ + return element.closest('fieldset').find('.switch-mode').prop('checked'); + } + + $('.switch-mode').change(function() { + var element = $(this); + var info_text = element.closest('fieldset').find('.info-text'); + var editMode = getEditMode(element); + if (editMode) { + info_text.text( info_text.html() ); + element.closest('.tool-bar').find('.tb-button.edit-only').prop("disabled", true); + } else { + info_text.css('display', 'block'); + var sourceText = info_text.text(); + info_text.html( $.parseHTML(sourceText) ); + element.closest('.tool-bar').find('.tb-button.edit-only').prop('disabled', false); + } + }); + + function updateEditableText(element) { + var editMode = getEditMode(element); + var info_text = element.closest('fieldset').find('.info-text'); + var editableText = ''; + + if (editMode) { + editableText = info_text.text(); + } else { + editableText = info_text.html(); + } + + if(info_text.is('#footer-info-text')) { + $('div.footer-info').html($.parseHTML(editableText)); + $.postJSON('/settings/footer-info', {value: editableText}); + } else { + $.postJSON('/settings/custom-page-content', {value: editableText}); + } + } + + function formatText(selection, value) { + if(window.getSelection().toString()){ + document.execCommand(selection, false, value); + } + } + + $('.tb-bold').click(function() { + if(!getEditMode($(this))) { + formatText('bold'); + updateEditableText($(this)); + } + }); + + $('.tb-italic').click(function() { + if(!getEditMode($(this))) { + formatText('italic'); + updateEditableText($(this)); + } + }); + + $('.tb-underline').click(function() { + if(!getEditMode($(this))) { + formatText('underline'); + updateEditableText($(this)); + } + }); + + $('.tb-remove').click(function() { + if(!getEditMode($(this))) { + formatText('removeFormat'); + updateEditableText($(this)); + } + }); + + $('.tb-hyperlink').click(function() { + if(!getEditMode($(this))) { + formatText('createlink', 'tempurl'); + updateEditableText($(this)); + $(this).closest('.tool-bar').children('.url-window').css('display', 'block'); + } + }); + + $('.url-ok').click(function() { + var link = $(this).closest('.tool-bar').find('.user-url').val(); + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').attr('href', link); + $('.user-url').val('https://'); + $('.url-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.url-cancel').click(function() { + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').contents().unwrap(); + $('.user-url').val('https://'); + $('.url-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.tb-mail').click(function() { + if(!getEditMode($(this))) { + formatText('createlink', 'tempurl'); + updateEditableText($(this)); + $(this).closest('.tool-bar').find('.mail-window').css('display', 'block'); + } + }); + + $('.mail-ok').click(function() { + var link = 'mailto:' + $(this).closest('.tool-bar').find('.user-mail').val(); + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').attr('href', link); + $('.user-mail').val('@'); + $('.mail-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.mail-cancel').click(function() { + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').contents().unwrap(); + $('.user-mail').val('@'); + $('.mail-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.tb-reset').click(function() { + $(this).closest('.tool-bar').find('.reset-window').css('display', 'block'); + }); + + $('.reset-ok').click(function() { + var htmlMode = getEditMode($(this)); + if(!htmlMode) { + $(this).closest('fieldset').find('.info-text').html($(this).closest('.tool-bar').find('.original-info').html()); + } else { + $(this).closest('fieldset').find('.info-text').text($(this).closest('.tool-bar').find('.original-info').html()); + } + $('.reset-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.reset-cancel').click(function() { + $('.reset-window').css('display', 'none'); + }); + + $('body').on("click", ".edit-footer-link", function() { + $("button.settings").trigger("click"); + $("#branding-tab").trigger("click"); + }); + + + // Paper Size + $('select#printing-size').on('change initialize', function(){ + $('.page').toggleClass('a4', $(this).find(':selected').val() == 'a4'); + }).on('change', function() { + $.postJSON('/settings/paper-size', {value: $(this).find(':selected').val()}); + }); + + // Operator detailed view: thumbnail size setting + $(document).on('input', '#operator-detailedview-thumbnail-size', function() { + var thumbnail_size_mm = $(this).val() + 'mm'; + $('#display-thumbnail-size').text( thumbnail_size_mm ); + }); + + // Operator detailed view: thumbnail size setting action + $('#operator-detailedview-thumbnail-size').change(function() { + // set thumbnail size + var thumbnail_size = $(this).val(); + // set page break positions + buildOpd(thumbnail_size); + + $.postJSON('/settings/operator-detailedview-thumbnail-size', {value: thumbnail_size}); + }); + + // Thread Palette + $('select#thread-palette').change(function(){ + $('.modal').show(); + }).on('update', function() { + $(this).data('current-value', $(this).find(':selected').val()); + }).trigger('update'); + + $('#modal-yes').on('click', function(){ + $("select#thread-palette").trigger("update"); + $('.modal').hide(); + var body = {'name': $('select#thread-palette').find(':selected').val()}; + $.postJSON('/palette', body, function() { + $.getJSON('/threads', function(threads) { + console.log("threads: " + JSON.stringify(threads)); + $.each(threads, function(i, thread) { + console.log("doing: " + JSON.stringify(thread)); + $('[data-field-name="color-' + thread.hex + '"]').text(thread.name); + var thread_description = thread.manufacturer; + if (thread.number) { + thread_description += " #" + thread.number; + } + $('[data-field-name="thread-' + thread.hex + '"]').text(thread_description); + }); + }); + }); + }); + + $('#modal-no').on('click', function(){ + var select = $("select#thread-palette"); + select.find('[value="' + select.data('current-value') + '"]').prop('selected', true); + $('.modal').hide(); + }); + + // View selection checkboxes + $(':checkbox.view').on('change initialize', function() { + var field_name = $(this).attr('data-field-name'); + $('.' + field_name).toggle($(this).prop('checked')); + scaleAllSvg(); + setPageNumbers(); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).prop('checked')}); + }); + + // Estimated Time + $('#machine-speed, #time-additional, #time-color-change, #time-trims').on('input initialize', function() { + setEstimatedTime(); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).val()}); + }); + + // Display Estimated Time checkboxes + $(':checkbox.time-display').on('input initialize', function() { + var field_name = $(this).attr('data-field-name'); + $('.' + field_name).toggle($(this).prop('checked')); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).prop('checked')}); + }); + + // Realistic rendering checkboxes + $(':checkbox.realistic').on('change', function(e) { + console.log("realistic rendering checkbox"); + + var item = $(this).data('field-name'); + var figure = $(this).closest('figure'); + var svg = figure.find('svg'); + var transform = svg.css('transform'); + var checked = $(this).prop('checked'); + + console.log("" + item + " " + transform); + + function finalize(svg_content) { + svg[0].outerHTML = svg_content; + // can't use the svg variable here because setting outerHTML created a new tag + figure.find('svg').css({transform: transform}); + } + + // do this later to allow this event handler to return now, + // which will cause the checkbox to be checked or unchecked + // immediately even if SVG rendering takes awhile + setTimeout(function() { + if (checked) { + if (!(item in normal_rendering)) { + normal_rendering[item] = svg[0].outerHTML; + } + + if (!(item in realistic_cache)) { + // pre-render the realistic SVG to a raster image to spare the poor browser + var image = document.createElement('img'); + image.onload = function() { + console.log("rendering!"); + var canvas = document.createElement('canvas'); + + // maybe make DPI configurable? for now, use 600 + canvas.width = image.width / 96 * 600; + canvas.height = image.height / 96 * 600; + + var ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height); + realistic_cache[item] = '' + + '' + + ''; + finalize(realistic_cache[item]); + }; + image.src = '/realistic/' + item; + } else { + finalize(realistic_cache[item]); + } + } else { + finalize(normal_rendering[item]); + } + }, 100); + + e.stopPropagation(); + return true; + }); + + setTimeout(function() { + setEstimatedTime(); + }, 100); + + $('button.svg-realistic').click(function(e){ + $(this).find('input').click(); + }); + + // Logo + $(document).on("change", ".logo-picker", function(e) { + var file = e.currentTarget.files[0]; + var reader = new FileReader(); + reader.onloadend = function() { + var data = reader.result; + $('figure.brandlogo img').attr('src', data); + $.postJSON('/settings/logo', {value: data}); + }; + reader.readAsDataURL(file); + }); + + // "save as defaults" button + $('button.save-settings').click(function(e) { + var settings = {}; + settings["client-overview"] = $("[data-field-name='client-overview']").is(':checked'); + settings["client-detailedview"] = $("[data-field-name='client-detailedview']").is(':checked'); + settings["operator-overview"] = $("[data-field-name='operator-overview']").is(':checked'); + settings["operator-detailedview"] = $("[data-field-name='operator-detailedview']").is(':checked'); + settings["operator-detailedview-thumbnail-size"] = $("[data-field-name='operator-detailedview-thumbnail-size']").val(); + settings["custom-page"] = $("[data-field-name='custom-page']").is(':checked'); + settings["paper-size"] = $('select#printing-size').find(':selected').val(); + + var logo = $("figure.brandlogo img").attr('src'); + if (logo.startsWith("data:")) { + settings["logo"] = logo; + } + settings["footer-info"] = $("[data-field-name='footer-info']").html(); + + settings["machine-speed"] = $("[data-field-name='machine-speed']").val(); + settings["time-additional"] = $("[data-field-name='time-additional']").val(); + settings["time-color-change"] = $("[data-field-name='time-color-change']").val(); + settings["time-trims"] = $("[data-field-name='time-trims']").val(); + + settings["time-clo"] = $("[data-field-name='time-clo']").val(); + settings["time-cld"] = $("[data-field-name='time-cld']").val(); + settings["time-opo"] = $("[data-field-name='time-opo']").val(); + settings["time-opd"] = $("[data-field-name='time-opd']").val(); + + $.postJSON('/defaults', {'value': settings}); + }); +}); diff --git a/inkstitch/bin/print/resources/jquery-3.3.1.min.js b/inkstitch/bin/print/resources/jquery-3.3.1.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/inkstitch/bin/print/resources/jquery-3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + + + + + {% include 'ui.html' %} +{# client overview #} +
{% include 'print_overview.html' %}
+ +{# client detailedview #} + {% set printview = 'detailedview' %} + {% for color_block in color_blocks %} + {% set outer_loop = loop %} +
{% include 'print_detail.html' %}
+ {% endfor %} + +{# operator overview #} +
{% include 'operator_overview.html' %}
+ +{# operator detailed view #} + {% include 'operator_detailedview.html' %} + +{# custom pages #} +
{% include 'custom-page.html' %}
+ + diff --git a/inkstitch/bin/print/templates/operator_detailedview.html b/inkstitch/bin/print/templates/operator_detailedview.html new file mode 100644 index 0000000..c74a7a7 --- /dev/null +++ b/inkstitch/bin/print/templates/operator_detailedview.html @@ -0,0 +1,75 @@ + + +
+

+ ## +

+

+ {{ svg_overview|replace("

  • ", "")|replace("
  • ", "")|safe }} +

    +

    + {{ _('Unique Colors') }}: {{ job.num_colors }} + {{ _('Color Blocks') }}: {{ job.num_color_blocks }} +

    +

    + {{ _('Design box size') }}: {{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }} + + {{ _('Total stitch count') }}: {{job.num_stitches }} + {{ ('Estimated time') }}: +

    +

    + {{ _('Total stops') }}: {{ job.num_stops }} + {{ _('Total trims') }}: {{ job.num_trims }} +

    +

    + +

    +
    + + {% for color_block in color_blocks %} + +
    +

    + + + + #{{ loop.index }} + + +

    +

    + {{ color_block.svg_preview|replace("

  • ", "")|replace("
  • ", "")|safe }} +

    +

    + {{ color_block.color.name }} + {{ color_block.color.rgb }} + {{ color_block.color.manufacturer }} {{ "#" + color_block.color.number if color_block.color.number }} +

    +

    + + {{ _('# stitches') }}: {{ color_block.num_stitches }} + {{ _('estimated time') }}: +

    +

    + {{ _('trims') }}: {{ color_block.num_trims }} + {{ _('stop after?') }}: {{ _("yes") if color_block.stop_after else _("no") }} + +

    +

    + +

    +
    + {% endfor %} diff --git a/inkstitch/bin/print/templates/operator_overview.html b/inkstitch/bin/print/templates/operator_overview.html new file mode 100644 index 0000000..71c5ea2 --- /dev/null +++ b/inkstitch/bin/print/templates/operator_overview.html @@ -0,0 +1,36 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('Unique Colors') }}:{{ job.num_colors }}

    +

    {{ _('Color Blocks') }}:{{ job.num_color_blocks }}

    +

    {{ _('Total stops') }}:{{ job.num_stops }}

    +

    {{ _('Total trims') }}:{{ job.num_trims }}

    +
    +
    +
    +
    +

    {{ _('Design box size') }}:{{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }}

    +

    {{ _('Total stitch count') }}:{{job.num_stitches }}

    +

    {{ _('Total thread used') }}:{{job.total_thread_used }}

    +
    +
    +
    +
    +

    {{ _('Job estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{ svg_overview|replace("
  • ", "")|replace("
  • ", "")|safe }} + {% with %} + {% set realistic_id='realistic-operator-overview' %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    +
    + {% include 'footer.html' %} diff --git a/inkstitch/bin/print/templates/print_detail.html b/inkstitch/bin/print/templates/print_detail.html new file mode 100644 index 0000000..f076fc0 --- /dev/null +++ b/inkstitch/bin/print/templates/print_detail.html @@ -0,0 +1,30 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('COLOR') }}:{{ color_block.color.thread_name }}

    +
    +
    +
    +
    +

    {{ _('Estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{color_block.svg_preview|replace("
  • ", "")|replace("
  • ", "")|safe}} + {% with %} + {% set loop_index=loop.index0 %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    +
    + {% include 'color_swatch.html' %} +
    +
    + + {% include 'footer.html' %} diff --git a/inkstitch/bin/print/templates/print_overview.html b/inkstitch/bin/print/templates/print_overview.html new file mode 100644 index 0000000..3447843 --- /dev/null +++ b/inkstitch/bin/print/templates/print_overview.html @@ -0,0 +1,45 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('Unique Colors') }}:{{ job.num_colors }}

    +

    {{ _('Color Blocks') }}:{{ job.num_color_blocks }}

    +

    {{ _('Total stops') }}:{{ job.num_stops }}

    +

    {{ _('Total trims') }}:{{ job.num_trims }}

    +
    +
    +
    +
    +

    {{ _('Design box size') }}:{{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }}

    +

    {{ _('Total stitch count') }}:{{job.num_stitches }}

    +

    {{ _('Total thread used') }}:{{job.estimated_thread }}

    +
    +
    +
    +
    +

    {{ _('Job estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{ svg_overview|replace("
  • ", "")|replace("
  • ", "")|safe }} + {% with %} + {% set realistic_id='realistic-client-overview' %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    + +
    + {% for color_block in color_blocks %} + {% include 'color_swatch.html' %} + {% endfor %} + +
    +
    {{ _('Client Signature') }}
    +
    + + {% include 'footer.html' %} diff --git a/inkstitch/bin/print/templates/ui.html b/inkstitch/bin/print/templates/ui.html new file mode 100644 index 0000000..57c1720 --- /dev/null +++ b/inkstitch/bin/print/templates/ui.html @@ -0,0 +1,172 @@ +
    +

    {{ _('Ink/Stitch Print Preview') }}

    +
    + + + + +
    +
    + {{ _('⚠ lost connection to Ink/Stitch') }} +
    +
    + +
    +

    X

    +

    {{ _('Settings') }}

    + +
    + + + + +
    + +
    + +
    +
    + {{ _('Page Setup') }} +

    + + +

    +
    +
    + {{ _('Print Layouts') }} +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    {{ _('Thumbnail size') }}: + + 15mm +

    +

    + + +

    +
    + +
    + +
    +
    + {{ _('Logo') }} + +
    + + +
    + +
    + {{ _('Estimated Time') }} +
    + {{ _('Machine Settings') }} +

    + + +

    +
    +
    + {{ _('Time Factors') }} +

    + + +

    +

    + +

    +

    + +

    +
    +
    + {{ _('Display Time On') }} +
    +

    +

    +

    +

    +
    +
    + +
    + +
    + {{ _('Design') }} +

    + +

    +
    + +
    + +
    + + + diff --git a/inkstitch/bin/print/templates/ui_svg_action_buttons.html b/inkstitch/bin/print/templates/ui_svg_action_buttons.html new file mode 100644 index 0000000..6b19938 --- /dev/null +++ b/inkstitch/bin/print/templates/ui_svg_action_buttons.html @@ -0,0 +1,15 @@ +
    {{ _('Scale') }} %
    +
    + + + + +
    diff --git a/inkstitch/bin/pyexpat.pyd b/inkstitch/bin/pyexpat.pyd new file mode 100644 index 0000000..4091319 Binary files /dev/null and b/inkstitch/bin/pyexpat.pyd differ diff --git a/inkstitch/bin/select.pyd b/inkstitch/bin/select.pyd new file mode 100644 index 0000000..94d7597 Binary files /dev/null and b/inkstitch/bin/select.pyd differ diff --git a/inkstitch/bin/shapely.speedups._speedups.pyd b/inkstitch/bin/shapely.speedups._speedups.pyd new file mode 100644 index 0000000..8db9e8e Binary files /dev/null and b/inkstitch/bin/shapely.speedups._speedups.pyd differ diff --git a/inkstitch/bin/tcl/auto.tcl b/inkstitch/bin/tcl/auto.tcl new file mode 100644 index 0000000..f7cf5f0 --- /dev/null +++ b/inkstitch/bin/tcl/auto.tcl @@ -0,0 +1,618 @@ +# auto.tcl -- +# +# utility procs formerly in init.tcl dealing with auto execution +# of commands and can be auto loaded themselves. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# auto_reset -- +# +# Destroy all cached information for auto-loading and auto-execution, +# so that the information gets recomputed the next time it's needed. +# Also delete any commands that are listed in the auto-load index. +# +# Arguments: +# None. + +proc auto_reset {} { + global auto_execs auto_index auto_path + if {[array exists auto_index]} { + foreach cmdName [array names auto_index] { + set fqcn [namespace which $cmdName] + if {$fqcn eq ""} {continue} + rename $fqcn {} + } + } + unset -nocomplain auto_execs auto_index ::tcl::auto_oldpath + if {[catch {llength $auto_path}]} { + set auto_path [list [info library]] + } else { + if {[info library] ni $auto_path} { + lappend auto_path [info library] + } + } +} + +# tcl_findLibrary -- +# +# This is a utility for extensions that searches for a library directory +# using a canonical searching algorithm. A side effect is to source +# the initialization script and set a global library variable. +# +# Arguments: +# basename Prefix of the directory name, (e.g., "tk") +# version Version number of the package, (e.g., "8.0") +# patch Patchlevel of the package, (e.g., "8.0.3") +# initScript Initialization script to source (e.g., tk.tcl) +# enVarName environment variable to honor (e.g., TK_LIBRARY) +# varName Global variable to set when done (e.g., tk_library) + +proc tcl_findLibrary {basename version patch initScript enVarName varName} { + upvar #0 $varName the_library + global auto_path env tcl_platform + + set dirs {} + set errors {} + + # The C application may have hardwired a path, which we honor + + if {[info exists the_library] && $the_library ne ""} { + lappend dirs $the_library + } else { + + # Do the canonical search + + # 1. From an environment variable, if it exists. + # Placing this first gives the end-user ultimate control + # to work-around any bugs, or to customize. + + if {[info exists env($enVarName)]} { + lappend dirs $env($enVarName) + } + + # 2. In the package script directory registered within + # the configuration of the package itself. + + if {[catch { + ::${basename}::pkgconfig get scriptdir,runtime + } value] == 0} { + lappend dirs $value + } + + # 3. Relative to auto_path directories. This checks relative to the + # Tcl library as well as allowing loading of libraries added to the + # auto_path that is not relative to the core library or binary paths. + foreach d $auto_path { + lappend dirs [file join $d $basename$version] + if {$tcl_platform(platform) eq "unix" + && $tcl_platform(os) eq "Darwin"} { + # 4. On MacOSX, check the Resources/Scripts subdir too + lappend dirs [file join $d $basename$version Resources Scripts] + } + } + + # 3. Various locations relative to the executable + # ../lib/foo1.0 (From bin directory in install hierarchy) + # ../../lib/foo1.0 (From bin/arch directory in install hierarchy) + # ../library (From unix directory in build hierarchy) + # + # Remaining locations are out of date (when relevant, they ought + # to be covered by the $::auto_path seach above) and disabled. + # + # ../../library (From unix/arch directory in build hierarchy) + # ../../foo1.0.1/library + # (From unix directory in parallel build hierarchy) + # ../../../foo1.0.1/library + # (From unix/arch directory in parallel build hierarchy) + + set parentDir [file dirname [file dirname [info nameofexecutable]]] + set grandParentDir [file dirname $parentDir] + lappend dirs [file join $parentDir lib $basename$version] + lappend dirs [file join $grandParentDir lib $basename$version] + lappend dirs [file join $parentDir library] + if {0} { + lappend dirs [file join $grandParentDir library] + lappend dirs [file join $grandParentDir $basename$patch library] + lappend dirs [file join [file dirname $grandParentDir] \ + $basename$patch library] + } + } + # uniquify $dirs in order + array set seen {} + foreach i $dirs { + # Take note that the [file normalize] below has been noted to + # cause difficulties for the freewrap utility. See Bug 1072136. + # Until freewrap resolves the matter, one might work around the + # problem by disabling that branch. + if {[interp issafe]} { + set norm $i + } else { + set norm [file normalize $i] + } + if {[info exists seen($norm)]} { continue } + set seen($norm) "" + lappend uniqdirs $i + } + set dirs $uniqdirs + foreach i $dirs { + set the_library $i + set file [file join $i $initScript] + + # source everything when in a safe interpreter because + # we have a source command, but no file exists command + + if {[interp issafe] || [file exists $file]} { + if {![catch {uplevel #0 [list source $file]} msg opts]} { + return + } else { + append errors "$file: $msg\n" + append errors [dict get $opts -errorinfo]\n + } + } + } + unset -nocomplain the_library + set msg "Can't find a usable $initScript in the following directories: \n" + append msg " $dirs\n\n" + append msg "$errors\n\n" + append msg "This probably means that $basename wasn't installed properly.\n" + error $msg +} + + +# ---------------------------------------------------------------------- +# auto_mkindex +# ---------------------------------------------------------------------- +# The following procedures are used to generate the tclIndex file +# from Tcl source files. They use a special safe interpreter to +# parse Tcl source files, writing out index entries as "proc" +# commands are encountered. This implementation won't work in a +# safe interpreter, since a safe interpreter can't create the +# special parser and mess with its commands. + +if {[interp issafe]} { + return ;# Stop sourcing the file here +} + +# auto_mkindex -- +# Regenerate a tclIndex file from Tcl source files. Takes as argument +# the name of the directory in which the tclIndex file is to be placed, +# followed by any number of glob patterns to use in that directory to +# locate all of the relevant files. +# +# Arguments: +# dir - Name of the directory in which to create an index. +# args - Any number of additional arguments giving the +# names of files within dir. If no additional +# are given auto_mkindex will look for *.tcl. + +proc auto_mkindex {dir args} { + if {[interp issafe]} { + error "can't generate index within safe interpreter" + } + + set oldDir [pwd] + cd $dir + set dir [pwd] + + append index "# Tcl autoload index file, version 2.0\n" + append index "# This file is generated by the \"auto_mkindex\" command\n" + append index "# and sourced to set up indexing information for one or\n" + append index "# more commands. Typically each line is a command that\n" + append index "# sets an element in the auto_index array, where the\n" + append index "# element name is the name of a command and the value is\n" + append index "# a script that loads the command.\n\n" + if {[llength $args] == 0} { + set args *.tcl + } + + auto_mkindex_parser::init + foreach file [glob -- {*}$args] { + if {[catch {auto_mkindex_parser::mkindex $file} msg opts] == 0} { + append index $msg + } else { + cd $oldDir + return -options $opts $msg + } + } + auto_mkindex_parser::cleanup + + set fid [open "tclIndex" w] + puts -nonewline $fid $index + close $fid + cd $oldDir +} + +# Original version of auto_mkindex that just searches the source +# code for "proc" at the beginning of the line. + +proc auto_mkindex_old {dir args} { + set oldDir [pwd] + cd $dir + set dir [pwd] + append index "# Tcl autoload index file, version 2.0\n" + append index "# This file is generated by the \"auto_mkindex\" command\n" + append index "# and sourced to set up indexing information for one or\n" + append index "# more commands. Typically each line is a command that\n" + append index "# sets an element in the auto_index array, where the\n" + append index "# element name is the name of a command and the value is\n" + append index "# a script that loads the command.\n\n" + if {[llength $args] == 0} { + set args *.tcl + } + foreach file [glob -- {*}$args] { + set f "" + set error [catch { + set f [open $file] + while {[gets $f line] >= 0} { + if {[regexp {^proc[ ]+([^ ]*)} $line match procName]} { + set procName [lindex [auto_qualify $procName "::"] 0] + append index "set [list auto_index($procName)]" + append index " \[list source \[file join \$dir [list $file]\]\]\n" + } + } + close $f + } msg opts] + if {$error} { + catch {close $f} + cd $oldDir + return -options $opts $msg + } + } + set f "" + set error [catch { + set f [open tclIndex w] + puts -nonewline $f $index + close $f + cd $oldDir + } msg opts] + if {$error} { + catch {close $f} + cd $oldDir + error $msg $info $code + return -options $opts $msg + } +} + +# Create a safe interpreter that can be used to parse Tcl source files +# generate a tclIndex file for autoloading. This interp contains +# commands for things that need index entries. Each time a command +# is executed, it writes an entry out to the index file. + +namespace eval auto_mkindex_parser { + variable parser "" ;# parser used to build index + variable index "" ;# maintains index as it is built + variable scriptFile "" ;# name of file being processed + variable contextStack "" ;# stack of namespace scopes + variable imports "" ;# keeps track of all imported cmds + variable initCommands ;# list of commands that create aliases + if {![info exists initCommands]} { + set initCommands [list] + } + + proc init {} { + variable parser + variable initCommands + + if {![interp issafe]} { + set parser [interp create -safe] + $parser hide info + $parser hide rename + $parser hide proc + $parser hide namespace + $parser hide eval + $parser hide puts + $parser invokehidden namespace delete :: + $parser invokehidden proc unknown {args} {} + + # We'll need access to the "namespace" command within the + # interp. Put it back, but move it out of the way. + + $parser expose namespace + $parser invokehidden rename namespace _%@namespace + $parser expose eval + $parser invokehidden rename eval _%@eval + + # Install all the registered psuedo-command implementations + + foreach cmd $initCommands { + eval $cmd + } + } + } + proc cleanup {} { + variable parser + interp delete $parser + unset parser + } +} + +# auto_mkindex_parser::mkindex -- +# +# Used by the "auto_mkindex" command to create a "tclIndex" file for +# the given Tcl source file. Executes the commands in the file, and +# handles things like the "proc" command by adding an entry for the +# index file. Returns a string that represents the index file. +# +# Arguments: +# file Name of Tcl source file to be indexed. + +proc auto_mkindex_parser::mkindex {file} { + variable parser + variable index + variable scriptFile + variable contextStack + variable imports + + set scriptFile $file + + set fid [open $file] + set contents [read $fid] + close $fid + + # There is one problem with sourcing files into the safe + # interpreter: references like "$x" will fail since code is not + # really being executed and variables do not really exist. + # To avoid this, we replace all $ with \0 (literally, the null char) + # later, when getting proc names we will have to reverse this replacement, + # in case there were any $ in the proc name. This will cause a problem + # if somebody actually tries to have a \0 in their proc name. Too bad + # for them. + set contents [string map [list \$ \0] $contents] + + set index "" + set contextStack "" + set imports "" + + $parser eval $contents + + foreach name $imports { + catch {$parser eval [list _%@namespace forget $name]} + } + return $index +} + +# auto_mkindex_parser::hook command +# +# Registers a Tcl command to evaluate when initializing the +# slave interpreter used by the mkindex parser. +# The command is evaluated in the master interpreter, and can +# use the variable auto_mkindex_parser::parser to get to the slave + +proc auto_mkindex_parser::hook {cmd} { + variable initCommands + + lappend initCommands $cmd +} + +# auto_mkindex_parser::slavehook command +# +# Registers a Tcl command to evaluate when initializing the +# slave interpreter used by the mkindex parser. +# The command is evaluated in the slave interpreter. + +proc auto_mkindex_parser::slavehook {cmd} { + variable initCommands + + # The $parser variable is defined to be the name of the + # slave interpreter when this command is used later. + + lappend initCommands "\$parser eval [list $cmd]" +} + +# auto_mkindex_parser::command -- +# +# Registers a new command with the "auto_mkindex_parser" interpreter +# that parses Tcl files. These commands are fake versions of things +# like the "proc" command. When you execute them, they simply write +# out an entry to a "tclIndex" file for auto-loading. +# +# This procedure allows extensions to register their own commands +# with the auto_mkindex facility. For example, a package like +# [incr Tcl] might register a "class" command so that class definitions +# could be added to a "tclIndex" file for auto-loading. +# +# Arguments: +# name Name of command recognized in Tcl files. +# arglist Argument list for command. +# body Implementation of command to handle indexing. + +proc auto_mkindex_parser::command {name arglist body} { + hook [list auto_mkindex_parser::commandInit $name $arglist $body] +} + +# auto_mkindex_parser::commandInit -- +# +# This does the actual work set up by auto_mkindex_parser::command +# This is called when the interpreter used by the parser is created. +# +# Arguments: +# name Name of command recognized in Tcl files. +# arglist Argument list for command. +# body Implementation of command to handle indexing. + +proc auto_mkindex_parser::commandInit {name arglist body} { + variable parser + + set ns [namespace qualifiers $name] + set tail [namespace tail $name] + if {$ns eq ""} { + set fakeName [namespace current]::_%@fake_$tail + } else { + set fakeName [namespace current]::[string map {:: _} _%@fake_$name] + } + proc $fakeName $arglist $body + + # YUK! Tcl won't let us alias fully qualified command names, + # so we can't handle names like "::itcl::class". Instead, + # we have to build procs with the fully qualified names, and + # have the procs point to the aliases. + + if {[string match *::* $name]} { + set exportCmd [list _%@namespace export [namespace tail $name]] + $parser eval [list _%@namespace eval $ns $exportCmd] + + # The following proc definition does not work if you + # want to tolerate space or something else diabolical + # in the procedure name, (i.e., space in $alias) + # The following does not work: + # "_%@eval {$alias} \$args" + # because $alias gets concat'ed to $args. + # The following does not work because $cmd is somehow undefined + # "set cmd {$alias} \; _%@eval {\$cmd} \$args" + # A gold star to someone that can make test + # autoMkindex-3.3 work properly + + set alias [namespace tail $fakeName] + $parser invokehidden proc $name {args} "_%@eval {$alias} \$args" + $parser alias $alias $fakeName + } else { + $parser alias $name $fakeName + } + return +} + +# auto_mkindex_parser::fullname -- +# Used by commands like "proc" within the auto_mkindex parser. +# Returns the qualified namespace name for the "name" argument. +# If the "name" does not start with "::", elements are added from +# the current namespace stack to produce a qualified name. Then, +# the name is examined to see whether or not it should really be +# qualified. If the name has more than the leading "::", it is +# returned as a fully qualified name. Otherwise, it is returned +# as a simple name. That way, the Tcl autoloader will recognize +# it properly. +# +# Arguments: +# name - Name that is being added to index. + +proc auto_mkindex_parser::fullname {name} { + variable contextStack + + if {![string match ::* $name]} { + foreach ns $contextStack { + set name "${ns}::$name" + if {[string match ::* $name]} { + break + } + } + } + + if {[namespace qualifiers $name] eq ""} { + set name [namespace tail $name] + } elseif {![string match ::* $name]} { + set name "::$name" + } + + # Earlier, mkindex replaced all $'s with \0. Now, we have to reverse + # that replacement. + return [string map [list \0 \$] $name] +} + +if {[llength $::auto_mkindex_parser::initCommands]} { + return +} + +# Register all of the procedures for the auto_mkindex parser that +# will build the "tclIndex" file. + +# AUTO MKINDEX: proc name arglist body +# Adds an entry to the auto index list for the given procedure name. + +auto_mkindex_parser::command proc {name args} { + variable index + variable scriptFile + # Do some fancy reformatting on the "source" call to handle platform + # differences with respect to pathnames. Use format just so that the + # command is a little easier to read (otherwise it'd be full of + # backslashed dollar signs, etc. + append index [list set auto_index([fullname $name])] \ + [format { [list source [file join $dir %s]]} \ + [file split $scriptFile]] "\n" +} + +# Conditionally add support for Tcl byte code files. There are some +# tricky details here. First, we need to get the tbcload library +# initialized in the current interpreter. We cannot load tbcload into the +# slave until we have done so because it needs access to the tcl_patchLevel +# variable. Second, because the package index file may defer loading the +# library until we invoke a command, we need to explicitly invoke auto_load +# to force it to be loaded. This should be a noop if the package has +# already been loaded + +auto_mkindex_parser::hook { + if {![catch {package require tbcload}]} { + if {[namespace which -command tbcload::bcproc] eq ""} { + auto_load tbcload::bcproc + } + load {} tbcload $auto_mkindex_parser::parser + + # AUTO MKINDEX: tbcload::bcproc name arglist body + # Adds an entry to the auto index list for the given pre-compiled + # procedure name. + + auto_mkindex_parser::commandInit tbcload::bcproc {name args} { + variable index + variable scriptFile + # Do some nice reformatting of the "source" call, to get around + # path differences on different platforms. We use the format + # command just so that the code is a little easier to read. + append index [list set auto_index([fullname $name])] \ + [format { [list source [file join $dir %s]]} \ + [file split $scriptFile]] "\n" + } + } +} + +# AUTO MKINDEX: namespace eval name command ?arg arg...? +# Adds the namespace name onto the context stack and evaluates the +# associated body of commands. +# +# AUTO MKINDEX: namespace import ?-force? pattern ?pattern...? +# Performs the "import" action in the parser interpreter. This is +# important for any commands contained in a namespace that affect +# the index. For example, a script may say "itcl::class ...", +# or it may import "itcl::*" and then say "class ...". This +# procedure does the import operation, but keeps track of imported +# patterns so we can remove the imports later. + +auto_mkindex_parser::command namespace {op args} { + switch -- $op { + eval { + variable parser + variable contextStack + + set name [lindex $args 0] + set args [lrange $args 1 end] + + set contextStack [linsert $contextStack 0 $name] + $parser eval [list _%@namespace eval $name] $args + set contextStack [lrange $contextStack 1 end] + } + import { + variable parser + variable imports + foreach pattern $args { + if {$pattern ne "-force"} { + lappend imports $pattern + } + } + catch {$parser eval "_%@namespace import $args"} + } + ensemble { + variable parser + variable contextStack + if {[lindex $args 0] eq "create"} { + set name ::[join [lreverse $contextStack] ::] + # create artifical proc to force an entry in the tclIndex + $parser eval [list ::proc $name {} {}] + } + } + } +} + +return diff --git a/inkstitch/bin/tcl/clock.tcl b/inkstitch/bin/tcl/clock.tcl new file mode 100644 index 0000000..1f83716 --- /dev/null +++ b/inkstitch/bin/tcl/clock.tcl @@ -0,0 +1,4695 @@ +#---------------------------------------------------------------------- +# +# clock.tcl -- +# +# This file implements the portions of the [clock] ensemble that +# are coded in Tcl. Refer to the users' manual to see the description +# of the [clock] command and its subcommands. +# +# +#---------------------------------------------------------------------- +# +# Copyright (c) 2004,2005,2006,2007 by Kevin B. Kenny +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +#---------------------------------------------------------------------- + +# We must have message catalogs that support the root locale, and +# we need access to the Registry on Windows systems. + +uplevel \#0 { + package require msgcat 1.4 + if { $::tcl_platform(platform) eq {windows} } { + if { [catch { package require registry 1.1 }] } { + namespace eval ::tcl::clock [list variable NoRegistry {}] + } + } +} + +# Put the library directory into the namespace for the ensemble +# so that the library code can find message catalogs and time zone +# definition files. + +namespace eval ::tcl::clock \ + [list variable LibDir [file dirname [info script]]] + +#---------------------------------------------------------------------- +# +# clock -- +# +# Manipulate times. +# +# The 'clock' command manipulates time. Refer to the user documentation +# for the available subcommands and what they do. +# +#---------------------------------------------------------------------- + +namespace eval ::tcl::clock { + + # Export the subcommands + + namespace export format + namespace export clicks + namespace export microseconds + namespace export milliseconds + namespace export scan + namespace export seconds + namespace export add + + # Import the message catalog commands that we use. + + namespace import ::msgcat::mcload + namespace import ::msgcat::mclocale + +} + +#---------------------------------------------------------------------- +# +# ::tcl::clock::Initialize -- +# +# Finish initializing the 'clock' subsystem +# +# Results: +# None. +# +# Side effects: +# Namespace variable in the 'clock' subsystem are initialized. +# +# The '::tcl::clock::Initialize' procedure initializes the namespace +# variables and root locale message catalog for the 'clock' subsystem. +# It is broken into a procedure rather than simply evaluated as a script +# so that it will be able to use local variables, avoiding the dangers +# of 'creative writing' as in Bug 1185933. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::Initialize {} { + + rename ::tcl::clock::Initialize {} + + variable LibDir + + # Define the Greenwich time zone + + proc InitTZData {} { + variable TZData + array unset TZData + set TZData(:Etc/GMT) { + {-9223372036854775808 0 0 GMT} + } + set TZData(:GMT) $TZData(:Etc/GMT) + set TZData(:Etc/UTC) { + {-9223372036854775808 0 0 UTC} + } + set TZData(:UTC) $TZData(:Etc/UTC) + set TZData(:localtime) {} + } + InitTZData + + # Define the message catalog for the root locale. + + ::msgcat::mcmset {} { + AM {am} + BCE {B.C.E.} + CE {C.E.} + DATE_FORMAT {%m/%d/%Y} + DATE_TIME_FORMAT {%a %b %e %H:%M:%S %Y} + DAYS_OF_WEEK_ABBREV { + Sun Mon Tue Wed Thu Fri Sat + } + DAYS_OF_WEEK_FULL { + Sunday Monday Tuesday Wednesday Thursday Friday Saturday + } + GREGORIAN_CHANGE_DATE 2299161 + LOCALE_DATE_FORMAT {%m/%d/%Y} + LOCALE_DATE_TIME_FORMAT {%a %b %e %H:%M:%S %Y} + LOCALE_ERAS {} + LOCALE_NUMERALS { + 00 01 02 03 04 05 06 07 08 09 + 10 11 12 13 14 15 16 17 18 19 + 20 21 22 23 24 25 26 27 28 29 + 30 31 32 33 34 35 36 37 38 39 + 40 41 42 43 44 45 46 47 48 49 + 50 51 52 53 54 55 56 57 58 59 + 60 61 62 63 64 65 66 67 68 69 + 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 + 90 91 92 93 94 95 96 97 98 99 + } + LOCALE_TIME_FORMAT {%H:%M:%S} + LOCALE_YEAR_FORMAT {%EC%Ey} + MONTHS_ABBREV { + Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + } + MONTHS_FULL { + January February March + April May June + July August September + October November December + } + PM {pm} + TIME_FORMAT {%H:%M:%S} + TIME_FORMAT_12 {%I:%M:%S %P} + TIME_FORMAT_24 {%H:%M} + TIME_FORMAT_24_SECS {%H:%M:%S} + } + + # Define a few Gregorian change dates for other locales. In most cases + # the change date follows a language, because a nation's colonies changed + # at the same time as the nation itself. In many cases, different + # national boundaries existed; the dominating rule is to follow the + # nation's capital. + + # Italy, Spain, Portugal, Poland + + ::msgcat::mcset it GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset es GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset pt GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset pl GREGORIAN_CHANGE_DATE 2299161 + + # France, Austria + + ::msgcat::mcset fr GREGORIAN_CHANGE_DATE 2299227 + + # For Belgium, we follow Southern Netherlands; Liege Diocese + # changed several weeks later. + + ::msgcat::mcset fr_BE GREGORIAN_CHANGE_DATE 2299238 + ::msgcat::mcset nl_BE GREGORIAN_CHANGE_DATE 2299238 + + # Austria + + ::msgcat::mcset de_AT GREGORIAN_CHANGE_DATE 2299527 + + # Hungary + + ::msgcat::mcset hu GREGORIAN_CHANGE_DATE 2301004 + + # Germany, Norway, Denmark (Catholic Germany changed earlier) + + ::msgcat::mcset de_DE GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset nb GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset nn GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset no GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset da GREGORIAN_CHANGE_DATE 2342032 + + # Holland (Brabant, Gelderland, Flanders, Friesland, etc. changed + # at various times) + + ::msgcat::mcset nl GREGORIAN_CHANGE_DATE 2342165 + + # Protestant Switzerland (Catholic cantons changed earlier) + + ::msgcat::mcset fr_CH GREGORIAN_CHANGE_DATE 2361342 + ::msgcat::mcset it_CH GREGORIAN_CHANGE_DATE 2361342 + ::msgcat::mcset de_CH GREGORIAN_CHANGE_DATE 2361342 + + # English speaking countries + + ::msgcat::mcset en GREGORIAN_CHANGE_DATE 2361222 + + # Sweden (had several changes onto and off of the Gregorian calendar) + + ::msgcat::mcset sv GREGORIAN_CHANGE_DATE 2361390 + + # Russia + + ::msgcat::mcset ru GREGORIAN_CHANGE_DATE 2421639 + + # Romania (Transylvania changed earler - perhaps de_RO should show + # the earlier date?) + + ::msgcat::mcset ro GREGORIAN_CHANGE_DATE 2422063 + + # Greece + + ::msgcat::mcset el GREGORIAN_CHANGE_DATE 2423480 + + #------------------------------------------------------------------ + # + # CONSTANTS + # + #------------------------------------------------------------------ + + # Paths at which binary time zone data for the Olson libraries + # are known to reside on various operating systems + + variable ZoneinfoPaths {} + foreach path { + /usr/share/zoneinfo + /usr/share/lib/zoneinfo + /usr/lib/zoneinfo + /usr/local/etc/zoneinfo + } { + if { [file isdirectory $path] } { + lappend ZoneinfoPaths $path + } + } + + # Define the directories for time zone data and message catalogs. + + variable DataDir [file join $LibDir tzdata] + variable MsgDir [file join $LibDir msgs] + + # Number of days in the months, in common years and leap years. + + variable DaysInRomanMonthInCommonYear \ + { 31 28 31 30 31 30 31 31 30 31 30 31 } + variable DaysInRomanMonthInLeapYear \ + { 31 29 31 30 31 30 31 31 30 31 30 31 } + variable DaysInPriorMonthsInCommonYear [list 0] + variable DaysInPriorMonthsInLeapYear [list 0] + set i 0 + foreach j $DaysInRomanMonthInCommonYear { + lappend DaysInPriorMonthsInCommonYear [incr i $j] + } + set i 0 + foreach j $DaysInRomanMonthInLeapYear { + lappend DaysInPriorMonthsInLeapYear [incr i $j] + } + + # Another epoch (Hi, Jeff!) + + variable Roddenberry 1946 + + # Integer ranges + + variable MINWIDE -9223372036854775808 + variable MAXWIDE 9223372036854775807 + + # Day before Leap Day + + variable FEB_28 58 + + # Translation table to map Windows TZI onto cities, so that + # the Olson rules can apply. In some cases the mapping is ambiguous, + # so it's wise to specify $::env(TCL_TZ) rather than simply depending + # on the system time zone. + + # The keys are long lists of values obtained from the time zone + # information in the Registry. In order, the list elements are: + # Bias StandardBias DaylightBias + # StandardDate.wYear StandardDate.wMonth StandardDate.wDayOfWeek + # StandardDate.wDay StandardDate.wHour StandardDate.wMinute + # StandardDate.wSecond StandardDate.wMilliseconds + # DaylightDate.wYear DaylightDate.wMonth DaylightDate.wDayOfWeek + # DaylightDate.wDay DaylightDate.wHour DaylightDate.wMinute + # DaylightDate.wSecond DaylightDate.wMilliseconds + # The values are the names of time zones where those rules apply. + # There is considerable ambiguity in certain zones; an attempt has + # been made to make a reasonable guess, but this table needs to be + # taken with a grain of salt. + + variable WinZoneInfo [dict create {*}{ + {-43200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Kwajalein + {-39600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Midway + {-36000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Honolulu + {-32400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Anchorage + {-28800 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Los_Angeles + {-28800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Tijuana + {-25200 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Denver + {-25200 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Chihuahua + {-25200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Phoenix + {-21600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Regina + {-21600 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Chicago + {-21600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Mexico_City + {-18000 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/New_York + {-18000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Indianapolis + {-14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Caracas + {-14400 0 3600 0 3 6 2 23 59 59 999 0 10 6 2 23 59 59 999} + :America/Santiago + {-14400 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Manaus + {-14400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Halifax + {-12600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/St_Johns + {-10800 0 3600 0 2 0 2 2 0 0 0 0 10 0 3 2 0 0 0} :America/Sao_Paulo + {-10800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Godthab + {-10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Buenos_Aires + {-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Bahia + {-10800 0 3600 0 3 0 2 2 0 0 0 0 10 0 1 2 0 0 0} :America/Montevideo + {-7200 0 3600 0 9 0 5 2 0 0 0 0 3 0 5 2 0 0 0} :America/Noronha + {-3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Atlantic/Azores + {-3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Atlantic/Cape_Verde + {0 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :UTC + {0 0 3600 0 10 0 5 2 0 0 0 0 3 0 5 1 0 0 0} :Europe/London + {3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Kinshasa + {3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :CET + {7200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Harare + {7200 0 3600 0 9 4 5 23 59 59 0 0 4 4 5 23 59 59 0} + :Africa/Cairo + {7200 0 3600 0 10 0 5 4 0 0 0 0 3 0 5 3 0 0 0} :Europe/Helsinki + {7200 0 3600 0 9 0 3 2 0 0 0 0 3 5 5 2 0 0 0} :Asia/Jerusalem + {7200 0 3600 0 9 0 5 1 0 0 0 0 3 0 5 0 0 0 0} :Europe/Bucharest + {7200 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Athens + {7200 0 3600 0 9 5 5 1 0 0 0 0 3 4 5 0 0 0 0} :Asia/Amman + {7200 0 3600 0 10 6 5 23 59 59 999 0 3 0 5 0 0 0 0} + :Asia/Beirut + {7200 0 -3600 0 4 0 1 2 0 0 0 0 9 0 1 2 0 0 0} :Africa/Windhoek + {10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Riyadh + {10800 0 3600 0 10 0 1 4 0 0 0 0 4 0 1 3 0 0 0} :Asia/Baghdad + {10800 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Moscow + {12600 0 3600 0 9 2 4 2 0 0 0 0 3 0 1 2 0 0 0} :Asia/Tehran + {14400 0 3600 0 10 0 5 5 0 0 0 0 3 0 5 4 0 0 0} :Asia/Baku + {14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Muscat + {14400 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Tbilisi + {16200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Kabul + {18000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Karachi + {18000 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Yekaterinburg + {19800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Calcutta + {20700 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Katmandu + {21600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Dhaka + {21600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Novosibirsk + {23400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Rangoon + {25200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Bangkok + {25200 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Krasnoyarsk + {28800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Chongqing + {28800 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Irkutsk + {32400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Tokyo + {32400 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Yakutsk + {34200 0 3600 0 3 0 5 3 0 0 0 0 10 0 5 2 0 0 0} :Australia/Adelaide + {34200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Australia/Darwin + {36000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Australia/Brisbane + {36000 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Vladivostok + {36000 0 3600 0 3 0 5 3 0 0 0 0 10 0 1 2 0 0 0} :Australia/Hobart + {36000 0 3600 0 3 0 5 3 0 0 0 0 10 0 5 2 0 0 0} :Australia/Sydney + {39600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Noumea + {43200 0 3600 0 3 0 3 3 0 0 0 0 10 0 1 2 0 0 0} :Pacific/Auckland + {43200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Fiji + {46800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Tongatapu + }] + + # Groups of fields that specify the date, priorities, and + # code bursts that determine Julian Day Number given those groups. + # The code in [clock scan] will choose the highest priority + # (lowest numbered) set of fields that determines the date. + + variable DateParseActions { + + { seconds } 0 {} + + { julianDay } 1 {} + + { era century yearOfCentury month dayOfMonth } 2 { + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { era century yearOfCentury dayOfYear } 2 { + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + + { century yearOfCentury month dayOfMonth } 3 { + dict set date era CE + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { century yearOfCentury dayOfYear } 3 { + dict set date era CE + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601Century iso8601YearOfCentury iso8601Week dayOfWeek } 3 { + dict set date era CE + dict set date iso8601Year \ + [expr { 100 * [dict get $date iso8601Century] + + [dict get $date iso8601YearOfCentury] }] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { yearOfCentury month dayOfMonth } 4 { + set date [InterpretTwoDigitYear $date[set date {}] $baseTime] + dict set date era CE + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { yearOfCentury dayOfYear } 4 { + set date [InterpretTwoDigitYear $date[set date {}] $baseTime] + dict set date era CE + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601YearOfCentury iso8601Week dayOfWeek } 4 { + set date [InterpretTwoDigitYear \ + $date[set date {}] $baseTime \ + iso8601YearOfCentury iso8601Year] + dict set date era CE + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { month dayOfMonth } 5 { + set date [AssignBaseYear $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { dayOfYear } 5 { + set date [AssignBaseYear $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601Week dayOfWeek } 5 { + set date [AssignBaseIso8601Year $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { dayOfMonth } 6 { + set date [AssignBaseMonth $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + + { dayOfWeek } 7 { + set date [AssignBaseWeek $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + {} 8 { + set date [AssignBaseJulianDay $date[set date {}] \ + $baseTime $timeZone $changeover] + } + } + + # Groups of fields that specify time of day, priorities, + # and code that processes them + + variable TimeParseActions { + + seconds 1 {} + + { hourAMPM minute second amPmIndicator } 2 { + dict set date secondOfDay [InterpretHMSP $date] + } + { hour minute second } 2 { + dict set date secondOfDay [InterpretHMS $date] + } + + { hourAMPM minute amPmIndicator } 3 { + dict set date second 0 + dict set date secondOfDay [InterpretHMSP $date] + } + { hour minute } 3 { + dict set date second 0 + dict set date secondOfDay [InterpretHMS $date] + } + + { hourAMPM amPmIndicator } 4 { + dict set date minute 0 + dict set date second 0 + dict set date secondOfDay [InterpretHMSP $date] + } + { hour } 4 { + dict set date minute 0 + dict set date second 0 + dict set date secondOfDay [InterpretHMS $date] + } + + { } 5 { + dict set date secondOfDay 0 + } + } + + # Legacy time zones, used primarily for parsing RFC822 dates. + + variable LegacyTimeZone [dict create \ + gmt +0000 \ + ut +0000 \ + utc +0000 \ + bst +0100 \ + wet +0000 \ + wat -0100 \ + at -0200 \ + nft -0330 \ + nst -0330 \ + ndt -0230 \ + ast -0400 \ + adt -0300 \ + est -0500 \ + edt -0400 \ + cst -0600 \ + cdt -0500 \ + mst -0700 \ + mdt -0600 \ + pst -0800 \ + pdt -0700 \ + yst -0900 \ + ydt -0800 \ + hst -1000 \ + hdt -0900 \ + cat -1000 \ + ahst -1000 \ + nt -1100 \ + idlw -1200 \ + cet +0100 \ + cest +0200 \ + met +0100 \ + mewt +0100 \ + mest +0200 \ + swt +0100 \ + sst +0200 \ + fwt +0100 \ + fst +0200 \ + eet +0200 \ + eest +0300 \ + bt +0300 \ + it +0330 \ + zp4 +0400 \ + zp5 +0500 \ + ist +0530 \ + zp6 +0600 \ + wast +0700 \ + wadt +0800 \ + jt +0730 \ + cct +0800 \ + jst +0900 \ + kst +0900 \ + cast +0930 \ + jdt +1000 \ + kdt +1000 \ + cadt +1030 \ + east +1000 \ + eadt +1030 \ + gst +1000 \ + nzt +1200 \ + nzst +1200 \ + nzdt +1300 \ + idle +1200 \ + a +0100 \ + b +0200 \ + c +0300 \ + d +0400 \ + e +0500 \ + f +0600 \ + g +0700 \ + h +0800 \ + i +0900 \ + k +1000 \ + l +1100 \ + m +1200 \ + n -0100 \ + o -0200 \ + p -0300 \ + q -0400 \ + r -0500 \ + s -0600 \ + t -0700 \ + u -0800 \ + v -0900 \ + w -1000 \ + x -1100 \ + y -1200 \ + z +0000 \ + ] + + # Caches + + variable LocaleNumeralCache {}; # Dictionary whose keys are locale + # names and whose values are pairs + # comprising regexes matching numerals + # in the given locales and dictionaries + # mapping the numerals to their numeric + # values. + variable McLoaded {}; # Dictionary whose keys are locales + # in which [mcload] has been executed + # and whose values are second-level + # dictionaries indexed by message + # name and giving message text. + # variable CachedSystemTimeZone; # If 'CachedSystemTimeZone' exists, + # it contains the value of the + # system time zone, as determined from + # the environment. + variable TimeZoneBad {}; # Dictionary whose keys are time zone + # names and whose values are 1 if + # the time zone is unknown and 0 + # if it is known. + variable TZData; # Array whose keys are time zone names + # and whose values are lists of quads + # comprising start time, UTC offset, + # Daylight Saving Time indicator, and + # time zone abbreviation. + variable FormatProc; # Array mapping format group + # and locale to the name of a procedure + # that renders the given format +} +::tcl::clock::Initialize + +#---------------------------------------------------------------------- +# +# clock format -- +# +# Formats a count of seconds since the Posix Epoch as a time +# of day. +# +# The 'clock format' command formats times of day for output. +# Refer to the user documentation to see what it does. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::format { args } { + + variable FormatProc + variable TZData + + lassign [ParseFormatArgs {*}$args] format locale timezone + set locale [string tolower $locale] + set clockval [lindex $args 0] + + # Get the data for time changes in the given zone + + if {$timezone eq ""} { + set timezone [GetSystemTimeZone] + } + if {![info exists TZData($timezone)]} { + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + } + + # Build a procedure to format the result. Cache the built procedure's + # name in the 'FormatProc' array to avoid losing its internal + # representation, which contains the name resolution. + + set procName formatproc'$format'$locale + set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName] + if {[info exists FormatProc($procName)]} { + set procName $FormatProc($procName) + } else { + set FormatProc($procName) \ + [ParseClockFormatFormat $procName $format $locale] + } + + return [$procName $clockval $timezone] + +} + +#---------------------------------------------------------------------- +# +# ParseClockFormatFormat -- +# +# Builds and caches a procedure that formats a time value. +# +# Parameters: +# format -- Format string to use +# locale -- Locale in which the format string is to be interpreted +# +# Results: +# Returns the name of the newly-built procedure. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseClockFormatFormat {procName format locale} { + + if {[namespace which $procName] ne {}} { + return $procName + } + + # Map away the locale-dependent composite format groups + + EnterLocale $locale oldLocale + + # Change locale if a fresh locale has been given on the command line. + + set status [catch { + + ParseClockFormatFormat2 $format $locale $procName + + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + # Return either the error or the proc name + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {clock} } { + return -code error $result + } else { + return -options $opts $result + } + } else { + return $result + } + +} + +proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} { + + set didLocaleEra 0 + set didLocaleNumerals 0 + set preFormatCode \ + [string map [list @GREGORIAN_CHANGE_DATE@ \ + [mc GREGORIAN_CHANGE_DATE]] \ + { + variable TZData + set date [GetDateFields $clockval \ + $TZData($timezone) \ + @GREGORIAN_CHANGE_DATE@] + }] + set formatString {} + set substituents {} + set state {} + + set format [LocalizeFormat $locale $format] + + foreach char [split $format {}] { + switch -exact -- $state { + {} { + if { [string equal % $char] } { + set state percent + } else { + append formatString $char + } + } + percent { # Character following a '%' character + set state {} + switch -exact -- $char { + % { # A literal character, '%' + append formatString %% + } + a { # Day of week, abbreviated + append formatString %s + append substituents \ + [string map \ + [list @DAYS_OF_WEEK_ABBREV@ \ + [list [mc DAYS_OF_WEEK_ABBREV]]] \ + { [lindex @DAYS_OF_WEEK_ABBREV@ \ + [expr {[dict get $date dayOfWeek] \ + % 7}]]}] + } + A { # Day of week, spelt out. + append formatString %s + append substituents \ + [string map \ + [list @DAYS_OF_WEEK_FULL@ \ + [list [mc DAYS_OF_WEEK_FULL]]] \ + { [lindex @DAYS_OF_WEEK_FULL@ \ + [expr {[dict get $date dayOfWeek] \ + % 7}]]}] + } + b - h { # Name of month, abbreviated. + append formatString %s + append substituents \ + [string map \ + [list @MONTHS_ABBREV@ \ + [list [mc MONTHS_ABBREV]]] \ + { [lindex @MONTHS_ABBREV@ \ + [expr {[dict get $date month]-1}]]}] + } + B { # Name of month, spelt out + append formatString %s + append substituents \ + [string map \ + [list @MONTHS_FULL@ \ + [list [mc MONTHS_FULL]]] \ + { [lindex @MONTHS_FULL@ \ + [expr {[dict get $date month]-1}]]}] + } + C { # Century number + append formatString %02d + append substituents \ + { [expr {[dict get $date year] / 100}]} + } + d { # Day of month, with leading zero + append formatString %02d + append substituents { [dict get $date dayOfMonth]} + } + e { # Day of month, without leading zero + append formatString %2d + append substituents { [dict get $date dayOfMonth]} + } + E { # Format group in a locale-dependent + # alternative era + set state percentE + if {!$didLocaleEra} { + append preFormatCode \ + [string map \ + [list @LOCALE_ERAS@ \ + [list [mc LOCALE_ERAS]]] \ + { + set date [GetLocaleEra \ + $date[set date {}] \ + @LOCALE_ERAS@]}] \n + set didLocaleEra 1 + } + if {!$didLocaleNumerals} { + append preFormatCode \ + [list set localeNumerals \ + [mc LOCALE_NUMERALS]] \n + set didLocaleNumerals 1 + } + } + g { # Two-digit year relative to ISO8601 + # week number + append formatString %02d + append substituents \ + { [expr { [dict get $date iso8601Year] % 100 }]} + } + G { # Four-digit year relative to ISO8601 + # week number + append formatString %02d + append substituents { [dict get $date iso8601Year]} + } + H { # Hour in the 24-hour day, leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] \ + / 3600 % 24}]} + } + I { # Hour AM/PM, with leading zero + append formatString %02d + append substituents \ + { [expr { ( ( ( [dict get $date localSeconds] \ + % 86400 ) \ + + 86400 \ + - 3600 ) \ + / 3600 ) \ + % 12 + 1 }] } + } + j { # Day of year (001-366) + append formatString %03d + append substituents { [dict get $date dayOfYear]} + } + J { # Julian Day Number + append formatString %07ld + append substituents { [dict get $date julianDay]} + } + k { # Hour (0-23), no leading zero + append formatString %2d + append substituents \ + { [expr { [dict get $date localSeconds] + / 3600 + % 24 }]} + } + l { # Hour (12-11), no leading zero + append formatString %2d + append substituents \ + { [expr { ( ( ( [dict get $date localSeconds] + % 86400 ) + + 86400 + - 3600 ) + / 3600 ) + % 12 + 1 }]} + } + m { # Month number, leading zero + append formatString %02d + append substituents { [dict get $date month]} + } + M { # Minute of the hour, leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] + / 60 + % 60 }]} + } + n { # A literal newline + append formatString \n + } + N { # Month number, no leading zero + append formatString %2d + append substituents { [dict get $date month]} + } + O { # A format group in the locale's + # alternative numerals + set state percentO + if {!$didLocaleNumerals} { + append preFormatCode \ + [list set localeNumerals \ + [mc LOCALE_NUMERALS]] \n + set didLocaleNumerals 1 + } + } + p { # Localized 'AM' or 'PM' indicator + # converted to uppercase + append formatString %s + append preFormatCode \ + [list set AM [string toupper [mc AM]]] \n \ + [list set PM [string toupper [mc PM]]] \n + append substituents \ + { [expr {(([dict get $date localSeconds] + % 86400) < 43200) ? + $AM : $PM}]} + } + P { # Localized 'AM' or 'PM' indicator + append formatString %s + append preFormatCode \ + [list set am [mc AM]] \n \ + [list set pm [mc PM]] \n + append substituents \ + { [expr {(([dict get $date localSeconds] + % 86400) < 43200) ? + $am : $pm}]} + + } + Q { # Hi, Jeff! + append formatString %s + append substituents { [FormatStarDate $date]} + } + s { # Seconds from the Posix Epoch + append formatString %s + append substituents { [dict get $date seconds]} + } + S { # Second of the minute, with + # leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] + % 60 }]} + } + t { # A literal tab character + append formatString \t + } + u { # Day of the week (1-Monday, 7-Sunday) + append formatString %1d + append substituents { [dict get $date dayOfWeek]} + } + U { # Week of the year (00-53). The + # first Sunday of the year is the + # first day of week 01 + append formatString %02d + append preFormatCode { + set dow [dict get $date dayOfWeek] + if { $dow == 7 } { + set dow 0 + } + incr dow + set UweekNumber \ + [expr { ( [dict get $date dayOfYear] + - $dow + 7 ) + / 7 }] + } + append substituents { $UweekNumber} + } + V { # The ISO8601 week number + append formatString %02d + append substituents { [dict get $date iso8601Week]} + } + w { # Day of the week (0-Sunday, + # 6-Saturday) + append formatString %1d + append substituents \ + { [expr { [dict get $date dayOfWeek] % 7 }]} + } + W { # Week of the year (00-53). The first + # Monday of the year is the first day + # of week 01. + append preFormatCode { + set WweekNumber \ + [expr { ( [dict get $date dayOfYear] + - [dict get $date dayOfWeek] + + 7 ) + / 7 }] + } + append formatString %02d + append substituents { $WweekNumber} + } + y { # The two-digit year of the century + append formatString %02d + append substituents \ + { [expr { [dict get $date year] % 100 }]} + } + Y { # The four-digit year + append formatString %04d + append substituents { [dict get $date year]} + } + z { # The time zone as hours and minutes + # east (+) or west (-) of Greenwich + append formatString %s + append substituents { [FormatNumericTimeZone \ + [dict get $date tzOffset]]} + } + Z { # The name of the time zone + append formatString %s + append substituents { [dict get $date tzName]} + } + % { # A literal percent character + append formatString %% + } + default { # An unknown escape sequence + append formatString %% $char + } + } + } + percentE { # Character following %E + set state {} + switch -exact -- $char { + E { + append formatString %s + append substituents { } \ + [string map \ + [list @BCE@ [list [mc BCE]] \ + @CE@ [list [mc CE]]] \ + {[dict get {BCE @BCE@ CE @CE@} \ + [dict get $date era]]}] + } + C { # Locale-dependent era + append formatString %s + append substituents { [dict get $date localeEra]} + } + y { # Locale-dependent year of the era + append preFormatCode { + set y [dict get $date localeYear] + if { $y >= 0 && $y < 100 } { + set Eyear [lindex $localeNumerals $y] + } else { + set Eyear $y + } + } + append formatString %s + append substituents { $Eyear} + } + default { # Unknown %E format group + append formatString %%E $char + } + } + } + percentO { # Character following %O + set state {} + switch -exact -- $char { + d - e { # Day of the month in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [dict get $date dayOfMonth]]} + } + H - k { # Hour of the day in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + / 3600 + % 24 }]]} + } + I - l { # Hour (12-11) AM/PM in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { ( ( ( [dict get $date localSeconds] + % 86400 ) + + 86400 + - 3600 ) + / 3600 ) + % 12 + 1 }]]} + } + m { # Month number in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals [dict get $date month]]} + } + M { # Minute of the hour in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + / 60 + % 60 }]]} + } + S { # Second of the minute in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + % 60 }]]} + } + u { # Day of the week (Monday=1,Sunday=7) + # in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [dict get $date dayOfWeek]]} + } + w { # Day of the week (Sunday=0,Saturday=6) + # in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date dayOfWeek] % 7 }]]} + } + y { # Year of the century in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date year] % 100 }]]} + } + default { # Unknown format group + append formatString %%O $char + } + } + } + } + } + + # Clean up any improperly terminated groups + + switch -exact -- $state { + percent { + append formatString %% + } + percentE { + append retval %%E + } + percentO { + append retval %%O + } + } + + proc $procName {clockval timezone} " + $preFormatCode + return \[::format [list $formatString] $substituents\] + " + + # puts [list $procName [info args $procName] [info body $procName]] + + return $procName +} + +#---------------------------------------------------------------------- +# +# clock scan -- +# +# Inputs a count of seconds since the Posix Epoch as a time +# of day. +# +# The 'clock format' command scans times of day on input. +# Refer to the user documentation to see what it does. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::scan { args } { + + set format {} + + # Check the count of args + + if { [llength $args] < 1 || [llength $args] % 2 != 1 } { + set cmdName "clock scan" + return -code error \ + -errorcode [list CLOCK wrongNumArgs] \ + "wrong \# args: should be\ + \"$cmdName string\ + ?-base seconds?\ + ?-format string? ?-gmt boolean?\ + ?-locale LOCALE? ?-timezone ZONE?\"" + } + + # Set defaults + + set base [clock seconds] + set string [lindex $args 0] + set format {} + set gmt 0 + set locale c + set timezone [GetSystemTimeZone] + + # Pick up command line options. + + foreach { flag value } [lreplace $args 0 0] { + set saw($flag) {} + switch -exact -- $flag { + -b - -ba - -bas - -base { + set base $value + } + -f - -fo - -for - -form - -forma - -format { + set format $value + } + -g - -gm - -gmt { + set gmt $value + } + -l - -lo - -loc - -loca - -local - -locale { + set locale [string tolower $value] + } + -t - -ti - -tim - -time - -timez - -timezo - -timezon - -timezone { + set timezone $value + } + default { + return -code error \ + -errorcode [list CLOCK badSwitch $flag] \ + "bad switch \"$flag\",\ + must be -base, -format, -gmt, -locale or -timezone" + } + } + } + + # Check options for validity + + if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } { + return -code error \ + -errorcode [list CLOCK gmtWithTimezone] \ + "cannot use -gmt and -timezone in same call" + } + if { [catch { expr { wide($base) } } result] } { + return -code error \ + "expected integer but got \"$base\"" + } + if { ![string is boolean $gmt] } { + return -code error \ + "expected boolean value but got \"$gmt\"" + } else { + if { $gmt } { + set timezone :GMT + } + } + + if { ![info exists saw(-format)] } { + # Perhaps someday we'll localize the legacy code. Right now, + # it's not localized. + if { [info exists saw(-locale)] } { + return -code error \ + -errorcode [list CLOCK flagWithLegacyFormat] \ + "legacy \[clock scan\] does not support -locale" + + } + return [FreeScan $string $base $timezone $locale] + } + + # Change locale if a fresh locale has been given on the command line. + + EnterLocale $locale oldLocale + + set status [catch { + + # Map away the locale-dependent composite format groups + + set scanner [ParseClockScanFormat $format $locale] + $scanner $string $base $timezone + + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {clock} } { + return -code error $result + } else { + return -options $opts $result + } + } else { + return $result + } + +} + +#---------------------------------------------------------------------- +# +# FreeScan -- +# +# Scans a time in free format +# +# Parameters: +# string - String containing the time to scan +# base - Base time, expressed in seconds from the Epoch +# timezone - Default time zone in which the time will be expressed +# locale - (Unused) Name of the locale where the time will be scanned. +# +# Results: +# Returns the date and time extracted from the string in seconds +# from the epoch +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FreeScan { string base timezone locale } { + + variable TZData + + # Get the data for time changes in the given zone + + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + + # Extract year, month and day from the base time for the + # parser to use as defaults + + set date [GetDateFields \ + $base \ + $TZData($timezone) \ + 2361222] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + + # Parse the date. The parser will return a list comprising + # date, time, time zone, relative month/day/seconds, relative + # weekday, ordinal month. + + set status [catch { + Oldscan $string \ + [dict get $date year] \ + [dict get $date month] \ + [dict get $date dayOfMonth] + } result] + if { $status != 0 } { + return -code error "unable to convert date-time string \"$string\": $result" + } + + lassign $result parseDate parseTime parseZone parseRel \ + parseWeekday parseOrdinalMonth + + # If the caller supplied a date in the string, update the 'date' dict + # with the value. If the caller didn't specify a time with the date, + # default to midnight. + + if { [llength $parseDate] > 0 } { + lassign $parseDate y m d + if { $y < 100 } { + if { $y >= 39 } { + incr y 1900 + } else { + incr y 2000 + } + } + dict set date era CE + dict set date year $y + dict set date month $m + dict set date dayOfMonth $d + if { $parseTime eq {} } { + set parseTime 0 + } + } + + # If the caller supplied a time zone in the string, it comes back + # as a two-element list; the first element is the number of minutes + # east of Greenwich, and the second is a Daylight Saving Time + # indicator ( 1 == yes, 0 == no, -1 == unknown ). We make it into + # a time zone indicator of +-hhmm. + + if { [llength $parseZone] > 0 } { + lassign $parseZone minEast dstFlag + set timezone [FormatNumericTimeZone \ + [expr { 60 * $minEast + 3600 * $dstFlag }]] + SetupTimeZone $timezone + } + dict set date tzName $timezone + + # Assemble date, time, zone into seconds-from-epoch + + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] 2361222] + if { $parseTime ne {} } { + dict set date secondOfDay $parseTime + } elseif { [llength $parseWeekday] != 0 + || [llength $parseOrdinalMonth] != 0 + || ( [llength $parseRel] != 0 + && ( [lindex $parseRel 0] != 0 + || [lindex $parseRel 1] != 0 ) ) } { + dict set date secondOfDay 0 + } + + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + dict set date tzName $timezone + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) 2361222] + set seconds [dict get $date seconds] + + # Do relative times + + if { [llength $parseRel] > 0 } { + lassign $parseRel relMonth relDay relSecond + set seconds [add $seconds \ + $relMonth months $relDay days $relSecond seconds \ + -timezone $timezone -locale $locale] + } + + # Do relative weekday + + if { [llength $parseWeekday] > 0 } { + + lassign $parseWeekday dayOrdinal dayOfWeek + set date2 [GetDateFields $seconds $TZData($timezone) 2361222] + dict set date2 era CE + set jdwkday [WeekdayOnOrBefore $dayOfWeek \ + [expr { [dict get $date2 julianDay] + + 6 }]] + incr jdwkday [expr { 7 * $dayOrdinal }] + if { $dayOrdinal > 0 } { + incr jdwkday -7 + } + dict set date2 secondOfDay \ + [expr { [dict get $date2 localSeconds] % 86400 }] + dict set date2 julianDay $jdwkday + dict set date2 localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date2 julianDay]) ) + + [dict get $date secondOfDay] }] + dict set date2 tzName $timezone + set date2 [ConvertLocalToUTC $date2[set date2 {}] $TZData($timezone) \ + 2361222] + set seconds [dict get $date2 seconds] + + } + + # Do relative month + + if { [llength $parseOrdinalMonth] > 0 } { + + lassign $parseOrdinalMonth monthOrdinal monthNumber + if { $monthOrdinal > 0 } { + set monthDiff [expr { $monthNumber - [dict get $date month] }] + if { $monthDiff <= 0 } { + incr monthDiff 12 + } + incr monthOrdinal -1 + } else { + set monthDiff [expr { [dict get $date month] - $monthNumber }] + if { $monthDiff >= 0 } { + incr monthDiff -12 + } + incr monthOrdinal + } + set seconds [add $seconds $monthOrdinal years $monthDiff months \ + -timezone $timezone -locale $locale] + + } + + return $seconds +} + + +#---------------------------------------------------------------------- +# +# ParseClockScanFormat -- +# +# Parses a format string given to [clock scan -format] +# +# Parameters: +# formatString - The format being parsed +# locale - The current locale +# +# Results: +# Constructs and returns a procedure that accepts the +# string being scanned, the base time, and the time zone. +# The procedure will either return the scanned time or +# else throw an error that should be rethrown to the caller +# of [clock scan] +# +# Side effects: +# The given procedure is defined in the ::tcl::clock +# namespace. Scan procedures are not deleted once installed. +# +# Why do we parse dates by defining a procedure to parse them? +# The reason is that by doing so, we have one convenient place to +# cache all the information: the regular expressions that match the +# patterns (which will be compiled), the code that assembles the +# date information, everything lands in one place. In this way, +# when a given format is reused at run time, all the information +# of how to apply it is available in a single place. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseClockScanFormat {formatString locale} { + + # Check whether the format has been parsed previously, and return + # the existing recognizer if it has. + + set procName scanproc'$formatString'$locale + set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName] + if { [namespace which $procName] != {} } { + return $procName + } + + variable DateParseActions + variable TimeParseActions + + # Localize the %x, %X, etc. groups + + set formatString [LocalizeFormat $locale $formatString] + + # Condense whitespace + + regsub -all {[[:space:]]+} $formatString { } formatString + + # Walk through the groups of the format string. In this loop, we + # accumulate: + # - a regular expression that matches the string, + # - the count of capturing brackets in the regexp + # - a set of code that post-processes the fields captured by the regexp, + # - a dictionary whose keys are the names of fields that are present + # in the format string. + + set re {^[[:space:]]*} + set captureCount 0 + set postcode {} + set fieldSet [dict create] + set fieldCount 0 + set postSep {} + set state {} + + foreach c [split $formatString {}] { + switch -exact -- $state { + {} { + if { $c eq "%" } { + set state % + } elseif { $c eq " " } { + append re {[[:space:]]+} + } else { + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + % { + set state {} + switch -exact -- $c { + % { + append re % + } + { } { + append re "\[\[:space:\]\]*" + } + a - A { # Day of week, in words + set l {} + foreach \ + i {7 1 2 3 4 5 6} \ + abr [mc DAYS_OF_WEEK_ABBREV] \ + full [mc DAYS_OF_WEEK_FULL] { + dict set l [string tolower $abr] $i + dict set l [string tolower $full] $i + incr i + } + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode "dict set date dayOfWeek \[" \ + "dict get " [list $lookup] " " \ + \[ {string tolower $field} [incr captureCount] \] \ + "\]\n" + } + b - B - h { # Name of month + set i 0 + set l {} + foreach \ + abr [mc MONTHS_ABBREV] \ + full [mc MONTHS_FULL] { + incr i + dict set l [string tolower $abr] $i + dict set l [string tolower $full] $i + } + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "dict get " [list $lookup] \ + " " \[ {string tolower $field} \ + [incr captureCount] \] \ + "\]\n" + } + C { # Gregorian century + append re \\s*(\\d\\d?) + dict set fieldSet century [incr fieldCount] + append postcode "dict set date century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + d - e { # Day of month + append re \\s*(\\d\\d?) + dict set fieldSet dayOfMonth [incr fieldCount] + append postcode "dict set date dayOfMonth \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + E { # Prefix for locale-specific codes + set state %E + } + g { # ISO8601 2-digit year + append re \\s*(\\d\\d) + dict set fieldSet iso8601YearOfCentury \ + [incr fieldCount] + append postcode \ + "dict set date iso8601YearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + G { # ISO8601 4-digit year + append re \\s*(\\d\\d)(\\d\\d) + dict set fieldSet iso8601Century [incr fieldCount] + dict set fieldSet iso8601YearOfCentury \ + [incr fieldCount] + append postcode \ + "dict set date iso8601Century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" \ + "dict set date iso8601YearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + H - k { # Hour of day + append re \\s*(\\d\\d?) + dict set fieldSet hour [incr fieldCount] + append postcode "dict set date hour \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + I - l { # Hour, AM/PM + append re \\s*(\\d\\d?) + dict set fieldSet hourAMPM [incr fieldCount] + append postcode "dict set date hourAMPM \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + j { # Day of year + append re \\s*(\\d\\d?\\d?) + dict set fieldSet dayOfYear [incr fieldCount] + append postcode "dict set date dayOfYear \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + J { # Julian Day Number + append re \\s*(\\d+) + dict set fieldSet julianDay [incr fieldCount] + append postcode "dict set date julianDay \[" \ + "::scan \$field" [incr captureCount] " %ld" \ + "\]\n" + } + m - N { # Month number + append re \\s*(\\d\\d?) + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + M { # Minute + append re \\s*(\\d\\d?) + dict set fieldSet minute [incr fieldCount] + append postcode "dict set date minute \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + n { # Literal newline + append re \\n + } + O { # Prefix for locale numerics + set state %O + } + p - P { # AM/PM indicator + set l [list [string tolower [mc AM]] 0 \ + [string tolower [mc PM]] 1] + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet amPmIndicator [incr fieldCount] + append postcode "dict set date amPmIndicator \[" \ + "dict get " [list $lookup] " \[string tolower " \ + "\$field" \ + [incr captureCount] \ + "\]\]\n" + } + Q { # Hi, Jeff! + append re {Stardate\s+([-+]?\d+)(\d\d\d)[.](\d)} + incr captureCount + dict set fieldSet seconds [incr fieldCount] + append postcode {dict set date seconds } \[ \ + {ParseStarDate $field} [incr captureCount] \ + { $field} [incr captureCount] \ + { $field} [incr captureCount] \ + \] \n + } + s { # Seconds from Posix Epoch + # This next case is insanely difficult, + # because it's problematic to determine + # whether the field is actually within + # the range of a wide integer. + append re {\s*([-+]?\d+)} + dict set fieldSet seconds [incr fieldCount] + append postcode {dict set date seconds } \[ \ + {ScanWide $field} [incr captureCount] \] \n + } + S { # Second + append re \\s*(\\d\\d?) + dict set fieldSet second [incr fieldCount] + append postcode "dict set date second \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + t { # Literal tab character + append re \\t + } + u - w { # Day number within week, 0 or 7 == Sun + # 1=Mon, 6=Sat + append re \\s*(\\d) + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode {::scan $field} [incr captureCount] \ + { %d dow} \n \ + { + if { $dow == 0 } { + set dow 7 + } elseif { $dow > 7 } { + return -code error \ + -errorcode [list CLOCK badDayOfWeek] \ + "day of week is greater than 7" + } + dict set date dayOfWeek $dow + } + } + U { # Week of year. The + # first Sunday of the year is the + # first day of week 01. No scan rule + # uses this group. + append re \\s*\\d\\d? + } + V { # Week of ISO8601 year + + append re \\s*(\\d\\d?) + dict set fieldSet iso8601Week [incr fieldCount] + append postcode "dict set date iso8601Week \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + W { # Week of the year (00-53). The first + # Monday of the year is the first day + # of week 01. No scan rule uses this + # group. + append re \\s*\\d\\d? + } + y { # Two-digit Gregorian year + append re \\s*(\\d\\d?) + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode "dict set date yearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + Y { # 4-digit Gregorian year + append re \\s*(\\d\\d)(\\d\\d) + dict set fieldSet century [incr fieldCount] + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode \ + "dict set date century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" \ + "dict set date yearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + z - Z { # Time zone name + append re {(?:([-+]\d\d(?::?\d\d(?::?\d\d)?)?)|([[:alnum:]]{1,4}))} + dict set fieldSet tzName [incr fieldCount] + append postcode \ + {if } \{ { $field} [incr captureCount] \ + { ne "" } \} { } \{ \n \ + {dict set date tzName $field} \ + $captureCount \n \ + \} { else } \{ \n \ + {dict set date tzName } \[ \ + {ConvertLegacyTimeZone $field} \ + [incr captureCount] \] \n \ + \} \n \ + } + % { # Literal percent character + append re % + } + default { + append re % + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + } + %E { + switch -exact -- $c { + C { # Locale-dependent era + set d {} + foreach triple [mc LOCALE_ERAS] { + lassign $triple t symbol year + dict set d [string tolower $symbol] $year + } + lassign [UniquePrefixRegexp $d] regex lookup + append re (?: $regex ) + } + E { + set l {} + dict set l [string tolower [mc BCE]] BCE + dict set l [string tolower [mc CE]] CE + dict set l b.c.e. BCE + dict set l c.e. CE + dict set l b.c. BCE + dict set l a.d. CE + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet era [incr fieldCount] + append postcode "dict set date era \["\ + "dict get " [list $lookup] \ + { } \[ {string tolower $field} \ + [incr captureCount] \] \ + "\]\n" + } + y { # Locale-dependent year of the era + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + incr captureCount + } + default { + append re %E + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + set state {} + } + %O { + switch -exact -- $c { + d - e { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet dayOfMonth [incr fieldCount] + append postcode "dict set date dayOfMonth \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + H - k { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet hour [incr fieldCount] + append postcode "dict set date hour \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + I - l { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet hourAMPM [incr fieldCount] + append postcode "dict set date hourAMPM \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + m { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + M { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet minute [incr fieldCount] + append postcode "dict set date minute \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + S { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet second [incr fieldCount] + append postcode "dict set date second \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + u - w { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode "set dow \[dict get " [list $lookup] \ + { $field} [incr captureCount] \] \n \ + { + if { $dow == 0 } { + set dow 7 + } elseif { $dow > 7 } { + return -code error \ + -errorcode [list CLOCK badDayOfWeek] \ + "day of week is greater than 7" + } + dict set date dayOfWeek $dow + } + } + y { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode {dict set date yearOfCentury } \[ \ + {dict get } [list $lookup] { $field} \ + [incr captureCount] \] \n + } + default { + append re %O + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + set state {} + } + } + } + + # Clean up any unfinished format groups + + append re $state \\s*\$ + + # Build the procedure + + set procBody {} + append procBody "variable ::tcl::clock::TZData" \n + append procBody "if \{ !\[ regexp -nocase [list $re] \$string ->" + for { set i 1 } { $i <= $captureCount } { incr i } { + append procBody " " field $i + } + append procBody "\] \} \{" \n + append procBody { + return -code error -errorcode [list CLOCK badInputString] \ + {input string does not match supplied format} + } + append procBody \}\n + append procBody "set date \[dict create\]" \n + append procBody {dict set date tzName $timeZone} \n + append procBody $postcode + append procBody [list set changeover [mc GREGORIAN_CHANGE_DATE]] \n + + # Get time zone if needed + + if { ![dict exists $fieldSet seconds] + && ![dict exists $fieldSet starDate] } { + if { [dict exists $fieldSet tzName] } { + append procBody { + set timeZone [dict get $date tzName] + } + } + append procBody { + ::tcl::clock::SetupTimeZone $timeZone + } + } + + # Add code that gets Julian Day Number from the fields. + + append procBody [MakeParseCodeFromFields $fieldSet $DateParseActions] + + # Get time of day + + append procBody [MakeParseCodeFromFields $fieldSet $TimeParseActions] + + # Assemble seconds, and convert local nominal time to UTC. + + if { ![dict exists $fieldSet seconds] + && ![dict exists $fieldSet starDate] } { + append procBody { + if { [dict get $date julianDay] > 5373484 } { + return -code error -errorcode [list CLOCK dateTooLarge] \ + "requested date too large to represent" + } + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + } + append procBody { + set date [::tcl::clock::ConvertLocalToUTC $date[set date {}] \ + $TZData($timeZone) \ + $changeover] + } + } + + # Return result + + append procBody {return [dict get $date seconds]} \n + + proc $procName { string baseTime timeZone } $procBody + + # puts [list proc $procName [list string baseTime timeZone] $procBody] + + return $procName +} + +#---------------------------------------------------------------------- +# +# LocaleNumeralMatcher -- +# +# Composes a regexp that captures the numerals in the given +# locale, and a dictionary to map them to conventional numerals. +# +# Parameters: +# locale - Name of the current locale +# +# Results: +# Returns a two-element list comprising the regexp and the +# dictionary. +# +# Side effects: +# Caches the result. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LocaleNumeralMatcher {l} { + + variable LocaleNumeralCache + + if { ![dict exists $LocaleNumeralCache $l] } { + set d {} + set i 0 + set sep \( + foreach n [mc LOCALE_NUMERALS] { + dict set d $n $i + regsub -all {[^[:alnum:]]} $n \\\\& subex + append re $sep $subex + set sep | + incr i + } + append re \) + dict set LocaleNumeralCache $l [list $re $d] + } + return [dict get $LocaleNumeralCache $l] +} + + + +#---------------------------------------------------------------------- +# +# UniquePrefixRegexp -- +# +# Composes a regexp that performs unique-prefix matching. The +# RE matches one of a supplied set of strings, or any unique +# prefix thereof. +# +# Parameters: +# data - List of alternating match-strings and values. +# Match-strings with distinct values are considered +# distinct. +# +# Results: +# Returns a two-element list. The first is a regexp that +# matches any unique prefix of any of the strings. The second +# is a dictionary whose keys are match values from the regexp +# and whose values are the corresponding values from 'data'. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::UniquePrefixRegexp { data } { + + # The 'successors' dictionary will contain, for each string that + # is a prefix of any key, all characters that may follow that + # prefix. The 'prefixMapping' dictionary will have keys that + # are prefixes of keys and values that correspond to the keys. + + set prefixMapping [dict create] + set successors [dict create {} {}] + + # Walk the key-value pairs + + foreach { key value } $data { + + # Construct all prefixes of the key; + + set prefix {} + foreach char [split $key {}] { + set oldPrefix $prefix + dict set successors $oldPrefix $char {} + append prefix $char + + # Put the prefixes in the 'prefixMapping' and 'successors' + # dictionaries + + dict lappend prefixMapping $prefix $value + if { ![dict exists $successors $prefix] } { + dict set successors $prefix {} + } + } + } + + # Identify those prefixes that designate unique values, and + # those that are the full keys + + set uniquePrefixMapping {} + dict for { key valueList } $prefixMapping { + if { [llength $valueList] == 1 } { + dict set uniquePrefixMapping $key [lindex $valueList 0] + } + } + foreach { key value } $data { + dict set uniquePrefixMapping $key $value + } + + # Construct the re. + + return [list \ + [MakeUniquePrefixRegexp $successors $uniquePrefixMapping {}] \ + $uniquePrefixMapping] +} + +#---------------------------------------------------------------------- +# +# MakeUniquePrefixRegexp -- +# +# Service procedure for 'UniquePrefixRegexp' that constructs +# a regular expresison that matches the unique prefixes. +# +# Parameters: +# successors - Dictionary whose keys are all prefixes +# of keys passed to 'UniquePrefixRegexp' and whose +# values are dictionaries whose keys are the characters +# that may follow those prefixes. +# uniquePrefixMapping - Dictionary whose keys are the unique +# prefixes and whose values are not examined. +# prefixString - Current prefix being processed. +# +# Results: +# Returns a constructed regular expression that matches the set +# of unique prefixes beginning with the 'prefixString'. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::MakeUniquePrefixRegexp { successors + uniquePrefixMapping + prefixString } { + + # Get the characters that may follow the current prefix string + + set schars [lsort -ascii [dict keys [dict get $successors $prefixString]]] + if { [llength $schars] == 0 } { + return {} + } + + # If there is more than one successor character, or if the current + # prefix is a unique prefix, surround the generated re with non-capturing + # parentheses. + + set re {} + if { [dict exists $uniquePrefixMapping $prefixString] + || [llength $schars] > 1 } { + append re "(?:" + } + + # Generate a regexp that matches the successors. + + set sep "" + foreach { c } $schars { + set nextPrefix $prefixString$c + regsub -all {[^[:alnum:]]} $c \\\\& rechar + append re $sep $rechar \ + [MakeUniquePrefixRegexp \ + $successors $uniquePrefixMapping $nextPrefix] + set sep | + } + + # If the current prefix is a unique prefix, make all following text + # optional. Otherwise, if there is more than one successor character, + # close the non-capturing parentheses. + + if { [dict exists $uniquePrefixMapping $prefixString] } { + append re ")?" + } elseif { [llength $schars] > 1 } { + append re ")" + } + + return $re +} + +#---------------------------------------------------------------------- +# +# MakeParseCodeFromFields -- +# +# Composes Tcl code to extract the Julian Day Number from a +# dictionary containing date fields. +# +# Parameters: +# dateFields -- Dictionary whose keys are fields of the date, +# and whose values are the rightmost positions +# at which those fields appear. +# parseActions -- List of triples: field set, priority, and +# code to emit. Smaller priorities are better, and +# the list must be in ascending order by priority +# +# Results: +# Returns a burst of code that extracts the day number from the +# given date. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::MakeParseCodeFromFields { dateFields parseActions } { + + set currPrio 999 + set currFieldPos [list] + set currCodeBurst { + error "in ::tcl::clock::MakeParseCodeFromFields: can't happen" + } + + foreach { fieldSet prio parseAction } $parseActions { + + # If we've found an answer that's better than any that follow, + # quit now. + + if { $prio > $currPrio } { + break + } + + # Accumulate the field positions that are used in the current + # field grouping. + + set fieldPos [list] + set ok true + foreach field $fieldSet { + if { ! [dict exists $dateFields $field] } { + set ok 0 + break + } + lappend fieldPos [dict get $dateFields $field] + } + + # Quit if we don't have a complete set of fields + if { !$ok } { + continue + } + + # Determine whether the current answer is better than the last. + + set fPos [lsort -integer -decreasing $fieldPos] + + if { $prio == $currPrio } { + foreach currPos $currFieldPos newPos $fPos { + if { ![string is integer $newPos] + || ![string is integer $currPos] + || $newPos > $currPos } { + break + } + if { $newPos < $currPos } { + set ok 0 + break + } + } + } + if { !$ok } { + continue + } + + # Remember the best possibility for extracting date information + + set currPrio $prio + set currFieldPos $fPos + set currCodeBurst $parseAction + + } + + return $currCodeBurst + +} + +#---------------------------------------------------------------------- +# +# EnterLocale -- +# +# Switch [mclocale] to a given locale if necessary +# +# Parameters: +# locale -- Desired locale +# oldLocaleVar -- Name of a variable in caller's scope that +# tracks the previous locale name. +# +# Results: +# Returns the locale that was previously current. +# +# Side effects: +# Does [mclocale]. If necessary, uses [mcload] to load the +# designated locale's files, and tracks that it has done so +# in the 'McLoaded' variable. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::EnterLocale { locale oldLocaleVar } { + + upvar 1 $oldLocaleVar oldLocale + + variable MsgDir + variable McLoaded + + set oldLocale [mclocale] + if { $locale eq {system} } { + + if { $::tcl_platform(platform) ne {windows} } { + + # On a non-windows platform, the 'system' locale is + # the same as the 'current' locale + + set locale current + } else { + + # On a windows platform, the 'system' locale is + # adapted from the 'current' locale by applying the + # date and time formats from the Control Panel. + # First, load the 'current' locale if it's not yet loaded + + if {![dict exists $McLoaded $oldLocale] } { + mcload $MsgDir + dict set McLoaded $oldLocale {} + } + + # Make a new locale string for the system locale, and + # get the Control Panel information + + set locale ${oldLocale}_windows + if { ![dict exists $McLoaded $locale] } { + LoadWindowsDateTimeFormats $locale + dict set McLoaded $locale {} + } + } + } + if { $locale eq {current}} { + set locale $oldLocale + unset oldLocale + } elseif { $locale eq $oldLocale } { + unset oldLocale + } else { + mclocale $locale + } + if { ![dict exists $McLoaded $locale] } { + mcload $MsgDir + dict set McLoaded $locale {} + } + +} + +#---------------------------------------------------------------------- +# +# LoadWindowsDateTimeFormats -- +# +# Load the date/time formats from the Control Panel in Windows +# and convert them so that they're usable by Tcl. +# +# Parameters: +# locale - Name of the locale in whose message catalog +# the converted formats are to be stored. +# +# Results: +# None. +# +# Side effects: +# Updates the given message catalog with the locale strings. +# +# Presumes that on entry, [mclocale] is set to the current locale, +# so that default strings can be obtained if the Registry query +# fails. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } { + + # Bail out if we can't find the Registry + + variable NoRegistry + if { [info exists NoRegistry] } return + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sShortDate + } string] } { + set quote {} + set datefmt {} + foreach { unquoted quoted } [split $string '] { + append datefmt $quote [string map { + dddd %A + ddd %a + dd %d + d %e + MMMM %B + MMM %b + MM %m + M %N + yyyy %Y + yy %y + y %y + gg {} + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale DATE_FORMAT $datefmt + } + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sLongDate + } string] } { + set quote {} + set ldatefmt {} + foreach { unquoted quoted } [split $string '] { + append ldatefmt $quote [string map { + dddd %A + ddd %a + dd %d + d %e + MMMM %B + MMM %b + MM %m + M %N + yyyy %Y + yy %y + y %y + gg {} + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale LOCALE_DATE_FORMAT $ldatefmt + } + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sTimeFormat + } string] } { + set quote {} + set timefmt {} + foreach { unquoted quoted } [split $string '] { + append timefmt $quote [string map { + HH %H + H %k + hh %I + h %l + mm %M + m %M + ss %S + s %S + tt %p + t %p + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale TIME_FORMAT $timefmt + } + + catch { + ::msgcat::mcset $locale DATE_TIME_FORMAT "$datefmt $timefmt" + } + catch { + ::msgcat::mcset $locale LOCALE_DATE_TIME_FORMAT "$ldatefmt $timefmt" + } + + return + +} + +#---------------------------------------------------------------------- +# +# LocalizeFormat -- +# +# Map away locale-dependent format groups in a clock format. +# +# Parameters: +# locale -- Current [mclocale] locale, supplied to avoid +# an extra call +# format -- Format supplied to [clock scan] or [clock format] +# +# Results: +# Returns the string with locale-dependent composite format +# groups substituted out. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LocalizeFormat { locale format } { + + variable McLoaded + + if { [dict exists $McLoaded $locale FORMAT $format] } { + return [dict get $McLoaded $locale FORMAT $format] + } + set inFormat $format + + # Handle locale-dependent format groups by mapping them out of the format + # string. Note that the order of the [string map] operations is + # significant because later formats can refer to later ones; for example + # %c can refer to %X, which in turn can refer to %T. + + set list { + %% %% + %D %m/%d/%Y + %+ {%a %b %e %H:%M:%S %Z %Y} + } + lappend list %EY [string map $list [mc LOCALE_YEAR_FORMAT]] + lappend list %T [string map $list [mc TIME_FORMAT_24_SECS]] + lappend list %R [string map $list [mc TIME_FORMAT_24]] + lappend list %r [string map $list [mc TIME_FORMAT_12]] + lappend list %X [string map $list [mc TIME_FORMAT]] + lappend list %EX [string map $list [mc LOCALE_TIME_FORMAT]] + lappend list %x [string map $list [mc DATE_FORMAT]] + lappend list %Ex [string map $list [mc LOCALE_DATE_FORMAT]] + lappend list %c [string map $list [mc DATE_TIME_FORMAT]] + lappend list %Ec [string map $list [mc LOCALE_DATE_TIME_FORMAT]] + set format [string map $list $format] + + dict set McLoaded $locale FORMAT $inFormat $format + return $format +} + +#---------------------------------------------------------------------- +# +# FormatNumericTimeZone -- +# +# Formats a time zone as +hhmmss +# +# Parameters: +# z - Time zone in seconds east of Greenwich +# +# Results: +# Returns the time zone formatted in a numeric form +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FormatNumericTimeZone { z } { + + if { $z < 0 } { + set z [expr { - $z }] + set retval - + } else { + set retval + + } + append retval [::format %02d [expr { $z / 3600 }]] + set z [expr { $z % 3600 }] + append retval [::format %02d [expr { $z / 60 }]] + set z [expr { $z % 60 }] + if { $z != 0 } { + append retval [::format %02d $z] + } + return $retval + +} + +#---------------------------------------------------------------------- +# +# FormatStarDate -- +# +# Formats a date as a StarDate. +# +# Parameters: +# date - Dictionary containing 'year', 'dayOfYear', and +# 'localSeconds' fields. +# +# Results: +# Returns the given date formatted as a StarDate. +# +# Side effects: +# None. +# +# Jeff Hobbs put this in to support an atrocious pun about Tcl being +# "Enterprise ready." Now we're stuck with it. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FormatStarDate { date } { + + variable Roddenberry + + # Get day of year, zero based + + set doy [expr { [dict get $date dayOfYear] - 1 }] + + # Determine whether the year is a leap year + + set lp [IsGregorianLeapYear $date] + + # Convert day of year to a fractional year + + if { $lp } { + set fractYear [expr { 1000 * $doy / 366 }] + } else { + set fractYear [expr { 1000 * $doy / 365 }] + } + + # Put together the StarDate + + return [::format "Stardate %02d%03d.%1d" \ + [expr { [dict get $date year] - $Roddenberry }] \ + $fractYear \ + [expr { [dict get $date localSeconds] % 86400 + / ( 86400 / 10 ) }]] +} + +#---------------------------------------------------------------------- +# +# ParseStarDate -- +# +# Parses a StarDate +# +# Parameters: +# year - Year from the Roddenberry epoch +# fractYear - Fraction of a year specifiying the day of year. +# fractDay - Fraction of a day +# +# Results: +# Returns a count of seconds from the Posix epoch. +# +# Side effects: +# None. +# +# Jeff Hobbs put this in to support an atrocious pun about Tcl being +# "Enterprise ready." Now we're stuck with it. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseStarDate { year fractYear fractDay } { + + variable Roddenberry + + # Build a tentative date from year and fraction. + + set date [dict create \ + gregorian 1 \ + era CE \ + year [expr { $year + $Roddenberry }] \ + dayOfYear [expr { $fractYear * 365 / 1000 + 1 }]] + set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]] + + # Determine whether the given year is a leap year + + set lp [IsGregorianLeapYear $date] + + # Reconvert the fractional year according to whether the given + # year is a leap year + + if { $lp } { + dict set date dayOfYear \ + [expr { $fractYear * 366 / 1000 + 1 }] + } else { + dict set date dayOfYear \ + [expr { $fractYear * 365 / 1000 + 1 }] + } + dict unset date julianDay + dict unset date gregorian + set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]] + + return [expr { 86400 * [dict get $date julianDay] + - 210866803200 + + ( 86400 / 10 ) * $fractDay }] + +} + +#---------------------------------------------------------------------- +# +# ScanWide -- +# +# Scans a wide integer from an input +# +# Parameters: +# str - String containing a decimal wide integer +# +# Results: +# Returns the string as a pure wide integer. Throws an error if +# the string is misformatted or out of range. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ScanWide { str } { + set count [::scan $str {%ld %c} result junk] + if { $count != 1 } { + return -code error -errorcode [list CLOCK notAnInteger $str] \ + "\"$str\" is not an integer" + } + if { [incr result 0] != $str } { + return -code error -errorcode [list CLOCK integervalueTooLarge] \ + "integer value too large to represent" + } + return $result +} + +#---------------------------------------------------------------------- +# +# InterpretTwoDigitYear -- +# +# Given a date that contains only the year of the century, +# determines the target value of a two-digit year. +# +# Parameters: +# date - Dictionary containing fields of the date. +# baseTime - Base time relative to which the date is expressed. +# twoDigitField - Name of the field that stores the two-digit year. +# Default is 'yearOfCentury' +# fourDigitField - Name of the field that will receive the four-digit +# year. Default is 'year' +# +# Results: +# Returns the dictionary augmented with the four-digit year, stored in +# the given key. +# +# Side effects: +# None. +# +# The current rule for interpreting a two-digit year is that the year +# shall be between 1937 and 2037, thus staying within the range of a +# 32-bit signed value for time. This rule may change to a sliding +# window in future versions, so the 'baseTime' parameter (which is +# currently ignored) is provided in the procedure signature. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretTwoDigitYear { date baseTime + { twoDigitField yearOfCentury } + { fourDigitField year } } { + + set yr [dict get $date $twoDigitField] + if { $yr <= 37 } { + dict set date $fourDigitField [expr { $yr + 2000 }] + } else { + dict set date $fourDigitField [expr { $yr + 1900 }] + } + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseYear -- +# +# Places the number of the current year into a dictionary. +# +# Parameters: +# date - Dictionary value to update +# baseTime - Base time from which to extract the year, expressed +# in seconds from the Posix epoch +# timezone - the time zone in which the date is being scanned +# changeover - the Julian Day on which the Gregorian calendar +# was adopted in the target locale. +# +# Results: +# Returns the dictionary with the current year assigned. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseYear { date baseTime timezone changeover } { + + variable TZData + + # Find the Julian Day Number corresponding to the base time, and + # find the Gregorian year corresponding to that Julian Day. + + set date2 [GetDateFields $baseTime $TZData($timezone) $changeover] + + # Store the converted year + + dict set date era [dict get $date2 era] + dict set date year [dict get $date2 year] + + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseIso8601Year -- +# +# Determines the base year in the ISO8601 fiscal calendar. +# +# Parameters: +# date - Dictionary containing the fields of the date that +# is to be augmented with the base year. +# baseTime - Base time expressed in seconds from the Posix epoch. +# timeZone - Target time zone +# changeover - Julian Day of adoption of the Gregorian calendar in +# the target locale. +# +# Results: +# Returns the given date with "iso8601Year" set to the +# base year. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseIso8601Year {date baseTime timeZone changeover} { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + + # Calculate the ISO8601 date and transfer the year + + dict set date era CE + dict set date iso8601Year [dict get $date2 iso8601Year] + return $date +} + +#---------------------------------------------------------------------- +# +# AssignBaseMonth -- +# +# Places the number of the current year and month into a +# dictionary. +# +# Parameters: +# date - Dictionary value to update +# baseTime - Time from which the year and month are to be +# obtained, expressed in seconds from the Posix epoch. +# timezone - Name of the desired time zone +# changeover - Julian Day on which the Gregorian calendar was adopted. +# +# Results: +# Returns the dictionary with the base year and month assigned. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseMonth {date baseTime timezone changeover} { + + variable TZData + + # Find the year and month corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timezone) $changeover] + dict set date era [dict get $date2 era] + dict set date year [dict get $date2 year] + dict set date month [dict get $date2 month] + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseWeek -- +# +# Determines the base year and week in the ISO8601 fiscal calendar. +# +# Parameters: +# date - Dictionary containing the fields of the date that +# is to be augmented with the base year and week. +# baseTime - Base time expressed in seconds from the Posix epoch. +# changeover - Julian Day on which the Gregorian calendar was adopted +# in the target locale. +# +# Results: +# Returns the given date with "iso8601Year" set to the +# base year and "iso8601Week" to the week number. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseWeek {date baseTime timeZone changeover} { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + + # Calculate the ISO8601 date and transfer the year + + dict set date era CE + dict set date iso8601Year [dict get $date2 iso8601Year] + dict set date iso8601Week [dict get $date2 iso8601Week] + return $date +} + +#---------------------------------------------------------------------- +# +# AssignBaseJulianDay -- +# +# Determines the base day for a time-of-day conversion. +# +# Parameters: +# date - Dictionary that is to get the base day +# baseTime - Base time expressed in seconds from the Posix epoch +# changeover - Julian day on which the Gregorian calendar was +# adpoted in the target locale. +# +# Results: +# Returns the given dictionary augmented with a 'julianDay' field +# that contains the base day. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseJulianDay { date baseTime timeZone changeover } { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + dict set date julianDay [dict get $date2 julianDay] + + return $date +} + +#---------------------------------------------------------------------- +# +# InterpretHMSP -- +# +# Interprets a time in the form "hh:mm:ss am". +# +# Parameters: +# date -- Dictionary containing "hourAMPM", "minute", "second" +# and "amPmIndicator" fields. +# +# Results: +# Returns the number of seconds from local midnight. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretHMSP { date } { + + set hr [dict get $date hourAMPM] + if { $hr == 12 } { + set hr 0 + } + if { [dict get $date amPmIndicator] } { + incr hr 12 + } + dict set date hour $hr + return [InterpretHMS $date[set date {}]] + +} + +#---------------------------------------------------------------------- +# +# InterpretHMS -- +# +# Interprets a 24-hour time "hh:mm:ss" +# +# Parameters: +# date -- Dictionary containing the "hour", "minute" and "second" +# fields. +# +# Results: +# Returns the given dictionary augmented with a "secondOfDay" +# field containing the number of seconds from local midnight. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretHMS { date } { + + return [expr { ( [dict get $date hour] * 60 + + [dict get $date minute] ) * 60 + + [dict get $date second] }] + +} + +#---------------------------------------------------------------------- +# +# GetSystemTimeZone -- +# +# Determines the system time zone, which is the default for the +# 'clock' command if no other zone is supplied. +# +# Parameters: +# None. +# +# Results: +# Returns the system time zone. +# +# Side effects: +# Stores the sustem time zone in the 'CachedSystemTimeZone' +# variable, since determining it may be an expensive process. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetSystemTimeZone {} { + + variable CachedSystemTimeZone + variable TimeZoneBad + + if {[set result [getenv TCL_TZ]] ne {}} { + set timezone $result + } elseif {[set result [getenv TZ]] ne {}} { + set timezone $result + } + if {![info exists timezone]} { + # Cache the time zone only if it was detected by one of the + # expensive methods. + if { [info exists CachedSystemTimeZone] } { + set timezone $CachedSystemTimeZone + } elseif { $::tcl_platform(platform) eq {windows} } { + set timezone [GuessWindowsTimeZone] + } elseif { [file exists /etc/localtime] + && ![catch {ReadZoneinfoFile \ + Tcl/Localtime /etc/localtime}] } { + set timezone :Tcl/Localtime + } else { + set timezone :localtime + } + set CachedSystemTimeZone $timezone + } + if { ![dict exists $TimeZoneBad $timezone] } { + dict set TimeZoneBad $timezone [catch {SetupTimeZone $timezone}] + } + if { [dict get $TimeZoneBad $timezone] } { + return :localtime + } else { + return $timezone + } + +} + +#---------------------------------------------------------------------- +# +# ConvertLegacyTimeZone -- +# +# Given an alphanumeric time zone identifier and the system +# time zone, convert the alphanumeric identifier to an +# unambiguous time zone. +# +# Parameters: +# tzname - Name of the time zone to convert +# +# Results: +# Returns a time zone name corresponding to tzname, but +# in an unambiguous form, generally +hhmm. +# +# This procedure is implemented primarily to allow the parsing of +# RFC822 date/time strings. Processing a time zone name on input +# is not recommended practice, because there is considerable room +# for ambiguity; for instance, is BST Brazilian Standard Time, or +# British Summer Time? +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ConvertLegacyTimeZone { tzname } { + + variable LegacyTimeZone + + set tzname [string tolower $tzname] + if { ![dict exists $LegacyTimeZone $tzname] } { + return -code error -errorcode [list CLOCK badTZName $tzname] \ + "time zone \"$tzname\" not found" + } else { + return [dict get $LegacyTimeZone $tzname] + } + +} + +#---------------------------------------------------------------------- +# +# SetupTimeZone -- +# +# Given the name or specification of a time zone, sets up +# its in-memory data. +# +# Parameters: +# tzname - Name of a time zone +# +# Results: +# Unless the time zone is ':localtime', sets the TZData array +# to contain the lookup table for local<->UTC conversion. +# Returns an error if the time zone cannot be parsed. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::SetupTimeZone { timezone } { + + variable TZData + + if {! [info exists TZData($timezone)] } { + variable MINWIDE + if { $timezone eq {:localtime} } { + + # Nothing to do, we'll convert using the localtime function + + } elseif { [regexp {^([-+])(\d\d)(?::?(\d\d)(?::?(\d\d))?)?} $timezone \ + -> s hh mm ss] } { + + # Make a fixed offset + + ::scan $hh %d hh + if { $mm eq {} } { + set mm 0 + } else { + ::scan $mm %d mm + } + if { $ss eq {} } { + set ss 0 + } else { + ::scan $ss %d ss + } + set offset [expr { ( $hh * 60 + $mm ) * 60 + $ss }] + if { $s eq {-} } { + set offset [expr { - $offset }] + } + set TZData($timezone) [list [list $MINWIDE $offset -1 $timezone]] + + } elseif { [string index $timezone 0] eq {:} } { + + # Convert using a time zone file + + if { + [catch { + LoadTimeZoneFile [string range $timezone 1 end] + }] + && [catch { + LoadZoneinfoFile [string range $timezone 1 end] + }] + } { + return -code error \ + -errorcode [list CLOCK badTimeZone $timezone] \ + "time zone \"$timezone\" not found" + } + + } elseif { ![catch {ParsePosixTimeZone $timezone} tzfields] } { + + # This looks like a POSIX time zone - try to process it + + if { [catch {ProcessPosixTimeZone $tzfields} data opts] } { + if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } { + dict unset opts -errorinfo + } + return -options $opts $data + } else { + set TZData($timezone) $data + } + + } else { + + # We couldn't parse this as a POSIX time zone. Try + # again with a time zone file - this time without a colon + + if { [catch { LoadTimeZoneFile $timezone }] + && [catch { LoadZoneinfoFile $timezone } - opts] } { + dict unset opts -errorinfo + return -options $opts "time zone $timezone not found" + } + set TZData($timezone) $TZData(:$timezone) + } + } + + return +} + +#---------------------------------------------------------------------- +# +# GuessWindowsTimeZone -- +# +# Determines the system time zone on windows. +# +# Parameters: +# None. +# +# Results: +# Returns a time zone specifier that corresponds to the system +# time zone information found in the Registry. +# +# Bugs: +# Fixed dates for DST change are unimplemented at present, because +# no time zone information supplied with Windows actually uses +# them! +# +# On a Windows system where neither $env(TCL_TZ) nor $env(TZ) is +# specified, GuessWindowsTimeZone looks in the Registry for the +# system time zone information. It then attempts to find an entry +# in WinZoneInfo for a time zone that uses the same rules. If +# it finds one, it returns it; otherwise, it constructs a Posix-style +# time zone string and returns that. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GuessWindowsTimeZone {} { + + variable WinZoneInfo + variable NoRegistry + variable TimeZoneBad + + if { [info exists NoRegistry] } { + return :localtime + } + + # Dredge time zone information out of the registry + + if { [catch { + set rpath HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TimeZoneInformation + set data [list \ + [expr { -60 + * [registry get $rpath Bias] }] \ + [expr { -60 + * [registry get $rpath StandardBias] }] \ + [expr { -60 \ + * [registry get $rpath DaylightBias] }]] + set stdtzi [registry get $rpath StandardStart] + foreach ind {0 2 14 4 6 8 10 12} { + binary scan $stdtzi @${ind}s val + lappend data $val + } + set daytzi [registry get $rpath DaylightStart] + foreach ind {0 2 14 4 6 8 10 12} { + binary scan $daytzi @${ind}s val + lappend data $val + } + }] } { + + # Missing values in the Registry - bail out + + return :localtime + } + + # Make up a Posix time zone specifier if we can't find one. + # Check here that the tzdata file exists, in case we're running + # in an environment (e.g. starpack) where tzdata is incomplete. + # (Bug 1237907) + + if { [dict exists $WinZoneInfo $data] } { + set tzname [dict get $WinZoneInfo $data] + if { ! [dict exists $TimeZoneBad $tzname] } { + dict set TimeZoneBad $tzname [catch {SetupTimeZone $tzname}] + } + } else { + set tzname {} + } + if { $tzname eq {} || [dict get $TimeZoneBad $tzname] } { + lassign $data \ + bias stdBias dstBias \ + stdYear stdMonth stdDayOfWeek stdDayOfMonth \ + stdHour stdMinute stdSecond stdMillisec \ + dstYear dstMonth dstDayOfWeek dstDayOfMonth \ + dstHour dstMinute dstSecond dstMillisec + set stdDelta [expr { $bias + $stdBias }] + set dstDelta [expr { $bias + $dstBias }] + if { $stdDelta <= 0 } { + set stdSignum + + set stdDelta [expr { - $stdDelta }] + set dispStdSignum - + } else { + set stdSignum - + set dispStdSignum + + } + set hh [::format %02d [expr { $stdDelta / 3600 }]] + set mm [::format %02d [expr { ($stdDelta / 60 ) % 60 }]] + set ss [::format %02d [expr { $stdDelta % 60 }]] + set tzname {} + append tzname < $dispStdSignum $hh $mm > $stdSignum $hh : $mm : $ss + if { $stdMonth >= 0 } { + if { $dstDelta <= 0 } { + set dstSignum + + set dstDelta [expr { - $dstDelta }] + set dispDstSignum - + } else { + set dstSignum - + set dispDstSignum + + } + set hh [::format %02d [expr { $dstDelta / 3600 }]] + set mm [::format %02d [expr { ($dstDelta / 60 ) % 60 }]] + set ss [::format %02d [expr { $dstDelta % 60 }]] + append tzname < $dispDstSignum $hh $mm > $dstSignum $hh : $mm : $ss + if { $dstYear == 0 } { + append tzname ,M $dstMonth . $dstDayOfMonth . $dstDayOfWeek + } else { + # I have not been able to find any locale on which + # Windows converts time zone on a fixed day of the year, + # hence don't know how to interpret the fields. + # If someone can inform me, I'd be glad to code it up. + # For right now, we bail out in such a case. + return :localtime + } + append tzname / [::format %02d $dstHour] \ + : [::format %02d $dstMinute] \ + : [::format %02d $dstSecond] + if { $stdYear == 0 } { + append tzname ,M $stdMonth . $stdDayOfMonth . $stdDayOfWeek + } else { + # I have not been able to find any locale on which + # Windows converts time zone on a fixed day of the year, + # hence don't know how to interpret the fields. + # If someone can inform me, I'd be glad to code it up. + # For right now, we bail out in such a case. + return :localtime + } + append tzname / [::format %02d $stdHour] \ + : [::format %02d $stdMinute] \ + : [::format %02d $stdSecond] + } + dict set WinZoneInfo $data $tzname + } + + return [dict get $WinZoneInfo $data] + +} + +#---------------------------------------------------------------------- +# +# LoadTimeZoneFile -- +# +# Load the data file that specifies the conversion between a +# given time zone and Greenwich. +# +# Parameters: +# fileName -- Name of the file to load +# +# Results: +# None. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadTimeZoneFile { fileName } { + variable DataDir + variable TZData + + if { [info exists TZData($fileName)] } { + return + } + + # Since an unsafe interp uses the [clock] command in the master, + # this code is security sensitive. Make sure that the path name + # cannot escape the given directory. + + if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } { + return -code error \ + -errorcode [list CLOCK badTimeZone $:fileName] \ + "time zone \":$fileName\" not valid" + } + if { [catch { + source -encoding utf-8 [file join $DataDir $fileName] + }] } { + return -code error \ + -errorcode [list CLOCK badTimeZone :$fileName] \ + "time zone \":$fileName\" not found" + } + return +} + +#---------------------------------------------------------------------- +# +# LoadZoneinfoFile -- +# +# Loads a binary time zone information file in Olson format. +# +# Parameters: +# fileName - Relative path name of the file to load. +# +# Results: +# Returns an empty result normally; returns an error if no +# Olson file was found or the file was malformed in some way. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadZoneinfoFile { fileName } { + + variable ZoneinfoPaths + + # Since an unsafe interp uses the [clock] command in the master, + # this code is security sensitive. Make sure that the path name + # cannot escape the given directory. + + if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } { + return -code error \ + -errorcode [list CLOCK badTimeZone $:fileName] \ + "time zone \":$fileName\" not valid" + } + foreach d $ZoneinfoPaths { + set fname [file join $d $fileName] + if { [file readable $fname] && [file isfile $fname] } { + break + } + unset fname + } + ReadZoneinfoFile $fileName $fname +} + +#---------------------------------------------------------------------- +# +# ReadZoneinfoFile -- +# +# Loads a binary time zone information file in Olson format. +# +# Parameters: +# fileName - Name of the time zone (relative path name of the +# file). +# fname - Absolute path name of the file. +# +# Results: +# Returns an empty result normally; returns an error if no +# Olson file was found or the file was malformed in some way. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + + +proc ::tcl::clock::ReadZoneinfoFile {fileName fname} { + variable MINWIDE + variable TZData + if { ![file exists $fname] } { + return -code error "$fileName not found" + } + + if { [file size $fname] > 262144 } { + return -code error "$fileName too big" + } + + # Suck in all the data from the file + + set f [open $fname r] + fconfigure $f -translation binary + set d [read $f] + close $f + + # The file begins with a magic number, sixteen reserved bytes, + # and then six 4-byte integers giving counts of fileds in the file. + + binary scan $d a4a1x15IIIIII \ + magic version nIsGMT nIsStd nLeap nTime nType nChar + set seek 44 + set ilen 4 + set iformat I + if { $magic != {TZif} } { + return -code error "$fileName not a time zone information file" + } + if { $nType > 255 } { + return -code error "$fileName contains too many time types" + } + # Accept only Posix-style zoneinfo. Sorry, 'leaps' bigots. + if { $nLeap != 0 } { + return -code error "$fileName contains leap seconds" + } + + # In a version 2 file, we use the second part of the file, which + # contains 64-bit transition times. + + if {$version eq "2"} { + set seek [expr {44 + + 5 * $nTime + + 6 * $nType + + 4 * $nLeap + + $nIsStd + + $nIsGMT + + $nChar + }] + binary scan $d @${seek}a4a1x15IIIIII \ + magic version nIsGMT nIsStd nLeap nTime nType nChar + if {$magic ne {TZif}} { + return -code error "seek address $seek miscomputed, magic = $magic" + } + set iformat W + set ilen 8 + incr seek 44 + } + + # Next come ${nTime} transition times, followed by ${nTime} time type + # codes. The type codes are unsigned 1-byte quantities. We insert an + # arbitrary start time in front of the transitions. + + binary scan $d @${seek}${iformat}${nTime}c${nTime} times tempCodes + incr seek [expr { ($ilen + 1) * $nTime }] + set times [linsert $times 0 $MINWIDE] + set codes {} + foreach c $tempCodes { + lappend codes [expr { $c & 0xff }] + } + set codes [linsert $codes 0 0] + + # Next come ${nType} time type descriptions, each of which has an + # offset (seconds east of GMT), a DST indicator, and an index into + # the abbreviation text. + + for { set i 0 } { $i < $nType } { incr i } { + binary scan $d @${seek}Icc gmtOff isDst abbrInd + lappend types [list $gmtOff $isDst $abbrInd] + incr seek 6 + } + + # Next come $nChar characters of time zone name abbreviations, + # which are null-terminated. + # We build them up into a dictionary indexed by character index, + # because that's what's in the indices above. + + binary scan $d @${seek}a${nChar} abbrs + incr seek ${nChar} + set abbrList [split $abbrs \0] + set i 0 + set abbrevs {} + foreach a $abbrList { + for {set j 0} {$j <= [string length $a]} {incr j} { + dict set abbrevs $i [string range $a $j end] + incr i + } + } + + # Package up a list of tuples, each of which contains transition time, + # seconds east of Greenwich, DST flag and time zone abbreviation. + + set r {} + set lastTime $MINWIDE + foreach t $times c $codes { + if { $t < $lastTime } { + return -code error "$fileName has times out of order" + } + set lastTime $t + lassign [lindex $types $c] gmtoff isDst abbrInd + set abbrev [dict get $abbrevs $abbrInd] + lappend r [list $t $gmtoff $isDst $abbrev] + } + + # In a version 2 file, there is also a POSIX-style time zone description + # at the very end of the file. To get to it, skip over + # nLeap leap second values (8 bytes each), + # nIsStd standard/DST indicators and nIsGMT UTC/local indicators. + + if {$version eq {2}} { + set seek [expr {$seek + 8 * $nLeap + $nIsStd + $nIsGMT + 1}] + set last [string first \n $d $seek] + set posix [string range $d $seek [expr {$last-1}]] + if {[llength $posix] > 0} { + set posixFields [ParsePosixTimeZone $posix] + foreach tuple [ProcessPosixTimeZone $posixFields] { + lassign $tuple t gmtoff isDst abbrev + if {$t > $lastTime} { + lappend r $tuple + } + } + } + } + + set TZData(:$fileName) $r + + return +} + +#---------------------------------------------------------------------- +# +# ParsePosixTimeZone -- +# +# Parses the TZ environment variable in Posix form +# +# Parameters: +# tz Time zone specifier to be interpreted +# +# Results: +# Returns a dictionary whose values contain the various pieces of +# the time zone specification. +# +# Side effects: +# None. +# +# Errors: +# Throws an error if the syntax of the time zone is incorrect. +# +# The following keys are present in the dictionary: +# stdName - Name of the time zone when Daylight Saving Time +# is not in effect. +# stdSignum - Sign (+, -, or empty) of the offset from Greenwich +# to the given (non-DST) time zone. + and the empty +# string denote zones west of Greenwich, - denotes east +# of Greenwich; this is contrary to the ISO convention +# but follows Posix. +# stdHours - Hours part of the offset from Greenwich to the given +# (non-DST) time zone. +# stdMinutes - Minutes part of the offset from Greenwich to the +# given (non-DST) time zone. Empty denotes zero. +# stdSeconds - Seconds part of the offset from Greenwich to the +# given (non-DST) time zone. Empty denotes zero. +# dstName - Name of the time zone when DST is in effect, or the +# empty string if the time zone does not observe Daylight +# Saving Time. +# dstSignum, dstHours, dstMinutes, dstSeconds - +# Fields corresponding to stdSignum, stdHours, stdMinutes, +# stdSeconds for the Daylight Saving Time version of the +# time zone. If dstHours is empty, it is presumed to be 1. +# startDayOfYear - The ordinal number of the day of the year on which +# Daylight Saving Time begins. If this field is +# empty, then DST begins on a given month-week-day, +# as below. +# startJ - The letter J, or an empty string. If a J is present in +# this field, then startDayOfYear does not count February 29 +# even in leap years. +# startMonth - The number of the month in which Daylight Saving Time +# begins, supplied if startDayOfYear is empty. If both +# startDayOfYear and startMonth are empty, then US rules +# are presumed. +# startWeekOfMonth - The number of the week in the month in which +# Daylight Saving Time begins, in the range 1-5. +# 5 denotes the last week of the month even in a +# 4-week month. +# startDayOfWeek - The number of the day of the week (Sunday=0, +# Saturday=6) on which Daylight Saving Time begins. +# startHours - The hours part of the time of day at which Daylight +# Saving Time begins. An empty string is presumed to be 2. +# startMinutes - The minutes part of the time of day at which DST begins. +# An empty string is presumed zero. +# startSeconds - The seconds part of the time of day at which DST begins. +# An empty string is presumed zero. +# endDayOfYear, endJ, endMonth, endWeekOfMonth, endDayOfWeek, +# endHours, endMinutes, endSeconds - +# Specify the end of DST in the same way that the start* fields +# specify the beginning of DST. +# +# This procedure serves only to break the time specifier into fields. +# No attempt is made to canonicalize the fields or supply default values. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParsePosixTimeZone { tz } { + + if {[regexp -expanded -nocase -- { + ^ + # 1 - Standard time zone name + ([[:alpha:]]+ | <[-+[:alnum:]]+>) + # 2 - Standard time zone offset, signum + ([-+]?) + # 3 - Standard time zone offset, hours + ([[:digit:]]{1,2}) + (?: + # 4 - Standard time zone offset, minutes + : ([[:digit:]]{1,2}) + (?: + # 5 - Standard time zone offset, seconds + : ([[:digit:]]{1,2} ) + )? + )? + (?: + # 6 - DST time zone name + ([[:alpha:]]+ | <[-+[:alnum:]]+>) + (?: + (?: + # 7 - DST time zone offset, signum + ([-+]?) + # 8 - DST time zone offset, hours + ([[:digit:]]{1,2}) + (?: + # 9 - DST time zone offset, minutes + : ([[:digit:]]{1,2}) + (?: + # 10 - DST time zone offset, seconds + : ([[:digit:]]{1,2}) + )? + )? + )? + (?: + , + (?: + # 11 - Optional J in n and Jn form 12 - Day of year + ( J ? ) ( [[:digit:]]+ ) + | M + # 13 - Month number 14 - Week of month 15 - Day of week + ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + ) + (?: + # 16 - Start time of DST - hours + / ( [[:digit:]]{1,2} ) + (?: + # 17 - Start time of DST - minutes + : ( [[:digit:]]{1,2} ) + (?: + # 18 - Start time of DST - seconds + : ( [[:digit:]]{1,2} ) + )? + )? + )? + , + (?: + # 19 - Optional J in n and Jn form 20 - Day of year + ( J ? ) ( [[:digit:]]+ ) + | M + # 21 - Month number 22 - Week of month 23 - Day of week + ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + ) + (?: + # 24 - End time of DST - hours + / ( [[:digit:]]{1,2} ) + (?: + # 25 - End time of DST - minutes + : ( [[:digit:]]{1,2} ) + (?: + # 26 - End time of DST - seconds + : ( [[:digit:]]{1,2} ) + )? + )? + )? + )? + )? + )? + $ + } $tz -> x(stdName) x(stdSignum) x(stdHours) x(stdMinutes) x(stdSeconds) \ + x(dstName) x(dstSignum) x(dstHours) x(dstMinutes) x(dstSeconds) \ + x(startJ) x(startDayOfYear) \ + x(startMonth) x(startWeekOfMonth) x(startDayOfWeek) \ + x(startHours) x(startMinutes) x(startSeconds) \ + x(endJ) x(endDayOfYear) \ + x(endMonth) x(endWeekOfMonth) x(endDayOfWeek) \ + x(endHours) x(endMinutes) x(endSeconds)] } { + + # it's a good timezone + + return [array get x] + + } else { + + return -code error\ + -errorcode [list CLOCK badTimeZone $tz] \ + "unable to parse time zone specification \"$tz\"" + + } + +} + +#---------------------------------------------------------------------- +# +# ProcessPosixTimeZone -- +# +# Handle a Posix time zone after it's been broken out into +# fields. +# +# Parameters: +# z - Dictionary returned from 'ParsePosixTimeZone' +# +# Results: +# Returns time zone information for the 'TZData' array. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ProcessPosixTimeZone { z } { + + variable MINWIDE + variable TZData + + # Determine the standard time zone name and seconds east of Greenwich + + set stdName [dict get $z stdName] + if { [string index $stdName 0] eq {<} } { + set stdName [string range $stdName 1 end-1] + } + if { [dict get $z stdSignum] eq {-} } { + set stdSignum +1 + } else { + set stdSignum -1 + } + set stdHours [lindex [::scan [dict get $z stdHours] %d] 0] + if { [dict get $z stdMinutes] ne {} } { + set stdMinutes [lindex [::scan [dict get $z stdMinutes] %d] 0] + } else { + set stdMinutes 0 + } + if { [dict get $z stdSeconds] ne {} } { + set stdSeconds [lindex [::scan [dict get $z stdSeconds] %d] 0] + } else { + set stdSeconds 0 + } + set stdOffset [expr { ( ( $stdHours * 60 + $stdMinutes ) + * 60 + $stdSeconds ) + * $stdSignum }] + set data [list [list $MINWIDE $stdOffset 0 $stdName]] + + # If there's no daylight zone, we're done + + set dstName [dict get $z dstName] + if { $dstName eq {} } { + return $data + } + if { [string index $dstName 0] eq {<} } { + set dstName [string range $dstName 1 end-1] + } + + # Determine the daylight name + + if { [dict get $z dstSignum] eq {-} } { + set dstSignum +1 + } else { + set dstSignum -1 + } + if { [dict get $z dstHours] eq {} } { + set dstOffset [expr { 3600 + $stdOffset }] + } else { + set dstHours [lindex [::scan [dict get $z dstHours] %d] 0] + if { [dict get $z dstMinutes] ne {} } { + set dstMinutes [lindex [::scan [dict get $z dstMinutes] %d] 0] + } else { + set dstMinutes 0 + } + if { [dict get $z dstSeconds] ne {} } { + set dstSeconds [lindex [::scan [dict get $z dstSeconds] %d] 0] + } else { + set dstSeconds 0 + } + set dstOffset [expr { ( ( $dstHours * 60 + $dstMinutes ) + * 60 + $dstSeconds ) + * $dstSignum }] + } + + # Fill in defaults for European or US DST rules + # US start time is the second Sunday in March + # EU start time is the last Sunday in March + # US end time is the first Sunday in November. + # EU end time is the last Sunday in October + + if { [dict get $z startDayOfYear] eq {} + && [dict get $z startMonth] eq {} } { + if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} { + # EU + dict set z startWeekOfMonth 5 + if {$stdHours>2} { + dict set z startHours 2 + } else { + dict set z startHours [expr {$stdHours+1}] + } + } else { + # US + dict set z startWeekOfMonth 2 + dict set z startHours 2 + } + dict set z startMonth 3 + dict set z startDayOfWeek 0 + dict set z startMinutes 0 + dict set z startSeconds 0 + } + if { [dict get $z endDayOfYear] eq {} + && [dict get $z endMonth] eq {} } { + if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} { + # EU + dict set z endMonth 10 + dict set z endWeekOfMonth 5 + if {$stdHours>2} { + dict set z endHours 3 + } else { + dict set z endHours [expr {$stdHours+2}] + } + } else { + # US + dict set z endMonth 11 + dict set z endWeekOfMonth 1 + dict set z endHours 2 + } + dict set z endDayOfWeek 0 + dict set z endMinutes 0 + dict set z endSeconds 0 + } + + # Put DST in effect in all years from 1916 to 2099. + + for { set y 1916 } { $y < 2100 } { incr y } { + set startTime [DeterminePosixDSTTime $z start $y] + incr startTime [expr { - wide($stdOffset) }] + set endTime [DeterminePosixDSTTime $z end $y] + incr endTime [expr { - wide($dstOffset) }] + if { $startTime < $endTime } { + lappend data \ + [list $startTime $dstOffset 1 $dstName] \ + [list $endTime $stdOffset 0 $stdName] + } else { + lappend data \ + [list $endTime $stdOffset 0 $stdName] \ + [list $startTime $dstOffset 1 $dstName] + } + } + + return $data + +} + +#---------------------------------------------------------------------- +# +# DeterminePosixDSTTime -- +# +# Determines the time that Daylight Saving Time starts or ends +# from a Posix time zone specification. +# +# Parameters: +# z - Time zone data returned from ParsePosixTimeZone. +# Missing fields are expected to be filled in with +# default values. +# bound - The word 'start' or 'end' +# y - The year for which the transition time is to be determined. +# +# Results: +# Returns the transition time as a count of seconds from +# the epoch. The time is relative to the wall clock, not UTC. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::DeterminePosixDSTTime { z bound y } { + + variable FEB_28 + + # Determine the start or end day of DST + + set date [dict create era CE year $y] + set doy [dict get $z ${bound}DayOfYear] + if { $doy ne {} } { + + # Time was specified as a day of the year + + if { [dict get $z ${bound}J] ne {} + && [IsGregorianLeapYear $y] + && ( $doy > $FEB_28 ) } { + incr doy + } + dict set date dayOfYear $doy + set date [GetJulianDayFromEraYearDay $date[set date {}] 2361222] + } else { + + # Time was specified as a day of the week within a month + + dict set date month [dict get $z ${bound}Month] + dict set date dayOfWeek [dict get $z ${bound}DayOfWeek] + set dowim [dict get $z ${bound}WeekOfMonth] + if { $dowim >= 5 } { + set dowim -1 + } + dict set date dayOfWeekInMonth $dowim + set date [GetJulianDayFromEraYearMonthWeekDay $date[set date {}] 2361222] + + } + + set jd [dict get $date julianDay] + set seconds [expr { wide($jd) * wide(86400) + - wide(210866803200) }] + + set h [dict get $z ${bound}Hours] + if { $h eq {} } { + set h 2 + } else { + set h [lindex [::scan $h %d] 0] + } + set m [dict get $z ${bound}Minutes] + if { $m eq {} } { + set m 0 + } else { + set m [lindex [::scan $m %d] 0] + } + set s [dict get $z ${bound}Seconds] + if { $s eq {} } { + set s 0 + } else { + set s [lindex [::scan $s %d] 0] + } + set tod [expr { ( $h * 60 + $m ) * 60 + $s }] + return [expr { $seconds + $tod }] + +} + +#---------------------------------------------------------------------- +# +# GetLocaleEra -- +# +# Given local time expressed in seconds from the Posix epoch, +# determine localized era and year within the era. +# +# Parameters: +# date - Dictionary that must contain the keys, 'localSeconds', +# whose value is expressed as the appropriate local time; +# and 'year', whose value is the Gregorian year. +# etable - Value of the LOCALE_ERAS key in the message catalogue +# for the target locale. +# +# Results: +# Returns the dictionary, augmented with the keys, 'localeEra' +# and 'localeYear'. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetLocaleEra { date etable } { + + set index [BSearch $etable [dict get $date localSeconds]] + if { $index < 0} { + dict set date localeEra \ + [::format %02d [expr { [dict get $date year] / 100 }]] + dict set date localeYear \ + [expr { [dict get $date year] % 100 }] + } else { + dict set date localeEra [lindex $etable $index 1] + dict set date localeYear [expr { [dict get $date year] + - [lindex $etable $index 2] }] + } + return $date + +} + +#---------------------------------------------------------------------- +# +# GetJulianDayFromEraYearDay -- +# +# Given a year, month and day on the Gregorian calendar, determines +# the Julian Day Number beginning at noon on that date. +# +# Parameters: +# date -- A dictionary in which the 'era', 'year', and +# 'dayOfYear' slots are populated. The calendar in use +# is determined by the date itself relative to: +# changeover -- Julian day on which the Gregorian calendar was +# adopted in the current locale. +# +# Results: +# Returns the given dictionary augmented with a 'julianDay' key +# whose value is the desired Julian Day Number, and a 'gregorian' +# key that specifies whether the calendar is Gregorian (1) or +# Julian (0). +# +# Side effects: +# None. +# +# Bugs: +# This code needs to be moved to the C layer. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} { + + # Get absolute year number from the civil year + + switch -exact -- [dict get $date era] { + BCE { + set year [expr { 1 - [dict get $date year] }] + } + CE { + set year [dict get $date year] + } + } + set ym1 [expr { $year - 1 }] + + # Try the Gregorian calendar first. + + dict set date gregorian 1 + set jd [expr { 1721425 + + [dict get $date dayOfYear] + + ( 365 * $ym1 ) + + ( $ym1 / 4 ) + - ( $ym1 / 100 ) + + ( $ym1 / 400 ) }] + + # If the date is before the Gregorian change, use the Julian calendar. + + if { $jd < $changeover } { + dict set date gregorian 0 + set jd [expr { 1721423 + + [dict get $date dayOfYear] + + ( 365 * $ym1 ) + + ( $ym1 / 4 ) }] + } + + dict set date julianDay $jd + return $date +} + +#---------------------------------------------------------------------- +# +# GetJulianDayFromEraYearMonthWeekDay -- +# +# Determines the Julian Day number corresponding to the nth +# given day-of-the-week in a given month. +# +# Parameters: +# date - Dictionary containing the keys, 'era', 'year', 'month' +# 'weekOfMonth', 'dayOfWeek', and 'dayOfWeekInMonth'. +# changeover - Julian Day of adoption of the Gregorian calendar +# +# Results: +# Returns the given dictionary, augmented with a 'julianDay' key. +# +# Side effects: +# None. +# +# Bugs: +# This code needs to be moved to the C layer. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetJulianDayFromEraYearMonthWeekDay {date changeover} { + + # Come up with a reference day; either the zeroeth day of the + # given month (dayOfWeekInMonth >= 0) or the seventh day of the + # following month (dayOfWeekInMonth < 0) + + set date2 $date + set week [dict get $date dayOfWeekInMonth] + if { $week >= 0 } { + dict set date2 dayOfMonth 0 + } else { + dict incr date2 month + dict set date2 dayOfMonth 7 + } + set date2 [GetJulianDayFromEraYearMonthDay $date2[set date2 {}] \ + $changeover] + set wd0 [WeekdayOnOrBefore [dict get $date dayOfWeek] \ + [dict get $date2 julianDay]] + dict set date julianDay [expr { $wd0 + 7 * $week }] + return $date + +} + +#---------------------------------------------------------------------- +# +# IsGregorianLeapYear -- +# +# Determines whether a given date represents a leap year in the +# Gregorian calendar. +# +# Parameters: +# date -- The date to test. The fields, 'era', 'year' and 'gregorian' +# must be set. +# +# Results: +# Returns 1 if the year is a leap year, 0 otherwise. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::IsGregorianLeapYear { date } { + + switch -exact -- [dict get $date era] { + BCE { + set year [expr { 1 - [dict get $date year]}] + } + CE { + set year [dict get $date year] + } + } + if { $year % 4 != 0 } { + return 0 + } elseif { ![dict get $date gregorian] } { + return 1 + } elseif { $year % 400 == 0 } { + return 1 + } elseif { $year % 100 == 0 } { + return 0 + } else { + return 1 + } + +} + +#---------------------------------------------------------------------- +# +# WeekdayOnOrBefore -- +# +# Determine the nearest day of week (given by the 'weekday' +# parameter, Sunday==0) on or before a given Julian Day. +# +# Parameters: +# weekday -- Day of the week +# j -- Julian Day number +# +# Results: +# Returns the Julian Day Number of the desired date. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::WeekdayOnOrBefore { weekday j } { + + set k [expr { ( $weekday + 6 ) % 7 }] + return [expr { $j - ( $j - $k ) % 7 }] + +} + +#---------------------------------------------------------------------- +# +# BSearch -- +# +# Service procedure that does binary search in several places +# inside the 'clock' command. +# +# Parameters: +# list - List of lists, sorted in ascending order by the +# first elements +# key - Value to search for +# +# Results: +# Returns the index of the greatest element in $list that is less +# than or equal to $key. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::BSearch { list key } { + + if {[llength $list] == 0} { + return -1 + } + if { $key < [lindex $list 0 0] } { + return -1 + } + + set l 0 + set u [expr { [llength $list] - 1 }] + + while { $l < $u } { + + # At this point, we know that + # $k >= [lindex $list $l 0] + # Either $u == [llength $list] or else $k < [lindex $list $u+1 0] + # We find the midpoint of the interval {l,u} rounded UP, compare + # against it, and set l or u to maintain the invariant. Note + # that the interval shrinks at each step, guaranteeing convergence. + + set m [expr { ( $l + $u + 1 ) / 2 }] + if { $key >= [lindex $list $m 0] } { + set l $m + } else { + set u [expr { $m - 1 }] + } + } + + return $l +} + +#---------------------------------------------------------------------- +# +# clock add -- +# +# Adds an offset to a given time. +# +# Syntax: +# clock add clockval ?count unit?... ?-option value? +# +# Parameters: +# clockval -- Starting time value +# count -- Amount of a unit of time to add +# unit -- Unit of time to add, must be one of: +# years year months month weeks week +# days day hours hour minutes minute +# seconds second +# +# Options: +# -gmt BOOLEAN +# (Deprecated) Flag synonymous with '-timezone :GMT' +# -timezone ZONE +# Name of the time zone in which calculations are to be done. +# -locale NAME +# Name of the locale in which calculations are to be done. +# Used to determine the Gregorian change date. +# +# Results: +# Returns the given time adjusted by the given offset(s) in +# order. +# +# Notes: +# It is possible that adding a number of months or years will adjust +# the day of the month as well. For instance, the time at +# one month after 31 January is either 28 or 29 February, because +# February has fewer than 31 days. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::add { clockval args } { + + if { [llength $args] % 2 != 0 } { + set cmdName "clock add" + return -code error \ + -errorcode [list CLOCK wrongNumArgs] \ + "wrong \# args: should be\ + \"$cmdName clockval ?number units?...\ + ?-gmt boolean? ?-locale LOCALE? ?-timezone ZONE?\"" + } + if { [catch { expr {wide($clockval)} } result] } { + return -code error $result + } + + set offsets {} + set gmt 0 + set locale c + set timezone [GetSystemTimeZone] + + foreach { a b } $args { + + if { [string is integer -strict $a] } { + + lappend offsets $a $b + + } else { + + switch -exact -- $a { + + -g - -gm - -gmt { + set gmt $b + } + -l - -lo - -loc - -loca - -local - -locale { + set locale [string tolower $b] + } + -t - -ti - -tim - -time - -timez - -timezo - -timezon - + -timezone { + set timezone $b + } + default { + return -code error \ + -errorcode [list CLOCK badSwitch $a] \ + "bad switch \"$a\",\ + must be -gmt, -locale or -timezone" + } + } + } + } + + # Check options for validity + + if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } { + return -code error \ + -errorcode [list CLOCK gmtWithTimezone] \ + "cannot use -gmt and -timezone in same call" + } + if { [catch { expr { wide($clockval) } } result] } { + return -code error \ + "expected integer but got \"$clockval\"" + } + if { ![string is boolean $gmt] } { + return -code error \ + "expected boolean value but got \"$gmt\"" + } else { + if { $gmt } { + set timezone :GMT + } + } + + EnterLocale $locale oldLocale + + set changeover [mc GREGORIAN_CHANGE_DATE] + + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + + set status [catch { + + foreach { quantity unit } $offsets { + + switch -exact -- $unit { + + years - year { + set clockval \ + [AddMonths [expr { 12 * $quantity }] \ + $clockval $timezone $changeover] + } + months - month { + set clockval [AddMonths $quantity $clockval $timezone \ + $changeover] + } + + weeks - week { + set clockval [AddDays [expr { 7 * $quantity }] \ + $clockval $timezone $changeover] + } + days - day { + set clockval [AddDays $quantity $clockval $timezone \ + $changeover] + } + + hours - hour { + set clockval [expr { 3600 * $quantity + $clockval }] + } + minutes - minute { + set clockval [expr { 60 * $quantity + $clockval }] + } + seconds - second { + set clockval [expr { $quantity + $clockval }] + } + + default { + error "unknown unit \"$unit\", must be \ + years, months, weeks, days, hours, minutes or seconds" \ + "unknown unit \"$unit\", must be \ + years, months, weeks, days, hours, minutes or seconds" \ + [list CLOCK badUnit $unit] + } + } + } + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } { + dict unset opts -errorinfo + } + return -options $opts $result + } else { + return $clockval + } + +} + +#---------------------------------------------------------------------- +# +# AddMonths -- +# +# Add a given number of months to a given clock value in a given +# time zone. +# +# Parameters: +# months - Number of months to add (may be negative) +# clockval - Seconds since the epoch before the operation +# timezone - Time zone in which the operation is to be performed +# +# Results: +# Returns the new clock value as a number of seconds since +# the epoch. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AddMonths { months clockval timezone changeover } { + + variable DaysInRomanMonthInCommonYear + variable DaysInRomanMonthInLeapYear + variable TZData + + # Convert the time to year, month, day, and fraction of day. + + set date [GetDateFields $clockval $TZData($timezone) $changeover] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + dict set date tzName $timezone + + # Add the requisite number of months + + set m [dict get $date month] + incr m $months + incr m -1 + set delta [expr { $m / 12 }] + set mm [expr { $m % 12 }] + dict set date month [expr { $mm + 1 }] + dict incr date year $delta + + # If the date doesn't exist in the current month, repair it + + if { [IsGregorianLeapYear $date] } { + set hath [lindex $DaysInRomanMonthInLeapYear $mm] + } else { + set hath [lindex $DaysInRomanMonthInCommonYear $mm] + } + if { [dict get $date dayOfMonth] > $hath } { + dict set date dayOfMonth $hath + } + + # Reconvert to a number of seconds + + set date [GetJulianDayFromEraYearMonthDay \ + $date[set date {}]\ + $changeover] + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \ + $changeover] + + return [dict get $date seconds] + +} + +#---------------------------------------------------------------------- +# +# AddDays -- +# +# Add a given number of days to a given clock value in a given +# time zone. +# +# Parameters: +# days - Number of days to add (may be negative) +# clockval - Seconds since the epoch before the operation +# timezone - Time zone in which the operation is to be performed +# changeover - Julian Day on which the Gregorian calendar was adopted +# in the target locale. +# +# Results: +# Returns the new clock value as a number of seconds since +# the epoch. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AddDays { days clockval timezone changeover } { + + variable TZData + + # Convert the time to Julian Day + + set date [GetDateFields $clockval $TZData($timezone) $changeover] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + dict set date tzName $timezone + + # Add the requisite number of days + + dict incr date julianDay $days + + # Reconvert to a number of seconds + + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \ + $changeover] + + return [dict get $date seconds] + +} + +#---------------------------------------------------------------------- +# +# mc -- +# +# Wrapper around ::msgcat::mc that caches the result according +# to the locale. +# +# Parameters: +# Accepts the name of the message to retrieve. +# +# Results: +# Returns the message text. +# +# Side effects: +# Caches the message text. +# +# Notes: +# Only the single-argument version of [mc] is supported. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::mc { name } { + variable McLoaded + set Locale [mclocale] + if { [dict exists $McLoaded $Locale $name] } { + return [dict get $McLoaded $Locale $name] + } else { + set val [::msgcat::mc $name] + dict set McLoaded $Locale $name $val + return $val + } +} + +#---------------------------------------------------------------------- +# +# ClearCaches -- +# +# Clears all caches to reclaim the memory used in [clock] +# +# Parameters: +# None. +# +# Results: +# None. +# +# Side effects: +# Caches are cleared. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ClearCaches {} { + + variable FormatProc + variable LocaleNumeralCache + variable McLoaded + variable CachedSystemTimeZone + variable TimeZoneBad + + foreach p [info procs [namespace current]::scanproc'*] { + rename $p {} + } + foreach p [info procs [namespace current]::formatproc'*] { + rename $p {} + } + + catch {unset FormatProc} + set LocaleNumeralCache {} + set McLoaded {} + catch {unset CachedSystemTimeZone} + set TimeZoneBad {} + InitTZData + +} diff --git a/inkstitch/bin/tcl/encoding/ascii.enc b/inkstitch/bin/tcl/encoding/ascii.enc new file mode 100644 index 0000000..e0320b8 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/ascii.enc @@ -0,0 +1,20 @@ +# Encoding file: ascii, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/big5.enc b/inkstitch/bin/tcl/encoding/big5.enc new file mode 100644 index 0000000..26179f4 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/big5.enc @@ -0,0 +1,1516 @@ +# Encoding file: big5, multi-byte +M +003F 0 89 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3000FF0C30013002FF0E2022FF1BFF1AFF1FFF01FE3020262025FE50FF64FE52 +00B7FE54FE55FE56FE57FF5C2013FE312014FE33FFFDFE34FE4FFF08FF09FE35 +FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300BFE3D +FE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FE5BFE5CFE5DFE5E20182019201C201D301D301E20352032FF03FF06FF0A +203B00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC +32A32105203EFFFDFF3FFFFDFE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61FF0B +FF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62FE63 +FE64FE65FE66223C2229222A22A52220221F22BF33D233D1222B222E22352234 +26402642264126092191219321902192219621972199219822252223FFFD0000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FFFDFF0FFF3CFF0400A5301200A200A3FF05FF2021032109FE69FE6AFE6B33D5 +339C339D339E33CE33A1338E338F33C400B05159515B515E515D5161516355E7 +74E97CCE25812582258325842585258625872588258F258E258D258C258B258A +2589253C2534252C2524251C2594250025022595250C251025142518256D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000256E2570256F2550255E256A256125E225E325E525E4257125722573FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF192160216121622163216421652166 +216721682169302130223023302430253026302730283029FFFD5344FFFDFF21 +FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30FF31 +FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45FF46FF47 +FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55FF560000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF57FF58FF59FF5A039103920393039403950396039703980399039A039B039C +039D039E039F03A003A103A303A403A503A603A703A803A903B103B203B303B4 +03B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C403C5 +03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003110311131123113311431153116311731183119311A311B311C311D311E +311F312031213122312331243125312631273128312902D902C902CA02C702CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201529B +53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E4E8E +4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B535BF8 +5C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC1 +4EC04EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F6 +52065207520852FB52FE52FF53165339534853475345535E538453CB53CA53CD +58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F155FC3 +62086236624B624E652F6587659765A465B965E566F0670867286B206B626B79 +6BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E190000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 +4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553065317 +531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE53E953E8 +53FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA59160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 +5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 +6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 +7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A747ACB +4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F154F0D4F10 +4F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B514951475146514851680000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5171518D51B0521752115212520E521652A3530853215320537053715409540F +540C540A54105401540B54045411540D54085403540E5406541256E056DE56DD +573357305728572D572C572F57295919591A59375938598459785983597D5979 +598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E765E740000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E865EC +65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C596C5F +6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F367F8A +7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C821B +821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F474F57 +4F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F464F630000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B651B75225 +52245229522A522852AB52A952AA52AC532353735375541D542D541E543E5426 +544E542754465443543354485442541B5429544A5439543B5438542E54355436 +5420543C54405431542B541F542C56EA56F056E456EB574A57515740574D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 +598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C415C3F +5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F645F625F77 +5F795FD85FCC5FD75FCD5FF15FEB5FF85FEA6212621162846297629662806276 +6289626D628A627C627E627962736292626F6298626E62956293629162866539 +653B653865F166F4675F674E674F67506751675C6756675E6749674667600000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C906C70 +6C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C986C827076 +707C707D707872627261726072C472C27396752C752B75377538768276EF77E3 +79C179C079BF7A767CFB7F5580968093809D8098809B809A80B2826F82920000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA8F9B +8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632962E +9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F734F7F +4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F914F7A5154 +51525155516951775176517851BD51FD523B52385237523A5230522E52365241 +52BE52BB5352535453535351536653775378537953D653D453D7547354750000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5496547854955480547B5477548454925486547C549054715476548C549A5462 +5468548B547D548E56FA57835777576A5769576157665764577C591C59495947 +59485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D359CA59AF +59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A5C485C450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B5E115E78 +5E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD5FE05FFD +5FF55FFF600F6014602F60356016602A6015602160276029602B601B62166215 +623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D362D462CB +62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D762C662AC +62CE653E65A765BC65FA66146613660C66066602660E6600660F6615660A0000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6607670D670B676D678B67956771679C677367776787679D6797676F6770677F +6789677E67906775679A6793677C676A67726B236B666B676B7F6C136C1B6CE3 +6CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD36CB86CC46CB9 +6CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC6CD66CE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007095708E7092708A7099722C722D723872487267726972C072CE72D972D7 +72D073A973A8739F73AB73A5753D759D7599759A768476C276F276F477E577FD +793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B800580BA80A580A2 +80B180A180AB80A980B480AA80AF81E581FE820D82B3829D829982AD82BD829F +82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D88688ECB8FCE +8FD48FD190B590B890B190B691C791D195779580961C9640963F963B96440000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD14FCF4FDD +4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE4FB751575192 +519151A0524E5243524A524D524C524B524752C752C952C352C1530D5357537B +539A53DB54AC54C054A854CE54C954B854A654B354C754C254BD54AA54C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A057A357A2 +57CE57AE579359555951594F594E595059DC59D859FF59E359E85A0359E559EA +59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D5C4B5CD9 +5CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F885F855F8A5F8B +5F875F8C5F896012601D60206025600E6028604D60706068606260466043606C +606B606A6064624162DC6316630962FC62ED630162EE62FD630762F162F70000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62EF62EC62FE62F463116302653F654565AB65BD65E26625662D66206627662F +661F66286631662466F767FF67D367F167D467D067EC67B667AF67F567E967EF +67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD67D26B6A6B83 +6B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C6D316D1E6D170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D356D0E6D2B70AB +70BA70B370AC70AF70AD70B870AE70A472307272726F727472E972E072E173B7 +73CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB75A475A575A2 +75A3767876867687768876C876C676C376C5770176F976F87709770B76FE76FC +770777DC78027814780C780D794679497948794779B979BA79D179D279CB7A7F +7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F387F8E7FBF80040000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8010800D8011803680D680E580DA80C380C480CC80E180DB80CE80DE80E480DD +81F4822282E78303830582E382DB82E6830482E58302830982D282D782F18301 +82DC82D482D182DE82D382DF82EF830686508679867B867A884D886B898189D4 +8A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE28FEA8FE50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B964C +964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB3500C500D +50234FEF502650254FF8502950165006503C501F501A501250114FFA50005014 +50284FF15021500B501950184FF34FEE502D502A4FFE502B5009517C51A451A5 +51A251CD51CC51C651CB5256525C5254525B525D532A537F539F539D53DF54E8 +55105501553754FC54E554F2550654FA551454E954ED54E1550954EE54EA0000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54E65527550754FD550F5703570457C257D457CB57C35809590F59575958595A +5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A095B6B5C585BB0 +5BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED5CFD5CFB5CEA5CE8 +5CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F925F915F9060590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006063606560506055606D6069606F6084609F609A608D6094608C60856096 +624762F3630862FF634E633E632F635563426346634F6349633A6350633D632A +632B6328634D634C65486549659965C165C566426649664F66436652664C6645 +664166F867146715671768216838684868466853683968426854682968B36817 +684C6851683D67F468506840683C6843682A68456813681868416B8A6B896BB7 +6C236C276C286C266C246CF06D6A6D956D886D876D666D786D776D596D930000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA70D870E470D9 +70C870CF7239727972FC72F972FD72F872F7738673ED740973EE73E073EA73DE +7554755D755C755A755975BE75C575C775B275B375BD75BC75B975C275B8768B +76B076CA76CD76CE7729771F7720772877E9783078277838781D783478370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007825782D7820781F7832795579507960795F7956795E795D7957795A79E4 +79E379E779DF79E679E979D87A847A887AD97B067B117C897D217D177D0B7D0A +7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F947FC57FC18006 +8018801580198017803D803F80F1810280F0810580ED80F4810680F880F38108 +80FD810A80FC80EF81ED81EC82008210822A822B8228822C82BB832B83528354 +834A83388350834983358334834F833283398336831783408331832883430000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8654868A86AA869386A486A9868C86A3869C8870887788818882887D88798A18 +8A108A0E8A0C8A158A0A8A178A138A168A0F8A118C488C7A8C798CA18CA28D77 +8EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF490038FFD90058FF89095 +90E190DD90E29152914D914C91D891DD91D791DC91D995839662966396610000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965B965D96649658965E96BB98E299AC9AA89AD89B259B329B3C4E7E507A +507D505C50475043504C505A504950655076504E5055507550745077504F500F +506F506D515C519551F0526A526F52D252D952D852D55310530F5319533F5340 +533E53C366FC5546556A55665544555E55615543554A55315556554F5555552F +55645538552E555C552C55635533554155575708570B570957DF5805580A5806 +57E057E457FA5802583557F757F9592059625A365A415A495A665A6A5A400000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC65C095C085C075C60 +5C5C5C5D5D075D065D0E5D1B5D165D225D115D295D145D195D245D275D175DE2 +5E385E365E335E375EB75EB85EB65EB55EBE5F355F375F575F6C5F695F6B5F97 +5F995F9E5F985FA15FA05F9C607F60A3608960A060A860CB60B460E660BD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060C560BB60B560DC60BC60D860D560C660DF60B860DA60C7621A621B6248 +63A063A76372639663A263A563776367639863AA637163A963896383639B636B +63A863846388639963A163AC6392638F6380637B63696368637A655D65566551 +65596557555F654F655865556554659C659B65AC65CF65CB65CC65CE665D665A +666466686666665E66F952D7671B688168AF68A2689368B5687F687668B168A7 +689768B0688368C468AD688668856894689D68A8689F68A168826B326BBA0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE46DFB6DFA6E056DC76DCB +6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A6DB56DDA6DEB6DD86DEA +6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109710A70FD70EF723D727D +7281731C731B73167313731973877405740A7403740673FE740D74E074F60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074F7751C75227565756675627570758F75D475D575B575CA75CD768E76D4 +76D276DB7737773E773C77367738773A786B7843784E79657968796D79FB7A92 +7A957B207B287B1B7B2C7B267B197B1E7B2E7C927C977C957D467D437D717D2E +7D397D3C7D407D307D337D447D2F7D427D327D317F3D7F9E7F9A7FCC7FCE7FD2 +801C804A8046812F81168123812B81298130812482028235823782368239838E +839E8398837883A2839683BD83AB8392838A8393838983A08377837B837C0000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +838683A786555F6A86C786C086B686C486B586C686CB86B186AF86C98853889E +888888AB88928896888D888B8993898F8A2A8A1D8A238A258A318A2D8A1F8A1B +8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D678D668DBE8DBA8EDB8EDF9019 +900D901A90179023901F901D90109015901E9020900F90229016901B90140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090E890ED90FD915791CE91F591E691E391E791ED91E99589966A96759673 +96789670967496769677966C96C096EA96E97AE07ADF980298039B5A9CE59E75 +9E7F9EA59EBB50A2508D508550995091508050965098509A670051F152725274 +5275526952DE52DD52DB535A53A5557B558055A7557C558A559D55985582559C +55AA55945587558B558355B355AE559F553E55B2559A55BB55AC55B1557E5589 +55AB5599570D582F582A58345824583058315821581D582058F958FA59600000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD35BD05C0A5C0B5C315D4C +5D505D345D475DFD5E455E3D5E405E435E7E5ECA5EC15EC25EC45F3C5F6D5FA9 +5FAA5FA860D160E160B260B660E0611C612360FA611560F060FB60F4616860F1 +610E60F6610961006112621F624963A3638C63CF63C063E963C963C663CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063D263E363D063E163D663ED63EE637663F463EA63DB645263DA63F9655E +6566656265636591659065AF666E667066746676666F6691667A667E667766FE +66FF671F671D68FA68D568E068D868D7690568DF68F568EE68E768F968D268F2 +68E368CB68CD690D6912690E68C968DA696E68FB6B3E6B3A6B3D6B986B966BBC +6BEF6C2E6C2F6C2C6E2F6E386E546E216E326E676E4A6E206E256E236E1B6E5B +6E586E246E566E6E6E2D6E266E6F6E346E4D6E3A6E2C6E436E1D6E3E6ECB0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E896E196E4E6E636E446E726E696E5F7119711A7126713071217136716E711C +724C728472807336732573347329743A742A743374227425743574367434742F +741B7426742875257526756B756A75E275DB75E375D975D875DE75E0767B767C +7696769376B476DC774F77ED785D786C786F7A0D7A087A0B7A057A007A980000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A977A967AE57AE37B497B567B467B507B527B547B4D7B4B7B4F7B517C9F +7CA57D5E7D507D687D557D2B7D6E7D727D617D667D627D707D7355847FD47FD5 +800B8052808581558154814B8151814E81398146813E814C815381748212821C +83E9840383F8840D83E083C5840B83C183EF83F183F48457840A83F0840C83CC +83FD83F283CA8438840E840483DC840783D483DF865B86DF86D986ED86D486DB +86E486D086DE885788C188C288B1898389968A3B8A608A558A5E8A3C8A410000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A548A5B8A508A468A348A3A8A368A568C618C828CAF8CBC8CB38CBD8CC18CBB +8CC08CB48CB78CB68CBF8CB88D8A8D858D818DCE8DDD8DCB8DDA8DD18DCC8DDB +8DC68EFB8EF88EFC8F9C902E90359031903890329036910290F5910990FE9163 +916591CF9214921592239209921E920D9210920792119594958F958B95910000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000095939592958E968A968E968B967D96859686968D9672968496C196C596C4 +96C696C796EF96F297CC98059806980898E798EA98EF98E998F298ED99AE99AD +9EC39ECD9ED14E8250AD50B550B250B350C550BE50AC50B750BB50AF50C7527F +5277527D52DF52E652E452E252E3532F55DF55E855D355E655CE55DC55C755D1 +55E355E455EF55DA55E155C555C655E555C957125713585E585158585857585A +5854586B584C586D584A58625852584B59675AC15AC95ACC5ABE5ABD5ABC0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB35AC25AB25D695D6F5E4C5E795EC95EC85F125F595FAC5FAE611A610F6148 +611F60F3611B60F961016108614E614C6144614D613E61346127610D61066137 +622162226413643E641E642A642D643D642C640F641C6414640D643664166417 +6406656C659F65B06697668966876688669666846698668D67036994696D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000695A697769606954697569306982694A6968696B695E695369796986695D +6963695B6B476B726BC06BBF6BD36BFD6EA26EAF6ED36EB66EC26E906E9D6EC7 +6EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC46ED46EAA6EA76EB4714E7159 +7169716471497167715C716C7166714C7165715E714671687156723A72527337 +7345733F733E746F745A7455745F745E7441743F7459745B745C757675787600 +75F0760175F275F175FA75FF75F475F376DE76DF775B776B7766775E77630000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7779776A776C775C77657768776277EE788E78B078977898788C7889787C7891 +7893787F797A797F7981842C79BD7A1C7A1A7A207A147A1F7A1E7A9F7AA07B77 +7BC07B607B6E7B677CB17CB37CB57D937D797D917D817D8F7D5B7F6E7F697F6A +7F727FA97FA87FA480568058808680848171817081788165816E8173816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008179817A81668205824784828477843D843184758466846B8449846C845B +843C8435846184638469846D8446865E865C865F86F9871387088707870086FE +86FB870287038706870A885988DF88D488D988DC88D888DD88E188CA88D588D2 +899C89E38A6B8A728A738A668A698A708A878A7C8A638AA08A718A858A6D8A62 +8A6E8A6C8A798A7B8A3E8A688C628C8A8C898CCA8CC78CC88CC48CB28CC38CC2 +8CC58DE18DDF8DE88DEF8DF38DFA8DEA8DE48DE68EB28F038F098EFE8F0A0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F9F8FB2904B904A905390429054903C905590509047904F904E904D9051903E +904191129117916C916A916991C9923792579238923D9240923E925B924B9264 +925192349249924D92459239923F925A959896989694969596CD96CB96C996CA +96F796FB96F996F6975697749776981098119813980A9812980C98FC98F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098FD98FE99B399B199B49AE19CE99E829F0E9F139F2050E750EE50E550D6 +50ED50DA50D550CF50D150F150CE50E9516251F352835282533153AD55FE5600 +561B561755FD561456065609560D560E55F75616561F5608561055F657185716 +5875587E58835893588A58795885587D58FD592559225924596A59695AE15AE6 +5AE95AD75AD65AD85AE35B755BDE5BE75BE15BE55BE65BE85BE25BE45BDF5C0D +5C625D845D875E5B5E635E555E575E545ED35ED65F0A5F465F705FB961470000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +613F614B617761626163615F615A61586175622A64876458645464A46478645F +647A645164676434646D647B657265A165D765D666A266A8669D699C69A86995 +69C169AE69D369CB699B69B769BB69AB69B469D069CD69AD69CC69A669C369A3 +6B496B4C6C336F336F146EFE6F136EF46F296F3E6F206F2C6F0F6F026F220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006EFF6EEF6F066F316F386F326F236F156F2B6F2F6F886F2A6EEC6F016EF2 +6ECC6EF771947199717D718A71847192723E729272967344735074647463746A +7470746D750475917627760D760B7609761376E176E37784777D777F776178C1 +789F78A778B378A978A3798E798F798D7A2E7A317AAA7AA97AED7AEF7BA17B95 +7B8B7B757B977B9D7B947B8F7BB87B877B847CB97CBD7CBE7DBB7DB07D9C7DBD +7DBE7DA07DCA7DB47DB27DB17DBA7DA27DBF7DB57DB87DAD7DD27DC77DAC0000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F707FE07FE17FDF805E805A808781508180818F8188818A817F818281E781FA +82078214821E824B84C984BF84C684C48499849E84B2849C84CB84B884C084D3 +849084BC84D184CA873F871C873B872287258734871887558737872988F38902 +88F488F988F888FD88E8891A88EF8AA68A8C8A9E8AA38A8D8AA18A938AA40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AAA8AA58AA88A988A918A9A8AA78C6A8C8D8C8C8CD38CD18CD28D6B8D99 +8D958DFC8F148F128F158F138FA390609058905C90639059905E9062905D905B +91199118911E917591789177917492789280928592989296927B9293929C92A8 +927C929195A195A895A995A395A595A49699969C969B96CC96D29700977C9785 +97F69817981898AF98B199039905990C990999C19AAF9AB09AE69B419B429CF4 +9CF69CF39EBC9F3B9F4A5104510050FB50F550F9510251085109510551DC0000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +528752885289528D528A52F053B2562E563B56395632563F563456295653564E +565756745636562F56305880589F589E58B3589C58AE58A958A6596D5B095AFB +5B0B5AF55B0C5B085BEE5BEC5BE95BEB5C645C655D9D5D945E625E5F5E615EE2 +5EDA5EDF5EDD5EE35EE05F485F715FB75FB561766167616E615D615561820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000617C6170616B617E61A7619061AB618E61AC619A61A4619461AE622E6469 +646F6479649E64B26488649064B064A56493649564A9649264AE64AD64AB649A +64AC649964A264B365756577657866AE66AB66B466B16A236A1F69E86A016A1E +6A1969FD6A216A136A0A69F36A026A0569ED6A116B506B4E6BA46BC56BC66F3F +6F7C6F846F516F666F546F866F6D6F5B6F786F6E6F8E6F7A6F706F646F976F58 +6ED56F6F6F606F5F719F71AC71B171A87256729B734E73577469748B74830000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747E7480757F76207629761F7624762676217622769A76BA76E4778E7787778C +7791778B78CB78C578BA78CA78BE78D578BC78D07A3F7A3C7A407A3D7A377A3B +7AAF7AAE7BAD7BB17BC47BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB +7DD87DEC7DDD7DE87DE37DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007FE98026819B819C819D81A0819A81988517853D851A84EE852C852D8513 +851185238521851484EC852584FF850687828774877687608766877887688759 +8757874C8753885B885D89108907891289138915890A8ABC8AD28AC78AC48A95 +8ACB8AF88AB28AC98AC28ABF8AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE0 +8CDE8CE68CE48CEC8CED8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D +8E228E0F8E298E1F8E218E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F259069906E9068906D90779130912D9127913191879189918B918392C592BB +92B792EA92AC92E492C192B392BC92D292C792F092B295AD95B1970497069707 +97099760978D978B978F9821982B981C98B3990A99139912991899DD99D099DF +99DB99D199D599D299D99AB79AEE9AEF9B279B459B449B779B6F9D069D090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D039EA99EBE9ECE58A89F5251125118511451105115518051AA51DD5291 +529352F35659566B5679566956645678566A566856655671566F566C56625676 +58C158BE58C758C5596E5B1D5B345B785BF05C0E5F4A61B2619161A9618A61CD +61B661BE61CA61C8623064C564C164CB64BB64BC64DA64C464C764C264CD64BF +64D264D464BE657466C666C966B966C466C766B86A3D6A386A3A6A596A6B6A58 +6A396A446A626A616A4B6A476A356A5F6A486B596B776C056FC26FB16FA10000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FC36FA46FC16FA76FB36FC06FB96FB66FA66FA06FB471BE71C971D071D271C8 +71D571B971CE71D971DC71C371C47368749C74A37498749F749E74E2750C750D +76347638763A76E776E577A0779E779F77A578E878DA78EC78E779A67A4D7A4E +7A467A4C7A4B7ABA7BD97C117BC97BE47BDB7BE17BE97BE67CD57CD67E0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E117E087E1B7E237E1E7E1D7E097E107F797FB27FF07FF17FEE802881B3 +81A981A881FB820882588259854A855985488568856985438549856D856A855E +8783879F879E87A2878D8861892A89328925892B892189AA89A68AE68AFA8AEB +8AF18B008ADC8AE78AEE8AFE8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C93 +8CF48E448E318E348E428E398E358F3B8F2F8F388F338FA88FA6907590749078 +9072907C907A913491929320933692F89333932F932292FC932B9304931A0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9310932693219315932E931995BB96A796A896AA96D5970E97119716970D9713 +970F975B975C9766979898309838983B9837982D9839982499109928991E991B +9921991A99ED99E299F19AB89ABC9AFB9AED9B289B919D159D239D269D289D12 +9D1B9ED89ED49F8D9F9C512A511F5121513252F5568E56805690568556870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000568F58D558D358D158CE5B305B2A5B245B7A5C375C685DBC5DBA5DBD5DB8 +5E6B5F4C5FBD61C961C261C761E661CB6232623464CE64CA64D864E064F064E6 +64EC64F164E264ED6582658366D966D66A806A946A846AA26A9C6ADB6AA36A7E +6A976A906AA06B5C6BAE6BDA6C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F80 +6FEC6FE16FE96FD56FEE6FF071E771DF71EE71E671E571ED71EC71F471E07235 +72467370737274A974B074A674A876467642764C76EA77B377AA77B077AC0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77A777AD77EF78F778FA78F478EF790179A779AA7A577ABF7C077C0D7BFE7BF7 +7C0C7BE07CE07CDC7CDE7CE27CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B +7E3D7E317E457E417E347E397E487E357E3F7E2F7F447FF37FFC807180728070 +806F807381C681C381BA81C281C081BF81BD81C981BE81E88209827185AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008584857E859C8591859485AF859B858785A8858A866787C087D187B387D2 +87C687AB87BB87BA87C887CB893B893689448938893D89AC8B0E8B178B198B1B +8B0A8B208B1D8B048B108C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B +8E488E4A8F448F3E8F428F458F3F907F907D9084908190829080913991A3919E +919C934D938293289375934A9365934B9318937E936C935B9370935A935495CA +95CB95CC95C895C696B196B896D6971C971E97A097D3984698B699359A010000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FF9BAE9BAB9BAA9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2 +569556AE58D958D85B385F5D61E3623364F464F264FE650664FA64FB64F765B7 +66DC67266AB36AAC6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE +70066FFA7011700F71FB71FC71FE71F87377737574A774BF7515765676580000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000765277BD77BF77BB77BC790E79AE7A617A627A607AC47AC57C2B7C277C2A +7C1E7C237C217CE77E547E557E5E7E5A7E617E527E597F487FF97FFB80778076 +81CD81CF820A85CF85A985CD85D085C985B085BA85B985A687EF87EC87F287E0 +898689B289F48B288B398B2C8B2B8C508D058E598E638E668E648E5F8E558EC0 +8F498F4D90879083908891AB91AC91D09394938A939693A293B393AE93AC93B0 +9398939A939795D495D695D095D596E296DC96D996DB96DE972497A397A60000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +97AD97F9984D984F984C984E985398BA993E993F993D992E99A59A0E9AC19B03 +9B069B4F9B4E9B4D9BCA9BC99BFD9BC89BC09D519D5D9D609EE09F159F2C5133 +56A558DE58DF58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE5 +6ADD6ADA6AD3701B701F7028701A701D701570187206720D725872A273780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A74BD74CA74E375877586765F766177C7791979B17A6B7A697C3E7C3F +7C387C3D7C377C407E6B7E6D7E797E697E6A7F857E737FB67FB97FB881D885E9 +85DD85EA85D585E485E585F787FB8805880D87F987FE8960895F8956895E8B41 +8B5C8B588B498B5A8B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A +8E748F548F4E8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D6 +93E293CD93D893E493D793E895DC96B496E3972A9727976197DC97FB985E0000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9858985B98BC994599499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A +9D6C9E929E979E939EB452F856A856B756B656B456BC58E45B405B435B7D5BF6 +5DC961F861FA65186514651966E667276AEC703E703070327210737B74CF7662 +76657926792A792C792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E827F4C800081DA826685FB85F9861185FA8606860B8607860A88148815 +896489BA89F88B708B6C8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B4 +91CB9418940393FD95E1973098C49952995199A89A2B9A309A379A359C139C0D +9E799EB59EE89F2F9F5F9F639F615137513856C156C056C259145C6C5DCD61FC +61FE651D651C659566E96AFB6B046AFA6BB2704C721B72A774D674D4766977D3 +7C507E8F7E8C7FBC8617862D861A882388228821881F896A896C89BD8B740000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B778B7D8D138E8A8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B +95E297389739973297FF9867986599579A459A439A409A3E9ACF9B549B519C2D +9C259DAF9DB49DC29DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C9 +5B7F5DD45DD25F4E61FF65246B0A6B6170517058738074E4758A766E766C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B37C607C5F807E807D81DF8972896F89FC8B808D168D178E918E938F61 +9148944494519452973D973E97C397C1986B99559A559A4D9AD29B1A9C499C31 +9C3E9C3B9DD39DD79F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B10 +74DA7ACA7C647C637C657E937E967E9481E28638863F88318B8A9090908F9463 +946094649768986F995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F +9EF456D158E9652C705E7671767277D77F507F888836883988628B938B920000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B9682778D1B91C0946A97429748974497C698709A5F9B229B589C5F9DF99DFA +9E7C9E7D9F079F779F725EF36B1670637C6C7C6E883B89C08EA191C194729470 +9871995E9AD69B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5 +947D947E947C9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030FE309D309E3005304130423043304430453046304730483049304A304B +304C304D304E304F3050305130523053305430553056305730583059305A305B +305C305D305E305F3060306130623063306430653066306730683069306A306B +306C306D306E306F3070307130723073307430753076307730783079307A307B +307C307D307E307F3080308130823083308430853086308730883089308A308B +308C308D308E308F309030913092309330A130A230A330A430A530A630A70000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A830A930AA30AB30AC30AD30AE30AF30B030B130B230B330B430B530B630B7 +30B830B930BA30BB30BC30BD30BE30BF30C030C130C230C330C430C530C630C7 +30C830C930CA30CB30CC30CD30CE30CF30D030D130D230D330D430D530D630D7 +30D830D930DA30DB30DC30DD30DE30DF30E030E130E230E330E430E530E60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030E730E830E930EA30EB30EC30ED30EE30EF30F030F130F230F330F430F5 +30F60414041504010416041704180419041A041B041C04230424042504260427 +04280429042A042B042C042D042E042F04300431043204330434043504510436 +043704380439043A043B043C043D043E043F0440044104420443044404450446 +044704480449044A044B044C044D044E044F2460246124622463246424652466 +246724682469247424752476247724782479247A247B247C247D000000000000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E424E5C51F5531A53824E074E0C4E474E8D56D7FA0C5C6E5F734E0F51874E0E +4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 +6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C531C534C57225723 +5917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C150000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F14 +4EF14F004EF74F084F1D4F024F054F224F134F044EF44F1251B1521352095210 +52A65322531F534D538A540756E156DF572E572A5734593C5980597C5985597B +597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 +5FD55FD45FCF625C625E626462616266626262596260625A626565EF65EE673E +67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D +897E909990979098909B909496229624962096234F564F3B4F624F494F534F64 +4F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E522152AD +52AE530953635372538E538F54305437542A545454455419541C542554180000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000543D544F544154285424544756EE56E756E557415745574C5749574B5752 +5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A +5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C +5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE45FE3 +5FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271627B627A +6270628162886277627D62726274653765F065F465F365F265F5674567470000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B +6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A +726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 +75957681793D80348095809980908092809C8290828F8285828E829182930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F +962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A +4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE +5235523252335246523152BC530A530B533C539253945487547F548154915482 +5488546B547A547E5465546C54745466548D546F546154605498546354675464 +56F756F9576F5772576D576B57715770577657805775577B5773577457620000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D659B1 +59BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB55CAF +5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E145E19 +5F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006034600A60176033601A601E602C6022600D6010602E60136011600C6009 +601C6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B0 +62B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD6611 +661066F6670A6785676C678E67926776677B6798678667846774678D678C677A +679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C936CEC +6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF20000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 +709470987085709370867084709170967082709A7083726A72D672CB72D872C9 +72DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D74DD74E8 +753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB77FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 +80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 +82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD +8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC54FD3 +4FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC04FB94FEC +5244524952C052C2533D537C539753965399539854BA54A154AD54A554CF0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE54B0 +57B5579E579F57A4578C5797579D579B57945798578F579957A5579A579558F4 +590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F759DB +59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB5CDB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF85DF9 +5E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F866037 +603960546072605E6045605360476049605B604C60406042605F602460446058 +6066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F862F6 +63006313631462FA631562FB62F06541654365AA65BF6636662166326635661C +662666226633662B663A661D66346639662E670F671067C167F267C867BA0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F767F667EE +67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB67FA67C9 +67CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D286D346D2D +6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D6D420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F +70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA72E4 +72E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B573B473EB +73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA767976C4 +7708770377047705770A76F776FB76FA77E777E878067811781278057810780F +780E780978037813794A794C794B7945794479D579CD79CF79D679CE7A800000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F917F8D +7FBE8007800E800F8014803780D880C780E080D180C880C280D080C580E380D9 +80DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE82F9830782E8 +830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F682F082EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000082E482E082FA82F382ED86778674867C86738841884E8867886A886989D3 +8A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB90C8 +91D491D39654964F96519653964A964E501E50055007501350225030501B4FF5 +4FF450335037502C4FF64FF75017501C502050275035502F5031500E515A5194 +519351CA51C451C551C851CE5261525A5252525E525F5255526252CD530E539E +552654E25517551254E754F354E4551A54FF5504550854EB5511550554F10000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +550A54FB54F754F854E0550E5503550B5701570257CC583257D557D257BA57C6 +57BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D5A2E5A15 +5A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF5CEE5CF1 +5CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D605A60670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000604160A26088608060926081609D60836095609B60976087609C608E6219 +624662F263106356632C634463456336634363E46339634B634A633C63296341 +6334635863546359632D63476333635A63516338635763406348654A654665C6 +65C365C465C2664A665F6647665167126713681F681A684968326833683B684B +684F68166831681C6835682B682D682F684E68446834681D6812681468266828 +682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B886BE66BE40000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D586D626D6D6D6F +6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D826D986D2F6D68 +6D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D170DD70CB7F39 +70E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1724272780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072777276730072FA72F472FE72F672F372FB730173D373D973E573D673BC +73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF74F474F5 +7521755B755F75B075C175BB75C475C075BF75B675BA768A76C9771D771B7710 +771377127723771177157719771A772277277823782C78227835782F7828782E +782B782178297833782A78317954795B794F795C79537952795179EB79EC79E0 +79EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A877AD87B100000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C887C8D7C85 +7D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F617F5E7F607F5D +7F5B7F967F927FC37FC27FC08016803E803980FA80F280F980F5810180FB8100 +8201822F82258333832D83448319835183258356833F83418326831C83220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008342834E831B832A8308833C834D8316832483208337832F832983478345 +834C8353831E832C834B832783488653865286A286A88696868D8691869E8687 +86978686868B869A868586A5869986A186A786958698868E869D869086948843 +8844886D88758876887288808871887F886F8883887E8874887C8A128C478C57 +8C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF590028FFF8FFB9004 +8FFC8FF690D690E090D990DA90E390DF90E590D890DB90D790DC90E491500000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070506A5061505E +50605053504B505D50725048504D5041505B504A506250155045505F5069506B +5063506450465040506E50735057505151D0526B526D526C526E52D652D3532D +539C55755576553C554D55505534552A55515562553655355530555255450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000550C55325565554E55395548552D553B5540554B570A570757FB581457E2 +57F657DC57F4580057ED57FD580857F8580B57F357CF580757EE57E357F257E5 +57EC57E1580E57FC581057E75801580C57F157E957F0580D5804595C5A605A58 +5A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A575A435A5D5A52 +5A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A565A425A5C5B72 +5B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D5D265D255D0F0000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB35F365F385F9B5F96 +5F9F608A6090608660BE60B060BA60D360D460CF60E460D960DD60C860B160DB +60B760CA60BF60C360CD60C063326365638A6382637D63BD639E63AD639D6397 +63AB638E636F63876390636E63AF6375639C636D63AE637C63A4633B639F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378638563816391638D6370655365CD66656661665B6659665C66626718 +687968876890689C686D686E68AE68AB6956686F68A368AC68A96875687468B2 +688F68776892687C686B687268AA68806871687E689B6896688B68A0688968A4 +6878687B6891688C688A687D6B366B336B376B386B916B8F6B8D6B8E6B8C6C2A +6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E006DC86DE06DDF6DD6 +6DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD56DC26DCF6DC90000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4710C70F07104 +70F3711070FC70FF71067113710070F870F6710B7102710E727E727B727C727F +731D7317730773117318730A730872FF730F731E738873F673F873F574047401 +73FD7407740073FA73FC73FF740C740B73F474087564756375CE75D275CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075CB75CC75D175D0768F768976D37739772F772D7731773277347733773D +7725773B7735784878527849784D784A784C782678457850796479677969796A +7963796B796179BB79FA79F879F679F77A8F7A947A907B357B477B347B257B30 +7B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B387B1A7B237C947C98 +7C967CA37D357D3D7D387D367D3A7D457D2C7D297D417D477D3E7D3F7D4A7D3B +7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD17FC77FCF7FC9801F0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +801E801B804780438048811881258119811B812D811F812C811E812181158127 +811D8122821182388233823A823482328274839083A383A8838D837A837383A4 +8374838F8381839583998375839483A9837D8383838C839D839B83AA838B837E +83A583AF8388839783B0837F83A6838783AE8376839A8659865686BF86B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000086C286C186C586BA86B086C886B986B386B886CC86B486BB86BC86C386BD +86BE88528889889588A888A288AA889A889188A1889F889888A78899889B8897 +88A488AC888C8893888E898289D689D989D58A308A278A2C8A1E8C398C3B8C5C +8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE8EDD8EDC8ED7 +8EE08EE19024900B9011901C900C902190EF90EA90F090F490F290F390D490EB +90EC90E991569158915A9153915591EC91F491F191F391F891E491F991EA0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91EB91F791E891EE957A95869588967C966D966B9671966F96BF976A980498E5 +9997509B50955094509E508B50A35083508C508E509D5068509C509250825087 +515F51D45312531153A453A7559155A855A555AD5577564555A255935588558F +55B5558155A3559255A4557D558C55A6557F559555A1558E570C582958370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005819581E58275823582857F558485825581C581B5833583F5836582E5839 +5838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA65A7C5AA55AAC +5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C5A9C5A8F5A935A9D +5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B5D415D4B5D3F5D35 +5D515D4E5D555D335D3A5D525D3D5D315D595D425D395D495D385D3C5D325D36 +5D405D455E445E415F585FA65FA55FAB60C960B960CC60E260CE60C461140000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60F2610A6116610560F5611360F860FC60FE60C161036118611D611060FF6104 +610B624A639463B163B063CE63E563E863EF63C3649D63F363CA63E063F663D5 +63F263F5646163DF63BE63DD63DC63C463D863D363C263C763CC63CB63C863F0 +63D763D965326567656A6564655C65686565658C659D659E65AE65D065D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000667C666C667B668066716679666A66726701690C68D3690468DC692A68EC +68EA68F1690F68D668F768EB68E468F66913691068F368E1690768CC69086970 +68B4691168EF68C6691468F868D068FD68FC68E8690B690A691768CE68C868DD +68DE68E668F468D1690668D468E96915692568C76B396B3B6B3F6B3C6B946B97 +6B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F6E496E886E3C6E3D6E45 +6E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E516E3B6E036E2E6E5E0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E686E5C6E616E316E286E606E716E6B6E396E226E306E536E656E276E786E64 +6E776E556E796E526E666E356E366E5A7120711E712F70FB712E713171237125 +71227132711F7128713A711B724B725A7288728972867285728B7312730B7330 +73227331733373277332732D732673237335730C742E742C7430742B74160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741A7421742D743174247423741D74297420743274FB752F756F756C75E7 +75DA75E175E675DD75DF75E475D77695769276DA774677477744774D7745774A +774E774B774C77DE77EC786078647865785C786D7871786A786E787078697868 +785E786279747973797279707A027A0A7A037A0C7A047A997AE67AE47B4A7B3B +7B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D587D6F7D637D537D56 +7D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F7D4E7F3E7F3F7F650000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F667FA27FA07FA17FD78051804F805080FE80D48143814A8152814F8147813D +814D813A81E681EE81F781F881F98204823C823D823F8275833B83CF83F98423 +83C083E8841283E783E483FC83F6841083C683C883EB83E383BF840183DD83E5 +83D883FF83E183CB83CE83D683F583C98409840F83DE8411840683C283F30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000083D583FA83C783D183EA841383C383EC83EE83C483FB83D783E2841B83DB +83FE86D886E286E686D386E386DA86EA86DD86EB86DC86EC86E986D786E886D1 +88488856885588BA88D788B988B888C088BE88B688BC88B788BD88B2890188C9 +89958998899789DD89DA89DB8A4E8A4D8A398A598A408A578A588A448A458A52 +8A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE8CB08CB98CB58D848D808D89 +8DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC88DD78DC58EEF8EF78EFA0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC8EF48EE9902D9034902F +9106912C910490FF90FC910890F990FB9101910091079105910391619164915F +916291609201920A92259203921A9226920F920C9200921291FF91FD92069204 +92279202921C92249219921792059216957B958D958C95909687967E96880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000096899683968096C296C896C396F196F0976C9770976E980798A998EB9CE6 +9EF94E834E844EB650BD50BF50C650AE50C450CA50B450C850C250B050C150BA +50B150CB50C950B650B851D7527A5278527B527C55C355DB55CC55D055CB55CA +55DD55C055D455C455E955BF55D2558D55CF55D555E255D655C855F255CD55D9 +55C25714585358685864584F584D5849586F5855584E585D58595865585B583D +5863587158FC5AC75AC45ACB5ABA5AB85AB15AB55AB05ABF5AC85ABB5AC60000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD85BD95C1F5C335D715D635D4A +5D655D725D6C5D5E5D685D675D625DF05E4F5E4E5E4A5E4D5E4B5EC55ECC5EC6 +5ECB5EC75F405FAF5FAD60F76149614A612B614561366132612E6146612F614F +612961406220916862236225622463C563F163EB641064126409642064240000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064336443641F641564186439643764226423640C64266430642864416435 +642F640A641A644064256427640B63E7641B642E6421640E656F659265D36686 +668C66956690668B668A66996694667867206966695F6938694E69626971693F +6945696A6939694269576959697A694869496935696C6933693D696568F06978 +693469696940696F69446976695869416974694C693B694B6937695C694F6951 +69326952692F697B693C6B466B456B436B426B486B416B9BFA0D6BFB6BFC0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E936E946EA06EB16EB96EC66ED2 +6EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB26EBE6EC36EDC6ED86E996E92 +6E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE6EA371477154715271637160 +7141715D716271727178716A7161714271587143714B7170715F715071530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007144714D715A724F728D728C72917290728E733C7342733B733A7340734A +73497444744A744B7452745174577440744F7450744E74427446744D745474E1 +74FF74FE74FD751D75797577698375EF760F760375F775FE75FC75F975F87610 +75FB75F675ED75F575FD769976B576DD7755775F776077527756775A77697767 +77547759776D77E07887789A7894788F788478957885788678A1788378797899 +78807896787B797C7982797D79797A117A187A197A127A177A157A227A130000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B697B727B657B737B717B70 +7B617B787B767B637CB27CB47CAF7D887D867D807D8D7D7F7D857D7A7D8E7D7B +7D837D7C7D8C7D947D847D7D7D927F6D7F6B7F677F687F6C7FA67FA57FA77FDB +7FDC8021816481608177815C8169815B816281726721815E81768167816F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081448161821D8249824482408242824584F1843F845684768479848F848D +846584518440848684678430844D847D845A845984748473845D8507845E8437 +843A8434847A8443847884328445842983D9844B842F8442842D845F84708439 +844E844C8452846F84C5848E843B8447843684338468847E8444842B84608454 +846E8450870B870486F7870C86FA86D686F5874D86F8870E8709870186F6870D +870588D688CB88CD88CE88DE88DB88DA88CC88D08985899B89DF89E589E40000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89E189E089E289DC89E68A768A868A7F8A618A3F8A778A828A848A758A838A81 +8A748A7A8C3C8C4B8C4A8C658C648C668C868C848C858CCC8D688D698D918D8C +8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC8DF18DEE8DD08DE98DE38DE2 +8DE78DF28DEB8DF48F068EFF8F018F008F058F078F088F028F0B9052903F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090449049903D9110910D910F911191169114910B910E916E916F92489252 +9230923A926692339265925E9283922E924A9246926D926C924F92609267926F +92369261927092319254926392509272924E9253924C92569232959F959C959E +959B969296939691969796CE96FA96FD96F896F59773977797789772980F980D +980E98AC98F698F999AF99B299B099B59AAD9AAB9B5B9CEA9CED9CE79E809EFD +50E650D450D750E850F350DB50EA50DD50E450D350EC50F050EF50E350E00000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D85280528152E952EB533053AC56275615560C561255FC560F561C56015613 +560255FA561D560455FF55F95889587C5890589858865881587F5874588B587A +58875891588E587658825888587B5894588F58FE596B5ADC5AEE5AE55AD55AEA +5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE5ADD5AD95AE85ADF5B775BE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BE35C635D825D805D7D5D865D7A5D815D775D8A5D895D885D7E5D7C5D8D +5D795D7F5E585E595E535ED85ED15ED75ECE5EDC5ED55ED95ED25ED45F445F43 +5F6F5FB6612C61286141615E61716173615261536172616C618061746154617A +615B6165613B616A6161615662296227622B642B644D645B645D647464766472 +6473647D6475646664A6644E6482645E645C644B645364606450647F643F646C +646B645964656477657365A066A166A0669F67056704672269B169B669C90000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69A069CE699669B069AC69BC69916999698E69A7698D69A969BE69AF69BF69C4 +69BD69A469D469B969CA699A69CF69B3699369AA69A1699E69D96997699069C2 +69B569A569C66B4A6B4D6B4B6B9E6B9F6BA06BC36BC46BFE6ECE6EF56EF16F03 +6F256EF86F376EFB6F2E6F096F4E6F196F1A6F276F186F3B6F126EED6F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F366F736EF96EEE6F2D6F406F306F3C6F356EEB6F076F0E6F436F056EFD +6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21718771907189718071857182 +718F717B718671817197724472537297729572937343734D7351734C74627473 +7471747574727467746E750075027503757D759076167608760C76157611760A +761476B87781777C77857782776E7780776F777E778378B278AA78B478AD78A8 +787E78AB789E78A578A078AC78A278A47998798A798B79967995799479930000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79977988799279907A2B7A4A7A307A2F7A287A267AA87AAB7AAC7AEE7B887B9C +7B8A7B917B907B967B8D7B8C7B9B7B8E7B857B9852847B997BA47B827CBB7CBF +7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC07DC57D9D7DCE7DC47DC67DCB7DCC +7DAF7DB97D967DBC7D9F7DA67DAE7DA97DA17DC97F737FE27FE37FE57FDE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008024805D805C8189818681838187818D818C818B8215849784A484A1849F +84BA84CE84C284AC84AE84AB84B984B484C184CD84AA849A84B184D0849D84A7 +84BB84A2849484C784CC849B84A984AF84A884D6849884B684CF84A084D784D4 +84D284DB84B084918661873387238728876B8740872E871E87218719871B8743 +872C8741873E874687208732872A872D873C8712873A87318735874287268727 +87388724871A8730871188F788E788F188F288FA88FE88EE88FC88F688FB0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88F088EC88EB899D89A1899F899E89E989EB89E88AAB8A998A8B8A928A8F8A96 +8C3D8C688C698CD58CCF8CD78D968E098E028DFF8E0D8DFD8E0A8E038E078E06 +8E058DFE8E008E048F108F118F0E8F0D9123911C91209122911F911D911A9124 +9121911B917A91729179917392A592A49276929B927A92A0929492AA928D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092A6929A92AB92799297927F92A392EE928E9282929592A2927D928892A1 +928A9286928C929992A7927E928792A9929D928B922D969E96A196FF9758977D +977A977E978397809782977B97849781977F97CE97CD981698AD98AE99029900 +9907999D999C99C399B999BB99BA99C299BD99C79AB19AE39AE79B3E9B3F9B60 +9B619B5F9CF19CF29CF59EA750FF5103513050F85106510750F650FE510B510C +50FD510A528B528C52F152EF56485642564C56355641564A5649564656580000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +565A56405633563D562C563E5638562A563A571A58AB589D58B158A058A358AF +58AC58A558A158FF5AFF5AF45AFD5AF75AF65B035AF85B025AF95B015B075B05 +5B0F5C675D995D975D9F5D925DA25D935D955DA05D9C5DA15D9A5D9E5E695E5D +5E605E5C7DF35EDB5EDE5EE15F495FB2618B6183617961B161B061A261890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000619B619361AF61AD619F619261AA61A1618D616661B3622D646E64706496 +64A064856497649C648F648B648A648C64A3649F646864B164986576657A6579 +657B65B265B366B566B066A966B266B766AA66AF6A006A066A1769E569F86A15 +69F169E46A2069FF69EC69E26A1B6A1D69FE6A2769F269EE6A1469F769E76A40 +6A0869E669FB6A0D69FC69EB6A096A046A186A256A0F69F66A266A0769F46A16 +6B516BA56BA36BA26BA66C016C006BFF6C026F416F266F7E6F876FC66F920000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F8D6F896F8C6F626F4F6F856F5A6F966F766F6C6F826F556F726F526F506F57 +6F946F936F5D6F006F616F6B6F7D6F676F906F536F8B6F696F7F6F956F636F77 +6F6A6F7B71B271AF719B71B071A0719A71A971B5719D71A5719E71A471A171AA +719C71A771B37298729A73587352735E735F7360735D735B7361735A73590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736274877489748A74867481747D74857488747C747975087507757E7625 +761E7619761D761C7623761A7628761B769C769D769E769B778D778F77897788 +78CD78BB78CF78CC78D178CE78D478C878C378C478C9799A79A179A0799C79A2 +799B6B767A397AB27AB47AB37BB77BCB7BBE7BAC7BCE7BAF7BB97BCA7BB57CC5 +7CC87CCC7CCB7DF77DDB7DEA7DE77DD77DE17E037DFA7DE67DF67DF17DF07DEE +7DDF7F767FAC7FB07FAD7FED7FEB7FEA7FEC7FE67FE88064806781A3819F0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +819E819581A2819981978216824F825382528250824E82518524853B850F8500 +8529850E8509850D851F850A8527851C84FB852B84FA8508850C84F4852A84F2 +851584F784EB84F384FC851284EA84E9851684FE8528851D852E850284FD851E +84F68531852684E784E884F084EF84F9851885208530850B8519852F86620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000875687638764877787E1877387588754875B87528761875A8751875E876D +876A8750874E875F875D876F876C877A876E875C8765874F877B877587628767 +8769885A8905890C8914890B891789188919890689168911890E890989A289A4 +89A389ED89F089EC8ACF8AC68AB88AD38AD18AD48AD58ABB8AD78ABE8AC08AC5 +8AD88AC38ABA8ABD8AD98C3E8C4D8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA0 +8D9C8DA18D9B8E208E238E258E248E2E8E158E1B8E168E118E198E268E270000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E148E128E188E138E1C8E178E1A8F2C8F248F188F1A8F208F238F168F179073 +9070906F9067906B912F912B9129912A91329126912E91859186918A91819182 +9184918092D092C392C492C092D992B692CF92F192DF92D892E992D792DD92CC +92EF92C292E892CA92C892CE92E692CD92D592C992E092DE92E792D192D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092B592E192C692B4957C95AC95AB95AE95B096A496A296D3970597089702 +975A978A978E978897D097CF981E981D9826982998289820981B982798B29908 +98FA9911991499169917991599DC99CD99CF99D399D499CE99C999D699D899CB +99D799CC9AB39AEC9AEB9AF39AF29AF19B469B439B679B749B719B669B769B75 +9B709B689B649B6C9CFC9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D04 +9E839ED39F0F9F10511C51135117511A511151DE533453E156705660566E0000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +567356665663566D5672565E5677571C571B58C858BD58C958BF58BA58C258BC +58C65B175B195B1B5B215B145B135B105B165B285B1A5B205B1E5BEF5DAC5DB1 +5DA95DA75DB55DB05DAE5DAA5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE9 +5EE75EE65EE85EE55F4B5FBC619D61A8619661C561B461C661C161CC61BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061BF61B8618C64D764D664D064CF64C964BD648964C364DB64F364D96533 +657F657C65A266C866BE66C066CA66CB66CF66BD66BB66BA66CC67236A346A66 +6A496A676A326A686A3E6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A +6A646A506A4F6A546A6F6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B54 +6B566BA76BAA6BAB6BC86BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC8 +6F5E6FC46FBD6F9E6FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB80000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FA26FC96FAB6FCD6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D4 +71CA71C771CF71BD71D871BC71C671DA71DB729D729E736973667367736C7365 +736B736A747F749A74A074947492749574A1750B7580762F762D7631763D7633 +763C76357632763076BB76E6779A779D77A1779C779B77A277A3779577990000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000779778DD78E978E578EA78DE78E378DB78E178E278ED78DF78E079A47A44 +7A487A477AB67AB87AB57AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF9 +7BD47BEA7BE27BDC7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C +7E1F7E207E137E0E7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F43 +7F7B7F7C7F7A7FB17FEF802A8029806C81B181A681AE81B981B581AB81B081AC +81B481B281B781A781F282558256825785568545856B854D8553856185580000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +854085468564854185628544855185478563853E855B8571854E856E85758555 +85678560858C8566855D85548565856C866386658664879B878F879787938792 +87888781879687988779878787A3878587908791879D87848794879C879A8789 +891E89268930892D892E89278931892289298923892F892C891F89F18AE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AE28AF28AF48AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF +8AFB8C918C928C908CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E38 +8E408E458E368E3C8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F34 +90769079907B908690FA913391359136919391909191918D918F9327931E9308 +931F9306930F937A9338933C931B9323931293019346932D930E930D92CB931D +92FA9325931392F992F793349302932492FF932993399335932A9314930C0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930B92FE9309930092FB931695BC95CD95BE95B995BA95B695BF95B595BD96A9 +96D4970B9712971097999797979497F097F89835982F98329924991F99279929 +999E99EE99EC99E599E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA +9AF99AF79B339B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B7D9B889D259D179D209D1E9D149D299D1D9D189D229D109D199D1F9E88 +9E869E879EAE9EAD9ED59ED69EFA9F129F3D51265125512251245120512952F4 +5693568C568D568656845683567E5682567F568158D658D458CF58D25B2D5B25 +5B325B235B2C5B275B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE5FBB61C3 +61B561BC61E761E061E561E461E861DE64EF64E964E364EB64E464E865816580 +65B665DA66D26A8D6A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A956A836AA86AA46A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA9 +6FF46FD46FE36FDC6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F2 +71E471F071E27373736E736F749774B274AB749074AA74AD74B174A574AF7510 +75117512750F7584764376487649764776A476E977B577AB77B277B777B60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077B477B177A877F078F378FD790278FB78FC78F2790578F978FE790479AB +79A87A5C7A5B7A567A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB +7C0E7BF47C0B7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE8 +7E2D7E3C7E427E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E44 +7E3A7F457F7F7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9 +825B825A825C85838580858F85A7859585A0858B85A3857B85A4859A859E0000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8577857C858985A1857A85788557858E85968586858D8599859D858185A28582 +858885858579857685988590859F866887BE87AA87AD87C587B087AC87B987B5 +87BC87AE87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE +87B289358933893C893E894189528937894289AD89AF89AE89F289F38B1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B188B168B118B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B13 +8B1A8C4F8C708C728C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E47 +8F438F409085907E9138919A91A2919B9199919F91A1919D91A093A1938393AF +936493569347937C9358935C93769349935093519360936D938F934C936A9379 +935793559352934F93719377937B9361935E936393679380934E935995C795C0 +95C995C395C595B796AE96B096AC9720971F9718971D9719979A97A1979C0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979D97D597D497F198419844984A9849984598439925992B992C992A9933 +9932992F992D99319930999899A399A19A0299FA99F499F799F999F899F699FB +99FD99FE99FC9A039ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA1 +9BA59BA49B869BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D459D429D439D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA +9EFB9EFF9F249F239F229F549FA05131512D512E5698569C5697569A569D5699 +59705B3C5C695C6A5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D6 +61E964FF650464FD64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD +6AE16AC66ABA6AB66AB76AC76AB46AAD6B5E6BC96C0B7007700C700D70017005 +7014700E6FFF70006FFB70266FFC6FF7700A720171FF71F9720371FD73760000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74B874C074B574C174BE74B674BB74C275147513765C76647659765076537657 +765A76A676BD76EC77C277BA78FF790C79137914790979107912791179AD79AC +7A5F7C1C7C297C197C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E56 +7E637E587E627E5F7E517E607E577E537FB57FB37FF77FF8807581D181D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D0825F825E85B485C685C085C385C285B385B585BD85C785C485BF85CB +85CE85C885C585B185B685D2862485B885B785BE866987E787E687E287DB87EB +87EA87E587DF87F387E487D487DC87D387ED87D887E387A487D787D9880187F4 +87E887DD8953894B894F894C89468950895189498B2A8B278B238B338B308B35 +8B478B2F8B3C8B3E8B318B258B378B268B368B2E8B248B3B8B3D8B3A8C428C75 +8C998C988C978CFE8D048D028D008E5C8E628E608E578E568E5E8E658E670000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E5B8E5A8E618E5D8E698E548F468F478F488F4B9128913A913B913E91A891A5 +91A791AF91AA93B5938C939293B7939B939D938993A7938E93AA939E93A69395 +93889399939F938D93B1939193B293A493A893B493A393A595D295D395D196B3 +96D796DA5DC296DF96D896DD97239722972597AC97AE97A897AB97A497AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097A297A597D797D997D697D897FA98509851985298B89941993C993A9A0F +9A0B9A099A0D9A049A119A0A9A059A079A069AC09ADC9B089B049B059B299B35 +9B4A9B4C9B4B9BC79BC69BC39BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C +9D539D4F9D4A9D5B9D4B9D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C +9EDF9F019F009F169F259F2B9F2A9F299F289F4C9F5551345135529652F753B4 +56AB56AD56A656A756AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E700000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5FBF61FB65076510650D6509650C650E658465DE65DD66DE6AE76AE06ACC6AD1 +6AD96ACB6ADF6ADC6AD06AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016 +702B702170227023702970177024701C702A720C720A72077202720572A572A6 +72A472A372A174CB74C574B774C37516766077C977CA77C477F1791D791B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007921791C7917791E79B07A677A687C337C3C7C397C2C7C3B7CEC7CEA7E76 +7E757E787E707E777E6F7E7A7E727E747E687F4B7F4A7F837F867FB77FFD7FFE +807881D781D582648261826385EB85F185ED85D985E185E885DA85D785EC85F2 +85F885D885DF85E385DC85D185F085E685EF85DE85E2880087FA880387F687F7 +8809880C880B880687FC880887FF880A88028962895A895B89578961895C8958 +895D8959898889B789B689F68B508B488B4A8B408B538B568B548B4B8B550000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B518B428B528B578C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D +8E788E738E6A8E6F8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD +93DE93C793CF93C293DA93D093F993EC93CC93D993A993E693CA93D493EE93E3 +93D593C493CE93C093D293E7957D95DA95DB96E19729972B972C972897260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097B397B797B697DD97DE97DF985C9859985D985798BF98BD98BB98BE9948 +9947994399A699A79A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C +9A149AC29B0B9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD4 +9BD79BEC9BDC9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D78 +9D869D8B9D8C9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F +9D879D689E949E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B20000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56B556B358E35B455DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF +66E866E366E46AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F70377034 +703170427038703F703A70397040703B703370417213721472A8737D737C74BA +76AB76AA76BE76ED77CC77CE77CF77CD77F27925792379277928792479290000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B27A6E7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E80 +7FBA7FFF807981DB81D9820B82688269862285FF860185FE861B860085F68604 +86098605860C85FD8819881088118817881388168963896689B989F78B608B6A +8B5D8B688B638B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A +908D9143914191B791B591B291B3940B941393FB9420940F941493FE94159410 +94289419940D93F5940093F79407940E9416941293FA940993F8940A93FF0000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93FC940C93F69411940695DE95E095DF972E972F97B997BB97FD97FE98609862 +9863985F98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A36 +9A299A2E9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF8 +9C409C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DA09D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA6 +9DA79E999E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91 +513A51395298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC +6B036AF86B0070437044704A7048704970457046721D721A7219737E7517766A +77D0792D7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB8030 +81DD8618862A8626861F8623861C86198627862E862186208629861E86250000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8829881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B45 +8B7A8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B +94369429943D943C94309439942A9437942C9440943195E595E495E39735973A +97BF97E1986498C998C698C0995899569A399A3D9A469A449A429A419A3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A3F9ACD9B159B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C29 +9C249C219DB79DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB9 +9DBA9DAC9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F18 +9F1A9F319F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF2 +65216520652665226B0B6B086B096C0D7055705670577052721E721F72A9737F +74D874D574D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CF47CF17E917F4F7F8781DE826B863486358633862C86328636882C88288826 +882A8825897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A +8E928E908E968E978F608F629147944C9450944A944B944F9447944594489449 +9446973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A499A529A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C33 +9C419C3C9C379C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF +9DE99DD99DD89DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2 +513D529958E858E759725B4D5DD8882F5F4F62016203620465296525659666EB +6B116B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C +863A86408639863C8631863B863E88308832882E883389768974897389FE0000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B8C8B8E8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C4 +97C598009A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C +9C4E9DFB9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC +9DF49DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F719F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D +7060722374DB74E577D5793879B779B67C6A7E977F89826D8643883888378835 +884B8B948B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743 +974797C797E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E03 +9E069E059E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E +65B86B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A0000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E987E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA5 +8EA48EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E10 +9E0F9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB2 +8EA691C394749478947694759A609C749C739C719C759E149E139EF69F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009FA4706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B98739874 +98CC996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 +948094819A699A689B2E9E197229864B8B9F94839C799EB776759A6B9C7A9E1D +7069706A9EA49F7E9F499F980000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/cp1250.enc b/inkstitch/bin/tcl/encoding/cp1250.enc new file mode 100644 index 0000000..070ad90 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1250.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1250, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0083201E2026202020210088203001602039015A0164017D0179 +009020182019201C201D202220132014009821220161203A015B0165017E017A +00A002C702D8014100A4010400A600A700A800A9015E00AB00AC00AD00AE017B +00B000B102DB014200B400B500B600B700B80105015F00BB013D02DD013E017C +015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E +01100143014700D300D4015000D600D70158016E00DA017000DC00DD016200DF +015500E100E2010300E4013A010700E7010D00E9011900EB011B00ED00EE010F +01110144014800F300F4015100F600F70159016F00FA017100FC00FD016302D9 diff --git a/inkstitch/bin/tcl/encoding/cp1251.enc b/inkstitch/bin/tcl/encoding/cp1251.enc new file mode 100644 index 0000000..376b1b4 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1251.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1251, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +04020403201A0453201E20262020202120AC203004092039040A040C040B040F +045220182019201C201D202220132014009821220459203A045A045C045B045F +00A0040E045E040800A4049000A600A7040100A9040400AB00AC00AD00AE0407 +00B000B104060456049100B500B600B704512116045400BB0458040504550457 +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E044F diff --git a/inkstitch/bin/tcl/encoding/cp1252.enc b/inkstitch/bin/tcl/encoding/cp1252.enc new file mode 100644 index 0000000..dd525ea --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1252.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1252, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030016020390152008D017D008F +009020182019201C201D20222013201402DC21220161203A0153009D017E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/inkstitch/bin/tcl/encoding/cp1253.enc b/inkstitch/bin/tcl/encoding/cp1253.enc new file mode 100644 index 0000000..a8754c3 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1253.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1253, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202100882030008A2039008C008D008E008F +009020182019201C201D20222013201400982122009A203A009C009D009E009F +00A00385038600A300A400A500A600A700A800A9000000AB00AC00AD00AE2015 +00B000B100B200B3038400B500B600B703880389038A00BB038C00BD038E038F +0390039103920393039403950396039703980399039A039B039C039D039E039F +03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF +03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 diff --git a/inkstitch/bin/tcl/encoding/cp1254.enc b/inkstitch/bin/tcl/encoding/cp1254.enc new file mode 100644 index 0000000..b9e3b3c --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1254.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1254, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030016020390152008D008E008F +009020182019201C201D20222013201402DC21220161203A0153009D009E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +011E00D100D200D300D400D500D600D700D800D900DA00DB00DC0130015E00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +011F00F100F200F300F400F500F600F700F800F900FA00FB00FC0131015F00FF diff --git a/inkstitch/bin/tcl/encoding/cp1255.enc b/inkstitch/bin/tcl/encoding/cp1255.enc new file mode 100644 index 0000000..6e78b95 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1255.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1255, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030008A2039008C008D008E008F +009020182019201C201D20222013201402DC2122009A203A009C009D009E009F +00A000A100A200A320AA00A500A600A700A800A900D700AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE00BF +05B005B105B205B305B405B505B605B705B805B9000005BB05BC05BD05BE05BF +05C005C105C205C305F005F105F205F305F40000000000000000000000000000 +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 diff --git a/inkstitch/bin/tcl/encoding/cp1256.enc b/inkstitch/bin/tcl/encoding/cp1256.enc new file mode 100644 index 0000000..a98762a --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1256.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1256, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC067E201A0192201E20262020202102C62030067920390152068606980688 +06AF20182019201C201D20222013201406A921220691203A0153200C200D06BA +00A0060C00A200A300A400A500A600A700A800A906BE00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B9061B00BB00BC00BD00BE061F +06C1062106220623062406250626062706280629062A062B062C062D062E062F +063006310632063306340635063600D7063706380639063A0640064106420643 +00E0064400E2064506460647064800E700E800E900EA00EB0649064A00EE00EF +064B064C064D064E00F4064F065000F7065100F9065200FB00FC200E200F06D2 diff --git a/inkstitch/bin/tcl/encoding/cp1257.enc b/inkstitch/bin/tcl/encoding/cp1257.enc new file mode 100644 index 0000000..4aa135d --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1257.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1257, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0083201E20262020202100882030008A2039008C00A802C700B8 +009020182019201C201D20222013201400982122009A203A009C00AF02DB009F +00A0000000A200A300A4000000A600A700D800A9015600AB00AC00AD00AE00C6 +00B000B100B200B300B400B500B600B700F800B9015700BB00BC00BD00BE00E6 +0104012E0100010600C400C501180112010C00C90179011601220136012A013B +01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF +0105012F0101010700E400E501190113010D00E9017A011701230137012B013C +01610144014600F3014D00F500F600F701730142015B016B00FC017C017E02D9 diff --git a/inkstitch/bin/tcl/encoding/cp1258.enc b/inkstitch/bin/tcl/encoding/cp1258.enc new file mode 100644 index 0000000..95fdef8 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp1258.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1258, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030008A20390152008D008E008F +009020182019201C201D20222013201402DC2122009A203A0153009D009E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C2010200C400C500C600C700C800C900CA00CB030000CD00CE00CF +011000D1030900D300D401A000D600D700D800D900DA00DB00DC01AF030300DF +00E000E100E2010300E400E500E600E700E800E900EA00EB030100ED00EE00EF +011100F1032300F300F401A100F600F700F800F900FA00FB00FC01B020AB00FF diff --git a/inkstitch/bin/tcl/encoding/cp437.enc b/inkstitch/bin/tcl/encoding/cp437.enc new file mode 100644 index 0000000..ecae4e6 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp437.enc @@ -0,0 +1,20 @@ +# Encoding file: cp437, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00A200A300A520A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp737.enc b/inkstitch/bin/tcl/encoding/cp737.enc new file mode 100644 index 0000000..5b59661 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp737.enc @@ -0,0 +1,20 @@ +# Encoding file: cp737, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +039103920393039403950396039703980399039A039B039C039D039E039F03A0 +03A103A303A403A503A603A703A803A903B103B203B303B403B503B603B703B8 +03B903BA03BB03BC03BD03BE03BF03C003C103C303C203C403C503C603C703C8 +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03C903AC03AD03AE03CA03AF03CC03CD03CB03CE038603880389038A038C038E +038F00B12265226403AA03AB00F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp775.enc b/inkstitch/bin/tcl/encoding/cp775.enc new file mode 100644 index 0000000..71b65c3 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp775.enc @@ -0,0 +1,20 @@ +# Encoding file: cp775, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +010600FC00E9010100E4012300E501070142011301560157012B017900C400C5 +00C900E600C6014D00F6012200A2015A015B00D600DC00F800A300D800D700A4 +0100012A00F3017B017C017A201D00A600A900AE00AC00BD00BC014100AB00BB +259125922593250225240104010C01180116256325512557255D012E01602510 +25142534252C251C2500253C0172016A255A25542569256625602550256C017D +0105010D01190117012F01610173016B017E2518250C25882584258C25902580 +00D300DF014C014300F500D500B5014401360137013B013C0146011201452019 +00AD00B1201C00BE00B600A700F7201E00B0221900B700B900B300B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp850.enc b/inkstitch/bin/tcl/encoding/cp850.enc new file mode 100644 index 0000000..4e7a90d --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp850.enc @@ -0,0 +1,20 @@ +# Encoding file: cp850, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00F800A300D800D70192 +00E100ED00F300FA00F100D100AA00BA00BF00AE00AC00BD00BC00A100AB00BB +2591259225932502252400C100C200C000A9256325512557255D00A200A52510 +25142534252C251C2500253C00E300C3255A25542569256625602550256C00A4 +00F000D000CA00CB00C8013100CD00CE00CF2518250C2588258400A600CC2580 +00D300DF00D400D200F500D500B500FE00DE00DA00DB00D900FD00DD00AF00B4 +00AD00B1201700BE00B600A700F700B800B000A800B700B900B300B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp852.enc b/inkstitch/bin/tcl/encoding/cp852.enc new file mode 100644 index 0000000..f34899e --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp852.enc @@ -0,0 +1,20 @@ +# Encoding file: cp852, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E4016F010700E7014200EB0150015100EE017900C40106 +00C90139013A00F400F6013D013E015A015B00D600DC01640165014100D7010D +00E100ED00F300FA01040105017D017E0118011900AC017A010C015F00AB00BB +2591259225932502252400C100C2011A015E256325512557255D017B017C2510 +25142534252C251C2500253C01020103255A25542569256625602550256C00A4 +01110110010E00CB010F014700CD00CE011B2518250C258825840162016E2580 +00D300DF00D401430144014801600161015400DA0155017000FD00DD016300B4 +00AD02DD02DB02C702D800A700F700B800B000A802D901710158015925A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp855.enc b/inkstitch/bin/tcl/encoding/cp855.enc new file mode 100644 index 0000000..4d58b86 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp855.enc @@ -0,0 +1,20 @@ +# Encoding file: cp855, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0452040204530403045104010454040404550405045604060457040704580408 +04590409045A040A045B040B045C040C045E040E045F040F044E042E044A042A +0430041004310411044604260434041404350415044404240433041300AB00BB +259125922593250225240445042504380418256325512557255D043904192510 +25142534252C251C2500253C043A041A255A25542569256625602550256C00A4 +043B041B043C041C043D041D043E041E043F2518250C25882584041F044F2580 +042F044004200441042104420422044304230436041604320412044C042C2116 +00AD044B042B0437041704480428044D042D044904290447042700A725A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp857.enc b/inkstitch/bin/tcl/encoding/cp857.enc new file mode 100644 index 0000000..b42ed55 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp857.enc @@ -0,0 +1,20 @@ +# Encoding file: cp857, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE013100C400C5 +00C900E600C600F400F600F200FB00F9013000D600DC00F800A300D8015E015F +00E100ED00F300FA00F100D1011E011F00BF00AE00AC00BD00BC00A100AB00BB +2591259225932502252400C100C200C000A9256325512557255D00A200A52510 +25142534252C251C2500253C00E300C3255A25542569256625602550256C00A4 +00BA00AA00CA00CB00C8000000CD00CE00CF2518250C2588258400A600CC2580 +00D300DF00D400D200F500D500B5000000D700DA00DB00D900EC00FF00AF00B4 +00AD00B1000000BE00B600A700F700B800B000A800B700B900B300B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp860.enc b/inkstitch/bin/tcl/encoding/cp860.enc new file mode 100644 index 0000000..871943b --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp860.enc @@ -0,0 +1,20 @@ +# Encoding file: cp860, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E300E000C100E700EA00CA00E800CD00D400EC00C300C2 +00C900C000C800F400F500F200DA00F900CC00D500DC00A200A300D920A700D3 +00E100ED00F300FA00F100D100AA00BA00BF00D200AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp861.enc b/inkstitch/bin/tcl/encoding/cp861.enc new file mode 100644 index 0000000..3f8f605 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp861.enc @@ -0,0 +1,20 @@ +# Encoding file: cp861, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800D000F000DE00C400C5 +00C900E600C600F400F600FE00FB00DD00FD00D600DC00F800A300D820A70192 +00E100ED00F300FA00C100CD00D300DA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp862.enc b/inkstitch/bin/tcl/encoding/cp862.enc new file mode 100644 index 0000000..5f9d16c --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp862.enc @@ -0,0 +1,20 @@ +# Encoding file: cp862, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00A200A300A520A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp863.enc b/inkstitch/bin/tcl/encoding/cp863.enc new file mode 100644 index 0000000..c8b8686 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp863.enc @@ -0,0 +1,20 @@ +# Encoding file: cp863, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200C200E000B600E700EA00EB00E800EF00EE201700C000A7 +00C900C800CA00F400CB00CF00FB00F900A400D400DC00A200A300D900DB0192 +00A600B400F300FA00A800B800B300AF00CE231000AC00BD00BC00BE00AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp864.enc b/inkstitch/bin/tcl/encoding/cp864.enc new file mode 100644 index 0000000..71f9e62 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp864.enc @@ -0,0 +1,20 @@ +# Encoding file: cp864, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00200021002200230024066A0026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00B000B72219221A259225002502253C2524252C251C25342510250C25142518 +03B2221E03C600B100BD00BC224800AB00BBFEF7FEF8009B009CFEFBFEFC009F +00A000ADFE8200A300A4FE8400000000FE8EFE8FFE95FE99060CFE9DFEA1FEA5 +0660066106620663066406650666066706680669FED1061BFEB1FEB5FEB9061F +00A2FE80FE81FE83FE85FECAFE8BFE8DFE91FE93FE97FE9BFE9FFEA3FEA7FEA9 +FEABFEADFEAFFEB3FEB7FEBBFEBFFEC1FEC5FECBFECF00A600AC00F700D7FEC9 +0640FED3FED7FEDBFEDFFEE3FEE7FEEBFEEDFEEFFEF3FEBDFECCFECEFECDFEE1 +FE7D0651FEE5FEE9FEECFEF0FEF2FED0FED5FEF5FEF6FEDDFED9FEF125A00000 diff --git a/inkstitch/bin/tcl/encoding/cp865.enc b/inkstitch/bin/tcl/encoding/cp865.enc new file mode 100644 index 0000000..543da9c --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp865.enc @@ -0,0 +1,20 @@ +# Encoding file: cp865, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00F800A300D820A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00A4 +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp866.enc b/inkstitch/bin/tcl/encoding/cp866.enc new file mode 100644 index 0000000..b851cf5 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp866.enc @@ -0,0 +1,20 @@ +# Encoding file: cp866, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +0440044104420443044404450446044704480449044A044B044C044D044E044F +040104510404045404070457040E045E00B0221900B7221A211600A425A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp869.enc b/inkstitch/bin/tcl/encoding/cp869.enc new file mode 100644 index 0000000..9fd2929 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp869.enc @@ -0,0 +1,20 @@ +# Encoding file: cp869, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850386008700B700AC00A620182019038820150389 +038A03AA038C00930094038E03AB00A9038F00B200B303AC00A303AD03AE03AF +03CA039003CC03CD039103920393039403950396039700BD0398039900AB00BB +25912592259325022524039A039B039C039D256325512557255D039E039F2510 +25142534252C251C2500253C03A003A1255A25542569256625602550256C03A3 +03A403A503A603A703A803A903B103B203B32518250C2588258403B403B52580 +03B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C203C40384 +00AD00B103C503C603C700A703C8038500B000A803C903CB03B003CE25A000A0 diff --git a/inkstitch/bin/tcl/encoding/cp874.enc b/inkstitch/bin/tcl/encoding/cp874.enc new file mode 100644 index 0000000..0487b97 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp874.enc @@ -0,0 +1,20 @@ +# Encoding file: cp874, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC008100820083008420260086008700880089008A008B008C008D008E008F +009020182019201C201D20222013201400980099009A009B009C009D009E009F +00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F +0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 diff --git a/inkstitch/bin/tcl/encoding/cp932.enc b/inkstitch/bin/tcl/encoding/cp932.enc new file mode 100644 index 0000000..8da8cd6 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp932.enc @@ -0,0 +1,801 @@ +# Encoding file: cp932, multi-byte +M +003F 0 46 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000850086000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +FFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0FFF3C +FF5E2225FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0BFF0D00B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF04FFE0FFE1FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +0000000000000000000000000000000022272228FFE221D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2460246124622463246424652466246724682469246A246B246C246D246E246F +2470247124722473216021612162216321642165216621672168216900003349 +33143322334D331833273303333633513357330D33263323332B334A333B339C +339D339E338E338F33C433A100000000000000000000000000000000337B0000 +301D301F211633CD212132A432A532A632A732A8323132323239337E337D337C +22522261222B222E2211221A22A52220221F22BF22352229222A000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB97652000000000000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E8A891C9348928884DC4FC970BB663168C892F966FB5F454E284EE14EFC4F00 +4F034F394F564F924F8A4F9A4F944FCD504050224FFF501E5046507050425094 +50F450D8514A5164519D51BE51EC5215529C52A652C052DB5300530753245372 +539353B253DDFA0E549C548A54A954FF55865759576557AC57C857C7FA0F0000 +FA10589E58B2590B5953595B595D596359A459BA5B565BC0752F5BD85BEC5C1E +5CA65CBA5CF55D275D53FA115D425D6D5DB85DB95DD05F215F345F675FB75FDE +605D6085608A60DE60D5612060F26111613761306198621362A663F56460649D +64CE654E66006615663B6609662E661E6624666566576659FA126673669966A0 +66B266BF66FA670EF929676667BB685267C06801684468CFFA136968FA146998 +69E26A306A6B6A466A736A7E6AE26AE46BD66C3F6C5C6C866C6F6CDA6D046D87 +6D6F6D966DAC6DCF6DF86DF26DFC6E396E5C6E276E3C6EBF6F886FB56FF57005 +70077028708570AB710F7104715C71467147FA1571C171FE72B1000000000000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72BE7324FA16737773BD73C973D673E373D2740773F57426742A7429742E7462 +7489749F7501756F7682769C769E769B76A6FA17774652AF7821784E7864787A +7930FA18FA19FA1A7994FA1B799B7AD17AE7FA1C7AEB7B9EFA1D7D487D5C7DB7 +7DA07DD67E527F477FA1FA1E83018362837F83C783F6844884B4855385590000 +856BFA1F85B0FA20FA21880788F58A128A378A798AA78ABE8ADFFA228AF68B53 +8B7F8CF08CF48D128D76FA238ECFFA24FA25906790DEFA269115912791DA91D7 +91DE91ED91EE91E491E592069210920A923A9240923C924E9259925192399267 +92A79277927892E792D792D992D0FA2792D592E092D39325932192FBFA28931E +92FF931D93029370935793A493C693DE93F89431944594489592F9DCFA29969D +96AF9733973B9743974D974F9751975598579865FA2AFA2B9927FA2C999E9A4E +9AD99ADC9B759B729B8F9BB19BBB9C009D709D6BFA2D9E199ED1000000002170 +217121722173217421752176217721782179FFE2FFE4FF07FF02000000000000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2170217121722173217421752176217721782179216021612162216321642165 +2166216721682169FFE2FFE4FF07FF0232312116212122357E8A891C93489288 +84DC4FC970BB663168C892F966FB5F454E284EE14EFC4F004F034F394F564F92 +4F8A4F9A4F944FCD504050224FFF501E504650705042509450F450D8514A0000 +5164519D51BE51EC5215529C52A652C052DB5300530753245372539353B253DD +FA0E549C548A54A954FF55865759576557AC57C857C7FA0FFA10589E58B2590B +5953595B595D596359A459BA5B565BC0752F5BD85BEC5C1E5CA65CBA5CF55D27 +5D53FA115D425D6D5DB85DB95DD05F215F345F675FB75FDE605D6085608A60DE +60D5612060F26111613761306198621362A663F56460649D64CE654E66006615 +663B6609662E661E6624666566576659FA126673669966A066B266BF66FA670E +F929676667BB685267C06801684468CFFA136968FA14699869E26A306A6B6A46 +6A736A7E6AE26AE46BD66C3F6C5C6C866C6F6CDA6D046D876D6F000000000000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D966DAC6DCF6DF86DF26DFC6E396E5C6E276E3C6EBF6F886FB56FF570057007 +7028708570AB710F7104715C71467147FA1571C171FE72B172BE7324FA167377 +73BD73C973D673E373D2740773F57426742A7429742E74627489749F7501756F +7682769C769E769B76A6FA17774652AF7821784E7864787A7930FA18FA190000 +FA1A7994FA1B799B7AD17AE7FA1C7AEB7B9EFA1D7D487D5C7DB77DA07DD67E52 +7F477FA1FA1E83018362837F83C783F6844884B485538559856BFA1F85B0FA20 +FA21880788F58A128A378A798AA78ABE8ADFFA228AF68B538B7F8CF08CF48D12 +8D76FA238ECFFA24FA25906790DEFA269115912791DA91D791DE91ED91EE91E4 +91E592069210920A923A9240923C924E925992519239926792A79277927892E7 +92D792D992D0FA2792D592E092D39325932192FBFA28931E92FF931D93029370 +935793A493C693DE93F89431944594489592F9DCFA29969D96AF9733973B9743 +974D974F9751975598579865FA2AFA2B9927FA2C999E9A4E9AD9000000000000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9ADC9B759B729B8F9BB19BBB9C009D709D6BFA2D9E199ED10000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +8160 301C FF5E +8161 2016 2225 +817C 2212 FF0D +8191 00A2 FFE0 +8192 00A3 FFE1 +81CA 00AC FFE2 +81BE 222a +81BF 2229 +81DA 2220 +81DB 22a5 +81DF 2261 +81E0 2252 +81E3 221a +81E6 2235 +81E7 222b diff --git a/inkstitch/bin/tcl/encoding/cp936.enc b/inkstitch/bin/tcl/encoding/cp936.enc new file mode 100644 index 0000000..37bcc80 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp936.enc @@ -0,0 +1,2162 @@ +# Encoding file: cp936, multi-byte +M +003F 0 127 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E024E044E054E064E0F4E124E174E1F4E204E214E234E264E294E2E4E2F4E31 +4E334E354E374E3C4E404E414E424E444E464E4A4E514E554E574E5A4E5B4E62 +4E634E644E654E674E684E6A4E6B4E6C4E6D4E6E4E6F4E724E744E754E764E77 +4E784E794E7A4E7B4E7C4E7D4E7F4E804E814E824E834E844E854E874E8A0000 +4E904E964E974E994E9C4E9D4E9E4EA34EAA4EAF4EB04EB14EB44EB64EB74EB8 +4EB94EBC4EBD4EBE4EC84ECC4ECF4ED04ED24EDA4EDB4EDC4EE04EE24EE64EE7 +4EE94EED4EEE4EEF4EF14EF44EF84EF94EFA4EFC4EFE4F004F024F034F044F05 +4F064F074F084F0B4F0C4F124F134F144F154F164F1C4F1D4F214F234F284F29 +4F2C4F2D4F2E4F314F334F354F374F394F3B4F3E4F3F4F404F414F424F444F45 +4F474F484F494F4A4F4B4F4C4F524F544F564F614F624F664F684F6A4F6B4F6D +4F6E4F714F724F754F774F784F794F7A4F7D4F804F814F824F854F864F874F8A +4F8C4F8E4F904F924F934F954F964F984F994F9A4F9C4F9E4F9F4FA14FA20000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4FA44FAB4FAD4FB04FB14FB24FB34FB44FB64FB74FB84FB94FBA4FBB4FBC4FBD +4FBE4FC04FC14FC24FC64FC74FC84FC94FCB4FCC4FCD4FD24FD34FD44FD54FD6 +4FD94FDB4FE04FE24FE44FE54FE74FEB4FEC4FF04FF24FF44FF54FF64FF74FF9 +4FFB4FFC4FFD4FFF5000500150025003500450055006500750085009500A0000 +500B500E501050115013501550165017501B501D501E50205022502350245027 +502B502F5030503150325033503450355036503750385039503B503D503F5040 +504150425044504550465049504A504B504D5050505150525053505450565057 +50585059505B505D505E505F506050615062506350645066506750685069506A +506B506D506E506F50705071507250735074507550785079507A507C507D5081 +508250835084508650875089508A508B508C508E508F50905091509250935094 +50955096509750985099509A509B509C509D509E509F50A050A150A250A450A6 +50AA50AB50AD50AE50AF50B050B150B350B450B550B650B750B850B950BC0000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50BD50BE50BF50C050C150C250C350C450C550C650C750C850C950CA50CB50CC +50CD50CE50D050D150D250D350D450D550D750D850D950DB50DC50DD50DE50DF +50E050E150E250E350E450E550E850E950EA50EB50EF50F050F150F250F450F6 +50F750F850F950FA50FC50FD50FE50FF51005101510251035104510551080000 +5109510A510C510D510E510F511051115113511451155116511751185119511A +511B511C511D511E511F512051225123512451255126512751285129512A512B +512C512D512E512F5130513151325133513451355136513751385139513A513B +513C513D513E51425147514A514C514E514F515051525153515751585159515B +515D515E515F5160516151635164516651675169516A516F5172517A517E517F +5183518451865187518A518B518E518F51905191519351945198519A519D519E +519F51A151A351A651A751A851A951AA51AD51AE51B451B851B951BA51BE51BF +51C151C251C351C551C851CA51CD51CE51D051D251D351D451D551D651D70000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D851D951DA51DC51DE51DF51E251E351E551E651E751E851E951EA51EC51EE +51F151F251F451F751FE520452055209520B520C520F5210521352145215521C +521E521F522152225223522552265227522A522C522F5231523252345235523C +523E524452455246524752485249524B524E524F525252535255525752580000 +5259525A525B525D525F526052625263526452665268526B526C526D526E5270 +52715273527452755276527752785279527A527B527C527E5280528352845285 +528652875289528A528B528C528D528E528F5291529252945295529652975298 +5299529A529C52A452A552A652A752AE52AF52B052B452B552B652B752B852B9 +52BA52BB52BC52BD52C052C152C252C452C552C652C852CA52CC52CD52CE52CF +52D152D352D452D552D752D952DA52DB52DC52DD52DE52E052E152E252E352E5 +52E652E752E852E952EA52EB52EC52ED52EE52EF52F152F252F352F452F552F6 +52F752F852FB52FC52FD530153025303530453075309530A530B530C530E0000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53115312531353145318531B531C531E531F532253245325532753285329532B +532C532D532F533053315332533353345335533653375338533C533D53405342 +53445346534B534C534D5350535453585359535B535D53655368536A536C536D +537253765379537B537C537D537E53805381538353875388538A538E538F0000 +53905391539253935394539653975399539B539C539E53A053A153A453A753AA +53AB53AC53AD53AF53B053B153B253B353B453B553B753B853B953BA53BC53BD +53BE53C053C353C453C553C653C753CE53CF53D053D253D353D553DA53DC53DD +53DE53E153E253E753F453FA53FE53FF5400540254055407540B541454185419 +541A541C542254245425542A5430543354365437543A543D543F544154425444 +544554475449544C544D544E544F5451545A545D545E545F5460546154635465 +54675469546A546B546C546D546E546F547054745479547A547E547F54815483 +5485548754885489548A548D5491549354975498549C549E549F54A054A10000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54A254A554AE54B054B254B554B654B754B954BA54BC54BE54C354C554CA54CB +54D654D854DB54E054E154E254E354E454EB54EC54EF54F054F154F454F554F6 +54F754F854F954FB54FE550055025503550455055508550A550B550C550D550E +5512551355155516551755185519551A551C551D551E551F5521552555260000 +55285529552B552D553255345535553655385539553A553B553D554055425545 +55475548554B554C554D554E554F5551555255535554555755585559555A555B +555D555E555F55605562556355685569556B556F557055715572557355745579 +557A557D557F55855586558C558D558E559055925593559555965597559A559B +559E55A055A155A255A355A455A555A655A855A955AA55AB55AC55AD55AE55AF +55B055B255B455B655B855BA55BC55BF55C055C155C255C355C655C755C855CA +55CB55CE55CF55D055D555D755D855D955DA55DB55DE55E055E255E755E955ED +55EE55F055F155F455F655F855F955FA55FB55FC55FF56025603560456050000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56065607560A560B560D561056115612561356145615561656175619561A561C +561D5620562156225625562656285629562A562B562E562F5630563356355637 +5638563A563C563D563E5640564156425643564456455646564756485649564A +564B564F565056515652565356555656565A565B565D565E565F566056610000 +5663566556665667566D566E566F56705672567356745675567756785679567A +567D567E567F56805681568256835684568756885689568A568B568C568D5690 +56915692569456955696569756985699569A569B569C569D569E569F56A056A1 +56A256A456A556A656A756A856A956AA56AB56AC56AD56AE56B056B156B256B3 +56B456B556B656B856B956BA56BB56BD56BE56BF56C056C156C256C356C456C5 +56C656C756C856C956CB56CC56CD56CE56CF56D056D156D256D356D556D656D8 +56D956DC56E356E556E656E756E856E956EA56EC56EE56EF56F256F356F656F7 +56F856FB56FC57005701570257055707570B570C570D570E570F571057110000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57125713571457155716571757185719571A571B571D571E5720572157225724 +572557265727572B5731573257345735573657375738573C573D573F57415743 +57445745574657485749574B5752575357545755575657585759576257635765 +5767576C576E5770577157725774577557785779577A577D577E577F57800000 +5781578757885789578A578D578E578F57905791579457955796579757985799 +579A579C579D579E579F57A557A857AA57AC57AF57B057B157B357B557B657B7 +57B957BA57BB57BC57BD57BE57BF57C057C157C457C557C657C757C857C957CA +57CC57CD57D057D157D357D657D757DB57DC57DE57E157E257E357E557E657E7 +57E857E957EA57EB57EC57EE57F057F157F257F357F557F657F757FB57FC57FE +57FF580158035804580558085809580A580C580E580F58105812581358145816 +58175818581A581B581C581D581F5822582358255826582758285829582B582C +582D582E582F58315832583358345836583758385839583A583B583C583D0000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +583E583F584058415842584358455846584758485849584A584B584E584F5850 +585258535855585658575859585A585B585C585D585F58605861586258635864 +5866586758685869586A586D586E586F58705871587258735874587558765877 +58785879587A587B587C587D587F58825884588658875888588A588B588C0000 +588D588E588F5890589158945895589658975898589B589C589D58A058A158A2 +58A358A458A558A658A758AA58AB58AC58AD58AE58AF58B058B158B258B358B4 +58B558B658B758B858B958BA58BB58BD58BE58BF58C058C258C358C458C658C7 +58C858C958CA58CB58CC58CD58CE58CF58D058D258D358D458D658D758D858D9 +58DA58DB58DC58DD58DE58DF58E058E158E258E358E558E658E758E858E958EA +58ED58EF58F158F258F458F558F758F858FA58FB58FC58FD58FE58FF59005901 +59035905590659085909590A590B590C590E591059115912591359175918591B +591D591E592059215922592359265928592C59305932593359355936593B0000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +593D593E593F5940594359455946594A594C594D5950595259535959595B595C +595D595E595F5961596359645966596759685969596A596B596C596D596E596F +59705971597259755977597A597B597C597E597F598059855989598B598C598E +598F59905991599459955998599A599B599C599D599F59A059A159A259A60000 +59A759AC59AD59B059B159B359B459B559B659B759B859BA59BC59BD59BF59C0 +59C159C259C359C459C559C759C859C959CC59CD59CE59CF59D559D659D959DB +59DE59DF59E059E159E259E459E659E759E959EA59EB59ED59EE59EF59F059F1 +59F259F359F459F559F659F759F859FA59FC59FD59FE5A005A025A0A5A0B5A0D +5A0E5A0F5A105A125A145A155A165A175A195A1A5A1B5A1D5A1E5A215A225A24 +5A265A275A285A2A5A2B5A2C5A2D5A2E5A2F5A305A335A355A375A385A395A3A +5A3B5A3D5A3E5A3F5A415A425A435A445A455A475A485A4B5A4C5A4D5A4E5A4F +5A505A515A525A535A545A565A575A585A595A5B5A5C5A5D5A5E5A5F5A600000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A615A635A645A655A665A685A695A6B5A6C5A6D5A6E5A6F5A705A715A725A73 +5A785A795A7B5A7C5A7D5A7E5A805A815A825A835A845A855A865A875A885A89 +5A8A5A8B5A8C5A8D5A8E5A8F5A905A915A935A945A955A965A975A985A995A9C +5A9D5A9E5A9F5AA05AA15AA25AA35AA45AA55AA65AA75AA85AA95AAB5AAC0000 +5AAD5AAE5AAF5AB05AB15AB45AB65AB75AB95ABA5ABB5ABC5ABD5ABF5AC05AC3 +5AC45AC55AC65AC75AC85ACA5ACB5ACD5ACE5ACF5AD05AD15AD35AD55AD75AD9 +5ADA5ADB5ADD5ADE5ADF5AE25AE45AE55AE75AE85AEA5AEC5AED5AEE5AEF5AF0 +5AF25AF35AF45AF55AF65AF75AF85AF95AFA5AFB5AFC5AFD5AFE5AFF5B005B01 +5B025B035B045B055B065B075B085B0A5B0B5B0C5B0D5B0E5B0F5B105B115B12 +5B135B145B155B185B195B1A5B1B5B1C5B1D5B1E5B1F5B205B215B225B235B24 +5B255B265B275B285B295B2A5B2B5B2C5B2D5B2E5B2F5B305B315B335B355B36 +5B385B395B3A5B3B5B3C5B3D5B3E5B3F5B415B425B435B445B455B465B470000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B485B495B4A5B4B5B4C5B4D5B4E5B4F5B525B565B5E5B605B615B675B685B6B +5B6D5B6E5B6F5B725B745B765B775B785B795B7B5B7C5B7E5B7F5B825B865B8A +5B8D5B8E5B905B915B925B945B965B9F5BA75BA85BA95BAC5BAD5BAE5BAF5BB1 +5BB25BB75BBA5BBB5BBC5BC05BC15BC35BC85BC95BCA5BCB5BCD5BCE5BCF0000 +5BD15BD45BD55BD65BD75BD85BD95BDA5BDB5BDC5BE05BE25BE35BE65BE75BE9 +5BEA5BEB5BEC5BED5BEF5BF15BF25BF35BF45BF55BF65BF75BFD5BFE5C005C02 +5C035C055C075C085C0B5C0C5C0D5C0E5C105C125C135C175C195C1B5C1E5C1F +5C205C215C235C265C285C295C2A5C2B5C2D5C2E5C2F5C305C325C335C355C36 +5C375C435C445C465C475C4C5C4D5C525C535C545C565C575C585C5A5C5B5C5C +5C5D5C5F5C625C645C675C685C695C6A5C6B5C6C5C6D5C705C725C735C745C75 +5C765C775C785C7B5C7C5C7D5C7E5C805C835C845C855C865C875C895C8A5C8B +5C8E5C8F5C925C935C955C9D5C9E5C9F5CA05CA15CA45CA55CA65CA75CA80000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5CAA5CAE5CAF5CB05CB25CB45CB65CB95CBA5CBB5CBC5CBE5CC05CC25CC35CC5 +5CC65CC75CC85CC95CCA5CCC5CCD5CCE5CCF5CD05CD15CD35CD45CD55CD65CD7 +5CD85CDA5CDB5CDC5CDD5CDE5CDF5CE05CE25CE35CE75CE95CEB5CEC5CEE5CEF +5CF15CF25CF35CF45CF55CF65CF75CF85CF95CFA5CFC5CFD5CFE5CFF5D000000 +5D015D045D055D085D095D0A5D0B5D0C5D0D5D0F5D105D115D125D135D155D17 +5D185D195D1A5D1C5D1D5D1F5D205D215D225D235D255D285D2A5D2B5D2C5D2F +5D305D315D325D335D355D365D375D385D395D3A5D3B5D3C5D3F5D405D415D42 +5D435D445D455D465D485D495D4D5D4E5D4F5D505D515D525D535D545D555D56 +5D575D595D5A5D5C5D5E5D5F5D605D615D625D635D645D655D665D675D685D6A +5D6D5D6E5D705D715D725D735D755D765D775D785D795D7A5D7B5D7C5D7D5D7E +5D7F5D805D815D835D845D855D865D875D885D895D8A5D8B5D8C5D8D5D8E5D8F +5D905D915D925D935D945D955D965D975D985D9A5D9B5D9C5D9E5D9F5DA00000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5DA15DA25DA35DA45DA55DA65DA75DA85DA95DAA5DAB5DAC5DAD5DAE5DAF5DB0 +5DB15DB25DB35DB45DB55DB65DB85DB95DBA5DBB5DBC5DBD5DBE5DBF5DC05DC1 +5DC25DC35DC45DC65DC75DC85DC95DCA5DCB5DCC5DCE5DCF5DD05DD15DD25DD3 +5DD45DD55DD65DD75DD85DD95DDA5DDC5DDF5DE05DE35DE45DEA5DEC5DED0000 +5DF05DF55DF65DF85DF95DFA5DFB5DFC5DFF5E005E045E075E095E0A5E0B5E0D +5E0E5E125E135E175E1E5E1F5E205E215E225E235E245E255E285E295E2A5E2B +5E2C5E2F5E305E325E335E345E355E365E395E3A5E3E5E3F5E405E415E435E46 +5E475E485E495E4A5E4B5E4D5E4E5E4F5E505E515E525E535E565E575E585E59 +5E5A5E5C5E5D5E5F5E605E635E645E655E665E675E685E695E6A5E6B5E6C5E6D +5E6E5E6F5E705E715E755E775E795E7E5E815E825E835E855E885E895E8C5E8D +5E8E5E925E985E9B5E9D5EA15EA25EA35EA45EA85EA95EAA5EAB5EAC5EAE5EAF +5EB05EB15EB25EB45EBA5EBB5EBC5EBD5EBF5EC05EC15EC25EC35EC45EC50000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5EC65EC75EC85ECB5ECC5ECD5ECE5ECF5ED05ED45ED55ED75ED85ED95EDA5EDC +5EDD5EDE5EDF5EE05EE15EE25EE35EE45EE55EE65EE75EE95EEB5EEC5EED5EEE +5EEF5EF05EF15EF25EF35EF55EF85EF95EFB5EFC5EFD5F055F065F075F095F0C +5F0D5F0E5F105F125F145F165F195F1A5F1C5F1D5F1E5F215F225F235F240000 +5F285F2B5F2C5F2E5F305F325F335F345F355F365F375F385F3B5F3D5F3E5F3F +5F415F425F435F445F455F465F475F485F495F4A5F4B5F4C5F4D5F4E5F4F5F51 +5F545F595F5A5F5B5F5C5F5E5F5F5F605F635F655F675F685F6B5F6E5F6F5F72 +5F745F755F765F785F7A5F7D5F7E5F7F5F835F865F8D5F8E5F8F5F915F935F94 +5F965F9A5F9B5F9D5F9E5F9F5FA05FA25FA35FA45FA55FA65FA75FA95FAB5FAC +5FAF5FB05FB15FB25FB35FB45FB65FB85FB95FBA5FBB5FBE5FBF5FC05FC15FC2 +5FC75FC85FCA5FCB5FCE5FD35FD45FD55FDA5FDB5FDC5FDE5FDF5FE25FE35FE5 +5FE65FE85FE95FEC5FEF5FF05FF25FF35FF45FF65FF75FF95FFA5FFC60070000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60086009600B600C60106011601360176018601A601E601F602260236024602C +602D602E603060316032603360346036603760386039603A603D603E60406044 +60456046604760486049604A604C604E604F605160536054605660576058605B +605C605E605F6060606160656066606E60716072607460756077607E60800000 +608160826085608660876088608A608B608E608F609060916093609560976098 +6099609C609E60A160A260A460A560A760A960AA60AE60B060B360B560B660B7 +60B960BA60BD60BE60BF60C060C160C260C360C460C760C860C960CC60CD60CE +60CF60D060D260D360D460D660D760D960DB60DE60E160E260E360E460E560EA +60F160F260F560F760F860FB60FC60FD60FE60FF61026103610461056107610A +610B610C611061116112611361146116611761186119611B611C611D611E6121 +6122612561286129612A612C612D612E612F6130613161326133613461356136 +613761386139613A613B613C613D613E61406141614261436144614561460000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61476149614B614D614F61506152615361546156615761586159615A615B615C +615E615F6160616161636164616561666169616A616B616C616D616E616F6171 +617261736174617661786179617A617B617C617D617E617F6180618161826183 +618461856186618761886189618A618C618D618F619061916192619361950000 +6196619761986199619A619B619C619E619F61A061A161A261A361A461A561A6 +61AA61AB61AD61AE61AF61B061B161B261B361B461B561B661B861B961BA61BB +61BC61BD61BF61C061C161C361C461C561C661C761C961CC61CD61CE61CF61D0 +61D361D561D661D761D861D961DA61DB61DC61DD61DE61DF61E061E161E261E3 +61E461E561E761E861E961EA61EB61EC61ED61EE61EF61F061F161F261F361F4 +61F661F761F861F961FA61FB61FC61FD61FE6200620162026203620462056207 +6209621362146219621C621D621E622062236226622762286229622B622D622F +6230623162326235623662386239623A623B623C6242624462456246624A0000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +624F62506255625662576259625A625C625D625E625F62606261626262646265 +6268627162726274627562776278627A627B627D628162826283628562866287 +6288628B628C628D628E628F629062946299629C629D629E62A362A662A762A9 +62AA62AD62AE62AF62B062B262B362B462B662B762B862BA62BE62C062C10000 +62C362CB62CF62D162D562DD62DE62E062E162E462EA62EB62F062F262F562F8 +62F962FA62FB63006303630463056306630A630B630C630D630F631063126313 +63146315631763186319631C632663276329632C632D632E6330633163336334 +6335633663376338633B633C633E633F63406341634463476348634A63516352 +635363546356635763586359635A635B635C635D63606364636563666368636A +636B636C636F6370637263736374637563786379637C637D637E637F63816383 +638463856386638B638D639163936394639563976399639A639B639C639D639E +639F63A163A463A663AB63AF63B163B263B563B663B963BB63BD63BF63C00000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63C163C263C363C563C763C863CA63CB63CC63D163D363D463D563D763D863D9 +63DA63DB63DC63DD63DF63E263E463E563E663E763E863EB63EC63EE63EF63F0 +63F163F363F563F763F963FA63FB63FC63FE640364046406640764086409640A +640D640E6411641264156416641764186419641A641D641F6422642364240000 +6425642764286429642B642E642F643064316432643364356436643764386439 +643B643C643E6440644264436449644B644C644D644E644F6450645164536455 +645664576459645A645B645C645D645F64606461646264636464646564666468 +646A646B646C646E646F64706471647264736474647564766477647B647C647D +647E647F648064816483648664886489648A648B648C648D648E648F64906493 +649464976498649A649B649C649D649F64A064A164A264A364A564A664A764A8 +64AA64AB64AF64B164B264B364B464B664B964BB64BD64BE64BF64C164C364C4 +64C664C764C864C964CA64CB64CC64CF64D164D364D464D564D664D964DA0000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64DB64DC64DD64DF64E064E164E364E564E764E864E964EA64EB64EC64ED64EE +64EF64F064F164F264F364F464F564F664F764F864F964FA64FB64FC64FD64FE +64FF65016502650365046505650665076508650A650B650C650D650E650F6510 +6511651365146515651665176519651A651B651C651D651E651F652065210000 +6522652365246526652765286529652A652C652D65306531653265336537653A +653C653D6540654165426543654465466547654A654B654D654E655065526553 +655465576558655A655C655F6560656165646565656765686569656A656D656E +656F657165736575657665786579657A657B657C657D657E657F658065816582 +658365846585658665886589658A658D658E658F65926594659565966598659A +659D659E65A065A265A365A665A865AA65AC65AE65B165B265B365B465B565B6 +65B765B865BA65BB65BE65BF65C065C265C765C865C965CA65CD65D065D165D3 +65D465D565D865D965DA65DB65DC65DD65DE65DF65E165E365E465EA65EB0000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65F265F365F465F565F865F965FB65FC65FD65FE65FF66016604660566076608 +6609660B660D661066116612661666176618661A661B661C661E662166226623 +662466266629662A662B662C662E663066326633663766386639663A663B663D +663F66406642664466456646664766486649664A664D664E6650665166580000 +6659665B665C665D665E666066626663666566676669666A666B666C666D6671 +66726673667566786679667B667C667D667F6680668166836685668666886689 +668A668B668D668E668F6690669266936694669566986699669A669B669C669E +669F66A066A166A266A366A466A566A666A966AA66AB66AC66AD66AF66B066B1 +66B266B366B566B666B766B866BA66BB66BC66BD66BF66C066C166C266C366C4 +66C566C666C766C866C966CA66CB66CC66CD66CE66CF66D066D166D266D366D4 +66D566D666D766D866DA66DE66DF66E066E166E266E366E466E566E766E866EA +66EB66EC66ED66EE66EF66F166F566F666F866FA66FB66FD6701670267030000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6704670567066707670C670E670F671167126713671667186719671A671C671E +67206721672267236724672567276729672E6730673267336736673767386739 +673B673C673E673F6741674467456747674A674B674D67526754675567576758 +6759675A675B675D67626763676467666767676B676C676E6771677467760000 +67786779677A677B677D678067826783678567866788678A678C678D678E678F +679167926793679467966799679B679F67A067A167A467A667A967AC67AE67B1 +67B267B467B967BA67BB67BC67BD67BE67BF67C067C267C567C667C767C867C9 +67CA67CB67CC67CD67CE67D567D667D767DB67DF67E167E367E467E667E767E8 +67EA67EB67ED67EE67F267F567F667F767F867F967FA67FB67FC67FE68016802 +680368046806680D681068126814681568186819681A681B681C681E681F6820 +6822682368246825682668276828682B682C682D682E682F6830683168346835 +6836683A683B683F6847684B684D684F68526856685768586859685A685B0000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +685C685D685E685F686A686C686D686E686F6870687168726873687568786879 +687A687B687C687D687E687F688068826884688768886889688A688B688C688D +688E68906891689268946895689668986899689A689B689C689D689E689F68A0 +68A168A368A468A568A968AA68AB68AC68AE68B168B268B468B668B768B80000 +68B968BA68BB68BC68BD68BE68BF68C168C368C468C568C668C768C868CA68CC +68CE68CF68D068D168D368D468D668D768D968DB68DC68DD68DE68DF68E168E2 +68E468E568E668E768E868E968EA68EB68EC68ED68EF68F268F368F468F668F7 +68F868FB68FD68FE68FF69006902690369046906690769086909690A690C690F +69116913691469156916691769186919691A691B691C691D691E692169226923 +69256926692769286929692A692B692C692E692F693169326933693569366937 +6938693A693B693C693E694069416943694469456946694769486949694A694B +694C694D694E694F69506951695269536955695669586959695B695C695F0000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6961696269646965696769686969696A696C696D696F69706972697369746975 +6976697A697B697D697E697F698169836985698A698B698C698E698F69906991 +69926993699669976999699A699D699E699F69A069A169A269A369A469A569A6 +69A969AA69AC69AE69AF69B069B269B369B569B669B869B969BA69BC69BD0000 +69BE69BF69C069C269C369C469C569C669C769C869C969CB69CD69CF69D169D2 +69D369D569D669D769D869D969DA69DC69DD69DE69E169E269E369E469E569E6 +69E769E869E969EA69EB69EC69EE69EF69F069F169F369F469F569F669F769F8 +69F969FA69FB69FC69FE6A006A016A026A036A046A056A066A076A086A096A0B +6A0C6A0D6A0E6A0F6A106A116A126A136A146A156A166A196A1A6A1B6A1C6A1D +6A1E6A206A226A236A246A256A266A276A296A2B6A2C6A2D6A2E6A306A326A33 +6A346A366A376A386A396A3A6A3B6A3C6A3F6A406A416A426A436A456A466A48 +6A496A4A6A4B6A4C6A4D6A4E6A4F6A516A526A536A546A556A566A576A5A0000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5C6A5D6A5E6A5F6A606A626A636A646A666A676A686A696A6A6A6B6A6C6A6D +6A6E6A6F6A706A726A736A746A756A766A776A786A7A6A7B6A7D6A7E6A7F6A81 +6A826A836A856A866A876A886A896A8A6A8B6A8C6A8D6A8F6A926A936A946A95 +6A966A986A996A9A6A9B6A9C6A9D6A9E6A9F6AA16AA26AA36AA46AA56AA60000 +6AA76AA86AAA6AAD6AAE6AAF6AB06AB16AB26AB36AB46AB56AB66AB76AB86AB9 +6ABA6ABB6ABC6ABD6ABE6ABF6AC06AC16AC26AC36AC46AC56AC66AC76AC86AC9 +6ACA6ACB6ACC6ACD6ACE6ACF6AD06AD16AD26AD36AD46AD56AD66AD76AD86AD9 +6ADA6ADB6ADC6ADD6ADE6ADF6AE06AE16AE26AE36AE46AE56AE66AE76AE86AE9 +6AEA6AEB6AEC6AED6AEE6AEF6AF06AF16AF26AF36AF46AF56AF66AF76AF86AF9 +6AFA6AFB6AFC6AFD6AFE6AFF6B006B016B026B036B046B056B066B076B086B09 +6B0A6B0B6B0C6B0D6B0E6B0F6B106B116B126B136B146B156B166B176B186B19 +6B1A6B1B6B1C6B1D6B1E6B1F6B256B266B286B296B2A6B2B6B2C6B2D6B2E0000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B2F6B306B316B336B346B356B366B386B3B6B3C6B3D6B3F6B406B416B426B44 +6B456B486B4A6B4B6B4D6B4E6B4F6B506B516B526B536B546B556B566B576B58 +6B5A6B5B6B5C6B5D6B5E6B5F6B606B616B686B696B6B6B6C6B6D6B6E6B6F6B70 +6B716B726B736B746B756B766B776B786B7A6B7D6B7E6B7F6B806B856B880000 +6B8C6B8E6B8F6B906B916B946B956B976B986B996B9C6B9D6B9E6B9F6BA06BA2 +6BA36BA46BA56BA66BA76BA86BA96BAB6BAC6BAD6BAE6BAF6BB06BB16BB26BB6 +6BB86BB96BBA6BBB6BBC6BBD6BBE6BC06BC36BC46BC66BC76BC86BC96BCA6BCC +6BCE6BD06BD16BD86BDA6BDC6BDD6BDE6BDF6BE06BE26BE36BE46BE56BE66BE7 +6BE86BE96BEC6BED6BEE6BF06BF16BF26BF46BF66BF76BF86BFA6BFB6BFC6BFE +6BFF6C006C016C026C036C046C086C096C0A6C0B6C0C6C0E6C126C176C1C6C1D +6C1E6C206C236C256C2B6C2C6C2D6C316C336C366C376C396C3A6C3B6C3C6C3E +6C3F6C436C446C456C486C4B6C4C6C4D6C4E6C4F6C516C526C536C566C580000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C596C5A6C626C636C656C666C676C6B6C6C6C6D6C6E6C6F6C716C736C756C77 +6C786C7A6C7B6C7C6C7F6C806C846C876C8A6C8B6C8D6C8E6C916C926C956C96 +6C976C986C9A6C9C6C9D6C9E6CA06CA26CA86CAC6CAF6CB06CB46CB56CB66CB7 +6CBA6CC06CC16CC26CC36CC66CC76CC86CCB6CCD6CCE6CCF6CD16CD26CD80000 +6CD96CDA6CDC6CDD6CDF6CE46CE66CE76CE96CEC6CED6CF26CF46CF96CFF6D00 +6D026D036D056D066D086D096D0A6D0D6D0F6D106D116D136D146D156D166D18 +6D1C6D1D6D1F6D206D216D226D236D246D266D286D296D2C6D2D6D2F6D306D34 +6D366D376D386D3A6D3F6D406D426D446D496D4C6D506D556D566D576D586D5B +6D5D6D5F6D616D626D646D656D676D686D6B6D6C6D6D6D706D716D726D736D75 +6D766D796D7A6D7B6D7D6D7E6D7F6D806D816D836D846D866D876D8A6D8B6D8D +6D8F6D906D926D966D976D986D996D9A6D9C6DA26DA56DAC6DAD6DB06DB16DB3 +6DB46DB66DB76DB96DBA6DBB6DBC6DBD6DBE6DC16DC26DC36DC86DC96DCA0000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DCD6DCE6DCF6DD06DD26DD36DD46DD56DD76DDA6DDB6DDC6DDF6DE26DE36DE5 +6DE76DE86DE96DEA6DED6DEF6DF06DF26DF46DF56DF66DF86DFA6DFD6DFE6DFF +6E006E016E026E036E046E066E076E086E096E0B6E0F6E126E136E156E186E19 +6E1B6E1C6E1E6E1F6E226E266E276E286E2A6E2C6E2E6E306E316E336E350000 +6E366E376E396E3B6E3C6E3D6E3E6E3F6E406E416E426E456E466E476E486E49 +6E4A6E4B6E4C6E4F6E506E516E526E556E576E596E5A6E5C6E5D6E5E6E606E61 +6E626E636E646E656E666E676E686E696E6A6E6C6E6D6E6F6E706E716E726E73 +6E746E756E766E776E786E796E7A6E7B6E7C6E7D6E806E816E826E846E876E88 +6E8A6E8B6E8C6E8D6E8E6E916E926E936E946E956E966E976E996E9A6E9B6E9D +6E9E6EA06EA16EA36EA46EA66EA86EA96EAB6EAC6EAD6EAE6EB06EB36EB56EB8 +6EB96EBC6EBE6EBF6EC06EC36EC46EC56EC66EC86EC96ECA6ECC6ECD6ECE6ED0 +6ED26ED66ED86ED96EDB6EDC6EDD6EE36EE76EEA6EEB6EEC6EED6EEE6EEF0000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6EF06EF16EF26EF36EF56EF66EF76EF86EFA6EFB6EFC6EFD6EFE6EFF6F006F01 +6F036F046F056F076F086F0A6F0B6F0C6F0D6F0E6F106F116F126F166F176F18 +6F196F1A6F1B6F1C6F1D6F1E6F1F6F216F226F236F256F266F276F286F2C6F2E +6F306F326F346F356F376F386F396F3A6F3B6F3C6F3D6F3F6F406F416F420000 +6F436F446F456F486F496F4A6F4C6F4E6F4F6F506F516F526F536F546F556F56 +6F576F596F5A6F5B6F5D6F5F6F606F616F636F646F656F676F686F696F6A6F6B +6F6C6F6F6F706F716F736F756F766F776F796F7B6F7D6F7E6F7F6F806F816F82 +6F836F856F866F876F8A6F8B6F8F6F906F916F926F936F946F956F966F976F98 +6F996F9A6F9B6F9D6F9E6F9F6FA06FA26FA36FA46FA56FA66FA86FA96FAA6FAB +6FAC6FAD6FAE6FAF6FB06FB16FB26FB46FB56FB76FB86FBA6FBB6FBC6FBD6FBE +6FBF6FC16FC36FC46FC56FC66FC76FC86FCA6FCB6FCC6FCD6FCE6FCF6FD06FD3 +6FD46FD56FD66FD76FD86FD96FDA6FDB6FDC6FDD6FDF6FE26FE36FE46FE50000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FE66FE76FE86FE96FEA6FEB6FEC6FED6FF06FF16FF26FF36FF46FF56FF66FF7 +6FF86FF96FFA6FFB6FFC6FFD6FFE6FFF70007001700270037004700570067007 +70087009700A700B700C700D700E700F70107012701370147015701670177018 +7019701C701D701E701F702070217022702470257026702770287029702A0000 +702B702C702D702E702F70307031703270337034703670377038703A703B703C +703D703E703F7040704170427043704470457046704770487049704A704B704D +704E7050705170527053705470557056705770587059705A705B705C705D705F +7060706170627063706470657066706770687069706A706E7071707270737074 +70777079707A707B707D7081708270837084708670877088708B708C708D708F +70907091709370977098709A709B709E709F70A070A170A270A370A470A570A6 +70A770A870A970AA70B070B270B470B570B670BA70BE70BF70C470C570C670C7 +70C970CB70CC70CD70CE70CF70D070D170D270D370D470D570D670D770DA0000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70DC70DD70DE70E070E170E270E370E570EA70EE70F070F170F270F370F470F5 +70F670F870FA70FB70FC70FE70FF710071017102710371047105710671077108 +710B710C710D710E710F7111711271147117711B711C711D711E711F71207121 +7122712371247125712771287129712A712B712C712D712E7132713371340000 +7135713771387139713A713B713C713D713E713F714071417142714371447146 +714771487149714B714D714F7150715171527153715471557156715771587159 +715A715B715D715F716071617162716371657169716A716B716C716D716F7170 +717171747175717671777179717B717C717E717F718071817182718371857186 +718771887189718B718C718D718E7190719171927193719571967197719A719B +719C719D719E71A171A271A371A471A571A671A771A971AA71AB71AD71AE71AF +71B071B171B271B471B671B771B871BA71BB71BC71BD71BE71BF71C071C171C2 +71C471C571C671C771C871C971CA71CB71CC71CD71CF71D071D171D271D30000 +A0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71D671D771D871D971DA71DB71DC71DD71DE71DF71E171E271E371E471E671E8 +71E971EA71EB71EC71ED71EF71F071F171F271F371F471F571F671F771F871FA +71FB71FC71FD71FE71FF720072017202720372047205720772087209720A720B +720C720D720E720F7210721172127213721472157216721772187219721A0000 +721B721C721E721F722072217222722372247225722672277229722B722D722E +722F723272337234723A723C723E72407241724272437244724572467249724A +724B724E724F7250725172537254725572577258725A725C725E726072637264 +72657268726A726B726C726D7270727172737274727672777278727B727C727D +7282728372857286728772887289728C728E7290729172937294729572967297 +72987299729A729B729C729D729E72A072A172A272A372A472A572A672A772A8 +72A972AA72AB72AE72B172B272B372B572BA72BB72BC72BD72BE72BF72C072C5 +72C672C772C972CA72CB72CC72CF72D172D372D472D572D672D872DA72DB0000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B702C902C700A8300330052014FF5E2016202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +FE35FE36FE39FE3AFE3FFE40FE3DFE3EFE41FE42FE43FE4400000000FE3BFE3C +FE37FE38FE310000FE33FE340000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +02CA02CB02D920132015202520352105210921962197219821992215221F2223 +22522266226722BF2550255125522553255425552556255725582559255A255B +255C255D255E255F2560256125622563256425652566256725682569256A256B +256C256D256E256F257025712572257325812582258325842585258625870000 +25882589258A258B258C258D258E258F25932594259525BC25BD25E225E325E4 +25E5260922953012301D301E0000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA02510000014401480000 +0261000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30213022302330243025302630273028302932A3338E338F339C339D339E33A1 +33C433CE33D133D233D5FE30FFE2FFE400002121323100002010000000000000 +30FC309B309C30FD30FE3006309D309EFE49FE4AFE4BFE4CFE4DFE4EFE4FFE50 +FE51FE52FE54FE55FE56FE57FE59FE5AFE5BFE5CFE5DFE5EFE5FFE60FE610000 +FE62FE63FE64FE65FE66FE68FE69FE6AFE6B0000000000000000000000000000 +0000000000000000000000003007000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72DC72DD72DF72E272E372E472E572E672E772EA72EB72F572F672F972FD72FE +72FF73007302730473057306730773087309730B730C730D730F731073117312 +731473187319731A731F732073237324732673277328732D732F733073327333 +73357336733A733B733C733D7340734173427343734473457346734773480000 +7349734A734B734C734E734F7351735373547355735673587359735A735B735C +735D735E735F736173627363736473657366736773687369736A736B736E7370 +7371000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73727373737473757376737773787379737A737B737C737D737F738073817382 +7383738573867388738A738C738D738F73907392739373947395739773987399 +739A739C739D739E73A073A173A373A473A573A673A773A873AA73AC73AD73B1 +73B473B573B673B873B973BC73BD73BE73BF73C173C373C473C573C673C70000 +73CB73CC73CE73D273D373D473D573D673D773D873DA73DB73DC73DD73DF73E1 +73E273E373E473E673E873EA73EB73EC73EE73EF73F073F173F373F473F573F6 +73F7000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73F873F973FA73FB73FC73FD73FE73FF740074017402740474077408740B740C +740D740E741174127413741474157416741774187419741C741D741E741F7420 +74217423742474277429742B742D742F74317432743774387439743A743B743D +743E743F744074427443744474457446744774487449744A744B744C744D0000 +744E744F7450745174527453745474567458745D746074617462746374647465 +7466746774687469746A746B746C746E746F7471747274737474747574787479 +747A000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747B747C747D747F748274847485748674887489748A748C748D748F74917492 +7493749474957496749774987499749A749B749D749F74A074A174A274A374A4 +74A574A674AA74AB74AC74AD74AE74AF74B074B174B274B374B474B574B674B7 +74B874B974BB74BC74BD74BE74BF74C074C174C274C374C474C574C674C70000 +74C874C974CA74CB74CC74CD74CE74CF74D074D174D374D474D574D674D774D8 +74D974DA74DB74DD74DF74E174E574E774E874E974EA74EB74EC74ED74F074F1 +74F2000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74F374F574F874F974FA74FB74FC74FD74FE7500750175027503750575067507 +75087509750A750B750C750E751075127514751575167517751B751D751E7520 +752175227523752475267527752A752E753475367539753C753D753F75417542 +75437544754675477549754A754D755075517552755375557556755775580000 +755D755E755F75607561756275637564756775687569756B756C756D756E756F +757075717573757575767577757A757B757C757D757E75807581758275847585 +7587000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75887589758A758C758D758E7590759375957598759B759C759E75A275A675A7 +75A875A975AA75AD75B675B775BA75BB75BF75C075C175C675CB75CC75CE75CF +75D075D175D375D775D975DA75DC75DD75DF75E075E175E575E975EC75ED75EE +75EF75F275F375F575F675F775F875FA75FB75FD75FE76027604760676070000 +76087609760B760D760E760F76117612761376147616761A761C761D761E7621 +762376277628762C762E762F76317632763676377639763A763B763D76417642 +7644000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76457646764776487649764A764B764E764F7650765176527653765576577658 +7659765A765B765D765F766076617662766476657666766776687669766A766C +766D766E767076717672767376747675767676777679767A767C767F76807681 +768376857689768A768C768D768F769076927694769576977698769A769B0000 +769C769D769E769F76A076A176A276A376A576A676A776A876A976AA76AB76AC +76AD76AF76B076B376B576B676B776B876B976BA76BB76BC76BD76BE76C076C1 +76C3554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76C476C776C976CB76CC76D376D576D976DA76DC76DD76DE76E076E176E276E3 +76E476E676E776E876E976EA76EB76EC76ED76F076F376F576F676F776FA76FB +76FD76FF77007702770377057706770A770C770E770F77107711771277137714 +7715771677177718771B771C771D771E77217723772477257727772A772B0000 +772C772E773077317732773377347739773B773D773E773F7742774477457746 +77487749774A774B774C774D774E774F77527753775477557756775777587759 +775C858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +775D775E775F7760776477677769776A776D776E776F77707771777277737774 +7775777677777778777A777B777C7781778277837786778777887789778A778B +778F77907793779477957796779777987799779A779B779C779D779E77A177A3 +77A477A677A877AB77AD77AE77AF77B177B277B477B677B777B877B977BA0000 +77BC77BE77C077C177C277C377C477C577C677C777C877C977CA77CB77CC77CE +77CF77D077D177D277D377D477D577D677D877D977DA77DD77DE77DF77E077E1 +77E475C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77E677E877EA77EF77F077F177F277F477F577F777F977FA77FB77FC78037804 +7805780678077808780A780B780E780F7810781378157819781B781E78207821 +782278247828782A782B782E782F78317832783378357836783D783F78417842 +78437844784678487849784A784B784D784F78517853785478587859785A0000 +785B785C785E785F7860786178627863786478657866786778687869786F7870 +78717872787378747875787678787879787A787B787D787E787F788078817882 +7883573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7884788578867888788A788B788F789078927894789578967899789D789E78A0 +78A278A478A678A878A978AA78AB78AC78AD78AE78AF78B578B678B778B878BA +78BB78BC78BD78BF78C078C278C378C478C678C778C878CC78CD78CE78CF78D1 +78D278D378D678D778D878DA78DB78DC78DD78DE78DF78E078E178E278E30000 +78E478E578E678E778E978EA78EB78ED78EE78EF78F078F178F378F578F678F8 +78F978FB78FC78FD78FE78FF79007902790379047906790779087909790A790B +790C784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +790D790E790F791079117912791479157916791779187919791A791B791C791D +791F792079217922792379257926792779287929792A792B792C792D792E792F +793079317932793379357936793779387939793D793F79427943794479457947 +794A794B794C794D794E794F7950795179527954795579587959796179630000 +796479667969796A796B796C796E79707971797279737974797579767979797B +797C797D797E797F798279837986798779887989798B798C798D798E79907991 +79926020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7993799479957996799779987999799B799C799D799E799F79A079A179A279A3 +79A479A579A679A879A979AA79AB79AC79AD79AE79AF79B079B179B279B479B5 +79B679B779B879BC79BF79C279C479C579C779C879CA79CC79CE79CF79D079D3 +79D479D679D779D979DA79DB79DC79DD79DE79E079E179E279E579E879EA0000 +79EC79EE79F179F279F379F479F579F679F779F979FA79FC79FE79FF7A017A04 +7A057A077A087A097A0A7A0C7A0F7A107A117A127A137A157A167A187A197A1B +7A1C4E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1D7A1F7A217A227A247A257A267A277A287A297A2A7A2B7A2C7A2D7A2E7A2F +7A307A317A327A347A357A367A387A3A7A3E7A407A417A427A437A447A457A47 +7A487A497A4A7A4B7A4C7A4D7A4E7A4F7A507A527A537A547A557A567A587A59 +7A5A7A5B7A5C7A5D7A5E7A5F7A607A617A627A637A647A657A667A677A680000 +7A697A6A7A6B7A6C7A6D7A6E7A6F7A717A727A737A757A7B7A7C7A7D7A7E7A82 +7A857A877A897A8A7A8B7A8C7A8E7A8F7A907A937A947A997A9A7A9B7A9E7AA1 +7AA28D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7AA37AA47AA77AA97AAA7AAB7AAE7AAF7AB07AB17AB27AB47AB57AB67AB77AB8 +7AB97ABA7ABB7ABC7ABD7ABE7AC07AC17AC27AC37AC47AC57AC67AC77AC87AC9 +7ACA7ACC7ACD7ACE7ACF7AD07AD17AD27AD37AD47AD57AD77AD87ADA7ADB7ADC +7ADD7AE17AE27AE47AE77AE87AE97AEA7AEB7AEC7AEE7AF07AF17AF27AF30000 +7AF47AF57AF67AF77AF87AFB7AFC7AFE7B007B017B027B057B077B097B0C7B0D +7B0E7B107B127B137B167B177B187B1A7B1C7B1D7B1F7B217B227B237B277B29 +7B2D6D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B2F7B307B327B347B357B367B377B397B3B7B3D7B3F7B407B417B427B437B44 +7B467B487B4A7B4D7B4E7B537B557B577B597B5C7B5E7B5F7B617B637B647B65 +7B667B677B687B697B6A7B6B7B6C7B6D7B6F7B707B737B747B767B787B7A7B7C +7B7D7B7F7B817B827B837B847B867B877B887B897B8A7B8B7B8C7B8E7B8F0000 +7B917B927B937B967B987B997B9A7B9B7B9E7B9F7BA07BA37BA47BA57BAE7BAF +7BB07BB27BB37BB57BB67BB77BB97BBA7BBB7BBC7BBD7BBE7BBF7BC07BC27BC3 +7BC457C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7BC57BC87BC97BCA7BCB7BCD7BCE7BCF7BD07BD27BD47BD57BD67BD77BD87BDB +7BDC7BDE7BDF7BE07BE27BE37BE47BE77BE87BE97BEB7BEC7BED7BEF7BF07BF2 +7BF37BF47BF57BF67BF87BF97BFA7BFB7BFD7BFF7C007C017C027C037C047C05 +7C067C087C097C0A7C0D7C0E7C107C117C127C137C147C157C177C187C190000 +7C1A7C1B7C1C7C1D7C1E7C207C217C227C237C247C257C287C297C2B7C2C7C2D +7C2E7C2F7C307C317C327C337C347C357C367C377C397C3A7C3B7C3C7C3D7C3E +7C429AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7C437C447C457C467C477C487C497C4A7C4B7C4C7C4E7C4F7C507C517C527C53 +7C547C557C567C577C587C597C5A7C5B7C5C7C5D7C5E7C5F7C607C617C627C63 +7C647C657C667C677C687C697C6A7C6B7C6C7C6D7C6E7C6F7C707C717C727C75 +7C767C777C787C797C7A7C7E7C7F7C807C817C827C837C847C857C867C870000 +7C887C8A7C8B7C8C7C8D7C8E7C8F7C907C937C947C967C997C9A7C9B7CA07CA1 +7CA37CA67CA77CA87CA97CAB7CAC7CAD7CAF7CB07CB47CB57CB67CB77CB87CBA +7CBB5F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CBF7CC07CC27CC37CC47CC67CC97CCB7CCE7CCF7CD07CD17CD27CD37CD47CD8 +7CDA7CDB7CDD7CDE7CE17CE27CE37CE47CE57CE67CE77CE97CEA7CEB7CEC7CED +7CEE7CF07CF17CF27CF37CF47CF57CF67CF77CF97CFA7CFC7CFD7CFE7CFF7D00 +7D017D027D037D047D057D067D077D087D097D0B7D0C7D0D7D0E7D0F7D100000 +7D117D127D137D147D157D167D177D187D197D1A7D1B7D1C7D1D7D1E7D1F7D21 +7D237D247D257D267D287D297D2A7D2C7D2D7D2E7D307D317D327D337D347D35 +7D36808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D377D387D397D3A7D3B7D3C7D3D7D3E7D3F7D407D417D427D437D447D457D46 +7D477D487D497D4A7D4B7D4C7D4D7D4E7D4F7D507D517D527D537D547D557D56 +7D577D587D597D5A7D5B7D5C7D5D7D5E7D5F7D607D617D627D637D647D657D66 +7D677D687D697D6A7D6B7D6C7D6D7D6F7D707D717D727D737D747D757D760000 +7D787D797D7A7D7B7D7C7D7D7D7E7D7F7D807D817D827D837D847D857D867D87 +7D887D897D8A7D8B7D8C7D8D7D8E7D8F7D907D917D927D937D947D957D967D97 +7D98506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D997D9A7D9B7D9C7D9D7D9E7D9F7DA07DA17DA27DA37DA47DA57DA77DA87DA9 +7DAA7DAB7DAC7DAD7DAF7DB07DB17DB27DB37DB47DB57DB67DB77DB87DB97DBA +7DBB7DBC7DBD7DBE7DBF7DC07DC17DC27DC37DC47DC57DC67DC77DC87DC97DCA +7DCB7DCC7DCD7DCE7DCF7DD07DD17DD27DD37DD47DD57DD67DD77DD87DD90000 +7DDA7DDB7DDC7DDD7DDE7DDF7DE07DE17DE27DE37DE47DE57DE67DE77DE87DE9 +7DEA7DEB7DEC7DED7DEE7DEF7DF07DF17DF27DF37DF47DF57DF67DF77DF87DF9 +7DFA5C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7DFB7DFC7DFD7DFE7DFF7E007E017E027E037E047E057E067E077E087E097E0A +7E0B7E0C7E0D7E0E7E0F7E107E117E127E137E147E157E167E177E187E197E1A +7E1B7E1C7E1D7E1E7E1F7E207E217E227E237E247E257E267E277E287E297E2A +7E2B7E2C7E2D7E2E7E2F7E307E317E327E337E347E357E367E377E387E390000 +7E3A7E3C7E3D7E3E7E3F7E407E427E437E447E457E467E487E497E4A7E4B7E4C +7E4D7E4E7E4F7E507E517E527E537E547E557E567E577E587E597E5A7E5B7E5C +7E5D4FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E5E7E5F7E607E617E627E637E647E657E667E677E687E697E6A7E6B7E6C7E6D +7E6E7E6F7E707E717E727E737E747E757E767E777E787E797E7A7E7B7E7C7E7D +7E7E7E7F7E807E817E837E847E857E867E877E887E897E8A7E8B7E8C7E8D7E8E +7E8F7E907E917E927E937E947E957E967E977E987E997E9A7E9C7E9D7E9E0000 +7EAE7EB47EBB7EBC7ED67EE47EEC7EF97F0A7F107F1E7F377F397F3B7F3C7F3D +7F3E7F3F7F407F417F437F467F477F487F497F4A7F4B7F4C7F4D7F4E7F4F7F52 +7F53998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F567F597F5B7F5C7F5D7F5E7F607F637F647F657F667F677F6B7F6C7F6D7F6F +7F707F737F757F767F777F787F7A7F7B7F7C7F7D7F7F7F807F827F837F847F85 +7F867F877F887F897F8B7F8D7F8F7F907F917F927F937F957F967F977F987F99 +7F9B7F9C7FA07FA27FA37FA57FA67FA87FA97FAA7FAB7FAC7FAD7FAE7FB10000 +7FB37FB47FB57FB67FB77FBA7FBB7FBE7FC07FC27FC37FC47FC67FC77FC87FC9 +7FCB7FCD7FCF7FD07FD17FD27FD37FD67FD77FD97FDA7FDB7FDC7FDD7FDE7FE2 +7FE375E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7FE47FE77FE87FEA7FEB7FEC7FED7FEF7FF27FF47FF57FF67FF77FF87FF97FFA +7FFD7FFE7FFF8002800780088009800A800E800F80118013801A801B801D801E +801F802180238024802B802C802D802E802F8030803280348039803A803C803E +8040804180448045804780488049804E804F8050805180538055805680570000 +8059805B805C805D805E805F806080618062806380648065806680678068806B +806C806D806E806F807080728073807480758076807780788079807A807B807C +807D9686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +807E8081808280858088808A808D808E808F8090809180928094809580978099 +809E80A380A680A780A880AC80B080B380B580B680B880B980BB80C580C780C8 +80C980CA80CB80CF80D080D180D280D380D480D580D880DF80E080E280E380E6 +80EE80F580F780F980FB80FE80FF8100810181038104810581078108810B0000 +810C811581178119811B811C811D811F81208121812281238124812581268127 +81288129812A812B812D812E813081338134813581378139813A813B813C813D +813F8C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81408141814281438144814581478149814D814E814F8152815681578158815B +815C815D815E815F816181628163816481668168816A816B816C816F81728173 +81758176817781788181818381848185818681878189818B818C818D818E8190 +8192819381948195819681978199819A819E819F81A081A181A281A481A50000 +81A781A981AB81AC81AD81AE81AF81B081B181B281B481B581B681B781B881B9 +81BC81BD81BE81BF81C481C581C781C881C981CB81CD81CE81CF81D081D181D2 +81D3647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81D481D581D681D781D881D981DA81DB81DC81DD81DE81DF81E081E181E281E4 +81E581E681E881E981EB81EE81EF81F081F181F281F581F681F781F881F981FA +81FD81FF8203820782088209820A820B820E820F821182138215821682178218 +8219821A821D822082248225822682278229822E8232823A823C823D823F0000 +8240824182428243824582468248824A824C824D824E82508251825282538254 +8255825682578259825B825C825D825E82608261826282638264826582668267 +826962E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +826A826B826C826D82718275827682778278827B827C82808281828382858286 +82878289828C82908293829482958296829A829B829E82A082A282A382A782B2 +82B582B682BA82BB82BC82BF82C082C282C382C582C682C982D082D682D982DA +82DD82E282E782E882E982EA82EC82ED82EE82F082F282F382F582F682F80000 +82FA82FC82FD82FE82FF8300830A830B830D831083128313831683188319831D +831E831F83208321832283238324832583268329832A832E833083328337833B +833D5564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +833E833F83418342834483458348834A834B834C834D834E8353835583568357 +83588359835D836283708371837283738374837583768379837A837E837F8380 +838183828383838483878388838A838B838C838D838F83908391839483958396 +83978399839A839D839F83A183A283A383A483A583A683A783AC83AD83AE0000 +83AF83B583BB83BE83BF83C283C383C483C683C883C983CB83CD83CE83D083D1 +83D283D383D583D783D983DA83DB83DE83E283E383E483E683E783E883EB83EC +83ED60706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +83EE83EF83F383F483F583F683F783FA83FB83FC83FE83FF8400840284058407 +84088409840A84108412841384148415841684178419841A841B841E841F8420 +8421842284238429842A842B842C842D842E842F843084328433843484358436 +84378439843A843B843E843F8440844184428443844484458447844884490000 +844A844B844C844D844E844F8450845284538454845584568458845D845E845F +8460846284648465846684678468846A846E846F84708472847484778479847B +847C53D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +847D847E847F848084818483848484858486848A848D848F8490849184928493 +8494849584968498849A849B849D849E849F84A084A284A384A484A584A684A7 +84A884A984AA84AB84AC84AD84AE84B084B184B384B584B684B784BB84BC84BE +84C084C284C384C584C684C784C884CB84CC84CE84CF84D284D484D584D70000 +84D884D984DA84DB84DC84DE84E184E284E484E784E884E984EA84EB84ED84EE +84EF84F184F284F384F484F584F684F784F884F984FA84FB84FD84FE85008501 +85024F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8503850485058506850785088509850A850B850D850E850F8510851285148515 +851685188519851B851C851D851E852085228523852485258526852785288529 +852A852D852E852F8530853185328533853485358536853E853F854085418542 +8544854585468547854B854C854D854E854F8550855185528553855485550000 +85578558855A855B855C855D855F85608561856285638565856685678569856A +856B856C856D856E856F8570857185738575857685778578857C857D857F8580 +8581770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85828583858685888589858A858B858C858D858E859085918592859385948595 +8596859785988599859A859D859E859F85A085A185A285A385A585A685A785A9 +85AB85AC85AD85B185B285B385B485B585B685B885BA85BB85BC85BD85BE85BF +85C085C285C385C485C585C685C785C885CA85CB85CC85CD85CE85D185D20000 +85D485D685D785D885D985DA85DB85DD85DE85DF85E085E185E285E385E585E6 +85E785E885EA85EB85EC85ED85EE85EF85F085F185F285F385F485F585F685F7 +85F860555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85F985FA85FC85FD85FE860086018602860386048606860786088609860A860B +860C860D860E860F86108612861386148615861786188619861A861B861C861D +861E861F86208621862286238624862586268628862A862B862C862D862E862F +863086318632863386348635863686378639863A863B863D863E863F86400000 +864186428643864486458646864786488649864A864B864C8652865386558656 +865786588659865B865C865D865F866086618663866486658666866786688669 +866A736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +866D866F86708672867386748675867686778678868386848685868686878688 +8689868E868F86908691869286948696869786988699869A869B869E869F86A0 +86A186A286A586A686AB86AD86AE86B286B386B786B886B986BB86BC86BD86BE +86BF86C186C286C386C586C886CC86CD86D286D386D586D686D786DA86DC0000 +86DD86E086E186E286E386E586E686E786E886EA86EB86EC86EF86F586F686F7 +86FA86FB86FC86FD86FF8701870487058706870B870C870E870F871087118714 +87166C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8719871B871D871F87208724872687278728872A872B872C872D872F87308732 +87338735873687388739873A873C873D8740874187428743874487458746874A +874B874D874F8750875187528754875587568758875A875B875C875D875E875F +876187628766876787688769876A876B876C876D876F87718772877387750000 +877787788779877A877F878087818784878687878789878A878C878E878F8790 +8791879287948795879687988799879A879B879C879D879E87A087A187A287A3 +87A45DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87A587A687A787A987AA87AE87B087B187B287B487B687B787B887B987BB87BC +87BE87BF87C187C287C387C487C587C787C887C987CC87CD87CE87CF87D087D4 +87D587D687D787D887D987DA87DC87DD87DE87DF87E187E287E387E487E687E7 +87E887E987EB87EC87ED87EF87F087F187F287F387F487F587F687F787F80000 +87FA87FB87FC87FD87FF880088018802880488058806880788088809880B880C +880D880E880F8810881188128814881788188819881A881C881D881E881F8820 +88237A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +882488258826882788288829882A882B882C882D882E882F8830883188338834 +8835883688378838883A883B883D883E883F8841884288438846884788488849 +884A884B884E884F8850885188528853885588568858885A885B885C885D885E +885F886088668867886A886D886F8871887388748875887688788879887A0000 +887B887C88808883888688878889888A888C888E888F88908891889388948895 +889788988899889A889B889D889E889F88A088A188A388A588A688A788A888A9 +88AA5C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88AC88AE88AF88B088B288B388B488B588B688B888B988BA88BB88BD88BE88BF +88C088C388C488C788C888CA88CB88CC88CD88CF88D088D188D388D688D788DA +88DB88DC88DD88DE88E088E188E688E788E988EA88EB88EC88ED88EE88EF88F2 +88F588F688F788FA88FB88FD88FF890089018903890489058906890789080000 +8909890B890C890D890E890F891189148915891689178918891C891D891E891F +89208922892389248926892789288929892C892D892E892F8931893289338935 +89379009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89388939893A893B893C893D893E893F89408942894389458946894789488949 +894A894B894C894D894E894F8950895189528953895489558956895789588959 +895A895B895C895D896089618962896389648965896789688969896A896B896C +896D896E896F8970897189728973897489758976897789788979897A897C0000 +897D897E8980898289848985898789888989898A898B898C898D898E898F8990 +899189928993899489958996899789988999899A899B899C899D899E899F89A0 +89A164475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89A289A389A489A589A689A789A889A989AA89AB89AC89AD89AE89AF89B089B1 +89B289B389B489B589B689B789B889B989BA89BB89BC89BD89BE89BF89C089C3 +89CD89D389D489D589D789D889D989DB89DD89DF89E089E189E289E489E789E8 +89E989EA89EC89ED89EE89F089F189F289F489F589F689F789F889F989FA0000 +89FB89FC89FD89FE89FF8A018A028A038A048A058A068A088A098A0A8A0B8A0C +8A0D8A0E8A0F8A108A118A128A138A148A158A168A178A188A198A1A8A1B8A1C +8A1D537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A1E8A1F8A208A218A228A238A248A258A268A278A288A298A2A8A2B8A2C8A2D +8A2E8A2F8A308A318A328A338A348A358A368A378A388A398A3A8A3B8A3C8A3D +8A3F8A408A418A428A438A448A458A468A478A498A4A8A4B8A4C8A4D8A4E8A4F +8A508A518A528A538A548A558A568A578A588A598A5A8A5B8A5C8A5D8A5E0000 +8A5F8A608A618A628A638A648A658A668A678A688A698A6A8A6B8A6C8A6D8A6E +8A6F8A708A718A728A738A748A758A768A778A788A7A8A7B8A7C8A7D8A7E8A7F +8A806D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A818A828A838A848A858A868A878A888A8B8A8C8A8D8A8E8A8F8A908A918A92 +8A948A958A968A978A988A998A9A8A9B8A9C8A9D8A9E8A9F8AA08AA18AA28AA3 +8AA48AA58AA68AA78AA88AA98AAA8AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB3 +8AB48AB58AB68AB78AB88AB98ABA8ABB8ABC8ABD8ABE8ABF8AC08AC18AC20000 +8AC38AC48AC58AC68AC78AC88AC98ACA8ACB8ACC8ACD8ACE8ACF8AD08AD18AD2 +8AD38AD48AD58AD68AD78AD88AD98ADA8ADB8ADC8ADD8ADE8ADF8AE08AE18AE2 +8AE394E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AE48AE58AE68AE78AE88AE98AEA8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF3 +8AF48AF58AF68AF78AF88AF98AFA8AFB8AFC8AFD8AFE8AFF8B008B018B028B03 +8B048B058B068B088B098B0A8B0B8B0C8B0D8B0E8B0F8B108B118B128B138B14 +8B158B168B178B188B198B1A8B1B8B1C8B1D8B1E8B1F8B208B218B228B230000 +8B248B258B278B288B298B2A8B2B8B2C8B2D8B2E8B2F8B308B318B328B338B34 +8B358B368B378B388B398B3A8B3B8B3C8B3D8B3E8B3F8B408B418B428B438B44 +8B455E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B468B478B488B498B4A8B4B8B4C8B4D8B4E8B4F8B508B518B528B538B548B55 +8B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B65 +8B678B688B698B6A8B6B8B6D8B6E8B6F8B708B718B728B738B748B758B768B77 +8B788B798B7A8B7B8B7C8B7D8B7E8B7F8B808B818B828B838B848B858B860000 +8B878B888B898B8A8B8B8B8C8B8D8B8E8B8F8B908B918B928B938B948B958B96 +8B978B988B998B9A8B9B8B9C8B9D8B9E8B9F8BAC8BB18BBB8BC78BD08BEA8C09 +8C1E4F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8C388C398C3A8C3B8C3C8C3D8C3E8C3F8C408C428C438C448C458C488C4A8C4B +8C4D8C4E8C4F8C508C518C528C538C548C568C578C588C598C5B8C5C8C5D8C5E +8C5F8C608C638C648C658C668C678C688C698C6C8C6D8C6E8C6F8C708C718C72 +8C748C758C768C778C7B8C7C8C7D8C7E8C7F8C808C818C838C848C868C870000 +8C888C8B8C8D8C8E8C8F8C908C918C928C938C958C968C978C998C9A8C9B8C9C +8C9D8C9E8C9F8CA08CA18CA28CA38CA48CA58CA68CA78CA88CA98CAA8CAB8CAC +8CAD4E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8CAE8CAF8CB08CB18CB28CB38CB48CB58CB68CB78CB88CB98CBA8CBB8CBC8CBD +8CBE8CBF8CC08CC18CC28CC38CC48CC58CC68CC78CC88CC98CCA8CCB8CCC8CCD +8CCE8CCF8CD08CD18CD28CD38CD48CD58CD68CD78CD88CD98CDA8CDB8CDC8CDD +8CDE8CDF8CE08CE18CE28CE38CE48CE58CE68CE78CE88CE98CEA8CEB8CEC0000 +8CED8CEE8CEF8CF08CF18CF28CF38CF48CF58CF68CF78CF88CF98CFA8CFB8CFC +8CFD8CFE8CFF8D008D018D028D038D048D058D068D078D088D098D0A8D0B8D0C +8D0D4F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8D0E8D0F8D108D118D128D138D148D158D168D178D188D198D1A8D1B8D1C8D20 +8D518D528D578D5F8D658D688D698D6A8D6C8D6E8D6F8D718D728D788D798D7A +8D7B8D7C8D7D8D7E8D7F8D808D828D838D868D878D888D898D8C8D8D8D8E8D8F +8D908D928D938D958D968D978D988D998D9A8D9B8D9C8D9D8D9E8DA08DA10000 +8DA28DA48DA58DA68DA78DA88DA98DAA8DAB8DAC8DAD8DAE8DAF8DB08DB28DB6 +8DB78DB98DBB8DBD8DC08DC18DC28DC58DC78DC88DC98DCA8DCD8DD08DD28DD3 +8DD451C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8DD58DD88DD98DDC8DE08DE18DE28DE58DE68DE78DE98DED8DEE8DF08DF18DF2 +8DF48DF68DFC8DFE8DFF8E008E018E028E038E048E068E078E088E0B8E0D8E0E +8E108E118E128E138E158E168E178E188E198E1A8E1B8E1C8E208E218E248E25 +8E268E278E288E2B8E2D8E308E328E338E348E368E378E388E3B8E3C8E3E0000 +8E3F8E438E458E468E4C8E4D8E4E8E4F8E508E538E548E558E568E578E588E5A +8E5B8E5C8E5D8E5E8E5F8E608E618E628E638E648E658E678E688E6A8E6B8E6E +8E7190B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E738E758E778E788E798E7A8E7B8E7D8E7E8E808E828E838E848E868E888E89 +8E8A8E8B8E8C8E8D8E8E8E918E928E938E958E968E978E988E998E9A8E9B8E9D +8E9F8EA08EA18EA28EA38EA48EA58EA68EA78EA88EA98EAA8EAD8EAE8EB08EB1 +8EB38EB48EB58EB68EB78EB88EB98EBB8EBC8EBD8EBE8EBF8EC08EC18EC20000 +8EC38EC48EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECF8ED08ED18ED28ED3 +8ED48ED58ED68ED78ED88ED98EDA8EDB8EDC8EDD8EDE8EDF8EE08EE18EE28EE3 +8EE4580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EE58EE68EE78EE88EE98EEA8EEB8EEC8EED8EEE8EEF8EF08EF18EF28EF38EF4 +8EF58EF68EF78EF88EF98EFA8EFB8EFC8EFD8EFE8EFF8F008F018F028F038F04 +8F058F068F078F088F098F0A8F0B8F0C8F0D8F0E8F0F8F108F118F128F138F14 +8F158F168F178F188F198F1A8F1B8F1C8F1D8F1E8F1F8F208F218F228F230000 +8F248F258F268F278F288F298F2A8F2B8F2C8F2D8F2E8F2F8F308F318F328F33 +8F348F358F368F378F388F398F3A8F3B8F3C8F3D8F3E8F3F8F408F418F428F43 +8F448368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F458F468F478F488F498F4A8F4B8F4C8F4D8F4E8F4F8F508F518F528F538F54 +8F558F568F578F588F598F5A8F5B8F5C8F5D8F5E8F5F8F608F618F628F638F64 +8F658F6A8F808F8C8F928F9D8FA08FA18FA28FA48FA58FA68FA78FAA8FAC8FAD +8FAE8FAF8FB28FB38FB48FB58FB78FB88FBA8FBB8FBC8FBF8FC08FC38FC60000 +8FC98FCA8FCB8FCC8FCD8FCF8FD28FD68FD78FDA8FE08FE18FE38FE78FEC8FEF +8FF18FF28FF48FF58FF68FFA8FFB8FFC8FFE8FFF90079008900C900E90139015 +90188556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9019901C902390249025902790289029902A902B902C90309031903290339034 +90379039903A903D903F904090439045904690489049904A904B904C904E9054 +905590569059905A905C905D905E905F906090619064906690679069906A906B +906C906F90709071907290739076907790789079907A907B907C907E90810000 +90849085908690879089908A908C908D908E908F90909092909490969098909A +909C909E909F90A090A490A590A790A890A990AB90AD90B290B790BC90BD90BF +90C0647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90C290C390C690C890C990CB90CC90CD90D290D490D590D690D890D990DA90DE +90DF90E090E390E490E590E990EA90EC90EE90F090F190F290F390F590F690F7 +90F990FA90FB90FC90FF91009101910391059106910791089109910A910B910C +910D910E910F911091119112911391149115911691179118911A911B911C0000 +911D911F91209121912491259126912791289129912A912B912C912D912E9130 +9132913391349135913691379138913A913B913C913D913E913F914091419142 +91445537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9145914791489151915391549155915691589159915B915C915F916091669167 +9168916B916D9173917A917B917C9180918191829183918491869188918A918E +918F9193919491959196919791989199919C919D919E919F91A091A191A491A5 +91A691A791A891A991AB91AC91B091B191B291B391B691B791B891B991BB0000 +91BC91BD91BE91BF91C091C191C291C391C491C591C691C891CB91D091D291D3 +91D491D591D691D791D891D991DA91DB91DD91DE91DF91E091E191E291E391E4 +91E55E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91E691E791E891E991EA91EB91EC91ED91EE91EF91F091F191F291F391F491F5 +91F691F791F891F991FA91FB91FC91FD91FE91FF920092019202920392049205 +9206920792089209920A920B920C920D920E920F921092119212921392149215 +9216921792189219921A921B921C921D921E921F922092219222922392240000 +92259226922792289229922A922B922C922D922E922F92309231923292339234 +92359236923792389239923A923B923C923D923E923F92409241924292439244 +924572FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9246924792489249924A924B924C924D924E924F925092519252925392549255 +9256925792589259925A925B925C925D925E925F926092619262926392649265 +9266926792689269926A926B926C926D926E926F927092719272927392759276 +927792789279927A927B927C927D927E927F9280928192829283928492850000 +9286928792889289928A928B928C928D928F9290929192929293929492959296 +929792989299929A929B929C929D929E929F92A092A192A292A392A492A592A6 +92A7606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +92A892A992AA92AB92AC92AD92AF92B092B192B292B392B492B592B692B792B8 +92B992BA92BB92BC92BD92BE92BF92C092C192C292C392C492C592C692C792C9 +92CA92CB92CC92CD92CE92CF92D092D192D292D392D492D592D692D792D892D9 +92DA92DB92DC92DD92DE92DF92E092E192E292E392E492E592E692E792E80000 +92E992EA92EB92EC92ED92EE92EF92F092F192F292F392F492F592F692F792F8 +92F992FA92FB92FC92FD92FE92FF930093019302930393049305930693079308 +93096D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930A930B930C930D930E930F9310931193129313931493159316931793189319 +931A931B931C931D931E931F9320932193229323932493259326932793289329 +932A932B932C932D932E932F9330933193329333933493359336933793389339 +933A933B933C933D933F93409341934293439344934593469347934893490000 +934A934B934C934D934E934F9350935193529353935493559356935793589359 +935A935B935C935D935E935F9360936193629363936493659366936793689369 +936B6FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +936C936D936E936F9370937193729373937493759376937793789379937A937B +937C937D937E937F9380938193829383938493859386938793889389938A938B +938C938D938E9390939193929393939493959396939793989399939A939B939C +939D939E939F93A093A193A293A393A493A593A693A793A893A993AA93AB0000 +93AC93AD93AE93AF93B093B193B293B393B493B593B693B793B893B993BA93BB +93BC93BD93BE93BF93C093C193C293C393C493C593C693C793C893C993CB93CC +93CD599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93CE93CF93D093D193D293D393D493D593D793D893D993DA93DB93DC93DD93DE +93DF93E093E193E293E393E493E593E693E793E893E993EA93EB93EC93ED93EE +93EF93F093F193F293F393F493F593F693F793F893F993FA93FB93FC93FD93FE +93FF9400940194029403940494059406940794089409940A940B940C940D0000 +940E940F9410941194129413941494159416941794189419941A941B941C941D +941E941F9420942194229423942494259426942794289429942A942B942C942D +942E7EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +942F9430943194329433943494359436943794389439943A943B943C943D943F +9440944194429443944494459446944794489449944A944B944C944D944E944F +9450945194529453945494559456945794589459945A945B945C945D945E945F +9460946194629463946494659466946794689469946A946C946D946E946F0000 +9470947194729473947494759476947794789479947A947B947C947D947E947F +9480948194829483948494919496949894C794CF94D394D494DA94E694FB951C +9520741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +95279533953D95439548954B9555955A9560956E95749575957795789579957A +957B957C957D957E9580958195829583958495859586958795889589958A958B +958C958D958E958F9590959195929593959495959596959795989599959A959B +959C959D959E959F95A095A195A295A395A495A595A695A795A895A995AA0000 +95AB95AC95AD95AE95AF95B095B195B295B395B495B595B695B795B895B995BA +95BB95BC95BD95BE95BF95C095C195C295C395C495C595C695C795C895C995CA +95CB692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB +95DC95DD95DE95DF95E095E195E295E395E495E595E695E795EC95FF96079613 +9618961B961E96209623962496259626962796289629962B962C962D962F9630 +963796389639963A963E96419643964A964E964F965196529653965696570000 +96589659965A965C965D965E9660966396659666966B966D966E966F96709671 +967396789679967A967B967C967D967E967F9680968196829683968496879689 +968A8F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968C968E96919692969396959696969A969B969D969E969F96A096A196A296A3 +96A496A596A696A896A996AA96AB96AC96AD96AE96AF96B196B296B496B596B7 +96B896BA96BB96BF96C296C396C896CA96CB96D096D196D396D496D696D796D8 +96D996DA96DB96DC96DD96DE96DF96E196E296E396E496E596E696E796EB0000 +96EC96ED96EE96F096F196F296F496F596F896FA96FB96FC96FD96FF97029703 +9705970A970B970C97109711971297149715971797189719971A971B971D971F +9720643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +972197229723972497259726972797289729972B972C972E972F973197339734 +973597369737973A973B973C973D973F97409741974297439744974597469747 +97489749974A974B974C974D974E974F975097519754975597579758975A975C +975D975F97639764976697679768976A976B976C976D976E976F977097710000 +97729775977797789779977A977B977D977E977F978097819782978397849786 +978797889789978A978C978E978F979097939795979697979799979A979B979C +979D81C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979F97A197A297A497A597A697A797A897A997AA97AC97AE97B097B197B3 +97B597B697B797B897B997BA97BB97BC97BD97BE97BF97C097C197C297C397C4 +97C597C697C797C897C997CA97CB97CC97CD97CE97CF97D097D197D297D397D4 +97D597D697D797D897D997DA97DB97DC97DD97DE97DF97E097E197E297E30000 +97E497E597E897EE97EF97F097F197F297F497F797F897F997FA97FB97FC97FD +97FE97FF9800980198029803980498059806980798089809980A980B980C980D +980E603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +980F9810981198129813981498159816981798189819981A981B981C981D981E +981F9820982198229823982498259826982798289829982A982B982C982D982E +982F9830983198329833983498359836983798389839983A983B983C983D983E +983F9840984198429843984498459846984798489849984A984B984C984D0000 +984E984F9850985198529853985498559856985798589859985A985B985C985D +985E985F9860986198629863986498659866986798689869986A986B986C986D +986E77627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +986F98709871987298739874988B988E98929895989998A398A898A998AA98AB +98AC98AD98AE98AF98B098B198B298B398B498B598B698B798B898B998BA98BB +98BC98BD98BE98BF98C098C198C298C398C498C598C698C798C898C998CA98CB +98CC98CD98CF98D098D498D698D798DB98DC98DD98E098E198E298E398E40000 +98E598E698E998EA98EB98EC98ED98EE98EF98F098F198F298F398F498F598F6 +98F798F898F998FA98FB98FC98FD98FE98FF9900990199029903990499059906 +990794E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99089909990A990B990C990E990F991199129913991499159916991799189919 +991A991B991C991D991E991F9920992199229923992499259926992799289929 +992A992B992C992D992F9930993199329933993499359936993799389939993A +993B993C993D993E993F99409941994299439944994599469947994899490000 +994A994B994C994D994E994F99509951995299539956995799589959995A995B +995C995D995E995F99609961996299649966997399789979997B997E99829983 +99897A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +998C998E999A999B999C999D999E999F99A099A199A299A399A499A699A799A9 +99AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B9 +99BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C9 +99CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D80000 +99D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E8 +99E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F599F699F799F8 +99F9761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FA99FB99FC99FD99FE99FF9A009A019A029A039A049A059A069A079A089A09 +9A0A9A0B9A0C9A0D9A0E9A0F9A109A119A129A139A149A159A169A179A189A19 +9A1A9A1B9A1C9A1D9A1E9A1F9A209A219A229A239A249A259A269A279A289A29 +9A2A9A2B9A2C9A2D9A2E9A2F9A309A319A329A339A349A359A369A379A380000 +9A399A3A9A3B9A3C9A3D9A3E9A3F9A409A419A429A439A449A459A469A479A48 +9A499A4A9A4B9A4C9A4D9A4E9A4F9A509A519A529A539A549A559A569A579A58 +9A599889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9A5A9A5B9A5C9A5D9A5E9A5F9A609A619A629A639A649A659A669A679A689A69 +9A6A9A6B9A729A839A899A8D9A8E9A949A959A999AA69AA99AAA9AAB9AAC9AAD +9AAE9AAF9AB29AB39AB49AB59AB99ABB9ABD9ABE9ABF9AC39AC49AC69AC79AC8 +9AC99ACA9ACD9ACE9ACF9AD09AD29AD49AD59AD69AD79AD99ADA9ADB9ADC0000 +9ADD9ADE9AE09AE29AE39AE49AE59AE79AE89AE99AEA9AEC9AEE9AF09AF19AF2 +9AF39AF49AF59AF69AF79AF89AFA9AFC9AFD9AFE9AFF9B009B019B029B049B05 +9B0687C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B079B099B0A9B0B9B0C9B0D9B0E9B109B119B129B149B159B169B179B189B19 +9B1A9B1B9B1C9B1D9B1E9B209B219B229B249B259B269B279B289B299B2A9B2B +9B2C9B2D9B2E9B309B319B339B349B359B369B379B389B399B3A9B3D9B3E9B3F +9B409B469B4A9B4B9B4C9B4E9B509B529B539B559B569B579B589B599B5A0000 +9B5B9B5C9B5D9B5E9B5F9B609B619B629B639B649B659B669B679B689B699B6A +9B6B9B6C9B6D9B6E9B6F9B709B719B729B739B749B759B769B779B789B799B7A +9B7B7C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B7C9B7D9B7E9B7F9B809B819B829B839B849B859B869B879B889B899B8A9B8B +9B8C9B8D9B8E9B8F9B909B919B929B939B949B959B969B979B989B999B9A9B9B +9B9C9B9D9B9E9B9F9BA09BA19BA29BA39BA49BA59BA69BA79BA89BA99BAA9BAB +9BAC9BAD9BAE9BAF9BB09BB19BB29BB39BB49BB59BB69BB79BB89BB99BBA0000 +9BBB9BBC9BBD9BBE9BBF9BC09BC19BC29BC39BC49BC59BC69BC79BC89BC99BCA +9BCB9BCC9BCD9BCE9BCF9BD09BD19BD29BD39BD49BD59BD69BD79BD89BD99BDA +9BDB9162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9BDC9BDD9BDE9BDF9BE09BE19BE29BE39BE49BE59BE69BE79BE89BE99BEA9BEB +9BEC9BED9BEE9BEF9BF09BF19BF29BF39BF49BF59BF69BF79BF89BF99BFA9BFB +9BFC9BFD9BFE9BFF9C009C019C029C039C049C059C069C079C089C099C0A9C0B +9C0C9C0D9C0E9C0F9C109C119C129C139C149C159C169C179C189C199C1A0000 +9C1B9C1C9C1D9C1E9C1F9C209C219C229C239C249C259C269C279C289C299C2A +9C2B9C2C9C2D9C2E9C2F9C309C319C329C339C349C359C369C379C389C399C3A +9C3B89E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9C3C9C3D9C3E9C3F9C409C419C429C439C449C459C469C479C489C499C4A9C4B +9C4C9C4D9C4E9C4F9C509C519C529C539C549C559C569C579C589C599C5A9C5B +9C5C9C5D9C5E9C5F9C609C619C629C639C649C659C669C679C689C699C6A9C6B +9C6C9C6D9C6E9C6F9C709C719C729C739C749C759C769C779C789C799C7A0000 +9C7B9C7D9C7E9C809C839C849C899C8A9C8C9C8F9C939C969C979C989C999C9D +9CAA9CAC9CAF9CB99CBE9CBF9CC09CC19CC29CC89CC99CD19CD29CDA9CDB9CE0 +9CE19CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9CE39CE49CE59CE69CE79CE89CE99CEA9CEB9CEC9CED9CEE9CEF9CF09CF19CF2 +9CF39CF49CF59CF69CF79CF89CF99CFA9CFB9CFC9CFD9CFE9CFF9D009D019D02 +9D039D049D059D069D079D089D099D0A9D0B9D0C9D0D9D0E9D0F9D109D119D12 +9D139D149D159D169D179D189D199D1A9D1B9D1C9D1D9D1E9D1F9D209D210000 +9D229D239D249D259D269D279D289D299D2A9D2B9D2C9D2D9D2E9D2F9D309D31 +9D329D339D349D359D369D379D389D399D3A9D3B9D3C9D3D9D3E9D3F9D409D41 +9D42000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D439D449D459D469D479D489D499D4A9D4B9D4C9D4D9D4E9D4F9D509D519D52 +9D539D549D559D569D579D589D599D5A9D5B9D5C9D5D9D5E9D5F9D609D619D62 +9D639D649D659D669D679D689D699D6A9D6B9D6C9D6D9D6E9D6F9D709D719D72 +9D739D749D759D769D779D789D799D7A9D7B9D7C9D7D9D7E9D7F9D809D810000 +9D829D839D849D859D869D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D909D91 +9D929D939D949D959D969D979D989D999D9A9D9B9D9C9D9D9D9E9D9F9DA09DA1 +9DA2000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9DA39DA49DA59DA69DA79DA89DA99DAA9DAB9DAC9DAD9DAE9DAF9DB09DB19DB2 +9DB39DB49DB59DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2 +9DC39DC49DC59DC69DC79DC89DC99DCA9DCB9DCC9DCD9DCE9DCF9DD09DD19DD2 +9DD39DD49DD59DD69DD79DD89DD99DDA9DDB9DDC9DDD9DDE9DDF9DE09DE10000 +9DE29DE39DE49DE59DE69DE79DE89DE99DEA9DEB9DEC9DED9DEE9DEF9DF09DF1 +9DF29DF39DF49DF59DF69DF79DF89DF99DFA9DFB9DFC9DFD9DFE9DFF9E009E01 +9E02000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9E039E049E059E069E079E089E099E0A9E0B9E0C9E0D9E0E9E0F9E109E119E12 +9E139E149E159E169E179E189E199E1A9E1B9E1C9E1D9E1E9E249E279E2E9E30 +9E349E3B9E3C9E409E4D9E509E529E539E549E569E599E5D9E5F9E609E619E62 +9E659E6E9E6F9E729E749E759E769E779E789E799E7A9E7B9E7C9E7D9E800000 +9E819E839E849E859E869E899E8A9E8C9E8D9E8E9E8F9E909E919E949E959E96 +9E979E989E999E9A9E9B9E9C9E9E9EA09EA19EA29EA39EA49EA59EA79EA89EA9 +9EAA000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9EAB9EAC9EAD9EAE9EAF9EB09EB19EB29EB39EB59EB69EB79EB99EBA9EBC9EBF +9EC09EC19EC29EC39EC59EC69EC79EC89ECA9ECB9ECC9ED09ED29ED39ED59ED6 +9ED79ED99EDA9EDE9EE19EE39EE49EE69EE89EEB9EEC9EED9EEE9EF09EF19EF2 +9EF39EF49EF59EF69EF79EF89EFA9EFD9EFF9F009F019F029F039F049F050000 +9F069F079F089F099F0A9F0C9F0F9F119F129F149F159F169F189F1A9F1B9F1C +9F1D9F1E9F1F9F219F239F249F259F269F279F289F299F2A9F2B9F2D9F2E9F30 +9F31000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F329F339F349F359F369F389F3A9F3C9F3F9F409F419F429F439F459F469F47 +9F489F499F4A9F4B9F4C9F4D9F4E9F4F9F529F539F549F559F569F579F589F59 +9F5A9F5B9F5C9F5D9F5E9F5F9F609F619F629F639F649F659F669F679F689F69 +9F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F739F749F759F769F779F780000 +9F799F7A9F7B9F7C9F7D9F7E9F819F829F8D9F8E9F8F9F909F919F929F939F94 +9F959F969F979F989F9C9F9D9F9E9FA19FA29FA39FA49FA5F92CF979F995F9E7 +F9F1000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FA0CFA0DFA0EFA0FFA11FA13FA14FA18FA1FFA20FA21FA23FA24FA27FA28FA29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/cp949.enc b/inkstitch/bin/tcl/encoding/cp949.enc new file mode 100644 index 0000000..2f3ec39 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp949.enc @@ -0,0 +1,2128 @@ +# Encoding file: cp949, multi-byte +M +003F 0 125 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC02AC03AC05AC06AC0BAC0CAC0DAC0EAC0FAC18AC1EAC1FAC21AC22AC23 +AC25AC26AC27AC28AC29AC2AAC2BAC2EAC32AC33AC3400000000000000000000 +0000AC35AC36AC37AC3AAC3BAC3DAC3EAC3FAC41AC42AC43AC44AC45AC46AC47 +AC48AC49AC4AAC4CAC4EAC4FAC50AC51AC52AC53AC5500000000000000000000 +0000AC56AC57AC59AC5AAC5BAC5DAC5EAC5FAC60AC61AC62AC63AC64AC65AC66 +AC67AC68AC69AC6AAC6BAC6CAC6DAC6EAC6FAC72AC73AC75AC76AC79AC7BAC7C +AC7DAC7EAC7FAC82AC87AC88AC8DAC8EAC8FAC91AC92AC93AC95AC96AC97AC98 +AC99AC9AAC9BAC9EACA2ACA3ACA4ACA5ACA6ACA7ACABACADACAEACB1ACB2ACB3 +ACB4ACB5ACB6ACB7ACBAACBEACBFACC0ACC2ACC3ACC5ACC6ACC7ACC9ACCAACCB +ACCDACCEACCFACD0ACD1ACD2ACD3ACD4ACD6ACD8ACD9ACDAACDBACDCACDDACDE +ACDFACE2ACE3ACE5ACE6ACE9ACEBACEDACEEACF2ACF4ACF7ACF8ACF9ACFAACFB +ACFEACFFAD01AD02AD03AD05AD07AD08AD09AD0AAD0BAD0EAD10AD12AD130000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD14AD15AD16AD17AD19AD1AAD1BAD1DAD1EAD1FAD21AD22AD23AD24AD25 +AD26AD27AD28AD2AAD2BAD2EAD2FAD30AD31AD32AD3300000000000000000000 +0000AD36AD37AD39AD3AAD3BAD3DAD3EAD3FAD40AD41AD42AD43AD46AD48AD4A +AD4BAD4CAD4DAD4EAD4FAD51AD52AD53AD55AD56AD5700000000000000000000 +0000AD59AD5AAD5BAD5CAD5DAD5EAD5FAD60AD62AD64AD65AD66AD67AD68AD69 +AD6AAD6BAD6EAD6FAD71AD72AD77AD78AD79AD7AAD7EAD80AD83AD84AD85AD86 +AD87AD8AAD8BAD8DAD8EAD8FAD91AD92AD93AD94AD95AD96AD97AD98AD99AD9A +AD9BAD9EAD9FADA0ADA1ADA2ADA3ADA5ADA6ADA7ADA8ADA9ADAAADABADACADAD +ADAEADAFADB0ADB1ADB2ADB3ADB4ADB5ADB6ADB8ADB9ADBAADBBADBCADBDADBE +ADBFADC2ADC3ADC5ADC6ADC7ADC9ADCAADCBADCCADCDADCEADCFADD2ADD4ADD5 +ADD6ADD7ADD8ADD9ADDAADDBADDDADDEADDFADE1ADE2ADE3ADE5ADE6ADE7ADE8 +ADE9ADEAADEBADECADEDADEEADEFADF0ADF1ADF2ADF3ADF4ADF5ADF6ADF70000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000ADFAADFBADFDADFEAE02AE03AE04AE05AE06AE07AE0AAE0CAE0EAE0FAE10 +AE11AE12AE13AE15AE16AE17AE18AE19AE1AAE1BAE1C00000000000000000000 +0000AE1DAE1EAE1FAE20AE21AE22AE23AE24AE25AE26AE27AE28AE29AE2AAE2B +AE2CAE2DAE2EAE2FAE32AE33AE35AE36AE39AE3BAE3C00000000000000000000 +0000AE3DAE3EAE3FAE42AE44AE47AE48AE49AE4BAE4FAE51AE52AE53AE55AE57 +AE58AE59AE5AAE5BAE5EAE62AE63AE64AE66AE67AE6AAE6BAE6DAE6EAE6FAE71 +AE72AE73AE74AE75AE76AE77AE7AAE7EAE7FAE80AE81AE82AE83AE86AE87AE88 +AE89AE8AAE8BAE8DAE8EAE8FAE90AE91AE92AE93AE94AE95AE96AE97AE98AE99 +AE9AAE9BAE9CAE9DAE9EAE9FAEA0AEA1AEA2AEA3AEA4AEA5AEA6AEA7AEA8AEA9 +AEAAAEABAEACAEADAEAEAEAFAEB0AEB1AEB2AEB3AEB4AEB5AEB6AEB7AEB8AEB9 +AEBAAEBBAEBFAEC1AEC2AEC3AEC5AEC6AEC7AEC8AEC9AECAAECBAECEAED2AED3 +AED4AED5AED6AED7AEDAAEDBAEDDAEDEAEDFAEE0AEE1AEE2AEE3AEE4AEE50000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AEE6AEE7AEE9AEEAAEECAEEEAEEFAEF0AEF1AEF2AEF3AEF5AEF6AEF7AEF9 +AEFAAEFBAEFDAEFEAEFFAF00AF01AF02AF03AF04AF0500000000000000000000 +0000AF06AF09AF0AAF0BAF0CAF0EAF0FAF11AF12AF13AF14AF15AF16AF17AF18 +AF19AF1AAF1BAF1CAF1DAF1EAF1FAF20AF21AF22AF2300000000000000000000 +0000AF24AF25AF26AF27AF28AF29AF2AAF2BAF2EAF2FAF31AF33AF35AF36AF37 +AF38AF39AF3AAF3BAF3EAF40AF44AF45AF46AF47AF4AAF4BAF4CAF4DAF4EAF4F +AF51AF52AF53AF54AF55AF56AF57AF58AF59AF5AAF5BAF5EAF5FAF60AF61AF62 +AF63AF66AF67AF68AF69AF6AAF6BAF6CAF6DAF6EAF6FAF70AF71AF72AF73AF74 +AF75AF76AF77AF78AF7AAF7BAF7CAF7DAF7EAF7FAF81AF82AF83AF85AF86AF87 +AF89AF8AAF8BAF8CAF8DAF8EAF8FAF92AF93AF94AF96AF97AF98AF99AF9AAF9B +AF9DAF9EAF9FAFA0AFA1AFA2AFA3AFA4AFA5AFA6AFA7AFA8AFA9AFAAAFABAFAC +AFADAFAEAFAFAFB0AFB1AFB2AFB3AFB4AFB5AFB6AFB7AFBAAFBBAFBDAFBE0000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AFBFAFC1AFC2AFC3AFC4AFC5AFC6AFCAAFCCAFCFAFD0AFD1AFD2AFD3AFD5 +AFD6AFD7AFD8AFD9AFDAAFDBAFDDAFDEAFDFAFE0AFE100000000000000000000 +0000AFE2AFE3AFE4AFE5AFE6AFE7AFEAAFEBAFECAFEDAFEEAFEFAFF2AFF3AFF5 +AFF6AFF7AFF9AFFAAFFBAFFCAFFDAFFEAFFFB002B00300000000000000000000 +0000B005B006B007B008B009B00AB00BB00DB00EB00FB011B012B013B015B016 +B017B018B019B01AB01BB01EB01FB020B021B022B023B024B025B026B027B029 +B02AB02BB02CB02DB02EB02FB030B031B032B033B034B035B036B037B038B039 +B03AB03BB03CB03DB03EB03FB040B041B042B043B046B047B049B04BB04DB04F +B050B051B052B056B058B05AB05BB05CB05EB05FB060B061B062B063B064B065 +B066B067B068B069B06AB06BB06CB06DB06EB06FB070B071B072B073B074B075 +B076B077B078B079B07AB07BB07EB07FB081B082B083B085B086B087B088B089 +B08AB08BB08EB090B092B093B094B095B096B097B09BB09DB09EB0A3B0A40000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B0A5B0A6B0A7B0AAB0B0B0B2B0B6B0B7B0B9B0BAB0BBB0BDB0BEB0BFB0C0 +B0C1B0C2B0C3B0C6B0CAB0CBB0CCB0CDB0CEB0CFB0D200000000000000000000 +0000B0D3B0D5B0D6B0D7B0D9B0DAB0DBB0DCB0DDB0DEB0DFB0E1B0E2B0E3B0E4 +B0E6B0E7B0E8B0E9B0EAB0EBB0ECB0EDB0EEB0EFB0F000000000000000000000 +0000B0F1B0F2B0F3B0F4B0F5B0F6B0F7B0F8B0F9B0FAB0FBB0FCB0FDB0FEB0FF +B100B101B102B103B104B105B106B107B10AB10DB10EB10FB111B114B115B116 +B117B11AB11EB11FB120B121B122B126B127B129B12AB12BB12DB12EB12FB130 +B131B132B133B136B13AB13BB13CB13DB13EB13FB142B143B145B146B147B149 +B14AB14BB14CB14DB14EB14FB152B153B156B157B159B15AB15BB15DB15EB15F +B161B162B163B164B165B166B167B168B169B16AB16BB16CB16DB16EB16FB170 +B171B172B173B174B175B176B177B17AB17BB17DB17EB17FB181B183B184B185 +B186B187B18AB18CB18EB18FB190B191B195B196B197B199B19AB19BB19D0000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B19EB19FB1A0B1A1B1A2B1A3B1A4B1A5B1A6B1A7B1A9B1AAB1ABB1ACB1AD +B1AEB1AFB1B0B1B1B1B2B1B3B1B4B1B5B1B6B1B7B1B800000000000000000000 +0000B1B9B1BAB1BBB1BCB1BDB1BEB1BFB1C0B1C1B1C2B1C3B1C4B1C5B1C6B1C7 +B1C8B1C9B1CAB1CBB1CDB1CEB1CFB1D1B1D2B1D3B1D500000000000000000000 +0000B1D6B1D7B1D8B1D9B1DAB1DBB1DEB1E0B1E1B1E2B1E3B1E4B1E5B1E6B1E7 +B1EAB1EBB1EDB1EEB1EFB1F1B1F2B1F3B1F4B1F5B1F6B1F7B1F8B1FAB1FCB1FE +B1FFB200B201B202B203B206B207B209B20AB20DB20EB20FB210B211B212B213 +B216B218B21AB21BB21CB21DB21EB21FB221B222B223B224B225B226B227B228 +B229B22AB22BB22CB22DB22EB22FB230B231B232B233B235B236B237B238B239 +B23AB23BB23DB23EB23FB240B241B242B243B244B245B246B247B248B249B24A +B24BB24CB24DB24EB24FB250B251B252B253B254B255B256B257B259B25AB25B +B25DB25EB25FB261B262B263B264B265B266B267B26AB26BB26CB26DB26E0000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B26FB270B271B272B273B276B277B278B279B27AB27BB27DB27EB27FB280 +B281B282B283B286B287B288B28AB28BB28CB28DB28E00000000000000000000 +0000B28FB292B293B295B296B297B29BB29CB29DB29EB29FB2A2B2A4B2A7B2A8 +B2A9B2ABB2ADB2AEB2AFB2B1B2B2B2B3B2B5B2B6B2B700000000000000000000 +0000B2B8B2B9B2BAB2BBB2BCB2BDB2BEB2BFB2C0B2C1B2C2B2C3B2C4B2C5B2C6 +B2C7B2CAB2CBB2CDB2CEB2CFB2D1B2D3B2D4B2D5B2D6B2D7B2DAB2DCB2DEB2DF +B2E0B2E1B2E3B2E7B2E9B2EAB2F0B2F1B2F2B2F6B2FCB2FDB2FEB302B303B305 +B306B307B309B30AB30BB30CB30DB30EB30FB312B316B317B318B319B31AB31B +B31DB31EB31FB320B321B322B323B324B325B326B327B328B329B32AB32BB32C +B32DB32EB32FB330B331B332B333B334B335B336B337B338B339B33AB33BB33C +B33DB33EB33FB340B341B342B343B344B345B346B347B348B349B34AB34BB34C +B34DB34EB34FB350B351B352B353B357B359B35AB35DB360B361B362B3630000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B366B368B36AB36CB36DB36FB372B373B375B376B377B379B37AB37BB37C +B37DB37EB37FB382B386B387B388B389B38AB38BB38D00000000000000000000 +0000B38EB38FB391B392B393B395B396B397B398B399B39AB39BB39CB39DB39E +B39FB3A2B3A3B3A4B3A5B3A6B3A7B3A9B3AAB3ABB3AD00000000000000000000 +0000B3AEB3AFB3B0B3B1B3B2B3B3B3B4B3B5B3B6B3B7B3B8B3B9B3BAB3BBB3BC +B3BDB3BEB3BFB3C0B3C1B3C2B3C3B3C6B3C7B3C9B3CAB3CDB3CFB3D1B3D2B3D3 +B3D6B3D8B3DAB3DCB3DEB3DFB3E1B3E2B3E3B3E5B3E6B3E7B3E9B3EAB3EBB3EC +B3EDB3EEB3EFB3F0B3F1B3F2B3F3B3F4B3F5B3F6B3F7B3F8B3F9B3FAB3FBB3FD +B3FEB3FFB400B401B402B403B404B405B406B407B408B409B40AB40BB40CB40D +B40EB40FB411B412B413B414B415B416B417B419B41AB41BB41DB41EB41FB421 +B422B423B424B425B426B427B42AB42CB42DB42EB42FB430B431B432B433B435 +B436B437B438B439B43AB43BB43CB43DB43EB43FB440B441B442B443B4440000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B445B446B447B448B449B44AB44BB44CB44DB44EB44FB452B453B455B456 +B457B459B45AB45BB45CB45DB45EB45FB462B464B46600000000000000000000 +0000B467B468B469B46AB46BB46DB46EB46FB470B471B472B473B474B475B476 +B477B478B479B47AB47BB47CB47DB47EB47FB481B48200000000000000000000 +0000B483B484B485B486B487B489B48AB48BB48CB48DB48EB48FB490B491B492 +B493B494B495B496B497B498B499B49AB49BB49CB49EB49FB4A0B4A1B4A2B4A3 +B4A5B4A6B4A7B4A9B4AAB4ABB4ADB4AEB4AFB4B0B4B1B4B2B4B3B4B4B4B6B4B8 +B4BAB4BBB4BCB4BDB4BEB4BFB4C1B4C2B4C3B4C5B4C6B4C7B4C9B4CAB4CBB4CC +B4CDB4CEB4CFB4D1B4D2B4D3B4D4B4D6B4D7B4D8B4D9B4DAB4DBB4DEB4DFB4E1 +B4E2B4E5B4E7B4E8B4E9B4EAB4EBB4EEB4F0B4F2B4F3B4F4B4F5B4F6B4F7B4F9 +B4FAB4FBB4FCB4FDB4FEB4FFB500B501B502B503B504B505B506B507B508B509 +B50AB50BB50CB50DB50EB50FB510B511B512B513B516B517B519B51AB51D0000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B51EB51FB520B521B522B523B526B52BB52CB52DB52EB52FB532B533B535 +B536B537B539B53AB53BB53CB53DB53EB53FB542B54600000000000000000000 +0000B547B548B549B54AB54EB54FB551B552B553B555B556B557B558B559B55A +B55BB55EB562B563B564B565B566B567B568B569B56A00000000000000000000 +0000B56BB56CB56DB56EB56FB570B571B572B573B574B575B576B577B578B579 +B57AB57BB57CB57DB57EB57FB580B581B582B583B584B585B586B587B588B589 +B58AB58BB58CB58DB58EB58FB590B591B592B593B594B595B596B597B598B599 +B59AB59BB59CB59DB59EB59FB5A2B5A3B5A5B5A6B5A7B5A9B5ACB5ADB5AEB5AF +B5B2B5B6B5B7B5B8B5B9B5BAB5BEB5BFB5C1B5C2B5C3B5C5B5C6B5C7B5C8B5C9 +B5CAB5CBB5CEB5D2B5D3B5D4B5D5B5D6B5D7B5D9B5DAB5DBB5DCB5DDB5DEB5DF +B5E0B5E1B5E2B5E3B5E4B5E5B5E6B5E7B5E8B5E9B5EAB5EBB5EDB5EEB5EFB5F0 +B5F1B5F2B5F3B5F4B5F5B5F6B5F7B5F8B5F9B5FAB5FBB5FCB5FDB5FEB5FF0000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B600B601B602B603B604B605B606B607B608B609B60AB60BB60CB60DB60E +B60FB612B613B615B616B617B619B61AB61BB61CB61D00000000000000000000 +0000B61EB61FB620B621B622B623B624B626B627B628B629B62AB62BB62DB62E +B62FB630B631B632B633B635B636B637B638B639B63A00000000000000000000 +0000B63BB63CB63DB63EB63FB640B641B642B643B644B645B646B647B649B64A +B64BB64CB64DB64EB64FB650B651B652B653B654B655B656B657B658B659B65A +B65BB65CB65DB65EB65FB660B661B662B663B665B666B667B669B66AB66BB66C +B66DB66EB66FB670B671B672B673B674B675B676B677B678B679B67AB67BB67C +B67DB67EB67FB680B681B682B683B684B685B686B687B688B689B68AB68BB68C +B68DB68EB68FB690B691B692B693B694B695B696B697B698B699B69AB69BB69E +B69FB6A1B6A2B6A3B6A5B6A6B6A7B6A8B6A9B6AAB6ADB6AEB6AFB6B0B6B2B6B3 +B6B4B6B5B6B6B6B7B6B8B6B9B6BAB6BBB6BCB6BDB6BEB6BFB6C0B6C1B6C20000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B6C3B6C4B6C5B6C6B6C7B6C8B6C9B6CAB6CBB6CCB6CDB6CEB6CFB6D0B6D1 +B6D2B6D3B6D5B6D6B6D7B6D8B6D9B6DAB6DBB6DCB6DD00000000000000000000 +0000B6DEB6DFB6E0B6E1B6E2B6E3B6E4B6E5B6E6B6E7B6E8B6E9B6EAB6EBB6EC +B6EDB6EEB6EFB6F1B6F2B6F3B6F5B6F6B6F7B6F9B6FA00000000000000000000 +0000B6FBB6FCB6FDB6FEB6FFB702B703B704B706B707B708B709B70AB70BB70C +B70DB70EB70FB710B711B712B713B714B715B716B717B718B719B71AB71BB71C +B71DB71EB71FB720B721B722B723B724B725B726B727B72AB72BB72DB72EB731 +B732B733B734B735B736B737B73AB73CB73DB73EB73FB740B741B742B743B745 +B746B747B749B74AB74BB74DB74EB74FB750B751B752B753B756B757B758B759 +B75AB75BB75CB75DB75EB75FB761B762B763B765B766B767B769B76AB76BB76C +B76DB76EB76FB772B774B776B777B778B779B77AB77BB77EB77FB781B782B783 +B785B786B787B788B789B78AB78BB78EB793B794B795B79AB79BB79DB79E0000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B79FB7A1B7A2B7A3B7A4B7A5B7A6B7A7B7AAB7AEB7AFB7B0B7B1B7B2B7B3 +B7B6B7B7B7B9B7BAB7BBB7BCB7BDB7BEB7BFB7C0B7C100000000000000000000 +0000B7C2B7C3B7C4B7C5B7C6B7C8B7CAB7CBB7CCB7CDB7CEB7CFB7D0B7D1B7D2 +B7D3B7D4B7D5B7D6B7D7B7D8B7D9B7DAB7DBB7DCB7DD00000000000000000000 +0000B7DEB7DFB7E0B7E1B7E2B7E3B7E4B7E5B7E6B7E7B7E8B7E9B7EAB7EBB7EE +B7EFB7F1B7F2B7F3B7F5B7F6B7F7B7F8B7F9B7FAB7FBB7FEB802B803B804B805 +B806B80AB80BB80DB80EB80FB811B812B813B814B815B816B817B81AB81CB81E +B81FB820B821B822B823B826B827B829B82AB82BB82DB82EB82FB830B831B832 +B833B836B83AB83BB83CB83DB83EB83FB841B842B843B845B846B847B848B849 +B84AB84BB84CB84DB84EB84FB850B852B854B855B856B857B858B859B85AB85B +B85EB85FB861B862B863B865B866B867B868B869B86AB86BB86EB870B872B873 +B874B875B876B877B879B87AB87BB87DB87EB87FB880B881B882B883B8840000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B885B886B887B888B889B88AB88BB88CB88EB88FB890B891B892B893B894 +B895B896B897B898B899B89AB89BB89CB89DB89EB89F00000000000000000000 +0000B8A0B8A1B8A2B8A3B8A4B8A5B8A6B8A7B8A9B8AAB8ABB8ACB8ADB8AEB8AF +B8B1B8B2B8B3B8B5B8B6B8B7B8B9B8BAB8BBB8BCB8BD00000000000000000000 +0000B8BEB8BFB8C2B8C4B8C6B8C7B8C8B8C9B8CAB8CBB8CDB8CEB8CFB8D1B8D2 +B8D3B8D5B8D6B8D7B8D8B8D9B8DAB8DBB8DCB8DEB8E0B8E2B8E3B8E4B8E5B8E6 +B8E7B8EAB8EBB8EDB8EEB8EFB8F1B8F2B8F3B8F4B8F5B8F6B8F7B8FAB8FCB8FE +B8FFB900B901B902B903B905B906B907B908B909B90AB90BB90CB90DB90EB90F +B910B911B912B913B914B915B916B917B919B91AB91BB91CB91DB91EB91FB921 +B922B923B924B925B926B927B928B929B92AB92BB92CB92DB92EB92FB930B931 +B932B933B934B935B936B937B938B939B93AB93BB93EB93FB941B942B943B945 +B946B947B948B949B94AB94BB94DB94EB950B952B953B954B955B956B9570000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B95AB95BB95DB95EB95FB961B962B963B964B965B966B967B96AB96CB96E +B96FB970B971B972B973B976B977B979B97AB97BB97D00000000000000000000 +0000B97EB97FB980B981B982B983B986B988B98BB98CB98FB990B991B992B993 +B994B995B996B997B998B999B99AB99BB99CB99DB99E00000000000000000000 +0000B99FB9A0B9A1B9A2B9A3B9A4B9A5B9A6B9A7B9A8B9A9B9AAB9ABB9AEB9AF +B9B1B9B2B9B3B9B5B9B6B9B7B9B8B9B9B9BAB9BBB9BEB9C0B9C2B9C3B9C4B9C5 +B9C6B9C7B9CAB9CBB9CDB9D3B9D4B9D5B9D6B9D7B9DAB9DCB9DFB9E0B9E2B9E6 +B9E7B9E9B9EAB9EBB9EDB9EEB9EFB9F0B9F1B9F2B9F3B9F6B9FBB9FCB9FDB9FE +B9FFBA02BA03BA04BA05BA06BA07BA09BA0ABA0BBA0CBA0DBA0EBA0FBA10BA11 +BA12BA13BA14BA16BA17BA18BA19BA1ABA1BBA1CBA1DBA1EBA1FBA20BA21BA22 +BA23BA24BA25BA26BA27BA28BA29BA2ABA2BBA2CBA2DBA2EBA2FBA30BA31BA32 +BA33BA34BA35BA36BA37BA3ABA3BBA3DBA3EBA3FBA41BA43BA44BA45BA460000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BA47BA4ABA4CBA4FBA50BA51BA52BA56BA57BA59BA5ABA5BBA5DBA5EBA5F +BA60BA61BA62BA63BA66BA6ABA6BBA6CBA6DBA6EBA6F00000000000000000000 +0000BA72BA73BA75BA76BA77BA79BA7ABA7BBA7CBA7DBA7EBA7FBA80BA81BA82 +BA86BA88BA89BA8ABA8BBA8DBA8EBA8FBA90BA91BA9200000000000000000000 +0000BA93BA94BA95BA96BA97BA98BA99BA9ABA9BBA9CBA9DBA9EBA9FBAA0BAA1 +BAA2BAA3BAA4BAA5BAA6BAA7BAAABAADBAAEBAAFBAB1BAB3BAB4BAB5BAB6BAB7 +BABABABCBABEBABFBAC0BAC1BAC2BAC3BAC5BAC6BAC7BAC9BACABACBBACCBACD +BACEBACFBAD0BAD1BAD2BAD3BAD4BAD5BAD6BAD7BADABADBBADCBADDBADEBADF +BAE0BAE1BAE2BAE3BAE4BAE5BAE6BAE7BAE8BAE9BAEABAEBBAECBAEDBAEEBAEF +BAF0BAF1BAF2BAF3BAF4BAF5BAF6BAF7BAF8BAF9BAFABAFBBAFDBAFEBAFFBB01 +BB02BB03BB05BB06BB07BB08BB09BB0ABB0BBB0CBB0EBB10BB12BB13BB14BB15 +BB16BB17BB19BB1ABB1BBB1DBB1EBB1FBB21BB22BB23BB24BB25BB26BB270000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB28BB2ABB2CBB2DBB2EBB2FBB30BB31BB32BB33BB37BB39BB3ABB3FBB40 +BB41BB42BB43BB46BB48BB4ABB4BBB4CBB4EBB51BB5200000000000000000000 +0000BB53BB55BB56BB57BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB62BB64BB65 +BB66BB67BB68BB69BB6ABB6BBB6DBB6EBB6FBB70BB7100000000000000000000 +0000BB72BB73BB74BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB7FBB80 +BB81BB82BB83BB84BB85BB86BB87BB89BB8ABB8BBB8DBB8EBB8FBB91BB92BB93 +BB94BB95BB96BB97BB98BB99BB9ABB9BBB9CBB9DBB9EBB9FBBA0BBA1BBA2BBA3 +BBA5BBA6BBA7BBA9BBAABBABBBADBBAEBBAFBBB0BBB1BBB2BBB3BBB5BBB6BBB8 +BBB9BBBABBBBBBBCBBBDBBBEBBBFBBC1BBC2BBC3BBC5BBC6BBC7BBC9BBCABBCB +BBCCBBCDBBCEBBCFBBD1BBD2BBD4BBD5BBD6BBD7BBD8BBD9BBDABBDBBBDCBBDD +BBDEBBDFBBE0BBE1BBE2BBE3BBE4BBE5BBE6BBE7BBE8BBE9BBEABBEBBBECBBED +BBEEBBEFBBF0BBF1BBF2BBF3BBF4BBF5BBF6BBF7BBFABBFBBBFDBBFEBC010000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC03BC04BC05BC06BC07BC0ABC0EBC10BC12BC13BC19BC1ABC20BC21BC22 +BC23BC26BC28BC2ABC2BBC2CBC2EBC2FBC32BC33BC3500000000000000000000 +0000BC36BC37BC39BC3ABC3BBC3CBC3DBC3EBC3FBC42BC46BC47BC48BC4ABC4B +BC4EBC4FBC51BC52BC53BC54BC55BC56BC57BC58BC5900000000000000000000 +0000BC5ABC5BBC5CBC5EBC5FBC60BC61BC62BC63BC64BC65BC66BC67BC68BC69 +BC6ABC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78BC79 +BC7ABC7BBC7CBC7DBC7EBC7FBC80BC81BC82BC83BC86BC87BC89BC8ABC8DBC8F +BC90BC91BC92BC93BC96BC98BC9BBC9CBC9DBC9EBC9FBCA2BCA3BCA5BCA6BCA9 +BCAABCABBCACBCADBCAEBCAFBCB2BCB6BCB7BCB8BCB9BCBABCBBBCBEBCBFBCC1 +BCC2BCC3BCC5BCC6BCC7BCC8BCC9BCCABCCBBCCCBCCEBCD2BCD3BCD4BCD6BCD7 +BCD9BCDABCDBBCDDBCDEBCDFBCE0BCE1BCE2BCE3BCE4BCE5BCE6BCE7BCE8BCE9 +BCEABCEBBCECBCEDBCEEBCEFBCF0BCF1BCF2BCF3BCF7BCF9BCFABCFBBCFD0000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BCFEBCFFBD00BD01BD02BD03BD06BD08BD0ABD0BBD0CBD0DBD0EBD0FBD11 +BD12BD13BD15BD16BD17BD18BD19BD1ABD1BBD1CBD1D00000000000000000000 +0000BD1EBD1FBD20BD21BD22BD23BD25BD26BD27BD28BD29BD2ABD2BBD2DBD2E +BD2FBD30BD31BD32BD33BD34BD35BD36BD37BD38BD3900000000000000000000 +0000BD3ABD3BBD3CBD3DBD3EBD3FBD41BD42BD43BD44BD45BD46BD47BD4ABD4B +BD4DBD4EBD4FBD51BD52BD53BD54BD55BD56BD57BD5ABD5BBD5CBD5DBD5EBD5F +BD60BD61BD62BD63BD65BD66BD67BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71 +BD72BD73BD74BD75BD76BD77BD78BD79BD7ABD7BBD7CBD7DBD7EBD7FBD82BD83 +BD85BD86BD8BBD8CBD8DBD8EBD8FBD92BD94BD96BD97BD98BD9BBD9DBD9EBD9F +BDA0BDA1BDA2BDA3BDA5BDA6BDA7BDA8BDA9BDAABDABBDACBDADBDAEBDAFBDB1 +BDB2BDB3BDB4BDB5BDB6BDB7BDB9BDBABDBBBDBCBDBDBDBEBDBFBDC0BDC1BDC2 +BDC3BDC4BDC5BDC6BDC7BDC8BDC9BDCABDCBBDCCBDCDBDCEBDCFBDD0BDD10000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BDD2BDD3BDD6BDD7BDD9BDDABDDBBDDDBDDEBDDFBDE0BDE1BDE2BDE3BDE4 +BDE5BDE6BDE7BDE8BDEABDEBBDECBDEDBDEEBDEFBDF100000000000000000000 +0000BDF2BDF3BDF5BDF6BDF7BDF9BDFABDFBBDFCBDFDBDFEBDFFBE01BE02BE04 +BE06BE07BE08BE09BE0ABE0BBE0EBE0FBE11BE12BE1300000000000000000000 +0000BE15BE16BE17BE18BE19BE1ABE1BBE1EBE20BE21BE22BE23BE24BE25BE26 +BE27BE28BE29BE2ABE2BBE2CBE2DBE2EBE2FBE30BE31BE32BE33BE34BE35BE36 +BE37BE38BE39BE3ABE3BBE3CBE3DBE3EBE3FBE40BE41BE42BE43BE46BE47BE49 +BE4ABE4BBE4DBE4FBE50BE51BE52BE53BE56BE58BE5CBE5DBE5EBE5FBE62BE63 +BE65BE66BE67BE69BE6BBE6CBE6DBE6EBE6FBE72BE76BE77BE78BE79BE7ABE7E +BE7FBE81BE82BE83BE85BE86BE87BE88BE89BE8ABE8BBE8EBE92BE93BE94BE95 +BE96BE97BE9ABE9BBE9CBE9DBE9EBE9FBEA0BEA1BEA2BEA3BEA4BEA5BEA6BEA7 +BEA9BEAABEABBEACBEADBEAEBEAFBEB0BEB1BEB2BEB3BEB4BEB5BEB6BEB70000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BEB8BEB9BEBABEBBBEBCBEBDBEBEBEBFBEC0BEC1BEC2BEC3BEC4BEC5BEC6 +BEC7BEC8BEC9BECABECBBECCBECDBECEBECFBED2BED300000000000000000000 +0000BED5BED6BED9BEDABEDBBEDCBEDDBEDEBEDFBEE1BEE2BEE6BEE7BEE8BEE9 +BEEABEEBBEEDBEEEBEEFBEF0BEF1BEF2BEF3BEF4BEF500000000000000000000 +0000BEF6BEF7BEF8BEF9BEFABEFBBEFCBEFDBEFEBEFFBF00BF02BF03BF04BF05 +BF06BF07BF0ABF0BBF0CBF0DBF0EBF0FBF10BF11BF12BF13BF14BF15BF16BF17 +BF1ABF1EBF1FBF20BF21BF22BF23BF24BF25BF26BF27BF28BF29BF2ABF2BBF2C +BF2DBF2EBF2FBF30BF31BF32BF33BF34BF35BF36BF37BF38BF39BF3ABF3BBF3C +BF3DBF3EBF3FBF42BF43BF45BF46BF47BF49BF4ABF4BBF4CBF4DBF4EBF4FBF52 +BF53BF54BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63 +BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73 +BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF7FBF80BF81BF820000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BF83BF84BF85BF86BF87BF88BF89BF8ABF8BBF8CBF8DBF8EBF8FBF90BF91 +BF92BF93BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9D00000000000000000000 +0000BF9EBF9FBFA0BFA1BFA2BFA3BFA4BFA5BFA6BFA7BFA8BFA9BFAABFABBFAC +BFADBFAEBFAFBFB1BFB2BFB3BFB4BFB5BFB6BFB7BFB800000000000000000000 +0000BFB9BFBABFBBBFBCBFBDBFBEBFBFBFC0BFC1BFC2BFC3BFC4BFC6BFC7BFC8 +BFC9BFCABFCBBFCEBFCFBFD1BFD2BFD3BFD5BFD6BFD7BFD8BFD9BFDABFDBBFDD +BFDEBFE0BFE2BFE3BFE4BFE5BFE6BFE7BFE8BFE9BFEABFEBBFECBFEDBFEEBFEF +BFF0BFF1BFF2BFF3BFF4BFF5BFF6BFF7BFF8BFF9BFFABFFBBFFCBFFDBFFEBFFF +C000C001C002C003C004C005C006C007C008C009C00AC00BC00CC00DC00EC00F +C010C011C012C013C014C015C016C017C018C019C01AC01BC01CC01DC01EC01F +C020C021C022C023C024C025C026C027C028C029C02AC02BC02CC02DC02EC02F +C030C031C032C033C034C035C036C037C038C039C03AC03BC03DC03EC03F0000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04E +C04FC050C052C053C054C055C056C057C059C05AC05B00000000000000000000 +0000C05DC05EC05FC061C062C063C064C065C066C067C06AC06BC06CC06DC06E +C06FC070C071C072C073C074C075C076C077C078C07900000000000000000000 +0000C07AC07BC07CC07DC07EC07FC080C081C082C083C084C085C086C087C088 +C089C08AC08BC08CC08DC08EC08FC092C093C095C096C097C099C09AC09BC09C +C09DC09EC09FC0A2C0A4C0A6C0A7C0A8C0A9C0AAC0ABC0AEC0B1C0B2C0B7C0B8 +C0B9C0BAC0BBC0BEC0C2C0C3C0C4C0C6C0C7C0CAC0CBC0CDC0CEC0CFC0D1C0D2 +C0D3C0D4C0D5C0D6C0D7C0DAC0DEC0DFC0E0C0E1C0E2C0E3C0E6C0E7C0E9C0EA +C0EBC0EDC0EEC0EFC0F0C0F1C0F2C0F3C0F6C0F8C0FAC0FBC0FCC0FDC0FEC0FF +C101C102C103C105C106C107C109C10AC10BC10CC10DC10EC10FC111C112C113 +C114C116C117C118C119C11AC11BC121C122C125C128C129C12AC12BC12E0000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C132C133C134C135C137C13AC13BC13DC13EC13FC141C142C143C144C145 +C146C147C14AC14EC14FC150C151C152C153C156C15700000000000000000000 +0000C159C15AC15BC15DC15EC15FC160C161C162C163C166C16AC16BC16CC16D +C16EC16FC171C172C173C175C176C177C179C17AC17B00000000000000000000 +0000C17CC17DC17EC17FC180C181C182C183C184C186C187C188C189C18AC18B +C18FC191C192C193C195C197C198C199C19AC19BC19EC1A0C1A2C1A3C1A4C1A6 +C1A7C1AAC1ABC1ADC1AEC1AFC1B1C1B2C1B3C1B4C1B5C1B6C1B7C1B8C1B9C1BA +C1BBC1BCC1BEC1BFC1C0C1C1C1C2C1C3C1C5C1C6C1C7C1C9C1CAC1CBC1CDC1CE +C1CFC1D0C1D1C1D2C1D3C1D5C1D6C1D9C1DAC1DBC1DCC1DDC1DEC1DFC1E1C1E2 +C1E3C1E5C1E6C1E7C1E9C1EAC1EBC1ECC1EDC1EEC1EFC1F2C1F4C1F5C1F6C1F7 +C1F8C1F9C1FAC1FBC1FEC1FFC201C202C203C205C206C207C208C209C20AC20B +C20EC210C212C213C214C215C216C217C21AC21BC21DC21EC221C222C2230000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C224C225C226C227C22AC22CC22EC230C233C235C236C237C238C239C23A +C23BC23CC23DC23EC23FC240C241C242C243C244C24500000000000000000000 +0000C246C247C249C24AC24BC24CC24DC24EC24FC252C253C255C256C257C259 +C25AC25BC25CC25DC25EC25FC261C262C263C264C26600000000000000000000 +0000C267C268C269C26AC26BC26EC26FC271C272C273C275C276C277C278C279 +C27AC27BC27EC280C282C283C284C285C286C287C28AC28BC28CC28DC28EC28F +C291C292C293C294C295C296C297C299C29AC29CC29EC29FC2A0C2A1C2A2C2A3 +C2A6C2A7C2A9C2AAC2ABC2AEC2AFC2B0C2B1C2B2C2B3C2B6C2B8C2BAC2BBC2BC +C2BDC2BEC2BFC2C0C2C1C2C2C2C3C2C4C2C5C2C6C2C7C2C8C2C9C2CAC2CBC2CC +C2CDC2CEC2CFC2D0C2D1C2D2C2D3C2D4C2D5C2D6C2D7C2D8C2D9C2DAC2DBC2DE +C2DFC2E1C2E2C2E5C2E6C2E7C2E8C2E9C2EAC2EEC2F0C2F2C2F3C2F4C2F5C2F7 +C2FAC2FDC2FEC2FFC301C302C303C304C305C306C307C30AC30BC30EC30F0000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C310C311C312C316C317C319C31AC31BC31DC31EC31FC320C321C322C323 +C326C327C32AC32BC32CC32DC32EC32FC330C331C33200000000000000000000 +0000C333C334C335C336C337C338C339C33AC33BC33CC33DC33EC33FC340C341 +C342C343C344C346C347C348C349C34AC34BC34CC34D00000000000000000000 +0000C34EC34FC350C351C352C353C354C355C356C357C358C359C35AC35BC35C +C35DC35EC35FC360C361C362C363C364C365C366C367C36AC36BC36DC36EC36F +C371C373C374C375C376C377C37AC37BC37EC37FC380C381C382C383C385C386 +C387C389C38AC38BC38DC38EC38FC390C391C392C393C394C395C396C397C398 +C399C39AC39BC39CC39DC39EC39FC3A0C3A1C3A2C3A3C3A4C3A5C3A6C3A7C3A8 +C3A9C3AAC3ABC3ACC3ADC3AEC3AFC3B0C3B1C3B2C3B3C3B4C3B5C3B6C3B7C3B8 +C3B9C3BAC3BBC3BCC3BDC3BEC3BFC3C1C3C2C3C3C3C4C3C5C3C6C3C7C3C8C3C9 +C3CAC3CBC3CCC3CDC3CEC3CFC3D0C3D1C3D2C3D3C3D4C3D5C3D6C3D7C3DA0000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C3DBC3DDC3DEC3E1C3E3C3E4C3E5C3E6C3E7C3EAC3EBC3ECC3EEC3EFC3F0 +C3F1C3F2C3F3C3F6C3F7C3F9C3FAC3FBC3FCC3FDC3FE00000000000000000000 +0000C3FFC400C401C402C403C404C405C406C407C409C40AC40BC40CC40DC40E +C40FC411C412C413C414C415C416C417C418C419C41A00000000000000000000 +0000C41BC41CC41DC41EC41FC420C421C422C423C425C426C427C428C429C42A +C42BC42DC42EC42FC431C432C433C435C436C437C438C439C43AC43BC43EC43F +C440C441C442C443C444C445C446C447C449C44AC44BC44CC44DC44EC44FC450 +C451C452C453C454C455C456C457C458C459C45AC45BC45CC45DC45EC45FC460 +C461C462C463C466C467C469C46AC46BC46DC46EC46FC470C471C472C473C476 +C477C478C47AC47BC47CC47DC47EC47FC481C482C483C484C485C486C487C488 +C489C48AC48BC48CC48DC48EC48FC490C491C492C493C495C496C497C498C499 +C49AC49BC49DC49EC49FC4A0C4A1C4A2C4A3C4A4C4A5C4A6C4A7C4A8C4A90000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C4AAC4ABC4ACC4ADC4AEC4AFC4B0C4B1C4B2C4B3C4B4C4B5C4B6C4B7C4B9 +C4BAC4BBC4BDC4BEC4BFC4C0C4C1C4C2C4C3C4C4C4C500000000000000000000 +0000C4C6C4C7C4C8C4C9C4CAC4CBC4CCC4CDC4CEC4CFC4D0C4D1C4D2C4D3C4D4 +C4D5C4D6C4D7C4D8C4D9C4DAC4DBC4DCC4DDC4DEC4DF00000000000000000000 +0000C4E0C4E1C4E2C4E3C4E4C4E5C4E6C4E7C4E8C4EAC4EBC4ECC4EDC4EEC4EF +C4F2C4F3C4F5C4F6C4F7C4F9C4FBC4FCC4FDC4FEC502C503C504C505C506C507 +C508C509C50AC50BC50DC50EC50FC511C512C513C515C516C517C518C519C51A +C51BC51DC51EC51FC520C521C522C523C524C525C526C527C52AC52BC52DC52E +C52FC531C532C533C534C535C536C537C53AC53CC53EC53FC540C541C542C543 +C546C547C54BC54FC550C551C552C556C55AC55BC55CC55FC562C563C565C566 +C567C569C56AC56BC56CC56DC56EC56FC572C576C577C578C579C57AC57BC57E +C57FC581C582C583C585C586C588C589C58AC58BC58EC590C592C593C5940000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C596C599C59AC59BC59DC59EC59FC5A1C5A2C5A3C5A4C5A5C5A6C5A7C5A8 +C5AAC5ABC5ACC5ADC5AEC5AFC5B0C5B1C5B2C5B3C5B600000000000000000000 +0000C5B7C5BAC5BFC5C0C5C1C5C2C5C3C5CBC5CDC5CFC5D2C5D3C5D5C5D6C5D7 +C5D9C5DAC5DBC5DCC5DDC5DEC5DFC5E2C5E4C5E6C5E700000000000000000000 +0000C5E8C5E9C5EAC5EBC5EFC5F1C5F2C5F3C5F5C5F8C5F9C5FAC5FBC602C603 +C604C609C60AC60BC60DC60EC60FC611C612C613C614C615C616C617C61AC61D +C61EC61FC620C621C622C623C626C627C629C62AC62BC62FC631C632C636C638 +C63AC63CC63DC63EC63FC642C643C645C646C647C649C64AC64BC64CC64DC64E +C64FC652C656C657C658C659C65AC65BC65EC65FC661C662C663C664C665C666 +C667C668C669C66AC66BC66DC66EC670C672C673C674C675C676C677C67AC67B +C67DC67EC67FC681C682C683C684C685C686C687C68AC68CC68EC68FC690C691 +C692C693C696C697C699C69AC69BC69DC69EC69FC6A0C6A1C6A2C6A3C6A60000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6A8C6AAC6ABC6ACC6ADC6AEC6AFC6B2C6B3C6B5C6B6C6B7C6BBC6BCC6BD +C6BEC6BFC6C2C6C4C6C6C6C7C6C8C6C9C6CAC6CBC6CE00000000000000000000 +0000C6CFC6D1C6D2C6D3C6D5C6D6C6D7C6D8C6D9C6DAC6DBC6DEC6DFC6E2C6E3 +C6E4C6E5C6E6C6E7C6EAC6EBC6EDC6EEC6EFC6F1C6F200000000000000000000 +0000C6F3C6F4C6F5C6F6C6F7C6FAC6FBC6FCC6FEC6FFC700C701C702C703C706 +C707C709C70AC70BC70DC70EC70FC710C711C712C713C716C718C71AC71BC71C +C71DC71EC71FC722C723C725C726C727C729C72AC72BC72CC72DC72EC72FC732 +C734C736C738C739C73AC73BC73EC73FC741C742C743C745C746C747C748C749 +C74BC74EC750C759C75AC75BC75DC75EC75FC761C762C763C764C765C766C767 +C769C76AC76CC76DC76EC76FC770C771C772C773C776C777C779C77AC77BC77F +C780C781C782C786C78BC78CC78DC78FC792C793C795C799C79BC79CC79DC79E +C79FC7A2C7A7C7A8C7A9C7AAC7ABC7AEC7AFC7B1C7B2C7B3C7B5C7B6C7B70000 +A0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C7B8C7B9C7BAC7BBC7BEC7C2C7C3C7C4C7C5C7C6C7C7C7CAC7CBC7CDC7CF +C7D1C7D2C7D3C7D4C7D5C7D6C7D7C7D9C7DAC7DBC7DC00000000000000000000 +0000C7DEC7DFC7E0C7E1C7E2C7E3C7E5C7E6C7E7C7E9C7EAC7EBC7EDC7EEC7EF +C7F0C7F1C7F2C7F3C7F4C7F5C7F6C7F7C7F8C7F9C7FA00000000000000000000 +0000C7FBC7FCC7FDC7FEC7FFC802C803C805C806C807C809C80BC80CC80DC80E +C80FC812C814C817C818C819C81AC81BC81EC81FC821C822C823C825C826C827 +C828C829C82AC82BC82EC830C832C833C834C835C836C837C839C83AC83BC83D +C83EC83FC841C842C843C844C845C846C847C84AC84BC84EC84FC850C851C852 +C853C855C856C857C858C859C85AC85BC85CC85DC85EC85FC860C861C862C863 +C864C865C866C867C868C869C86AC86BC86CC86DC86EC86FC872C873C875C876 +C877C879C87BC87CC87DC87EC87FC882C884C888C889C88AC88EC88FC890C891 +C892C893C895C896C897C898C899C89AC89BC89CC89EC8A0C8A2C8A3C8A40000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C8A5C8A6C8A7C8A9C8AAC8ABC8ACC8ADC8AEC8AFC8B0C8B1C8B2C8B3C8B4 +C8B5C8B6C8B7C8B8C8B9C8BAC8BBC8BEC8BFC8C0C8C100000000000000000000 +0000C8C2C8C3C8C5C8C6C8C7C8C9C8CAC8CBC8CDC8CEC8CFC8D0C8D1C8D2C8D3 +C8D6C8D8C8DAC8DBC8DCC8DDC8DEC8DFC8E2C8E3C8E500000000000000000000 +0000C8E6C8E7C8E8C8E9C8EAC8EBC8ECC8EDC8EEC8EFC8F0C8F1C8F2C8F3C8F4 +C8F6C8F7C8F8C8F9C8FAC8FBC8FEC8FFC901C902C903C907C908C909C90AC90B +C90E30003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C910C912C913C914C915C916C917C919C91AC91BC91CC91DC91EC91FC920 +C921C922C923C924C925C926C927C928C929C92AC92B00000000000000000000 +0000C92DC92EC92FC930C931C932C933C935C936C937C938C939C93AC93BC93C +C93DC93EC93FC940C941C942C943C944C945C946C94700000000000000000000 +0000C948C949C94AC94BC94CC94DC94EC94FC952C953C955C956C957C959C95A +C95BC95CC95DC95EC95FC962C964C965C966C967C968C969C96AC96BC96DC96E +C96F21D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D8212120AC00AE00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C971C972C973C975C976C977C978C979C97AC97BC97DC97EC97FC980C981 +C982C983C984C985C986C987C98AC98BC98DC98EC98F00000000000000000000 +0000C991C992C993C994C995C996C997C99AC99CC99EC99FC9A0C9A1C9A2C9A3 +C9A4C9A5C9A6C9A7C9A8C9A9C9AAC9ABC9ACC9ADC9AE00000000000000000000 +0000C9AFC9B0C9B1C9B2C9B3C9B4C9B5C9B6C9B7C9B8C9B9C9BAC9BBC9BCC9BD +C9BEC9BFC9C2C9C3C9C5C9C6C9C9C9CBC9CCC9CDC9CEC9CFC9D2C9D4C9D7C9D8 +C9DBFF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9DEC9DFC9E1C9E3C9E5C9E6C9E8C9E9C9EAC9EBC9EEC9F2C9F3C9F4C9F5 +C9F6C9F7C9FAC9FBC9FDC9FEC9FFCA01CA02CA03CA0400000000000000000000 +0000CA05CA06CA07CA0ACA0ECA0FCA10CA11CA12CA13CA15CA16CA17CA19CA1A +CA1BCA1CCA1DCA1ECA1FCA20CA21CA22CA23CA24CA2500000000000000000000 +0000CA26CA27CA28CA2ACA2BCA2CCA2DCA2ECA2FCA30CA31CA32CA33CA34CA35 +CA36CA37CA38CA39CA3ACA3BCA3CCA3DCA3ECA3FCA40CA41CA42CA43CA44CA45 +CA46313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CA47CA48CA49CA4ACA4BCA4ECA4FCA51CA52CA53CA55CA56CA57CA58CA59 +CA5ACA5BCA5ECA62CA63CA64CA65CA66CA67CA69CA6A00000000000000000000 +0000CA6BCA6CCA6DCA6ECA6FCA70CA71CA72CA73CA74CA75CA76CA77CA78CA79 +CA7ACA7BCA7CCA7ECA7FCA80CA81CA82CA83CA85CA8600000000000000000000 +0000CA87CA88CA89CA8ACA8BCA8CCA8DCA8ECA8FCA90CA91CA92CA93CA94CA95 +CA96CA97CA99CA9ACA9BCA9CCA9DCA9ECA9FCAA0CAA1CAA2CAA3CAA4CAA5CAA6 +CAA7217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CAA8CAA9CAAACAABCAACCAADCAAECAAFCAB0CAB1CAB2CAB3CAB4CAB5CAB6 +CAB7CAB8CAB9CABACABBCABECABFCAC1CAC2CAC3CAC500000000000000000000 +0000CAC6CAC7CAC8CAC9CACACACBCACECAD0CAD2CAD4CAD5CAD6CAD7CADACADB +CADCCADDCADECADFCAE1CAE2CAE3CAE4CAE5CAE6CAE700000000000000000000 +0000CAE8CAE9CAEACAEBCAEDCAEECAEFCAF0CAF1CAF2CAF3CAF5CAF6CAF7CAF8 +CAF9CAFACAFBCAFCCAFDCAFECAFFCB00CB01CB02CB03CB04CB05CB06CB07CB09 +CB0A25002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CB0BCB0CCB0DCB0ECB0FCB11CB12CB13CB15CB16CB17CB19CB1ACB1BCB1C +CB1DCB1ECB1FCB22CB23CB24CB25CB26CB27CB28CB2900000000000000000000 +0000CB2ACB2BCB2CCB2DCB2ECB2FCB30CB31CB32CB33CB34CB35CB36CB37CB38 +CB39CB3ACB3BCB3CCB3DCB3ECB3FCB40CB42CB43CB4400000000000000000000 +0000CB45CB46CB47CB4ACB4BCB4DCB4ECB4FCB51CB52CB53CB54CB55CB56CB57 +CB5ACB5BCB5CCB5ECB5FCB60CB61CB62CB63CB65CB66CB67CB68CB69CB6ACB6B +CB6C3395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CB6DCB6ECB6FCB70CB71CB72CB73CB74CB75CB76CB77CB7ACB7BCB7CCB7D +CB7ECB7FCB80CB81CB82CB83CB84CB85CB86CB87CB8800000000000000000000 +0000CB89CB8ACB8BCB8CCB8DCB8ECB8FCB90CB91CB92CB93CB94CB95CB96CB97 +CB98CB99CB9ACB9BCB9DCB9ECB9FCBA0CBA1CBA2CBA300000000000000000000 +0000CBA4CBA5CBA6CBA7CBA8CBA9CBAACBABCBACCBADCBAECBAFCBB0CBB1CBB2 +CBB3CBB4CBB5CBB6CBB7CBB9CBBACBBBCBBCCBBDCBBECBBFCBC0CBC1CBC2CBC3 +CBC400C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CBC5CBC6CBC7CBC8CBC9CBCACBCBCBCCCBCDCBCECBCFCBD0CBD1CBD2CBD3 +CBD5CBD6CBD7CBD8CBD9CBDACBDBCBDCCBDDCBDECBDF00000000000000000000 +0000CBE0CBE1CBE2CBE3CBE5CBE6CBE8CBEACBEBCBECCBEDCBEECBEFCBF0CBF1 +CBF2CBF3CBF4CBF5CBF6CBF7CBF8CBF9CBFACBFBCBFC00000000000000000000 +0000CBFDCBFECBFFCC00CC01CC02CC03CC04CC05CC06CC07CC08CC09CC0ACC0B +CC0ECC0FCC11CC12CC13CC15CC16CC17CC18CC19CC1ACC1BCC1ECC1FCC20CC23 +CC2400E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC25CC26CC2ACC2BCC2DCC2FCC31CC32CC33CC34CC35CC36CC37CC3ACC3F +CC40CC41CC42CC43CC46CC47CC49CC4ACC4BCC4DCC4E00000000000000000000 +0000CC4FCC50CC51CC52CC53CC56CC5ACC5BCC5CCC5DCC5ECC5FCC61CC62CC63 +CC65CC67CC69CC6ACC6BCC6CCC6DCC6ECC6FCC71CC7200000000000000000000 +0000CC73CC74CC76CC77CC78CC79CC7ACC7BCC7CCC7DCC7ECC7FCC80CC81CC82 +CC83CC84CC85CC86CC87CC88CC89CC8ACC8BCC8CCC8DCC8ECC8FCC90CC91CC92 +CC93304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC94CC95CC96CC97CC9ACC9BCC9DCC9ECC9FCCA1CCA2CCA3CCA4CCA5CCA6 +CCA7CCAACCAECCAFCCB0CCB1CCB2CCB3CCB6CCB7CCB900000000000000000000 +0000CCBACCBBCCBDCCBECCBFCCC0CCC1CCC2CCC3CCC6CCC8CCCACCCBCCCCCCCD +CCCECCCFCCD1CCD2CCD3CCD5CCD6CCD7CCD8CCD9CCDA00000000000000000000 +0000CCDBCCDCCCDDCCDECCDFCCE0CCE1CCE2CCE3CCE5CCE6CCE7CCE8CCE9CCEA +CCEBCCEDCCEECCEFCCF1CCF2CCF3CCF4CCF5CCF6CCF7CCF8CCF9CCFACCFBCCFC +CCFD30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CCFECCFFCD00CD02CD03CD04CD05CD06CD07CD0ACD0BCD0DCD0ECD0FCD11 +CD12CD13CD14CD15CD16CD17CD1ACD1CCD1ECD1FCD2000000000000000000000 +0000CD21CD22CD23CD25CD26CD27CD29CD2ACD2BCD2DCD2ECD2FCD30CD31CD32 +CD33CD34CD35CD36CD37CD38CD3ACD3BCD3CCD3DCD3E00000000000000000000 +0000CD3FCD40CD41CD42CD43CD44CD45CD46CD47CD48CD49CD4ACD4BCD4CCD4D +CD4ECD4FCD50CD51CD52CD53CD54CD55CD56CD57CD58CD59CD5ACD5BCD5DCD5E +CD5F04100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CD61CD62CD63CD65CD66CD67CD68CD69CD6ACD6BCD6ECD70CD72CD73CD74 +CD75CD76CD77CD79CD7ACD7BCD7CCD7DCD7ECD7FCD8000000000000000000000 +0000CD81CD82CD83CD84CD85CD86CD87CD89CD8ACD8BCD8CCD8DCD8ECD8FCD90 +CD91CD92CD93CD96CD97CD99CD9ACD9BCD9DCD9ECD9F00000000000000000000 +0000CDA0CDA1CDA2CDA3CDA6CDA8CDAACDABCDACCDADCDAECDAFCDB1CDB2CDB3 +CDB4CDB5CDB6CDB7CDB8CDB9CDBACDBBCDBCCDBDCDBECDBFCDC0CDC1CDC2CDC3 +CDC5000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CDC6CDC7CDC8CDC9CDCACDCBCDCDCDCECDCFCDD1CDD2CDD3CDD4CDD5CDD6 +CDD7CDD8CDD9CDDACDDBCDDCCDDDCDDECDDFCDE0CDE100000000000000000000 +0000CDE2CDE3CDE4CDE5CDE6CDE7CDE9CDEACDEBCDEDCDEECDEFCDF1CDF2CDF3 +CDF4CDF5CDF6CDF7CDFACDFCCDFECDFFCE00CE01CE0200000000000000000000 +0000CE03CE05CE06CE07CE09CE0ACE0BCE0DCE0ECE0FCE10CE11CE12CE13CE15 +CE16CE17CE18CE1ACE1BCE1CCE1DCE1ECE1FCE22CE23CE25CE26CE27CE29CE2A +CE2B000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE2CCE2DCE2ECE2FCE32CE34CE36CE37CE38CE39CE3ACE3BCE3CCE3DCE3E +CE3FCE40CE41CE42CE43CE44CE45CE46CE47CE48CE4900000000000000000000 +0000CE4ACE4BCE4CCE4DCE4ECE4FCE50CE51CE52CE53CE54CE55CE56CE57CE5A +CE5BCE5DCE5ECE62CE63CE64CE65CE66CE67CE6ACE6C00000000000000000000 +0000CE6ECE6FCE70CE71CE72CE73CE76CE77CE79CE7ACE7BCE7DCE7ECE7FCE80 +CE81CE82CE83CE86CE88CE8ACE8BCE8CCE8DCE8ECE8FCE92CE93CE95CE96CE97 +CE99000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE9ACE9BCE9CCE9DCE9ECE9FCEA2CEA6CEA7CEA8CEA9CEAACEABCEAECEAF +CEB0CEB1CEB2CEB3CEB4CEB5CEB6CEB7CEB8CEB9CEBA00000000000000000000 +0000CEBBCEBCCEBDCEBECEBFCEC0CEC2CEC3CEC4CEC5CEC6CEC7CEC8CEC9CECA +CECBCECCCECDCECECECFCED0CED1CED2CED3CED4CED500000000000000000000 +0000CED6CED7CED8CED9CEDACEDBCEDCCEDDCEDECEDFCEE0CEE1CEE2CEE3CEE6 +CEE7CEE9CEEACEEDCEEECEEFCEF0CEF1CEF2CEF3CEF6CEFACEFBCEFCCEFDCEFE +CEFFAC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CF02CF03CF05CF06CF07CF09CF0ACF0BCF0CCF0DCF0ECF0FCF12CF14CF16 +CF17CF18CF19CF1ACF1BCF1DCF1ECF1FCF21CF22CF2300000000000000000000 +0000CF25CF26CF27CF28CF29CF2ACF2BCF2ECF32CF33CF34CF35CF36CF37CF39 +CF3ACF3BCF3CCF3DCF3ECF3FCF40CF41CF42CF43CF4400000000000000000000 +0000CF45CF46CF47CF48CF49CF4ACF4BCF4CCF4DCF4ECF4FCF50CF51CF52CF53 +CF56CF57CF59CF5ACF5BCF5DCF5ECF5FCF60CF61CF62CF63CF66CF68CF6ACF6B +CF6CAD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CF6DCF6ECF6FCF72CF73CF75CF76CF77CF79CF7ACF7BCF7CCF7DCF7ECF7F +CF81CF82CF83CF84CF86CF87CF88CF89CF8ACF8BCF8D00000000000000000000 +0000CF8ECF8FCF90CF91CF92CF93CF94CF95CF96CF97CF98CF99CF9ACF9BCF9C +CF9DCF9ECF9FCFA0CFA2CFA3CFA4CFA5CFA6CFA7CFA900000000000000000000 +0000CFAACFABCFACCFADCFAECFAFCFB1CFB2CFB3CFB4CFB5CFB6CFB7CFB8CFB9 +CFBACFBBCFBCCFBDCFBECFBFCFC0CFC1CFC2CFC3CFC5CFC6CFC7CFC8CFC9CFCA +CFCBAE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CFCCCFCDCFCECFCFCFD0CFD1CFD2CFD3CFD4CFD5CFD6CFD7CFD8CFD9CFDA +CFDBCFDCCFDDCFDECFDFCFE2CFE3CFE5CFE6CFE7CFE900000000000000000000 +0000CFEACFEBCFECCFEDCFEECFEFCFF2CFF4CFF6CFF7CFF8CFF9CFFACFFBCFFD +CFFECFFFD001D002D003D005D006D007D008D009D00A00000000000000000000 +0000D00BD00CD00DD00ED00FD010D012D013D014D015D016D017D019D01AD01B +D01CD01DD01ED01FD020D021D022D023D024D025D026D027D028D029D02AD02B +D02CB05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D02ED02FD030D031D032D033D036D037D039D03AD03BD03DD03ED03FD040 +D041D042D043D046D048D04AD04BD04CD04DD04ED04F00000000000000000000 +0000D051D052D053D055D056D057D059D05AD05BD05CD05DD05ED05FD061D062 +D063D064D065D066D067D068D069D06AD06BD06ED06F00000000000000000000 +0000D071D072D073D075D076D077D078D079D07AD07BD07ED07FD080D082D083 +D084D085D086D087D088D089D08AD08BD08CD08DD08ED08FD090D091D092D093 +D094B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D095D096D097D098D099D09AD09BD09CD09DD09ED09FD0A0D0A1D0A2D0A3 +D0A6D0A7D0A9D0AAD0ABD0ADD0AED0AFD0B0D0B1D0B200000000000000000000 +0000D0B3D0B6D0B8D0BAD0BBD0BCD0BDD0BED0BFD0C2D0C3D0C5D0C6D0C7D0CA +D0CBD0CCD0CDD0CED0CFD0D2D0D6D0D7D0D8D0D9D0DA00000000000000000000 +0000D0DBD0DED0DFD0E1D0E2D0E3D0E5D0E6D0E7D0E8D0E9D0EAD0EBD0EED0F2 +D0F3D0F4D0F5D0F6D0F7D0F9D0FAD0FBD0FCD0FDD0FED0FFD100D101D102D103 +D104B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D105D106D107D108D109D10AD10BD10CD10ED10FD110D111D112D113D114 +D115D116D117D118D119D11AD11BD11CD11DD11ED11F00000000000000000000 +0000D120D121D122D123D124D125D126D127D128D129D12AD12BD12CD12DD12E +D12FD132D133D135D136D137D139D13BD13CD13DD13E00000000000000000000 +0000D13FD142D146D147D148D149D14AD14BD14ED14FD151D152D153D155D156 +D157D158D159D15AD15BD15ED160D162D163D164D165D166D167D169D16AD16B +D16DB540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D16ED16FD170D171D172D173D174D175D176D177D178D179D17AD17BD17D +D17ED17FD180D181D182D183D185D186D187D189D18A00000000000000000000 +0000D18BD18CD18DD18ED18FD190D191D192D193D194D195D196D197D198D199 +D19AD19BD19CD19DD19ED19FD1A2D1A3D1A5D1A6D1A700000000000000000000 +0000D1A9D1AAD1ABD1ACD1ADD1AED1AFD1B2D1B4D1B6D1B7D1B8D1B9D1BBD1BD +D1BED1BFD1C1D1C2D1C3D1C4D1C5D1C6D1C7D1C8D1C9D1CAD1CBD1CCD1CDD1CE +D1CFB798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D1D0D1D1D1D2D1D3D1D4D1D5D1D6D1D7D1D9D1DAD1DBD1DCD1DDD1DED1DF +D1E0D1E1D1E2D1E3D1E4D1E5D1E6D1E7D1E8D1E9D1EA00000000000000000000 +0000D1EBD1ECD1EDD1EED1EFD1F0D1F1D1F2D1F3D1F5D1F6D1F7D1F9D1FAD1FB +D1FCD1FDD1FED1FFD200D201D202D203D204D205D20600000000000000000000 +0000D208D20AD20BD20CD20DD20ED20FD211D212D213D214D215D216D217D218 +D219D21AD21BD21CD21DD21ED21FD220D221D222D223D224D225D226D227D228 +D229B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D22AD22BD22ED22FD231D232D233D235D236D237D238D239D23AD23BD23E +D240D242D243D244D245D246D247D249D24AD24BD24C00000000000000000000 +0000D24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25B +D25DD25ED25FD260D261D262D263D265D266D267D26800000000000000000000 +0000D269D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277 +D278D279D27AD27BD27CD27DD27ED27FD282D283D285D286D287D289D28AD28B +D28CBB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D28DD28ED28FD292D293D294D296D297D298D299D29AD29BD29DD29ED29F +D2A1D2A2D2A3D2A5D2A6D2A7D2A8D2A9D2AAD2ABD2AD00000000000000000000 +0000D2AED2AFD2B0D2B2D2B3D2B4D2B5D2B6D2B7D2BAD2BBD2BDD2BED2C1D2C3 +D2C4D2C5D2C6D2C7D2CAD2CCD2CDD2CED2CFD2D0D2D100000000000000000000 +0000D2D2D2D3D2D5D2D6D2D7D2D9D2DAD2DBD2DDD2DED2DFD2E0D2E1D2E2D2E3 +D2E6D2E7D2E8D2E9D2EAD2EBD2ECD2EDD2EED2EFD2F2D2F3D2F5D2F6D2F7D2F9 +D2FABC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D2FBD2FCD2FDD2FED2FFD302D304D306D307D308D309D30AD30BD30FD311 +D312D313D315D317D318D319D31AD31BD31ED322D32300000000000000000000 +0000D324D326D327D32AD32BD32DD32ED32FD331D332D333D334D335D336D337 +D33AD33ED33FD340D341D342D343D346D347D348D34900000000000000000000 +0000D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358 +D359D35AD35BD35CD35DD35ED35FD360D361D362D363D364D365D366D367D368 +D369BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D36AD36BD36CD36DD36ED36FD370D371D372D373D374D375D376D377D378 +D379D37AD37BD37ED37FD381D382D383D385D386D38700000000000000000000 +0000D388D389D38AD38BD38ED392D393D394D395D396D397D39AD39BD39DD39E +D39FD3A1D3A2D3A3D3A4D3A5D3A6D3A7D3AAD3ACD3AE00000000000000000000 +0000D3AFD3B0D3B1D3B2D3B3D3B5D3B6D3B7D3B9D3BAD3BBD3BDD3BED3BFD3C0 +D3C1D3C2D3C3D3C6D3C7D3CAD3CBD3CCD3CDD3CED3CFD3D1D3D2D3D3D3D4D3D5 +D3D6C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D3D7D3D9D3DAD3DBD3DCD3DDD3DED3DFD3E0D3E2D3E4D3E5D3E6D3E7D3E8 +D3E9D3EAD3EBD3EED3EFD3F1D3F2D3F3D3F5D3F6D3F700000000000000000000 +0000D3F8D3F9D3FAD3FBD3FED400D402D403D404D405D406D407D409D40AD40B +D40CD40DD40ED40FD410D411D412D413D414D415D41600000000000000000000 +0000D417D418D419D41AD41BD41CD41ED41FD420D421D422D423D424D425D426 +D427D428D429D42AD42BD42CD42DD42ED42FD430D431D432D433D434D435D436 +D437C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D438D439D43AD43BD43CD43DD43ED43FD441D442D443D445D446D447D448 +D449D44AD44BD44CD44DD44ED44FD450D451D452D45300000000000000000000 +0000D454D455D456D457D458D459D45AD45BD45DD45ED45FD461D462D463D465 +D466D467D468D469D46AD46BD46CD46ED470D471D47200000000000000000000 +0000D473D474D475D476D477D47AD47BD47DD47ED481D483D484D485D486D487 +D48AD48CD48ED48FD490D491D492D493D495D496D497D498D499D49AD49BD49C +D49DC434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D49ED49FD4A0D4A1D4A2D4A3D4A4D4A5D4A6D4A7D4A8D4AAD4ABD4ACD4AD +D4AED4AFD4B0D4B1D4B2D4B3D4B4D4B5D4B6D4B7D4B800000000000000000000 +0000D4B9D4BAD4BBD4BCD4BDD4BED4BFD4C0D4C1D4C2D4C3D4C4D4C5D4C6D4C7 +D4C8D4C9D4CAD4CBD4CDD4CED4CFD4D1D4D2D4D3D4D500000000000000000000 +0000D4D6D4D7D4D8D4D9D4DAD4DBD4DDD4DED4E0D4E1D4E2D4E3D4E4D4E5D4E6 +D4E7D4E9D4EAD4EBD4EDD4EED4EFD4F1D4F2D4F3D4F4D4F5D4F6D4F7D4F9D4FA +D4FCC5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D4FED4FFD500D501D502D503D505D506D507D509D50AD50BD50DD50ED50F +D510D511D512D513D516D518D519D51AD51BD51CD51D00000000000000000000 +0000D51ED51FD520D521D522D523D524D525D526D527D528D529D52AD52BD52C +D52DD52ED52FD530D531D532D533D534D535D536D53700000000000000000000 +0000D538D539D53AD53BD53ED53FD541D542D543D545D546D547D548D549D54A +D54BD54ED550D552D553D554D555D556D557D55AD55BD55DD55ED55FD561D562 +D563C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D564D566D567D56AD56CD56ED56FD570D571D572D573D576D577D579D57A +D57BD57DD57ED57FD580D581D582D583D586D58AD58B00000000000000000000 +0000D58CD58DD58ED58FD591D592D593D594D595D596D597D598D599D59AD59B +D59CD59DD59ED59FD5A0D5A1D5A2D5A3D5A4D5A6D5A700000000000000000000 +0000D5A8D5A9D5AAD5ABD5ACD5ADD5AED5AFD5B0D5B1D5B2D5B3D5B4D5B5D5B6 +D5B7D5B8D5B9D5BAD5BBD5BCD5BDD5BED5BFD5C0D5C1D5C2D5C3D5C4D5C5D5C6 +D5C7C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D5CAD5CBD5CDD5CED5CFD5D1D5D3D5D4D5D5D5D6D5D7D5DAD5DCD5DED5DF +D5E0D5E1D5E2D5E3D5E6D5E7D5E9D5EAD5EBD5EDD5EE00000000000000000000 +0000D5EFD5F0D5F1D5F2D5F3D5F6D5F8D5FAD5FBD5FCD5FDD5FED5FFD602D603 +D605D606D607D609D60AD60BD60CD60DD60ED60FD61200000000000000000000 +0000D616D617D618D619D61AD61BD61DD61ED61FD621D622D623D625D626D627 +D628D629D62AD62BD62CD62ED62FD630D631D632D633D634D635D636D637D63A +D63BC9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D63DD63ED63FD641D642D643D644D646D647D64AD64CD64ED64FD650D652 +D653D656D657D659D65AD65BD65DD65ED65FD660D66100000000000000000000 +0000D662D663D664D665D666D668D66AD66BD66CD66DD66ED66FD672D673D675 +D676D677D678D679D67AD67BD67CD67DD67ED67FD68000000000000000000000 +0000D681D682D684D686D687D688D689D68AD68BD68ED68FD691D692D693D695 +D696D697D698D699D69AD69BD69CD69ED6A0D6A2D6A3D6A4D6A5D6A6D6A7D6A9 +D6AACC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D6ABD6ADD6AED6AFD6B1D6B2D6B3D6B4D6B5D6B6D6B7D6B8D6BAD6BCD6BD +D6BED6BFD6C0D6C1D6C2D6C3D6C6D6C7D6C9D6CAD6CB00000000000000000000 +0000D6CDD6CED6CFD6D0D6D2D6D3D6D5D6D6D6D8D6DAD6DBD6DCD6DDD6DED6DF +D6E1D6E2D6E3D6E5D6E6D6E7D6E9D6EAD6EBD6ECD6ED00000000000000000000 +0000D6EED6EFD6F1D6F2D6F3D6F4D6F6D6F7D6F8D6F9D6FAD6FBD6FED6FFD701 +D702D703D705D706D707D708D709D70AD70BD70CD70DD70ED70FD710D712D713 +D714CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D715D716D717D71AD71BD71DD71ED71FD721D722D723D724D725D726D727 +D72AD72CD72ED72FD730D731D732D733D736D737D73900000000000000000000 +0000D73AD73BD73DD73ED73FD740D741D742D743D745D746D748D74AD74BD74C +D74DD74ED74FD752D753D755D75AD75BD75CD75DD75E00000000000000000000 +0000D75FD762D764D766D767D768D76AD76BD76DD76ED76FD771D772D773D775 +D776D777D778D779D77AD77BD77ED77FD780D782D783D784D785D786D787D78A +D78BD044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D78DD78ED78FD791D792D793D794D795D796D797D79AD79CD79ED79FD7A0 +D7A1D7A2D7A30000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 diff --git a/inkstitch/bin/tcl/encoding/cp950.enc b/inkstitch/bin/tcl/encoding/cp950.enc new file mode 100644 index 0000000..f33d785 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/cp950.enc @@ -0,0 +1,1499 @@ +# Encoding file: cp950, multi-byte +M +003F 0 88 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3000FF0C30013002FF0E2027FF1BFF1AFF1FFF01FE3020262025FE50FE51FE52 +00B7FE54FE55FE56FE57FF5C2013FE312014FE332574FE34FE4FFF08FF09FE35 +FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300BFE3D +FE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FE5BFE5CFE5DFE5E20182019201C201D301D301E20352032FF03FF06FF0A +203B00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC +32A3210500AFFFE3FF3F02CDFE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61FF0B +FF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62FE63 +FE64FE65FE66FF5E2229222A22A52220221F22BF33D233D1222B222E22352234 +26402642229522992191219321902192219621972199219822252223FF0F0000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5 +339C339D339E33CE33A1338E338F33C400B05159515B515E515D5161516355E7 +74E97CCE25812582258325842585258625872588258F258E258D258C258B258A +2589253C2534252C2524251C2594250025022595250C251025142518256D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000256E2570256F2550255E256A256125E225E325E525E4257125722573FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF192160216121622163216421652166 +216721682169302130223023302430253026302730283029534153445345FF21 +FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30FF31 +FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45FF46FF47 +FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55FF560000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF57FF58FF59FF5A039103920393039403950396039703980399039A039B039C +039D039E039F03A003A103A303A403A503A603A703A803A903B103B203B303B4 +03B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C403C5 +03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003110311131123113311431153116311731183119311A311B311C311D311E +311F312031213122312331243125312631273128312902D902C902CA02C702CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000020AC00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201529B +53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E4E8E +4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B535BF8 +5C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC1 +4EC04EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F6 +52065207520852FB52FE52FF53165339534853475345535E538453CB53CA53CD +58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F155FC3 +62086236624B624E652F6587659765A465B965E566F0670867286B206B626B79 +6BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E190000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 +4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553065317 +531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE53E953E8 +53FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA59160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 +5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 +6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 +7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A747ACB +4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F154F0D4F10 +4F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B514951475146514851680000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5171518D51B0521752115212520E521652A3530853215320537053715409540F +540C540A54105401540B54045411540D54085403540E5406541256E056DE56DD +573357305728572D572C572F57295919591A59375938598459785983597D5979 +598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E765E740000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E865EC +65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C596C5F +6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F367F8A +7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C821B +821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F474F57 +4F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F464F630000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B651B75225 +52245229522A522852AB52A952AA52AC532353735375541D542D541E543E5426 +544E542754465443543354485442541B5429544A5439543B5438542E54355436 +5420543C54405431542B541F542C56EA56F056E456EB574A57515740574D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 +598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C415C3F +5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F645F625F77 +5F795FD85FCC5FD75FCD5FF15FEB5FF85FEA6212621162846297629662806276 +6289626D628A627C627E627962736292626F6298626E62956293629162866539 +653B653865F166F4675F674E674F67506751675C6756675E6749674667600000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C906C70 +6C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C986C827076 +707C707D707872627261726072C472C27396752C752B75377538768276EF77E3 +79C179C079BF7A767CFB7F5580968093809D8098809B809A80B2826F82920000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA8F9B +8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632962E +9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F734F7F +4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F914F7A5154 +51525155516951775176517851BD51FD523B52385237523A5230522E52365241 +52BE52BB5352535453535351536653775378537953D653D453D7547354750000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5496547854955480547B5477548454925486547C549054715476548C549A5462 +5468548B547D548E56FA57835777576A5769576157665764577C591C59495947 +59485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D359CA59AF +59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A5C485C450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B5E115E78 +5E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD5FE05FFD +5FF55FFF600F6014602F60356016602A6015602160276029602B601B62166215 +623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D362D462CB +62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D762C662AC +62CE653E65A765BC65FA66146613660C66066602660E6600660F6615660A0000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6607670D670B676D678B67956771679C677367776787679D6797676F6770677F +6789677E67906775679A6793677C676A67726B236B666B676B7F6C136C1B6CE3 +6CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD36CB86CC46CB9 +6CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC6CD66CE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007095708E7092708A7099722C722D723872487267726972C072CE72D972D7 +72D073A973A8739F73AB73A5753D759D7599759A768476C276F276F477E577FD +793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B800580BA80A580A2 +80B180A180AB80A980B480AA80AF81E581FE820D82B3829D829982AD82BD829F +82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D88688ECB8FCE +8FD48FD190B590B890B190B691C791D195779580961C9640963F963B96440000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD14FCF4FDD +4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE4FB751575192 +519151A0524E5243524A524D524C524B524752C752C952C352C1530D5357537B +539A53DB54AC54C054A854CE54C954B854A654B354C754C254BD54AA54C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A057A357A2 +57CE57AE579359555951594F594E595059DC59D859FF59E359E85A0359E559EA +59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D5C4B5CD9 +5CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F885F855F8A5F8B +5F875F8C5F896012601D60206025600E6028604D60706068606260466043606C +606B606A6064624162DC6316630962FC62ED630162EE62FD630762F162F70000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62EF62EC62FE62F463116302653F654565AB65BD65E26625662D66206627662F +661F66286631662466F767FF67D367F167D467D067EC67B667AF67F567E967EF +67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD67D26B6A6B83 +6B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C6D316D1E6D170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D356D0E6D2B70AB +70BA70B370AC70AF70AD70B870AE70A472307272726F727472E972E072E173B7 +73CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB75A475A575A2 +75A3767876867687768876C876C676C376C5770176F976F87709770B76FE76FC +770777DC78027814780C780D794679497948794779B979BA79D179D279CB7A7F +7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F387F8E7FBF80040000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8010800D8011803680D680E580DA80C380C480CC80E180DB80CE80DE80E480DD +81F4822282E78303830582E382DB82E6830482E58302830982D282D782F18301 +82DC82D482D182DE82D382DF82EF830686508679867B867A884D886B898189D4 +8A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE28FEA8FE50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B964C +964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB3500C500D +50234FEF502650254FF8502950165006503C501F501A501250114FFA50005014 +50284FF15021500B501950184FF34FEE502D502A4FFE502B5009517C51A451A5 +51A251CD51CC51C651CB5256525C5254525B525D532A537F539F539D53DF54E8 +55105501553754FC54E554F2550654FA551454E954ED54E1550954EE54EA0000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54E65527550754FD550F5703570457C257D457CB57C35809590F59575958595A +5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A095B6B5C585BB0 +5BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED5CFD5CFB5CEA5CE8 +5CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F925F915F9060590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006063606560506055606D6069606F6084609F609A608D6094608C60856096 +624762F3630862FF634E633E632F635563426346634F6349633A6350633D632A +632B6328634D634C65486549659965C165C566426649664F66436652664C6645 +664166F867146715671768216838684868466853683968426854682968B36817 +684C6851683D67F468506840683C6843682A68456813681868416B8A6B896BB7 +6C236C276C286C266C246CF06D6A6D956D886D876D666D786D776D596D930000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA70D870E470D9 +70C870CF7239727972FC72F972FD72F872F7738673ED740973EE73E073EA73DE +7554755D755C755A755975BE75C575C775B275B375BD75BC75B975C275B8768B +76B076CA76CD76CE7729771F7720772877E9783078277838781D783478370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007825782D7820781F7832795579507960795F7956795E795D7957795A79E4 +79E379E779DF79E679E979D87A847A887AD97B067B117C897D217D177D0B7D0A +7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F947FC57FC18006 +8018801580198017803D803F80F1810280F0810580ED80F4810680F880F38108 +80FD810A80FC80EF81ED81EC82008210822A822B8228822C82BB832B83528354 +834A83388350834983358334834F833283398336831783408331832883430000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8654868A86AA869386A486A9868C86A3869C8870887788818882887D88798A18 +8A108A0E8A0C8A158A0A8A178A138A168A0F8A118C488C7A8C798CA18CA28D77 +8EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF490038FFD90058FF89095 +90E190DD90E29152914D914C91D891DD91D791DC91D995839662966396610000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965B965D96649658965E96BB98E299AC9AA89AD89B259B329B3C4E7E507A +507D505C50475043504C505A504950655076504E5055507550745077504F500F +506F506D515C519551F0526A526F52D252D952D852D55310530F5319533F5340 +533E53C366FC5546556A55665544555E55615543554A55315556554F5555552F +55645538552E555C552C55635533554155575708570B570957DF5805580A5806 +57E057E457FA5802583557F757F9592059625A365A415A495A665A6A5A400000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC65C095C085C075C60 +5C5C5C5D5D075D065D0E5D1B5D165D225D115D295D145D195D245D275D175DE2 +5E385E365E335E375EB75EB85EB65EB55EBE5F355F375F575F6C5F695F6B5F97 +5F995F9E5F985FA15FA05F9C607F60A3608960A060A860CB60B460E660BD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060C560BB60B560DC60BC60D860D560C660DF60B860DA60C7621A621B6248 +63A063A76372639663A263A563776367639863AA637163A963896383639B636B +63A863846388639963A163AC6392638F6380637B63696368637A655D65566551 +65596557555F654F655865556554659C659B65AC65CF65CB65CC65CE665D665A +666466686666665E66F952D7671B688168AF68A2689368B5687F687668B168A7 +689768B0688368C468AD688668856894689D68A8689F68A168826B326BBA0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE46DFB6DFA6E056DC76DCB +6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A6DB56DDA6DEB6DD86DEA +6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109710A70FD70EF723D727D +7281731C731B73167313731973877405740A7403740673FE740D74E074F60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074F7751C75227565756675627570758F75D475D575B575CA75CD768E76D4 +76D276DB7737773E773C77367738773A786B7843784E79657968796D79FB7A92 +7A957B207B287B1B7B2C7B267B197B1E7B2E7C927C977C957D467D437D717D2E +7D397D3C7D407D307D337D447D2F7D427D327D317F3D7F9E7F9A7FCC7FCE7FD2 +801C804A8046812F81168123812B81298130812482028235823782368239838E +839E8398837883A2839683BD83AB8392838A8393838983A08377837B837C0000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +838683A786555F6A86C786C086B686C486B586C686CB86B186AF86C98853889E +888888AB88928896888D888B8993898F8A2A8A1D8A238A258A318A2D8A1F8A1B +8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D678D668DBE8DBA8EDB8EDF9019 +900D901A90179023901F901D90109015901E9020900F90229016901B90140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090E890ED90FD915791CE91F591E691E391E791ED91E99589966A96759673 +96789670967496769677966C96C096EA96E97AE07ADF980298039B5A9CE59E75 +9E7F9EA59EBB50A2508D508550995091508050965098509A670051F152725274 +5275526952DE52DD52DB535A53A5557B558055A7557C558A559D55985582559C +55AA55945587558B558355B355AE559F553E55B2559A55BB55AC55B1557E5589 +55AB5599570D582F582A58345824583058315821581D582058F958FA59600000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD35BD05C0A5C0B5C315D4C +5D505D345D475DFD5E455E3D5E405E435E7E5ECA5EC15EC25EC45F3C5F6D5FA9 +5FAA5FA860D160E160B260B660E0611C612360FA611560F060FB60F4616860F1 +610E60F6610961006112621F624963A3638C63CF63C063E963C963C663CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063D263E363D063E163D663ED63EE637663F463EA63DB645263DA63F9655E +6566656265636591659065AF666E667066746676666F6691667A667E667766FE +66FF671F671D68FA68D568E068D868D7690568DF68F568EE68E768F968D268F2 +68E368CB68CD690D6912690E68C968DA696E68FB6B3E6B3A6B3D6B986B966BBC +6BEF6C2E6C2F6C2C6E2F6E386E546E216E326E676E4A6E206E256E236E1B6E5B +6E586E246E566E6E6E2D6E266E6F6E346E4D6E3A6E2C6E436E1D6E3E6ECB0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E896E196E4E6E636E446E726E696E5F7119711A7126713071217136716E711C +724C728472807336732573347329743A742A743374227425743574367434742F +741B7426742875257526756B756A75E275DB75E375D975D875DE75E0767B767C +7696769376B476DC774F77ED785D786C786F7A0D7A087A0B7A057A007A980000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A977A967AE57AE37B497B567B467B507B527B547B4D7B4B7B4F7B517C9F +7CA57D5E7D507D687D557D2B7D6E7D727D617D667D627D707D7355847FD47FD5 +800B8052808581558154814B8151814E81398146813E814C815381748212821C +83E9840383F8840D83E083C5840B83C183EF83F183F48457840A83F0840C83CC +83FD83F283CA8438840E840483DC840783D483DF865B86DF86D986ED86D486DB +86E486D086DE885788C188C288B1898389968A3B8A608A558A5E8A3C8A410000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A548A5B8A508A468A348A3A8A368A568C618C828CAF8CBC8CB38CBD8CC18CBB +8CC08CB48CB78CB68CBF8CB88D8A8D858D818DCE8DDD8DCB8DDA8DD18DCC8DDB +8DC68EFB8EF88EFC8F9C902E90359031903890329036910290F5910990FE9163 +916591CF9214921592239209921E920D9210920792119594958F958B95910000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000095939592958E968A968E968B967D96859686968D9672968496C196C596C4 +96C696C796EF96F297CC98059806980898E798EA98EF98E998F298ED99AE99AD +9EC39ECD9ED14E8250AD50B550B250B350C550BE50AC50B750BB50AF50C7527F +5277527D52DF52E652E452E252E3532F55DF55E855D355E655CE55DC55C755D1 +55E355E455EF55DA55E155C555C655E555C957125713585E585158585857585A +5854586B584C586D584A58625852584B59675AC15AC95ACC5ABE5ABD5ABC0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB35AC25AB25D695D6F5E4C5E795EC95EC85F125F595FAC5FAE611A610F6148 +611F60F3611B60F961016108614E614C6144614D613E61346127610D61066137 +622162226413643E641E642A642D643D642C640F641C6414640D643664166417 +6406656C659F65B06697668966876688669666846698668D67036994696D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000695A697769606954697569306982694A6968696B695E695369796986695D +6963695B6B476B726BC06BBF6BD36BFD6EA26EAF6ED36EB66EC26E906E9D6EC7 +6EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC46ED46EAA6EA76EB4714E7159 +7169716471497167715C716C7166714C7165715E714671687156723A72527337 +7345733F733E746F745A7455745F745E7441743F7459745B745C757675787600 +75F0760175F275F175FA75FF75F475F376DE76DF775B776B7766775E77630000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7779776A776C775C77657768776277EE788E78B078977898788C7889787C7891 +7893787F797A797F7981842C79BD7A1C7A1A7A207A147A1F7A1E7A9F7AA07B77 +7BC07B607B6E7B677CB17CB37CB57D937D797D917D817D8F7D5B7F6E7F697F6A +7F727FA97FA87FA480568058808680848171817081788165816E8173816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008179817A81668205824784828477843D843184758466846B8449846C845B +843C8435846184638469846D8446865E865C865F86F9871387088707870086FE +86FB870287038706870A885988DF88D488D988DC88D888DD88E188CA88D588D2 +899C89E38A6B8A728A738A668A698A708A878A7C8A638AA08A718A858A6D8A62 +8A6E8A6C8A798A7B8A3E8A688C628C8A8C898CCA8CC78CC88CC48CB28CC38CC2 +8CC58DE18DDF8DE88DEF8DF38DFA8DEA8DE48DE68EB28F038F098EFE8F0A0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F9F8FB2904B904A905390429054903C905590509047904F904E904D9051903E +904191129117916C916A916991C9923792579238923D9240923E925B924B9264 +925192349249924D92459239923F925A959896989694969596CD96CB96C996CA +96F796FB96F996F6975697749776981098119813980A9812980C98FC98F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098FD98FE99B399B199B49AE19CE99E829F0E9F139F2050E750EE50E550D6 +50ED50DA50D550CF50D150F150CE50E9516251F352835282533153AD55FE5600 +561B561755FD561456065609560D560E55F75616561F5608561055F657185716 +5875587E58835893588A58795885587D58FD592559225924596A59695AE15AE6 +5AE95AD75AD65AD85AE35B755BDE5BE75BE15BE55BE65BE85BE25BE45BDF5C0D +5C625D845D875E5B5E635E555E575E545ED35ED65F0A5F465F705FB961470000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +613F614B617761626163615F615A61586175622A64876458645464A46478645F +647A645164676434646D647B657265A165D765D666A266A8669D699C69A86995 +69C169AE69D369CB699B69B769BB69AB69B469D069CD69AD69CC69A669C369A3 +6B496B4C6C336F336F146EFE6F136EF46F296F3E6F206F2C6F0F6F026F220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006EFF6EEF6F066F316F386F326F236F156F2B6F2F6F886F2A6EEC6F016EF2 +6ECC6EF771947199717D718A71847192723E729272967344735074647463746A +7470746D750475917627760D760B7609761376E176E37784777D777F776178C1 +789F78A778B378A978A3798E798F798D7A2E7A317AAA7AA97AED7AEF7BA17B95 +7B8B7B757B977B9D7B947B8F7BB87B877B847CB97CBD7CBE7DBB7DB07D9C7DBD +7DBE7DA07DCA7DB47DB27DB17DBA7DA27DBF7DB57DB87DAD7DD27DC77DAC0000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F707FE07FE17FDF805E805A808781508180818F8188818A817F818281E781FA +82078214821E824B84C984BF84C684C48499849E84B2849C84CB84B884C084D3 +849084BC84D184CA873F871C873B872287258734871887558737872988F38902 +88F488F988F888FD88E8891A88EF8AA68A8C8A9E8AA38A8D8AA18A938AA40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AAA8AA58AA88A988A918A9A8AA78C6A8C8D8C8C8CD38CD18CD28D6B8D99 +8D958DFC8F148F128F158F138FA390609058905C90639059905E9062905D905B +91199118911E917591789177917492789280928592989296927B9293929C92A8 +927C929195A195A895A995A395A595A49699969C969B96CC96D29700977C9785 +97F69817981898AF98B199039905990C990999C19AAF9AB09AE69B419B429CF4 +9CF69CF39EBC9F3B9F4A5104510050FB50F550F9510251085109510551DC0000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +528752885289528D528A52F053B2562E563B56395632563F563456295653564E +565756745636562F56305880589F589E58B3589C58AE58A958A6596D5B095AFB +5B0B5AF55B0C5B085BEE5BEC5BE95BEB5C645C655D9D5D945E625E5F5E615EE2 +5EDA5EDF5EDD5EE35EE05F485F715FB75FB561766167616E615D615561820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000617C6170616B617E61A7619061AB618E61AC619A61A4619461AE622E6469 +646F6479649E64B26488649064B064A56493649564A9649264AE64AD64AB649A +64AC649964A264B365756577657866AE66AB66B466B16A236A1F69E86A016A1E +6A1969FD6A216A136A0A69F36A026A0569ED6A116B506B4E6BA46BC56BC66F3F +6F7C6F846F516F666F546F866F6D6F5B6F786F6E6F8E6F7A6F706F646F976F58 +6ED56F6F6F606F5F719F71AC71B171A87256729B734E73577469748B74830000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747E7480757F76207629761F7624762676217622769A76BA76E4778E7787778C +7791778B78CB78C578BA78CA78BE78D578BC78D07A3F7A3C7A407A3D7A377A3B +7AAF7AAE7BAD7BB17BC47BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB +7DD87DEC7DDD7DE87DE37DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007FE98026819B819C819D81A0819A81988517853D851A84EE852C852D8513 +851185238521851484EC852584FF850687828774877687608766877887688759 +8757874C8753885B885D89108907891289138915890A8ABC8AD28AC78AC48A95 +8ACB8AF88AB28AC98AC28ABF8AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE0 +8CDE8CE68CE48CEC8CED8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D +8E228E0F8E298E1F8E218E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F259069906E9068906D90779130912D9127913191879189918B918392C592BB +92B792EA92AC92E492C192B392BC92D292C792F092B295AD95B1970497069707 +97099760978D978B978F9821982B981C98B3990A99139912991899DD99D099DF +99DB99D199D599D299D99AB79AEE9AEF9B279B459B449B779B6F9D069D090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D039EA99EBE9ECE58A89F5251125118511451105115518051AA51DD5291 +529352F35659566B5679566956645678566A566856655671566F566C56625676 +58C158BE58C758C5596E5B1D5B345B785BF05C0E5F4A61B2619161A9618A61CD +61B661BE61CA61C8623064C564C164CB64BB64BC64DA64C464C764C264CD64BF +64D264D464BE657466C666C966B966C466C766B86A3D6A386A3A6A596A6B6A58 +6A396A446A626A616A4B6A476A356A5F6A486B596B776C056FC26FB16FA10000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FC36FA46FC16FA76FB36FC06FB96FB66FA66FA06FB471BE71C971D071D271C8 +71D571B971CE71D971DC71C371C47368749C74A37498749F749E74E2750C750D +76347638763A76E776E577A0779E779F77A578E878DA78EC78E779A67A4D7A4E +7A467A4C7A4B7ABA7BD97C117BC97BE47BDB7BE17BE97BE67CD57CD67E0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E117E087E1B7E237E1E7E1D7E097E107F797FB27FF07FF17FEE802881B3 +81A981A881FB820882588259854A855985488568856985438549856D856A855E +8783879F879E87A2878D8861892A89328925892B892189AA89A68AE68AFA8AEB +8AF18B008ADC8AE78AEE8AFE8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C93 +8CF48E448E318E348E428E398E358F3B8F2F8F388F338FA88FA6907590749078 +9072907C907A913491929320933692F89333932F932292FC932B9304931A0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9310932693219315932E931995BB96A796A896AA96D5970E97119716970D9713 +970F975B975C9766979898309838983B9837982D9839982499109928991E991B +9921991A99ED99E299F19AB89ABC9AFB9AED9B289B919D159D239D269D289D12 +9D1B9ED89ED49F8D9F9C512A511F5121513252F5568E56805690568556870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000568F58D558D358D158CE5B305B2A5B245B7A5C375C685DBC5DBA5DBD5DB8 +5E6B5F4C5FBD61C961C261C761E661CB6232623464CE64CA64D864E064F064E6 +64EC64F164E264ED6582658366D966D66A806A946A846AA26A9C6ADB6AA36A7E +6A976A906AA06B5C6BAE6BDA6C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F80 +6FEC6FE16FE96FD56FEE6FF071E771DF71EE71E671E571ED71EC71F471E07235 +72467370737274A974B074A674A876467642764C76EA77B377AA77B077AC0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77A777AD77EF78F778FA78F478EF790179A779AA7A577ABF7C077C0D7BFE7BF7 +7C0C7BE07CE07CDC7CDE7CE27CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B +7E3D7E317E457E417E347E397E487E357E3F7E2F7F447FF37FFC807180728070 +806F807381C681C381BA81C281C081BF81BD81C981BE81E88209827185AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008584857E859C8591859485AF859B858785A8858A866787C087D187B387D2 +87C687AB87BB87BA87C887CB893B893689448938893D89AC8B0E8B178B198B1B +8B0A8B208B1D8B048B108C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B +8E488E4A8F448F3E8F428F458F3F907F907D9084908190829080913991A3919E +919C934D938293289375934A9365934B9318937E936C935B9370935A935495CA +95CB95CC95C895C696B196B896D6971C971E97A097D3984698B699359A010000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FF9BAE9BAB9BAA9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2 +569556AE58D958D85B385F5D61E3623364F464F264FE650664FA64FB64F765B7 +66DC67266AB36AAC6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE +70066FFA7011700F71FB71FC71FE71F87377737574A774BF7515765676580000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000765277BD77BF77BB77BC790E79AE7A617A627A607AC47AC57C2B7C277C2A +7C1E7C237C217CE77E547E557E5E7E5A7E617E527E597F487FF97FFB80778076 +81CD81CF820A85CF85A985CD85D085C985B085BA85B985A687EF87EC87F287E0 +898689B289F48B288B398B2C8B2B8C508D058E598E638E668E648E5F8E558EC0 +8F498F4D90879083908891AB91AC91D09394938A939693A293B393AE93AC93B0 +9398939A939795D495D695D095D596E296DC96D996DB96DE972497A397A60000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +97AD97F9984D984F984C984E985398BA993E993F993D992E99A59A0E9AC19B03 +9B069B4F9B4E9B4D9BCA9BC99BFD9BC89BC09D519D5D9D609EE09F159F2C5133 +56A558DE58DF58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE5 +6ADD6ADA6AD3701B701F7028701A701D701570187206720D725872A273780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A74BD74CA74E375877586765F766177C7791979B17A6B7A697C3E7C3F +7C387C3D7C377C407E6B7E6D7E797E697E6A7F857E737FB67FB97FB881D885E9 +85DD85EA85D585E485E585F787FB8805880D87F987FE8960895F8956895E8B41 +8B5C8B588B498B5A8B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A +8E748F548F4E8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D6 +93E293CD93D893E493D793E895DC96B496E3972A9727976197DC97FB985E0000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9858985B98BC994599499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A +9D6C9E929E979E939EB452F856A856B756B656B456BC58E45B405B435B7D5BF6 +5DC961F861FA65186514651966E667276AEC703E703070327210737B74CF7662 +76657926792A792C792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E827F4C800081DA826685FB85F9861185FA8606860B8607860A88148815 +896489BA89F88B708B6C8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B4 +91CB9418940393FD95E1973098C49952995199A89A2B9A309A379A359C139C0D +9E799EB59EE89F2F9F5F9F639F615137513856C156C056C259145C6C5DCD61FC +61FE651D651C659566E96AFB6B046AFA6BB2704C721B72A774D674D4766977D3 +7C507E8F7E8C7FBC8617862D861A882388228821881F896A896C89BD8B740000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B778B7D8D138E8A8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B +95E297389739973297FF9867986599579A459A439A409A3E9ACF9B549B519C2D +9C259DAF9DB49DC29DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C9 +5B7F5DD45DD25F4E61FF65246B0A6B6170517058738074E4758A766E766C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B37C607C5F807E807D81DF8972896F89FC8B808D168D178E918E938F61 +9148944494519452973D973E97C397C1986B99559A559A4D9AD29B1A9C499C31 +9C3E9C3B9DD39DD79F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B10 +74DA7ACA7C647C637C657E937E967E9481E28638863F88318B8A9090908F9463 +946094649768986F995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F +9EF456D158E9652C705E7671767277D77F507F888836883988628B938B920000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B9682778D1B91C0946A97429748974497C698709A5F9B229B589C5F9DF99DFA +9E7C9E7D9F079F779F725EF36B1670637C6C7C6E883B89C08EA191C194729470 +9871995E9AD69B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5 +947D947E947C9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E424E5C51F5531A53824E074E0C4E474E8D56D7FA0C5C6E5F734E0F51874E0E +4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 +6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C531C534C57225723 +5917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C150000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F14 +4EF14F004EF74F084F1D4F024F054F224F134F044EF44F1251B1521352095210 +52A65322531F534D538A540756E156DF572E572A5734593C5980597C5985597B +597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 +5FD55FD45FCF625C625E626462616266626262596260625A626565EF65EE673E +67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D +897E909990979098909B909496229624962096234F564F3B4F624F494F534F64 +4F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E522152AD +52AE530953635372538E538F54305437542A545454455419541C542554180000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000543D544F544154285424544756EE56E756E557415745574C5749574B5752 +5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A +5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C +5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE45FE3 +5FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271627B627A +6270628162886277627D62726274653765F065F465F365F265F5674567470000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B +6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A +726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 +75957681793D80348095809980908092809C8290828F8285828E829182930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F +962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A +4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE +5235523252335246523152BC530A530B533C539253945487547F548154915482 +5488546B547A547E5465546C54745466548D546F546154605498546354675464 +56F756F9576F5772576D576B57715770577657805775577B5773577457620000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D659B1 +59BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB55CAF +5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E145E19 +5F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006034600A60176033601A601E602C6022600D6010602E60136011600C6009 +601C6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B0 +62B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD6611 +661066F6670A6785676C678E67926776677B6798678667846774678D678C677A +679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C936CEC +6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF20000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 +709470987085709370867084709170967082709A7083726A72D672CB72D872C9 +72DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D74DD74E8 +753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB77FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 +80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 +82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD +8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC54FD3 +4FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC04FB94FEC +5244524952C052C2533D537C539753965399539854BA54A154AD54A554CF0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE54B0 +57B5579E579F57A4578C5797579D579B57945798578F579957A5579A579558F4 +590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F759DB +59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB5CDB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF85DF9 +5E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F866037 +603960546072605E6045605360476049605B604C60406042605F602460446058 +6066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F862F6 +63006313631462FA631562FB62F06541654365AA65BF6636662166326635661C +662666226633662B663A661D66346639662E670F671067C167F267C867BA0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F767F667EE +67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB67FA67C9 +67CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D286D346D2D +6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D6D420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F +70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA72E4 +72E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B573B473EB +73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA767976C4 +7708770377047705770A76F776FB76FA77E777E878067811781278057810780F +780E780978037813794A794C794B7945794479D579CD79CF79D679CE7A800000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F917F8D +7FBE8007800E800F8014803780D880C780E080D180C880C280D080C580E380D9 +80DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE82F9830782E8 +830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F682F082EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000082E482E082FA82F382ED86778674867C86738841884E8867886A886989D3 +8A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB90C8 +91D491D39654964F96519653964A964E501E50055007501350225030501B4FF5 +4FF450335037502C4FF64FF75017501C502050275035502F5031500E515A5194 +519351CA51C451C551C851CE5261525A5252525E525F5255526252CD530E539E +552654E25517551254E754F354E4551A54FF5504550854EB5511550554F10000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +550A54FB54F754F854E0550E5503550B5701570257CC583257D557D257BA57C6 +57BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D5A2E5A15 +5A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF5CEE5CF1 +5CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D605A60670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000604160A26088608060926081609D60836095609B60976087609C608E6219 +624662F263106356632C634463456336634363E46339634B634A633C63296341 +6334635863546359632D63476333635A63516338635763406348654A654665C6 +65C365C465C2664A665F6647665167126713681F681A684968326833683B684B +684F68166831681C6835682B682D682F684E68446834681D6812681468266828 +682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B886BE66BE40000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D586D626D6D6D6F +6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D826D986D2F6D68 +6D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D170DD70CB7F39 +70E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1724272780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072777276730072FA72F472FE72F672F372FB730173D373D973E573D673BC +73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF74F474F5 +7521755B755F75B075C175BB75C475C075BF75B675BA768A76C9771D771B7710 +771377127723771177157719771A772277277823782C78227835782F7828782E +782B782178297833782A78317954795B794F795C79537952795179EB79EC79E0 +79EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A877AD87B100000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C887C8D7C85 +7D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F617F5E7F607F5D +7F5B7F967F927FC37FC27FC08016803E803980FA80F280F980F5810180FB8100 +8201822F82258333832D83448319835183258356833F83418326831C83220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008342834E831B832A8308833C834D8316832483208337832F832983478345 +834C8353831E832C834B832783488653865286A286A88696868D8691869E8687 +86978686868B869A868586A5869986A186A786958698868E869D869086948843 +8844886D88758876887288808871887F886F8883887E8874887C8A128C478C57 +8C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF590028FFF8FFB9004 +8FFC8FF690D690E090D990DA90E390DF90E590D890DB90D790DC90E491500000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070506A5061505E +50605053504B505D50725048504D5041505B504A506250155045505F5069506B +5063506450465040506E50735057505151D0526B526D526C526E52D652D3532D +539C55755576553C554D55505534552A55515562553655355530555255450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000550C55325565554E55395548552D553B5540554B570A570757FB581457E2 +57F657DC57F4580057ED57FD580857F8580B57F357CF580757EE57E357F257E5 +57EC57E1580E57FC581057E75801580C57F157E957F0580D5804595C5A605A58 +5A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A575A435A5D5A52 +5A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A565A425A5C5B72 +5B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D5D265D255D0F0000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB35F365F385F9B5F96 +5F9F608A6090608660BE60B060BA60D360D460CF60E460D960DD60C860B160DB +60B760CA60BF60C360CD60C063326365638A6382637D63BD639E63AD639D6397 +63AB638E636F63876390636E63AF6375639C636D63AE637C63A4633B639F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378638563816391638D6370655365CD66656661665B6659665C66626718 +687968876890689C686D686E68AE68AB6956686F68A368AC68A96875687468B2 +688F68776892687C686B687268AA68806871687E689B6896688B68A0688968A4 +6878687B6891688C688A687D6B366B336B376B386B916B8F6B8D6B8E6B8C6C2A +6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E006DC86DE06DDF6DD6 +6DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD56DC26DCF6DC90000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4710C70F07104 +70F3711070FC70FF71067113710070F870F6710B7102710E727E727B727C727F +731D7317730773117318730A730872FF730F731E738873F673F873F574047401 +73FD7407740073FA73FC73FF740C740B73F474087564756375CE75D275CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075CB75CC75D175D0768F768976D37739772F772D7731773277347733773D +7725773B7735784878527849784D784A784C782678457850796479677969796A +7963796B796179BB79FA79F879F679F77A8F7A947A907B357B477B347B257B30 +7B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B387B1A7B237C947C98 +7C967CA37D357D3D7D387D367D3A7D457D2C7D297D417D477D3E7D3F7D4A7D3B +7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD17FC77FCF7FC9801F0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +801E801B804780438048811881258119811B812D811F812C811E812181158127 +811D8122821182388233823A823482328274839083A383A8838D837A837383A4 +8374838F8381839583998375839483A9837D8383838C839D839B83AA838B837E +83A583AF8388839783B0837F83A6838783AE8376839A8659865686BF86B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000086C286C186C586BA86B086C886B986B386B886CC86B486BB86BC86C386BD +86BE88528889889588A888A288AA889A889188A1889F889888A78899889B8897 +88A488AC888C8893888E898289D689D989D58A308A278A2C8A1E8C398C3B8C5C +8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE8EDD8EDC8ED7 +8EE08EE19024900B9011901C900C902190EF90EA90F090F490F290F390D490EB +90EC90E991569158915A9153915591EC91F491F191F391F891E491F991EA0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91EB91F791E891EE957A95869588967C966D966B9671966F96BF976A980498E5 +9997509B50955094509E508B50A35083508C508E509D5068509C509250825087 +515F51D45312531153A453A7559155A855A555AD5577564555A255935588558F +55B5558155A3559255A4557D558C55A6557F559555A1558E570C582958370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005819581E58275823582857F558485825581C581B5833583F5836582E5839 +5838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA65A7C5AA55AAC +5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C5A9C5A8F5A935A9D +5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B5D415D4B5D3F5D35 +5D515D4E5D555D335D3A5D525D3D5D315D595D425D395D495D385D3C5D325D36 +5D405D455E445E415F585FA65FA55FAB60C960B960CC60E260CE60C461140000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60F2610A6116610560F5611360F860FC60FE60C161036118611D611060FF6104 +610B624A639463B163B063CE63E563E863EF63C3649D63F363CA63E063F663D5 +63F263F5646163DF63BE63DD63DC63C463D863D363C263C763CC63CB63C863F0 +63D763D965326567656A6564655C65686565658C659D659E65AE65D065D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000667C666C667B668066716679666A66726701690C68D3690468DC692A68EC +68EA68F1690F68D668F768EB68E468F66913691068F368E1690768CC69086970 +68B4691168EF68C6691468F868D068FD68FC68E8690B690A691768CE68C868DD +68DE68E668F468D1690668D468E96915692568C76B396B3B6B3F6B3C6B946B97 +6B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F6E496E886E3C6E3D6E45 +6E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E516E3B6E036E2E6E5E0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E686E5C6E616E316E286E606E716E6B6E396E226E306E536E656E276E786E64 +6E776E556E796E526E666E356E366E5A7120711E712F70FB712E713171237125 +71227132711F7128713A711B724B725A7288728972867285728B7312730B7330 +73227331733373277332732D732673237335730C742E742C7430742B74160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741A7421742D743174247423741D74297420743274FB752F756F756C75E7 +75DA75E175E675DD75DF75E475D77695769276DA774677477744774D7745774A +774E774B774C77DE77EC786078647865785C786D7871786A786E787078697868 +785E786279747973797279707A027A0A7A037A0C7A047A997AE67AE47B4A7B3B +7B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D587D6F7D637D537D56 +7D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F7D4E7F3E7F3F7F650000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F667FA27FA07FA17FD78051804F805080FE80D48143814A8152814F8147813D +814D813A81E681EE81F781F881F98204823C823D823F8275833B83CF83F98423 +83C083E8841283E783E483FC83F6841083C683C883EB83E383BF840183DD83E5 +83D883FF83E183CB83CE83D683F583C98409840F83DE8411840683C283F30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000083D583FA83C783D183EA841383C383EC83EE83C483FB83D783E2841B83DB +83FE86D886E286E686D386E386DA86EA86DD86EB86DC86EC86E986D786E886D1 +88488856885588BA88D788B988B888C088BE88B688BC88B788BD88B2890188C9 +89958998899789DD89DA89DB8A4E8A4D8A398A598A408A578A588A448A458A52 +8A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE8CB08CB98CB58D848D808D89 +8DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC88DD78DC58EEF8EF78EFA0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC8EF48EE9902D9034902F +9106912C910490FF90FC910890F990FB9101910091079105910391619164915F +916291609201920A92259203921A9226920F920C9200921291FF91FD92069204 +92279202921C92249219921792059216957B958D958C95909687967E96880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000096899683968096C296C896C396F196F0976C9770976E980798A998EB9CE6 +9EF94E834E844EB650BD50BF50C650AE50C450CA50B450C850C250B050C150BA +50B150CB50C950B650B851D7527A5278527B527C55C355DB55CC55D055CB55CA +55DD55C055D455C455E955BF55D2558D55CF55D555E255D655C855F255CD55D9 +55C25714585358685864584F584D5849586F5855584E585D58595865585B583D +5863587158FC5AC75AC45ACB5ABA5AB85AB15AB55AB05ABF5AC85ABB5AC60000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD85BD95C1F5C335D715D635D4A +5D655D725D6C5D5E5D685D675D625DF05E4F5E4E5E4A5E4D5E4B5EC55ECC5EC6 +5ECB5EC75F405FAF5FAD60F76149614A612B614561366132612E6146612F614F +612961406220916862236225622463C563F163EB641064126409642064240000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064336443641F641564186439643764226423640C64266430642864416435 +642F640A641A644064256427640B63E7641B642E6421640E656F659265D36686 +668C66956690668B668A66996694667867206966695F6938694E69626971693F +6945696A6939694269576959697A694869496935696C6933693D696568F06978 +693469696940696F69446976695869416974694C693B694B6937695C694F6951 +69326952692F697B693C6B466B456B436B426B486B416B9BFA0D6BFB6BFC0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E936E946EA06EB16EB96EC66ED2 +6EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB26EBE6EC36EDC6ED86E996E92 +6E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE6EA371477154715271637160 +7141715D716271727178716A7161714271587143714B7170715F715071530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007144714D715A724F728D728C72917290728E733C7342733B733A7340734A +73497444744A744B7452745174577440744F7450744E74427446744D745474E1 +74FF74FE74FD751D75797577698375EF760F760375F775FE75FC75F975F87610 +75FB75F675ED75F575FD769976B576DD7755775F776077527756775A77697767 +77547759776D77E07887789A7894788F788478957885788678A1788378797899 +78807896787B797C7982797D79797A117A187A197A127A177A157A227A130000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B697B727B657B737B717B70 +7B617B787B767B637CB27CB47CAF7D887D867D807D8D7D7F7D857D7A7D8E7D7B +7D837D7C7D8C7D947D847D7D7D927F6D7F6B7F677F687F6C7FA67FA57FA77FDB +7FDC8021816481608177815C8169815B816281726721815E81768167816F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081448161821D8249824482408242824584F1843F845684768479848F848D +846584518440848684678430844D847D845A845984748473845D8507845E8437 +843A8434847A8443847884328445842983D9844B842F8442842D845F84708439 +844E844C8452846F84C5848E843B8447843684338468847E8444842B84608454 +846E8450870B870486F7870C86FA86D686F5874D86F8870E8709870186F6870D +870588D688CB88CD88CE88DE88DB88DA88CC88D08985899B89DF89E589E40000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89E189E089E289DC89E68A768A868A7F8A618A3F8A778A828A848A758A838A81 +8A748A7A8C3C8C4B8C4A8C658C648C668C868C848C858CCC8D688D698D918D8C +8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC8DF18DEE8DD08DE98DE38DE2 +8DE78DF28DEB8DF48F068EFF8F018F008F058F078F088F028F0B9052903F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090449049903D9110910D910F911191169114910B910E916E916F92489252 +9230923A926692339265925E9283922E924A9246926D926C924F92609267926F +92369261927092319254926392509272924E9253924C92569232959F959C959E +959B969296939691969796CE96FA96FD96F896F59773977797789772980F980D +980E98AC98F698F999AF99B299B099B59AAD9AAB9B5B9CEA9CED9CE79E809EFD +50E650D450D750E850F350DB50EA50DD50E450D350EC50F050EF50E350E00000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D85280528152E952EB533053AC56275615560C561255FC560F561C56015613 +560255FA561D560455FF55F95889587C5890589858865881587F5874588B587A +58875891588E587658825888587B5894588F58FE596B5ADC5AEE5AE55AD55AEA +5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE5ADD5AD95AE85ADF5B775BE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BE35C635D825D805D7D5D865D7A5D815D775D8A5D895D885D7E5D7C5D8D +5D795D7F5E585E595E535ED85ED15ED75ECE5EDC5ED55ED95ED25ED45F445F43 +5F6F5FB6612C61286141615E61716173615261536172616C618061746154617A +615B6165613B616A6161615662296227622B642B644D645B645D647464766472 +6473647D6475646664A6644E6482645E645C644B645364606450647F643F646C +646B645964656477657365A066A166A0669F67056704672269B169B669C90000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69A069CE699669B069AC69BC69916999698E69A7698D69A969BE69AF69BF69C4 +69BD69A469D469B969CA699A69CF69B3699369AA69A1699E69D96997699069C2 +69B569A569C66B4A6B4D6B4B6B9E6B9F6BA06BC36BC46BFE6ECE6EF56EF16F03 +6F256EF86F376EFB6F2E6F096F4E6F196F1A6F276F186F3B6F126EED6F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F366F736EF96EEE6F2D6F406F306F3C6F356EEB6F076F0E6F436F056EFD +6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21718771907189718071857182 +718F717B718671817197724472537297729572937343734D7351734C74627473 +7471747574727467746E750075027503757D759076167608760C76157611760A +761476B87781777C77857782776E7780776F777E778378B278AA78B478AD78A8 +787E78AB789E78A578A078AC78A278A47998798A798B79967995799479930000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79977988799279907A2B7A4A7A307A2F7A287A267AA87AAB7AAC7AEE7B887B9C +7B8A7B917B907B967B8D7B8C7B9B7B8E7B857B9852847B997BA47B827CBB7CBF +7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC07DC57D9D7DCE7DC47DC67DCB7DCC +7DAF7DB97D967DBC7D9F7DA67DAE7DA97DA17DC97F737FE27FE37FE57FDE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008024805D805C8189818681838187818D818C818B8215849784A484A1849F +84BA84CE84C284AC84AE84AB84B984B484C184CD84AA849A84B184D0849D84A7 +84BB84A2849484C784CC849B84A984AF84A884D6849884B684CF84A084D784D4 +84D284DB84B084918661873387238728876B8740872E871E87218719871B8743 +872C8741873E874687208732872A872D873C8712873A87318735874287268727 +87388724871A8730871188F788E788F188F288FA88FE88EE88FC88F688FB0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88F088EC88EB899D89A1899F899E89E989EB89E88AAB8A998A8B8A928A8F8A96 +8C3D8C688C698CD58CCF8CD78D968E098E028DFF8E0D8DFD8E0A8E038E078E06 +8E058DFE8E008E048F108F118F0E8F0D9123911C91209122911F911D911A9124 +9121911B917A91729179917392A592A49276929B927A92A0929492AA928D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092A6929A92AB92799297927F92A392EE928E9282929592A2927D928892A1 +928A9286928C929992A7927E928792A9929D928B922D969E96A196FF9758977D +977A977E978397809782977B97849781977F97CE97CD981698AD98AE99029900 +9907999D999C99C399B999BB99BA99C299BD99C79AB19AE39AE79B3E9B3F9B60 +9B619B5F9CF19CF29CF59EA750FF5103513050F85106510750F650FE510B510C +50FD510A528B528C52F152EF56485642564C56355641564A5649564656580000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +565A56405633563D562C563E5638562A563A571A58AB589D58B158A058A358AF +58AC58A558A158FF5AFF5AF45AFD5AF75AF65B035AF85B025AF95B015B075B05 +5B0F5C675D995D975D9F5D925DA25D935D955DA05D9C5DA15D9A5D9E5E695E5D +5E605E5C7DF35EDB5EDE5EE15F495FB2618B6183617961B161B061A261890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000619B619361AF61AD619F619261AA61A1618D616661B3622D646E64706496 +64A064856497649C648F648B648A648C64A3649F646864B164986576657A6579 +657B65B265B366B566B066A966B266B766AA66AF6A006A066A1769E569F86A15 +69F169E46A2069FF69EC69E26A1B6A1D69FE6A2769F269EE6A1469F769E76A40 +6A0869E669FB6A0D69FC69EB6A096A046A186A256A0F69F66A266A0769F46A16 +6B516BA56BA36BA26BA66C016C006BFF6C026F416F266F7E6F876FC66F920000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F8D6F896F8C6F626F4F6F856F5A6F966F766F6C6F826F556F726F526F506F57 +6F946F936F5D6F006F616F6B6F7D6F676F906F536F8B6F696F7F6F956F636F77 +6F6A6F7B71B271AF719B71B071A0719A71A971B5719D71A5719E71A471A171AA +719C71A771B37298729A73587352735E735F7360735D735B7361735A73590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736274877489748A74867481747D74857488747C747975087507757E7625 +761E7619761D761C7623761A7628761B769C769D769E769B778D778F77897788 +78CD78BB78CF78CC78D178CE78D478C878C378C478C9799A79A179A0799C79A2 +799B6B767A397AB27AB47AB37BB77BCB7BBE7BAC7BCE7BAF7BB97BCA7BB57CC5 +7CC87CCC7CCB7DF77DDB7DEA7DE77DD77DE17E037DFA7DE67DF67DF17DF07DEE +7DDF7F767FAC7FB07FAD7FED7FEB7FEA7FEC7FE67FE88064806781A3819F0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +819E819581A2819981978216824F825382528250824E82518524853B850F8500 +8529850E8509850D851F850A8527851C84FB852B84FA8508850C84F4852A84F2 +851584F784EB84F384FC851284EA84E9851684FE8528851D852E850284FD851E +84F68531852684E784E884F084EF84F9851885208530850B8519852F86620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000875687638764877787E1877387588754875B87528761875A8751875E876D +876A8750874E875F875D876F876C877A876E875C8765874F877B877587628767 +8769885A8905890C8914890B891789188919890689168911890E890989A289A4 +89A389ED89F089EC8ACF8AC68AB88AD38AD18AD48AD58ABB8AD78ABE8AC08AC5 +8AD88AC38ABA8ABD8AD98C3E8C4D8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA0 +8D9C8DA18D9B8E208E238E258E248E2E8E158E1B8E168E118E198E268E270000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E148E128E188E138E1C8E178E1A8F2C8F248F188F1A8F208F238F168F179073 +9070906F9067906B912F912B9129912A91329126912E91859186918A91819182 +9184918092D092C392C492C092D992B692CF92F192DF92D892E992D792DD92CC +92EF92C292E892CA92C892CE92E692CD92D592C992E092DE92E792D192D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092B592E192C692B4957C95AC95AB95AE95B096A496A296D3970597089702 +975A978A978E978897D097CF981E981D9826982998289820981B982798B29908 +98FA9911991499169917991599DC99CD99CF99D399D499CE99C999D699D899CB +99D799CC9AB39AEC9AEB9AF39AF29AF19B469B439B679B749B719B669B769B75 +9B709B689B649B6C9CFC9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D04 +9E839ED39F0F9F10511C51135117511A511151DE533453E156705660566E0000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +567356665663566D5672565E5677571C571B58C858BD58C958BF58BA58C258BC +58C65B175B195B1B5B215B145B135B105B165B285B1A5B205B1E5BEF5DAC5DB1 +5DA95DA75DB55DB05DAE5DAA5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE9 +5EE75EE65EE85EE55F4B5FBC619D61A8619661C561B461C661C161CC61BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061BF61B8618C64D764D664D064CF64C964BD648964C364DB64F364D96533 +657F657C65A266C866BE66C066CA66CB66CF66BD66BB66BA66CC67236A346A66 +6A496A676A326A686A3E6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A +6A646A506A4F6A546A6F6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B54 +6B566BA76BAA6BAB6BC86BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC8 +6F5E6FC46FBD6F9E6FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB80000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FA26FC96FAB6FCD6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D4 +71CA71C771CF71BD71D871BC71C671DA71DB729D729E736973667367736C7365 +736B736A747F749A74A074947492749574A1750B7580762F762D7631763D7633 +763C76357632763076BB76E6779A779D77A1779C779B77A277A3779577990000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000779778DD78E978E578EA78DE78E378DB78E178E278ED78DF78E079A47A44 +7A487A477AB67AB87AB57AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF9 +7BD47BEA7BE27BDC7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C +7E1F7E207E137E0E7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F43 +7F7B7F7C7F7A7FB17FEF802A8029806C81B181A681AE81B981B581AB81B081AC +81B481B281B781A781F282558256825785568545856B854D8553856185580000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +854085468564854185628544855185478563853E855B8571854E856E85758555 +85678560858C8566855D85548565856C866386658664879B878F879787938792 +87888781879687988779878787A3878587908791879D87848794879C879A8789 +891E89268930892D892E89278931892289298923892F892C891F89F18AE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AE28AF28AF48AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF +8AFB8C918C928C908CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E38 +8E408E458E368E3C8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F34 +90769079907B908690FA913391359136919391909191918D918F9327931E9308 +931F9306930F937A9338933C931B9323931293019346932D930E930D92CB931D +92FA9325931392F992F793349302932492FF932993399335932A9314930C0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930B92FE9309930092FB931695BC95CD95BE95B995BA95B695BF95B595BD96A9 +96D4970B9712971097999797979497F097F89835982F98329924991F99279929 +999E99EE99EC99E599E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA +9AF99AF79B339B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B7D9B889D259D179D209D1E9D149D299D1D9D189D229D109D199D1F9E88 +9E869E879EAE9EAD9ED59ED69EFA9F129F3D51265125512251245120512952F4 +5693568C568D568656845683567E5682567F568158D658D458CF58D25B2D5B25 +5B325B235B2C5B275B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE5FBB61C3 +61B561BC61E761E061E561E461E861DE64EF64E964E364EB64E464E865816580 +65B665DA66D26A8D6A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A956A836AA86AA46A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA9 +6FF46FD46FE36FDC6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F2 +71E471F071E27373736E736F749774B274AB749074AA74AD74B174A574AF7510 +75117512750F7584764376487649764776A476E977B577AB77B277B777B60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077B477B177A877F078F378FD790278FB78FC78F2790578F978FE790479AB +79A87A5C7A5B7A567A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB +7C0E7BF47C0B7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE8 +7E2D7E3C7E427E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E44 +7E3A7F457F7F7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9 +825B825A825C85838580858F85A7859585A0858B85A3857B85A4859A859E0000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8577857C858985A1857A85788557858E85968586858D8599859D858185A28582 +858885858579857685988590859F866887BE87AA87AD87C587B087AC87B987B5 +87BC87AE87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE +87B289358933893C893E894189528937894289AD89AF89AE89F289F38B1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B188B168B118B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B13 +8B1A8C4F8C708C728C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E47 +8F438F409085907E9138919A91A2919B9199919F91A1919D91A093A1938393AF +936493569347937C9358935C93769349935093519360936D938F934C936A9379 +935793559352934F93719377937B9361935E936393679380934E935995C795C0 +95C995C395C595B796AE96B096AC9720971F9718971D9719979A97A1979C0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979D97D597D497F198419844984A9849984598439925992B992C992A9933 +9932992F992D99319930999899A399A19A0299FA99F499F799F999F899F699FB +99FD99FE99FC9A039ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA1 +9BA59BA49B869BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D459D429D439D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA +9EFB9EFF9F249F239F229F549FA05131512D512E5698569C5697569A569D5699 +59705B3C5C695C6A5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D6 +61E964FF650464FD64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD +6AE16AC66ABA6AB66AB76AC76AB46AAD6B5E6BC96C0B7007700C700D70017005 +7014700E6FFF70006FFB70266FFC6FF7700A720171FF71F9720371FD73760000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74B874C074B574C174BE74B674BB74C275147513765C76647659765076537657 +765A76A676BD76EC77C277BA78FF790C79137914790979107912791179AD79AC +7A5F7C1C7C297C197C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E56 +7E637E587E627E5F7E517E607E577E537FB57FB37FF77FF8807581D181D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D0825F825E85B485C685C085C385C285B385B585BD85C785C485BF85CB +85CE85C885C585B185B685D2862485B885B785BE866987E787E687E287DB87EB +87EA87E587DF87F387E487D487DC87D387ED87D887E387A487D787D9880187F4 +87E887DD8953894B894F894C89468950895189498B2A8B278B238B338B308B35 +8B478B2F8B3C8B3E8B318B258B378B268B368B2E8B248B3B8B3D8B3A8C428C75 +8C998C988C978CFE8D048D028D008E5C8E628E608E578E568E5E8E658E670000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E5B8E5A8E618E5D8E698E548F468F478F488F4B9128913A913B913E91A891A5 +91A791AF91AA93B5938C939293B7939B939D938993A7938E93AA939E93A69395 +93889399939F938D93B1939193B293A493A893B493A393A595D295D395D196B3 +96D796DA5DC296DF96D896DD97239722972597AC97AE97A897AB97A497AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097A297A597D797D997D697D897FA98509851985298B89941993C993A9A0F +9A0B9A099A0D9A049A119A0A9A059A079A069AC09ADC9B089B049B059B299B35 +9B4A9B4C9B4B9BC79BC69BC39BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C +9D539D4F9D4A9D5B9D4B9D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C +9EDF9F019F009F169F259F2B9F2A9F299F289F4C9F5551345135529652F753B4 +56AB56AD56A656A756AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E700000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5FBF61FB65076510650D6509650C650E658465DE65DD66DE6AE76AE06ACC6AD1 +6AD96ACB6ADF6ADC6AD06AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016 +702B702170227023702970177024701C702A720C720A72077202720572A572A6 +72A472A372A174CB74C574B774C37516766077C977CA77C477F1791D791B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007921791C7917791E79B07A677A687C337C3C7C397C2C7C3B7CEC7CEA7E76 +7E757E787E707E777E6F7E7A7E727E747E687F4B7F4A7F837F867FB77FFD7FFE +807881D781D582648261826385EB85F185ED85D985E185E885DA85D785EC85F2 +85F885D885DF85E385DC85D185F085E685EF85DE85E2880087FA880387F687F7 +8809880C880B880687FC880887FF880A88028962895A895B89578961895C8958 +895D8959898889B789B689F68B508B488B4A8B408B538B568B548B4B8B550000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B518B428B528B578C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D +8E788E738E6A8E6F8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD +93DE93C793CF93C293DA93D093F993EC93CC93D993A993E693CA93D493EE93E3 +93D593C493CE93C093D293E7957D95DA95DB96E19729972B972C972897260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097B397B797B697DD97DE97DF985C9859985D985798BF98BD98BB98BE9948 +9947994399A699A79A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C +9A149AC29B0B9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD4 +9BD79BEC9BDC9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D78 +9D869D8B9D8C9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F +9D879D689E949E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B20000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56B556B358E35B455DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF +66E866E366E46AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F70377034 +703170427038703F703A70397040703B703370417213721472A8737D737C74BA +76AB76AA76BE76ED77CC77CE77CF77CD77F27925792379277928792479290000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B27A6E7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E80 +7FBA7FFF807981DB81D9820B82688269862285FF860185FE861B860085F68604 +86098605860C85FD8819881088118817881388168963896689B989F78B608B6A +8B5D8B688B638B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A +908D9143914191B791B591B291B3940B941393FB9420940F941493FE94159410 +94289419940D93F5940093F79407940E9416941293FA940993F8940A93FF0000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93FC940C93F69411940695DE95E095DF972E972F97B997BB97FD97FE98609862 +9863985F98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A36 +9A299A2E9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF8 +9C409C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DA09D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA6 +9DA79E999E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91 +513A51395298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC +6B036AF86B0070437044704A7048704970457046721D721A7219737E7517766A +77D0792D7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB8030 +81DD8618862A8626861F8623861C86198627862E862186208629861E86250000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8829881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B45 +8B7A8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B +94369429943D943C94309439942A9437942C9440943195E595E495E39735973A +97BF97E1986498C998C698C0995899569A399A3D9A469A449A429A419A3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A3F9ACD9B159B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C29 +9C249C219DB79DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB9 +9DBA9DAC9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F18 +9F1A9F319F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF2 +65216520652665226B0B6B086B096C0D7055705670577052721E721F72A9737F +74D874D574D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CF47CF17E917F4F7F8781DE826B863486358633862C86328636882C88288826 +882A8825897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A +8E928E908E968E978F608F629147944C9450944A944B944F9447944594489449 +9446973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A499A529A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C33 +9C419C3C9C379C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF +9DE99DD99DD89DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2 +513D529958E858E759725B4D5DD8882F5F4F62016203620465296525659666EB +6B116B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C +863A86408639863C8631863B863E88308832882E883389768974897389FE0000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B8C8B8E8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C4 +97C598009A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C +9C4E9DFB9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC +9DF49DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F719F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D +7060722374DB74E577D5793879B779B67C6A7E977F89826D8643883888378835 +884B8B948B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743 +974797C797E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E03 +9E069E059E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E +65B86B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A0000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E987E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA5 +8EA48EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E10 +9E0F9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB2 +8EA691C394749478947694759A609C749C739C719C759E149E139EF69F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009FA4706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B98739874 +98CC996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 +948094819A699A689B2E9E197229864B8B9F94839C799EB776759A6B9C7A9E1D +7069706A9EA49F7E9F499F98788192B988CF58BB60527CA75AFA255425662557 +2560256C2563255A2569255D255225642555255E256A256125582567255B2553 +25652556255F256B256225592568255C25512550256D256E2570256F25930000 diff --git a/inkstitch/bin/tcl/encoding/dingbats.enc b/inkstitch/bin/tcl/encoding/dingbats.enc new file mode 100644 index 0000000..9729487 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/dingbats.enc @@ -0,0 +1,20 @@ +# Encoding file: dingbats, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00202701270227032704260E2706270727082709261B261E270C270D270E270F +2710271127122713271427152716271727182719271A271B271C271D271E271F +2720272127222723272427252726272726052729272A272B272C272D272E272F +2730273127322733273427352736273727382739273A273B273C273D273E273F +2740274127422743274427452746274727482749274A274B25CF274D25A0274F +27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000276127622763276427652766276726632666266526602460246124622463 +2464246524662467246824692776277727782779277A277B277C277D277E277F +2780278127822783278427852786278727882789278A278B278C278D278E278F +2790279127922793279421922194219527982799279A279B279C279D279E279F +27A027A127A227A327A427A527A627A727A827A927AA27AB27AC27AD27AE27AF +000027B127B227B327B427B527B627B727B827B927BA27BB27BC27BD27BE0000 diff --git a/inkstitch/bin/tcl/encoding/ebcdic.enc b/inkstitch/bin/tcl/encoding/ebcdic.enc new file mode 100644 index 0000000..f451de5 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/ebcdic.enc @@ -0,0 +1,19 @@ +S +006F 0 1 +00 +0000000100020003008500090086007F0087008D008E000B000C000D000E000F +0010001100120013008F000A0008009700180019009C009D001C001D001E001F +0080008100820083008400920017001B00880089008A008B008C000500060007 +0090009100160093009400950096000400980099009A009B00140015009E001A +002000A000E200E400E000E100E300E500E700F10060002E003C0028002B007C +002600E900EA00EB00E800ED00EE00EF00EC00DF00210024002A0029003B009F +002D002F00C200C400C000C100C300C500C700D1005E002C0025005F003E003F +00F800C900CA00CB00C800CD00CE00CF00CC00A8003A002300400027003D0022 +00D800610062006300640065006600670068006900AB00BB00F000FD00FE00B1 +00B0006A006B006C006D006E006F00700071007200AA00BA00E600B800C600A4 +00B500AF0073007400750076007700780079007A00A100BF00D000DD00DE00AE +00A200A300A500B700A900A700B600BC00BD00BE00AC005B005C005D00B400D7 +00F900410042004300440045004600470048004900AD00F400F600F200F300F5 +00A6004A004B004C004D004E004F00500051005200B900FB00FC00DB00FA00FF +00D900F70053005400550056005700580059005A00B200D400D600D200D300D5 +003000310032003300340035003600370038003900B3007B00DC007D00DA007E diff --git a/inkstitch/bin/tcl/encoding/euc-cn.enc b/inkstitch/bin/tcl/encoding/euc-cn.enc new file mode 100644 index 0000000..4b2f8c7 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/euc-cn.enc @@ -0,0 +1,1397 @@ +# Encoding file: euc-cn, multi-byte +M +003F 0 82 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 diff --git a/inkstitch/bin/tcl/encoding/euc-jp.enc b/inkstitch/bin/tcl/encoding/euc-jp.enc new file mode 100644 index 0000000..db56c88 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/euc-jp.enc @@ -0,0 +1,1353 @@ +# Encoding file: euc-jp, multi-byte +M +003F 0 79 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D0000008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8 +FF3EFFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0F +FF3C301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3D +FF5BFF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D7 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C70000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025C625A125A025B325B225BD25BC203B3012219221902191219330130000 +00000000000000000000000000000000000000002208220B2286228722822283 +222A2229000000000000000000000000000000002227222800AC21D221D42200 +220300000000000000000000000000000000000000000000222022A523122202 +220722612252226A226B221A223D221D2235222B222C00000000000000000000 +00000000212B2030266F266D266A2020202100B6000000000000000025EF0000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19000000000000000000000000 +0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A00000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +2542000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E9C55165A03963F54C0611B632859F690228475831C7A5060AA63E16E25 +65ED846682A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E6216 +7C9F88B75B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2 +593759D45A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3 +840E88638B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA29038 +7A328328828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D0000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E11 +789381FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B +96F2834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E +983482F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD5186 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062BC65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B5104 +5C4B61B681C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F55 +4F3D4FA14F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3 +706B73C2798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA8 +8FE6904E971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D5 +4ECB4F1A89E356DE584A58CA5EFB5FEB602A6094606261D0621262D065390000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE +591654B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D9 +57A367FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B +899A89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584310000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007CA5520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E6 +5B8C5B985BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B53 +6C576F226F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266 +839E89B38ACC8CAB908494519593959195A2966597D3992882184E38542B5CB8 +5DCC73A9764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C5668 +57FA59475B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C40000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D77 +8ECC8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A07591 +79477FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A7078276775 +9ECD53745BA2811A865090064E184E454EC74F1153CA54385BAE5F1360256551 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC0000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F9B4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F37 +5F4A602F6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F7 +93E197FF99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C5 +52E457475DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F +8B398FD191D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C8 +99D25177611A865E55B07A7A50765BD3904796854E326ADB91E75C515C480000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B +85AB8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B +59515F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB +7D4C7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE8 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F363720000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000691C6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED29063 +9375967A98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D438237 +8A008AFA96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF +6E5672D07CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E92 +4F0D53485449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B779190 +4E5E9BC94EA44F7C4FAF501950165149516C529F52B952FE539A53E354110000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB7 +5F186052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A +6D696E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B1 +8154818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC0000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B6498034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D5 +7D3A826E9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A509396 +88DF57505EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D +6B736E08707D91C7728078157826796D658E7D3083DC88C18F09969B52645728 +67507F6A8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A +548B643E6628671467F57A847B567D22932F685C9BAD7B395319518A52370000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF6652 +4E09509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB +9178991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB +59C959FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B62 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166420000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B216ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F +5F0F8B589D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F06 +75BE8CEA5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66 +659C716E793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235 +914C91C8932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E +816B8DA391529996511253D7546A5BFF63886A397DAC970056DA53CE54680000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F8490 +884689728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E +67D46C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F +51FA88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF3 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000052DD5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C11 +5C1A5E845E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A2 +6A1F6A356CBC6D886E096E58713C7126716775C77701785D7901796579F07AE0 +7B117CA77D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A4 +9266937E9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E38 +60C564FE676167566D4472B675737A6384B88B7291B89320563157F498FE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB5 +55075A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F +795E79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC15203 +587558EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A8 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F84647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F +6574661F667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA0 +8A938ACB901D91929752975965897A0E810696BB5E2D60DC621A65A566146790 +77F37A4D7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D +7A837BC08AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226 +624764B0681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE +524D55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A +72D9758F758E790E795679DF7C977D207D4486078A34963B90619F2050E75275 +53CC53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D385358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD7 +5C5E8CCA65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A +592A6C708A51553E581559A560F0625367C182356955964099C49A284F535806 +5BFE80105CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB8 +9000902E968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD702753535544 +5B856258629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB0 +4E3953585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D +80C686CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E55730 +5F1B6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C4 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF50000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E165E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A +80748139817887768ABF8ADC8D858DF3929A957798029CE552C5635776F46715 +6C8873CD8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B4 +69FB4F436F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A +91E39DB44EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F +608C62B5633A63D068AF6C407887798E7A0B7DE082478A028AE68E4490130000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F2 +5FB964A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B +70B94F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21 +767B83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152300000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008463856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD +52D5540C58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F +5F975FB36D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A +9CF682EB5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D +594890A351854E4D51EA85998B0E7058637A934B696299B47E04757753576960 +8EDF96E36C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E7351650000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E74 +5FF5637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF +8FB2899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC +4FF35EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A926885 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA60000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051FD7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A +91979AEA4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD +53DB5E06642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC4 +91C67169981298EF633D6669756A76E478D0854386EE532A5351542659835E87 +5F7C60B26249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB +8AB98CBB907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E0000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C +686759EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C79 +5EDF63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA7 +8CD3983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C601662766577 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798F8179890789866DF55F1762556CB84ECF72699B925206543B567458B3 +61A4626E711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E73 +5F0A67C44E26853D9589965B7C73980150FB58C1765678A7522577A585117B86 +504F590972477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA +570363556B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E95023 +4FF853055446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B0000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D2 +98FD9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D0 +68D251927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A8 +64B26734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C6 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E800000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F2B85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A1481085999 +7C8D6C11772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D +660E76DF8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A21 +830259845B5F6BDB731B76F27DB280178499513267289ED976EE676252FF9905 +5C24623B7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F25 +77E253845F797D0485AC8A338E8D975667F385AE9453610961086CB976520000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E67 +6D8C733673377531795088D58A98904A909190F596C4878D59154E884F594E0E +8A898F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB6 +719475287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B32 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A8740674830000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E288CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C +74097559786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC +5BEE659968816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B +7DD1502B539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F +985E4EE44F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E97 +9F6266A66B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717 +697C69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B9332 +8AD6502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C18568 +69006E7E78978155000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0C4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A +82125F0D4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED7 +4EDE4EED4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B +4F694F704F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE4 +4FE5501A50285014502A502550054F1C4FF650215029502C4FFE4FEF50115006 +504350476703505550505048505A5056506C50785080509A508550B450B20000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050C950CA50B350C250D650DE50E550ED50E350EE50F950F5510951015102 +511651155114511A5121513A5137513C513B513F51405152514C515451627AF8 +5169516A516E5180518256D8518C5189518F519151935195519651A451A651A2 +51A951AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA80000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FA752AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F5 +52F852F9530653087538530D5310530F5315531A5323532F5331533353385340 +534653454E175349534D51D6535E5369536E5918537B53775382539653A053A6 +53A553AE53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D +5440542C542D543C542E54365429541D544E548F5475548E545F547154775470 +5492547B5480547654845490548654C754A254B854A554AC54C454C854A80000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E2 +553955405563554C552E555C55455556555755385533555D5599558054AF558A +559F557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC +55E455D4561455F7561655FE55FD561B55F9564E565071DF5634563656325638 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457090000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005708570B570D57135718571655C7571C572657375738574E573B5740574F +576957C057885761577F5789579357A057B357A457AA57B057C357C657D457D2 +57D3580A57D657E3580B5819581D587258215862584B58706BC05852583D5879 +588558B9589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E5 +58DC58E458DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C +592D59325938593E7AD259555950594E595A5958596259605967596C59690000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F +5A115A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC2 +5ABD5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E +5B435B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B80 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C530000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C505C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB6 +5CBC5CB75CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C +5D1F5D1B5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D87 +5D845D825DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB +5DEB5DF25DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E54 +5E5F5E625E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF8 +5EFE5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F +5F515F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E +5F995F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF60216060 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006084609B60966097609260A7608B60E160B860E060D360B45FF060BD60C6 +60B560D8614D6115610660F660F7610060F460FA6103612160FB60F1610D610E +6147613E61286127614A613F613C612C6134613D614261446173617761586159 +615A616B6174616F61656171615F615D6153617561996196618761AC6194619A +618A619161AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E6 +61E361F661FA61F461FF61FD61FC61FE620062086209620D620C6214621B0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000621E6221622A622E6230623262336241624E625E6263625B62606268627C +62826289627E62926293629662D46283629462D762D162BB62CF62FF62C664D4 +62C862DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F5 +6350633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064DA64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF +652C64F664F464F264FA650064FD6518651C650565246523652B653465356537 +65366538754B654865566555654D6558655E655D65726578658265838B8A659B +659F65AB65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A +660365FB6773663566366634661C664F664466496641665E665D666466676668 +665F6662667066836688668E668966846698669D66C166B966C966BE66BC0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000066C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E6726 +67279738672E673F67366741673867376746675E676067596763676467896770 +67A9677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E4 +67DE67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D468E768D569366912690468D768E3692568F968E068EF6928692A691A +6923692168C669796977695C6978696B6954697E696E69396974693D69596930 +6961695E695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD +69BB69C369A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F9 +69F269E76A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A72 +6A366A786A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA30000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB +6B0586166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B50 +6B596B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA4 +6BAA6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CBA6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D12 +6D0C6D636D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC7 +6DE66DB86DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D +6E6E6E2E6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E24 +6EFF6E1D6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F +6EA56EC26E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F58 +6F8E6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD8 +6FF16FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F +7030703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071F971FF720D7210721B7228722D722C72307232723B723C723F72407246 +724B72587274727E7282728172877292729672A272A772B972B272C372C672C4 +72CE72D272E272E072E172F972F7500F7317730A731C7316731D7334732F7329 +7325733E734E734F9ED87357736A7368737073787375737B737A73C873B373CE +73BB73C073E573EE73DE74A27405746F742573F87432743A7455743F745F7459 +7441745C746974707463746A7476747E748B749E74A774CA74CF74D473F10000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074E074E374E774E974EE74F274F074F174F874F7750475037505750C750E +750D75157513751E7526752C753C7544754D754A7549755B7546755A75697564 +7567756B756D75787576758675877574758A758975827594759A759D75A575A3 +75C275B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76700000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767276767678767C768076837688768B768E769676937699769A76B076B4 +76B876B976BA76C276CD76D676D276DE76E176E576E776EA862F76FB77087707 +770477297724771E77257726771B773777387747775A7768776B775B7765777F +777E7779778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD +77D777DA77DC77E377EE77FC780C781279267820792A7845788E78747886787C +789A788C78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC0000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078E778DA78FD78F47907791279117919792C792B794079607957795F795A +79557953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E7 +79EC79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A57 +7A497A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB0 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B500000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B7A7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D +7B987B9F7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC6 +7BDD7BE97C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C23 +7C277C2A7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C56 +7C657C6C7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB9 +7CBD7CC07CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D060000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D72 +7D687D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD +7DAB7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E05 +7E0A7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E37 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A0000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F457F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F78 +7F827F867F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB6 +7FB88B717FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B +801280188019801C80218028803F803B804A804680528058805A805F80628068 +80738072807080768079807D807F808480868085809B8093809A80AD519080AC +80DB80E580D980DD80C480DA80D6810980EF80F1811B81298123812F814B0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968B8146813E8153815180FC8171816E81658166817481838188818A8180 +818281A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA +81C981CD81D181D981D881C881DA81DF81E081E781FA81FB81FE820182028205 +8207820A820D821082168229822B82388233824082598258825D825A825F8264 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D90000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000833583348316833283318340833983508345832F832B831783188385839A +83AA839F83A283968323838E8387838A837C83B58373837583A0838983A883F4 +841383EB83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD +8438850683FB846D842A843C855A84848477846B84AD846E848284698446842C +846F8479843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D6 +84A1852184FF84F485178518852C851F8515851484FC85408563855885480000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085418602854B8555858085A485888591858A85A8856D8594859B85EA8587 +859C8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613 +860B85FE85FA86068622861A8630863F864D4E558654865F86678671869386A3 +86A986AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87590000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087538763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C4 +87B387C787C687BB87EF87F287E0880F880D87FE87F687F7880E87D288118816 +8815882288218831883688398827883B8844884288528859885E8862886B8881 +887E889E8875887D88B5887288828897889288AE889988A2888D88A488B088BF +88B188C388C488D488D888D988DD88F9890288FC88F488E888F28904890C890A +89138943891E8925892A892B89418944893B89368938894C891D8960895E0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089668964896D896A896F89748977897E89838988898A8993899889A189A9 +89A689AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A16 +8A108A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A85 +8A828A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE7 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B5F8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C41 +8C3F8C488C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E +8C948C7C8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA +8CFD8CFA8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D67 +8D6D8D718D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB +8DDF8DE38DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E81 +8E878E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE +8EC58EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C +8F1F8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF80000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904F905090519052900E9049903E90569058905E9068906F907696A89072 +9082907D90819080908A9089908F90A890AF90B190B590E290E4624890DB9102 +9112911991329130914A9156915891639165916991739172918B9189918291A2 +91AB91AF91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC +91F591F6921E91FF9214922C92159211925E925792459249926492489295923F +924B9250929C92969293929B925A92CF92B992B792E9930F92FA9344932E0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093199322931A9323933A9335933B935C9360937C936E935693B093AC93AD +939493B993D693D793E893E593D893C393DD93D093C893E4941A941494139403 +940794109436942B94359421943A944194529444945B94609462945E946A9229 +947094759477947D945A947C947E9481947F95829587958A9594959695989599 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E0000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965D965F96669672966C968D96989695969796AA96A796B196B296B096B4 +96B696B896B996CE96CB96C996CD894D96DC970D96D596F99704970697089713 +970E9711970F971697199724972A97309739973D973E97449746974897429749 +975C976097649766976852D2976B977197799785977C9781977A9786978B978F +9790979C97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF +97F697F5980F980C9838982498219837983D9846984F984B986B986F98700000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098719874987398AA98AF98B198B698C498C398C698E998EB990399099912 +991499189921991D991E99249920992C992E993D993E9942994999459950994B +99519952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED +99EE99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A43 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF70000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AFB9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B32 +9B449B439B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA8 +9BB49BC09BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF1 +9BF09C159C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C21 +9C309C479C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB +9D039D069D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D480000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA9 +9DB29DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD +9E1A9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA9 +9EB89EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA00000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000582F69C79059746451DC7199000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +A1C1 301C FF5E +A1C2 2016 2225 +A1DD 2212 FF0D +A1F1 00A2 FFE0 +A1F2 00A3 FFE1 +A2CC 00AC FFE2 diff --git a/inkstitch/bin/tcl/encoding/euc-kr.enc b/inkstitch/bin/tcl/encoding/euc-kr.enc new file mode 100644 index 0000000..5e9bb93 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/euc-kr.enc @@ -0,0 +1,1533 @@ +# Encoding file: euc-kr, multi-byte +M +003F 0 90 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000021D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D821210000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 diff --git a/inkstitch/bin/tcl/encoding/gb12345.enc b/inkstitch/bin/tcl/encoding/gb12345.enc new file mode 100644 index 0000000..3f3f4d2 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/gb12345.enc @@ -0,0 +1,1414 @@ +# Encoding file: gb12345, double-byte +D +233F 0 83 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C0769A764C85F977EE827E7919611B9698 +978D6C285B894FFA630966975CB880FA68489AAF660276CE51F9655671AC7FF1 +895650B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A801958E997387F777238767D67CF767E64FA4F70655762DC7A176591 +73ED642C6273822C9812677F7248626E62CC4F3474E3534A8FA67D4690A65E6B +6886699C81807D8168D278C5868C938A508D8B1782DE80DE5305891252650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582198FD5BF662B1583166B48C799B917206676F789160B2 +535153178F2980CC8C9D92C7500D72FD5099618A711988AB595482EF672C7B28 +5D297DB3752D6CF58E668FF8903C9F3B6BD491197B465F7C78A784D6853D7562 +65836BD65E635E8775F99589655D5F0A5FC58F9F58C181C2907F965B97AD908A +7DE88CB662414FBF8B8A535E8FA88FAF8FAE904D6A195F6A819888689C49618B +522B765F5F6C658C70156FF18CD364EF517551B067C44E1979C9990570B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD64A592626CE2535A52C3640F92517B944F2F5E1B +82368116818A6E246CCA99C16355535C54FA88DC57E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8CA1776C8E2991C75F6983DC8521991053C38836 +6B98615A615871E684BC825950096EC485CF64CD7CD969FD66F9834953A07B56 +5074518C6E2C5C648E6D63D253C9832C833667E578B4643D5BDF5C945DEE8A6B +62C667F48C7A6519647B87EC995E8B927E8F93DF752395E1986B660C73160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000583456175E389577511F81785EE0655E66A2553150218D8562849214671D +56326F6E5DE2543570928ECA626F64A463A35FB96F8890F481E38FB058756668 +5FF16C8996738D81896F64917A3157CE6A59621054484E587A0B61F26F848AA0 +627F901E9A0179E4540375F4630153196C6090725F1B99B3803B9F524F885C3A +8D647FC565A571BE5145885D87F25D075BF562BD916C75878E8A7A2061017C4C +4EC77DA27785919C81ED521D51FA6A7153A88E8792E496DB6EC19664695A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000790E513277D7641089F8865563E35DDD7A7F693D50B3823955984E327621 +7A975E625E8A95D652755439708A6376931857826625693F918755076DF37D14 +882262337DBD75B5832878C196CC8FAD614874F78A5E6B64523A8CDC6B218070 +847156F153065F9E53E251D17C97918B7C074FC38EA57BE17AC464675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B932F642D9054 +7B5476296253592754466B7950A362345E366B864EE38CB8888B5F85902E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D64D44E3955AE913264A381BD65E66C2E4F46619A6DE18A955F48 +86CB757664CB9EE885696A94520064178E4850125CF679B15C0E52307A3B60BC +905376D75FB75F9776848E6C71C8767B7B4977AA51F3912758244F4E6EF48FEA +65757B1B72C46ECC7FDF5AE162B55E95573084827B2C5E1D5F1F905E7DE0985B +63826EC778989EDE5178975B588A96FB4F4375385E9760E659606FB16BBF7889 +53FC96D551CB52016389540A91E38ABF8DCC7239789F87768FED8ADC758A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE91D898029F0E93205B9A8A024E22677151AC846361C252D5 +68DF4F97606B51CD6D1E515C62969B2596618C46901775D890FD77636BD272A2 +73688B80583577798CED675C934D809A5EA66E2159927AEF77ED935B6BB565B7 +7DDE58065151968A5C0D58A956788E726566981356E4920D76FE9041638754C6 +591A596A579B8EB267358DFA8235524160F058AE86FE5CE89D5D4FC4984D8A1B +5A2560E15384627C904F910299136069800C51528033723E990C6D314E8C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CB3767C7F707B4F4F104E4F95A56CD573D085E95E06756A7FFB6A0A792C +91E97E4151E1716953CD8FD47BC48CA972AF98EF6CDB574A82B365B980AA623F +963259A84EFF8A2A7D21653E83F2975E556198DB80A5532A8AB9542080BA5EE2 +6CB88CBB82AC915A54296C1B52067D1B58B3711A6C7E7C89596E4EFD5FFF61A4 +7CDE8C505C01695387025CF092D298A8760B70FD902299AE7E2B8AF759499CF3 +4F5B5426592B6577819A5B75627662C28F3B5E456C1F7B264F0F4FD8670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B64AB8F144FEF91DC65A7812F81515E9C8150 +8D74526F89868CE65FA950854ED8961C723681798CA05BCC8A0396445A667E1B +54905676560E8A7265396982922384CB6E895E797518674667D17AFF809D8D95 +611F79C665628D1B5CA1525B92FC7F38809B7DB15D176E2F67607BD9768B9AD8 +818F7F947CD5641E93AC7A3F544A54E56B4C64F162089D3F80F3759952729769 +845B683C86E495A39694927B500B54047D6668398DDF801566F45E9A7FB90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F944F9B8EAC516C5BAB5F13978F6C5E +62F18CA25171920E52FE6E9D82DF72D757A269CB8CFC591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E488319AA88C3780A16545986756FA96C7522E74DC +526E5BE1630289024E5662D0602A68FA95DC5B9851A089C07BA199287F506163 +704C8CAB51495EE3901B7470898F572D78456B789F9C95A88ECC9B3C8A6D7678 +68426AC38DEA8CB4528A8F256EDA68CD934B90ED570B679C88F9904E54C80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB399ED916361A890AF97D3542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576F22592F676D822A58D5568E +8C6A6BEB90DD597D8017865F6D695475559D837783CF683879BE548C4F555408 +76D28C8995A16CB36DB88D6B89109DB48CC0563F9ED175D55F8872E0606854FC +4EA86A2A886160528F5F54C470D886799D3B6D2A5B8F5F187D0555894FAF7334 +543C539A50195F8C547C4E4E5FFD745A58FA846B80E1877472D07CCA6E560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C8B774E926EEC623782B1562983EF733E6ED1756B52835316 +8A7169D05F8A61F76DEE58DE6B6174B0685390847DE963DB60A3559A76138C62 +71656E195BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8B0A707063EE8F1D5FBD606286D456DE6BC160946167534960E066668CC4 +7A62670371F4532F8AF18AA87E6A8477660F5A5A9B426E3E6DF78C416D3B4F19 +706B7372621660D1970D8CA8798D64CA573E57FA6A5F75787A3D7A4D7B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99518FF96FC08B4F9DC459EC7E3E7DDD5409697568D88F2F7C4D96C6 +53CA602575BE6C7253735AC97D1A64E05E7E810A5DF1858A628051805B634F0E +796D529160B86FDF5BC45BC28A088A1865E25FCC969B59937E7C7D00560967B7 +593E4F735BB652A083A298308CC87532924050477A3C50F967B699D55AC16BB2 +76E358055C167B8B9593714E517C80A9827159787DD87E6D6AA267EC78B19E7C +63C064BF7C215109526A51CF85A66ABB94528E108CE4898B93757BAD4EF60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050658266528D991E6F386FFA6F975EFA50F559DC5C076F3F6C5F75868523 +69F3596C8B1B532091AC964D854969127901712681A04EA490CA6F869A555B0C +56BC652A927877EF50E5811A72E189D299037E737D5E527F655991758F4E8F03 +53EB7A9663ED63A5768679F88857968E622A52AB7BC0685467706377776B7AED +6F547D5089E359D0621285C982A5754C501F4ECB75A58AA15C4A5DFE7B4B65A4 +91D14ECA6D25895F7DCA932650C58B3990329773664979818FD171FC6D780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000076E152C1834651628396775B66769BE84EAC9A5A7CBE7CB37D934E958B66 +666F9838975C5883656C93E15F9175D997567ADF7AF651C870AF7A9863EA7A76 +7CFE739697ED4E4570784E5D915253A96551820A81FC8205548E5C31759A97A0 +62D872D975BD5C4599D283CA5C40548077E982096CAE805A62D264DA5DE85177 +8DDD8E1E92F84FF153E561FC70AC528763509D515A1F5026773753777D796485 +652B628963985014723589BA51B38A237D76574783CC921E8ECD541B5CFB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E199FF55805496536154AF958B63E9697751F16168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5984679D16BBB54B353EF6E34514B523B5BA28AB280AF +554358BE61C75751542D7A7A60505B5463A7647353E362635BC767AF54ED7A9F +82E691775EAB89328A8757AE630E8DE880EF584A7B7751085FEB5BEC6B3E5321 +7B5072C268467926773666E051B5866776D45DCB7ABA8475594E9B4150800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000994B61276F7057646606634656F062EC64F45ED395CA578362C95587881F +81D88FA35566840A4F868CF485CD5A6A6B0465147C4395CC862D703E8B95652C +89BD61F67E9C721B6FEB7405699472FC5ECA90CE67176D6A648852DE72628001 +4F6C59E5916A70D96F8752D26A0296F79433857E78CA7D2F512158D864C2808B +985E6CEA68F1695E51B7539868A872819ECE7C6C72F896E270557406674E88CF +9BC979AE83898354540F68179E9753B252F5792B6B77522950884F8B4FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C92701D96B8529B748354E95006806F84EE9023942E5EC96190 +6F237C3E658281C993C8620071497DF47CE751C968817CB1826F51698F1B91CF +667E4EAE8AD264A9804A50DA764271CE5BE5907C6F664E86648294105ED66599 +521788C270C852A373757433679778F7971681E891309C576DCB51DB8CC3541D +62CE73B283F196F69F6192344F367F9A51CC974896755DBA981853E64EE46E9C +740969B4786B993E7559528976246D4167F3516D9F8D807E56A87C607ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968658DF650F96B46A135A41645F7C0D6F0F964B860676E798715EEC7210 +64C46EF7865C9B6F9E93788C97328DEF8CC29E7F6F5E798493329678622E9A62 +541592C14FA365C55C655C627E37616E6C2F5F8B73876FFE7DD15DD265235B7F +706453754E8263A0756563848F2A502B4F966DEA7DB88AD6863F87BA7F85908F +947C7C6E9A3E88F8843D6D1B99F17D615ABD9EBB746A78BC879E99AC99E1561B +55CE57CB8CB79EA58CE390818109779E9945883B6EFF851366FC61626F2B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B3E8292832B76F26C135FD983BD732B830593286BDB77DB925A536F8302 +51925E3D8C8C8CBF9EBD73AB679A68859176970971646CA177095A9293826BCF +7F8E66275BD059B95A9A958060B65011840C84996AAC76DF9333731B59225B5F +772F919A97617CDC8FF78B0E5F4C7C7379D889936CCC871C5BC65E4268C97720 +7DBF5195514D52C95A297DEC976282D763CF778485D079D26E3A5EDF59998511 +6EC56C1162BF76BF654F61AB95A9660E879F9CF49298540D547D8B2C64780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8B00725F67D062C77261755D59C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA5450920990A35A1C7D0D6C164E435976801059485357 +753796E356CA6493816660F19B276DD65462991251855AE980FD59AE9713502A +6CE55C3C64EC4F60533F81A990066EBA852B62C85E7478BE6506637B5FF55A18 +91C09CE55C3F634F80765B7D5699947793B36D8560A86AB8737051DD5BE70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064F06FD8725B626D92157D1081BF6FC38FB25F04597452AA601259736696 +86507627632A61E67CEF8AFE54E66B509DD76BC685D5561450766F1A556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876E478D076FC7554 +522453DB4E539F9065C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48CE0966A914D4F696C9B567476C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9D6C636778B0576F78129739627962AB528874356BD70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A1998C46F02 +74E27968648777A562FC983B8CA754C180584E52576A860B840D5E73619174F6 +8A555C4F57616F5198175A4678349B448FEB7C95525664B292EA50D583868461 +83E984B257D46A385703666E6D668B5C66DD7011671F6B3A68F2621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81CD9F4A65D7794879419A0E +8D778C484E5E4F0155535951780C56686C238FC468C46C7D6CE38A1663900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D727D626691FA925B534390777C3D4EDF8B194E7E9ED493229257 +524D6F5B90636DFA8B7458795D4C6B206B4969CD55C681547F8C58BB85945F3A +64366A47936C657260846A4B77A755AC50D15DE7979864AC7FF95CED4FCF7AC5 +520783044E14602F7ACA6B3D4FB589AA79E6743452E482B964D279BD5BE26C81 +97528F156C2B50BE537F6E0564CE66746C3060C598038ACB617674CA7AAE79CB +4E1890B174036C4256DA914B6CC58DA8534086C666F28EC05C489A456E200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F728DA353BB570898746B0A919B6CC9516875CA62F372AC5238 +52F87F3A7094763853749D7269B778BA96C088D97FA4713671C3518967D374E4 +58E4651856B78B93995264FE7E5E60F971B158EC4EC14EBA5FCD97CC4EFB8A8D +5203598A7D0962544ECD65E5620E833884C969AE878D71946EB65BB97D685197 +63C967D480898339881551125B7A59828FB14E736C5D516589258EDF962E854A +745E92ED958F6F6482E55F316492705185A9816E9C13585E8CFD4E0953C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050986563685155D355AA64149A3763835AC2745F82726F8068EE50E7838E +78026BBA52396C997D1750BB5565715E7BE966EC73CA82EB67495C715220717D +886B9583965D64C58D0D81B355846C5562477E55589250B755468CDE664C4E0A +5C1A88F368A2634E7A0D71D2828D52FA97F65C1154E890B57D3959628CD286C7 +820C63688D66651D5C0461FE6D89793E8A2D78377533547B4F388EAB6DF15A20 +7D33795E6C885BE95B38751A814E614E6EF28072751F7525727253477E690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526952DD80565E2B5931734565BD6FD58A695C388671534177F3 +62FE66424EC098DF87555BE68B5853F277E24F7F5C4E99DB59CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52E2662F55DC566C90694ED54F8D91CB98FE6C0F +5E0260435BA489968A666536624B99965B8858FD6388552E53D776267378852C +6A1E68B36B8A62928F3853D482126DD1758F66F88D165B70719F85AF669166D9 +7F7287009ECD9F205C6C88538FF06A39675F620D7AEA58855EB665786F310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E25681362F4971C96D9723D8AB06C347761 +7A0E542E77AC9806821C8AAC78A96714720D65AF64955636601D79C153F87D72 +6B7B80865BFA55E356DB4F3A4F3C98FC5DF39B068073616B980C90015B8B8A1F +8AA6641C825864FB55FD860791654FD77D20901F7C9F50F358516EAF5BBF8A34 +80859178849C7B9796D6968B96A87D8F9AD3788E6B727A57904296A7795F5B6B +640D7B0B84D168AD55067E2E74637D2293966240584C4ED65B83597958540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A64BB8E4B8E0F80CE82D462AC81FA6CF0915E592A614B6C70574D6524 +8CAA7671705858C76A8075F06F6D8B5A8AC757666BEF889278B363A2560670AD +6E6F5858642A580268E0819B55107CD650188EBA6DCC8D9F71D9638F6FE46ED4 +7E278404684390036DD896768A0E5957727985E49A3075BC8B0468AF52548E22 +92BB63D0984C8E44557C9AD466FF568F60D56D9552435C4959296DFB586B7530 +751C606C821481466311689D8FE2773A8DF38CBC94355E165EF3807D70F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C92855F647AE5 +687663457B527D7175DB50776295982D900F51F879C37A8157165F9290145857 +5C60571F541051546E4D571863A8983D817F8715892A9000541E5C6F81C062D6 +625881319D15964099B199DD6A6259A562D3553E631654C786D97AAA5A0374E6 +896A6B6A59168C4C5F4E706373A998114E3870F75B8C7897633D665A769660CB +5B9B5A49842C81556C6A738B4EA167897DB25F8065FA671B5FD859845A010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197CB90556845570D552F60DF72326FF07DAD8466840E59D4 +504950DE5C3E7DEF672A851A5473754F80C355829B4F4F4D6E2D8B025C096170 +885B761F6E29868A6587805E7D0B543B7A697D0A554F55E17FC174EE64BE8778 +6E267AA9621165A1536763E16C835DEB55DA93A270CF6C618AA35C4B7121856A +68A7543E54346BCB6B664E9463425348821E4F0D4FAE5862620A972766647269 +52FF52D9609F8AA4661471996790897F785277FD6670563B5438932B72A70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8489725E2D +7FD25AB3559C92916D177CFB969962327D30778E87665323971E8F4466875CFD +4FE072F94E0B53A6590F56876380934151484ED99BAE7E9654B88CE2929C8237 +95916D8E5F265ACC986F96AA73FE737B7E23817A99217FA161B2967796507DAB +76F853A2947299997BB189446E5891097FD479658A7360F397FF4EAB98055DF7 +6A6150CF54118C61856D785D9704524A54EE56C292B76D885BB56DC666C90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D68218096562F7B11654869544E9B6B47874E978B5354633E643A +90AA659C81058AE75BEB68B0537887F961C86CC470098B1D5C5185AA82AF92C5 +6B238F9B65B05FFB5FC34FE191C1661F8165732960FA82085211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C592B979C088967D89589F620C9700865A561898085F908A3184C49157 +53D965ED5E8F755C60647D6E5A7F7DD27E8C8ED255A75BA361F865CB73840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009078766C77297D629774859B5B787A7496EA884052DB718F5FAA65EC8A62 +5C0B99B45DE16B896C5B8A138A0A905C8FC558D362BC9D099D2854404E2B82BD +7259869C5D1688596DAF96C5555E4E9E8A1D710954BD95B970DF6DF99E7D56B4 +781487125CA95EF68A00985495BB708E6CBF594463A9773C884D6F1482775830 +71D553AD786F96C155015F6671305BB48AFA9A576B83592E9D2679E7694A63DA +4F6F760D7F8A6D0B967D6C274EF07662990A6A236F3E90808170599674760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006447582F90657A918B2159DA54AC820085E5898180006930564E8036723A +91CE51B64E5F98016396696D844966F3814B591C6DB24E0058F991AB63D692A5 +4F9D4F0A886398245937907A79FB510080F075916C825B9C59E85F5D690587FB +501A5DF24E5977E34EE585DD6291661390915C7951045F7981C69038808475AB +4EA688D4610F6BC561B67FA976CA6EA28A638B708ABC8B6F5F027FFC7FCC7E79 +8335852D56E06BB797F3967059FB541F92806DEB5BC598F25C395F1596B10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16AFB5B309DF961C97E93746987A271DF719288058FCE8D0F76C8 +5F717A4E786C662055B264C150AD81C376705EB896CD8E3486F9548F6CF36D8C +6C38607F52C775285E7D512A60A061825C24753190F5923E73366CB96E389149 +670953CB53F34F5191C98A9853C85E7C8FC26DE44E8E76C26986865E611A8F3F +99184FDE903E9B5A61096E1D6F0196854E885A3196E882075DBC79B95B878A9E +7FBD738957DF828B9B315401904755BB5CEA5FA161086B32734480B28B7D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598108C6B99AD9D1B6DF551A4514357A38881539F63F48F45 +571254E15713733F6E907DE3906082D198586028966266F07D048D8A8E8D9470 +5CB37CA4670860A695B2801896F29116530096955141904B85F49196668897F5 +5B55531D783896DC683D54C9707E5BB08F09518D572854B1652266AB8D0A8D1C +81DF846C906D7CDF947F85FB68D765E96FA186A48E81566A902076827AC871E5 +8CAC64C752476FA48CCA600E589E618E66FE8D08624E55B36E23672D8ECB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000935895987728680569A8548B4E4D70B88A5064589F4B5B857A8450B55BE8 +77BB6C088A797C986CBE76DE65AC8F3E5D845C55863868E7536062307AD96E5B +7DBB6A1F7AE05F706F335F35638C6F3267564E085E338CEC4ED781397634969C +62DB662D627E6CBC8D9971677F695146808753EC906E629854F287C48F4D8005 +937A851790196D5973CD659F771F7504782781FB8C9E91DD5075679575B98A3A +9707632F93AE966384B86399775C5F817319722D6014657462EF6B63653F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E407665912D8B49829D679D652F5431871877E580A281026C414E4B7E54 +807776F4690D6B9657F7503C4F84574063076B628DBE887965E87D195FD7646F +64F281F381F47F6E5E5F5CD95236667A79E97A1A8CEA709975D46EEF6CBB7A92 +4E2D76C55FE0941888777D427A2E816B91CD4EF28846821F54685DDE6D328B05 +7CA58EF880985E1A549276BA5B99665D9A5F73E0682A86DB6731732A8AF88A85 +90107AF971ED716E62C477DA56D14E3B845767F152A986C08CAF94447BC90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D99D06293722A62FD5C0878DA8F4964B08CFA7BC66A01838A +88DD599D649E58EF72C0690E93108FFD8D05589C7DB48AC46E96634962D95353 +684C74228301914C55447740707C6FC1517954A88CC759FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6F2C5B579B0368D58E2A5B977D9C7E3D7E3191128D70 +594F63CD79DF8DB3535265CF79568A5B963B7D44947D7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B55C7560F4EC45399539D53B453A553AE97688D0B531A53F5 +532D5331533E8CFE5366536352025208520E52445233528C5274524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE50B44EF34F224F644EF5500050964F094F474F5E4F6765384F5A4F5D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B51154F7C5102 +4F945114513C51374FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C5025502850E8504350555048504E506C50C2513B5110 +513A50BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F5850C94FCE9FA0 +6C467CF4516E5DFD9ECC999856C5591452F9530D8A0753109CEC591951554EA0 +51564EB3886E88A4893B81E088D279805B3488037FB851AB51B151BD51BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58A018A108A0C8A158B338A4E8A258A418A368A468A54 +8A588A528A868A848A7F8A708A7C8A758A6C8A6E8ACD8AE28A618A9A8AA58A91 +8A928ACF8AD18AC98ADB8AD78AC28AB68AF68AEB8B148B018AE48AED8AFC8AF3 +8AE68AEE8ADE8B288B9C8B168B1A8B108B2B8B2D8B568B598B4E8B9E8B6B8B96 +5369537A961D962296219631962A963D963C964296589654965F9689966C9672 +96749688968D969796B09097909B913A9099911490A190B490B390B691340000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090DF90C590BE913690C490C79106914890E290DC90D790DB90EB +90EF90FE91049122911E91239131912F91399143914682BB595052F152AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DF0 +574C580A57A1587E58BC58C558D15729572C572A573358D9572E572F58E2573B +5742576958E0576B58DA577C577B5768576D5776577357E157A4578C584F57CF +57A75816579357A057D55852581D586457D257B857F457EF57F857E457DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E8291858C829982AB8553 +82BE82B085F682CA82E3829882B782AE83A7840784EF82A982B482A182AA829F +82C482E782A482E1830982F782E48622830782DC82F482D282D8830C82FB82D3 +8526831A8306584B716282E082D5831C8351855884FD83088392833C83348331 +839B854E832F834F8347834385888340831785BA832D833A833372966ECE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008541831B85CE855284C08452846483B083788494843583A083AA8393839C +8385837C859F83A9837D8555837B8398839E83A89DAF849383C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C07E0883F083E1845C8451845A8459847385468488847A85628478 +843C844684698476851E848E8431846D84C184CD84D09A4084BD84D384CA84BF +84BA863A84A184B984B4849793A38577850C750D853884F0861E851F85FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438604857B85A4 +85A88587858F857985EA859C858585B985B785B0861A85C185DC85FF86278605 +86298616863C5EFE5F08593C596980375955595A5958530F5C225C255C2C5C37 +624C636B647662BB62CA62DA62D762EE649F62F66339634B634363AD63F66371 +637A638E6451636D63AC638A636963AE645C63F263F863E064B363C463DE63CE +645263C663BE65046441640B641B6420640C64266421645E6516646D64960000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64F764FC6499651B64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F1563053E953E853FB541254165406544B563856C8545456A6 +54435421550454BC5423543254825494547754715464549A5680548454765466 +565D54D054AD54C254B4566054A754A6563555F6547254A3566654BB54BF54CC +567254DA568C54A954AA54A4566554CF54DE561C54E7562E54FD551454F355E9 +5523550F55115527552A5616558F55B5554956C055415555553F5550553C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF560D56B35594559955EA55F755C9561F55D156C1 +55EC55D455E655DD55C455EF55E555F2566F55CC55CD55E855F555E48F61561E +5608560C560156B6562355FE56005627562D565856395657562C564D56625659 +5695564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +570756EB56F956FF5704570A5709571C5E435E195E145E115E6C5E585E570000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905D875C885CF45C995C91 +5D505C9C5CB55CA25D2C5CAC5CAB5CB15CA35CC15CB75DA75CD25DA05CCB5D22 +5D975D0D5D275D265D2E5D245D1E5D065D1B5DB85D3E5D345D3D5D6C5D5B5D6F +5D815D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DD45F735F775F825F87 +5F89540E5FA05F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B473777341 +72C372C172CE72CD72D272E8736A72E9733B72F472F7730172F3736B72FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137380730A731E731D737C732273397325732C733873317350 +734D73577360736C736F737E821B592598E75924590298E0993398E9993C98EA +98EB98ED98F4990999114F59991B9937993F994399489949994A994C99625E80 +5EE15E8B5E965EA55EA05EB95EB55EBE5EB38CE15ED25ED15EDB5EE85EEA81BA +5FC45FC95FD661FA61AE5FEE616A5FE15FE4613E60B561345FEA5FED5FF86019 +60356026601B600F600D6029602B600A61CC6021615F61E860FB613760420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A60F26096609A6173609D60836092608C609B611C60BB60B160DD60D8 +60C660DA60B4612061926115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B39582958695C8958E9594958C95E595AD95AB9B2E95AC +95BE95B69B2995BF95BD95BC95C395CB95D495D095D595DE4E2C723F62156C35 +6C546C5C6C4A70436C856C906C946C8C6C686C696C746C766C866F596CD06CD4 +6CAD702770186CF16CD76CB26CE06CD66FFC6CEB6CEE6CB16CD36CEF6D870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D796E5E6D076D046D196D0E6D2B6FAE6D2E6D356D1A700F +6EF86F6F6D336D916D6F6DF66F7F6D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE70066DBF6DE06FA06DE66DDD6DD9700B6DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E4470676EB16E9870446F2D70056EA5 +6EA76EBD6EBB6EB76F776EB46ECF6E8F6EC26E9F6F627020701F6F246F156EF9 +6F2F6F3670326F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A70280000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +705D705E5B805B845B955B935BA55BB8752F9A2B64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE490878FE690158FE890059004900B90909011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C687FBC5F335F295F2D82745F3C9B3B5C6E59815983598D5AF55AD759A30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA5B00599E59A459D259B259AF59D759BE5A6D5B0859DD5B4C59E3 +59D859F95A0C5A095AA75AFB5A115A235A135A405A675A4A5A555A3C5A625B0B +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25B215B2A5AB85AE05AE35B195AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +99D499DF99D99A369A5B99D199D89A4D9A4A99E29A6A9A0F9A0D9A059A429A2D +9A169A419A2E9A389A439A449A4F9A659A647CF97D067D027D077D087E8A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D1C7D157D137D3A7D327D317E107D3C7D407D3F7D5D7D4E7D737D867D83 +7D887DBE7DBA7DCB7DD47DC47D9E7DAC7DB97DA37DB07DC77DD97DD77DF97DF2 +7E627DE67DF67DF17E0B7DE17E097E1D7E1F7E1E7E2D7E0A7E117E7D7E397E35 +7E327E467E457E887E5A7E527E6E7E7E7E707E6F7E985E7A757F5DDB753E9095 +738E74A3744B73A2739F73CF73C274CF73B773B373C073C973C873E573D9980A +740A73E973E773DE74BD743F7489742A745B7426742574287430742E742C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C74577455745974A6746D747E749C74D4748074817487 +748B749E74A874A9749074A774DA74BA97D997DE97DC674C6753675E674869AA +6AEA6787676A677367986898677568D66A05689F678B6777677C67F06ADB67D8 +6AF367E967B06AE867D967B567DA67B367DD680067C367B867E26ADF67C16A89 +68326833690F6A48684E6968684469BF6883681D68556A3A68416A9C68406B12 +684A6849682968B5688F687468776893686B6B1E696E68FC6ADD69E768F90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B0F68F0690B6901695768E369106971693969606942695D6B16696B6980 +69986978693469CC6AEC6ADA69CE6AF8696669636979699B69A769BB69AB69AD +69D469B169C169CA6AB369956AE7698D69FF6AA369ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6AD36A3D6A286A586ADE6A916A906AA96A976AAB +733773526B816B826BA46B846B9E6BAE6B8D6BAB6B9B6BAF6BAA8ED48EDB8EF2 +8EFB8F648EF98EFC8EEB8EE48F628EFA8EFE8F0A8F078F058F128F268F1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F1F8F1C8F338F468F548ECE62146227621B621F62226221622562246229 +81E7750C74F474FF750F75117513653465EE65EF65F0660A66C7677266036615 +6600708566F7661D66346631663666358006665F66C46641664F668966616657 +66776684668C66D6669D66BE66DB66DC66E666E98CC18CB08CBA8CBD8D048CB2 +8CC58D108CD18CDA8CD58CEB8CE78CFB899889AC89A189BF89A689AF89B289B7 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BFF6BF96C056C0C6C066C0D6C156C186C19 +6C1A6C216C2C6C246C2A6C3265356555656B725872527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B76727815680E981DA80DB80C2 +80C480D980CD80D7671080DD811B80F180F480ED81BE810E80F280FC67158112 +8C5A8161811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281CF6ED581A381AA81CC672681CA81BB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B5F6B376B396B436B466B5998AE98AF98B698BC98C698C86BB3 +5F408F4289F365909F4F659565BC65C665C465C365CC65CE65D265D6716C7152 +7096719770BB70C070B770AB70B171C170CA7110711371DC712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C71FE716671B9623E623D624362486249793B794079467949795B795C +7953795A79B079577960798E7967797A79AA798A799A79A779B35FD15FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061DF605D605A606760416059606361646106610D615D61A9619D61CB61E3 +62078080807F6C936FA96DFC78EF77F878AD780978687818781165AB782D78B8 +781D7839792A7931781F783C7825782C78237829784E786D786478FD78267850 +7847784C786A78E77893789A788778E378A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F959EF99EFB9EFC76F17704779876F9 +77077708771A77227719772D772677357738775E77BC77477743775A77680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F867F717F797F88 +7F7E76CD76E5883291D291D391D491D991D791D591F791E791E4934691F591F9 +9208922692459211921092019227920492259200923A9266923792339255923D +9238925E926C926D923F9460923092499248924D922E9239943892AC92A0927A +92AA92EE92CF940392E3943A92B192A693A7929692CC92A993F59293927F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093A9929A931A92AB9283940B92A892A39412933892F193D792E592F092EF +92E892BC92DD92F69426942792C392DF92E6931293069369931B934093019315 +932E934393079308931F93199365934793769354936493AA9370938493E493D8 +9428938793CC939893B893BF93A693B093B5944C93E293DC93DD93CD93DE93C3 +93C793D19414941D93F794659413946D9420947993F99419944A9432943F9454 +9463937E77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A619ECF99A57A707688768E7693769976A474DE74E0752C9CE9 +9CF69D079D069D239D879E159D1D9D1F9DE59D2F9DD99D309D429E1E9D539E1D +9D609D529DF39D5C9D619D939D6A9D6F9D899D989D9A9DC09DA59DA99DC29DBC +9E1A9DD39DDA9DEF9DE69DF29DF89E0C9DFA9E1B7592759476647658759D7667 +75A375B375B475B875C475B175B075C375C2760275CD75E3764675E675E47647 +75E7760375F175FC75FF761076007649760C761E760A7625763B761576190000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630766D76357643766E7633764D76697654 +765C76567672766F7FCA7AE67A787A797A807A867A887A957AC77AA07AAC7AA8 +7AB67AB3886488698872887D887F888288A2896088B788BC88C9893388CE895D +894788F1891A88FC88E888FE88F08921891989138938890A8964892B89368941 +8966897B758B80E576B876B477DC801280148016801C8020802E80258026802C +802980288031800B803580438046807980528075807189839807980E980F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009821981C6F4198269837984E98539873986298599865986C9870864D8654 +866C87E38806867A867C867B86A8868D868B8706869D86A786A386AA869386A9 +86B686C486B5882386B086BA86B186AF86C987F686B486E986FA87EF86ED8784 +86D0871386DE881086DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87C88734873187298737873F87828722877D8811877B +87608770874C876E878B8753876387BB876487598765879387AF87CE87D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F4C +7F447F4582107AFA7AFD7B087BE47B047B677B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337C697B1E7B587BF37B457B757B4C7B8F7B607B6E +7B7B7B627B727B717B907C007BCB7BB87BAC7B9D7C5C7B857C1E7B9C7BA27C2B +7BB47C237BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C6A7C0B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C5F7C4081FE82018202820481EC8844822182228264 +822D822F8228822B8238826B82338234823E82448249824B824F825A825F8268 +887E88CA888888D888DF895E7F9D7FA57FA77FAF7FB07FB27C7C65497C917CF2 +7CF67C9E7CA27CB27CBC7CBD7CDD7CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87E367DA67DAE7E477E9B9EA9 +9EB48D738D848D948D918DB28D678D6D8C478C49914A9150914E914F91640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F91C591C3917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7A8E898DEB8E058E598E69 +8DB58DBF8DBC8DBA8E4C8DD68DD78DDA8E928DCE8DCF8DDB8DC68DEC8E7A8E55 +8DE38E9A8E8B8DE48E098DFD8E148E1D8E1F8E938E2E8E238E918E3A8E408E39 +8E358E3D8E318E498E418E428EA18E638E4A8E708E768E7C8E6F8E748E858EAA +8E948E908EA68E9E8C788C828C8A8C858C988C94659B89D689F489DA89DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89F68A3E8B26975A96E9974296EF9706973D9708970F970E972A +97449730973E9F549F5F9F599F609F5C9F669F6C9F6A9F779EFD9EFF9F0996B9 +96BC96BD96CE96D277BF8B8E928E947E92C893E8936A93CA938F943E946B9B77 +9B749B819B839B8E9C787A4C9B929C5F9B909BAD9B9A9BAA9B9E9C6D9BAB9B9D +9C589BC19C7A9C319C399C239C379BC09BCA9BC79BFD9BD69BEA9BEB9BE19BE4 +9BE79BDD9BE29BF09BDB9BF49BD49C5D9C089C109C0D9C129C099BFF9C200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009C329C2D9C289C259C299C339C3E9C489C3B9C359C459C569C549C529C67 +977C978597C397BD979497C997AB97A397B297B49AB19AB09AB79DBB9AB69ABA +9ABC9AC19AC09ACF9AC29AD69AD59AD19B459B439B589B4E9B489B4D9B519957 +995C992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B229B1F +9B234E489EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EF79EE79EE59EF29EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000896C95C693365F4685147E94538251B24E119F635679515A6DC09F156597 +56419AEE83034E3089075E727A4098B35E7F95A49B0D52128FF45F597A6B98E2 +51E050A24EF7835085915118636E6372524B5938774F8721814A7E8D91CC66C6 +5E1877AD9E7556C99EF46FDB61DE77C770309EB5884A95E282F951ED62514EC6 +673497C67C647E3497A69EAF786E820D672F677E56CC53F098B16AAF7F4E6D82 +7CF04E074FC27E6B9E7956AE9B1A846F53F690C179A67C72613F4E919AD20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C796BB53EA7DFB88FD79CD78437B5151C6000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/gb1988.enc b/inkstitch/bin/tcl/encoding/gb1988.enc new file mode 100644 index 0000000..298732c --- /dev/null +++ b/inkstitch/bin/tcl/encoding/gb1988.enc @@ -0,0 +1,20 @@ +# Encoding file: gb1988, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +002000210022002300A500250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D203E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/gb2312-raw.enc b/inkstitch/bin/tcl/encoding/gb2312-raw.enc new file mode 100644 index 0000000..813d7a6 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/gb2312-raw.enc @@ -0,0 +1,1380 @@ +# Encoding file: gb2312, double-byte +D +233F 0 81 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/gb2312.enc b/inkstitch/bin/tcl/encoding/gb2312.enc new file mode 100644 index 0000000..4b2f8c7 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/gb2312.enc @@ -0,0 +1,1397 @@ +# Encoding file: euc-cn, multi-byte +M +003F 0 82 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 diff --git a/inkstitch/bin/tcl/encoding/iso2022-jp.enc b/inkstitch/bin/tcl/encoding/iso2022-jp.enc new file mode 100644 index 0000000..f6dabe5 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso2022-jp.enc @@ -0,0 +1,12 @@ +# Encoding file: iso2022-jp, escape-driven +E +name iso2022-jp +init {} +final {} +ascii \x1b(B +jis0201 \x1b(J +jis0208 \x1b$B +jis0208 \x1b$@ +jis0212 \x1b$(D +gb2312 \x1b$A +ksc5601 \x1b$(C diff --git a/inkstitch/bin/tcl/encoding/iso2022-kr.enc b/inkstitch/bin/tcl/encoding/iso2022-kr.enc new file mode 100644 index 0000000..d20ce2b --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso2022-kr.enc @@ -0,0 +1,7 @@ +# Encoding file: iso2022-kr, escape-driven +E +name iso2022-kr +init \x1b$)C +final {} +iso8859-1 \x0f +ksc5601 \x0e diff --git a/inkstitch/bin/tcl/encoding/iso2022.enc b/inkstitch/bin/tcl/encoding/iso2022.enc new file mode 100644 index 0000000..a58f8e3 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso2022.enc @@ -0,0 +1,14 @@ +# Encoding file: iso2022, escape-driven +E +name iso2022 +init {} +final {} +iso8859-1 \x1b(B +jis0201 \x1b(J +gb1988 \x1b(T +jis0208 \x1b$B +jis0208 \x1b$@ +jis0212 \x1b$(D +gb2312 \x1b$A +ksc5601 \x1b$(C +jis0208 \x1b&@\x1b$B diff --git a/inkstitch/bin/tcl/encoding/iso8859-1.enc b/inkstitch/bin/tcl/encoding/iso8859-1.enc new file mode 100644 index 0000000..045d8fa --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-1.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-1, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/inkstitch/bin/tcl/encoding/iso8859-10.enc b/inkstitch/bin/tcl/encoding/iso8859-10.enc new file mode 100644 index 0000000..934b3b9 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-10.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-10, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0010401120122012A0128013600A7013B011001600166017D00AD016A014A +00B0010501130123012B0129013700B7013C011101610167017E2015016B014B +010000C100C200C300C400C500C6012E010C00C9011800CB011600CD00CE00CF +00D00145014C00D300D400D500D6016800D8017200DA00DB00DC00DD00DE00DF +010100E100E200E300E400E500E6012F010D00E9011900EB011700ED00EE00EF +00F00146014D00F300F400F500F6016900F8017300FA00FB00FC00FD00FE0138 diff --git a/inkstitch/bin/tcl/encoding/iso8859-13.enc b/inkstitch/bin/tcl/encoding/iso8859-13.enc new file mode 100644 index 0000000..b7edcaf --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-13.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-13, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0201D00A200A300A4201E00A600A700D800A9015600AB00AC00AD00AE00C6 +00B000B100B200B3201C00B500B600B700F800B9015700BB00BC00BD00BE00E6 +0104012E0100010600C400C501180112010C00C90179011601220136012A013B +01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF +0105012F0101010700E400E501190113010D00E9017A011701230137012B013C +01610144014600F3014D00F500F600F701730142015B016B00FC017C017E2019 diff --git a/inkstitch/bin/tcl/encoding/iso8859-14.enc b/inkstitch/bin/tcl/encoding/iso8859-14.enc new file mode 100644 index 0000000..a65ba05 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-14.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-14, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A01E021E0300A3010A010B1E0A00A71E8000A91E821E0B1EF200AD00AE0178 +1E1E1E1F012001211E401E4100B61E561E811E571E831E601EF31E841E851E61 +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +017400D100D200D300D400D500D61E6A00D800D900DA00DB00DC00DD017600DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +017500F100F200F300F400F500F61E6B00F800F900FA00FB00FC00FD017700FF diff --git a/inkstitch/bin/tcl/encoding/iso8859-15.enc b/inkstitch/bin/tcl/encoding/iso8859-15.enc new file mode 100644 index 0000000..823af46 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-15.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-15, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A320AC00A5016000A7016100A900AA00AB00AC00AD00AE00AF +00B000B100B200B3017D00B500B600B7017E00B900BA00BB01520153017800BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/inkstitch/bin/tcl/encoding/iso8859-16.enc b/inkstitch/bin/tcl/encoding/iso8859-16.enc new file mode 100644 index 0000000..da33709 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-16.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-16, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A001040105014120AC201E016000A7016100A9021800AB017900AD017A017B +00B000B1010C0142017D201D00B600B7017E010D021900BB015201530178017C +00C000C100C2010200C4010600C600C700C800C900CA00CB00CC00CD00CE00CF +0110014300D200D300D4015000D6015A017000D900DA00DB00DC0118021A00DF +00E000E100E2010300E4010700E600E700E800E900EA00EB00EC00ED00EE00EF +0111014400F200F300F4015100F6015B017100F900FA00FB00FC0119021B00FF diff --git a/inkstitch/bin/tcl/encoding/iso8859-2.enc b/inkstitch/bin/tcl/encoding/iso8859-2.enc new file mode 100644 index 0000000..16faab6 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-2.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-2, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0010402D8014100A4013D015A00A700A80160015E0164017900AD017D017B +00B0010502DB014200B4013E015B02C700B80161015F0165017A02DD017E017C +015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E +01100143014700D300D4015000D600D70158016E00DA017000DC00DD016200DF +015500E100E2010300E4013A010700E7010D00E9011900EB011B00ED00EE010F +01110144014800F300F4015100F600F70159016F00FA017100FC00FD016302D9 diff --git a/inkstitch/bin/tcl/encoding/iso8859-3.enc b/inkstitch/bin/tcl/encoding/iso8859-3.enc new file mode 100644 index 0000000..c914bce --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-3.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-3, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0012602D800A300A40000012400A700A80130015E011E013400AD0000017B +00B0012700B200B300B400B5012500B700B80131015F011F013500BD0000017C +00C000C100C2000000C4010A010800C700C800C900CA00CB00CC00CD00CE00CF +000000D100D200D300D4012000D600D7011C00D900DA00DB00DC016C015C00DF +00E000E100E2000000E4010B010900E700E800E900EA00EB00EC00ED00EE00EF +000000F100F200F300F4012100F600F7011D00F900FA00FB00FC016D015D02D9 diff --git a/inkstitch/bin/tcl/encoding/iso8859-4.enc b/inkstitch/bin/tcl/encoding/iso8859-4.enc new file mode 100644 index 0000000..ef5c5a9 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-4.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-4, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A001040138015600A40128013B00A700A8016001120122016600AD017D00AF +00B0010502DB015700B40129013C02C700B80161011301230167014A017E014B +010000C100C200C300C400C500C6012E010C00C9011800CB011600CD00CE012A +01100145014C013600D400D500D600D700D8017200DA00DB00DC0168016A00DF +010100E100E200E300E400E500E6012F010D00E9011900EB011700ED00EE012B +01110146014D013700F400F500F600F700F8017300FA00FB00FC0169016B02D9 diff --git a/inkstitch/bin/tcl/encoding/iso8859-5.enc b/inkstitch/bin/tcl/encoding/iso8859-5.enc new file mode 100644 index 0000000..bf4ee82 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-5.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-5, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0040104020403040404050406040704080409040A040B040C00AD040E040F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E044F +2116045104520453045404550456045704580459045A045B045C00A7045E045F diff --git a/inkstitch/bin/tcl/encoding/iso8859-6.enc b/inkstitch/bin/tcl/encoding/iso8859-6.enc new file mode 100644 index 0000000..19ddefb --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-6.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-6, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000000000000000A40000000000000000000000000000060C00AD00000000 +00000000000000000000000000000000000000000000061B000000000000061F +0000062106220623062406250626062706280629062A062B062C062D062E062F +0630063106320633063406350636063706380639063A00000000000000000000 +0640064106420643064406450646064706480649064A064B064C064D064E064F +0650065106520000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/iso8859-7.enc b/inkstitch/bin/tcl/encoding/iso8859-7.enc new file mode 100644 index 0000000..0f93ac8 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-7.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-7, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A02018201900A30000000000A600A700A800A9000000AB00AC00AD00002015 +00B000B100B200B303840385038600B703880389038A00BB038C00BD038E038F +0390039103920393039403950396039703980399039A039B039C039D039E039F +03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF +03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 diff --git a/inkstitch/bin/tcl/encoding/iso8859-8.enc b/inkstitch/bin/tcl/encoding/iso8859-8.enc new file mode 100644 index 0000000..579fa5b --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-8.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-8, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0000000A200A300A400A500A600A700A800A900D700AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000002017 +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 diff --git a/inkstitch/bin/tcl/encoding/iso8859-9.enc b/inkstitch/bin/tcl/encoding/iso8859-9.enc new file mode 100644 index 0000000..6eed3f1 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/iso8859-9.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-9, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +011E00D100D200D300D400D500D600D700D800D900DA00DB00DC0130015E00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +011F00F100F200F300F400F500F600F700F800F900FA00FB00FC0131015F00FF diff --git a/inkstitch/bin/tcl/encoding/jis0201.enc b/inkstitch/bin/tcl/encoding/jis0201.enc new file mode 100644 index 0000000..64f423f --- /dev/null +++ b/inkstitch/bin/tcl/encoding/jis0201.enc @@ -0,0 +1,20 @@ +# Encoding file: jis0201, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D203E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/jis0208.enc b/inkstitch/bin/tcl/encoding/jis0208.enc new file mode 100644 index 0000000..8460b69 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/jis0208.enc @@ -0,0 +1,1319 @@ +# Encoding file: jis0208, double-byte +D +2129 0 77 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8 +FF3EFFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0F +FF3C301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3D +FF5BFF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D7 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025C625A125A025B325B225BD25BC203B3012219221902191219330130000 +00000000000000000000000000000000000000002208220B2286228722822283 +222A2229000000000000000000000000000000002227222800AC21D221D42200 +220300000000000000000000000000000000000000000000222022A523122202 +220722612252226A226B221A223D221D2235222B222C00000000000000000000 +00000000212B2030266F266D266A2020202100B6000000000000000025EF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19000000000000000000000000 +0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A00000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +2542000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E9C55165A03963F54C0611B632859F690228475831C7A5060AA63E16E25 +65ED846682A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E6216 +7C9F88B75B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2 +593759D45A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3 +840E88638B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA29038 +7A328328828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E11 +789381FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B +96F2834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E +983482F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD5186 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062BC65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B5104 +5C4B61B681C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F55 +4F3D4FA14F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3 +706B73C2798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA8 +8FE6904E971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D5 +4ECB4F1A89E356DE584A58CA5EFB5FEB602A6094606261D0621262D065390000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE +591654B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D9 +57A367FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B +899A89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007CA5520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E6 +5B8C5B985BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B53 +6C576F226F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266 +839E89B38ACC8CAB908494519593959195A2966597D3992882184E38542B5CB8 +5DCC73A9764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C5668 +57FA59475B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D77 +8ECC8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A07591 +79477FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A7078276775 +9ECD53745BA2811A865090064E184E454EC74F1153CA54385BAE5F1360256551 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F9B4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F37 +5F4A602F6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F7 +93E197FF99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C5 +52E457475DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F +8B398FD191D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C8 +99D25177611A865E55B07A7A50765BD3904796854E326ADB91E75C515C480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B +85AB8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B +59515F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB +7D4C7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE8 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F363720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000691C6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED29063 +9375967A98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D438237 +8A008AFA96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF +6E5672D07CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E92 +4F0D53485449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B779190 +4E5E9BC94EA44F7C4FAF501950165149516C529F52B952FE539A53E354110000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB7 +5F186052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A +6D696E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B1 +8154818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B6498034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D5 +7D3A826E9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A509396 +88DF57505EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D +6B736E08707D91C7728078157826796D658E7D3083DC88C18F09969B52645728 +67507F6A8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A +548B643E6628671467F57A847B567D22932F685C9BAD7B395319518A52370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF6652 +4E09509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB +9178991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB +59C959FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B62 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B216ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F +5F0F8B589D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F06 +75BE8CEA5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66 +659C716E793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235 +914C91C8932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E +816B8DA391529996511253D7546A5BFF63886A397DAC970056DA53CE54680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F8490 +884689728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E +67D46C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F +51FA88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF3 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000052DD5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C11 +5C1A5E845E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A2 +6A1F6A356CBC6D886E096E58713C7126716775C77701785D7901796579F07AE0 +7B117CA77D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A4 +9266937E9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E38 +60C564FE676167566D4472B675737A6384B88B7291B89320563157F498FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB5 +55075A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F +795E79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC15203 +587558EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A8 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F84647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F +6574661F667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA0 +8A938ACB901D91929752975965897A0E810696BB5E2D60DC621A65A566146790 +77F37A4D7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D +7A837BC08AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226 +624764B0681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE +524D55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A +72D9758F758E790E795679DF7C977D207D4486078A34963B90619F2050E75275 +53CC53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D385358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD7 +5C5E8CCA65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A +592A6C708A51553E581559A560F0625367C182356955964099C49A284F535806 +5BFE80105CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB8 +9000902E968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD702753535544 +5B856258629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB0 +4E3953585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D +80C686CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E55730 +5F1B6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C4 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E165E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A +80748139817887768ABF8ADC8D858DF3929A957798029CE552C5635776F46715 +6C8873CD8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B4 +69FB4F436F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A +91E39DB44EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F +608C62B5633A63D068AF6C407887798E7A0B7DE082478A028AE68E4490130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F2 +5FB964A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B +70B94F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21 +767B83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008463856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD +52D5540C58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F +5F975FB36D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A +9CF682EB5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D +594890A351854E4D51EA85998B0E7058637A934B696299B47E04757753576960 +8EDF96E36C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E7351650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E74 +5FF5637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF +8FB2899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC +4FF35EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A926885 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051FD7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A +91979AEA4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD +53DB5E06642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC4 +91C67169981298EF633D6669756A76E478D0854386EE532A5351542659835E87 +5F7C60B26249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB +8AB98CBB907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C +686759EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C79 +5EDF63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA7 +8CD3983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C601662766577 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798F8179890789866DF55F1762556CB84ECF72699B925206543B567458B3 +61A4626E711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E73 +5F0A67C44E26853D9589965B7C73980150FB58C1765678A7522577A585117B86 +504F590972477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA +570363556B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E95023 +4FF853055446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D2 +98FD9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D0 +68D251927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A8 +64B26734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C6 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F2B85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A1481085999 +7C8D6C11772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D +660E76DF8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A21 +830259845B5F6BDB731B76F27DB280178499513267289ED976EE676252FF9905 +5C24623B7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F25 +77E253845F797D0485AC8A338E8D975667F385AE9453610961086CB976520000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E67 +6D8C733673377531795088D58A98904A909190F596C4878D59154E884F594E0E +8A898F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB6 +719475287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B32 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A8740674830000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E288CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C +74097559786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC +5BEE659968816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B +7DD1502B539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F +985E4EE44F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E97 +9F6266A66B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717 +697C69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B9332 +8AD6502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C18568 +69006E7E78978155000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0C4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A +82125F0D4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED7 +4EDE4EED4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B +4F694F704F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE4 +4FE5501A50285014502A502550054F1C4FF650215029502C4FFE4FEF50115006 +504350476703505550505048505A5056506C50785080509A508550B450B20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050C950CA50B350C250D650DE50E550ED50E350EE50F950F5510951015102 +511651155114511A5121513A5137513C513B513F51405152514C515451627AF8 +5169516A516E5180518256D8518C5189518F519151935195519651A451A651A2 +51A951AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FA752AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F5 +52F852F9530653087538530D5310530F5315531A5323532F5331533353385340 +534653454E175349534D51D6535E5369536E5918537B53775382539653A053A6 +53A553AE53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D +5440542C542D543C542E54365429541D544E548F5475548E545F547154775470 +5492547B5480547654845490548654C754A254B854A554AC54C454C854A80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E2 +553955405563554C552E555C55455556555755385533555D5599558054AF558A +559F557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC +55E455D4561455F7561655FE55FD561B55F9564E565071DF5634563656325638 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005708570B570D57135718571655C7571C572657375738574E573B5740574F +576957C057885761577F5789579357A057B357A457AA57B057C357C657D457D2 +57D3580A57D657E3580B5819581D587258215862584B58706BC05852583D5879 +588558B9589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E5 +58DC58E458DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C +592D59325938593E7AD259555950594E595A5958596259605967596C59690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F +5A115A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC2 +5ABD5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E +5B435B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B80 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C505C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB6 +5CBC5CB75CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C +5D1F5D1B5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D87 +5D845D825DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB +5DEB5DF25DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E54 +5E5F5E625E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF8 +5EFE5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F +5F515F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E +5F995F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF60216060 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006084609B60966097609260A7608B60E160B860E060D360B45FF060BD60C6 +60B560D8614D6115610660F660F7610060F460FA6103612160FB60F1610D610E +6147613E61286127614A613F613C612C6134613D614261446173617761586159 +615A616B6174616F61656171615F615D6153617561996196618761AC6194619A +618A619161AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E6 +61E361F661FA61F461FF61FD61FC61FE620062086209620D620C6214621B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000621E6221622A622E6230623262336241624E625E6263625B62606268627C +62826289627E62926293629662D46283629462D762D162BB62CF62FF62C664D4 +62C862DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F5 +6350633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064DA64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF +652C64F664F464F264FA650064FD6518651C650565246523652B653465356537 +65366538754B654865566555654D6558655E655D65726578658265838B8A659B +659F65AB65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A +660365FB6773663566366634661C664F664466496641665E665D666466676668 +665F6662667066836688668E668966846698669D66C166B966C966BE66BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000066C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E6726 +67279738672E673F67366741673867376746675E676067596763676467896770 +67A9677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E4 +67DE67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D468E768D569366912690468D768E3692568F968E068EF6928692A691A +6923692168C669796977695C6978696B6954697E696E69396974693D69596930 +6961695E695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD +69BB69C369A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F9 +69F269E76A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A72 +6A366A786A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB +6B0586166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B50 +6B596B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA4 +6BAA6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CBA6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D12 +6D0C6D636D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC7 +6DE66DB86DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D +6E6E6E2E6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E24 +6EFF6E1D6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F +6EA56EC26E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F58 +6F8E6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD8 +6FF16FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F +7030703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071F971FF720D7210721B7228722D722C72307232723B723C723F72407246 +724B72587274727E7282728172877292729672A272A772B972B272C372C672C4 +72CE72D272E272E072E172F972F7500F7317730A731C7316731D7334732F7329 +7325733E734E734F9ED87357736A7368737073787375737B737A73C873B373CE +73BB73C073E573EE73DE74A27405746F742573F87432743A7455743F745F7459 +7441745C746974707463746A7476747E748B749E74A774CA74CF74D473F10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074E074E374E774E974EE74F274F074F174F874F7750475037505750C750E +750D75157513751E7526752C753C7544754D754A7549755B7546755A75697564 +7567756B756D75787576758675877574758A758975827594759A759D75A575A3 +75C275B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767276767678767C768076837688768B768E769676937699769A76B076B4 +76B876B976BA76C276CD76D676D276DE76E176E576E776EA862F76FB77087707 +770477297724771E77257726771B773777387747775A7768776B775B7765777F +777E7779778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD +77D777DA77DC77E377EE77FC780C781279267820792A7845788E78747886787C +789A788C78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078E778DA78FD78F47907791279117919792C792B794079607957795F795A +79557953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E7 +79EC79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A57 +7A497A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB0 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B500000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B7A7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D +7B987B9F7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC6 +7BDD7BE97C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C23 +7C277C2A7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C56 +7C657C6C7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB9 +7CBD7CC07CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D72 +7D687D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD +7DAB7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E05 +7E0A7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E37 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F457F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F78 +7F827F867F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB6 +7FB88B717FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B +801280188019801C80218028803F803B804A804680528058805A805F80628068 +80738072807080768079807D807F808480868085809B8093809A80AD519080AC +80DB80E580D980DD80C480DA80D6810980EF80F1811B81298123812F814B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968B8146813E8153815180FC8171816E81658166817481838188818A8180 +818281A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA +81C981CD81D181D981D881C881DA81DF81E081E781FA81FB81FE820182028205 +8207820A820D821082168229822B82388233824082598258825D825A825F8264 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000833583348316833283318340833983508345832F832B831783188385839A +83AA839F83A283968323838E8387838A837C83B58373837583A0838983A883F4 +841383EB83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD +8438850683FB846D842A843C855A84848477846B84AD846E848284698446842C +846F8479843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D6 +84A1852184FF84F485178518852C851F8515851484FC85408563855885480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085418602854B8555858085A485888591858A85A8856D8594859B85EA8587 +859C8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613 +860B85FE85FA86068622861A8630863F864D4E558654865F86678671869386A3 +86A986AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087538763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C4 +87B387C787C687BB87EF87F287E0880F880D87FE87F687F7880E87D288118816 +8815882288218831883688398827883B8844884288528859885E8862886B8881 +887E889E8875887D88B5887288828897889288AE889988A2888D88A488B088BF +88B188C388C488D488D888D988DD88F9890288FC88F488E888F28904890C890A +89138943891E8925892A892B89418944893B89368938894C891D8960895E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089668964896D896A896F89748977897E89838988898A8993899889A189A9 +89A689AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A16 +8A108A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A85 +8A828A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE7 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B5F8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C41 +8C3F8C488C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E +8C948C7C8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA +8CFD8CFA8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D67 +8D6D8D718D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB +8DDF8DE38DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E81 +8E878E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE +8EC58EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C +8F1F8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904F905090519052900E9049903E90569058905E9068906F907696A89072 +9082907D90819080908A9089908F90A890AF90B190B590E290E4624890DB9102 +9112911991329130914A9156915891639165916991739172918B9189918291A2 +91AB91AF91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC +91F591F6921E91FF9214922C92159211925E925792459249926492489295923F +924B9250929C92969293929B925A92CF92B992B792E9930F92FA9344932E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093199322931A9323933A9335933B935C9360937C936E935693B093AC93AD +939493B993D693D793E893E593D893C393DD93D093C893E4941A941494139403 +940794109436942B94359421943A944194529444945B94609462945E946A9229 +947094759477947D945A947C947E9481947F95829587958A9594959695989599 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965D965F96669672966C968D96989695969796AA96A796B196B296B096B4 +96B696B896B996CE96CB96C996CD894D96DC970D96D596F99704970697089713 +970E9711970F971697199724972A97309739973D973E97449746974897429749 +975C976097649766976852D2976B977197799785977C9781977A9786978B978F +9790979C97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF +97F697F5980F980C9838982498219837983D9846984F984B986B986F98700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098719874987398AA98AF98B198B698C498C398C698E998EB990399099912 +991499189921991D991E99249920992C992E993D993E9942994999459950994B +99519952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED +99EE99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A43 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AFB9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B32 +9B449B439B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA8 +9BB49BC09BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF1 +9BF09C159C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C21 +9C309C479C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB +9D039D069D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA9 +9DB29DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD +9E1A9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA9 +9EB89EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000582F69C79059746451DC7199000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +2141 301C FF5E +2142 2016 2225 +215D 2212 FF0D +2171 00A2 FFE0 +2172 00A3 FFE1 +224C 00AC FFE2 diff --git a/inkstitch/bin/tcl/encoding/jis0212.enc b/inkstitch/bin/tcl/encoding/jis0212.enc new file mode 100644 index 0000000..cddbbba --- /dev/null +++ b/inkstitch/bin/tcl/encoding/jis0212.enc @@ -0,0 +1,1159 @@ +# Encoding file: jis0212, double-byte +D +2244 0 68 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000002D8 +02C700B802D902DD00AF02DB02DA007E03840385000000000000000000000000 +0000000000A100A600BF00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000BA00AA00A900AE2122 +00A4211600000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000038603880389038A03AA0000038C0000038E03AB0000038F000000000000 +000003AC03AD03AE03AF03CA039003CC03C203CD03CB03B003CE000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000004020403040404050406040704080409040A040B040C040E040F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000004520453045404550456045704580459045A045B045C045E045F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C60110000001260000013200000141013F0000014A00D8015200000166 +00DE000000000000000000000000000000000000000000000000000000000000 +000000E6011100F00127013101330138014201400149014B00F8015300DF0167 +00FE000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C100C000C400C2010201CD0100010400C500C301060108010C00C7010A +010E00C900C800CB00CA011A0116011201180000011C011E01220120012400CD +00CC00CF00CE01CF0130012A012E0128013401360139013D013B014301470145 +00D100D300D200D600D401D10150014C00D5015401580156015A015C0160015E +0164016200DA00D900DC00DB016C01D30170016A0172016E016801D701DB01D9 +01D5017400DD017801760179017D017B00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E100E000E400E2010301CE0101010500E500E301070109010D00E7010B +010F00E900E800EB00EA011B01170113011901F5011D011F00000121012500ED +00EC00EF00EE01D00000012B012F012901350137013A013E013C014401480146 +00F100F300F200F600F401D20151014D00F5015501590157015B015D0161015F +0165016300FA00F900FC00FB016D01D40171016B0173016F016901D801DC01DA +01D6017500FD00FF0177017A017E017C00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E024E044E054E0C4E124E1F4E234E244E284E2B4E2E4E2F4E304E354E40 +4E414E444E474E514E5A4E5C4E634E684E694E744E754E794E7F4E8D4E964E97 +4E9D4EAF4EB94EC34ED04EDA4EDB4EE04EE14EE24EE84EEF4EF14EF34EF54EFD +4EFE4EFF4F004F024F034F084F0B4F0C4F124F154F164F174F194F2E4F314F60 +4F334F354F374F394F3B4F3E4F404F424F484F494F4B4F4C4F524F544F564F58 +4F5F4F634F6A4F6C4F6E4F714F774F784F794F7A4F7D4F7E4F814F824F840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F854F894F8A4F8C4F8E4F904F924F934F944F974F994F9A4F9E4F9F4FB2 +4FB74FB94FBB4FBC4FBD4FBE4FC04FC14FC54FC64FC84FC94FCB4FCC4FCD4FCF +4FD24FDC4FE04FE24FF04FF24FFC4FFD4FFF5000500150045007500A500C500E +5010501350175018501B501C501D501E50225027502E50305032503350355040 +5041504250455046504A504C504E50515052505350575059505F506050625063 +50665067506A506D50705071503B5081508350845086508A508E508F50900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005092509350945096509B509C509E509F50A050A150A250AA50AF50B050B9 +50BA50BD50C050C350C450C750CC50CE50D050D350D450D850DC50DD50DF50E2 +50E450E650E850E950EF50F150F650FA50FE5103510651075108510B510C510D +510E50F2511051175119511B511C511D511E512351275128512C512D512F5131 +513351345135513851395142514A514F5153515551575158515F51645166517E +51835184518B518E5198519D51A151A351AD51B851BA51BC51BE51BF51C20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C851CF51D151D251D351D551D851DE51E251E551EE51F251F351F451F7 +5201520252055212521352155216521852225228523152325235523C52455249 +525552575258525A525C525F526052615266526E527752785279528052825285 +528A528C52935295529652975298529A529C52A452A552A652A752AF52B052B6 +52B752B852BA52BB52BD52C052C452C652C852CC52CF52D152D452D652DB52DC +52E152E552E852E952EA52EC52F052F152F452F652F753005303530A530B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000530C531153135318531B531C531E531F5325532753285329532B532C532D +533053325335533C533D533E5342534C534B5359535B536153635365536C536D +53725379537E538353875388538E539353945399539D53A153A453AA53AB53AF +53B253B453B553B753B853BA53BD53C053C553CF53D253D353D553DA53DD53DE +53E053E653E753F554025413541A542154275428542A542F5431543454355443 +54445447544D544F545E54625464546654675469546B546D546E5474547F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054815483548554885489548D549154955496549C549F54A154A654A754A9 +54AA54AD54AE54B154B754B954BA54BB54BF54C654CA54CD54CE54E054EA54EC +54EF54F654FC54FE54FF55005501550555085509550C550D550E5515552A552B +553255355536553B553C553D554155475549554A554D555055515558555A555B +555E5560556155645566557F5581558255865588558E558F5591559255935594 +559755A355A455AD55B255BF55C155C355C655C955CB55CC55CE55D155D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000055D355D755D855DB55DE55E255E955F655FF56055608560A560D560E560F +5610561156125619562C56305633563556375639563B563C563D563F56405641 +5643564456465649564B564D564F5654565E566056615662566356665669566D +566F567156725675568456855688568B568C56955699569A569D569E569F56A6 +56A756A856A956AB56AC56AD56B156B356B756BE56C556C956CA56CB56CF56D0 +56CC56CD56D956DC56DD56DF56E156E456E556E656E756E856F156EB56ED0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000056F656F7570157025707570A570C57115715571A571B571D572057225723 +572457255729572A572C572E572F57335734573D573E573F57455746574C574D +57525762576557675768576B576D576E576F5770577157735774577557775779 +577A577B577C577E57815783578C579457975799579A579C579D579E579F57A1 +579557A757A857A957AC57B857BD57C757C857CC57CF57D557DD57DE57E457E6 +57E757E957ED57F057F557F657F857FD57FE57FF580358045808580957E10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580C580D581B581E581F582058265827582D58325839583F5849584C584D +584F58505855585F58615864586758685878587C587F58805881588758885889 +588A588C588D588F589058945896589D58A058A158A258A658A958B158B258C4 +58BC58C258C858CD58CE58D058D258D458D658DA58DD58E158E258E958F35905 +5906590B590C5912591359148641591D5921592359245928592F593059335935 +5936593F59435946595259535959595B595D595E595F59615963596B596D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000596F5972597559765979597B597C598B598C598E599259955997599F59A4 +59A759AD59AE59AF59B059B359B759BA59BC59C159C359C459C859CA59CD59D2 +59DD59DE59DF59E359E459E759EE59EF59F159F259F459F75A005A045A0C5A0D +5A0E5A125A135A1E5A235A245A275A285A2A5A2D5A305A445A455A475A485A4C +5A505A555A5E5A635A655A675A6D5A775A7A5A7B5A7E5A8B5A905A935A965A99 +5A9C5A9E5A9F5AA05AA25AA75AAC5AB15AB25AB35AB55AB85ABA5ABB5ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005AC45AC65AC85ACF5ADA5ADC5AE05AE55AEA5AEE5AF55AF65AFD5B005B01 +5B085B175B345B195B1B5B1D5B215B255B2D5B385B415B4B5B4C5B525B565B5E +5B685B6E5B6F5B7C5B7D5B7E5B7F5B815B845B865B8A5B8E5B905B915B935B94 +5B965BA85BA95BAC5BAD5BAF5BB15BB25BB75BBA5BBC5BC05BC15BCD5BCF5BD6 +5BD75BD85BD95BDA5BE05BEF5BF15BF45BFD5C0C5C175C1E5C1F5C235C265C29 +5C2B5C2C5C2E5C305C325C355C365C595C5A5C5C5C625C635C675C685C690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C6D5C705C745C755C7A5C7B5C7C5C7D5C875C885C8A5C8F5C925C9D5C9F +5CA05CA25CA35CA65CAA5CB25CB45CB55CBA5CC95CCB5CD25CDD5CD75CEE5CF1 +5CF25CF45D015D065D0D5D125D2B5D235D245D265D275D315D345D395D3D5D3F +5D425D435D465D485D555D515D595D4A5D5F5D605D615D625D645D6A5D6D5D70 +5D795D7A5D7E5D7F5D815D835D885D8A5D925D935D945D955D995D9B5D9F5DA0 +5DA75DAB5DB05DB45DB85DB95DC35DC75DCB5DD05DCE5DD85DD95DE05DE40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DE95DF85DF95E005E075E0D5E125E145E155E185E1F5E205E2E5E285E32 +5E355E3E5E4B5E505E495E515E565E585E5B5E5C5E5E5E685E6A5E6B5E6C5E6D +5E6E5E705E805E8B5E8E5EA25EA45EA55EA85EAA5EAC5EB15EB35EBD5EBE5EBF +5EC65ECC5ECB5ECE5ED15ED25ED45ED55EDC5EDE5EE55EEB5F025F065F075F08 +5F0E5F195F1C5F1D5F215F225F235F245F285F2B5F2C5F2E5F305F345F365F3B +5F3D5F3F5F405F445F455F475F4D5F505F545F585F5B5F605F635F645F670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F6F5F725F745F755F785F7A5F7D5F7E5F895F8D5F8F5F965F9C5F9D5FA2 +5FA75FAB5FA45FAC5FAF5FB05FB15FB85FC45FC75FC85FC95FCB5FD05FD15FD2 +5FD35FD45FDE5FE15FE25FE85FE95FEA5FEC5FED5FEE5FEF5FF25FF35FF65FFA +5FFC6007600A600D6013601460176018601A601F6024602D6033603560406047 +60486049604C6051605460566057605D606160676071607E607F608260866088 +608A608E6091609360956098609D609E60A260A460A560A860B060B160B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060BB60BE60C260C460C860C960CA60CB60CE60CF60D460D560D960DB60DD +60DE60E260E560F260F560F860FC60FD61026107610A610C6110611161126113 +6114611661176119611C611E6122612A612B6130613161356136613761396141 +614561466149615E6160616C61726178617B617C617F6180618161836184618B +618D6192619361976198619C619D619F61A061A561A861AA61AD61B861B961BC +61C061C161C261CE61CF61D561DC61DD61DE61DF61E161E261E761E961E50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061EC61ED61EF620162036204620762136215621C62206222622362276229 +622B6239623D6242624362446246624C62506251625262546256625A625C6264 +626D626F6273627A627D628D628E628F629062A662A862B362B662B762BA62BE +62BF62C462CE62D562D662DA62EA62F262F462FC62FD63036304630A630B630D +63106313631663186329632A632D633563366339633C63416342634363446346 +634A634B634E6352635363546358635B63656366636C636D6371637463750000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378637C637D637F638263846387638A6390639463956399639A639E63A4 +63A663AD63AE63AF63BD63C163C563C863CE63D163D363D463D563DC63E063E5 +63EA63EC63F263F363F563F863F96409640A6410641264146418641E64206422 +642464256429642A642F64306435643D643F644B644F6451645264536454645A +645B645C645D645F646064616463646D64736474647B647D64856487648F6490 +649164986499649B649D649F64A164A364A664A864AC64B364BD64BE64BF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064C464C964CA64CB64CC64CE64D064D164D564D764E464E564E964EA64ED +64F064F564F764FB64FF6501650465086509650A650F6513651465166519651B +651E651F652265266529652E6531653A653C653D654365476549655065526554 +655F65606567656B657A657D65816585658A659265956598659D65A065A365A6 +65AE65B265B365B465BF65C265C865C965CE65D065D465D665D865DF65F065F2 +65F465F565F965FE65FF6600660466086609660D6611661266156616661D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000661E662166226623662466266629662A662B662C662E6630663166336639 +6637664066456646664A664C6651664E665766586659665B665C6660666166FB +666A666B666C667E66736675667F667766786679667B6680667C668B668C668D +669066926699669A669B669C669F66A066A466AD66B166B266B566BB66BF66C0 +66C266C366C866CC66CE66CF66D466DB66DF66E866EB66EC66EE66FA67056707 +670E67136719671C672067226733673E674567476748674C67546755675D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006766676C676E67746776677B67816784678E678F67916793679667986799 +679B67B067B167B267B567BB67BC67BD67F967C067C267C367C567C867C967D2 +67D767D967DC67E167E667F067F267F667F7685268146819681D681F68286827 +682C682D682F683068316833683B683F68446845684A684C685568576858685B +686B686E686F68706871687268756879687A687B687C68826884688668886896 +6898689A689C68A168A368A568A968AA68AE68B268BB68C568C868CC68CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D068D168D368D668D968DC68DD68E568E868EA68EB68EC68ED68F068F1 +68F568F668FB68FC68FD69066909690A69106911691369166917693169336935 +6938693B694269456949694E6957695B696369646965696669686969696C6970 +69716972697A697B697F6980698D69926996699869A169A569A669A869AB69AD +69AF69B769B869BA69BC69C569C869D169D669D769E269E569EE69EF69F169F3 +69F569FE6A006A016A036A0F6A116A156A1A6A1D6A206A246A286A306A320000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A346A376A3B6A3E6A3F6A456A466A496A4A6A4E6A506A516A526A556A56 +6A5B6A646A676A6A6A716A736A7E6A816A836A866A876A896A8B6A916A9B6A9D +6A9E6A9F6AA56AAB6AAF6AB06AB16AB46ABD6ABE6ABF6AC66AC96AC86ACC6AD0 +6AD46AD56AD66ADC6ADD6AE46AE76AEC6AF06AF16AF26AFC6AFD6B026B036B06 +6B076B096B0F6B106B116B176B1B6B1E6B246B286B2B6B2C6B2F6B356B366B3B +6B3F6B466B4A6B4D6B526B566B586B5D6B606B676B6B6B6E6B706B756B7D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B7E6B826B856B976B9B6B9F6BA06BA26BA36BA86BA96BAC6BAD6BAE6BB0 +6BB86BB96BBD6BBE6BC36BC46BC96BCC6BD66BDA6BE16BE36BE66BE76BEE6BF1 +6BF76BF96BFF6C026C046C056C096C0D6C0E6C106C126C196C1F6C266C276C28 +6C2C6C2E6C336C356C366C3A6C3B6C3F6C4A6C4B6C4D6C4F6C526C546C596C5B +6C5C6C6B6C6D6C6F6C746C766C786C796C7B6C856C866C876C896C946C956C97 +6C986C9C6C9F6CB06CB26CB46CC26CC66CCD6CCF6CD06CD16CD26CD46CD60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CDA6CDC6CE06CE76CE96CEB6CEC6CEE6CF26CF46D046D076D0A6D0E6D0F +6D116D136D1A6D266D276D286C676D2E6D2F6D316D396D3C6D3F6D576D5E6D5F +6D616D656D676D6F6D706D7C6D826D876D916D926D946D966D976D986DAA6DAC +6DB46DB76DB96DBD6DBF6DC46DC86DCA6DCE6DCF6DD66DDB6DDD6DDF6DE06DE2 +6DE56DE96DEF6DF06DF46DF66DFC6E006E046E1E6E226E276E326E366E396E3B +6E3C6E446E456E486E496E4B6E4F6E516E526E536E546E576E5C6E5D6E5E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006E626E636E686E736E7B6E7D6E8D6E936E996EA06EA76EAD6EAE6EB16EB3 +6EBB6EBF6EC06EC16EC36EC76EC86ECA6ECD6ECE6ECF6EEB6EED6EEE6EF96EFB +6EFD6F046F086F0A6F0C6F0D6F166F186F1A6F1B6F266F296F2A6F2F6F306F33 +6F366F3B6F3C6F2D6F4F6F516F526F536F576F596F5A6F5D6F5E6F616F626F68 +6F6C6F7D6F7E6F836F876F886F8B6F8C6F8D6F906F926F936F946F966F9A6F9F +6FA06FA56FA66FA76FA86FAE6FAF6FB06FB56FB66FBC6FC56FC76FC86FCA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FDA6FDE6FE86FE96FF06FF56FF96FFC6FFD7000700570067007700D7017 +70207023702F703470377039703C7043704470487049704A704B70547055705D +705E704E70647065706C706E70757076707E7081708570867094709570967097 +7098709B70A470AB70B070B170B470B770CA70D170D370D470D570D670D870DC +70E470FA71037104710571067107710B710C710F711E7120712B712D712F7130 +713171387141714571467147714A714B715071527157715A715C715E71600000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071687179718071857187718C7192719A719B71A071A271AF71B071B271B3 +71BA71BF71C071C171C471CB71CC71D371D671D971DA71DC71F871FE72007207 +7208720972137217721A721D721F7224722B722F723472387239724172427243 +7245724E724F7250725372557256725A725C725E726072637268726B726E726F +727172777278727B727C727F72847289728D728E7293729B72A872AD72AE72B1 +72B472BE72C172C772C972CC72D572D672D872DF72E572F372F472FA72FB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FE7302730473057307730B730D7312731373187319731E732273247327 +7328732C733173327335733A733B733D7343734D7350735273567358735D735E +735F7360736673677369736B736C736E736F737173777379737C738073817383 +73857386738E73907393739573977398739C739E739F73A073A273A573A673AA +73AB73AD73B573B773B973BC73BD73BF73C573C673C973CB73CC73CF73D273D3 +73D673D973DD73E173E373E673E773E973F473F573F773F973FA73FB73FD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000073FF7400740174047407740A7411741A741B7424742674287429742A742B +742C742D742E742F74307431743974407443744474467447744B744D74517452 +7457745D7462746674677468746B746D746E7471747274807481748574867487 +7489748F74907491749274987499749A749C749F74A074A174A374A674A874A9 +74AA74AB74AE74AF74B174B274B574B974BB74BF74C874C974CC74D074D374D8 +74DA74DB74DE74DF74E474E874EA74EB74EF74F474FA74FB74FC74FF75060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075127516751775207521752475277529752A752F75367539753D753E753F +7540754375477548754E755075527557755E755F7561756F75717579757A757B +757C757D757E7581758575907592759375957599759C75A275A475B475BA75BF +75C075C175C475C675CC75CE75CF75D775DC75DF75E075E175E475E775EC75EE +75EF75F175F9760076027603760476077608760A760C760F7612761376157616 +7619761B761C761D761E7623762576267629762D763276337635763876390000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000763A763C764A764076417643764476457649764B76557659765F76647665 +766D766E766F7671767476817685768C768D7695769B769C769D769F76A076A2 +76A376A476A576A676A776A876AA76AD76BD76C176C576C976CB76CC76CE76D4 +76D976E076E676E876EC76F076F176F676F976FC77007706770A770E77127714 +771577177719771A771C77227728772D772E772F7734773577367739773D773E +774277457746774A774D774E774F775277567757775C775E775F776077620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077647767776A776C7770777277737774777A777D77807784778C778D7794 +77957796779A779F77A277A777AA77AE77AF77B177B577BE77C377C977D177D2 +77D577D977DE77DF77E077E477E677EA77EC77F077F177F477F877FB78057806 +7809780D780E7811781D782178227823782D782E783078357837784378447847 +7848784C784E7852785C785E78607861786378647868786A786E787A787E788A +788F7894789878A1789D789E789F78A478A878AC78AD78B078B178B278B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078BB78BD78BF78C778C878C978CC78CE78D278D378D578D678E478DB78DF +78E078E178E678EA78F278F3790078F678F778FA78FB78FF7906790C7910791A +791C791E791F7920792579277929792D793179347935793B793D793F79447945 +7946794A794B794F795179547958795B795C79677969796B79727979797B797C +797E798B798C799179937994799579967998799B799C79A179A879A979AB79AF +79B179B479B879BB79C279C479C779C879CA79CF79D479D679DA79DD79DE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079E079E279E579EA79EB79ED79F179F879FC7A027A037A077A097A0A7A0C +7A117A157A1B7A1E7A217A277A2B7A2D7A2F7A307A347A357A387A397A3A7A44 +7A457A477A487A4C7A557A567A597A5C7A5D7A5F7A607A657A677A6A7A6D7A75 +7A787A7E7A807A827A857A867A8A7A8B7A907A917A947A9E7AA07AA37AAC7AB3 +7AB57AB97ABB7ABC7AC67AC97ACC7ACE7AD17ADB7AE87AE97AEB7AEC7AF17AF4 +7AFB7AFD7AFE7B077B147B1F7B237B277B297B2A7B2B7B2D7B2E7B2F7B300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B317B347B3D7B3F7B407B417B477B4E7B557B607B647B667B697B6A7B6D +7B6F7B727B737B777B847B897B8E7B907B917B967B9B7B9E7BA07BA57BAC7BAF +7BB07BB27BB57BB67BBA7BBB7BBC7BBD7BC27BC57BC87BCA7BD47BD67BD77BD9 +7BDA7BDB7BE87BEA7BF27BF47BF57BF87BF97BFA7BFC7BFE7C017C027C037C04 +7C067C097C0B7C0C7C0E7C0F7C197C1B7C207C257C267C287C2C7C317C337C34 +7C367C397C3A7C467C4A7C557C517C527C537C597C5A7C5B7C5C7C5D7C5E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C617C637C677C697C6D7C6E7C707C727C797C7C7C7D7C867C877C8F7C94 +7C9E7CA07CA67CB07CB67CB77CBA7CBB7CBC7CBF7CC47CC77CC87CC97CCD7CCF +7CD37CD47CD57CD77CD97CDA7CDD7CE67CE97CEB7CF57D037D077D087D097D0F +7D117D127D137D167D1D7D1E7D237D267D2A7D2D7D317D3C7D3D7D3E7D407D41 +7D477D487D4D7D517D537D577D597D5A7D5C7D5D7D657D677D6A7D707D787D7A +7D7B7D7F7D817D827D837D857D867D887D8B7D8C7D8D7D917D967D977D9D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D9E7DA67DA77DAA7DB37DB67DB77DB97DC27DC37DC47DC57DC67DCC7DCD +7DCE7DD77DD97E007DE27DE57DE67DEA7DEB7DED7DF17DF57DF67DF97DFA7E08 +7E107E117E157E177E1C7E1D7E207E277E287E2C7E2D7E2F7E337E367E3F7E44 +7E457E477E4E7E507E527E587E5F7E617E627E657E6B7E6E7E6F7E737E787E7E +7E817E867E877E8A7E8D7E917E957E987E9A7E9D7E9E7F3C7F3B7F3D7F3E7F3F +7F437F447F477F4F7F527F537F5B7F5C7F5D7F617F637F647F657F667F6D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F717F7D7F7E7F7F7F807F8B7F8D7F8F7F907F917F967F977F9C7FA17FA2 +7FA67FAA7FAD7FB47FBC7FBF7FC07FC37FC87FCE7FCF7FDB7FDF7FE37FE57FE8 +7FEC7FEE7FEF7FF27FFA7FFD7FFE7FFF80078008800A800D800E800F80118013 +80148016801D801E801F802080248026802C802E80308034803580378039803A +803C803E80408044806080648066806D8071807580818088808E809C809E80A6 +80A780AB80B880B980C880CD80CF80D280D480D580D780D880E080ED80EE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080F080F280F380F680F980FA80FE8103810B811681178118811C811E8120 +81248127812C81308135813A813C81458147814A814C81528157816081618167 +81688169816D816F817781818190818481858186818B818E81968198819B819E +81A281AE81B281B481BB81CB81C381C581CA81CE81CF81D581D781DB81DD81DE +81E181E481EB81EC81F081F181F281F581F681F881F981FD81FF82008203820F +821382148219821A821D82218222822882328234823A82438244824582460000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000824B824E824F82518256825C826082638267826D8274827B827D827F8280 +82818283828482878289828A828E8291829482968298829A829B82A082A182A3 +82A482A782A882A982AA82AE82B082B282B482B782BA82BC82BE82BF82C682D0 +82D582DA82E082E282E482E882EA82ED82EF82F682F782FD82FE830083018307 +8308830A830B8354831B831D831E831F83218322832C832D832E833083338337 +833A833C833D8342834383448347834D834E8351835583568357837083780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000837D837F8380838283848386838D83928394839583988399839B839C839D +83A683A783A983AC83BE83BF83C083C783C983CF83D083D183D483DD835383E8 +83EA83F683F883F983FC84018406840A840F84118415841983AD842F84398445 +84478448844A844D844F84518452845684588459845A845C8460846484658467 +846A84708473847484768478847C847D84818485849284938495849E84A684A8 +84A984AA84AF84B184B484BA84BD84BE84C084C284C784C884CC84CF84D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084DC84E784EA84EF84F084F184F284F7853284FA84FB84FD850285038507 +850C850E8510851C851E85228523852485258527852A852B852F853385348536 +853F8546854F855085518552855385568559855C855D855E855F856085618562 +8564856B856F8579857A857B857D857F8581858585868589858B858C858F8593 +8598859D859F85A085A285A585A785B485B685B785B885BC85BD85BE85BF85C2 +85C785CA85CB85CE85AD85D885DA85DF85E085E685E885ED85F385F685FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085FF860086048605860D860E86108611861286188619861B861E86218627 +862986368638863A863C863D864086428646865286538656865786588659865D +866086618662866386648669866C866F867586768677867A868D869186968698 +869A869C86A186A686A786A886AD86B186B386B486B586B786B886B986BF86C0 +86C186C386C586D186D286D586D786DA86DC86E086E386E586E7868886FA86FC +86FD870487058707870B870E870F8710871387148719871E871F872187230000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008728872E872F873187328739873A873C873D873E874087438745874D8758 +875D876187648765876F87718772877B8783878487858786878787888789878B +878C879087938795879787988799879E87A087A387A787AC87AD87AE87B187B5 +87BE87BF87C187C887C987CA87CE87D587D687D987DA87DC87DF87E287E387E4 +87EA87EB87ED87F187F387F887FA87FF8801880388068809880A880B88108819 +8812881388148818881A881B881C881E881F8828882D882E8830883288350000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000883A883C88418843884588488849884A884B884E8851885588568858885A +885C885F88608864886988718879887B88808898889A889B889C889F88A088A8 +88AA88BA88BD88BE88C088CA88CB88CC88CD88CE88D188D288D388DB88DE88E7 +88EF88F088F188F588F789018906890D890E890F8915891689188919891A891C +892089268927892889308931893289358939893A893E89408942894589468949 +894F89528957895A895B895C896189628963896B896E897089738975897A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000897B897C897D8989898D899089948995899B899C899F89A089A589B089B4 +89B589B689B789BC89D489D589D689D789D889E589E989EB89ED89F189F389F6 +89F989FD89FF8A048A058A078A0F8A118A128A148A158A1E8A208A228A248A26 +8A2B8A2C8A2F8A358A378A3D8A3E8A408A438A458A478A498A4D8A4E8A538A56 +8A578A588A5C8A5D8A618A658A678A758A768A778A798A7A8A7B8A7E8A7F8A80 +8A838A868A8B8A8F8A908A928A968A978A998A9F8AA78AA98AAE8AAF8AB30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AB68AB78ABB8ABE8AC38AC68AC88AC98ACA8AD18AD38AD48AD58AD78ADD +8ADF8AEC8AF08AF48AF58AF68AFC8AFF8B058B068B0B8B118B1C8B1E8B1F8B0A +8B2D8B308B378B3C8B428B438B448B458B468B488B528B538B548B598B4D8B5E +8B638B6D8B768B788B798B7C8B7E8B818B848B858B8B8B8D8B8F8B948B958B9C +8B9E8B9F8C388C398C3D8C3E8C458C478C498C4B8C4F8C518C538C548C578C58 +8C5B8C5D8C598C638C648C668C688C698C6D8C738C758C768C7B8C7E8C860000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C878C8B8C908C928C938C998C9B8C9C8CA48CB98CBA8CC58CC68CC98CCB +8CCF8CD68CD58CD98CDD8CE18CE88CEC8CEF8CF08CF28CF58CF78CF88CFE8CFF +8D018D038D098D128D178D1B8D658D698D6C8D6E8D7F8D828D848D888D8D8D90 +8D918D958D9E8D9F8DA08DA68DAB8DAC8DAF8DB28DB58DB78DB98DBB8DC08DC5 +8DC68DC78DC88DCA8DCE8DD18DD48DD58DD78DD98DE48DE58DE78DEC8DF08DBC +8DF18DF28DF48DFD8E018E048E058E068E0B8E118E148E168E208E218E220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E238E268E278E318E338E368E378E388E398E3D8E408E418E4B8E4D8E4E +8E4F8E548E5B8E5C8E5D8E5E8E618E628E698E6C8E6D8E6F8E708E718E798E7A +8E7B8E828E838E898E908E928E958E9A8E9B8E9D8E9E8EA28EA78EA98EAD8EAE +8EB38EB58EBA8EBB8EC08EC18EC38EC48EC78ECF8ED18ED48EDC8EE88EEE8EF0 +8EF18EF78EF98EFA8EED8F008F028F078F088F0F8F108F168F178F188F1E8F20 +8F218F238F258F278F288F2C8F2D8F2E8F348F358F368F378F3A8F408F410000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F438F478F4F8F518F528F538F548F558F588F5D8F5E8F658F9D8FA08FA1 +8FA48FA58FA68FB58FB68FB88FBE8FC08FC18FC68FCA8FCB8FCD8FD08FD28FD3 +8FD58FE08FE38FE48FE88FEE8FF18FF58FF68FFB8FFE900290049008900C9018 +901B90289029902F902A902C902D903390349037903F90439044904C905B905D +906290669067906C90709074907990859088908B908C908E9090909590979098 +9099909B90A090A190A290A590B090B290B390B490B690BD90CC90BE90C30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090C490C590C790C890D590D790D890D990DC90DD90DF90E590D290F690EB +90EF90F090F490FE90FF91009104910591069108910D91109114911691179118 +911A911C911E912091259122912391279129912E912F91319134913691379139 +913A913C913D914391479148914F915391579159915A915B916191649167916D +91749179917A917B9181918391859186918A918E91919193919491959198919E +91A191A691A891AC91AD91AE91B091B191B291B391B691BB91BC91BD91BF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000091C291C391C591D391D491D791D991DA91DE91E491E591E991EA91EC91ED +91EE91EF91F091F191F791F991FB91FD9200920192049205920692079209920A +920C92109212921392169218921C921D92239224922592269228922E922F9230 +92339235923692389239923A923C923E92409242924392469247924A924D924E +924F925192589259925C925D926092619265926792689269926E926F92709275 +9276927792789279927B927C927D927F92889289928A928D928E929292970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009299929F92A092A492A592A792A892AB92AF92B292B692B892BA92BB92BC +92BD92BF92C092C192C292C392C592C692C792C892CB92CC92CD92CE92D092D3 +92D592D792D892D992DC92DD92DF92E092E192E392E592E792E892EC92EE92F0 +92F992FB92FF930093029308930D931193149315931C931D931E931F93219324 +932593279329932A933393349336933793479348934993509351935293559357 +9358935A935E9364936593679369936A936D936F937093719373937493760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000937A937D937F9380938193829388938A938B938D938F939293959398939B +939E93A193A393A493A693A893AB93B493B593B693BA93A993C193C493C593C6 +93C793C993CA93CB93CC93CD93D393D993DC93DE93DF93E293E693E793F993F7 +93F893FA93FB93FD94019402940494089409940D940E940F941594169417941F +942E942F9431943294339434943B943F943D944394459448944A944C94559459 +945C945F946194639468946B946D946E946F9471947294849483957895790000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000957E95849588958C958D958E959D959E959F95A195A695A995AB95AC95B4 +95B695BA95BD95BF95C695C895C995CB95D095D195D295D395D995DA95DD95DE +95DF95E095E495E6961D961E9622962496259626962C96319633963796389639 +963A963C963D9641965296549656965796589661966E9674967B967C967E967F +9681968296839684968996919696969A969D969F96A496A596A696A996AE96AF +96B396BA96CA96D25DB296D896DA96DD96DE96DF96E996EF96F196FA97020000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000970397059709971A971B971D97219722972397289731973397419743974A +974E974F975597579758975A975B97639767976A976E9773977697779778977B +977D977F978097899795979697979799979A979E979F97A297AC97AE97B197B2 +97B597B697B897B997BA97BC97BE97BF97C197C497C597C797C997CA97CC97CD +97CE97D097D197D497D797D897D997DD97DE97E097DB97E197E497EF97F197F4 +97F797F897FA9807980A9819980D980E98149816981C981E9820982398260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000982B982E982F98309832983398359825983E98449847984A985198529853 +985698579859985A9862986398659866986A986C98AB98AD98AE98B098B498B7 +98B898BA98BB98BF98C298C598C898CC98E198E398E598E698E798EA98F398F6 +9902990799089911991599169917991A991B991C991F992299269927992B9931 +99329933993499359939993A993B993C99409941994699479948994D994E9954 +99589959995B995C995E995F9960999B999D999F99A699B099B199B299B50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000099B999BA99BD99BF99C399C999D399D499D999DA99DC99DE99E799EA99EB +99EC99F099F499F599F999FD99FE9A029A039A049A0B9A0C9A109A119A169A1E +9A209A229A239A249A279A2D9A2E9A339A359A369A389A479A419A449A4A9A4B +9A4C9A4E9A519A549A569A5D9AAA9AAC9AAE9AAF9AB29AB49AB59AB69AB99ABB +9ABE9ABF9AC19AC39AC69AC89ACE9AD09AD29AD59AD69AD79ADB9ADC9AE09AE4 +9AE59AE79AE99AEC9AF29AF39AF59AF99AFA9AFD9AFF9B009B019B029B030000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B049B059B089B099B0B9B0C9B0D9B0E9B109B129B169B199B1B9B1C9B20 +9B269B2B9B2D9B339B349B359B379B399B3A9B3D9B489B4B9B4C9B559B569B57 +9B5B9B5E9B619B639B659B669B689B6A9B6B9B6C9B6D9B6E9B739B759B779B78 +9B799B7F9B809B849B859B869B879B899B8A9B8B9B8D9B8F9B909B949B9A9B9D +9B9E9BA69BA79BA99BAC9BB09BB19BB29BB79BB89BBB9BBC9BBE9BBF9BC19BC7 +9BC89BCE9BD09BD79BD89BDD9BDF9BE59BE79BEA9BEB9BEF9BF39BF79BF80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009BF99BFA9BFD9BFF9C009C029C0B9C0F9C119C169C189C199C1A9C1C9C1E +9C229C239C269C279C289C299C2A9C319C359C369C379C3D9C419C439C449C45 +9C499C4A9C4E9C4F9C509C539C549C569C589C5B9C5D9C5E9C5F9C639C699C6A +9C5C9C6B9C689C6E9C709C729C759C779C7B9CE69CF29CF79CF99D0B9D029D11 +9D179D189D1C9D1D9D1E9D2F9D309D329D339D349D3A9D3C9D459D3D9D429D43 +9D479D4A9D539D549D5F9D639D629D659D699D6A9D6B9D709D769D779D7B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D7C9D7E9D839D849D869D8A9D8D9D8E9D929D939D959D969D979D989DA1 +9DAA9DAC9DAE9DB19DB59DB99DBC9DBF9DC39DC79DC99DCA9DD49DD59DD69DD7 +9DDA9DDE9DDF9DE09DE59DE79DE99DEB9DEE9DF09DF39DF49DFE9E0A9E029E07 +9E0E9E109E119E129E159E169E199E1C9E1D9E7A9E7B9E7C9E809E829E839E84 +9E859E879E8E9E8F9E969E989E9B9E9E9EA49EA89EAC9EAE9EAF9EB09EB39EB4 +9EB59EC69EC89ECB9ED59EDF9EE49EE79EEC9EED9EEE9EF09EF19EF29EF50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009EF89EFF9F029F039F099F0F9F109F119F129F149F169F179F199F1A9F1B +9F1F9F229F269F2A9F2B9F2F9F319F329F349F379F399F3A9F3C9F3D9F3F9F41 +9F439F449F459F469F479F539F559F569F579F589F5A9F5D9F5E9F689F699F6D +9F6E9F6F9F709F719F739F759F7A9F7D9F8F9F909F919F929F949F969F979F9E +9FA19FA29FA39FA5000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/koi8-r.enc b/inkstitch/bin/tcl/encoding/koi8-r.enc new file mode 100644 index 0000000..49bf2ea --- /dev/null +++ b/inkstitch/bin/tcl/encoding/koi8-r.enc @@ -0,0 +1,20 @@ +# Encoding file: koi8-r, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +25002502250C251025142518251C2524252C2534253C258025842588258C2590 +259125922593232025A02219221A22482264226500A0232100B000B200B700F7 +25502551255204512553255425552556255725582559255A255B255C255D255E +255F25602561040125622563256425652566256725682569256A256B256C00A9 +044E0430043104460434043504440433044504380439043A043B043C043D043E +043F044F044004410442044304360432044C044B04370448044D04490447044A +042E0410041104260414041504240413042504180419041A041B041C041D041E +041F042F042004210422042304160412042C042B04170428042D04290427042A diff --git a/inkstitch/bin/tcl/encoding/koi8-u.enc b/inkstitch/bin/tcl/encoding/koi8-u.enc new file mode 100644 index 0000000..e4eeb84 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/koi8-u.enc @@ -0,0 +1,20 @@ +# Encoding file: koi8-u, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +25002502250C251025142518251C2524252C2534253C258025842588258C2590 +259125922593232025A02219221A22482264226500A0232100B000B200B700F7 +25502551255204510454255404560457255725582559255A255B0491255D255E +255F25602561040104032563040604072566256725682569256A0490256C00A9 +044E0430043104460434043504440433044504380439043A043B043C043D043E +043F044F044004410442044304360432044C044B04370448044D04490447044A +042E0410041104260414041504240413042504180419041A041B041C041D041E +041F042F042004210422042304160412042C042B04170428042D04290427042A diff --git a/inkstitch/bin/tcl/encoding/ksc5601.enc b/inkstitch/bin/tcl/encoding/ksc5601.enc new file mode 100644 index 0000000..bec61d0 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/ksc5601.enc @@ -0,0 +1,1516 @@ +# Encoding file: ksc5601, double-byte +D +233F 0 89 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000021D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D821210000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/macCentEuro.enc b/inkstitch/bin/tcl/encoding/macCentEuro.enc new file mode 100644 index 0000000..dde616a --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macCentEuro.enc @@ -0,0 +1,20 @@ +# Encoding file: macCentEuro, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C40100010100C9010400D600DC00E10105010C00E4010D0106010700E90179 +017A010E00ED010F01120113011600F3011700F400F600F500FA011A011B00FC +202000B0011800A300A7202200B600DF00AE00A92122011900A822600123012E +012F012A22642265012B0136220222110142013B013C013D013E0139013A0145 +0146014300AC221A01440147220600AB00BB202600A00148015000D50151014C +20132014201C201D2018201900F725CA014D0154015501582039203A01590156 +01570160201A201E0161015A015B00C10164016500CD017D017E016A00D300D4 +016B016E00DA016F017001710172017300DD00FD0137017B0141017C012202C7 diff --git a/inkstitch/bin/tcl/encoding/macCroatian.enc b/inkstitch/bin/tcl/encoding/macCroatian.enc new file mode 100644 index 0000000..c23d0f0 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macCroatian.enc @@ -0,0 +1,20 @@ +# Encoding file: macCroatian, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE0160212200B400A82260017D00D8 +221E00B122642265220600B522022211220F0161222B00AA00BA03A9017E00F8 +00BF00A100AC221A01922248010600AB010C202600A000C000C300D501520153 +01102014201C201D2018201900F725CAF8FF00A9204420AC2039203A00C600BB +201300B7201A201E203000C2010700C1010D00C800CD00CE00CF00CC00D300D4 +011100D200DA00DB00D9013102C602DC00AF03C000CB02DA00B800CA00E602C7 diff --git a/inkstitch/bin/tcl/encoding/macCyrillic.enc b/inkstitch/bin/tcl/encoding/macCyrillic.enc new file mode 100644 index 0000000..e657739 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macCyrillic.enc @@ -0,0 +1,20 @@ +# Encoding file: macCyrillic, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +202000B0049000A300A7202200B6040600AE00A9212204020452226004030453 +221E00B122642265045600B504910408040404540407045704090459040A045A +0458040500AC221A01922248220600AB00BB202600A0040B045B040C045C0455 +20132014201C201D2018201900F7201E040E045E040F045F211604010451044F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E20AC diff --git a/inkstitch/bin/tcl/encoding/macDingbats.enc b/inkstitch/bin/tcl/encoding/macDingbats.enc new file mode 100644 index 0000000..28449cd --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macDingbats.enc @@ -0,0 +1,20 @@ +# Encoding file: macDingbats, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00202701270227032704260E2706270727082709261B261E270C270D270E270F +2710271127122713271427152716271727182719271A271B271C271D271E271F +2720272127222723272427252726272726052729272A272B272C272D272E272F +2730273127322733273427352736273727382739273A273B273C273D273E273F +2740274127422743274427452746274727482749274A274B25CF274D25A0274F +27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F +F8D7F8D8F8D9F8DAF8DBF8DCF8DDF8DEF8DFF8E0F8E1F8E2F8E3F8E4008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000276127622763276427652766276726632666266526602460246124622463 +2464246524662467246824692776277727782779277A277B277C277D277E277F +2780278127822783278427852786278727882789278A278B278C278D278E278F +2790279127922793279421922194219527982799279A279B279C279D279E279F +27A027A127A227A327A427A527A627A727A827A927AA27AB27AC27AD27AE27AF +000027B127B227B327B427B527B627B727B827B927BA27BB27BC27BD27BE0000 diff --git a/inkstitch/bin/tcl/encoding/macGreek.enc b/inkstitch/bin/tcl/encoding/macGreek.enc new file mode 100644 index 0000000..67b9953 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macGreek.enc @@ -0,0 +1,20 @@ +# Encoding file: macGreek, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400B900B200C900B300D600DC038500E000E200E4038400A800E700E900E8 +00EA00EB00A3212200EE00EF202200BD203000F400F600A600AD00F900FB00FC +2020039303940398039B039E03A000DF00AE00A903A303AA00A7226000B000B7 +039100B12264226500A503920395039603970399039A039C03A603AB03A803A9 +03AC039D00AC039F03A1224803A400AB00BB202600A003A503A7038603880153 +20132015201C201D2018201900F70389038A038C038E03AD03AE03AF03CC038F +03CD03B103B203C803B403B503C603B303B703B903BE03BA03BB03BC03BD03BF +03C003CE03C103C303C403B803C903C203C703C503B603CA03CB039003B0F8A0 diff --git a/inkstitch/bin/tcl/encoding/macIceland.enc b/inkstitch/bin/tcl/encoding/macIceland.enc new file mode 100644 index 0000000..c636069 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macIceland.enc @@ -0,0 +1,20 @@ +# Encoding file: macIceland, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +00DD00B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204420AC00D000F000DE00FE +00FD00B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/inkstitch/bin/tcl/encoding/macJapan.enc b/inkstitch/bin/tcl/encoding/macJapan.enc new file mode 100644 index 0000000..dba24bd --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macJapan.enc @@ -0,0 +1,785 @@ +# Encoding file: macJapan, multi-byte +M +003F 0 46 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00A0FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000A921222026 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +203EFF3F30FD30FE309D309E30034EDD30053006300730FC20142010FF0FFF3C +301C2016FF5C22EF202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +000000000000000000000000000000002227222800AC21D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2460246124622463246424652466246724682469246A246B246C246D246E246F +2470247124722473000000000000000000000000000000000000000024742475 +2476247724782479247A247B247C247D247E247F248024812482248324842485 +2486248700000000000000000000000000000000000000002776277727780000 +2779277A277B277C277D277E0000000000000000000000000000000000000000 +0000F8A124882489248A248B248C248D248E248F249000000000000000002160 +216121622163216421652166216721682169216A216BF8A2F8A3F8A400000000 +0000000000002170217121722173217421752176217721782179217A217BF8A5 +F8A6F8A700000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000249C249D249E249F24A0 +24A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE24AF24B0 +24B124B224B324B424B500000000000000000000000000000000000000000000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +339C339F339D33A033A4F8A833A133A5339E33A2338EF8A9338F33C433963397 +F8AA339833B333B233B133B0210933D433CB3390338533863387F8AB00000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000211633CD2121F8AC2664 +2667266126622660266326652666000000000000000000000000000000000000 +0000000000003020260E30040000000000000000000000000000000000000000 +0000000000000000000000000000261E261C261D261F21C621C421C5F8AD21E8 +21E621E721E9F8AEF8AFF8B0F8B1000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3230322A322B322C322D322E322F32403237324232433239323A3231323E3234 +3232323B323632333235323C323D323F32380000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059275C0F32A432A532A632A732A832A93296329D3298329E63A732993349 +3322334D3314331633053333334E330333363318331533273351334A33393357 +330D334233233326333B332B00000000000000000000000000003300331E332A +3331334700000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000337E337D337C337B0000000000000000000000000000 +0000000000000000000000000000000000000000337FF8B2F8B3000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +222E221F22BF0000000000000000000000000000000000000000000000000000 +0000000000000000301DF8B40000000000000000000000000000000000000000 +000000000000000000000000000000003094000030F730F830F930FA00000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB97652000000000000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8B5F8B60000000000000000000000000000000000000000000000000000 +F8B7FE33000000000000000000000000000000000000F8B8FE31F8B900000000 +F8BAF8BBF8BCF8BDFE300000000000000000FE35FE36FE39FE3AF8BEF8BFFE37 +FE38FE3FFE40FE3DFE3EFE41FE42FE43FE44FE3BFE3C00000000000000000000 +0000F8C000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000F8C1 +0000F8C20000F8C30000F8C40000F8C500000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8C600000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8C70000F8C80000F8C9000000000000000000000000F8CA000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +F8CB0000F8CC0000F8CD0000F8CE0000F8CF0000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000F8D00000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000F8D10000F8D20000F8D3000000000000000000000000F8D40000 +00000000000000000000F8D5F8D6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/inkstitch/bin/tcl/encoding/macRoman.enc b/inkstitch/bin/tcl/encoding/macRoman.enc new file mode 100644 index 0000000..15de266 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macRoman.enc @@ -0,0 +1,20 @@ +# Encoding file: macRoman, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204420AC2039203AFB01FB02 +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/inkstitch/bin/tcl/encoding/macRomania.enc b/inkstitch/bin/tcl/encoding/macRomania.enc new file mode 100644 index 0000000..ce41cf4 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macRomania.enc @@ -0,0 +1,20 @@ +# Encoding file: macRomania, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A822600102015E +221E00B12264226500A500B522022211220F03C0222B00AA00BA21260103015F +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204400A42039203A01620163 +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/inkstitch/bin/tcl/encoding/macThai.enc b/inkstitch/bin/tcl/encoding/macThai.enc new file mode 100644 index 0000000..7d9c8ad --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macThai.enc @@ -0,0 +1,20 @@ +# Encoding file: macThai, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00AB00BB2026F88CF88FF892F895F898F88BF88EF891F894F897201C201DF899 +FFFD2022F884F889F885F886F887F888F88AF88DF890F893F89620182019FFFD +00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3AFEFF200B201320140E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D21220E4F +0E500E510E520E530E540E550E560E570E580E5900AE00A9FFFDFFFDFFFDFFFD diff --git a/inkstitch/bin/tcl/encoding/macTurkish.enc b/inkstitch/bin/tcl/encoding/macTurkish.enc new file mode 100644 index 0000000..f9542ae --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macTurkish.enc @@ -0,0 +1,20 @@ +# Encoding file: macTurkish, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178011E011F01300131015E015F +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9F8A002C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/inkstitch/bin/tcl/encoding/macUkraine.enc b/inkstitch/bin/tcl/encoding/macUkraine.enc new file mode 100644 index 0000000..643cc45 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/macUkraine.enc @@ -0,0 +1,20 @@ +# Encoding file: macUkraine, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +202000B0049000A300A7202200B6040600AE00A9212204020452226004030453 +221E00B122642265045600B504910408040404540407045704090459040A045A +0458040500AC221A01922248220600AB00BB202600A0040B045B040C045C0455 +20132014201C201D2018201900F7201E040E045E040F045F211604010451044F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E00A4 diff --git a/inkstitch/bin/tcl/encoding/shiftjis.enc b/inkstitch/bin/tcl/encoding/shiftjis.enc new file mode 100644 index 0000000..140aec4 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/shiftjis.enc @@ -0,0 +1,690 @@ +# Encoding file: shiftjis, multi-byte +M +003F 0 40 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000850086008700000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +FFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0FFF3C +301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +000000000000000000000000000000002227222800AC21D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB9765200000000FF5E +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +8160 301C FF5E +8161 2016 2225 +817C 2212 FF0D +8191 00A2 FFE0 +8192 00A3 FFE1 +81CA 00AC FFE2 diff --git a/inkstitch/bin/tcl/encoding/symbol.enc b/inkstitch/bin/tcl/encoding/symbol.enc new file mode 100644 index 0000000..ffda9e3 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/symbol.enc @@ -0,0 +1,20 @@ +# Encoding file: symbol, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002122000023220300250026220D002800292217002B002C2212002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +22450391039203A70394039503A603930397039903D1039A039B039C039D039F +03A0039803A103A303A403A503C203A9039E03A80396005B2234005D22A5005F +F8E503B103B203C703B403B503C603B303B703B903D503BA03BB03BC03BD03BF +03C003B803C103C303C403C503D603C903BE03C803B6007B007C007D223C007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +000003D2203222642044221E0192266326662665266021942190219121922193 +00B000B12033226500D7221D2202202200F72260226122482026F8E6F8E721B5 +21352111211C21182297229522052229222A2283228722842282228622082209 +2220220700AE00A92122220F221A22C500AC2227222821D421D021D121D221D3 +22C42329F8E8F8E9F8EA2211F8EBF8ECF8EDF8EEF8EFF8F0F8F1F8F2F8F3F8F4 +F8FF232A222B2320F8F52321F8F6F8F7F8F8F8F9F8FAF8FBF8FCF8FDF8FE0000 diff --git a/inkstitch/bin/tcl/encoding/tis-620.enc b/inkstitch/bin/tcl/encoding/tis-620.enc new file mode 100644 index 0000000..c233be5 --- /dev/null +++ b/inkstitch/bin/tcl/encoding/tis-620.enc @@ -0,0 +1,20 @@ +# Encoding file: tis-620, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F +0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 \ No newline at end of file diff --git a/inkstitch/bin/tcl/history.tcl b/inkstitch/bin/tcl/history.tcl new file mode 100644 index 0000000..888d144 --- /dev/null +++ b/inkstitch/bin/tcl/history.tcl @@ -0,0 +1,373 @@ +# history.tcl -- +# +# Implementation of the history command. +# +# Copyright (c) 1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# The tcl::history array holds the history list and +# some additional bookkeeping variables. +# +# nextid the index used for the next history list item. +# keep the max size of the history list +# oldest the index of the oldest item in the history. + +namespace eval tcl { + variable history + if {![info exists history]} { + array set history { + nextid 0 + keep 20 + oldest -20 + } + } +} + +# history -- +# +# This is the main history command. See the man page for its interface. +# This does argument checking and calls helper procedures in the +# history namespace. + +proc history {args} { + set len [llength $args] + if {$len == 0} { + return [tcl::HistInfo] + } + set key [lindex $args 0] + set options "add, change, clear, event, info, keep, nextid, or redo" + switch -glob -- $key { + a* { # history add + + if {$len > 3} { + return -code error "wrong # args: should be \"history add event ?exec?\"" + } + if {![string match $key* add]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 3} { + set arg [lindex $args 2] + if {! ([string match e* $arg] && [string match $arg* exec])} { + return -code error "bad argument \"$arg\": should be \"exec\"" + } + } + return [tcl::HistAdd [lindex $args 1] [lindex $args 2]] + } + ch* { # history change + + if {($len > 3) || ($len < 2)} { + return -code error "wrong # args: should be \"history change newValue ?event?\"" + } + if {![string match $key* change]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 2} { + set event 0 + } else { + set event [lindex $args 2] + } + + return [tcl::HistChange [lindex $args 1] $event] + } + cl* { # history clear + + if {($len > 1)} { + return -code error "wrong # args: should be \"history clear\"" + } + if {![string match $key* clear]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistClear] + } + e* { # history event + + if {$len > 2} { + return -code error "wrong # args: should be \"history event ?event?\"" + } + if {![string match $key* event]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 1} { + set event -1 + } else { + set event [lindex $args 1] + } + return [tcl::HistEvent $event] + } + i* { # history info + + if {$len > 2} { + return -code error "wrong # args: should be \"history info ?count?\"" + } + if {![string match $key* info]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistInfo [lindex $args 1]] + } + k* { # history keep + + if {$len > 2} { + return -code error "wrong # args: should be \"history keep ?count?\"" + } + if {$len == 1} { + return [tcl::HistKeep] + } else { + set limit [lindex $args 1] + if {[catch {expr {~$limit}}] || ($limit < 0)} { + return -code error "illegal keep count \"$limit\"" + } + return [tcl::HistKeep $limit] + } + } + n* { # history nextid + + if {$len > 1} { + return -code error "wrong # args: should be \"history nextid\"" + } + if {![string match $key* nextid]} { + return -code error "bad option \"$key\": must be $options" + } + return [expr {$tcl::history(nextid) + 1}] + } + r* { # history redo + + if {$len > 2} { + return -code error "wrong # args: should be \"history redo ?event?\"" + } + if {![string match $key* redo]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistRedo [lindex $args 1]] + } + default { + return -code error "bad option \"$key\": must be $options" + } + } +} + +# tcl::HistAdd -- +# +# Add an item to the history, and optionally eval it at the global scope +# +# Parameters: +# command the command to add +# exec (optional) a substring of "exec" causes the +# command to be evaled. +# Results: +# If executing, then the results of the command are returned +# +# Side Effects: +# Adds to the history list + + proc tcl::HistAdd {command {exec {}}} { + variable history + + # Do not add empty commands to the history + if {[string trim $command] eq ""} { + return "" + } + + set i [incr history(nextid)] + set history($i) $command + set j [incr history(oldest)] + unset -nocomplain history($j) + if {[string match e* $exec]} { + return [uplevel #0 $command] + } else { + return {} + } +} + +# tcl::HistKeep -- +# +# Set or query the limit on the length of the history list +# +# Parameters: +# limit (optional) the length of the history list +# +# Results: +# If no limit is specified, the current limit is returned +# +# Side Effects: +# Updates history(keep) if a limit is specified + + proc tcl::HistKeep {{limit {}}} { + variable history + if {$limit eq ""} { + return $history(keep) + } else { + set oldold $history(oldest) + set history(oldest) [expr {$history(nextid) - $limit}] + for {} {$oldold <= $history(oldest)} {incr oldold} { + unset -nocomplain history($oldold) + } + set history(keep) $limit + } +} + +# tcl::HistClear -- +# +# Erase the history list +# +# Parameters: +# none +# +# Results: +# none +# +# Side Effects: +# Resets the history array, except for the keep limit + + proc tcl::HistClear {} { + variable history + set keep $history(keep) + unset history + array set history [list \ + nextid 0 \ + keep $keep \ + oldest -$keep \ + ] +} + +# tcl::HistInfo -- +# +# Return a pretty-printed version of the history list +# +# Parameters: +# num (optional) the length of the history list to return +# +# Results: +# A formatted history list + + proc tcl::HistInfo {{num {}}} { + variable history + if {$num eq ""} { + set num [expr {$history(keep) + 1}] + } + set result {} + set newline "" + for {set i [expr {$history(nextid) - $num + 1}]} \ + {$i <= $history(nextid)} {incr i} { + if {![info exists history($i)]} { + continue + } + set cmd [string map [list \n \n\t] [string trimright $history($i) \ \n]] + append result $newline[format "%6d %s" $i $cmd] + set newline \n + } + return $result +} + +# tcl::HistRedo -- +# +# Fetch the previous or specified event, execute it, and then +# replace the current history item with that event. +# +# Parameters: +# event (optional) index of history item to redo. Defaults to -1, +# which means the previous event. +# +# Results: +# Those of the command being redone. +# +# Side Effects: +# Replaces the current history list item with the one being redone. + + proc tcl::HistRedo {{event -1}} { + variable history + if {$event eq ""} { + set event -1 + } + set i [HistIndex $event] + if {$i == $history(nextid)} { + return -code error "cannot redo the current event" + } + set cmd $history($i) + HistChange $cmd 0 + uplevel #0 $cmd +} + +# tcl::HistIndex -- +# +# Map from an event specifier to an index in the history list. +# +# Parameters: +# event index of history item to redo. +# If this is a positive number, it is used directly. +# If it is a negative number, then it counts back to a previous +# event, where -1 is the most recent event. +# A string can be matched, either by being the prefix of +# a command or by matching a command with string match. +# +# Results: +# The index into history, or an error if the index didn't match. + + proc tcl::HistIndex {event} { + variable history + if {[catch {expr {~$event}}]} { + for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \ + {incr i -1} { + if {[string match $event* $history($i)]} { + return $i; + } + if {[string match $event $history($i)]} { + return $i; + } + } + return -code error "no event matches \"$event\"" + } elseif {$event <= 0} { + set i [expr {$history(nextid) + $event}] + } else { + set i $event + } + if {$i <= $history(oldest)} { + return -code error "event \"$event\" is too far in the past" + } + if {$i > $history(nextid)} { + return -code error "event \"$event\" hasn't occured yet" + } + return $i +} + +# tcl::HistEvent -- +# +# Map from an event specifier to the value in the history list. +# +# Parameters: +# event index of history item to redo. See index for a +# description of possible event patterns. +# +# Results: +# The value from the history list. + + proc tcl::HistEvent {event} { + variable history + set i [HistIndex $event] + if {[info exists history($i)]} { + return [string trimright $history($i) \ \n] + } else { + return ""; + } +} + +# tcl::HistChange -- +# +# Replace a value in the history list. +# +# Parameters: +# cmd The new value to put into the history list. +# event (optional) index of history item to redo. See index for a +# description of possible event patterns. This defaults +# to 0, which specifies the current event. +# +# Side Effects: +# Changes the history list. + + proc tcl::HistChange {cmd {event 0}} { + variable history + set i [HistIndex $event] + set history($i) $cmd +} diff --git a/inkstitch/bin/tcl/http1.0/http.tcl b/inkstitch/bin/tcl/http1.0/http.tcl new file mode 100644 index 0000000..8041ee4 --- /dev/null +++ b/inkstitch/bin/tcl/http1.0/http.tcl @@ -0,0 +1,377 @@ +# http.tcl +# Client-side HTTP for GET, POST, and HEAD commands. +# These routines can be used in untrusted code that uses the Safesock +# security policy. +# These procedures use a callback interface to avoid using vwait, +# which is not defined in the safe base. +# +# See the http.n man page for documentation + +package provide http 1.0 + +array set http { + -accept */* + -proxyhost {} + -proxyport {} + -useragent {Tcl http client package 1.0} + -proxyfilter httpProxyRequired +} +proc http_config {args} { + global http + set options [lsort [array names http -*]] + set usage [join $options ", "] + if {[llength $args] == 0} { + set result {} + foreach name $options { + lappend result $name $http($name) + } + return $result + } + regsub -all -- - $options {} options + set pat ^-([join $options |])$ + if {[llength $args] == 1} { + set flag [lindex $args 0] + if {[regexp -- $pat $flag]} { + return $http($flag) + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } else { + foreach {flag value} $args { + if {[regexp -- $pat $flag]} { + set http($flag) $value + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } + } +} + + proc httpFinish { token {errormsg ""} } { + upvar #0 $token state + global errorInfo errorCode + if {[string length $errormsg] != 0} { + set state(error) [list $errormsg $errorInfo $errorCode] + set state(status) error + } + catch {close $state(sock)} + catch {after cancel $state(after)} + if {[info exists state(-command)]} { + if {[catch {eval $state(-command) {$token}} err]} { + if {[string length $errormsg] == 0} { + set state(error) [list $err $errorInfo $errorCode] + set state(status) error + } + } + unset state(-command) + } +} +proc http_reset { token {why reset} } { + upvar #0 $token state + set state(status) $why + catch {fileevent $state(sock) readable {}} + httpFinish $token + if {[info exists state(error)]} { + set errorlist $state(error) + unset state(error) + eval error $errorlist + } +} +proc http_get { url args } { + global http + if {![info exists http(uid)]} { + set http(uid) 0 + } + set token http#[incr http(uid)] + upvar #0 $token state + http_reset $token + array set state { + -blocksize 8192 + -validate 0 + -headers {} + -timeout 0 + state header + meta {} + currentsize 0 + totalsize 0 + type text/html + body {} + status "" + } + set options {-blocksize -channel -command -handler -headers \ + -progress -query -validate -timeout} + set usage [join $options ", "] + regsub -all -- - $options {} options + set pat ^-([join $options |])$ + foreach {flag value} $args { + if {[regexp $pat $flag]} { + # Validate numbers + if {[info exists state($flag)] && \ + [regexp {^[0-9]+$} $state($flag)] && \ + ![regexp {^[0-9]+$} $value]} { + return -code error "Bad value for $flag ($value), must be integer" + } + set state($flag) $value + } else { + return -code error "Unknown option $flag, can be: $usage" + } + } + if {! [regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \ + x proto host y port srvurl]} { + error "Unsupported URL: $url" + } + if {[string length $port] == 0} { + set port 80 + } + if {[string length $srvurl] == 0} { + set srvurl / + } + if {[string length $proto] == 0} { + set url http://$url + } + set state(url) $url + if {![catch {$http(-proxyfilter) $host} proxy]} { + set phost [lindex $proxy 0] + set pport [lindex $proxy 1] + } + if {$state(-timeout) > 0} { + set state(after) [after $state(-timeout) [list http_reset $token timeout]] + } + if {[info exists phost] && [string length $phost]} { + set srvurl $url + set s [socket $phost $pport] + } else { + set s [socket $host $port] + } + set state(sock) $s + + # Send data in cr-lf format, but accept any line terminators + + fconfigure $s -translation {auto crlf} -buffersize $state(-blocksize) + + # The following is disallowed in safe interpreters, but the socket + # is already in non-blocking mode in that case. + + catch {fconfigure $s -blocking off} + set len 0 + set how GET + if {[info exists state(-query)]} { + set len [string length $state(-query)] + if {$len > 0} { + set how POST + } + } elseif {$state(-validate)} { + set how HEAD + } + puts $s "$how $srvurl HTTP/1.0" + puts $s "Accept: $http(-accept)" + puts $s "Host: $host" + puts $s "User-Agent: $http(-useragent)" + foreach {key value} $state(-headers) { + regsub -all \[\n\r\] $value {} value + set key [string trim $key] + if {[string length $key]} { + puts $s "$key: $value" + } + } + if {$len > 0} { + puts $s "Content-Length: $len" + puts $s "Content-Type: application/x-www-form-urlencoded" + puts $s "" + fconfigure $s -translation {auto binary} + puts -nonewline $s $state(-query) + } else { + puts $s "" + } + flush $s + fileevent $s readable [list httpEvent $token] + if {! [info exists state(-command)]} { + http_wait $token + } + return $token +} +proc http_data {token} { + upvar #0 $token state + return $state(body) +} +proc http_status {token} { + upvar #0 $token state + return $state(status) +} +proc http_code {token} { + upvar #0 $token state + return $state(http) +} +proc http_size {token} { + upvar #0 $token state + return $state(currentsize) +} + + proc httpEvent {token} { + upvar #0 $token state + set s $state(sock) + + if {[eof $s]} { + httpEof $token + return + } + if {$state(state) == "header"} { + set n [gets $s line] + if {$n == 0} { + set state(state) body + if {![regexp -nocase ^text $state(type)]} { + # Turn off conversions for non-text data + fconfigure $s -translation binary + if {[info exists state(-channel)]} { + fconfigure $state(-channel) -translation binary + } + } + if {[info exists state(-channel)] && + ![info exists state(-handler)]} { + # Initiate a sequence of background fcopies + fileevent $s readable {} + httpCopyStart $s $token + } + } elseif {$n > 0} { + if {[regexp -nocase {^content-type:(.+)$} $line x type]} { + set state(type) [string trim $type] + } + if {[regexp -nocase {^content-length:(.+)$} $line x length]} { + set state(totalsize) [string trim $length] + } + if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} { + lappend state(meta) $key $value + } elseif {[regexp ^HTTP $line]} { + set state(http) $line + } + } + } else { + if {[catch { + if {[info exists state(-handler)]} { + set n [eval $state(-handler) {$s $token}] + } else { + set block [read $s $state(-blocksize)] + set n [string length $block] + if {$n >= 0} { + append state(body) $block + } + } + if {$n >= 0} { + incr state(currentsize) $n + } + } err]} { + httpFinish $token $err + } else { + if {[info exists state(-progress)]} { + eval $state(-progress) {$token $state(totalsize) $state(currentsize)} + } + } + } +} + proc httpCopyStart {s token} { + upvar #0 $token state + if {[catch { + fcopy $s $state(-channel) -size $state(-blocksize) -command \ + [list httpCopyDone $token] + } err]} { + httpFinish $token $err + } +} + proc httpCopyDone {token count {error {}}} { + upvar #0 $token state + set s $state(sock) + incr state(currentsize) $count + if {[info exists state(-progress)]} { + eval $state(-progress) {$token $state(totalsize) $state(currentsize)} + } + if {([string length $error] != 0)} { + httpFinish $token $error + } elseif {[eof $s]} { + httpEof $token + } else { + httpCopyStart $s $token + } +} + proc httpEof {token} { + upvar #0 $token state + if {$state(state) == "header"} { + # Premature eof + set state(status) eof + } else { + set state(status) ok + } + set state(state) eof + httpFinish $token +} +proc http_wait {token} { + upvar #0 $token state + if {![info exists state(status)] || [string length $state(status)] == 0} { + vwait $token\(status) + } + if {[info exists state(error)]} { + set errorlist $state(error) + unset state(error) + eval error $errorlist + } + return $state(status) +} + +# Call http_formatQuery with an even number of arguments, where the first is +# a name, the second is a value, the third is another name, and so on. + +proc http_formatQuery {args} { + set result "" + set sep "" + foreach i $args { + append result $sep [httpMapReply $i] + if {$sep != "="} { + set sep = + } else { + set sep & + } + } + return $result +} + +# do x-www-urlencoded character mapping +# The spec says: "non-alphanumeric characters are replaced by '%HH'" +# 1 leave alphanumerics characters alone +# 2 Convert every other character to an array lookup +# 3 Escape constructs that are "special" to the tcl parser +# 4 "subst" the result, doing all the array substitutions + + proc httpMapReply {string} { + global httpFormMap + set alphanumeric a-zA-Z0-9 + if {![info exists httpFormMap]} { + + for {set i 1} {$i <= 256} {incr i} { + set c [format %c $i] + if {![string match \[$alphanumeric\] $c]} { + set httpFormMap($c) %[format %.2x $i] + } + } + # These are handled specially + array set httpFormMap { + " " + \n %0d%0a + } + } + regsub -all \[^$alphanumeric\] $string {$httpFormMap(&)} string + regsub -all \n $string {\\n} string + regsub -all \t $string {\\t} string + regsub -all {[][{})\\]\)} $string {\\&} string + return [subst $string] +} + +# Default proxy filter. + proc httpProxyRequired {host} { + global http + if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} { + if {![info exists http(-proxyport)] || ![string length $http(-proxyport)]} { + set http(-proxyport) 8080 + } + return [list $http(-proxyhost) $http(-proxyport)] + } else { + return {} + } +} diff --git a/inkstitch/bin/tcl/http1.0/pkgIndex.tcl b/inkstitch/bin/tcl/http1.0/pkgIndex.tcl new file mode 100644 index 0000000..ab6170f --- /dev/null +++ b/inkstitch/bin/tcl/http1.0/pkgIndex.tcl @@ -0,0 +1,11 @@ +# Tcl package index file, version 1.0 +# This file is generated by the "pkg_mkIndex" command +# and sourced either when an application starts up or +# by a "package unknown" script. It invokes the +# "package ifneeded" command to set up package-related +# information so that packages will be loaded automatically +# in response to "package require" commands. When this +# script is sourced, the variable $dir must contain the +# full path name of this file's directory. + +package ifneeded http 1.0 [list tclPkgSetup $dir http 1.0 {{http.tcl source {httpCopyDone httpCopyStart httpEof httpEvent httpFinish httpMapReply httpProxyRequired http_code http_config http_data http_formatQuery http_get http_reset http_size http_status http_wait}}}] diff --git a/inkstitch/bin/tcl/init.tcl b/inkstitch/bin/tcl/init.tcl new file mode 100644 index 0000000..6b49fdf --- /dev/null +++ b/inkstitch/bin/tcl/init.tcl @@ -0,0 +1,835 @@ +# init.tcl -- +# +# Default system startup file for Tcl-based applications. Defines +# "unknown" procedure and auto-load facilities. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 Scriptics Corporation. +# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# This test intentionally written in pre-7.5 Tcl +if {[info commands package] == ""} { + error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]" +} +package require -exact Tcl 8.5.15 + +# Compute the auto path to use in this interpreter. +# The values on the path come from several locations: +# +# The environment variable TCLLIBPATH +# +# tcl_library, which is the directory containing this init.tcl script. +# [tclInit] (Tcl_Init()) searches around for the directory containing this +# init.tcl and defines tcl_library to that location before sourcing it. +# +# The parent directory of tcl_library. Adding the parent +# means that packages in peer directories will be found automatically. +# +# Also add the directory ../lib relative to the directory where the +# executable is located. This is meant to find binary packages for the +# same architecture as the current executable. +# +# tcl_pkgPath, which is set by the platform-specific initialization routines +# On UNIX it is compiled in +# On Windows, it is not used + +if {![info exists auto_path]} { + if {[info exists env(TCLLIBPATH)]} { + set auto_path $env(TCLLIBPATH) + } else { + set auto_path "" + } +} +namespace eval tcl { + variable Dir + foreach Dir [list $::tcl_library [file dirname $::tcl_library]] { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + set Dir [file join [file dirname [file dirname \ + [info nameofexecutable]]] lib] + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + catch { + foreach Dir $::tcl_pkgPath { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + } + + if {![interp issafe]} { + variable Path [encoding dirs] + set Dir [file join $::tcl_library encoding] + if {$Dir ni $Path} { + lappend Path $Dir + encoding dirs $Path + } + } + + # TIP #255 min and max functions + namespace eval mathfunc { + proc min {args} { + if {[llength $args] == 0} { + return -code error \ + "too few arguments to math function \"min\"" + } + set val Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg < $val} { set val $arg } + } + return $val + } + proc max {args} { + if {[llength $args] == 0} { + return -code error \ + "too few arguments to math function \"max\"" + } + set val -Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg > $val} { set val $arg } + } + return $val + } + namespace export min max + } +} + +# Windows specific end of initialization + +if {(![interp issafe]) && ($tcl_platform(platform) eq "windows")} { + namespace eval tcl { + proc EnvTraceProc {lo n1 n2 op} { + global env + set x $env($n2) + set env($lo) $x + set env([string toupper $lo]) $x + } + proc InitWinEnv {} { + global env tcl_platform + foreach p [array names env] { + set u [string toupper $p] + if {$u ne $p} { + switch -- $u { + COMSPEC - + PATH { + if {![info exists env($u)]} { + set env($u) $env($p) + } + trace add variable env($p) write \ + [namespace code [list EnvTraceProc $p]] + trace add variable env($u) write \ + [namespace code [list EnvTraceProc $p]] + } + } + } + } + if {![info exists env(COMSPEC)]} { + if {$tcl_platform(os) eq "Windows NT"} { + set env(COMSPEC) cmd.exe + } else { + set env(COMSPEC) command.com + } + } + } + InitWinEnv + } +} + +# Setup the unknown package handler + + +if {[interp issafe]} { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} +} else { + # Set up search for Tcl Modules (TIP #189). + # and setup platform specific unknown package handlers + if {$tcl_platform(os) eq "Darwin" + && $tcl_platform(platform) eq "unix"} { + package unknown {::tcl::tm::UnknownHandler \ + {::tcl::MacOSXPkgUnknown ::tclPkgUnknown}} + } else { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} + } + + # Set up the 'clock' ensemble + + namespace eval ::tcl::clock [list variable TclLibDir $::tcl_library] + + proc clock args { + namespace eval ::tcl::clock [list namespace ensemble create -command \ + [uplevel 1 [list namespace origin [lindex [info level 0] 0]]] \ + -subcommands { + add clicks format microseconds milliseconds scan seconds + }] + + # Auto-loading stubs for 'clock.tcl' + + foreach cmd {add format scan} { + proc ::tcl::clock::$cmd args { + variable TclLibDir + source -encoding utf-8 [file join $TclLibDir clock.tcl] + return [uplevel 1 [info level 0]] + } + } + + return [uplevel 1 [info level 0]] + } +} + +# Conditionalize for presence of exec. + +if {[namespace which -command exec] eq ""} { + + # Some machines do not have exec. Also, on all + # platforms, safe interpreters do not have exec. + + set auto_noexec 1 +} + +# Define a log command (which can be overwitten to log errors +# differently, specially when stderr is not available) + +if {[namespace which -command tclLog] eq ""} { + proc tclLog {string} { + catch {puts stderr $string} + } +} + +# unknown -- +# This procedure is called when a Tcl command is invoked that doesn't +# exist in the interpreter. It takes the following steps to make the +# command available: +# +# 1. See if the command has the form "namespace inscope ns cmd" and +# if so, concatenate its arguments onto the end and evaluate it. +# 2. See if the autoload facility can locate the command in a +# Tcl script file. If so, load it and execute it. +# 3. If the command was invoked interactively at top-level: +# (a) see if the command exists as an executable UNIX program. +# If so, "exec" the command. +# (b) see if the command requests csh-like history substitution +# in one of the common forms !!, !, or ^old^new. If +# so, emulate csh's history substitution. +# (c) see if the command is a unique abbreviation for another +# command. If so, invoke the command. +# +# Arguments: +# args - A list whose elements are the words of the original +# command, including the command name. + +proc unknown args { + variable ::tcl::UnknownPending + global auto_noexec auto_noload env tcl_interactive errorInfo errorCode + + # If the command word has the form "namespace inscope ns cmd" + # then concatenate its arguments onto the end and evaluate it. + + set cmd [lindex $args 0] + if {[regexp "^:*namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} { + #return -code error "You need an {*}" + set arglist [lrange $args 1 end] + set ret [catch {uplevel 1 ::$cmd $arglist} result opts] + dict unset opts -errorinfo + dict incr opts -level + return -options $opts $result + } + + catch {set savedErrorInfo $errorInfo} + catch {set savedErrorCode $errorCode} + set name $cmd + if {![info exists auto_noload]} { + # + # Make sure we're not trying to load the same proc twice. + # + if {[info exists UnknownPending($name)]} { + return -code error "self-referential recursion\ + in \"unknown\" for command \"$name\""; + } + set UnknownPending($name) pending; + set ret [catch { + auto_load $name [uplevel 1 {::namespace current}] + } msg opts] + unset UnknownPending($name); + if {$ret != 0} { + dict append opts -errorinfo "\n (autoloading \"$name\")" + return -options $opts $msg + } + if {![array size UnknownPending]} { + unset UnknownPending + } + if {$msg} { + if {[info exists savedErrorCode]} { + set ::errorCode $savedErrorCode + } else { + unset -nocomplain ::errorCode + } + if {[info exists savedErrorInfo]} { + set errorInfo $savedErrorInfo + } else { + unset -nocomplain errorInfo + } + set code [catch {uplevel 1 $args} msg opts] + if {$code == 1} { + # + # Compute stack trace contribution from the [uplevel]. + # Note the dependence on how Tcl_AddErrorInfo, etc. + # construct the stack trace. + # + set errInfo [dict get $opts -errorinfo] + set errCode [dict get $opts -errorcode] + set cinfo $args + if {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 150] + while {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 end-1] + } + append cinfo ... + } + append cinfo "\"\n (\"uplevel\" body line 1)" + append cinfo "\n invoked from within" + append cinfo "\n\"uplevel 1 \$args\"" + # + # Try each possible form of the stack trace + # and trim the extra contribution from the matching case + # + set expect "$msg\n while executing\n\"$cinfo" + if {$errInfo eq $expect} { + # + # The stack has only the eval from the expanded command + # Do not generate any stack trace here. + # + dict unset opts -errorinfo + dict incr opts -level + return -options $opts $msg + } + # + # Stack trace is nested, trim off just the contribution + # from the extra "eval" of $args due to the "catch" above. + # + set expect "\n invoked from within\n\"$cinfo" + set exlen [string length $expect] + set eilen [string length $errInfo] + set i [expr {$eilen - $exlen - 1}] + set einfo [string range $errInfo 0 $i] + # + # For now verify that $errInfo consists of what we are about + # to return plus what we expected to trim off. + # + if {$errInfo ne "$einfo$expect"} { + error "Tcl bug: unexpected stack trace in \"unknown\"" {} \ + [list CORE UNKNOWN BADTRACE $einfo $expect $errInfo] + } + return -code error -errorcode $errCode \ + -errorinfo $einfo $msg + } else { + dict incr opts -level + return -options $opts $msg + } + } + } + + if {([info level] == 1) && ([info script] eq "") + && [info exists tcl_interactive] && $tcl_interactive} { + if {![info exists auto_noexec]} { + set new [auto_execok $name] + if {$new ne ""} { + set redir "" + if {[namespace which -command console] eq ""} { + set redir ">&@stdout <@stdin" + } + uplevel 1 [list ::catch \ + [concat exec $redir $new [lrange $args 1 end]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + } + if {$name eq "!!"} { + set newcmd [history event] + } elseif {[regexp {^!(.+)$} $name -> event]} { + set newcmd [history event $event] + } elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $name -> old new]} { + set newcmd [history event -1] + catch {regsub -all -- $old $newcmd $new newcmd} + } + if {[info exists newcmd]} { + tclLog $newcmd + history change $newcmd 0 + uplevel 1 [list ::catch $newcmd \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + + set ret [catch {set candidates [info commands $name*]} msg] + if {$name eq "::"} { + set name "" + } + if {$ret != 0} { + dict append opts -errorinfo \ + "\n (expanding command prefix \"$name\" in unknown)" + return -options $opts $msg + } + # Filter out bogus matches when $name contained + # a glob-special char [Bug 946952] + if {$name eq ""} { + # Handle empty $name separately due to strangeness + # in [string first] (See RFE 1243354) + set cmds $candidates + } else { + set cmds [list] + foreach x $candidates { + if {[string first $name $x] == 0} { + lappend cmds $x + } + } + } + if {[llength $cmds] == 1} { + uplevel 1 [list ::catch [lreplace $args 0 0 [lindex $cmds 0]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + if {[llength $cmds]} { + return -code error "ambiguous command name \"$name\": [lsort $cmds]" + } + } + return -code error "invalid command name \"$name\"" +} + +# auto_load -- +# Checks a collection of library directories to see if a procedure +# is defined in one of them. If so, it sources the appropriate +# library file to create the procedure. Returns 1 if it successfully +# loaded the procedure, 0 otherwise. +# +# Arguments: +# cmd - Name of the command to find and load. +# namespace (optional) The namespace where the command is being used - must be +# a canonical namespace as returned [namespace current] +# for instance. If not given, namespace current is used. + +proc auto_load {cmd {namespace {}}} { + global auto_index auto_path + + if {$namespace eq ""} { + set namespace [uplevel 1 [list ::namespace current]] + } + set nameList [auto_qualify $cmd $namespace] + # workaround non canonical auto_index entries that might be around + # from older auto_mkindex versions + lappend nameList $cmd + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + # There's a couple of ways to look for a command of a given + # name. One is to use + # info commands $name + # Unfortunately, if the name has glob-magic chars in it like * + # or [], it may not match. For our purposes here, a better + # route is to use + # namespace which -command $name + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + if {![info exists auto_path]} { + return 0 + } + + if {![auto_load_index]} { + return 0 + } + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + return 0 +} + +# auto_load_index -- +# Loads the contents of tclIndex files on the auto_path directory +# list. This is usually invoked within auto_load to load the index +# of available commands. Returns 1 if the index is loaded, and 0 if +# the index is already loaded and up to date. +# +# Arguments: +# None. + +proc auto_load_index {} { + variable ::tcl::auto_oldpath + global auto_index auto_path + + if {[info exists auto_oldpath] && ($auto_oldpath eq $auto_path)} { + return 0 + } + set auto_oldpath $auto_path + + # Check if we are a safe interpreter. In that case, we support only + # newer format tclIndex files. + + set issafe [interp issafe] + for {set i [expr {[llength $auto_path] - 1}]} {$i >= 0} {incr i -1} { + set dir [lindex $auto_path $i] + set f "" + if {$issafe} { + catch {source [file join $dir tclIndex]} + } elseif {[catch {set f [open [file join $dir tclIndex]]}]} { + continue + } else { + set error [catch { + set id [gets $f] + if {$id eq "# Tcl autoload index file, version 2.0"} { + eval [read $f] + } elseif {$id eq "# Tcl autoload index file: each line identifies a Tcl"} { + while {[gets $f line] >= 0} { + if {([string index $line 0] eq "#") \ + || ([llength $line] != 2)} { + continue + } + set name [lindex $line 0] + set auto_index($name) \ + "source [file join $dir [lindex $line 1]]" + } + } else { + error "[file join $dir tclIndex] isn't a proper Tcl index file" + } + } msg opts] + if {$f ne ""} { + close $f + } + if {$error} { + return -options $opts $msg + } + } + } + return 1 +} + +# auto_qualify -- +# +# Compute a fully qualified names list for use in the auto_index array. +# For historical reasons, commands in the global namespace do not have leading +# :: in the index key. The list has two elements when the command name is +# relative (no leading ::) and the namespace is not the global one. Otherwise +# only one name is returned (and searched in the auto_index). +# +# Arguments - +# cmd The command name. Can be any name accepted for command +# invocations (Like "foo::::bar"). +# namespace The namespace where the command is being used - must be +# a canonical namespace as returned by [namespace current] +# for instance. + +proc auto_qualify {cmd namespace} { + + # count separators and clean them up + # (making sure that foo:::::bar will be treated as foo::bar) + set n [regsub -all {::+} $cmd :: cmd] + + # Ignore namespace if the name starts with :: + # Handle special case of only leading :: + + # Before each return case we give an example of which category it is + # with the following form : + # ( inputCmd, inputNameSpace) -> output + + if {[string match ::* $cmd]} { + if {$n > 1} { + # ( ::foo::bar , * ) -> ::foo::bar + return [list $cmd] + } else { + # ( ::global , * ) -> global + return [list [string range $cmd 2 end]] + } + } + + # Potentially returning 2 elements to try : + # (if the current namespace is not the global one) + + if {$n == 0} { + if {$namespace eq "::"} { + # ( nocolons , :: ) -> nocolons + return [list $cmd] + } else { + # ( nocolons , ::sub ) -> ::sub::nocolons nocolons + return [list ${namespace}::$cmd $cmd] + } + } elseif {$namespace eq "::"} { + # ( foo::bar , :: ) -> ::foo::bar + return [list ::$cmd] + } else { + # ( foo::bar , ::sub ) -> ::sub::foo::bar ::foo::bar + return [list ${namespace}::$cmd ::$cmd] + } +} + +# auto_import -- +# +# Invoked during "namespace import" to make see if the imported commands +# reside in an autoloaded library. If so, the commands are loaded so +# that they will be available for the import links. If not, then this +# procedure does nothing. +# +# Arguments - +# pattern The pattern of commands being imported (like "foo::*") +# a canonical namespace as returned by [namespace current] + +proc auto_import {pattern} { + global auto_index + + # If no namespace is specified, this will be an error case + + if {![string match *::* $pattern]} { + return + } + + set ns [uplevel 1 [list ::namespace current]] + set patternList [auto_qualify $pattern $ns] + + auto_load_index + + foreach pattern $patternList { + foreach name [array names auto_index $pattern] { + if {([namespace which -command $name] eq "") + && ([namespace qualifiers $pattern] eq [namespace qualifiers $name])} { + namespace eval :: $auto_index($name) + } + } + } +} + +# auto_execok -- +# +# Returns string that indicates name of program to execute if +# name corresponds to a shell builtin or an executable in the +# Windows search path, or "" otherwise. Builds an associative +# array auto_execs that caches information about previous checks, +# for speed. +# +# Arguments: +# name - Name of a command. + +if {$tcl_platform(platform) eq "windows"} { +# Windows version. +# +# Note that info executable doesn't work under Windows, so we have to +# look for files with .exe, .com, or .bat extensions. Also, the path +# may be in the Path or PATH environment variables, and path +# components are separated with semicolons, not colons as under Unix. +# +proc auto_execok name { + global auto_execs env tcl_platform + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + + set shellBuiltins [list cls copy date del erase dir echo mkdir \ + md rename ren rmdir rd time type ver vol] + if {$tcl_platform(os) eq "Windows NT"} { + # NT includes the 'start' built-in + lappend shellBuiltins "start" + } + if {[info exists env(PATHEXT)]} { + # Add an initial ; to have the {} extension check first. + set execExtensions [split ";$env(PATHEXT)" ";"] + } else { + set execExtensions [list {} .com .exe .bat .cmd] + } + + if {[string tolower $name] in $shellBuiltins} { + # When this is command.com for some reason on Win2K, Tcl won't + # exec it unless the case is right, which this corrects. COMSPEC + # may not point to a real file, so do the check. + set cmd $env(COMSPEC) + if {[file exists $cmd]} { + set cmd [file attributes $cmd -shortname] + } + return [set auto_execs($name) [list $cmd /c $name]] + } + + if {[llength [file split $name]] != 1} { + foreach ext $execExtensions { + set file ${name}${ext} + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + return "" + } + + set path "[file dirname [info nameof]];.;" + if {[info exists env(WINDIR)]} { + set windir $env(WINDIR) + } + if {[info exists windir]} { + if {$tcl_platform(os) eq "Windows NT"} { + append path "$windir/system32;" + } + append path "$windir/system;$windir;" + } + + foreach var {PATH Path path} { + if {[info exists env($var)]} { + append path ";$env($var)" + } + } + + foreach ext $execExtensions { + unset -nocomplain checked + foreach dir [split $path {;}] { + # Skip already checked directories + if {[info exists checked($dir)] || ($dir eq {})} { + continue + } + set checked($dir) {} + set file [file join $dir ${name}${ext}] + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + } + return "" +} + +} else { +# Unix version. +# +proc auto_execok name { + global auto_execs env + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + if {[llength [file split $name]] != 1} { + if {[file executable $name] && ![file isdirectory $name]} { + set auto_execs($name) [list $name] + } + return $auto_execs($name) + } + foreach dir [split $env(PATH) :] { + if {$dir eq ""} { + set dir . + } + set file [file join $dir $name] + if {[file executable $file] && ![file isdirectory $file]} { + set auto_execs($name) [list $file] + return $auto_execs($name) + } + } + return "" +} + +} + +# ::tcl::CopyDirectory -- +# +# This procedure is called by Tcl's core when attempts to call the +# filesystem's copydirectory function fail. The semantics of the call +# are that 'dest' does not yet exist, i.e. dest should become the exact +# image of src. If dest does exist, we throw an error. +# +# Note that making changes to this procedure can change the results +# of running Tcl's tests. +# +# Arguments: +# action - "renaming" or "copying" +# src - source directory +# dest - destination directory +proc tcl::CopyDirectory {action src dest} { + set nsrc [file normalize $src] + set ndest [file normalize $dest] + + if {$action eq "renaming"} { + # Can't rename volumes. We could give a more precise + # error message here, but that would break the test suite. + if {$nsrc in [file volumes]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + if {[file exists $dest]} { + if {$nsrc eq $ndest} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + if {$action eq "copying"} { + # We used to throw an error here, but, looking more closely + # at the core copy code in tclFCmd.c, if the destination + # exists, then we should only call this function if -force + # is true, which means we just want to over-write. So, + # the following code is now commented out. + # + # return -code error "error $action \"$src\" to\ + # \"$dest\": file already exists" + } else { + # Depending on the platform, and on the current + # working directory, the directories '.', '..' + # can be returned in various combinations. Anyway, + # if any other file is returned, we must signal an error. + set existing [glob -nocomplain -directory $dest * .*] + lappend existing {*}[glob -nocomplain -directory $dest \ + -type hidden * .*] + foreach s $existing { + if {[file tail $s] ni {. ..}} { + return -code error "error $action \"$src\" to\ + \"$dest\": file already exists" + } + } + } + } else { + if {[string first $nsrc $ndest] != -1} { + set srclen [expr {[llength [file split $nsrc]] - 1}] + set ndest [lindex [file split $ndest] $srclen] + if {$ndest eq [file tail $nsrc]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + file mkdir $dest + } + # Have to be careful to capture both visible and hidden files. + # We will also be more generous to the file system and not + # assume the hidden and non-hidden lists are non-overlapping. + # + # On Unix 'hidden' files begin with '.'. On other platforms + # or filesystems hidden files may have other interpretations. + set filelist [concat [glob -nocomplain -directory $src *] \ + [glob -nocomplain -directory $src -types hidden *]] + + foreach s [lsort -unique $filelist] { + if {[file tail $s] ni {. ..}} { + file copy -force -- $s [file join $dest [file tail $s]] + } + } + return +} diff --git a/inkstitch/bin/tcl/msgs/af.msg b/inkstitch/bin/tcl/msgs/af.msg new file mode 100644 index 0000000..0892615 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/af.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset af DAYS_OF_WEEK_ABBREV [list \ + "So"\ + "Ma"\ + "Di"\ + "Wo"\ + "Do"\ + "Vr"\ + "Sa"] + ::msgcat::mcset af DAYS_OF_WEEK_FULL [list \ + "Sondag"\ + "Maandag"\ + "Dinsdag"\ + "Woensdag"\ + "Donderdag"\ + "Vrydag"\ + "Saterdag"] + ::msgcat::mcset af MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset af MONTHS_FULL [list \ + "Januarie"\ + "Februarie"\ + "Maart"\ + "April"\ + "Mei"\ + "Junie"\ + "Julie"\ + "Augustus"\ + "September"\ + "Oktober"\ + "November"\ + "Desember"\ + ""] + ::msgcat::mcset af AM "VM" + ::msgcat::mcset af PM "NM" +} diff --git a/inkstitch/bin/tcl/msgs/af_za.msg b/inkstitch/bin/tcl/msgs/af_za.msg new file mode 100644 index 0000000..fef48ad --- /dev/null +++ b/inkstitch/bin/tcl/msgs/af_za.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset af_ZA DATE_FORMAT "%d %B %Y" + ::msgcat::mcset af_ZA TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset af_ZA DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/ar.msg b/inkstitch/bin/tcl/msgs/ar.msg new file mode 100644 index 0000000..257157f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ar.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar DAYS_OF_WEEK_ABBREV [list \ + "\u062d"\ + "\u0646"\ + "\u062b"\ + "\u0631"\ + "\u062e"\ + "\u062c"\ + "\u0633"] + ::msgcat::mcset ar DAYS_OF_WEEK_FULL [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar MONTHS_ABBREV [list \ + "\u064a\u0646\u0627"\ + "\u0641\u0628\u0631"\ + "\u0645\u0627\u0631"\ + "\u0623\u0628\u0631"\ + "\u0645\u0627\u064a"\ + "\u064a\u0648\u0646"\ + "\u064a\u0648\u0644"\ + "\u0623\u063a\u0633"\ + "\u0633\u0628\u062a"\ + "\u0623\u0643\u062a"\ + "\u0646\u0648\u0641"\ + "\u062f\u064a\u0633"\ + ""] + ::msgcat::mcset ar MONTHS_FULL [list \ + "\u064a\u0646\u0627\u064a\u0631"\ + "\u0641\u0628\u0631\u0627\u064a\u0631"\ + "\u0645\u0627\u0631\u0633"\ + "\u0623\u0628\u0631\u064a\u0644"\ + "\u0645\u0627\u064a\u0648"\ + "\u064a\u0648\u0646\u064a\u0648"\ + "\u064a\u0648\u0644\u064a\u0648"\ + "\u0623\u063a\u0633\u0637\u0633"\ + "\u0633\u0628\u062a\u0645\u0628\u0631"\ + "\u0623\u0643\u062a\u0648\u0628\u0631"\ + "\u0646\u0648\u0641\u0645\u0628\u0631"\ + "\u062f\u064a\u0633\u0645\u0628\u0631"\ + ""] + ::msgcat::mcset ar BCE "\u0642.\u0645" + ::msgcat::mcset ar CE "\u0645" + ::msgcat::mcset ar AM "\u0635" + ::msgcat::mcset ar PM "\u0645" + ::msgcat::mcset ar DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset ar TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset ar DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/ar_in.msg b/inkstitch/bin/tcl/msgs/ar_in.msg new file mode 100644 index 0000000..185e49c --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ar_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_IN DATE_FORMAT "%A %d %B %Y" + ::msgcat::mcset ar_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset ar_IN DATE_TIME_FORMAT "%A %d %B %Y %I:%M:%S %z %z" +} diff --git a/inkstitch/bin/tcl/msgs/ar_jo.msg b/inkstitch/bin/tcl/msgs/ar_jo.msg new file mode 100644 index 0000000..0f5e269 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ar_jo.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_JO DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_JO MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_JO MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/ar_lb.msg b/inkstitch/bin/tcl/msgs/ar_lb.msg new file mode 100644 index 0000000..e62acd3 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ar_lb.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_LB DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_LB MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_LB MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/ar_sy.msg b/inkstitch/bin/tcl/msgs/ar_sy.msg new file mode 100644 index 0000000..d5e1c87 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ar_sy.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_SY DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_SY MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_SY MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631\u0627\u0646"\ + "\u062d\u0632\u064a\u0631"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/be.msg b/inkstitch/bin/tcl/msgs/be.msg new file mode 100644 index 0000000..379a1d7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/be.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset be DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0434"\ + "\u043f\u043d"\ + "\u0430\u0442"\ + "\u0441\u0440"\ + "\u0447\u0446"\ + "\u043f\u0442"\ + "\u0441\u0431"] + ::msgcat::mcset be DAYS_OF_WEEK_FULL [list \ + "\u043d\u044f\u0434\u0437\u0435\u043b\u044f"\ + "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a"\ + "\u0430\u045e\u0442\u043e\u0440\u0430\u043a"\ + "\u0441\u0435\u0440\u0430\u0434\u0430"\ + "\u0447\u0430\u0446\u0432\u0435\u0440"\ + "\u043f\u044f\u0442\u043d\u0456\u0446\u0430"\ + "\u0441\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset be MONTHS_ABBREV [list \ + "\u0441\u0442\u0434"\ + "\u043b\u044e\u0442"\ + "\u0441\u043a\u0432"\ + "\u043a\u0440\u0441"\ + "\u043c\u0430\u0439"\ + "\u0447\u0440\u0432"\ + "\u043b\u043f\u043d"\ + "\u0436\u043d\u0432"\ + "\u0432\u0440\u0441"\ + "\u043a\u0441\u0442"\ + "\u043b\u0441\u0442"\ + "\u0441\u043d\u0436"\ + ""] + ::msgcat::mcset be MONTHS_FULL [list \ + "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f"\ + "\u043b\u044e\u0442\u0430\u0433\u0430"\ + "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430"\ + "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430"\ + "\u043c\u0430\u044f"\ + "\u0447\u0440\u0432\u0435\u043d\u044f"\ + "\u043b\u0456\u043f\u0435\u043d\u044f"\ + "\u0436\u043d\u0456\u045e\u043d\u044f"\ + "\u0432\u0435\u0440\u0430\u0441\u043d\u044f"\ + "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430"\ + "\u043b\u0438\u0441\u0442\u0430\u043f\u0430\u0434\u0430"\ + "\u0441\u043d\u0435\u0436\u043d\u044f"\ + ""] + ::msgcat::mcset be BCE "\u0434\u0430 \u043d.\u0435." + ::msgcat::mcset be CE "\u043d.\u0435." + ::msgcat::mcset be DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset be TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset be DATE_TIME_FORMAT "%e.%m.%Y %k.%M.%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/bg.msg b/inkstitch/bin/tcl/msgs/bg.msg new file mode 100644 index 0000000..ff17759 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/bg.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bg DAYS_OF_WEEK_ABBREV [list \ + "\u041d\u0434"\ + "\u041f\u043d"\ + "\u0412\u0442"\ + "\u0421\u0440"\ + "\u0427\u0442"\ + "\u041f\u0442"\ + "\u0421\u0431"] + ::msgcat::mcset bg DAYS_OF_WEEK_FULL [list \ + "\u041d\u0435\u0434\u0435\u043b\u044f"\ + "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\ + "\u0412\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0421\u0440\u044f\u0434\u0430"\ + "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a"\ + "\u041f\u0435\u0442\u044a\u043a"\ + "\u0421\u044a\u0431\u043e\u0442\u0430"] + ::msgcat::mcset bg MONTHS_ABBREV [list \ + "I"\ + "II"\ + "III"\ + "IV"\ + "V"\ + "VI"\ + "VII"\ + "VIII"\ + "IX"\ + "X"\ + "XI"\ + "XII"\ + ""] + ::msgcat::mcset bg MONTHS_FULL [list \ + "\u042f\u043d\u0443\u0430\u0440\u0438"\ + "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0438\u043b"\ + "\u041c\u0430\u0439"\ + "\u042e\u043d\u0438"\ + "\u042e\u043b\u0438"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\ + "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\ + "\u041d\u043e\u0435\u043c\u0432\u0440\u0438"\ + "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\ + ""] + ::msgcat::mcset bg BCE "\u043f\u0440.\u043d.\u0435." + ::msgcat::mcset bg CE "\u043d.\u0435." + ::msgcat::mcset bg DATE_FORMAT "%Y-%m-%e" + ::msgcat::mcset bg TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset bg DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/bn.msg b/inkstitch/bin/tcl/msgs/bn.msg new file mode 100644 index 0000000..664b9d8 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/bn.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bn DAYS_OF_WEEK_ABBREV [list \ + "\u09b0\u09ac\u09bf"\ + "\u09b8\u09cb\u09ae"\ + "\u09ae\u0999\u0997\u09b2"\ + "\u09ac\u09c1\u09a7"\ + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf"\ + "\u09b6\u09c1\u0995\u09cd\u09b0"\ + "\u09b6\u09a8\u09bf"] + ::msgcat::mcset bn DAYS_OF_WEEK_FULL [list \ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0"\ + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0"\ + "\u09ae\u0999\u0997\u09b2\u09ac\u09be\u09b0"\ + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0"\ + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0"\ + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0"\ + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"] + ::msgcat::mcset bn MONTHS_ABBREV [list \ + "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ae\u09be\u09b0\u09cd\u099a"\ + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\ + "\u09ae\u09c7"\ + "\u099c\u09c1\u09a8"\ + "\u099c\u09c1\u09b2\u09be\u0987"\ + "\u0986\u0997\u09b8\u09cd\u099f"\ + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\ + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\ + ""] + ::msgcat::mcset bn MONTHS_FULL [list \ + "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ae\u09be\u09b0\u09cd\u099a"\ + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\ + "\u09ae\u09c7"\ + "\u099c\u09c1\u09a8"\ + "\u099c\u09c1\u09b2\u09be\u0987"\ + "\u0986\u0997\u09b8\u09cd\u099f"\ + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\ + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\ + ""] + ::msgcat::mcset bn AM "\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3" + ::msgcat::mcset bn PM "\u0985\u09aa\u09b0\u09be\u09b9\u09cd\u09a3" +} diff --git a/inkstitch/bin/tcl/msgs/bn_in.msg b/inkstitch/bin/tcl/msgs/bn_in.msg new file mode 100644 index 0000000..28c000f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/bn_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bn_IN DATE_FORMAT "%A %d %b %Y" + ::msgcat::mcset bn_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset bn_IN DATE_TIME_FORMAT "%A %d %b %Y %I:%M:%S %z %z" +} diff --git a/inkstitch/bin/tcl/msgs/ca.msg b/inkstitch/bin/tcl/msgs/ca.msg new file mode 100644 index 0000000..36c9772 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ca.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ca DAYS_OF_WEEK_ABBREV [list \ + "dg."\ + "dl."\ + "dt."\ + "dc."\ + "dj."\ + "dv."\ + "ds."] + ::msgcat::mcset ca DAYS_OF_WEEK_FULL [list \ + "diumenge"\ + "dilluns"\ + "dimarts"\ + "dimecres"\ + "dijous"\ + "divendres"\ + "dissabte"] + ::msgcat::mcset ca MONTHS_ABBREV [list \ + "gen."\ + "feb."\ + "mar\u00e7"\ + "abr."\ + "maig"\ + "juny"\ + "jul."\ + "ag."\ + "set."\ + "oct."\ + "nov."\ + "des."\ + ""] + ::msgcat::mcset ca MONTHS_FULL [list \ + "gener"\ + "febrer"\ + "mar\u00e7"\ + "abril"\ + "maig"\ + "juny"\ + "juliol"\ + "agost"\ + "setembre"\ + "octubre"\ + "novembre"\ + "desembre"\ + ""] + ::msgcat::mcset ca DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset ca TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset ca DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/cs.msg b/inkstitch/bin/tcl/msgs/cs.msg new file mode 100644 index 0000000..8db8bdd --- /dev/null +++ b/inkstitch/bin/tcl/msgs/cs.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset cs DAYS_OF_WEEK_ABBREV [list \ + "Ne"\ + "Po"\ + "\u00dat"\ + "St"\ + "\u010ct"\ + "P\u00e1"\ + "So"] + ::msgcat::mcset cs DAYS_OF_WEEK_FULL [list \ + "Ned\u011ble"\ + "Pond\u011bl\u00ed"\ + "\u00dater\u00fd"\ + "St\u0159eda"\ + "\u010ctvrtek"\ + "P\u00e1tek"\ + "Sobota"] + ::msgcat::mcset cs MONTHS_ABBREV [list \ + "I"\ + "II"\ + "III"\ + "IV"\ + "V"\ + "VI"\ + "VII"\ + "VIII"\ + "IX"\ + "X"\ + "XI"\ + "XII"\ + ""] + ::msgcat::mcset cs MONTHS_FULL [list \ + "leden"\ + "\u00fanor"\ + "b\u0159ezen"\ + "duben"\ + "kv\u011bten"\ + "\u010derven"\ + "\u010dervenec"\ + "srpen"\ + "z\u00e1\u0159\u00ed"\ + "\u0159\u00edjen"\ + "listopad"\ + "prosinec"\ + ""] + ::msgcat::mcset cs BCE "p\u0159.Kr." + ::msgcat::mcset cs CE "po Kr." + ::msgcat::mcset cs AM "dop." + ::msgcat::mcset cs PM "odp." + ::msgcat::mcset cs DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset cs TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset cs DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/da.msg b/inkstitch/bin/tcl/msgs/da.msg new file mode 100644 index 0000000..e4fec7f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/da.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset da DAYS_OF_WEEK_ABBREV [list \ + "s\u00f8"\ + "ma"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f8"] + ::msgcat::mcset da DAYS_OF_WEEK_FULL [list \ + "s\u00f8ndag"\ + "mandag"\ + "tirsdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f8rdag"] + ::msgcat::mcset da MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset da MONTHS_FULL [list \ + "januar"\ + "februar"\ + "marts"\ + "april"\ + "maj"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset da BCE "f.Kr." + ::msgcat::mcset da CE "e.Kr." + ::msgcat::mcset da DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset da TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset da DATE_TIME_FORMAT "%d-%m-%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/de.msg b/inkstitch/bin/tcl/msgs/de.msg new file mode 100644 index 0000000..9eb3145 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/de.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de DAYS_OF_WEEK_ABBREV [list \ + "So"\ + "Mo"\ + "Di"\ + "Mi"\ + "Do"\ + "Fr"\ + "Sa"] + ::msgcat::mcset de DAYS_OF_WEEK_FULL [list \ + "Sonntag"\ + "Montag"\ + "Dienstag"\ + "Mittwoch"\ + "Donnerstag"\ + "Freitag"\ + "Samstag"] + ::msgcat::mcset de MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mrz"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de BCE "v. Chr." + ::msgcat::mcset de CE "n. Chr." + ::msgcat::mcset de AM "vorm." + ::msgcat::mcset de PM "nachm." + ::msgcat::mcset de DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset de TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset de DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/de_at.msg b/inkstitch/bin/tcl/msgs/de_at.msg new file mode 100644 index 0000000..61bc266 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/de_at.msg @@ -0,0 +1,35 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de_AT MONTHS_ABBREV [list \ + "J\u00e4n"\ + "Feb"\ + "M\u00e4r"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de_AT MONTHS_FULL [list \ + "J\u00e4nner"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de_AT DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset de_AT TIME_FORMAT "%T" + ::msgcat::mcset de_AT TIME_FORMAT_12 "%T" + ::msgcat::mcset de_AT DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/de_be.msg b/inkstitch/bin/tcl/msgs/de_be.msg new file mode 100644 index 0000000..3614763 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/de_be.msg @@ -0,0 +1,53 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de_BE DAYS_OF_WEEK_ABBREV [list \ + "Son"\ + "Mon"\ + "Die"\ + "Mit"\ + "Don"\ + "Fre"\ + "Sam"] + ::msgcat::mcset de_BE DAYS_OF_WEEK_FULL [list \ + "Sonntag"\ + "Montag"\ + "Dienstag"\ + "Mittwoch"\ + "Donnerstag"\ + "Freitag"\ + "Samstag"] + ::msgcat::mcset de_BE MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "M\u00e4r"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de_BE MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de_BE AM "vorm" + ::msgcat::mcset de_BE PM "nachm" + ::msgcat::mcset de_BE DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset de_BE TIME_FORMAT "%T" + ::msgcat::mcset de_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset de_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/el.msg b/inkstitch/bin/tcl/msgs/el.msg new file mode 100644 index 0000000..ac19f62 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/el.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset el DAYS_OF_WEEK_ABBREV [list \ + "\u039a\u03c5\u03c1"\ + "\u0394\u03b5\u03c5"\ + "\u03a4\u03c1\u03b9"\ + "\u03a4\u03b5\u03c4"\ + "\u03a0\u03b5\u03bc"\ + "\u03a0\u03b1\u03c1"\ + "\u03a3\u03b1\u03b2"] + ::msgcat::mcset el DAYS_OF_WEEK_FULL [list \ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae"\ + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1"\ + "\u03a4\u03c1\u03af\u03c4\u03b7"\ + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7"\ + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7"\ + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae"\ + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"] + ::msgcat::mcset el MONTHS_ABBREV [list \ + "\u0399\u03b1\u03bd"\ + "\u03a6\u03b5\u03b2"\ + "\u039c\u03b1\u03c1"\ + "\u0391\u03c0\u03c1"\ + "\u039c\u03b1\u03ca"\ + "\u0399\u03bf\u03c5\u03bd"\ + "\u0399\u03bf\u03c5\u03bb"\ + "\u0391\u03c5\u03b3"\ + "\u03a3\u03b5\u03c0"\ + "\u039f\u03ba\u03c4"\ + "\u039d\u03bf\u03b5"\ + "\u0394\u03b5\u03ba"\ + ""] + ::msgcat::mcset el MONTHS_FULL [list \ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\ + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\ + "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2"\ + "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2"\ + "\u039c\u03ac\u03ca\u03bf\u03c2"\ + "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2"\ + "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2"\ + "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2"\ + "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + ""] + ::msgcat::mcset el AM "\u03c0\u03bc" + ::msgcat::mcset el PM "\u03bc\u03bc" + ::msgcat::mcset el DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset el TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset el DATE_TIME_FORMAT "%e/%m/%Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_au.msg b/inkstitch/bin/tcl/msgs/en_au.msg new file mode 100644 index 0000000..7f9870c --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_au.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_AU DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset en_AU TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_AU TIME_FORMAT_12 "%I:%M:%S %P %z" + ::msgcat::mcset en_AU DATE_TIME_FORMAT "%e/%m/%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_be.msg b/inkstitch/bin/tcl/msgs/en_be.msg new file mode 100644 index 0000000..5072986 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_BE DATE_FORMAT "%d %b %Y" + ::msgcat::mcset en_BE TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset en_BE TIME_FORMAT_12 "%k h %M min %S s %z" + ::msgcat::mcset en_BE DATE_TIME_FORMAT "%d %b %Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_bw.msg b/inkstitch/bin/tcl/msgs/en_bw.msg new file mode 100644 index 0000000..8fd20c7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_bw.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_BW DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_BW TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_BW DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_ca.msg b/inkstitch/bin/tcl/msgs/en_ca.msg new file mode 100644 index 0000000..278efe7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_ca.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_CA DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_CA TIME_FORMAT "%r" + ::msgcat::mcset en_CA TIME_FORMAT_12 "%I:%M:%S %p" + ::msgcat::mcset en_CA DATE_TIME_FORMAT "%a %d %b %Y %r %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_gb.msg b/inkstitch/bin/tcl/msgs/en_gb.msg new file mode 100644 index 0000000..5c61c43 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_gb.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_GB DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_GB TIME_FORMAT "%T" + ::msgcat::mcset en_GB TIME_FORMAT_12 "%T" + ::msgcat::mcset en_GB DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_hk.msg b/inkstitch/bin/tcl/msgs/en_hk.msg new file mode 100644 index 0000000..8b33bc0 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_hk.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_HK AM "AM" + ::msgcat::mcset en_HK PM "PM" + ::msgcat::mcset en_HK DATE_FORMAT "%B %e, %Y" + ::msgcat::mcset en_HK TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_HK DATE_TIME_FORMAT "%B %e, %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_ie.msg b/inkstitch/bin/tcl/msgs/en_ie.msg new file mode 100644 index 0000000..ba621cf --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_ie.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_IE DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_IE TIME_FORMAT "%T" + ::msgcat::mcset en_IE TIME_FORMAT_12 "%T" + ::msgcat::mcset en_IE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_in.msg b/inkstitch/bin/tcl/msgs/en_in.msg new file mode 100644 index 0000000..a1f155d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_in.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_IN AM "AM" + ::msgcat::mcset en_IN PM "PM" + ::msgcat::mcset en_IN DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_IN TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_IN DATE_TIME_FORMAT "%d %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_nz.msg b/inkstitch/bin/tcl/msgs/en_nz.msg new file mode 100644 index 0000000..b419017 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_nz.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_NZ DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset en_NZ TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_NZ TIME_FORMAT_12 "%I:%M:%S %P %z" + ::msgcat::mcset en_NZ DATE_TIME_FORMAT "%e/%m/%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_ph.msg b/inkstitch/bin/tcl/msgs/en_ph.msg new file mode 100644 index 0000000..682666d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_ph.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_PH AM "AM" + ::msgcat::mcset en_PH PM "PM" + ::msgcat::mcset en_PH DATE_FORMAT "%B %e, %Y" + ::msgcat::mcset en_PH TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_PH DATE_TIME_FORMAT "%B %e, %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_sg.msg b/inkstitch/bin/tcl/msgs/en_sg.msg new file mode 100644 index 0000000..4dc5b1d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_sg.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_SG DATE_FORMAT "%d %b %Y" + ::msgcat::mcset en_SG TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset en_SG DATE_TIME_FORMAT "%d %b %Y %P %I:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_za.msg b/inkstitch/bin/tcl/msgs/en_za.msg new file mode 100644 index 0000000..fe43797 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_za.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_ZA DATE_FORMAT "%Y/%m/%d" + ::msgcat::mcset en_ZA TIME_FORMAT_12 "%I:%M:%S" + ::msgcat::mcset en_ZA DATE_TIME_FORMAT "%Y/%m/%d %I:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/en_zw.msg b/inkstitch/bin/tcl/msgs/en_zw.msg new file mode 100644 index 0000000..2a5804f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/en_zw.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_ZW DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_ZW TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_ZW DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/eo.msg b/inkstitch/bin/tcl/msgs/eo.msg new file mode 100644 index 0000000..1d2a24f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/eo.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eo DAYS_OF_WEEK_ABBREV [list \ + "di"\ + "lu"\ + "ma"\ + "me"\ + "\u0135a"\ + "ve"\ + "sa"] + ::msgcat::mcset eo DAYS_OF_WEEK_FULL [list \ + "diman\u0109o"\ + "lundo"\ + "mardo"\ + "merkredo"\ + "\u0135a\u016ddo"\ + "vendredo"\ + "sabato"] + ::msgcat::mcset eo MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "a\u016dg"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset eo MONTHS_FULL [list \ + "januaro"\ + "februaro"\ + "marto"\ + "aprilo"\ + "majo"\ + "junio"\ + "julio"\ + "a\u016dgusto"\ + "septembro"\ + "oktobro"\ + "novembro"\ + "decembro"\ + ""] + ::msgcat::mcset eo BCE "aK" + ::msgcat::mcset eo CE "pK" + ::msgcat::mcset eo AM "atm" + ::msgcat::mcset eo PM "ptm" + ::msgcat::mcset eo DATE_FORMAT "%Y-%b-%d" + ::msgcat::mcset eo TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset eo DATE_TIME_FORMAT "%Y-%b-%d %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/es.msg b/inkstitch/bin/tcl/msgs/es.msg new file mode 100644 index 0000000..a24f0a1 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es DAYS_OF_WEEK_ABBREV [list \ + "dom"\ + "lun"\ + "mar"\ + "mi\u00e9"\ + "jue"\ + "vie"\ + "s\u00e1b"] + ::msgcat::mcset es DAYS_OF_WEEK_FULL [list \ + "domingo"\ + "lunes"\ + "martes"\ + "mi\u00e9rcoles"\ + "jueves"\ + "viernes"\ + "s\u00e1bado"] + ::msgcat::mcset es MONTHS_ABBREV [list \ + "ene"\ + "feb"\ + "mar"\ + "abr"\ + "may"\ + "jun"\ + "jul"\ + "ago"\ + "sep"\ + "oct"\ + "nov"\ + "dic"\ + ""] + ::msgcat::mcset es MONTHS_FULL [list \ + "enero"\ + "febrero"\ + "marzo"\ + "abril"\ + "mayo"\ + "junio"\ + "julio"\ + "agosto"\ + "septiembre"\ + "octubre"\ + "noviembre"\ + "diciembre"\ + ""] + ::msgcat::mcset es BCE "a.C." + ::msgcat::mcset es CE "d.C." + ::msgcat::mcset es DATE_FORMAT "%e de %B de %Y" + ::msgcat::mcset es TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset es DATE_TIME_FORMAT "%e de %B de %Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_ar.msg b/inkstitch/bin/tcl/msgs/es_ar.msg new file mode 100644 index 0000000..7d35027 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_ar.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_AR DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_AR TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset es_AR DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_bo.msg b/inkstitch/bin/tcl/msgs/es_bo.msg new file mode 100644 index 0000000..498ad0d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_bo.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_BO DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset es_BO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_BO DATE_TIME_FORMAT "%d-%m-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_cl.msg b/inkstitch/bin/tcl/msgs/es_cl.msg new file mode 100644 index 0000000..31d465c --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_cl.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CL DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset es_CL TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CL DATE_TIME_FORMAT "%d-%m-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_co.msg b/inkstitch/bin/tcl/msgs/es_co.msg new file mode 100644 index 0000000..77e57f0 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_co.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CO DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_CO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CO DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_cr.msg b/inkstitch/bin/tcl/msgs/es_cr.msg new file mode 100644 index 0000000..7a652fa --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_cr.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CR DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_CR TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CR DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_do.msg b/inkstitch/bin/tcl/msgs/es_do.msg new file mode 100644 index 0000000..0e283da --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_do.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_DO DATE_FORMAT "%m/%d/%Y" + ::msgcat::mcset es_DO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_DO DATE_TIME_FORMAT "%m/%d/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_ec.msg b/inkstitch/bin/tcl/msgs/es_ec.msg new file mode 100644 index 0000000..9e921e0 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_ec.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_EC DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_EC TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_EC DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_gt.msg b/inkstitch/bin/tcl/msgs/es_gt.msg new file mode 100644 index 0000000..ecd6faf --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_gt.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_GT DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_GT TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_GT DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_hn.msg b/inkstitch/bin/tcl/msgs/es_hn.msg new file mode 100644 index 0000000..a758ca2 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_hn.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_HN DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_HN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_HN DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_mx.msg b/inkstitch/bin/tcl/msgs/es_mx.msg new file mode 100644 index 0000000..7cfb545 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_mx.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_MX DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_MX TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_MX DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_ni.msg b/inkstitch/bin/tcl/msgs/es_ni.msg new file mode 100644 index 0000000..7c39495 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_ni.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_NI DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_NI TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_NI DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_pa.msg b/inkstitch/bin/tcl/msgs/es_pa.msg new file mode 100644 index 0000000..cecacdc --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_pa.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PA DATE_FORMAT "%m/%d/%Y" + ::msgcat::mcset es_PA TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PA DATE_TIME_FORMAT "%m/%d/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_pe.msg b/inkstitch/bin/tcl/msgs/es_pe.msg new file mode 100644 index 0000000..9f90595 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_pe.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PE DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_PE TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PE DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_pr.msg b/inkstitch/bin/tcl/msgs/es_pr.msg new file mode 100644 index 0000000..8511b12 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_pr.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PR DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_PR TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PR DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_py.msg b/inkstitch/bin/tcl/msgs/es_py.msg new file mode 100644 index 0000000..aa93d36 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_py.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PY DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_PY TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PY DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_sv.msg b/inkstitch/bin/tcl/msgs/es_sv.msg new file mode 100644 index 0000000..fc7954d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_sv.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_SV DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_SV TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_SV DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_uy.msg b/inkstitch/bin/tcl/msgs/es_uy.msg new file mode 100644 index 0000000..b33525c --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_uy.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_UY DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_UY TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_UY DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/es_ve.msg b/inkstitch/bin/tcl/msgs/es_ve.msg new file mode 100644 index 0000000..7c2a7b0 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/es_ve.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_VE DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_VE TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_VE DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/et.msg b/inkstitch/bin/tcl/msgs/et.msg new file mode 100644 index 0000000..8d32e9e --- /dev/null +++ b/inkstitch/bin/tcl/msgs/et.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset et DAYS_OF_WEEK_ABBREV [list \ + "P"\ + "E"\ + "T"\ + "K"\ + "N"\ + "R"\ + "L"] + ::msgcat::mcset et DAYS_OF_WEEK_FULL [list \ + "p\u00fchap\u00e4ev"\ + "esmasp\u00e4ev"\ + "teisip\u00e4ev"\ + "kolmap\u00e4ev"\ + "neljap\u00e4ev"\ + "reede"\ + "laup\u00e4ev"] + ::msgcat::mcset et MONTHS_ABBREV [list \ + "Jaan"\ + "Veebr"\ + "M\u00e4rts"\ + "Apr"\ + "Mai"\ + "Juuni"\ + "Juuli"\ + "Aug"\ + "Sept"\ + "Okt"\ + "Nov"\ + "Dets"\ + ""] + ::msgcat::mcset et MONTHS_FULL [list \ + "Jaanuar"\ + "Veebruar"\ + "M\u00e4rts"\ + "Aprill"\ + "Mai"\ + "Juuni"\ + "Juuli"\ + "August"\ + "September"\ + "Oktoober"\ + "November"\ + "Detsember"\ + ""] + ::msgcat::mcset et BCE "e.m.a." + ::msgcat::mcset et CE "m.a.j." + ::msgcat::mcset et DATE_FORMAT "%e-%m-%Y" + ::msgcat::mcset et TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset et DATE_TIME_FORMAT "%e-%m-%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/eu.msg b/inkstitch/bin/tcl/msgs/eu.msg new file mode 100644 index 0000000..cf708b6 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/eu.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eu DAYS_OF_WEEK_ABBREV [list \ + "igandea"\ + "astelehena"\ + "asteartea"\ + "asteazkena"\ + "osteguna"\ + "ostirala"\ + "larunbata"] + ::msgcat::mcset eu DAYS_OF_WEEK_FULL [list \ + "igandea"\ + "astelehena"\ + "asteartea"\ + "asteazkena"\ + "osteguna"\ + "ostirala"\ + "larunbata"] + ::msgcat::mcset eu MONTHS_ABBREV [list \ + "urt"\ + "ots"\ + "mar"\ + "api"\ + "mai"\ + "eka"\ + "uzt"\ + "abu"\ + "ira"\ + "urr"\ + "aza"\ + "abe"\ + ""] + ::msgcat::mcset eu MONTHS_FULL [list \ + "urtarrila"\ + "otsaila"\ + "martxoa"\ + "apirila"\ + "maiatza"\ + "ekaina"\ + "uztaila"\ + "abuztua"\ + "iraila"\ + "urria"\ + "azaroa"\ + "abendua"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/eu_es.msg b/inkstitch/bin/tcl/msgs/eu_es.msg new file mode 100644 index 0000000..2694418 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/eu_es.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eu_ES DATE_FORMAT "%a, %Yeko %bren %da" + ::msgcat::mcset eu_ES TIME_FORMAT "%T" + ::msgcat::mcset eu_ES TIME_FORMAT_12 "%T" + ::msgcat::mcset eu_ES DATE_TIME_FORMAT "%y-%m-%d %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/fa.msg b/inkstitch/bin/tcl/msgs/fa.msg new file mode 100644 index 0000000..89b2f90 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fa.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa DAYS_OF_WEEK_ABBREV [list \ + "\u06cc\u2214"\ + "\u062f\u2214"\ + "\u0633\u2214"\ + "\u0686\u2214"\ + "\u067e\u2214"\ + "\u062c\u2214"\ + "\u0634\u2214"] + ::msgcat::mcset fa DAYS_OF_WEEK_FULL [list \ + "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\ + "\u062f\u0648\u0634\u0646\u0628\u0647"\ + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\ + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\ + "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\ + "\u062c\u0645\u0639\u0647"\ + "\u0634\u0646\u0628\u0647"] + ::msgcat::mcset fa MONTHS_ABBREV [list \ + "\u0698\u0627\u0646"\ + "\u0641\u0648\u0631"\ + "\u0645\u0627\u0631"\ + "\u0622\u0648\u0631"\ + "\u0645\u0640\u0647"\ + "\u0698\u0648\u0646"\ + "\u0698\u0648\u06cc"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a"\ + "\u0627\u0643\u062a"\ + "\u0646\u0648\u0627"\ + "\u062f\u0633\u0627"\ + ""] + ::msgcat::mcset fa MONTHS_FULL [list \ + "\u0698\u0627\u0646\u0648\u06cc\u0647"\ + "\u0641\u0648\u0631\u0648\u06cc\u0647"\ + "\u0645\u0627\u0631\u0633"\ + "\u0622\u0648\u0631\u06cc\u0644"\ + "\u0645\u0647"\ + "\u0698\u0648\u0626\u0646"\ + "\u0698\u0648\u0626\u06cc\u0647"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\ + "\u0627\u0643\u062a\u0628\u0631"\ + "\u0646\u0648\u0627\u0645\u0628\u0631"\ + "\u062f\u0633\u0627\u0645\u0628\u0631"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/fa_in.msg b/inkstitch/bin/tcl/msgs/fa_in.msg new file mode 100644 index 0000000..adc9e91 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fa_in.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa_IN DAYS_OF_WEEK_ABBREV [list \ + "\u06cc\u2214"\ + "\u062f\u2214"\ + "\u0633\u2214"\ + "\u0686\u2214"\ + "\u067e\u2214"\ + "\u062c\u2214"\ + "\u0634\u2214"] + ::msgcat::mcset fa_IN DAYS_OF_WEEK_FULL [list \ + "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\ + "\u062f\u0648\u0634\u0646\u0628\u0647"\ + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\ + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\ + "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\ + "\u062c\u0645\u0639\u0647"\ + "\u0634\u0646\u0628\u0647"] + ::msgcat::mcset fa_IN MONTHS_ABBREV [list \ + "\u0698\u0627\u0646"\ + "\u0641\u0648\u0631"\ + "\u0645\u0627\u0631"\ + "\u0622\u0648\u0631"\ + "\u0645\u0640\u0647"\ + "\u0698\u0648\u0646"\ + "\u0698\u0648\u06cc"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a"\ + "\u0627\u0643\u062a"\ + "\u0646\u0648\u0627"\ + "\u062f\u0633\u0627"\ + ""] + ::msgcat::mcset fa_IN MONTHS_FULL [list \ + "\u0698\u0627\u0646\u0648\u06cc\u0647"\ + "\u0641\u0648\u0631\u0648\u06cc\u0647"\ + "\u0645\u0627\u0631\u0633"\ + "\u0622\u0648\u0631\u06cc\u0644"\ + "\u0645\u0647"\ + "\u0698\u0648\u0626\u0646"\ + "\u0698\u0648\u0626\u06cc\u0647"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\ + "\u0627\u0643\u062a\u0628\u0631"\ + "\u0646\u0648\u0627\u0645\u0628\u0631"\ + "\u062f\u0633\u0627\u0645\u0628\u0631"\ + ""] + ::msgcat::mcset fa_IN AM "\u0635\u0628\u062d" + ::msgcat::mcset fa_IN PM "\u0639\u0635\u0631" + ::msgcat::mcset fa_IN DATE_FORMAT "%A %d %B %Y" + ::msgcat::mcset fa_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset fa_IN DATE_TIME_FORMAT "%A %d %B %Y %I:%M:%S %z %z" +} diff --git a/inkstitch/bin/tcl/msgs/fa_ir.msg b/inkstitch/bin/tcl/msgs/fa_ir.msg new file mode 100644 index 0000000..597ce9d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fa_ir.msg @@ -0,0 +1,9 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa_IR AM "\u0635\u0628\u062d" + ::msgcat::mcset fa_IR PM "\u0639\u0635\u0631" + ::msgcat::mcset fa_IR DATE_FORMAT "%d\u2044%m\u2044%Y" + ::msgcat::mcset fa_IR TIME_FORMAT "%S:%M:%H" + ::msgcat::mcset fa_IR TIME_FORMAT_12 "%S:%M:%l %P" + ::msgcat::mcset fa_IR DATE_TIME_FORMAT "%d\u2044%m\u2044%Y %S:%M:%H %z" +} diff --git a/inkstitch/bin/tcl/msgs/fi.msg b/inkstitch/bin/tcl/msgs/fi.msg new file mode 100644 index 0000000..acabba0 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fi.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fi DAYS_OF_WEEK_ABBREV [list \ + "su"\ + "ma"\ + "ti"\ + "ke"\ + "to"\ + "pe"\ + "la"] + ::msgcat::mcset fi DAYS_OF_WEEK_FULL [list \ + "sunnuntai"\ + "maanantai"\ + "tiistai"\ + "keskiviikko"\ + "torstai"\ + "perjantai"\ + "lauantai"] + ::msgcat::mcset fi MONTHS_ABBREV [list \ + "tammi"\ + "helmi"\ + "maalis"\ + "huhti"\ + "touko"\ + "kes\u00e4"\ + "hein\u00e4"\ + "elo"\ + "syys"\ + "loka"\ + "marras"\ + "joulu"\ + ""] + ::msgcat::mcset fi MONTHS_FULL [list \ + "tammikuu"\ + "helmikuu"\ + "maaliskuu"\ + "huhtikuu"\ + "toukokuu"\ + "kes\u00e4kuu"\ + "hein\u00e4kuu"\ + "elokuu"\ + "syyskuu"\ + "lokakuu"\ + "marraskuu"\ + "joulukuu"\ + ""] + ::msgcat::mcset fi DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset fi TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset fi DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/fo.msg b/inkstitch/bin/tcl/msgs/fo.msg new file mode 100644 index 0000000..4696e62 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fo.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fo DAYS_OF_WEEK_ABBREV [list \ + "sun"\ + "m\u00e1n"\ + "t\u00fds"\ + "mik"\ + "h\u00f3s"\ + "fr\u00ed"\ + "ley"] + ::msgcat::mcset fo DAYS_OF_WEEK_FULL [list \ + "sunnudagur"\ + "m\u00e1nadagur"\ + "t\u00fdsdagur"\ + "mikudagur"\ + "h\u00f3sdagur"\ + "fr\u00edggjadagur"\ + "leygardagur"] + ::msgcat::mcset fo MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset fo MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "apr\u00edl"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/fo_fo.msg b/inkstitch/bin/tcl/msgs/fo_fo.msg new file mode 100644 index 0000000..2392b8e --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fo_fo.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fo_FO DATE_FORMAT "%d/%m-%Y" + ::msgcat::mcset fo_FO TIME_FORMAT "%T" + ::msgcat::mcset fo_FO TIME_FORMAT_12 "%T" + ::msgcat::mcset fo_FO DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/fr.msg b/inkstitch/bin/tcl/msgs/fr.msg new file mode 100644 index 0000000..55b19bf --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fr.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr DAYS_OF_WEEK_ABBREV [list \ + "dim."\ + "lun."\ + "mar."\ + "mer."\ + "jeu."\ + "ven."\ + "sam."] + ::msgcat::mcset fr DAYS_OF_WEEK_FULL [list \ + "dimanche"\ + "lundi"\ + "mardi"\ + "mercredi"\ + "jeudi"\ + "vendredi"\ + "samedi"] + ::msgcat::mcset fr MONTHS_ABBREV [list \ + "janv."\ + "f\u00e9vr."\ + "mars"\ + "avr."\ + "mai"\ + "juin"\ + "juil."\ + "ao\u00fbt"\ + "sept."\ + "oct."\ + "nov."\ + "d\u00e9c."\ + ""] + ::msgcat::mcset fr MONTHS_FULL [list \ + "janvier"\ + "f\u00e9vrier"\ + "mars"\ + "avril"\ + "mai"\ + "juin"\ + "juillet"\ + "ao\u00fbt"\ + "septembre"\ + "octobre"\ + "novembre"\ + "d\u00e9cembre"\ + ""] + ::msgcat::mcset fr BCE "av. J.-C." + ::msgcat::mcset fr CE "ap. J.-C." + ::msgcat::mcset fr DATE_FORMAT "%e %B %Y" + ::msgcat::mcset fr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset fr DATE_TIME_FORMAT "%e %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/fr_be.msg b/inkstitch/bin/tcl/msgs/fr_be.msg new file mode 100644 index 0000000..cdb13bd --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fr_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_BE DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset fr_BE TIME_FORMAT "%T" + ::msgcat::mcset fr_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/fr_ca.msg b/inkstitch/bin/tcl/msgs/fr_ca.msg new file mode 100644 index 0000000..00ccfff --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fr_ca.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_CA DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset fr_CA TIME_FORMAT "%T" + ::msgcat::mcset fr_CA TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_CA DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/fr_ch.msg b/inkstitch/bin/tcl/msgs/fr_ch.msg new file mode 100644 index 0000000..7e2bac7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/fr_ch.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_CH DATE_FORMAT "%d. %m. %y" + ::msgcat::mcset fr_CH TIME_FORMAT "%T" + ::msgcat::mcset fr_CH TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_CH DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/ga.msg b/inkstitch/bin/tcl/msgs/ga.msg new file mode 100644 index 0000000..6edf13a --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ga.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ga DAYS_OF_WEEK_ABBREV [list \ + "Domh"\ + "Luan"\ + "M\u00e1irt"\ + "C\u00e9ad"\ + "D\u00e9ar"\ + "Aoine"\ + "Sath"] + ::msgcat::mcset ga DAYS_OF_WEEK_FULL [list \ + "D\u00e9 Domhnaigh"\ + "D\u00e9 Luain"\ + "D\u00e9 M\u00e1irt"\ + "D\u00e9 C\u00e9adaoin"\ + "D\u00e9ardaoin"\ + "D\u00e9 hAoine"\ + "D\u00e9 Sathairn"] + ::msgcat::mcset ga MONTHS_ABBREV [list \ + "Ean"\ + "Feabh"\ + "M\u00e1rta"\ + "Aib"\ + "Beal"\ + "Meith"\ + "I\u00fail"\ + "L\u00fan"\ + "MF\u00f3mh"\ + "DF\u00f3mh"\ + "Samh"\ + "Noll"\ + ""] + ::msgcat::mcset ga MONTHS_FULL [list \ + "Ean\u00e1ir"\ + "Feabhra"\ + "M\u00e1rta"\ + "Aibre\u00e1n"\ + "M\u00ed na Bealtaine"\ + "Meith"\ + "I\u00fail"\ + "L\u00fanasa"\ + "Me\u00e1n F\u00f3mhair"\ + "Deireadh F\u00f3mhair"\ + "M\u00ed na Samhna"\ + "M\u00ed na Nollag"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/ga_ie.msg b/inkstitch/bin/tcl/msgs/ga_ie.msg new file mode 100644 index 0000000..b6acbbc --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ga_ie.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ga_IE DATE_FORMAT "%d.%m.%y" + ::msgcat::mcset ga_IE TIME_FORMAT "%T" + ::msgcat::mcset ga_IE TIME_FORMAT_12 "%T" + ::msgcat::mcset ga_IE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/gl.msg b/inkstitch/bin/tcl/msgs/gl.msg new file mode 100644 index 0000000..4b869e8 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/gl.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gl DAYS_OF_WEEK_ABBREV [list \ + "Dom"\ + "Lun"\ + "Mar"\ + "M\u00e9r"\ + "Xov"\ + "Ven"\ + "S\u00e1b"] + ::msgcat::mcset gl DAYS_OF_WEEK_FULL [list \ + "Domingo"\ + "Luns"\ + "Martes"\ + "M\u00e9rcores"\ + "Xoves"\ + "Venres"\ + "S\u00e1bado"] + ::msgcat::mcset gl MONTHS_ABBREV [list \ + "Xan"\ + "Feb"\ + "Mar"\ + "Abr"\ + "Mai"\ + "Xu\u00f1"\ + "Xul"\ + "Ago"\ + "Set"\ + "Out"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset gl MONTHS_FULL [list \ + "Xaneiro"\ + "Febreiro"\ + "Marzo"\ + "Abril"\ + "Maio"\ + "Xu\u00f1o"\ + "Xullo"\ + "Agosto"\ + "Setembro"\ + "Outubro"\ + "Novembro"\ + "Decembro"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/gl_es.msg b/inkstitch/bin/tcl/msgs/gl_es.msg new file mode 100644 index 0000000..d4ed270 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/gl_es.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gl_ES DATE_FORMAT "%d %B %Y" + ::msgcat::mcset gl_ES TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset gl_ES DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/gv.msg b/inkstitch/bin/tcl/msgs/gv.msg new file mode 100644 index 0000000..7d332ad --- /dev/null +++ b/inkstitch/bin/tcl/msgs/gv.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gv DAYS_OF_WEEK_ABBREV [list \ + "Jed"\ + "Jel"\ + "Jem"\ + "Jerc"\ + "Jerd"\ + "Jeh"\ + "Jes"] + ::msgcat::mcset gv DAYS_OF_WEEK_FULL [list \ + "Jedoonee"\ + "Jelhein"\ + "Jemayrt"\ + "Jercean"\ + "Jerdein"\ + "Jeheiney"\ + "Jesarn"] + ::msgcat::mcset gv MONTHS_ABBREV [list \ + "J-guer"\ + "T-arree"\ + "Mayrnt"\ + "Avrril"\ + "Boaldyn"\ + "M-souree"\ + "J-souree"\ + "Luanistyn"\ + "M-fouyir"\ + "J-fouyir"\ + "M.Houney"\ + "M.Nollick"\ + ""] + ::msgcat::mcset gv MONTHS_FULL [list \ + "Jerrey-geuree"\ + "Toshiaght-arree"\ + "Mayrnt"\ + "Averil"\ + "Boaldyn"\ + "Mean-souree"\ + "Jerrey-souree"\ + "Luanistyn"\ + "Mean-fouyir"\ + "Jerrey-fouyir"\ + "Mee Houney"\ + "Mee ny Nollick"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/gv_gb.msg b/inkstitch/bin/tcl/msgs/gv_gb.msg new file mode 100644 index 0000000..5e96e6f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/gv_gb.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gv_GB DATE_FORMAT "%d %B %Y" + ::msgcat::mcset gv_GB TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset gv_GB DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/he.msg b/inkstitch/bin/tcl/msgs/he.msg new file mode 100644 index 0000000..4fd921d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/he.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset he DAYS_OF_WEEK_ABBREV [list \ + "\u05d0"\ + "\u05d1"\ + "\u05d2"\ + "\u05d3"\ + "\u05d4"\ + "\u05d5"\ + "\u05e9"] + ::msgcat::mcset he DAYS_OF_WEEK_FULL [list \ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df"\ + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9"\ + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9"\ + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9"\ + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9"\ + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9"\ + "\u05e9\u05d1\u05ea"] + ::msgcat::mcset he MONTHS_ABBREV [list \ + "\u05d9\u05e0\u05d5"\ + "\u05e4\u05d1\u05e8"\ + "\u05de\u05e8\u05e5"\ + "\u05d0\u05e4\u05e8"\ + "\u05de\u05d0\u05d9"\ + "\u05d9\u05d5\u05e0"\ + "\u05d9\u05d5\u05dc"\ + "\u05d0\u05d5\u05d2"\ + "\u05e1\u05e4\u05d8"\ + "\u05d0\u05d5\u05e7"\ + "\u05e0\u05d5\u05d1"\ + "\u05d3\u05e6\u05de"\ + ""] + ::msgcat::mcset he MONTHS_FULL [list \ + "\u05d9\u05e0\u05d5\u05d0\u05e8"\ + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8"\ + "\u05de\u05e8\u05e5"\ + "\u05d0\u05e4\u05e8\u05d9\u05dc"\ + "\u05de\u05d0\u05d9"\ + "\u05d9\u05d5\u05e0\u05d9"\ + "\u05d9\u05d5\u05dc\u05d9"\ + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8"\ + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8"\ + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8"\ + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8"\ + "\u05d3\u05e6\u05de\u05d1\u05e8"\ + ""] + ::msgcat::mcset he BCE "\u05dc\u05e1\u05d4\u0022\u05e0" + ::msgcat::mcset he CE "\u05dc\u05e4\u05e1\u05d4\u0022\u05e0" + ::msgcat::mcset he DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset he TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset he DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/hi.msg b/inkstitch/bin/tcl/msgs/hi.msg new file mode 100644 index 0000000..50c9fb8 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/hi.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hi DAYS_OF_WEEK_FULL [list \ + "\u0930\u0935\u093f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930"\ + "\u092c\u0941\u0927\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset hi MONTHS_ABBREV [list \ + "\u091c\u0928\u0935\u0930\u0940"\ + "\u092b\u093c\u0930\u0935\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u0905\u092a\u094d\u0930\u0947\u0932"\ + "\u092e\u0908"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u093e\u0908"\ + "\u0905\u0917\u0938\u094d\u0924"\ + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\ + "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\ + "\u0928\u0935\u092e\u094d\u092c\u0930"\ + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"] + ::msgcat::mcset hi MONTHS_FULL [list \ + "\u091c\u0928\u0935\u0930\u0940"\ + "\u092b\u093c\u0930\u0935\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u0905\u092a\u094d\u0930\u0947\u0932"\ + "\u092e\u0908"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u093e\u0908"\ + "\u0905\u0917\u0938\u094d\u0924"\ + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\ + "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\ + "\u0928\u0935\u092e\u094d\u092c\u0930"\ + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"] + ::msgcat::mcset hi AM "\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935" + ::msgcat::mcset hi PM "." +} diff --git a/inkstitch/bin/tcl/msgs/hi_in.msg b/inkstitch/bin/tcl/msgs/hi_in.msg new file mode 100644 index 0000000..239793f --- /dev/null +++ b/inkstitch/bin/tcl/msgs/hi_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hi_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset hi_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset hi_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/hr.msg b/inkstitch/bin/tcl/msgs/hr.msg new file mode 100644 index 0000000..cec145b --- /dev/null +++ b/inkstitch/bin/tcl/msgs/hr.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hr DAYS_OF_WEEK_ABBREV [list \ + "ned"\ + "pon"\ + "uto"\ + "sri"\ + "\u010det"\ + "pet"\ + "sub"] + ::msgcat::mcset hr DAYS_OF_WEEK_FULL [list \ + "nedjelja"\ + "ponedjeljak"\ + "utorak"\ + "srijeda"\ + "\u010detvrtak"\ + "petak"\ + "subota"] + ::msgcat::mcset hr MONTHS_ABBREV [list \ + "sij"\ + "vel"\ + "o\u017eu"\ + "tra"\ + "svi"\ + "lip"\ + "srp"\ + "kol"\ + "ruj"\ + "lis"\ + "stu"\ + "pro"\ + ""] + ::msgcat::mcset hr MONTHS_FULL [list \ + "sije\u010danj"\ + "velja\u010da"\ + "o\u017eujak"\ + "travanj"\ + "svibanj"\ + "lipanj"\ + "srpanj"\ + "kolovoz"\ + "rujan"\ + "listopad"\ + "studeni"\ + "prosinac"\ + ""] + ::msgcat::mcset hr DATE_FORMAT "%Y.%m.%d" + ::msgcat::mcset hr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset hr DATE_TIME_FORMAT "%Y.%m.%d %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/hu.msg b/inkstitch/bin/tcl/msgs/hu.msg new file mode 100644 index 0000000..e5e68d9 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/hu.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hu DAYS_OF_WEEK_ABBREV [list \ + "V"\ + "H"\ + "K"\ + "Sze"\ + "Cs"\ + "P"\ + "Szo"] + ::msgcat::mcset hu DAYS_OF_WEEK_FULL [list \ + "vas\u00e1rnap"\ + "h\u00e9tf\u0151"\ + "kedd"\ + "szerda"\ + "cs\u00fct\u00f6rt\u00f6k"\ + "p\u00e9ntek"\ + "szombat"] + ::msgcat::mcset hu MONTHS_ABBREV [list \ + "jan."\ + "febr."\ + "m\u00e1rc."\ + "\u00e1pr."\ + "m\u00e1j."\ + "j\u00fan."\ + "j\u00fal."\ + "aug."\ + "szept."\ + "okt."\ + "nov."\ + "dec."\ + ""] + ::msgcat::mcset hu MONTHS_FULL [list \ + "janu\u00e1r"\ + "febru\u00e1r"\ + "m\u00e1rcius"\ + "\u00e1prilis"\ + "m\u00e1jus"\ + "j\u00fanius"\ + "j\u00falius"\ + "augusztus"\ + "szeptember"\ + "okt\u00f3ber"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset hu BCE "i.e." + ::msgcat::mcset hu CE "i.u." + ::msgcat::mcset hu AM "DE" + ::msgcat::mcset hu PM "DU" + ::msgcat::mcset hu DATE_FORMAT "%Y.%m.%d." + ::msgcat::mcset hu TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset hu DATE_TIME_FORMAT "%Y.%m.%d. %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/id.msg b/inkstitch/bin/tcl/msgs/id.msg new file mode 100644 index 0000000..17c6bb5 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/id.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset id DAYS_OF_WEEK_ABBREV [list \ + "Min"\ + "Sen"\ + "Sel"\ + "Rab"\ + "Kam"\ + "Jum"\ + "Sab"] + ::msgcat::mcset id DAYS_OF_WEEK_FULL [list \ + "Minggu"\ + "Senin"\ + "Selasa"\ + "Rabu"\ + "Kamis"\ + "Jumat"\ + "Sabtu"] + ::msgcat::mcset id MONTHS_ABBREV [list \ + "Jan"\ + "Peb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Agu"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset id MONTHS_FULL [list \ + "Januari"\ + "Pebruari"\ + "Maret"\ + "April"\ + "Mei"\ + "Juni"\ + "Juli"\ + "Agustus"\ + "September"\ + "Oktober"\ + "November"\ + "Desember"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/id_id.msg b/inkstitch/bin/tcl/msgs/id_id.msg new file mode 100644 index 0000000..bb672c1 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/id_id.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset id_ID DATE_FORMAT "%d %B %Y" + ::msgcat::mcset id_ID TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset id_ID DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/is.msg b/inkstitch/bin/tcl/msgs/is.msg new file mode 100644 index 0000000..adc2d2a --- /dev/null +++ b/inkstitch/bin/tcl/msgs/is.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset is DAYS_OF_WEEK_ABBREV [list \ + "sun."\ + "m\u00e1n."\ + "\u00feri."\ + "mi\u00f0."\ + "fim."\ + "f\u00f6s."\ + "lau."] + ::msgcat::mcset is DAYS_OF_WEEK_FULL [list \ + "sunnudagur"\ + "m\u00e1nudagur"\ + "\u00feri\u00f0judagur"\ + "mi\u00f0vikudagur"\ + "fimmtudagur"\ + "f\u00f6studagur"\ + "laugardagur"] + ::msgcat::mcset is MONTHS_ABBREV [list \ + "jan."\ + "feb."\ + "mar."\ + "apr."\ + "ma\u00ed"\ + "j\u00fan."\ + "j\u00fal."\ + "\u00e1g\u00fa."\ + "sep."\ + "okt."\ + "n\u00f3v."\ + "des."\ + ""] + ::msgcat::mcset is MONTHS_FULL [list \ + "jan\u00faar"\ + "febr\u00faar"\ + "mars"\ + "apr\u00edl"\ + "ma\u00ed"\ + "j\u00fan\u00ed"\ + "j\u00fal\u00ed"\ + "\u00e1g\u00fast"\ + "september"\ + "okt\u00f3ber"\ + "n\u00f3vember"\ + "desember"\ + ""] + ::msgcat::mcset is DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset is TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset is DATE_TIME_FORMAT "%e.%m.%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/it.msg b/inkstitch/bin/tcl/msgs/it.msg new file mode 100644 index 0000000..b641cde --- /dev/null +++ b/inkstitch/bin/tcl/msgs/it.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset it DAYS_OF_WEEK_ABBREV [list \ + "dom"\ + "lun"\ + "mar"\ + "mer"\ + "gio"\ + "ven"\ + "sab"] + ::msgcat::mcset it DAYS_OF_WEEK_FULL [list \ + "domenica"\ + "luned\u00ec"\ + "marted\u00ec"\ + "mercoled\u00ec"\ + "gioved\u00ec"\ + "venerd\u00ec"\ + "sabato"] + ::msgcat::mcset it MONTHS_ABBREV [list \ + "gen"\ + "feb"\ + "mar"\ + "apr"\ + "mag"\ + "giu"\ + "lug"\ + "ago"\ + "set"\ + "ott"\ + "nov"\ + "dic"\ + ""] + ::msgcat::mcset it MONTHS_FULL [list \ + "gennaio"\ + "febbraio"\ + "marzo"\ + "aprile"\ + "maggio"\ + "giugno"\ + "luglio"\ + "agosto"\ + "settembre"\ + "ottobre"\ + "novembre"\ + "dicembre"\ + ""] + ::msgcat::mcset it BCE "aC" + ::msgcat::mcset it CE "dC" + ::msgcat::mcset it AM "m." + ::msgcat::mcset it PM "p." + ::msgcat::mcset it DATE_FORMAT "%d %B %Y" + ::msgcat::mcset it TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset it DATE_TIME_FORMAT "%d %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/it_ch.msg b/inkstitch/bin/tcl/msgs/it_ch.msg new file mode 100644 index 0000000..b36ed36 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/it_ch.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset it_CH DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset it_CH TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset it_CH DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/ja.msg b/inkstitch/bin/tcl/msgs/ja.msg new file mode 100644 index 0000000..2767665 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ja.msg @@ -0,0 +1,44 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ja DAYS_OF_WEEK_ABBREV [list \ + "\u65e5"\ + "\u6708"\ + "\u706b"\ + "\u6c34"\ + "\u6728"\ + "\u91d1"\ + "\u571f"] + ::msgcat::mcset ja DAYS_OF_WEEK_FULL [list \ + "\u65e5\u66dc\u65e5"\ + "\u6708\u66dc\u65e5"\ + "\u706b\u66dc\u65e5"\ + "\u6c34\u66dc\u65e5"\ + "\u6728\u66dc\u65e5"\ + "\u91d1\u66dc\u65e5"\ + "\u571f\u66dc\u65e5"] + ::msgcat::mcset ja MONTHS_FULL [list \ + "1\u6708"\ + "2\u6708"\ + "3\u6708"\ + "4\u6708"\ + "5\u6708"\ + "6\u6708"\ + "7\u6708"\ + "8\u6708"\ + "9\u6708"\ + "10\u6708"\ + "11\u6708"\ + "12\u6708"] + ::msgcat::mcset ja BCE "\u7d00\u5143\u524d" + ::msgcat::mcset ja CE "\u897f\u66a6" + ::msgcat::mcset ja AM "\u5348\u524d" + ::msgcat::mcset ja PM "\u5348\u5f8c" + ::msgcat::mcset ja DATE_FORMAT "%Y/%m/%d" + ::msgcat::mcset ja TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ja TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset ja DATE_TIME_FORMAT "%Y/%m/%d %k:%M:%S %z" + ::msgcat::mcset ja LOCALE_DATE_FORMAT "%EY\u5e74%m\u6708%d\u65e5" + ::msgcat::mcset ja LOCALE_TIME_FORMAT "%H\u6642%M\u5206%S\u79d2" + ::msgcat::mcset ja LOCALE_DATE_TIME_FORMAT "%EY\u5e74%m\u6708%d\u65e5 (%a) %H\u6642%M\u5206%S\u79d2 %z" + ::msgcat::mcset ja LOCALE_ERAS "\u007b-9223372036854775808 \u897f\u66a6 0\u007d \u007b-3061011600 \u660e\u6cbb 1867\u007d \u007b-1812186000 \u5927\u6b63 1911\u007d \u007b-1357635600 \u662d\u548c 1925\u007d \u007b600220800 \u5e73\u6210 1988\u007d" +} diff --git a/inkstitch/bin/tcl/msgs/kl.msg b/inkstitch/bin/tcl/msgs/kl.msg new file mode 100644 index 0000000..d877bfe --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kl.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kl DAYS_OF_WEEK_ABBREV [list \ + "sab"\ + "ata"\ + "mar"\ + "pin"\ + "sis"\ + "tal"\ + "arf"] + ::msgcat::mcset kl DAYS_OF_WEEK_FULL [list \ + "sabaat"\ + "ataasinngorneq"\ + "marlunngorneq"\ + "pingasunngorneq"\ + "sisamanngorneq"\ + "tallimanngorneq"\ + "arfininngorneq"] + ::msgcat::mcset kl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset kl MONTHS_FULL [list \ + "januari"\ + "februari"\ + "martsi"\ + "aprili"\ + "maji"\ + "juni"\ + "juli"\ + "augustusi"\ + "septemberi"\ + "oktoberi"\ + "novemberi"\ + "decemberi"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/kl_gl.msg b/inkstitch/bin/tcl/msgs/kl_gl.msg new file mode 100644 index 0000000..403aa10 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kl_gl.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kl_GL DATE_FORMAT "%d %b %Y" + ::msgcat::mcset kl_GL TIME_FORMAT "%T" + ::msgcat::mcset kl_GL TIME_FORMAT_12 "%T" + ::msgcat::mcset kl_GL DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/ko.msg b/inkstitch/bin/tcl/msgs/ko.msg new file mode 100644 index 0000000..0cd17a1 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ko.msg @@ -0,0 +1,55 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ko DAYS_OF_WEEK_ABBREV [list \ + "\uc77c"\ + "\uc6d4"\ + "\ud654"\ + "\uc218"\ + "\ubaa9"\ + "\uae08"\ + "\ud1a0"] + ::msgcat::mcset ko DAYS_OF_WEEK_FULL [list \ + "\uc77c\uc694\uc77c"\ + "\uc6d4\uc694\uc77c"\ + "\ud654\uc694\uc77c"\ + "\uc218\uc694\uc77c"\ + "\ubaa9\uc694\uc77c"\ + "\uae08\uc694\uc77c"\ + "\ud1a0\uc694\uc77c"] + ::msgcat::mcset ko MONTHS_ABBREV [list \ + "1\uc6d4"\ + "2\uc6d4"\ + "3\uc6d4"\ + "4\uc6d4"\ + "5\uc6d4"\ + "6\uc6d4"\ + "7\uc6d4"\ + "8\uc6d4"\ + "9\uc6d4"\ + "10\uc6d4"\ + "11\uc6d4"\ + "12\uc6d4"\ + ""] + ::msgcat::mcset ko MONTHS_FULL [list \ + "1\uc6d4"\ + "2\uc6d4"\ + "3\uc6d4"\ + "4\uc6d4"\ + "5\uc6d4"\ + "6\uc6d4"\ + "7\uc6d4"\ + "8\uc6d4"\ + "9\uc6d4"\ + "10\uc6d4"\ + "11\uc6d4"\ + "12\uc6d4"\ + ""] + ::msgcat::mcset ko AM "\uc624\uc804" + ::msgcat::mcset ko PM "\uc624\ud6c4" + ::msgcat::mcset ko DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset ko TIME_FORMAT_12 "%P %l:%M:%S" + ::msgcat::mcset ko DATE_TIME_FORMAT "%Y-%m-%d %P %l:%M:%S %z" + ::msgcat::mcset ko LOCALE_DATE_FORMAT "%Y\ub144%B%Od\uc77c" + ::msgcat::mcset ko LOCALE_TIME_FORMAT "%H\uc2dc%M\ubd84%S\ucd08" + ::msgcat::mcset ko LOCALE_DATE_TIME_FORMAT "%A %Y\ub144%B%Od\uc77c%H\uc2dc%M\ubd84%S\ucd08 %z" +} diff --git a/inkstitch/bin/tcl/msgs/ko_kr.msg b/inkstitch/bin/tcl/msgs/ko_kr.msg new file mode 100644 index 0000000..ea5bbd7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ko_kr.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ko_KR BCE "\uae30\uc6d0\uc804" + ::msgcat::mcset ko_KR CE "\uc11c\uae30" + ::msgcat::mcset ko_KR DATE_FORMAT "%Y.%m.%d" + ::msgcat::mcset ko_KR TIME_FORMAT_12 "%P %l:%M:%S" + ::msgcat::mcset ko_KR DATE_TIME_FORMAT "%Y.%m.%d %P %l:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/kok.msg b/inkstitch/bin/tcl/msgs/kok.msg new file mode 100644 index 0000000..0869f20 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kok.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kok DAYS_OF_WEEK_FULL [list \ + "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u093e\u0930"\ + "\u092c\u0941\u0927\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset kok MONTHS_ABBREV [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset kok MONTHS_FULL [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset kok AM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935" + ::msgcat::mcset kok PM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" +} diff --git a/inkstitch/bin/tcl/msgs/kok_in.msg b/inkstitch/bin/tcl/msgs/kok_in.msg new file mode 100644 index 0000000..abcb1ff --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kok_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kok_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset kok_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset kok_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/kw.msg b/inkstitch/bin/tcl/msgs/kw.msg new file mode 100644 index 0000000..aaf79b3 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kw.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kw DAYS_OF_WEEK_ABBREV [list \ + "Sul"\ + "Lun"\ + "Mth"\ + "Mhr"\ + "Yow"\ + "Gwe"\ + "Sad"] + ::msgcat::mcset kw DAYS_OF_WEEK_FULL [list \ + "De Sul"\ + "De Lun"\ + "De Merth"\ + "De Merher"\ + "De Yow"\ + "De Gwener"\ + "De Sadorn"] + ::msgcat::mcset kw MONTHS_ABBREV [list \ + "Gen"\ + "Whe"\ + "Mer"\ + "Ebr"\ + "Me"\ + "Evn"\ + "Gor"\ + "Est"\ + "Gwn"\ + "Hed"\ + "Du"\ + "Kev"\ + ""] + ::msgcat::mcset kw MONTHS_FULL [list \ + "Mys Genver"\ + "Mys Whevrel"\ + "Mys Merth"\ + "Mys Ebrel"\ + "Mys Me"\ + "Mys Evan"\ + "Mys Gortheren"\ + "Mye Est"\ + "Mys Gwyngala"\ + "Mys Hedra"\ + "Mys Du"\ + "Mys Kevardhu"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/kw_gb.msg b/inkstitch/bin/tcl/msgs/kw_gb.msg new file mode 100644 index 0000000..2967680 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/kw_gb.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kw_GB DATE_FORMAT "%d %B %Y" + ::msgcat::mcset kw_GB TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset kw_GB DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/lt.msg b/inkstitch/bin/tcl/msgs/lt.msg new file mode 100644 index 0000000..27b0985 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/lt.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset lt DAYS_OF_WEEK_ABBREV [list \ + "Sk"\ + "Pr"\ + "An"\ + "Tr"\ + "Kt"\ + "Pn"\ + "\u0160t"] + ::msgcat::mcset lt DAYS_OF_WEEK_FULL [list \ + "Sekmadienis"\ + "Pirmadienis"\ + "Antradienis"\ + "Tre\u010diadienis"\ + "Ketvirtadienis"\ + "Penktadienis"\ + "\u0160e\u0161tadienis"] + ::msgcat::mcset lt MONTHS_ABBREV [list \ + "Sau"\ + "Vas"\ + "Kov"\ + "Bal"\ + "Geg"\ + "Bir"\ + "Lie"\ + "Rgp"\ + "Rgs"\ + "Spa"\ + "Lap"\ + "Grd"\ + ""] + ::msgcat::mcset lt MONTHS_FULL [list \ + "Sausio"\ + "Vasario"\ + "Kovo"\ + "Baland\u017eio"\ + "Gegu\u017e\u0117s"\ + "Bir\u017eelio"\ + "Liepos"\ + "Rugpj\u016b\u010dio"\ + "Rugs\u0117jo"\ + "Spalio"\ + "Lapkri\u010dio"\ + "Gruod\u017eio"\ + ""] + ::msgcat::mcset lt BCE "pr.Kr." + ::msgcat::mcset lt CE "po.Kr." + ::msgcat::mcset lt DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset lt TIME_FORMAT "%H.%M.%S" + ::msgcat::mcset lt DATE_TIME_FORMAT "%Y.%m.%e %H.%M.%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/lv.msg b/inkstitch/bin/tcl/msgs/lv.msg new file mode 100644 index 0000000..a037b15 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/lv.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset lv DAYS_OF_WEEK_ABBREV [list \ + "Sv"\ + "P"\ + "O"\ + "T"\ + "C"\ + "Pk"\ + "S"] + ::msgcat::mcset lv DAYS_OF_WEEK_FULL [list \ + "sv\u0113tdiena"\ + "pirmdiena"\ + "otrdiena"\ + "tre\u0161diena"\ + "ceturdien"\ + "piektdiena"\ + "sestdiena"] + ::msgcat::mcset lv MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Maijs"\ + "J\u016bn"\ + "J\u016bl"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset lv MONTHS_FULL [list \ + "janv\u0101ris"\ + "febru\u0101ris"\ + "marts"\ + "apr\u012blis"\ + "maijs"\ + "j\u016bnijs"\ + "j\u016blijs"\ + "augusts"\ + "septembris"\ + "oktobris"\ + "novembris"\ + "decembris"\ + ""] + ::msgcat::mcset lv BCE "pm\u0113" + ::msgcat::mcset lv CE "m\u0113" + ::msgcat::mcset lv DATE_FORMAT "%Y.%e.%m" + ::msgcat::mcset lv TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset lv DATE_TIME_FORMAT "%Y.%e.%m %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/mk.msg b/inkstitch/bin/tcl/msgs/mk.msg new file mode 100644 index 0000000..41cf60d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/mk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mk DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0435\u0434."\ + "\u043f\u043e\u043d."\ + "\u0432\u0442."\ + "\u0441\u0440\u0435."\ + "\u0447\u0435\u0442."\ + "\u043f\u0435\u0442."\ + "\u0441\u0430\u0431."] + ::msgcat::mcset mk DAYS_OF_WEEK_FULL [list \ + "\u043d\u0435\u0434\u0435\u043b\u0430"\ + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\ + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0441\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a"\ + "\u043f\u0435\u0442\u043e\u043a"\ + "\u0441\u0430\u0431\u043e\u0442\u0430"] + ::msgcat::mcset mk MONTHS_ABBREV [list \ + "\u0458\u0430\u043d."\ + "\u0444\u0435\u0432."\ + "\u043c\u0430\u0440."\ + "\u0430\u043f\u0440."\ + "\u043c\u0430\u0458."\ + "\u0458\u0443\u043d."\ + "\u0458\u0443\u043b."\ + "\u0430\u0432\u0433."\ + "\u0441\u0435\u043f\u0442."\ + "\u043e\u043a\u0442."\ + "\u043d\u043e\u0435\u043c."\ + "\u0434\u0435\u043a\u0435\u043c."\ + ""] + ::msgcat::mcset mk MONTHS_FULL [list \ + "\u0458\u0430\u043d\u0443\u0430\u0440\u0438"\ + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\ + "\u043c\u0430\u0440\u0442"\ + "\u0430\u043f\u0440\u0438\u043b"\ + "\u043c\u0430\u0458"\ + "\u0458\u0443\u043d\u0438"\ + "\u0458\u0443\u043b\u0438"\ + "\u0430\u0432\u0433\u0443\u0441\u0442"\ + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\ + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\ + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438"\ + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\ + ""] + ::msgcat::mcset mk BCE "\u043f\u0440.\u043d.\u0435." + ::msgcat::mcset mk CE "\u0430\u0435." + ::msgcat::mcset mk DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset mk TIME_FORMAT "%H:%M:%S %z" + ::msgcat::mcset mk DATE_TIME_FORMAT "%e.%m.%Y %H:%M:%S %z %z" +} diff --git a/inkstitch/bin/tcl/msgs/mr.msg b/inkstitch/bin/tcl/msgs/mr.msg new file mode 100644 index 0000000..cea427a --- /dev/null +++ b/inkstitch/bin/tcl/msgs/mr.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mr DAYS_OF_WEEK_FULL [list \ + "\u0930\u0935\u093f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset mr MONTHS_ABBREV [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset mr MONTHS_FULL [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset mr AM "BC" + ::msgcat::mcset mr PM "AD" +} diff --git a/inkstitch/bin/tcl/msgs/mr_in.msg b/inkstitch/bin/tcl/msgs/mr_in.msg new file mode 100644 index 0000000..1889da5 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/mr_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mr_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset mr_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset mr_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/ms.msg b/inkstitch/bin/tcl/msgs/ms.msg new file mode 100644 index 0000000..e954431 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ms.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ms DAYS_OF_WEEK_ABBREV [list \ + "Aha"\ + "Isn"\ + "Sei"\ + "Rab"\ + "Kha"\ + "Jum"\ + "Sab"] + ::msgcat::mcset ms DAYS_OF_WEEK_FULL [list \ + "Ahad"\ + "Isnin"\ + "Selasa"\ + "Rahu"\ + "Khamis"\ + "Jumaat"\ + "Sabtu"] + ::msgcat::mcset ms MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mac"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Ogos"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dis"\ + ""] + ::msgcat::mcset ms MONTHS_FULL [list \ + "Januari"\ + "Februari"\ + "Mac"\ + "April"\ + "Mei"\ + "Jun"\ + "Julai"\ + "Ogos"\ + "September"\ + "Oktober"\ + "November"\ + "Disember"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/ms_my.msg b/inkstitch/bin/tcl/msgs/ms_my.msg new file mode 100644 index 0000000..c1f93d4 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ms_my.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ms_MY DATE_FORMAT "%A %d %b %Y" + ::msgcat::mcset ms_MY TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset ms_MY DATE_TIME_FORMAT "%A %d %b %Y %I:%M:%S %z %z" +} diff --git a/inkstitch/bin/tcl/msgs/mt.msg b/inkstitch/bin/tcl/msgs/mt.msg new file mode 100644 index 0000000..ddd5446 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/mt.msg @@ -0,0 +1,27 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mt DAYS_OF_WEEK_ABBREV [list \ + "\u0126ad"\ + "Tne"\ + "Tli"\ + "Erb"\ + "\u0126am"\ + "\u0120im"] + ::msgcat::mcset mt MONTHS_ABBREV [list \ + "Jan"\ + "Fra"\ + "Mar"\ + "Apr"\ + "Mej"\ + "\u0120un"\ + "Lul"\ + "Awi"\ + "Set"\ + "Ott"\ + "Nov"] + ::msgcat::mcset mt BCE "QK" + ::msgcat::mcset mt CE "" + ::msgcat::mcset mt DATE_FORMAT "%A, %e ta %B, %Y" + ::msgcat::mcset mt TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset mt DATE_TIME_FORMAT "%A, %e ta %B, %Y %l:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/nb.msg b/inkstitch/bin/tcl/msgs/nb.msg new file mode 100644 index 0000000..90d49a3 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/nb.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nb DAYS_OF_WEEK_ABBREV [list \ + "s\u00f8"\ + "ma"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f8"] + ::msgcat::mcset nb DAYS_OF_WEEK_FULL [list \ + "s\u00f8ndag"\ + "mandag"\ + "tirsdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f8rdag"] + ::msgcat::mcset nb MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset nb MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "april"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] + ::msgcat::mcset nb BCE "f.Kr." + ::msgcat::mcset nb CE "e.Kr." + ::msgcat::mcset nb DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset nb TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset nb DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/nl.msg b/inkstitch/bin/tcl/msgs/nl.msg new file mode 100644 index 0000000..4c5c675 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/nl.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nl DAYS_OF_WEEK_ABBREV [list \ + "zo"\ + "ma"\ + "di"\ + "wo"\ + "do"\ + "vr"\ + "za"] + ::msgcat::mcset nl DAYS_OF_WEEK_FULL [list \ + "zondag"\ + "maandag"\ + "dinsdag"\ + "woensdag"\ + "donderdag"\ + "vrijdag"\ + "zaterdag"] + ::msgcat::mcset nl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mrt"\ + "apr"\ + "mei"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset nl MONTHS_FULL [list \ + "januari"\ + "februari"\ + "maart"\ + "april"\ + "mei"\ + "juni"\ + "juli"\ + "augustus"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset nl DATE_FORMAT "%e %B %Y" + ::msgcat::mcset nl TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset nl DATE_TIME_FORMAT "%e %B %Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/nl_be.msg b/inkstitch/bin/tcl/msgs/nl_be.msg new file mode 100644 index 0000000..4b19670 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/nl_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nl_BE DATE_FORMAT "%d-%m-%y" + ::msgcat::mcset nl_BE TIME_FORMAT "%T" + ::msgcat::mcset nl_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset nl_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/nn.msg b/inkstitch/bin/tcl/msgs/nn.msg new file mode 100644 index 0000000..bd61ac9 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/nn.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nn DAYS_OF_WEEK_ABBREV [list \ + "su"\ + "m\u00e5"\ + "ty"\ + "on"\ + "to"\ + "fr"\ + "lau"] + ::msgcat::mcset nn DAYS_OF_WEEK_FULL [list \ + "sundag"\ + "m\u00e5ndag"\ + "tysdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "laurdag"] + ::msgcat::mcset nn MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset nn MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "april"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] + ::msgcat::mcset nn BCE "f.Kr." + ::msgcat::mcset nn CE "e.Kr." + ::msgcat::mcset nn DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset nn TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset nn DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/pl.msg b/inkstitch/bin/tcl/msgs/pl.msg new file mode 100644 index 0000000..d206f4b --- /dev/null +++ b/inkstitch/bin/tcl/msgs/pl.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pl DAYS_OF_WEEK_ABBREV [list \ + "N"\ + "Pn"\ + "Wt"\ + "\u015ar"\ + "Cz"\ + "Pt"\ + "So"] + ::msgcat::mcset pl DAYS_OF_WEEK_FULL [list \ + "niedziela"\ + "poniedzia\u0142ek"\ + "wtorek"\ + "\u015broda"\ + "czwartek"\ + "pi\u0105tek"\ + "sobota"] + ::msgcat::mcset pl MONTHS_ABBREV [list \ + "sty"\ + "lut"\ + "mar"\ + "kwi"\ + "maj"\ + "cze"\ + "lip"\ + "sie"\ + "wrz"\ + "pa\u017a"\ + "lis"\ + "gru"\ + ""] + ::msgcat::mcset pl MONTHS_FULL [list \ + "stycze\u0144"\ + "luty"\ + "marzec"\ + "kwiecie\u0144"\ + "maj"\ + "czerwiec"\ + "lipiec"\ + "sierpie\u0144"\ + "wrzesie\u0144"\ + "pa\u017adziernik"\ + "listopad"\ + "grudzie\u0144"\ + ""] + ::msgcat::mcset pl BCE "p.n.e." + ::msgcat::mcset pl CE "n.e." + ::msgcat::mcset pl DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset pl TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset pl DATE_TIME_FORMAT "%Y-%m-%d %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/pt.msg b/inkstitch/bin/tcl/msgs/pt.msg new file mode 100644 index 0000000..96fdb35 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/pt.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pt DAYS_OF_WEEK_ABBREV [list \ + "Dom"\ + "Seg"\ + "Ter"\ + "Qua"\ + "Qui"\ + "Sex"\ + "S\u00e1b"] + ::msgcat::mcset pt DAYS_OF_WEEK_FULL [list \ + "Domingo"\ + "Segunda-feira"\ + "Ter\u00e7a-feira"\ + "Quarta-feira"\ + "Quinta-feira"\ + "Sexta-feira"\ + "S\u00e1bado"] + ::msgcat::mcset pt MONTHS_ABBREV [list \ + "Jan"\ + "Fev"\ + "Mar"\ + "Abr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Ago"\ + "Set"\ + "Out"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset pt MONTHS_FULL [list \ + "Janeiro"\ + "Fevereiro"\ + "Mar\u00e7o"\ + "Abril"\ + "Maio"\ + "Junho"\ + "Julho"\ + "Agosto"\ + "Setembro"\ + "Outubro"\ + "Novembro"\ + "Dezembro"\ + ""] + ::msgcat::mcset pt DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset pt TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset pt DATE_TIME_FORMAT "%d-%m-%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/pt_br.msg b/inkstitch/bin/tcl/msgs/pt_br.msg new file mode 100644 index 0000000..8684327 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/pt_br.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pt_BR DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset pt_BR TIME_FORMAT "%T" + ::msgcat::mcset pt_BR TIME_FORMAT_12 "%T" + ::msgcat::mcset pt_BR DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/inkstitch/bin/tcl/msgs/ro.msg b/inkstitch/bin/tcl/msgs/ro.msg new file mode 100644 index 0000000..bdd7c61 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ro.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ro DAYS_OF_WEEK_ABBREV [list \ + "D"\ + "L"\ + "Ma"\ + "Mi"\ + "J"\ + "V"\ + "S"] + ::msgcat::mcset ro DAYS_OF_WEEK_FULL [list \ + "duminic\u0103"\ + "luni"\ + "mar\u0163i"\ + "miercuri"\ + "joi"\ + "vineri"\ + "s\u00eemb\u0103t\u0103"] + ::msgcat::mcset ro MONTHS_ABBREV [list \ + "Ian"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mai"\ + "Iun"\ + "Iul"\ + "Aug"\ + "Sep"\ + "Oct"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset ro MONTHS_FULL [list \ + "ianuarie"\ + "februarie"\ + "martie"\ + "aprilie"\ + "mai"\ + "iunie"\ + "iulie"\ + "august"\ + "septembrie"\ + "octombrie"\ + "noiembrie"\ + "decembrie"\ + ""] + ::msgcat::mcset ro BCE "d.C." + ::msgcat::mcset ro CE "\u00ee.d.C." + ::msgcat::mcset ro DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ro TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset ro DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/ru.msg b/inkstitch/bin/tcl/msgs/ru.msg new file mode 100644 index 0000000..65b075d --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ru.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ru DAYS_OF_WEEK_ABBREV [list \ + "\u0412\u0441"\ + "\u041f\u043d"\ + "\u0412\u0442"\ + "\u0421\u0440"\ + "\u0427\u0442"\ + "\u041f\u0442"\ + "\u0421\u0431"] + ::msgcat::mcset ru DAYS_OF_WEEK_FULL [list \ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435"\ + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a"\ + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0441\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433"\ + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430"\ + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"] + ::msgcat::mcset ru MONTHS_ABBREV [list \ + "\u044f\u043d\u0432"\ + "\u0444\u0435\u0432"\ + "\u043c\u0430\u0440"\ + "\u0430\u043f\u0440"\ + "\u043c\u0430\u0439"\ + "\u0438\u044e\u043d"\ + "\u0438\u044e\u043b"\ + "\u0430\u0432\u0433"\ + "\u0441\u0435\u043d"\ + "\u043e\u043a\u0442"\ + "\u043d\u043e\u044f"\ + "\u0434\u0435\u043a"\ + ""] + ::msgcat::mcset ru MONTHS_FULL [list \ + "\u042f\u043d\u0432\u0430\u0440\u044c"\ + "\u0424\u0435\u0432\u0440\u0430\u043b\u044c"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0435\u043b\u044c"\ + "\u041c\u0430\u0439"\ + "\u0418\u044e\u043d\u044c"\ + "\u0418\u044e\u043b\u044c"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c"\ + "\u041e\u043a\u0442\u044f\u0431\u0440\u044c"\ + "\u041d\u043e\u044f\u0431\u0440\u044c"\ + "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"\ + ""] + ::msgcat::mcset ru BCE "\u0434\u043e \u043d.\u044d." + ::msgcat::mcset ru CE "\u043d.\u044d." + ::msgcat::mcset ru DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ru TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ru DATE_TIME_FORMAT "%d.%m.%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/ru_ua.msg b/inkstitch/bin/tcl/msgs/ru_ua.msg new file mode 100644 index 0000000..6e1f8a8 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ru_ua.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ru_UA DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ru_UA TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ru_UA DATE_TIME_FORMAT "%d.%m.%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sh.msg b/inkstitch/bin/tcl/msgs/sh.msg new file mode 100644 index 0000000..6ee0fc7 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sh.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sh DAYS_OF_WEEK_ABBREV [list \ + "Ned"\ + "Pon"\ + "Uto"\ + "Sre"\ + "\u010cet"\ + "Pet"\ + "Sub"] + ::msgcat::mcset sh DAYS_OF_WEEK_FULL [list \ + "Nedelja"\ + "Ponedeljak"\ + "Utorak"\ + "Sreda"\ + "\u010cetvrtak"\ + "Petak"\ + "Subota"] + ::msgcat::mcset sh MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Maj"\ + "Jun"\ + "Jul"\ + "Avg"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset sh MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "Mart"\ + "April"\ + "Maj"\ + "Juni"\ + "Juli"\ + "Avgust"\ + "Septembar"\ + "Oktobar"\ + "Novembar"\ + "Decembar"\ + ""] + ::msgcat::mcset sh BCE "p. n. e." + ::msgcat::mcset sh CE "n. e." + ::msgcat::mcset sh DATE_FORMAT "%d.%m.%Y." + ::msgcat::mcset sh TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset sh DATE_TIME_FORMAT "%d.%m.%Y. %k.%M.%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sk.msg b/inkstitch/bin/tcl/msgs/sk.msg new file mode 100644 index 0000000..9b2f0aa --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sk DAYS_OF_WEEK_ABBREV [list \ + "Ne"\ + "Po"\ + "Ut"\ + "St"\ + "\u0160t"\ + "Pa"\ + "So"] + ::msgcat::mcset sk DAYS_OF_WEEK_FULL [list \ + "Nede\u013ee"\ + "Pondelok"\ + "Utorok"\ + "Streda"\ + "\u0160tvrtok"\ + "Piatok"\ + "Sobota"] + ::msgcat::mcset sk MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "m\u00e1j"\ + "j\u00fan"\ + "j\u00fal"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sk MONTHS_FULL [list \ + "janu\u00e1r"\ + "febru\u00e1r"\ + "marec"\ + "apr\u00edl"\ + "m\u00e1j"\ + "j\u00fan"\ + "j\u00fal"\ + "august"\ + "september"\ + "okt\u00f3ber"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sk BCE "pred n.l." + ::msgcat::mcset sk CE "n.l." + ::msgcat::mcset sk DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset sk TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset sk DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sl.msg b/inkstitch/bin/tcl/msgs/sl.msg new file mode 100644 index 0000000..42bc509 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sl.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sl DAYS_OF_WEEK_ABBREV [list \ + "Ned"\ + "Pon"\ + "Tor"\ + "Sre"\ + "\u010cet"\ + "Pet"\ + "Sob"] + ::msgcat::mcset sl DAYS_OF_WEEK_FULL [list \ + "Nedelja"\ + "Ponedeljek"\ + "Torek"\ + "Sreda"\ + "\u010cetrtek"\ + "Petek"\ + "Sobota"] + ::msgcat::mcset sl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "avg"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sl MONTHS_FULL [list \ + "januar"\ + "februar"\ + "marec"\ + "april"\ + "maj"\ + "junij"\ + "julij"\ + "avgust"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sl BCE "pr.n.\u0161." + ::msgcat::mcset sl CE "po Kr." + ::msgcat::mcset sl DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset sl TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset sl DATE_TIME_FORMAT "%Y.%m.%e %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sq.msg b/inkstitch/bin/tcl/msgs/sq.msg new file mode 100644 index 0000000..8fb1fce --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sq.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sq DAYS_OF_WEEK_ABBREV [list \ + "Die"\ + "H\u00ebn"\ + "Mar"\ + "M\u00ebr"\ + "Enj"\ + "Pre"\ + "Sht"] + ::msgcat::mcset sq DAYS_OF_WEEK_FULL [list \ + "e diel"\ + "e h\u00ebn\u00eb"\ + "e mart\u00eb"\ + "e m\u00ebrkur\u00eb"\ + "e enjte"\ + "e premte"\ + "e shtun\u00eb"] + ::msgcat::mcset sq MONTHS_ABBREV [list \ + "Jan"\ + "Shk"\ + "Mar"\ + "Pri"\ + "Maj"\ + "Qer"\ + "Kor"\ + "Gsh"\ + "Sht"\ + "Tet"\ + "N\u00ebn"\ + "Dhj"\ + ""] + ::msgcat::mcset sq MONTHS_FULL [list \ + "janar"\ + "shkurt"\ + "mars"\ + "prill"\ + "maj"\ + "qershor"\ + "korrik"\ + "gusht"\ + "shtator"\ + "tetor"\ + "n\u00ebntor"\ + "dhjetor"\ + ""] + ::msgcat::mcset sq BCE "p.e.r." + ::msgcat::mcset sq CE "n.e.r." + ::msgcat::mcset sq AM "PD" + ::msgcat::mcset sq PM "MD" + ::msgcat::mcset sq DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset sq TIME_FORMAT_12 "%l:%M:%S.%P" + ::msgcat::mcset sq DATE_TIME_FORMAT "%Y-%m-%d %l:%M:%S.%P %z" +} diff --git a/inkstitch/bin/tcl/msgs/sr.msg b/inkstitch/bin/tcl/msgs/sr.msg new file mode 100644 index 0000000..7576668 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sr.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sr DAYS_OF_WEEK_ABBREV [list \ + "\u041d\u0435\u0434"\ + "\u041f\u043e\u043d"\ + "\u0423\u0442\u043e"\ + "\u0421\u0440\u0435"\ + "\u0427\u0435\u0442"\ + "\u041f\u0435\u0442"\ + "\u0421\u0443\u0431"] + ::msgcat::mcset sr DAYS_OF_WEEK_FULL [list \ + "\u041d\u0435\u0434\u0435\u0459\u0430"\ + "\u041f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a"\ + "\u0423\u0442\u043e\u0440\u0430\u043a"\ + "\u0421\u0440\u0435\u0434\u0430"\ + "\u0427\u0435\u0442\u0432\u0440\u0442\u0430\u043a"\ + "\u041f\u0435\u0442\u0430\u043a"\ + "\u0421\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset sr MONTHS_ABBREV [list \ + "\u0408\u0430\u043d"\ + "\u0424\u0435\u0431"\ + "\u041c\u0430\u0440"\ + "\u0410\u043f\u0440"\ + "\u041c\u0430\u0458"\ + "\u0408\u0443\u043d"\ + "\u0408\u0443\u043b"\ + "\u0410\u0432\u0433"\ + "\u0421\u0435\u043f"\ + "\u041e\u043a\u0442"\ + "\u041d\u043e\u0432"\ + "\u0414\u0435\u0446"\ + ""] + ::msgcat::mcset sr MONTHS_FULL [list \ + "\u0408\u0430\u043d\u0443\u0430\u0440"\ + "\u0424\u0435\u0431\u0440\u0443\u0430\u0440"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0438\u043b"\ + "\u041c\u0430\u0458"\ + "\u0408\u0443\u043d\u0438"\ + "\u0408\u0443\u043b\u0438"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440"\ + "\u041e\u043a\u0442\u043e\u0431\u0430\u0440"\ + "\u041d\u043e\u0432\u0435\u043c\u0431\u0430\u0440"\ + "\u0414\u0435\u0446\u0435\u043c\u0431\u0430\u0440"\ + ""] + ::msgcat::mcset sr BCE "\u043f. \u043d. \u0435." + ::msgcat::mcset sr CE "\u043d. \u0435" + ::msgcat::mcset sr DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset sr TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset sr DATE_TIME_FORMAT "%Y.%m.%e %k.%M.%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sv.msg b/inkstitch/bin/tcl/msgs/sv.msg new file mode 100644 index 0000000..f7a67c6 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sv.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sv DAYS_OF_WEEK_ABBREV [list \ + "s\u00f6"\ + "m\u00e5"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f6"] + ::msgcat::mcset sv DAYS_OF_WEEK_FULL [list \ + "s\u00f6ndag"\ + "m\u00e5ndag"\ + "tisdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f6rdag"] + ::msgcat::mcset sv MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sv MONTHS_FULL [list \ + "januari"\ + "februari"\ + "mars"\ + "april"\ + "maj"\ + "juni"\ + "juli"\ + "augusti"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sv BCE "f.Kr." + ::msgcat::mcset sv CE "e.Kr." + ::msgcat::mcset sv DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset sv TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset sv DATE_TIME_FORMAT "%Y-%m-%d %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/sw.msg b/inkstitch/bin/tcl/msgs/sw.msg new file mode 100644 index 0000000..b888b43 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/sw.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sw DAYS_OF_WEEK_ABBREV [list \ + "Jpi"\ + "Jtt"\ + "Jnn"\ + "Jtn"\ + "Alh"\ + "Iju"\ + "Jmo"] + ::msgcat::mcset sw DAYS_OF_WEEK_FULL [list \ + "Jumapili"\ + "Jumatatu"\ + "Jumanne"\ + "Jumatano"\ + "Alhamisi"\ + "Ijumaa"\ + "Jumamosi"] + ::msgcat::mcset sw MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Ago"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset sw MONTHS_FULL [list \ + "Januari"\ + "Februari"\ + "Machi"\ + "Aprili"\ + "Mei"\ + "Juni"\ + "Julai"\ + "Agosti"\ + "Septemba"\ + "Oktoba"\ + "Novemba"\ + "Desemba"\ + ""] + ::msgcat::mcset sw BCE "KK" + ::msgcat::mcset sw CE "BK" +} diff --git a/inkstitch/bin/tcl/msgs/ta.msg b/inkstitch/bin/tcl/msgs/ta.msg new file mode 100644 index 0000000..4abb90c --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ta.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ta DAYS_OF_WEEK_FULL [list \ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1"\ + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd"\ + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd"\ + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd"\ + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd"\ + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf"\ + "\u0b9a\u0ba9\u0bbf"] + ::msgcat::mcset ta MONTHS_ABBREV [list \ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\ + "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\ + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\ + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\ + "\u0bae\u0bc7"\ + "\u0b9c\u0bc2\u0ba9\u0bcd"\ + "\u0b9c\u0bc2\u0bb2\u0bc8"\ + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\ + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\ + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"] + ::msgcat::mcset ta MONTHS_FULL [list \ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\ + "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\ + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\ + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\ + "\u0bae\u0bc7"\ + "\u0b9c\u0bc2\u0ba9\u0bcd"\ + "\u0b9c\u0bc2\u0bb2\u0bc8"\ + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\ + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\ + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"] + ::msgcat::mcset ta AM "\u0b95\u0bbf\u0bae\u0bc1" + ::msgcat::mcset ta PM "\u0b95\u0bbf\u0baa\u0bbf" +} diff --git a/inkstitch/bin/tcl/msgs/ta_in.msg b/inkstitch/bin/tcl/msgs/ta_in.msg new file mode 100644 index 0000000..24590ac --- /dev/null +++ b/inkstitch/bin/tcl/msgs/ta_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ta_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset ta_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset ta_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/te.msg b/inkstitch/bin/tcl/msgs/te.msg new file mode 100644 index 0000000..6111473 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/te.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset te DAYS_OF_WEEK_ABBREV [list \ + "\u0c06\u0c26\u0c3f"\ + "\u0c38\u0c4b\u0c2e"\ + "\u0c2e\u0c02\u0c17\u0c33"\ + "\u0c2c\u0c41\u0c27"\ + "\u0c17\u0c41\u0c30\u0c41"\ + "\u0c36\u0c41\u0c15\u0c4d\u0c30"\ + "\u0c36\u0c28\u0c3f"] + ::msgcat::mcset te DAYS_OF_WEEK_FULL [list \ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"] + ::msgcat::mcset te MONTHS_ABBREV [list \ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\ + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\ + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\ + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\ + "\u0c2e\u0c47"\ + "\u0c1c\u0c42\u0c28\u0c4d"\ + "\u0c1c\u0c42\u0c32\u0c48"\ + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\ + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\ + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + ""] + ::msgcat::mcset te MONTHS_FULL [list \ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\ + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\ + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\ + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\ + "\u0c2e\u0c47"\ + "\u0c1c\u0c42\u0c28\u0c4d"\ + "\u0c1c\u0c42\u0c32\u0c48"\ + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\ + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\ + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + ""] +} diff --git a/inkstitch/bin/tcl/msgs/te_in.msg b/inkstitch/bin/tcl/msgs/te_in.msg new file mode 100644 index 0000000..61638b5 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/te_in.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset te_IN AM "\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28" + ::msgcat::mcset te_IN PM "\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28" + ::msgcat::mcset te_IN DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset te_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset te_IN DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/inkstitch/bin/tcl/msgs/th.msg b/inkstitch/bin/tcl/msgs/th.msg new file mode 100644 index 0000000..7486c35 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/th.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset th DAYS_OF_WEEK_ABBREV [list \ + "\u0e2d\u0e32."\ + "\u0e08."\ + "\u0e2d."\ + "\u0e1e."\ + "\u0e1e\u0e24."\ + "\u0e28."\ + "\u0e2a."] + ::msgcat::mcset th DAYS_OF_WEEK_FULL [list \ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23"\ + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18"\ + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35"\ + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"] + ::msgcat::mcset th MONTHS_ABBREV [list \ + "\u0e21.\u0e04."\ + "\u0e01.\u0e1e."\ + "\u0e21\u0e35.\u0e04."\ + "\u0e40\u0e21.\u0e22."\ + "\u0e1e.\u0e04."\ + "\u0e21\u0e34.\u0e22."\ + "\u0e01.\u0e04."\ + "\u0e2a.\u0e04."\ + "\u0e01.\u0e22."\ + "\u0e15.\u0e04."\ + "\u0e1e.\u0e22."\ + "\u0e18.\u0e04."\ + ""] + ::msgcat::mcset th MONTHS_FULL [list \ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21"\ + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c"\ + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21"\ + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19"\ + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21"\ + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19"\ + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21"\ + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21"\ + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19"\ + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21"\ + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19"\ + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"\ + ""] + ::msgcat::mcset th BCE "\u0e25\u0e17\u0e35\u0e48" + ::msgcat::mcset th CE "\u0e04.\u0e28." + ::msgcat::mcset th AM "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ::msgcat::mcset th PM "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ::msgcat::mcset th DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset th TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset th DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/tr.msg b/inkstitch/bin/tcl/msgs/tr.msg new file mode 100644 index 0000000..7b2ecf9 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/tr.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset tr DAYS_OF_WEEK_ABBREV [list \ + "Paz"\ + "Pzt"\ + "Sal"\ + "\u00c7ar"\ + "Per"\ + "Cum"\ + "Cmt"] + ::msgcat::mcset tr DAYS_OF_WEEK_FULL [list \ + "Pazar"\ + "Pazartesi"\ + "Sal\u0131"\ + "\u00c7ar\u015famba"\ + "Per\u015fembe"\ + "Cuma"\ + "Cumartesi"] + ::msgcat::mcset tr MONTHS_ABBREV [list \ + "Oca"\ + "\u015eub"\ + "Mar"\ + "Nis"\ + "May"\ + "Haz"\ + "Tem"\ + "A\u011fu"\ + "Eyl"\ + "Eki"\ + "Kas"\ + "Ara"\ + ""] + ::msgcat::mcset tr MONTHS_FULL [list \ + "Ocak"\ + "\u015eubat"\ + "Mart"\ + "Nisan"\ + "May\u0131s"\ + "Haziran"\ + "Temmuz"\ + "A\u011fustos"\ + "Eyl\u00fcl"\ + "Ekim"\ + "Kas\u0131m"\ + "Aral\u0131k"\ + ""] + ::msgcat::mcset tr DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset tr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset tr DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/uk.msg b/inkstitch/bin/tcl/msgs/uk.msg new file mode 100644 index 0000000..7d4c64a --- /dev/null +++ b/inkstitch/bin/tcl/msgs/uk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset uk DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0434"\ + "\u043f\u043d"\ + "\u0432\u0442"\ + "\u0441\u0440"\ + "\u0447\u0442"\ + "\u043f\u0442"\ + "\u0441\u0431"] + ::msgcat::mcset uk DAYS_OF_WEEK_FULL [list \ + "\u043d\u0435\u0434\u0456\u043b\u044f"\ + "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a"\ + "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a"\ + "\u0441\u0435\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0435\u0440"\ + "\u043f'\u044f\u0442\u043d\u0438\u0446\u044f"\ + "\u0441\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset uk MONTHS_ABBREV [list \ + "\u0441\u0456\u0447"\ + "\u043b\u044e\u0442"\ + "\u0431\u0435\u0440"\ + "\u043a\u0432\u0456\u0442"\ + "\u0442\u0440\u0430\u0432"\ + "\u0447\u0435\u0440\u0432"\ + "\u043b\u0438\u043f"\ + "\u0441\u0435\u0440\u043f"\ + "\u0432\u0435\u0440"\ + "\u0436\u043e\u0432\u0442"\ + "\u043b\u0438\u0441\u0442"\ + "\u0433\u0440\u0443\u0434"\ + ""] + ::msgcat::mcset uk MONTHS_FULL [list \ + "\u0441\u0456\u0447\u043d\u044f"\ + "\u043b\u044e\u0442\u043e\u0433\u043e"\ + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f"\ + "\u043a\u0432\u0456\u0442\u043d\u044f"\ + "\u0442\u0440\u0430\u0432\u043d\u044f"\ + "\u0447\u0435\u0440\u0432\u043d\u044f"\ + "\u043b\u0438\u043f\u043d\u044f"\ + "\u0441\u0435\u0440\u043f\u043d\u044f"\ + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f"\ + "\u0436\u043e\u0432\u0442\u043d\u044f"\ + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430"\ + "\u0433\u0440\u0443\u0434\u043d\u044f"\ + ""] + ::msgcat::mcset uk BCE "\u0434\u043e \u043d.\u0435." + ::msgcat::mcset uk CE "\u043f\u0456\u0441\u043b\u044f \u043d.\u0435." + ::msgcat::mcset uk DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset uk TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset uk DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/vi.msg b/inkstitch/bin/tcl/msgs/vi.msg new file mode 100644 index 0000000..c98b2a6 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/vi.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset vi DAYS_OF_WEEK_ABBREV [list \ + "Th 2"\ + "Th 3"\ + "Th 4"\ + "Th 5"\ + "Th 6"\ + "Th 7"\ + "CN"] + ::msgcat::mcset vi DAYS_OF_WEEK_FULL [list \ + "Th\u01b0\u0301 hai"\ + "Th\u01b0\u0301 ba"\ + "Th\u01b0\u0301 t\u01b0"\ + "Th\u01b0\u0301 n\u0103m"\ + "Th\u01b0\u0301 s\u00e1u"\ + "Th\u01b0\u0301 ba\u0309y"\ + "Chu\u0309 nh\u00e2\u0323t"] + ::msgcat::mcset vi MONTHS_ABBREV [list \ + "Thg 1"\ + "Thg 2"\ + "Thg 3"\ + "Thg 4"\ + "Thg 5"\ + "Thg 6"\ + "Thg 7"\ + "Thg 8"\ + "Thg 9"\ + "Thg 10"\ + "Thg 11"\ + "Thg 12"\ + ""] + ::msgcat::mcset vi MONTHS_FULL [list \ + "Th\u00e1ng m\u00f4\u0323t"\ + "Th\u00e1ng hai"\ + "Th\u00e1ng ba"\ + "Th\u00e1ng t\u01b0"\ + "Th\u00e1ng n\u0103m"\ + "Th\u00e1ng s\u00e1u"\ + "Th\u00e1ng ba\u0309y"\ + "Th\u00e1ng t\u00e1m"\ + "Th\u00e1ng ch\u00edn"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i m\u00f4\u0323t"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i hai"\ + ""] + ::msgcat::mcset vi DATE_FORMAT "%d %b %Y" + ::msgcat::mcset vi TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset vi DATE_TIME_FORMAT "%d %b %Y %H:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/zh.msg b/inkstitch/bin/tcl/msgs/zh.msg new file mode 100644 index 0000000..b799a32 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/zh.msg @@ -0,0 +1,55 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh DAYS_OF_WEEK_ABBREV [list \ + "\u661f\u671f\u65e5"\ + "\u661f\u671f\u4e00"\ + "\u661f\u671f\u4e8c"\ + "\u661f\u671f\u4e09"\ + "\u661f\u671f\u56db"\ + "\u661f\u671f\u4e94"\ + "\u661f\u671f\u516d"] + ::msgcat::mcset zh DAYS_OF_WEEK_FULL [list \ + "\u661f\u671f\u65e5"\ + "\u661f\u671f\u4e00"\ + "\u661f\u671f\u4e8c"\ + "\u661f\u671f\u4e09"\ + "\u661f\u671f\u56db"\ + "\u661f\u671f\u4e94"\ + "\u661f\u671f\u516d"] + ::msgcat::mcset zh MONTHS_ABBREV [list \ + "\u4e00\u6708"\ + "\u4e8c\u6708"\ + "\u4e09\u6708"\ + "\u56db\u6708"\ + "\u4e94\u6708"\ + "\u516d\u6708"\ + "\u4e03\u6708"\ + "\u516b\u6708"\ + "\u4e5d\u6708"\ + "\u5341\u6708"\ + "\u5341\u4e00\u6708"\ + "\u5341\u4e8c\u6708"\ + ""] + ::msgcat::mcset zh MONTHS_FULL [list \ + "\u4e00\u6708"\ + "\u4e8c\u6708"\ + "\u4e09\u6708"\ + "\u56db\u6708"\ + "\u4e94\u6708"\ + "\u516d\u6708"\ + "\u4e03\u6708"\ + "\u516b\u6708"\ + "\u4e5d\u6708"\ + "\u5341\u6708"\ + "\u5341\u4e00\u6708"\ + "\u5341\u4e8c\u6708"\ + ""] + ::msgcat::mcset zh BCE "\u516c\u5143\u524d" + ::msgcat::mcset zh CE "\u516c\u5143" + ::msgcat::mcset zh AM "\u4e0a\u5348" + ::msgcat::mcset zh PM "\u4e0b\u5348" + ::msgcat::mcset zh LOCALE_NUMERALS "\u3007 \u4e00 \u4e8c \u4e09 \u56db \u4e94 \u516d \u4e03 \u516b \u4e5d \u5341 \u5341\u4e00 \u5341\u4e8c \u5341\u4e09 \u5341\u56db \u5341\u4e94 \u5341\u516d \u5341\u4e03 \u5341\u516b \u5341\u4e5d \u4e8c\u5341 \u5eff\u4e00 \u5eff\u4e8c \u5eff\u4e09 \u5eff\u56db \u5eff\u4e94 \u5eff\u516d \u5eff\u4e03 \u5eff\u516b \u5eff\u4e5d \u4e09\u5341 \u5345\u4e00 \u5345\u4e8c \u5345\u4e09 \u5345\u56db \u5345\u4e94 \u5345\u516d \u5345\u4e03 \u5345\u516b \u5345\u4e5d \u56db\u5341 \u56db\u5341\u4e00 \u56db\u5341\u4e8c \u56db\u5341\u4e09 \u56db\u5341\u56db \u56db\u5341\u4e94 \u56db\u5341\u516d \u56db\u5341\u4e03 \u56db\u5341\u516b \u56db\u5341\u4e5d \u4e94\u5341 \u4e94\u5341\u4e00 \u4e94\u5341\u4e8c \u4e94\u5341\u4e09 \u4e94\u5341\u56db \u4e94\u5341\u4e94 \u4e94\u5341\u516d \u4e94\u5341\u4e03 \u4e94\u5341\u516b \u4e94\u5341\u4e5d \u516d\u5341 \u516d\u5341\u4e00 \u516d\u5341\u4e8c \u516d\u5341\u4e09 \u516d\u5341\u56db \u516d\u5341\u4e94 \u516d\u5341\u516d \u516d\u5341\u4e03 \u516d\u5341\u516b \u516d\u5341\u4e5d \u4e03\u5341 \u4e03\u5341\u4e00 \u4e03\u5341\u4e8c \u4e03\u5341\u4e09 \u4e03\u5341\u56db \u4e03\u5341\u4e94 \u4e03\u5341\u516d \u4e03\u5341\u4e03 \u4e03\u5341\u516b \u4e03\u5341\u4e5d \u516b\u5341 \u516b\u5341\u4e00 \u516b\u5341\u4e8c \u516b\u5341\u4e09 \u516b\u5341\u56db \u516b\u5341\u4e94 \u516b\u5341\u516d \u516b\u5341\u4e03 \u516b\u5341\u516b \u516b\u5341\u4e5d \u4e5d\u5341 \u4e5d\u5341\u4e00 \u4e5d\u5341\u4e8c \u4e5d\u5341\u4e09 \u4e5d\u5341\u56db \u4e5d\u5341\u4e94 \u4e5d\u5341\u516d \u4e5d\u5341\u4e03 \u4e5d\u5341\u516b \u4e5d\u5341\u4e5d" + ::msgcat::mcset zh LOCALE_DATE_FORMAT "\u516c\u5143%Y\u5e74%B%Od\u65e5" + ::msgcat::mcset zh LOCALE_TIME_FORMAT "%OH\u65f6%OM\u5206%OS\u79d2" + ::msgcat::mcset zh LOCALE_DATE_TIME_FORMAT "%A %Y\u5e74%B%Od\u65e5%OH\u65f6%OM\u5206%OS\u79d2 %z" +} diff --git a/inkstitch/bin/tcl/msgs/zh_cn.msg b/inkstitch/bin/tcl/msgs/zh_cn.msg new file mode 100644 index 0000000..d62ce77 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/zh_cn.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_CN DATE_FORMAT "%Y-%m-%e" + ::msgcat::mcset zh_CN TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset zh_CN TIME_FORMAT_12 "%P%I\u65f6%M\u5206%S\u79d2" + ::msgcat::mcset zh_CN DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/zh_hk.msg b/inkstitch/bin/tcl/msgs/zh_hk.msg new file mode 100644 index 0000000..badb1dd --- /dev/null +++ b/inkstitch/bin/tcl/msgs/zh_hk.msg @@ -0,0 +1,28 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_HK DAYS_OF_WEEK_ABBREV [list \ + "\u65e5"\ + "\u4e00"\ + "\u4e8c"\ + "\u4e09"\ + "\u56db"\ + "\u4e94"\ + "\u516d"] + ::msgcat::mcset zh_HK MONTHS_ABBREV [list \ + "1\u6708"\ + "2\u6708"\ + "3\u6708"\ + "4\u6708"\ + "5\u6708"\ + "6\u6708"\ + "7\u6708"\ + "8\u6708"\ + "9\u6708"\ + "10\u6708"\ + "11\u6708"\ + "12\u6708"\ + ""] + ::msgcat::mcset zh_HK DATE_FORMAT "%Y\u5e74%m\u6708%e\u65e5" + ::msgcat::mcset zh_HK TIME_FORMAT_12 "%P%I:%M:%S" + ::msgcat::mcset zh_HK DATE_TIME_FORMAT "%Y\u5e74%m\u6708%e\u65e5 %P%I:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/zh_sg.msg b/inkstitch/bin/tcl/msgs/zh_sg.msg new file mode 100644 index 0000000..a2f3e39 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/zh_sg.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_SG AM "\u4e0a\u5348" + ::msgcat::mcset zh_SG PM "\u4e2d\u5348" + ::msgcat::mcset zh_SG DATE_FORMAT "%d %B %Y" + ::msgcat::mcset zh_SG TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset zh_SG DATE_TIME_FORMAT "%d %B %Y %P %I:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/msgs/zh_tw.msg b/inkstitch/bin/tcl/msgs/zh_tw.msg new file mode 100644 index 0000000..e0796b1 --- /dev/null +++ b/inkstitch/bin/tcl/msgs/zh_tw.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_TW BCE "\u6c11\u570b\u524d" + ::msgcat::mcset zh_TW CE "\u6c11\u570b" + ::msgcat::mcset zh_TW DATE_FORMAT "%Y/%m/%e" + ::msgcat::mcset zh_TW TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset zh_TW DATE_TIME_FORMAT "%Y/%m/%e %P %I:%M:%S %z" +} diff --git a/inkstitch/bin/tcl/opt0.4/optparse.tcl b/inkstitch/bin/tcl/opt0.4/optparse.tcl new file mode 100644 index 0000000..c9438a0 --- /dev/null +++ b/inkstitch/bin/tcl/opt0.4/optparse.tcl @@ -0,0 +1,1072 @@ +# optparse.tcl -- +# +# (private) Option parsing package +# Primarily used internally by the safe:: code. +# +# WARNING: This code will go away in a future release +# of Tcl. It is NOT supported and you should not rely +# on it. If your code does rely on this package you +# may directly incorporate this code into your application. + +package require Tcl 8.2 +# When this version number changes, update the pkgIndex.tcl file +# and the install directory in the Makefiles. +package provide opt 0.4.5 + +namespace eval ::tcl { + + # Exported APIs + namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \ + OptProc OptProcArgGiven OptParse \ + Lempty Lget \ + Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \ + SetMax SetMin + + +################# Example of use / 'user documentation' ################### + + proc OptCreateTestProc {} { + + # Defines ::tcl::OptParseTest as a test proc with parsed arguments + # (can't be defined before the code below is loaded (before "OptProc")) + + # Every OptProc give usage information on "procname -help". + # Try "tcl::OptParseTest -help" and "tcl::OptParseTest -a" and + # then other arguments. + # + # example of 'valid' call: + # ::tcl::OptParseTest save -4 -pr 23 -libsok SybTcl\ + # -nostatics false ch1 + OptProc OptParseTest { + {subcommand -choice {save print} "sub command"} + {arg1 3 "some number"} + {-aflag} + {-intflag 7} + {-weirdflag "help string"} + {-noStatics "Not ok to load static packages"} + {-nestedloading1 true "OK to load into nested slaves"} + {-nestedloading2 -boolean true "OK to load into nested slaves"} + {-libsOK -choice {Tk SybTcl} + "List of packages that can be loaded"} + {-precision -int 12 "Number of digits of precision"} + {-intval 7 "An integer"} + {-scale -float 1.0 "Scale factor"} + {-zoom 1.0 "Zoom factor"} + {-arbitrary foobar "Arbitrary string"} + {-random -string 12 "Random string"} + {-listval -list {} "List value"} + {-blahflag -blah abc "Funny type"} + {arg2 -boolean "a boolean"} + {arg3 -choice "ch1 ch2"} + {?optarg? -list {} "optional argument"} + } { + foreach v [info locals] { + puts stderr [format "%14s : %s" $v [set $v]] + } + } + } + +################### No User serviceable part below ! ############### + + # Array storing the parsed descriptions + variable OptDesc; + array set OptDesc {}; + # Next potentially free key id (numeric) + variable OptDescN 0; + +# Inside algorithm/mechanism description: +# (not for the faint hearted ;-) +# +# The argument description is parsed into a "program tree" +# It is called a "program" because it is the program used by +# the state machine interpreter that use that program to +# actually parse the arguments at run time. +# +# The general structure of a "program" is +# notation (pseudo bnf like) +# name :== definition defines "name" as being "definition" +# { x y z } means list of x, y, and z +# x* means x repeated 0 or more time +# x+ means "x x*" +# x? means optionally x +# x | y means x or y +# "cccc" means the literal string +# +# program :== { programCounter programStep* } +# +# programStep :== program | singleStep +# +# programCounter :== {"P" integer+ } +# +# singleStep :== { instruction parameters* } +# +# instruction :== single element list +# +# (the difference between singleStep and program is that \ +# llength [lindex $program 0] >= 2 +# while +# llength [lindex $singleStep 0] == 1 +# ) +# +# And for this application: +# +# singleStep :== { instruction varname {hasBeenSet currentValue} type +# typeArgs help } +# instruction :== "flags" | "value" +# type :== knowType | anyword +# knowType :== "string" | "int" | "boolean" | "boolflag" | "float" +# | "choice" +# +# for type "choice" typeArgs is a list of possible choices, the first one +# is the default value. for all other types the typeArgs is the default value +# +# a "boolflag" is the type for a flag whose presence or absence, without +# additional arguments means respectively true or false (default flag type). +# +# programCounter is the index in the list of the currently processed +# programStep (thus starting at 1 (0 is {"P" prgCounterValue}). +# If it is a list it points toward each currently selected programStep. +# (like for "flags", as they are optional, form a set and programStep). + +# Performance/Implementation issues +# --------------------------------- +# We use tcl lists instead of arrays because with tcl8.0 +# they should start to be much faster. +# But this code use a lot of helper procs (like Lvarset) +# which are quite slow and would be helpfully optimized +# for instance by being written in C. Also our struture +# is complex and there is maybe some places where the +# string rep might be calculated at great exense. to be checked. + +# +# Parse a given description and saves it here under the given key +# generate a unused keyid if not given +# +proc ::tcl::OptKeyRegister {desc {key ""}} { + variable OptDesc; + variable OptDescN; + if {[string equal $key ""]} { + # in case a key given to us as a parameter was a number + while {[info exists OptDesc($OptDescN)]} {incr OptDescN} + set key $OptDescN; + incr OptDescN; + } + # program counter + set program [list [list "P" 1]]; + + # are we processing flags (which makes a single program step) + set inflags 0; + + set state {}; + + # flag used to detect that we just have a single (flags set) subprogram. + set empty 1; + + foreach item $desc { + if {$state == "args"} { + # more items after 'args'... + return -code error "'args' special argument must be the last one"; + } + set res [OptNormalizeOne $item]; + set state [lindex $res 0]; + if {$inflags} { + if {$state == "flags"} { + # add to 'subprogram' + lappend flagsprg $res; + } else { + # put in the flags + # structure for flag programs items is a list of + # {subprgcounter {prg flag 1} {prg flag 2} {...}} + lappend program $flagsprg; + # put the other regular stuff + lappend program $res; + set inflags 0; + set empty 0; + } + } else { + if {$state == "flags"} { + set inflags 1; + # sub program counter + first sub program + set flagsprg [list [list "P" 1] $res]; + } else { + lappend program $res; + set empty 0; + } + } + } + if {$inflags} { + if {$empty} { + # We just have the subprogram, optimize and remove + # unneeded level: + set program $flagsprg; + } else { + lappend program $flagsprg; + } + } + + set OptDesc($key) $program; + + return $key; +} + +# +# Free the storage for that given key +# +proc ::tcl::OptKeyDelete {key} { + variable OptDesc; + unset OptDesc($key); +} + + # Get the parsed description stored under the given key. + proc OptKeyGetDesc {descKey} { + variable OptDesc; + if {![info exists OptDesc($descKey)]} { + return -code error "Unknown option description key \"$descKey\""; + } + set OptDesc($descKey); + } + +# Parse entry point for ppl who don't want to register with a key, +# for instance because the description changes dynamically. +# (otherwise one should really use OptKeyRegister once + OptKeyParse +# as it is way faster or simply OptProc which does it all) +# Assign a temporary key, call OptKeyParse and then free the storage +proc ::tcl::OptParse {desc arglist} { + set tempkey [OptKeyRegister $desc]; + set ret [catch {uplevel 1 [list ::tcl::OptKeyParse $tempkey $arglist]} res]; + OptKeyDelete $tempkey; + return -code $ret $res; +} + +# Helper function, replacement for proc that both +# register the description under a key which is the name of the proc +# (and thus unique to that code) +# and add a first line to the code to call the OptKeyParse proc +# Stores the list of variables that have been actually given by the user +# (the other will be sets to their default value) +# into local variable named "Args". +proc ::tcl::OptProc {name desc body} { + set namespace [uplevel 1 [list ::namespace current]]; + if {[string match "::*" $name] || [string equal $namespace "::"]} { + # absolute name or global namespace, name is the key + set key $name; + } else { + # we are relative to some non top level namespace: + set key "${namespace}::${name}"; + } + OptKeyRegister $desc $key; + uplevel 1 [list ::proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"]; + return $key; +} +# Check that a argument has been given +# assumes that "OptProc" has been used as it will check in "Args" list +proc ::tcl::OptProcArgGiven {argname} { + upvar Args alist; + expr {[lsearch $alist $argname] >=0} +} + + ####### + # Programs/Descriptions manipulation + + # Return the instruction word/list of a given step/(sub)program + proc OptInstr {lst} { + lindex $lst 0; + } + # Is a (sub) program or a plain instruction ? + proc OptIsPrg {lst} { + expr {[llength [OptInstr $lst]]>=2} + } + # Is this instruction a program counter or a real instr + proc OptIsCounter {item} { + expr {[lindex $item 0]=="P"} + } + # Current program counter (2nd word of first word) + proc OptGetPrgCounter {lst} { + Lget $lst {0 1} + } + # Current program counter (2nd word of first word) + proc OptSetPrgCounter {lstName newValue} { + upvar $lstName lst; + set lst [lreplace $lst 0 0 [concat "P" $newValue]]; + } + # returns a list of currently selected items. + proc OptSelection {lst} { + set res {}; + foreach idx [lrange [lindex $lst 0] 1 end] { + lappend res [Lget $lst $idx]; + } + return $res; + } + + # Advance to next description + proc OptNextDesc {descName} { + uplevel 1 [list Lvarincr $descName {0 1}]; + } + + # Get the current description, eventually descend + proc OptCurDesc {descriptions} { + lindex $descriptions [OptGetPrgCounter $descriptions]; + } + # get the current description, eventually descend + # through sub programs as needed. + proc OptCurDescFinal {descriptions} { + set item [OptCurDesc $descriptions]; + # Descend untill we get the actual item and not a sub program + while {[OptIsPrg $item]} { + set item [OptCurDesc $item]; + } + return $item; + } + # Current final instruction adress + proc OptCurAddr {descriptions {start {}}} { + set adress [OptGetPrgCounter $descriptions]; + lappend start $adress; + set item [lindex $descriptions $adress]; + if {[OptIsPrg $item]} { + return [OptCurAddr $item $start]; + } else { + return $start; + } + } + # Set the value field of the current instruction + proc OptCurSetValue {descriptionsName value} { + upvar $descriptionsName descriptions + # get the current item full adress + set adress [OptCurAddr $descriptions]; + # use the 3th field of the item (see OptValue / OptNewInst) + lappend adress 2 + Lvarset descriptions $adress [list 1 $value]; + # ^hasBeenSet flag + } + + # empty state means done/paste the end of the program + proc OptState {item} { + lindex $item 0 + } + + # current state + proc OptCurState {descriptions} { + OptState [OptCurDesc $descriptions]; + } + + ####### + # Arguments manipulation + + # Returns the argument that has to be processed now + proc OptCurrentArg {lst} { + lindex $lst 0; + } + # Advance to next argument + proc OptNextArg {argsName} { + uplevel 1 [list Lvarpop1 $argsName]; + } + ####### + + + + + + # Loop over all descriptions, calling OptDoOne which will + # eventually eat all the arguments. + proc OptDoAll {descriptionsName argumentsName} { + upvar $descriptionsName descriptions + upvar $argumentsName arguments; +# puts "entered DoAll"; + # Nb: the places where "state" can be set are tricky to figure + # because DoOne sets the state to flagsValue and return -continue + # when needed... + set state [OptCurState $descriptions]; + # We'll exit the loop in "OptDoOne" or when state is empty. + while 1 { + set curitem [OptCurDesc $descriptions]; + # Do subprograms if needed, call ourselves on the sub branch + while {[OptIsPrg $curitem]} { + OptDoAll curitem arguments +# puts "done DoAll sub"; + # Insert back the results in current tree; + Lvarset1nc descriptions [OptGetPrgCounter $descriptions]\ + $curitem; + OptNextDesc descriptions; + set curitem [OptCurDesc $descriptions]; + set state [OptCurState $descriptions]; + } +# puts "state = \"$state\" - arguments=($arguments)"; + if {[Lempty $state]} { + # Nothing left to do, we are done in this branch: + break; + } + # The following statement can make us terminate/continue + # as it use return -code {break, continue, return and error} + # codes + OptDoOne descriptions state arguments; + # If we are here, no special return code where issued, + # we'll step to next instruction : +# puts "new state = \"$state\""; + OptNextDesc descriptions; + set state [OptCurState $descriptions]; + } + } + + # Process one step for the state machine, + # eventually consuming the current argument. + proc OptDoOne {descriptionsName stateName argumentsName} { + upvar $argumentsName arguments; + upvar $descriptionsName descriptions; + upvar $stateName state; + + # the special state/instruction "args" eats all + # the remaining args (if any) + if {($state == "args")} { + if {![Lempty $arguments]} { + # If there is no additional arguments, leave the default value + # in. + OptCurSetValue descriptions $arguments; + set arguments {}; + } +# puts "breaking out ('args' state: consuming every reminding args)" + return -code break; + } + + if {[Lempty $arguments]} { + if {$state == "flags"} { + # no argument and no flags : we're done +# puts "returning to previous (sub)prg (no more args)"; + return -code return; + } elseif {$state == "optValue"} { + set state next; # not used, for debug only + # go to next state + return ; + } else { + return -code error [OptMissingValue $descriptions]; + } + } else { + set arg [OptCurrentArg $arguments]; + } + + switch $state { + flags { + # A non-dash argument terminates the options, as does -- + + # Still a flag ? + if {![OptIsFlag $arg]} { + # don't consume the argument, return to previous prg + return -code return; + } + # consume the flag + OptNextArg arguments; + if {[string equal "--" $arg]} { + # return from 'flags' state + return -code return; + } + + set hits [OptHits descriptions $arg]; + if {$hits > 1} { + return -code error [OptAmbigous $descriptions $arg] + } elseif {$hits == 0} { + return -code error [OptFlagUsage $descriptions $arg] + } + set item [OptCurDesc $descriptions]; + if {[OptNeedValue $item]} { + # we need a value, next state is + set state flagValue; + } else { + OptCurSetValue descriptions 1; + } + # continue + return -code continue; + } + flagValue - + value { + set item [OptCurDesc $descriptions]; + # Test the values against their required type + if {[catch {OptCheckType $arg\ + [OptType $item] [OptTypeArgs $item]} val]} { + return -code error [OptBadValue $item $arg $val] + } + # consume the value + OptNextArg arguments; + # set the value + OptCurSetValue descriptions $val; + # go to next state + if {$state == "flagValue"} { + set state flags + return -code continue; + } else { + set state next; # not used, for debug only + return ; # will go on next step + } + } + optValue { + set item [OptCurDesc $descriptions]; + # Test the values against their required type + if {![catch {OptCheckType $arg\ + [OptType $item] [OptTypeArgs $item]} val]} { + # right type, so : + # consume the value + OptNextArg arguments; + # set the value + OptCurSetValue descriptions $val; + } + # go to next state + set state next; # not used, for debug only + return ; # will go on next step + } + } + # If we reach this point: an unknown + # state as been entered ! + return -code error "Bug! unknown state in DoOne \"$state\"\ + (prg counter [OptGetPrgCounter $descriptions]:\ + [OptCurDesc $descriptions])"; + } + +# Parse the options given the key to previously registered description +# and arguments list +proc ::tcl::OptKeyParse {descKey arglist} { + + set desc [OptKeyGetDesc $descKey]; + + # make sure -help always give usage + if {[string equal -nocase "-help" $arglist]} { + return -code error [OptError "Usage information:" $desc 1]; + } + + OptDoAll desc arglist; + + if {![Lempty $arglist]} { + return -code error [OptTooManyArgs $desc $arglist]; + } + + # Analyse the result + # Walk through the tree: + OptTreeVars $desc "#[expr {[info level]-1}]" ; +} + + # determine string length for nice tabulated output + proc OptTreeVars {desc level {vnamesLst {}}} { + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + set vnamesLst [OptTreeVars $item $level $vnamesLst]; + } else { + set vname [OptVarName $item]; + upvar $level $vname var + if {[OptHasBeenSet $item]} { +# puts "adding $vname" + # lets use the input name for the returned list + # it is more usefull, for instance you can check that + # no flags at all was given with expr + # {![string match "*-*" $Args]} + lappend vnamesLst [OptName $item]; + set var [OptValue $item]; + } else { + set var [OptDefaultValue $item]; + } + } + } + return $vnamesLst + } + + +# Check the type of a value +# and emit an error if arg is not of the correct type +# otherwise returns the canonical value of that arg (ie 0/1 for booleans) +proc ::tcl::OptCheckType {arg type {typeArgs ""}} { +# puts "checking '$arg' against '$type' ($typeArgs)"; + + # only types "any", "choice", and numbers can have leading "-" + + switch -exact -- $type { + int { + if {![string is integer -strict $arg]} { + error "not an integer" + } + return $arg; + } + float { + return [expr {double($arg)}] + } + script - + list { + # if llength fail : malformed list + if {[llength $arg]==0 && [OptIsFlag $arg]} { + error "no values with leading -" + } + return $arg; + } + boolean { + if {![string is boolean -strict $arg]} { + error "non canonic boolean" + } + # convert true/false because expr/if is broken with "!,... + return [expr {$arg ? 1 : 0}] + } + choice { + if {[lsearch -exact $typeArgs $arg] < 0} { + error "invalid choice" + } + return $arg; + } + any { + return $arg; + } + string - + default { + if {[OptIsFlag $arg]} { + error "no values with leading -" + } + return $arg + } + } + return neverReached; +} + + # internal utilities + + # returns the number of flags matching the given arg + # sets the (local) prg counter to the list of matches + proc OptHits {descName arg} { + upvar $descName desc; + set hits 0 + set hitems {} + set i 1; + + set larg [string tolower $arg]; + set len [string length $larg]; + set last [expr {$len-1}]; + + foreach item [lrange $desc 1 end] { + set flag [OptName $item] + # lets try to match case insensitively + # (string length ought to be cheap) + set lflag [string tolower $flag]; + if {$len == [string length $lflag]} { + if {[string equal $larg $lflag]} { + # Exact match case + OptSetPrgCounter desc $i; + return 1; + } + } elseif {[string equal $larg [string range $lflag 0 $last]]} { + lappend hitems $i; + incr hits; + } + incr i; + } + if {$hits} { + OptSetPrgCounter desc $hitems; + } + return $hits + } + + # Extract fields from the list structure: + + proc OptName {item} { + lindex $item 1; + } + proc OptHasBeenSet {item} { + Lget $item {2 0}; + } + proc OptValue {item} { + Lget $item {2 1}; + } + + proc OptIsFlag {name} { + string match "-*" $name; + } + proc OptIsOpt {name} { + string match {\?*} $name; + } + proc OptVarName {item} { + set name [OptName $item]; + if {[OptIsFlag $name]} { + return [string range $name 1 end]; + } elseif {[OptIsOpt $name]} { + return [string trim $name "?"]; + } else { + return $name; + } + } + proc OptType {item} { + lindex $item 3 + } + proc OptTypeArgs {item} { + lindex $item 4 + } + proc OptHelp {item} { + lindex $item 5 + } + proc OptNeedValue {item} { + expr {![string equal [OptType $item] boolflag]} + } + proc OptDefaultValue {item} { + set val [OptTypeArgs $item] + switch -exact -- [OptType $item] { + choice {return [lindex $val 0]} + boolean - + boolflag { + # convert back false/true to 0/1 because expr !$bool + # is broken.. + if {$val} { + return 1 + } else { + return 0 + } + } + } + return $val + } + + # Description format error helper + proc OptOptUsage {item {what ""}} { + return -code error "invalid description format$what: $item\n\ + should be a list of {varname|-flagname ?-type? ?defaultvalue?\ + ?helpstring?}"; + } + + + # Generate a canonical form single instruction + proc OptNewInst {state varname type typeArgs help} { + list $state $varname [list 0 {}] $type $typeArgs $help; + # ^ ^ + # | | + # hasBeenSet=+ +=currentValue + } + + # Translate one item to canonical form + proc OptNormalizeOne {item} { + set lg [Lassign $item varname arg1 arg2 arg3]; +# puts "called optnormalizeone '$item' v=($varname), lg=$lg"; + set isflag [OptIsFlag $varname]; + set isopt [OptIsOpt $varname]; + if {$isflag} { + set state "flags"; + } elseif {$isopt} { + set state "optValue"; + } elseif {![string equal $varname "args"]} { + set state "value"; + } else { + set state "args"; + } + + # apply 'smart' 'fuzzy' logic to try to make + # description writer's life easy, and our's difficult : + # let's guess the missing arguments :-) + + switch $lg { + 1 { + if {$isflag} { + return [OptNewInst $state $varname boolflag false ""]; + } else { + return [OptNewInst $state $varname any "" ""]; + } + } + 2 { + # varname default + # varname help + set type [OptGuessType $arg1] + if {[string equal $type "string"]} { + if {$isflag} { + set type boolflag + set def false + } else { + set type any + set def "" + } + set help $arg1 + } else { + set help "" + set def $arg1 + } + return [OptNewInst $state $varname $type $def $help]; + } + 3 { + # varname type value + # varname value comment + + if {[regexp {^-(.+)$} $arg1 x type]} { + # flags/optValue as they are optional, need a "value", + # on the contrary, for a variable (non optional), + # default value is pointless, 'cept for choices : + if {$isflag || $isopt || ($type == "choice")} { + return [OptNewInst $state $varname $type $arg2 ""]; + } else { + return [OptNewInst $state $varname $type "" $arg2]; + } + } else { + return [OptNewInst $state $varname\ + [OptGuessType $arg1] $arg1 $arg2] + } + } + 4 { + if {[regexp {^-(.+)$} $arg1 x type]} { + return [OptNewInst $state $varname $type $arg2 $arg3]; + } else { + return -code error [OptOptUsage $item]; + } + } + default { + return -code error [OptOptUsage $item]; + } + } + } + + # Auto magic lazy type determination + proc OptGuessType {arg} { + if { $arg == "true" || $arg == "false" } { + return boolean + } + if {[string is integer -strict $arg]} { + return int + } + if {[string is double -strict $arg]} { + return float + } + return string + } + + # Error messages front ends + + proc OptAmbigous {desc arg} { + OptError "ambigous option \"$arg\", choose from:" [OptSelection $desc] + } + proc OptFlagUsage {desc arg} { + OptError "bad flag \"$arg\", must be one of" $desc; + } + proc OptTooManyArgs {desc arguments} { + OptError "too many arguments (unexpected argument(s): $arguments),\ + usage:"\ + $desc 1 + } + proc OptParamType {item} { + if {[OptIsFlag $item]} { + return "flag"; + } else { + return "parameter"; + } + } + proc OptBadValue {item arg {err {}}} { +# puts "bad val err = \"$err\""; + OptError "bad value \"$arg\" for [OptParamType $item]"\ + [list $item] + } + proc OptMissingValue {descriptions} { +# set item [OptCurDescFinal $descriptions]; + set item [OptCurDesc $descriptions]; + OptError "no value given for [OptParamType $item] \"[OptName $item]\"\ + (use -help for full usage) :"\ + [list $item] + } + +proc ::tcl::OptKeyError {prefix descKey {header 0}} { + OptError $prefix [OptKeyGetDesc $descKey] $header; +} + + # determine string length for nice tabulated output + proc OptLengths {desc nlName tlName dlName} { + upvar $nlName nl; + upvar $tlName tl; + upvar $dlName dl; + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + OptLengths $item nl tl dl + } else { + SetMax nl [string length [OptName $item]] + SetMax tl [string length [OptType $item]] + set dv [OptTypeArgs $item]; + if {[OptState $item] != "header"} { + set dv "($dv)"; + } + set l [string length $dv]; + # limit the space allocated to potentially big "choices" + if {([OptType $item] != "choice") || ($l<=12)} { + SetMax dl $l + } else { + if {![info exists dl]} { + set dl 0 + } + } + } + } + } + # output the tree + proc OptTree {desc nl tl dl} { + set res ""; + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + append res [OptTree $item $nl $tl $dl]; + } else { + set dv [OptTypeArgs $item]; + if {[OptState $item] != "header"} { + set dv "($dv)"; + } + append res [format "\n %-*s %-*s %-*s %s" \ + $nl [OptName $item] $tl [OptType $item] \ + $dl $dv [OptHelp $item]] + } + } + return $res; + } + +# Give nice usage string +proc ::tcl::OptError {prefix desc {header 0}} { + # determine length + if {$header} { + # add faked instruction + set h [list [OptNewInst header Var/FlagName Type Value Help]]; + lappend h [OptNewInst header ------------ ---- ----- ----]; + lappend h [OptNewInst header {( -help} "" "" {gives this help )}] + set desc [concat $h $desc] + } + OptLengths $desc nl tl dl + # actually output + return "$prefix[OptTree $desc $nl $tl $dl]" +} + + +################ General Utility functions ####################### + +# +# List utility functions +# Naming convention: +# "Lvarxxx" take the list VARiable name as argument +# "Lxxxx" take the list value as argument +# (which is not costly with Tcl8 objects system +# as it's still a reference and not a copy of the values) +# + +# Is that list empty ? +proc ::tcl::Lempty {list} { + expr {[llength $list]==0} +} + +# Gets the value of one leaf of a lists tree +proc ::tcl::Lget {list indexLst} { + if {[llength $indexLst] <= 1} { + return [lindex $list $indexLst]; + } + Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end]; +} +# Sets the value of one leaf of a lists tree +# (we use the version that does not create the elements because +# it would be even slower... needs to be written in C !) +# (nb: there is a non trivial recursive problem with indexes 0, +# which appear because there is no difference between a list +# of 1 element and 1 element alone : [list "a"] == "a" while +# it should be {a} and [listp a] should be 0 while [listp {a b}] would be 1 +# and [listp "a b"] maybe 0. listp does not exist either...) +proc ::tcl::Lvarset {listName indexLst newValue} { + upvar $listName list; + if {[llength $indexLst] <= 1} { + Lvarset1nc list $indexLst $newValue; + } else { + set idx [lindex $indexLst 0]; + set targetList [lindex $list $idx]; + # reduce refcount on targetList (not really usefull now, + # could be with optimizing compiler) +# Lvarset1 list $idx {}; + # recursively replace in targetList + Lvarset targetList [lrange $indexLst 1 end] $newValue; + # put updated sub list back in the tree + Lvarset1nc list $idx $targetList; + } +} +# Set one cell to a value, eventually create all the needed elements +# (on level-1 of lists) +variable emptyList {} +proc ::tcl::Lvarset1 {listName index newValue} { + upvar $listName list; + if {$index < 0} {return -code error "invalid negative index"} + set lg [llength $list]; + if {$index >= $lg} { + variable emptyList; + for {set i $lg} {$i<$index} {incr i} { + lappend list $emptyList; + } + lappend list $newValue; + } else { + set list [lreplace $list $index $index $newValue]; + } +} +# same as Lvarset1 but no bound checking / creation +proc ::tcl::Lvarset1nc {listName index newValue} { + upvar $listName list; + set list [lreplace $list $index $index $newValue]; +} +# Increments the value of one leaf of a lists tree +# (which must exists) +proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} { + upvar $listName list; + if {[llength $indexLst] <= 1} { + Lvarincr1 list $indexLst $howMuch; + } else { + set idx [lindex $indexLst 0]; + set targetList [lindex $list $idx]; + # reduce refcount on targetList + Lvarset1nc list $idx {}; + # recursively replace in targetList + Lvarincr targetList [lrange $indexLst 1 end] $howMuch; + # put updated sub list back in the tree + Lvarset1nc list $idx $targetList; + } +} +# Increments the value of one cell of a list +proc ::tcl::Lvarincr1 {listName index {howMuch 1}} { + upvar $listName list; + set newValue [expr {[lindex $list $index]+$howMuch}]; + set list [lreplace $list $index $index $newValue]; + return $newValue; +} +# Removes the first element of a list +# and returns the new list value +proc ::tcl::Lvarpop1 {listName} { + upvar $listName list; + set list [lrange $list 1 end]; +} +# Same but returns the removed element +# (Like the tclX version) +proc ::tcl::Lvarpop {listName} { + upvar $listName list; + set el [lindex $list 0]; + set list [lrange $list 1 end]; + return $el; +} +# Assign list elements to variables and return the length of the list +proc ::tcl::Lassign {list args} { + # faster than direct blown foreach (which does not byte compile) + set i 0; + set lg [llength $list]; + foreach vname $args { + if {$i>=$lg} break + uplevel 1 [list ::set $vname [lindex $list $i]]; + incr i; + } + return $lg; +} + +# Misc utilities + +# Set the varname to value if value is greater than varname's current value +# or if varname is undefined +proc ::tcl::SetMax {varname value} { + upvar 1 $varname var + if {![info exists var] || $value > $var} { + set var $value + } +} + +# Set the varname to value if value is smaller than varname's current value +# or if varname is undefined +proc ::tcl::SetMin {varname value} { + upvar 1 $varname var + if {![info exists var] || $value < $var} { + set var $value + } +} + + + # everything loaded fine, lets create the test proc: + # OptCreateTestProc + # Don't need the create temp proc anymore: + # rename OptCreateTestProc {} +} diff --git a/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl b/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl new file mode 100644 index 0000000..c5d3635 --- /dev/null +++ b/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl @@ -0,0 +1,12 @@ +# Tcl package index file, version 1.1 +# This file is generated by the "pkg_mkIndex -direct" command +# and sourced either when an application starts up or +# by a "package unknown" script. It invokes the +# "package ifneeded" command to set up package-related +# information so that packages will be loaded automatically +# in response to "package require" commands. When this +# script is sourced, the variable $dir must contain the +# full path name of this file's directory. + +if {![package vsatisfies [package provide Tcl] 8.2]} {return} +package ifneeded opt 0.4.5 [list source [file join $dir optparse.tcl]] diff --git a/inkstitch/bin/tcl/package.tcl b/inkstitch/bin/tcl/package.tcl new file mode 100644 index 0000000..06f619c --- /dev/null +++ b/inkstitch/bin/tcl/package.tcl @@ -0,0 +1,751 @@ +# package.tcl -- +# +# utility procs formerly in init.tcl which can be loaded on demand +# for package management. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +namespace eval tcl::Pkg {} + +# ::tcl::Pkg::CompareExtension -- +# +# Used internally by pkg_mkIndex to compare the extension of a file to +# a given extension. On Windows, it uses a case-insensitive comparison +# because the file system can be file insensitive. +# +# Arguments: +# fileName name of a file whose extension is compared +# ext (optional) The extension to compare against; you must +# provide the starting dot. +# Defaults to [info sharedlibextension] +# +# Results: +# Returns 1 if the extension matches, 0 otherwise + +proc tcl::Pkg::CompareExtension { fileName {ext {}} } { + global tcl_platform + if {$ext eq ""} {set ext [info sharedlibextension]} + if {$tcl_platform(platform) eq "windows"} { + return [string equal -nocase [file extension $fileName] $ext] + } else { + # Some unices add trailing numbers after the .so, so + # we could have something like '.so.1.2'. + set root $fileName + while {1} { + set currExt [file extension $root] + if {$currExt eq $ext} { + return 1 + } + + # The current extension does not match; if it is not a numeric + # value, quit, as we are only looking to ignore version number + # extensions. Otherwise we might return 1 in this case: + # tcl::Pkg::CompareExtension foo.so.bar .so + # which should not match. + + if { ![string is integer -strict [string range $currExt 1 end]] } { + return 0 + } + set root [file rootname $root] + } + } +} + +# pkg_mkIndex -- +# This procedure creates a package index in a given directory. The +# package index consists of a "pkgIndex.tcl" file whose contents are +# a Tcl script that sets up package information with "package require" +# commands. The commands describe all of the packages defined by the +# files given as arguments. +# +# Arguments: +# -direct (optional) If this flag is present, the generated +# code in pkgMkIndex.tcl will cause the package to be +# loaded when "package require" is executed, rather +# than lazily when the first reference to an exported +# procedure in the package is made. +# -verbose (optional) Verbose output; the name of each file that +# was successfully rocessed is printed out. Additionally, +# if processing of a file failed a message is printed. +# -load pat (optional) Preload any packages whose names match +# the pattern. Used to handle DLLs that depend on +# other packages during their Init procedure. +# dir - Name of the directory in which to create the index. +# args - Any number of additional arguments, each giving +# a glob pattern that matches the names of one or +# more shared libraries or Tcl script files in +# dir. + +proc pkg_mkIndex {args} { + set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"}; + + set argCount [llength $args] + if {$argCount < 1} { + return -code error "wrong # args: should be\n$usage" + } + + set more "" + set direct 1 + set doVerbose 0 + set loadPat "" + for {set idx 0} {$idx < $argCount} {incr idx} { + set flag [lindex $args $idx] + switch -glob -- $flag { + -- { + # done with the flags + incr idx + break + } + -verbose { + set doVerbose 1 + } + -lazy { + set direct 0 + append more " -lazy" + } + -direct { + append more " -direct" + } + -load { + incr idx + set loadPat [lindex $args $idx] + append more " -load $loadPat" + } + -* { + return -code error "unknown flag $flag: should be\n$usage" + } + default { + # done with the flags + break + } + } + } + + set dir [lindex $args $idx] + set patternList [lrange $args [expr {$idx + 1}] end] + if {[llength $patternList] == 0} { + set patternList [list "*.tcl" "*[info sharedlibextension]"] + } + + if {[catch { + glob -directory $dir -tails -types {r f} -- {*}$patternList + } fileList o]} { + return -options $o $fileList + } + foreach file $fileList { + # For each file, figure out what commands and packages it provides. + # To do this, create a child interpreter, load the file into the + # interpreter, and get a list of the new commands and packages + # that are defined. + + if {$file eq "pkgIndex.tcl"} { + continue + } + + set c [interp create] + + # Load into the child any packages currently loaded in the parent + # interpreter that match the -load pattern. + + if {$loadPat ne ""} { + if {$doVerbose} { + tclLog "currently loaded packages: '[info loaded]'" + tclLog "trying to load all packages matching $loadPat" + } + if {![llength [info loaded]]} { + tclLog "warning: no packages are currently loaded, nothing" + tclLog "can possibly match '$loadPat'" + } + } + foreach pkg [info loaded] { + if {! [string match -nocase $loadPat [lindex $pkg 1]]} { + continue + } + if {$doVerbose} { + tclLog "package [lindex $pkg 1] matches '$loadPat'" + } + if {[catch { + load [lindex $pkg 0] [lindex $pkg 1] $c + } err]} { + if {$doVerbose} { + tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err" + } + } elseif {$doVerbose} { + tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]" + } + if {[lindex $pkg 1] eq "Tk"} { + # Withdraw . if Tk was loaded, to avoid showing a window. + $c eval [list wm withdraw .] + } + } + + $c eval { + # Stub out the package command so packages can + # require other packages. + + rename package __package_orig + proc package {what args} { + switch -- $what { + require { return ; # ignore transitive requires } + default { __package_orig $what {*}$args } + } + } + proc tclPkgUnknown args {} + package unknown tclPkgUnknown + + # Stub out the unknown command so package can call + # into each other during their initialilzation. + + proc unknown {args} {} + + # Stub out the auto_import mechanism + + proc auto_import {args} {} + + # reserve the ::tcl namespace for support procs + # and temporary variables. This might make it awkward + # to generate a pkgIndex.tcl file for the ::tcl namespace. + + namespace eval ::tcl { + variable dir ;# Current directory being processed + variable file ;# Current file being processed + variable direct ;# -direct flag value + variable x ;# Loop variable + variable debug ;# For debugging + variable type ;# "load" or "source", for -direct + variable namespaces ;# Existing namespaces (e.g., ::tcl) + variable packages ;# Existing packages (e.g., Tcl) + variable origCmds ;# Existing commands + variable newCmds ;# Newly created commands + variable newPkgs {} ;# Newly created packages + } + } + + $c eval [list set ::tcl::dir $dir] + $c eval [list set ::tcl::file $file] + $c eval [list set ::tcl::direct $direct] + + # Download needed procedures into the slave because we've + # just deleted the unknown procedure. This doesn't handle + # procedures with default arguments. + + foreach p {::tcl::Pkg::CompareExtension} { + $c eval [list namespace eval [namespace qualifiers $p] {}] + $c eval [list proc $p [info args $p] [info body $p]] + } + + if {[catch { + $c eval { + set ::tcl::debug "loading or sourcing" + + # we need to track command defined by each package even in + # the -direct case, because they are needed internally by + # the "partial pkgIndex.tcl" step above. + + proc ::tcl::GetAllNamespaces {{root ::}} { + set list $root + foreach ns [namespace children $root] { + lappend list {*}[::tcl::GetAllNamespaces $ns] + } + return $list + } + + # init the list of existing namespaces, packages, commands + + foreach ::tcl::x [::tcl::GetAllNamespaces] { + set ::tcl::namespaces($::tcl::x) 1 + } + foreach ::tcl::x [package names] { + if {[package provide $::tcl::x] ne ""} { + set ::tcl::packages($::tcl::x) 1 + } + } + set ::tcl::origCmds [info commands] + + # Try to load the file if it has the shared library + # extension, otherwise source it. It's important not to + # try to load files that aren't shared libraries, because + # on some systems (like SunOS) the loader will abort the + # whole application when it gets an error. + + if {[::tcl::Pkg::CompareExtension $::tcl::file [info sharedlibextension]]} { + # The "file join ." command below is necessary. + # Without it, if the file name has no \'s and we're + # on UNIX, the load command will invoke the + # LD_LIBRARY_PATH search mechanism, which could cause + # the wrong file to be used. + + set ::tcl::debug loading + load [file join $::tcl::dir $::tcl::file] + set ::tcl::type load + } else { + set ::tcl::debug sourcing + source [file join $::tcl::dir $::tcl::file] + set ::tcl::type source + } + + # As a performance optimization, if we are creating + # direct load packages, don't bother figuring out the + # set of commands created by the new packages. We + # only need that list for setting up the autoloading + # used in the non-direct case. + if { !$::tcl::direct } { + # See what new namespaces appeared, and import commands + # from them. Only exported commands go into the index. + + foreach ::tcl::x [::tcl::GetAllNamespaces] { + if {! [info exists ::tcl::namespaces($::tcl::x)]} { + namespace import -force ${::tcl::x}::* + } + + # Figure out what commands appeared + + foreach ::tcl::x [info commands] { + set ::tcl::newCmds($::tcl::x) 1 + } + foreach ::tcl::x $::tcl::origCmds { + unset -nocomplain ::tcl::newCmds($::tcl::x) + } + foreach ::tcl::x [array names ::tcl::newCmds] { + # determine which namespace a command comes from + + set ::tcl::abs [namespace origin $::tcl::x] + + # special case so that global names have no leading + # ::, this is required by the unknown command + + set ::tcl::abs \ + [lindex [auto_qualify $::tcl::abs ::] 0] + + if {$::tcl::x ne $::tcl::abs} { + # Name changed during qualification + + set ::tcl::newCmds($::tcl::abs) 1 + unset ::tcl::newCmds($::tcl::x) + } + } + } + } + + # Look through the packages that appeared, and if there is + # a version provided, then record it + + foreach ::tcl::x [package names] { + if {[package provide $::tcl::x] ne "" + && ![info exists ::tcl::packages($::tcl::x)]} { + lappend ::tcl::newPkgs \ + [list $::tcl::x [package provide $::tcl::x]] + } + } + } + } msg] == 1} { + set what [$c eval set ::tcl::debug] + if {$doVerbose} { + tclLog "warning: error while $what $file: $msg" + } + } else { + set what [$c eval set ::tcl::debug] + if {$doVerbose} { + tclLog "successful $what of $file" + } + set type [$c eval set ::tcl::type] + set cmds [lsort [$c eval array names ::tcl::newCmds]] + set pkgs [$c eval set ::tcl::newPkgs] + if {$doVerbose} { + if { !$direct } { + tclLog "commands provided were $cmds" + } + tclLog "packages provided were $pkgs" + } + if {[llength $pkgs] > 1} { + tclLog "warning: \"$file\" provides more than one package ($pkgs)" + } + foreach pkg $pkgs { + # cmds is empty/not used in the direct case + lappend files($pkg) [list $file $type $cmds] + } + + if {$doVerbose} { + tclLog "processed $file" + } + } + interp delete $c + } + + append index "# Tcl package index file, version 1.1\n" + append index "# This file is generated by the \"pkg_mkIndex$more\" command\n" + append index "# and sourced either when an application starts up or\n" + append index "# by a \"package unknown\" script. It invokes the\n" + append index "# \"package ifneeded\" command to set up package-related\n" + append index "# information so that packages will be loaded automatically\n" + append index "# in response to \"package require\" commands. When this\n" + append index "# script is sourced, the variable \$dir must contain the\n" + append index "# full path name of this file's directory.\n" + + foreach pkg [lsort [array names files]] { + set cmd {} + lassign $pkg name version + lappend cmd ::tcl::Pkg::Create -name $name -version $version + foreach spec [lsort -index 0 $files($pkg)] { + foreach {file type procs} $spec { + if { $direct } { + set procs {} + } + lappend cmd "-$type" [list $file $procs] + } + } + append index "\n[eval $cmd]" + } + + set f [open [file join $dir pkgIndex.tcl] w] + puts $f $index + close $f +} + +# tclPkgSetup -- +# This is a utility procedure use by pkgIndex.tcl files. It is invoked +# as part of a "package ifneeded" script. It calls "package provide" +# to indicate that a package is available, then sets entries in the +# auto_index array so that the package's files will be auto-loaded when +# the commands are used. +# +# Arguments: +# dir - Directory containing all the files for this package. +# pkg - Name of the package (no version number). +# version - Version number for the package, such as 2.1.3. +# files - List of files that constitute the package. Each +# element is a sub-list with three elements. The first +# is the name of a file relative to $dir, the second is +# "load" or "source", indicating whether the file is a +# loadable binary or a script to source, and the third +# is a list of commands defined by this file. + +proc tclPkgSetup {dir pkg version files} { + global auto_index + + package provide $pkg $version + foreach fileInfo $files { + set f [lindex $fileInfo 0] + set type [lindex $fileInfo 1] + foreach cmd [lindex $fileInfo 2] { + if {$type eq "load"} { + set auto_index($cmd) [list load [file join $dir $f] $pkg] + } else { + set auto_index($cmd) [list source [file join $dir $f]] + } + } + } +} + +# tclPkgUnknown -- +# This procedure provides the default for the "package unknown" function. +# It is invoked when a package that's needed can't be found. It scans +# the auto_path directories and their immediate children looking for +# pkgIndex.tcl files and sources any such files that are found to setup +# the package database. As it searches, it will recognize changes +# to the auto_path and scan any new directories. +# +# Arguments: +# name - Name of desired package. Not used. +# version - Version of desired package. Not used. +# exact - Either "-exact" or omitted. Not used. + +proc tclPkgUnknown {name args} { + global auto_path env + + if {![info exists auto_path]} { + return + } + # Cache the auto_path, because it may change while we run through + # the first set of pkgIndex.tcl files + set old_path [set use_path $auto_path] + while {[llength $use_path]} { + set dir [lindex $use_path end] + + # Make sure we only scan each directory one time. + if {[info exists tclSeenPath($dir)]} { + set use_path [lrange $use_path 0 end-1] + continue + } + set tclSeenPath($dir) 1 + + # we can't use glob in safe interps, so enclose the following + # in a catch statement, where we get the pkgIndex files out + # of the subdirectories + catch { + foreach file [glob -directory $dir -join -nocomplain \ + * pkgIndex.tcl] { + set dir [file dirname $file] + if {![info exists procdDirs($dir)]} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + } + set dir [lindex $use_path end] + if {![info exists procdDirs($dir)]} { + set file [file join $dir pkgIndex.tcl] + # safe interps usually don't have "file exists", + if {([interp issafe] || [file exists $file])} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + + set use_path [lrange $use_path 0 end-1] + + # Check whether any of the index scripts we [source]d above + # set a new value for $::auto_path. If so, then find any + # new directories on the $::auto_path, and lappend them to + # the $use_path we are working from. This gives index scripts + # the (arguably unwise) power to expand the index script search + # path while the search is in progress. + set index 0 + if {[llength $old_path] == [llength $auto_path]} { + foreach dir $auto_path old $old_path { + if {$dir ne $old} { + # This entry in $::auto_path has changed. + break + } + incr index + } + } + + # $index now points to the first element of $auto_path that + # has changed, or the beginning if $auto_path has changed length + # Scan the new elements of $auto_path for directories to add to + # $use_path. Don't add directories we've already seen, or ones + # already on the $use_path. + foreach dir [lrange $auto_path $index end] { + if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} { + lappend use_path $dir + } + } + set old_path $auto_path + } +} + +# tcl::MacOSXPkgUnknown -- +# This procedure extends the "package unknown" function for MacOSX. +# It scans the Resources/Scripts directories of the immediate children +# of the auto_path directories for pkgIndex files. +# +# Arguments: +# original - original [package unknown] procedure +# name - Name of desired package. Not used. +# version - Version of desired package. Not used. +# exact - Either "-exact" or omitted. Not used. + +proc tcl::MacOSXPkgUnknown {original name args} { + + # First do the cross-platform default search + uplevel 1 $original [linsert $args 0 $name] + + # Now do MacOSX specific searching + global auto_path + + if {![info exists auto_path]} { + return + } + # Cache the auto_path, because it may change while we run through + # the first set of pkgIndex.tcl files + set old_path [set use_path $auto_path] + while {[llength $use_path]} { + set dir [lindex $use_path end] + + # Make sure we only scan each directory one time. + if {[info exists tclSeenPath($dir)]} { + set use_path [lrange $use_path 0 end-1] + continue + } + set tclSeenPath($dir) 1 + + # get the pkgIndex files out of the subdirectories + foreach file [glob -directory $dir -join -nocomplain \ + * Resources Scripts pkgIndex.tcl] { + set dir [file dirname $file] + if {![info exists procdDirs($dir)]} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + set use_path [lrange $use_path 0 end-1] + + # Check whether any of the index scripts we [source]d above + # set a new value for $::auto_path. If so, then find any + # new directories on the $::auto_path, and lappend them to + # the $use_path we are working from. This gives index scripts + # the (arguably unwise) power to expand the index script search + # path while the search is in progress. + set index 0 + if {[llength $old_path] == [llength $auto_path]} { + foreach dir $auto_path old $old_path { + if {$dir ne $old} { + # This entry in $::auto_path has changed. + break + } + incr index + } + } + + # $index now points to the first element of $auto_path that + # has changed, or the beginning if $auto_path has changed length + # Scan the new elements of $auto_path for directories to add to + # $use_path. Don't add directories we've already seen, or ones + # already on the $use_path. + foreach dir [lrange $auto_path $index end] { + if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} { + lappend use_path $dir + } + } + set old_path $auto_path + } +} + +# ::tcl::Pkg::Create -- +# +# Given a package specification generate a "package ifneeded" statement +# for the package, suitable for inclusion in a pkgIndex.tcl file. +# +# Arguments: +# args arguments used by the Create function: +# -name packageName +# -version packageVersion +# -load {filename ?{procs}?} +# ... +# -source {filename ?{procs}?} +# ... +# +# Any number of -load and -source parameters may be +# specified, so long as there is at least one -load or +# -source parameter. If the procs component of a +# module specifier is left off, that module will be +# set up for direct loading; otherwise, it will be +# set up for lazy loading. If both -source and -load +# are specified, the -load'ed files will be loaded +# first, followed by the -source'd files. +# +# Results: +# An appropriate "package ifneeded" statement for the package. + +proc ::tcl::Pkg::Create {args} { + append err(usage) "[lindex [info level 0] 0] " + append err(usage) "-name packageName -version packageVersion" + append err(usage) "?-load {filename ?{procs}?}? ... " + append err(usage) "?-source {filename ?{procs}?}? ..." + + set err(wrongNumArgs) "wrong # args: should be \"$err(usage)\"" + set err(valueMissing) "value for \"%s\" missing: should be \"$err(usage)\"" + set err(unknownOpt) "unknown option \"%s\": should be \"$err(usage)\"" + set err(noLoadOrSource) "at least one of -load and -source must be given" + + # process arguments + set len [llength $args] + if { $len < 6 } { + error $err(wrongNumArgs) + } + + # Initialize parameters + array set opts {-name {} -version {} -source {} -load {}} + + # process parameters + for {set i 0} {$i < $len} {incr i} { + set flag [lindex $args $i] + incr i + switch -glob -- $flag { + "-name" - + "-version" { + if { $i >= $len } { + error [format $err(valueMissing) $flag] + } + set opts($flag) [lindex $args $i] + } + "-source" - + "-load" { + if { $i >= $len } { + error [format $err(valueMissing) $flag] + } + lappend opts($flag) [lindex $args $i] + } + default { + error [format $err(unknownOpt) [lindex $args $i]] + } + } + } + + # Validate the parameters + if { [llength $opts(-name)] == 0 } { + error [format $err(valueMissing) "-name"] + } + if { [llength $opts(-version)] == 0 } { + error [format $err(valueMissing) "-version"] + } + + if { [llength $opts(-source)] == 0 && [llength $opts(-load)] == 0 } { + error $err(noLoadOrSource) + } + + # OK, now everything is good. Generate the package ifneeded statment. + set cmdline "package ifneeded $opts(-name) $opts(-version) " + + set cmdList {} + set lazyFileList {} + + # Handle -load and -source specs + foreach key {load source} { + foreach filespec $opts(-$key) { + lassign $filespec filename proclist + + if { [llength $proclist] == 0 } { + set cmd "\[list $key \[file join \$dir [list $filename]\]\]" + lappend cmdList $cmd + } else { + lappend lazyFileList [list $filename $key $proclist] + } + } + } + + if { [llength $lazyFileList] > 0 } { + lappend cmdList "\[list tclPkgSetup \$dir $opts(-name)\ + $opts(-version) [list $lazyFileList]\]" + } + append cmdline [join $cmdList "\\n"] + return $cmdline +} + +interp alias {} ::pkg::create {} ::tcl::Pkg::Create diff --git a/inkstitch/bin/tcl/parray.tcl b/inkstitch/bin/tcl/parray.tcl new file mode 100644 index 0000000..3ce9817 --- /dev/null +++ b/inkstitch/bin/tcl/parray.tcl @@ -0,0 +1,28 @@ +# parray: +# Print the contents of a global array on stdout. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +proc parray {a {pattern *}} { + upvar 1 $a array + if {![array exists array]} { + error "\"$a\" isn't an array" + } + set maxl 0 + set names [lsort [array names array $pattern]] + foreach name $names { + if {[string length $name] > $maxl} { + set maxl [string length $name] + } + } + set maxl [expr {$maxl + [string length $a] + 2}] + foreach name $names { + set nameString [format %s(%s) $a $name] + puts stdout [format "%-*s = %s" $maxl $nameString $array($name)] + } +} diff --git a/inkstitch/bin/tcl/safe.tcl b/inkstitch/bin/tcl/safe.tcl new file mode 100644 index 0000000..1a340a1 --- /dev/null +++ b/inkstitch/bin/tcl/safe.tcl @@ -0,0 +1,1127 @@ +# safe.tcl -- +# +# This file provide a safe loading/sourcing mechanism for safe interpreters. +# It implements a virtual path mecanism to hide the real pathnames from the +# slave. It runs in a master interpreter and sets up data structure and +# aliases that will be invoked when used from a slave interpreter. +# +# See the safe.n man page for details. +# +# Copyright (c) 1996-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# +# The implementation is based on namespaces. These naming conventions are +# followed: +# Private procs starts with uppercase. +# Public procs are exported and starts with lowercase +# + +# Needed utilities package +package require opt 0.4.1 + +# Create the safe namespace +namespace eval ::safe { + # Exported API: + namespace export interpCreate interpInit interpConfigure interpDelete \ + interpAddToAccessPath interpFindInAccessPath setLogCmd +} + +# Helper function to resolve the dual way of specifying staticsok (either +# by -noStatics or -statics 0) +proc ::safe::InterpStatics {} { + foreach v {Args statics noStatics} { + upvar $v $v + } + set flag [::tcl::OptProcArgGiven -noStatics] + if {$flag && (!$noStatics == !$statics) + && ([::tcl::OptProcArgGiven -statics])} { + return -code error\ + "conflicting values given for -statics and -noStatics" + } + if {$flag} { + return [expr {!$noStatics}] + } else { + return $statics + } +} + +# Helper function to resolve the dual way of specifying nested loading +# (either by -nestedLoadOk or -nested 1) +proc ::safe::InterpNested {} { + foreach v {Args nested nestedLoadOk} { + upvar $v $v + } + set flag [::tcl::OptProcArgGiven -nestedLoadOk] + # note that the test here is the opposite of the "InterpStatics" one + # (it is not -noNested... because of the wanted default value) + if {$flag && (!$nestedLoadOk != !$nested) + && ([::tcl::OptProcArgGiven -nested])} { + return -code error\ + "conflicting values given for -nested and -nestedLoadOk" + } + if {$flag} { + # another difference with "InterpStatics" + return $nestedLoadOk + } else { + return $nested + } +} + +#### +# +# API entry points that needs argument parsing : +# +#### + +# Interface/entry point function and front end for "Create" +proc ::safe::interpCreate {args} { + set Args [::tcl::OptKeyParse ::safe::interpCreate $args] + InterpCreate $slave $accessPath \ + [InterpStatics] [InterpNested] $deleteHook +} + +proc ::safe::interpInit {args} { + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + if {![::interp exists $slave]} { + return -code error "\"$slave\" is not an interpreter" + } + InterpInit $slave $accessPath \ + [InterpStatics] [InterpNested] $deleteHook +} + +# Check that the given slave is "one of us" +proc ::safe::CheckInterp {slave} { + namespace upvar ::safe S$slave state + if {![info exists state] || ![::interp exists $slave]} { + return -code error \ + "\"$slave\" is not an interpreter managed by ::safe::" + } +} + +# Interface/entry point function and front end for "Configure". This code +# is awfully pedestrian because it would need more coupling and support +# between the way we store the configuration values in safe::interp's and +# the Opt package. Obviously we would like an OptConfigure to avoid +# duplicating all this code everywhere. +# -> TODO (the app should share or access easily the program/value stored +# by opt) + +# This is even more complicated by the boolean flags with no values that +# we had the bad idea to support for the sake of user simplicity in +# create/init but which makes life hard in configure... +# So this will be hopefully written and some integrated with opt1.0 +# (hopefully for tcl8.1 ?) +proc ::safe::interpConfigure {args} { + switch [llength $args] { + 1 { + # If we have exactly 1 argument the semantic is to return all + # the current configuration. We still call OptKeyParse though + # we know that "slave" is our given argument because it also + # checks for the "-help" option. + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + CheckInterp $slave + namespace upvar ::safe S$slave state + + return [join [list \ + [list -accessPath $state(access_path)] \ + [list -statics $state(staticsok)] \ + [list -nested $state(nestedok)] \ + [list -deleteHook $state(cleanupHook)]]] + } + 2 { + # If we have exactly 2 arguments the semantic is a "configure + # get" + lassign $args slave arg + + # get the flag sub program (we 'know' about Opt's internal + # representation of data) + set desc [lindex [::tcl::OptKeyGetDesc ::safe::interpIC] 2] + set hits [::tcl::OptHits desc $arg] + if {$hits > 1} { + return -code error [::tcl::OptAmbigous $desc $arg] + } elseif {$hits == 0} { + return -code error [::tcl::OptFlagUsage $desc $arg] + } + CheckInterp $slave + namespace upvar ::safe S$slave state + + set item [::tcl::OptCurDesc $desc] + set name [::tcl::OptName $item] + switch -exact -- $name { + -accessPath {return [list -accessPath $state(access_path)]} + -statics {return [list -statics $state(staticsok)]} + -nested {return [list -nested $state(nestedok)]} + -deleteHook {return [list -deleteHook $state(cleanupHook)]} + -noStatics { + # it is most probably a set in fact but we would need + # then to jump to the set part and it is not *sure* + # that it is a set action that the user want, so force + # it to use the unambigous -statics ?value? instead: + return -code error\ + "ambigous query (get or set -noStatics ?)\ + use -statics instead" + } + -nestedLoadOk { + return -code error\ + "ambigous query (get or set -nestedLoadOk ?)\ + use -nested instead" + } + default { + return -code error "unknown flag $name (bug)" + } + } + } + default { + # Otherwise we want to parse the arguments like init and + # create did + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + CheckInterp $slave + namespace upvar ::safe S$slave state + + # Get the current (and not the default) values of whatever has + # not been given: + if {![::tcl::OptProcArgGiven -accessPath]} { + set doreset 1 + set accessPath $state(access_path) + } else { + set doreset 0 + } + if { + ![::tcl::OptProcArgGiven -statics] + && ![::tcl::OptProcArgGiven -noStatics] + } { + set statics $state(staticsok) + } else { + set statics [InterpStatics] + } + if { + [::tcl::OptProcArgGiven -nested] || + [::tcl::OptProcArgGiven -nestedLoadOk] + } { + set nested [InterpNested] + } else { + set nested $state(nestedok) + } + if {![::tcl::OptProcArgGiven -deleteHook]} { + set deleteHook $state(cleanupHook) + } + # we can now reconfigure : + InterpSetConfig $slave $accessPath $statics $nested $deleteHook + # auto_reset the slave (to completly synch the new access_path) + if {$doreset} { + if {[catch {::interp eval $slave {auto_reset}} msg]} { + Log $slave "auto_reset failed: $msg" + } else { + Log $slave "successful auto_reset" NOTICE + } + } + } + } +} + +#### +# +# Functions that actually implements the exported APIs +# +#### + +# +# safe::InterpCreate : doing the real job +# +# This procedure creates a safe slave and initializes it with the safe +# base aliases. +# NB: slave name must be simple alphanumeric string, no spaces, no (), no +# {},... {because the state array is stored as part of the name} +# +# Returns the slave name. +# +# Optional Arguments : +# + slave name : if empty, generated name will be used +# + access_path: path list controlling where load/source can occur, +# if empty: the master auto_path will be used. +# + staticsok : flag, if 0 :no static package can be loaded (load {} Xxx) +# if 1 :static packages are ok. +# + nestedok: flag, if 0 :no loading to sub-sub interps (load xx xx sub) +# if 1 : multiple levels are ok. + +# use the full name and no indent so auto_mkIndex can find us +proc ::safe::InterpCreate { + slave + access_path + staticsok + nestedok + deletehook + } { + # Create the slave. + if {$slave ne ""} { + ::interp create -safe $slave + } else { + # empty argument: generate slave name + set slave [::interp create -safe] + } + Log $slave "Created" NOTICE + + # Initialize it. (returns slave name) + InterpInit $slave $access_path $staticsok $nestedok $deletehook +} + +# +# InterpSetConfig (was setAccessPath) : +# Sets up slave virtual auto_path and corresponding structure within +# the master. Also sets the tcl_library in the slave to be the first +# directory in the path. +# NB: If you change the path after the slave has been initialized you +# probably need to call "auto_reset" in the slave in order that it gets +# the right auto_index() array values. + +proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} { + global auto_path + + # determine and store the access path if empty + if {$access_path eq ""} { + set access_path $auto_path + + # Make sure that tcl_library is in auto_path and at the first + # position (needed by setAccessPath) + set where [lsearch -exact $access_path [info library]] + if {$where == -1} { + # not found, add it. + set access_path [linsert $access_path 0 [info library]] + Log $slave "tcl_library was not in auto_path,\ + added it to slave's access_path" NOTICE + } elseif {$where != 0} { + # not first, move it first + set access_path [linsert \ + [lreplace $access_path $where $where] \ + 0 [info library]] + Log $slave "tcl_libray was not in first in auto_path,\ + moved it to front of slave's access_path" NOTICE + } + + # Add 1st level sub dirs (will searched by auto loading from tcl + # code in the slave using glob and thus fail, so we add them here + # so by default it works the same). + set access_path [AddSubDirs $access_path] + } + + Log $slave "Setting accessPath=($access_path) staticsok=$staticsok\ + nestedok=$nestedok deletehook=($deletehook)" NOTICE + + namespace upvar ::safe S$slave state + + # clear old autopath if it existed + # build new one + # Extend the access list with the paths used to look for Tcl Modules. + # We save the virtual form separately as well, as syncing it with the + # slave has to be defered until the necessary commands are present for + # setup. + + set norm_access_path {} + set slave_access_path {} + set map_access_path {} + set remap_access_path {} + set slave_tm_path {} + + set i 0 + foreach dir $access_path { + set token [PathToken $i] + lappend slave_access_path $token + lappend map_access_path $token $dir + lappend remap_access_path $dir $token + lappend norm_access_path [file normalize $dir] + incr i + } + + set morepaths [::tcl::tm::list] + while {[llength $morepaths]} { + set addpaths $morepaths + set morepaths {} + + foreach dir $addpaths { + # Prevent the addition of dirs on the tm list to the + # result if they are already known. + if {[dict exists $remap_access_path $dir]} { + continue + } + + set token [PathToken $i] + lappend access_path $dir + lappend slave_access_path $token + lappend map_access_path $token $dir + lappend remap_access_path $dir $token + lappend norm_access_path [file normalize $dir] + lappend slave_tm_path $token + incr i + + # [Bug 2854929] + # Recursively find deeper paths which may contain + # modules. Required to handle modules with names like + # 'platform::shell', which translate into + # 'platform/shell-X.tm', i.e arbitrarily deep + # subdirectories. + lappend morepaths {*}[glob -nocomplain -directory $dir -type d *] + } + } + + set state(access_path) $access_path + set state(access_path,map) $map_access_path + set state(access_path,remap) $remap_access_path + set state(access_path,norm) $norm_access_path + set state(access_path,slave) $slave_access_path + set state(tm_path_slave) $slave_tm_path + set state(staticsok) $staticsok + set state(nestedok) $nestedok + set state(cleanupHook) $deletehook + + SyncAccessPath $slave +} + +# +# +# FindInAccessPath: +# Search for a real directory and returns its virtual Id (including the +# "$") +proc ::safe::interpFindInAccessPath {slave path} { + namespace upvar ::safe S$slave state + + if {![dict exists $state(access_path,remap) $path]} { + return -code error "$path not found in access path $access_path" + } + + return [dict get $state(access_path,remap) $path] +} + +# +# addToAccessPath: +# add (if needed) a real directory to access path and return its +# virtual token (including the "$"). +proc ::safe::interpAddToAccessPath {slave path} { + # first check if the directory is already in there + # (inlined interpFindInAccessPath). + namespace upvar ::safe S$slave state + + if {[dict exists $state(access_path,remap) $path]} { + return [dict get $state(access_path,remap) $path] + } + + # new one, add it: + set token [PathToken [llength $state(access_path)]] + + lappend state(access_path) $path + lappend state(access_path,slave) $token + lappend state(access_path,map) $token $path + lappend state(access_path,remap) $path $token + lappend state(access_path,norm) [file normalize $path] + + SyncAccessPath $slave + return $token +} + +# This procedure applies the initializations to an already existing +# interpreter. It is useful when you want to install the safe base aliases +# into a preexisting safe interpreter. +proc ::safe::InterpInit { + slave + access_path + staticsok + nestedok + deletehook + } { + # Configure will generate an access_path when access_path is empty. + InterpSetConfig $slave $access_path $staticsok $nestedok $deletehook + + # NB we need to add [namespace current], aliases are always absolute + # paths. + + # These aliases let the slave load files to define new commands + # This alias lets the slave use the encoding names, convertfrom, + # convertto, and system, but not "encoding system " to set the + # system encoding. + # Handling Tcl Modules, we need a restricted form of Glob. + # This alias interposes on the 'exit' command and cleanly terminates + # the slave. + + foreach {command alias} { + source AliasSource + load AliasLoad + encoding AliasEncoding + exit interpDelete + glob AliasGlob + } { + ::interp alias $slave $command {} [namespace current]::$alias $slave + } + + # This alias lets the slave have access to a subset of the 'file' + # command functionality. + + AliasSubset $slave file \ + file dir.* join root.* ext.* tail path.* split + + # Subcommands of info + foreach {subcommand alias} { + nameofexecutable AliasExeName + } { + ::interp alias $slave ::tcl::info::$subcommand \ + {} [namespace current]::$alias $slave + } + + # The allowed slave variables already have been set by Tcl_MakeSafe(3) + + # Source init.tcl and tm.tcl into the slave, to get auto_load and + # other procedures defined: + + if {[catch {::interp eval $slave { + source [file join $tcl_library init.tcl] + }} msg]} { + Log $slave "can't source init.tcl ($msg)" + return -code error "can't source init.tcl into slave $slave ($msg)" + } + + if {[catch {::interp eval $slave { + source [file join $tcl_library tm.tcl] + }} msg]} { + Log $slave "can't source tm.tcl ($msg)" + return -code error "can't source tm.tcl into slave $slave ($msg)" + } + + # Sync the paths used to search for Tcl modules. This can be done only + # now, after tm.tcl was loaded. + namespace upvar ::safe S$slave state + if {[llength $state(tm_path_slave)] > 0} { + ::interp eval $slave [list \ + ::tcl::tm::add {*}[lreverse $state(tm_path_slave)]] + } + return $slave +} + +# Add (only if needed, avoid duplicates) 1 level of sub directories to an +# existing path list. Also removes non directories from the returned +# list. +proc ::safe::AddSubDirs {pathList} { + set res {} + foreach dir $pathList { + if {[file isdirectory $dir]} { + # check that we don't have it yet as a children of a previous + # dir + if {$dir ni $res} { + lappend res $dir + } + foreach sub [glob -directory $dir -nocomplain *] { + if {[file isdirectory $sub] && ($sub ni $res)} { + # new sub dir, add it ! + lappend res $sub + } + } + } + } + return $res +} + +# This procedure deletes a safe slave managed by Safe Tcl and cleans up +# associated state: + +proc ::safe::interpDelete {slave} { + Log $slave "About to delete" NOTICE + + namespace upvar ::safe S$slave state + + # If the slave has a cleanup hook registered, call it. Check the + # existance because we might be called to delete an interp which has + # not been registered with us at all + + if {[info exists state(cleanupHook)]} { + set hook $state(cleanupHook) + if {[llength $hook]} { + # remove the hook now, otherwise if the hook calls us somehow, + # we'll loop + unset state(cleanupHook) + if {[catch { + {*}$hook $slave + } err]} { + Log $slave "Delete hook error ($err)" + } + } + } + + # Discard the global array of state associated with the slave, and + # delete the interpreter. + + if {[info exists state]} { + unset state + } + + # if we have been called twice, the interp might have been deleted + # already + if {[::interp exists $slave]} { + ::interp delete $slave + Log $slave "Deleted" NOTICE + } + + return +} + +# Set (or get) the logging mecanism + +proc ::safe::setLogCmd {args} { + variable Log + set la [llength $args] + if {$la == 0} { + return $Log + } elseif {$la == 1} { + set Log [lindex $args 0] + } else { + set Log $args + } + + if {$Log eq ""} { + # Disable logging completely. Calls to it will be compiled out + # of all users. + proc ::safe::Log {args} {} + } else { + # Activate logging, define proper command. + + proc ::safe::Log {slave msg {type ERROR}} { + variable Log + {*}$Log "$type for slave $slave : $msg" + return + } + } +} + +# ------------------- END OF PUBLIC METHODS ------------ + +# +# Sets the slave auto_path to the master recorded value. Also sets +# tcl_library to the first token of the virtual path. +# +proc ::safe::SyncAccessPath {slave} { + namespace upvar ::safe S$slave state + + set slave_access_path $state(access_path,slave) + ::interp eval $slave [list set auto_path $slave_access_path] + + Log $slave "auto_path in $slave has been set to $slave_access_path"\ + NOTICE + + # This code assumes that info library is the first element in the + # list of auto_path's. See -> InterpSetConfig for the code which + # ensures this condition. + + ::interp eval $slave [list \ + set tcl_library [lindex $slave_access_path 0]] +} + +# Returns the virtual token for directory number N. +proc ::safe::PathToken {n} { + # We need to have a ":" in the token string so [file join] on the + # mac won't turn it into a relative path. + return "\$p(:$n:)" ;# Form tested by case 7.2 +} + +# +# translate virtual path into real path +# +proc ::safe::TranslatePath {slave path} { + namespace upvar ::safe S$slave state + + # somehow strip the namespaces 'functionality' out (the danger is that + # we would strip valid macintosh "../" queries... : + if {[string match "*::*" $path] || [string match "*..*" $path]} { + return -code error "invalid characters in path $path" + } + + # Use a cached map instead of computed local vars and subst. + + return [string map $state(access_path,map) $path] +} + +# file name control (limit access to files/resources that should be a +# valid tcl source file) +proc ::safe::CheckFileName {slave file} { + # This used to limit what can be sourced to ".tcl" and forbid files + # with more than 1 dot and longer than 14 chars, but I changed that + # for 8.4 as a safe interp has enough internal protection already to + # allow sourcing anything. - hobbs + + if {![file exists $file]} { + # don't tell the file path + return -code error "no such file or directory" + } + + if {![file readable $file]} { + # don't tell the file path + return -code error "not readable" + } +} + +# AliasGlob is the target of the "glob" alias in safe interpreters. +proc ::safe::AliasGlob {slave args} { + Log $slave "GLOB ! $args" NOTICE + set cmd {} + set at 0 + array set got { + -directory 0 + -nocomplain 0 + -join 0 + -tails 0 + -- 0 + } + + if {$::tcl_platform(platform) eq "windows"} { + set dirPartRE {^(.*)[\\/]([^\\/]*)$} + } else { + set dirPartRE {^(.*)/([^/]*)$} + } + + set dir {} + set virtualdir {} + + while {$at < [llength $args]} { + switch -glob -- [set opt [lindex $args $at]] { + -nocomplain - -- - -join - -tails { + lappend cmd $opt + set got($opt) 1 + incr at + } + -types - -type { + lappend cmd -types [lindex $args [incr at]] + incr at + } + -directory { + if {$got($opt)} { + return -code error \ + {"-directory" cannot be used with "-path"} + } + set got($opt) 1 + set virtualdir [lindex $args [incr at]] + incr at + } + pkgIndex.tcl { + # Oops, this is globbing a subdirectory in regular package + # search. That is not wanted. Abort, handler does catch + # already (because glob was not defined before). See + # package.tcl, lines 484ff in tclPkgUnknown. + return -code error "unknown command glob" + } + -* { + Log $slave "Safe base rejecting glob option '$opt'" + return -code error "Safe base rejecting glob option '$opt'" + } + default { + break + } + } + if {$got(--)} break + } + + # Get the real path from the virtual one and check that the path is in the + # access path of that slave. Done after basic argument processing so that + # we know if -nocomplain is set. + if {$got(-directory)} { + if {[catch { + set dir [TranslatePath $slave $virtualdir] + DirInAccessPath $slave $dir + } msg]} { + Log $slave $msg + if {$got(-nocomplain)} { + return + } + return -code error "permission denied" + } + lappend cmd -directory $dir + } + + # Apply the -join semantics ourselves + if {$got(-join)} { + set args [lreplace $args $at end [join [lrange $args $at end] "/"]] + } + + # Process remaining pattern arguments + set firstPattern [llength $cmd] + foreach opt [lrange $args $at end] { + if {![regexp $dirPartRE $opt -> thedir thefile]} { + set thedir . + } + if {$thedir eq "*"} { + set mapped 0 + foreach d [glob -directory [TranslatePath $slave $virtualdir] \ + -types d -tails *] { + catch { + DirInAccessPath $slave \ + [TranslatePath $slave [file join $virtualdir $d]] + if {$thefile eq "pkgIndex.tcl" || $thefile eq "*.tm"} { + lappend cmd [file join $d $thefile] + set mapped 1 + } + } + } + if {$mapped} continue + } + if {[catch { + set thedir [file join $virtualdir $thedir] + DirInAccessPath $slave [TranslatePath $slave $thedir] + } msg]} { + Log $slave $msg + if {$got(-nocomplain)} continue + return -code error "permission denied" + } + lappend cmd $opt + } + + Log $slave "GLOB = $cmd" NOTICE + + if {$got(-nocomplain) && [llength $cmd] eq $firstPattern} { + return + } + if {[catch { + ::interp invokehidden $slave glob {*}$cmd + } msg]} { + Log $slave $msg + return -code error "script error" + } + + Log $slave "GLOB < $msg" NOTICE + + # Translate path back to what the slave should see. + set res {} + set l [string length $dir] + foreach p $msg { + if {[string equal -length $l $dir $p]} { + set p [string replace $p 0 [expr {$l-1}] $virtualdir] + } + lappend res $p + } + + Log $slave "GLOB > $res" NOTICE + return $res +} + +# AliasSource is the target of the "source" alias in safe interpreters. + +proc ::safe::AliasSource {slave args} { + set argc [llength $args] + # Extended for handling of Tcl Modules to allow not only "source + # filename", but "source -encoding E filename" as well. + if {[lindex $args 0] eq "-encoding"} { + incr argc -2 + set encoding [lindex $args 1] + set at 2 + if {$encoding eq "identity"} { + Log $slave "attempt to use the identity encoding" + return -code error "permission denied" + } + } else { + set at 0 + set encoding {} + } + if {$argc != 1} { + set msg "wrong # args: should be \"source ?-encoding E? fileName\"" + Log $slave "$msg ($args)" + return -code error $msg + } + set file [lindex $args $at] + + # get the real path from the virtual one. + if {[catch { + set realfile [TranslatePath $slave $file] + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # check that the path is in the access path of that slave + if {[catch { + FileInAccessPath $slave $realfile + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # do the checks on the filename : + if {[catch { + CheckFileName $slave $realfile + } msg]} { + Log $slave "$realfile:$msg" + return -code error $msg + } + + # Passed all the tests, lets source it. Note that we do this all manually + # because we want to control [info script] in the slave so information + # doesn't leak so much. [Bug 2913625] + set old [::interp eval $slave {info script}] + set code [catch { + set f [open $realfile] + fconfigure $f -eofchar \032 + if {$encoding ne ""} { + fconfigure $f -encoding $encoding + } + set contents [read $f] + close $f + ::interp eval $slave [list info script $file] + ::interp eval $slave $contents + } msg opt] + catch {interp eval $slave [list info script $old]} + # Note that all non-errors are fine result codes from [source], so we must + # take a little care to do it properly. [Bug 2923613] + if {$code == 1} { + Log $slave $msg + return -code error "script error" + } + return -code $code -options $opt $msg +} + +# AliasLoad is the target of the "load" alias in safe interpreters. + +proc ::safe::AliasLoad {slave file args} { + set argc [llength $args] + if {$argc > 2} { + set msg "load error: too many arguments" + Log $slave "$msg ($argc) {$file $args}" + return -code error $msg + } + + # package name (can be empty if file is not). + set package [lindex $args 0] + + namespace upvar ::safe S$slave state + + # Determine where to load. load use a relative interp path and {} + # means self, so we can directly and safely use passed arg. + set target [lindex $args 1] + if {$target ne ""} { + # we will try to load into a sub sub interp; check that we want to + # authorize that. + if {!$state(nestedok)} { + Log $slave "loading to a sub interp (nestedok)\ + disabled (trying to load $package to $target)" + return -code error "permission denied (nested load)" + } + } + + # Determine what kind of load is requested + if {$file eq ""} { + # static package loading + if {$package eq ""} { + set msg "load error: empty filename and no package name" + Log $slave $msg + return -code error $msg + } + if {!$state(staticsok)} { + Log $slave "static packages loading disabled\ + (trying to load $package to $target)" + return -code error "permission denied (static package)" + } + } else { + # file loading + + # get the real path from the virtual one. + if {[catch { + set file [TranslatePath $slave $file] + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # check the translated path + if {[catch { + FileInAccessPath $slave $file + } msg]} { + Log $slave $msg + return -code error "permission denied (path)" + } + } + + if {[catch { + ::interp invokehidden $slave load $file $package $target + } msg]} { + Log $slave $msg + return -code error $msg + } + + return $msg +} + +# FileInAccessPath raises an error if the file is not found in the list of +# directories contained in the (master side recorded) slave's access path. + +# the security here relies on "file dirname" answering the proper +# result... needs checking ? +proc ::safe::FileInAccessPath {slave file} { + namespace upvar ::safe S$slave state + set access_path $state(access_path) + + if {[file isdirectory $file]} { + return -code error "\"$file\": is a directory" + } + set parent [file dirname $file] + + # Normalize paths for comparison since lsearch knows nothing of + # potential pathname anomalies. + set norm_parent [file normalize $parent] + + namespace upvar ::safe S$slave state + if {$norm_parent ni $state(access_path,norm)} { + return -code error "\"$file\": not in access_path" + } +} + +proc ::safe::DirInAccessPath {slave dir} { + namespace upvar ::safe S$slave state + set access_path $state(access_path) + + if {[file isfile $dir]} { + return -code error "\"$dir\": is a file" + } + + # Normalize paths for comparison since lsearch knows nothing of + # potential pathname anomalies. + set norm_dir [file normalize $dir] + + namespace upvar ::safe S$slave state + if {$norm_dir ni $state(access_path,norm)} { + return -code error "\"$dir\": not in access_path" + } +} + +# This procedure enables access from a safe interpreter to only a subset +# of the subcommands of a command: + +proc ::safe::Subset {slave command okpat args} { + set subcommand [lindex $args 0] + if {[regexp $okpat $subcommand]} { + return [$command {*}$args] + } + set msg "not allowed to invoke subcommand $subcommand of $command" + Log $slave $msg + return -code error $msg +} + +# This procedure installs an alias in a slave that invokes "safesubset" in +# the master to execute allowed subcommands. It precomputes the pattern of +# allowed subcommands; you can use wildcards in the pattern if you wish to +# allow subcommand abbreviation. +# +# Syntax is: AliasSubset slave alias target subcommand1 subcommand2... + +proc ::safe::AliasSubset {slave alias target args} { + set pat "^([join $args |])\$" + ::interp alias $slave $alias {}\ + [namespace current]::Subset $slave $target $pat +} + +# AliasEncoding is the target of the "encoding" alias in safe interpreters. + +proc ::safe::AliasEncoding {slave option args} { + # Careful; do not want empty option to get through to the [string equal] + if {[regexp {^(name.*|convert.*|)$} $option]} { + return [::interp invokehidden $slave encoding $option {*}$args] + } + + if {[string equal -length [string length $option] $option "system"]} { + if {[llength $args] == 0} { + # passed all the tests , lets source it: + if {[catch { + set sysenc [::interp invokehidden $slave encoding system] + } msg]} { + Log $slave $msg + return -code error "script error" + } + return $sysenc + } + set msg "wrong # args: should be \"encoding system\"" + set code {TCL WRONGARGS} + } else { + set msg "bad option \"$option\": must be convertfrom, convertto, names, or system" + set code [list TCL LOOKUP INDEX option $option] + } + Log $slave $msg + return -code error -errorcode $code $msg +} + +# Various minor hiding of platform features. [Bug 2913625] + +proc ::safe::AliasExeName {slave} { + return "" +} + +proc ::safe::Setup {} { + #### + # + # Setup the arguments parsing + # + #### + + # Share the descriptions + set temp [::tcl::OptKeyRegister { + {-accessPath -list {} "access path for the slave"} + {-noStatics "prevent loading of statically linked pkgs"} + {-statics true "loading of statically linked pkgs"} + {-nestedLoadOk "allow nested loading"} + {-nested false "nested loading"} + {-deleteHook -script {} "delete hook"} + }] + + # create case (slave is optional) + ::tcl::OptKeyRegister { + {?slave? -name {} "name of the slave (optional)"} + } ::safe::interpCreate + + # adding the flags sub programs to the command program (relying on Opt's + # internal implementation details) + lappend ::tcl::OptDesc(::safe::interpCreate) $::tcl::OptDesc($temp) + + # init and configure (slave is needed) + ::tcl::OptKeyRegister { + {slave -name {} "name of the slave"} + } ::safe::interpIC + + # adding the flags sub programs to the command program (relying on Opt's + # internal implementation details) + lappend ::tcl::OptDesc(::safe::interpIC) $::tcl::OptDesc($temp) + + # temp not needed anymore + ::tcl::OptKeyDelete $temp + + #### + # + # Default: No logging. + # + #### + + setLogCmd {} + + # Log eventually. + # To enable error logging, set Log to {puts stderr} for instance, + # via setLogCmd. + return +} + +namespace eval ::safe { + # internal variables + + # Log command, set via 'setLogCmd'. Logging is disabled when empty. + variable Log {} + + # The package maintains a state array per slave interp under its + # control. The name of this array is S. This array is + # brought into scope where needed, using 'namespace upvar'. The S + # prefix is used to avoid that a slave interp called "Log" smashes + # the "Log" variable. + # + # The array's elements are: + # + # access_path : List of paths accessible to the slave. + # access_path,norm : Ditto, in normalized form. + # access_path,slave : Ditto, as the path tokens as seen by the slave. + # access_path,map : dict ( token -> path ) + # access_path,remap : dict ( path -> token ) + # tm_path_slave : List of TM root directories, as tokens seen by the slave. + # staticsok : Value of option -statics + # nestedok : Value of option -nested + # cleanupHook : Value of option -deleteHook +} + +::safe::Setup diff --git a/inkstitch/bin/tcl/tclIndex b/inkstitch/bin/tcl/tclIndex new file mode 100644 index 0000000..010616f --- /dev/null +++ b/inkstitch/bin/tcl/tclIndex @@ -0,0 +1,87 @@ +# Tcl autoload index file, version 2.0 +# This file is generated by the "auto_mkindex" command +# and sourced to set up indexing information for one or +# more commands. Typically each line is a command that +# sets an element in the auto_index array, where the +# element name is the name of a command and the value is +# a script that loads the command. + +set auto_index(auto_reset) [list source [file join $dir auto.tcl]] +set auto_index(tcl_findLibrary) [list source [file join $dir auto.tcl]] +set auto_index(auto_mkindex) [list source [file join $dir auto.tcl]] +set auto_index(auto_mkindex_old) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::init) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::cleanup) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::mkindex) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::hook) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::slavehook) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::command) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::commandInit) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::fullname) [list source [file join $dir auto.tcl]] +set auto_index(history) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistAdd) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistKeep) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistClear) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistInfo) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistRedo) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistIndex) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistEvent) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistChange) [list source [file join $dir history.tcl]] +set auto_index(pkg_mkIndex) [list source [file join $dir package.tcl]] +set auto_index(tclPkgSetup) [list source [file join $dir package.tcl]] +set auto_index(tclPkgUnknown) [list source [file join $dir package.tcl]] +set auto_index(::tcl::MacOSXPkgUnknown) [list source [file join $dir package.tcl]] +set auto_index(::pkg::create) [list source [file join $dir package.tcl]] +set auto_index(parray) [list source [file join $dir parray.tcl]] +set auto_index(::safe::InterpStatics) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpNested) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpCreate) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpInit) [list source [file join $dir safe.tcl]] +set auto_index(::safe::CheckInterp) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpConfigure) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpCreate) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpSetConfig) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpFindInAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpAddToAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpInit) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AddSubDirs) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpDelete) [list source [file join $dir safe.tcl]] +set auto_index(::safe::setLogCmd) [list source [file join $dir safe.tcl]] +set auto_index(::safe::SyncAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpStateName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::IsInterp) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathToken) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathListName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::VirtualPathListName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathNumberName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::StaticsOkName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::NestedOkName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Toplevel) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Set) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Lappend) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Unset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Exists) [list source [file join $dir safe.tcl]] +set auto_index(::safe::GetAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::StaticsOk) [list source [file join $dir safe.tcl]] +set auto_index(::safe::NestedOk) [list source [file join $dir safe.tcl]] +set auto_index(::safe::DeleteHookName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::TranslatePath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Log) [list source [file join $dir safe.tcl]] +set auto_index(::safe::CheckFileName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasSource) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasLoad) [list source [file join $dir safe.tcl]] +set auto_index(::safe::FileInAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Subset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasSubset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasEncoding) [list source [file join $dir safe.tcl]] +set auto_index(tcl_wordBreakAfter) [list source [file join $dir word.tcl]] +set auto_index(tcl_wordBreakBefore) [list source [file join $dir word.tcl]] +set auto_index(tcl_endOfWord) [list source [file join $dir word.tcl]] +set auto_index(tcl_startOfNextWord) [list source [file join $dir word.tcl]] +set auto_index(tcl_startOfPreviousWord) [list source [file join $dir word.tcl]] +set auto_index(::tcl::tm::add) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::remove) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::list) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::UnknownHandler) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::roots) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::path) [list source [file join $dir tm.tcl]] diff --git a/inkstitch/bin/tcl/tm.tcl b/inkstitch/bin/tcl/tm.tcl new file mode 100644 index 0000000..7b9cafe --- /dev/null +++ b/inkstitch/bin/tcl/tm.tcl @@ -0,0 +1,387 @@ +# -*- tcl -*- +# +# Searching for Tcl Modules. Defines a procedure, declares it as the +# primary command for finding packages, however also uses the former +# 'package unknown' command as a fallback. +# +# Locates all possible packages in a directory via a less restricted +# glob. The targeted directory is derived from the name of the +# requested package. I.e. the TM scan will look only at directories +# which can contain the requested package. It will register all +# packages it found in the directory so that future requests have a +# higher chance of being fulfilled by the ifneeded database without +# having to come to us again. +# +# We do not remember where we have been and simply rescan targeted +# directories when invoked again. The reasoning is this: +# +# - The only way we get back to the same directory is if someone is +# trying to [package require] something that wasn't there on the +# first scan. +# +# Either +# 1) It is there now: If we rescan, you get it; if not you don't. +# +# This covers the possibility that the application asked for a +# package late, and the package was actually added to the +# installation after the application was started. It shoukld +# still be able to find it. +# +# 2) It still is not there: Either way, you don't get it, but the +# rescan takes time. This is however an error case and we dont't +# care that much about it +# +# 3) It was there the first time; but for some reason a "package +# forget" has been run, and "package" doesn't know about it +# anymore. +# +# This can be an indication that the application wishes to reload +# some functionality. And should work as well. +# +# Note that this also strikes a balance between doing a glob targeting +# a single package, and thus most likely requiring multiple globs of +# the same directory when the application is asking for many packages, +# and trying to glob for _everything_ in all subdirectories when +# looking for a package, which comes with a heavy startup cost. +# +# We scan for regular packages only if no satisfying module was found. + +namespace eval ::tcl::tm { + # Default paths. None yet. + + variable paths {} + + # The regex pattern a file name has to match to make it a Tcl Module. + + set pkgpattern {^([_[:alpha:]][:_[:alnum:]]*)-([[:digit:]].*)[.]tm$} + + # Export the public API + + namespace export path + namespace ensemble create -command path -subcommands {add remove list} +} + +# ::tcl::tm::path implementations -- +# +# Public API to the module path. See specification. +# +# Arguments +# cmd - The subcommand to execute +# args - The paths to add/remove. Must not appear querying the +# path with 'list'. +# +# Results +# No result for subcommands 'add' and 'remove'. A list of paths +# for 'list'. +# +# Sideeffects +# The subcommands 'add' and 'remove' manipulate the list of +# paths to search for Tcl Modules. The subcommand 'list' has no +# sideeffects. + +proc ::tcl::tm::add {path args} { + # PART OF THE ::tcl::tm::path ENSEMBLE + # + # The path is added at the head to the list of module paths. + # + # The command enforces the restriction that no path may be an + # ancestor directory of any other path on the list. If the new + # path violates this restriction an error wil be raised. + # + # If the path is already present as is no error will be raised and + # no action will be taken. + + variable paths + + # We use a copy of the path as source during validation, and + # extend it as well. Because we not only have to detect if the new + # paths are bogus with respect to the existing paths, but also + # between themselves. Otherwise we can still add bogus paths, by + # specifying them in a single call. This makes the use of the new + # paths simpler as well, a trivial assignment of the collected + # paths to the official state var. + + set newpaths $paths + foreach p [linsert $args 0 $path] { + if {$p in $newpaths} { + # Ignore a path already on the list. + continue + } + + # Search for paths which are subdirectories of the new one. If + # there are any then the new path violates the restriction + # about ancestors. + + set pos [lsearch -glob $newpaths ${p}/*] + # Cannot use "in", we need the position for the message. + if {$pos >= 0} { + return -code error \ + "$p is ancestor of existing module path [lindex $newpaths $pos]." + } + + # Now look for existing paths which are ancestors of the new + # one. This reverse question forces us to loop over the + # existing paths, as each element is the pattern, not the new + # path :( + + foreach ep $newpaths { + if {[string match ${ep}/* $p]} { + return -code error \ + "$p is subdirectory of existing module path $ep." + } + } + + set newpaths [linsert $newpaths 0 $p] + } + + # The validation of the input is complete and successful, and + # everything in newpaths is either an old path, or added. We can + # now extend the official list of paths, a simple assignment is + # sufficient. + + set paths $newpaths + return +} + +proc ::tcl::tm::remove {path args} { + # PART OF THE ::tcl::tm::path ENSEMBLE + # + # Removes the path from the list of module paths. The command is + # silently ignored if the path is not on the list. + + variable paths + + foreach p [linsert $args 0 $path] { + set pos [lsearch -exact $paths $p] + if {$pos >= 0} { + set paths [lreplace $paths $pos $pos] + } + } +} + +proc ::tcl::tm::list {} { + # PART OF THE ::tcl::tm::path ENSEMBLE + + variable paths + return $paths +} + +# ::tcl::tm::UnknownHandler -- +# +# Unknown handler for Tcl Modules, i.e. packages in module form. +# +# Arguments +# original - Original [package unknown] procedure. +# name - Name of desired package. +# version - Version of desired package. Can be the +# empty string. +# exact - Either -exact or ommitted. +# +# Name, version, and exact are used to determine +# satisfaction. The original is called iff no satisfaction was +# achieved. The name is also used to compute the directory to +# target in the search. +# +# Results +# None. +# +# Sideeffects +# May populate the package ifneeded database with additional +# provide scripts. + +proc ::tcl::tm::UnknownHandler {original name args} { + # Import the list of paths to search for packages in module form. + # Import the pattern used to check package names in detail. + + variable paths + variable pkgpattern + + # Without paths to search we can do nothing. (Except falling back + # to the regular search). + + if {[llength $paths]} { + set pkgpath [string map {:: /} $name] + set pkgroot [file dirname $pkgpath] + if {$pkgroot eq "."} { + set pkgroot "" + } + + # We don't remember a copy of the paths while looping. Tcl + # Modules are unable to change the list while we are searching + # for them. This also simplifies the loop, as we cannot get + # additional directories while iterating over the list. A + # simple foreach is sufficient. + + set satisfied 0 + foreach path $paths { + if {![interp issafe] && ![file exists $path]} { + continue + } + set currentsearchpath [file join $path $pkgroot] + if {![interp issafe] && ![file exists $currentsearchpath]} { + continue + } + set strip [llength [file split $path]] + + # We can't use glob in safe interps, so enclose the following + # in a catch statement, where we get the module files out + # of the subdirectories. In other words, Tcl Modules are + # not-functional in such an interpreter. This is the same + # as for the command "tclPkgUnknown", i.e. the search for + # regular packages. + + catch { + # We always look for _all_ possible modules in the current + # path, to get the max result out of the glob. + + foreach file [glob -nocomplain -directory $currentsearchpath *.tm] { + set pkgfilename [join [lrange [file split $file] $strip end] ::] + + if {![regexp -- $pkgpattern $pkgfilename --> pkgname pkgversion]} { + # Ignore everything not matching our pattern + # for package names. + continue + } + if {[catch {package vcompare $pkgversion 0}]} { + # Ignore everything where the version part is + # not acceptable to "package vcompare". + continue + } + + if {[package ifneeded $pkgname $pkgversion] ne {}} { + # There's already a provide script registered for + # this version of this package. Since all units of + # code claiming to be the same version of the same + # package ought to be identical, just stick with + # the one we already have. + continue + } + + # We have found a candidate, generate a "provide + # script" for it, and remember it. Note that we + # are using ::list to do this; locally [list] + # means something else without the namespace + # specifier. + + # NOTE. When making changes to the format of the + # provide command generated below CHECK that the + # 'LOCATE' procedure in core file + # 'platform/shell.tcl' still understands it, or, + # if not, update its implementation appropriately. + # + # Right now LOCATE's implementation assumes that + # the path of the package file is the last element + # in the list. + + package ifneeded $pkgname $pkgversion \ + "[::list package provide $pkgname $pkgversion];[::list source -encoding utf-8 $file]" + + # We abort in this unknown handler only if we got + # a satisfying candidate for the requested + # package. Otherwise we still have to fallback to + # the regular package search to complete the + # processing. + + if {($pkgname eq $name) + && [package vsatisfies $pkgversion {*}$args]} { + set satisfied 1 + # We do not abort the loop, and keep adding + # provide scripts for every candidate in the + # directory, just remember to not fall back to + # the regular search anymore. + } + } + } + } + + if {$satisfied} { + return + } + } + + # Fallback to previous command, if existing. See comment above + # about ::list... + + if {[llength $original]} { + uplevel 1 $original [::linsert $args 0 $name] + } +} + +# ::tcl::tm::Defaults -- +# +# Determines the default search paths. +# +# Arguments +# None +# +# Results +# None. +# +# Sideeffects +# May add paths to the list of defaults. + +proc ::tcl::tm::Defaults {} { + global env tcl_platform + + lassign [split [info tclversion] .] major minor + set exe [file normalize [info nameofexecutable]] + + # Note that we're using [::list], not [list] because [list] means + # something other than [::list] in this namespace. + roots [::list \ + [file dirname [info library]] \ + [file join [file dirname [file dirname $exe]] lib] \ + ] + + if {$tcl_platform(platform) eq "windows"} { + set sep ";" + } else { + set sep ":" + } + for {set n $minor} {$n >= 0} {incr n -1} { + foreach ev [::list \ + TCL${major}.${n}_TM_PATH \ + TCL${major}_${n}_TM_PATH \ + ] { + if {![info exists env($ev)]} continue + foreach p [split $env($ev) $sep] { + path add $p + } + } + } + return +} + +# ::tcl::tm::roots -- +# +# Public API to the module path. See specification. +# +# Arguments +# paths - List of 'root' paths to derive search paths from. +# +# Results +# No result. +# +# Sideeffects +# Calls 'path add' to paths to the list of module search paths. + +proc ::tcl::tm::roots {paths} { + lassign [split [package present Tcl] .] major minor + foreach pa $paths { + set p [file join $pa tcl$major] + for {set n $minor} {$n >= 0} {incr n -1} { + set px [file join $p ${major}.${n}] + if {![interp issafe]} { set px [file normalize $px] } + path add $px + } + set px [file join $p site-tcl] + if {![interp issafe]} { set px [file normalize $px] } + path add $px + } + return +} + +# Initialization. Set up the default paths, then insert the new +# handler into the chain. + +if {![interp issafe]} { ::tcl::tm::Defaults } diff --git a/inkstitch/bin/tcl/tzdata/Africa/Abidjan b/inkstitch/bin/tcl/tzdata/Africa/Abidjan new file mode 100644 index 0000000..4b4f5b2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Abidjan @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Abidjan) { + {-9223372036854775808 -968 0 LMT} + {-1830383032 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Accra b/inkstitch/bin/tcl/tzdata/Africa/Accra new file mode 100644 index 0000000..faf58fb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Accra @@ -0,0 +1,20 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Accra) { + {-9223372036854775808 -52 0 LMT} + {-1640995148 0 0 GMT} + {-1051920000 1200 1 GHST} + {-1041466800 0 0 GMT} + {-1020384000 1200 1 GHST} + {-1009930800 0 0 GMT} + {-988848000 1200 1 GHST} + {-978394800 0 0 GMT} + {-957312000 1200 1 GHST} + {-946858800 0 0 GMT} + {-925689600 1200 1 GHST} + {-915236400 0 0 GMT} + {-894153600 1200 1 GHST} + {-883700400 0 0 GMT} + {-862617600 1200 1 GHST} + {-852164400 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa b/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa new file mode 100644 index 0000000..4b92483 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Addis_Ababa) { + {-9223372036854775808 9288 0 LMT} + {-3155682888 9320 0 ADMT} + {-1062210920 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Algiers b/inkstitch/bin/tcl/tzdata/Africa/Algiers new file mode 100644 index 0000000..fe4de22 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Algiers @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Algiers) { + {-9223372036854775808 732 0 LMT} + {-2486679072 561 0 PMT} + {-1855958961 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1531443600 0 0 WET} + {-956365200 3600 1 WEST} + {-950486400 0 0 WET} + {-942012000 3600 0 CET} + {-812502000 7200 1 CEST} + {-796262400 3600 0 CET} + {-781052400 7200 1 CEST} + {-766630800 3600 0 CET} + {-733280400 0 0 WET} + {-439430400 3600 0 CET} + {-212029200 0 0 WET} + {41468400 3600 1 WEST} + {54774000 0 0 WET} + {231724800 3600 1 WEST} + {246240000 3600 0 CET} + {259545600 7200 1 CEST} + {275274000 3600 0 CET} + {309740400 0 0 WET} + {325468800 3600 1 WEST} + {341802000 0 0 WET} + {357523200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Asmara b/inkstitch/bin/tcl/tzdata/Africa/Asmara new file mode 100644 index 0000000..1f0f13e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Asmara @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Asmara) { + {-9223372036854775808 9332 0 LMT} + {-3155682932 9332 0 AMT} + {-2524530932 9320 0 ADMT} + {-1062210920 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Asmera b/inkstitch/bin/tcl/tzdata/Africa/Asmera new file mode 100644 index 0000000..931c36d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Asmera @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Asmara)]} { + LoadTimeZoneFile Africa/Asmara +} +set TZData(:Africa/Asmera) $TZData(:Africa/Asmara) diff --git a/inkstitch/bin/tcl/tzdata/Africa/Bamako b/inkstitch/bin/tcl/tzdata/Africa/Bamako new file mode 100644 index 0000000..7ed62e0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Bamako @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Bamako) { + {-9223372036854775808 -1920 0 LMT} + {-1830382080 0 0 GMT} + {-1131235200 -3600 0 WAT} + {-300841200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Bangui b/inkstitch/bin/tcl/tzdata/Africa/Bangui new file mode 100644 index 0000000..94f5058 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Bangui @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Bangui) { + {-9223372036854775808 4460 0 LMT} + {-1830388460 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Banjul b/inkstitch/bin/tcl/tzdata/Africa/Banjul new file mode 100644 index 0000000..a7f0168 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Banjul @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Banjul) { + {-9223372036854775808 -3996 0 LMT} + {-1830380004 -3996 0 BMT} + {-1104533604 -3600 0 WAT} + {-189385200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Bissau b/inkstitch/bin/tcl/tzdata/Africa/Bissau new file mode 100644 index 0000000..d51cb9f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Bissau @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Bissau) { + {-9223372036854775808 -3740 0 LMT} + {-1849388260 -3600 0 WAT} + {157770000 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Blantyre b/inkstitch/bin/tcl/tzdata/Africa/Blantyre new file mode 100644 index 0000000..17b58f4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Blantyre @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Blantyre) { + {-9223372036854775808 8400 0 LMT} + {-2109291600 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Brazzaville b/inkstitch/bin/tcl/tzdata/Africa/Brazzaville new file mode 100644 index 0000000..b4e0923 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Brazzaville @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Brazzaville) { + {-9223372036854775808 3668 0 LMT} + {-1830387668 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Bujumbura b/inkstitch/bin/tcl/tzdata/Africa/Bujumbura new file mode 100644 index 0000000..c26d053 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Bujumbura @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Bujumbura) { + {-9223372036854775808 7048 0 LMT} + {-2524528648 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Cairo b/inkstitch/bin/tcl/tzdata/Africa/Cairo new file mode 100644 index 0000000..842b7b2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Cairo @@ -0,0 +1,128 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Cairo) { + {-9223372036854775808 7509 0 LMT} + {-2185409109 7200 0 EET} + {-929844000 10800 1 EEST} + {-923108400 7200 0 EET} + {-906170400 10800 1 EEST} + {-892868400 7200 0 EET} + {-875844000 10800 1 EEST} + {-857790000 7200 0 EET} + {-844308000 10800 1 EEST} + {-825822000 7200 0 EET} + {-812685600 10800 1 EEST} + {-794199600 7200 0 EET} + {-779853600 10800 1 EEST} + {-762663600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-71107200 7200 0 EET} + {-52707600 10800 1 EEST} + {-39484800 7200 0 EET} + {-21171600 10800 1 EEST} + {-7948800 7200 0 EET} + {10364400 10800 1 EEST} + {23587200 7200 0 EET} + {41900400 10800 1 EEST} + {55123200 7200 0 EET} + {73522800 10800 1 EEST} + {86745600 7200 0 EET} + {105058800 10800 1 EEST} + {118281600 7200 0 EET} + {136594800 10800 1 EEST} + {149817600 7200 0 EET} + {168130800 10800 1 EEST} + {181353600 7200 0 EET} + {199753200 10800 1 EEST} + {212976000 7200 0 EET} + {231289200 10800 1 EEST} + {244512000 7200 0 EET} + {262825200 10800 1 EEST} + {276048000 7200 0 EET} + {294361200 10800 1 EEST} + {307584000 7200 0 EET} + {325983600 10800 1 EEST} + {339206400 7200 0 EET} + {357519600 10800 1 EEST} + {370742400 7200 0 EET} + {396399600 10800 1 EEST} + {402278400 7200 0 EET} + {426812400 10800 1 EEST} + {433814400 7200 0 EET} + {452214000 10800 1 EEST} + {465436800 7200 0 EET} + {483750000 10800 1 EEST} + {496972800 7200 0 EET} + {515286000 10800 1 EEST} + {528508800 7200 0 EET} + {546822000 10800 1 EEST} + {560044800 7200 0 EET} + {578444400 10800 1 EEST} + {591667200 7200 0 EET} + {610412400 10800 1 EEST} + {623203200 7200 0 EET} + {641516400 10800 1 EEST} + {654739200 7200 0 EET} + {673052400 10800 1 EEST} + {686275200 7200 0 EET} + {704674800 10800 1 EEST} + {717897600 7200 0 EET} + {736210800 10800 1 EEST} + {749433600 7200 0 EET} + {767746800 10800 1 EEST} + {780969600 7200 0 EET} + {799020000 10800 1 EEST} + {812322000 7200 0 EET} + {830469600 10800 1 EEST} + {843771600 7200 0 EET} + {861919200 10800 1 EEST} + {875221200 7200 0 EET} + {893368800 10800 1 EEST} + {906670800 7200 0 EET} + {925423200 10800 1 EEST} + {938725200 7200 0 EET} + {956872800 10800 1 EEST} + {970174800 7200 0 EET} + {988322400 10800 1 EEST} + {1001624400 7200 0 EET} + {1019772000 10800 1 EEST} + {1033074000 7200 0 EET} + {1051221600 10800 1 EEST} + {1064523600 7200 0 EET} + {1083276000 10800 1 EEST} + {1096578000 7200 0 EET} + {1114725600 10800 1 EEST} + {1128027600 7200 0 EET} + {1146175200 10800 1 EEST} + {1158872400 7200 0 EET} + {1177624800 10800 1 EEST} + {1189112400 7200 0 EET} + {1209074400 10800 1 EEST} + {1219957200 7200 0 EET} + {1240524000 10800 1 EEST} + {1250802000 7200 0 EET} + {1272578400 10800 1 EEST} + {1281474000 7200 0 EET} + {1284069600 10800 1 EEST} + {1285880400 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Casablanca b/inkstitch/bin/tcl/tzdata/Africa/Casablanca new file mode 100644 index 0000000..757007c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Casablanca @@ -0,0 +1,224 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Casablanca) { + {-9223372036854775808 -1820 0 LMT} + {-1773012580 0 0 WET} + {-956361600 3600 1 WEST} + {-950490000 0 0 WET} + {-942019200 3600 1 WEST} + {-761187600 0 0 WET} + {-617241600 3600 1 WEST} + {-605149200 0 0 WET} + {-81432000 3600 1 WEST} + {-71110800 0 0 WET} + {141264000 3600 1 WEST} + {147222000 0 0 WET} + {199756800 3600 1 WEST} + {207702000 0 0 WET} + {231292800 3600 1 WEST} + {244249200 0 0 WET} + {265507200 3600 1 WEST} + {271033200 0 0 WET} + {448243200 3600 0 CET} + {504918000 0 0 WET} + {1212278400 3600 1 WEST} + {1220223600 0 0 WET} + {1243814400 3600 1 WEST} + {1250809200 0 0 WET} + {1272758400 3600 1 WEST} + {1281222000 0 0 WET} + {1301788800 3600 1 WEST} + {1312066800 0 0 WET} + {1335664800 3600 1 WEST} + {1342749600 0 0 WET} + {1345428000 3600 1 WEST} + {1348970400 0 0 WET} + {1367114400 3600 1 WEST} + {1373162400 0 0 WET} + {1376100000 3600 1 WEST} + {1380420000 0 0 WET} + {1398564000 3600 1 WEST} + {1404007200 0 0 WET} + {1406599200 3600 1 WEST} + {1411869600 0 0 WET} + {1430013600 3600 1 WEST} + {1434592800 0 0 WET} + {1437184800 3600 1 WEST} + {1443319200 0 0 WET} + {1461463200 3600 1 WEST} + {1465264800 0 0 WET} + {1467856800 3600 1 WEST} + {1474768800 0 0 WET} + {1493517600 3600 1 WEST} + {1495850400 0 0 WET} + {1498442400 3600 1 WEST} + {1506218400 0 0 WET} + {1524967200 3600 1 WEST} + {1526436000 0 0 WET} + {1529028000 3600 1 WEST} + {1538272800 0 0 WET} + {1556416800 3600 1 WEST} + {1557108000 0 0 WET} + {1559700000 3600 1 WEST} + {1569722400 0 0 WET} + {1590285600 3600 1 WEST} + {1601172000 0 0 WET} + {1620871200 3600 1 WEST} + {1632621600 0 0 WET} + {1651543200 3600 1 WEST} + {1664071200 0 0 WET} + {1682820000 3600 1 WEST} + {1695520800 0 0 WET} + {1714269600 3600 1 WEST} + {1727575200 0 0 WET} + {1745719200 3600 1 WEST} + {1759024800 0 0 WET} + {1777168800 3600 1 WEST} + {1790474400 0 0 WET} + {1808618400 3600 1 WEST} + {1821924000 0 0 WET} + {1840672800 3600 1 WEST} + {1853373600 0 0 WET} + {1872122400 3600 1 WEST} + {1885428000 0 0 WET} + {1903572000 3600 1 WEST} + {1916877600 0 0 WET} + {1935021600 3600 1 WEST} + {1948327200 0 0 WET} + {1966471200 3600 1 WEST} + {1979776800 0 0 WET} + {1997920800 3600 1 WEST} + {2011226400 0 0 WET} + {2029975200 3600 1 WEST} + {2042676000 0 0 WET} + {2061424800 3600 1 WEST} + {2074730400 0 0 WET} + {2092874400 3600 1 WEST} + {2106180000 0 0 WET} + {2124324000 3600 1 WEST} + {2137629600 0 0 WET} + {2155773600 3600 1 WEST} + {2169079200 0 0 WET} + {2187223200 3600 1 WEST} + {2200528800 0 0 WET} + {2219277600 3600 1 WEST} + {2232583200 0 0 WET} + {2250727200 3600 1 WEST} + {2264032800 0 0 WET} + {2282176800 3600 1 WEST} + {2295482400 0 0 WET} + {2313626400 3600 1 WEST} + {2326932000 0 0 WET} + {2345076000 3600 1 WEST} + {2358381600 0 0 WET} + {2377130400 3600 1 WEST} + {2389831200 0 0 WET} + {2408580000 3600 1 WEST} + {2421885600 0 0 WET} + {2440029600 3600 1 WEST} + {2453335200 0 0 WET} + {2471479200 3600 1 WEST} + {2484784800 0 0 WET} + {2502928800 3600 1 WEST} + {2516234400 0 0 WET} + {2534378400 3600 1 WEST} + {2547684000 0 0 WET} + {2566432800 3600 1 WEST} + {2579133600 0 0 WET} + {2597882400 3600 1 WEST} + {2611188000 0 0 WET} + {2629332000 3600 1 WEST} + {2642637600 0 0 WET} + {2660781600 3600 1 WEST} + {2674087200 0 0 WET} + {2692231200 3600 1 WEST} + {2705536800 0 0 WET} + {2724285600 3600 1 WEST} + {2736986400 0 0 WET} + {2755735200 3600 1 WEST} + {2769040800 0 0 WET} + {2787184800 3600 1 WEST} + {2800490400 0 0 WET} + {2818634400 3600 1 WEST} + {2831940000 0 0 WET} + {2850084000 3600 1 WEST} + {2863389600 0 0 WET} + {2881533600 3600 1 WEST} + {2894839200 0 0 WET} + {2913588000 3600 1 WEST} + {2926288800 0 0 WET} + {2945037600 3600 1 WEST} + {2958343200 0 0 WET} + {2976487200 3600 1 WEST} + {2989792800 0 0 WET} + {3007936800 3600 1 WEST} + {3021242400 0 0 WET} + {3039386400 3600 1 WEST} + {3052692000 0 0 WET} + {3070836000 3600 1 WEST} + {3084141600 0 0 WET} + {3102890400 3600 1 WEST} + {3116196000 0 0 WET} + {3134340000 3600 1 WEST} + {3147645600 0 0 WET} + {3165789600 3600 1 WEST} + {3179095200 0 0 WET} + {3197239200 3600 1 WEST} + {3210544800 0 0 WET} + {3228688800 3600 1 WEST} + {3241994400 0 0 WET} + {3260743200 3600 1 WEST} + {3273444000 0 0 WET} + {3292192800 3600 1 WEST} + {3305498400 0 0 WET} + {3323642400 3600 1 WEST} + {3336948000 0 0 WET} + {3355092000 3600 1 WEST} + {3368397600 0 0 WET} + {3386541600 3600 1 WEST} + {3399847200 0 0 WET} + {3417991200 3600 1 WEST} + {3431296800 0 0 WET} + {3450045600 3600 1 WEST} + {3462746400 0 0 WET} + {3481495200 3600 1 WEST} + {3494800800 0 0 WET} + {3512944800 3600 1 WEST} + {3526250400 0 0 WET} + {3544394400 3600 1 WEST} + {3557700000 0 0 WET} + {3575844000 3600 1 WEST} + {3589149600 0 0 WET} + {3607898400 3600 1 WEST} + {3620599200 0 0 WET} + {3639348000 3600 1 WEST} + {3652653600 0 0 WET} + {3670797600 3600 1 WEST} + {3684103200 0 0 WET} + {3702247200 3600 1 WEST} + {3715552800 0 0 WET} + {3733696800 3600 1 WEST} + {3747002400 0 0 WET} + {3765146400 3600 1 WEST} + {3778452000 0 0 WET} + {3797200800 3600 1 WEST} + {3809901600 0 0 WET} + {3828650400 3600 1 WEST} + {3841956000 0 0 WET} + {3860100000 3600 1 WEST} + {3873405600 0 0 WET} + {3891549600 3600 1 WEST} + {3904855200 0 0 WET} + {3922999200 3600 1 WEST} + {3936304800 0 0 WET} + {3954448800 3600 1 WEST} + {3967754400 0 0 WET} + {3986503200 3600 1 WEST} + {3999808800 0 0 WET} + {4017952800 3600 1 WEST} + {4031258400 0 0 WET} + {4049402400 3600 1 WEST} + {4062708000 0 0 WET} + {4080852000 3600 1 WEST} + {4094157600 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Ceuta b/inkstitch/bin/tcl/tzdata/Africa/Ceuta new file mode 100644 index 0000000..882c13d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Ceuta @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Ceuta) { + {-9223372036854775808 -1276 0 LMT} + {-2177451524 0 0 WET} + {-1630112400 3600 1 WEST} + {-1616810400 0 0 WET} + {-1451692800 0 0 WET} + {-1442451600 3600 1 WEST} + {-1427677200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1293840000 0 0 WET} + {-81432000 3600 1 WEST} + {-71110800 0 0 WET} + {141264000 3600 1 WEST} + {147222000 0 0 WET} + {199756800 3600 1 WEST} + {207702000 0 0 WET} + {231292800 3600 1 WEST} + {244249200 0 0 WET} + {265507200 3600 1 WEST} + {271033200 0 0 WET} + {448243200 3600 0 CET} + {504918000 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Conakry b/inkstitch/bin/tcl/tzdata/Africa/Conakry new file mode 100644 index 0000000..d17ce4b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Conakry @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Conakry) { + {-9223372036854775808 -3292 0 LMT} + {-1830380708 0 0 GMT} + {-1131235200 -3600 0 WAT} + {-315615600 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Dakar b/inkstitch/bin/tcl/tzdata/Africa/Dakar new file mode 100644 index 0000000..487dc62 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Dakar @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Dakar) { + {-9223372036854775808 -4184 0 LMT} + {-1830379816 -3600 0 WAT} + {-902098800 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam b/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam new file mode 100644 index 0000000..98151ec --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Dar_es_Salaam) { + {-9223372036854775808 9428 0 LMT} + {-1230777428 10800 0 EAT} + {-694321200 9900 0 BEAUT} + {-284006700 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Djibouti b/inkstitch/bin/tcl/tzdata/Africa/Djibouti new file mode 100644 index 0000000..0ec510c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Djibouti @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Djibouti) { + {-9223372036854775808 10356 0 LMT} + {-1846291956 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Douala b/inkstitch/bin/tcl/tzdata/Africa/Douala new file mode 100644 index 0000000..301a530 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Douala @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Douala) { + {-9223372036854775808 2328 0 LMT} + {-1830386328 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun b/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun new file mode 100644 index 0000000..a8b9d34 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/El_Aaiun) { + {-9223372036854775808 -3168 0 LMT} + {-1136070432 -3600 0 WAT} + {198291600 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Freetown b/inkstitch/bin/tcl/tzdata/Africa/Freetown new file mode 100644 index 0000000..c3f2d2e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Freetown @@ -0,0 +1,36 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Freetown) { + {-9223372036854775808 -3180 0 LMT} + {-2776979220 -3180 0 FMT} + {-1785712020 -3600 0 WAT} + {-1091487600 -1200 1 SLST} + {-1080949200 -3600 0 WAT} + {-1059865200 -1200 1 SLST} + {-1049326800 -3600 0 WAT} + {-1028329200 -1200 1 SLST} + {-1017790800 -3600 0 WAT} + {-996793200 -1200 1 SLST} + {-986254800 -3600 0 WAT} + {-965257200 -1200 1 SLST} + {-954718800 -3600 0 WAT} + {-933634800 -1200 1 SLST} + {-923096400 -3600 0 WAT} + {-902098800 -1200 1 SLST} + {-891560400 -3600 0 WAT} + {-870562800 -1200 1 SLST} + {-860024400 -3600 0 WAT} + {-410223600 0 0 WAT} + {-397180800 3600 1 SLST} + {-389235600 0 0 GMT} + {-365644800 3600 1 SLST} + {-357699600 0 0 GMT} + {-334108800 3600 1 SLST} + {-326163600 0 0 GMT} + {-302486400 3600 1 SLST} + {-294541200 0 0 GMT} + {-270950400 3600 1 SLST} + {-263005200 0 0 GMT} + {-239414400 3600 1 SLST} + {-231469200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Gaborone b/inkstitch/bin/tcl/tzdata/Africa/Gaborone new file mode 100644 index 0000000..bd38673 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Gaborone @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Gaborone) { + {-9223372036854775808 6220 0 LMT} + {-2682294220 5400 0 SAST} + {-2109288600 7200 0 CAT} + {-829526400 10800 1 CAST} + {-813805200 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Harare b/inkstitch/bin/tcl/tzdata/Africa/Harare new file mode 100644 index 0000000..7482b15 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Harare @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Harare) { + {-9223372036854775808 7452 0 LMT} + {-2109290652 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Johannesburg b/inkstitch/bin/tcl/tzdata/Africa/Johannesburg new file mode 100644 index 0000000..b9a8348 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Johannesburg @@ -0,0 +1,11 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Johannesburg) { + {-9223372036854775808 6720 0 LMT} + {-2458173120 5400 0 SAST} + {-2109288600 7200 0 SAST} + {-860976000 10800 1 SAST} + {-845254800 7200 0 SAST} + {-829526400 10800 1 SAST} + {-813805200 7200 0 SAST} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Juba b/inkstitch/bin/tcl/tzdata/Africa/Juba new file mode 100644 index 0000000..7495981 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Juba @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Juba) { + {-9223372036854775808 7584 0 LMT} + {-1230775584 7200 0 CAT} + {10360800 10800 1 CAST} + {24786000 7200 0 CAT} + {41810400 10800 1 CAST} + {56322000 7200 0 CAT} + {73432800 10800 1 CAST} + {87944400 7200 0 CAT} + {104882400 10800 1 CAST} + {119480400 7200 0 CAT} + {136332000 10800 1 CAST} + {151016400 7200 0 CAT} + {167781600 10800 1 CAST} + {182552400 7200 0 CAT} + {199231200 10800 1 CAST} + {214174800 7200 0 CAT} + {230680800 10800 1 CAST} + {245710800 7200 0 CAT} + {262735200 10800 1 CAST} + {277246800 7200 0 CAT} + {294184800 10800 1 CAST} + {308782800 7200 0 CAT} + {325634400 10800 1 CAST} + {340405200 7200 0 CAT} + {357084000 10800 1 CAST} + {371941200 7200 0 CAT} + {388533600 10800 1 CAST} + {403477200 7200 0 CAT} + {419983200 10800 1 CAST} + {435013200 7200 0 CAT} + {452037600 10800 1 CAST} + {466635600 7200 0 CAT} + {483487200 10800 1 CAST} + {498171600 7200 0 CAT} + {947930400 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Kampala b/inkstitch/bin/tcl/tzdata/Africa/Kampala new file mode 100644 index 0000000..4cc9be1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Kampala @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Kampala) { + {-9223372036854775808 7780 0 LMT} + {-1309745380 10800 0 EAT} + {-1262314800 9000 0 BEAT} + {-694319400 9900 0 BEAUT} + {-410237100 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Khartoum b/inkstitch/bin/tcl/tzdata/Africa/Khartoum new file mode 100644 index 0000000..dfcac82 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Khartoum @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Khartoum) { + {-9223372036854775808 7808 0 LMT} + {-1230775808 7200 0 CAT} + {10360800 10800 1 CAST} + {24786000 7200 0 CAT} + {41810400 10800 1 CAST} + {56322000 7200 0 CAT} + {73432800 10800 1 CAST} + {87944400 7200 0 CAT} + {104882400 10800 1 CAST} + {119480400 7200 0 CAT} + {136332000 10800 1 CAST} + {151016400 7200 0 CAT} + {167781600 10800 1 CAST} + {182552400 7200 0 CAT} + {199231200 10800 1 CAST} + {214174800 7200 0 CAT} + {230680800 10800 1 CAST} + {245710800 7200 0 CAT} + {262735200 10800 1 CAST} + {277246800 7200 0 CAT} + {294184800 10800 1 CAST} + {308782800 7200 0 CAT} + {325634400 10800 1 CAST} + {340405200 7200 0 CAT} + {357084000 10800 1 CAST} + {371941200 7200 0 CAT} + {388533600 10800 1 CAST} + {403477200 7200 0 CAT} + {419983200 10800 1 CAST} + {435013200 7200 0 CAT} + {452037600 10800 1 CAST} + {466635600 7200 0 CAT} + {483487200 10800 1 CAST} + {498171600 7200 0 CAT} + {947930400 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Kigali b/inkstitch/bin/tcl/tzdata/Africa/Kigali new file mode 100644 index 0000000..f723bcd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Kigali @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Kigali) { + {-9223372036854775808 7216 0 LMT} + {-1091498416 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Kinshasa b/inkstitch/bin/tcl/tzdata/Africa/Kinshasa new file mode 100644 index 0000000..050c1fa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Kinshasa @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Kinshasa) { + {-9223372036854775808 3672 0 LMT} + {-2276643672 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Lagos b/inkstitch/bin/tcl/tzdata/Africa/Lagos new file mode 100644 index 0000000..079572f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Lagos @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Lagos) { + {-9223372036854775808 816 0 LMT} + {-1588464816 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Libreville b/inkstitch/bin/tcl/tzdata/Africa/Libreville new file mode 100644 index 0000000..8427551 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Libreville @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Libreville) { + {-9223372036854775808 2268 0 LMT} + {-1830386268 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Lome b/inkstitch/bin/tcl/tzdata/Africa/Lome new file mode 100644 index 0000000..606625c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Lome @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Lome) { + {-9223372036854775808 292 0 LMT} + {-2429827492 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Luanda b/inkstitch/bin/tcl/tzdata/Africa/Luanda new file mode 100644 index 0000000..cd1b29e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Luanda @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Luanda) { + {-9223372036854775808 3176 0 LMT} + {-2461452776 3124 0 AOT} + {-1849395124 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi b/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi new file mode 100644 index 0000000..bd67221 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Lubumbashi) { + {-9223372036854775808 6592 0 LMT} + {-2276646592 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Lusaka b/inkstitch/bin/tcl/tzdata/Africa/Lusaka new file mode 100644 index 0000000..ed9c30d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Lusaka @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Lusaka) { + {-9223372036854775808 6788 0 LMT} + {-2109289988 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Malabo b/inkstitch/bin/tcl/tzdata/Africa/Malabo new file mode 100644 index 0000000..bec0524 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Malabo @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Malabo) { + {-9223372036854775808 2108 0 LMT} + {-1830386108 0 0 GMT} + {-190857600 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Maputo b/inkstitch/bin/tcl/tzdata/Africa/Maputo new file mode 100644 index 0000000..6ee208c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Maputo @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Maputo) { + {-9223372036854775808 7820 0 LMT} + {-2109291020 7200 0 CAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Maseru b/inkstitch/bin/tcl/tzdata/Africa/Maseru new file mode 100644 index 0000000..21ca968 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Maseru @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Maseru) { + {-9223372036854775808 6600 0 LMT} + {-2109289800 7200 0 SAST} + {-829526400 10800 1 SAST} + {-813805200 7200 0 SAST} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Mbabane b/inkstitch/bin/tcl/tzdata/Africa/Mbabane new file mode 100644 index 0000000..4d174d5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Mbabane @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Mbabane) { + {-9223372036854775808 7464 0 LMT} + {-2109290664 7200 0 SAST} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Mogadishu b/inkstitch/bin/tcl/tzdata/Africa/Mogadishu new file mode 100644 index 0000000..570d3ea --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Mogadishu @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Mogadishu) { + {-9223372036854775808 10888 0 LMT} + {-2403572488 10800 0 EAT} + {-1230778800 9000 0 BEAT} + {-410236200 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Monrovia b/inkstitch/bin/tcl/tzdata/Africa/Monrovia new file mode 100644 index 0000000..1cfff58 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Monrovia @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Monrovia) { + {-9223372036854775808 -2588 0 LMT} + {-2776979812 -2588 0 MMT} + {-1604359012 -2670 0 LRT} + {73529070 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Nairobi b/inkstitch/bin/tcl/tzdata/Africa/Nairobi new file mode 100644 index 0000000..6846069 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Nairobi @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Nairobi) { + {-9223372036854775808 8836 0 LMT} + {-1309746436 10800 0 EAT} + {-1262314800 9000 0 BEAT} + {-946780200 9900 0 BEAUT} + {-315629100 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Ndjamena b/inkstitch/bin/tcl/tzdata/Africa/Ndjamena new file mode 100644 index 0000000..af4daaa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Ndjamena @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Ndjamena) { + {-9223372036854775808 3612 0 LMT} + {-1830387612 3600 0 WAT} + {308703600 7200 1 WAST} + {321314400 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Niamey b/inkstitch/bin/tcl/tzdata/Africa/Niamey new file mode 100644 index 0000000..40ded06 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Niamey @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Niamey) { + {-9223372036854775808 508 0 LMT} + {-1830384508 -3600 0 WAT} + {-1131231600 0 0 GMT} + {-315619200 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Nouakchott b/inkstitch/bin/tcl/tzdata/Africa/Nouakchott new file mode 100644 index 0000000..f7369d0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Nouakchott @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Nouakchott) { + {-9223372036854775808 -3828 0 LMT} + {-1830380172 0 0 GMT} + {-1131235200 -3600 0 WAT} + {-286930800 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou b/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou new file mode 100644 index 0000000..88a7145 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Ouagadougou) { + {-9223372036854775808 -364 0 LMT} + {-1830383636 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo b/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo new file mode 100644 index 0000000..b89cf1b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Porto-Novo) { + {-9223372036854775808 628 0 LMT} + {-1830384628 0 0 GMT} + {-1131235200 3600 0 WAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome b/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome new file mode 100644 index 0000000..ab1590d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Sao_Tome) { + {-9223372036854775808 1616 0 LMT} + {-2713912016 -2192 0 LMT} + {-1830381808 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Timbuktu b/inkstitch/bin/tcl/tzdata/Africa/Timbuktu new file mode 100644 index 0000000..8057eed --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Timbuktu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Bamako)]} { + LoadTimeZoneFile Africa/Bamako +} +set TZData(:Africa/Timbuktu) $TZData(:Africa/Bamako) diff --git a/inkstitch/bin/tcl/tzdata/Africa/Tripoli b/inkstitch/bin/tcl/tzdata/Africa/Tripoli new file mode 100644 index 0000000..ac78218 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Tripoli @@ -0,0 +1,206 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Tripoli) { + {-9223372036854775808 3164 0 LMT} + {-1577926364 3600 0 CET} + {-574902000 7200 1 CEST} + {-512175600 7200 1 CEST} + {-449888400 7200 1 CEST} + {-347158800 7200 0 EET} + {378684000 3600 0 CET} + {386463600 7200 1 CEST} + {402271200 3600 0 CET} + {417999600 7200 1 CEST} + {433807200 3600 0 CET} + {449622000 7200 1 CEST} + {465429600 3600 0 CET} + {481590000 7200 1 CEST} + {496965600 3600 0 CET} + {512953200 7200 1 CEST} + {528674400 3600 0 CET} + {544230000 7200 1 CEST} + {560037600 3600 0 CET} + {575852400 7200 1 CEST} + {591660000 3600 0 CET} + {607388400 7200 1 CEST} + {623196000 3600 0 CET} + {641775600 7200 0 EET} + {844034400 3600 0 CET} + {860108400 7200 1 CEST} + {875919600 7200 0 EET} + {1352505600 3600 0 CET} + {1364515200 7200 1 CEST} + {1382659200 3600 0 CET} + {1395964800 7200 1 CEST} + {1414713600 3600 0 CET} + {1427414400 7200 1 CEST} + {1446163200 3600 0 CET} + {1458864000 7200 1 CEST} + {1477612800 3600 0 CET} + {1490918400 7200 1 CEST} + {1509062400 3600 0 CET} + {1522368000 7200 1 CEST} + {1540512000 3600 0 CET} + {1553817600 7200 1 CEST} + {1571961600 3600 0 CET} + {1585267200 7200 1 CEST} + {1604016000 3600 0 CET} + {1616716800 7200 1 CEST} + {1635465600 3600 0 CET} + {1648166400 7200 1 CEST} + {1666915200 3600 0 CET} + {1680220800 7200 1 CEST} + {1698364800 3600 0 CET} + {1711670400 7200 1 CEST} + {1729814400 3600 0 CET} + {1743120000 7200 1 CEST} + {1761868800 3600 0 CET} + {1774569600 7200 1 CEST} + {1793318400 3600 0 CET} + {1806019200 7200 1 CEST} + {1824768000 3600 0 CET} + {1838073600 7200 1 CEST} + {1856217600 3600 0 CET} + {1869523200 7200 1 CEST} + {1887667200 3600 0 CET} + {1900972800 7200 1 CEST} + {1919116800 3600 0 CET} + {1932422400 7200 1 CEST} + {1951171200 3600 0 CET} + {1963872000 7200 1 CEST} + {1982620800 3600 0 CET} + {1995321600 7200 1 CEST} + {2014070400 3600 0 CET} + {2027376000 7200 1 CEST} + {2045520000 3600 0 CET} + {2058825600 7200 1 CEST} + {2076969600 3600 0 CET} + {2090275200 7200 1 CEST} + {2109024000 3600 0 CET} + {2121724800 7200 1 CEST} + {2140473600 3600 0 CET} + {2153174400 7200 1 CEST} + {2171923200 3600 0 CET} + {2184624000 7200 1 CEST} + {2203372800 3600 0 CET} + {2216678400 7200 1 CEST} + {2234822400 3600 0 CET} + {2248128000 7200 1 CEST} + {2266272000 3600 0 CET} + {2279577600 7200 1 CEST} + {2298326400 3600 0 CET} + {2311027200 7200 1 CEST} + {2329776000 3600 0 CET} + {2342476800 7200 1 CEST} + {2361225600 3600 0 CET} + {2374531200 7200 1 CEST} + {2392675200 3600 0 CET} + {2405980800 7200 1 CEST} + {2424124800 3600 0 CET} + {2437430400 7200 1 CEST} + {2455574400 3600 0 CET} + {2468880000 7200 1 CEST} + {2487628800 3600 0 CET} + {2500329600 7200 1 CEST} + {2519078400 3600 0 CET} + {2531779200 7200 1 CEST} + {2550528000 3600 0 CET} + {2563833600 7200 1 CEST} + {2581977600 3600 0 CET} + {2595283200 7200 1 CEST} + {2613427200 3600 0 CET} + {2626732800 7200 1 CEST} + {2645481600 3600 0 CET} + {2658182400 7200 1 CEST} + {2676931200 3600 0 CET} + {2689632000 7200 1 CEST} + {2708380800 3600 0 CET} + {2721686400 7200 1 CEST} + {2739830400 3600 0 CET} + {2753136000 7200 1 CEST} + {2771280000 3600 0 CET} + {2784585600 7200 1 CEST} + {2802729600 3600 0 CET} + {2816035200 7200 1 CEST} + {2834784000 3600 0 CET} + {2847484800 7200 1 CEST} + {2866233600 3600 0 CET} + {2878934400 7200 1 CEST} + {2897683200 3600 0 CET} + {2910988800 7200 1 CEST} + {2929132800 3600 0 CET} + {2942438400 7200 1 CEST} + {2960582400 3600 0 CET} + {2973888000 7200 1 CEST} + {2992636800 3600 0 CET} + {3005337600 7200 1 CEST} + {3024086400 3600 0 CET} + {3036787200 7200 1 CEST} + {3055536000 3600 0 CET} + {3068236800 7200 1 CEST} + {3086985600 3600 0 CET} + {3100291200 7200 1 CEST} + {3118435200 3600 0 CET} + {3131740800 7200 1 CEST} + {3149884800 3600 0 CET} + {3163190400 7200 1 CEST} + {3181939200 3600 0 CET} + {3194640000 7200 1 CEST} + {3213388800 3600 0 CET} + {3226089600 7200 1 CEST} + {3244838400 3600 0 CET} + {3258144000 7200 1 CEST} + {3276288000 3600 0 CET} + {3289593600 7200 1 CEST} + {3307737600 3600 0 CET} + {3321043200 7200 1 CEST} + {3339187200 3600 0 CET} + {3352492800 7200 1 CEST} + {3371241600 3600 0 CET} + {3383942400 7200 1 CEST} + {3402691200 3600 0 CET} + {3415392000 7200 1 CEST} + {3434140800 3600 0 CET} + {3447446400 7200 1 CEST} + {3465590400 3600 0 CET} + {3478896000 7200 1 CEST} + {3497040000 3600 0 CET} + {3510345600 7200 1 CEST} + {3529094400 3600 0 CET} + {3541795200 7200 1 CEST} + {3560544000 3600 0 CET} + {3573244800 7200 1 CEST} + {3591993600 3600 0 CET} + {3605299200 7200 1 CEST} + {3623443200 3600 0 CET} + {3636748800 7200 1 CEST} + {3654892800 3600 0 CET} + {3668198400 7200 1 CEST} + {3686342400 3600 0 CET} + {3699648000 7200 1 CEST} + {3718396800 3600 0 CET} + {3731097600 7200 1 CEST} + {3749846400 3600 0 CET} + {3762547200 7200 1 CEST} + {3781296000 3600 0 CET} + {3794601600 7200 1 CEST} + {3812745600 3600 0 CET} + {3826051200 7200 1 CEST} + {3844195200 3600 0 CET} + {3857500800 7200 1 CEST} + {3876249600 3600 0 CET} + {3888950400 7200 1 CEST} + {3907699200 3600 0 CET} + {3920400000 7200 1 CEST} + {3939148800 3600 0 CET} + {3951849600 7200 1 CEST} + {3970598400 3600 0 CET} + {3983904000 7200 1 CEST} + {4002048000 3600 0 CET} + {4015353600 7200 1 CEST} + {4033497600 3600 0 CET} + {4046803200 7200 1 CEST} + {4065552000 3600 0 CET} + {4078252800 7200 1 CEST} + {4097001600 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Tunis b/inkstitch/bin/tcl/tzdata/Africa/Tunis new file mode 100644 index 0000000..0c1db4d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Tunis @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Tunis) { + {-9223372036854775808 2444 0 LMT} + {-2797202444 561 0 PMT} + {-1855958961 3600 0 CET} + {-969242400 7200 1 CEST} + {-950493600 3600 0 CET} + {-941940000 7200 1 CEST} + {-891136800 3600 0 CET} + {-877827600 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-842918400 3600 0 CET} + {-842223600 7200 1 CEST} + {-828230400 3600 0 CET} + {-812502000 7200 1 CEST} + {-796269600 3600 0 CET} + {-781052400 7200 1 CEST} + {-766634400 3600 0 CET} + {231202800 7200 1 CEST} + {243903600 3600 0 CET} + {262825200 7200 1 CEST} + {276044400 3600 0 CET} + {581122800 7200 1 CEST} + {591145200 3600 0 CET} + {606870000 7200 1 CEST} + {622594800 3600 0 CET} + {641516400 7200 1 CEST} + {654649200 3600 0 CET} + {1114902000 7200 1 CEST} + {1128038400 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Africa/Windhoek b/inkstitch/bin/tcl/tzdata/Africa/Windhoek new file mode 100644 index 0000000..a655f2e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Africa/Windhoek @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Windhoek) { + {-9223372036854775808 4104 0 LMT} + {-2458170504 5400 0 SWAT} + {-2109288600 7200 0 SAST} + {-860976000 10800 1 SAST} + {-845254800 7200 0 SAST} + {637970400 7200 0 CAT} + {765324000 3600 0 WAT} + {778640400 7200 1 WAST} + {796780800 3600 0 WAT} + {810090000 7200 1 WAST} + {828835200 3600 0 WAT} + {841539600 7200 1 WAST} + {860284800 3600 0 WAT} + {873594000 7200 1 WAST} + {891734400 3600 0 WAT} + {905043600 7200 1 WAST} + {923184000 3600 0 WAT} + {936493200 7200 1 WAST} + {954633600 3600 0 WAT} + {967942800 7200 1 WAST} + {986083200 3600 0 WAT} + {999392400 7200 1 WAST} + {1018137600 3600 0 WAT} + {1030842000 7200 1 WAST} + {1049587200 3600 0 WAT} + {1062896400 7200 1 WAST} + {1081036800 3600 0 WAT} + {1094346000 7200 1 WAST} + {1112486400 3600 0 WAT} + {1125795600 7200 1 WAST} + {1143936000 3600 0 WAT} + {1157245200 7200 1 WAST} + {1175385600 3600 0 WAT} + {1188694800 7200 1 WAST} + {1207440000 3600 0 WAT} + {1220749200 7200 1 WAST} + {1238889600 3600 0 WAT} + {1252198800 7200 1 WAST} + {1270339200 3600 0 WAT} + {1283648400 7200 1 WAST} + {1301788800 3600 0 WAT} + {1315098000 7200 1 WAST} + {1333238400 3600 0 WAT} + {1346547600 7200 1 WAST} + {1365292800 3600 0 WAT} + {1377997200 7200 1 WAST} + {1396742400 3600 0 WAT} + {1410051600 7200 1 WAST} + {1428192000 3600 0 WAT} + {1441501200 7200 1 WAST} + {1459641600 3600 0 WAT} + {1472950800 7200 1 WAST} + {1491091200 3600 0 WAT} + {1504400400 7200 1 WAST} + {1522540800 3600 0 WAT} + {1535850000 7200 1 WAST} + {1554595200 3600 0 WAT} + {1567299600 7200 1 WAST} + {1586044800 3600 0 WAT} + {1599354000 7200 1 WAST} + {1617494400 3600 0 WAT} + {1630803600 7200 1 WAST} + {1648944000 3600 0 WAT} + {1662253200 7200 1 WAST} + {1680393600 3600 0 WAT} + {1693702800 7200 1 WAST} + {1712448000 3600 0 WAT} + {1725152400 7200 1 WAST} + {1743897600 3600 0 WAT} + {1757206800 7200 1 WAST} + {1775347200 3600 0 WAT} + {1788656400 7200 1 WAST} + {1806796800 3600 0 WAT} + {1820106000 7200 1 WAST} + {1838246400 3600 0 WAT} + {1851555600 7200 1 WAST} + {1869696000 3600 0 WAT} + {1883005200 7200 1 WAST} + {1901750400 3600 0 WAT} + {1914454800 7200 1 WAST} + {1933200000 3600 0 WAT} + {1946509200 7200 1 WAST} + {1964649600 3600 0 WAT} + {1977958800 7200 1 WAST} + {1996099200 3600 0 WAT} + {2009408400 7200 1 WAST} + {2027548800 3600 0 WAT} + {2040858000 7200 1 WAST} + {2058998400 3600 0 WAT} + {2072307600 7200 1 WAST} + {2091052800 3600 0 WAT} + {2104362000 7200 1 WAST} + {2122502400 3600 0 WAT} + {2135811600 7200 1 WAST} + {2153952000 3600 0 WAT} + {2167261200 7200 1 WAST} + {2185401600 3600 0 WAT} + {2198710800 7200 1 WAST} + {2216851200 3600 0 WAT} + {2230160400 7200 1 WAST} + {2248905600 3600 0 WAT} + {2261610000 7200 1 WAST} + {2280355200 3600 0 WAT} + {2293664400 7200 1 WAST} + {2311804800 3600 0 WAT} + {2325114000 7200 1 WAST} + {2343254400 3600 0 WAT} + {2356563600 7200 1 WAST} + {2374704000 3600 0 WAT} + {2388013200 7200 1 WAST} + {2406153600 3600 0 WAT} + {2419462800 7200 1 WAST} + {2438208000 3600 0 WAT} + {2450912400 7200 1 WAST} + {2469657600 3600 0 WAT} + {2482966800 7200 1 WAST} + {2501107200 3600 0 WAT} + {2514416400 7200 1 WAST} + {2532556800 3600 0 WAT} + {2545866000 7200 1 WAST} + {2564006400 3600 0 WAT} + {2577315600 7200 1 WAST} + {2596060800 3600 0 WAT} + {2608765200 7200 1 WAST} + {2627510400 3600 0 WAT} + {2640819600 7200 1 WAST} + {2658960000 3600 0 WAT} + {2672269200 7200 1 WAST} + {2690409600 3600 0 WAT} + {2703718800 7200 1 WAST} + {2721859200 3600 0 WAT} + {2735168400 7200 1 WAST} + {2753308800 3600 0 WAT} + {2766618000 7200 1 WAST} + {2785363200 3600 0 WAT} + {2798067600 7200 1 WAST} + {2816812800 3600 0 WAT} + {2830122000 7200 1 WAST} + {2848262400 3600 0 WAT} + {2861571600 7200 1 WAST} + {2879712000 3600 0 WAT} + {2893021200 7200 1 WAST} + {2911161600 3600 0 WAT} + {2924470800 7200 1 WAST} + {2942611200 3600 0 WAT} + {2955920400 7200 1 WAST} + {2974665600 3600 0 WAT} + {2987974800 7200 1 WAST} + {3006115200 3600 0 WAT} + {3019424400 7200 1 WAST} + {3037564800 3600 0 WAT} + {3050874000 7200 1 WAST} + {3069014400 3600 0 WAT} + {3082323600 7200 1 WAST} + {3100464000 3600 0 WAT} + {3113773200 7200 1 WAST} + {3132518400 3600 0 WAT} + {3145222800 7200 1 WAST} + {3163968000 3600 0 WAT} + {3177277200 7200 1 WAST} + {3195417600 3600 0 WAT} + {3208726800 7200 1 WAST} + {3226867200 3600 0 WAT} + {3240176400 7200 1 WAST} + {3258316800 3600 0 WAT} + {3271626000 7200 1 WAST} + {3289766400 3600 0 WAT} + {3303075600 7200 1 WAST} + {3321820800 3600 0 WAT} + {3334525200 7200 1 WAST} + {3353270400 3600 0 WAT} + {3366579600 7200 1 WAST} + {3384720000 3600 0 WAT} + {3398029200 7200 1 WAST} + {3416169600 3600 0 WAT} + {3429478800 7200 1 WAST} + {3447619200 3600 0 WAT} + {3460928400 7200 1 WAST} + {3479673600 3600 0 WAT} + {3492378000 7200 1 WAST} + {3511123200 3600 0 WAT} + {3524432400 7200 1 WAST} + {3542572800 3600 0 WAT} + {3555882000 7200 1 WAST} + {3574022400 3600 0 WAT} + {3587331600 7200 1 WAST} + {3605472000 3600 0 WAT} + {3618781200 7200 1 WAST} + {3636921600 3600 0 WAT} + {3650230800 7200 1 WAST} + {3668976000 3600 0 WAT} + {3681680400 7200 1 WAST} + {3700425600 3600 0 WAT} + {3713734800 7200 1 WAST} + {3731875200 3600 0 WAT} + {3745184400 7200 1 WAST} + {3763324800 3600 0 WAT} + {3776634000 7200 1 WAST} + {3794774400 3600 0 WAT} + {3808083600 7200 1 WAST} + {3826224000 3600 0 WAT} + {3839533200 7200 1 WAST} + {3858278400 3600 0 WAT} + {3871587600 7200 1 WAST} + {3889728000 3600 0 WAT} + {3903037200 7200 1 WAST} + {3921177600 3600 0 WAT} + {3934486800 7200 1 WAST} + {3952627200 3600 0 WAT} + {3965936400 7200 1 WAST} + {3984076800 3600 0 WAT} + {3997386000 7200 1 WAST} + {4016131200 3600 0 WAT} + {4028835600 7200 1 WAST} + {4047580800 3600 0 WAT} + {4060890000 7200 1 WAST} + {4079030400 3600 0 WAT} + {4092339600 7200 1 WAST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Adak b/inkstitch/bin/tcl/tzdata/America/Adak new file mode 100644 index 0000000..f3c5e5c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Adak @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Adak) { + {-9223372036854775808 44001 0 LMT} + {-3225356001 -42398 0 LMT} + {-2188944802 -39600 0 NST} + {-883573200 -39600 0 NST} + {-880196400 -36000 1 NWT} + {-769395600 -36000 1 NPT} + {-765374400 -39600 0 NST} + {-757342800 -39600 0 NST} + {-86878800 -39600 0 BST} + {-31496400 -39600 0 BST} + {-21466800 -36000 1 BDT} + {-5745600 -39600 0 BST} + {9982800 -36000 1 BDT} + {25704000 -39600 0 BST} + {41432400 -36000 1 BDT} + {57758400 -39600 0 BST} + {73486800 -36000 1 BDT} + {89208000 -39600 0 BST} + {104936400 -36000 1 BDT} + {120657600 -39600 0 BST} + {126709200 -36000 1 BDT} + {152107200 -39600 0 BST} + {162392400 -36000 1 BDT} + {183556800 -39600 0 BST} + {199285200 -36000 1 BDT} + {215611200 -39600 0 BST} + {230734800 -36000 1 BDT} + {247060800 -39600 0 BST} + {262789200 -36000 1 BDT} + {278510400 -39600 0 BST} + {294238800 -36000 1 BDT} + {309960000 -39600 0 BST} + {325688400 -36000 1 BDT} + {341409600 -39600 0 BST} + {357138000 -36000 1 BDT} + {372859200 -39600 0 BST} + {388587600 -36000 1 BDT} + {404913600 -39600 0 BST} + {420037200 -36000 1 BDT} + {439034400 -36000 0 HAST} + {452088000 -32400 1 HADT} + {467809200 -36000 0 HAST} + {483537600 -32400 1 HADT} + {499258800 -36000 0 HAST} + {514987200 -32400 1 HADT} + {530708400 -36000 0 HAST} + {544622400 -32400 1 HADT} + {562158000 -36000 0 HAST} + {576072000 -32400 1 HADT} + {594212400 -36000 0 HAST} + {607521600 -32400 1 HADT} + {625662000 -36000 0 HAST} + {638971200 -32400 1 HADT} + {657111600 -36000 0 HAST} + {671025600 -32400 1 HADT} + {688561200 -36000 0 HAST} + {702475200 -32400 1 HADT} + {720010800 -36000 0 HAST} + {733924800 -32400 1 HADT} + {752065200 -36000 0 HAST} + {765374400 -32400 1 HADT} + {783514800 -36000 0 HAST} + {796824000 -32400 1 HADT} + {814964400 -36000 0 HAST} + {828878400 -32400 1 HADT} + {846414000 -36000 0 HAST} + {860328000 -32400 1 HADT} + {877863600 -36000 0 HAST} + {891777600 -32400 1 HADT} + {909313200 -36000 0 HAST} + {923227200 -32400 1 HADT} + {941367600 -36000 0 HAST} + {954676800 -32400 1 HADT} + {972817200 -36000 0 HAST} + {986126400 -32400 1 HADT} + {1004266800 -36000 0 HAST} + {1018180800 -32400 1 HADT} + {1035716400 -36000 0 HAST} + {1049630400 -32400 1 HADT} + {1067166000 -36000 0 HAST} + {1081080000 -32400 1 HADT} + {1099220400 -36000 0 HAST} + {1112529600 -32400 1 HADT} + {1130670000 -36000 0 HAST} + {1143979200 -32400 1 HADT} + {1162119600 -36000 0 HAST} + {1173614400 -32400 1 HADT} + {1194174000 -36000 0 HAST} + {1205064000 -32400 1 HADT} + {1225623600 -36000 0 HAST} + {1236513600 -32400 1 HADT} + {1257073200 -36000 0 HAST} + {1268568000 -32400 1 HADT} + {1289127600 -36000 0 HAST} + {1300017600 -32400 1 HADT} + {1320577200 -36000 0 HAST} + {1331467200 -32400 1 HADT} + {1352026800 -36000 0 HAST} + {1362916800 -32400 1 HADT} + {1383476400 -36000 0 HAST} + {1394366400 -32400 1 HADT} + {1414926000 -36000 0 HAST} + {1425816000 -32400 1 HADT} + {1446375600 -36000 0 HAST} + {1457870400 -32400 1 HADT} + {1478430000 -36000 0 HAST} + {1489320000 -32400 1 HADT} + {1509879600 -36000 0 HAST} + {1520769600 -32400 1 HADT} + {1541329200 -36000 0 HAST} + {1552219200 -32400 1 HADT} + {1572778800 -36000 0 HAST} + {1583668800 -32400 1 HADT} + {1604228400 -36000 0 HAST} + {1615723200 -32400 1 HADT} + {1636282800 -36000 0 HAST} + {1647172800 -32400 1 HADT} + {1667732400 -36000 0 HAST} + {1678622400 -32400 1 HADT} + {1699182000 -36000 0 HAST} + {1710072000 -32400 1 HADT} + {1730631600 -36000 0 HAST} + {1741521600 -32400 1 HADT} + {1762081200 -36000 0 HAST} + {1772971200 -32400 1 HADT} + {1793530800 -36000 0 HAST} + {1805025600 -32400 1 HADT} + {1825585200 -36000 0 HAST} + {1836475200 -32400 1 HADT} + {1857034800 -36000 0 HAST} + {1867924800 -32400 1 HADT} + {1888484400 -36000 0 HAST} + {1899374400 -32400 1 HADT} + {1919934000 -36000 0 HAST} + {1930824000 -32400 1 HADT} + {1951383600 -36000 0 HAST} + {1962878400 -32400 1 HADT} + {1983438000 -36000 0 HAST} + {1994328000 -32400 1 HADT} + {2014887600 -36000 0 HAST} + {2025777600 -32400 1 HADT} + {2046337200 -36000 0 HAST} + {2057227200 -32400 1 HADT} + {2077786800 -36000 0 HAST} + {2088676800 -32400 1 HADT} + {2109236400 -36000 0 HAST} + {2120126400 -32400 1 HADT} + {2140686000 -36000 0 HAST} + {2152180800 -32400 1 HADT} + {2172740400 -36000 0 HAST} + {2183630400 -32400 1 HADT} + {2204190000 -36000 0 HAST} + {2215080000 -32400 1 HADT} + {2235639600 -36000 0 HAST} + {2246529600 -32400 1 HADT} + {2267089200 -36000 0 HAST} + {2277979200 -32400 1 HADT} + {2298538800 -36000 0 HAST} + {2309428800 -32400 1 HADT} + {2329988400 -36000 0 HAST} + {2341483200 -32400 1 HADT} + {2362042800 -36000 0 HAST} + {2372932800 -32400 1 HADT} + {2393492400 -36000 0 HAST} + {2404382400 -32400 1 HADT} + {2424942000 -36000 0 HAST} + {2435832000 -32400 1 HADT} + {2456391600 -36000 0 HAST} + {2467281600 -32400 1 HADT} + {2487841200 -36000 0 HAST} + {2499336000 -32400 1 HADT} + {2519895600 -36000 0 HAST} + {2530785600 -32400 1 HADT} + {2551345200 -36000 0 HAST} + {2562235200 -32400 1 HADT} + {2582794800 -36000 0 HAST} + {2593684800 -32400 1 HADT} + {2614244400 -36000 0 HAST} + {2625134400 -32400 1 HADT} + {2645694000 -36000 0 HAST} + {2656584000 -32400 1 HADT} + {2677143600 -36000 0 HAST} + {2688638400 -32400 1 HADT} + {2709198000 -36000 0 HAST} + {2720088000 -32400 1 HADT} + {2740647600 -36000 0 HAST} + {2751537600 -32400 1 HADT} + {2772097200 -36000 0 HAST} + {2782987200 -32400 1 HADT} + {2803546800 -36000 0 HAST} + {2814436800 -32400 1 HADT} + {2834996400 -36000 0 HAST} + {2846491200 -32400 1 HADT} + {2867050800 -36000 0 HAST} + {2877940800 -32400 1 HADT} + {2898500400 -36000 0 HAST} + {2909390400 -32400 1 HADT} + {2929950000 -36000 0 HAST} + {2940840000 -32400 1 HADT} + {2961399600 -36000 0 HAST} + {2972289600 -32400 1 HADT} + {2992849200 -36000 0 HAST} + {3003739200 -32400 1 HADT} + {3024298800 -36000 0 HAST} + {3035793600 -32400 1 HADT} + {3056353200 -36000 0 HAST} + {3067243200 -32400 1 HADT} + {3087802800 -36000 0 HAST} + {3098692800 -32400 1 HADT} + {3119252400 -36000 0 HAST} + {3130142400 -32400 1 HADT} + {3150702000 -36000 0 HAST} + {3161592000 -32400 1 HADT} + {3182151600 -36000 0 HAST} + {3193041600 -32400 1 HADT} + {3213601200 -36000 0 HAST} + {3225096000 -32400 1 HADT} + {3245655600 -36000 0 HAST} + {3256545600 -32400 1 HADT} + {3277105200 -36000 0 HAST} + {3287995200 -32400 1 HADT} + {3308554800 -36000 0 HAST} + {3319444800 -32400 1 HADT} + {3340004400 -36000 0 HAST} + {3350894400 -32400 1 HADT} + {3371454000 -36000 0 HAST} + {3382948800 -32400 1 HADT} + {3403508400 -36000 0 HAST} + {3414398400 -32400 1 HADT} + {3434958000 -36000 0 HAST} + {3445848000 -32400 1 HADT} + {3466407600 -36000 0 HAST} + {3477297600 -32400 1 HADT} + {3497857200 -36000 0 HAST} + {3508747200 -32400 1 HADT} + {3529306800 -36000 0 HAST} + {3540196800 -32400 1 HADT} + {3560756400 -36000 0 HAST} + {3572251200 -32400 1 HADT} + {3592810800 -36000 0 HAST} + {3603700800 -32400 1 HADT} + {3624260400 -36000 0 HAST} + {3635150400 -32400 1 HADT} + {3655710000 -36000 0 HAST} + {3666600000 -32400 1 HADT} + {3687159600 -36000 0 HAST} + {3698049600 -32400 1 HADT} + {3718609200 -36000 0 HAST} + {3730104000 -32400 1 HADT} + {3750663600 -36000 0 HAST} + {3761553600 -32400 1 HADT} + {3782113200 -36000 0 HAST} + {3793003200 -32400 1 HADT} + {3813562800 -36000 0 HAST} + {3824452800 -32400 1 HADT} + {3845012400 -36000 0 HAST} + {3855902400 -32400 1 HADT} + {3876462000 -36000 0 HAST} + {3887352000 -32400 1 HADT} + {3907911600 -36000 0 HAST} + {3919406400 -32400 1 HADT} + {3939966000 -36000 0 HAST} + {3950856000 -32400 1 HADT} + {3971415600 -36000 0 HAST} + {3982305600 -32400 1 HADT} + {4002865200 -36000 0 HAST} + {4013755200 -32400 1 HADT} + {4034314800 -36000 0 HAST} + {4045204800 -32400 1 HADT} + {4065764400 -36000 0 HAST} + {4076654400 -32400 1 HADT} + {4097214000 -36000 0 HAST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Anchorage b/inkstitch/bin/tcl/tzdata/America/Anchorage new file mode 100644 index 0000000..e02dd01 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Anchorage @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Anchorage) { + {-9223372036854775808 50424 0 LMT} + {-3225362424 -35976 0 LMT} + {-2188951224 -36000 0 CAT} + {-883576800 -36000 0 CAWT} + {-880200000 -32400 1 CAWT} + {-769395600 -32400 0 CAPT} + {-765378000 -36000 0 CAPT} + {-757346400 -36000 0 CAT} + {-86882400 -36000 0 AHST} + {-31500000 -36000 0 AHST} + {-21470400 -32400 1 AHDT} + {-5749200 -36000 0 AHST} + {9979200 -32400 1 AHDT} + {25700400 -36000 0 AHST} + {41428800 -32400 1 AHDT} + {57754800 -36000 0 AHST} + {73483200 -32400 1 AHDT} + {89204400 -36000 0 AHST} + {104932800 -32400 1 AHDT} + {120654000 -36000 0 AHST} + {126705600 -32400 1 AHDT} + {152103600 -36000 0 AHST} + {162388800 -32400 1 AHDT} + {183553200 -36000 0 AHST} + {199281600 -32400 1 AHDT} + {215607600 -36000 0 AHST} + {230731200 -32400 1 AHDT} + {247057200 -36000 0 AHST} + {262785600 -32400 1 AHDT} + {278506800 -36000 0 AHST} + {294235200 -32400 1 AHDT} + {309956400 -36000 0 AHST} + {325684800 -32400 1 AHDT} + {341406000 -36000 0 AHST} + {357134400 -32400 1 AHDT} + {372855600 -36000 0 AHST} + {388584000 -32400 1 AHDT} + {404910000 -36000 0 AHST} + {420033600 -32400 1 AHDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Anguilla b/inkstitch/bin/tcl/tzdata/America/Anguilla new file mode 100644 index 0000000..cfe7483 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Anguilla @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Anguilla) { + {-9223372036854775808 -15136 0 LMT} + {-1825098464 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Antigua b/inkstitch/bin/tcl/tzdata/America/Antigua new file mode 100644 index 0000000..5433e9b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Antigua @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Antigua) { + {-9223372036854775808 -14832 0 LMT} + {-1825098768 -18000 0 EST} + {-599598000 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Araguaina b/inkstitch/bin/tcl/tzdata/America/Araguaina new file mode 100644 index 0000000..dc1b543 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Araguaina @@ -0,0 +1,232 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Araguaina) { + {-9223372036854775808 -11568 0 LMT} + {-1767214032 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {811047600 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1064368800 -10800 0 BRT} + {1350788400 -7200 0 BRST} + {1361066400 -10800 0 BRT} + {1382238000 -7200 1 BRST} + {1392516000 -10800 0 BRT} + {1413687600 -7200 1 BRST} + {1424570400 -10800 0 BRT} + {1445137200 -7200 1 BRST} + {1456020000 -10800 0 BRT} + {1476586800 -7200 1 BRST} + {1487469600 -10800 0 BRT} + {1508036400 -7200 1 BRST} + {1518919200 -10800 0 BRT} + {1540090800 -7200 1 BRST} + {1550368800 -10800 0 BRT} + {1571540400 -7200 1 BRST} + {1581818400 -10800 0 BRT} + {1602990000 -7200 1 BRST} + {1613872800 -10800 0 BRT} + {1634439600 -7200 1 BRST} + {1645322400 -10800 0 BRT} + {1665889200 -7200 1 BRST} + {1677376800 -10800 0 BRT} + {1697338800 -7200 1 BRST} + {1708221600 -10800 0 BRT} + {1729393200 -7200 1 BRST} + {1739671200 -10800 0 BRT} + {1760842800 -7200 1 BRST} + {1771725600 -10800 0 BRT} + {1792292400 -7200 1 BRST} + {1803175200 -10800 0 BRT} + {1823742000 -7200 1 BRST} + {1834624800 -10800 0 BRT} + {1855191600 -7200 1 BRST} + {1866074400 -10800 0 BRT} + {1887246000 -7200 1 BRST} + {1897524000 -10800 0 BRT} + {1918695600 -7200 1 BRST} + {1928973600 -10800 0 BRT} + {1950145200 -7200 1 BRST} + {1960423200 -10800 0 BRT} + {1981594800 -7200 1 BRST} + {1992477600 -10800 0 BRT} + {2013044400 -7200 1 BRST} + {2024532000 -10800 0 BRT} + {2044494000 -7200 1 BRST} + {2055376800 -10800 0 BRT} + {2076548400 -7200 1 BRST} + {2086826400 -10800 0 BRT} + {2107998000 -7200 1 BRST} + {2118880800 -10800 0 BRT} + {2139447600 -7200 1 BRST} + {2150330400 -10800 0 BRT} + {2170897200 -7200 1 BRST} + {2181780000 -10800 0 BRT} + {2202346800 -7200 1 BRST} + {2213229600 -10800 0 BRT} + {2234401200 -7200 1 BRST} + {2244679200 -10800 0 BRT} + {2265850800 -7200 1 BRST} + {2276128800 -10800 0 BRT} + {2297300400 -7200 1 BRST} + {2307578400 -10800 0 BRT} + {2328750000 -7200 1 BRST} + {2339632800 -10800 0 BRT} + {2360199600 -7200 1 BRST} + {2371082400 -10800 0 BRT} + {2391649200 -7200 1 BRST} + {2402532000 -10800 0 BRT} + {2423703600 -7200 1 BRST} + {2433981600 -10800 0 BRT} + {2455153200 -7200 1 BRST} + {2465431200 -10800 0 BRT} + {2486602800 -7200 1 BRST} + {2497485600 -10800 0 BRT} + {2518052400 -7200 1 BRST} + {2528935200 -10800 0 BRT} + {2549502000 -7200 1 BRST} + {2560384800 -10800 0 BRT} + {2580951600 -7200 1 BRST} + {2591834400 -10800 0 BRT} + {2613006000 -7200 1 BRST} + {2623284000 -10800 0 BRT} + {2644455600 -7200 1 BRST} + {2654733600 -10800 0 BRT} + {2675905200 -7200 1 BRST} + {2686788000 -10800 0 BRT} + {2707354800 -7200 1 BRST} + {2718237600 -10800 0 BRT} + {2738804400 -7200 1 BRST} + {2749687200 -10800 0 BRT} + {2770858800 -7200 1 BRST} + {2781136800 -10800 0 BRT} + {2802308400 -7200 1 BRST} + {2812586400 -10800 0 BRT} + {2833758000 -7200 1 BRST} + {2844036000 -10800 0 BRT} + {2865207600 -7200 1 BRST} + {2876090400 -10800 0 BRT} + {2896657200 -7200 1 BRST} + {2907540000 -10800 0 BRT} + {2928106800 -7200 1 BRST} + {2938989600 -10800 0 BRT} + {2960161200 -7200 1 BRST} + {2970439200 -10800 0 BRT} + {2991610800 -7200 1 BRST} + {3001888800 -10800 0 BRT} + {3023060400 -7200 1 BRST} + {3033943200 -10800 0 BRT} + {3054510000 -7200 1 BRST} + {3065392800 -10800 0 BRT} + {3085959600 -7200 1 BRST} + {3096842400 -10800 0 BRT} + {3118014000 -7200 1 BRST} + {3128292000 -10800 0 BRT} + {3149463600 -7200 1 BRST} + {3159741600 -10800 0 BRT} + {3180913200 -7200 1 BRST} + {3191191200 -10800 0 BRT} + {3212362800 -7200 1 BRST} + {3223245600 -10800 0 BRT} + {3243812400 -7200 1 BRST} + {3254695200 -10800 0 BRT} + {3275262000 -7200 1 BRST} + {3286144800 -10800 0 BRT} + {3307316400 -7200 1 BRST} + {3317594400 -10800 0 BRT} + {3338766000 -7200 1 BRST} + {3349044000 -10800 0 BRT} + {3370215600 -7200 1 BRST} + {3381098400 -10800 0 BRT} + {3401665200 -7200 1 BRST} + {3412548000 -10800 0 BRT} + {3433114800 -7200 1 BRST} + {3443997600 -10800 0 BRT} + {3464564400 -7200 1 BRST} + {3475447200 -10800 0 BRT} + {3496618800 -7200 1 BRST} + {3506896800 -10800 0 BRT} + {3528068400 -7200 1 BRST} + {3538346400 -10800 0 BRT} + {3559518000 -7200 1 BRST} + {3570400800 -10800 0 BRT} + {3590967600 -7200 1 BRST} + {3601850400 -10800 0 BRT} + {3622417200 -7200 1 BRST} + {3633300000 -10800 0 BRT} + {3654471600 -7200 1 BRST} + {3664749600 -10800 0 BRT} + {3685921200 -7200 1 BRST} + {3696199200 -10800 0 BRT} + {3717370800 -7200 1 BRST} + {3727648800 -10800 0 BRT} + {3748820400 -7200 1 BRST} + {3759703200 -10800 0 BRT} + {3780270000 -7200 1 BRST} + {3791152800 -10800 0 BRT} + {3811719600 -7200 1 BRST} + {3822602400 -10800 0 BRT} + {3843774000 -7200 1 BRST} + {3854052000 -10800 0 BRT} + {3875223600 -7200 1 BRST} + {3885501600 -10800 0 BRT} + {3906673200 -7200 1 BRST} + {3917556000 -10800 0 BRT} + {3938122800 -7200 1 BRST} + {3949005600 -10800 0 BRT} + {3969572400 -7200 1 BRST} + {3980455200 -10800 0 BRT} + {4001626800 -7200 1 BRST} + {4011904800 -10800 0 BRT} + {4033076400 -7200 1 BRST} + {4043354400 -10800 0 BRT} + {4064526000 -7200 1 BRST} + {4074804000 -10800 0 BRT} + {4095975600 -7200 1 BRST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires b/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires new file mode 100644 index 0000000..73cc8e9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Buenos_Aires) { + {-9223372036854775808 -14028 0 LMT} + {-2372097972 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca b/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca new file mode 100644 index 0000000..7739203 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Catamarca) { + {-9223372036854775808 -15788 0 LMT} + {-2372096212 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia b/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia new file mode 100644 index 0000000..2611a3d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Catamarca)]} { + LoadTimeZoneFile America/Argentina/Catamarca +} +set TZData(:America/Argentina/ComodRivadavia) $TZData(:America/Argentina/Catamarca) diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba b/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba new file mode 100644 index 0000000..b08539e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Cordoba) { + {-9223372036854775808 -15408 0 LMT} + {-2372096592 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy b/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy new file mode 100644 index 0000000..4f95f8a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Jujuy) { + {-9223372036854775808 -15672 0 LMT} + {-2372096328 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -14400 0 WART} + {657086400 -10800 1 WARST} + {669178800 -14400 0 WART} + {686721600 -7200 1 ARST} + {694231200 -7200 0 ART} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja b/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja new file mode 100644 index 0000000..835e29d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/La_Rioja) { + {-9223372036854775808 -16044 0 LMT} + {-2372095956 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667792800 -14400 0 WART} + {673588800 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza b/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza new file mode 100644 index 0000000..2c6fb58 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Mendoza) { + {-9223372036854775808 -16516 0 LMT} + {-2372095484 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -14400 0 WART} + {655963200 -10800 1 WARST} + {667796400 -14400 0 WART} + {687499200 -10800 1 WARST} + {699418800 -14400 0 WART} + {719380800 -7200 0 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085281200 -14400 0 WART} + {1096171200 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos b/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos new file mode 100644 index 0000000..91d37dd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Rio_Gallegos) { + {-9223372036854775808 -16612 0 LMT} + {-2372095388 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Salta b/inkstitch/bin/tcl/tzdata/America/Argentina/Salta new file mode 100644 index 0000000..a5a7010 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Salta @@ -0,0 +1,66 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Salta) { + {-9223372036854775808 -15700 0 LMT} + {-2372096300 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan b/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan new file mode 100644 index 0000000..417e234 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/San_Juan) { + {-9223372036854775808 -16444 0 LMT} + {-2372095556 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667792800 -14400 0 WART} + {673588800 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085972400 -14400 0 WART} + {1090728000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis b/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis new file mode 100644 index 0000000..bec1554 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/San_Luis) { + {-9223372036854775808 -15924 0 LMT} + {-2372096076 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {631159200 -7200 1 ARST} + {637380000 -14400 0 WART} + {655963200 -10800 1 WARST} + {667796400 -14400 0 WART} + {675748800 -10800 0 ART} + {938919600 -10800 1 WARST} + {952052400 -10800 0 ART} + {1085972400 -14400 0 WART} + {1090728000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1200880800 -10800 0 WART} + {1205031600 -14400 0 WART} + {1223784000 -10800 1 WARST} + {1236481200 -14400 0 WART} + {1255233600 -10800 1 WARST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman b/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman new file mode 100644 index 0000000..3500986 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Tucuman) { + {-9223372036854775808 -15652 0 LMT} + {-2372096348 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087099200 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia b/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia new file mode 100644 index 0000000..4fcf92d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Ushuaia) { + {-9223372036854775808 -16392 0 LMT} + {-2372095608 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085886000 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Aruba b/inkstitch/bin/tcl/tzdata/America/Aruba new file mode 100644 index 0000000..92f182d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Aruba @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Aruba) { + {-9223372036854775808 -16824 0 LMT} + {-1826738376 -16200 0 ANT} + {-157750200 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Asuncion b/inkstitch/bin/tcl/tzdata/America/Asuncion new file mode 100644 index 0000000..9ea30da --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Asuncion @@ -0,0 +1,259 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Asuncion) { + {-9223372036854775808 -13840 0 LMT} + {-2524507760 -13840 0 AMT} + {-1206389360 -14400 0 PYT} + {86760000 -10800 0 PYT} + {134017200 -14400 0 PYT} + {162878400 -14400 0 PYT} + {181368000 -10800 1 PYST} + {194497200 -14400 0 PYT} + {212990400 -10800 1 PYST} + {226033200 -14400 0 PYT} + {244526400 -10800 1 PYST} + {257569200 -14400 0 PYT} + {276062400 -10800 1 PYST} + {291783600 -14400 0 PYT} + {307598400 -10800 1 PYST} + {323406000 -14400 0 PYT} + {339220800 -10800 1 PYST} + {354942000 -14400 0 PYT} + {370756800 -10800 1 PYST} + {386478000 -14400 0 PYT} + {402292800 -10800 1 PYST} + {418014000 -14400 0 PYT} + {433828800 -10800 1 PYST} + {449636400 -14400 0 PYT} + {465451200 -10800 1 PYST} + {481172400 -14400 0 PYT} + {496987200 -10800 1 PYST} + {512708400 -14400 0 PYT} + {528523200 -10800 1 PYST} + {544244400 -14400 0 PYT} + {560059200 -10800 1 PYST} + {575866800 -14400 0 PYT} + {591681600 -10800 1 PYST} + {607402800 -14400 0 PYT} + {625032000 -10800 1 PYST} + {638938800 -14400 0 PYT} + {654753600 -10800 1 PYST} + {670474800 -14400 0 PYT} + {686721600 -10800 1 PYST} + {699418800 -14400 0 PYT} + {718257600 -10800 1 PYST} + {733546800 -14400 0 PYT} + {749448000 -10800 1 PYST} + {762318000 -14400 0 PYT} + {780984000 -10800 1 PYST} + {793767600 -14400 0 PYT} + {812520000 -10800 1 PYST} + {825649200 -14400 0 PYT} + {844574400 -10800 1 PYST} + {856666800 -14400 0 PYT} + {876024000 -10800 1 PYST} + {888721200 -14400 0 PYT} + {907473600 -10800 1 PYST} + {920775600 -14400 0 PYT} + {938923200 -10800 1 PYST} + {952225200 -14400 0 PYT} + {970372800 -10800 1 PYST} + {983674800 -14400 0 PYT} + {1002427200 -10800 1 PYST} + {1018148400 -14400 0 PYT} + {1030852800 -10800 1 PYST} + {1049598000 -14400 0 PYT} + {1062907200 -10800 1 PYST} + {1081047600 -14400 0 PYT} + {1097985600 -10800 1 PYST} + {1110682800 -14400 0 PYT} + {1129435200 -10800 1 PYST} + {1142132400 -14400 0 PYT} + {1160884800 -10800 1 PYST} + {1173582000 -14400 0 PYT} + {1192939200 -10800 1 PYST} + {1205031600 -14400 0 PYT} + {1224388800 -10800 1 PYST} + {1236481200 -14400 0 PYT} + {1255838400 -10800 1 PYST} + {1270954800 -14400 0 PYT} + {1286078400 -10800 1 PYST} + {1302404400 -14400 0 PYT} + {1317528000 -10800 1 PYST} + {1333854000 -14400 0 PYT} + {1349582400 -10800 1 PYST} + {1364094000 -14400 0 PYT} + {1381032000 -10800 1 PYST} + {1395543600 -14400 0 PYT} + {1412481600 -10800 1 PYST} + {1426993200 -14400 0 PYT} + {1443931200 -10800 1 PYST} + {1459047600 -14400 0 PYT} + {1475380800 -10800 1 PYST} + {1490497200 -14400 0 PYT} + {1506830400 -10800 1 PYST} + {1521946800 -14400 0 PYT} + {1538884800 -10800 1 PYST} + {1553396400 -14400 0 PYT} + {1570334400 -10800 1 PYST} + {1584846000 -14400 0 PYT} + {1601784000 -10800 1 PYST} + {1616900400 -14400 0 PYT} + {1633233600 -10800 1 PYST} + {1648350000 -14400 0 PYT} + {1664683200 -10800 1 PYST} + {1679799600 -14400 0 PYT} + {1696132800 -10800 1 PYST} + {1711249200 -14400 0 PYT} + {1728187200 -10800 1 PYST} + {1742698800 -14400 0 PYT} + {1759636800 -10800 1 PYST} + {1774148400 -14400 0 PYT} + {1791086400 -10800 1 PYST} + {1806202800 -14400 0 PYT} + {1822536000 -10800 1 PYST} + {1837652400 -14400 0 PYT} + {1853985600 -10800 1 PYST} + {1869102000 -14400 0 PYT} + {1886040000 -10800 1 PYST} + {1900551600 -14400 0 PYT} + {1917489600 -10800 1 PYST} + {1932001200 -14400 0 PYT} + {1948939200 -10800 1 PYST} + {1964055600 -14400 0 PYT} + {1980388800 -10800 1 PYST} + {1995505200 -14400 0 PYT} + {2011838400 -10800 1 PYST} + {2026954800 -14400 0 PYT} + {2043288000 -10800 1 PYST} + {2058404400 -14400 0 PYT} + {2075342400 -10800 1 PYST} + {2089854000 -14400 0 PYT} + {2106792000 -10800 1 PYST} + {2121303600 -14400 0 PYT} + {2138241600 -10800 1 PYST} + {2153358000 -14400 0 PYT} + {2169691200 -10800 1 PYST} + {2184807600 -14400 0 PYT} + {2201140800 -10800 1 PYST} + {2216257200 -14400 0 PYT} + {2233195200 -10800 1 PYST} + {2247706800 -14400 0 PYT} + {2264644800 -10800 1 PYST} + {2279156400 -14400 0 PYT} + {2296094400 -10800 1 PYST} + {2310606000 -14400 0 PYT} + {2327544000 -10800 1 PYST} + {2342660400 -14400 0 PYT} + {2358993600 -10800 1 PYST} + {2374110000 -14400 0 PYT} + {2390443200 -10800 1 PYST} + {2405559600 -14400 0 PYT} + {2422497600 -10800 1 PYST} + {2437009200 -14400 0 PYT} + {2453947200 -10800 1 PYST} + {2468458800 -14400 0 PYT} + {2485396800 -10800 1 PYST} + {2500513200 -14400 0 PYT} + {2516846400 -10800 1 PYST} + {2531962800 -14400 0 PYT} + {2548296000 -10800 1 PYST} + {2563412400 -14400 0 PYT} + {2579745600 -10800 1 PYST} + {2594862000 -14400 0 PYT} + {2611800000 -10800 1 PYST} + {2626311600 -14400 0 PYT} + {2643249600 -10800 1 PYST} + {2657761200 -14400 0 PYT} + {2674699200 -10800 1 PYST} + {2689815600 -14400 0 PYT} + {2706148800 -10800 1 PYST} + {2721265200 -14400 0 PYT} + {2737598400 -10800 1 PYST} + {2752714800 -14400 0 PYT} + {2769652800 -10800 1 PYST} + {2784164400 -14400 0 PYT} + {2801102400 -10800 1 PYST} + {2815614000 -14400 0 PYT} + {2832552000 -10800 1 PYST} + {2847668400 -14400 0 PYT} + {2864001600 -10800 1 PYST} + {2879118000 -14400 0 PYT} + {2895451200 -10800 1 PYST} + {2910567600 -14400 0 PYT} + {2926900800 -10800 1 PYST} + {2942017200 -14400 0 PYT} + {2958955200 -10800 1 PYST} + {2973466800 -14400 0 PYT} + {2990404800 -10800 1 PYST} + {3004916400 -14400 0 PYT} + {3021854400 -10800 1 PYST} + {3036970800 -14400 0 PYT} + {3053304000 -10800 1 PYST} + {3068420400 -14400 0 PYT} + {3084753600 -10800 1 PYST} + {3099870000 -14400 0 PYT} + {3116808000 -10800 1 PYST} + {3131319600 -14400 0 PYT} + {3148257600 -10800 1 PYST} + {3162769200 -14400 0 PYT} + {3179707200 -10800 1 PYST} + {3194218800 -14400 0 PYT} + {3211156800 -10800 1 PYST} + {3226273200 -14400 0 PYT} + {3242606400 -10800 1 PYST} + {3257722800 -14400 0 PYT} + {3274056000 -10800 1 PYST} + {3289172400 -14400 0 PYT} + {3306110400 -10800 1 PYST} + {3320622000 -14400 0 PYT} + {3337560000 -10800 1 PYST} + {3352071600 -14400 0 PYT} + {3369009600 -10800 1 PYST} + {3384126000 -14400 0 PYT} + {3400459200 -10800 1 PYST} + {3415575600 -14400 0 PYT} + {3431908800 -10800 1 PYST} + {3447025200 -14400 0 PYT} + {3463358400 -10800 1 PYST} + {3478474800 -14400 0 PYT} + {3495412800 -10800 1 PYST} + {3509924400 -14400 0 PYT} + {3526862400 -10800 1 PYST} + {3541374000 -14400 0 PYT} + {3558312000 -10800 1 PYST} + {3573428400 -14400 0 PYT} + {3589761600 -10800 1 PYST} + {3604878000 -14400 0 PYT} + {3621211200 -10800 1 PYST} + {3636327600 -14400 0 PYT} + {3653265600 -10800 1 PYST} + {3667777200 -14400 0 PYT} + {3684715200 -10800 1 PYST} + {3699226800 -14400 0 PYT} + {3716164800 -10800 1 PYST} + {3731281200 -14400 0 PYT} + {3747614400 -10800 1 PYST} + {3762730800 -14400 0 PYT} + {3779064000 -10800 1 PYST} + {3794180400 -14400 0 PYT} + {3810513600 -10800 1 PYST} + {3825630000 -14400 0 PYT} + {3842568000 -10800 1 PYST} + {3857079600 -14400 0 PYT} + {3874017600 -10800 1 PYST} + {3888529200 -14400 0 PYT} + {3905467200 -10800 1 PYST} + {3920583600 -14400 0 PYT} + {3936916800 -10800 1 PYST} + {3952033200 -14400 0 PYT} + {3968366400 -10800 1 PYST} + {3983482800 -14400 0 PYT} + {4000420800 -10800 1 PYST} + {4014932400 -14400 0 PYT} + {4031870400 -10800 1 PYST} + {4046382000 -14400 0 PYT} + {4063320000 -10800 1 PYST} + {4077831600 -14400 0 PYT} + {4094769600 -10800 1 PYST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Atikokan b/inkstitch/bin/tcl/tzdata/America/Atikokan new file mode 100644 index 0000000..e72b04f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Atikokan @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Atikokan) { + {-9223372036854775808 -21988 0 LMT} + {-2366733212 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-923248800 -18000 1 CDT} + {-880214400 -18000 0 CWT} + {-769395600 -18000 1 CPT} + {-765388800 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Atka b/inkstitch/bin/tcl/tzdata/America/Atka new file mode 100644 index 0000000..8da3302 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Atka @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Adak)]} { + LoadTimeZoneFile America/Adak +} +set TZData(:America/Atka) $TZData(:America/Adak) diff --git a/inkstitch/bin/tcl/tzdata/America/Bahia b/inkstitch/bin/tcl/tzdata/America/Bahia new file mode 100644 index 0000000..ac67b71 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Bahia @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bahia) { + {-9223372036854775808 -9244 0 LMT} + {-1767216356 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {656478000 -7200 1 BRST} + {666756000 -10800 0 BRT} + {687927600 -7200 1 BRST} + {697600800 -10800 0 BRT} + {719982000 -7200 1 BRST} + {728445600 -10800 0 BRT} + {750826800 -7200 1 BRST} + {761709600 -10800 0 BRT} + {782276400 -7200 1 BRST} + {793159200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1064368800 -10800 0 BRT} + {1318734000 -7200 0 BRST} + {1330221600 -10800 0 BRT} + {1350784800 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas b/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas new file mode 100644 index 0000000..8c40a0e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bahia_Banderas) { + {-9223372036854775808 -25260 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -18000 0 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Barbados b/inkstitch/bin/tcl/tzdata/America/Barbados new file mode 100644 index 0000000..ea17073 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Barbados @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Barbados) { + {-9223372036854775808 -14309 0 LMT} + {-1451678491 -14309 0 BMT} + {-1199217691 -14400 0 AST} + {234943200 -10800 1 ADT} + {244616400 -14400 0 AST} + {261554400 -10800 1 ADT} + {276066000 -14400 0 AST} + {293004000 -10800 1 ADT} + {307515600 -14400 0 AST} + {325058400 -10800 1 ADT} + {338706000 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Belem b/inkstitch/bin/tcl/tzdata/America/Belem new file mode 100644 index 0000000..ed92fd1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Belem @@ -0,0 +1,35 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Belem) { + {-9223372036854775808 -11636 0 LMT} + {-1767213964 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {590032800 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Belize b/inkstitch/bin/tcl/tzdata/America/Belize new file mode 100644 index 0000000..547fd72 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Belize @@ -0,0 +1,60 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Belize) { + {-9223372036854775808 -21168 0 LMT} + {-1822500432 -21600 0 CST} + {-1616954400 -19800 1 CHDT} + {-1606069800 -21600 0 CST} + {-1585504800 -19800 1 CHDT} + {-1574015400 -21600 0 CST} + {-1554055200 -19800 1 CHDT} + {-1542565800 -21600 0 CST} + {-1522605600 -19800 1 CHDT} + {-1511116200 -21600 0 CST} + {-1490551200 -19800 1 CHDT} + {-1479666600 -21600 0 CST} + {-1459101600 -19800 1 CHDT} + {-1448217000 -21600 0 CST} + {-1427652000 -19800 1 CHDT} + {-1416162600 -21600 0 CST} + {-1396202400 -19800 1 CHDT} + {-1384713000 -21600 0 CST} + {-1364752800 -19800 1 CHDT} + {-1353263400 -21600 0 CST} + {-1333303200 -19800 1 CHDT} + {-1321813800 -21600 0 CST} + {-1301248800 -19800 1 CHDT} + {-1290364200 -21600 0 CST} + {-1269799200 -19800 1 CHDT} + {-1258914600 -21600 0 CST} + {-1238349600 -19800 1 CHDT} + {-1226860200 -21600 0 CST} + {-1206900000 -19800 1 CHDT} + {-1195410600 -21600 0 CST} + {-1175450400 -19800 1 CHDT} + {-1163961000 -21600 0 CST} + {-1143396000 -19800 1 CHDT} + {-1132511400 -21600 0 CST} + {-1111946400 -19800 1 CHDT} + {-1101061800 -21600 0 CST} + {-1080496800 -19800 1 CHDT} + {-1069612200 -21600 0 CST} + {-1049047200 -19800 1 CHDT} + {-1037557800 -21600 0 CST} + {-1017597600 -19800 1 CHDT} + {-1006108200 -21600 0 CST} + {-986148000 -19800 1 CHDT} + {-974658600 -21600 0 CST} + {-954093600 -19800 1 CHDT} + {-943209000 -21600 0 CST} + {-922644000 -19800 1 CHDT} + {-911759400 -21600 0 CST} + {-891194400 -19800 1 CHDT} + {-879705000 -21600 0 CST} + {-859744800 -19800 1 CHDT} + {-848255400 -21600 0 CST} + {123919200 -18000 1 CDT} + {129618000 -21600 0 CST} + {409039200 -18000 1 CDT} + {413874000 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon b/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon new file mode 100644 index 0000000..d5485e8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Blanc-Sablon) { + {-9223372036854775808 -13708 0 LMT} + {-2713896692 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {14400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Boa_Vista b/inkstitch/bin/tcl/tzdata/America/Boa_Vista new file mode 100644 index 0000000..c85bc27 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Boa_Vista @@ -0,0 +1,40 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Boa_Vista) { + {-9223372036854775808 -14560 0 LMT} + {-1767211040 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {938664000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {971578800 -14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Bogota b/inkstitch/bin/tcl/tzdata/America/Bogota new file mode 100644 index 0000000..b28abc1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Bogota @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bogota) { + {-9223372036854775808 -17776 0 LMT} + {-2707671824 -17776 0 BMT} + {-1739041424 -18000 0 COT} + {704869200 -14400 1 COST} + {733896000 -18000 0 COT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Boise b/inkstitch/bin/tcl/tzdata/America/Boise new file mode 100644 index 0000000..62b22a0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Boise @@ -0,0 +1,281 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Boise) { + {-9223372036854775808 -27889 0 LMT} + {-2717640000 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-1471788000 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126255600 -25200 0 MST} + {129114000 -21600 0 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Buenos_Aires b/inkstitch/bin/tcl/tzdata/America/Buenos_Aires new file mode 100644 index 0000000..1389195 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Buenos_Aires @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Buenos_Aires)]} { + LoadTimeZoneFile America/Argentina/Buenos_Aires +} +set TZData(:America/Buenos_Aires) $TZData(:America/Argentina/Buenos_Aires) diff --git a/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay b/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay new file mode 100644 index 0000000..23004bb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cambridge_Bay) { + {-9223372036854775808 0 0 zzz} + {-1577923200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-147891600 -18000 1 MDDT} + {-131562000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941360400 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {973400400 -21600 0 CST} + {986115600 -21600 0 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Campo_Grande b/inkstitch/bin/tcl/tzdata/America/Campo_Grande new file mode 100644 index 0000000..2cafe14 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Campo_Grande @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Campo_Grande) { + {-9223372036854775808 -13108 0 LMT} + {-1767212492 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {592977600 -10800 1 AMST} + {602046000 -14400 0 AMT} + {624427200 -10800 1 AMST} + {634705200 -14400 0 AMT} + {656481600 -10800 1 AMST} + {666759600 -14400 0 AMT} + {687931200 -10800 1 AMST} + {697604400 -14400 0 AMT} + {719985600 -10800 1 AMST} + {728449200 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {782280000 -10800 1 AMST} + {793162800 -14400 0 AMT} + {813729600 -10800 1 AMST} + {824007600 -14400 0 AMT} + {844574400 -10800 1 AMST} + {856062000 -14400 0 AMT} + {876110400 -10800 1 AMST} + {888721200 -14400 0 AMT} + {908078400 -10800 1 AMST} + {919566000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {982465200 -14400 0 AMT} + {1003032000 -10800 1 AMST} + {1013914800 -14400 0 AMT} + {1036296000 -10800 1 AMST} + {1045364400 -14400 0 AMT} + {1066536000 -10800 1 AMST} + {1076814000 -14400 0 AMT} + {1099368000 -10800 1 AMST} + {1108868400 -14400 0 AMT} + {1129435200 -10800 1 AMST} + {1140318000 -14400 0 AMT} + {1162699200 -10800 1 AMST} + {1172372400 -14400 0 AMT} + {1192334400 -10800 1 AMST} + {1203217200 -14400 0 AMT} + {1224388800 -10800 1 AMST} + {1234666800 -14400 0 AMT} + {1255838400 -10800 1 AMST} + {1266721200 -14400 0 AMT} + {1287288000 -10800 1 AMST} + {1298170800 -14400 0 AMT} + {1318737600 -10800 1 AMST} + {1330225200 -14400 0 AMT} + {1350792000 -10800 1 AMST} + {1361070000 -14400 0 AMT} + {1382241600 -10800 1 AMST} + {1392519600 -14400 0 AMT} + {1413691200 -10800 1 AMST} + {1424574000 -14400 0 AMT} + {1445140800 -10800 1 AMST} + {1456023600 -14400 0 AMT} + {1476590400 -10800 1 AMST} + {1487473200 -14400 0 AMT} + {1508040000 -10800 1 AMST} + {1518922800 -14400 0 AMT} + {1540094400 -10800 1 AMST} + {1550372400 -14400 0 AMT} + {1571544000 -10800 1 AMST} + {1581822000 -14400 0 AMT} + {1602993600 -10800 1 AMST} + {1613876400 -14400 0 AMT} + {1634443200 -10800 1 AMST} + {1645326000 -14400 0 AMT} + {1665892800 -10800 1 AMST} + {1677380400 -14400 0 AMT} + {1697342400 -10800 1 AMST} + {1708225200 -14400 0 AMT} + {1729396800 -10800 1 AMST} + {1739674800 -14400 0 AMT} + {1760846400 -10800 1 AMST} + {1771729200 -14400 0 AMT} + {1792296000 -10800 1 AMST} + {1803178800 -14400 0 AMT} + {1823745600 -10800 1 AMST} + {1834628400 -14400 0 AMT} + {1855195200 -10800 1 AMST} + {1866078000 -14400 0 AMT} + {1887249600 -10800 1 AMST} + {1897527600 -14400 0 AMT} + {1918699200 -10800 1 AMST} + {1928977200 -14400 0 AMT} + {1950148800 -10800 1 AMST} + {1960426800 -14400 0 AMT} + {1981598400 -10800 1 AMST} + {1992481200 -14400 0 AMT} + {2013048000 -10800 1 AMST} + {2024535600 -14400 0 AMT} + {2044497600 -10800 1 AMST} + {2055380400 -14400 0 AMT} + {2076552000 -10800 1 AMST} + {2086830000 -14400 0 AMT} + {2108001600 -10800 1 AMST} + {2118884400 -14400 0 AMT} + {2139451200 -10800 1 AMST} + {2150334000 -14400 0 AMT} + {2170900800 -10800 1 AMST} + {2181783600 -14400 0 AMT} + {2202350400 -10800 1 AMST} + {2213233200 -14400 0 AMT} + {2234404800 -10800 1 AMST} + {2244682800 -14400 0 AMT} + {2265854400 -10800 1 AMST} + {2276132400 -14400 0 AMT} + {2297304000 -10800 1 AMST} + {2307582000 -14400 0 AMT} + {2328753600 -10800 1 AMST} + {2339636400 -14400 0 AMT} + {2360203200 -10800 1 AMST} + {2371086000 -14400 0 AMT} + {2391652800 -10800 1 AMST} + {2402535600 -14400 0 AMT} + {2423707200 -10800 1 AMST} + {2433985200 -14400 0 AMT} + {2455156800 -10800 1 AMST} + {2465434800 -14400 0 AMT} + {2486606400 -10800 1 AMST} + {2497489200 -14400 0 AMT} + {2518056000 -10800 1 AMST} + {2528938800 -14400 0 AMT} + {2549505600 -10800 1 AMST} + {2560388400 -14400 0 AMT} + {2580955200 -10800 1 AMST} + {2591838000 -14400 0 AMT} + {2613009600 -10800 1 AMST} + {2623287600 -14400 0 AMT} + {2644459200 -10800 1 AMST} + {2654737200 -14400 0 AMT} + {2675908800 -10800 1 AMST} + {2686791600 -14400 0 AMT} + {2707358400 -10800 1 AMST} + {2718241200 -14400 0 AMT} + {2738808000 -10800 1 AMST} + {2749690800 -14400 0 AMT} + {2770862400 -10800 1 AMST} + {2781140400 -14400 0 AMT} + {2802312000 -10800 1 AMST} + {2812590000 -14400 0 AMT} + {2833761600 -10800 1 AMST} + {2844039600 -14400 0 AMT} + {2865211200 -10800 1 AMST} + {2876094000 -14400 0 AMT} + {2896660800 -10800 1 AMST} + {2907543600 -14400 0 AMT} + {2928110400 -10800 1 AMST} + {2938993200 -14400 0 AMT} + {2960164800 -10800 1 AMST} + {2970442800 -14400 0 AMT} + {2991614400 -10800 1 AMST} + {3001892400 -14400 0 AMT} + {3023064000 -10800 1 AMST} + {3033946800 -14400 0 AMT} + {3054513600 -10800 1 AMST} + {3065396400 -14400 0 AMT} + {3085963200 -10800 1 AMST} + {3096846000 -14400 0 AMT} + {3118017600 -10800 1 AMST} + {3128295600 -14400 0 AMT} + {3149467200 -10800 1 AMST} + {3159745200 -14400 0 AMT} + {3180916800 -10800 1 AMST} + {3191194800 -14400 0 AMT} + {3212366400 -10800 1 AMST} + {3223249200 -14400 0 AMT} + {3243816000 -10800 1 AMST} + {3254698800 -14400 0 AMT} + {3275265600 -10800 1 AMST} + {3286148400 -14400 0 AMT} + {3307320000 -10800 1 AMST} + {3317598000 -14400 0 AMT} + {3338769600 -10800 1 AMST} + {3349047600 -14400 0 AMT} + {3370219200 -10800 1 AMST} + {3381102000 -14400 0 AMT} + {3401668800 -10800 1 AMST} + {3412551600 -14400 0 AMT} + {3433118400 -10800 1 AMST} + {3444001200 -14400 0 AMT} + {3464568000 -10800 1 AMST} + {3475450800 -14400 0 AMT} + {3496622400 -10800 1 AMST} + {3506900400 -14400 0 AMT} + {3528072000 -10800 1 AMST} + {3538350000 -14400 0 AMT} + {3559521600 -10800 1 AMST} + {3570404400 -14400 0 AMT} + {3590971200 -10800 1 AMST} + {3601854000 -14400 0 AMT} + {3622420800 -10800 1 AMST} + {3633303600 -14400 0 AMT} + {3654475200 -10800 1 AMST} + {3664753200 -14400 0 AMT} + {3685924800 -10800 1 AMST} + {3696202800 -14400 0 AMT} + {3717374400 -10800 1 AMST} + {3727652400 -14400 0 AMT} + {3748824000 -10800 1 AMST} + {3759706800 -14400 0 AMT} + {3780273600 -10800 1 AMST} + {3791156400 -14400 0 AMT} + {3811723200 -10800 1 AMST} + {3822606000 -14400 0 AMT} + {3843777600 -10800 1 AMST} + {3854055600 -14400 0 AMT} + {3875227200 -10800 1 AMST} + {3885505200 -14400 0 AMT} + {3906676800 -10800 1 AMST} + {3917559600 -14400 0 AMT} + {3938126400 -10800 1 AMST} + {3949009200 -14400 0 AMT} + {3969576000 -10800 1 AMST} + {3980458800 -14400 0 AMT} + {4001630400 -10800 1 AMST} + {4011908400 -14400 0 AMT} + {4033080000 -10800 1 AMST} + {4043358000 -14400 0 AMT} + {4064529600 -10800 1 AMST} + {4074807600 -14400 0 AMT} + {4095979200 -10800 1 AMST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Cancun b/inkstitch/bin/tcl/tzdata/America/Cancun new file mode 100644 index 0000000..1620b15 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cancun @@ -0,0 +1,216 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cancun) { + {-9223372036854775808 -20824 0 LMT} + {-1514743200 -21600 0 CST} + {377935200 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {902041200 -18000 0 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Caracas b/inkstitch/bin/tcl/tzdata/America/Caracas new file mode 100644 index 0000000..2ba87ae --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Caracas @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Caracas) { + {-9223372036854775808 -16064 0 LMT} + {-2524505536 -16060 0 CMT} + {-1826739140 -16200 0 VET} + {-157750200 -14400 0 VET} + {1197183600 -16200 0 VET} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Catamarca b/inkstitch/bin/tcl/tzdata/America/Catamarca new file mode 100644 index 0000000..01c8ab6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Catamarca @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Catamarca)]} { + LoadTimeZoneFile America/Argentina/Catamarca +} +set TZData(:America/Catamarca) $TZData(:America/Argentina/Catamarca) diff --git a/inkstitch/bin/tcl/tzdata/America/Cayenne b/inkstitch/bin/tcl/tzdata/America/Cayenne new file mode 100644 index 0000000..de3d65b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cayenne @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cayenne) { + {-9223372036854775808 -12560 0 LMT} + {-1846269040 -14400 0 GFT} + {-71092800 -10800 0 GFT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Cayman b/inkstitch/bin/tcl/tzdata/America/Cayman new file mode 100644 index 0000000..ab5d12b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cayman @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cayman) { + {-9223372036854775808 -19532 0 LMT} + {-2524502068 -18432 0 KMT} + {-1827687168 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Chicago b/inkstitch/bin/tcl/tzdata/America/Chicago new file mode 100644 index 0000000..545aedb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Chicago @@ -0,0 +1,369 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Chicago) { + {-9223372036854775808 -21036 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1577901600 -21600 0 CST} + {-1563724800 -18000 1 CDT} + {-1551632400 -21600 0 CST} + {-1538928000 -18000 1 CDT} + {-1520182800 -21600 0 CST} + {-1504454400 -18000 1 CDT} + {-1491757200 -21600 0 CST} + {-1473004800 -18000 1 CDT} + {-1459702800 -21600 0 CST} + {-1441555200 -18000 1 CDT} + {-1428253200 -21600 0 CST} + {-1410105600 -18000 1 CDT} + {-1396803600 -21600 0 CST} + {-1378656000 -18000 1 CDT} + {-1365354000 -21600 0 CST} + {-1347206400 -18000 1 CDT} + {-1333904400 -21600 0 CST} + {-1315152000 -18000 1 CDT} + {-1301850000 -21600 0 CST} + {-1283702400 -18000 1 CDT} + {-1270400400 -21600 0 CST} + {-1252252800 -18000 1 CDT} + {-1238950800 -21600 0 CST} + {-1220803200 -18000 1 CDT} + {-1207501200 -21600 0 CST} + {-1189353600 -18000 1 CDT} + {-1176051600 -21600 0 CST} + {-1157299200 -18000 1 CDT} + {-1144602000 -21600 0 CST} + {-1125849600 -18000 1 CDT} + {-1112547600 -21600 0 CST} + {-1094400000 -18000 1 CDT} + {-1081098000 -21600 0 CST} + {-1067788800 -18000 0 EST} + {-1045414800 -21600 0 CST} + {-1031500800 -18000 1 CDT} + {-1018198800 -21600 0 CST} + {-1000051200 -18000 1 CDT} + {-986749200 -21600 0 CST} + {-967996800 -18000 1 CDT} + {-955299600 -21600 0 CST} + {-936547200 -18000 1 CDT} + {-923245200 -21600 0 CST} + {-905097600 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-384368400 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-352918800 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 1 CDT} + {-163616400 -21600 0 CST} + {-147888000 -18000 1 CDT} + {-131562000 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100112400 -21600 0 CST} + {-94672800 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Chihuahua b/inkstitch/bin/tcl/tzdata/America/Chihuahua new file mode 100644 index 0000000..5444930 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Chihuahua @@ -0,0 +1,221 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Chihuahua) { + {-9223372036854775808 -25460 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {820476000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {883634400 -21600 0 CST} + {891766800 -21600 0 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -21600 1 MDT} + {1288512000 -25200 0 MST} + {1301821200 -21600 1 MDT} + {1319961600 -25200 0 MST} + {1333270800 -21600 1 MDT} + {1351411200 -25200 0 MST} + {1365325200 -21600 1 MDT} + {1382860800 -25200 0 MST} + {1396774800 -21600 1 MDT} + {1414310400 -25200 0 MST} + {1428224400 -21600 1 MDT} + {1445760000 -25200 0 MST} + {1459674000 -21600 1 MDT} + {1477814400 -25200 0 MST} + {1491123600 -21600 1 MDT} + {1509264000 -25200 0 MST} + {1522573200 -21600 1 MDT} + {1540713600 -25200 0 MST} + {1554627600 -21600 1 MDT} + {1572163200 -25200 0 MST} + {1586077200 -21600 1 MDT} + {1603612800 -25200 0 MST} + {1617526800 -21600 1 MDT} + {1635667200 -25200 0 MST} + {1648976400 -21600 1 MDT} + {1667116800 -25200 0 MST} + {1680426000 -21600 1 MDT} + {1698566400 -25200 0 MST} + {1712480400 -21600 1 MDT} + {1730016000 -25200 0 MST} + {1743930000 -21600 1 MDT} + {1761465600 -25200 0 MST} + {1775379600 -21600 1 MDT} + {1792915200 -25200 0 MST} + {1806829200 -21600 1 MDT} + {1824969600 -25200 0 MST} + {1838278800 -21600 1 MDT} + {1856419200 -25200 0 MST} + {1869728400 -21600 1 MDT} + {1887868800 -25200 0 MST} + {1901782800 -21600 1 MDT} + {1919318400 -25200 0 MST} + {1933232400 -21600 1 MDT} + {1950768000 -25200 0 MST} + {1964682000 -21600 1 MDT} + {1982822400 -25200 0 MST} + {1996131600 -21600 1 MDT} + {2014272000 -25200 0 MST} + {2027581200 -21600 1 MDT} + {2045721600 -25200 0 MST} + {2059030800 -21600 1 MDT} + {2077171200 -25200 0 MST} + {2091085200 -21600 1 MDT} + {2108620800 -25200 0 MST} + {2122534800 -21600 1 MDT} + {2140070400 -25200 0 MST} + {2153984400 -21600 1 MDT} + {2172124800 -25200 0 MST} + {2185434000 -21600 1 MDT} + {2203574400 -25200 0 MST} + {2216883600 -21600 1 MDT} + {2235024000 -25200 0 MST} + {2248938000 -21600 1 MDT} + {2266473600 -25200 0 MST} + {2280387600 -21600 1 MDT} + {2297923200 -25200 0 MST} + {2311837200 -21600 1 MDT} + {2329372800 -25200 0 MST} + {2343286800 -21600 1 MDT} + {2361427200 -25200 0 MST} + {2374736400 -21600 1 MDT} + {2392876800 -25200 0 MST} + {2406186000 -21600 1 MDT} + {2424326400 -25200 0 MST} + {2438240400 -21600 1 MDT} + {2455776000 -25200 0 MST} + {2469690000 -21600 1 MDT} + {2487225600 -25200 0 MST} + {2501139600 -21600 1 MDT} + {2519280000 -25200 0 MST} + {2532589200 -21600 1 MDT} + {2550729600 -25200 0 MST} + {2564038800 -21600 1 MDT} + {2582179200 -25200 0 MST} + {2596093200 -21600 1 MDT} + {2613628800 -25200 0 MST} + {2627542800 -21600 1 MDT} + {2645078400 -25200 0 MST} + {2658992400 -21600 1 MDT} + {2676528000 -25200 0 MST} + {2690442000 -21600 1 MDT} + {2708582400 -25200 0 MST} + {2721891600 -21600 1 MDT} + {2740032000 -25200 0 MST} + {2753341200 -21600 1 MDT} + {2771481600 -25200 0 MST} + {2785395600 -21600 1 MDT} + {2802931200 -25200 0 MST} + {2816845200 -21600 1 MDT} + {2834380800 -25200 0 MST} + {2848294800 -21600 1 MDT} + {2866435200 -25200 0 MST} + {2879744400 -21600 1 MDT} + {2897884800 -25200 0 MST} + {2911194000 -21600 1 MDT} + {2929334400 -25200 0 MST} + {2942643600 -21600 1 MDT} + {2960784000 -25200 0 MST} + {2974698000 -21600 1 MDT} + {2992233600 -25200 0 MST} + {3006147600 -21600 1 MDT} + {3023683200 -25200 0 MST} + {3037597200 -21600 1 MDT} + {3055737600 -25200 0 MST} + {3069046800 -21600 1 MDT} + {3087187200 -25200 0 MST} + {3100496400 -21600 1 MDT} + {3118636800 -25200 0 MST} + {3132550800 -21600 1 MDT} + {3150086400 -25200 0 MST} + {3164000400 -21600 1 MDT} + {3181536000 -25200 0 MST} + {3195450000 -21600 1 MDT} + {3212985600 -25200 0 MST} + {3226899600 -21600 1 MDT} + {3245040000 -25200 0 MST} + {3258349200 -21600 1 MDT} + {3276489600 -25200 0 MST} + {3289798800 -21600 1 MDT} + {3307939200 -25200 0 MST} + {3321853200 -21600 1 MDT} + {3339388800 -25200 0 MST} + {3353302800 -21600 1 MDT} + {3370838400 -25200 0 MST} + {3384752400 -21600 1 MDT} + {3402892800 -25200 0 MST} + {3416202000 -21600 1 MDT} + {3434342400 -25200 0 MST} + {3447651600 -21600 1 MDT} + {3465792000 -25200 0 MST} + {3479706000 -21600 1 MDT} + {3497241600 -25200 0 MST} + {3511155600 -21600 1 MDT} + {3528691200 -25200 0 MST} + {3542605200 -21600 1 MDT} + {3560140800 -25200 0 MST} + {3574054800 -21600 1 MDT} + {3592195200 -25200 0 MST} + {3605504400 -21600 1 MDT} + {3623644800 -25200 0 MST} + {3636954000 -21600 1 MDT} + {3655094400 -25200 0 MST} + {3669008400 -21600 1 MDT} + {3686544000 -25200 0 MST} + {3700458000 -21600 1 MDT} + {3717993600 -25200 0 MST} + {3731907600 -21600 1 MDT} + {3750048000 -25200 0 MST} + {3763357200 -21600 1 MDT} + {3781497600 -25200 0 MST} + {3794806800 -21600 1 MDT} + {3812947200 -25200 0 MST} + {3826256400 -21600 1 MDT} + {3844396800 -25200 0 MST} + {3858310800 -21600 1 MDT} + {3875846400 -25200 0 MST} + {3889760400 -21600 1 MDT} + {3907296000 -25200 0 MST} + {3921210000 -21600 1 MDT} + {3939350400 -25200 0 MST} + {3952659600 -21600 1 MDT} + {3970800000 -25200 0 MST} + {3984109200 -21600 1 MDT} + {4002249600 -25200 0 MST} + {4016163600 -21600 1 MDT} + {4033699200 -25200 0 MST} + {4047613200 -21600 1 MDT} + {4065148800 -25200 0 MST} + {4079062800 -21600 1 MDT} + {4096598400 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Coral_Harbour b/inkstitch/bin/tcl/tzdata/America/Coral_Harbour new file mode 100644 index 0000000..a27dc03 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Coral_Harbour @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Atikokan)]} { + LoadTimeZoneFile America/Atikokan +} +set TZData(:America/Coral_Harbour) $TZData(:America/Atikokan) diff --git a/inkstitch/bin/tcl/tzdata/America/Cordoba b/inkstitch/bin/tcl/tzdata/America/Cordoba new file mode 100644 index 0000000..c881558 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cordoba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Cordoba)]} { + LoadTimeZoneFile America/Argentina/Cordoba +} +set TZData(:America/Cordoba) $TZData(:America/Argentina/Cordoba) diff --git a/inkstitch/bin/tcl/tzdata/America/Costa_Rica b/inkstitch/bin/tcl/tzdata/America/Costa_Rica new file mode 100644 index 0000000..8fc9343 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Costa_Rica @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Costa_Rica) { + {-9223372036854775808 -20173 0 LMT} + {-2524501427 -20173 0 SJMT} + {-1545071027 -21600 0 CST} + {288770400 -18000 1 CDT} + {297234000 -21600 0 CST} + {320220000 -18000 1 CDT} + {328683600 -21600 0 CST} + {664264800 -18000 1 CDT} + {678344400 -21600 0 CST} + {695714400 -18000 1 CDT} + {700635600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Creston b/inkstitch/bin/tcl/tzdata/America/Creston new file mode 100644 index 0000000..30369a9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Creston @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Creston) { + {-9223372036854775808 -27964 0 LMT} + {-2713882436 -25200 0 MST} + {-1680454800 -28800 0 PST} + {-1627833600 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Cuiaba b/inkstitch/bin/tcl/tzdata/America/Cuiaba new file mode 100644 index 0000000..0301862 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Cuiaba @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cuiaba) { + {-9223372036854775808 -13460 0 LMT} + {-1767212140 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {592977600 -10800 1 AMST} + {602046000 -14400 0 AMT} + {624427200 -10800 1 AMST} + {634705200 -14400 0 AMT} + {656481600 -10800 1 AMST} + {666759600 -14400 0 AMT} + {687931200 -10800 1 AMST} + {697604400 -14400 0 AMT} + {719985600 -10800 1 AMST} + {728449200 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {782280000 -10800 1 AMST} + {793162800 -14400 0 AMT} + {813729600 -10800 1 AMST} + {824007600 -14400 0 AMT} + {844574400 -10800 1 AMST} + {856062000 -14400 0 AMT} + {876110400 -10800 1 AMST} + {888721200 -14400 0 AMT} + {908078400 -10800 1 AMST} + {919566000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {982465200 -14400 0 AMT} + {1003032000 -10800 1 AMST} + {1013914800 -14400 0 AMT} + {1036296000 -10800 1 AMST} + {1045364400 -14400 0 AMT} + {1064372400 -14400 0 AMT} + {1096603200 -14400 0 AMT} + {1099368000 -10800 1 AMST} + {1108868400 -14400 0 AMT} + {1129435200 -10800 1 AMST} + {1140318000 -14400 0 AMT} + {1162699200 -10800 1 AMST} + {1172372400 -14400 0 AMT} + {1192334400 -10800 1 AMST} + {1203217200 -14400 0 AMT} + {1224388800 -10800 1 AMST} + {1234666800 -14400 0 AMT} + {1255838400 -10800 1 AMST} + {1266721200 -14400 0 AMT} + {1287288000 -10800 1 AMST} + {1298170800 -14400 0 AMT} + {1318737600 -10800 1 AMST} + {1330225200 -14400 0 AMT} + {1350792000 -10800 1 AMST} + {1361070000 -14400 0 AMT} + {1382241600 -10800 1 AMST} + {1392519600 -14400 0 AMT} + {1413691200 -10800 1 AMST} + {1424574000 -14400 0 AMT} + {1445140800 -10800 1 AMST} + {1456023600 -14400 0 AMT} + {1476590400 -10800 1 AMST} + {1487473200 -14400 0 AMT} + {1508040000 -10800 1 AMST} + {1518922800 -14400 0 AMT} + {1540094400 -10800 1 AMST} + {1550372400 -14400 0 AMT} + {1571544000 -10800 1 AMST} + {1581822000 -14400 0 AMT} + {1602993600 -10800 1 AMST} + {1613876400 -14400 0 AMT} + {1634443200 -10800 1 AMST} + {1645326000 -14400 0 AMT} + {1665892800 -10800 1 AMST} + {1677380400 -14400 0 AMT} + {1697342400 -10800 1 AMST} + {1708225200 -14400 0 AMT} + {1729396800 -10800 1 AMST} + {1739674800 -14400 0 AMT} + {1760846400 -10800 1 AMST} + {1771729200 -14400 0 AMT} + {1792296000 -10800 1 AMST} + {1803178800 -14400 0 AMT} + {1823745600 -10800 1 AMST} + {1834628400 -14400 0 AMT} + {1855195200 -10800 1 AMST} + {1866078000 -14400 0 AMT} + {1887249600 -10800 1 AMST} + {1897527600 -14400 0 AMT} + {1918699200 -10800 1 AMST} + {1928977200 -14400 0 AMT} + {1950148800 -10800 1 AMST} + {1960426800 -14400 0 AMT} + {1981598400 -10800 1 AMST} + {1992481200 -14400 0 AMT} + {2013048000 -10800 1 AMST} + {2024535600 -14400 0 AMT} + {2044497600 -10800 1 AMST} + {2055380400 -14400 0 AMT} + {2076552000 -10800 1 AMST} + {2086830000 -14400 0 AMT} + {2108001600 -10800 1 AMST} + {2118884400 -14400 0 AMT} + {2139451200 -10800 1 AMST} + {2150334000 -14400 0 AMT} + {2170900800 -10800 1 AMST} + {2181783600 -14400 0 AMT} + {2202350400 -10800 1 AMST} + {2213233200 -14400 0 AMT} + {2234404800 -10800 1 AMST} + {2244682800 -14400 0 AMT} + {2265854400 -10800 1 AMST} + {2276132400 -14400 0 AMT} + {2297304000 -10800 1 AMST} + {2307582000 -14400 0 AMT} + {2328753600 -10800 1 AMST} + {2339636400 -14400 0 AMT} + {2360203200 -10800 1 AMST} + {2371086000 -14400 0 AMT} + {2391652800 -10800 1 AMST} + {2402535600 -14400 0 AMT} + {2423707200 -10800 1 AMST} + {2433985200 -14400 0 AMT} + {2455156800 -10800 1 AMST} + {2465434800 -14400 0 AMT} + {2486606400 -10800 1 AMST} + {2497489200 -14400 0 AMT} + {2518056000 -10800 1 AMST} + {2528938800 -14400 0 AMT} + {2549505600 -10800 1 AMST} + {2560388400 -14400 0 AMT} + {2580955200 -10800 1 AMST} + {2591838000 -14400 0 AMT} + {2613009600 -10800 1 AMST} + {2623287600 -14400 0 AMT} + {2644459200 -10800 1 AMST} + {2654737200 -14400 0 AMT} + {2675908800 -10800 1 AMST} + {2686791600 -14400 0 AMT} + {2707358400 -10800 1 AMST} + {2718241200 -14400 0 AMT} + {2738808000 -10800 1 AMST} + {2749690800 -14400 0 AMT} + {2770862400 -10800 1 AMST} + {2781140400 -14400 0 AMT} + {2802312000 -10800 1 AMST} + {2812590000 -14400 0 AMT} + {2833761600 -10800 1 AMST} + {2844039600 -14400 0 AMT} + {2865211200 -10800 1 AMST} + {2876094000 -14400 0 AMT} + {2896660800 -10800 1 AMST} + {2907543600 -14400 0 AMT} + {2928110400 -10800 1 AMST} + {2938993200 -14400 0 AMT} + {2960164800 -10800 1 AMST} + {2970442800 -14400 0 AMT} + {2991614400 -10800 1 AMST} + {3001892400 -14400 0 AMT} + {3023064000 -10800 1 AMST} + {3033946800 -14400 0 AMT} + {3054513600 -10800 1 AMST} + {3065396400 -14400 0 AMT} + {3085963200 -10800 1 AMST} + {3096846000 -14400 0 AMT} + {3118017600 -10800 1 AMST} + {3128295600 -14400 0 AMT} + {3149467200 -10800 1 AMST} + {3159745200 -14400 0 AMT} + {3180916800 -10800 1 AMST} + {3191194800 -14400 0 AMT} + {3212366400 -10800 1 AMST} + {3223249200 -14400 0 AMT} + {3243816000 -10800 1 AMST} + {3254698800 -14400 0 AMT} + {3275265600 -10800 1 AMST} + {3286148400 -14400 0 AMT} + {3307320000 -10800 1 AMST} + {3317598000 -14400 0 AMT} + {3338769600 -10800 1 AMST} + {3349047600 -14400 0 AMT} + {3370219200 -10800 1 AMST} + {3381102000 -14400 0 AMT} + {3401668800 -10800 1 AMST} + {3412551600 -14400 0 AMT} + {3433118400 -10800 1 AMST} + {3444001200 -14400 0 AMT} + {3464568000 -10800 1 AMST} + {3475450800 -14400 0 AMT} + {3496622400 -10800 1 AMST} + {3506900400 -14400 0 AMT} + {3528072000 -10800 1 AMST} + {3538350000 -14400 0 AMT} + {3559521600 -10800 1 AMST} + {3570404400 -14400 0 AMT} + {3590971200 -10800 1 AMST} + {3601854000 -14400 0 AMT} + {3622420800 -10800 1 AMST} + {3633303600 -14400 0 AMT} + {3654475200 -10800 1 AMST} + {3664753200 -14400 0 AMT} + {3685924800 -10800 1 AMST} + {3696202800 -14400 0 AMT} + {3717374400 -10800 1 AMST} + {3727652400 -14400 0 AMT} + {3748824000 -10800 1 AMST} + {3759706800 -14400 0 AMT} + {3780273600 -10800 1 AMST} + {3791156400 -14400 0 AMT} + {3811723200 -10800 1 AMST} + {3822606000 -14400 0 AMT} + {3843777600 -10800 1 AMST} + {3854055600 -14400 0 AMT} + {3875227200 -10800 1 AMST} + {3885505200 -14400 0 AMT} + {3906676800 -10800 1 AMST} + {3917559600 -14400 0 AMT} + {3938126400 -10800 1 AMST} + {3949009200 -14400 0 AMT} + {3969576000 -10800 1 AMST} + {3980458800 -14400 0 AMT} + {4001630400 -10800 1 AMST} + {4011908400 -14400 0 AMT} + {4033080000 -10800 1 AMST} + {4043358000 -14400 0 AMT} + {4064529600 -10800 1 AMST} + {4074807600 -14400 0 AMT} + {4095979200 -10800 1 AMST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Curacao b/inkstitch/bin/tcl/tzdata/America/Curacao new file mode 100644 index 0000000..5189e9c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Curacao @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Curacao) { + {-9223372036854775808 -16547 0 LMT} + {-1826738653 -16200 0 ANT} + {-157750200 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Danmarkshavn b/inkstitch/bin/tcl/tzdata/America/Danmarkshavn new file mode 100644 index 0000000..8d66d3a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Danmarkshavn @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Danmarkshavn) { + {-9223372036854775808 -4480 0 LMT} + {-1686091520 -10800 0 WGT} + {323845200 -7200 0 WGST} + {338950800 -10800 0 WGT} + {354675600 -7200 1 WGST} + {370400400 -10800 0 WGT} + {386125200 -7200 1 WGST} + {401850000 -10800 0 WGT} + {417574800 -7200 1 WGST} + {433299600 -10800 0 WGT} + {449024400 -7200 1 WGST} + {465354000 -10800 0 WGT} + {481078800 -7200 1 WGST} + {496803600 -10800 0 WGT} + {512528400 -7200 1 WGST} + {528253200 -10800 0 WGT} + {543978000 -7200 1 WGST} + {559702800 -10800 0 WGT} + {575427600 -7200 1 WGST} + {591152400 -10800 0 WGT} + {606877200 -7200 1 WGST} + {622602000 -10800 0 WGT} + {638326800 -7200 1 WGST} + {654656400 -10800 0 WGT} + {670381200 -7200 1 WGST} + {686106000 -10800 0 WGT} + {701830800 -7200 1 WGST} + {717555600 -10800 0 WGT} + {733280400 -7200 1 WGST} + {749005200 -10800 0 WGT} + {764730000 -7200 1 WGST} + {780454800 -10800 0 WGT} + {796179600 -7200 1 WGST} + {811904400 -10800 0 WGT} + {820465200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Dawson b/inkstitch/bin/tcl/tzdata/America/Dawson new file mode 100644 index 0000000..8d2b641 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Dawson @@ -0,0 +1,256 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Dawson) { + {-9223372036854775808 -33460 0 LMT} + {-2188996940 -32400 0 YST} + {-1632056400 -28800 1 YDT} + {-1615125600 -32400 0 YST} + {-1596978000 -28800 1 YDT} + {-1583164800 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-147884400 -25200 1 YDDT} + {-131554800 -32400 0 YST} + {315561600 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Dawson_Creek b/inkstitch/bin/tcl/tzdata/America/Dawson_Creek new file mode 100644 index 0000000..a0b5c44 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Dawson_Creek @@ -0,0 +1,64 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Dawson_Creek) { + {-9223372036854775808 -28856 0 LMT} + {-2713881544 -28800 0 PST} + {-1632060000 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-725817600 -28800 0 PST} + {-715788000 -25200 1 PDT} + {-702486000 -28800 0 PST} + {-684338400 -25200 1 PDT} + {-671036400 -28800 0 PST} + {-652888800 -25200 1 PDT} + {-639586800 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {84016800 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Denver b/inkstitch/bin/tcl/tzdata/America/Denver new file mode 100644 index 0000000..06bc80d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Denver @@ -0,0 +1,291 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Denver) { + {-9223372036854775808 -25196 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-1577898000 -25200 0 MST} + {-1570374000 -21600 1 MDT} + {-1551628800 -25200 0 MST} + {-1538924400 -21600 1 MDT} + {-1534089600 -25200 0 MST} + {-883587600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-757357200 -25200 0 MST} + {-147884400 -21600 1 MDT} + {-131558400 -25200 0 MST} + {-116434800 -21600 1 MDT} + {-100108800 -25200 0 MST} + {-94669200 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Detroit b/inkstitch/bin/tcl/tzdata/America/Detroit new file mode 100644 index 0000000..696a663 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Detroit @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Detroit) { + {-9223372036854775808 -19931 0 LMT} + {-2051202469 -21600 0 CST} + {-1724083200 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-684349200 -14400 1 EDT} + {-671047200 -18000 0 EST} + {-80499600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {94712400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {157784400 -18000 0 EST} + {167814000 -14400 0 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Dominica b/inkstitch/bin/tcl/tzdata/America/Dominica new file mode 100644 index 0000000..3503a65 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Dominica @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Dominica) { + {-9223372036854775808 -14736 0 LMT} + {-1846266804 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Edmonton b/inkstitch/bin/tcl/tzdata/America/Edmonton new file mode 100644 index 0000000..1ed38be --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Edmonton @@ -0,0 +1,284 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Edmonton) { + {-9223372036854775808 -27232 0 LMT} + {-1998663968 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1600614000 -21600 1 MDT} + {-1596816000 -25200 0 MST} + {-1567954800 -21600 1 MDT} + {-1551628800 -25200 0 MST} + {-1536505200 -21600 1 MDT} + {-1523203200 -25200 0 MST} + {-1504450800 -21600 1 MDT} + {-1491753600 -25200 0 MST} + {-1473001200 -21600 1 MDT} + {-1459699200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {136371600 -21600 1 MDT} + {152092800 -25200 0 MST} + {167821200 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {536482800 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Eirunepe b/inkstitch/bin/tcl/tzdata/America/Eirunepe new file mode 100644 index 0000000..86dcd8f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Eirunepe @@ -0,0 +1,40 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Eirunepe) { + {-9223372036854775808 -16768 0 LMT} + {-1767208832 -18000 0 ACT} + {-1206950400 -14400 1 ACST} + {-1191355200 -18000 0 ACT} + {-1175367600 -14400 1 ACST} + {-1159819200 -18000 0 ACT} + {-633812400 -14400 1 ACST} + {-622062000 -18000 0 ACT} + {-602276400 -14400 1 ACST} + {-591825600 -18000 0 ACT} + {-570740400 -14400 1 ACST} + {-560203200 -18000 0 ACT} + {-539118000 -14400 1 ACST} + {-531345600 -18000 0 ACT} + {-191358000 -14400 1 ACST} + {-184190400 -18000 0 ACT} + {-155156400 -14400 1 ACST} + {-150062400 -18000 0 ACT} + {-128890800 -14400 1 ACST} + {-121118400 -18000 0 ACT} + {-99946800 -14400 1 ACST} + {-89582400 -18000 0 ACT} + {-68410800 -14400 1 ACST} + {-57960000 -18000 0 ACT} + {499755600 -14400 1 ACST} + {511243200 -18000 0 ACT} + {530600400 -14400 1 ACST} + {540273600 -18000 0 ACT} + {562136400 -14400 1 ACST} + {571204800 -18000 0 ACT} + {590040000 -18000 0 ACT} + {749192400 -18000 0 ACT} + {750834000 -14400 1 ACST} + {761716800 -18000 0 ACT} + {780206400 -18000 0 ACT} + {1214283600 -14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/El_Salvador b/inkstitch/bin/tcl/tzdata/America/El_Salvador new file mode 100644 index 0000000..75d8129 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/El_Salvador @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/El_Salvador) { + {-9223372036854775808 -21408 0 LMT} + {-1546279392 -21600 0 CST} + {547020000 -18000 1 CDT} + {559717200 -21600 0 CST} + {578469600 -18000 1 CDT} + {591166800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Ensenada b/inkstitch/bin/tcl/tzdata/America/Ensenada new file mode 100644 index 0000000..f600305 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Ensenada @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Tijuana)]} { + LoadTimeZoneFile America/Tijuana +} +set TZData(:America/Ensenada) $TZData(:America/Tijuana) diff --git a/inkstitch/bin/tcl/tzdata/America/Fort_Wayne b/inkstitch/bin/tcl/tzdata/America/Fort_Wayne new file mode 100644 index 0000000..9514d57 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Fort_Wayne @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:America/Fort_Wayne) $TZData(:America/Indiana/Indianapolis) diff --git a/inkstitch/bin/tcl/tzdata/America/Fortaleza b/inkstitch/bin/tcl/tzdata/America/Fortaleza new file mode 100644 index 0000000..581faa5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Fortaleza @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Fortaleza) { + {-9223372036854775808 -9240 0 LMT} + {-1767216360 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {972180000 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Glace_Bay b/inkstitch/bin/tcl/tzdata/America/Glace_Bay new file mode 100644 index 0000000..8ee9eec --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Glace_Bay @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Glace_Bay) { + {-9223372036854775808 -14388 0 LMT} + {-2131646412 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-536443200 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-504907200 -14400 0 AST} + {63086400 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {126244800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Godthab b/inkstitch/bin/tcl/tzdata/America/Godthab new file mode 100644 index 0000000..3c003cc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Godthab @@ -0,0 +1,246 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Godthab) { + {-9223372036854775808 -12416 0 LMT} + {-1686083584 -10800 0 WGT} + {323845200 -7200 0 WGST} + {338950800 -10800 0 WGT} + {354675600 -7200 1 WGST} + {370400400 -10800 0 WGT} + {386125200 -7200 1 WGST} + {401850000 -10800 0 WGT} + {417574800 -7200 1 WGST} + {433299600 -10800 0 WGT} + {449024400 -7200 1 WGST} + {465354000 -10800 0 WGT} + {481078800 -7200 1 WGST} + {496803600 -10800 0 WGT} + {512528400 -7200 1 WGST} + {528253200 -10800 0 WGT} + {543978000 -7200 1 WGST} + {559702800 -10800 0 WGT} + {575427600 -7200 1 WGST} + {591152400 -10800 0 WGT} + {606877200 -7200 1 WGST} + {622602000 -10800 0 WGT} + {638326800 -7200 1 WGST} + {654656400 -10800 0 WGT} + {670381200 -7200 1 WGST} + {686106000 -10800 0 WGT} + {701830800 -7200 1 WGST} + {717555600 -10800 0 WGT} + {733280400 -7200 1 WGST} + {749005200 -10800 0 WGT} + {764730000 -7200 1 WGST} + {780454800 -10800 0 WGT} + {796179600 -7200 1 WGST} + {811904400 -10800 0 WGT} + {828234000 -7200 1 WGST} + {846378000 -10800 0 WGT} + {859683600 -7200 1 WGST} + {877827600 -10800 0 WGT} + {891133200 -7200 1 WGST} + {909277200 -10800 0 WGT} + {922582800 -7200 1 WGST} + {941331600 -10800 0 WGT} + {954032400 -7200 1 WGST} + {972781200 -10800 0 WGT} + {985482000 -7200 1 WGST} + {1004230800 -10800 0 WGT} + {1017536400 -7200 1 WGST} + {1035680400 -10800 0 WGT} + {1048986000 -7200 1 WGST} + {1067130000 -10800 0 WGT} + {1080435600 -7200 1 WGST} + {1099184400 -10800 0 WGT} + {1111885200 -7200 1 WGST} + {1130634000 -10800 0 WGT} + {1143334800 -7200 1 WGST} + {1162083600 -10800 0 WGT} + {1174784400 -7200 1 WGST} + {1193533200 -10800 0 WGT} + {1206838800 -7200 1 WGST} + {1224982800 -10800 0 WGT} + {1238288400 -7200 1 WGST} + {1256432400 -10800 0 WGT} + {1269738000 -7200 1 WGST} + {1288486800 -10800 0 WGT} + {1301187600 -7200 1 WGST} + {1319936400 -10800 0 WGT} + {1332637200 -7200 1 WGST} + {1351386000 -10800 0 WGT} + {1364691600 -7200 1 WGST} + {1382835600 -10800 0 WGT} + {1396141200 -7200 1 WGST} + {1414285200 -10800 0 WGT} + {1427590800 -7200 1 WGST} + {1445734800 -10800 0 WGT} + {1459040400 -7200 1 WGST} + {1477789200 -10800 0 WGT} + {1490490000 -7200 1 WGST} + {1509238800 -10800 0 WGT} + {1521939600 -7200 1 WGST} + {1540688400 -10800 0 WGT} + {1553994000 -7200 1 WGST} + {1572138000 -10800 0 WGT} + {1585443600 -7200 1 WGST} + {1603587600 -10800 0 WGT} + {1616893200 -7200 1 WGST} + {1635642000 -10800 0 WGT} + {1648342800 -7200 1 WGST} + {1667091600 -10800 0 WGT} + {1679792400 -7200 1 WGST} + {1698541200 -10800 0 WGT} + {1711846800 -7200 1 WGST} + {1729990800 -10800 0 WGT} + {1743296400 -7200 1 WGST} + {1761440400 -10800 0 WGT} + {1774746000 -7200 1 WGST} + {1792890000 -10800 0 WGT} + {1806195600 -7200 1 WGST} + {1824944400 -10800 0 WGT} + {1837645200 -7200 1 WGST} + {1856394000 -10800 0 WGT} + {1869094800 -7200 1 WGST} + {1887843600 -10800 0 WGT} + {1901149200 -7200 1 WGST} + {1919293200 -10800 0 WGT} + {1932598800 -7200 1 WGST} + {1950742800 -10800 0 WGT} + {1964048400 -7200 1 WGST} + {1982797200 -10800 0 WGT} + {1995498000 -7200 1 WGST} + {2014246800 -10800 0 WGT} + {2026947600 -7200 1 WGST} + {2045696400 -10800 0 WGT} + {2058397200 -7200 1 WGST} + {2077146000 -10800 0 WGT} + {2090451600 -7200 1 WGST} + {2108595600 -10800 0 WGT} + {2121901200 -7200 1 WGST} + {2140045200 -10800 0 WGT} + {2153350800 -7200 1 WGST} + {2172099600 -10800 0 WGT} + {2184800400 -7200 1 WGST} + {2203549200 -10800 0 WGT} + {2216250000 -7200 1 WGST} + {2234998800 -10800 0 WGT} + {2248304400 -7200 1 WGST} + {2266448400 -10800 0 WGT} + {2279754000 -7200 1 WGST} + {2297898000 -10800 0 WGT} + {2311203600 -7200 1 WGST} + {2329347600 -10800 0 WGT} + {2342653200 -7200 1 WGST} + {2361402000 -10800 0 WGT} + {2374102800 -7200 1 WGST} + {2392851600 -10800 0 WGT} + {2405552400 -7200 1 WGST} + {2424301200 -10800 0 WGT} + {2437606800 -7200 1 WGST} + {2455750800 -10800 0 WGT} + {2469056400 -7200 1 WGST} + {2487200400 -10800 0 WGT} + {2500506000 -7200 1 WGST} + {2519254800 -10800 0 WGT} + {2531955600 -7200 1 WGST} + {2550704400 -10800 0 WGT} + {2563405200 -7200 1 WGST} + {2582154000 -10800 0 WGT} + {2595459600 -7200 1 WGST} + {2613603600 -10800 0 WGT} + {2626909200 -7200 1 WGST} + {2645053200 -10800 0 WGT} + {2658358800 -7200 1 WGST} + {2676502800 -10800 0 WGT} + {2689808400 -7200 1 WGST} + {2708557200 -10800 0 WGT} + {2721258000 -7200 1 WGST} + {2740006800 -10800 0 WGT} + {2752707600 -7200 1 WGST} + {2771456400 -10800 0 WGT} + {2784762000 -7200 1 WGST} + {2802906000 -10800 0 WGT} + {2816211600 -7200 1 WGST} + {2834355600 -10800 0 WGT} + {2847661200 -7200 1 WGST} + {2866410000 -10800 0 WGT} + {2879110800 -7200 1 WGST} + {2897859600 -10800 0 WGT} + {2910560400 -7200 1 WGST} + {2929309200 -10800 0 WGT} + {2942010000 -7200 1 WGST} + {2960758800 -10800 0 WGT} + {2974064400 -7200 1 WGST} + {2992208400 -10800 0 WGT} + {3005514000 -7200 1 WGST} + {3023658000 -10800 0 WGT} + {3036963600 -7200 1 WGST} + {3055712400 -10800 0 WGT} + {3068413200 -7200 1 WGST} + {3087162000 -10800 0 WGT} + {3099862800 -7200 1 WGST} + {3118611600 -10800 0 WGT} + {3131917200 -7200 1 WGST} + {3150061200 -10800 0 WGT} + {3163366800 -7200 1 WGST} + {3181510800 -10800 0 WGT} + {3194816400 -7200 1 WGST} + {3212960400 -10800 0 WGT} + {3226266000 -7200 1 WGST} + {3245014800 -10800 0 WGT} + {3257715600 -7200 1 WGST} + {3276464400 -10800 0 WGT} + {3289165200 -7200 1 WGST} + {3307914000 -10800 0 WGT} + {3321219600 -7200 1 WGST} + {3339363600 -10800 0 WGT} + {3352669200 -7200 1 WGST} + {3370813200 -10800 0 WGT} + {3384118800 -7200 1 WGST} + {3402867600 -10800 0 WGT} + {3415568400 -7200 1 WGST} + {3434317200 -10800 0 WGT} + {3447018000 -7200 1 WGST} + {3465766800 -10800 0 WGT} + {3479072400 -7200 1 WGST} + {3497216400 -10800 0 WGT} + {3510522000 -7200 1 WGST} + {3528666000 -10800 0 WGT} + {3541971600 -7200 1 WGST} + {3560115600 -10800 0 WGT} + {3573421200 -7200 1 WGST} + {3592170000 -10800 0 WGT} + {3604870800 -7200 1 WGST} + {3623619600 -10800 0 WGT} + {3636320400 -7200 1 WGST} + {3655069200 -10800 0 WGT} + {3668374800 -7200 1 WGST} + {3686518800 -10800 0 WGT} + {3699824400 -7200 1 WGST} + {3717968400 -10800 0 WGT} + {3731274000 -7200 1 WGST} + {3750022800 -10800 0 WGT} + {3762723600 -7200 1 WGST} + {3781472400 -10800 0 WGT} + {3794173200 -7200 1 WGST} + {3812922000 -10800 0 WGT} + {3825622800 -7200 1 WGST} + {3844371600 -10800 0 WGT} + {3857677200 -7200 1 WGST} + {3875821200 -10800 0 WGT} + {3889126800 -7200 1 WGST} + {3907270800 -10800 0 WGT} + {3920576400 -7200 1 WGST} + {3939325200 -10800 0 WGT} + {3952026000 -7200 1 WGST} + {3970774800 -10800 0 WGT} + {3983475600 -7200 1 WGST} + {4002224400 -10800 0 WGT} + {4015530000 -7200 1 WGST} + {4033674000 -10800 0 WGT} + {4046979600 -7200 1 WGST} + {4065123600 -10800 0 WGT} + {4078429200 -7200 1 WGST} + {4096573200 -10800 0 WGT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Goose_Bay b/inkstitch/bin/tcl/tzdata/America/Goose_Bay new file mode 100644 index 0000000..7b7b3d8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Goose_Bay @@ -0,0 +1,338 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Goose_Bay) { + {-9223372036854775808 -14500 0 LMT} + {-2713895900 -12652 0 NST} + {-1640982548 -12652 0 NST} + {-1632076148 -9052 1 NDT} + {-1615145348 -12652 0 NST} + {-1609446548 -12652 0 NST} + {-1096921748 -12600 0 NST} + {-1072989000 -12600 0 NST} + {-1061670600 -9000 1 NDT} + {-1048973400 -12600 0 NST} + {-1030221000 -9000 1 NDT} + {-1017523800 -12600 0 NST} + {-998771400 -9000 1 NDT} + {-986074200 -12600 0 NST} + {-966717000 -9000 1 NDT} + {-954624600 -12600 0 NST} + {-935267400 -9000 1 NDT} + {-922570200 -12600 0 NST} + {-903817800 -9000 1 NDT} + {-891120600 -12600 0 NST} + {-872368200 -9000 0 NWT} + {-769395600 -9000 1 NPT} + {-765401400 -12600 0 NST} + {-757369800 -12600 0 NST} + {-746044200 -9000 1 NDT} + {-733347000 -12600 0 NST} + {-714594600 -9000 1 NDT} + {-701897400 -12600 0 NST} + {-683145000 -9000 1 NDT} + {-670447800 -12600 0 NST} + {-651695400 -9000 1 NDT} + {-638998200 -12600 0 NST} + {-619641000 -9000 1 NDT} + {-606943800 -12600 0 NST} + {-589401000 -9000 1 NDT} + {-576099000 -12600 0 NST} + {-557951400 -9000 1 NDT} + {-544649400 -12600 0 NST} + {-526501800 -9000 1 NDT} + {-513199800 -12600 0 NST} + {-495052200 -9000 1 NDT} + {-481750200 -12600 0 NST} + {-463602600 -9000 1 NDT} + {-450300600 -12600 0 NST} + {-431548200 -9000 1 NDT} + {-418246200 -12600 0 NST} + {-400098600 -9000 1 NDT} + {-386796600 -12600 0 NST} + {-368649000 -9000 1 NDT} + {-355347000 -12600 0 NST} + {-337199400 -9000 1 NDT} + {-323897400 -12600 0 NST} + {-305749800 -9000 1 NDT} + {-289423800 -12600 0 NST} + {-273695400 -9000 1 NDT} + {-257974200 -12600 0 NST} + {-242245800 -9000 1 NDT} + {-226524600 -12600 0 NST} + {-210796200 -9000 1 NDT} + {-195075000 -12600 0 NST} + {-179346600 -9000 1 NDT} + {-163625400 -12600 0 NST} + {-147897000 -9000 1 NDT} + {-131571000 -12600 0 NST} + {-119903400 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544593660 -10800 1 ADT} + {562129260 -14400 0 AST} + {576043260 -7200 1 ADDT} + {594180060 -14400 0 AST} + {607492860 -10800 1 ADT} + {625633260 -14400 0 AST} + {638942460 -10800 1 ADT} + {657082860 -14400 0 AST} + {670996860 -10800 1 ADT} + {688532460 -14400 0 AST} + {702446460 -10800 1 ADT} + {719982060 -14400 0 AST} + {733896060 -10800 1 ADT} + {752036460 -14400 0 AST} + {765345660 -10800 1 ADT} + {783486060 -14400 0 AST} + {796795260 -10800 1 ADT} + {814935660 -14400 0 AST} + {828849660 -10800 1 ADT} + {846385260 -14400 0 AST} + {860299260 -10800 1 ADT} + {877834860 -14400 0 AST} + {891748860 -10800 1 ADT} + {909284460 -14400 0 AST} + {923198460 -10800 1 ADT} + {941338860 -14400 0 AST} + {954648060 -10800 1 ADT} + {972788460 -14400 0 AST} + {986097660 -10800 1 ADT} + {1004238060 -14400 0 AST} + {1018152060 -10800 1 ADT} + {1035687660 -14400 0 AST} + {1049601660 -10800 1 ADT} + {1067137260 -14400 0 AST} + {1081051260 -10800 1 ADT} + {1099191660 -14400 0 AST} + {1112500860 -10800 1 ADT} + {1130641260 -14400 0 AST} + {1143950460 -10800 1 ADT} + {1162090860 -14400 0 AST} + {1173585660 -10800 1 ADT} + {1194145260 -14400 0 AST} + {1205035260 -10800 1 ADT} + {1225594860 -14400 0 AST} + {1236484860 -10800 1 ADT} + {1257044460 -14400 0 AST} + {1268539260 -10800 1 ADT} + {1289098860 -14400 0 AST} + {1299988860 -10800 1 ADT} + {1320116400 -10800 0 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Grand_Turk b/inkstitch/bin/tcl/tzdata/America/Grand_Turk new file mode 100644 index 0000000..a455dd5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Grand_Turk @@ -0,0 +1,249 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Grand_Turk) { + {-9223372036854775808 -17072 0 LMT} + {-2524504528 -18432 0 KMT} + {-1827687168 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Grenada b/inkstitch/bin/tcl/tzdata/America/Grenada new file mode 100644 index 0000000..3c2919b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Grenada @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Grenada) { + {-9223372036854775808 -14820 0 LMT} + {-1846266780 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Guadeloupe b/inkstitch/bin/tcl/tzdata/America/Guadeloupe new file mode 100644 index 0000000..b1987ce --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Guadeloupe @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guadeloupe) { + {-9223372036854775808 -14768 0 LMT} + {-1848254032 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Guatemala b/inkstitch/bin/tcl/tzdata/America/Guatemala new file mode 100644 index 0000000..e4db5ac --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Guatemala @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guatemala) { + {-9223372036854775808 -21724 0 LMT} + {-1617040676 -21600 0 CST} + {123055200 -18000 1 CDT} + {130914000 -21600 0 CST} + {422344800 -18000 1 CDT} + {433054800 -21600 0 CST} + {669708000 -18000 1 CDT} + {684219600 -21600 0 CST} + {1146376800 -18000 1 CDT} + {1159678800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Guayaquil b/inkstitch/bin/tcl/tzdata/America/Guayaquil new file mode 100644 index 0000000..e940a5b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Guayaquil @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guayaquil) { + {-9223372036854775808 -19160 0 LMT} + {-2524502440 -18840 0 QMT} + {-1230749160 -18000 0 ECT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Guyana b/inkstitch/bin/tcl/tzdata/America/Guyana new file mode 100644 index 0000000..c58a989 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Guyana @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guyana) { + {-9223372036854775808 -13960 0 LMT} + {-1730578040 -13500 0 GBGT} + {-113688900 -13500 0 GYT} + {176010300 -10800 0 GYT} + {662698800 -14400 0 GYT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Halifax b/inkstitch/bin/tcl/tzdata/America/Halifax new file mode 100644 index 0000000..08e3754 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Halifax @@ -0,0 +1,361 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Halifax) { + {-9223372036854775808 -15264 0 LMT} + {-2131645536 -14400 0 AST} + {-1696276800 -10800 1 ADT} + {-1680469200 -14400 0 AST} + {-1640980800 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-1609444800 -14400 0 AST} + {-1566763200 -10800 1 ADT} + {-1557090000 -14400 0 AST} + {-1535486400 -10800 1 ADT} + {-1524949200 -14400 0 AST} + {-1504468800 -10800 1 ADT} + {-1493413200 -14400 0 AST} + {-1472414400 -10800 1 ADT} + {-1461963600 -14400 0 AST} + {-1440964800 -10800 1 ADT} + {-1429390800 -14400 0 AST} + {-1409515200 -10800 1 ADT} + {-1396731600 -14400 0 AST} + {-1376856000 -10800 1 ADT} + {-1366491600 -14400 0 AST} + {-1346616000 -10800 1 ADT} + {-1333832400 -14400 0 AST} + {-1313956800 -10800 1 ADT} + {-1303678800 -14400 0 AST} + {-1282507200 -10800 1 ADT} + {-1272661200 -14400 0 AST} + {-1251057600 -10800 1 ADT} + {-1240088400 -14400 0 AST} + {-1219608000 -10800 1 ADT} + {-1207429200 -14400 0 AST} + {-1188763200 -10800 1 ADT} + {-1175979600 -14400 0 AST} + {-1157313600 -10800 1 ADT} + {-1143925200 -14400 0 AST} + {-1124049600 -10800 1 ADT} + {-1113771600 -14400 0 AST} + {-1091390400 -10800 1 ADT} + {-1081026000 -14400 0 AST} + {-1059854400 -10800 1 ADT} + {-1050786000 -14400 0 AST} + {-1030910400 -10800 1 ADT} + {-1018126800 -14400 0 AST} + {-999460800 -10800 1 ADT} + {-986677200 -14400 0 AST} + {-965592000 -10800 1 ADT} + {-955227600 -14400 0 AST} + {-935956800 -10800 1 ADT} + {-923173200 -14400 0 AST} + {-904507200 -10800 1 ADT} + {-891723600 -14400 0 AST} + {-880221600 -10800 0 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} + {-747252000 -10800 1 ADT} + {-733950000 -14400 0 AST} + {-715802400 -10800 1 ADT} + {-702500400 -14400 0 AST} + {-684352800 -10800 1 ADT} + {-671050800 -14400 0 AST} + {-652903200 -10800 1 ADT} + {-639601200 -14400 0 AST} + {-589399200 -10800 1 ADT} + {-576097200 -14400 0 AST} + {-557949600 -10800 1 ADT} + {-544647600 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-495050400 -10800 1 ADT} + {-481748400 -14400 0 AST} + {-431546400 -10800 1 ADT} + {-418244400 -14400 0 AST} + {-400096800 -10800 1 ADT} + {-386794800 -14400 0 AST} + {-368647200 -10800 1 ADT} + {-355345200 -14400 0 AST} + {-337197600 -10800 1 ADT} + {-323895600 -14400 0 AST} + {-242244000 -10800 1 ADT} + {-226522800 -14400 0 AST} + {-210794400 -10800 1 ADT} + {-195073200 -14400 0 AST} + {-179344800 -10800 1 ADT} + {-163623600 -14400 0 AST} + {-147895200 -10800 1 ADT} + {-131569200 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {126244800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Havana b/inkstitch/bin/tcl/tzdata/America/Havana new file mode 100644 index 0000000..89cbc9a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Havana @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Havana) { + {-9223372036854775808 -19768 0 LMT} + {-2524501832 -19776 0 HMT} + {-1402813824 -18000 0 CST} + {-1311534000 -14400 1 CDT} + {-1300996800 -18000 0 CST} + {-933534000 -14400 1 CDT} + {-925675200 -18000 0 CST} + {-902084400 -14400 1 CDT} + {-893620800 -18000 0 CST} + {-870030000 -14400 1 CDT} + {-862171200 -18000 0 CST} + {-775681200 -14400 1 CDT} + {-767822400 -18000 0 CST} + {-744231600 -14400 1 CDT} + {-736372800 -18000 0 CST} + {-144702000 -14400 1 CDT} + {-134251200 -18000 0 CST} + {-113425200 -14400 1 CDT} + {-102542400 -18000 0 CST} + {-86295600 -14400 1 CDT} + {-72907200 -18000 0 CST} + {-54154800 -14400 1 CDT} + {-41457600 -18000 0 CST} + {-21495600 -14400 1 CDT} + {-5774400 -18000 0 CST} + {9954000 -14400 1 CDT} + {25675200 -18000 0 CST} + {41403600 -14400 1 CDT} + {57729600 -18000 0 CST} + {73458000 -14400 1 CDT} + {87364800 -18000 0 CST} + {104907600 -14400 1 CDT} + {118900800 -18000 0 CST} + {136357200 -14400 1 CDT} + {150436800 -18000 0 CST} + {167806800 -14400 1 CDT} + {183528000 -18000 0 CST} + {199256400 -14400 1 CDT} + {215582400 -18000 0 CST} + {230706000 -14400 1 CDT} + {247032000 -18000 0 CST} + {263365200 -14400 1 CDT} + {276667200 -18000 0 CST} + {290581200 -14400 1 CDT} + {308721600 -18000 0 CST} + {322030800 -14400 1 CDT} + {340171200 -18000 0 CST} + {358318800 -14400 1 CDT} + {371620800 -18000 0 CST} + {389768400 -14400 1 CDT} + {403070400 -18000 0 CST} + {421218000 -14400 1 CDT} + {434520000 -18000 0 CST} + {452667600 -14400 1 CDT} + {466574400 -18000 0 CST} + {484117200 -14400 1 CDT} + {498024000 -18000 0 CST} + {511333200 -14400 1 CDT} + {529473600 -18000 0 CST} + {542782800 -14400 1 CDT} + {560923200 -18000 0 CST} + {574837200 -14400 1 CDT} + {592372800 -18000 0 CST} + {606286800 -14400 1 CDT} + {623822400 -18000 0 CST} + {638946000 -14400 1 CDT} + {655876800 -18000 0 CST} + {671000400 -14400 1 CDT} + {687330000 -18000 0 CST} + {702450000 -14400 1 CDT} + {718779600 -18000 0 CST} + {733899600 -14400 1 CDT} + {750229200 -18000 0 CST} + {765349200 -14400 1 CDT} + {781678800 -18000 0 CST} + {796798800 -14400 1 CDT} + {813128400 -18000 0 CST} + {828853200 -14400 1 CDT} + {844578000 -18000 0 CST} + {860302800 -14400 1 CDT} + {876632400 -18000 0 CST} + {891147600 -14400 1 CDT} + {909291600 -18000 0 CST} + {922597200 -14400 1 CDT} + {941346000 -18000 0 CST} + {954651600 -14400 1 CDT} + {972795600 -18000 0 CST} + {986101200 -14400 1 CDT} + {1004245200 -18000 0 CST} + {1018155600 -14400 1 CDT} + {1035694800 -18000 0 CST} + {1049605200 -14400 1 CDT} + {1067144400 -18000 0 CST} + {1081054800 -14400 1 CDT} + {1162098000 -18000 0 CST} + {1173589200 -14400 1 CDT} + {1193547600 -18000 0 CST} + {1205643600 -14400 1 CDT} + {1224997200 -18000 0 CST} + {1236488400 -14400 1 CDT} + {1256446800 -18000 0 CST} + {1268542800 -14400 1 CDT} + {1288501200 -18000 0 CST} + {1300597200 -14400 1 CDT} + {1321160400 -18000 0 CST} + {1333256400 -14400 1 CDT} + {1352005200 -18000 0 CST} + {1362891600 -14400 1 CDT} + {1383454800 -18000 0 CST} + {1394341200 -14400 1 CDT} + {1414904400 -18000 0 CST} + {1425790800 -14400 1 CDT} + {1446354000 -18000 0 CST} + {1457845200 -14400 1 CDT} + {1478408400 -18000 0 CST} + {1489294800 -14400 1 CDT} + {1509858000 -18000 0 CST} + {1520744400 -14400 1 CDT} + {1541307600 -18000 0 CST} + {1552194000 -14400 1 CDT} + {1572757200 -18000 0 CST} + {1583643600 -14400 1 CDT} + {1604206800 -18000 0 CST} + {1615698000 -14400 1 CDT} + {1636261200 -18000 0 CST} + {1647147600 -14400 1 CDT} + {1667710800 -18000 0 CST} + {1678597200 -14400 1 CDT} + {1699160400 -18000 0 CST} + {1710046800 -14400 1 CDT} + {1730610000 -18000 0 CST} + {1741496400 -14400 1 CDT} + {1762059600 -18000 0 CST} + {1772946000 -14400 1 CDT} + {1793509200 -18000 0 CST} + {1805000400 -14400 1 CDT} + {1825563600 -18000 0 CST} + {1836450000 -14400 1 CDT} + {1857013200 -18000 0 CST} + {1867899600 -14400 1 CDT} + {1888462800 -18000 0 CST} + {1899349200 -14400 1 CDT} + {1919912400 -18000 0 CST} + {1930798800 -14400 1 CDT} + {1951362000 -18000 0 CST} + {1962853200 -14400 1 CDT} + {1983416400 -18000 0 CST} + {1994302800 -14400 1 CDT} + {2014866000 -18000 0 CST} + {2025752400 -14400 1 CDT} + {2046315600 -18000 0 CST} + {2057202000 -14400 1 CDT} + {2077765200 -18000 0 CST} + {2088651600 -14400 1 CDT} + {2109214800 -18000 0 CST} + {2120101200 -14400 1 CDT} + {2140664400 -18000 0 CST} + {2152155600 -14400 1 CDT} + {2172718800 -18000 0 CST} + {2183605200 -14400 1 CDT} + {2204168400 -18000 0 CST} + {2215054800 -14400 1 CDT} + {2235618000 -18000 0 CST} + {2246504400 -14400 1 CDT} + {2267067600 -18000 0 CST} + {2277954000 -14400 1 CDT} + {2298517200 -18000 0 CST} + {2309403600 -14400 1 CDT} + {2329966800 -18000 0 CST} + {2341458000 -14400 1 CDT} + {2362021200 -18000 0 CST} + {2372907600 -14400 1 CDT} + {2393470800 -18000 0 CST} + {2404357200 -14400 1 CDT} + {2424920400 -18000 0 CST} + {2435806800 -14400 1 CDT} + {2456370000 -18000 0 CST} + {2467256400 -14400 1 CDT} + {2487819600 -18000 0 CST} + {2499310800 -14400 1 CDT} + {2519874000 -18000 0 CST} + {2530760400 -14400 1 CDT} + {2551323600 -18000 0 CST} + {2562210000 -14400 1 CDT} + {2582773200 -18000 0 CST} + {2593659600 -14400 1 CDT} + {2614222800 -18000 0 CST} + {2625109200 -14400 1 CDT} + {2645672400 -18000 0 CST} + {2656558800 -14400 1 CDT} + {2677122000 -18000 0 CST} + {2688613200 -14400 1 CDT} + {2709176400 -18000 0 CST} + {2720062800 -14400 1 CDT} + {2740626000 -18000 0 CST} + {2751512400 -14400 1 CDT} + {2772075600 -18000 0 CST} + {2782962000 -14400 1 CDT} + {2803525200 -18000 0 CST} + {2814411600 -14400 1 CDT} + {2834974800 -18000 0 CST} + {2846466000 -14400 1 CDT} + {2867029200 -18000 0 CST} + {2877915600 -14400 1 CDT} + {2898478800 -18000 0 CST} + {2909365200 -14400 1 CDT} + {2929928400 -18000 0 CST} + {2940814800 -14400 1 CDT} + {2961378000 -18000 0 CST} + {2972264400 -14400 1 CDT} + {2992827600 -18000 0 CST} + {3003714000 -14400 1 CDT} + {3024277200 -18000 0 CST} + {3035768400 -14400 1 CDT} + {3056331600 -18000 0 CST} + {3067218000 -14400 1 CDT} + {3087781200 -18000 0 CST} + {3098667600 -14400 1 CDT} + {3119230800 -18000 0 CST} + {3130117200 -14400 1 CDT} + {3150680400 -18000 0 CST} + {3161566800 -14400 1 CDT} + {3182130000 -18000 0 CST} + {3193016400 -14400 1 CDT} + {3213579600 -18000 0 CST} + {3225070800 -14400 1 CDT} + {3245634000 -18000 0 CST} + {3256520400 -14400 1 CDT} + {3277083600 -18000 0 CST} + {3287970000 -14400 1 CDT} + {3308533200 -18000 0 CST} + {3319419600 -14400 1 CDT} + {3339982800 -18000 0 CST} + {3350869200 -14400 1 CDT} + {3371432400 -18000 0 CST} + {3382923600 -14400 1 CDT} + {3403486800 -18000 0 CST} + {3414373200 -14400 1 CDT} + {3434936400 -18000 0 CST} + {3445822800 -14400 1 CDT} + {3466386000 -18000 0 CST} + {3477272400 -14400 1 CDT} + {3497835600 -18000 0 CST} + {3508722000 -14400 1 CDT} + {3529285200 -18000 0 CST} + {3540171600 -14400 1 CDT} + {3560734800 -18000 0 CST} + {3572226000 -14400 1 CDT} + {3592789200 -18000 0 CST} + {3603675600 -14400 1 CDT} + {3624238800 -18000 0 CST} + {3635125200 -14400 1 CDT} + {3655688400 -18000 0 CST} + {3666574800 -14400 1 CDT} + {3687138000 -18000 0 CST} + {3698024400 -14400 1 CDT} + {3718587600 -18000 0 CST} + {3730078800 -14400 1 CDT} + {3750642000 -18000 0 CST} + {3761528400 -14400 1 CDT} + {3782091600 -18000 0 CST} + {3792978000 -14400 1 CDT} + {3813541200 -18000 0 CST} + {3824427600 -14400 1 CDT} + {3844990800 -18000 0 CST} + {3855877200 -14400 1 CDT} + {3876440400 -18000 0 CST} + {3887326800 -14400 1 CDT} + {3907890000 -18000 0 CST} + {3919381200 -14400 1 CDT} + {3939944400 -18000 0 CST} + {3950830800 -14400 1 CDT} + {3971394000 -18000 0 CST} + {3982280400 -14400 1 CDT} + {4002843600 -18000 0 CST} + {4013730000 -14400 1 CDT} + {4034293200 -18000 0 CST} + {4045179600 -14400 1 CDT} + {4065742800 -18000 0 CST} + {4076629200 -14400 1 CDT} + {4097192400 -18000 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Hermosillo b/inkstitch/bin/tcl/tzdata/America/Hermosillo new file mode 100644 index 0000000..779020e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Hermosillo @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Hermosillo) { + {-9223372036854775808 -26632 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {915174000 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis b/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis new file mode 100644 index 0000000..63c410c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Indianapolis) { + {-9223372036854775808 -20678 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1577901600 -21600 0 CST} + {-900259200 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 0 EST} + {-386787600 -21600 0 CST} + {-368640000 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Knox b/inkstitch/bin/tcl/tzdata/America/Indiana/Knox new file mode 100644 index 0000000..eee3ff4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Knox @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Knox) { + {-9223372036854775808 -20790 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-725824800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 0 EST} + {-195066000 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688550400 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo b/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo new file mode 100644 index 0000000..3f1d578 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo @@ -0,0 +1,236 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Marengo) { + {-9223372036854775808 -20723 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-599594400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -18000 1 CDT} + {152089200 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {189320400 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg b/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg new file mode 100644 index 0000000..6992bfc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg @@ -0,0 +1,247 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Petersburg) { + {-9223372036854775808 -20947 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-473364000 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 1 CDT} + {-163616400 -21600 0 CST} + {-147888000 -18000 0 EST} + {-100112400 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247046400 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194163200 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City b/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City new file mode 100644 index 0000000..9eebcf7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Tell_City) { + {-9223372036854775808 -20823 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-260989200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay b/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay new file mode 100644 index 0000000..8d4157f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay @@ -0,0 +1,213 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Vevay) { + {-9223372036854775808 -20416 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-495043200 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {94712400 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes b/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes new file mode 100644 index 0000000..1af7fc9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Vincennes) { + {-9223372036854775808 -21007 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-260989200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194163200 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac b/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac new file mode 100644 index 0000000..fb6cd37 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac @@ -0,0 +1,240 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Winamac) { + {-9223372036854775808 -20785 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -14400 0 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Indianapolis b/inkstitch/bin/tcl/tzdata/America/Indianapolis new file mode 100644 index 0000000..7398545 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Indianapolis @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:America/Indianapolis) $TZData(:America/Indiana/Indianapolis) diff --git a/inkstitch/bin/tcl/tzdata/America/Inuvik b/inkstitch/bin/tcl/tzdata/America/Inuvik new file mode 100644 index 0000000..dd0d151 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Inuvik @@ -0,0 +1,249 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Inuvik) { + {-9223372036854775808 0 0 zzz} + {-536457600 -28800 0 PST} + {-147888000 -21600 1 PDDT} + {-131558400 -28800 0 PST} + {315558000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Iqaluit b/inkstitch/bin/tcl/tzdata/America/Iqaluit new file mode 100644 index 0000000..2a2e9fe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Iqaluit @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Iqaluit) { + {-9223372036854775808 0 0 zzz} + {-865296000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-147898800 -10800 1 EDDT} + {-131569200 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Jamaica b/inkstitch/bin/tcl/tzdata/America/Jamaica new file mode 100644 index 0000000..393d90a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Jamaica @@ -0,0 +1,28 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Jamaica) { + {-9223372036854775808 -18432 0 LMT} + {-2524503168 -18432 0 KMT} + {-1827687168 -18000 0 EST} + {136364400 -14400 0 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {441781200 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Jujuy b/inkstitch/bin/tcl/tzdata/America/Jujuy new file mode 100644 index 0000000..b4c5da3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Jujuy @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Jujuy)]} { + LoadTimeZoneFile America/Argentina/Jujuy +} +set TZData(:America/Jujuy) $TZData(:America/Argentina/Jujuy) diff --git a/inkstitch/bin/tcl/tzdata/America/Juneau b/inkstitch/bin/tcl/tzdata/America/Juneau new file mode 100644 index 0000000..fead810 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Juneau @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Juneau) { + {-9223372036854775808 54139 0 LMT} + {-3225366139 -32261 0 LMT} + {-2188954939 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -32400 0 YST} + {325681200 -28800 1 YDT} + {341406000 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville b/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville new file mode 100644 index 0000000..c2aa10c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville @@ -0,0 +1,314 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Kentucky/Louisville) { + {-9223372036854775808 -20582 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1546279200 -21600 0 CST} + {-1535904000 -18000 1 CDT} + {-1525280400 -21600 0 CST} + {-905097600 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-744224400 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-684349200 -18000 1 CDT} + {-652899600 -18000 1 CDT} + {-620845200 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-384368400 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-352918800 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-266432400 -18000 0 EST} + {-63140400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -18000 1 CDT} + {152089200 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello b/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello new file mode 100644 index 0000000..e523ecb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Kentucky/Monticello) { + {-9223372036854775808 -20364 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-63136800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Knox_IN b/inkstitch/bin/tcl/tzdata/America/Knox_IN new file mode 100644 index 0000000..00d21c0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Knox_IN @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Knox)]} { + LoadTimeZoneFile America/Indiana/Knox +} +set TZData(:America/Knox_IN) $TZData(:America/Indiana/Knox) diff --git a/inkstitch/bin/tcl/tzdata/America/Kralendijk b/inkstitch/bin/tcl/tzdata/America/Kralendijk new file mode 100644 index 0000000..8b6db86 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Kralendijk @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Curacao)]} { + LoadTimeZoneFile America/Curacao +} +set TZData(:America/Kralendijk) $TZData(:America/Curacao) diff --git a/inkstitch/bin/tcl/tzdata/America/La_Paz b/inkstitch/bin/tcl/tzdata/America/La_Paz new file mode 100644 index 0000000..38ffbb0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/La_Paz @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/La_Paz) { + {-9223372036854775808 -16356 0 LMT} + {-2524505244 -16356 0 CMT} + {-1205954844 -12756 1 BOST} + {-1192307244 -14400 0 BOT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Lima b/inkstitch/bin/tcl/tzdata/America/Lima new file mode 100644 index 0000000..c6e6ac1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Lima @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Lima) { + {-9223372036854775808 -18492 0 LMT} + {-2524503108 -18516 0 LMT} + {-1938538284 -14400 0 PEST} + {-1002052800 -18000 0 PET} + {-986756400 -14400 1 PEST} + {-971035200 -18000 0 PET} + {-955306800 -14400 1 PEST} + {-939585600 -18000 0 PET} + {512712000 -18000 0 PET} + {544248000 -18000 0 PET} + {638942400 -18000 0 PET} + {765172800 -18000 0 PET} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Los_Angeles b/inkstitch/bin/tcl/tzdata/America/Los_Angeles new file mode 100644 index 0000000..da6ca99 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Los_Angeles @@ -0,0 +1,317 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Los_Angeles) { + {-9223372036854775808 -28378 0 LMT} + {-2717640000 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-687967200 -25200 1 PDT} + {-662655600 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-94665600 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Louisville b/inkstitch/bin/tcl/tzdata/America/Louisville new file mode 100644 index 0000000..c5a3e1c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Louisville @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Kentucky/Louisville)]} { + LoadTimeZoneFile America/Kentucky/Louisville +} +set TZData(:America/Louisville) $TZData(:America/Kentucky/Louisville) diff --git a/inkstitch/bin/tcl/tzdata/America/Lower_Princes b/inkstitch/bin/tcl/tzdata/America/Lower_Princes new file mode 100644 index 0000000..94c9197 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Lower_Princes @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Curacao)]} { + LoadTimeZoneFile America/Curacao +} +set TZData(:America/Lower_Princes) $TZData(:America/Curacao) diff --git a/inkstitch/bin/tcl/tzdata/America/Maceio b/inkstitch/bin/tcl/tzdata/America/Maceio new file mode 100644 index 0000000..333b878 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Maceio @@ -0,0 +1,52 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Maceio) { + {-9223372036854775808 -8572 0 LMT} + {-1767217028 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {813553200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {841802400 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {972180000 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Managua b/inkstitch/bin/tcl/tzdata/America/Managua new file mode 100644 index 0000000..f729b8a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Managua @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Managua) { + {-9223372036854775808 -20708 0 LMT} + {-2524500892 -20712 0 MMT} + {-1121105688 -21600 0 CST} + {105084000 -18000 0 EST} + {161758800 -21600 0 CST} + {290584800 -18000 1 CDT} + {299134800 -21600 0 CST} + {322034400 -18000 1 CDT} + {330584400 -21600 0 CST} + {694260000 -18000 0 EST} + {717310800 -21600 0 CST} + {725868000 -18000 0 EST} + {852094800 -21600 0 CST} + {1113112800 -18000 1 CDT} + {1128229200 -21600 0 CST} + {1146384000 -18000 1 CDT} + {1159682400 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Manaus b/inkstitch/bin/tcl/tzdata/America/Manaus new file mode 100644 index 0000000..058e0f7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Manaus @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Manaus) { + {-9223372036854775808 -14404 0 LMT} + {-1767211196 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {749188800 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {780202800 -14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Marigot b/inkstitch/bin/tcl/tzdata/America/Marigot new file mode 100644 index 0000000..9f3f8f6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Marigot @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Guadeloupe)]} { + LoadTimeZoneFile America/Guadeloupe +} +set TZData(:America/Marigot) $TZData(:America/Guadeloupe) diff --git a/inkstitch/bin/tcl/tzdata/America/Martinique b/inkstitch/bin/tcl/tzdata/America/Martinique new file mode 100644 index 0000000..1f1b491 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Martinique @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Martinique) { + {-9223372036854775808 -14660 0 LMT} + {-2524506940 -14660 0 FFMT} + {-1851537340 -14400 0 AST} + {323841600 -10800 1 ADT} + {338958000 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Matamoros b/inkstitch/bin/tcl/tzdata/America/Matamoros new file mode 100644 index 0000000..2b98652 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Matamoros @@ -0,0 +1,219 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Matamoros) { + {-9223372036854775808 -24000 0 LMT} + {-1514743200 -21600 0 CST} + {568015200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {599637600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1262325600 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Mazatlan b/inkstitch/bin/tcl/tzdata/America/Mazatlan new file mode 100644 index 0000000..e56d7d0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Mazatlan @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Mazatlan) { + {-9223372036854775808 -25540 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -21600 1 MDT} + {1288512000 -25200 0 MST} + {1301821200 -21600 1 MDT} + {1319961600 -25200 0 MST} + {1333270800 -21600 1 MDT} + {1351411200 -25200 0 MST} + {1365325200 -21600 1 MDT} + {1382860800 -25200 0 MST} + {1396774800 -21600 1 MDT} + {1414310400 -25200 0 MST} + {1428224400 -21600 1 MDT} + {1445760000 -25200 0 MST} + {1459674000 -21600 1 MDT} + {1477814400 -25200 0 MST} + {1491123600 -21600 1 MDT} + {1509264000 -25200 0 MST} + {1522573200 -21600 1 MDT} + {1540713600 -25200 0 MST} + {1554627600 -21600 1 MDT} + {1572163200 -25200 0 MST} + {1586077200 -21600 1 MDT} + {1603612800 -25200 0 MST} + {1617526800 -21600 1 MDT} + {1635667200 -25200 0 MST} + {1648976400 -21600 1 MDT} + {1667116800 -25200 0 MST} + {1680426000 -21600 1 MDT} + {1698566400 -25200 0 MST} + {1712480400 -21600 1 MDT} + {1730016000 -25200 0 MST} + {1743930000 -21600 1 MDT} + {1761465600 -25200 0 MST} + {1775379600 -21600 1 MDT} + {1792915200 -25200 0 MST} + {1806829200 -21600 1 MDT} + {1824969600 -25200 0 MST} + {1838278800 -21600 1 MDT} + {1856419200 -25200 0 MST} + {1869728400 -21600 1 MDT} + {1887868800 -25200 0 MST} + {1901782800 -21600 1 MDT} + {1919318400 -25200 0 MST} + {1933232400 -21600 1 MDT} + {1950768000 -25200 0 MST} + {1964682000 -21600 1 MDT} + {1982822400 -25200 0 MST} + {1996131600 -21600 1 MDT} + {2014272000 -25200 0 MST} + {2027581200 -21600 1 MDT} + {2045721600 -25200 0 MST} + {2059030800 -21600 1 MDT} + {2077171200 -25200 0 MST} + {2091085200 -21600 1 MDT} + {2108620800 -25200 0 MST} + {2122534800 -21600 1 MDT} + {2140070400 -25200 0 MST} + {2153984400 -21600 1 MDT} + {2172124800 -25200 0 MST} + {2185434000 -21600 1 MDT} + {2203574400 -25200 0 MST} + {2216883600 -21600 1 MDT} + {2235024000 -25200 0 MST} + {2248938000 -21600 1 MDT} + {2266473600 -25200 0 MST} + {2280387600 -21600 1 MDT} + {2297923200 -25200 0 MST} + {2311837200 -21600 1 MDT} + {2329372800 -25200 0 MST} + {2343286800 -21600 1 MDT} + {2361427200 -25200 0 MST} + {2374736400 -21600 1 MDT} + {2392876800 -25200 0 MST} + {2406186000 -21600 1 MDT} + {2424326400 -25200 0 MST} + {2438240400 -21600 1 MDT} + {2455776000 -25200 0 MST} + {2469690000 -21600 1 MDT} + {2487225600 -25200 0 MST} + {2501139600 -21600 1 MDT} + {2519280000 -25200 0 MST} + {2532589200 -21600 1 MDT} + {2550729600 -25200 0 MST} + {2564038800 -21600 1 MDT} + {2582179200 -25200 0 MST} + {2596093200 -21600 1 MDT} + {2613628800 -25200 0 MST} + {2627542800 -21600 1 MDT} + {2645078400 -25200 0 MST} + {2658992400 -21600 1 MDT} + {2676528000 -25200 0 MST} + {2690442000 -21600 1 MDT} + {2708582400 -25200 0 MST} + {2721891600 -21600 1 MDT} + {2740032000 -25200 0 MST} + {2753341200 -21600 1 MDT} + {2771481600 -25200 0 MST} + {2785395600 -21600 1 MDT} + {2802931200 -25200 0 MST} + {2816845200 -21600 1 MDT} + {2834380800 -25200 0 MST} + {2848294800 -21600 1 MDT} + {2866435200 -25200 0 MST} + {2879744400 -21600 1 MDT} + {2897884800 -25200 0 MST} + {2911194000 -21600 1 MDT} + {2929334400 -25200 0 MST} + {2942643600 -21600 1 MDT} + {2960784000 -25200 0 MST} + {2974698000 -21600 1 MDT} + {2992233600 -25200 0 MST} + {3006147600 -21600 1 MDT} + {3023683200 -25200 0 MST} + {3037597200 -21600 1 MDT} + {3055737600 -25200 0 MST} + {3069046800 -21600 1 MDT} + {3087187200 -25200 0 MST} + {3100496400 -21600 1 MDT} + {3118636800 -25200 0 MST} + {3132550800 -21600 1 MDT} + {3150086400 -25200 0 MST} + {3164000400 -21600 1 MDT} + {3181536000 -25200 0 MST} + {3195450000 -21600 1 MDT} + {3212985600 -25200 0 MST} + {3226899600 -21600 1 MDT} + {3245040000 -25200 0 MST} + {3258349200 -21600 1 MDT} + {3276489600 -25200 0 MST} + {3289798800 -21600 1 MDT} + {3307939200 -25200 0 MST} + {3321853200 -21600 1 MDT} + {3339388800 -25200 0 MST} + {3353302800 -21600 1 MDT} + {3370838400 -25200 0 MST} + {3384752400 -21600 1 MDT} + {3402892800 -25200 0 MST} + {3416202000 -21600 1 MDT} + {3434342400 -25200 0 MST} + {3447651600 -21600 1 MDT} + {3465792000 -25200 0 MST} + {3479706000 -21600 1 MDT} + {3497241600 -25200 0 MST} + {3511155600 -21600 1 MDT} + {3528691200 -25200 0 MST} + {3542605200 -21600 1 MDT} + {3560140800 -25200 0 MST} + {3574054800 -21600 1 MDT} + {3592195200 -25200 0 MST} + {3605504400 -21600 1 MDT} + {3623644800 -25200 0 MST} + {3636954000 -21600 1 MDT} + {3655094400 -25200 0 MST} + {3669008400 -21600 1 MDT} + {3686544000 -25200 0 MST} + {3700458000 -21600 1 MDT} + {3717993600 -25200 0 MST} + {3731907600 -21600 1 MDT} + {3750048000 -25200 0 MST} + {3763357200 -21600 1 MDT} + {3781497600 -25200 0 MST} + {3794806800 -21600 1 MDT} + {3812947200 -25200 0 MST} + {3826256400 -21600 1 MDT} + {3844396800 -25200 0 MST} + {3858310800 -21600 1 MDT} + {3875846400 -25200 0 MST} + {3889760400 -21600 1 MDT} + {3907296000 -25200 0 MST} + {3921210000 -21600 1 MDT} + {3939350400 -25200 0 MST} + {3952659600 -21600 1 MDT} + {3970800000 -25200 0 MST} + {3984109200 -21600 1 MDT} + {4002249600 -25200 0 MST} + {4016163600 -21600 1 MDT} + {4033699200 -25200 0 MST} + {4047613200 -21600 1 MDT} + {4065148800 -25200 0 MST} + {4079062800 -21600 1 MDT} + {4096598400 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Mendoza b/inkstitch/bin/tcl/tzdata/America/Mendoza new file mode 100644 index 0000000..511d83e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Mendoza @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Mendoza)]} { + LoadTimeZoneFile America/Argentina/Mendoza +} +set TZData(:America/Mendoza) $TZData(:America/Argentina/Mendoza) diff --git a/inkstitch/bin/tcl/tzdata/America/Menominee b/inkstitch/bin/tcl/tzdata/America/Menominee new file mode 100644 index 0000000..382aeda --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Menominee @@ -0,0 +1,274 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Menominee) { + {-9223372036854775808 -21027 0 LMT} + {-2659759773 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100112400 -21600 0 CST} + {-21484800 -18000 0 EST} + {104914800 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Merida b/inkstitch/bin/tcl/tzdata/America/Merida new file mode 100644 index 0000000..ebf5927 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Merida @@ -0,0 +1,216 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Merida) { + {-9223372036854775808 -21508 0 LMT} + {-1514743200 -21600 0 CST} + {377935200 -18000 0 EST} + {407653200 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Metlakatla b/inkstitch/bin/tcl/tzdata/America/Metlakatla new file mode 100644 index 0000000..e8af1c0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Metlakatla @@ -0,0 +1,43 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Metlakatla) { + {-9223372036854775808 54822 0 LMT} + {-3225366822 -31578 0 LMT} + {-2188955622 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436356000 -28800 0 MeST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Mexico_City b/inkstitch/bin/tcl/tzdata/America/Mexico_City new file mode 100644 index 0000000..48462e4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Mexico_City @@ -0,0 +1,228 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Mexico_City) { + {-9223372036854775808 -23796 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-975261600 -18000 1 CDT} + {-963169200 -21600 0 CST} + {-917114400 -18000 1 CDT} + {-907354800 -21600 0 CST} + {-821901600 -18000 1 CWT} + {-810068400 -21600 0 CST} + {-627501600 -18000 1 CDT} + {-612990000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001836800 -21600 0 CST} + {1014184800 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Miquelon b/inkstitch/bin/tcl/tzdata/America/Miquelon new file mode 100644 index 0000000..a7410f1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Miquelon @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Miquelon) { + {-9223372036854775808 -13480 0 LMT} + {-1850328920 -14400 0 AST} + {326001600 -10800 0 PMST} + {536468400 -10800 0 PMST} + {544597200 -7200 1 PMDT} + {562132800 -10800 0 PMST} + {576046800 -7200 1 PMDT} + {594187200 -10800 0 PMST} + {607496400 -7200 1 PMDT} + {625636800 -10800 0 PMST} + {638946000 -7200 1 PMDT} + {657086400 -10800 0 PMST} + {671000400 -7200 1 PMDT} + {688536000 -10800 0 PMST} + {702450000 -7200 1 PMDT} + {719985600 -10800 0 PMST} + {733899600 -7200 1 PMDT} + {752040000 -10800 0 PMST} + {765349200 -7200 1 PMDT} + {783489600 -10800 0 PMST} + {796798800 -7200 1 PMDT} + {814939200 -10800 0 PMST} + {828853200 -7200 1 PMDT} + {846388800 -10800 0 PMST} + {860302800 -7200 1 PMDT} + {877838400 -10800 0 PMST} + {891752400 -7200 1 PMDT} + {909288000 -10800 0 PMST} + {923202000 -7200 1 PMDT} + {941342400 -10800 0 PMST} + {954651600 -7200 1 PMDT} + {972792000 -10800 0 PMST} + {986101200 -7200 1 PMDT} + {1004241600 -10800 0 PMST} + {1018155600 -7200 1 PMDT} + {1035691200 -10800 0 PMST} + {1049605200 -7200 1 PMDT} + {1067140800 -10800 0 PMST} + {1081054800 -7200 1 PMDT} + {1099195200 -10800 0 PMST} + {1112504400 -7200 1 PMDT} + {1130644800 -10800 0 PMST} + {1143954000 -7200 1 PMDT} + {1162094400 -10800 0 PMST} + {1173589200 -7200 1 PMDT} + {1194148800 -10800 0 PMST} + {1205038800 -7200 1 PMDT} + {1225598400 -10800 0 PMST} + {1236488400 -7200 1 PMDT} + {1257048000 -10800 0 PMST} + {1268542800 -7200 1 PMDT} + {1289102400 -10800 0 PMST} + {1299992400 -7200 1 PMDT} + {1320552000 -10800 0 PMST} + {1331442000 -7200 1 PMDT} + {1352001600 -10800 0 PMST} + {1362891600 -7200 1 PMDT} + {1383451200 -10800 0 PMST} + {1394341200 -7200 1 PMDT} + {1414900800 -10800 0 PMST} + {1425790800 -7200 1 PMDT} + {1446350400 -10800 0 PMST} + {1457845200 -7200 1 PMDT} + {1478404800 -10800 0 PMST} + {1489294800 -7200 1 PMDT} + {1509854400 -10800 0 PMST} + {1520744400 -7200 1 PMDT} + {1541304000 -10800 0 PMST} + {1552194000 -7200 1 PMDT} + {1572753600 -10800 0 PMST} + {1583643600 -7200 1 PMDT} + {1604203200 -10800 0 PMST} + {1615698000 -7200 1 PMDT} + {1636257600 -10800 0 PMST} + {1647147600 -7200 1 PMDT} + {1667707200 -10800 0 PMST} + {1678597200 -7200 1 PMDT} + {1699156800 -10800 0 PMST} + {1710046800 -7200 1 PMDT} + {1730606400 -10800 0 PMST} + {1741496400 -7200 1 PMDT} + {1762056000 -10800 0 PMST} + {1772946000 -7200 1 PMDT} + {1793505600 -10800 0 PMST} + {1805000400 -7200 1 PMDT} + {1825560000 -10800 0 PMST} + {1836450000 -7200 1 PMDT} + {1857009600 -10800 0 PMST} + {1867899600 -7200 1 PMDT} + {1888459200 -10800 0 PMST} + {1899349200 -7200 1 PMDT} + {1919908800 -10800 0 PMST} + {1930798800 -7200 1 PMDT} + {1951358400 -10800 0 PMST} + {1962853200 -7200 1 PMDT} + {1983412800 -10800 0 PMST} + {1994302800 -7200 1 PMDT} + {2014862400 -10800 0 PMST} + {2025752400 -7200 1 PMDT} + {2046312000 -10800 0 PMST} + {2057202000 -7200 1 PMDT} + {2077761600 -10800 0 PMST} + {2088651600 -7200 1 PMDT} + {2109211200 -10800 0 PMST} + {2120101200 -7200 1 PMDT} + {2140660800 -10800 0 PMST} + {2152155600 -7200 1 PMDT} + {2172715200 -10800 0 PMST} + {2183605200 -7200 1 PMDT} + {2204164800 -10800 0 PMST} + {2215054800 -7200 1 PMDT} + {2235614400 -10800 0 PMST} + {2246504400 -7200 1 PMDT} + {2267064000 -10800 0 PMST} + {2277954000 -7200 1 PMDT} + {2298513600 -10800 0 PMST} + {2309403600 -7200 1 PMDT} + {2329963200 -10800 0 PMST} + {2341458000 -7200 1 PMDT} + {2362017600 -10800 0 PMST} + {2372907600 -7200 1 PMDT} + {2393467200 -10800 0 PMST} + {2404357200 -7200 1 PMDT} + {2424916800 -10800 0 PMST} + {2435806800 -7200 1 PMDT} + {2456366400 -10800 0 PMST} + {2467256400 -7200 1 PMDT} + {2487816000 -10800 0 PMST} + {2499310800 -7200 1 PMDT} + {2519870400 -10800 0 PMST} + {2530760400 -7200 1 PMDT} + {2551320000 -10800 0 PMST} + {2562210000 -7200 1 PMDT} + {2582769600 -10800 0 PMST} + {2593659600 -7200 1 PMDT} + {2614219200 -10800 0 PMST} + {2625109200 -7200 1 PMDT} + {2645668800 -10800 0 PMST} + {2656558800 -7200 1 PMDT} + {2677118400 -10800 0 PMST} + {2688613200 -7200 1 PMDT} + {2709172800 -10800 0 PMST} + {2720062800 -7200 1 PMDT} + {2740622400 -10800 0 PMST} + {2751512400 -7200 1 PMDT} + {2772072000 -10800 0 PMST} + {2782962000 -7200 1 PMDT} + {2803521600 -10800 0 PMST} + {2814411600 -7200 1 PMDT} + {2834971200 -10800 0 PMST} + {2846466000 -7200 1 PMDT} + {2867025600 -10800 0 PMST} + {2877915600 -7200 1 PMDT} + {2898475200 -10800 0 PMST} + {2909365200 -7200 1 PMDT} + {2929924800 -10800 0 PMST} + {2940814800 -7200 1 PMDT} + {2961374400 -10800 0 PMST} + {2972264400 -7200 1 PMDT} + {2992824000 -10800 0 PMST} + {3003714000 -7200 1 PMDT} + {3024273600 -10800 0 PMST} + {3035768400 -7200 1 PMDT} + {3056328000 -10800 0 PMST} + {3067218000 -7200 1 PMDT} + {3087777600 -10800 0 PMST} + {3098667600 -7200 1 PMDT} + {3119227200 -10800 0 PMST} + {3130117200 -7200 1 PMDT} + {3150676800 -10800 0 PMST} + {3161566800 -7200 1 PMDT} + {3182126400 -10800 0 PMST} + {3193016400 -7200 1 PMDT} + {3213576000 -10800 0 PMST} + {3225070800 -7200 1 PMDT} + {3245630400 -10800 0 PMST} + {3256520400 -7200 1 PMDT} + {3277080000 -10800 0 PMST} + {3287970000 -7200 1 PMDT} + {3308529600 -10800 0 PMST} + {3319419600 -7200 1 PMDT} + {3339979200 -10800 0 PMST} + {3350869200 -7200 1 PMDT} + {3371428800 -10800 0 PMST} + {3382923600 -7200 1 PMDT} + {3403483200 -10800 0 PMST} + {3414373200 -7200 1 PMDT} + {3434932800 -10800 0 PMST} + {3445822800 -7200 1 PMDT} + {3466382400 -10800 0 PMST} + {3477272400 -7200 1 PMDT} + {3497832000 -10800 0 PMST} + {3508722000 -7200 1 PMDT} + {3529281600 -10800 0 PMST} + {3540171600 -7200 1 PMDT} + {3560731200 -10800 0 PMST} + {3572226000 -7200 1 PMDT} + {3592785600 -10800 0 PMST} + {3603675600 -7200 1 PMDT} + {3624235200 -10800 0 PMST} + {3635125200 -7200 1 PMDT} + {3655684800 -10800 0 PMST} + {3666574800 -7200 1 PMDT} + {3687134400 -10800 0 PMST} + {3698024400 -7200 1 PMDT} + {3718584000 -10800 0 PMST} + {3730078800 -7200 1 PMDT} + {3750638400 -10800 0 PMST} + {3761528400 -7200 1 PMDT} + {3782088000 -10800 0 PMST} + {3792978000 -7200 1 PMDT} + {3813537600 -10800 0 PMST} + {3824427600 -7200 1 PMDT} + {3844987200 -10800 0 PMST} + {3855877200 -7200 1 PMDT} + {3876436800 -10800 0 PMST} + {3887326800 -7200 1 PMDT} + {3907886400 -10800 0 PMST} + {3919381200 -7200 1 PMDT} + {3939940800 -10800 0 PMST} + {3950830800 -7200 1 PMDT} + {3971390400 -10800 0 PMST} + {3982280400 -7200 1 PMDT} + {4002840000 -10800 0 PMST} + {4013730000 -7200 1 PMDT} + {4034289600 -10800 0 PMST} + {4045179600 -7200 1 PMDT} + {4065739200 -10800 0 PMST} + {4076629200 -7200 1 PMDT} + {4097188800 -10800 0 PMST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Moncton b/inkstitch/bin/tcl/tzdata/America/Moncton new file mode 100644 index 0000000..d286c88 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Moncton @@ -0,0 +1,342 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Moncton) { + {-9223372036854775808 -15548 0 LMT} + {-2715882052 -18000 0 EST} + {-2131642800 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-1167595200 -14400 0 AST} + {-1153681200 -10800 1 ADT} + {-1145822400 -14400 0 AST} + {-1122231600 -10800 1 ADT} + {-1114372800 -14400 0 AST} + {-1090782000 -10800 1 ADT} + {-1082923200 -14400 0 AST} + {-1059332400 -10800 1 ADT} + {-1051473600 -14400 0 AST} + {-1027882800 -10800 1 ADT} + {-1020024000 -14400 0 AST} + {-996433200 -10800 1 ADT} + {-988574400 -14400 0 AST} + {-965674800 -10800 1 ADT} + {-955396800 -14400 0 AST} + {-934743600 -10800 1 ADT} + {-923947200 -14400 0 AST} + {-904503600 -10800 1 ADT} + {-891892800 -14400 0 AST} + {-883598400 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} + {-747252000 -10800 1 ADT} + {-733950000 -14400 0 AST} + {-715802400 -10800 1 ADT} + {-702500400 -14400 0 AST} + {-684352800 -10800 1 ADT} + {-671050800 -14400 0 AST} + {-652903200 -10800 1 ADT} + {-639601200 -14400 0 AST} + {-620848800 -10800 1 ADT} + {-608151600 -14400 0 AST} + {-589399200 -10800 1 ADT} + {-576097200 -14400 0 AST} + {-557949600 -10800 1 ADT} + {-544647600 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-495050400 -10800 1 ADT} + {-481748400 -14400 0 AST} + {-463600800 -10800 1 ADT} + {-450298800 -14400 0 AST} + {-431546400 -10800 1 ADT} + {-418244400 -14400 0 AST} + {-400096800 -10800 1 ADT} + {-384375600 -14400 0 AST} + {-368647200 -10800 1 ADT} + {-352926000 -14400 0 AST} + {-337197600 -10800 1 ADT} + {-321476400 -14400 0 AST} + {-305748000 -10800 1 ADT} + {-289422000 -14400 0 AST} + {-273693600 -10800 1 ADT} + {-257972400 -14400 0 AST} + {-242244000 -10800 1 ADT} + {-226522800 -14400 0 AST} + {-210794400 -10800 1 ADT} + {-195073200 -14400 0 AST} + {-179344800 -10800 1 ADT} + {-163623600 -14400 0 AST} + {-147895200 -10800 1 ADT} + {-131569200 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {94708800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {725860800 -14400 0 AST} + {733896060 -10800 1 ADT} + {752036460 -14400 0 AST} + {765345660 -10800 1 ADT} + {783486060 -14400 0 AST} + {796795260 -10800 1 ADT} + {814935660 -14400 0 AST} + {828849660 -10800 1 ADT} + {846385260 -14400 0 AST} + {860299260 -10800 1 ADT} + {877834860 -14400 0 AST} + {891748860 -10800 1 ADT} + {909284460 -14400 0 AST} + {923198460 -10800 1 ADT} + {941338860 -14400 0 AST} + {954648060 -10800 1 ADT} + {972788460 -14400 0 AST} + {986097660 -10800 1 ADT} + {1004238060 -14400 0 AST} + {1018152060 -10800 1 ADT} + {1035687660 -14400 0 AST} + {1049601660 -10800 1 ADT} + {1067137260 -14400 0 AST} + {1081051260 -10800 1 ADT} + {1099191660 -14400 0 AST} + {1112500860 -10800 1 ADT} + {1130641260 -14400 0 AST} + {1143950460 -10800 1 ADT} + {1162090860 -14400 0 AST} + {1167624000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Monterrey b/inkstitch/bin/tcl/tzdata/America/Monterrey new file mode 100644 index 0000000..4135884 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Monterrey @@ -0,0 +1,218 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Monterrey) { + {-9223372036854775808 -24076 0 LMT} + {-1514743200 -21600 0 CST} + {568015200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {599637600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Montevideo b/inkstitch/bin/tcl/tzdata/America/Montevideo new file mode 100644 index 0000000..aa469b9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Montevideo @@ -0,0 +1,261 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Montevideo) { + {-9223372036854775808 -13484 0 LMT} + {-2256668116 -13484 0 MMT} + {-1567455316 -12600 0 UYT} + {-1459542600 -10800 1 UYHST} + {-1443819600 -12600 0 UYT} + {-1428006600 -10800 1 UYHST} + {-1412283600 -12600 0 UYT} + {-1396470600 -10800 1 UYHST} + {-1380747600 -12600 0 UYT} + {-1141590600 -10800 1 UYHST} + {-1128286800 -12600 0 UYT} + {-1110141000 -10800 1 UYHST} + {-1096837200 -12600 0 UYT} + {-1078691400 -10800 1 UYHST} + {-1065387600 -12600 0 UYT} + {-1046637000 -10800 1 UYHST} + {-1033938000 -12600 0 UYT} + {-1015187400 -10800 1 UYHST} + {-1002488400 -12600 0 UYT} + {-983737800 -10800 1 UYHST} + {-971038800 -12600 0 UYT} + {-952288200 -10800 1 UYHST} + {-938984400 -12600 0 UYT} + {-920838600 -10800 1 UYHST} + {-907534800 -12600 0 UYT} + {-896819400 -10800 1 UYHST} + {-853623000 -10800 0 UYT} + {-853621200 -7200 1 UYST} + {-845848800 -10800 0 UYT} + {-334789200 -7200 1 UYST} + {-319672800 -10800 0 UYT} + {-314226000 -7200 1 UYST} + {-309996000 -10800 0 UYT} + {-149720400 -7200 1 UYST} + {-134604000 -10800 0 UYT} + {-118270800 -7200 1 UYST} + {-100044000 -10800 0 UYT} + {-86821200 -7200 1 UYST} + {-68508000 -10800 0 UYT} + {-50446800 -9000 1 UYHST} + {-34119000 -10800 0 UYT} + {-18910800 -9000 1 UYHST} + {-2583000 -10800 0 UYT} + {12625200 -9000 1 UYHST} + {28953000 -10800 0 UYT} + {72932400 -7200 1 UYST} + {82692000 -10800 0 UYT} + {132116400 -9000 1 UYHST} + {156911400 -7200 1 UYST} + {212983200 -10800 0 UYT} + {250052400 -7200 1 UYST} + {260244000 -10800 0 UYT} + {307594800 -7200 1 UYST} + {325994400 -10800 0 UYT} + {566449200 -7200 1 UYST} + {574308000 -10800 0 UYT} + {597812400 -7200 1 UYST} + {605671200 -10800 0 UYT} + {625633200 -7200 1 UYST} + {636516000 -10800 0 UYT} + {656478000 -7200 1 UYST} + {667965600 -10800 0 UYT} + {688532400 -7200 1 UYST} + {699415200 -10800 0 UYT} + {719377200 -7200 1 UYST} + {730864800 -10800 0 UYT} + {1095562800 -7200 1 UYST} + {1111896000 -10800 0 UYT} + {1128834000 -7200 1 UYST} + {1142136000 -10800 0 UYT} + {1159678800 -7200 1 UYST} + {1173585600 -10800 0 UYT} + {1191733200 -7200 1 UYST} + {1205035200 -10800 0 UYT} + {1223182800 -7200 1 UYST} + {1236484800 -10800 0 UYT} + {1254632400 -7200 1 UYST} + {1268539200 -10800 0 UYT} + {1286082000 -7200 1 UYST} + {1299988800 -10800 0 UYT} + {1317531600 -7200 1 UYST} + {1331438400 -10800 0 UYT} + {1349586000 -7200 1 UYST} + {1362888000 -10800 0 UYT} + {1381035600 -7200 1 UYST} + {1394337600 -10800 0 UYT} + {1412485200 -7200 1 UYST} + {1425787200 -10800 0 UYT} + {1443934800 -7200 1 UYST} + {1457841600 -10800 0 UYT} + {1475384400 -7200 1 UYST} + {1489291200 -10800 0 UYT} + {1506834000 -7200 1 UYST} + {1520740800 -10800 0 UYT} + {1538888400 -7200 1 UYST} + {1552190400 -10800 0 UYT} + {1570338000 -7200 1 UYST} + {1583640000 -10800 0 UYT} + {1601787600 -7200 1 UYST} + {1615694400 -10800 0 UYT} + {1633237200 -7200 1 UYST} + {1647144000 -10800 0 UYT} + {1664686800 -7200 1 UYST} + {1678593600 -10800 0 UYT} + {1696136400 -7200 1 UYST} + {1710043200 -10800 0 UYT} + {1728190800 -7200 1 UYST} + {1741492800 -10800 0 UYT} + {1759640400 -7200 1 UYST} + {1772942400 -10800 0 UYT} + {1791090000 -7200 1 UYST} + {1804996800 -10800 0 UYT} + {1822539600 -7200 1 UYST} + {1836446400 -10800 0 UYT} + {1853989200 -7200 1 UYST} + {1867896000 -10800 0 UYT} + {1886043600 -7200 1 UYST} + {1899345600 -10800 0 UYT} + {1917493200 -7200 1 UYST} + {1930795200 -10800 0 UYT} + {1948942800 -7200 1 UYST} + {1962849600 -10800 0 UYT} + {1980392400 -7200 1 UYST} + {1994299200 -10800 0 UYT} + {2011842000 -7200 1 UYST} + {2025748800 -10800 0 UYT} + {2043291600 -7200 1 UYST} + {2057198400 -10800 0 UYT} + {2075346000 -7200 1 UYST} + {2088648000 -10800 0 UYT} + {2106795600 -7200 1 UYST} + {2120097600 -10800 0 UYT} + {2138245200 -7200 1 UYST} + {2152152000 -10800 0 UYT} + {2169694800 -7200 1 UYST} + {2183601600 -10800 0 UYT} + {2201144400 -7200 1 UYST} + {2215051200 -10800 0 UYT} + {2233198800 -7200 1 UYST} + {2246500800 -10800 0 UYT} + {2264648400 -7200 1 UYST} + {2277950400 -10800 0 UYT} + {2296098000 -7200 1 UYST} + {2309400000 -10800 0 UYT} + {2327547600 -7200 1 UYST} + {2341454400 -10800 0 UYT} + {2358997200 -7200 1 UYST} + {2372904000 -10800 0 UYT} + {2390446800 -7200 1 UYST} + {2404353600 -10800 0 UYT} + {2422501200 -7200 1 UYST} + {2435803200 -10800 0 UYT} + {2453950800 -7200 1 UYST} + {2467252800 -10800 0 UYT} + {2485400400 -7200 1 UYST} + {2499307200 -10800 0 UYT} + {2516850000 -7200 1 UYST} + {2530756800 -10800 0 UYT} + {2548299600 -7200 1 UYST} + {2562206400 -10800 0 UYT} + {2579749200 -7200 1 UYST} + {2593656000 -10800 0 UYT} + {2611803600 -7200 1 UYST} + {2625105600 -10800 0 UYT} + {2643253200 -7200 1 UYST} + {2656555200 -10800 0 UYT} + {2674702800 -7200 1 UYST} + {2688609600 -10800 0 UYT} + {2706152400 -7200 1 UYST} + {2720059200 -10800 0 UYT} + {2737602000 -7200 1 UYST} + {2751508800 -10800 0 UYT} + {2769656400 -7200 1 UYST} + {2782958400 -10800 0 UYT} + {2801106000 -7200 1 UYST} + {2814408000 -10800 0 UYT} + {2832555600 -7200 1 UYST} + {2846462400 -10800 0 UYT} + {2864005200 -7200 1 UYST} + {2877912000 -10800 0 UYT} + {2895454800 -7200 1 UYST} + {2909361600 -10800 0 UYT} + {2926904400 -7200 1 UYST} + {2940811200 -10800 0 UYT} + {2958958800 -7200 1 UYST} + {2972260800 -10800 0 UYT} + {2990408400 -7200 1 UYST} + {3003710400 -10800 0 UYT} + {3021858000 -7200 1 UYST} + {3035764800 -10800 0 UYT} + {3053307600 -7200 1 UYST} + {3067214400 -10800 0 UYT} + {3084757200 -7200 1 UYST} + {3098664000 -10800 0 UYT} + {3116811600 -7200 1 UYST} + {3130113600 -10800 0 UYT} + {3148261200 -7200 1 UYST} + {3161563200 -10800 0 UYT} + {3179710800 -7200 1 UYST} + {3193012800 -10800 0 UYT} + {3211160400 -7200 1 UYST} + {3225067200 -10800 0 UYT} + {3242610000 -7200 1 UYST} + {3256516800 -10800 0 UYT} + {3274059600 -7200 1 UYST} + {3287966400 -10800 0 UYT} + {3306114000 -7200 1 UYST} + {3319416000 -10800 0 UYT} + {3337563600 -7200 1 UYST} + {3350865600 -10800 0 UYT} + {3369013200 -7200 1 UYST} + {3382920000 -10800 0 UYT} + {3400462800 -7200 1 UYST} + {3414369600 -10800 0 UYT} + {3431912400 -7200 1 UYST} + {3445819200 -10800 0 UYT} + {3463362000 -7200 1 UYST} + {3477268800 -10800 0 UYT} + {3495416400 -7200 1 UYST} + {3508718400 -10800 0 UYT} + {3526866000 -7200 1 UYST} + {3540168000 -10800 0 UYT} + {3558315600 -7200 1 UYST} + {3572222400 -10800 0 UYT} + {3589765200 -7200 1 UYST} + {3603672000 -10800 0 UYT} + {3621214800 -7200 1 UYST} + {3635121600 -10800 0 UYT} + {3653269200 -7200 1 UYST} + {3666571200 -10800 0 UYT} + {3684718800 -7200 1 UYST} + {3698020800 -10800 0 UYT} + {3716168400 -7200 1 UYST} + {3730075200 -10800 0 UYT} + {3747618000 -7200 1 UYST} + {3761524800 -10800 0 UYT} + {3779067600 -7200 1 UYST} + {3792974400 -10800 0 UYT} + {3810517200 -7200 1 UYST} + {3824424000 -10800 0 UYT} + {3842571600 -7200 1 UYST} + {3855873600 -10800 0 UYT} + {3874021200 -7200 1 UYST} + {3887323200 -10800 0 UYT} + {3905470800 -7200 1 UYST} + {3919377600 -10800 0 UYT} + {3936920400 -7200 1 UYST} + {3950827200 -10800 0 UYT} + {3968370000 -7200 1 UYST} + {3982276800 -10800 0 UYT} + {4000424400 -7200 1 UYST} + {4013726400 -10800 0 UYT} + {4031874000 -7200 1 UYST} + {4045176000 -10800 0 UYT} + {4063323600 -7200 1 UYST} + {4076625600 -10800 0 UYT} + {4094773200 -7200 1 UYST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Montreal b/inkstitch/bin/tcl/tzdata/America/Montreal new file mode 100644 index 0000000..bebe7dc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Montreal @@ -0,0 +1,366 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Montreal) { + {-9223372036854775808 -17656 0 LMT} + {-2713892744 -18000 0 EST} + {-1665334800 -14400 1 EDT} + {-1662753600 -18000 0 EST} + {-1640977200 -18000 0 EST} + {-1632070800 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1609441200 -18000 0 EST} + {-1601742600 -14400 1 EDT} + {-1583775000 -18000 0 EST} + {-1567355400 -14400 1 EDT} + {-1554053400 -18000 0 EST} + {-1535907600 -14400 1 EDT} + {-1522603800 -18000 0 EST} + {-1504458000 -14400 1 EDT} + {-1491154200 -18000 0 EST} + {-1439830800 -14400 1 EDT} + {-1428255000 -18000 0 EST} + {-1409504400 -14400 1 EDT} + {-1396805400 -18000 0 EST} + {-1378054800 -14400 1 EDT} + {-1365355800 -18000 0 EST} + {-1346612400 -14400 1 EDT} + {-1333915200 -18000 0 EST} + {-1315162800 -14400 1 EDT} + {-1301860800 -18000 0 EST} + {-1283713200 -14400 1 EDT} + {-1270411200 -18000 0 EST} + {-1252263600 -14400 1 EDT} + {-1238961600 -18000 0 EST} + {-1220814000 -14400 1 EDT} + {-1207512000 -18000 0 EST} + {-1188759600 -14400 1 EDT} + {-1176062400 -18000 0 EST} + {-1157310000 -14400 1 EDT} + {-1144008000 -18000 0 EST} + {-1125860400 -14400 1 EDT} + {-1112558400 -18000 0 EST} + {-1094410800 -14400 1 EDT} + {-1081108800 -18000 0 EST} + {-1062961200 -14400 1 EDT} + {-1049659200 -18000 0 EST} + {-1031511600 -14400 1 EDT} + {-1018209600 -18000 0 EST} + {-1000062000 -14400 1 EDT} + {-986760000 -18000 0 EST} + {-968007600 -14400 1 EDT} + {-955310400 -18000 0 EST} + {-936558000 -14400 1 EDT} + {-880218000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-747248400 -14400 1 EDT} + {-733946400 -18000 0 EST} + {-715798800 -14400 1 EDT} + {-702496800 -18000 0 EST} + {-684349200 -14400 1 EDT} + {-671047200 -18000 0 EST} + {-652899600 -14400 1 EDT} + {-636573600 -18000 0 EST} + {-620845200 -14400 1 EDT} + {-605124000 -18000 0 EST} + {-589395600 -14400 1 EDT} + {-576093600 -18000 0 EST} + {-557946000 -14400 1 EDT} + {-544644000 -18000 0 EST} + {-526496400 -14400 1 EDT} + {-513194400 -18000 0 EST} + {-495046800 -14400 1 EDT} + {-481744800 -18000 0 EST} + {-463597200 -14400 1 EDT} + {-450295200 -18000 0 EST} + {-431542800 -14400 1 EDT} + {-418240800 -18000 0 EST} + {-400093200 -14400 1 EDT} + {-384372000 -18000 0 EST} + {-368643600 -14400 1 EDT} + {-352922400 -18000 0 EST} + {-337194000 -14400 1 EDT} + {-321472800 -18000 0 EST} + {-305744400 -14400 1 EDT} + {-289418400 -18000 0 EST} + {-273690000 -14400 1 EDT} + {-257968800 -18000 0 EST} + {-242240400 -14400 1 EDT} + {-226519200 -18000 0 EST} + {-210790800 -14400 1 EDT} + {-195069600 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126248400 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Montserrat b/inkstitch/bin/tcl/tzdata/America/Montserrat new file mode 100644 index 0000000..4d82766 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Montserrat @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Montserrat) { + {-9223372036854775808 -14932 0 LMT} + {-1846266608 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Nassau b/inkstitch/bin/tcl/tzdata/America/Nassau new file mode 100644 index 0000000..1c35e93 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Nassau @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nassau) { + {-9223372036854775808 -18570 0 LMT} + {-1825095030 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {189320400 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/New_York b/inkstitch/bin/tcl/tzdata/America/New_York new file mode 100644 index 0000000..72f2c96 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/New_York @@ -0,0 +1,369 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/New_York) { + {-9223372036854775808 -17762 0 LMT} + {-2717650800 -18000 0 EST} + {-1633280400 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1601830800 -14400 1 EDT} + {-1583690400 -18000 0 EST} + {-1577905200 -18000 0 EST} + {-1570381200 -14400 1 EDT} + {-1551636000 -18000 0 EST} + {-1536512400 -14400 1 EDT} + {-1523210400 -18000 0 EST} + {-1504458000 -14400 1 EDT} + {-1491760800 -18000 0 EST} + {-1473008400 -14400 1 EDT} + {-1459706400 -18000 0 EST} + {-1441558800 -14400 1 EDT} + {-1428256800 -18000 0 EST} + {-1410109200 -14400 1 EDT} + {-1396807200 -18000 0 EST} + {-1378659600 -14400 1 EDT} + {-1365357600 -18000 0 EST} + {-1347210000 -14400 1 EDT} + {-1333908000 -18000 0 EST} + {-1315155600 -14400 1 EDT} + {-1301853600 -18000 0 EST} + {-1283706000 -14400 1 EDT} + {-1270404000 -18000 0 EST} + {-1252256400 -14400 1 EDT} + {-1238954400 -18000 0 EST} + {-1220806800 -14400 1 EDT} + {-1207504800 -18000 0 EST} + {-1189357200 -14400 1 EDT} + {-1176055200 -18000 0 EST} + {-1157302800 -14400 1 EDT} + {-1144605600 -18000 0 EST} + {-1125853200 -14400 1 EDT} + {-1112551200 -18000 0 EST} + {-1094403600 -14400 1 EDT} + {-1081101600 -18000 0 EST} + {-1062954000 -14400 1 EDT} + {-1049652000 -18000 0 EST} + {-1031504400 -14400 1 EDT} + {-1018202400 -18000 0 EST} + {-1000054800 -14400 1 EDT} + {-986752800 -18000 0 EST} + {-968000400 -14400 1 EDT} + {-955303200 -18000 0 EST} + {-936550800 -14400 1 EDT} + {-923248800 -18000 0 EST} + {-905101200 -14400 1 EDT} + {-891799200 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-747248400 -14400 1 EDT} + {-733946400 -18000 0 EST} + {-715798800 -14400 1 EDT} + {-702496800 -18000 0 EST} + {-684349200 -14400 1 EDT} + {-671047200 -18000 0 EST} + {-652899600 -14400 1 EDT} + {-639597600 -18000 0 EST} + {-620845200 -14400 1 EDT} + {-608148000 -18000 0 EST} + {-589395600 -14400 1 EDT} + {-576093600 -18000 0 EST} + {-557946000 -14400 1 EDT} + {-544644000 -18000 0 EST} + {-526496400 -14400 1 EDT} + {-513194400 -18000 0 EST} + {-495046800 -14400 1 EDT} + {-481744800 -18000 0 EST} + {-463597200 -14400 1 EDT} + {-447271200 -18000 0 EST} + {-431542800 -14400 1 EDT} + {-415821600 -18000 0 EST} + {-400093200 -14400 1 EDT} + {-384372000 -18000 0 EST} + {-368643600 -14400 1 EDT} + {-352922400 -18000 0 EST} + {-337194000 -14400 1 EDT} + {-321472800 -18000 0 EST} + {-305744400 -14400 1 EDT} + {-289418400 -18000 0 EST} + {-273690000 -14400 1 EDT} + {-257968800 -18000 0 EST} + {-242240400 -14400 1 EDT} + {-226519200 -18000 0 EST} + {-210790800 -14400 1 EDT} + {-195069600 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-94676400 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Nipigon b/inkstitch/bin/tcl/tzdata/America/Nipigon new file mode 100644 index 0000000..30690aa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Nipigon @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nipigon) { + {-9223372036854775808 -21184 0 LMT} + {-2366734016 -18000 0 EST} + {-1632070800 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-923252400 -14400 1 EDT} + {-880218000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Nome b/inkstitch/bin/tcl/tzdata/America/Nome new file mode 100644 index 0000000..c095b79 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Nome @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nome) { + {-9223372036854775808 46701 0 LMT} + {-3225358701 -39698 0 LMT} + {-2188947502 -39600 0 NST} + {-883573200 -39600 0 NST} + {-880196400 -36000 1 NWT} + {-769395600 -36000 1 NPT} + {-765374400 -39600 0 NST} + {-757342800 -39600 0 NST} + {-86878800 -39600 0 BST} + {-31496400 -39600 0 BST} + {-21466800 -36000 1 BDT} + {-5745600 -39600 0 BST} + {9982800 -36000 1 BDT} + {25704000 -39600 0 BST} + {41432400 -36000 1 BDT} + {57758400 -39600 0 BST} + {73486800 -36000 1 BDT} + {89208000 -39600 0 BST} + {104936400 -36000 1 BDT} + {120657600 -39600 0 BST} + {126709200 -36000 1 BDT} + {152107200 -39600 0 BST} + {162392400 -36000 1 BDT} + {183556800 -39600 0 BST} + {199285200 -36000 1 BDT} + {215611200 -39600 0 BST} + {230734800 -36000 1 BDT} + {247060800 -39600 0 BST} + {262789200 -36000 1 BDT} + {278510400 -39600 0 BST} + {294238800 -36000 1 BDT} + {309960000 -39600 0 BST} + {325688400 -36000 1 BDT} + {341409600 -39600 0 BST} + {357138000 -36000 1 BDT} + {372859200 -39600 0 BST} + {388587600 -36000 1 BDT} + {404913600 -39600 0 BST} + {420037200 -36000 1 BDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Noronha b/inkstitch/bin/tcl/tzdata/America/Noronha new file mode 100644 index 0000000..94d6f42 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Noronha @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Noronha) { + {-9223372036854775808 -7780 0 LMT} + {-1767217820 -7200 0 FNT} + {-1206961200 -3600 1 FNST} + {-1191366000 -7200 0 FNT} + {-1175378400 -3600 1 FNST} + {-1159830000 -7200 0 FNT} + {-633823200 -3600 1 FNST} + {-622072800 -7200 0 FNT} + {-602287200 -3600 1 FNST} + {-591836400 -7200 0 FNT} + {-570751200 -3600 1 FNST} + {-560214000 -7200 0 FNT} + {-539128800 -3600 1 FNST} + {-531356400 -7200 0 FNT} + {-191368800 -3600 1 FNST} + {-184201200 -7200 0 FNT} + {-155167200 -3600 1 FNST} + {-150073200 -7200 0 FNT} + {-128901600 -3600 1 FNST} + {-121129200 -7200 0 FNT} + {-99957600 -3600 1 FNST} + {-89593200 -7200 0 FNT} + {-68421600 -3600 1 FNST} + {-57970800 -7200 0 FNT} + {499744800 -3600 1 FNST} + {511232400 -7200 0 FNT} + {530589600 -3600 1 FNST} + {540262800 -7200 0 FNT} + {562125600 -3600 1 FNST} + {571194000 -7200 0 FNT} + {592970400 -3600 1 FNST} + {602038800 -7200 0 FNT} + {624420000 -3600 1 FNST} + {634698000 -7200 0 FNT} + {653533200 -7200 0 FNT} + {938656800 -7200 0 FNT} + {938916000 -3600 1 FNST} + {951613200 -7200 0 FNT} + {970970400 -3600 1 FNST} + {971571600 -7200 0 FNT} + {1000346400 -7200 0 FNT} + {1003024800 -3600 1 FNST} + {1013907600 -7200 0 FNT} + {1033434000 -7200 0 FNT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah b/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah new file mode 100644 index 0000000..95407c6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/Beulah) { + {-9223372036854775808 -24427 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289120400 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center b/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center new file mode 100644 index 0000000..30782f7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/Center) { + {-9223372036854775808 -24312 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720003600 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem b/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem new file mode 100644 index 0000000..5a9d229 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/New_Salem) { + {-9223372036854775808 -24339 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067158800 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Ojinaga b/inkstitch/bin/tcl/tzdata/America/Ojinaga new file mode 100644 index 0000000..1172708 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Ojinaga @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Ojinaga) { + {-9223372036854775808 -25060 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {820476000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {883634400 -21600 0 CST} + {891766800 -21600 0 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1262329200 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Panama b/inkstitch/bin/tcl/tzdata/America/Panama new file mode 100644 index 0000000..3006785 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Panama @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Panama) { + {-9223372036854775808 -19088 0 LMT} + {-2524502512 -19176 0 CMT} + {-1946918424 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Pangnirtung b/inkstitch/bin/tcl/tzdata/America/Pangnirtung new file mode 100644 index 0000000..640808e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Pangnirtung @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Pangnirtung) { + {-9223372036854775808 0 0 zzz} + {-1546300800 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-147902400 -7200 1 ADDT} + {-131572800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Paramaribo b/inkstitch/bin/tcl/tzdata/America/Paramaribo new file mode 100644 index 0000000..d15f5c7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Paramaribo @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Paramaribo) { + {-9223372036854775808 -13240 0 LMT} + {-1861906760 -13252 0 PMT} + {-1104524348 -13236 0 PMT} + {-765317964 -12600 0 NEGT} + {185686200 -12600 0 SRT} + {465449400 -10800 0 SRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Phoenix b/inkstitch/bin/tcl/tzdata/America/Phoenix new file mode 100644 index 0000000..3d37bb4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Phoenix @@ -0,0 +1,17 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Phoenix) { + {-9223372036854775808 -26898 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-820519140 -25200 0 MST} + {-796841940 -25200 0 MST} + {-94669200 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-56221200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Port-au-Prince b/inkstitch/bin/tcl/tzdata/America/Port-au-Prince new file mode 100644 index 0000000..f1d7fc4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Port-au-Prince @@ -0,0 +1,217 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Port-au-Prince) { + {-9223372036854775808 -17360 0 LMT} + {-2524504240 -17340 0 PPMT} + {-1670483460 -18000 0 EST} + {421218000 -14400 1 EDT} + {436334400 -18000 0 EST} + {452062800 -14400 1 EDT} + {467784000 -18000 0 EST} + {483512400 -14400 1 EDT} + {499233600 -18000 0 EST} + {514962000 -14400 1 EDT} + {530683200 -18000 0 EST} + {546411600 -14400 1 EDT} + {562132800 -18000 0 EST} + {576050400 -14400 1 EDT} + {594194400 -18000 0 EST} + {607500000 -14400 1 EDT} + {625644000 -18000 0 EST} + {638949600 -14400 1 EDT} + {657093600 -18000 0 EST} + {671004000 -14400 1 EDT} + {688543200 -18000 0 EST} + {702453600 -14400 1 EDT} + {719992800 -18000 0 EST} + {733903200 -14400 1 EDT} + {752047200 -18000 0 EST} + {765352800 -14400 1 EDT} + {783496800 -18000 0 EST} + {796802400 -14400 1 EDT} + {814946400 -18000 0 EST} + {828856800 -14400 1 EDT} + {846396000 -18000 0 EST} + {860306400 -14400 1 EDT} + {877845600 -18000 0 EST} + {1112504400 -14400 1 EDT} + {1130644800 -18000 0 EST} + {1143954000 -14400 1 EDT} + {1162094400 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Port_of_Spain b/inkstitch/bin/tcl/tzdata/America/Port_of_Spain new file mode 100644 index 0000000..c360c87 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Port_of_Spain @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Port_of_Spain) { + {-9223372036854775808 -14764 0 LMT} + {-1825098836 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Porto_Acre b/inkstitch/bin/tcl/tzdata/America/Porto_Acre new file mode 100644 index 0000000..0626001 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Porto_Acre @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Rio_Branco)]} { + LoadTimeZoneFile America/Rio_Branco +} +set TZData(:America/Porto_Acre) $TZData(:America/Rio_Branco) diff --git a/inkstitch/bin/tcl/tzdata/America/Porto_Velho b/inkstitch/bin/tcl/tzdata/America/Porto_Velho new file mode 100644 index 0000000..ce611d2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Porto_Velho @@ -0,0 +1,35 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Porto_Velho) { + {-9223372036854775808 -15336 0 LMT} + {-1767210264 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Puerto_Rico b/inkstitch/bin/tcl/tzdata/America/Puerto_Rico new file mode 100644 index 0000000..0d5c9b4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Puerto_Rico @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Puerto_Rico) { + {-9223372036854775808 -15865 0 LMT} + {-2233035335 -14400 0 AST} + {-873057600 -10800 0 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Rainy_River b/inkstitch/bin/tcl/tzdata/America/Rainy_River new file mode 100644 index 0000000..a2b11aa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Rainy_River @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rainy_River) { + {-9223372036854775808 -22696 0 LMT} + {-2366732504 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-923248800 -18000 1 CDT} + {-880214400 -18000 0 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {136368000 -18000 1 CDT} + {152089200 -21600 0 CST} + {167817600 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet b/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet new file mode 100644 index 0000000..770ec5d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rankin_Inlet) { + {-9223372036854775808 0 0 zzz} + {-410227200 -21600 0 CST} + {-147895200 -14400 1 CDDT} + {-131565600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986112000 -18000 0 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Recife b/inkstitch/bin/tcl/tzdata/America/Recife new file mode 100644 index 0000000..f6ae00e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Recife @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Recife) { + {-9223372036854775808 -8376 0 LMT} + {-1767217224 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {971575200 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Regina b/inkstitch/bin/tcl/tzdata/America/Regina new file mode 100644 index 0000000..e42b5be --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Regina @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Regina) { + {-9223372036854775808 -25116 0 LMT} + {-2030202084 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1251651600 -21600 1 MDT} + {-1238349600 -25200 0 MST} + {-1220202000 -21600 1 MDT} + {-1206900000 -25200 0 MST} + {-1188752400 -21600 1 MDT} + {-1175450400 -25200 0 MST} + {-1156698000 -21600 1 MDT} + {-1144000800 -25200 0 MST} + {-1125248400 -21600 1 MDT} + {-1111946400 -25200 0 MST} + {-1032714000 -21600 1 MDT} + {-1016992800 -25200 0 MST} + {-1001264400 -21600 1 MDT} + {-986148000 -25200 0 MST} + {-969814800 -21600 1 MDT} + {-954093600 -25200 0 MST} + {-937760400 -21600 1 MDT} + {-922039200 -25200 0 MST} + {-906310800 -21600 1 MDT} + {-890589600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-748450800 -21600 1 MDT} + {-732729600 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-684342000 -21600 1 MDT} + {-671040000 -25200 0 MST} + {-652892400 -21600 1 MDT} + {-639590400 -25200 0 MST} + {-620838000 -21600 1 MDT} + {-608140800 -25200 0 MST} + {-589388400 -21600 1 MDT} + {-576086400 -25200 0 MST} + {-557938800 -21600 1 MDT} + {-544636800 -25200 0 MST} + {-526489200 -21600 1 MDT} + {-513187200 -25200 0 MST} + {-495039600 -21600 1 MDT} + {-481737600 -25200 0 MST} + {-463590000 -21600 1 MDT} + {-450288000 -25200 0 MST} + {-431535600 -21600 1 MDT} + {-418233600 -25200 0 MST} + {-400086000 -21600 1 MDT} + {-386784000 -25200 0 MST} + {-337186800 -21600 1 MDT} + {-321465600 -25200 0 MST} + {-305737200 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Resolute b/inkstitch/bin/tcl/tzdata/America/Resolute new file mode 100644 index 0000000..b4c0bab --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Resolute @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Resolute) { + {-9223372036854775808 0 0 zzz} + {-704937600 -21600 0 CST} + {-147895200 -14400 1 CDDT} + {-131565600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986112000 -18000 0 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162108800 -18000 0 EST} + {1173600000 -18000 0 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Rio_Branco b/inkstitch/bin/tcl/tzdata/America/Rio_Branco new file mode 100644 index 0000000..20889cb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Rio_Branco @@ -0,0 +1,36 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rio_Branco) { + {-9223372036854775808 -16272 0 LMT} + {-1767209328 -18000 0 ACT} + {-1206950400 -14400 1 ACST} + {-1191355200 -18000 0 ACT} + {-1175367600 -14400 1 ACST} + {-1159819200 -18000 0 ACT} + {-633812400 -14400 1 ACST} + {-622062000 -18000 0 ACT} + {-602276400 -14400 1 ACST} + {-591825600 -18000 0 ACT} + {-570740400 -14400 1 ACST} + {-560203200 -18000 0 ACT} + {-539118000 -14400 1 ACST} + {-531345600 -18000 0 ACT} + {-191358000 -14400 1 ACST} + {-184190400 -18000 0 ACT} + {-155156400 -14400 1 ACST} + {-150062400 -18000 0 ACT} + {-128890800 -14400 1 ACST} + {-121118400 -18000 0 ACT} + {-99946800 -14400 1 ACST} + {-89582400 -18000 0 ACT} + {-68410800 -14400 1 ACST} + {-57960000 -18000 0 ACT} + {499755600 -14400 1 ACST} + {511243200 -18000 0 ACT} + {530600400 -14400 1 ACST} + {540273600 -18000 0 ACT} + {562136400 -14400 1 ACST} + {571204800 -18000 0 ACT} + {590040000 -18000 0 ACT} + {1214283600 -14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Rosario b/inkstitch/bin/tcl/tzdata/America/Rosario new file mode 100644 index 0000000..6687f88 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Rosario @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Cordoba)]} { + LoadTimeZoneFile America/Argentina/Cordoba +} +set TZData(:America/Rosario) $TZData(:America/Argentina/Cordoba) diff --git a/inkstitch/bin/tcl/tzdata/America/Santa_Isabel b/inkstitch/bin/tcl/tzdata/America/Santa_Isabel new file mode 100644 index 0000000..87cb5a8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Santa_Isabel @@ -0,0 +1,284 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santa_Isabel) { + {-9223372036854775808 -27568 0 LMT} + {-1514736000 -25200 0 MST} + {-1451667600 -28800 0 PST} + {-1343062800 -25200 0 MST} + {-1234803600 -28800 0 PST} + {-1222963200 -25200 1 PDT} + {-1207242000 -28800 0 PST} + {-873820800 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-761677200 -28800 0 PST} + {-686073600 -25200 1 PDT} + {-661539600 -28800 0 PST} + {-504892800 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-283968000 -28800 0 PST} + {189331200 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {820483200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {978336000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1014192000 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1175421600 -25200 1 PDT} + {1193562000 -28800 0 PST} + {1207476000 -25200 1 PDT} + {1225011600 -28800 0 PST} + {1238925600 -25200 1 PDT} + {1256461200 -28800 0 PST} + {1270375200 -25200 1 PDT} + {1288515600 -28800 0 PST} + {1301824800 -25200 1 PDT} + {1319965200 -28800 0 PST} + {1333274400 -25200 1 PDT} + {1351414800 -28800 0 PST} + {1365328800 -25200 1 PDT} + {1382864400 -28800 0 PST} + {1396778400 -25200 1 PDT} + {1414314000 -28800 0 PST} + {1428228000 -25200 1 PDT} + {1445763600 -28800 0 PST} + {1459677600 -25200 1 PDT} + {1477818000 -28800 0 PST} + {1491127200 -25200 1 PDT} + {1509267600 -28800 0 PST} + {1522576800 -25200 1 PDT} + {1540717200 -28800 0 PST} + {1554631200 -25200 1 PDT} + {1572166800 -28800 0 PST} + {1586080800 -25200 1 PDT} + {1603616400 -28800 0 PST} + {1617530400 -25200 1 PDT} + {1635670800 -28800 0 PST} + {1648980000 -25200 1 PDT} + {1667120400 -28800 0 PST} + {1680429600 -25200 1 PDT} + {1698570000 -28800 0 PST} + {1712484000 -25200 1 PDT} + {1730019600 -28800 0 PST} + {1743933600 -25200 1 PDT} + {1761469200 -28800 0 PST} + {1775383200 -25200 1 PDT} + {1792918800 -28800 0 PST} + {1806832800 -25200 1 PDT} + {1824973200 -28800 0 PST} + {1838282400 -25200 1 PDT} + {1856422800 -28800 0 PST} + {1869732000 -25200 1 PDT} + {1887872400 -28800 0 PST} + {1901786400 -25200 1 PDT} + {1919322000 -28800 0 PST} + {1933236000 -25200 1 PDT} + {1950771600 -28800 0 PST} + {1964685600 -25200 1 PDT} + {1982826000 -28800 0 PST} + {1996135200 -25200 1 PDT} + {2014275600 -28800 0 PST} + {2027584800 -25200 1 PDT} + {2045725200 -28800 0 PST} + {2059034400 -25200 1 PDT} + {2077174800 -28800 0 PST} + {2091088800 -25200 1 PDT} + {2108624400 -28800 0 PST} + {2122538400 -25200 1 PDT} + {2140074000 -28800 0 PST} + {2153988000 -25200 1 PDT} + {2172128400 -28800 0 PST} + {2185437600 -25200 1 PDT} + {2203578000 -28800 0 PST} + {2216887200 -25200 1 PDT} + {2235027600 -28800 0 PST} + {2248941600 -25200 1 PDT} + {2266477200 -28800 0 PST} + {2280391200 -25200 1 PDT} + {2297926800 -28800 0 PST} + {2311840800 -25200 1 PDT} + {2329376400 -28800 0 PST} + {2343290400 -25200 1 PDT} + {2361430800 -28800 0 PST} + {2374740000 -25200 1 PDT} + {2392880400 -28800 0 PST} + {2406189600 -25200 1 PDT} + {2424330000 -28800 0 PST} + {2438244000 -25200 1 PDT} + {2455779600 -28800 0 PST} + {2469693600 -25200 1 PDT} + {2487229200 -28800 0 PST} + {2501143200 -25200 1 PDT} + {2519283600 -28800 0 PST} + {2532592800 -25200 1 PDT} + {2550733200 -28800 0 PST} + {2564042400 -25200 1 PDT} + {2582182800 -28800 0 PST} + {2596096800 -25200 1 PDT} + {2613632400 -28800 0 PST} + {2627546400 -25200 1 PDT} + {2645082000 -28800 0 PST} + {2658996000 -25200 1 PDT} + {2676531600 -28800 0 PST} + {2690445600 -25200 1 PDT} + {2708586000 -28800 0 PST} + {2721895200 -25200 1 PDT} + {2740035600 -28800 0 PST} + {2753344800 -25200 1 PDT} + {2771485200 -28800 0 PST} + {2785399200 -25200 1 PDT} + {2802934800 -28800 0 PST} + {2816848800 -25200 1 PDT} + {2834384400 -28800 0 PST} + {2848298400 -25200 1 PDT} + {2866438800 -28800 0 PST} + {2879748000 -25200 1 PDT} + {2897888400 -28800 0 PST} + {2911197600 -25200 1 PDT} + {2929338000 -28800 0 PST} + {2942647200 -25200 1 PDT} + {2960787600 -28800 0 PST} + {2974701600 -25200 1 PDT} + {2992237200 -28800 0 PST} + {3006151200 -25200 1 PDT} + {3023686800 -28800 0 PST} + {3037600800 -25200 1 PDT} + {3055741200 -28800 0 PST} + {3069050400 -25200 1 PDT} + {3087190800 -28800 0 PST} + {3100500000 -25200 1 PDT} + {3118640400 -28800 0 PST} + {3132554400 -25200 1 PDT} + {3150090000 -28800 0 PST} + {3164004000 -25200 1 PDT} + {3181539600 -28800 0 PST} + {3195453600 -25200 1 PDT} + {3212989200 -28800 0 PST} + {3226903200 -25200 1 PDT} + {3245043600 -28800 0 PST} + {3258352800 -25200 1 PDT} + {3276493200 -28800 0 PST} + {3289802400 -25200 1 PDT} + {3307942800 -28800 0 PST} + {3321856800 -25200 1 PDT} + {3339392400 -28800 0 PST} + {3353306400 -25200 1 PDT} + {3370842000 -28800 0 PST} + {3384756000 -25200 1 PDT} + {3402896400 -28800 0 PST} + {3416205600 -25200 1 PDT} + {3434346000 -28800 0 PST} + {3447655200 -25200 1 PDT} + {3465795600 -28800 0 PST} + {3479709600 -25200 1 PDT} + {3497245200 -28800 0 PST} + {3511159200 -25200 1 PDT} + {3528694800 -28800 0 PST} + {3542608800 -25200 1 PDT} + {3560144400 -28800 0 PST} + {3574058400 -25200 1 PDT} + {3592198800 -28800 0 PST} + {3605508000 -25200 1 PDT} + {3623648400 -28800 0 PST} + {3636957600 -25200 1 PDT} + {3655098000 -28800 0 PST} + {3669012000 -25200 1 PDT} + {3686547600 -28800 0 PST} + {3700461600 -25200 1 PDT} + {3717997200 -28800 0 PST} + {3731911200 -25200 1 PDT} + {3750051600 -28800 0 PST} + {3763360800 -25200 1 PDT} + {3781501200 -28800 0 PST} + {3794810400 -25200 1 PDT} + {3812950800 -28800 0 PST} + {3826260000 -25200 1 PDT} + {3844400400 -28800 0 PST} + {3858314400 -25200 1 PDT} + {3875850000 -28800 0 PST} + {3889764000 -25200 1 PDT} + {3907299600 -28800 0 PST} + {3921213600 -25200 1 PDT} + {3939354000 -28800 0 PST} + {3952663200 -25200 1 PDT} + {3970803600 -28800 0 PST} + {3984112800 -25200 1 PDT} + {4002253200 -28800 0 PST} + {4016167200 -25200 1 PDT} + {4033702800 -28800 0 PST} + {4047616800 -25200 1 PDT} + {4065152400 -28800 0 PST} + {4079066400 -25200 1 PDT} + {4096602000 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Santarem b/inkstitch/bin/tcl/tzdata/America/Santarem new file mode 100644 index 0000000..b6e9264 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Santarem @@ -0,0 +1,36 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santarem) { + {-9223372036854775808 -13128 0 LMT} + {-1767212472 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {1214280000 -10800 0 BRT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Santiago b/inkstitch/bin/tcl/tzdata/America/Santiago new file mode 100644 index 0000000..44be9f8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Santiago @@ -0,0 +1,291 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santiago) { + {-9223372036854775808 -16966 0 LMT} + {-2524504634 -16966 0 SMT} + {-1893439034 -18000 0 CLT} + {-1688410800 -16966 0 SMT} + {-1619983034 -14400 0 CLT} + {-1593806400 -16966 0 SMT} + {-1335986234 -18000 0 CLT} + {-1335985200 -14400 1 CLST} + {-1317585600 -18000 0 CLT} + {-1304362800 -14400 1 CLST} + {-1286049600 -18000 0 CLT} + {-1272826800 -14400 1 CLST} + {-1254513600 -18000 0 CLT} + {-1241290800 -14400 1 CLST} + {-1222977600 -18000 0 CLT} + {-1209754800 -14400 1 CLST} + {-1191355200 -18000 0 CLT} + {-1178132400 -14400 1 CLST} + {-870552000 -18000 0 CLT} + {-865278000 -14400 1 CLST} + {-740520000 -14400 1 CLST} + {-736376400 -18000 0 CLT} + {-718056000 -18000 0 CLT} + {-713646000 -14400 0 CLT} + {-36619200 -10800 1 CLST} + {-23922000 -14400 0 CLT} + {-3355200 -10800 1 CLST} + {7527600 -14400 0 CLT} + {24465600 -10800 1 CLST} + {37767600 -14400 0 CLT} + {55915200 -10800 1 CLST} + {69217200 -14400 0 CLT} + {87969600 -10800 1 CLST} + {100666800 -14400 0 CLT} + {118209600 -10800 1 CLST} + {132116400 -14400 0 CLT} + {150868800 -10800 1 CLST} + {163566000 -14400 0 CLT} + {182318400 -10800 1 CLST} + {195620400 -14400 0 CLT} + {213768000 -10800 1 CLST} + {227070000 -14400 0 CLT} + {245217600 -10800 1 CLST} + {258519600 -14400 0 CLT} + {277272000 -10800 1 CLST} + {289969200 -14400 0 CLT} + {308721600 -10800 1 CLST} + {321418800 -14400 0 CLT} + {340171200 -10800 1 CLST} + {353473200 -14400 0 CLT} + {371620800 -10800 1 CLST} + {384922800 -14400 0 CLT} + {403070400 -10800 1 CLST} + {416372400 -14400 0 CLT} + {434520000 -10800 1 CLST} + {447822000 -14400 0 CLT} + {466574400 -10800 1 CLST} + {479271600 -14400 0 CLT} + {498024000 -10800 1 CLST} + {510721200 -14400 0 CLT} + {529473600 -10800 1 CLST} + {545194800 -14400 0 CLT} + {560923200 -10800 1 CLST} + {574225200 -14400 0 CLT} + {591768000 -10800 1 CLST} + {605674800 -14400 0 CLT} + {624427200 -10800 1 CLST} + {637729200 -14400 0 CLT} + {653457600 -10800 1 CLST} + {668574000 -14400 0 CLT} + {687326400 -10800 1 CLST} + {700628400 -14400 0 CLT} + {718776000 -10800 1 CLST} + {732078000 -14400 0 CLT} + {750225600 -10800 1 CLST} + {763527600 -14400 0 CLT} + {781675200 -10800 1 CLST} + {794977200 -14400 0 CLT} + {813729600 -10800 1 CLST} + {826426800 -14400 0 CLT} + {845179200 -10800 1 CLST} + {859690800 -14400 0 CLT} + {876628800 -10800 1 CLST} + {889930800 -14400 0 CLT} + {906868800 -10800 1 CLST} + {923194800 -14400 0 CLT} + {939528000 -10800 1 CLST} + {952830000 -14400 0 CLT} + {971582400 -10800 1 CLST} + {984279600 -14400 0 CLT} + {1003032000 -10800 1 CLST} + {1015729200 -14400 0 CLT} + {1034481600 -10800 1 CLST} + {1047178800 -14400 0 CLT} + {1065931200 -10800 1 CLST} + {1079233200 -14400 0 CLT} + {1097380800 -10800 1 CLST} + {1110682800 -14400 0 CLT} + {1128830400 -10800 1 CLST} + {1142132400 -14400 0 CLT} + {1160884800 -10800 1 CLST} + {1173582000 -14400 0 CLT} + {1192334400 -10800 1 CLST} + {1206846000 -14400 0 CLT} + {1223784000 -10800 1 CLST} + {1237086000 -14400 0 CLT} + {1255233600 -10800 1 CLST} + {1270350000 -14400 0 CLT} + {1286683200 -10800 1 CLST} + {1304823600 -14400 0 CLT} + {1313899200 -10800 1 CLST} + {1335668400 -14400 0 CLT} + {1346558400 -10800 1 CLST} + {1367118000 -14400 0 CLT} + {1378612800 -10800 1 CLST} + {1398567600 -14400 0 CLT} + {1410062400 -10800 1 CLST} + {1430017200 -14400 0 CLT} + {1441512000 -10800 1 CLST} + {1461466800 -14400 0 CLT} + {1472961600 -10800 1 CLST} + {1492916400 -14400 0 CLT} + {1504411200 -10800 1 CLST} + {1524970800 -14400 0 CLT} + {1535860800 -10800 1 CLST} + {1556420400 -14400 0 CLT} + {1567915200 -10800 1 CLST} + {1587870000 -14400 0 CLT} + {1599364800 -10800 1 CLST} + {1619319600 -14400 0 CLT} + {1630814400 -10800 1 CLST} + {1650769200 -14400 0 CLT} + {1662264000 -10800 1 CLST} + {1682218800 -14400 0 CLT} + {1693713600 -10800 1 CLST} + {1714273200 -14400 0 CLT} + {1725768000 -10800 1 CLST} + {1745722800 -14400 0 CLT} + {1757217600 -10800 1 CLST} + {1777172400 -14400 0 CLT} + {1788667200 -10800 1 CLST} + {1808622000 -14400 0 CLT} + {1820116800 -10800 1 CLST} + {1840071600 -14400 0 CLT} + {1851566400 -10800 1 CLST} + {1872126000 -14400 0 CLT} + {1883016000 -10800 1 CLST} + {1903575600 -14400 0 CLT} + {1915070400 -10800 1 CLST} + {1935025200 -14400 0 CLT} + {1946520000 -10800 1 CLST} + {1966474800 -14400 0 CLT} + {1977969600 -10800 1 CLST} + {1997924400 -14400 0 CLT} + {2009419200 -10800 1 CLST} + {2029374000 -14400 0 CLT} + {2040868800 -10800 1 CLST} + {2061428400 -14400 0 CLT} + {2072318400 -10800 1 CLST} + {2092878000 -14400 0 CLT} + {2104372800 -10800 1 CLST} + {2124327600 -14400 0 CLT} + {2135822400 -10800 1 CLST} + {2155777200 -14400 0 CLT} + {2167272000 -10800 1 CLST} + {2187226800 -14400 0 CLT} + {2198721600 -10800 1 CLST} + {2219281200 -14400 0 CLT} + {2230171200 -10800 1 CLST} + {2250730800 -14400 0 CLT} + {2262225600 -10800 1 CLST} + {2282180400 -14400 0 CLT} + {2293675200 -10800 1 CLST} + {2313630000 -14400 0 CLT} + {2325124800 -10800 1 CLST} + {2345079600 -14400 0 CLT} + {2356574400 -10800 1 CLST} + {2376529200 -14400 0 CLT} + {2388024000 -10800 1 CLST} + {2408583600 -14400 0 CLT} + {2419473600 -10800 1 CLST} + {2440033200 -14400 0 CLT} + {2451528000 -10800 1 CLST} + {2471482800 -14400 0 CLT} + {2482977600 -10800 1 CLST} + {2502932400 -14400 0 CLT} + {2514427200 -10800 1 CLST} + {2534382000 -14400 0 CLT} + {2545876800 -10800 1 CLST} + {2565831600 -14400 0 CLT} + {2577326400 -10800 1 CLST} + {2597886000 -14400 0 CLT} + {2609380800 -10800 1 CLST} + {2629335600 -14400 0 CLT} + {2640830400 -10800 1 CLST} + {2660785200 -14400 0 CLT} + {2672280000 -10800 1 CLST} + {2692234800 -14400 0 CLT} + {2703729600 -10800 1 CLST} + {2723684400 -14400 0 CLT} + {2735179200 -10800 1 CLST} + {2755738800 -14400 0 CLT} + {2766628800 -10800 1 CLST} + {2787188400 -14400 0 CLT} + {2798683200 -10800 1 CLST} + {2818638000 -14400 0 CLT} + {2830132800 -10800 1 CLST} + {2850087600 -14400 0 CLT} + {2861582400 -10800 1 CLST} + {2881537200 -14400 0 CLT} + {2893032000 -10800 1 CLST} + {2912986800 -14400 0 CLT} + {2924481600 -10800 1 CLST} + {2945041200 -14400 0 CLT} + {2955931200 -10800 1 CLST} + {2976490800 -14400 0 CLT} + {2987985600 -10800 1 CLST} + {3007940400 -14400 0 CLT} + {3019435200 -10800 1 CLST} + {3039390000 -14400 0 CLT} + {3050884800 -10800 1 CLST} + {3070839600 -14400 0 CLT} + {3082334400 -10800 1 CLST} + {3102894000 -14400 0 CLT} + {3113784000 -10800 1 CLST} + {3134343600 -14400 0 CLT} + {3145838400 -10800 1 CLST} + {3165793200 -14400 0 CLT} + {3177288000 -10800 1 CLST} + {3197242800 -14400 0 CLT} + {3208737600 -10800 1 CLST} + {3228692400 -14400 0 CLT} + {3240187200 -10800 1 CLST} + {3260142000 -14400 0 CLT} + {3271636800 -10800 1 CLST} + {3292196400 -14400 0 CLT} + {3303086400 -10800 1 CLST} + {3323646000 -14400 0 CLT} + {3335140800 -10800 1 CLST} + {3355095600 -14400 0 CLT} + {3366590400 -10800 1 CLST} + {3386545200 -14400 0 CLT} + {3398040000 -10800 1 CLST} + {3417994800 -14400 0 CLT} + {3429489600 -10800 1 CLST} + {3449444400 -14400 0 CLT} + {3460939200 -10800 1 CLST} + {3481498800 -14400 0 CLT} + {3492993600 -10800 1 CLST} + {3512948400 -14400 0 CLT} + {3524443200 -10800 1 CLST} + {3544398000 -14400 0 CLT} + {3555892800 -10800 1 CLST} + {3575847600 -14400 0 CLT} + {3587342400 -10800 1 CLST} + {3607297200 -14400 0 CLT} + {3618792000 -10800 1 CLST} + {3639351600 -14400 0 CLT} + {3650241600 -10800 1 CLST} + {3670801200 -14400 0 CLT} + {3682296000 -10800 1 CLST} + {3702250800 -14400 0 CLT} + {3713745600 -10800 1 CLST} + {3733700400 -14400 0 CLT} + {3745195200 -10800 1 CLST} + {3765150000 -14400 0 CLT} + {3776644800 -10800 1 CLST} + {3796599600 -14400 0 CLT} + {3808094400 -10800 1 CLST} + {3828654000 -14400 0 CLT} + {3839544000 -10800 1 CLST} + {3860103600 -14400 0 CLT} + {3871598400 -10800 1 CLST} + {3891553200 -14400 0 CLT} + {3903048000 -10800 1 CLST} + {3923002800 -14400 0 CLT} + {3934497600 -10800 1 CLST} + {3954452400 -14400 0 CLT} + {3965947200 -10800 1 CLST} + {3986506800 -14400 0 CLT} + {3997396800 -10800 1 CLST} + {4017956400 -14400 0 CLT} + {4029451200 -10800 1 CLST} + {4049406000 -14400 0 CLT} + {4060900800 -10800 1 CLST} + {4080855600 -14400 0 CLT} + {4092350400 -10800 1 CLST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Santo_Domingo b/inkstitch/bin/tcl/tzdata/America/Santo_Domingo new file mode 100644 index 0000000..7706918 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Santo_Domingo @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santo_Domingo) { + {-9223372036854775808 -16776 0 LMT} + {-2524504824 -16800 0 SDMT} + {-1159773600 -18000 0 EST} + {-100119600 -14400 1 EDT} + {-89668800 -18000 0 EST} + {-5770800 -16200 1 EHDT} + {4422600 -18000 0 EST} + {25678800 -16200 1 EHDT} + {33193800 -18000 0 EST} + {57733200 -16200 1 EHDT} + {64816200 -18000 0 EST} + {89182800 -16200 1 EHDT} + {96438600 -18000 0 EST} + {120632400 -16200 1 EHDT} + {127974600 -18000 0 EST} + {152082000 -14400 0 AST} + {975823200 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Sao_Paulo b/inkstitch/bin/tcl/tzdata/America/Sao_Paulo new file mode 100644 index 0000000..8d70063 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Sao_Paulo @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Sao_Paulo) { + {-9223372036854775808 -11188 0 LMT} + {-1767214412 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-195429600 -7200 1 BRST} + {-189381600 -7200 0 BRT} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {656478000 -7200 1 BRST} + {666756000 -10800 0 BRT} + {687927600 -7200 1 BRST} + {697600800 -10800 0 BRT} + {719982000 -7200 1 BRST} + {728445600 -10800 0 BRT} + {750826800 -7200 1 BRST} + {761709600 -10800 0 BRT} + {782276400 -7200 1 BRST} + {793159200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1066532400 -7200 1 BRST} + {1076810400 -10800 0 BRT} + {1099364400 -7200 1 BRST} + {1108864800 -10800 0 BRT} + {1129431600 -7200 1 BRST} + {1140314400 -10800 0 BRT} + {1162695600 -7200 1 BRST} + {1172368800 -10800 0 BRT} + {1192330800 -7200 1 BRST} + {1203213600 -10800 0 BRT} + {1224385200 -7200 1 BRST} + {1234663200 -10800 0 BRT} + {1255834800 -7200 1 BRST} + {1266717600 -10800 0 BRT} + {1287284400 -7200 1 BRST} + {1298167200 -10800 0 BRT} + {1318734000 -7200 1 BRST} + {1330221600 -10800 0 BRT} + {1350788400 -7200 1 BRST} + {1361066400 -10800 0 BRT} + {1382238000 -7200 1 BRST} + {1392516000 -10800 0 BRT} + {1413687600 -7200 1 BRST} + {1424570400 -10800 0 BRT} + {1445137200 -7200 1 BRST} + {1456020000 -10800 0 BRT} + {1476586800 -7200 1 BRST} + {1487469600 -10800 0 BRT} + {1508036400 -7200 1 BRST} + {1518919200 -10800 0 BRT} + {1540090800 -7200 1 BRST} + {1550368800 -10800 0 BRT} + {1571540400 -7200 1 BRST} + {1581818400 -10800 0 BRT} + {1602990000 -7200 1 BRST} + {1613872800 -10800 0 BRT} + {1634439600 -7200 1 BRST} + {1645322400 -10800 0 BRT} + {1665889200 -7200 1 BRST} + {1677376800 -10800 0 BRT} + {1697338800 -7200 1 BRST} + {1708221600 -10800 0 BRT} + {1729393200 -7200 1 BRST} + {1739671200 -10800 0 BRT} + {1760842800 -7200 1 BRST} + {1771725600 -10800 0 BRT} + {1792292400 -7200 1 BRST} + {1803175200 -10800 0 BRT} + {1823742000 -7200 1 BRST} + {1834624800 -10800 0 BRT} + {1855191600 -7200 1 BRST} + {1866074400 -10800 0 BRT} + {1887246000 -7200 1 BRST} + {1897524000 -10800 0 BRT} + {1918695600 -7200 1 BRST} + {1928973600 -10800 0 BRT} + {1950145200 -7200 1 BRST} + {1960423200 -10800 0 BRT} + {1981594800 -7200 1 BRST} + {1992477600 -10800 0 BRT} + {2013044400 -7200 1 BRST} + {2024532000 -10800 0 BRT} + {2044494000 -7200 1 BRST} + {2055376800 -10800 0 BRT} + {2076548400 -7200 1 BRST} + {2086826400 -10800 0 BRT} + {2107998000 -7200 1 BRST} + {2118880800 -10800 0 BRT} + {2139447600 -7200 1 BRST} + {2150330400 -10800 0 BRT} + {2170897200 -7200 1 BRST} + {2181780000 -10800 0 BRT} + {2202346800 -7200 1 BRST} + {2213229600 -10800 0 BRT} + {2234401200 -7200 1 BRST} + {2244679200 -10800 0 BRT} + {2265850800 -7200 1 BRST} + {2276128800 -10800 0 BRT} + {2297300400 -7200 1 BRST} + {2307578400 -10800 0 BRT} + {2328750000 -7200 1 BRST} + {2339632800 -10800 0 BRT} + {2360199600 -7200 1 BRST} + {2371082400 -10800 0 BRT} + {2391649200 -7200 1 BRST} + {2402532000 -10800 0 BRT} + {2423703600 -7200 1 BRST} + {2433981600 -10800 0 BRT} + {2455153200 -7200 1 BRST} + {2465431200 -10800 0 BRT} + {2486602800 -7200 1 BRST} + {2497485600 -10800 0 BRT} + {2518052400 -7200 1 BRST} + {2528935200 -10800 0 BRT} + {2549502000 -7200 1 BRST} + {2560384800 -10800 0 BRT} + {2580951600 -7200 1 BRST} + {2591834400 -10800 0 BRT} + {2613006000 -7200 1 BRST} + {2623284000 -10800 0 BRT} + {2644455600 -7200 1 BRST} + {2654733600 -10800 0 BRT} + {2675905200 -7200 1 BRST} + {2686788000 -10800 0 BRT} + {2707354800 -7200 1 BRST} + {2718237600 -10800 0 BRT} + {2738804400 -7200 1 BRST} + {2749687200 -10800 0 BRT} + {2770858800 -7200 1 BRST} + {2781136800 -10800 0 BRT} + {2802308400 -7200 1 BRST} + {2812586400 -10800 0 BRT} + {2833758000 -7200 1 BRST} + {2844036000 -10800 0 BRT} + {2865207600 -7200 1 BRST} + {2876090400 -10800 0 BRT} + {2896657200 -7200 1 BRST} + {2907540000 -10800 0 BRT} + {2928106800 -7200 1 BRST} + {2938989600 -10800 0 BRT} + {2960161200 -7200 1 BRST} + {2970439200 -10800 0 BRT} + {2991610800 -7200 1 BRST} + {3001888800 -10800 0 BRT} + {3023060400 -7200 1 BRST} + {3033943200 -10800 0 BRT} + {3054510000 -7200 1 BRST} + {3065392800 -10800 0 BRT} + {3085959600 -7200 1 BRST} + {3096842400 -10800 0 BRT} + {3118014000 -7200 1 BRST} + {3128292000 -10800 0 BRT} + {3149463600 -7200 1 BRST} + {3159741600 -10800 0 BRT} + {3180913200 -7200 1 BRST} + {3191191200 -10800 0 BRT} + {3212362800 -7200 1 BRST} + {3223245600 -10800 0 BRT} + {3243812400 -7200 1 BRST} + {3254695200 -10800 0 BRT} + {3275262000 -7200 1 BRST} + {3286144800 -10800 0 BRT} + {3307316400 -7200 1 BRST} + {3317594400 -10800 0 BRT} + {3338766000 -7200 1 BRST} + {3349044000 -10800 0 BRT} + {3370215600 -7200 1 BRST} + {3381098400 -10800 0 BRT} + {3401665200 -7200 1 BRST} + {3412548000 -10800 0 BRT} + {3433114800 -7200 1 BRST} + {3443997600 -10800 0 BRT} + {3464564400 -7200 1 BRST} + {3475447200 -10800 0 BRT} + {3496618800 -7200 1 BRST} + {3506896800 -10800 0 BRT} + {3528068400 -7200 1 BRST} + {3538346400 -10800 0 BRT} + {3559518000 -7200 1 BRST} + {3570400800 -10800 0 BRT} + {3590967600 -7200 1 BRST} + {3601850400 -10800 0 BRT} + {3622417200 -7200 1 BRST} + {3633300000 -10800 0 BRT} + {3654471600 -7200 1 BRST} + {3664749600 -10800 0 BRT} + {3685921200 -7200 1 BRST} + {3696199200 -10800 0 BRT} + {3717370800 -7200 1 BRST} + {3727648800 -10800 0 BRT} + {3748820400 -7200 1 BRST} + {3759703200 -10800 0 BRT} + {3780270000 -7200 1 BRST} + {3791152800 -10800 0 BRT} + {3811719600 -7200 1 BRST} + {3822602400 -10800 0 BRT} + {3843774000 -7200 1 BRST} + {3854052000 -10800 0 BRT} + {3875223600 -7200 1 BRST} + {3885501600 -10800 0 BRT} + {3906673200 -7200 1 BRST} + {3917556000 -10800 0 BRT} + {3938122800 -7200 1 BRST} + {3949005600 -10800 0 BRT} + {3969572400 -7200 1 BRST} + {3980455200 -10800 0 BRT} + {4001626800 -7200 1 BRST} + {4011904800 -10800 0 BRT} + {4033076400 -7200 1 BRST} + {4043354400 -10800 0 BRT} + {4064526000 -7200 1 BRST} + {4074804000 -10800 0 BRT} + {4095975600 -7200 1 BRST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Scoresbysund b/inkstitch/bin/tcl/tzdata/America/Scoresbysund new file mode 100644 index 0000000..74a332c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Scoresbysund @@ -0,0 +1,246 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Scoresbysund) { + {-9223372036854775808 -5272 0 LMT} + {-1686090728 -7200 0 CGT} + {323841600 -3600 0 CGST} + {338961600 -7200 0 CGT} + {354679200 0 0 EGST} + {370400400 -3600 0 EGT} + {386125200 0 1 EGST} + {401850000 -3600 0 EGT} + {417574800 0 1 EGST} + {433299600 -3600 0 EGT} + {449024400 0 1 EGST} + {465354000 -3600 0 EGT} + {481078800 0 1 EGST} + {496803600 -3600 0 EGT} + {512528400 0 1 EGST} + {528253200 -3600 0 EGT} + {543978000 0 1 EGST} + {559702800 -3600 0 EGT} + {575427600 0 1 EGST} + {591152400 -3600 0 EGT} + {606877200 0 1 EGST} + {622602000 -3600 0 EGT} + {638326800 0 1 EGST} + {654656400 -3600 0 EGT} + {670381200 0 1 EGST} + {686106000 -3600 0 EGT} + {701830800 0 1 EGST} + {717555600 -3600 0 EGT} + {733280400 0 1 EGST} + {749005200 -3600 0 EGT} + {764730000 0 1 EGST} + {780454800 -3600 0 EGT} + {796179600 0 1 EGST} + {811904400 -3600 0 EGT} + {828234000 0 1 EGST} + {846378000 -3600 0 EGT} + {859683600 0 1 EGST} + {877827600 -3600 0 EGT} + {891133200 0 1 EGST} + {909277200 -3600 0 EGT} + {922582800 0 1 EGST} + {941331600 -3600 0 EGT} + {954032400 0 1 EGST} + {972781200 -3600 0 EGT} + {985482000 0 1 EGST} + {1004230800 -3600 0 EGT} + {1017536400 0 1 EGST} + {1035680400 -3600 0 EGT} + {1048986000 0 1 EGST} + {1067130000 -3600 0 EGT} + {1080435600 0 1 EGST} + {1099184400 -3600 0 EGT} + {1111885200 0 1 EGST} + {1130634000 -3600 0 EGT} + {1143334800 0 1 EGST} + {1162083600 -3600 0 EGT} + {1174784400 0 1 EGST} + {1193533200 -3600 0 EGT} + {1206838800 0 1 EGST} + {1224982800 -3600 0 EGT} + {1238288400 0 1 EGST} + {1256432400 -3600 0 EGT} + {1269738000 0 1 EGST} + {1288486800 -3600 0 EGT} + {1301187600 0 1 EGST} + {1319936400 -3600 0 EGT} + {1332637200 0 1 EGST} + {1351386000 -3600 0 EGT} + {1364691600 0 1 EGST} + {1382835600 -3600 0 EGT} + {1396141200 0 1 EGST} + {1414285200 -3600 0 EGT} + {1427590800 0 1 EGST} + {1445734800 -3600 0 EGT} + {1459040400 0 1 EGST} + {1477789200 -3600 0 EGT} + {1490490000 0 1 EGST} + {1509238800 -3600 0 EGT} + {1521939600 0 1 EGST} + {1540688400 -3600 0 EGT} + {1553994000 0 1 EGST} + {1572138000 -3600 0 EGT} + {1585443600 0 1 EGST} + {1603587600 -3600 0 EGT} + {1616893200 0 1 EGST} + {1635642000 -3600 0 EGT} + {1648342800 0 1 EGST} + {1667091600 -3600 0 EGT} + {1679792400 0 1 EGST} + {1698541200 -3600 0 EGT} + {1711846800 0 1 EGST} + {1729990800 -3600 0 EGT} + {1743296400 0 1 EGST} + {1761440400 -3600 0 EGT} + {1774746000 0 1 EGST} + {1792890000 -3600 0 EGT} + {1806195600 0 1 EGST} + {1824944400 -3600 0 EGT} + {1837645200 0 1 EGST} + {1856394000 -3600 0 EGT} + {1869094800 0 1 EGST} + {1887843600 -3600 0 EGT} + {1901149200 0 1 EGST} + {1919293200 -3600 0 EGT} + {1932598800 0 1 EGST} + {1950742800 -3600 0 EGT} + {1964048400 0 1 EGST} + {1982797200 -3600 0 EGT} + {1995498000 0 1 EGST} + {2014246800 -3600 0 EGT} + {2026947600 0 1 EGST} + {2045696400 -3600 0 EGT} + {2058397200 0 1 EGST} + {2077146000 -3600 0 EGT} + {2090451600 0 1 EGST} + {2108595600 -3600 0 EGT} + {2121901200 0 1 EGST} + {2140045200 -3600 0 EGT} + {2153350800 0 1 EGST} + {2172099600 -3600 0 EGT} + {2184800400 0 1 EGST} + {2203549200 -3600 0 EGT} + {2216250000 0 1 EGST} + {2234998800 -3600 0 EGT} + {2248304400 0 1 EGST} + {2266448400 -3600 0 EGT} + {2279754000 0 1 EGST} + {2297898000 -3600 0 EGT} + {2311203600 0 1 EGST} + {2329347600 -3600 0 EGT} + {2342653200 0 1 EGST} + {2361402000 -3600 0 EGT} + {2374102800 0 1 EGST} + {2392851600 -3600 0 EGT} + {2405552400 0 1 EGST} + {2424301200 -3600 0 EGT} + {2437606800 0 1 EGST} + {2455750800 -3600 0 EGT} + {2469056400 0 1 EGST} + {2487200400 -3600 0 EGT} + {2500506000 0 1 EGST} + {2519254800 -3600 0 EGT} + {2531955600 0 1 EGST} + {2550704400 -3600 0 EGT} + {2563405200 0 1 EGST} + {2582154000 -3600 0 EGT} + {2595459600 0 1 EGST} + {2613603600 -3600 0 EGT} + {2626909200 0 1 EGST} + {2645053200 -3600 0 EGT} + {2658358800 0 1 EGST} + {2676502800 -3600 0 EGT} + {2689808400 0 1 EGST} + {2708557200 -3600 0 EGT} + {2721258000 0 1 EGST} + {2740006800 -3600 0 EGT} + {2752707600 0 1 EGST} + {2771456400 -3600 0 EGT} + {2784762000 0 1 EGST} + {2802906000 -3600 0 EGT} + {2816211600 0 1 EGST} + {2834355600 -3600 0 EGT} + {2847661200 0 1 EGST} + {2866410000 -3600 0 EGT} + {2879110800 0 1 EGST} + {2897859600 -3600 0 EGT} + {2910560400 0 1 EGST} + {2929309200 -3600 0 EGT} + {2942010000 0 1 EGST} + {2960758800 -3600 0 EGT} + {2974064400 0 1 EGST} + {2992208400 -3600 0 EGT} + {3005514000 0 1 EGST} + {3023658000 -3600 0 EGT} + {3036963600 0 1 EGST} + {3055712400 -3600 0 EGT} + {3068413200 0 1 EGST} + {3087162000 -3600 0 EGT} + {3099862800 0 1 EGST} + {3118611600 -3600 0 EGT} + {3131917200 0 1 EGST} + {3150061200 -3600 0 EGT} + {3163366800 0 1 EGST} + {3181510800 -3600 0 EGT} + {3194816400 0 1 EGST} + {3212960400 -3600 0 EGT} + {3226266000 0 1 EGST} + {3245014800 -3600 0 EGT} + {3257715600 0 1 EGST} + {3276464400 -3600 0 EGT} + {3289165200 0 1 EGST} + {3307914000 -3600 0 EGT} + {3321219600 0 1 EGST} + {3339363600 -3600 0 EGT} + {3352669200 0 1 EGST} + {3370813200 -3600 0 EGT} + {3384118800 0 1 EGST} + {3402867600 -3600 0 EGT} + {3415568400 0 1 EGST} + {3434317200 -3600 0 EGT} + {3447018000 0 1 EGST} + {3465766800 -3600 0 EGT} + {3479072400 0 1 EGST} + {3497216400 -3600 0 EGT} + {3510522000 0 1 EGST} + {3528666000 -3600 0 EGT} + {3541971600 0 1 EGST} + {3560115600 -3600 0 EGT} + {3573421200 0 1 EGST} + {3592170000 -3600 0 EGT} + {3604870800 0 1 EGST} + {3623619600 -3600 0 EGT} + {3636320400 0 1 EGST} + {3655069200 -3600 0 EGT} + {3668374800 0 1 EGST} + {3686518800 -3600 0 EGT} + {3699824400 0 1 EGST} + {3717968400 -3600 0 EGT} + {3731274000 0 1 EGST} + {3750022800 -3600 0 EGT} + {3762723600 0 1 EGST} + {3781472400 -3600 0 EGT} + {3794173200 0 1 EGST} + {3812922000 -3600 0 EGT} + {3825622800 0 1 EGST} + {3844371600 -3600 0 EGT} + {3857677200 0 1 EGST} + {3875821200 -3600 0 EGT} + {3889126800 0 1 EGST} + {3907270800 -3600 0 EGT} + {3920576400 0 1 EGST} + {3939325200 -3600 0 EGT} + {3952026000 0 1 EGST} + {3970774800 -3600 0 EGT} + {3983475600 0 1 EGST} + {4002224400 -3600 0 EGT} + {4015530000 0 1 EGST} + {4033674000 -3600 0 EGT} + {4046979600 0 1 EGST} + {4065123600 -3600 0 EGT} + {4078429200 0 1 EGST} + {4096573200 -3600 0 EGT} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Shiprock b/inkstitch/bin/tcl/tzdata/America/Shiprock new file mode 100644 index 0000000..995d25d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Shiprock @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:America/Shiprock) $TZData(:America/Denver) diff --git a/inkstitch/bin/tcl/tzdata/America/Sitka b/inkstitch/bin/tcl/tzdata/America/Sitka new file mode 100644 index 0000000..8c53d93 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Sitka @@ -0,0 +1,275 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Sitka) { + {-9223372036854775808 53927 0 LMT} + {-3225365927 -32473 0 LMT} + {-2188954727 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/St_Barthelemy b/inkstitch/bin/tcl/tzdata/America/St_Barthelemy new file mode 100644 index 0000000..25c114a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Barthelemy @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Guadeloupe)]} { + LoadTimeZoneFile America/Guadeloupe +} +set TZData(:America/St_Barthelemy) $TZData(:America/Guadeloupe) diff --git a/inkstitch/bin/tcl/tzdata/America/St_Johns b/inkstitch/bin/tcl/tzdata/America/St_Johns new file mode 100644 index 0000000..1492961 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Johns @@ -0,0 +1,372 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Johns) { + {-9223372036854775808 -12652 0 LMT} + {-2713897748 -12652 0 NST} + {-1664130548 -9052 1 NDT} + {-1650137348 -12652 0 NST} + {-1640982548 -12652 0 NST} + {-1632076148 -9052 1 NDT} + {-1615145348 -12652 0 NST} + {-1609446548 -12652 0 NST} + {-1598650148 -9052 1 NDT} + {-1590100148 -12652 0 NST} + {-1567286948 -9052 1 NDT} + {-1551565748 -12652 0 NST} + {-1535837348 -9052 1 NDT} + {-1520116148 -12652 0 NST} + {-1503782948 -9052 1 NDT} + {-1488666548 -12652 0 NST} + {-1472333348 -9052 1 NDT} + {-1457216948 -12652 0 NST} + {-1440883748 -9052 1 NDT} + {-1425767348 -12652 0 NST} + {-1409434148 -9052 1 NDT} + {-1394317748 -12652 0 NST} + {-1377984548 -9052 1 NDT} + {-1362263348 -12652 0 NST} + {-1346534948 -9052 1 NDT} + {-1330813748 -12652 0 NST} + {-1314480548 -9052 1 NDT} + {-1299364148 -12652 0 NST} + {-1283030948 -9052 1 NDT} + {-1267914548 -12652 0 NST} + {-1251581348 -9052 1 NDT} + {-1236464948 -12652 0 NST} + {-1220131748 -9052 1 NDT} + {-1205015348 -12652 0 NST} + {-1188682148 -9052 1 NDT} + {-1172960948 -12652 0 NST} + {-1156627748 -9052 1 NDT} + {-1141511348 -12652 0 NST} + {-1125178148 -9052 1 NDT} + {-1110061748 -12652 0 NST} + {-1096921748 -12600 0 NST} + {-1093728600 -9000 1 NDT} + {-1078612200 -12600 0 NST} + {-1061670600 -9000 1 NDT} + {-1048973400 -12600 0 NST} + {-1030221000 -9000 1 NDT} + {-1017523800 -12600 0 NST} + {-998771400 -9000 1 NDT} + {-986074200 -12600 0 NST} + {-966717000 -9000 1 NDT} + {-954624600 -12600 0 NST} + {-935267400 -9000 1 NDT} + {-922570200 -12600 0 NST} + {-903817800 -9000 1 NDT} + {-891120600 -12600 0 NST} + {-872368200 -9000 0 NWT} + {-769395600 -9000 1 NPT} + {-765401400 -12600 0 NST} + {-757369800 -12600 0 NST} + {-746044200 -9000 1 NDT} + {-733347000 -12600 0 NST} + {-714594600 -9000 1 NDT} + {-701897400 -12600 0 NST} + {-683145000 -9000 1 NDT} + {-670447800 -12600 0 NST} + {-651695400 -9000 1 NDT} + {-638998200 -12600 0 NST} + {-619641000 -9000 1 NDT} + {-606943800 -12600 0 NST} + {-589401000 -9000 1 NDT} + {-576099000 -12600 0 NST} + {-557951400 -9000 1 NDT} + {-544649400 -12600 0 NST} + {-526501800 -9000 1 NDT} + {-513199800 -12600 0 NST} + {-495052200 -9000 1 NDT} + {-481750200 -12600 0 NST} + {-463602600 -9000 1 NDT} + {-450300600 -12600 0 NST} + {-431548200 -9000 1 NDT} + {-418246200 -12600 0 NST} + {-400098600 -9000 1 NDT} + {-386796600 -12600 0 NST} + {-368649000 -9000 1 NDT} + {-355347000 -12600 0 NST} + {-337199400 -9000 1 NDT} + {-323897400 -12600 0 NST} + {-305749800 -9000 1 NDT} + {-289423800 -12600 0 NST} + {-273695400 -9000 1 NDT} + {-257974200 -12600 0 NST} + {-242245800 -9000 1 NDT} + {-226524600 -12600 0 NST} + {-210796200 -9000 1 NDT} + {-195075000 -12600 0 NST} + {-179346600 -9000 1 NDT} + {-163625400 -12600 0 NST} + {-147897000 -9000 1 NDT} + {-131571000 -12600 0 NST} + {-116447400 -9000 1 NDT} + {-100121400 -12600 0 NST} + {-84393000 -9000 1 NDT} + {-68671800 -12600 0 NST} + {-52943400 -9000 1 NDT} + {-37222200 -12600 0 NST} + {-21493800 -9000 1 NDT} + {-5772600 -12600 0 NST} + {9955800 -9000 1 NDT} + {25677000 -12600 0 NST} + {41405400 -9000 1 NDT} + {57731400 -12600 0 NST} + {73459800 -9000 1 NDT} + {89181000 -12600 0 NST} + {104909400 -9000 1 NDT} + {120630600 -12600 0 NST} + {136359000 -9000 1 NDT} + {152080200 -12600 0 NST} + {167808600 -9000 1 NDT} + {183529800 -12600 0 NST} + {199258200 -9000 1 NDT} + {215584200 -12600 0 NST} + {230707800 -9000 1 NDT} + {247033800 -12600 0 NST} + {262762200 -9000 1 NDT} + {278483400 -12600 0 NST} + {294211800 -9000 1 NDT} + {309933000 -12600 0 NST} + {325661400 -9000 1 NDT} + {341382600 -12600 0 NST} + {357111000 -9000 1 NDT} + {372832200 -12600 0 NST} + {388560600 -9000 1 NDT} + {404886600 -12600 0 NST} + {420010200 -9000 1 NDT} + {436336200 -12600 0 NST} + {452064600 -9000 1 NDT} + {467785800 -12600 0 NST} + {483514200 -9000 1 NDT} + {499235400 -12600 0 NST} + {514963800 -9000 1 NDT} + {530685000 -12600 0 NST} + {544591860 -9000 1 NDT} + {562127460 -12600 0 NST} + {576041460 -5400 1 NDDT} + {594178260 -12600 0 NST} + {607491060 -9000 1 NDT} + {625631460 -12600 0 NST} + {638940660 -9000 1 NDT} + {657081060 -12600 0 NST} + {670995060 -9000 1 NDT} + {688530660 -12600 0 NST} + {702444660 -9000 1 NDT} + {719980260 -12600 0 NST} + {733894260 -9000 1 NDT} + {752034660 -12600 0 NST} + {765343860 -9000 1 NDT} + {783484260 -12600 0 NST} + {796793460 -9000 1 NDT} + {814933860 -12600 0 NST} + {828847860 -9000 1 NDT} + {846383460 -12600 0 NST} + {860297460 -9000 1 NDT} + {877833060 -12600 0 NST} + {891747060 -9000 1 NDT} + {909282660 -12600 0 NST} + {923196660 -9000 1 NDT} + {941337060 -12600 0 NST} + {954646260 -9000 1 NDT} + {972786660 -12600 0 NST} + {986095860 -9000 1 NDT} + {1004236260 -12600 0 NST} + {1018150260 -9000 1 NDT} + {1035685860 -12600 0 NST} + {1049599860 -9000 1 NDT} + {1067135460 -12600 0 NST} + {1081049460 -9000 1 NDT} + {1099189860 -12600 0 NST} + {1112499060 -9000 1 NDT} + {1130639460 -12600 0 NST} + {1143948660 -9000 1 NDT} + {1162089060 -12600 0 NST} + {1173583860 -9000 1 NDT} + {1194143460 -12600 0 NST} + {1205033460 -9000 1 NDT} + {1225593060 -12600 0 NST} + {1236483060 -9000 1 NDT} + {1257042660 -12600 0 NST} + {1268537460 -9000 1 NDT} + {1289097060 -12600 0 NST} + {1299987060 -9000 1 NDT} + {1320114600 -9000 0 NDT} + {1320553800 -12600 0 NST} + {1331443800 -9000 1 NDT} + {1352003400 -12600 0 NST} + {1362893400 -9000 1 NDT} + {1383453000 -12600 0 NST} + {1394343000 -9000 1 NDT} + {1414902600 -12600 0 NST} + {1425792600 -9000 1 NDT} + {1446352200 -12600 0 NST} + {1457847000 -9000 1 NDT} + {1478406600 -12600 0 NST} + {1489296600 -9000 1 NDT} + {1509856200 -12600 0 NST} + {1520746200 -9000 1 NDT} + {1541305800 -12600 0 NST} + {1552195800 -9000 1 NDT} + {1572755400 -12600 0 NST} + {1583645400 -9000 1 NDT} + {1604205000 -12600 0 NST} + {1615699800 -9000 1 NDT} + {1636259400 -12600 0 NST} + {1647149400 -9000 1 NDT} + {1667709000 -12600 0 NST} + {1678599000 -9000 1 NDT} + {1699158600 -12600 0 NST} + {1710048600 -9000 1 NDT} + {1730608200 -12600 0 NST} + {1741498200 -9000 1 NDT} + {1762057800 -12600 0 NST} + {1772947800 -9000 1 NDT} + {1793507400 -12600 0 NST} + {1805002200 -9000 1 NDT} + {1825561800 -12600 0 NST} + {1836451800 -9000 1 NDT} + {1857011400 -12600 0 NST} + {1867901400 -9000 1 NDT} + {1888461000 -12600 0 NST} + {1899351000 -9000 1 NDT} + {1919910600 -12600 0 NST} + {1930800600 -9000 1 NDT} + {1951360200 -12600 0 NST} + {1962855000 -9000 1 NDT} + {1983414600 -12600 0 NST} + {1994304600 -9000 1 NDT} + {2014864200 -12600 0 NST} + {2025754200 -9000 1 NDT} + {2046313800 -12600 0 NST} + {2057203800 -9000 1 NDT} + {2077763400 -12600 0 NST} + {2088653400 -9000 1 NDT} + {2109213000 -12600 0 NST} + {2120103000 -9000 1 NDT} + {2140662600 -12600 0 NST} + {2152157400 -9000 1 NDT} + {2172717000 -12600 0 NST} + {2183607000 -9000 1 NDT} + {2204166600 -12600 0 NST} + {2215056600 -9000 1 NDT} + {2235616200 -12600 0 NST} + {2246506200 -9000 1 NDT} + {2267065800 -12600 0 NST} + {2277955800 -9000 1 NDT} + {2298515400 -12600 0 NST} + {2309405400 -9000 1 NDT} + {2329965000 -12600 0 NST} + {2341459800 -9000 1 NDT} + {2362019400 -12600 0 NST} + {2372909400 -9000 1 NDT} + {2393469000 -12600 0 NST} + {2404359000 -9000 1 NDT} + {2424918600 -12600 0 NST} + {2435808600 -9000 1 NDT} + {2456368200 -12600 0 NST} + {2467258200 -9000 1 NDT} + {2487817800 -12600 0 NST} + {2499312600 -9000 1 NDT} + {2519872200 -12600 0 NST} + {2530762200 -9000 1 NDT} + {2551321800 -12600 0 NST} + {2562211800 -9000 1 NDT} + {2582771400 -12600 0 NST} + {2593661400 -9000 1 NDT} + {2614221000 -12600 0 NST} + {2625111000 -9000 1 NDT} + {2645670600 -12600 0 NST} + {2656560600 -9000 1 NDT} + {2677120200 -12600 0 NST} + {2688615000 -9000 1 NDT} + {2709174600 -12600 0 NST} + {2720064600 -9000 1 NDT} + {2740624200 -12600 0 NST} + {2751514200 -9000 1 NDT} + {2772073800 -12600 0 NST} + {2782963800 -9000 1 NDT} + {2803523400 -12600 0 NST} + {2814413400 -9000 1 NDT} + {2834973000 -12600 0 NST} + {2846467800 -9000 1 NDT} + {2867027400 -12600 0 NST} + {2877917400 -9000 1 NDT} + {2898477000 -12600 0 NST} + {2909367000 -9000 1 NDT} + {2929926600 -12600 0 NST} + {2940816600 -9000 1 NDT} + {2961376200 -12600 0 NST} + {2972266200 -9000 1 NDT} + {2992825800 -12600 0 NST} + {3003715800 -9000 1 NDT} + {3024275400 -12600 0 NST} + {3035770200 -9000 1 NDT} + {3056329800 -12600 0 NST} + {3067219800 -9000 1 NDT} + {3087779400 -12600 0 NST} + {3098669400 -9000 1 NDT} + {3119229000 -12600 0 NST} + {3130119000 -9000 1 NDT} + {3150678600 -12600 0 NST} + {3161568600 -9000 1 NDT} + {3182128200 -12600 0 NST} + {3193018200 -9000 1 NDT} + {3213577800 -12600 0 NST} + {3225072600 -9000 1 NDT} + {3245632200 -12600 0 NST} + {3256522200 -9000 1 NDT} + {3277081800 -12600 0 NST} + {3287971800 -9000 1 NDT} + {3308531400 -12600 0 NST} + {3319421400 -9000 1 NDT} + {3339981000 -12600 0 NST} + {3350871000 -9000 1 NDT} + {3371430600 -12600 0 NST} + {3382925400 -9000 1 NDT} + {3403485000 -12600 0 NST} + {3414375000 -9000 1 NDT} + {3434934600 -12600 0 NST} + {3445824600 -9000 1 NDT} + {3466384200 -12600 0 NST} + {3477274200 -9000 1 NDT} + {3497833800 -12600 0 NST} + {3508723800 -9000 1 NDT} + {3529283400 -12600 0 NST} + {3540173400 -9000 1 NDT} + {3560733000 -12600 0 NST} + {3572227800 -9000 1 NDT} + {3592787400 -12600 0 NST} + {3603677400 -9000 1 NDT} + {3624237000 -12600 0 NST} + {3635127000 -9000 1 NDT} + {3655686600 -12600 0 NST} + {3666576600 -9000 1 NDT} + {3687136200 -12600 0 NST} + {3698026200 -9000 1 NDT} + {3718585800 -12600 0 NST} + {3730080600 -9000 1 NDT} + {3750640200 -12600 0 NST} + {3761530200 -9000 1 NDT} + {3782089800 -12600 0 NST} + {3792979800 -9000 1 NDT} + {3813539400 -12600 0 NST} + {3824429400 -9000 1 NDT} + {3844989000 -12600 0 NST} + {3855879000 -9000 1 NDT} + {3876438600 -12600 0 NST} + {3887328600 -9000 1 NDT} + {3907888200 -12600 0 NST} + {3919383000 -9000 1 NDT} + {3939942600 -12600 0 NST} + {3950832600 -9000 1 NDT} + {3971392200 -12600 0 NST} + {3982282200 -9000 1 NDT} + {4002841800 -12600 0 NST} + {4013731800 -9000 1 NDT} + {4034291400 -12600 0 NST} + {4045181400 -9000 1 NDT} + {4065741000 -12600 0 NST} + {4076631000 -9000 1 NDT} + {4097190600 -12600 0 NST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/St_Kitts b/inkstitch/bin/tcl/tzdata/America/St_Kitts new file mode 100644 index 0000000..bfd803b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Kitts @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Kitts) { + {-9223372036854775808 -15052 0 LMT} + {-1825098548 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/St_Lucia b/inkstitch/bin/tcl/tzdata/America/St_Lucia new file mode 100644 index 0000000..c2767dd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Lucia @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Lucia) { + {-9223372036854775808 -14640 0 LMT} + {-2524506960 -14640 0 CMT} + {-1830369360 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/St_Thomas b/inkstitch/bin/tcl/tzdata/America/St_Thomas new file mode 100644 index 0000000..bf93595 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Thomas @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Thomas) { + {-9223372036854775808 -15584 0 LMT} + {-1846266016 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/St_Vincent b/inkstitch/bin/tcl/tzdata/America/St_Vincent new file mode 100644 index 0000000..3a884c7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/St_Vincent @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Vincent) { + {-9223372036854775808 -14696 0 LMT} + {-2524506904 -14696 0 KMT} + {-1830369304 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Swift_Current b/inkstitch/bin/tcl/tzdata/America/Swift_Current new file mode 100644 index 0000000..ad07762 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Swift_Current @@ -0,0 +1,29 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Swift_Current) { + {-9223372036854775808 -25880 0 LMT} + {-2030201320 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-747241200 -21600 0 MDT} + {-732729600 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-684342000 -21600 1 MDT} + {-671040000 -25200 0 MST} + {-652892400 -21600 1 MDT} + {-639590400 -25200 0 MST} + {-631126800 -25200 0 MST} + {-400086000 -21600 1 MDT} + {-384364800 -25200 0 MST} + {-337186800 -21600 1 MDT} + {-321465600 -25200 0 MST} + {-305737200 -21600 1 MDT} + {-292435200 -25200 0 MST} + {-273682800 -21600 1 MDT} + {-260985600 -25200 0 MST} + {73472400 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Tegucigalpa b/inkstitch/bin/tcl/tzdata/America/Tegucigalpa new file mode 100644 index 0000000..050661e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Tegucigalpa @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Tegucigalpa) { + {-9223372036854775808 -20932 0 LMT} + {-1538503868 -21600 0 CST} + {547020000 -18000 1 CDT} + {559717200 -21600 0 CST} + {578469600 -18000 1 CDT} + {591166800 -21600 0 CST} + {1146981600 -18000 1 CDT} + {1154926800 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Thule b/inkstitch/bin/tcl/tzdata/America/Thule new file mode 100644 index 0000000..0aaf9a1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Thule @@ -0,0 +1,224 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Thule) { + {-9223372036854775808 -16508 0 LMT} + {-1686079492 -14400 0 AST} + {670399200 -10800 1 ADT} + {686120400 -14400 0 AST} + {701848800 -10800 1 ADT} + {717570000 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Thunder_Bay b/inkstitch/bin/tcl/tzdata/America/Thunder_Bay new file mode 100644 index 0000000..8a454be --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Thunder_Bay @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Thunder_Bay) { + {-9223372036854775808 -21420 0 LMT} + {-2366733780 -21600 0 CST} + {-1893434400 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {18000 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {94712400 -18000 0 EST} + {126248400 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Tijuana b/inkstitch/bin/tcl/tzdata/America/Tijuana new file mode 100644 index 0000000..6118cde --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Tijuana @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Tijuana) { + {-9223372036854775808 -28084 0 LMT} + {-1514736000 -25200 0 MST} + {-1451667600 -28800 0 PST} + {-1343062800 -25200 0 MST} + {-1234803600 -28800 0 PST} + {-1222963200 -25200 1 PDT} + {-1207242000 -28800 0 PST} + {-873820800 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-761677200 -28800 0 PST} + {-686073600 -25200 1 PDT} + {-661539600 -28800 0 PST} + {-504892800 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-283968000 -28800 0 PST} + {189331200 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {820483200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {978336000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1014192000 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1175421600 -25200 1 PDT} + {1193562000 -28800 0 PST} + {1207476000 -25200 1 PDT} + {1225011600 -28800 0 PST} + {1238925600 -25200 1 PDT} + {1256461200 -28800 0 PST} + {1262332800 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Toronto b/inkstitch/bin/tcl/tzdata/America/Toronto new file mode 100644 index 0000000..09bf786 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Toronto @@ -0,0 +1,365 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Toronto) { + {-9223372036854775808 -19052 0 LMT} + {-2366736148 -18000 0 EST} + {-1632070800 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1609441200 -18000 0 EST} + {-1601753400 -14400 1 EDT} + {-1583697600 -18000 0 EST} + {-1567357200 -14400 1 EDT} + {-1554667200 -18000 0 EST} + {-1534698000 -14400 1 EDT} + {-1524074400 -18000 0 EST} + {-1503248400 -14400 1 EDT} + {-1492365600 -18000 0 EST} + {-1471798800 -14400 1 EDT} + {-1460916000 -18000 0 EST} + {-1440954000 -14400 1 EDT} + {-1428861600 -18000 0 EST} + {-1409504400 -14400 1 EDT} + {-1397412000 -18000 0 EST} + {-1378054800 -14400 1 EDT} + {-1365962400 -18000 0 EST} + {-1346605200 -14400 1 EDT} + {-1333908000 -18000 0 EST} + {-1315155600 -14400 1 EDT} + {-1301853600 -18000 0 EST} + {-1283706000 -14400 1 EDT} + {-1270404000 -18000 0 EST} + {-1252256400 -14400 1 EDT} + {-1238954400 -18000 0 EST} + {-1220806800 -14400 1 EDT} + {-1207504800 -18000 0 EST} + {-1188752400 -14400 1 EDT} + {-1176055200 -18000 0 EST} + {-1157302800 -14400 1 EDT} + {-1144000800 -18000 0 EST} + {-1125853200 -14400 1 EDT} + {-1112551200 -18000 0 EST} + {-1094403600 -14400 1 EDT} + {-1081101600 -18000 0 EST} + {-1062954000 -14400 1 EDT} + {-1049652000 -18000 0 EST} + {-1031504400 -14400 1 EDT} + {-1018202400 -18000 0 EST} + {-1000054800 -14400 1 EDT} + {-986752800 -18000 0 EST} + {-968000400 -14400 1 EDT} + {-955303200 -18000 0 EST} + {-936550800 -14400 1 EDT} + {-880218000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-747248400 -14400 1 EDT} + {-733946400 -18000 0 EST} + {-715806000 -14400 1 EDT} + {-702504000 -18000 0 EST} + {-684356400 -14400 1 EDT} + {-671054400 -18000 0 EST} + {-652906800 -14400 1 EDT} + {-634161600 -18000 0 EST} + {-620845200 -14400 1 EDT} + {-602704800 -18000 0 EST} + {-589395600 -14400 1 EDT} + {-576093600 -18000 0 EST} + {-557946000 -14400 1 EDT} + {-544644000 -18000 0 EST} + {-526496400 -14400 1 EDT} + {-513194400 -18000 0 EST} + {-495046800 -14400 1 EDT} + {-481744800 -18000 0 EST} + {-463597200 -14400 1 EDT} + {-450295200 -18000 0 EST} + {-431542800 -14400 1 EDT} + {-418240800 -18000 0 EST} + {-400093200 -14400 1 EDT} + {-384372000 -18000 0 EST} + {-368643600 -14400 1 EDT} + {-352922400 -18000 0 EST} + {-337194000 -14400 1 EDT} + {-321472800 -18000 0 EST} + {-305744400 -14400 1 EDT} + {-289418400 -18000 0 EST} + {-273690000 -14400 1 EDT} + {-257968800 -18000 0 EST} + {-242240400 -14400 1 EDT} + {-226519200 -18000 0 EST} + {-210790800 -14400 1 EDT} + {-195069600 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126248400 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Tortola b/inkstitch/bin/tcl/tzdata/America/Tortola new file mode 100644 index 0000000..bf7f1fc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Tortola @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Tortola) { + {-9223372036854775808 -15508 0 LMT} + {-1846266092 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Vancouver b/inkstitch/bin/tcl/tzdata/America/Vancouver new file mode 100644 index 0000000..aef639a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Vancouver @@ -0,0 +1,320 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Vancouver) { + {-9223372036854775808 -29548 0 LMT} + {-2713880852 -28800 0 PST} + {-1632060000 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-747237600 -25200 1 PDT} + {-732726000 -28800 0 PST} + {-715788000 -25200 1 PDT} + {-702486000 -28800 0 PST} + {-684338400 -25200 1 PDT} + {-671036400 -28800 0 PST} + {-652888800 -25200 1 PDT} + {-639586800 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {136375200 -25200 1 PDT} + {152096400 -28800 0 PST} + {167824800 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {536486400 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Virgin b/inkstitch/bin/tcl/tzdata/America/Virgin new file mode 100644 index 0000000..390d7c2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Virgin @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/St_Thomas)]} { + LoadTimeZoneFile America/St_Thomas +} +set TZData(:America/Virgin) $TZData(:America/St_Thomas) diff --git a/inkstitch/bin/tcl/tzdata/America/Whitehorse b/inkstitch/bin/tcl/tzdata/America/Whitehorse new file mode 100644 index 0000000..1d61093 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Whitehorse @@ -0,0 +1,256 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Whitehorse) { + {-9223372036854775808 -32412 0 LMT} + {-2188997988 -32400 0 YST} + {-1632056400 -28800 1 YDT} + {-1615125600 -32400 0 YST} + {-1596978000 -28800 1 YDT} + {-1583164800 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-147884400 -25200 1 YDDT} + {-131554800 -32400 0 YST} + {315561600 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Winnipeg b/inkstitch/bin/tcl/tzdata/America/Winnipeg new file mode 100644 index 0000000..e6efe47 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Winnipeg @@ -0,0 +1,316 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Winnipeg) { + {-9223372036854775808 -23316 0 LMT} + {-2602258284 -21600 0 CST} + {-1694368800 -18000 1 CDT} + {-1681671600 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1029686400 -18000 1 CDT} + {-1018198800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-746035200 -18000 1 CDT} + {-732733200 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620755200 -18000 1 CDT} + {-607626000 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-198090000 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100108800 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68659200 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37209600 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5760000 -21600 0 CST} + {9964800 -18000 1 CDT} + {25689600 -21600 0 CST} + {41414400 -18000 1 CDT} + {57744000 -21600 0 CST} + {73468800 -18000 1 CDT} + {89193600 -21600 0 CST} + {104918400 -18000 1 CDT} + {120643200 -21600 0 CST} + {136368000 -18000 1 CDT} + {152092800 -21600 0 CST} + {167817600 -18000 1 CDT} + {183542400 -21600 0 CST} + {199267200 -18000 1 CDT} + {215596800 -21600 0 CST} + {230716800 -18000 1 CDT} + {247046400 -21600 0 CST} + {262771200 -18000 1 CDT} + {278496000 -21600 0 CST} + {294220800 -18000 1 CDT} + {309945600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341395200 -21600 0 CST} + {357120000 -18000 1 CDT} + {372844800 -21600 0 CST} + {388569600 -18000 1 CDT} + {404899200 -21600 0 CST} + {420019200 -18000 1 CDT} + {436348800 -21600 0 CST} + {452073600 -18000 1 CDT} + {467798400 -21600 0 CST} + {483523200 -18000 1 CDT} + {499248000 -21600 0 CST} + {514972800 -18000 1 CDT} + {530697600 -21600 0 CST} + {544608000 -18000 1 CDT} + {562147200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594201600 -21600 0 CST} + {607507200 -18000 1 CDT} + {625651200 -21600 0 CST} + {638956800 -18000 1 CDT} + {657100800 -21600 0 CST} + {671011200 -18000 1 CDT} + {688550400 -21600 0 CST} + {702460800 -18000 1 CDT} + {720000000 -21600 0 CST} + {733910400 -18000 1 CDT} + {752054400 -21600 0 CST} + {765360000 -18000 1 CDT} + {783504000 -21600 0 CST} + {796809600 -18000 1 CDT} + {814953600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846403200 -21600 0 CST} + {860313600 -18000 1 CDT} + {877852800 -21600 0 CST} + {891763200 -18000 1 CDT} + {909302400 -21600 0 CST} + {923212800 -18000 1 CDT} + {941356800 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004256000 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035705600 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067155200 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099209600 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130659200 -21600 0 CST} + {1136095200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Yakutat b/inkstitch/bin/tcl/tzdata/America/Yakutat new file mode 100644 index 0000000..a0420c5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Yakutat @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Yakutat) { + {-9223372036854775808 52865 0 LMT} + {-3225364865 -33535 0 LMT} + {-2188953665 -32400 0 YST} + {-883580400 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-757350000 -32400 0 YST} + {-31503600 -32400 0 YST} + {-21474000 -28800 1 YDT} + {-5752800 -32400 0 YST} + {9975600 -28800 1 YDT} + {25696800 -32400 0 YST} + {41425200 -28800 1 YDT} + {57751200 -32400 0 YST} + {73479600 -28800 1 YDT} + {89200800 -32400 0 YST} + {104929200 -28800 1 YDT} + {120650400 -32400 0 YST} + {126702000 -28800 1 YDT} + {152100000 -32400 0 YST} + {162385200 -28800 1 YDT} + {183549600 -32400 0 YST} + {199278000 -28800 1 YDT} + {215604000 -32400 0 YST} + {230727600 -28800 1 YDT} + {247053600 -32400 0 YST} + {262782000 -28800 1 YDT} + {278503200 -32400 0 YST} + {294231600 -28800 1 YDT} + {309952800 -32400 0 YST} + {325681200 -28800 1 YDT} + {341402400 -32400 0 YST} + {357130800 -28800 1 YDT} + {372852000 -32400 0 YST} + {388580400 -28800 1 YDT} + {404906400 -32400 0 YST} + {420030000 -28800 1 YDT} + {436356000 -32400 0 YST} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/inkstitch/bin/tcl/tzdata/America/Yellowknife b/inkstitch/bin/tcl/tzdata/America/Yellowknife new file mode 100644 index 0000000..44ca658 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/America/Yellowknife @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Yellowknife) { + {-9223372036854775808 0 0 zzz} + {-1104537600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-147891600 -18000 1 MDDT} + {-131562000 -25200 0 MST} + {315558000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Casey b/inkstitch/bin/tcl/tzdata/Antarctica/Casey new file mode 100644 index 0000000..cbe3e3c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Casey @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Casey) { + {-9223372036854775808 0 0 zzz} + {-31536000 28800 0 WST} + {1255802400 39600 0 CAST} + {1267714800 28800 0 WST} + {1319738400 39600 0 CAST} + {1329843600 28800 0 WST} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Davis b/inkstitch/bin/tcl/tzdata/Antarctica/Davis new file mode 100644 index 0000000..2762d2f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Davis @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Davis) { + {-9223372036854775808 0 0 zzz} + {-409190400 25200 0 DAVT} + {-163062000 0 0 zzz} + {-28857600 25200 0 DAVT} + {1255806000 18000 0 DAVT} + {1268251200 25200 0 DAVT} + {1319742000 18000 0 DAVT} + {1329854400 25200 0 DAVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville b/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville new file mode 100644 index 0000000..41dc1e3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/DumontDUrville) { + {-9223372036854775808 0 0 zzz} + {-725846400 36000 0 PMT} + {-566992800 0 0 zzz} + {-415497600 36000 0 DDUT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie b/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie new file mode 100644 index 0000000..bd5cf8a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie @@ -0,0 +1,97 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Macquarie) { + {-9223372036854775808 0 0 zzz} + {-2214259200 36000 0 EST} + {-1680508800 39600 1 EST} + {-1669892400 39600 0 EST} + {-1665392400 36000 0 EST} + {-1601719200 0 0 zzz} + {-94730400 36000 0 EST} + {-71136000 39600 1 EST} + {-55411200 36000 0 EST} + {-37267200 39600 1 EST} + {-25776000 36000 0 EST} + {-5817600 39600 1 EST} + {5673600 36000 0 EST} + {25632000 39600 1 EST} + {37728000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {89136000 39600 1 EST} + {100022400 36000 0 EST} + {120585600 39600 1 EST} + {131472000 36000 0 EST} + {152035200 39600 1 EST} + {162921600 36000 0 EST} + {183484800 39600 1 EST} + {194976000 36000 0 EST} + {215539200 39600 1 EST} + {226425600 36000 0 EST} + {246988800 39600 1 EST} + {257875200 36000 0 EST} + {278438400 39600 1 EST} + {289324800 36000 0 EST} + {309888000 39600 1 EST} + {320774400 36000 0 EST} + {341337600 39600 1 EST} + {352224000 36000 0 EST} + {372787200 39600 1 EST} + {386092800 36000 0 EST} + {404841600 39600 1 EST} + {417542400 36000 0 EST} + {436291200 39600 1 EST} + {447177600 36000 0 EST} + {467740800 39600 1 EST} + {478627200 36000 0 EST} + {499190400 39600 1 EST} + {510076800 36000 0 EST} + {530035200 39600 1 EST} + {542736000 36000 0 EST} + {562089600 39600 1 EST} + {574790400 36000 0 EST} + {594144000 39600 1 EST} + {606240000 36000 0 EST} + {625593600 39600 1 EST} + {637689600 36000 0 EST} + {657043200 39600 1 EST} + {670348800 36000 0 EST} + {686678400 39600 1 EST} + {701798400 36000 0 EST} + {718128000 39600 1 EST} + {733248000 36000 0 EST} + {749577600 39600 1 EST} + {764697600 36000 0 EST} + {781027200 39600 1 EST} + {796147200 36000 0 EST} + {812476800 39600 1 EST} + {828201600 36000 0 EST} + {844531200 39600 1 EST} + {859651200 36000 0 EST} + {875980800 39600 1 EST} + {891100800 36000 0 EST} + {907430400 39600 1 EST} + {922550400 36000 0 EST} + {938880000 39600 1 EST} + {954000000 36000 0 EST} + {967305600 39600 1 EST} + {985449600 36000 0 EST} + {1002384000 39600 1 EST} + {1017504000 36000 0 EST} + {1033833600 39600 1 EST} + {1048953600 36000 0 EST} + {1065283200 39600 1 EST} + {1080403200 36000 0 EST} + {1096732800 39600 1 EST} + {1111852800 36000 0 EST} + {1128182400 39600 1 EST} + {1143907200 36000 0 EST} + {1159632000 39600 1 EST} + {1174752000 36000 0 EST} + {1191686400 39600 1 EST} + {1207411200 36000 0 EST} + {1223136000 39600 1 EST} + {1238860800 36000 0 EST} + {1254585600 39600 1 EST} + {1270310400 39600 0 MIST} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Mawson b/inkstitch/bin/tcl/tzdata/Antarctica/Mawson new file mode 100644 index 0000000..ba03ba1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Mawson @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Mawson) { + {-9223372036854775808 0 0 zzz} + {-501206400 21600 0 MAWT} + {1255809600 18000 0 MAWT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo b/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo new file mode 100644 index 0000000..670f7eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/McMurdo) { + {-9223372036854775808 0 0 zzz} + {-441849600 43200 0 NZST} + {152632800 46800 1 NZDT} + {162309600 43200 0 NZST} + {183477600 46800 1 NZDT} + {194968800 43200 0 NZST} + {215532000 46800 1 NZDT} + {226418400 43200 0 NZST} + {246981600 46800 1 NZDT} + {257868000 43200 0 NZST} + {278431200 46800 1 NZDT} + {289317600 43200 0 NZST} + {309880800 46800 1 NZDT} + {320767200 43200 0 NZST} + {341330400 46800 1 NZDT} + {352216800 43200 0 NZST} + {372780000 46800 1 NZDT} + {384271200 43200 0 NZST} + {404834400 46800 1 NZDT} + {415720800 43200 0 NZST} + {436284000 46800 1 NZDT} + {447170400 43200 0 NZST} + {467733600 46800 1 NZDT} + {478620000 43200 0 NZST} + {499183200 46800 1 NZDT} + {510069600 43200 0 NZST} + {530632800 46800 1 NZDT} + {541519200 43200 0 NZST} + {562082400 46800 1 NZDT} + {573573600 43200 0 NZST} + {594136800 46800 1 NZDT} + {605023200 43200 0 NZST} + {623772000 46800 1 NZDT} + {637682400 43200 0 NZST} + {655221600 46800 1 NZDT} + {669132000 43200 0 NZST} + {686671200 46800 1 NZDT} + {700581600 43200 0 NZST} + {718120800 46800 1 NZDT} + {732636000 43200 0 NZST} + {749570400 46800 1 NZDT} + {764085600 43200 0 NZST} + {781020000 46800 1 NZDT} + {795535200 43200 0 NZST} + {812469600 46800 1 NZDT} + {826984800 43200 0 NZST} + {844524000 46800 1 NZDT} + {858434400 43200 0 NZST} + {875973600 46800 1 NZDT} + {889884000 43200 0 NZST} + {907423200 46800 1 NZDT} + {921938400 43200 0 NZST} + {938872800 46800 1 NZDT} + {953388000 43200 0 NZST} + {970322400 46800 1 NZDT} + {984837600 43200 0 NZST} + {1002376800 46800 1 NZDT} + {1016287200 43200 0 NZST} + {1033826400 46800 1 NZDT} + {1047736800 43200 0 NZST} + {1065276000 46800 1 NZDT} + {1079791200 43200 0 NZST} + {1096725600 46800 1 NZDT} + {1111240800 43200 0 NZST} + {1128175200 46800 1 NZDT} + {1142690400 43200 0 NZST} + {1159624800 46800 1 NZDT} + {1174140000 43200 0 NZST} + {1191074400 46800 1 NZDT} + {1207404000 43200 0 NZST} + {1222524000 46800 1 NZDT} + {1238853600 43200 0 NZST} + {1253973600 46800 1 NZDT} + {1270303200 43200 0 NZST} + {1285423200 46800 1 NZDT} + {1301752800 43200 0 NZST} + {1316872800 46800 1 NZDT} + {1333202400 43200 0 NZST} + {1348927200 46800 1 NZDT} + {1365256800 43200 0 NZST} + {1380376800 46800 1 NZDT} + {1396706400 43200 0 NZST} + {1411826400 46800 1 NZDT} + {1428156000 43200 0 NZST} + {1443276000 46800 1 NZDT} + {1459605600 43200 0 NZST} + {1474725600 46800 1 NZDT} + {1491055200 43200 0 NZST} + {1506175200 46800 1 NZDT} + {1522504800 43200 0 NZST} + {1538229600 46800 1 NZDT} + {1554559200 43200 0 NZST} + {1569679200 46800 1 NZDT} + {1586008800 43200 0 NZST} + {1601128800 46800 1 NZDT} + {1617458400 43200 0 NZST} + {1632578400 46800 1 NZDT} + {1648908000 43200 0 NZST} + {1664028000 46800 1 NZDT} + {1680357600 43200 0 NZST} + {1695477600 46800 1 NZDT} + {1712412000 43200 0 NZST} + {1727532000 46800 1 NZDT} + {1743861600 43200 0 NZST} + {1758981600 46800 1 NZDT} + {1775311200 43200 0 NZST} + {1790431200 46800 1 NZDT} + {1806760800 43200 0 NZST} + {1821880800 46800 1 NZDT} + {1838210400 43200 0 NZST} + {1853330400 46800 1 NZDT} + {1869660000 43200 0 NZST} + {1885384800 46800 1 NZDT} + {1901714400 43200 0 NZST} + {1916834400 46800 1 NZDT} + {1933164000 43200 0 NZST} + {1948284000 46800 1 NZDT} + {1964613600 43200 0 NZST} + {1979733600 46800 1 NZDT} + {1996063200 43200 0 NZST} + {2011183200 46800 1 NZDT} + {2027512800 43200 0 NZST} + {2042632800 46800 1 NZDT} + {2058962400 43200 0 NZST} + {2074687200 46800 1 NZDT} + {2091016800 43200 0 NZST} + {2106136800 46800 1 NZDT} + {2122466400 43200 0 NZST} + {2137586400 46800 1 NZDT} + {2153916000 43200 0 NZST} + {2169036000 46800 1 NZDT} + {2185365600 43200 0 NZST} + {2200485600 46800 1 NZDT} + {2216815200 43200 0 NZST} + {2232540000 46800 1 NZDT} + {2248869600 43200 0 NZST} + {2263989600 46800 1 NZDT} + {2280319200 43200 0 NZST} + {2295439200 46800 1 NZDT} + {2311768800 43200 0 NZST} + {2326888800 46800 1 NZDT} + {2343218400 43200 0 NZST} + {2358338400 46800 1 NZDT} + {2374668000 43200 0 NZST} + {2389788000 46800 1 NZDT} + {2406117600 43200 0 NZST} + {2421842400 46800 1 NZDT} + {2438172000 43200 0 NZST} + {2453292000 46800 1 NZDT} + {2469621600 43200 0 NZST} + {2484741600 46800 1 NZDT} + {2501071200 43200 0 NZST} + {2516191200 46800 1 NZDT} + {2532520800 43200 0 NZST} + {2547640800 46800 1 NZDT} + {2563970400 43200 0 NZST} + {2579090400 46800 1 NZDT} + {2596024800 43200 0 NZST} + {2611144800 46800 1 NZDT} + {2627474400 43200 0 NZST} + {2642594400 46800 1 NZDT} + {2658924000 43200 0 NZST} + {2674044000 46800 1 NZDT} + {2690373600 43200 0 NZST} + {2705493600 46800 1 NZDT} + {2721823200 43200 0 NZST} + {2736943200 46800 1 NZDT} + {2753272800 43200 0 NZST} + {2768997600 46800 1 NZDT} + {2785327200 43200 0 NZST} + {2800447200 46800 1 NZDT} + {2816776800 43200 0 NZST} + {2831896800 46800 1 NZDT} + {2848226400 43200 0 NZST} + {2863346400 46800 1 NZDT} + {2879676000 43200 0 NZST} + {2894796000 46800 1 NZDT} + {2911125600 43200 0 NZST} + {2926245600 46800 1 NZDT} + {2942575200 43200 0 NZST} + {2958300000 46800 1 NZDT} + {2974629600 43200 0 NZST} + {2989749600 46800 1 NZDT} + {3006079200 43200 0 NZST} + {3021199200 46800 1 NZDT} + {3037528800 43200 0 NZST} + {3052648800 46800 1 NZDT} + {3068978400 43200 0 NZST} + {3084098400 46800 1 NZDT} + {3100428000 43200 0 NZST} + {3116152800 46800 1 NZDT} + {3132482400 43200 0 NZST} + {3147602400 46800 1 NZDT} + {3163932000 43200 0 NZST} + {3179052000 46800 1 NZDT} + {3195381600 43200 0 NZST} + {3210501600 46800 1 NZDT} + {3226831200 43200 0 NZST} + {3241951200 46800 1 NZDT} + {3258280800 43200 0 NZST} + {3273400800 46800 1 NZDT} + {3289730400 43200 0 NZST} + {3305455200 46800 1 NZDT} + {3321784800 43200 0 NZST} + {3336904800 46800 1 NZDT} + {3353234400 43200 0 NZST} + {3368354400 46800 1 NZDT} + {3384684000 43200 0 NZST} + {3399804000 46800 1 NZDT} + {3416133600 43200 0 NZST} + {3431253600 46800 1 NZDT} + {3447583200 43200 0 NZST} + {3462703200 46800 1 NZDT} + {3479637600 43200 0 NZST} + {3494757600 46800 1 NZDT} + {3511087200 43200 0 NZST} + {3526207200 46800 1 NZDT} + {3542536800 43200 0 NZST} + {3557656800 46800 1 NZDT} + {3573986400 43200 0 NZST} + {3589106400 46800 1 NZDT} + {3605436000 43200 0 NZST} + {3620556000 46800 1 NZDT} + {3636885600 43200 0 NZST} + {3652610400 46800 1 NZDT} + {3668940000 43200 0 NZST} + {3684060000 46800 1 NZDT} + {3700389600 43200 0 NZST} + {3715509600 46800 1 NZDT} + {3731839200 43200 0 NZST} + {3746959200 46800 1 NZDT} + {3763288800 43200 0 NZST} + {3778408800 46800 1 NZDT} + {3794738400 43200 0 NZST} + {3809858400 46800 1 NZDT} + {3826188000 43200 0 NZST} + {3841912800 46800 1 NZDT} + {3858242400 43200 0 NZST} + {3873362400 46800 1 NZDT} + {3889692000 43200 0 NZST} + {3904812000 46800 1 NZDT} + {3921141600 43200 0 NZST} + {3936261600 46800 1 NZDT} + {3952591200 43200 0 NZST} + {3967711200 46800 1 NZDT} + {3984040800 43200 0 NZST} + {3999765600 46800 1 NZDT} + {4016095200 43200 0 NZST} + {4031215200 46800 1 NZDT} + {4047544800 43200 0 NZST} + {4062664800 46800 1 NZDT} + {4078994400 43200 0 NZST} + {4094114400 46800 1 NZDT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Palmer b/inkstitch/bin/tcl/tzdata/Antarctica/Palmer new file mode 100644 index 0000000..e87b171 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Palmer @@ -0,0 +1,254 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Palmer) { + {-9223372036854775808 0 0 zzz} + {-157766400 -14400 0 ART} + {-152654400 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {389070000 -14400 0 CLT} + {403070400 -10800 1 CLST} + {416372400 -14400 0 CLT} + {434520000 -10800 1 CLST} + {447822000 -14400 0 CLT} + {466574400 -10800 1 CLST} + {479271600 -14400 0 CLT} + {498024000 -10800 1 CLST} + {510721200 -14400 0 CLT} + {529473600 -10800 1 CLST} + {545194800 -14400 0 CLT} + {560923200 -10800 1 CLST} + {574225200 -14400 0 CLT} + {591768000 -10800 1 CLST} + {605674800 -14400 0 CLT} + {624427200 -10800 1 CLST} + {637729200 -14400 0 CLT} + {653457600 -10800 1 CLST} + {668574000 -14400 0 CLT} + {687326400 -10800 1 CLST} + {700628400 -14400 0 CLT} + {718776000 -10800 1 CLST} + {732078000 -14400 0 CLT} + {750225600 -10800 1 CLST} + {763527600 -14400 0 CLT} + {781675200 -10800 1 CLST} + {794977200 -14400 0 CLT} + {813729600 -10800 1 CLST} + {826426800 -14400 0 CLT} + {845179200 -10800 1 CLST} + {859690800 -14400 0 CLT} + {876628800 -10800 1 CLST} + {889930800 -14400 0 CLT} + {906868800 -10800 1 CLST} + {923194800 -14400 0 CLT} + {939528000 -10800 1 CLST} + {952830000 -14400 0 CLT} + {971582400 -10800 1 CLST} + {984279600 -14400 0 CLT} + {1003032000 -10800 1 CLST} + {1015729200 -14400 0 CLT} + {1034481600 -10800 1 CLST} + {1047178800 -14400 0 CLT} + {1065931200 -10800 1 CLST} + {1079233200 -14400 0 CLT} + {1097380800 -10800 1 CLST} + {1110682800 -14400 0 CLT} + {1128830400 -10800 1 CLST} + {1142132400 -14400 0 CLT} + {1160884800 -10800 1 CLST} + {1173582000 -14400 0 CLT} + {1192334400 -10800 1 CLST} + {1206846000 -14400 0 CLT} + {1223784000 -10800 1 CLST} + {1237086000 -14400 0 CLT} + {1255233600 -10800 1 CLST} + {1270350000 -14400 0 CLT} + {1286683200 -10800 1 CLST} + {1304823600 -14400 0 CLT} + {1313899200 -10800 1 CLST} + {1335668400 -14400 0 CLT} + {1346558400 -10800 1 CLST} + {1367118000 -14400 0 CLT} + {1378612800 -10800 1 CLST} + {1398567600 -14400 0 CLT} + {1410062400 -10800 1 CLST} + {1430017200 -14400 0 CLT} + {1441512000 -10800 1 CLST} + {1461466800 -14400 0 CLT} + {1472961600 -10800 1 CLST} + {1492916400 -14400 0 CLT} + {1504411200 -10800 1 CLST} + {1524970800 -14400 0 CLT} + {1535860800 -10800 1 CLST} + {1556420400 -14400 0 CLT} + {1567915200 -10800 1 CLST} + {1587870000 -14400 0 CLT} + {1599364800 -10800 1 CLST} + {1619319600 -14400 0 CLT} + {1630814400 -10800 1 CLST} + {1650769200 -14400 0 CLT} + {1662264000 -10800 1 CLST} + {1682218800 -14400 0 CLT} + {1693713600 -10800 1 CLST} + {1714273200 -14400 0 CLT} + {1725768000 -10800 1 CLST} + {1745722800 -14400 0 CLT} + {1757217600 -10800 1 CLST} + {1777172400 -14400 0 CLT} + {1788667200 -10800 1 CLST} + {1808622000 -14400 0 CLT} + {1820116800 -10800 1 CLST} + {1840071600 -14400 0 CLT} + {1851566400 -10800 1 CLST} + {1872126000 -14400 0 CLT} + {1883016000 -10800 1 CLST} + {1903575600 -14400 0 CLT} + {1915070400 -10800 1 CLST} + {1935025200 -14400 0 CLT} + {1946520000 -10800 1 CLST} + {1966474800 -14400 0 CLT} + {1977969600 -10800 1 CLST} + {1997924400 -14400 0 CLT} + {2009419200 -10800 1 CLST} + {2029374000 -14400 0 CLT} + {2040868800 -10800 1 CLST} + {2061428400 -14400 0 CLT} + {2072318400 -10800 1 CLST} + {2092878000 -14400 0 CLT} + {2104372800 -10800 1 CLST} + {2124327600 -14400 0 CLT} + {2135822400 -10800 1 CLST} + {2155777200 -14400 0 CLT} + {2167272000 -10800 1 CLST} + {2187226800 -14400 0 CLT} + {2198721600 -10800 1 CLST} + {2219281200 -14400 0 CLT} + {2230171200 -10800 1 CLST} + {2250730800 -14400 0 CLT} + {2262225600 -10800 1 CLST} + {2282180400 -14400 0 CLT} + {2293675200 -10800 1 CLST} + {2313630000 -14400 0 CLT} + {2325124800 -10800 1 CLST} + {2345079600 -14400 0 CLT} + {2356574400 -10800 1 CLST} + {2376529200 -14400 0 CLT} + {2388024000 -10800 1 CLST} + {2408583600 -14400 0 CLT} + {2419473600 -10800 1 CLST} + {2440033200 -14400 0 CLT} + {2451528000 -10800 1 CLST} + {2471482800 -14400 0 CLT} + {2482977600 -10800 1 CLST} + {2502932400 -14400 0 CLT} + {2514427200 -10800 1 CLST} + {2534382000 -14400 0 CLT} + {2545876800 -10800 1 CLST} + {2565831600 -14400 0 CLT} + {2577326400 -10800 1 CLST} + {2597886000 -14400 0 CLT} + {2609380800 -10800 1 CLST} + {2629335600 -14400 0 CLT} + {2640830400 -10800 1 CLST} + {2660785200 -14400 0 CLT} + {2672280000 -10800 1 CLST} + {2692234800 -14400 0 CLT} + {2703729600 -10800 1 CLST} + {2723684400 -14400 0 CLT} + {2735179200 -10800 1 CLST} + {2755738800 -14400 0 CLT} + {2766628800 -10800 1 CLST} + {2787188400 -14400 0 CLT} + {2798683200 -10800 1 CLST} + {2818638000 -14400 0 CLT} + {2830132800 -10800 1 CLST} + {2850087600 -14400 0 CLT} + {2861582400 -10800 1 CLST} + {2881537200 -14400 0 CLT} + {2893032000 -10800 1 CLST} + {2912986800 -14400 0 CLT} + {2924481600 -10800 1 CLST} + {2945041200 -14400 0 CLT} + {2955931200 -10800 1 CLST} + {2976490800 -14400 0 CLT} + {2987985600 -10800 1 CLST} + {3007940400 -14400 0 CLT} + {3019435200 -10800 1 CLST} + {3039390000 -14400 0 CLT} + {3050884800 -10800 1 CLST} + {3070839600 -14400 0 CLT} + {3082334400 -10800 1 CLST} + {3102894000 -14400 0 CLT} + {3113784000 -10800 1 CLST} + {3134343600 -14400 0 CLT} + {3145838400 -10800 1 CLST} + {3165793200 -14400 0 CLT} + {3177288000 -10800 1 CLST} + {3197242800 -14400 0 CLT} + {3208737600 -10800 1 CLST} + {3228692400 -14400 0 CLT} + {3240187200 -10800 1 CLST} + {3260142000 -14400 0 CLT} + {3271636800 -10800 1 CLST} + {3292196400 -14400 0 CLT} + {3303086400 -10800 1 CLST} + {3323646000 -14400 0 CLT} + {3335140800 -10800 1 CLST} + {3355095600 -14400 0 CLT} + {3366590400 -10800 1 CLST} + {3386545200 -14400 0 CLT} + {3398040000 -10800 1 CLST} + {3417994800 -14400 0 CLT} + {3429489600 -10800 1 CLST} + {3449444400 -14400 0 CLT} + {3460939200 -10800 1 CLST} + {3481498800 -14400 0 CLT} + {3492993600 -10800 1 CLST} + {3512948400 -14400 0 CLT} + {3524443200 -10800 1 CLST} + {3544398000 -14400 0 CLT} + {3555892800 -10800 1 CLST} + {3575847600 -14400 0 CLT} + {3587342400 -10800 1 CLST} + {3607297200 -14400 0 CLT} + {3618792000 -10800 1 CLST} + {3639351600 -14400 0 CLT} + {3650241600 -10800 1 CLST} + {3670801200 -14400 0 CLT} + {3682296000 -10800 1 CLST} + {3702250800 -14400 0 CLT} + {3713745600 -10800 1 CLST} + {3733700400 -14400 0 CLT} + {3745195200 -10800 1 CLST} + {3765150000 -14400 0 CLT} + {3776644800 -10800 1 CLST} + {3796599600 -14400 0 CLT} + {3808094400 -10800 1 CLST} + {3828654000 -14400 0 CLT} + {3839544000 -10800 1 CLST} + {3860103600 -14400 0 CLT} + {3871598400 -10800 1 CLST} + {3891553200 -14400 0 CLT} + {3903048000 -10800 1 CLST} + {3923002800 -14400 0 CLT} + {3934497600 -10800 1 CLST} + {3954452400 -14400 0 CLT} + {3965947200 -10800 1 CLST} + {3986506800 -14400 0 CLT} + {3997396800 -10800 1 CLST} + {4017956400 -14400 0 CLT} + {4029451200 -10800 1 CLST} + {4049406000 -14400 0 CLT} + {4060900800 -10800 1 CLST} + {4080855600 -14400 0 CLT} + {4092350400 -10800 1 CLST} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Rothera b/inkstitch/bin/tcl/tzdata/Antarctica/Rothera new file mode 100644 index 0000000..24d7f3e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Rothera @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Rothera) { + {-9223372036854775808 0 0 zzz} + {218246400 -10800 0 ROTT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole b/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole new file mode 100644 index 0000000..34d0db1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Antarctica/McMurdo)]} { + LoadTimeZoneFile Antarctica/McMurdo +} +set TZData(:Antarctica/South_Pole) $TZData(:Antarctica/McMurdo) diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Syowa b/inkstitch/bin/tcl/tzdata/Antarctica/Syowa new file mode 100644 index 0000000..4d046b5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Syowa @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Syowa) { + {-9223372036854775808 0 0 zzz} + {-407808000 10800 0 SYOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Antarctica/Vostok b/inkstitch/bin/tcl/tzdata/Antarctica/Vostok new file mode 100644 index 0000000..f846f65 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Antarctica/Vostok @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Vostok) { + {-9223372036854775808 0 0 zzz} + {-380073600 21600 0 VOST} +} diff --git a/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen b/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen new file mode 100644 index 0000000..51f83dc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Oslo)]} { + LoadTimeZoneFile Europe/Oslo +} +set TZData(:Arctic/Longyearbyen) $TZData(:Europe/Oslo) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Aden b/inkstitch/bin/tcl/tzdata/Asia/Aden new file mode 100644 index 0000000..399d9f0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Aden @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Aden) { + {-9223372036854775808 10794 0 LMT} + {-631162794 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Almaty b/inkstitch/bin/tcl/tzdata/Asia/Almaty new file mode 100644 index 0000000..68dee29 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Almaty @@ -0,0 +1,56 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Almaty) { + {-9223372036854775808 18468 0 LMT} + {-1441170468 18000 0 ALMT} + {-1247547600 21600 0 ALMT} + {354909600 25200 1 ALMST} + {370717200 21600 0 ALMT} + {386445600 25200 1 ALMST} + {402253200 21600 0 ALMT} + {417981600 25200 1 ALMST} + {433789200 21600 0 ALMT} + {449604000 25200 1 ALMST} + {465336000 21600 0 ALMT} + {481060800 25200 1 ALMST} + {496785600 21600 0 ALMT} + {512510400 25200 1 ALMST} + {528235200 21600 0 ALMT} + {543960000 25200 1 ALMST} + {559684800 21600 0 ALMT} + {575409600 25200 1 ALMST} + {591134400 21600 0 ALMT} + {606859200 25200 1 ALMST} + {622584000 21600 0 ALMT} + {638308800 25200 1 ALMST} + {654638400 21600 0 ALMT} + {662666400 21600 0 ALMT} + {694202400 21600 0 ALMT} + {701802000 25200 1 ALMST} + {717523200 21600 0 ALMT} + {733262400 25200 1 ALMST} + {748987200 21600 0 ALMT} + {764712000 25200 1 ALMST} + {780436800 21600 0 ALMT} + {796161600 25200 1 ALMST} + {811886400 21600 0 ALMT} + {828216000 25200 1 ALMST} + {846360000 21600 0 ALMT} + {859665600 25200 1 ALMST} + {877809600 21600 0 ALMT} + {891115200 25200 1 ALMST} + {909259200 21600 0 ALMT} + {922564800 25200 1 ALMST} + {941313600 21600 0 ALMT} + {954014400 25200 1 ALMST} + {972763200 21600 0 ALMT} + {985464000 25200 1 ALMST} + {1004212800 21600 0 ALMT} + {1017518400 25200 1 ALMST} + {1035662400 21600 0 ALMT} + {1048968000 25200 1 ALMST} + {1067112000 21600 0 ALMT} + {1080417600 25200 1 ALMST} + {1099166400 21600 0 ALMT} + {1110823200 21600 0 ALMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Amman b/inkstitch/bin/tcl/tzdata/Asia/Amman new file mode 100644 index 0000000..33f0ba7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Amman @@ -0,0 +1,247 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Amman) { + {-9223372036854775808 8624 0 LMT} + {-1230776624 7200 0 EET} + {108165600 10800 1 EEST} + {118270800 7200 0 EET} + {136591200 10800 1 EEST} + {149806800 7200 0 EET} + {168127200 10800 1 EEST} + {181342800 7200 0 EET} + {199749600 10800 1 EEST} + {215643600 7200 0 EET} + {231285600 10800 1 EEST} + {244501200 7200 0 EET} + {262735200 10800 1 EEST} + {275950800 7200 0 EET} + {481154400 10800 1 EEST} + {496962000 7200 0 EET} + {512949600 10800 1 EEST} + {528670800 7200 0 EET} + {544399200 10800 1 EEST} + {560120400 7200 0 EET} + {575848800 10800 1 EEST} + {592174800 7200 0 EET} + {610581600 10800 1 EEST} + {623624400 7200 0 EET} + {641167200 10800 1 EEST} + {655074000 7200 0 EET} + {671839200 10800 1 EEST} + {685918800 7200 0 EET} + {702856800 10800 1 EEST} + {717973200 7200 0 EET} + {733701600 10800 1 EEST} + {749422800 7200 0 EET} + {765151200 10800 1 EEST} + {779662800 7200 0 EET} + {797205600 10800 1 EEST} + {811116000 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {930780000 10800 1 EEST} + {938124000 7200 0 EET} + {954367200 10800 1 EEST} + {970178400 7200 0 EET} + {985816800 10800 1 EEST} + {1001628000 7200 0 EET} + {1017352800 10800 1 EEST} + {1033077600 7200 0 EET} + {1048802400 10800 1 EEST} + {1066946400 7200 0 EET} + {1080252000 10800 1 EEST} + {1097791200 7200 0 EET} + {1112306400 10800 1 EEST} + {1128031200 7200 0 EET} + {1143756000 10800 1 EEST} + {1161900000 7200 0 EET} + {1175205600 10800 1 EEST} + {1193349600 7200 0 EET} + {1206655200 10800 1 EEST} + {1225404000 7200 0 EET} + {1238104800 10800 1 EEST} + {1256853600 7200 0 EET} + {1269554400 10800 1 EEST} + {1288303200 7200 0 EET} + {1301608800 10800 1 EEST} + {1319752800 7200 0 EET} + {1333058400 10800 1 EEST} + {1364504400 10800 1 EEST} + {1382652000 7200 0 EET} + {1395957600 10800 1 EEST} + {1414706400 7200 0 EET} + {1427407200 10800 1 EEST} + {1446156000 7200 0 EET} + {1459461600 10800 1 EEST} + {1477605600 7200 0 EET} + {1490911200 10800 1 EEST} + {1509055200 7200 0 EET} + {1522360800 10800 1 EEST} + {1540504800 7200 0 EET} + {1553810400 10800 1 EEST} + {1571954400 7200 0 EET} + {1585260000 10800 1 EEST} + {1604008800 7200 0 EET} + {1616709600 10800 1 EEST} + {1635458400 7200 0 EET} + {1648764000 10800 1 EEST} + {1666908000 7200 0 EET} + {1680213600 10800 1 EEST} + {1698357600 7200 0 EET} + {1711663200 10800 1 EEST} + {1729807200 7200 0 EET} + {1743112800 10800 1 EEST} + {1761861600 7200 0 EET} + {1774562400 10800 1 EEST} + {1793311200 7200 0 EET} + {1806012000 10800 1 EEST} + {1824760800 7200 0 EET} + {1838066400 10800 1 EEST} + {1856210400 7200 0 EET} + {1869516000 10800 1 EEST} + {1887660000 7200 0 EET} + {1900965600 10800 1 EEST} + {1919109600 7200 0 EET} + {1932415200 10800 1 EEST} + {1951164000 7200 0 EET} + {1963864800 10800 1 EEST} + {1982613600 7200 0 EET} + {1995919200 10800 1 EEST} + {2014063200 7200 0 EET} + {2027368800 10800 1 EEST} + {2045512800 7200 0 EET} + {2058818400 10800 1 EEST} + {2076962400 7200 0 EET} + {2090268000 10800 1 EEST} + {2109016800 7200 0 EET} + {2121717600 10800 1 EEST} + {2140466400 7200 0 EET} + {2153167200 10800 1 EEST} + {2171916000 7200 0 EET} + {2185221600 10800 1 EEST} + {2203365600 7200 0 EET} + {2216671200 10800 1 EEST} + {2234815200 7200 0 EET} + {2248120800 10800 1 EEST} + {2266264800 7200 0 EET} + {2279570400 10800 1 EEST} + {2298319200 7200 0 EET} + {2311020000 10800 1 EEST} + {2329768800 7200 0 EET} + {2343074400 10800 1 EEST} + {2361218400 7200 0 EET} + {2374524000 10800 1 EEST} + {2392668000 7200 0 EET} + {2405973600 10800 1 EEST} + {2424117600 7200 0 EET} + {2437423200 10800 1 EEST} + {2455567200 7200 0 EET} + {2468872800 10800 1 EEST} + {2487621600 7200 0 EET} + {2500322400 10800 1 EEST} + {2519071200 7200 0 EET} + {2532376800 10800 1 EEST} + {2550520800 7200 0 EET} + {2563826400 10800 1 EEST} + {2581970400 7200 0 EET} + {2595276000 10800 1 EEST} + {2613420000 7200 0 EET} + {2626725600 10800 1 EEST} + {2645474400 7200 0 EET} + {2658175200 10800 1 EEST} + {2676924000 7200 0 EET} + {2689624800 10800 1 EEST} + {2708373600 7200 0 EET} + {2721679200 10800 1 EEST} + {2739823200 7200 0 EET} + {2753128800 10800 1 EEST} + {2771272800 7200 0 EET} + {2784578400 10800 1 EEST} + {2802722400 7200 0 EET} + {2816028000 10800 1 EEST} + {2834776800 7200 0 EET} + {2847477600 10800 1 EEST} + {2866226400 7200 0 EET} + {2879532000 10800 1 EEST} + {2897676000 7200 0 EET} + {2910981600 10800 1 EEST} + {2929125600 7200 0 EET} + {2942431200 10800 1 EEST} + {2960575200 7200 0 EET} + {2973880800 10800 1 EEST} + {2992629600 7200 0 EET} + {3005330400 10800 1 EEST} + {3024079200 7200 0 EET} + {3036780000 10800 1 EEST} + {3055528800 7200 0 EET} + {3068834400 10800 1 EEST} + {3086978400 7200 0 EET} + {3100284000 10800 1 EEST} + {3118428000 7200 0 EET} + {3131733600 10800 1 EEST} + {3149877600 7200 0 EET} + {3163183200 10800 1 EEST} + {3181932000 7200 0 EET} + {3194632800 10800 1 EEST} + {3213381600 7200 0 EET} + {3226687200 10800 1 EEST} + {3244831200 7200 0 EET} + {3258136800 10800 1 EEST} + {3276280800 7200 0 EET} + {3289586400 10800 1 EEST} + {3307730400 7200 0 EET} + {3321036000 10800 1 EEST} + {3339180000 7200 0 EET} + {3352485600 10800 1 EEST} + {3371234400 7200 0 EET} + {3383935200 10800 1 EEST} + {3402684000 7200 0 EET} + {3415989600 10800 1 EEST} + {3434133600 7200 0 EET} + {3447439200 10800 1 EEST} + {3465583200 7200 0 EET} + {3478888800 10800 1 EEST} + {3497032800 7200 0 EET} + {3510338400 10800 1 EEST} + {3529087200 7200 0 EET} + {3541788000 10800 1 EEST} + {3560536800 7200 0 EET} + {3573237600 10800 1 EEST} + {3591986400 7200 0 EET} + {3605292000 10800 1 EEST} + {3623436000 7200 0 EET} + {3636741600 10800 1 EEST} + {3654885600 7200 0 EET} + {3668191200 10800 1 EEST} + {3686335200 7200 0 EET} + {3699640800 10800 1 EEST} + {3718389600 7200 0 EET} + {3731090400 10800 1 EEST} + {3749839200 7200 0 EET} + {3763144800 10800 1 EEST} + {3781288800 7200 0 EET} + {3794594400 10800 1 EEST} + {3812738400 7200 0 EET} + {3826044000 10800 1 EEST} + {3844188000 7200 0 EET} + {3857493600 10800 1 EEST} + {3876242400 7200 0 EET} + {3888943200 10800 1 EEST} + {3907692000 7200 0 EET} + {3920392800 10800 1 EEST} + {3939141600 7200 0 EET} + {3952447200 10800 1 EEST} + {3970591200 7200 0 EET} + {3983896800 10800 1 EEST} + {4002040800 7200 0 EET} + {4015346400 10800 1 EEST} + {4033490400 7200 0 EET} + {4046796000 10800 1 EEST} + {4065544800 7200 0 EET} + {4078245600 10800 1 EEST} + {4096994400 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Anadyr b/inkstitch/bin/tcl/tzdata/Asia/Anadyr new file mode 100644 index 0000000..50ace50 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Anadyr @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Anadyr) { + {-9223372036854775808 42596 0 LMT} + {-1441194596 43200 0 ANAT} + {-1247572800 46800 0 ANAMMTT} + {354884400 50400 1 ANAST} + {370692000 46800 0 ANAT} + {386420400 43200 0 ANAMMTT} + {386424000 46800 1 ANAST} + {402231600 43200 0 ANAT} + {417960000 46800 1 ANAST} + {433767600 43200 0 ANAT} + {449582400 46800 1 ANAST} + {465314400 43200 0 ANAT} + {481039200 46800 1 ANAST} + {496764000 43200 0 ANAT} + {512488800 46800 1 ANAST} + {528213600 43200 0 ANAT} + {543938400 46800 1 ANAST} + {559663200 43200 0 ANAT} + {575388000 46800 1 ANAST} + {591112800 43200 0 ANAT} + {606837600 46800 1 ANAST} + {622562400 43200 0 ANAT} + {638287200 46800 1 ANAST} + {654616800 43200 0 ANAT} + {670341600 39600 0 ANAMMTT} + {670345200 43200 1 ANAST} + {686070000 39600 0 ANAT} + {695746800 43200 0 ANAMMTT} + {701780400 46800 1 ANAST} + {717501600 43200 0 ANAT} + {733240800 46800 1 ANAST} + {748965600 43200 0 ANAT} + {764690400 46800 1 ANAST} + {780415200 43200 0 ANAT} + {796140000 46800 1 ANAST} + {811864800 43200 0 ANAT} + {828194400 46800 1 ANAST} + {846338400 43200 0 ANAT} + {859644000 46800 1 ANAST} + {877788000 43200 0 ANAT} + {891093600 46800 1 ANAST} + {909237600 43200 0 ANAT} + {922543200 46800 1 ANAST} + {941292000 43200 0 ANAT} + {953992800 46800 1 ANAST} + {972741600 43200 0 ANAT} + {985442400 46800 1 ANAST} + {1004191200 43200 0 ANAT} + {1017496800 46800 1 ANAST} + {1035640800 43200 0 ANAT} + {1048946400 46800 1 ANAST} + {1067090400 43200 0 ANAT} + {1080396000 46800 1 ANAST} + {1099144800 43200 0 ANAT} + {1111845600 46800 1 ANAST} + {1130594400 43200 0 ANAT} + {1143295200 46800 1 ANAST} + {1162044000 43200 0 ANAT} + {1174744800 46800 1 ANAST} + {1193493600 43200 0 ANAT} + {1206799200 46800 1 ANAST} + {1224943200 43200 0 ANAT} + {1238248800 46800 1 ANAST} + {1256392800 43200 0 ANAT} + {1269698400 39600 0 ANAMMTT} + {1269702000 43200 1 ANAST} + {1288450800 39600 0 ANAT} + {1301151600 43200 0 ANAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Aqtau b/inkstitch/bin/tcl/tzdata/Asia/Aqtau new file mode 100644 index 0000000..11e89a2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Aqtau @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Aqtau) { + {-9223372036854775808 12064 0 LMT} + {-1441164064 14400 0 FORT} + {-1247544000 18000 0 FORT} + {-220942800 18000 0 SHET} + {370724400 21600 0 SHET} + {386445600 18000 0 SHET} + {386449200 21600 1 SHEST} + {402256800 18000 0 SHET} + {417985200 21600 1 SHEST} + {433792800 18000 0 SHET} + {449607600 21600 1 SHEST} + {465339600 18000 0 SHET} + {481064400 21600 1 SHEST} + {496789200 18000 0 SHET} + {512514000 21600 1 SHEST} + {528238800 18000 0 SHET} + {543963600 21600 1 SHEST} + {559688400 18000 0 SHET} + {575413200 21600 1 SHEST} + {591138000 18000 0 SHET} + {606862800 21600 1 SHEST} + {622587600 18000 0 SHET} + {638312400 21600 1 SHEST} + {654642000 18000 0 SHET} + {662670000 18000 0 SHET} + {692823600 18000 0 AQTT} + {701805600 21600 1 AQTST} + {717526800 18000 0 AQTT} + {733266000 21600 1 AQTST} + {748990800 18000 0 AQTT} + {764715600 21600 1 AQTST} + {780440400 18000 0 AQTT} + {796165200 14400 0 AQTT} + {796168800 18000 1 AQTST} + {811893600 14400 0 AQTT} + {828223200 18000 1 AQTST} + {846367200 14400 0 AQTT} + {859672800 18000 1 AQTST} + {877816800 14400 0 AQTT} + {891122400 18000 1 AQTST} + {909266400 14400 0 AQTT} + {922572000 18000 1 AQTST} + {941320800 14400 0 AQTT} + {954021600 18000 1 AQTST} + {972770400 14400 0 AQTT} + {985471200 18000 1 AQTST} + {1004220000 14400 0 AQTT} + {1017525600 18000 1 AQTST} + {1035669600 14400 0 AQTT} + {1048975200 18000 1 AQTST} + {1067119200 14400 0 AQTT} + {1080424800 18000 1 AQTST} + {1099173600 14400 0 AQTT} + {1110830400 18000 0 AQTT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Aqtobe b/inkstitch/bin/tcl/tzdata/Asia/Aqtobe new file mode 100644 index 0000000..c857491 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Aqtobe @@ -0,0 +1,57 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Aqtobe) { + {-9223372036854775808 13720 0 LMT} + {-1441165720 14400 0 AKTT} + {-1247544000 18000 0 AKTT} + {354913200 21600 1 AKTST} + {370720800 21600 0 AKTT} + {386445600 18000 0 AKTT} + {386449200 21600 1 AKTST} + {402256800 18000 0 AKTT} + {417985200 21600 1 AKTST} + {433792800 18000 0 AKTT} + {449607600 21600 1 AKTST} + {465339600 18000 0 AKTT} + {481064400 21600 1 AKTST} + {496789200 18000 0 AKTT} + {512514000 21600 1 AKTST} + {528238800 18000 0 AKTT} + {543963600 21600 1 AKTST} + {559688400 18000 0 AKTT} + {575413200 21600 1 AKTST} + {591138000 18000 0 AKTT} + {606862800 21600 1 AKTST} + {622587600 18000 0 AKTT} + {638312400 21600 1 AKTST} + {654642000 18000 0 AKTT} + {662670000 18000 0 AKTT} + {692823600 18000 0 AQTT} + {701805600 21600 1 AQTST} + {717526800 18000 0 AQTT} + {733266000 21600 1 AQTST} + {748990800 18000 0 AQTT} + {764715600 21600 1 AQTST} + {780440400 18000 0 AQTT} + {796165200 21600 1 AQTST} + {811890000 18000 0 AQTT} + {828219600 21600 1 AQTST} + {846363600 18000 0 AQTT} + {859669200 21600 1 AQTST} + {877813200 18000 0 AQTT} + {891118800 21600 1 AQTST} + {909262800 18000 0 AQTT} + {922568400 21600 1 AQTST} + {941317200 18000 0 AQTT} + {954018000 21600 1 AQTST} + {972766800 18000 0 AQTT} + {985467600 21600 1 AQTST} + {1004216400 18000 0 AQTT} + {1017522000 21600 1 AQTST} + {1035666000 18000 0 AQTT} + {1048971600 21600 1 AQTST} + {1067115600 18000 0 AQTT} + {1080421200 21600 1 AQTST} + {1099170000 18000 0 AQTT} + {1110826800 18000 0 AQTT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ashgabat b/inkstitch/bin/tcl/tzdata/Asia/Ashgabat new file mode 100644 index 0000000..64bdb3a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ashgabat @@ -0,0 +1,31 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ashgabat) { + {-9223372036854775808 14012 0 LMT} + {-1441166012 14400 0 ASHT} + {-1247544000 18000 0 ASHT} + {354913200 21600 1 ASHST} + {370720800 18000 0 ASHT} + {386449200 21600 1 ASHST} + {402256800 18000 0 ASHT} + {417985200 21600 1 ASHST} + {433792800 18000 0 ASHT} + {449607600 21600 1 ASHST} + {465339600 18000 0 ASHT} + {481064400 21600 1 ASHST} + {496789200 18000 0 ASHT} + {512514000 21600 1 ASHST} + {528238800 18000 0 ASHT} + {543963600 21600 1 ASHST} + {559688400 18000 0 ASHT} + {575413200 21600 1 ASHST} + {591138000 18000 0 ASHT} + {606862800 21600 1 ASHST} + {622587600 18000 0 ASHT} + {638312400 21600 1 ASHST} + {654642000 18000 0 ASHT} + {670366800 14400 0 ASHT} + {670370400 18000 1 ASHST} + {686095200 14400 0 ASHT} + {695772000 18000 0 TMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad b/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad new file mode 100644 index 0000000..3000c94 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ashgabat)]} { + LoadTimeZoneFile Asia/Ashgabat +} +set TZData(:Asia/Ashkhabad) $TZData(:Asia/Ashgabat) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Baghdad b/inkstitch/bin/tcl/tzdata/Asia/Baghdad new file mode 100644 index 0000000..c1058cb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Baghdad @@ -0,0 +1,59 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Baghdad) { + {-9223372036854775808 10660 0 LMT} + {-2524532260 10656 0 BMT} + {-1641005856 10800 0 AST} + {389048400 14400 0 ADT} + {402264000 10800 0 AST} + {417906000 14400 1 ADT} + {433800000 10800 0 AST} + {449614800 14400 1 ADT} + {465422400 10800 0 AST} + {481150800 14400 1 ADT} + {496792800 10800 0 AST} + {512517600 14400 1 ADT} + {528242400 10800 0 AST} + {543967200 14400 1 ADT} + {559692000 10800 0 AST} + {575416800 14400 1 ADT} + {591141600 10800 0 AST} + {606866400 14400 1 ADT} + {622591200 10800 0 AST} + {638316000 14400 1 ADT} + {654645600 10800 0 AST} + {670464000 14400 1 ADT} + {686275200 10800 0 AST} + {702086400 14400 1 ADT} + {717897600 10800 0 AST} + {733622400 14400 1 ADT} + {749433600 10800 0 AST} + {765158400 14400 1 ADT} + {780969600 10800 0 AST} + {796694400 14400 1 ADT} + {812505600 10800 0 AST} + {828316800 14400 1 ADT} + {844128000 10800 0 AST} + {859852800 14400 1 ADT} + {875664000 10800 0 AST} + {891388800 14400 1 ADT} + {907200000 10800 0 AST} + {922924800 14400 1 ADT} + {938736000 10800 0 AST} + {954547200 14400 1 ADT} + {970358400 10800 0 AST} + {986083200 14400 1 ADT} + {1001894400 10800 0 AST} + {1017619200 14400 1 ADT} + {1033430400 10800 0 AST} + {1049155200 14400 1 ADT} + {1064966400 10800 0 AST} + {1080777600 14400 1 ADT} + {1096588800 10800 0 AST} + {1112313600 14400 1 ADT} + {1128124800 10800 0 AST} + {1143849600 14400 1 ADT} + {1159660800 10800 0 AST} + {1175385600 14400 1 ADT} + {1191196800 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Bahrain b/inkstitch/bin/tcl/tzdata/Asia/Bahrain new file mode 100644 index 0000000..d4b7d2c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Bahrain @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Bahrain) { + {-9223372036854775808 12140 0 LMT} + {-1577935340 14400 0 GST} + {76190400 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Baku b/inkstitch/bin/tcl/tzdata/Asia/Baku new file mode 100644 index 0000000..e50071b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Baku @@ -0,0 +1,242 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Baku) { + {-9223372036854775808 11964 0 LMT} + {-1441163964 10800 0 BAKT} + {-405140400 14400 0 BAKT} + {354916800 18000 1 BAKST} + {370724400 14400 0 BAKT} + {386452800 18000 1 BAKST} + {402260400 14400 0 BAKT} + {417988800 18000 1 BAKST} + {433796400 14400 0 BAKT} + {449611200 18000 1 BAKST} + {465343200 14400 0 BAKT} + {481068000 18000 1 BAKST} + {496792800 14400 0 BAKT} + {512517600 18000 1 BAKST} + {528242400 14400 0 BAKT} + {543967200 18000 1 BAKST} + {559692000 14400 0 BAKT} + {575416800 18000 1 BAKST} + {591141600 14400 0 BAKT} + {606866400 18000 1 BAKST} + {622591200 14400 0 BAKT} + {638316000 18000 1 BAKST} + {654645600 14400 0 BAKT} + {670370400 14400 1 BAKST} + {683496000 14400 0 AZST} + {686098800 10800 0 AZT} + {701812800 14400 1 AZST} + {717537600 14400 0 AZT} + {820440000 14400 0 AZT} + {828234000 18000 1 AZST} + {846378000 14400 0 AZT} + {852062400 14400 0 AZT} + {859680000 18000 1 AZST} + {877824000 14400 0 AZT} + {891129600 18000 1 AZST} + {909273600 14400 0 AZT} + {922579200 18000 1 AZST} + {941328000 14400 0 AZT} + {954028800 18000 1 AZST} + {972777600 14400 0 AZT} + {985478400 18000 1 AZST} + {1004227200 14400 0 AZT} + {1017532800 18000 1 AZST} + {1035676800 14400 0 AZT} + {1048982400 18000 1 AZST} + {1067126400 14400 0 AZT} + {1080432000 18000 1 AZST} + {1099180800 14400 0 AZT} + {1111881600 18000 1 AZST} + {1130630400 14400 0 AZT} + {1143331200 18000 1 AZST} + {1162080000 14400 0 AZT} + {1174780800 18000 1 AZST} + {1193529600 14400 0 AZT} + {1206835200 18000 1 AZST} + {1224979200 14400 0 AZT} + {1238284800 18000 1 AZST} + {1256428800 14400 0 AZT} + {1269734400 18000 1 AZST} + {1288483200 14400 0 AZT} + {1301184000 18000 1 AZST} + {1319932800 14400 0 AZT} + {1332633600 18000 1 AZST} + {1351382400 14400 0 AZT} + {1364688000 18000 1 AZST} + {1382832000 14400 0 AZT} + {1396137600 18000 1 AZST} + {1414281600 14400 0 AZT} + {1427587200 18000 1 AZST} + {1445731200 14400 0 AZT} + {1459036800 18000 1 AZST} + {1477785600 14400 0 AZT} + {1490486400 18000 1 AZST} + {1509235200 14400 0 AZT} + {1521936000 18000 1 AZST} + {1540684800 14400 0 AZT} + {1553990400 18000 1 AZST} + {1572134400 14400 0 AZT} + {1585440000 18000 1 AZST} + {1603584000 14400 0 AZT} + {1616889600 18000 1 AZST} + {1635638400 14400 0 AZT} + {1648339200 18000 1 AZST} + {1667088000 14400 0 AZT} + {1679788800 18000 1 AZST} + {1698537600 14400 0 AZT} + {1711843200 18000 1 AZST} + {1729987200 14400 0 AZT} + {1743292800 18000 1 AZST} + {1761436800 14400 0 AZT} + {1774742400 18000 1 AZST} + {1792886400 14400 0 AZT} + {1806192000 18000 1 AZST} + {1824940800 14400 0 AZT} + {1837641600 18000 1 AZST} + {1856390400 14400 0 AZT} + {1869091200 18000 1 AZST} + {1887840000 14400 0 AZT} + {1901145600 18000 1 AZST} + {1919289600 14400 0 AZT} + {1932595200 18000 1 AZST} + {1950739200 14400 0 AZT} + {1964044800 18000 1 AZST} + {1982793600 14400 0 AZT} + {1995494400 18000 1 AZST} + {2014243200 14400 0 AZT} + {2026944000 18000 1 AZST} + {2045692800 14400 0 AZT} + {2058393600 18000 1 AZST} + {2077142400 14400 0 AZT} + {2090448000 18000 1 AZST} + {2108592000 14400 0 AZT} + {2121897600 18000 1 AZST} + {2140041600 14400 0 AZT} + {2153347200 18000 1 AZST} + {2172096000 14400 0 AZT} + {2184796800 18000 1 AZST} + {2203545600 14400 0 AZT} + {2216246400 18000 1 AZST} + {2234995200 14400 0 AZT} + {2248300800 18000 1 AZST} + {2266444800 14400 0 AZT} + {2279750400 18000 1 AZST} + {2297894400 14400 0 AZT} + {2311200000 18000 1 AZST} + {2329344000 14400 0 AZT} + {2342649600 18000 1 AZST} + {2361398400 14400 0 AZT} + {2374099200 18000 1 AZST} + {2392848000 14400 0 AZT} + {2405548800 18000 1 AZST} + {2424297600 14400 0 AZT} + {2437603200 18000 1 AZST} + {2455747200 14400 0 AZT} + {2469052800 18000 1 AZST} + {2487196800 14400 0 AZT} + {2500502400 18000 1 AZST} + {2519251200 14400 0 AZT} + {2531952000 18000 1 AZST} + {2550700800 14400 0 AZT} + {2563401600 18000 1 AZST} + {2582150400 14400 0 AZT} + {2595456000 18000 1 AZST} + {2613600000 14400 0 AZT} + {2626905600 18000 1 AZST} + {2645049600 14400 0 AZT} + {2658355200 18000 1 AZST} + {2676499200 14400 0 AZT} + {2689804800 18000 1 AZST} + {2708553600 14400 0 AZT} + {2721254400 18000 1 AZST} + {2740003200 14400 0 AZT} + {2752704000 18000 1 AZST} + {2771452800 14400 0 AZT} + {2784758400 18000 1 AZST} + {2802902400 14400 0 AZT} + {2816208000 18000 1 AZST} + {2834352000 14400 0 AZT} + {2847657600 18000 1 AZST} + {2866406400 14400 0 AZT} + {2879107200 18000 1 AZST} + {2897856000 14400 0 AZT} + {2910556800 18000 1 AZST} + {2929305600 14400 0 AZT} + {2942006400 18000 1 AZST} + {2960755200 14400 0 AZT} + {2974060800 18000 1 AZST} + {2992204800 14400 0 AZT} + {3005510400 18000 1 AZST} + {3023654400 14400 0 AZT} + {3036960000 18000 1 AZST} + {3055708800 14400 0 AZT} + {3068409600 18000 1 AZST} + {3087158400 14400 0 AZT} + {3099859200 18000 1 AZST} + {3118608000 14400 0 AZT} + {3131913600 18000 1 AZST} + {3150057600 14400 0 AZT} + {3163363200 18000 1 AZST} + {3181507200 14400 0 AZT} + {3194812800 18000 1 AZST} + {3212956800 14400 0 AZT} + {3226262400 18000 1 AZST} + {3245011200 14400 0 AZT} + {3257712000 18000 1 AZST} + {3276460800 14400 0 AZT} + {3289161600 18000 1 AZST} + {3307910400 14400 0 AZT} + {3321216000 18000 1 AZST} + {3339360000 14400 0 AZT} + {3352665600 18000 1 AZST} + {3370809600 14400 0 AZT} + {3384115200 18000 1 AZST} + {3402864000 14400 0 AZT} + {3415564800 18000 1 AZST} + {3434313600 14400 0 AZT} + {3447014400 18000 1 AZST} + {3465763200 14400 0 AZT} + {3479068800 18000 1 AZST} + {3497212800 14400 0 AZT} + {3510518400 18000 1 AZST} + {3528662400 14400 0 AZT} + {3541968000 18000 1 AZST} + {3560112000 14400 0 AZT} + {3573417600 18000 1 AZST} + {3592166400 14400 0 AZT} + {3604867200 18000 1 AZST} + {3623616000 14400 0 AZT} + {3636316800 18000 1 AZST} + {3655065600 14400 0 AZT} + {3668371200 18000 1 AZST} + {3686515200 14400 0 AZT} + {3699820800 18000 1 AZST} + {3717964800 14400 0 AZT} + {3731270400 18000 1 AZST} + {3750019200 14400 0 AZT} + {3762720000 18000 1 AZST} + {3781468800 14400 0 AZT} + {3794169600 18000 1 AZST} + {3812918400 14400 0 AZT} + {3825619200 18000 1 AZST} + {3844368000 14400 0 AZT} + {3857673600 18000 1 AZST} + {3875817600 14400 0 AZT} + {3889123200 18000 1 AZST} + {3907267200 14400 0 AZT} + {3920572800 18000 1 AZST} + {3939321600 14400 0 AZT} + {3952022400 18000 1 AZST} + {3970771200 14400 0 AZT} + {3983472000 18000 1 AZST} + {4002220800 14400 0 AZT} + {4015526400 18000 1 AZST} + {4033670400 14400 0 AZT} + {4046976000 18000 1 AZST} + {4065120000 14400 0 AZT} + {4078425600 18000 1 AZST} + {4096569600 14400 0 AZT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Bangkok b/inkstitch/bin/tcl/tzdata/Asia/Bangkok new file mode 100644 index 0000000..6df7680 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Bangkok @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Bangkok) { + {-9223372036854775808 24124 0 LMT} + {-2840164924 24124 0 BMT} + {-1570084924 25200 0 ICT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Beirut b/inkstitch/bin/tcl/tzdata/Asia/Beirut new file mode 100644 index 0000000..ac0a64e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Beirut @@ -0,0 +1,270 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Beirut) { + {-9223372036854775808 8520 0 LMT} + {-2840149320 7200 0 EET} + {-1570413600 10800 1 EEST} + {-1552186800 7200 0 EET} + {-1538359200 10800 1 EEST} + {-1522551600 7200 0 EET} + {-1507514400 10800 1 EEST} + {-1490583600 7200 0 EET} + {-1473645600 10800 1 EEST} + {-1460948400 7200 0 EET} + {-399866400 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336794400 10800 1 EEST} + {-323578800 7200 0 EET} + {-305172000 10800 1 EEST} + {-291956400 7200 0 EET} + {-273636000 10800 1 EEST} + {-260420400 7200 0 EET} + {78012000 10800 1 EEST} + {86734800 7200 0 EET} + {105055200 10800 1 EEST} + {118270800 7200 0 EET} + {136591200 10800 1 EEST} + {149806800 7200 0 EET} + {168127200 10800 1 EEST} + {181342800 7200 0 EET} + {199749600 10800 1 EEST} + {212965200 7200 0 EET} + {231285600 10800 1 EEST} + {244501200 7200 0 EET} + {262735200 10800 1 EEST} + {275950800 7200 0 EET} + {452210400 10800 1 EEST} + {466722000 7200 0 EET} + {483746400 10800 1 EEST} + {498258000 7200 0 EET} + {515282400 10800 1 EEST} + {529794000 7200 0 EET} + {546818400 10800 1 EEST} + {561330000 7200 0 EET} + {581119200 10800 1 EEST} + {592952400 7200 0 EET} + {610754400 10800 1 EEST} + {624488400 7200 0 EET} + {641512800 10800 1 EEST} + {656024400 7200 0 EET} + {673048800 10800 1 EEST} + {687560400 7200 0 EET} + {704671200 10800 1 EEST} + {718146000 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {843944400 7200 0 EET} + {859672800 10800 1 EEST} + {875394000 7200 0 EET} + {891122400 10800 1 EEST} + {906843600 7200 0 EET} + {922572000 10800 1 EEST} + {941317200 7200 0 EET} + {954021600 10800 1 EEST} + {972766800 7200 0 EET} + {985471200 10800 1 EEST} + {1004216400 7200 0 EET} + {1017525600 10800 1 EEST} + {1035666000 7200 0 EET} + {1048975200 10800 1 EEST} + {1067115600 7200 0 EET} + {1080424800 10800 1 EEST} + {1099170000 7200 0 EET} + {1111874400 10800 1 EEST} + {1130619600 7200 0 EET} + {1143324000 10800 1 EEST} + {1162069200 7200 0 EET} + {1174773600 10800 1 EEST} + {1193518800 7200 0 EET} + {1206828000 10800 1 EEST} + {1224968400 7200 0 EET} + {1238277600 10800 1 EEST} + {1256418000 7200 0 EET} + {1269727200 10800 1 EEST} + {1288472400 7200 0 EET} + {1301176800 10800 1 EEST} + {1319922000 7200 0 EET} + {1332626400 10800 1 EEST} + {1351371600 7200 0 EET} + {1364680800 10800 1 EEST} + {1382821200 7200 0 EET} + {1396130400 10800 1 EEST} + {1414270800 7200 0 EET} + {1427580000 10800 1 EEST} + {1445720400 7200 0 EET} + {1459029600 10800 1 EEST} + {1477774800 7200 0 EET} + {1490479200 10800 1 EEST} + {1509224400 7200 0 EET} + {1521928800 10800 1 EEST} + {1540674000 7200 0 EET} + {1553983200 10800 1 EEST} + {1572123600 7200 0 EET} + {1585432800 10800 1 EEST} + {1603573200 7200 0 EET} + {1616882400 10800 1 EEST} + {1635627600 7200 0 EET} + {1648332000 10800 1 EEST} + {1667077200 7200 0 EET} + {1679781600 10800 1 EEST} + {1698526800 7200 0 EET} + {1711836000 10800 1 EEST} + {1729976400 7200 0 EET} + {1743285600 10800 1 EEST} + {1761426000 7200 0 EET} + {1774735200 10800 1 EEST} + {1792875600 7200 0 EET} + {1806184800 10800 1 EEST} + {1824930000 7200 0 EET} + {1837634400 10800 1 EEST} + {1856379600 7200 0 EET} + {1869084000 10800 1 EEST} + {1887829200 7200 0 EET} + {1901138400 10800 1 EEST} + {1919278800 7200 0 EET} + {1932588000 10800 1 EEST} + {1950728400 7200 0 EET} + {1964037600 10800 1 EEST} + {1982782800 7200 0 EET} + {1995487200 10800 1 EEST} + {2014232400 7200 0 EET} + {2026936800 10800 1 EEST} + {2045682000 7200 0 EET} + {2058386400 10800 1 EEST} + {2077131600 7200 0 EET} + {2090440800 10800 1 EEST} + {2108581200 7200 0 EET} + {2121890400 10800 1 EEST} + {2140030800 7200 0 EET} + {2153340000 10800 1 EEST} + {2172085200 7200 0 EET} + {2184789600 10800 1 EEST} + {2203534800 7200 0 EET} + {2216239200 10800 1 EEST} + {2234984400 7200 0 EET} + {2248293600 10800 1 EEST} + {2266434000 7200 0 EET} + {2279743200 10800 1 EEST} + {2297883600 7200 0 EET} + {2311192800 10800 1 EEST} + {2329333200 7200 0 EET} + {2342642400 10800 1 EEST} + {2361387600 7200 0 EET} + {2374092000 10800 1 EEST} + {2392837200 7200 0 EET} + {2405541600 10800 1 EEST} + {2424286800 7200 0 EET} + {2437596000 10800 1 EEST} + {2455736400 7200 0 EET} + {2469045600 10800 1 EEST} + {2487186000 7200 0 EET} + {2500495200 10800 1 EEST} + {2519240400 7200 0 EET} + {2531944800 10800 1 EEST} + {2550690000 7200 0 EET} + {2563394400 10800 1 EEST} + {2582139600 7200 0 EET} + {2595448800 10800 1 EEST} + {2613589200 7200 0 EET} + {2626898400 10800 1 EEST} + {2645038800 7200 0 EET} + {2658348000 10800 1 EEST} + {2676488400 7200 0 EET} + {2689797600 10800 1 EEST} + {2708542800 7200 0 EET} + {2721247200 10800 1 EEST} + {2739992400 7200 0 EET} + {2752696800 10800 1 EEST} + {2771442000 7200 0 EET} + {2784751200 10800 1 EEST} + {2802891600 7200 0 EET} + {2816200800 10800 1 EEST} + {2834341200 7200 0 EET} + {2847650400 10800 1 EEST} + {2866395600 7200 0 EET} + {2879100000 10800 1 EEST} + {2897845200 7200 0 EET} + {2910549600 10800 1 EEST} + {2929294800 7200 0 EET} + {2941999200 10800 1 EEST} + {2960744400 7200 0 EET} + {2974053600 10800 1 EEST} + {2992194000 7200 0 EET} + {3005503200 10800 1 EEST} + {3023643600 7200 0 EET} + {3036952800 10800 1 EEST} + {3055698000 7200 0 EET} + {3068402400 10800 1 EEST} + {3087147600 7200 0 EET} + {3099852000 10800 1 EEST} + {3118597200 7200 0 EET} + {3131906400 10800 1 EEST} + {3150046800 7200 0 EET} + {3163356000 10800 1 EEST} + {3181496400 7200 0 EET} + {3194805600 10800 1 EEST} + {3212946000 7200 0 EET} + {3226255200 10800 1 EEST} + {3245000400 7200 0 EET} + {3257704800 10800 1 EEST} + {3276450000 7200 0 EET} + {3289154400 10800 1 EEST} + {3307899600 7200 0 EET} + {3321208800 10800 1 EEST} + {3339349200 7200 0 EET} + {3352658400 10800 1 EEST} + {3370798800 7200 0 EET} + {3384108000 10800 1 EEST} + {3402853200 7200 0 EET} + {3415557600 10800 1 EEST} + {3434302800 7200 0 EET} + {3447007200 10800 1 EEST} + {3465752400 7200 0 EET} + {3479061600 10800 1 EEST} + {3497202000 7200 0 EET} + {3510511200 10800 1 EEST} + {3528651600 7200 0 EET} + {3541960800 10800 1 EEST} + {3560101200 7200 0 EET} + {3573410400 10800 1 EEST} + {3592155600 7200 0 EET} + {3604860000 10800 1 EEST} + {3623605200 7200 0 EET} + {3636309600 10800 1 EEST} + {3655054800 7200 0 EET} + {3668364000 10800 1 EEST} + {3686504400 7200 0 EET} + {3699813600 10800 1 EEST} + {3717954000 7200 0 EET} + {3731263200 10800 1 EEST} + {3750008400 7200 0 EET} + {3762712800 10800 1 EEST} + {3781458000 7200 0 EET} + {3794162400 10800 1 EEST} + {3812907600 7200 0 EET} + {3825612000 10800 1 EEST} + {3844357200 7200 0 EET} + {3857666400 10800 1 EEST} + {3875806800 7200 0 EET} + {3889116000 10800 1 EEST} + {3907256400 7200 0 EET} + {3920565600 10800 1 EEST} + {3939310800 7200 0 EET} + {3952015200 10800 1 EEST} + {3970760400 7200 0 EET} + {3983464800 10800 1 EEST} + {4002210000 7200 0 EET} + {4015519200 10800 1 EEST} + {4033659600 7200 0 EET} + {4046968800 10800 1 EEST} + {4065109200 7200 0 EET} + {4078418400 10800 1 EEST} + {4096558800 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Bishkek b/inkstitch/bin/tcl/tzdata/Asia/Bishkek new file mode 100644 index 0000000..6ba3896 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Bishkek @@ -0,0 +1,57 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Bishkek) { + {-9223372036854775808 17904 0 LMT} + {-1441169904 18000 0 FRUT} + {-1247547600 21600 0 FRUT} + {354909600 25200 1 FRUST} + {370717200 21600 0 FRUT} + {386445600 25200 1 FRUST} + {402253200 21600 0 FRUT} + {417981600 25200 1 FRUST} + {433789200 21600 0 FRUT} + {449604000 25200 1 FRUST} + {465336000 21600 0 FRUT} + {481060800 25200 1 FRUST} + {496785600 21600 0 FRUT} + {512510400 25200 1 FRUST} + {528235200 21600 0 FRUT} + {543960000 25200 1 FRUST} + {559684800 21600 0 FRUT} + {575409600 25200 1 FRUST} + {591134400 21600 0 FRUT} + {606859200 25200 1 FRUST} + {622584000 21600 0 FRUT} + {638308800 25200 1 FRUST} + {654638400 21600 0 FRUT} + {670363200 21600 1 FRUST} + {683582400 21600 0 KGT} + {703018800 21600 1 KGST} + {717530400 18000 0 KGT} + {734468400 21600 1 KGST} + {748980000 18000 0 KGT} + {765918000 21600 1 KGST} + {780429600 18000 0 KGT} + {797367600 21600 1 KGST} + {811879200 18000 0 KGT} + {828817200 21600 1 KGST} + {843933600 18000 0 KGT} + {859671000 21600 1 KGST} + {877811400 18000 0 KGT} + {891120600 21600 1 KGST} + {909261000 18000 0 KGT} + {922570200 21600 1 KGST} + {941315400 18000 0 KGT} + {954019800 21600 1 KGST} + {972765000 18000 0 KGT} + {985469400 21600 1 KGST} + {1004214600 18000 0 KGT} + {1017523800 21600 1 KGST} + {1035664200 18000 0 KGT} + {1048973400 21600 1 KGST} + {1067113800 18000 0 KGT} + {1080423000 21600 1 KGST} + {1099168200 18000 0 KGT} + {1111872600 21600 1 KGST} + {1123783200 21600 0 KGT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Brunei b/inkstitch/bin/tcl/tzdata/Asia/Brunei new file mode 100644 index 0000000..63d380b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Brunei @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Brunei) { + {-9223372036854775808 27580 0 LMT} + {-1383464380 27000 0 BNT} + {-1167636600 28800 0 BNT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Calcutta b/inkstitch/bin/tcl/tzdata/Asia/Calcutta new file mode 100644 index 0000000..7243ef8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Calcutta @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Kolkata)]} { + LoadTimeZoneFile Asia/Kolkata +} +set TZData(:Asia/Calcutta) $TZData(:Asia/Kolkata) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Choibalsan b/inkstitch/bin/tcl/tzdata/Asia/Choibalsan new file mode 100644 index 0000000..3d42617 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Choibalsan @@ -0,0 +1,51 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Choibalsan) { + {-9223372036854775808 27480 0 LMT} + {-2032933080 25200 0 ULAT} + {252435600 28800 0 ULAT} + {417974400 36000 0 CHOST} + {433778400 32400 0 CHOT} + {449593200 36000 1 CHOST} + {465314400 32400 0 CHOT} + {481042800 36000 1 CHOST} + {496764000 32400 0 CHOT} + {512492400 36000 1 CHOST} + {528213600 32400 0 CHOT} + {543942000 36000 1 CHOST} + {559663200 32400 0 CHOT} + {575391600 36000 1 CHOST} + {591112800 32400 0 CHOT} + {606841200 36000 1 CHOST} + {622562400 32400 0 CHOT} + {638290800 36000 1 CHOST} + {654616800 32400 0 CHOT} + {670345200 36000 1 CHOST} + {686066400 32400 0 CHOT} + {701794800 36000 1 CHOST} + {717516000 32400 0 CHOT} + {733244400 36000 1 CHOST} + {748965600 32400 0 CHOT} + {764694000 36000 1 CHOST} + {780415200 32400 0 CHOT} + {796143600 36000 1 CHOST} + {811864800 32400 0 CHOT} + {828198000 36000 1 CHOST} + {843919200 32400 0 CHOT} + {859647600 36000 1 CHOST} + {875368800 32400 0 CHOT} + {891097200 36000 1 CHOST} + {906818400 32400 0 CHOT} + {988390800 36000 1 CHOST} + {1001692800 32400 0 CHOT} + {1017421200 36000 1 CHOST} + {1033142400 32400 0 CHOT} + {1048870800 36000 1 CHOST} + {1064592000 32400 0 CHOT} + {1080320400 36000 1 CHOST} + {1096041600 32400 0 CHOT} + {1111770000 36000 1 CHOST} + {1127491200 32400 0 CHOT} + {1143219600 36000 1 CHOST} + {1159545600 32400 0 CHOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Chongqing b/inkstitch/bin/tcl/tzdata/Asia/Chongqing new file mode 100644 index 0000000..eff3536 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Chongqing @@ -0,0 +1,19 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Chongqing) { + {-9223372036854775808 25580 0 LMT} + {-1325487980 25200 0 LONT} + {325962000 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Chungking b/inkstitch/bin/tcl/tzdata/Asia/Chungking new file mode 100644 index 0000000..f10d8a1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Chungking @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Chongqing)]} { + LoadTimeZoneFile Asia/Chongqing +} +set TZData(:Asia/Chungking) $TZData(:Asia/Chongqing) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Colombo b/inkstitch/bin/tcl/tzdata/Asia/Colombo new file mode 100644 index 0000000..ca7bffc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Colombo @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Colombo) { + {-9223372036854775808 19164 0 LMT} + {-2840159964 19172 0 MMT} + {-2019705572 19800 0 IST} + {-883287000 21600 1 IHST} + {-862639200 23400 1 IST} + {-764051400 19800 0 IST} + {832962600 23400 0 LKT} + {846266400 21600 0 LKT} + {1145039400 19800 0 IST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Dacca b/inkstitch/bin/tcl/tzdata/Asia/Dacca new file mode 100644 index 0000000..b91d7fa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Dacca @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Dhaka)]} { + LoadTimeZoneFile Asia/Dhaka +} +set TZData(:Asia/Dacca) $TZData(:Asia/Dhaka) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Damascus b/inkstitch/bin/tcl/tzdata/Asia/Damascus new file mode 100644 index 0000000..fafef49 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Damascus @@ -0,0 +1,280 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Damascus) { + {-9223372036854775808 8712 0 LMT} + {-1577931912 7200 0 EET} + {-1568592000 10800 1 EEST} + {-1554080400 7200 0 EET} + {-1537142400 10800 1 EEST} + {-1522630800 7200 0 EET} + {-1505692800 10800 1 EEST} + {-1491181200 7200 0 EET} + {-1474243200 10800 1 EEST} + {-1459126800 7200 0 EET} + {-242265600 10800 1 EEST} + {-228877200 7200 0 EET} + {-210556800 10800 1 EEST} + {-197427600 7200 0 EET} + {-178934400 10800 1 EEST} + {-165718800 7200 0 EET} + {-147398400 10800 1 EEST} + {-134269200 7200 0 EET} + {-116467200 10800 1 EEST} + {-102646800 7200 0 EET} + {-84326400 10800 1 EEST} + {-71110800 7200 0 EET} + {-52704000 10800 1 EEST} + {-39488400 7200 0 EET} + {-21168000 10800 1 EEST} + {-7952400 7200 0 EET} + {10368000 10800 1 EEST} + {23583600 7200 0 EET} + {41904000 10800 1 EEST} + {55119600 7200 0 EET} + {73526400 10800 1 EEST} + {86742000 7200 0 EET} + {105062400 10800 1 EEST} + {118278000 7200 0 EET} + {136598400 10800 1 EEST} + {149814000 7200 0 EET} + {168134400 10800 1 EEST} + {181350000 7200 0 EET} + {199756800 10800 1 EEST} + {212972400 7200 0 EET} + {231292800 10800 1 EEST} + {241916400 7200 0 EET} + {262828800 10800 1 EEST} + {273452400 7200 0 EET} + {418694400 10800 1 EEST} + {433810800 7200 0 EET} + {450316800 10800 1 EEST} + {465433200 7200 0 EET} + {508896000 10800 1 EEST} + {529196400 7200 0 EET} + {541555200 10800 1 EEST} + {562633200 7200 0 EET} + {574387200 10800 1 EEST} + {594255600 7200 0 EET} + {607305600 10800 1 EEST} + {623199600 7200 0 EET} + {638928000 10800 1 EEST} + {654649200 7200 0 EET} + {670456800 10800 1 EEST} + {686264400 7200 0 EET} + {702684000 10800 1 EEST} + {717886800 7200 0 EET} + {733096800 10800 1 EEST} + {748904400 7200 0 EET} + {765151200 10800 1 EEST} + {780958800 7200 0 EET} + {796687200 10800 1 EEST} + {812494800 7200 0 EET} + {828309600 10800 1 EEST} + {844117200 7200 0 EET} + {859759200 10800 1 EEST} + {875653200 7200 0 EET} + {891208800 10800 1 EEST} + {907189200 7200 0 EET} + {922917600 10800 1 EEST} + {938725200 7200 0 EET} + {954540000 10800 1 EEST} + {970347600 7200 0 EET} + {986076000 10800 1 EEST} + {1001883600 7200 0 EET} + {1017612000 10800 1 EEST} + {1033419600 7200 0 EET} + {1049148000 10800 1 EEST} + {1064955600 7200 0 EET} + {1080770400 10800 1 EEST} + {1096578000 7200 0 EET} + {1112306400 10800 1 EEST} + {1128114000 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175205600 10800 1 EEST} + {1193950800 7200 0 EET} + {1207260000 10800 1 EEST} + {1225486800 7200 0 EET} + {1238104800 10800 1 EEST} + {1256850000 7200 0 EET} + {1270159200 10800 1 EEST} + {1288299600 7200 0 EET} + {1301608800 10800 1 EEST} + {1319749200 7200 0 EET} + {1333058400 10800 1 EEST} + {1351198800 7200 0 EET} + {1364508000 10800 1 EEST} + {1382648400 7200 0 EET} + {1395957600 10800 1 EEST} + {1414702800 7200 0 EET} + {1427407200 10800 1 EEST} + {1446152400 7200 0 EET} + {1458856800 10800 1 EEST} + {1477602000 7200 0 EET} + {1490911200 10800 1 EEST} + {1509051600 7200 0 EET} + {1522360800 10800 1 EEST} + {1540501200 7200 0 EET} + {1553810400 10800 1 EEST} + {1571950800 7200 0 EET} + {1585260000 10800 1 EEST} + {1604005200 7200 0 EET} + {1616709600 10800 1 EEST} + {1635454800 7200 0 EET} + {1648159200 10800 1 EEST} + {1666904400 7200 0 EET} + {1680213600 10800 1 EEST} + {1698354000 7200 0 EET} + {1711663200 10800 1 EEST} + {1729803600 7200 0 EET} + {1743112800 10800 1 EEST} + {1761858000 7200 0 EET} + {1774562400 10800 1 EEST} + {1793307600 7200 0 EET} + {1806012000 10800 1 EEST} + {1824757200 7200 0 EET} + {1838066400 10800 1 EEST} + {1856206800 7200 0 EET} + {1869516000 10800 1 EEST} + {1887656400 7200 0 EET} + {1900965600 10800 1 EEST} + {1919106000 7200 0 EET} + {1932415200 10800 1 EEST} + {1951160400 7200 0 EET} + {1963864800 10800 1 EEST} + {1982610000 7200 0 EET} + {1995314400 10800 1 EEST} + {2014059600 7200 0 EET} + {2027368800 10800 1 EEST} + {2045509200 7200 0 EET} + {2058818400 10800 1 EEST} + {2076958800 7200 0 EET} + {2090268000 10800 1 EEST} + {2109013200 7200 0 EET} + {2121717600 10800 1 EEST} + {2140462800 7200 0 EET} + {2153167200 10800 1 EEST} + {2171912400 7200 0 EET} + {2184616800 10800 1 EEST} + {2203362000 7200 0 EET} + {2216671200 10800 1 EEST} + {2234811600 7200 0 EET} + {2248120800 10800 1 EEST} + {2266261200 7200 0 EET} + {2279570400 10800 1 EEST} + {2298315600 7200 0 EET} + {2311020000 10800 1 EEST} + {2329765200 7200 0 EET} + {2342469600 10800 1 EEST} + {2361214800 7200 0 EET} + {2374524000 10800 1 EEST} + {2392664400 7200 0 EET} + {2405973600 10800 1 EEST} + {2424114000 7200 0 EET} + {2437423200 10800 1 EEST} + {2455563600 7200 0 EET} + {2468872800 10800 1 EEST} + {2487618000 7200 0 EET} + {2500322400 10800 1 EEST} + {2519067600 7200 0 EET} + {2531772000 10800 1 EEST} + {2550517200 7200 0 EET} + {2563826400 10800 1 EEST} + {2581966800 7200 0 EET} + {2595276000 10800 1 EEST} + {2613416400 7200 0 EET} + {2626725600 10800 1 EEST} + {2645470800 7200 0 EET} + {2658175200 10800 1 EEST} + {2676920400 7200 0 EET} + {2689624800 10800 1 EEST} + {2708370000 7200 0 EET} + {2721679200 10800 1 EEST} + {2739819600 7200 0 EET} + {2753128800 10800 1 EEST} + {2771269200 7200 0 EET} + {2784578400 10800 1 EEST} + {2802718800 7200 0 EET} + {2816028000 10800 1 EEST} + {2834773200 7200 0 EET} + {2847477600 10800 1 EEST} + {2866222800 7200 0 EET} + {2878927200 10800 1 EEST} + {2897672400 7200 0 EET} + {2910981600 10800 1 EEST} + {2929122000 7200 0 EET} + {2942431200 10800 1 EEST} + {2960571600 7200 0 EET} + {2973880800 10800 1 EEST} + {2992626000 7200 0 EET} + {3005330400 10800 1 EEST} + {3024075600 7200 0 EET} + {3036780000 10800 1 EEST} + {3055525200 7200 0 EET} + {3068229600 10800 1 EEST} + {3086974800 7200 0 EET} + {3100284000 10800 1 EEST} + {3118424400 7200 0 EET} + {3131733600 10800 1 EEST} + {3149874000 7200 0 EET} + {3163183200 10800 1 EEST} + {3181928400 7200 0 EET} + {3194632800 10800 1 EEST} + {3213378000 7200 0 EET} + {3226082400 10800 1 EEST} + {3244827600 7200 0 EET} + {3258136800 10800 1 EEST} + {3276277200 7200 0 EET} + {3289586400 10800 1 EEST} + {3307726800 7200 0 EET} + {3321036000 10800 1 EEST} + {3339176400 7200 0 EET} + {3352485600 10800 1 EEST} + {3371230800 7200 0 EET} + {3383935200 10800 1 EEST} + {3402680400 7200 0 EET} + {3415384800 10800 1 EEST} + {3434130000 7200 0 EET} + {3447439200 10800 1 EEST} + {3465579600 7200 0 EET} + {3478888800 10800 1 EEST} + {3497029200 7200 0 EET} + {3510338400 10800 1 EEST} + {3529083600 7200 0 EET} + {3541788000 10800 1 EEST} + {3560533200 7200 0 EET} + {3573237600 10800 1 EEST} + {3591982800 7200 0 EET} + {3605292000 10800 1 EEST} + {3623432400 7200 0 EET} + {3636741600 10800 1 EEST} + {3654882000 7200 0 EET} + {3668191200 10800 1 EEST} + {3686331600 7200 0 EET} + {3699640800 10800 1 EEST} + {3718386000 7200 0 EET} + {3731090400 10800 1 EEST} + {3749835600 7200 0 EET} + {3762540000 10800 1 EEST} + {3781285200 7200 0 EET} + {3794594400 10800 1 EEST} + {3812734800 7200 0 EET} + {3826044000 10800 1 EEST} + {3844184400 7200 0 EET} + {3857493600 10800 1 EEST} + {3876238800 7200 0 EET} + {3888943200 10800 1 EEST} + {3907688400 7200 0 EET} + {3920392800 10800 1 EEST} + {3939138000 7200 0 EET} + {3951842400 10800 1 EEST} + {3970587600 7200 0 EET} + {3983896800 10800 1 EEST} + {4002037200 7200 0 EET} + {4015346400 10800 1 EEST} + {4033486800 7200 0 EET} + {4046796000 10800 1 EEST} + {4065541200 7200 0 EET} + {4078245600 10800 1 EEST} + {4096990800 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Dhaka b/inkstitch/bin/tcl/tzdata/Asia/Dhaka new file mode 100644 index 0000000..e0c270d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Dhaka @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dhaka) { + {-9223372036854775808 21700 0 LMT} + {-2524543300 21200 0 HMT} + {-891582800 23400 0 BURT} + {-872058600 19800 0 IST} + {-862637400 23400 0 BURT} + {-576138600 21600 0 DACT} + {38772000 21600 0 BDT} + {1230746400 21600 0 BDT} + {1245430800 25200 1 BDST} + {1262278740 21600 0 BDT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Dili b/inkstitch/bin/tcl/tzdata/Asia/Dili new file mode 100644 index 0000000..36910fd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Dili @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dili) { + {-9223372036854775808 30140 0 LMT} + {-1830414140 28800 0 TLT} + {-879152400 32400 0 JST} + {-766054800 32400 0 TLT} + {199897200 28800 0 CIT} + {969120000 32400 0 TLT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Dubai b/inkstitch/bin/tcl/tzdata/Asia/Dubai new file mode 100644 index 0000000..b8730e5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Dubai @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dubai) { + {-9223372036854775808 13272 0 LMT} + {-1577936472 14400 0 GST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Dushanbe b/inkstitch/bin/tcl/tzdata/Asia/Dushanbe new file mode 100644 index 0000000..59f8cb6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Dushanbe @@ -0,0 +1,29 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dushanbe) { + {-9223372036854775808 16512 0 LMT} + {-1441168512 18000 0 DUST} + {-1247547600 21600 0 DUST} + {354909600 25200 1 DUSST} + {370717200 21600 0 DUST} + {386445600 25200 1 DUSST} + {402253200 21600 0 DUST} + {417981600 25200 1 DUSST} + {433789200 21600 0 DUST} + {449604000 25200 1 DUSST} + {465336000 21600 0 DUST} + {481060800 25200 1 DUSST} + {496785600 21600 0 DUST} + {512510400 25200 1 DUSST} + {528235200 21600 0 DUST} + {543960000 25200 1 DUSST} + {559684800 21600 0 DUST} + {575409600 25200 1 DUSST} + {591134400 21600 0 DUST} + {606859200 25200 1 DUSST} + {622584000 21600 0 DUST} + {638308800 25200 1 DUSST} + {654638400 21600 0 DUST} + {670363200 21600 1 DUSST} + {684363600 18000 0 TJT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Gaza b/inkstitch/bin/tcl/tzdata/Asia/Gaza new file mode 100644 index 0000000..a0636e2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Gaza @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Gaza) { + {-9223372036854775808 8272 0 LMT} + {-2185409872 7200 0 EET} + {-933645600 10800 1 EET} + {-857358000 7200 0 EET} + {-844300800 10800 1 EET} + {-825822000 7200 0 EET} + {-812685600 10800 1 EET} + {-794199600 7200 0 EET} + {-779853600 10800 1 EET} + {-762656400 7200 0 EET} + {-748310400 10800 1 EET} + {-731127600 7200 0 EET} + {-682653600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-81313200 10800 0 IST} + {142376400 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576540000 10800 1 IDT} + {589237200 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {820447200 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {915141600 7200 0 EET} + {924213600 10800 1 EEST} + {939934800 7200 0 EET} + {956268000 10800 1 EEST} + {971989200 7200 0 EET} + {987717600 10800 1 EEST} + {1003438800 7200 0 EET} + {1019167200 10800 1 EEST} + {1034888400 7200 0 EET} + {1050616800 10800 1 EEST} + {1066338000 7200 0 EET} + {1082066400 10800 1 EEST} + {1096581600 7200 0 EET} + {1113516000 10800 1 EEST} + {1128380400 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175378400 10800 1 EEST} + {1189638000 7200 0 EET} + {1206655200 10800 1 EEST} + {1219960800 7200 0 EET} + {1220220000 7200 0 EET} + {1238104800 10800 1 EEST} + {1252015200 7200 0 EET} + {1262296800 7200 0 EET} + {1269640860 10800 0 EEST} + {1281474000 7200 0 EET} + {1301608860 10800 1 EEST} + {1312149600 7200 0 EET} + {1325368800 7200 0 EET} + {1333058400 10800 1 EEST} + {1348178400 7200 0 EET} + {1364508000 10800 1 EEST} + {1380232800 7200 0 EET} + {1395957600 10800 1 EEST} + {1411682400 7200 0 EET} + {1427407200 10800 1 EEST} + {1443132000 7200 0 EET} + {1459461600 10800 1 EEST} + {1474581600 7200 0 EET} + {1490911200 10800 1 EEST} + {1506031200 7200 0 EET} + {1522360800 10800 1 EEST} + {1537480800 7200 0 EET} + {1553810400 10800 1 EEST} + {1569535200 7200 0 EET} + {1585260000 10800 1 EEST} + {1600984800 7200 0 EET} + {1616709600 10800 1 EEST} + {1632434400 7200 0 EET} + {1648764000 10800 1 EEST} + {1663884000 7200 0 EET} + {1680213600 10800 1 EEST} + {1695333600 7200 0 EET} + {1711663200 10800 1 EEST} + {1727388000 7200 0 EET} + {1743112800 10800 1 EEST} + {1758837600 7200 0 EET} + {1774562400 10800 1 EEST} + {1790287200 7200 0 EET} + {1806012000 10800 1 EEST} + {1821736800 7200 0 EET} + {1838066400 10800 1 EEST} + {1853186400 7200 0 EET} + {1869516000 10800 1 EEST} + {1884636000 7200 0 EET} + {1900965600 10800 1 EEST} + {1916690400 7200 0 EET} + {1932415200 10800 1 EEST} + {1948140000 7200 0 EET} + {1963864800 10800 1 EEST} + {1979589600 7200 0 EET} + {1995919200 10800 1 EEST} + {2011039200 7200 0 EET} + {2027368800 10800 1 EEST} + {2042488800 7200 0 EET} + {2058818400 10800 1 EEST} + {2073938400 7200 0 EET} + {2090268000 10800 1 EEST} + {2105992800 7200 0 EET} + {2121717600 10800 1 EEST} + {2137442400 7200 0 EET} + {2153167200 10800 1 EEST} + {2168892000 7200 0 EET} + {2185221600 10800 1 EEST} + {2200341600 7200 0 EET} + {2216671200 10800 1 EEST} + {2231791200 7200 0 EET} + {2248120800 10800 1 EEST} + {2263845600 7200 0 EET} + {2279570400 10800 1 EEST} + {2295295200 7200 0 EET} + {2311020000 10800 1 EEST} + {2326744800 7200 0 EET} + {2343074400 10800 1 EEST} + {2358194400 7200 0 EET} + {2374524000 10800 1 EEST} + {2389644000 7200 0 EET} + {2405973600 10800 1 EEST} + {2421093600 7200 0 EET} + {2437423200 10800 1 EEST} + {2453148000 7200 0 EET} + {2468872800 10800 1 EEST} + {2484597600 7200 0 EET} + {2500322400 10800 1 EEST} + {2516047200 7200 0 EET} + {2532376800 10800 1 EEST} + {2547496800 7200 0 EET} + {2563826400 10800 1 EEST} + {2578946400 7200 0 EET} + {2595276000 10800 1 EEST} + {2611000800 7200 0 EET} + {2626725600 10800 1 EEST} + {2642450400 7200 0 EET} + {2658175200 10800 1 EEST} + {2673900000 7200 0 EET} + {2689624800 10800 1 EEST} + {2705349600 7200 0 EET} + {2721679200 10800 1 EEST} + {2736799200 7200 0 EET} + {2753128800 10800 1 EEST} + {2768248800 7200 0 EET} + {2784578400 10800 1 EEST} + {2800303200 7200 0 EET} + {2816028000 10800 1 EEST} + {2831752800 7200 0 EET} + {2847477600 10800 1 EEST} + {2863202400 7200 0 EET} + {2879532000 10800 1 EEST} + {2894652000 7200 0 EET} + {2910981600 10800 1 EEST} + {2926101600 7200 0 EET} + {2942431200 10800 1 EEST} + {2957551200 7200 0 EET} + {2973880800 10800 1 EEST} + {2989605600 7200 0 EET} + {3005330400 10800 1 EEST} + {3021055200 7200 0 EET} + {3036780000 10800 1 EEST} + {3052504800 7200 0 EET} + {3068834400 10800 1 EEST} + {3083954400 7200 0 EET} + {3100284000 10800 1 EEST} + {3115404000 7200 0 EET} + {3131733600 10800 1 EEST} + {3147458400 7200 0 EET} + {3163183200 10800 1 EEST} + {3178908000 7200 0 EET} + {3194632800 10800 1 EEST} + {3210357600 7200 0 EET} + {3226687200 10800 1 EEST} + {3241807200 7200 0 EET} + {3258136800 10800 1 EEST} + {3273256800 7200 0 EET} + {3289586400 10800 1 EEST} + {3304706400 7200 0 EET} + {3321036000 10800 1 EEST} + {3336760800 7200 0 EET} + {3352485600 10800 1 EEST} + {3368210400 7200 0 EET} + {3383935200 10800 1 EEST} + {3399660000 7200 0 EET} + {3415989600 10800 1 EEST} + {3431109600 7200 0 EET} + {3447439200 10800 1 EEST} + {3462559200 7200 0 EET} + {3478888800 10800 1 EEST} + {3494613600 7200 0 EET} + {3510338400 10800 1 EEST} + {3526063200 7200 0 EET} + {3541788000 10800 1 EEST} + {3557512800 7200 0 EET} + {3573237600 10800 1 EEST} + {3588962400 7200 0 EET} + {3605292000 10800 1 EEST} + {3620412000 7200 0 EET} + {3636741600 10800 1 EEST} + {3651861600 7200 0 EET} + {3668191200 10800 1 EEST} + {3683916000 7200 0 EET} + {3699640800 10800 1 EEST} + {3715365600 7200 0 EET} + {3731090400 10800 1 EEST} + {3746815200 7200 0 EET} + {3763144800 10800 1 EEST} + {3778264800 7200 0 EET} + {3794594400 10800 1 EEST} + {3809714400 7200 0 EET} + {3826044000 10800 1 EEST} + {3841164000 7200 0 EET} + {3857493600 10800 1 EEST} + {3873218400 7200 0 EET} + {3888943200 10800 1 EEST} + {3904668000 7200 0 EET} + {3920392800 10800 1 EEST} + {3936117600 7200 0 EET} + {3952447200 10800 1 EEST} + {3967567200 7200 0 EET} + {3983896800 10800 1 EEST} + {3999016800 7200 0 EET} + {4015346400 10800 1 EEST} + {4031071200 7200 0 EET} + {4046796000 10800 1 EEST} + {4062520800 7200 0 EET} + {4078245600 10800 1 EEST} + {4093970400 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Harbin b/inkstitch/bin/tcl/tzdata/Asia/Harbin new file mode 100644 index 0000000..0eb0c12 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Harbin @@ -0,0 +1,22 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Harbin) { + {-9223372036854775808 30404 0 LMT} + {-1325492804 30600 0 CHAT} + {-1194078600 28800 0 CST} + {-946800000 32400 0 CHAT} + {-115894800 30600 0 CHAT} + {325956600 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Hebron b/inkstitch/bin/tcl/tzdata/Asia/Hebron new file mode 100644 index 0000000..a8a9019 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Hebron @@ -0,0 +1,277 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hebron) { + {-9223372036854775808 8423 0 LMT} + {-2185410023 7200 0 EET} + {-933645600 10800 1 EET} + {-857358000 7200 0 EET} + {-844300800 10800 1 EET} + {-825822000 7200 0 EET} + {-812685600 10800 1 EET} + {-794199600 7200 0 EET} + {-779853600 10800 1 EET} + {-762656400 7200 0 EET} + {-748310400 10800 1 EET} + {-731127600 7200 0 EET} + {-682653600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-81313200 10800 0 IST} + {142376400 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576540000 10800 1 IDT} + {589237200 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {820447200 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {915141600 7200 0 EET} + {924213600 10800 1 EEST} + {939934800 7200 0 EET} + {956268000 10800 1 EEST} + {971989200 7200 0 EET} + {987717600 10800 1 EEST} + {1003438800 7200 0 EET} + {1019167200 10800 1 EEST} + {1034888400 7200 0 EET} + {1050616800 10800 1 EEST} + {1066338000 7200 0 EET} + {1082066400 10800 1 EEST} + {1096581600 7200 0 EET} + {1113516000 10800 1 EEST} + {1128380400 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175378400 10800 1 EEST} + {1189638000 7200 0 EET} + {1206655200 10800 1 EEST} + {1220216400 7200 0 EET} + {1238104800 10800 1 EEST} + {1252015200 7200 0 EET} + {1269554400 10800 1 EEST} + {1281474000 7200 0 EET} + {1301608860 10800 1 EEST} + {1312146000 7200 0 EET} + {1314655200 10800 1 EEST} + {1317330000 7200 0 EET} + {1333058400 10800 1 EEST} + {1348178400 7200 0 EET} + {1364508000 10800 1 EEST} + {1380232800 7200 0 EET} + {1395957600 10800 1 EEST} + {1411682400 7200 0 EET} + {1427407200 10800 1 EEST} + {1443132000 7200 0 EET} + {1459461600 10800 1 EEST} + {1474581600 7200 0 EET} + {1490911200 10800 1 EEST} + {1506031200 7200 0 EET} + {1522360800 10800 1 EEST} + {1537480800 7200 0 EET} + {1553810400 10800 1 EEST} + {1569535200 7200 0 EET} + {1585260000 10800 1 EEST} + {1600984800 7200 0 EET} + {1616709600 10800 1 EEST} + {1632434400 7200 0 EET} + {1648764000 10800 1 EEST} + {1663884000 7200 0 EET} + {1680213600 10800 1 EEST} + {1695333600 7200 0 EET} + {1711663200 10800 1 EEST} + {1727388000 7200 0 EET} + {1743112800 10800 1 EEST} + {1758837600 7200 0 EET} + {1774562400 10800 1 EEST} + {1790287200 7200 0 EET} + {1806012000 10800 1 EEST} + {1821736800 7200 0 EET} + {1838066400 10800 1 EEST} + {1853186400 7200 0 EET} + {1869516000 10800 1 EEST} + {1884636000 7200 0 EET} + {1900965600 10800 1 EEST} + {1916690400 7200 0 EET} + {1932415200 10800 1 EEST} + {1948140000 7200 0 EET} + {1963864800 10800 1 EEST} + {1979589600 7200 0 EET} + {1995919200 10800 1 EEST} + {2011039200 7200 0 EET} + {2027368800 10800 1 EEST} + {2042488800 7200 0 EET} + {2058818400 10800 1 EEST} + {2073938400 7200 0 EET} + {2090268000 10800 1 EEST} + {2105992800 7200 0 EET} + {2121717600 10800 1 EEST} + {2137442400 7200 0 EET} + {2153167200 10800 1 EEST} + {2168892000 7200 0 EET} + {2185221600 10800 1 EEST} + {2200341600 7200 0 EET} + {2216671200 10800 1 EEST} + {2231791200 7200 0 EET} + {2248120800 10800 1 EEST} + {2263845600 7200 0 EET} + {2279570400 10800 1 EEST} + {2295295200 7200 0 EET} + {2311020000 10800 1 EEST} + {2326744800 7200 0 EET} + {2343074400 10800 1 EEST} + {2358194400 7200 0 EET} + {2374524000 10800 1 EEST} + {2389644000 7200 0 EET} + {2405973600 10800 1 EEST} + {2421093600 7200 0 EET} + {2437423200 10800 1 EEST} + {2453148000 7200 0 EET} + {2468872800 10800 1 EEST} + {2484597600 7200 0 EET} + {2500322400 10800 1 EEST} + {2516047200 7200 0 EET} + {2532376800 10800 1 EEST} + {2547496800 7200 0 EET} + {2563826400 10800 1 EEST} + {2578946400 7200 0 EET} + {2595276000 10800 1 EEST} + {2611000800 7200 0 EET} + {2626725600 10800 1 EEST} + {2642450400 7200 0 EET} + {2658175200 10800 1 EEST} + {2673900000 7200 0 EET} + {2689624800 10800 1 EEST} + {2705349600 7200 0 EET} + {2721679200 10800 1 EEST} + {2736799200 7200 0 EET} + {2753128800 10800 1 EEST} + {2768248800 7200 0 EET} + {2784578400 10800 1 EEST} + {2800303200 7200 0 EET} + {2816028000 10800 1 EEST} + {2831752800 7200 0 EET} + {2847477600 10800 1 EEST} + {2863202400 7200 0 EET} + {2879532000 10800 1 EEST} + {2894652000 7200 0 EET} + {2910981600 10800 1 EEST} + {2926101600 7200 0 EET} + {2942431200 10800 1 EEST} + {2957551200 7200 0 EET} + {2973880800 10800 1 EEST} + {2989605600 7200 0 EET} + {3005330400 10800 1 EEST} + {3021055200 7200 0 EET} + {3036780000 10800 1 EEST} + {3052504800 7200 0 EET} + {3068834400 10800 1 EEST} + {3083954400 7200 0 EET} + {3100284000 10800 1 EEST} + {3115404000 7200 0 EET} + {3131733600 10800 1 EEST} + {3147458400 7200 0 EET} + {3163183200 10800 1 EEST} + {3178908000 7200 0 EET} + {3194632800 10800 1 EEST} + {3210357600 7200 0 EET} + {3226687200 10800 1 EEST} + {3241807200 7200 0 EET} + {3258136800 10800 1 EEST} + {3273256800 7200 0 EET} + {3289586400 10800 1 EEST} + {3304706400 7200 0 EET} + {3321036000 10800 1 EEST} + {3336760800 7200 0 EET} + {3352485600 10800 1 EEST} + {3368210400 7200 0 EET} + {3383935200 10800 1 EEST} + {3399660000 7200 0 EET} + {3415989600 10800 1 EEST} + {3431109600 7200 0 EET} + {3447439200 10800 1 EEST} + {3462559200 7200 0 EET} + {3478888800 10800 1 EEST} + {3494613600 7200 0 EET} + {3510338400 10800 1 EEST} + {3526063200 7200 0 EET} + {3541788000 10800 1 EEST} + {3557512800 7200 0 EET} + {3573237600 10800 1 EEST} + {3588962400 7200 0 EET} + {3605292000 10800 1 EEST} + {3620412000 7200 0 EET} + {3636741600 10800 1 EEST} + {3651861600 7200 0 EET} + {3668191200 10800 1 EEST} + {3683916000 7200 0 EET} + {3699640800 10800 1 EEST} + {3715365600 7200 0 EET} + {3731090400 10800 1 EEST} + {3746815200 7200 0 EET} + {3763144800 10800 1 EEST} + {3778264800 7200 0 EET} + {3794594400 10800 1 EEST} + {3809714400 7200 0 EET} + {3826044000 10800 1 EEST} + {3841164000 7200 0 EET} + {3857493600 10800 1 EEST} + {3873218400 7200 0 EET} + {3888943200 10800 1 EEST} + {3904668000 7200 0 EET} + {3920392800 10800 1 EEST} + {3936117600 7200 0 EET} + {3952447200 10800 1 EEST} + {3967567200 7200 0 EET} + {3983896800 10800 1 EEST} + {3999016800 7200 0 EET} + {4015346400 10800 1 EEST} + {4031071200 7200 0 EET} + {4046796000 10800 1 EEST} + {4062520800 7200 0 EET} + {4078245600 10800 1 EEST} + {4093970400 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh b/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh new file mode 100644 index 0000000..777c8db --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ho_Chi_Minh) { + {-9223372036854775808 25600 0 LMT} + {-2005974400 25580 0 SMT} + {-1855983920 25200 0 ICT} + {-1819954800 28800 0 ICT} + {-1220428800 25200 0 ICT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong b/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong new file mode 100644 index 0000000..fcf98a6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong @@ -0,0 +1,75 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hong_Kong) { + {-9223372036854775808 27402 0 LMT} + {-2056693002 28800 0 HKT} + {-907389000 32400 1 HKST} + {-891667800 28800 0 HKT} + {-884246400 32400 0 JST} + {-766746000 28800 0 HKT} + {-747981000 32400 1 HKST} + {-728544600 28800 0 HKT} + {-717049800 32400 1 HKST} + {-694503000 28800 0 HKT} + {-683785800 32400 1 HKST} + {-668064600 28800 0 HKT} + {-654755400 32400 1 HKST} + {-636615000 28800 0 HKT} + {-623305800 32400 1 HKST} + {-605165400 28800 0 HKT} + {-591856200 32400 1 HKST} + {-573715800 28800 0 HKT} + {-559801800 32400 1 HKST} + {-542352600 28800 0 HKT} + {-528352200 32400 1 HKST} + {-510211800 28800 0 HKT} + {-498112200 32400 1 HKST} + {-478762200 28800 0 HKT} + {-466662600 32400 1 HKST} + {-446707800 28800 0 HKT} + {-435213000 32400 1 HKST} + {-415258200 28800 0 HKT} + {-403158600 32400 1 HKST} + {-383808600 28800 0 HKT} + {-371709000 32400 1 HKST} + {-352359000 28800 0 HKT} + {-340259400 32400 1 HKST} + {-320909400 28800 0 HKT} + {-308809800 32400 1 HKST} + {-288855000 28800 0 HKT} + {-277360200 32400 1 HKST} + {-257405400 28800 0 HKT} + {-245910600 32400 1 HKST} + {-225955800 28800 0 HKT} + {-213856200 32400 1 HKST} + {-194506200 28800 0 HKT} + {-182406600 32400 1 HKST} + {-163056600 28800 0 HKT} + {-148537800 32400 1 HKST} + {-132816600 28800 0 HKT} + {-117088200 32400 1 HKST} + {-101367000 28800 0 HKT} + {-85638600 32400 1 HKST} + {-69312600 28800 0 HKT} + {-53584200 32400 1 HKST} + {-37863000 28800 0 HKT} + {-22134600 32400 1 HKST} + {-6413400 28800 0 HKT} + {9315000 32400 1 HKST} + {25036200 28800 0 HKT} + {40764600 32400 1 HKST} + {56485800 28800 0 HKT} + {72214200 32400 1 HKST} + {88540200 28800 0 HKT} + {104268600 32400 1 HKST} + {119989800 28800 0 HKT} + {126041400 32400 1 HKST} + {135714600 32400 1 HKST} + {151439400 28800 0 HKT} + {167167800 32400 1 HKST} + {182889000 28800 0 HKT} + {198617400 32400 1 HKST} + {214338600 28800 0 HKT} + {295385400 32400 1 HKST} + {309292200 28800 0 HKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Hovd b/inkstitch/bin/tcl/tzdata/Asia/Hovd new file mode 100644 index 0000000..2a87dab --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Hovd @@ -0,0 +1,51 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hovd) { + {-9223372036854775808 21996 0 LMT} + {-2032927596 21600 0 HOVT} + {252439200 25200 0 HOVT} + {417978000 28800 1 HOVST} + {433785600 25200 0 HOVT} + {449600400 28800 1 HOVST} + {465321600 25200 0 HOVT} + {481050000 28800 1 HOVST} + {496771200 25200 0 HOVT} + {512499600 28800 1 HOVST} + {528220800 25200 0 HOVT} + {543949200 28800 1 HOVST} + {559670400 25200 0 HOVT} + {575398800 28800 1 HOVST} + {591120000 25200 0 HOVT} + {606848400 28800 1 HOVST} + {622569600 25200 0 HOVT} + {638298000 28800 1 HOVST} + {654624000 25200 0 HOVT} + {670352400 28800 1 HOVST} + {686073600 25200 0 HOVT} + {701802000 28800 1 HOVST} + {717523200 25200 0 HOVT} + {733251600 28800 1 HOVST} + {748972800 25200 0 HOVT} + {764701200 28800 1 HOVST} + {780422400 25200 0 HOVT} + {796150800 28800 1 HOVST} + {811872000 25200 0 HOVT} + {828205200 28800 1 HOVST} + {843926400 25200 0 HOVT} + {859654800 28800 1 HOVST} + {875376000 25200 0 HOVT} + {891104400 28800 1 HOVST} + {906825600 25200 0 HOVT} + {988398000 28800 1 HOVST} + {1001700000 25200 0 HOVT} + {1017428400 28800 1 HOVST} + {1033149600 25200 0 HOVT} + {1048878000 28800 1 HOVST} + {1064599200 25200 0 HOVT} + {1080327600 28800 1 HOVST} + {1096048800 25200 0 HOVT} + {1111777200 28800 1 HOVST} + {1127498400 25200 0 HOVT} + {1143226800 28800 1 HOVST} + {1159552800 25200 0 HOVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Irkutsk b/inkstitch/bin/tcl/tzdata/Asia/Irkutsk new file mode 100644 index 0000000..bca1dcc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Irkutsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Irkutsk) { + {-9223372036854775808 25040 0 LMT} + {-2840165840 25040 0 IMT} + {-1575874640 25200 0 IRKT} + {-1247554800 28800 0 IRKMMTT} + {354902400 32400 1 IRKST} + {370710000 28800 0 IRKT} + {386438400 32400 1 IRKST} + {402246000 28800 0 IRKT} + {417974400 32400 1 IRKST} + {433782000 28800 0 IRKT} + {449596800 32400 1 IRKST} + {465328800 28800 0 IRKT} + {481053600 32400 1 IRKST} + {496778400 28800 0 IRKT} + {512503200 32400 1 IRKST} + {528228000 28800 0 IRKT} + {543952800 32400 1 IRKST} + {559677600 28800 0 IRKT} + {575402400 32400 1 IRKST} + {591127200 28800 0 IRKT} + {606852000 32400 1 IRKST} + {622576800 28800 0 IRKT} + {638301600 32400 1 IRKST} + {654631200 28800 0 IRKT} + {670356000 25200 0 IRKMMTT} + {670359600 28800 1 IRKST} + {686084400 25200 0 IRKT} + {695761200 28800 0 IRKMMTT} + {701794800 32400 1 IRKST} + {717516000 28800 0 IRKT} + {733255200 32400 1 IRKST} + {748980000 28800 0 IRKT} + {764704800 32400 1 IRKST} + {780429600 28800 0 IRKT} + {796154400 32400 1 IRKST} + {811879200 28800 0 IRKT} + {828208800 32400 1 IRKST} + {846352800 28800 0 IRKT} + {859658400 32400 1 IRKST} + {877802400 28800 0 IRKT} + {891108000 32400 1 IRKST} + {909252000 28800 0 IRKT} + {922557600 32400 1 IRKST} + {941306400 28800 0 IRKT} + {954007200 32400 1 IRKST} + {972756000 28800 0 IRKT} + {985456800 32400 1 IRKST} + {1004205600 28800 0 IRKT} + {1017511200 32400 1 IRKST} + {1035655200 28800 0 IRKT} + {1048960800 32400 1 IRKST} + {1067104800 28800 0 IRKT} + {1080410400 32400 1 IRKST} + {1099159200 28800 0 IRKT} + {1111860000 32400 1 IRKST} + {1130608800 28800 0 IRKT} + {1143309600 32400 1 IRKST} + {1162058400 28800 0 IRKT} + {1174759200 32400 1 IRKST} + {1193508000 28800 0 IRKT} + {1206813600 32400 1 IRKST} + {1224957600 28800 0 IRKT} + {1238263200 32400 1 IRKST} + {1256407200 28800 0 IRKT} + {1269712800 32400 1 IRKST} + {1288461600 28800 0 IRKT} + {1301162400 32400 0 IRKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Istanbul b/inkstitch/bin/tcl/tzdata/Asia/Istanbul new file mode 100644 index 0000000..85b3fc2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Istanbul @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Istanbul)]} { + LoadTimeZoneFile Europe/Istanbul +} +set TZData(:Asia/Istanbul) $TZData(:Europe/Istanbul) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Jakarta b/inkstitch/bin/tcl/tzdata/Asia/Jakarta new file mode 100644 index 0000000..27033e8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Jakarta @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jakarta) { + {-9223372036854775808 25632 0 LMT} + {-3231299232 25632 0 JMT} + {-1451719200 26400 0 JAVT} + {-1172906400 27000 0 WIT} + {-876641400 32400 0 JST} + {-766054800 27000 0 WIT} + {-683883000 28800 0 WIT} + {-620812800 27000 0 WIT} + {-189415800 25200 0 WIT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Jayapura b/inkstitch/bin/tcl/tzdata/Asia/Jayapura new file mode 100644 index 0000000..893da8b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Jayapura @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jayapura) { + {-9223372036854775808 33768 0 LMT} + {-1172913768 32400 0 EIT} + {-799491600 34200 0 CST} + {-189423000 32400 0 EIT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Jerusalem b/inkstitch/bin/tcl/tzdata/Asia/Jerusalem new file mode 100644 index 0000000..7662680 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Jerusalem @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jerusalem) { + {-9223372036854775808 8454 0 LMT} + {-2840149254 8440 0 JMT} + {-1641003640 7200 0 IST} + {-933645600 10800 1 IDT} + {-857358000 7200 0 IST} + {-844300800 10800 1 IDT} + {-825822000 7200 0 IST} + {-812685600 10800 1 IDT} + {-794199600 7200 0 IST} + {-779853600 10800 1 IDT} + {-762656400 7200 0 IST} + {-748310400 10800 1 IDT} + {-731127600 7200 0 IST} + {-681962400 14400 1 IDDT} + {-673243200 10800 1 IDT} + {-667962000 7200 0 IST} + {-652327200 10800 1 IDT} + {-636426000 7200 0 IST} + {-622087200 10800 1 IDT} + {-608947200 7200 0 IST} + {-591847200 10800 1 IDT} + {-572486400 7200 0 IST} + {-558576000 10800 1 IDT} + {-542851200 7200 0 IST} + {-527731200 10800 1 IDT} + {-514425600 7200 0 IST} + {-490845600 10800 1 IDT} + {-482986800 7200 0 IST} + {-459475200 10800 1 IDT} + {-451537200 7200 0 IST} + {-428551200 10800 1 IDT} + {-418262400 7200 0 IST} + {-400032000 10800 1 IDT} + {-387428400 7200 0 IST} + {142380000 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576540000 10800 1 IDT} + {589237200 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {826840800 10800 1 IDT} + {842821200 7200 0 IST} + {858895200 10800 1 IDT} + {874184400 7200 0 IST} + {890344800 10800 1 IDT} + {905029200 7200 0 IST} + {923011200 10800 1 IDT} + {936313200 7200 0 IST} + {955670400 10800 1 IDT} + {970783200 7200 0 IST} + {986770800 10800 1 IDT} + {1001282400 7200 0 IST} + {1017356400 10800 1 IDT} + {1033941600 7200 0 IST} + {1048806000 10800 1 IDT} + {1065132000 7200 0 IST} + {1081292400 10800 1 IDT} + {1095804000 7200 0 IST} + {1112313600 10800 1 IDT} + {1128812400 7200 0 IST} + {1143763200 10800 1 IDT} + {1159657200 7200 0 IST} + {1175212800 10800 1 IDT} + {1189897200 7200 0 IST} + {1206662400 10800 1 IDT} + {1223161200 7200 0 IST} + {1238112000 10800 1 IDT} + {1254006000 7200 0 IST} + {1269561600 10800 1 IDT} + {1284246000 7200 0 IST} + {1301616000 10800 1 IDT} + {1317510000 7200 0 IST} + {1333065600 10800 1 IDT} + {1348354800 7200 0 IST} + {1364515200 10800 1 IDT} + {1382828400 7200 0 IST} + {1395964800 10800 1 IDT} + {1414278000 7200 0 IST} + {1427414400 10800 1 IDT} + {1445727600 7200 0 IST} + {1458864000 10800 1 IDT} + {1477782000 7200 0 IST} + {1490313600 10800 1 IDT} + {1509231600 7200 0 IST} + {1521763200 10800 1 IDT} + {1540681200 7200 0 IST} + {1553817600 10800 1 IDT} + {1572130800 7200 0 IST} + {1585267200 10800 1 IDT} + {1603580400 7200 0 IST} + {1616716800 10800 1 IDT} + {1635634800 7200 0 IST} + {1648166400 10800 1 IDT} + {1667084400 7200 0 IST} + {1679616000 10800 1 IDT} + {1698534000 7200 0 IST} + {1711670400 10800 1 IDT} + {1729983600 7200 0 IST} + {1743120000 10800 1 IDT} + {1761433200 7200 0 IST} + {1774569600 10800 1 IDT} + {1792882800 7200 0 IST} + {1806019200 10800 1 IDT} + {1824937200 7200 0 IST} + {1837468800 10800 1 IDT} + {1856386800 7200 0 IST} + {1868918400 10800 1 IDT} + {1887836400 7200 0 IST} + {1900972800 10800 1 IDT} + {1919286000 7200 0 IST} + {1932422400 10800 1 IDT} + {1950735600 7200 0 IST} + {1963872000 10800 1 IDT} + {1982790000 7200 0 IST} + {1995321600 10800 1 IDT} + {2014239600 7200 0 IST} + {2026771200 10800 1 IDT} + {2045689200 7200 0 IST} + {2058220800 10800 1 IDT} + {2077138800 7200 0 IST} + {2090275200 10800 1 IDT} + {2108588400 7200 0 IST} + {2121724800 10800 1 IDT} + {2140038000 7200 0 IST} + {2153174400 10800 1 IDT} + {2172092400 7200 0 IST} + {2184624000 10800 1 IDT} + {2203542000 7200 0 IST} + {2216073600 10800 1 IDT} + {2234991600 7200 0 IST} + {2248128000 10800 1 IDT} + {2266441200 7200 0 IST} + {2279577600 10800 1 IDT} + {2297890800 7200 0 IST} + {2311027200 10800 1 IDT} + {2329340400 7200 0 IST} + {2342476800 10800 1 IDT} + {2361394800 7200 0 IST} + {2373926400 10800 1 IDT} + {2392844400 7200 0 IST} + {2405376000 10800 1 IDT} + {2424294000 7200 0 IST} + {2437430400 10800 1 IDT} + {2455743600 7200 0 IST} + {2468880000 10800 1 IDT} + {2487193200 7200 0 IST} + {2500329600 10800 1 IDT} + {2519247600 7200 0 IST} + {2531779200 10800 1 IDT} + {2550697200 7200 0 IST} + {2563228800 10800 1 IDT} + {2582146800 7200 0 IST} + {2595283200 10800 1 IDT} + {2613596400 7200 0 IST} + {2626732800 10800 1 IDT} + {2645046000 7200 0 IST} + {2658182400 10800 1 IDT} + {2676495600 7200 0 IST} + {2689632000 10800 1 IDT} + {2708550000 7200 0 IST} + {2721081600 10800 1 IDT} + {2739999600 7200 0 IST} + {2752531200 10800 1 IDT} + {2771449200 7200 0 IST} + {2784585600 10800 1 IDT} + {2802898800 7200 0 IST} + {2816035200 10800 1 IDT} + {2834348400 7200 0 IST} + {2847484800 10800 1 IDT} + {2866402800 7200 0 IST} + {2878934400 10800 1 IDT} + {2897852400 7200 0 IST} + {2910384000 10800 1 IDT} + {2929302000 7200 0 IST} + {2941833600 10800 1 IDT} + {2960751600 7200 0 IST} + {2973888000 10800 1 IDT} + {2992201200 7200 0 IST} + {3005337600 10800 1 IDT} + {3023650800 7200 0 IST} + {3036787200 10800 1 IDT} + {3055705200 7200 0 IST} + {3068236800 10800 1 IDT} + {3087154800 7200 0 IST} + {3099686400 10800 1 IDT} + {3118604400 7200 0 IST} + {3131740800 10800 1 IDT} + {3150054000 7200 0 IST} + {3163190400 10800 1 IDT} + {3181503600 7200 0 IST} + {3194640000 10800 1 IDT} + {3212953200 7200 0 IST} + {3226089600 10800 1 IDT} + {3245007600 7200 0 IST} + {3257539200 10800 1 IDT} + {3276457200 7200 0 IST} + {3288988800 10800 1 IDT} + {3307906800 7200 0 IST} + {3321043200 10800 1 IDT} + {3339356400 7200 0 IST} + {3352492800 10800 1 IDT} + {3370806000 7200 0 IST} + {3383942400 10800 1 IDT} + {3402860400 7200 0 IST} + {3415392000 10800 1 IDT} + {3434310000 7200 0 IST} + {3446841600 10800 1 IDT} + {3465759600 7200 0 IST} + {3478896000 10800 1 IDT} + {3497209200 7200 0 IST} + {3510345600 10800 1 IDT} + {3528658800 7200 0 IST} + {3541795200 10800 1 IDT} + {3560108400 7200 0 IST} + {3573244800 10800 1 IDT} + {3592162800 7200 0 IST} + {3604694400 10800 1 IDT} + {3623612400 7200 0 IST} + {3636144000 10800 1 IDT} + {3655062000 7200 0 IST} + {3668198400 10800 1 IDT} + {3686511600 7200 0 IST} + {3699648000 10800 1 IDT} + {3717961200 7200 0 IST} + {3731097600 10800 1 IDT} + {3750015600 7200 0 IST} + {3762547200 10800 1 IDT} + {3781465200 7200 0 IST} + {3793996800 10800 1 IDT} + {3812914800 7200 0 IST} + {3825446400 10800 1 IDT} + {3844364400 7200 0 IST} + {3857500800 10800 1 IDT} + {3875814000 7200 0 IST} + {3888950400 10800 1 IDT} + {3907263600 7200 0 IST} + {3920400000 10800 1 IDT} + {3939318000 7200 0 IST} + {3951849600 10800 1 IDT} + {3970767600 7200 0 IST} + {3983299200 10800 1 IDT} + {4002217200 7200 0 IST} + {4015353600 10800 1 IDT} + {4033666800 7200 0 IST} + {4046803200 10800 1 IDT} + {4065116400 7200 0 IST} + {4078252800 10800 1 IDT} + {4096566000 7200 0 IST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kabul b/inkstitch/bin/tcl/tzdata/Asia/Kabul new file mode 100644 index 0000000..33d7282 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kabul @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kabul) { + {-9223372036854775808 16608 0 LMT} + {-2524538208 14400 0 AFT} + {-788932800 16200 0 AFT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kamchatka b/inkstitch/bin/tcl/tzdata/Asia/Kamchatka new file mode 100644 index 0000000..82abcfa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kamchatka @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kamchatka) { + {-9223372036854775808 38076 0 LMT} + {-1487759676 39600 0 PETT} + {-1247569200 43200 0 PETMMTT} + {354888000 46800 1 PETST} + {370695600 43200 0 PETT} + {386424000 46800 1 PETST} + {402231600 43200 0 PETT} + {417960000 46800 1 PETST} + {433767600 43200 0 PETT} + {449582400 46800 1 PETST} + {465314400 43200 0 PETT} + {481039200 46800 1 PETST} + {496764000 43200 0 PETT} + {512488800 46800 1 PETST} + {528213600 43200 0 PETT} + {543938400 46800 1 PETST} + {559663200 43200 0 PETT} + {575388000 46800 1 PETST} + {591112800 43200 0 PETT} + {606837600 46800 1 PETST} + {622562400 43200 0 PETT} + {638287200 46800 1 PETST} + {654616800 43200 0 PETT} + {670341600 39600 0 PETMMTT} + {670345200 43200 1 PETST} + {686070000 39600 0 PETT} + {695746800 43200 0 PETMMTT} + {701780400 46800 1 PETST} + {717501600 43200 0 PETT} + {733240800 46800 1 PETST} + {748965600 43200 0 PETT} + {764690400 46800 1 PETST} + {780415200 43200 0 PETT} + {796140000 46800 1 PETST} + {811864800 43200 0 PETT} + {828194400 46800 1 PETST} + {846338400 43200 0 PETT} + {859644000 46800 1 PETST} + {877788000 43200 0 PETT} + {891093600 46800 1 PETST} + {909237600 43200 0 PETT} + {922543200 46800 1 PETST} + {941292000 43200 0 PETT} + {953992800 46800 1 PETST} + {972741600 43200 0 PETT} + {985442400 46800 1 PETST} + {1004191200 43200 0 PETT} + {1017496800 46800 1 PETST} + {1035640800 43200 0 PETT} + {1048946400 46800 1 PETST} + {1067090400 43200 0 PETT} + {1080396000 46800 1 PETST} + {1099144800 43200 0 PETT} + {1111845600 46800 1 PETST} + {1130594400 43200 0 PETT} + {1143295200 46800 1 PETST} + {1162044000 43200 0 PETT} + {1174744800 46800 1 PETST} + {1193493600 43200 0 PETT} + {1206799200 46800 1 PETST} + {1224943200 43200 0 PETT} + {1238248800 46800 1 PETST} + {1256392800 43200 0 PETT} + {1269698400 39600 0 PETMMTT} + {1269702000 43200 1 PETST} + {1288450800 39600 0 PETT} + {1301151600 43200 0 PETT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Karachi b/inkstitch/bin/tcl/tzdata/Asia/Karachi new file mode 100644 index 0000000..3faa31e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Karachi @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Karachi) { + {-9223372036854775808 16092 0 LMT} + {-1988166492 19800 0 IST} + {-862637400 23400 1 IST} + {-764145000 19800 0 IST} + {-576135000 18000 0 KART} + {38775600 18000 0 PKT} + {1018119660 21600 1 PKST} + {1033840860 18000 0 PKT} + {1212260400 21600 1 PKST} + {1225476000 18000 0 PKT} + {1239735600 21600 1 PKST} + {1257012000 18000 0 PKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kashgar b/inkstitch/bin/tcl/tzdata/Asia/Kashgar new file mode 100644 index 0000000..2f64f42 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kashgar @@ -0,0 +1,20 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kashgar) { + {-9223372036854775808 18236 0 LMT} + {-1325480636 19800 0 KAST} + {-946791000 18000 0 KAST} + {325969200 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kathmandu b/inkstitch/bin/tcl/tzdata/Asia/Kathmandu new file mode 100644 index 0000000..dbec1f0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kathmandu @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kathmandu) { + {-9223372036854775808 20476 0 LMT} + {-1577943676 19800 0 IST} + {504901800 20700 0 NPT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Katmandu b/inkstitch/bin/tcl/tzdata/Asia/Katmandu new file mode 100644 index 0000000..2d6d060 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Katmandu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Kathmandu)]} { + LoadTimeZoneFile Asia/Kathmandu +} +set TZData(:Asia/Katmandu) $TZData(:Asia/Kathmandu) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Khandyga b/inkstitch/bin/tcl/tzdata/Asia/Khandyga new file mode 100644 index 0000000..2464b9f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Khandyga @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Khandyga) { + {-9223372036854775808 32533 0 LMT} + {-1579424533 28800 0 YAKT} + {-1247558400 32400 0 YAKMMTT} + {354898800 36000 1 YAKST} + {370706400 32400 0 YAKT} + {386434800 36000 1 YAKST} + {402242400 32400 0 YAKT} + {417970800 36000 1 YAKST} + {433778400 32400 0 YAKT} + {449593200 36000 1 YAKST} + {465325200 32400 0 YAKT} + {481050000 36000 1 YAKST} + {496774800 32400 0 YAKT} + {512499600 36000 1 YAKST} + {528224400 32400 0 YAKT} + {543949200 36000 1 YAKST} + {559674000 32400 0 YAKT} + {575398800 36000 1 YAKST} + {591123600 32400 0 YAKT} + {606848400 36000 1 YAKST} + {622573200 32400 0 YAKT} + {638298000 36000 1 YAKST} + {654627600 32400 0 YAKT} + {670352400 28800 0 YAKMMTT} + {670356000 32400 1 YAKST} + {686080800 28800 0 YAKT} + {695757600 32400 0 YAKMMTT} + {701791200 36000 1 YAKST} + {717512400 32400 0 YAKT} + {733251600 36000 1 YAKST} + {748976400 32400 0 YAKT} + {764701200 36000 1 YAKST} + {780426000 32400 0 YAKT} + {796150800 36000 1 YAKST} + {811875600 32400 0 YAKT} + {828205200 36000 1 YAKST} + {846349200 32400 0 YAKT} + {859654800 36000 1 YAKST} + {877798800 32400 0 YAKT} + {891104400 36000 1 YAKST} + {909248400 32400 0 YAKT} + {922554000 36000 1 YAKST} + {941302800 32400 0 YAKT} + {954003600 36000 1 YAKST} + {972752400 32400 0 YAKT} + {985453200 36000 1 YAKST} + {1004202000 32400 0 YAKT} + {1017507600 36000 1 YAKST} + {1035651600 32400 0 YAKT} + {1048957200 36000 1 YAKST} + {1067101200 32400 0 YAKT} + {1072882800 36000 0 VLAMMTT} + {1080403200 39600 1 VLAST} + {1099152000 36000 0 VLAT} + {1111852800 39600 1 VLAST} + {1130601600 36000 0 VLAT} + {1143302400 39600 1 VLAST} + {1162051200 36000 0 VLAT} + {1174752000 39600 1 VLAST} + {1193500800 36000 0 VLAT} + {1206806400 39600 1 VLAST} + {1224950400 36000 0 VLAT} + {1238256000 39600 1 VLAST} + {1256400000 36000 0 VLAT} + {1269705600 39600 1 VLAST} + {1288454400 36000 0 VLAT} + {1301155200 39600 0 VLAT} + {1315832400 36000 0 YAKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kolkata b/inkstitch/bin/tcl/tzdata/Asia/Kolkata new file mode 100644 index 0000000..a87bf31 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kolkata @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kolkata) { + {-9223372036854775808 21208 0 LMT} + {-2840162008 21200 0 HMT} + {-891582800 23400 0 BURT} + {-872058600 19800 0 IST} + {-862637400 23400 1 IST} + {-764145000 19800 0 IST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk b/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk new file mode 100644 index 0000000..13dfeb5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Krasnoyarsk) { + {-9223372036854775808 22280 0 LMT} + {-1577513480 21600 0 KRAT} + {-1247551200 25200 0 KRAMMTT} + {354906000 28800 1 KRAST} + {370713600 25200 0 KRAT} + {386442000 28800 1 KRAST} + {402249600 25200 0 KRAT} + {417978000 28800 1 KRAST} + {433785600 25200 0 KRAT} + {449600400 28800 1 KRAST} + {465332400 25200 0 KRAT} + {481057200 28800 1 KRAST} + {496782000 25200 0 KRAT} + {512506800 28800 1 KRAST} + {528231600 25200 0 KRAT} + {543956400 28800 1 KRAST} + {559681200 25200 0 KRAT} + {575406000 28800 1 KRAST} + {591130800 25200 0 KRAT} + {606855600 28800 1 KRAST} + {622580400 25200 0 KRAT} + {638305200 28800 1 KRAST} + {654634800 25200 0 KRAT} + {670359600 21600 0 KRAMMTT} + {670363200 25200 1 KRAST} + {686088000 21600 0 KRAT} + {695764800 25200 0 KRAMMTT} + {701798400 28800 1 KRAST} + {717519600 25200 0 KRAT} + {733258800 28800 1 KRAST} + {748983600 25200 0 KRAT} + {764708400 28800 1 KRAST} + {780433200 25200 0 KRAT} + {796158000 28800 1 KRAST} + {811882800 25200 0 KRAT} + {828212400 28800 1 KRAST} + {846356400 25200 0 KRAT} + {859662000 28800 1 KRAST} + {877806000 25200 0 KRAT} + {891111600 28800 1 KRAST} + {909255600 25200 0 KRAT} + {922561200 28800 1 KRAST} + {941310000 25200 0 KRAT} + {954010800 28800 1 KRAST} + {972759600 25200 0 KRAT} + {985460400 28800 1 KRAST} + {1004209200 25200 0 KRAT} + {1017514800 28800 1 KRAST} + {1035658800 25200 0 KRAT} + {1048964400 28800 1 KRAST} + {1067108400 25200 0 KRAT} + {1080414000 28800 1 KRAST} + {1099162800 25200 0 KRAT} + {1111863600 28800 1 KRAST} + {1130612400 25200 0 KRAT} + {1143313200 28800 1 KRAST} + {1162062000 25200 0 KRAT} + {1174762800 28800 1 KRAST} + {1193511600 25200 0 KRAT} + {1206817200 28800 1 KRAST} + {1224961200 25200 0 KRAT} + {1238266800 28800 1 KRAST} + {1256410800 25200 0 KRAT} + {1269716400 28800 1 KRAST} + {1288465200 25200 0 KRAT} + {1301166000 28800 0 KRAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur b/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur new file mode 100644 index 0000000..7a54bd6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kuala_Lumpur) { + {-9223372036854775808 24406 0 LMT} + {-2177477206 24925 0 SMT} + {-2038200925 25200 0 MALT} + {-1167634800 26400 1 MALST} + {-1073028000 26400 0 MALT} + {-894180000 27000 0 MALT} + {-879665400 32400 0 JST} + {-767005200 27000 0 MALT} + {378664200 28800 0 MYT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kuching b/inkstitch/bin/tcl/tzdata/Asia/Kuching new file mode 100644 index 0000000..0f9110c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kuching @@ -0,0 +1,24 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kuching) { + {-9223372036854775808 26480 0 LMT} + {-1383463280 27000 0 BORT} + {-1167636600 28800 0 BORT} + {-1082448000 30000 1 BORTST} + {-1074586800 28800 0 BORT} + {-1050825600 30000 1 BORTST} + {-1042964400 28800 0 BORT} + {-1019289600 30000 1 BORTST} + {-1011428400 28800 0 BORT} + {-987753600 30000 1 BORTST} + {-979892400 28800 0 BORT} + {-956217600 30000 1 BORTST} + {-948356400 28800 0 BORT} + {-924595200 30000 1 BORTST} + {-916734000 28800 0 BORT} + {-893059200 30000 1 BORTST} + {-885198000 28800 0 BORT} + {-879667200 32400 0 JST} + {-767005200 28800 0 BORT} + {378662400 28800 0 MYT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Kuwait b/inkstitch/bin/tcl/tzdata/Asia/Kuwait new file mode 100644 index 0000000..15d26db --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Kuwait @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kuwait) { + {-9223372036854775808 11516 0 LMT} + {-631163516 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Macao b/inkstitch/bin/tcl/tzdata/Asia/Macao new file mode 100644 index 0000000..6e972ff --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Macao @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Macau)]} { + LoadTimeZoneFile Asia/Macau +} +set TZData(:Asia/Macao) $TZData(:Asia/Macau) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Macau b/inkstitch/bin/tcl/tzdata/Asia/Macau new file mode 100644 index 0000000..9d4abfe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Macau @@ -0,0 +1,46 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Macau) { + {-9223372036854775808 27260 0 LMT} + {-1830411260 28800 0 MOT} + {-277360200 32400 1 MOST} + {-257405400 28800 0 MOT} + {-245910600 32400 1 MOST} + {-225955800 28800 0 MOT} + {-214473600 32400 1 MOST} + {-194506200 28800 0 MOT} + {-182406600 32400 1 MOST} + {-163056600 28800 0 MOT} + {-150969600 32400 1 MOST} + {-131619600 28800 0 MOT} + {-117088200 32400 1 MOST} + {-101367000 28800 0 MOT} + {-85638600 32400 1 MOST} + {-69312600 28800 0 MOT} + {-53584200 32400 1 MOST} + {-37863000 28800 0 MOT} + {-22134600 32400 1 MOST} + {-6413400 28800 0 MOT} + {9315000 32400 1 MOST} + {25036200 28800 0 MOT} + {40764600 32400 1 MOST} + {56485800 28800 0 MOT} + {72201600 32400 1 MOST} + {87922800 28800 0 MOT} + {103651200 32400 1 MOST} + {119977200 28800 0 MOT} + {135705600 32400 1 MOST} + {151439400 28800 0 MOT} + {167167800 32400 1 MOST} + {182889000 28800 0 MOT} + {198617400 32400 1 MOST} + {214338600 28800 0 MOT} + {230067000 32400 1 MOST} + {245788200 28800 0 MOT} + {261504000 32400 1 MOST} + {277225200 28800 0 MOT} + {292953600 32400 1 MOST} + {309279600 28800 0 MOT} + {325008000 32400 1 MOST} + {340729200 28800 0 MOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Magadan b/inkstitch/bin/tcl/tzdata/Asia/Magadan new file mode 100644 index 0000000..62e01c5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Magadan @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Magadan) { + {-9223372036854775808 36192 0 LMT} + {-1441188192 36000 0 MAGT} + {-1247565600 39600 0 MAGMMTT} + {354891600 43200 1 MAGST} + {370699200 39600 0 MAGT} + {386427600 43200 1 MAGST} + {402235200 39600 0 MAGT} + {417963600 43200 1 MAGST} + {433771200 39600 0 MAGT} + {449586000 43200 1 MAGST} + {465318000 39600 0 MAGT} + {481042800 43200 1 MAGST} + {496767600 39600 0 MAGT} + {512492400 43200 1 MAGST} + {528217200 39600 0 MAGT} + {543942000 43200 1 MAGST} + {559666800 39600 0 MAGT} + {575391600 43200 1 MAGST} + {591116400 39600 0 MAGT} + {606841200 43200 1 MAGST} + {622566000 39600 0 MAGT} + {638290800 43200 1 MAGST} + {654620400 39600 0 MAGT} + {670345200 36000 0 MAGMMTT} + {670348800 39600 1 MAGST} + {686073600 36000 0 MAGT} + {695750400 39600 0 MAGMMTT} + {701784000 43200 1 MAGST} + {717505200 39600 0 MAGT} + {733244400 43200 1 MAGST} + {748969200 39600 0 MAGT} + {764694000 43200 1 MAGST} + {780418800 39600 0 MAGT} + {796143600 43200 1 MAGST} + {811868400 39600 0 MAGT} + {828198000 43200 1 MAGST} + {846342000 39600 0 MAGT} + {859647600 43200 1 MAGST} + {877791600 39600 0 MAGT} + {891097200 43200 1 MAGST} + {909241200 39600 0 MAGT} + {922546800 43200 1 MAGST} + {941295600 39600 0 MAGT} + {953996400 43200 1 MAGST} + {972745200 39600 0 MAGT} + {985446000 43200 1 MAGST} + {1004194800 39600 0 MAGT} + {1017500400 43200 1 MAGST} + {1035644400 39600 0 MAGT} + {1048950000 43200 1 MAGST} + {1067094000 39600 0 MAGT} + {1080399600 43200 1 MAGST} + {1099148400 39600 0 MAGT} + {1111849200 43200 1 MAGST} + {1130598000 39600 0 MAGT} + {1143298800 43200 1 MAGST} + {1162047600 39600 0 MAGT} + {1174748400 43200 1 MAGST} + {1193497200 39600 0 MAGT} + {1206802800 43200 1 MAGST} + {1224946800 39600 0 MAGT} + {1238252400 43200 1 MAGST} + {1256396400 39600 0 MAGT} + {1269702000 43200 1 MAGST} + {1288450800 39600 0 MAGT} + {1301151600 43200 0 MAGT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Makassar b/inkstitch/bin/tcl/tzdata/Asia/Makassar new file mode 100644 index 0000000..aa604b4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Makassar @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Makassar) { + {-9223372036854775808 28656 0 LMT} + {-1577951856 28656 0 MMT} + {-1172908656 28800 0 CIT} + {-880272000 32400 0 JST} + {-766054800 28800 0 CIT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Manila b/inkstitch/bin/tcl/tzdata/Asia/Manila new file mode 100644 index 0000000..9cc25e8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Manila @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Manila) { + {-9223372036854775808 -57360 0 LMT} + {-3944621040 29040 0 LMT} + {-2229321840 28800 0 PHT} + {-1046678400 32400 1 PHST} + {-1038733200 28800 0 PHT} + {-873273600 32400 0 JST} + {-794221200 28800 0 PHT} + {-496224000 32400 1 PHST} + {-489315600 28800 0 PHT} + {259344000 32400 1 PHST} + {275151600 28800 0 PHT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Muscat b/inkstitch/bin/tcl/tzdata/Asia/Muscat new file mode 100644 index 0000000..a69b880 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Muscat @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Muscat) { + {-9223372036854775808 14064 0 LMT} + {-1577937264 14400 0 GST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Nicosia b/inkstitch/bin/tcl/tzdata/Asia/Nicosia new file mode 100644 index 0000000..73a7b4c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Nicosia @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Nicosia) { + {-9223372036854775808 8008 0 LMT} + {-1518920008 7200 0 EET} + {166572000 10800 1 EEST} + {182293200 7200 0 EET} + {200959200 10800 1 EEST} + {213829200 7200 0 EET} + {228866400 10800 1 EEST} + {243982800 7200 0 EET} + {260316000 10800 1 EEST} + {276123600 7200 0 EET} + {291765600 10800 1 EEST} + {307486800 7200 0 EET} + {323820000 10800 1 EEST} + {338936400 7200 0 EET} + {354664800 10800 1 EEST} + {370386000 7200 0 EET} + {386114400 10800 1 EEST} + {401835600 7200 0 EET} + {417564000 10800 1 EEST} + {433285200 7200 0 EET} + {449013600 10800 1 EEST} + {465339600 7200 0 EET} + {481068000 10800 1 EEST} + {496789200 7200 0 EET} + {512517600 10800 1 EEST} + {528238800 7200 0 EET} + {543967200 10800 1 EEST} + {559688400 7200 0 EET} + {575416800 10800 1 EEST} + {591138000 7200 0 EET} + {606866400 10800 1 EEST} + {622587600 7200 0 EET} + {638316000 10800 1 EEST} + {654642000 7200 0 EET} + {670370400 10800 1 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {843944400 7200 0 EET} + {859672800 10800 1 EEST} + {875394000 7200 0 EET} + {891122400 10800 1 EEST} + {904597200 10800 0 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk b/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk new file mode 100644 index 0000000..9cd45c0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Novokuznetsk) { + {-9223372036854775808 20928 0 NMT} + {-1577512128 21600 0 KRAT} + {-1247551200 25200 0 KRAMMTT} + {354906000 28800 1 KRAST} + {370713600 25200 0 KRAT} + {386442000 28800 1 KRAST} + {402249600 25200 0 KRAT} + {417978000 28800 1 KRAST} + {433785600 25200 0 KRAT} + {449600400 28800 1 KRAST} + {465332400 25200 0 KRAT} + {481057200 28800 1 KRAST} + {496782000 25200 0 KRAT} + {512506800 28800 1 KRAST} + {528231600 25200 0 KRAT} + {543956400 28800 1 KRAST} + {559681200 25200 0 KRAT} + {575406000 28800 1 KRAST} + {591130800 25200 0 KRAT} + {606855600 28800 1 KRAST} + {622580400 25200 0 KRAT} + {638305200 28800 1 KRAST} + {654634800 25200 0 KRAT} + {670359600 21600 0 KRAMMTT} + {670363200 25200 1 KRAST} + {686088000 21600 0 KRAT} + {695764800 25200 0 KRAMMTT} + {701798400 28800 1 KRAST} + {717519600 25200 0 KRAT} + {733258800 28800 1 KRAST} + {748983600 25200 0 KRAT} + {764708400 28800 1 KRAST} + {780433200 25200 0 KRAT} + {796158000 28800 1 KRAST} + {811882800 25200 0 KRAT} + {828212400 28800 1 KRAST} + {846356400 25200 0 KRAT} + {859662000 28800 1 KRAST} + {877806000 25200 0 KRAT} + {891111600 28800 1 KRAST} + {909255600 25200 0 KRAT} + {922561200 28800 1 KRAST} + {941310000 25200 0 KRAT} + {954010800 28800 1 KRAST} + {972759600 25200 0 KRAT} + {985460400 28800 1 KRAST} + {1004209200 25200 0 KRAT} + {1017514800 28800 1 KRAST} + {1035658800 25200 0 KRAT} + {1048964400 28800 1 KRAST} + {1067108400 25200 0 KRAT} + {1080414000 28800 1 KRAST} + {1099162800 25200 0 KRAT} + {1111863600 28800 1 KRAST} + {1130612400 25200 0 KRAT} + {1143313200 28800 1 KRAST} + {1162062000 25200 0 KRAT} + {1174762800 28800 1 KRAST} + {1193511600 25200 0 KRAT} + {1206817200 28800 1 KRAST} + {1224961200 25200 0 KRAT} + {1238266800 28800 1 KRAST} + {1256410800 25200 0 KRAT} + {1269716400 21600 0 NOVMMTT} + {1269720000 25200 1 NOVST} + {1288468800 21600 0 NOVT} + {1301169600 25200 0 NOVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk b/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk new file mode 100644 index 0000000..5032eec --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Novosibirsk) { + {-9223372036854775808 19900 0 LMT} + {-1579476700 21600 0 NOVT} + {-1247551200 25200 0 NOVMMTT} + {354906000 28800 1 NOVST} + {370713600 25200 0 NOVT} + {386442000 28800 1 NOVST} + {402249600 25200 0 NOVT} + {417978000 28800 1 NOVST} + {433785600 25200 0 NOVT} + {449600400 28800 1 NOVST} + {465332400 25200 0 NOVT} + {481057200 28800 1 NOVST} + {496782000 25200 0 NOVT} + {512506800 28800 1 NOVST} + {528231600 25200 0 NOVT} + {543956400 28800 1 NOVST} + {559681200 25200 0 NOVT} + {575406000 28800 1 NOVST} + {591130800 25200 0 NOVT} + {606855600 28800 1 NOVST} + {622580400 25200 0 NOVT} + {638305200 28800 1 NOVST} + {654634800 25200 0 NOVT} + {670359600 21600 0 NOVMMTT} + {670363200 25200 1 NOVST} + {686088000 21600 0 NOVT} + {695764800 25200 0 NOVMMTT} + {701798400 28800 1 NOVST} + {717519600 25200 0 NOVT} + {733258800 28800 1 NOVST} + {738090000 25200 0 NOVST} + {748987200 21600 0 NOVT} + {764712000 25200 1 NOVST} + {780436800 21600 0 NOVT} + {796161600 25200 1 NOVST} + {811886400 21600 0 NOVT} + {828216000 25200 1 NOVST} + {846360000 21600 0 NOVT} + {859665600 25200 1 NOVST} + {877809600 21600 0 NOVT} + {891115200 25200 1 NOVST} + {909259200 21600 0 NOVT} + {922564800 25200 1 NOVST} + {941313600 21600 0 NOVT} + {954014400 25200 1 NOVST} + {972763200 21600 0 NOVT} + {985464000 25200 1 NOVST} + {1004212800 21600 0 NOVT} + {1017518400 25200 1 NOVST} + {1035662400 21600 0 NOVT} + {1048968000 25200 1 NOVST} + {1067112000 21600 0 NOVT} + {1080417600 25200 1 NOVST} + {1099166400 21600 0 NOVT} + {1111867200 25200 1 NOVST} + {1130616000 21600 0 NOVT} + {1143316800 25200 1 NOVST} + {1162065600 21600 0 NOVT} + {1174766400 25200 1 NOVST} + {1193515200 21600 0 NOVT} + {1206820800 25200 1 NOVST} + {1224964800 21600 0 NOVT} + {1238270400 25200 1 NOVST} + {1256414400 21600 0 NOVT} + {1269720000 25200 1 NOVST} + {1288468800 21600 0 NOVT} + {1301169600 25200 0 NOVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Omsk b/inkstitch/bin/tcl/tzdata/Asia/Omsk new file mode 100644 index 0000000..ca90d2e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Omsk @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Omsk) { + {-9223372036854775808 17616 0 LMT} + {-1582088016 18000 0 OMST} + {-1247547600 21600 0 OMSMMTT} + {354909600 25200 1 OMSST} + {370717200 21600 0 OMST} + {386445600 25200 1 OMSST} + {402253200 21600 0 OMST} + {417981600 25200 1 OMSST} + {433789200 21600 0 OMST} + {449604000 25200 1 OMSST} + {465336000 21600 0 OMST} + {481060800 25200 1 OMSST} + {496785600 21600 0 OMST} + {512510400 25200 1 OMSST} + {528235200 21600 0 OMST} + {543960000 25200 1 OMSST} + {559684800 21600 0 OMST} + {575409600 25200 1 OMSST} + {591134400 21600 0 OMST} + {606859200 25200 1 OMSST} + {622584000 21600 0 OMST} + {638308800 25200 1 OMSST} + {654638400 21600 0 OMST} + {670363200 18000 0 OMSMMTT} + {670366800 21600 1 OMSST} + {686091600 18000 0 OMST} + {695768400 21600 0 OMSMMTT} + {701802000 25200 1 OMSST} + {717523200 21600 0 OMST} + {733262400 25200 1 OMSST} + {748987200 21600 0 OMST} + {764712000 25200 1 OMSST} + {780436800 21600 0 OMST} + {796161600 25200 1 OMSST} + {811886400 21600 0 OMST} + {828216000 25200 1 OMSST} + {846360000 21600 0 OMST} + {859665600 25200 1 OMSST} + {877809600 21600 0 OMST} + {891115200 25200 1 OMSST} + {909259200 21600 0 OMST} + {922564800 25200 1 OMSST} + {941313600 21600 0 OMST} + {954014400 25200 1 OMSST} + {972763200 21600 0 OMST} + {985464000 25200 1 OMSST} + {1004212800 21600 0 OMST} + {1017518400 25200 1 OMSST} + {1035662400 21600 0 OMST} + {1048968000 25200 1 OMSST} + {1067112000 21600 0 OMST} + {1080417600 25200 1 OMSST} + {1099166400 21600 0 OMST} + {1111867200 25200 1 OMSST} + {1130616000 21600 0 OMST} + {1143316800 25200 1 OMSST} + {1162065600 21600 0 OMST} + {1174766400 25200 1 OMSST} + {1193515200 21600 0 OMST} + {1206820800 25200 1 OMSST} + {1224964800 21600 0 OMST} + {1238270400 25200 1 OMSST} + {1256414400 21600 0 OMST} + {1269720000 25200 1 OMSST} + {1288468800 21600 0 OMST} + {1301169600 25200 0 OMST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Oral b/inkstitch/bin/tcl/tzdata/Asia/Oral new file mode 100644 index 0000000..88b9a29 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Oral @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Oral) { + {-9223372036854775808 12324 0 LMT} + {-1441164324 14400 0 URAT} + {-1247544000 18000 0 URAT} + {354913200 21600 1 URAST} + {370720800 21600 0 URAT} + {386445600 18000 0 URAT} + {386449200 21600 1 URAST} + {402256800 18000 0 URAT} + {417985200 21600 1 URAST} + {433792800 18000 0 URAT} + {449607600 21600 1 URAST} + {465339600 18000 0 URAT} + {481064400 21600 1 URAST} + {496789200 18000 0 URAT} + {512514000 21600 1 URAST} + {528238800 18000 0 URAT} + {543963600 21600 1 URAST} + {559688400 18000 0 URAT} + {575413200 21600 1 URAST} + {591138000 18000 0 URAT} + {606862800 14400 0 URAT} + {606866400 18000 1 URAST} + {622591200 14400 0 URAT} + {638316000 18000 1 URAST} + {654645600 14400 0 URAT} + {662673600 14400 0 URAT} + {692827200 14400 0 ORAT} + {701809200 18000 1 ORAST} + {717530400 14400 0 ORAT} + {733269600 18000 1 ORAST} + {748994400 14400 0 ORAT} + {764719200 18000 1 ORAST} + {780444000 14400 0 ORAT} + {796168800 18000 1 ORAST} + {811893600 14400 0 ORAT} + {828223200 18000 1 ORAST} + {846367200 14400 0 ORAT} + {859672800 18000 1 ORAST} + {877816800 14400 0 ORAT} + {891122400 18000 1 ORAST} + {909266400 14400 0 ORAT} + {922572000 18000 1 ORAST} + {941320800 14400 0 ORAT} + {954021600 18000 1 ORAST} + {972770400 14400 0 ORAT} + {985471200 18000 1 ORAST} + {1004220000 14400 0 ORAT} + {1017525600 18000 1 ORAST} + {1035669600 14400 0 ORAT} + {1048975200 18000 1 ORAST} + {1067119200 14400 0 ORAT} + {1080424800 18000 1 ORAST} + {1099173600 14400 0 ORAT} + {1110830400 18000 0 ORAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh b/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh new file mode 100644 index 0000000..4f28420 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Phnom_Penh) { + {-9223372036854775808 25180 0 LMT} + {-2005973980 25580 0 SMT} + {-1855983920 25200 0 ICT} + {-1819954800 28800 0 ICT} + {-1220428800 25200 0 ICT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Pontianak b/inkstitch/bin/tcl/tzdata/Asia/Pontianak new file mode 100644 index 0000000..f3567dd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Pontianak @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Pontianak) { + {-9223372036854775808 26240 0 LMT} + {-1946186240 26240 0 PMT} + {-1172906240 27000 0 WIT} + {-881220600 32400 0 JST} + {-766054800 27000 0 WIT} + {-683883000 28800 0 WIT} + {-620812800 27000 0 WIT} + {-189415800 28800 0 CIT} + {567964800 25200 0 WIT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Pyongyang b/inkstitch/bin/tcl/tzdata/Asia/Pyongyang new file mode 100644 index 0000000..21c9a68 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Pyongyang @@ -0,0 +1,11 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Pyongyang) { + {-9223372036854775808 30180 0 LMT} + {-2524551780 30600 0 KST} + {-2053931400 32400 0 KST} + {-1325494800 30600 0 KST} + {-1199262600 32400 0 KST} + {-498128400 28800 0 KST} + {-264931200 32400 0 KST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Qatar b/inkstitch/bin/tcl/tzdata/Asia/Qatar new file mode 100644 index 0000000..bfb4eb4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Qatar @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Qatar) { + {-9223372036854775808 12368 0 LMT} + {-1577935568 14400 0 GST} + {76190400 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda b/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda new file mode 100644 index 0000000..16da574 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Qyzylorda) { + {-9223372036854775808 15712 0 LMT} + {-1441167712 14400 0 KIZT} + {-1247544000 18000 0 KIZT} + {354913200 21600 1 KIZST} + {370720800 21600 0 KIZT} + {386445600 18000 0 KIZT} + {386449200 21600 1 KIZST} + {402256800 18000 0 KIZT} + {417985200 21600 1 KIZST} + {433792800 18000 0 KIZT} + {449607600 21600 1 KIZST} + {465339600 18000 0 KIZT} + {481064400 21600 1 KIZST} + {496789200 18000 0 KIZT} + {512514000 21600 1 KIZST} + {528238800 18000 0 KIZT} + {543963600 21600 1 KIZST} + {559688400 18000 0 KIZT} + {575413200 21600 1 KIZST} + {591138000 18000 0 KIZT} + {606862800 21600 1 KIZST} + {622587600 18000 0 KIZT} + {638312400 21600 1 KIZST} + {654642000 18000 0 KIZT} + {662670000 18000 0 KIZT} + {692823600 18000 0 QYZT} + {695768400 21600 0 QYZT} + {701802000 25200 1 QYZST} + {717523200 21600 0 QYZT} + {733262400 25200 1 QYZST} + {748987200 21600 0 QYZT} + {764712000 25200 1 QYZST} + {780436800 21600 0 QYZT} + {796161600 25200 1 QYZST} + {811886400 21600 0 QYZT} + {828216000 25200 1 QYZST} + {846360000 21600 0 QYZT} + {859665600 25200 1 QYZST} + {877809600 21600 0 QYZT} + {891115200 25200 1 QYZST} + {909259200 21600 0 QYZT} + {922564800 25200 1 QYZST} + {941313600 21600 0 QYZT} + {954014400 25200 1 QYZST} + {972763200 21600 0 QYZT} + {985464000 25200 1 QYZST} + {1004212800 21600 0 QYZT} + {1017518400 25200 1 QYZST} + {1035662400 21600 0 QYZT} + {1048968000 25200 1 QYZST} + {1067112000 21600 0 QYZT} + {1080417600 25200 1 QYZST} + {1099166400 21600 0 QYZT} + {1110823200 21600 0 QYZT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Rangoon b/inkstitch/bin/tcl/tzdata/Asia/Rangoon new file mode 100644 index 0000000..4f3ac02 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Rangoon @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Rangoon) { + {-9223372036854775808 23080 0 LMT} + {-2840163880 23080 0 RMT} + {-1577946280 23400 0 BURT} + {-873268200 32400 0 JST} + {-778410000 23400 0 MMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Riyadh b/inkstitch/bin/tcl/tzdata/Asia/Riyadh new file mode 100644 index 0000000..0ef28a9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Riyadh @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Riyadh) { + {-9223372036854775808 11212 0 LMT} + {-631163212 10800 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Saigon b/inkstitch/bin/tcl/tzdata/Asia/Saigon new file mode 100644 index 0000000..1e42eed --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Saigon @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ho_Chi_Minh)]} { + LoadTimeZoneFile Asia/Ho_Chi_Minh +} +set TZData(:Asia/Saigon) $TZData(:Asia/Ho_Chi_Minh) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Sakhalin b/inkstitch/bin/tcl/tzdata/Asia/Sakhalin new file mode 100644 index 0000000..0b29e82 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Sakhalin @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Sakhalin) { + {-9223372036854775808 34248 0 LMT} + {-2031039048 32400 0 CJT} + {-1009875600 32400 0 JST} + {-768560400 39600 0 SAKMMTT} + {354891600 43200 1 SAKST} + {370699200 39600 0 SAKT} + {386427600 43200 1 SAKST} + {402235200 39600 0 SAKT} + {417963600 43200 1 SAKST} + {433771200 39600 0 SAKT} + {449586000 43200 1 SAKST} + {465318000 39600 0 SAKT} + {481042800 43200 1 SAKST} + {496767600 39600 0 SAKT} + {512492400 43200 1 SAKST} + {528217200 39600 0 SAKT} + {543942000 43200 1 SAKST} + {559666800 39600 0 SAKT} + {575391600 43200 1 SAKST} + {591116400 39600 0 SAKT} + {606841200 43200 1 SAKST} + {622566000 39600 0 SAKT} + {638290800 43200 1 SAKST} + {654620400 39600 0 SAKT} + {670345200 36000 0 SAKMMTT} + {670348800 39600 1 SAKST} + {686073600 36000 0 SAKT} + {695750400 39600 0 SAKMMTT} + {701784000 43200 1 SAKST} + {717505200 39600 0 SAKT} + {733244400 43200 1 SAKST} + {748969200 39600 0 SAKT} + {764694000 43200 1 SAKST} + {780418800 39600 0 SAKT} + {796143600 43200 1 SAKST} + {811868400 39600 0 SAKT} + {828198000 43200 1 SAKST} + {846342000 39600 0 SAKT} + {859647600 36000 0 SAKMMTT} + {859651200 39600 1 SAKST} + {877795200 36000 0 SAKT} + {891100800 39600 1 SAKST} + {909244800 36000 0 SAKT} + {922550400 39600 1 SAKST} + {941299200 36000 0 SAKT} + {954000000 39600 1 SAKST} + {972748800 36000 0 SAKT} + {985449600 39600 1 SAKST} + {1004198400 36000 0 SAKT} + {1017504000 39600 1 SAKST} + {1035648000 36000 0 SAKT} + {1048953600 39600 1 SAKST} + {1067097600 36000 0 SAKT} + {1080403200 39600 1 SAKST} + {1099152000 36000 0 SAKT} + {1111852800 39600 1 SAKST} + {1130601600 36000 0 SAKT} + {1143302400 39600 1 SAKST} + {1162051200 36000 0 SAKT} + {1174752000 39600 1 SAKST} + {1193500800 36000 0 SAKT} + {1206806400 39600 1 SAKST} + {1224950400 36000 0 SAKT} + {1238256000 39600 1 SAKST} + {1256400000 36000 0 SAKT} + {1269705600 39600 1 SAKST} + {1288454400 36000 0 SAKT} + {1301155200 39600 0 SAKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Samarkand b/inkstitch/bin/tcl/tzdata/Asia/Samarkand new file mode 100644 index 0000000..6a1be11 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Samarkand @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Samarkand) { + {-9223372036854775808 16032 0 LMT} + {-1441168032 14400 0 SAMT} + {-1247544000 18000 0 SAMT} + {354913200 21600 1 SAMST} + {370720800 21600 0 TAST} + {386445600 18000 0 SAMT} + {386449200 21600 1 SAMST} + {402256800 18000 0 SAMT} + {417985200 21600 1 SAMST} + {433792800 18000 0 SAMT} + {449607600 21600 1 SAMST} + {465339600 18000 0 SAMT} + {481064400 21600 1 SAMST} + {496789200 18000 0 SAMT} + {512514000 21600 1 SAMST} + {528238800 18000 0 SAMT} + {543963600 21600 1 SAMST} + {559688400 18000 0 SAMT} + {575413200 21600 1 SAMST} + {591138000 18000 0 SAMT} + {606862800 21600 1 SAMST} + {622587600 18000 0 SAMT} + {638312400 21600 1 SAMST} + {654642000 18000 0 SAMT} + {670366800 21600 1 SAMST} + {683665200 21600 0 UZST} + {686091600 18000 0 UZT} + {694206000 18000 0 UZT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Seoul b/inkstitch/bin/tcl/tzdata/Asia/Seoul new file mode 100644 index 0000000..9c83e30 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Seoul @@ -0,0 +1,18 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Seoul) { + {-9223372036854775808 30472 0 LMT} + {-2524552072 30600 0 KST} + {-2053931400 32400 0 KST} + {-1325494800 30600 0 KST} + {-1199262600 32400 0 KST} + {-498128400 28800 0 KST} + {-303984000 32400 1 KDT} + {-293533200 28800 0 KST} + {-264931200 30600 0 KST} + {-39515400 32400 0 KST} + {547570800 36000 1 KDT} + {560872800 32400 0 KST} + {579020400 36000 1 KDT} + {592322400 32400 0 KST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Shanghai b/inkstitch/bin/tcl/tzdata/Asia/Shanghai new file mode 100644 index 0000000..4b3cc3b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Shanghai @@ -0,0 +1,23 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Shanghai) { + {-9223372036854775808 29157 0 LMT} + {-1325491557 28800 0 CST} + {-933494400 32400 1 CDT} + {-923130000 28800 0 CST} + {-908784000 32400 1 CDT} + {-891594000 28800 0 CST} + {-662716800 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Singapore b/inkstitch/bin/tcl/tzdata/Asia/Singapore new file mode 100644 index 0000000..e2f226e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Singapore @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Singapore) { + {-9223372036854775808 24925 0 LMT} + {-2177477725 24925 0 SMT} + {-2038200925 25200 0 MALT} + {-1167634800 26400 1 MALST} + {-1073028000 26400 0 MALT} + {-894180000 27000 0 MALT} + {-879665400 32400 0 JST} + {-767005200 27000 0 MALT} + {-138785400 27000 0 SGT} + {378664200 28800 0 SGT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Taipei b/inkstitch/bin/tcl/tzdata/Asia/Taipei new file mode 100644 index 0000000..a3c7ecf --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Taipei @@ -0,0 +1,46 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Taipei) { + {-9223372036854775808 29160 0 LMT} + {-2335248360 28800 0 CST} + {-778579200 32400 1 CDT} + {-765363600 28800 0 CST} + {-747043200 32400 1 CDT} + {-733827600 28800 0 CST} + {-715507200 32400 1 CDT} + {-702291600 28800 0 CST} + {-683884800 32400 1 CDT} + {-670669200 28800 0 CST} + {-652348800 32400 1 CDT} + {-639133200 28800 0 CST} + {-620812800 32400 1 CDT} + {-607597200 28800 0 CST} + {-589276800 32400 1 CDT} + {-576061200 28800 0 CST} + {-562924800 32400 1 CDT} + {-541760400 28800 0 CST} + {-528710400 32400 1 CDT} + {-510224400 28800 0 CST} + {-497174400 32400 1 CDT} + {-478688400 28800 0 CST} + {-465638400 32400 1 CDT} + {-449830800 28800 0 CST} + {-434016000 32400 1 CDT} + {-418208400 28800 0 CST} + {-402480000 32400 1 CDT} + {-386672400 28800 0 CST} + {-370944000 32400 1 CDT} + {-355136400 28800 0 CST} + {-339408000 32400 1 CDT} + {-323600400 28800 0 CST} + {-302515200 32400 1 CDT} + {-291978000 28800 0 CST} + {-270979200 32400 1 CDT} + {-260442000 28800 0 CST} + {133977600 32400 1 CDT} + {149785200 28800 0 CST} + {165513600 32400 1 CDT} + {181321200 28800 0 CST} + {299520000 32400 1 CDT} + {307465200 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Tashkent b/inkstitch/bin/tcl/tzdata/Asia/Tashkent new file mode 100644 index 0000000..fcee755 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Tashkent @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tashkent) { + {-9223372036854775808 16632 0 LMT} + {-1441168632 18000 0 TAST} + {-1247547600 21600 0 TAST} + {354909600 25200 1 TASST} + {370717200 21600 0 TAST} + {386445600 25200 1 TASST} + {402253200 21600 0 TAST} + {417981600 25200 1 TASST} + {433789200 21600 0 TAST} + {449604000 25200 1 TASST} + {465336000 21600 0 TAST} + {481060800 25200 1 TASST} + {496785600 21600 0 TAST} + {512510400 25200 1 TASST} + {528235200 21600 0 TAST} + {543960000 25200 1 TASST} + {559684800 21600 0 TAST} + {575409600 25200 1 TASST} + {591134400 21600 0 TAST} + {606859200 25200 1 TASST} + {622584000 21600 0 TAST} + {638308800 25200 1 TASST} + {654638400 21600 0 TAST} + {670363200 18000 0 TAST} + {670366800 21600 1 TASST} + {683665200 21600 0 UZST} + {686091600 18000 0 UZT} + {694206000 18000 0 UZT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Tbilisi b/inkstitch/bin/tcl/tzdata/Asia/Tbilisi new file mode 100644 index 0000000..a716917 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Tbilisi @@ -0,0 +1,60 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tbilisi) { + {-9223372036854775808 10756 0 LMT} + {-2840151556 10756 0 TBMT} + {-1441162756 10800 0 TBIT} + {-405140400 14400 0 TBIT} + {354916800 18000 1 TBIST} + {370724400 14400 0 TBIT} + {386452800 18000 1 TBIST} + {402260400 14400 0 TBIT} + {417988800 18000 1 TBIST} + {433796400 14400 0 TBIT} + {449611200 18000 1 TBIST} + {465343200 14400 0 TBIT} + {481068000 18000 1 TBIST} + {496792800 14400 0 TBIT} + {512517600 18000 1 TBIST} + {528242400 14400 0 TBIT} + {543967200 18000 1 TBIST} + {559692000 14400 0 TBIT} + {575416800 18000 1 TBIST} + {591141600 14400 0 TBIT} + {606866400 18000 1 TBIST} + {622591200 14400 0 TBIT} + {638316000 18000 1 TBIST} + {654645600 14400 0 TBIT} + {670370400 14400 1 TBIST} + {671140800 14400 0 GEST} + {686098800 10800 0 GET} + {694213200 10800 0 GET} + {701816400 14400 1 GEST} + {717537600 10800 0 GET} + {733266000 14400 1 GEST} + {748987200 10800 0 GET} + {764715600 14400 1 GEST} + {780440400 14400 0 GET} + {796161600 18000 1 GEST} + {811882800 14400 0 GET} + {828216000 18000 1 GEST} + {846360000 18000 1 GEST} + {859662000 18000 0 GEST} + {877806000 14400 0 GET} + {891115200 18000 1 GEST} + {909255600 14400 0 GET} + {922564800 18000 1 GEST} + {941310000 14400 0 GET} + {954014400 18000 1 GEST} + {972759600 14400 0 GET} + {985464000 18000 1 GEST} + {1004209200 14400 0 GET} + {1017518400 18000 1 GEST} + {1035658800 14400 0 GET} + {1048968000 18000 1 GEST} + {1067108400 14400 0 GET} + {1080417600 18000 1 GEST} + {1088280000 14400 0 GEST} + {1099177200 10800 0 GET} + {1111878000 14400 0 GET} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Tehran b/inkstitch/bin/tcl/tzdata/Asia/Tehran new file mode 100644 index 0000000..7dca0ae --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Tehran @@ -0,0 +1,105 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tehran) { + {-9223372036854775808 12344 0 LMT} + {-1704165944 12344 0 TMT} + {-757394744 12600 0 IRST} + {247177800 14400 0 IRST} + {259272000 18000 1 IRDT} + {277758000 14400 0 IRST} + {283982400 12600 0 IRST} + {290809800 16200 1 IRDT} + {306531000 12600 0 IRST} + {322432200 16200 1 IRDT} + {338499000 12600 0 IRST} + {673216200 16200 1 IRDT} + {685481400 12600 0 IRST} + {701209800 16200 1 IRDT} + {717103800 12600 0 IRST} + {732745800 16200 1 IRDT} + {748639800 12600 0 IRST} + {764281800 16200 1 IRDT} + {780175800 12600 0 IRST} + {795817800 16200 1 IRDT} + {811711800 12600 0 IRST} + {827353800 16200 1 IRDT} + {843247800 12600 0 IRST} + {858976200 16200 1 IRDT} + {874870200 12600 0 IRST} + {890512200 16200 1 IRDT} + {906406200 12600 0 IRST} + {922048200 16200 1 IRDT} + {937942200 12600 0 IRST} + {953584200 16200 1 IRDT} + {969478200 12600 0 IRST} + {985206600 16200 1 IRDT} + {1001100600 12600 0 IRST} + {1016742600 16200 1 IRDT} + {1032636600 12600 0 IRST} + {1048278600 16200 1 IRDT} + {1064172600 12600 0 IRST} + {1079814600 16200 1 IRDT} + {1095708600 12600 0 IRST} + {1111437000 16200 1 IRDT} + {1127331000 12600 0 IRST} + {1206045000 16200 1 IRDT} + {1221939000 12600 0 IRST} + {1237667400 16200 1 IRDT} + {1253561400 12600 0 IRST} + {1269203400 16200 1 IRDT} + {1285097400 12600 0 IRST} + {1300739400 16200 1 IRDT} + {1316633400 12600 0 IRST} + {1332275400 16200 1 IRDT} + {1348169400 12600 0 IRST} + {1363897800 16200 1 IRDT} + {1379791800 12600 0 IRST} + {1395433800 16200 1 IRDT} + {1411327800 12600 0 IRST} + {1426969800 16200 1 IRDT} + {1442863800 12600 0 IRST} + {1458505800 16200 1 IRDT} + {1474399800 12600 0 IRST} + {1490128200 16200 1 IRDT} + {1506022200 12600 0 IRST} + {1521664200 16200 1 IRDT} + {1537558200 12600 0 IRST} + {1553200200 16200 1 IRDT} + {1569094200 12600 0 IRST} + {1584736200 16200 1 IRDT} + {1600630200 12600 0 IRST} + {1616358600 16200 1 IRDT} + {1632252600 12600 0 IRST} + {1647894600 16200 1 IRDT} + {1663788600 12600 0 IRST} + {1679430600 16200 1 IRDT} + {1695324600 12600 0 IRST} + {1710966600 16200 1 IRDT} + {1726860600 12600 0 IRST} + {1742589000 16200 1 IRDT} + {1758483000 12600 0 IRST} + {1774125000 16200 1 IRDT} + {1790019000 12600 0 IRST} + {1805661000 16200 1 IRDT} + {1821555000 12600 0 IRST} + {1837197000 16200 1 IRDT} + {1853091000 12600 0 IRST} + {1868733000 16200 1 IRDT} + {1884627000 12600 0 IRST} + {1900355400 16200 1 IRDT} + {1916249400 12600 0 IRST} + {1931891400 16200 1 IRDT} + {1947785400 12600 0 IRST} + {1963427400 16200 1 IRDT} + {1979321400 12600 0 IRST} + {1994963400 16200 1 IRDT} + {2010857400 12600 0 IRST} + {2026585800 16200 1 IRDT} + {2042479800 12600 0 IRST} + {2058121800 16200 1 IRDT} + {2074015800 12600 0 IRST} + {2089657800 16200 1 IRDT} + {2105551800 12600 0 IRST} + {2121193800 16200 1 IRDT} + {2137087800 12600 0 IRST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv b/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv new file mode 100644 index 0000000..3e7278d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Jerusalem)]} { + LoadTimeZoneFile Asia/Jerusalem +} +set TZData(:Asia/Tel_Aviv) $TZData(:Asia/Jerusalem) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Thimbu b/inkstitch/bin/tcl/tzdata/Asia/Thimbu new file mode 100644 index 0000000..94b0846 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Thimbu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Thimphu)]} { + LoadTimeZoneFile Asia/Thimphu +} +set TZData(:Asia/Thimbu) $TZData(:Asia/Thimphu) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Thimphu b/inkstitch/bin/tcl/tzdata/Asia/Thimphu new file mode 100644 index 0000000..8c981de --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Thimphu @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Thimphu) { + {-9223372036854775808 21516 0 LMT} + {-706341516 19800 0 IST} + {560025000 21600 0 BTT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Tokyo b/inkstitch/bin/tcl/tzdata/Asia/Tokyo new file mode 100644 index 0000000..8d1ce11 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Tokyo @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tokyo) { + {-9223372036854775808 33539 0 LMT} + {-2587712400 32400 0 JST} + {-2335251600 32400 0 CJT} + {-1009875600 32400 0 JST} + {-683794800 36000 1 JDT} + {-672393600 32400 0 JST} + {-654764400 36000 1 JDT} + {-640944000 32400 0 JST} + {-620290800 36000 1 JDT} + {-609494400 32400 0 JST} + {-588841200 36000 1 JDT} + {-578044800 32400 0 JST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang b/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang new file mode 100644 index 0000000..abe142e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Makassar)]} { + LoadTimeZoneFile Asia/Makassar +} +set TZData(:Asia/Ujung_Pandang) $TZData(:Asia/Makassar) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar b/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar new file mode 100644 index 0000000..fef76ec --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar @@ -0,0 +1,51 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ulaanbaatar) { + {-9223372036854775808 25652 0 LMT} + {-2032931252 25200 0 ULAT} + {252435600 28800 0 ULAT} + {417974400 32400 1 ULAST} + {433782000 28800 0 ULAT} + {449596800 32400 1 ULAST} + {465318000 28800 0 ULAT} + {481046400 32400 1 ULAST} + {496767600 28800 0 ULAT} + {512496000 32400 1 ULAST} + {528217200 28800 0 ULAT} + {543945600 32400 1 ULAST} + {559666800 28800 0 ULAT} + {575395200 32400 1 ULAST} + {591116400 28800 0 ULAT} + {606844800 32400 1 ULAST} + {622566000 28800 0 ULAT} + {638294400 32400 1 ULAST} + {654620400 28800 0 ULAT} + {670348800 32400 1 ULAST} + {686070000 28800 0 ULAT} + {701798400 32400 1 ULAST} + {717519600 28800 0 ULAT} + {733248000 32400 1 ULAST} + {748969200 28800 0 ULAT} + {764697600 32400 1 ULAST} + {780418800 28800 0 ULAT} + {796147200 32400 1 ULAST} + {811868400 28800 0 ULAT} + {828201600 32400 1 ULAST} + {843922800 28800 0 ULAT} + {859651200 32400 1 ULAST} + {875372400 28800 0 ULAT} + {891100800 32400 1 ULAST} + {906822000 28800 0 ULAT} + {988394400 32400 1 ULAST} + {1001696400 28800 0 ULAT} + {1017424800 32400 1 ULAST} + {1033146000 28800 0 ULAT} + {1048874400 32400 1 ULAST} + {1064595600 28800 0 ULAT} + {1080324000 32400 1 ULAST} + {1096045200 28800 0 ULAT} + {1111773600 32400 1 ULAST} + {1127494800 28800 0 ULAT} + {1143223200 32400 1 ULAST} + {1159549200 28800 0 ULAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator b/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator new file mode 100644 index 0000000..3215ee7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ulaanbaatar)]} { + LoadTimeZoneFile Asia/Ulaanbaatar +} +set TZData(:Asia/Ulan_Bator) $TZData(:Asia/Ulaanbaatar) diff --git a/inkstitch/bin/tcl/tzdata/Asia/Urumqi b/inkstitch/bin/tcl/tzdata/Asia/Urumqi new file mode 100644 index 0000000..93fc909 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Urumqi @@ -0,0 +1,19 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Urumqi) { + {-9223372036854775808 21020 0 LMT} + {-1325483420 21600 0 URUT} + {325965600 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera b/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera new file mode 100644 index 0000000..c8de7a5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ust-Nera) { + {-9223372036854775808 34374 0 LMT} + {-1579426374 28800 0 YAKT} + {354898800 43200 0 MAGST} + {370699200 39600 0 MAGT} + {386427600 43200 1 MAGST} + {402235200 39600 0 MAGT} + {417963600 43200 1 MAGST} + {433771200 39600 0 MAGT} + {449586000 43200 1 MAGST} + {465318000 39600 0 MAGT} + {481042800 43200 1 MAGST} + {496767600 39600 0 MAGT} + {512492400 43200 1 MAGST} + {528217200 39600 0 MAGT} + {543942000 43200 1 MAGST} + {559666800 39600 0 MAGT} + {575391600 43200 1 MAGST} + {591116400 39600 0 MAGT} + {606841200 43200 1 MAGST} + {622566000 39600 0 MAGT} + {638290800 43200 1 MAGST} + {654620400 39600 0 MAGT} + {670345200 36000 0 MAGMMTT} + {670348800 39600 1 MAGST} + {686073600 36000 0 MAGT} + {695750400 39600 0 MAGMMTT} + {701784000 43200 1 MAGST} + {717505200 39600 0 MAGT} + {733244400 43200 1 MAGST} + {748969200 39600 0 MAGT} + {764694000 43200 1 MAGST} + {780418800 39600 0 MAGT} + {796143600 43200 1 MAGST} + {811868400 39600 0 MAGT} + {828198000 43200 1 MAGST} + {846342000 39600 0 MAGT} + {859647600 43200 1 MAGST} + {877791600 39600 0 MAGT} + {891097200 43200 1 MAGST} + {909241200 39600 0 MAGT} + {922546800 43200 1 MAGST} + {941295600 39600 0 MAGT} + {953996400 43200 1 MAGST} + {972745200 39600 0 MAGT} + {985446000 43200 1 MAGST} + {1004194800 39600 0 MAGT} + {1017500400 43200 1 MAGST} + {1035644400 39600 0 MAGT} + {1048950000 43200 1 MAGST} + {1067094000 39600 0 MAGT} + {1080399600 43200 1 MAGST} + {1099148400 39600 0 MAGT} + {1111849200 43200 1 MAGST} + {1130598000 39600 0 MAGT} + {1143298800 43200 1 MAGST} + {1162047600 39600 0 MAGT} + {1174748400 43200 1 MAGST} + {1193497200 39600 0 MAGT} + {1206802800 43200 1 MAGST} + {1224946800 39600 0 MAGT} + {1238252400 43200 1 MAGST} + {1256396400 39600 0 MAGT} + {1269702000 43200 1 MAGST} + {1288450800 39600 0 MAGT} + {1301151600 43200 0 MAGT} + {1315828800 39600 0 VLAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Vientiane b/inkstitch/bin/tcl/tzdata/Asia/Vientiane new file mode 100644 index 0000000..18ade4d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Vientiane @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Vientiane) { + {-9223372036854775808 24624 0 LMT} + {-2005973424 25580 0 SMT} + {-1855983920 25200 0 ICT} + {-1819954800 28800 0 ICT} + {-1220428800 25200 0 ICT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Vladivostok b/inkstitch/bin/tcl/tzdata/Asia/Vladivostok new file mode 100644 index 0000000..54101a5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Vladivostok @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Vladivostok) { + {-9223372036854775808 31664 0 LMT} + {-1487321264 32400 0 VLAT} + {-1247562000 36000 0 VLAMMTT} + {354895200 39600 1 VLAST} + {370702800 36000 0 VLAT} + {386431200 39600 1 VLAST} + {402238800 36000 0 VLAT} + {417967200 39600 1 VLAST} + {433774800 36000 0 VLAT} + {449589600 39600 1 VLAST} + {465321600 36000 0 VLAT} + {481046400 39600 1 VLAST} + {496771200 36000 0 VLAT} + {512496000 39600 1 VLAST} + {528220800 36000 0 VLAT} + {543945600 39600 1 VLAST} + {559670400 36000 0 VLAT} + {575395200 39600 1 VLAST} + {591120000 36000 0 VLAT} + {606844800 39600 1 VLAST} + {622569600 36000 0 VLAT} + {638294400 39600 1 VLAST} + {654624000 36000 0 VLAT} + {670348800 32400 0 VLAMMTST} + {670352400 36000 1 VLASST} + {686077200 32400 0 VLAST} + {695754000 36000 0 VLAMMTT} + {701787600 39600 1 VLAST} + {717508800 36000 0 VLAT} + {733248000 39600 1 VLAST} + {748972800 36000 0 VLAT} + {764697600 39600 1 VLAST} + {780422400 36000 0 VLAT} + {796147200 39600 1 VLAST} + {811872000 36000 0 VLAT} + {828201600 39600 1 VLAST} + {846345600 36000 0 VLAT} + {859651200 39600 1 VLAST} + {877795200 36000 0 VLAT} + {891100800 39600 1 VLAST} + {909244800 36000 0 VLAT} + {922550400 39600 1 VLAST} + {941299200 36000 0 VLAT} + {954000000 39600 1 VLAST} + {972748800 36000 0 VLAT} + {985449600 39600 1 VLAST} + {1004198400 36000 0 VLAT} + {1017504000 39600 1 VLAST} + {1035648000 36000 0 VLAT} + {1048953600 39600 1 VLAST} + {1067097600 36000 0 VLAT} + {1080403200 39600 1 VLAST} + {1099152000 36000 0 VLAT} + {1111852800 39600 1 VLAST} + {1130601600 36000 0 VLAT} + {1143302400 39600 1 VLAST} + {1162051200 36000 0 VLAT} + {1174752000 39600 1 VLAST} + {1193500800 36000 0 VLAT} + {1206806400 39600 1 VLAST} + {1224950400 36000 0 VLAT} + {1238256000 39600 1 VLAST} + {1256400000 36000 0 VLAT} + {1269705600 39600 1 VLAST} + {1288454400 36000 0 VLAT} + {1301155200 39600 0 VLAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Yakutsk b/inkstitch/bin/tcl/tzdata/Asia/Yakutsk new file mode 100644 index 0000000..5c32cc9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Yakutsk @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yakutsk) { + {-9223372036854775808 31120 0 LMT} + {-1579423120 28800 0 YAKT} + {-1247558400 32400 0 YAKMMTT} + {354898800 36000 1 YAKST} + {370706400 32400 0 YAKT} + {386434800 36000 1 YAKST} + {402242400 32400 0 YAKT} + {417970800 36000 1 YAKST} + {433778400 32400 0 YAKT} + {449593200 36000 1 YAKST} + {465325200 32400 0 YAKT} + {481050000 36000 1 YAKST} + {496774800 32400 0 YAKT} + {512499600 36000 1 YAKST} + {528224400 32400 0 YAKT} + {543949200 36000 1 YAKST} + {559674000 32400 0 YAKT} + {575398800 36000 1 YAKST} + {591123600 32400 0 YAKT} + {606848400 36000 1 YAKST} + {622573200 32400 0 YAKT} + {638298000 36000 1 YAKST} + {654627600 32400 0 YAKT} + {670352400 28800 0 YAKMMTT} + {670356000 32400 1 YAKST} + {686080800 28800 0 YAKT} + {695757600 32400 0 YAKMMTT} + {701791200 36000 1 YAKST} + {717512400 32400 0 YAKT} + {733251600 36000 1 YAKST} + {748976400 32400 0 YAKT} + {764701200 36000 1 YAKST} + {780426000 32400 0 YAKT} + {796150800 36000 1 YAKST} + {811875600 32400 0 YAKT} + {828205200 36000 1 YAKST} + {846349200 32400 0 YAKT} + {859654800 36000 1 YAKST} + {877798800 32400 0 YAKT} + {891104400 36000 1 YAKST} + {909248400 32400 0 YAKT} + {922554000 36000 1 YAKST} + {941302800 32400 0 YAKT} + {954003600 36000 1 YAKST} + {972752400 32400 0 YAKT} + {985453200 36000 1 YAKST} + {1004202000 32400 0 YAKT} + {1017507600 36000 1 YAKST} + {1035651600 32400 0 YAKT} + {1048957200 36000 1 YAKST} + {1067101200 32400 0 YAKT} + {1080406800 36000 1 YAKST} + {1099155600 32400 0 YAKT} + {1111856400 36000 1 YAKST} + {1130605200 32400 0 YAKT} + {1143306000 36000 1 YAKST} + {1162054800 32400 0 YAKT} + {1174755600 36000 1 YAKST} + {1193504400 32400 0 YAKT} + {1206810000 36000 1 YAKST} + {1224954000 32400 0 YAKT} + {1238259600 36000 1 YAKST} + {1256403600 32400 0 YAKT} + {1269709200 36000 1 YAKST} + {1288458000 32400 0 YAKT} + {1301158800 36000 0 YAKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg b/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg new file mode 100644 index 0000000..2045496 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yekaterinburg) { + {-9223372036854775808 14544 0 LMT} + {-1592611344 14400 0 SVET} + {-1247544000 18000 0 SVEMMTT} + {354913200 21600 1 SVEST} + {370720800 18000 0 SVET} + {386449200 21600 1 SVEST} + {402256800 18000 0 SVET} + {417985200 21600 1 SVEST} + {433792800 18000 0 SVET} + {449607600 21600 1 SVEST} + {465339600 18000 0 SVET} + {481064400 21600 1 SVEST} + {496789200 18000 0 SVET} + {512514000 21600 1 SVEST} + {528238800 18000 0 SVET} + {543963600 21600 1 SVEST} + {559688400 18000 0 SVET} + {575413200 21600 1 SVEST} + {591138000 18000 0 SVET} + {606862800 21600 1 SVEST} + {622587600 18000 0 SVET} + {638312400 21600 1 SVEST} + {654642000 18000 0 SVET} + {670366800 14400 0 SVEMMTT} + {670370400 18000 1 SVEST} + {686095200 14400 0 SVET} + {695772000 18000 0 YEKMMTT} + {701805600 21600 1 YEKST} + {717526800 18000 0 YEKT} + {733266000 21600 1 YEKST} + {748990800 18000 0 YEKT} + {764715600 21600 1 YEKST} + {780440400 18000 0 YEKT} + {796165200 21600 1 YEKST} + {811890000 18000 0 YEKT} + {828219600 21600 1 YEKST} + {846363600 18000 0 YEKT} + {859669200 21600 1 YEKST} + {877813200 18000 0 YEKT} + {891118800 21600 1 YEKST} + {909262800 18000 0 YEKT} + {922568400 21600 1 YEKST} + {941317200 18000 0 YEKT} + {954018000 21600 1 YEKST} + {972766800 18000 0 YEKT} + {985467600 21600 1 YEKST} + {1004216400 18000 0 YEKT} + {1017522000 21600 1 YEKST} + {1035666000 18000 0 YEKT} + {1048971600 21600 1 YEKST} + {1067115600 18000 0 YEKT} + {1080421200 21600 1 YEKST} + {1099170000 18000 0 YEKT} + {1111870800 21600 1 YEKST} + {1130619600 18000 0 YEKT} + {1143320400 21600 1 YEKST} + {1162069200 18000 0 YEKT} + {1174770000 21600 1 YEKST} + {1193518800 18000 0 YEKT} + {1206824400 21600 1 YEKST} + {1224968400 18000 0 YEKT} + {1238274000 21600 1 YEKST} + {1256418000 18000 0 YEKT} + {1269723600 21600 1 YEKST} + {1288472400 18000 0 YEKT} + {1301173200 21600 0 YEKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Asia/Yerevan b/inkstitch/bin/tcl/tzdata/Asia/Yerevan new file mode 100644 index 0000000..22008ef --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Asia/Yerevan @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yerevan) { + {-9223372036854775808 10680 0 LMT} + {-1441162680 10800 0 YERT} + {-405140400 14400 0 YERT} + {354916800 18000 1 YERST} + {370724400 14400 0 YERT} + {386452800 18000 1 YERST} + {402260400 14400 0 YERT} + {417988800 18000 1 YERST} + {433796400 14400 0 YERT} + {449611200 18000 1 YERST} + {465343200 14400 0 YERT} + {481068000 18000 1 YERST} + {496792800 14400 0 YERT} + {512517600 18000 1 YERST} + {528242400 14400 0 YERT} + {543967200 18000 1 YERST} + {559692000 14400 0 YERT} + {575416800 18000 1 YERST} + {591141600 14400 0 YERT} + {606866400 18000 1 YERST} + {622591200 14400 0 YERT} + {638316000 18000 1 YERST} + {654645600 14400 0 YERT} + {670370400 14400 1 YERST} + {685569600 14400 0 AMST} + {686098800 10800 0 AMT} + {701812800 14400 1 AMST} + {717534000 10800 0 AMT} + {733273200 14400 1 AMST} + {748998000 10800 0 AMT} + {764722800 14400 1 AMST} + {780447600 10800 0 AMT} + {796172400 14400 1 AMST} + {811897200 14400 0 AMT} + {852062400 14400 0 AMT} + {859672800 18000 1 AMST} + {877816800 14400 0 AMT} + {891122400 18000 1 AMST} + {909266400 14400 0 AMT} + {922572000 18000 1 AMST} + {941320800 14400 0 AMT} + {954021600 18000 1 AMST} + {972770400 14400 0 AMT} + {985471200 18000 1 AMST} + {1004220000 14400 0 AMT} + {1017525600 18000 1 AMST} + {1035669600 14400 0 AMT} + {1048975200 18000 1 AMST} + {1067119200 14400 0 AMT} + {1080424800 18000 1 AMST} + {1099173600 14400 0 AMT} + {1111874400 18000 1 AMST} + {1130623200 14400 0 AMT} + {1143324000 18000 1 AMST} + {1162072800 14400 0 AMT} + {1174773600 18000 1 AMST} + {1193522400 14400 0 AMT} + {1206828000 18000 1 AMST} + {1224972000 14400 0 AMT} + {1238277600 18000 1 AMST} + {1256421600 14400 0 AMT} + {1269727200 18000 1 AMST} + {1288476000 14400 0 AMT} + {1301176800 18000 1 AMST} + {1319925600 14400 0 AMT} + {1332626400 14400 0 AMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Azores b/inkstitch/bin/tcl/tzdata/Atlantic/Azores new file mode 100644 index 0000000..c476191 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Azores @@ -0,0 +1,349 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Azores) { + {-9223372036854775808 -6160 0 LMT} + {-2713904240 -6872 0 HMT} + {-1849557928 -7200 0 AZOT} + {-1689548400 -3600 1 AZOST} + {-1677794400 -7200 0 AZOT} + {-1667430000 -3600 1 AZOST} + {-1647730800 -7200 0 AZOT} + {-1635807600 -3600 1 AZOST} + {-1616194800 -7200 0 AZOT} + {-1604358000 -3600 1 AZOST} + {-1584658800 -7200 0 AZOT} + {-1572735600 -3600 1 AZOST} + {-1553036400 -7200 0 AZOT} + {-1541199600 -3600 1 AZOST} + {-1521500400 -7200 0 AZOT} + {-1442444400 -3600 1 AZOST} + {-1426806000 -7200 0 AZOT} + {-1379286000 -3600 1 AZOST} + {-1364770800 -7200 0 AZOT} + {-1348441200 -3600 1 AZOST} + {-1333321200 -7200 0 AZOT} + {-1316386800 -3600 1 AZOST} + {-1301266800 -7200 0 AZOT} + {-1284332400 -3600 1 AZOST} + {-1269817200 -7200 0 AZOT} + {-1221433200 -3600 1 AZOST} + {-1206918000 -7200 0 AZOT} + {-1191193200 -3600 1 AZOST} + {-1175468400 -7200 0 AZOT} + {-1127689200 -3600 1 AZOST} + {-1111964400 -7200 0 AZOT} + {-1096844400 -3600 1 AZOST} + {-1080514800 -7200 0 AZOT} + {-1063580400 -3600 1 AZOST} + {-1049065200 -7200 0 AZOT} + {-1033340400 -3600 1 AZOST} + {-1017615600 -7200 0 AZOT} + {-1002495600 -3600 1 AZOST} + {-986166000 -7200 0 AZOT} + {-969231600 -3600 1 AZOST} + {-950482800 -7200 0 AZOT} + {-942015600 -3600 1 AZOST} + {-922662000 -7200 0 AZOT} + {-906937200 -3600 1 AZOST} + {-891126000 -7200 0 AZOT} + {-877302000 -3600 1 AZOST} + {-873676800 0 1 AZOMT} + {-864000000 -3600 1 AZOST} + {-857948400 -7200 0 AZOT} + {-845852400 -3600 1 AZOST} + {-842832000 0 1 AZOMT} + {-831340800 -3600 1 AZOST} + {-825894000 -7200 0 AZOT} + {-814402800 -3600 1 AZOST} + {-810777600 0 1 AZOMT} + {-799891200 -3600 1 AZOST} + {-794444400 -7200 0 AZOT} + {-782953200 -3600 1 AZOST} + {-779328000 0 1 AZOMT} + {-768441600 -3600 1 AZOST} + {-762994800 -7200 0 AZOT} + {-749084400 -3600 1 AZOST} + {-733359600 -7200 0 AZOT} + {-717624000 -3600 1 AZOST} + {-701899200 -7200 0 AZOT} + {-686174400 -3600 1 AZOST} + {-670449600 -7200 0 AZOT} + {-654724800 -3600 1 AZOST} + {-639000000 -7200 0 AZOT} + {-591825600 -3600 1 AZOST} + {-575496000 -7200 0 AZOT} + {-559771200 -3600 1 AZOST} + {-544046400 -7200 0 AZOT} + {-528321600 -3600 1 AZOST} + {-512596800 -7200 0 AZOT} + {-496872000 -3600 1 AZOST} + {-481147200 -7200 0 AZOT} + {-465422400 -3600 1 AZOST} + {-449697600 -7200 0 AZOT} + {-433972800 -3600 1 AZOST} + {-417643200 -7200 0 AZOT} + {-401918400 -3600 1 AZOST} + {-386193600 -7200 0 AZOT} + {-370468800 -3600 1 AZOST} + {-354744000 -7200 0 AZOT} + {-339019200 -3600 1 AZOST} + {-323294400 -7200 0 AZOT} + {-307569600 -3600 1 AZOST} + {-291844800 -7200 0 AZOT} + {-276120000 -3600 1 AZOST} + {-260395200 -7200 0 AZOT} + {-244670400 -3600 1 AZOST} + {-228340800 -7200 0 AZOT} + {-212616000 -3600 1 AZOST} + {-196891200 -7200 0 AZOT} + {-181166400 -3600 1 AZOST} + {-165441600 -7200 0 AZOT} + {-149716800 -3600 1 AZOST} + {-133992000 -7200 0 AZOT} + {-118267200 -3600 0 AZOT} + {228272400 0 1 AZOST} + {243997200 -3600 0 AZOT} + {260326800 0 1 AZOST} + {276051600 -3600 0 AZOT} + {291776400 0 1 AZOST} + {307504800 -3600 0 AZOT} + {323226000 0 1 AZOST} + {338954400 -3600 0 AZOT} + {354679200 0 1 AZOST} + {370404000 -3600 0 AZOT} + {386128800 0 1 AZOST} + {401853600 -3600 0 AZOT} + {417582000 0 1 AZOST} + {433303200 -3600 0 AZOT} + {449028000 0 1 AZOST} + {465357600 -3600 0 AZOT} + {481082400 0 1 AZOST} + {496807200 -3600 0 AZOT} + {512532000 0 1 AZOST} + {528256800 -3600 0 AZOT} + {543981600 0 1 AZOST} + {559706400 -3600 0 AZOT} + {575431200 0 1 AZOST} + {591156000 -3600 0 AZOT} + {606880800 0 1 AZOST} + {622605600 -3600 0 AZOT} + {638330400 0 1 AZOST} + {654660000 -3600 0 AZOT} + {670384800 0 1 AZOST} + {686109600 -3600 0 AZOT} + {701834400 0 1 AZOST} + {733280400 0 0 AZOST} + {749005200 -3600 0 AZOT} + {764730000 0 1 AZOST} + {780454800 -3600 0 AZOT} + {796179600 0 1 AZOST} + {811904400 -3600 0 AZOT} + {828234000 0 1 AZOST} + {846378000 -3600 0 AZOT} + {859683600 0 1 AZOST} + {877827600 -3600 0 AZOT} + {891133200 0 1 AZOST} + {909277200 -3600 0 AZOT} + {922582800 0 1 AZOST} + {941331600 -3600 0 AZOT} + {954032400 0 1 AZOST} + {972781200 -3600 0 AZOT} + {985482000 0 1 AZOST} + {1004230800 -3600 0 AZOT} + {1017536400 0 1 AZOST} + {1035680400 -3600 0 AZOT} + {1048986000 0 1 AZOST} + {1067130000 -3600 0 AZOT} + {1080435600 0 1 AZOST} + {1099184400 -3600 0 AZOT} + {1111885200 0 1 AZOST} + {1130634000 -3600 0 AZOT} + {1143334800 0 1 AZOST} + {1162083600 -3600 0 AZOT} + {1174784400 0 1 AZOST} + {1193533200 -3600 0 AZOT} + {1206838800 0 1 AZOST} + {1224982800 -3600 0 AZOT} + {1238288400 0 1 AZOST} + {1256432400 -3600 0 AZOT} + {1269738000 0 1 AZOST} + {1288486800 -3600 0 AZOT} + {1301187600 0 1 AZOST} + {1319936400 -3600 0 AZOT} + {1332637200 0 1 AZOST} + {1351386000 -3600 0 AZOT} + {1364691600 0 1 AZOST} + {1382835600 -3600 0 AZOT} + {1396141200 0 1 AZOST} + {1414285200 -3600 0 AZOT} + {1427590800 0 1 AZOST} + {1445734800 -3600 0 AZOT} + {1459040400 0 1 AZOST} + {1477789200 -3600 0 AZOT} + {1490490000 0 1 AZOST} + {1509238800 -3600 0 AZOT} + {1521939600 0 1 AZOST} + {1540688400 -3600 0 AZOT} + {1553994000 0 1 AZOST} + {1572138000 -3600 0 AZOT} + {1585443600 0 1 AZOST} + {1603587600 -3600 0 AZOT} + {1616893200 0 1 AZOST} + {1635642000 -3600 0 AZOT} + {1648342800 0 1 AZOST} + {1667091600 -3600 0 AZOT} + {1679792400 0 1 AZOST} + {1698541200 -3600 0 AZOT} + {1711846800 0 1 AZOST} + {1729990800 -3600 0 AZOT} + {1743296400 0 1 AZOST} + {1761440400 -3600 0 AZOT} + {1774746000 0 1 AZOST} + {1792890000 -3600 0 AZOT} + {1806195600 0 1 AZOST} + {1824944400 -3600 0 AZOT} + {1837645200 0 1 AZOST} + {1856394000 -3600 0 AZOT} + {1869094800 0 1 AZOST} + {1887843600 -3600 0 AZOT} + {1901149200 0 1 AZOST} + {1919293200 -3600 0 AZOT} + {1932598800 0 1 AZOST} + {1950742800 -3600 0 AZOT} + {1964048400 0 1 AZOST} + {1982797200 -3600 0 AZOT} + {1995498000 0 1 AZOST} + {2014246800 -3600 0 AZOT} + {2026947600 0 1 AZOST} + {2045696400 -3600 0 AZOT} + {2058397200 0 1 AZOST} + {2077146000 -3600 0 AZOT} + {2090451600 0 1 AZOST} + {2108595600 -3600 0 AZOT} + {2121901200 0 1 AZOST} + {2140045200 -3600 0 AZOT} + {2153350800 0 1 AZOST} + {2172099600 -3600 0 AZOT} + {2184800400 0 1 AZOST} + {2203549200 -3600 0 AZOT} + {2216250000 0 1 AZOST} + {2234998800 -3600 0 AZOT} + {2248304400 0 1 AZOST} + {2266448400 -3600 0 AZOT} + {2279754000 0 1 AZOST} + {2297898000 -3600 0 AZOT} + {2311203600 0 1 AZOST} + {2329347600 -3600 0 AZOT} + {2342653200 0 1 AZOST} + {2361402000 -3600 0 AZOT} + {2374102800 0 1 AZOST} + {2392851600 -3600 0 AZOT} + {2405552400 0 1 AZOST} + {2424301200 -3600 0 AZOT} + {2437606800 0 1 AZOST} + {2455750800 -3600 0 AZOT} + {2469056400 0 1 AZOST} + {2487200400 -3600 0 AZOT} + {2500506000 0 1 AZOST} + {2519254800 -3600 0 AZOT} + {2531955600 0 1 AZOST} + {2550704400 -3600 0 AZOT} + {2563405200 0 1 AZOST} + {2582154000 -3600 0 AZOT} + {2595459600 0 1 AZOST} + {2613603600 -3600 0 AZOT} + {2626909200 0 1 AZOST} + {2645053200 -3600 0 AZOT} + {2658358800 0 1 AZOST} + {2676502800 -3600 0 AZOT} + {2689808400 0 1 AZOST} + {2708557200 -3600 0 AZOT} + {2721258000 0 1 AZOST} + {2740006800 -3600 0 AZOT} + {2752707600 0 1 AZOST} + {2771456400 -3600 0 AZOT} + {2784762000 0 1 AZOST} + {2802906000 -3600 0 AZOT} + {2816211600 0 1 AZOST} + {2834355600 -3600 0 AZOT} + {2847661200 0 1 AZOST} + {2866410000 -3600 0 AZOT} + {2879110800 0 1 AZOST} + {2897859600 -3600 0 AZOT} + {2910560400 0 1 AZOST} + {2929309200 -3600 0 AZOT} + {2942010000 0 1 AZOST} + {2960758800 -3600 0 AZOT} + {2974064400 0 1 AZOST} + {2992208400 -3600 0 AZOT} + {3005514000 0 1 AZOST} + {3023658000 -3600 0 AZOT} + {3036963600 0 1 AZOST} + {3055712400 -3600 0 AZOT} + {3068413200 0 1 AZOST} + {3087162000 -3600 0 AZOT} + {3099862800 0 1 AZOST} + {3118611600 -3600 0 AZOT} + {3131917200 0 1 AZOST} + {3150061200 -3600 0 AZOT} + {3163366800 0 1 AZOST} + {3181510800 -3600 0 AZOT} + {3194816400 0 1 AZOST} + {3212960400 -3600 0 AZOT} + {3226266000 0 1 AZOST} + {3245014800 -3600 0 AZOT} + {3257715600 0 1 AZOST} + {3276464400 -3600 0 AZOT} + {3289165200 0 1 AZOST} + {3307914000 -3600 0 AZOT} + {3321219600 0 1 AZOST} + {3339363600 -3600 0 AZOT} + {3352669200 0 1 AZOST} + {3370813200 -3600 0 AZOT} + {3384118800 0 1 AZOST} + {3402867600 -3600 0 AZOT} + {3415568400 0 1 AZOST} + {3434317200 -3600 0 AZOT} + {3447018000 0 1 AZOST} + {3465766800 -3600 0 AZOT} + {3479072400 0 1 AZOST} + {3497216400 -3600 0 AZOT} + {3510522000 0 1 AZOST} + {3528666000 -3600 0 AZOT} + {3541971600 0 1 AZOST} + {3560115600 -3600 0 AZOT} + {3573421200 0 1 AZOST} + {3592170000 -3600 0 AZOT} + {3604870800 0 1 AZOST} + {3623619600 -3600 0 AZOT} + {3636320400 0 1 AZOST} + {3655069200 -3600 0 AZOT} + {3668374800 0 1 AZOST} + {3686518800 -3600 0 AZOT} + {3699824400 0 1 AZOST} + {3717968400 -3600 0 AZOT} + {3731274000 0 1 AZOST} + {3750022800 -3600 0 AZOT} + {3762723600 0 1 AZOST} + {3781472400 -3600 0 AZOT} + {3794173200 0 1 AZOST} + {3812922000 -3600 0 AZOT} + {3825622800 0 1 AZOST} + {3844371600 -3600 0 AZOT} + {3857677200 0 1 AZOST} + {3875821200 -3600 0 AZOT} + {3889126800 0 1 AZOST} + {3907270800 -3600 0 AZOT} + {3920576400 0 1 AZOST} + {3939325200 -3600 0 AZOT} + {3952026000 0 1 AZOST} + {3970774800 -3600 0 AZOT} + {3983475600 0 1 AZOST} + {4002224400 -3600 0 AZOT} + {4015530000 0 1 AZOST} + {4033674000 -3600 0 AZOT} + {4046979600 0 1 AZOST} + {4065123600 -3600 0 AZOT} + {4078429200 0 1 AZOST} + {4096573200 -3600 0 AZOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda b/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda new file mode 100644 index 0000000..2d4d983 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda @@ -0,0 +1,259 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Bermuda) { + {-9223372036854775808 -15558 0 LMT} + {-1262281242 -14400 0 AST} + {136360800 -10800 0 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {189316800 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Canary b/inkstitch/bin/tcl/tzdata/Atlantic/Canary new file mode 100644 index 0000000..4b802c7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Canary @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Canary) { + {-9223372036854775808 -3696 0 LMT} + {-1509663504 -3600 0 CANT} + {-733874400 0 0 WET} + {323827200 3600 1 WEST} + {338947200 3600 0 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde b/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde new file mode 100644 index 0000000..f0bb79f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Cape_Verde) { + {-9223372036854775808 -5644 0 LMT} + {-1988144756 -7200 0 CVT} + {-862610400 -3600 1 CVST} + {-764118000 -7200 0 CVT} + {186120000 -3600 0 CVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe b/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe new file mode 100644 index 0000000..4cafc34 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Atlantic/Faroe)]} { + LoadTimeZoneFile Atlantic/Faroe +} +set TZData(:Atlantic/Faeroe) $TZData(:Atlantic/Faroe) diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Faroe b/inkstitch/bin/tcl/tzdata/Atlantic/Faroe new file mode 100644 index 0000000..d2c314a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Faroe @@ -0,0 +1,245 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Faroe) { + {-9223372036854775808 -1624 0 LMT} + {-1955748776 0 0 WET} + {347155200 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen b/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen new file mode 100644 index 0000000..e592187 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Oslo)]} { + LoadTimeZoneFile Europe/Oslo +} +set TZData(:Atlantic/Jan_Mayen) $TZData(:Europe/Oslo) diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Madeira b/inkstitch/bin/tcl/tzdata/Atlantic/Madeira new file mode 100644 index 0000000..4960eeb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Madeira @@ -0,0 +1,350 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Madeira) { + {-9223372036854775808 -4056 0 LMT} + {-2713906344 -4056 0 FMT} + {-1849560744 -3600 0 MADT} + {-1689552000 0 1 MADST} + {-1677798000 -3600 0 MADT} + {-1667433600 0 1 MADST} + {-1647734400 -3600 0 MADT} + {-1635811200 0 1 MADST} + {-1616198400 -3600 0 MADT} + {-1604361600 0 1 MADST} + {-1584662400 -3600 0 MADT} + {-1572739200 0 1 MADST} + {-1553040000 -3600 0 MADT} + {-1541203200 0 1 MADST} + {-1521504000 -3600 0 MADT} + {-1442448000 0 1 MADST} + {-1426809600 -3600 0 MADT} + {-1379289600 0 1 MADST} + {-1364774400 -3600 0 MADT} + {-1348444800 0 1 MADST} + {-1333324800 -3600 0 MADT} + {-1316390400 0 1 MADST} + {-1301270400 -3600 0 MADT} + {-1284336000 0 1 MADST} + {-1269820800 -3600 0 MADT} + {-1221436800 0 1 MADST} + {-1206921600 -3600 0 MADT} + {-1191196800 0 1 MADST} + {-1175472000 -3600 0 MADT} + {-1127692800 0 1 MADST} + {-1111968000 -3600 0 MADT} + {-1096848000 0 1 MADST} + {-1080518400 -3600 0 MADT} + {-1063584000 0 1 MADST} + {-1049068800 -3600 0 MADT} + {-1033344000 0 1 MADST} + {-1017619200 -3600 0 MADT} + {-1002499200 0 1 MADST} + {-986169600 -3600 0 MADT} + {-969235200 0 1 MADST} + {-950486400 -3600 0 MADT} + {-942019200 0 1 MADST} + {-922665600 -3600 0 MADT} + {-906940800 0 1 MADST} + {-891129600 -3600 0 MADT} + {-877305600 0 1 MADST} + {-873680400 3600 1 MADMT} + {-864003600 0 1 MADST} + {-857952000 -3600 0 MADT} + {-845856000 0 1 MADST} + {-842835600 3600 1 MADMT} + {-831344400 0 1 MADST} + {-825897600 -3600 0 MADT} + {-814406400 0 1 MADST} + {-810781200 3600 1 MADMT} + {-799894800 0 1 MADST} + {-794448000 -3600 0 MADT} + {-782956800 0 1 MADST} + {-779331600 3600 1 MADMT} + {-768445200 0 1 MADST} + {-762998400 -3600 0 MADT} + {-749088000 0 1 MADST} + {-733363200 -3600 0 MADT} + {-717627600 0 1 MADST} + {-701902800 -3600 0 MADT} + {-686178000 0 1 MADST} + {-670453200 -3600 0 MADT} + {-654728400 0 1 MADST} + {-639003600 -3600 0 MADT} + {-591829200 0 1 MADST} + {-575499600 -3600 0 MADT} + {-559774800 0 1 MADST} + {-544050000 -3600 0 MADT} + {-528325200 0 1 MADST} + {-512600400 -3600 0 MADT} + {-496875600 0 1 MADST} + {-481150800 -3600 0 MADT} + {-465426000 0 1 MADST} + {-449701200 -3600 0 MADT} + {-433976400 0 1 MADST} + {-417646800 -3600 0 MADT} + {-401922000 0 1 MADST} + {-386197200 -3600 0 MADT} + {-370472400 0 1 MADST} + {-354747600 -3600 0 MADT} + {-339022800 0 1 MADST} + {-323298000 -3600 0 MADT} + {-307573200 0 1 MADST} + {-291848400 -3600 0 MADT} + {-276123600 0 1 MADST} + {-260398800 -3600 0 MADT} + {-244674000 0 1 MADST} + {-228344400 -3600 0 MADT} + {-212619600 0 1 MADST} + {-196894800 -3600 0 MADT} + {-181170000 0 1 MADST} + {-165445200 -3600 0 MADT} + {-149720400 0 1 MADST} + {-133995600 -3600 0 MADT} + {-118270800 0 0 WET} + {228268800 3600 1 WEST} + {243993600 0 0 WET} + {260323200 3600 1 WEST} + {276048000 0 0 WET} + {291772800 3600 1 WEST} + {307501200 0 0 WET} + {323222400 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417578400 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik b/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik new file mode 100644 index 0000000..f0248ad --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Reykjavik) { + {-9223372036854775808 -5244 0 LMT} + {-4197047556 -5268 0 RMT} + {-1956609132 -3600 0 IST} + {-1668211200 0 1 ISST} + {-1647212400 -3600 0 IST} + {-1636675200 0 1 ISST} + {-1613430000 -3600 0 IST} + {-968025600 0 1 ISST} + {-949615200 -3600 0 IST} + {-942008400 0 1 ISST} + {-920239200 -3600 0 IST} + {-909957600 0 1 ISST} + {-888789600 -3600 0 IST} + {-877903200 0 1 ISST} + {-857944800 -3600 0 IST} + {-846453600 0 1 ISST} + {-826495200 -3600 0 IST} + {-815004000 0 1 ISST} + {-795045600 -3600 0 IST} + {-783554400 0 1 ISST} + {-762991200 -3600 0 IST} + {-752104800 0 1 ISST} + {-731541600 -3600 0 IST} + {-717631200 0 1 ISST} + {-700092000 -3600 0 IST} + {-686181600 0 1 ISST} + {-668642400 -3600 0 IST} + {-654732000 0 1 ISST} + {-636588000 -3600 0 IST} + {-623282400 0 1 ISST} + {-605743200 -3600 0 IST} + {-591832800 0 1 ISST} + {-573688800 -3600 0 IST} + {-559778400 0 1 ISST} + {-542239200 -3600 0 IST} + {-528328800 0 1 ISST} + {-510789600 -3600 0 IST} + {-496879200 0 1 ISST} + {-479340000 -3600 0 IST} + {-465429600 0 1 ISST} + {-447890400 -3600 0 IST} + {-433980000 0 1 ISST} + {-415836000 -3600 0 IST} + {-401925600 0 1 ISST} + {-384386400 -3600 0 IST} + {-370476000 0 1 ISST} + {-352936800 -3600 0 IST} + {-339026400 0 1 ISST} + {-321487200 -3600 0 IST} + {-307576800 0 1 ISST} + {-290037600 -3600 0 IST} + {-276127200 0 1 ISST} + {-258588000 -3600 0 IST} + {-244677600 0 1 ISST} + {-226533600 -3600 0 IST} + {-212623200 0 1 ISST} + {-195084000 -3600 0 IST} + {-181173600 0 1 ISST} + {-163634400 -3600 0 IST} + {-149724000 0 1 ISST} + {-132184800 -3600 0 IST} + {-118274400 0 1 ISST} + {-100735200 -3600 0 IST} + {-86824800 0 1 ISST} + {-68680800 -3600 0 IST} + {-54770400 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia b/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia new file mode 100644 index 0000000..cbfc826 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/South_Georgia) { + {-9223372036854775808 -8768 0 LMT} + {-2524512832 -7200 0 GST} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena b/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena new file mode 100644 index 0000000..6d0c00d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/St_Helena) { + {-9223372036854775808 -1368 0 LMT} + {-2524520232 -1368 0 JMT} + {-599614632 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Atlantic/Stanley b/inkstitch/bin/tcl/tzdata/Atlantic/Stanley new file mode 100644 index 0000000..c287238 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Atlantic/Stanley @@ -0,0 +1,75 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Stanley) { + {-9223372036854775808 -13884 0 LMT} + {-2524507716 -13884 0 SMT} + {-1824235716 -14400 0 FKT} + {-1018209600 -10800 1 FKST} + {-1003093200 -14400 0 FKT} + {-986760000 -10800 1 FKST} + {-971643600 -14400 0 FKT} + {-954705600 -10800 1 FKST} + {-939589200 -14400 0 FKT} + {-923256000 -10800 1 FKST} + {-908139600 -14400 0 FKT} + {-891806400 -10800 1 FKST} + {-876690000 -14400 0 FKT} + {-860356800 -10800 1 FKST} + {420606000 -7200 0 FKT} + {433303200 -7200 1 FKST} + {452052000 -10800 0 FKT} + {464151600 -7200 1 FKST} + {483501600 -10800 0 FKT} + {495597600 -14400 0 FKT} + {495604800 -10800 1 FKST} + {514350000 -14400 0 FKT} + {527054400 -10800 1 FKST} + {545799600 -14400 0 FKT} + {558504000 -10800 1 FKST} + {577249200 -14400 0 FKT} + {589953600 -10800 1 FKST} + {608698800 -14400 0 FKT} + {621403200 -10800 1 FKST} + {640753200 -14400 0 FKT} + {652852800 -10800 1 FKST} + {672202800 -14400 0 FKT} + {684907200 -10800 1 FKST} + {703652400 -14400 0 FKT} + {716356800 -10800 1 FKST} + {735102000 -14400 0 FKT} + {747806400 -10800 1 FKST} + {766551600 -14400 0 FKT} + {779256000 -10800 1 FKST} + {798001200 -14400 0 FKT} + {810705600 -10800 1 FKST} + {830055600 -14400 0 FKT} + {842760000 -10800 1 FKST} + {861505200 -14400 0 FKT} + {874209600 -10800 1 FKST} + {892954800 -14400 0 FKT} + {905659200 -10800 1 FKST} + {924404400 -14400 0 FKT} + {937108800 -10800 1 FKST} + {955854000 -14400 0 FKT} + {968558400 -10800 1 FKST} + {987310800 -14400 0 FKT} + {999410400 -10800 1 FKST} + {1019365200 -14400 0 FKT} + {1030860000 -10800 1 FKST} + {1050814800 -14400 0 FKT} + {1062914400 -10800 1 FKST} + {1082264400 -14400 0 FKT} + {1094364000 -10800 1 FKST} + {1113714000 -14400 0 FKT} + {1125813600 -10800 1 FKST} + {1145163600 -14400 0 FKT} + {1157263200 -10800 1 FKST} + {1176613200 -14400 0 FKT} + {1188712800 -10800 1 FKST} + {1208667600 -14400 0 FKT} + {1220767200 -10800 1 FKST} + {1240117200 -14400 0 FKT} + {1252216800 -10800 1 FKST} + {1271566800 -14400 0 FKT} + {1283662800 -10800 0 FKST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/ACT b/inkstitch/bin/tcl/tzdata/Australia/ACT new file mode 100644 index 0000000..f7da281 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/ACT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/ACT) $TZData(:Australia/Sydney) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Adelaide b/inkstitch/bin/tcl/tzdata/Australia/Adelaide new file mode 100644 index 0000000..9abe192 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Adelaide @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Adelaide) { + {-9223372036854775808 33260 0 LMT} + {-2364110060 32400 0 CST} + {-2230189200 34200 0 CST} + {-1672565340 37800 1 CST} + {-1665390600 34200 0 CST} + {-883639800 37800 1 CST} + {-876126600 34200 0 CST} + {-860398200 37800 1 CST} + {-844677000 34200 0 CST} + {-828343800 37800 1 CST} + {-813227400 34200 0 CST} + {31501800 34200 0 CST} + {57688200 37800 1 CST} + {67969800 34200 0 CST} + {89137800 37800 1 CST} + {100024200 34200 0 CST} + {120587400 37800 1 CST} + {131473800 34200 0 CST} + {152037000 37800 1 CST} + {162923400 34200 0 CST} + {183486600 37800 1 CST} + {194977800 34200 0 CST} + {215541000 37800 1 CST} + {226427400 34200 0 CST} + {246990600 37800 1 CST} + {257877000 34200 0 CST} + {278440200 37800 1 CST} + {289326600 34200 0 CST} + {309889800 37800 1 CST} + {320776200 34200 0 CST} + {341339400 37800 1 CST} + {352225800 34200 0 CST} + {372789000 37800 1 CST} + {384280200 34200 0 CST} + {404843400 37800 1 CST} + {415729800 34200 0 CST} + {436293000 37800 1 CST} + {447179400 34200 0 CST} + {467742600 37800 1 CST} + {478629000 34200 0 CST} + {499192200 37800 1 CST} + {511288200 34200 0 CST} + {530037000 37800 1 CST} + {542737800 34200 0 CST} + {562091400 37800 1 CST} + {574792200 34200 0 CST} + {594145800 37800 1 CST} + {606241800 34200 0 CST} + {625595400 37800 1 CST} + {637691400 34200 0 CST} + {657045000 37800 1 CST} + {667931400 34200 0 CST} + {688494600 37800 1 CST} + {701195400 34200 0 CST} + {719944200 37800 1 CST} + {731435400 34200 0 CST} + {751998600 37800 1 CST} + {764094600 34200 0 CST} + {783448200 37800 1 CST} + {796149000 34200 0 CST} + {814897800 37800 1 CST} + {828203400 34200 0 CST} + {846347400 37800 1 CST} + {859653000 34200 0 CST} + {877797000 37800 1 CST} + {891102600 34200 0 CST} + {909246600 37800 1 CST} + {922552200 34200 0 CST} + {941301000 37800 1 CST} + {954001800 34200 0 CST} + {972750600 37800 1 CST} + {985451400 34200 0 CST} + {1004200200 37800 1 CST} + {1017505800 34200 0 CST} + {1035649800 37800 1 CST} + {1048955400 34200 0 CST} + {1067099400 37800 1 CST} + {1080405000 34200 0 CST} + {1099153800 37800 1 CST} + {1111854600 34200 0 CST} + {1130603400 37800 1 CST} + {1143909000 34200 0 CST} + {1162053000 37800 1 CST} + {1174753800 34200 0 CST} + {1193502600 37800 1 CST} + {1207413000 34200 0 CST} + {1223137800 37800 1 CST} + {1238862600 34200 0 CST} + {1254587400 37800 1 CST} + {1270312200 34200 0 CST} + {1286037000 37800 1 CST} + {1301761800 34200 0 CST} + {1317486600 37800 1 CST} + {1333211400 34200 0 CST} + {1349541000 37800 1 CST} + {1365265800 34200 0 CST} + {1380990600 37800 1 CST} + {1396715400 34200 0 CST} + {1412440200 37800 1 CST} + {1428165000 34200 0 CST} + {1443889800 37800 1 CST} + {1459614600 34200 0 CST} + {1475339400 37800 1 CST} + {1491064200 34200 0 CST} + {1506789000 37800 1 CST} + {1522513800 34200 0 CST} + {1538843400 37800 1 CST} + {1554568200 34200 0 CST} + {1570293000 37800 1 CST} + {1586017800 34200 0 CST} + {1601742600 37800 1 CST} + {1617467400 34200 0 CST} + {1633192200 37800 1 CST} + {1648917000 34200 0 CST} + {1664641800 37800 1 CST} + {1680366600 34200 0 CST} + {1696091400 37800 1 CST} + {1712421000 34200 0 CST} + {1728145800 37800 1 CST} + {1743870600 34200 0 CST} + {1759595400 37800 1 CST} + {1775320200 34200 0 CST} + {1791045000 37800 1 CST} + {1806769800 34200 0 CST} + {1822494600 37800 1 CST} + {1838219400 34200 0 CST} + {1853944200 37800 1 CST} + {1869669000 34200 0 CST} + {1885998600 37800 1 CST} + {1901723400 34200 0 CST} + {1917448200 37800 1 CST} + {1933173000 34200 0 CST} + {1948897800 37800 1 CST} + {1964622600 34200 0 CST} + {1980347400 37800 1 CST} + {1996072200 34200 0 CST} + {2011797000 37800 1 CST} + {2027521800 34200 0 CST} + {2043246600 37800 1 CST} + {2058971400 34200 0 CST} + {2075301000 37800 1 CST} + {2091025800 34200 0 CST} + {2106750600 37800 1 CST} + {2122475400 34200 0 CST} + {2138200200 37800 1 CST} + {2153925000 34200 0 CST} + {2169649800 37800 1 CST} + {2185374600 34200 0 CST} + {2201099400 37800 1 CST} + {2216824200 34200 0 CST} + {2233153800 37800 1 CST} + {2248878600 34200 0 CST} + {2264603400 37800 1 CST} + {2280328200 34200 0 CST} + {2296053000 37800 1 CST} + {2311777800 34200 0 CST} + {2327502600 37800 1 CST} + {2343227400 34200 0 CST} + {2358952200 37800 1 CST} + {2374677000 34200 0 CST} + {2390401800 37800 1 CST} + {2406126600 34200 0 CST} + {2422456200 37800 1 CST} + {2438181000 34200 0 CST} + {2453905800 37800 1 CST} + {2469630600 34200 0 CST} + {2485355400 37800 1 CST} + {2501080200 34200 0 CST} + {2516805000 37800 1 CST} + {2532529800 34200 0 CST} + {2548254600 37800 1 CST} + {2563979400 34200 0 CST} + {2579704200 37800 1 CST} + {2596033800 34200 0 CST} + {2611758600 37800 1 CST} + {2627483400 34200 0 CST} + {2643208200 37800 1 CST} + {2658933000 34200 0 CST} + {2674657800 37800 1 CST} + {2690382600 34200 0 CST} + {2706107400 37800 1 CST} + {2721832200 34200 0 CST} + {2737557000 37800 1 CST} + {2753281800 34200 0 CST} + {2769611400 37800 1 CST} + {2785336200 34200 0 CST} + {2801061000 37800 1 CST} + {2816785800 34200 0 CST} + {2832510600 37800 1 CST} + {2848235400 34200 0 CST} + {2863960200 37800 1 CST} + {2879685000 34200 0 CST} + {2895409800 37800 1 CST} + {2911134600 34200 0 CST} + {2926859400 37800 1 CST} + {2942584200 34200 0 CST} + {2958913800 37800 1 CST} + {2974638600 34200 0 CST} + {2990363400 37800 1 CST} + {3006088200 34200 0 CST} + {3021813000 37800 1 CST} + {3037537800 34200 0 CST} + {3053262600 37800 1 CST} + {3068987400 34200 0 CST} + {3084712200 37800 1 CST} + {3100437000 34200 0 CST} + {3116766600 37800 1 CST} + {3132491400 34200 0 CST} + {3148216200 37800 1 CST} + {3163941000 34200 0 CST} + {3179665800 37800 1 CST} + {3195390600 34200 0 CST} + {3211115400 37800 1 CST} + {3226840200 34200 0 CST} + {3242565000 37800 1 CST} + {3258289800 34200 0 CST} + {3274014600 37800 1 CST} + {3289739400 34200 0 CST} + {3306069000 37800 1 CST} + {3321793800 34200 0 CST} + {3337518600 37800 1 CST} + {3353243400 34200 0 CST} + {3368968200 37800 1 CST} + {3384693000 34200 0 CST} + {3400417800 37800 1 CST} + {3416142600 34200 0 CST} + {3431867400 37800 1 CST} + {3447592200 34200 0 CST} + {3463317000 37800 1 CST} + {3479646600 34200 0 CST} + {3495371400 37800 1 CST} + {3511096200 34200 0 CST} + {3526821000 37800 1 CST} + {3542545800 34200 0 CST} + {3558270600 37800 1 CST} + {3573995400 34200 0 CST} + {3589720200 37800 1 CST} + {3605445000 34200 0 CST} + {3621169800 37800 1 CST} + {3636894600 34200 0 CST} + {3653224200 37800 1 CST} + {3668949000 34200 0 CST} + {3684673800 37800 1 CST} + {3700398600 34200 0 CST} + {3716123400 37800 1 CST} + {3731848200 34200 0 CST} + {3747573000 37800 1 CST} + {3763297800 34200 0 CST} + {3779022600 37800 1 CST} + {3794747400 34200 0 CST} + {3810472200 37800 1 CST} + {3826197000 34200 0 CST} + {3842526600 37800 1 CST} + {3858251400 34200 0 CST} + {3873976200 37800 1 CST} + {3889701000 34200 0 CST} + {3905425800 37800 1 CST} + {3921150600 34200 0 CST} + {3936875400 37800 1 CST} + {3952600200 34200 0 CST} + {3968325000 37800 1 CST} + {3984049800 34200 0 CST} + {4000379400 37800 1 CST} + {4016104200 34200 0 CST} + {4031829000 37800 1 CST} + {4047553800 34200 0 CST} + {4063278600 37800 1 CST} + {4079003400 34200 0 CST} + {4094728200 37800 1 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Brisbane b/inkstitch/bin/tcl/tzdata/Australia/Brisbane new file mode 100644 index 0000000..fe6d154 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Brisbane @@ -0,0 +1,23 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Brisbane) { + {-9223372036854775808 36728 0 LMT} + {-2366791928 36000 0 EST} + {-1672567140 39600 1 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {31500000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {625593600 39600 1 EST} + {636480000 36000 0 EST} + {657043200 39600 1 EST} + {667929600 36000 0 EST} + {688492800 39600 1 EST} + {699379200 36000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill b/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill new file mode 100644 index 0000000..35cbb7e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill @@ -0,0 +1,275 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Broken_Hill) { + {-9223372036854775808 33948 0 LMT} + {-2364110748 36000 0 EST} + {-2314951200 32400 0 CST} + {-2230189200 34200 0 CST} + {-1672565340 37800 1 CST} + {-1665390600 34200 0 CST} + {-883639800 37800 1 CST} + {-876126600 34200 0 CST} + {-860398200 37800 1 CST} + {-844677000 34200 0 CST} + {-828343800 37800 1 CST} + {-813227400 34200 0 CST} + {31501800 34200 0 CST} + {57688200 37800 1 CST} + {67969800 34200 0 CST} + {89137800 37800 1 CST} + {100024200 34200 0 CST} + {120587400 37800 1 CST} + {131473800 34200 0 CST} + {152037000 37800 1 CST} + {162923400 34200 0 CST} + {183486600 37800 1 CST} + {194977800 34200 0 CST} + {215541000 37800 1 CST} + {226427400 34200 0 CST} + {246990600 37800 1 CST} + {257877000 34200 0 CST} + {278440200 37800 1 CST} + {289326600 34200 0 CST} + {309889800 37800 1 CST} + {320776200 34200 0 CST} + {341339400 37800 1 CST} + {352225800 34200 0 CST} + {372789000 37800 1 CST} + {386699400 34200 0 CST} + {404843400 37800 1 CST} + {415729800 34200 0 CST} + {436293000 37800 1 CST} + {447179400 34200 0 CST} + {467742600 37800 1 CST} + {478629000 34200 0 CST} + {499192200 37800 1 CST} + {511288200 34200 0 CST} + {530037000 37800 1 CST} + {542737800 34200 0 CST} + {562091400 37800 1 CST} + {574792200 34200 0 CST} + {594145800 37800 1 CST} + {606241800 34200 0 CST} + {625595400 37800 1 CST} + {636481800 34200 0 CST} + {657045000 37800 1 CST} + {667931400 34200 0 CST} + {688494600 37800 1 CST} + {699381000 34200 0 CST} + {719944200 37800 1 CST} + {731435400 34200 0 CST} + {751998600 37800 1 CST} + {762885000 34200 0 CST} + {783448200 37800 1 CST} + {794334600 34200 0 CST} + {814897800 37800 1 CST} + {828203400 34200 0 CST} + {846347400 37800 1 CST} + {859653000 34200 0 CST} + {877797000 37800 1 CST} + {891102600 34200 0 CST} + {909246600 37800 1 CST} + {922552200 34200 0 CST} + {941301000 37800 1 CST} + {946647000 37800 0 CST} + {954001800 34200 0 CST} + {972750600 37800 1 CST} + {985451400 34200 0 CST} + {1004200200 37800 1 CST} + {1017505800 34200 0 CST} + {1035649800 37800 1 CST} + {1048955400 34200 0 CST} + {1067099400 37800 1 CST} + {1080405000 34200 0 CST} + {1099153800 37800 1 CST} + {1111854600 34200 0 CST} + {1130603400 37800 1 CST} + {1143909000 34200 0 CST} + {1162053000 37800 1 CST} + {1174753800 34200 0 CST} + {1193502600 37800 1 CST} + {1207413000 34200 0 CST} + {1223137800 37800 1 CST} + {1238862600 34200 0 CST} + {1254587400 37800 1 CST} + {1270312200 34200 0 CST} + {1286037000 37800 1 CST} + {1301761800 34200 0 CST} + {1317486600 37800 1 CST} + {1333211400 34200 0 CST} + {1349541000 37800 1 CST} + {1365265800 34200 0 CST} + {1380990600 37800 1 CST} + {1396715400 34200 0 CST} + {1412440200 37800 1 CST} + {1428165000 34200 0 CST} + {1443889800 37800 1 CST} + {1459614600 34200 0 CST} + {1475339400 37800 1 CST} + {1491064200 34200 0 CST} + {1506789000 37800 1 CST} + {1522513800 34200 0 CST} + {1538843400 37800 1 CST} + {1554568200 34200 0 CST} + {1570293000 37800 1 CST} + {1586017800 34200 0 CST} + {1601742600 37800 1 CST} + {1617467400 34200 0 CST} + {1633192200 37800 1 CST} + {1648917000 34200 0 CST} + {1664641800 37800 1 CST} + {1680366600 34200 0 CST} + {1696091400 37800 1 CST} + {1712421000 34200 0 CST} + {1728145800 37800 1 CST} + {1743870600 34200 0 CST} + {1759595400 37800 1 CST} + {1775320200 34200 0 CST} + {1791045000 37800 1 CST} + {1806769800 34200 0 CST} + {1822494600 37800 1 CST} + {1838219400 34200 0 CST} + {1853944200 37800 1 CST} + {1869669000 34200 0 CST} + {1885998600 37800 1 CST} + {1901723400 34200 0 CST} + {1917448200 37800 1 CST} + {1933173000 34200 0 CST} + {1948897800 37800 1 CST} + {1964622600 34200 0 CST} + {1980347400 37800 1 CST} + {1996072200 34200 0 CST} + {2011797000 37800 1 CST} + {2027521800 34200 0 CST} + {2043246600 37800 1 CST} + {2058971400 34200 0 CST} + {2075301000 37800 1 CST} + {2091025800 34200 0 CST} + {2106750600 37800 1 CST} + {2122475400 34200 0 CST} + {2138200200 37800 1 CST} + {2153925000 34200 0 CST} + {2169649800 37800 1 CST} + {2185374600 34200 0 CST} + {2201099400 37800 1 CST} + {2216824200 34200 0 CST} + {2233153800 37800 1 CST} + {2248878600 34200 0 CST} + {2264603400 37800 1 CST} + {2280328200 34200 0 CST} + {2296053000 37800 1 CST} + {2311777800 34200 0 CST} + {2327502600 37800 1 CST} + {2343227400 34200 0 CST} + {2358952200 37800 1 CST} + {2374677000 34200 0 CST} + {2390401800 37800 1 CST} + {2406126600 34200 0 CST} + {2422456200 37800 1 CST} + {2438181000 34200 0 CST} + {2453905800 37800 1 CST} + {2469630600 34200 0 CST} + {2485355400 37800 1 CST} + {2501080200 34200 0 CST} + {2516805000 37800 1 CST} + {2532529800 34200 0 CST} + {2548254600 37800 1 CST} + {2563979400 34200 0 CST} + {2579704200 37800 1 CST} + {2596033800 34200 0 CST} + {2611758600 37800 1 CST} + {2627483400 34200 0 CST} + {2643208200 37800 1 CST} + {2658933000 34200 0 CST} + {2674657800 37800 1 CST} + {2690382600 34200 0 CST} + {2706107400 37800 1 CST} + {2721832200 34200 0 CST} + {2737557000 37800 1 CST} + {2753281800 34200 0 CST} + {2769611400 37800 1 CST} + {2785336200 34200 0 CST} + {2801061000 37800 1 CST} + {2816785800 34200 0 CST} + {2832510600 37800 1 CST} + {2848235400 34200 0 CST} + {2863960200 37800 1 CST} + {2879685000 34200 0 CST} + {2895409800 37800 1 CST} + {2911134600 34200 0 CST} + {2926859400 37800 1 CST} + {2942584200 34200 0 CST} + {2958913800 37800 1 CST} + {2974638600 34200 0 CST} + {2990363400 37800 1 CST} + {3006088200 34200 0 CST} + {3021813000 37800 1 CST} + {3037537800 34200 0 CST} + {3053262600 37800 1 CST} + {3068987400 34200 0 CST} + {3084712200 37800 1 CST} + {3100437000 34200 0 CST} + {3116766600 37800 1 CST} + {3132491400 34200 0 CST} + {3148216200 37800 1 CST} + {3163941000 34200 0 CST} + {3179665800 37800 1 CST} + {3195390600 34200 0 CST} + {3211115400 37800 1 CST} + {3226840200 34200 0 CST} + {3242565000 37800 1 CST} + {3258289800 34200 0 CST} + {3274014600 37800 1 CST} + {3289739400 34200 0 CST} + {3306069000 37800 1 CST} + {3321793800 34200 0 CST} + {3337518600 37800 1 CST} + {3353243400 34200 0 CST} + {3368968200 37800 1 CST} + {3384693000 34200 0 CST} + {3400417800 37800 1 CST} + {3416142600 34200 0 CST} + {3431867400 37800 1 CST} + {3447592200 34200 0 CST} + {3463317000 37800 1 CST} + {3479646600 34200 0 CST} + {3495371400 37800 1 CST} + {3511096200 34200 0 CST} + {3526821000 37800 1 CST} + {3542545800 34200 0 CST} + {3558270600 37800 1 CST} + {3573995400 34200 0 CST} + {3589720200 37800 1 CST} + {3605445000 34200 0 CST} + {3621169800 37800 1 CST} + {3636894600 34200 0 CST} + {3653224200 37800 1 CST} + {3668949000 34200 0 CST} + {3684673800 37800 1 CST} + {3700398600 34200 0 CST} + {3716123400 37800 1 CST} + {3731848200 34200 0 CST} + {3747573000 37800 1 CST} + {3763297800 34200 0 CST} + {3779022600 37800 1 CST} + {3794747400 34200 0 CST} + {3810472200 37800 1 CST} + {3826197000 34200 0 CST} + {3842526600 37800 1 CST} + {3858251400 34200 0 CST} + {3873976200 37800 1 CST} + {3889701000 34200 0 CST} + {3905425800 37800 1 CST} + {3921150600 34200 0 CST} + {3936875400 37800 1 CST} + {3952600200 34200 0 CST} + {3968325000 37800 1 CST} + {3984049800 34200 0 CST} + {4000379400 37800 1 CST} + {4016104200 34200 0 CST} + {4031829000 37800 1 CST} + {4047553800 34200 0 CST} + {4063278600 37800 1 CST} + {4079003400 34200 0 CST} + {4094728200 37800 1 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Canberra b/inkstitch/bin/tcl/tzdata/Australia/Canberra new file mode 100644 index 0000000..0b7b9ca --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Canberra @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/Canberra) $TZData(:Australia/Sydney) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Currie b/inkstitch/bin/tcl/tzdata/Australia/Currie new file mode 100644 index 0000000..ae6d1f0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Currie @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Currie) { + {-9223372036854775808 34528 0 LMT} + {-2345794528 36000 0 EST} + {-1680508800 39600 1 EST} + {-1669892400 39600 0 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {47138400 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {89136000 39600 1 EST} + {100022400 36000 0 EST} + {120585600 39600 1 EST} + {131472000 36000 0 EST} + {152035200 39600 1 EST} + {162921600 36000 0 EST} + {183484800 39600 1 EST} + {194976000 36000 0 EST} + {215539200 39600 1 EST} + {226425600 36000 0 EST} + {246988800 39600 1 EST} + {257875200 36000 0 EST} + {278438400 39600 1 EST} + {289324800 36000 0 EST} + {309888000 39600 1 EST} + {320774400 36000 0 EST} + {341337600 39600 1 EST} + {352224000 36000 0 EST} + {372787200 39600 1 EST} + {386092800 36000 0 EST} + {404841600 39600 1 EST} + {417542400 36000 0 EST} + {436291200 39600 1 EST} + {447177600 36000 0 EST} + {467740800 39600 1 EST} + {478627200 36000 0 EST} + {499190400 39600 1 EST} + {510076800 36000 0 EST} + {530035200 39600 1 EST} + {542736000 36000 0 EST} + {562089600 39600 1 EST} + {574790400 36000 0 EST} + {594144000 39600 1 EST} + {606240000 36000 0 EST} + {625593600 39600 1 EST} + {637689600 36000 0 EST} + {657043200 39600 1 EST} + {670348800 36000 0 EST} + {686678400 39600 1 EST} + {701798400 36000 0 EST} + {718128000 39600 1 EST} + {733248000 36000 0 EST} + {749577600 39600 1 EST} + {764697600 36000 0 EST} + {781027200 39600 1 EST} + {796147200 36000 0 EST} + {812476800 39600 1 EST} + {828201600 36000 0 EST} + {844531200 39600 1 EST} + {859651200 36000 0 EST} + {875980800 39600 1 EST} + {891100800 36000 0 EST} + {907430400 39600 1 EST} + {922550400 36000 0 EST} + {938880000 39600 1 EST} + {954000000 36000 0 EST} + {967305600 39600 1 EST} + {985449600 36000 0 EST} + {1002384000 39600 1 EST} + {1017504000 36000 0 EST} + {1033833600 39600 1 EST} + {1048953600 36000 0 EST} + {1065283200 39600 1 EST} + {1080403200 36000 0 EST} + {1096732800 39600 1 EST} + {1111852800 36000 0 EST} + {1128182400 39600 1 EST} + {1143907200 36000 0 EST} + {1159632000 39600 1 EST} + {1174752000 36000 0 EST} + {1191686400 39600 1 EST} + {1207411200 36000 0 EST} + {1223136000 39600 1 EST} + {1238860800 36000 0 EST} + {1254585600 39600 1 EST} + {1270310400 36000 0 EST} + {1286035200 39600 1 EST} + {1301760000 36000 0 EST} + {1317484800 39600 1 EST} + {1333209600 36000 0 EST} + {1349539200 39600 1 EST} + {1365264000 36000 0 EST} + {1380988800 39600 1 EST} + {1396713600 36000 0 EST} + {1412438400 39600 1 EST} + {1428163200 36000 0 EST} + {1443888000 39600 1 EST} + {1459612800 36000 0 EST} + {1475337600 39600 1 EST} + {1491062400 36000 0 EST} + {1506787200 39600 1 EST} + {1522512000 36000 0 EST} + {1538841600 39600 1 EST} + {1554566400 36000 0 EST} + {1570291200 39600 1 EST} + {1586016000 36000 0 EST} + {1601740800 39600 1 EST} + {1617465600 36000 0 EST} + {1633190400 39600 1 EST} + {1648915200 36000 0 EST} + {1664640000 39600 1 EST} + {1680364800 36000 0 EST} + {1696089600 39600 1 EST} + {1712419200 36000 0 EST} + {1728144000 39600 1 EST} + {1743868800 36000 0 EST} + {1759593600 39600 1 EST} + {1775318400 36000 0 EST} + {1791043200 39600 1 EST} + {1806768000 36000 0 EST} + {1822492800 39600 1 EST} + {1838217600 36000 0 EST} + {1853942400 39600 1 EST} + {1869667200 36000 0 EST} + {1885996800 39600 1 EST} + {1901721600 36000 0 EST} + {1917446400 39600 1 EST} + {1933171200 36000 0 EST} + {1948896000 39600 1 EST} + {1964620800 36000 0 EST} + {1980345600 39600 1 EST} + {1996070400 36000 0 EST} + {2011795200 39600 1 EST} + {2027520000 36000 0 EST} + {2043244800 39600 1 EST} + {2058969600 36000 0 EST} + {2075299200 39600 1 EST} + {2091024000 36000 0 EST} + {2106748800 39600 1 EST} + {2122473600 36000 0 EST} + {2138198400 39600 1 EST} + {2153923200 36000 0 EST} + {2169648000 39600 1 EST} + {2185372800 36000 0 EST} + {2201097600 39600 1 EST} + {2216822400 36000 0 EST} + {2233152000 39600 1 EST} + {2248876800 36000 0 EST} + {2264601600 39600 1 EST} + {2280326400 36000 0 EST} + {2296051200 39600 1 EST} + {2311776000 36000 0 EST} + {2327500800 39600 1 EST} + {2343225600 36000 0 EST} + {2358950400 39600 1 EST} + {2374675200 36000 0 EST} + {2390400000 39600 1 EST} + {2406124800 36000 0 EST} + {2422454400 39600 1 EST} + {2438179200 36000 0 EST} + {2453904000 39600 1 EST} + {2469628800 36000 0 EST} + {2485353600 39600 1 EST} + {2501078400 36000 0 EST} + {2516803200 39600 1 EST} + {2532528000 36000 0 EST} + {2548252800 39600 1 EST} + {2563977600 36000 0 EST} + {2579702400 39600 1 EST} + {2596032000 36000 0 EST} + {2611756800 39600 1 EST} + {2627481600 36000 0 EST} + {2643206400 39600 1 EST} + {2658931200 36000 0 EST} + {2674656000 39600 1 EST} + {2690380800 36000 0 EST} + {2706105600 39600 1 EST} + {2721830400 36000 0 EST} + {2737555200 39600 1 EST} + {2753280000 36000 0 EST} + {2769609600 39600 1 EST} + {2785334400 36000 0 EST} + {2801059200 39600 1 EST} + {2816784000 36000 0 EST} + {2832508800 39600 1 EST} + {2848233600 36000 0 EST} + {2863958400 39600 1 EST} + {2879683200 36000 0 EST} + {2895408000 39600 1 EST} + {2911132800 36000 0 EST} + {2926857600 39600 1 EST} + {2942582400 36000 0 EST} + {2958912000 39600 1 EST} + {2974636800 36000 0 EST} + {2990361600 39600 1 EST} + {3006086400 36000 0 EST} + {3021811200 39600 1 EST} + {3037536000 36000 0 EST} + {3053260800 39600 1 EST} + {3068985600 36000 0 EST} + {3084710400 39600 1 EST} + {3100435200 36000 0 EST} + {3116764800 39600 1 EST} + {3132489600 36000 0 EST} + {3148214400 39600 1 EST} + {3163939200 36000 0 EST} + {3179664000 39600 1 EST} + {3195388800 36000 0 EST} + {3211113600 39600 1 EST} + {3226838400 36000 0 EST} + {3242563200 39600 1 EST} + {3258288000 36000 0 EST} + {3274012800 39600 1 EST} + {3289737600 36000 0 EST} + {3306067200 39600 1 EST} + {3321792000 36000 0 EST} + {3337516800 39600 1 EST} + {3353241600 36000 0 EST} + {3368966400 39600 1 EST} + {3384691200 36000 0 EST} + {3400416000 39600 1 EST} + {3416140800 36000 0 EST} + {3431865600 39600 1 EST} + {3447590400 36000 0 EST} + {3463315200 39600 1 EST} + {3479644800 36000 0 EST} + {3495369600 39600 1 EST} + {3511094400 36000 0 EST} + {3526819200 39600 1 EST} + {3542544000 36000 0 EST} + {3558268800 39600 1 EST} + {3573993600 36000 0 EST} + {3589718400 39600 1 EST} + {3605443200 36000 0 EST} + {3621168000 39600 1 EST} + {3636892800 36000 0 EST} + {3653222400 39600 1 EST} + {3668947200 36000 0 EST} + {3684672000 39600 1 EST} + {3700396800 36000 0 EST} + {3716121600 39600 1 EST} + {3731846400 36000 0 EST} + {3747571200 39600 1 EST} + {3763296000 36000 0 EST} + {3779020800 39600 1 EST} + {3794745600 36000 0 EST} + {3810470400 39600 1 EST} + {3826195200 36000 0 EST} + {3842524800 39600 1 EST} + {3858249600 36000 0 EST} + {3873974400 39600 1 EST} + {3889699200 36000 0 EST} + {3905424000 39600 1 EST} + {3921148800 36000 0 EST} + {3936873600 39600 1 EST} + {3952598400 36000 0 EST} + {3968323200 39600 1 EST} + {3984048000 36000 0 EST} + {4000377600 39600 1 EST} + {4016102400 36000 0 EST} + {4031827200 39600 1 EST} + {4047552000 36000 0 EST} + {4063276800 39600 1 EST} + {4079001600 36000 0 EST} + {4094726400 39600 1 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Darwin b/inkstitch/bin/tcl/tzdata/Australia/Darwin new file mode 100644 index 0000000..9be372d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Darwin @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Darwin) { + {-9223372036854775808 31400 0 LMT} + {-2364108200 32400 0 CST} + {-2230189200 34200 0 CST} + {-1672565340 37800 1 CST} + {-1665390600 34200 0 CST} + {-883639800 37800 1 CST} + {-876126600 34200 0 CST} + {-860398200 37800 1 CST} + {-844677000 34200 0 CST} + {-828343800 37800 1 CST} + {-813227400 34200 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Eucla b/inkstitch/bin/tcl/tzdata/Australia/Eucla new file mode 100644 index 0000000..0f8ed4d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Eucla @@ -0,0 +1,25 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Eucla) { + {-9223372036854775808 30928 0 LMT} + {-2337928528 31500 0 CWST} + {-1672562640 35100 1 CWST} + {-1665387900 31500 0 CWST} + {-883637100 35100 1 CWST} + {-876123900 31500 0 CWST} + {-860395500 35100 1 CWST} + {-844674300 31500 0 CWST} + {-836473500 35100 0 CWST} + {152039700 35100 1 CWST} + {162926100 31500 0 CWST} + {436295700 35100 1 CWST} + {447182100 31500 0 CWST} + {690311700 35100 1 CWST} + {699383700 31500 0 CWST} + {1165079700 35100 1 CWST} + {1174756500 31500 0 CWST} + {1193505300 35100 1 CWST} + {1206810900 31500 0 CWST} + {1224954900 35100 1 CWST} + {1238260500 31500 0 CWST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Hobart b/inkstitch/bin/tcl/tzdata/Australia/Hobart new file mode 100644 index 0000000..8f27110 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Hobart @@ -0,0 +1,281 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Hobart) { + {-9223372036854775808 35356 0 LMT} + {-2345795356 36000 0 EST} + {-1680508800 39600 1 EST} + {-1669892400 39600 0 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {-94730400 36000 0 EST} + {-71136000 39600 1 EST} + {-55411200 36000 0 EST} + {-37267200 39600 1 EST} + {-25776000 36000 0 EST} + {-5817600 39600 1 EST} + {5673600 36000 0 EST} + {25632000 39600 1 EST} + {37728000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {89136000 39600 1 EST} + {100022400 36000 0 EST} + {120585600 39600 1 EST} + {131472000 36000 0 EST} + {152035200 39600 1 EST} + {162921600 36000 0 EST} + {183484800 39600 1 EST} + {194976000 36000 0 EST} + {215539200 39600 1 EST} + {226425600 36000 0 EST} + {246988800 39600 1 EST} + {257875200 36000 0 EST} + {278438400 39600 1 EST} + {289324800 36000 0 EST} + {309888000 39600 1 EST} + {320774400 36000 0 EST} + {341337600 39600 1 EST} + {352224000 36000 0 EST} + {372787200 39600 1 EST} + {386092800 36000 0 EST} + {404841600 39600 1 EST} + {417542400 36000 0 EST} + {436291200 39600 1 EST} + {447177600 36000 0 EST} + {467740800 39600 1 EST} + {478627200 36000 0 EST} + {499190400 39600 1 EST} + {510076800 36000 0 EST} + {530035200 39600 1 EST} + {542736000 36000 0 EST} + {562089600 39600 1 EST} + {574790400 36000 0 EST} + {594144000 39600 1 EST} + {606240000 36000 0 EST} + {625593600 39600 1 EST} + {637689600 36000 0 EST} + {657043200 39600 1 EST} + {670348800 36000 0 EST} + {686678400 39600 1 EST} + {701798400 36000 0 EST} + {718128000 39600 1 EST} + {733248000 36000 0 EST} + {749577600 39600 1 EST} + {764697600 36000 0 EST} + {781027200 39600 1 EST} + {796147200 36000 0 EST} + {812476800 39600 1 EST} + {828201600 36000 0 EST} + {844531200 39600 1 EST} + {859651200 36000 0 EST} + {875980800 39600 1 EST} + {891100800 36000 0 EST} + {907430400 39600 1 EST} + {922550400 36000 0 EST} + {938880000 39600 1 EST} + {954000000 36000 0 EST} + {967305600 39600 1 EST} + {985449600 36000 0 EST} + {1002384000 39600 1 EST} + {1017504000 36000 0 EST} + {1033833600 39600 1 EST} + {1048953600 36000 0 EST} + {1065283200 39600 1 EST} + {1080403200 36000 0 EST} + {1096732800 39600 1 EST} + {1111852800 36000 0 EST} + {1128182400 39600 1 EST} + {1143907200 36000 0 EST} + {1159632000 39600 1 EST} + {1174752000 36000 0 EST} + {1191686400 39600 1 EST} + {1207411200 36000 0 EST} + {1223136000 39600 1 EST} + {1238860800 36000 0 EST} + {1254585600 39600 1 EST} + {1270310400 36000 0 EST} + {1286035200 39600 1 EST} + {1301760000 36000 0 EST} + {1317484800 39600 1 EST} + {1333209600 36000 0 EST} + {1349539200 39600 1 EST} + {1365264000 36000 0 EST} + {1380988800 39600 1 EST} + {1396713600 36000 0 EST} + {1412438400 39600 1 EST} + {1428163200 36000 0 EST} + {1443888000 39600 1 EST} + {1459612800 36000 0 EST} + {1475337600 39600 1 EST} + {1491062400 36000 0 EST} + {1506787200 39600 1 EST} + {1522512000 36000 0 EST} + {1538841600 39600 1 EST} + {1554566400 36000 0 EST} + {1570291200 39600 1 EST} + {1586016000 36000 0 EST} + {1601740800 39600 1 EST} + {1617465600 36000 0 EST} + {1633190400 39600 1 EST} + {1648915200 36000 0 EST} + {1664640000 39600 1 EST} + {1680364800 36000 0 EST} + {1696089600 39600 1 EST} + {1712419200 36000 0 EST} + {1728144000 39600 1 EST} + {1743868800 36000 0 EST} + {1759593600 39600 1 EST} + {1775318400 36000 0 EST} + {1791043200 39600 1 EST} + {1806768000 36000 0 EST} + {1822492800 39600 1 EST} + {1838217600 36000 0 EST} + {1853942400 39600 1 EST} + {1869667200 36000 0 EST} + {1885996800 39600 1 EST} + {1901721600 36000 0 EST} + {1917446400 39600 1 EST} + {1933171200 36000 0 EST} + {1948896000 39600 1 EST} + {1964620800 36000 0 EST} + {1980345600 39600 1 EST} + {1996070400 36000 0 EST} + {2011795200 39600 1 EST} + {2027520000 36000 0 EST} + {2043244800 39600 1 EST} + {2058969600 36000 0 EST} + {2075299200 39600 1 EST} + {2091024000 36000 0 EST} + {2106748800 39600 1 EST} + {2122473600 36000 0 EST} + {2138198400 39600 1 EST} + {2153923200 36000 0 EST} + {2169648000 39600 1 EST} + {2185372800 36000 0 EST} + {2201097600 39600 1 EST} + {2216822400 36000 0 EST} + {2233152000 39600 1 EST} + {2248876800 36000 0 EST} + {2264601600 39600 1 EST} + {2280326400 36000 0 EST} + {2296051200 39600 1 EST} + {2311776000 36000 0 EST} + {2327500800 39600 1 EST} + {2343225600 36000 0 EST} + {2358950400 39600 1 EST} + {2374675200 36000 0 EST} + {2390400000 39600 1 EST} + {2406124800 36000 0 EST} + {2422454400 39600 1 EST} + {2438179200 36000 0 EST} + {2453904000 39600 1 EST} + {2469628800 36000 0 EST} + {2485353600 39600 1 EST} + {2501078400 36000 0 EST} + {2516803200 39600 1 EST} + {2532528000 36000 0 EST} + {2548252800 39600 1 EST} + {2563977600 36000 0 EST} + {2579702400 39600 1 EST} + {2596032000 36000 0 EST} + {2611756800 39600 1 EST} + {2627481600 36000 0 EST} + {2643206400 39600 1 EST} + {2658931200 36000 0 EST} + {2674656000 39600 1 EST} + {2690380800 36000 0 EST} + {2706105600 39600 1 EST} + {2721830400 36000 0 EST} + {2737555200 39600 1 EST} + {2753280000 36000 0 EST} + {2769609600 39600 1 EST} + {2785334400 36000 0 EST} + {2801059200 39600 1 EST} + {2816784000 36000 0 EST} + {2832508800 39600 1 EST} + {2848233600 36000 0 EST} + {2863958400 39600 1 EST} + {2879683200 36000 0 EST} + {2895408000 39600 1 EST} + {2911132800 36000 0 EST} + {2926857600 39600 1 EST} + {2942582400 36000 0 EST} + {2958912000 39600 1 EST} + {2974636800 36000 0 EST} + {2990361600 39600 1 EST} + {3006086400 36000 0 EST} + {3021811200 39600 1 EST} + {3037536000 36000 0 EST} + {3053260800 39600 1 EST} + {3068985600 36000 0 EST} + {3084710400 39600 1 EST} + {3100435200 36000 0 EST} + {3116764800 39600 1 EST} + {3132489600 36000 0 EST} + {3148214400 39600 1 EST} + {3163939200 36000 0 EST} + {3179664000 39600 1 EST} + {3195388800 36000 0 EST} + {3211113600 39600 1 EST} + {3226838400 36000 0 EST} + {3242563200 39600 1 EST} + {3258288000 36000 0 EST} + {3274012800 39600 1 EST} + {3289737600 36000 0 EST} + {3306067200 39600 1 EST} + {3321792000 36000 0 EST} + {3337516800 39600 1 EST} + {3353241600 36000 0 EST} + {3368966400 39600 1 EST} + {3384691200 36000 0 EST} + {3400416000 39600 1 EST} + {3416140800 36000 0 EST} + {3431865600 39600 1 EST} + {3447590400 36000 0 EST} + {3463315200 39600 1 EST} + {3479644800 36000 0 EST} + {3495369600 39600 1 EST} + {3511094400 36000 0 EST} + {3526819200 39600 1 EST} + {3542544000 36000 0 EST} + {3558268800 39600 1 EST} + {3573993600 36000 0 EST} + {3589718400 39600 1 EST} + {3605443200 36000 0 EST} + {3621168000 39600 1 EST} + {3636892800 36000 0 EST} + {3653222400 39600 1 EST} + {3668947200 36000 0 EST} + {3684672000 39600 1 EST} + {3700396800 36000 0 EST} + {3716121600 39600 1 EST} + {3731846400 36000 0 EST} + {3747571200 39600 1 EST} + {3763296000 36000 0 EST} + {3779020800 39600 1 EST} + {3794745600 36000 0 EST} + {3810470400 39600 1 EST} + {3826195200 36000 0 EST} + {3842524800 39600 1 EST} + {3858249600 36000 0 EST} + {3873974400 39600 1 EST} + {3889699200 36000 0 EST} + {3905424000 39600 1 EST} + {3921148800 36000 0 EST} + {3936873600 39600 1 EST} + {3952598400 36000 0 EST} + {3968323200 39600 1 EST} + {3984048000 36000 0 EST} + {4000377600 39600 1 EST} + {4016102400 36000 0 EST} + {4031827200 39600 1 EST} + {4047552000 36000 0 EST} + {4063276800 39600 1 EST} + {4079001600 36000 0 EST} + {4094726400 39600 1 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/LHI b/inkstitch/bin/tcl/tzdata/Australia/LHI new file mode 100644 index 0000000..ddc79ce --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/LHI @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Lord_Howe)]} { + LoadTimeZoneFile Australia/Lord_Howe +} +set TZData(:Australia/LHI) $TZData(:Australia/Lord_Howe) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Lindeman b/inkstitch/bin/tcl/tzdata/Australia/Lindeman new file mode 100644 index 0000000..de11c35 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Lindeman @@ -0,0 +1,28 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Lindeman) { + {-9223372036854775808 35756 0 LMT} + {-2366790956 36000 0 EST} + {-1672567140 39600 1 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {31500000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {625593600 39600 1 EST} + {636480000 36000 0 EST} + {657043200 39600 1 EST} + {667929600 36000 0 EST} + {688492800 39600 1 EST} + {699379200 36000 0 EST} + {709912800 36000 0 EST} + {719942400 39600 1 EST} + {731433600 36000 0 EST} + {751996800 39600 1 EST} + {762883200 36000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe b/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe new file mode 100644 index 0000000..da094e5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe @@ -0,0 +1,244 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Lord_Howe) { + {-9223372036854775808 38180 0 LMT} + {-2364114980 36000 0 EST} + {352216800 37800 0 LHST} + {372785400 41400 1 LHST} + {384273000 37800 0 LHST} + {404839800 41400 1 LHST} + {415722600 37800 0 LHST} + {436289400 41400 1 LHST} + {447172200 37800 0 LHST} + {467739000 41400 1 LHST} + {478621800 37800 0 LHST} + {499188600 39600 1 LHST} + {511282800 37800 0 LHST} + {530033400 39600 1 LHST} + {542732400 37800 0 LHST} + {562087800 39600 1 LHST} + {574786800 37800 0 LHST} + {594142200 39600 1 LHST} + {606236400 37800 0 LHST} + {625591800 39600 1 LHST} + {636476400 37800 0 LHST} + {657041400 39600 1 LHST} + {667926000 37800 0 LHST} + {688491000 39600 1 LHST} + {699375600 37800 0 LHST} + {719940600 39600 1 LHST} + {731430000 37800 0 LHST} + {751995000 39600 1 LHST} + {762879600 37800 0 LHST} + {783444600 39600 1 LHST} + {794329200 37800 0 LHST} + {814894200 39600 1 LHST} + {828198000 37800 0 LHST} + {846343800 39600 1 LHST} + {859647600 37800 0 LHST} + {877793400 39600 1 LHST} + {891097200 37800 0 LHST} + {909243000 39600 1 LHST} + {922546800 37800 0 LHST} + {941297400 39600 1 LHST} + {953996400 37800 0 LHST} + {967303800 39600 1 LHST} + {985446000 37800 0 LHST} + {1004196600 39600 1 LHST} + {1017500400 37800 0 LHST} + {1035646200 39600 1 LHST} + {1048950000 37800 0 LHST} + {1067095800 39600 1 LHST} + {1080399600 37800 0 LHST} + {1099150200 39600 1 LHST} + {1111849200 37800 0 LHST} + {1130599800 39600 1 LHST} + {1143903600 37800 0 LHST} + {1162049400 39600 1 LHST} + {1174748400 37800 0 LHST} + {1193499000 39600 1 LHST} + {1207407600 37800 0 LHST} + {1223134200 39600 1 LHST} + {1238857200 37800 0 LHST} + {1254583800 39600 1 LHST} + {1270306800 37800 0 LHST} + {1286033400 39600 1 LHST} + {1301756400 37800 0 LHST} + {1317483000 39600 1 LHST} + {1333206000 37800 0 LHST} + {1349537400 39600 1 LHST} + {1365260400 37800 0 LHST} + {1380987000 39600 1 LHST} + {1396710000 37800 0 LHST} + {1412436600 39600 1 LHST} + {1428159600 37800 0 LHST} + {1443886200 39600 1 LHST} + {1459609200 37800 0 LHST} + {1475335800 39600 1 LHST} + {1491058800 37800 0 LHST} + {1506785400 39600 1 LHST} + {1522508400 37800 0 LHST} + {1538839800 39600 1 LHST} + {1554562800 37800 0 LHST} + {1570289400 39600 1 LHST} + {1586012400 37800 0 LHST} + {1601739000 39600 1 LHST} + {1617462000 37800 0 LHST} + {1633188600 39600 1 LHST} + {1648911600 37800 0 LHST} + {1664638200 39600 1 LHST} + {1680361200 37800 0 LHST} + {1696087800 39600 1 LHST} + {1712415600 37800 0 LHST} + {1728142200 39600 1 LHST} + {1743865200 37800 0 LHST} + {1759591800 39600 1 LHST} + {1775314800 37800 0 LHST} + {1791041400 39600 1 LHST} + {1806764400 37800 0 LHST} + {1822491000 39600 1 LHST} + {1838214000 37800 0 LHST} + {1853940600 39600 1 LHST} + {1869663600 37800 0 LHST} + {1885995000 39600 1 LHST} + {1901718000 37800 0 LHST} + {1917444600 39600 1 LHST} + {1933167600 37800 0 LHST} + {1948894200 39600 1 LHST} + {1964617200 37800 0 LHST} + {1980343800 39600 1 LHST} + {1996066800 37800 0 LHST} + {2011793400 39600 1 LHST} + {2027516400 37800 0 LHST} + {2043243000 39600 1 LHST} + {2058966000 37800 0 LHST} + {2075297400 39600 1 LHST} + {2091020400 37800 0 LHST} + {2106747000 39600 1 LHST} + {2122470000 37800 0 LHST} + {2138196600 39600 1 LHST} + {2153919600 37800 0 LHST} + {2169646200 39600 1 LHST} + {2185369200 37800 0 LHST} + {2201095800 39600 1 LHST} + {2216818800 37800 0 LHST} + {2233150200 39600 1 LHST} + {2248873200 37800 0 LHST} + {2264599800 39600 1 LHST} + {2280322800 37800 0 LHST} + {2296049400 39600 1 LHST} + {2311772400 37800 0 LHST} + {2327499000 39600 1 LHST} + {2343222000 37800 0 LHST} + {2358948600 39600 1 LHST} + {2374671600 37800 0 LHST} + {2390398200 39600 1 LHST} + {2406121200 37800 0 LHST} + {2422452600 39600 1 LHST} + {2438175600 37800 0 LHST} + {2453902200 39600 1 LHST} + {2469625200 37800 0 LHST} + {2485351800 39600 1 LHST} + {2501074800 37800 0 LHST} + {2516801400 39600 1 LHST} + {2532524400 37800 0 LHST} + {2548251000 39600 1 LHST} + {2563974000 37800 0 LHST} + {2579700600 39600 1 LHST} + {2596028400 37800 0 LHST} + {2611755000 39600 1 LHST} + {2627478000 37800 0 LHST} + {2643204600 39600 1 LHST} + {2658927600 37800 0 LHST} + {2674654200 39600 1 LHST} + {2690377200 37800 0 LHST} + {2706103800 39600 1 LHST} + {2721826800 37800 0 LHST} + {2737553400 39600 1 LHST} + {2753276400 37800 0 LHST} + {2769607800 39600 1 LHST} + {2785330800 37800 0 LHST} + {2801057400 39600 1 LHST} + {2816780400 37800 0 LHST} + {2832507000 39600 1 LHST} + {2848230000 37800 0 LHST} + {2863956600 39600 1 LHST} + {2879679600 37800 0 LHST} + {2895406200 39600 1 LHST} + {2911129200 37800 0 LHST} + {2926855800 39600 1 LHST} + {2942578800 37800 0 LHST} + {2958910200 39600 1 LHST} + {2974633200 37800 0 LHST} + {2990359800 39600 1 LHST} + {3006082800 37800 0 LHST} + {3021809400 39600 1 LHST} + {3037532400 37800 0 LHST} + {3053259000 39600 1 LHST} + {3068982000 37800 0 LHST} + {3084708600 39600 1 LHST} + {3100431600 37800 0 LHST} + {3116763000 39600 1 LHST} + {3132486000 37800 0 LHST} + {3148212600 39600 1 LHST} + {3163935600 37800 0 LHST} + {3179662200 39600 1 LHST} + {3195385200 37800 0 LHST} + {3211111800 39600 1 LHST} + {3226834800 37800 0 LHST} + {3242561400 39600 1 LHST} + {3258284400 37800 0 LHST} + {3274011000 39600 1 LHST} + {3289734000 37800 0 LHST} + {3306065400 39600 1 LHST} + {3321788400 37800 0 LHST} + {3337515000 39600 1 LHST} + {3353238000 37800 0 LHST} + {3368964600 39600 1 LHST} + {3384687600 37800 0 LHST} + {3400414200 39600 1 LHST} + {3416137200 37800 0 LHST} + {3431863800 39600 1 LHST} + {3447586800 37800 0 LHST} + {3463313400 39600 1 LHST} + {3479641200 37800 0 LHST} + {3495367800 39600 1 LHST} + {3511090800 37800 0 LHST} + {3526817400 39600 1 LHST} + {3542540400 37800 0 LHST} + {3558267000 39600 1 LHST} + {3573990000 37800 0 LHST} + {3589716600 39600 1 LHST} + {3605439600 37800 0 LHST} + {3621166200 39600 1 LHST} + {3636889200 37800 0 LHST} + {3653220600 39600 1 LHST} + {3668943600 37800 0 LHST} + {3684670200 39600 1 LHST} + {3700393200 37800 0 LHST} + {3716119800 39600 1 LHST} + {3731842800 37800 0 LHST} + {3747569400 39600 1 LHST} + {3763292400 37800 0 LHST} + {3779019000 39600 1 LHST} + {3794742000 37800 0 LHST} + {3810468600 39600 1 LHST} + {3826191600 37800 0 LHST} + {3842523000 39600 1 LHST} + {3858246000 37800 0 LHST} + {3873972600 39600 1 LHST} + {3889695600 37800 0 LHST} + {3905422200 39600 1 LHST} + {3921145200 37800 0 LHST} + {3936871800 39600 1 LHST} + {3952594800 37800 0 LHST} + {3968321400 39600 1 LHST} + {3984044400 37800 0 LHST} + {4000375800 39600 1 LHST} + {4016098800 37800 0 LHST} + {4031825400 39600 1 LHST} + {4047548400 37800 0 LHST} + {4063275000 39600 1 LHST} + {4078998000 37800 0 LHST} + {4094724600 39600 1 LHST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Melbourne b/inkstitch/bin/tcl/tzdata/Australia/Melbourne new file mode 100644 index 0000000..907b8b9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Melbourne @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Melbourne) { + {-9223372036854775808 34792 0 LMT} + {-2364111592 36000 0 EST} + {-1672567140 39600 1 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {31500000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {89136000 39600 1 EST} + {100022400 36000 0 EST} + {120585600 39600 1 EST} + {131472000 36000 0 EST} + {152035200 39600 1 EST} + {162921600 36000 0 EST} + {183484800 39600 1 EST} + {194976000 36000 0 EST} + {215539200 39600 1 EST} + {226425600 36000 0 EST} + {246988800 39600 1 EST} + {257875200 36000 0 EST} + {278438400 39600 1 EST} + {289324800 36000 0 EST} + {309888000 39600 1 EST} + {320774400 36000 0 EST} + {341337600 39600 1 EST} + {352224000 36000 0 EST} + {372787200 39600 1 EST} + {384278400 36000 0 EST} + {404841600 39600 1 EST} + {415728000 36000 0 EST} + {436291200 39600 1 EST} + {447177600 36000 0 EST} + {467740800 39600 1 EST} + {478627200 36000 0 EST} + {499190400 39600 1 EST} + {511286400 36000 0 EST} + {530035200 39600 1 EST} + {542736000 36000 0 EST} + {561484800 39600 1 EST} + {574790400 36000 0 EST} + {594144000 39600 1 EST} + {606240000 36000 0 EST} + {625593600 39600 1 EST} + {637689600 36000 0 EST} + {657043200 39600 1 EST} + {667929600 36000 0 EST} + {688492800 39600 1 EST} + {699379200 36000 0 EST} + {719942400 39600 1 EST} + {731433600 36000 0 EST} + {751996800 39600 1 EST} + {762883200 36000 0 EST} + {783446400 39600 1 EST} + {796147200 36000 0 EST} + {814896000 39600 1 EST} + {828201600 36000 0 EST} + {846345600 39600 1 EST} + {859651200 36000 0 EST} + {877795200 39600 1 EST} + {891100800 36000 0 EST} + {909244800 39600 1 EST} + {922550400 36000 0 EST} + {941299200 39600 1 EST} + {954000000 36000 0 EST} + {967305600 39600 1 EST} + {985449600 36000 0 EST} + {1004198400 39600 1 EST} + {1017504000 36000 0 EST} + {1035648000 39600 1 EST} + {1048953600 36000 0 EST} + {1067097600 39600 1 EST} + {1080403200 36000 0 EST} + {1099152000 39600 1 EST} + {1111852800 36000 0 EST} + {1130601600 39600 1 EST} + {1143907200 36000 0 EST} + {1162051200 39600 1 EST} + {1174752000 36000 0 EST} + {1193500800 39600 1 EST} + {1207411200 36000 0 EST} + {1223136000 39600 1 EST} + {1238860800 36000 0 EST} + {1254585600 39600 1 EST} + {1270310400 36000 0 EST} + {1286035200 39600 1 EST} + {1301760000 36000 0 EST} + {1317484800 39600 1 EST} + {1333209600 36000 0 EST} + {1349539200 39600 1 EST} + {1365264000 36000 0 EST} + {1380988800 39600 1 EST} + {1396713600 36000 0 EST} + {1412438400 39600 1 EST} + {1428163200 36000 0 EST} + {1443888000 39600 1 EST} + {1459612800 36000 0 EST} + {1475337600 39600 1 EST} + {1491062400 36000 0 EST} + {1506787200 39600 1 EST} + {1522512000 36000 0 EST} + {1538841600 39600 1 EST} + {1554566400 36000 0 EST} + {1570291200 39600 1 EST} + {1586016000 36000 0 EST} + {1601740800 39600 1 EST} + {1617465600 36000 0 EST} + {1633190400 39600 1 EST} + {1648915200 36000 0 EST} + {1664640000 39600 1 EST} + {1680364800 36000 0 EST} + {1696089600 39600 1 EST} + {1712419200 36000 0 EST} + {1728144000 39600 1 EST} + {1743868800 36000 0 EST} + {1759593600 39600 1 EST} + {1775318400 36000 0 EST} + {1791043200 39600 1 EST} + {1806768000 36000 0 EST} + {1822492800 39600 1 EST} + {1838217600 36000 0 EST} + {1853942400 39600 1 EST} + {1869667200 36000 0 EST} + {1885996800 39600 1 EST} + {1901721600 36000 0 EST} + {1917446400 39600 1 EST} + {1933171200 36000 0 EST} + {1948896000 39600 1 EST} + {1964620800 36000 0 EST} + {1980345600 39600 1 EST} + {1996070400 36000 0 EST} + {2011795200 39600 1 EST} + {2027520000 36000 0 EST} + {2043244800 39600 1 EST} + {2058969600 36000 0 EST} + {2075299200 39600 1 EST} + {2091024000 36000 0 EST} + {2106748800 39600 1 EST} + {2122473600 36000 0 EST} + {2138198400 39600 1 EST} + {2153923200 36000 0 EST} + {2169648000 39600 1 EST} + {2185372800 36000 0 EST} + {2201097600 39600 1 EST} + {2216822400 36000 0 EST} + {2233152000 39600 1 EST} + {2248876800 36000 0 EST} + {2264601600 39600 1 EST} + {2280326400 36000 0 EST} + {2296051200 39600 1 EST} + {2311776000 36000 0 EST} + {2327500800 39600 1 EST} + {2343225600 36000 0 EST} + {2358950400 39600 1 EST} + {2374675200 36000 0 EST} + {2390400000 39600 1 EST} + {2406124800 36000 0 EST} + {2422454400 39600 1 EST} + {2438179200 36000 0 EST} + {2453904000 39600 1 EST} + {2469628800 36000 0 EST} + {2485353600 39600 1 EST} + {2501078400 36000 0 EST} + {2516803200 39600 1 EST} + {2532528000 36000 0 EST} + {2548252800 39600 1 EST} + {2563977600 36000 0 EST} + {2579702400 39600 1 EST} + {2596032000 36000 0 EST} + {2611756800 39600 1 EST} + {2627481600 36000 0 EST} + {2643206400 39600 1 EST} + {2658931200 36000 0 EST} + {2674656000 39600 1 EST} + {2690380800 36000 0 EST} + {2706105600 39600 1 EST} + {2721830400 36000 0 EST} + {2737555200 39600 1 EST} + {2753280000 36000 0 EST} + {2769609600 39600 1 EST} + {2785334400 36000 0 EST} + {2801059200 39600 1 EST} + {2816784000 36000 0 EST} + {2832508800 39600 1 EST} + {2848233600 36000 0 EST} + {2863958400 39600 1 EST} + {2879683200 36000 0 EST} + {2895408000 39600 1 EST} + {2911132800 36000 0 EST} + {2926857600 39600 1 EST} + {2942582400 36000 0 EST} + {2958912000 39600 1 EST} + {2974636800 36000 0 EST} + {2990361600 39600 1 EST} + {3006086400 36000 0 EST} + {3021811200 39600 1 EST} + {3037536000 36000 0 EST} + {3053260800 39600 1 EST} + {3068985600 36000 0 EST} + {3084710400 39600 1 EST} + {3100435200 36000 0 EST} + {3116764800 39600 1 EST} + {3132489600 36000 0 EST} + {3148214400 39600 1 EST} + {3163939200 36000 0 EST} + {3179664000 39600 1 EST} + {3195388800 36000 0 EST} + {3211113600 39600 1 EST} + {3226838400 36000 0 EST} + {3242563200 39600 1 EST} + {3258288000 36000 0 EST} + {3274012800 39600 1 EST} + {3289737600 36000 0 EST} + {3306067200 39600 1 EST} + {3321792000 36000 0 EST} + {3337516800 39600 1 EST} + {3353241600 36000 0 EST} + {3368966400 39600 1 EST} + {3384691200 36000 0 EST} + {3400416000 39600 1 EST} + {3416140800 36000 0 EST} + {3431865600 39600 1 EST} + {3447590400 36000 0 EST} + {3463315200 39600 1 EST} + {3479644800 36000 0 EST} + {3495369600 39600 1 EST} + {3511094400 36000 0 EST} + {3526819200 39600 1 EST} + {3542544000 36000 0 EST} + {3558268800 39600 1 EST} + {3573993600 36000 0 EST} + {3589718400 39600 1 EST} + {3605443200 36000 0 EST} + {3621168000 39600 1 EST} + {3636892800 36000 0 EST} + {3653222400 39600 1 EST} + {3668947200 36000 0 EST} + {3684672000 39600 1 EST} + {3700396800 36000 0 EST} + {3716121600 39600 1 EST} + {3731846400 36000 0 EST} + {3747571200 39600 1 EST} + {3763296000 36000 0 EST} + {3779020800 39600 1 EST} + {3794745600 36000 0 EST} + {3810470400 39600 1 EST} + {3826195200 36000 0 EST} + {3842524800 39600 1 EST} + {3858249600 36000 0 EST} + {3873974400 39600 1 EST} + {3889699200 36000 0 EST} + {3905424000 39600 1 EST} + {3921148800 36000 0 EST} + {3936873600 39600 1 EST} + {3952598400 36000 0 EST} + {3968323200 39600 1 EST} + {3984048000 36000 0 EST} + {4000377600 39600 1 EST} + {4016102400 36000 0 EST} + {4031827200 39600 1 EST} + {4047552000 36000 0 EST} + {4063276800 39600 1 EST} + {4079001600 36000 0 EST} + {4094726400 39600 1 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/NSW b/inkstitch/bin/tcl/tzdata/Australia/NSW new file mode 100644 index 0000000..905bdfe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/NSW @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/NSW) $TZData(:Australia/Sydney) diff --git a/inkstitch/bin/tcl/tzdata/Australia/North b/inkstitch/bin/tcl/tzdata/Australia/North new file mode 100644 index 0000000..950c88c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/North @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Darwin)]} { + LoadTimeZoneFile Australia/Darwin +} +set TZData(:Australia/North) $TZData(:Australia/Darwin) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Perth b/inkstitch/bin/tcl/tzdata/Australia/Perth new file mode 100644 index 0000000..5d8f116 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Perth @@ -0,0 +1,25 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Perth) { + {-9223372036854775808 27804 0 LMT} + {-2337925404 28800 0 WST} + {-1672559940 32400 1 WST} + {-1665385200 28800 0 WST} + {-883634400 32400 1 WST} + {-876121200 28800 0 WST} + {-860392800 32400 1 WST} + {-844671600 28800 0 WST} + {-836470800 32400 0 WST} + {152042400 32400 1 WST} + {162928800 28800 0 WST} + {436298400 32400 1 WST} + {447184800 28800 0 WST} + {690314400 32400 1 WST} + {699386400 28800 0 WST} + {1165082400 32400 1 WST} + {1174759200 28800 0 WST} + {1193508000 32400 1 WST} + {1206813600 28800 0 WST} + {1224957600 32400 1 WST} + {1238263200 28800 0 WST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Queensland b/inkstitch/bin/tcl/tzdata/Australia/Queensland new file mode 100644 index 0000000..6246e92 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Queensland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Brisbane)]} { + LoadTimeZoneFile Australia/Brisbane +} +set TZData(:Australia/Queensland) $TZData(:Australia/Brisbane) diff --git a/inkstitch/bin/tcl/tzdata/Australia/South b/inkstitch/bin/tcl/tzdata/Australia/South new file mode 100644 index 0000000..9c7dd95 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/South @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Adelaide)]} { + LoadTimeZoneFile Australia/Adelaide +} +set TZData(:Australia/South) $TZData(:Australia/Adelaide) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Sydney b/inkstitch/bin/tcl/tzdata/Australia/Sydney new file mode 100644 index 0000000..84b1d14 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Sydney @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Sydney) { + {-9223372036854775808 36292 0 LMT} + {-2364113092 36000 0 EST} + {-1672567140 39600 1 EST} + {-1665392400 36000 0 EST} + {-883641600 39600 1 EST} + {-876128400 36000 0 EST} + {-860400000 39600 1 EST} + {-844678800 36000 0 EST} + {-828345600 39600 1 EST} + {-813229200 36000 0 EST} + {31500000 36000 0 EST} + {57686400 39600 1 EST} + {67968000 36000 0 EST} + {89136000 39600 1 EST} + {100022400 36000 0 EST} + {120585600 39600 1 EST} + {131472000 36000 0 EST} + {152035200 39600 1 EST} + {162921600 36000 0 EST} + {183484800 39600 1 EST} + {194976000 36000 0 EST} + {215539200 39600 1 EST} + {226425600 36000 0 EST} + {246988800 39600 1 EST} + {257875200 36000 0 EST} + {278438400 39600 1 EST} + {289324800 36000 0 EST} + {309888000 39600 1 EST} + {320774400 36000 0 EST} + {341337600 39600 1 EST} + {352224000 36000 0 EST} + {372787200 39600 1 EST} + {386697600 36000 0 EST} + {404841600 39600 1 EST} + {415728000 36000 0 EST} + {436291200 39600 1 EST} + {447177600 36000 0 EST} + {467740800 39600 1 EST} + {478627200 36000 0 EST} + {499190400 39600 1 EST} + {511286400 36000 0 EST} + {530035200 39600 1 EST} + {542736000 36000 0 EST} + {562089600 39600 1 EST} + {574790400 36000 0 EST} + {594144000 39600 1 EST} + {606240000 36000 0 EST} + {625593600 39600 1 EST} + {636480000 36000 0 EST} + {657043200 39600 1 EST} + {667929600 36000 0 EST} + {688492800 39600 1 EST} + {699379200 36000 0 EST} + {719942400 39600 1 EST} + {731433600 36000 0 EST} + {751996800 39600 1 EST} + {762883200 36000 0 EST} + {783446400 39600 1 EST} + {794332800 36000 0 EST} + {814896000 39600 1 EST} + {828201600 36000 0 EST} + {846345600 39600 1 EST} + {859651200 36000 0 EST} + {877795200 39600 1 EST} + {891100800 36000 0 EST} + {909244800 39600 1 EST} + {922550400 36000 0 EST} + {941299200 39600 1 EST} + {954000000 36000 0 EST} + {967305600 39600 1 EST} + {985449600 36000 0 EST} + {1004198400 39600 1 EST} + {1017504000 36000 0 EST} + {1035648000 39600 1 EST} + {1048953600 36000 0 EST} + {1067097600 39600 1 EST} + {1080403200 36000 0 EST} + {1099152000 39600 1 EST} + {1111852800 36000 0 EST} + {1130601600 39600 1 EST} + {1143907200 36000 0 EST} + {1162051200 39600 1 EST} + {1174752000 36000 0 EST} + {1193500800 39600 1 EST} + {1207411200 36000 0 EST} + {1223136000 39600 1 EST} + {1238860800 36000 0 EST} + {1254585600 39600 1 EST} + {1270310400 36000 0 EST} + {1286035200 39600 1 EST} + {1301760000 36000 0 EST} + {1317484800 39600 1 EST} + {1333209600 36000 0 EST} + {1349539200 39600 1 EST} + {1365264000 36000 0 EST} + {1380988800 39600 1 EST} + {1396713600 36000 0 EST} + {1412438400 39600 1 EST} + {1428163200 36000 0 EST} + {1443888000 39600 1 EST} + {1459612800 36000 0 EST} + {1475337600 39600 1 EST} + {1491062400 36000 0 EST} + {1506787200 39600 1 EST} + {1522512000 36000 0 EST} + {1538841600 39600 1 EST} + {1554566400 36000 0 EST} + {1570291200 39600 1 EST} + {1586016000 36000 0 EST} + {1601740800 39600 1 EST} + {1617465600 36000 0 EST} + {1633190400 39600 1 EST} + {1648915200 36000 0 EST} + {1664640000 39600 1 EST} + {1680364800 36000 0 EST} + {1696089600 39600 1 EST} + {1712419200 36000 0 EST} + {1728144000 39600 1 EST} + {1743868800 36000 0 EST} + {1759593600 39600 1 EST} + {1775318400 36000 0 EST} + {1791043200 39600 1 EST} + {1806768000 36000 0 EST} + {1822492800 39600 1 EST} + {1838217600 36000 0 EST} + {1853942400 39600 1 EST} + {1869667200 36000 0 EST} + {1885996800 39600 1 EST} + {1901721600 36000 0 EST} + {1917446400 39600 1 EST} + {1933171200 36000 0 EST} + {1948896000 39600 1 EST} + {1964620800 36000 0 EST} + {1980345600 39600 1 EST} + {1996070400 36000 0 EST} + {2011795200 39600 1 EST} + {2027520000 36000 0 EST} + {2043244800 39600 1 EST} + {2058969600 36000 0 EST} + {2075299200 39600 1 EST} + {2091024000 36000 0 EST} + {2106748800 39600 1 EST} + {2122473600 36000 0 EST} + {2138198400 39600 1 EST} + {2153923200 36000 0 EST} + {2169648000 39600 1 EST} + {2185372800 36000 0 EST} + {2201097600 39600 1 EST} + {2216822400 36000 0 EST} + {2233152000 39600 1 EST} + {2248876800 36000 0 EST} + {2264601600 39600 1 EST} + {2280326400 36000 0 EST} + {2296051200 39600 1 EST} + {2311776000 36000 0 EST} + {2327500800 39600 1 EST} + {2343225600 36000 0 EST} + {2358950400 39600 1 EST} + {2374675200 36000 0 EST} + {2390400000 39600 1 EST} + {2406124800 36000 0 EST} + {2422454400 39600 1 EST} + {2438179200 36000 0 EST} + {2453904000 39600 1 EST} + {2469628800 36000 0 EST} + {2485353600 39600 1 EST} + {2501078400 36000 0 EST} + {2516803200 39600 1 EST} + {2532528000 36000 0 EST} + {2548252800 39600 1 EST} + {2563977600 36000 0 EST} + {2579702400 39600 1 EST} + {2596032000 36000 0 EST} + {2611756800 39600 1 EST} + {2627481600 36000 0 EST} + {2643206400 39600 1 EST} + {2658931200 36000 0 EST} + {2674656000 39600 1 EST} + {2690380800 36000 0 EST} + {2706105600 39600 1 EST} + {2721830400 36000 0 EST} + {2737555200 39600 1 EST} + {2753280000 36000 0 EST} + {2769609600 39600 1 EST} + {2785334400 36000 0 EST} + {2801059200 39600 1 EST} + {2816784000 36000 0 EST} + {2832508800 39600 1 EST} + {2848233600 36000 0 EST} + {2863958400 39600 1 EST} + {2879683200 36000 0 EST} + {2895408000 39600 1 EST} + {2911132800 36000 0 EST} + {2926857600 39600 1 EST} + {2942582400 36000 0 EST} + {2958912000 39600 1 EST} + {2974636800 36000 0 EST} + {2990361600 39600 1 EST} + {3006086400 36000 0 EST} + {3021811200 39600 1 EST} + {3037536000 36000 0 EST} + {3053260800 39600 1 EST} + {3068985600 36000 0 EST} + {3084710400 39600 1 EST} + {3100435200 36000 0 EST} + {3116764800 39600 1 EST} + {3132489600 36000 0 EST} + {3148214400 39600 1 EST} + {3163939200 36000 0 EST} + {3179664000 39600 1 EST} + {3195388800 36000 0 EST} + {3211113600 39600 1 EST} + {3226838400 36000 0 EST} + {3242563200 39600 1 EST} + {3258288000 36000 0 EST} + {3274012800 39600 1 EST} + {3289737600 36000 0 EST} + {3306067200 39600 1 EST} + {3321792000 36000 0 EST} + {3337516800 39600 1 EST} + {3353241600 36000 0 EST} + {3368966400 39600 1 EST} + {3384691200 36000 0 EST} + {3400416000 39600 1 EST} + {3416140800 36000 0 EST} + {3431865600 39600 1 EST} + {3447590400 36000 0 EST} + {3463315200 39600 1 EST} + {3479644800 36000 0 EST} + {3495369600 39600 1 EST} + {3511094400 36000 0 EST} + {3526819200 39600 1 EST} + {3542544000 36000 0 EST} + {3558268800 39600 1 EST} + {3573993600 36000 0 EST} + {3589718400 39600 1 EST} + {3605443200 36000 0 EST} + {3621168000 39600 1 EST} + {3636892800 36000 0 EST} + {3653222400 39600 1 EST} + {3668947200 36000 0 EST} + {3684672000 39600 1 EST} + {3700396800 36000 0 EST} + {3716121600 39600 1 EST} + {3731846400 36000 0 EST} + {3747571200 39600 1 EST} + {3763296000 36000 0 EST} + {3779020800 39600 1 EST} + {3794745600 36000 0 EST} + {3810470400 39600 1 EST} + {3826195200 36000 0 EST} + {3842524800 39600 1 EST} + {3858249600 36000 0 EST} + {3873974400 39600 1 EST} + {3889699200 36000 0 EST} + {3905424000 39600 1 EST} + {3921148800 36000 0 EST} + {3936873600 39600 1 EST} + {3952598400 36000 0 EST} + {3968323200 39600 1 EST} + {3984048000 36000 0 EST} + {4000377600 39600 1 EST} + {4016102400 36000 0 EST} + {4031827200 39600 1 EST} + {4047552000 36000 0 EST} + {4063276800 39600 1 EST} + {4079001600 36000 0 EST} + {4094726400 39600 1 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Australia/Tasmania b/inkstitch/bin/tcl/tzdata/Australia/Tasmania new file mode 100644 index 0000000..1849bde --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Tasmania @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Hobart)]} { + LoadTimeZoneFile Australia/Hobart +} +set TZData(:Australia/Tasmania) $TZData(:Australia/Hobart) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Victoria b/inkstitch/bin/tcl/tzdata/Australia/Victoria new file mode 100644 index 0000000..037bfeb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Victoria @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Melbourne)]} { + LoadTimeZoneFile Australia/Melbourne +} +set TZData(:Australia/Victoria) $TZData(:Australia/Melbourne) diff --git a/inkstitch/bin/tcl/tzdata/Australia/West b/inkstitch/bin/tcl/tzdata/Australia/West new file mode 100644 index 0000000..4689f7e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/West @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Perth)]} { + LoadTimeZoneFile Australia/Perth +} +set TZData(:Australia/West) $TZData(:Australia/Perth) diff --git a/inkstitch/bin/tcl/tzdata/Australia/Yancowinna b/inkstitch/bin/tcl/tzdata/Australia/Yancowinna new file mode 100644 index 0000000..b7d668d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Australia/Yancowinna @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Broken_Hill)]} { + LoadTimeZoneFile Australia/Broken_Hill +} +set TZData(:Australia/Yancowinna) $TZData(:Australia/Broken_Hill) diff --git a/inkstitch/bin/tcl/tzdata/Brazil/Acre b/inkstitch/bin/tcl/tzdata/Brazil/Acre new file mode 100644 index 0000000..abb0b98 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Brazil/Acre @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Rio_Branco)]} { + LoadTimeZoneFile America/Rio_Branco +} +set TZData(:Brazil/Acre) $TZData(:America/Rio_Branco) diff --git a/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha b/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha new file mode 100644 index 0000000..53accb4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Noronha)]} { + LoadTimeZoneFile America/Noronha +} +set TZData(:Brazil/DeNoronha) $TZData(:America/Noronha) diff --git a/inkstitch/bin/tcl/tzdata/Brazil/East b/inkstitch/bin/tcl/tzdata/Brazil/East new file mode 100644 index 0000000..f684633 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Brazil/East @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Sao_Paulo)]} { + LoadTimeZoneFile America/Sao_Paulo +} +set TZData(:Brazil/East) $TZData(:America/Sao_Paulo) diff --git a/inkstitch/bin/tcl/tzdata/Brazil/West b/inkstitch/bin/tcl/tzdata/Brazil/West new file mode 100644 index 0000000..67676d9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Brazil/West @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Manaus)]} { + LoadTimeZoneFile America/Manaus +} +set TZData(:Brazil/West) $TZData(:America/Manaus) diff --git a/inkstitch/bin/tcl/tzdata/CET b/inkstitch/bin/tcl/tzdata/CET new file mode 100644 index 0000000..b08750a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/CET @@ -0,0 +1,265 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:CET) { + {-9223372036854775808 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/CST6CDT b/inkstitch/bin/tcl/tzdata/CST6CDT new file mode 100644 index 0000000..11e45f0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/CST6CDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:CST6CDT) { + {-9223372036854775808 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/inkstitch/bin/tcl/tzdata/Canada/Atlantic b/inkstitch/bin/tcl/tzdata/Canada/Atlantic new file mode 100644 index 0000000..d1478d9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Atlantic @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Halifax)]} { + LoadTimeZoneFile America/Halifax +} +set TZData(:Canada/Atlantic) $TZData(:America/Halifax) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Central b/inkstitch/bin/tcl/tzdata/Canada/Central new file mode 100644 index 0000000..b04bef9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Central @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Winnipeg)]} { + LoadTimeZoneFile America/Winnipeg +} +set TZData(:Canada/Central) $TZData(:America/Winnipeg) diff --git a/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan b/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan new file mode 100644 index 0000000..f7e500c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:Canada/East-Saskatchewan) $TZData(:America/Regina) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Eastern b/inkstitch/bin/tcl/tzdata/Canada/Eastern new file mode 100644 index 0000000..74528eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Eastern @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Toronto)]} { + LoadTimeZoneFile America/Toronto +} +set TZData(:Canada/Eastern) $TZData(:America/Toronto) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Mountain b/inkstitch/bin/tcl/tzdata/Canada/Mountain new file mode 100644 index 0000000..8c6458d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Mountain @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Edmonton)]} { + LoadTimeZoneFile America/Edmonton +} +set TZData(:Canada/Mountain) $TZData(:America/Edmonton) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Newfoundland b/inkstitch/bin/tcl/tzdata/Canada/Newfoundland new file mode 100644 index 0000000..6904cde --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Newfoundland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/St_Johns)]} { + LoadTimeZoneFile America/St_Johns +} +set TZData(:Canada/Newfoundland) $TZData(:America/St_Johns) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Pacific b/inkstitch/bin/tcl/tzdata/Canada/Pacific new file mode 100644 index 0000000..4d70342 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Pacific @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Vancouver)]} { + LoadTimeZoneFile America/Vancouver +} +set TZData(:Canada/Pacific) $TZData(:America/Vancouver) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan b/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan new file mode 100644 index 0000000..cd56446 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:Canada/Saskatchewan) $TZData(:America/Regina) diff --git a/inkstitch/bin/tcl/tzdata/Canada/Yukon b/inkstitch/bin/tcl/tzdata/Canada/Yukon new file mode 100644 index 0000000..04b8368 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Canada/Yukon @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Whitehorse)]} { + LoadTimeZoneFile America/Whitehorse +} +set TZData(:Canada/Yukon) $TZData(:America/Whitehorse) diff --git a/inkstitch/bin/tcl/tzdata/Chile/Continental b/inkstitch/bin/tcl/tzdata/Chile/Continental new file mode 100644 index 0000000..0f858a3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Chile/Continental @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Santiago)]} { + LoadTimeZoneFile America/Santiago +} +set TZData(:Chile/Continental) $TZData(:America/Santiago) diff --git a/inkstitch/bin/tcl/tzdata/Chile/EasterIsland b/inkstitch/bin/tcl/tzdata/Chile/EasterIsland new file mode 100644 index 0000000..4edc034 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Chile/EasterIsland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Easter)]} { + LoadTimeZoneFile Pacific/Easter +} +set TZData(:Chile/EasterIsland) $TZData(:Pacific/Easter) diff --git a/inkstitch/bin/tcl/tzdata/Cuba b/inkstitch/bin/tcl/tzdata/Cuba new file mode 100644 index 0000000..17f7b45 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Cuba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Havana)]} { + LoadTimeZoneFile America/Havana +} +set TZData(:Cuba) $TZData(:America/Havana) diff --git a/inkstitch/bin/tcl/tzdata/EET b/inkstitch/bin/tcl/tzdata/EET new file mode 100644 index 0000000..e7c102a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/EET @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EET) { + {-9223372036854775808 7200 0 EET} + {228877200 10800 1 EEST} + {243997200 7200 0 EET} + {260326800 10800 1 EEST} + {276051600 7200 0 EET} + {291776400 10800 1 EEST} + {307501200 7200 0 EET} + {323830800 10800 1 EEST} + {338950800 7200 0 EET} + {354675600 10800 1 EEST} + {370400400 7200 0 EET} + {386125200 10800 1 EEST} + {401850000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/EST b/inkstitch/bin/tcl/tzdata/EST new file mode 100644 index 0000000..72c5b17 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/EST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EST) { + {-9223372036854775808 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/EST5EDT b/inkstitch/bin/tcl/tzdata/EST5EDT new file mode 100644 index 0000000..968833e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/EST5EDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EST5EDT) { + {-9223372036854775808 -18000 0 EST} + {-1633280400 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1601830800 -14400 1 EDT} + {-1583690400 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/inkstitch/bin/tcl/tzdata/Egypt b/inkstitch/bin/tcl/tzdata/Egypt new file mode 100644 index 0000000..63341bc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Egypt @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Cairo)]} { + LoadTimeZoneFile Africa/Cairo +} +set TZData(:Egypt) $TZData(:Africa/Cairo) diff --git a/inkstitch/bin/tcl/tzdata/Eire b/inkstitch/bin/tcl/tzdata/Eire new file mode 100644 index 0000000..c86c91c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Eire @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Dublin)]} { + LoadTimeZoneFile Europe/Dublin +} +set TZData(:Eire) $TZData(:Europe/Dublin) diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT b/inkstitch/bin/tcl/tzdata/Etc/GMT new file mode 100644 index 0000000..7454fd5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT) { + {-9223372036854775808 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+0 b/inkstitch/bin/tcl/tzdata/Etc/GMT+0 new file mode 100644 index 0000000..017dee1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT+0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+1 b/inkstitch/bin/tcl/tzdata/Etc/GMT+1 new file mode 100644 index 0000000..12f97ba --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+1 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+1) { + {-9223372036854775808 -3600 0 GMT+1} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+10 b/inkstitch/bin/tcl/tzdata/Etc/GMT+10 new file mode 100644 index 0000000..6ea50bb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+10 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+10) { + {-9223372036854775808 -36000 0 GMT+10} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+11 b/inkstitch/bin/tcl/tzdata/Etc/GMT+11 new file mode 100644 index 0000000..c91b169 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+11 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+11) { + {-9223372036854775808 -39600 0 GMT+11} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+12 b/inkstitch/bin/tcl/tzdata/Etc/GMT+12 new file mode 100644 index 0000000..29a4cee --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+12 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+12) { + {-9223372036854775808 -43200 0 GMT+12} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+2 b/inkstitch/bin/tcl/tzdata/Etc/GMT+2 new file mode 100644 index 0000000..8c6b526 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+2 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+2) { + {-9223372036854775808 -7200 0 GMT+2} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+3 b/inkstitch/bin/tcl/tzdata/Etc/GMT+3 new file mode 100644 index 0000000..862571d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+3 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+3) { + {-9223372036854775808 -10800 0 GMT+3} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+4 b/inkstitch/bin/tcl/tzdata/Etc/GMT+4 new file mode 100644 index 0000000..a933bbc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+4 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+4) { + {-9223372036854775808 -14400 0 GMT+4} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+5 b/inkstitch/bin/tcl/tzdata/Etc/GMT+5 new file mode 100644 index 0000000..80cc25c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+5 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+5) { + {-9223372036854775808 -18000 0 GMT+5} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+6 b/inkstitch/bin/tcl/tzdata/Etc/GMT+6 new file mode 100644 index 0000000..bc57bd6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+6 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+6) { + {-9223372036854775808 -21600 0 GMT+6} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+7 b/inkstitch/bin/tcl/tzdata/Etc/GMT+7 new file mode 100644 index 0000000..d419eb9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+7 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+7) { + {-9223372036854775808 -25200 0 GMT+7} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+8 b/inkstitch/bin/tcl/tzdata/Etc/GMT+8 new file mode 100644 index 0000000..705ad40 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+8 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+8) { + {-9223372036854775808 -28800 0 GMT+8} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT+9 b/inkstitch/bin/tcl/tzdata/Etc/GMT+9 new file mode 100644 index 0000000..4086639 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT+9 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+9) { + {-9223372036854775808 -32400 0 GMT+9} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-0 b/inkstitch/bin/tcl/tzdata/Etc/GMT-0 new file mode 100644 index 0000000..d8913d5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT-0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-1 b/inkstitch/bin/tcl/tzdata/Etc/GMT-1 new file mode 100644 index 0000000..a44dd1f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-1 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-1) { + {-9223372036854775808 3600 0 GMT-1} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-10 b/inkstitch/bin/tcl/tzdata/Etc/GMT-10 new file mode 100644 index 0000000..1c50d01 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-10 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-10) { + {-9223372036854775808 36000 0 GMT-10} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-11 b/inkstitch/bin/tcl/tzdata/Etc/GMT-11 new file mode 100644 index 0000000..d07710f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-11 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-11) { + {-9223372036854775808 39600 0 GMT-11} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-12 b/inkstitch/bin/tcl/tzdata/Etc/GMT-12 new file mode 100644 index 0000000..a23b98d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-12 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-12) { + {-9223372036854775808 43200 0 GMT-12} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-13 b/inkstitch/bin/tcl/tzdata/Etc/GMT-13 new file mode 100644 index 0000000..1a6700a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-13 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-13) { + {-9223372036854775808 46800 0 GMT-13} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-14 b/inkstitch/bin/tcl/tzdata/Etc/GMT-14 new file mode 100644 index 0000000..3707e21 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-14 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-14) { + {-9223372036854775808 50400 0 GMT-14} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-2 b/inkstitch/bin/tcl/tzdata/Etc/GMT-2 new file mode 100644 index 0000000..f9dea16 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-2 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-2) { + {-9223372036854775808 7200 0 GMT-2} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-3 b/inkstitch/bin/tcl/tzdata/Etc/GMT-3 new file mode 100644 index 0000000..99145b8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-3 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-3) { + {-9223372036854775808 10800 0 GMT-3} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-4 b/inkstitch/bin/tcl/tzdata/Etc/GMT-4 new file mode 100644 index 0000000..27b4fec --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-4 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-4) { + {-9223372036854775808 14400 0 GMT-4} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-5 b/inkstitch/bin/tcl/tzdata/Etc/GMT-5 new file mode 100644 index 0000000..dbe3df7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-5 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-5) { + {-9223372036854775808 18000 0 GMT-5} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-6 b/inkstitch/bin/tcl/tzdata/Etc/GMT-6 new file mode 100644 index 0000000..414dbfa --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-6 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-6) { + {-9223372036854775808 21600 0 GMT-6} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-7 b/inkstitch/bin/tcl/tzdata/Etc/GMT-7 new file mode 100644 index 0000000..2bd59db --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-7 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-7) { + {-9223372036854775808 25200 0 GMT-7} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-8 b/inkstitch/bin/tcl/tzdata/Etc/GMT-8 new file mode 100644 index 0000000..7303721 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-8 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-8) { + {-9223372036854775808 28800 0 GMT-8} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT-9 b/inkstitch/bin/tcl/tzdata/Etc/GMT-9 new file mode 100644 index 0000000..46e6878 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT-9 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-9) { + {-9223372036854775808 32400 0 GMT-9} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/GMT0 b/inkstitch/bin/tcl/tzdata/Etc/GMT0 new file mode 100644 index 0000000..dba1fe9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/GMT0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/Etc/Greenwich b/inkstitch/bin/tcl/tzdata/Etc/Greenwich new file mode 100644 index 0000000..53acea0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/Greenwich @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/Greenwich) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/Etc/UCT b/inkstitch/bin/tcl/tzdata/Etc/UCT new file mode 100644 index 0000000..f7d795e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/UCT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/UCT) { + {-9223372036854775808 0 0 UCT} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/UTC b/inkstitch/bin/tcl/tzdata/Etc/UTC new file mode 100644 index 0000000..db5954b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/UTC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/UTC) { + {-9223372036854775808 0 0 UTC} +} diff --git a/inkstitch/bin/tcl/tzdata/Etc/Universal b/inkstitch/bin/tcl/tzdata/Etc/Universal new file mode 100644 index 0000000..a3b7547 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/Universal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Etc/Universal) $TZData(:Etc/UTC) diff --git a/inkstitch/bin/tcl/tzdata/Etc/Zulu b/inkstitch/bin/tcl/tzdata/Etc/Zulu new file mode 100644 index 0000000..f643db9 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Etc/Zulu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Etc/Zulu) $TZData(:Etc/UTC) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Amsterdam b/inkstitch/bin/tcl/tzdata/Europe/Amsterdam new file mode 100644 index 0000000..bd89127 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Amsterdam @@ -0,0 +1,310 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Amsterdam) { + {-9223372036854775808 1172 0 LMT} + {-4260212372 1172 0 AMT} + {-1693700372 4772 1 NST} + {-1680484772 1172 0 AMT} + {-1663453172 4772 1 NST} + {-1650147572 1172 0 AMT} + {-1633213172 4772 1 NST} + {-1617488372 1172 0 AMT} + {-1601158772 4772 1 NST} + {-1586038772 1172 0 AMT} + {-1569709172 4772 1 NST} + {-1554589172 1172 0 AMT} + {-1538259572 4772 1 NST} + {-1523139572 1172 0 AMT} + {-1507501172 4772 1 NST} + {-1490566772 1172 0 AMT} + {-1470176372 4772 1 NST} + {-1459117172 1172 0 AMT} + {-1443997172 4772 1 NST} + {-1427667572 1172 0 AMT} + {-1406672372 4772 1 NST} + {-1396217972 1172 0 AMT} + {-1376950772 4772 1 NST} + {-1364768372 1172 0 AMT} + {-1345414772 4772 1 NST} + {-1333318772 1172 0 AMT} + {-1313792372 4772 1 NST} + {-1301264372 1172 0 AMT} + {-1282256372 4772 1 NST} + {-1269814772 1172 0 AMT} + {-1250720372 4772 1 NST} + {-1238365172 1172 0 AMT} + {-1219184372 4772 1 NST} + {-1206915572 1172 0 AMT} + {-1186957172 4772 1 NST} + {-1175465972 1172 0 AMT} + {-1156025972 4772 1 NST} + {-1143411572 1172 0 AMT} + {-1124489972 4772 1 NST} + {-1111961972 1172 0 AMT} + {-1092953972 4772 1 NST} + {-1080512372 1172 0 AMT} + {-1061331572 4772 1 NST} + {-1049062772 1172 0 AMT} + {-1029190772 4772 1 NST} + {-1025741972 4800 0 NEST} + {-1017613200 1200 0 NET} + {-998259600 4800 1 NEST} + {-986163600 1200 0 NET} + {-966723600 4800 1 NEST} + {-954109200 1200 0 NET} + {-935022000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-766623600 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Andorra b/inkstitch/bin/tcl/tzdata/Europe/Andorra new file mode 100644 index 0000000..89233fe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Andorra @@ -0,0 +1,237 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Andorra) { + {-9223372036854775808 364 0 LMT} + {-2177453164 0 0 WET} + {-733881600 3600 0 CET} + {481078800 7200 0 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Athens b/inkstitch/bin/tcl/tzdata/Europe/Athens new file mode 100644 index 0000000..f8df408 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Athens @@ -0,0 +1,268 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Athens) { + {-9223372036854775808 5692 0 LMT} + {-2344642492 5692 0 AMT} + {-1686101632 7200 0 EET} + {-1182996000 10800 1 EEST} + {-1178161200 7200 0 EET} + {-906861600 10800 1 EEST} + {-904878000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844477200 7200 1 CEST} + {-828237600 3600 0 CET} + {-812422800 7200 0 EET} + {-552362400 10800 1 EEST} + {-541652400 7200 0 EET} + {166485600 10800 1 EEST} + {186184800 7200 0 EET} + {198028800 10800 1 EEST} + {213753600 7200 0 EET} + {228873600 10800 1 EEST} + {244080000 7200 0 EET} + {260323200 10800 1 EEST} + {275446800 7200 0 EET} + {291798000 10800 1 EEST} + {307407600 7200 0 EET} + {323388000 10800 1 EEST} + {338936400 7200 0 EET} + {347148000 7200 0 EET} + {354675600 10800 1 EEST} + {370400400 7200 0 EET} + {386125200 10800 1 EEST} + {401850000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Belfast b/inkstitch/bin/tcl/tzdata/Europe/Belfast new file mode 100644 index 0000000..51cd3ce --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Belfast @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Belfast) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Belgrade b/inkstitch/bin/tcl/tzdata/Europe/Belgrade new file mode 100644 index 0000000..b11f7b3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Belgrade @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Belgrade) { + {-9223372036854775808 4920 0 LMT} + {-2713915320 3600 0 CET} + {-905824800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-777942000 7200 1 CEST} + {-766623600 3600 0 CET} + {407199600 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Berlin b/inkstitch/bin/tcl/tzdata/Europe/Berlin new file mode 100644 index 0000000..5469cf6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Berlin @@ -0,0 +1,274 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Berlin) { + {-9223372036854775808 3208 0 LMT} + {-2422054408 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-776559600 10800 0 CEMT} + {-765936000 7200 1 CEST} + {-761180400 3600 0 CET} + {-757386000 3600 0 CET} + {-748479600 7200 1 CEST} + {-733273200 3600 0 CET} + {-717631200 7200 1 CEST} + {-714610800 10800 1 CEMT} + {-710380800 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Bratislava b/inkstitch/bin/tcl/tzdata/Europe/Bratislava new file mode 100644 index 0000000..d65ea5a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Bratislava @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Prague)]} { + LoadTimeZoneFile Europe/Prague +} +set TZData(:Europe/Bratislava) $TZData(:Europe/Prague) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Brussels b/inkstitch/bin/tcl/tzdata/Europe/Brussels new file mode 100644 index 0000000..3cb9b14 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Brussels @@ -0,0 +1,316 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Brussels) { + {-9223372036854775808 1050 0 LMT} + {-2840141850 1050 0 BMT} + {-2450953050 0 0 WET} + {-1740355200 3600 0 CET} + {-1693702800 7200 0 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1613826000 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585530000 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1473642000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301263200 0 0 WET} + {-1284328800 3600 1 WEST} + {-1269813600 0 0 WET} + {-1253484000 3600 1 WEST} + {-1238364000 0 0 WET} + {-1221429600 3600 1 WEST} + {-1206914400 0 0 WET} + {-1191189600 3600 1 WEST} + {-1175464800 0 0 WET} + {-1160344800 3600 1 WEST} + {-1143410400 0 0 WET} + {-1127685600 3600 1 WEST} + {-1111960800 0 0 WET} + {-1096840800 3600 1 WEST} + {-1080511200 0 0 WET} + {-1063576800 3600 1 WEST} + {-1049061600 0 0 WET} + {-1033336800 3600 1 WEST} + {-1017612000 0 0 WET} + {-1002492000 3600 1 WEST} + {-986162400 0 0 WET} + {-969228000 3600 1 WEST} + {-950479200 0 0 WET} + {-942012000 3600 1 WEST} + {-934668000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-799290000 3600 0 CET} + {-798073200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {-745455600 7200 1 CEST} + {-733273200 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Bucharest b/inkstitch/bin/tcl/tzdata/Europe/Bucharest new file mode 100644 index 0000000..7b3bed4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Bucharest @@ -0,0 +1,268 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Bucharest) { + {-9223372036854775808 6264 0 LMT} + {-2469404664 6264 0 BMT} + {-1213148664 7200 0 EET} + {-1187056800 10800 1 EEST} + {-1175479200 7200 0 EET} + {-1159754400 10800 1 EEST} + {-1144029600 7200 0 EET} + {-1127700000 10800 1 EEST} + {-1111975200 7200 0 EET} + {-1096250400 10800 1 EEST} + {-1080525600 7200 0 EET} + {-1064800800 10800 1 EEST} + {-1049076000 7200 0 EET} + {-1033351200 10800 1 EEST} + {-1017626400 7200 0 EET} + {-1001901600 10800 1 EEST} + {-986176800 7200 0 EET} + {-970452000 10800 1 EEST} + {-954727200 7200 0 EET} + {296604000 10800 1 EEST} + {307486800 7200 0 EET} + {323816400 10800 1 EEST} + {338940000 7200 0 EET} + {354672000 10800 0 EEST} + {370396800 7200 0 EET} + {386121600 10800 1 EEST} + {401846400 7200 0 EET} + {417571200 10800 1 EEST} + {433296000 7200 0 EET} + {449020800 10800 1 EEST} + {465350400 7200 0 EET} + {481075200 10800 1 EEST} + {496800000 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {662680800 7200 0 EET} + {670370400 10800 1 EEST} + {686095200 7200 0 EET} + {701820000 10800 1 EEST} + {717544800 7200 0 EET} + {733269600 10800 1 EEST} + {748994400 7200 0 EET} + {757375200 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Budapest b/inkstitch/bin/tcl/tzdata/Europe/Budapest new file mode 100644 index 0000000..fd41acc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Budapest @@ -0,0 +1,284 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Budapest) { + {-9223372036854775808 4580 0 LMT} + {-2500938980 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1640998800 3600 0 CET} + {-1633212000 7200 1 CEST} + {-1617577200 3600 0 CET} + {-1600466400 7200 1 CEST} + {-1587250800 3600 0 CET} + {-1569708000 7200 1 CEST} + {-1554332400 3600 0 CET} + {-906937200 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-778471200 7200 1 CEST} + {-762487200 3600 0 CET} + {-749689200 7200 1 CEST} + {-733359600 3600 0 CET} + {-717634800 7200 1 CEST} + {-701910000 3600 0 CET} + {-686185200 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {-621990000 7200 1 CEST} + {-605660400 3600 0 CET} + {-492656400 7200 1 CEST} + {-481168800 3600 0 CET} + {-461120400 7200 1 CEST} + {-449632800 3600 0 CET} + {-428547600 7200 1 CEST} + {-418269600 3600 0 CET} + {-397094400 7200 1 CEST} + {-386809200 3600 0 CET} + {323827200 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Busingen b/inkstitch/bin/tcl/tzdata/Europe/Busingen new file mode 100644 index 0000000..62abc29 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Busingen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Zurich)]} { + LoadTimeZoneFile Europe/Zurich +} +set TZData(:Europe/Busingen) $TZData(:Europe/Zurich) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Chisinau b/inkstitch/bin/tcl/tzdata/Europe/Chisinau new file mode 100644 index 0000000..4ef466b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Chisinau @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Chisinau) { + {-9223372036854775808 6920 0 LMT} + {-2840147720 6900 0 CMT} + {-1637114100 6264 0 BMT} + {-1213148664 7200 0 EET} + {-1187056800 10800 1 EEST} + {-1175479200 7200 0 EET} + {-1159754400 10800 1 EEST} + {-1144029600 7200 0 EET} + {-1127700000 10800 1 EEST} + {-1111975200 7200 0 EET} + {-1096250400 10800 1 EEST} + {-1080525600 7200 0 EET} + {-1064800800 10800 1 EEST} + {-1049076000 7200 0 EET} + {-1033351200 10800 1 EEST} + {-1017626400 7200 0 EET} + {-1001901600 10800 1 EEST} + {-986176800 7200 0 EET} + {-970452000 10800 1 EEST} + {-954727200 7200 0 EET} + {-927165600 10800 1 EEST} + {-898138800 7200 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-800154000 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {641941200 7200 0 EET} + {662680800 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Copenhagen b/inkstitch/bin/tcl/tzdata/Europe/Copenhagen new file mode 100644 index 0000000..c747e58 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Copenhagen @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Copenhagen) { + {-9223372036854775808 3020 0 LMT} + {-2524524620 3020 0 CMT} + {-2398294220 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680490800 3600 0 CET} + {-935110800 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-769388400 3600 0 CET} + {-747010800 7200 1 CEST} + {-736383600 3600 0 CET} + {-715215600 7200 1 CEST} + {-706748400 3600 0 CET} + {-683161200 7200 1 CEST} + {-675298800 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Dublin b/inkstitch/bin/tcl/tzdata/Europe/Dublin new file mode 100644 index 0000000..4b43bc0 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Dublin @@ -0,0 +1,359 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Dublin) { + {-9223372036854775808 -1500 0 LMT} + {-2821649700 -1521 0 DMT} + {-1691962479 2079 1 IST} + {-1680471279 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1517011200 0 0 IST} + {-1507500000 3600 1 IST} + {-1490565600 0 0 IST} + {-1473631200 3600 1 IST} + {-1460930400 0 0 IST} + {-1442786400 3600 1 IST} + {-1428876000 0 0 IST} + {-1410732000 3600 1 IST} + {-1396216800 0 0 IST} + {-1379282400 3600 1 IST} + {-1364767200 0 0 IST} + {-1348437600 3600 1 IST} + {-1333317600 0 0 IST} + {-1315778400 3600 1 IST} + {-1301263200 0 0 IST} + {-1284328800 3600 1 IST} + {-1269813600 0 0 IST} + {-1253484000 3600 1 IST} + {-1238364000 0 0 IST} + {-1221429600 3600 1 IST} + {-1206914400 0 0 IST} + {-1189980000 3600 1 IST} + {-1175464800 0 0 IST} + {-1159135200 3600 1 IST} + {-1143410400 0 0 IST} + {-1126476000 3600 1 IST} + {-1111960800 0 0 IST} + {-1095631200 3600 1 IST} + {-1080511200 0 0 IST} + {-1063576800 3600 1 IST} + {-1049061600 0 0 IST} + {-1032127200 3600 1 IST} + {-1017612000 0 0 IST} + {-1001282400 3600 1 IST} + {-986162400 0 0 IST} + {-969228000 3600 1 IST} + {-950479200 0 0 IST} + {-942015600 3600 1 IST} + {-733359600 0 0 GMT} + {-719445600 3600 1 IST} + {-699490800 0 0 GMT} + {-684972000 3600 0 IST} + {-668037600 0 0 IST} + {-654732000 3600 1 IST} + {-636588000 0 0 IST} + {-622072800 3600 1 IST} + {-605743200 0 0 IST} + {-590623200 3600 1 IST} + {-574293600 0 0 IST} + {-558568800 3600 1 IST} + {-542239200 0 0 IST} + {-527119200 3600 1 IST} + {-512604000 0 0 IST} + {-496274400 3600 1 IST} + {-481154400 0 0 IST} + {-464220000 3600 1 IST} + {-449704800 0 0 IST} + {-432165600 3600 1 IST} + {-417650400 0 0 IST} + {-401320800 3600 1 IST} + {-386200800 0 0 IST} + {-369266400 3600 1 IST} + {-354751200 0 0 IST} + {-337816800 3600 1 IST} + {-323301600 0 0 IST} + {-306972000 3600 1 IST} + {-291852000 0 0 IST} + {-276732000 3600 1 IST} + {-257983200 0 0 IST} + {-245282400 3600 1 IST} + {-226533600 0 0 IST} + {-213228000 3600 1 IST} + {-195084000 0 0 IST} + {-182383200 3600 1 IST} + {-163634400 0 0 IST} + {-150933600 3600 1 IST} + {-132184800 0 0 IST} + {-119484000 3600 1 IST} + {-100735200 0 0 IST} + {-88034400 3600 1 IST} + {-68680800 0 0 IST} + {-59004000 3600 1 IST} + {-37238400 3600 0 IST} + {57722400 0 0 IST} + {69818400 3600 1 IST} + {89172000 0 0 IST} + {101268000 3600 1 IST} + {120621600 0 0 IST} + {132717600 3600 1 IST} + {152071200 0 0 IST} + {164167200 3600 1 IST} + {183520800 0 0 IST} + {196221600 3600 1 IST} + {214970400 0 0 IST} + {227671200 3600 1 IST} + {246420000 0 0 IST} + {259120800 3600 1 IST} + {278474400 0 0 IST} + {290570400 3600 1 IST} + {309924000 0 0 IST} + {322020000 3600 1 IST} + {341373600 0 0 IST} + {354675600 3600 1 IST} + {372819600 0 0 IST} + {386125200 3600 1 IST} + {404269200 0 0 IST} + {417574800 3600 1 IST} + {435718800 0 0 IST} + {449024400 3600 1 IST} + {467773200 0 0 IST} + {481078800 3600 1 IST} + {499222800 0 0 IST} + {512528400 3600 1 IST} + {530672400 0 0 IST} + {543978000 3600 1 IST} + {562122000 0 0 IST} + {575427600 3600 1 IST} + {593571600 0 0 IST} + {606877200 3600 1 IST} + {625626000 0 0 IST} + {638326800 3600 1 IST} + {657075600 0 0 IST} + {670381200 3600 1 IST} + {688525200 0 0 IST} + {701830800 3600 1 IST} + {719974800 0 0 IST} + {733280400 3600 1 IST} + {751424400 0 0 IST} + {764730000 3600 1 IST} + {782874000 0 0 IST} + {796179600 3600 1 IST} + {814323600 0 0 IST} + {820454400 0 0 GMT} + {828234000 3600 1 IST} + {846378000 0 0 GMT} + {859683600 3600 1 IST} + {877827600 0 0 GMT} + {891133200 3600 1 IST} + {909277200 0 0 GMT} + {922582800 3600 1 IST} + {941331600 0 0 GMT} + {954032400 3600 1 IST} + {972781200 0 0 GMT} + {985482000 3600 1 IST} + {1004230800 0 0 GMT} + {1017536400 3600 1 IST} + {1035680400 0 0 GMT} + {1048986000 3600 1 IST} + {1067130000 0 0 GMT} + {1080435600 3600 1 IST} + {1099184400 0 0 GMT} + {1111885200 3600 1 IST} + {1130634000 0 0 GMT} + {1143334800 3600 1 IST} + {1162083600 0 0 GMT} + {1174784400 3600 1 IST} + {1193533200 0 0 GMT} + {1206838800 3600 1 IST} + {1224982800 0 0 GMT} + {1238288400 3600 1 IST} + {1256432400 0 0 GMT} + {1269738000 3600 1 IST} + {1288486800 0 0 GMT} + {1301187600 3600 1 IST} + {1319936400 0 0 GMT} + {1332637200 3600 1 IST} + {1351386000 0 0 GMT} + {1364691600 3600 1 IST} + {1382835600 0 0 GMT} + {1396141200 3600 1 IST} + {1414285200 0 0 GMT} + {1427590800 3600 1 IST} + {1445734800 0 0 GMT} + {1459040400 3600 1 IST} + {1477789200 0 0 GMT} + {1490490000 3600 1 IST} + {1509238800 0 0 GMT} + {1521939600 3600 1 IST} + {1540688400 0 0 GMT} + {1553994000 3600 1 IST} + {1572138000 0 0 GMT} + {1585443600 3600 1 IST} + {1603587600 0 0 GMT} + {1616893200 3600 1 IST} + {1635642000 0 0 GMT} + {1648342800 3600 1 IST} + {1667091600 0 0 GMT} + {1679792400 3600 1 IST} + {1698541200 0 0 GMT} + {1711846800 3600 1 IST} + {1729990800 0 0 GMT} + {1743296400 3600 1 IST} + {1761440400 0 0 GMT} + {1774746000 3600 1 IST} + {1792890000 0 0 GMT} + {1806195600 3600 1 IST} + {1824944400 0 0 GMT} + {1837645200 3600 1 IST} + {1856394000 0 0 GMT} + {1869094800 3600 1 IST} + {1887843600 0 0 GMT} + {1901149200 3600 1 IST} + {1919293200 0 0 GMT} + {1932598800 3600 1 IST} + {1950742800 0 0 GMT} + {1964048400 3600 1 IST} + {1982797200 0 0 GMT} + {1995498000 3600 1 IST} + {2014246800 0 0 GMT} + {2026947600 3600 1 IST} + {2045696400 0 0 GMT} + {2058397200 3600 1 IST} + {2077146000 0 0 GMT} + {2090451600 3600 1 IST} + {2108595600 0 0 GMT} + {2121901200 3600 1 IST} + {2140045200 0 0 GMT} + {2153350800 3600 1 IST} + {2172099600 0 0 GMT} + {2184800400 3600 1 IST} + {2203549200 0 0 GMT} + {2216250000 3600 1 IST} + {2234998800 0 0 GMT} + {2248304400 3600 1 IST} + {2266448400 0 0 GMT} + {2279754000 3600 1 IST} + {2297898000 0 0 GMT} + {2311203600 3600 1 IST} + {2329347600 0 0 GMT} + {2342653200 3600 1 IST} + {2361402000 0 0 GMT} + {2374102800 3600 1 IST} + {2392851600 0 0 GMT} + {2405552400 3600 1 IST} + {2424301200 0 0 GMT} + {2437606800 3600 1 IST} + {2455750800 0 0 GMT} + {2469056400 3600 1 IST} + {2487200400 0 0 GMT} + {2500506000 3600 1 IST} + {2519254800 0 0 GMT} + {2531955600 3600 1 IST} + {2550704400 0 0 GMT} + {2563405200 3600 1 IST} + {2582154000 0 0 GMT} + {2595459600 3600 1 IST} + {2613603600 0 0 GMT} + {2626909200 3600 1 IST} + {2645053200 0 0 GMT} + {2658358800 3600 1 IST} + {2676502800 0 0 GMT} + {2689808400 3600 1 IST} + {2708557200 0 0 GMT} + {2721258000 3600 1 IST} + {2740006800 0 0 GMT} + {2752707600 3600 1 IST} + {2771456400 0 0 GMT} + {2784762000 3600 1 IST} + {2802906000 0 0 GMT} + {2816211600 3600 1 IST} + {2834355600 0 0 GMT} + {2847661200 3600 1 IST} + {2866410000 0 0 GMT} + {2879110800 3600 1 IST} + {2897859600 0 0 GMT} + {2910560400 3600 1 IST} + {2929309200 0 0 GMT} + {2942010000 3600 1 IST} + {2960758800 0 0 GMT} + {2974064400 3600 1 IST} + {2992208400 0 0 GMT} + {3005514000 3600 1 IST} + {3023658000 0 0 GMT} + {3036963600 3600 1 IST} + {3055712400 0 0 GMT} + {3068413200 3600 1 IST} + {3087162000 0 0 GMT} + {3099862800 3600 1 IST} + {3118611600 0 0 GMT} + {3131917200 3600 1 IST} + {3150061200 0 0 GMT} + {3163366800 3600 1 IST} + {3181510800 0 0 GMT} + {3194816400 3600 1 IST} + {3212960400 0 0 GMT} + {3226266000 3600 1 IST} + {3245014800 0 0 GMT} + {3257715600 3600 1 IST} + {3276464400 0 0 GMT} + {3289165200 3600 1 IST} + {3307914000 0 0 GMT} + {3321219600 3600 1 IST} + {3339363600 0 0 GMT} + {3352669200 3600 1 IST} + {3370813200 0 0 GMT} + {3384118800 3600 1 IST} + {3402867600 0 0 GMT} + {3415568400 3600 1 IST} + {3434317200 0 0 GMT} + {3447018000 3600 1 IST} + {3465766800 0 0 GMT} + {3479072400 3600 1 IST} + {3497216400 0 0 GMT} + {3510522000 3600 1 IST} + {3528666000 0 0 GMT} + {3541971600 3600 1 IST} + {3560115600 0 0 GMT} + {3573421200 3600 1 IST} + {3592170000 0 0 GMT} + {3604870800 3600 1 IST} + {3623619600 0 0 GMT} + {3636320400 3600 1 IST} + {3655069200 0 0 GMT} + {3668374800 3600 1 IST} + {3686518800 0 0 GMT} + {3699824400 3600 1 IST} + {3717968400 0 0 GMT} + {3731274000 3600 1 IST} + {3750022800 0 0 GMT} + {3762723600 3600 1 IST} + {3781472400 0 0 GMT} + {3794173200 3600 1 IST} + {3812922000 0 0 GMT} + {3825622800 3600 1 IST} + {3844371600 0 0 GMT} + {3857677200 3600 1 IST} + {3875821200 0 0 GMT} + {3889126800 3600 1 IST} + {3907270800 0 0 GMT} + {3920576400 3600 1 IST} + {3939325200 0 0 GMT} + {3952026000 3600 1 IST} + {3970774800 0 0 GMT} + {3983475600 3600 1 IST} + {4002224400 0 0 GMT} + {4015530000 3600 1 IST} + {4033674000 0 0 GMT} + {4046979600 3600 1 IST} + {4065123600 0 0 GMT} + {4078429200 3600 1 IST} + {4096573200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Gibraltar b/inkstitch/bin/tcl/tzdata/Europe/Gibraltar new file mode 100644 index 0000000..de29c03 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Gibraltar @@ -0,0 +1,328 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Gibraltar) { + {-9223372036854775808 -1284 0 LMT} + {-2821649916 0 0 GMT} + {-1691964000 3600 1 BST} + {-1680472800 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1507500000 3600 1 BST} + {-1490565600 0 0 GMT} + {-1473631200 3600 1 BST} + {-1460930400 0 0 GMT} + {-1442786400 3600 1 BST} + {-1428876000 0 0 GMT} + {-1410732000 3600 1 BST} + {-1396216800 0 0 GMT} + {-1379282400 3600 1 BST} + {-1364767200 0 0 GMT} + {-1348437600 3600 1 BST} + {-1333317600 0 0 GMT} + {-1315778400 3600 1 BST} + {-1301263200 0 0 GMT} + {-1284328800 3600 1 BST} + {-1269813600 0 0 GMT} + {-1253484000 3600 1 BST} + {-1238364000 0 0 GMT} + {-1221429600 3600 1 BST} + {-1206914400 0 0 GMT} + {-1189980000 3600 1 BST} + {-1175464800 0 0 GMT} + {-1159135200 3600 1 BST} + {-1143410400 0 0 GMT} + {-1126476000 3600 1 BST} + {-1111960800 0 0 GMT} + {-1095631200 3600 1 BST} + {-1080511200 0 0 GMT} + {-1063576800 3600 1 BST} + {-1049061600 0 0 GMT} + {-1032127200 3600 1 BST} + {-1017612000 0 0 GMT} + {-1001282400 3600 1 BST} + {-986162400 0 0 GMT} + {-969228000 3600 1 BST} + {-950479200 0 0 GMT} + {-942012000 3600 1 BST} + {-904518000 7200 1 BDST} + {-896050800 3600 1 BST} + {-875487600 7200 1 BDST} + {-864601200 3600 1 BST} + {-844038000 7200 1 BDST} + {-832546800 3600 1 BST} + {-812588400 7200 1 BDST} + {-798073200 3600 1 BST} + {-781052400 7200 1 BDST} + {-772066800 3600 1 BST} + {-764805600 0 0 GMT} + {-748476000 3600 1 BST} + {-733356000 0 0 GMT} + {-719445600 3600 1 BST} + {-717030000 7200 1 BDST} + {-706748400 3600 1 BST} + {-699487200 0 0 GMT} + {-687996000 3600 1 BST} + {-668037600 0 0 GMT} + {-654732000 3600 1 BST} + {-636588000 0 0 GMT} + {-622072800 3600 1 BST} + {-605743200 0 0 GMT} + {-590623200 3600 1 BST} + {-574293600 0 0 GMT} + {-558568800 3600 1 BST} + {-542239200 0 0 GMT} + {-527119200 3600 1 BST} + {-512604000 0 0 GMT} + {-496274400 3600 1 BST} + {-481154400 0 0 GMT} + {-464220000 3600 1 BST} + {-449704800 0 0 GMT} + {-432165600 3600 1 BST} + {-417650400 0 0 GMT} + {-401320800 3600 0 CET} + {378687600 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Guernsey b/inkstitch/bin/tcl/tzdata/Europe/Guernsey new file mode 100644 index 0000000..4372c64 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Guernsey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Guernsey) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Helsinki b/inkstitch/bin/tcl/tzdata/Europe/Helsinki new file mode 100644 index 0000000..3abf790 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Helsinki @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Helsinki) { + {-9223372036854775808 5992 0 LMT} + {-2890258792 5992 0 HMT} + {-1535938792 7200 0 EET} + {-875671200 10800 1 EEST} + {-859863600 7200 0 EET} + {354672000 10800 1 EEST} + {370396800 7200 0 EET} + {386121600 10800 1 EEST} + {401846400 7200 0 EET} + {410220000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man b/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man new file mode 100644 index 0000000..870ac45 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Isle_of_Man) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Istanbul b/inkstitch/bin/tcl/tzdata/Europe/Istanbul new file mode 100644 index 0000000..7737d75 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Istanbul @@ -0,0 +1,304 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Istanbul) { + {-9223372036854775808 6952 0 LMT} + {-2840147752 7016 0 IMT} + {-1869875816 7200 0 EET} + {-1693706400 10800 1 EEST} + {-1680490800 7200 0 EET} + {-1570413600 10800 1 EEST} + {-1552186800 7200 0 EET} + {-1538359200 10800 1 EEST} + {-1522551600 7200 0 EET} + {-1507514400 10800 1 EEST} + {-1490583600 7200 0 EET} + {-1440208800 10800 1 EEST} + {-1428030000 7200 0 EET} + {-1409709600 10800 1 EEST} + {-1396494000 7200 0 EET} + {-931140000 10800 1 EEST} + {-922762800 7200 0 EET} + {-917834400 10800 1 EEST} + {-892436400 7200 0 EET} + {-875844000 10800 1 EEST} + {-857358000 7200 0 EET} + {-781063200 10800 1 EEST} + {-764737200 7200 0 EET} + {-744343200 10800 1 EEST} + {-733806000 7200 0 EET} + {-716436000 10800 1 EEST} + {-701924400 7200 0 EET} + {-684986400 10800 1 EEST} + {-670474800 7200 0 EET} + {-654141600 10800 1 EEST} + {-639025200 7200 0 EET} + {-621828000 10800 1 EEST} + {-606970800 7200 0 EET} + {-590032800 10800 1 EEST} + {-575434800 7200 0 EET} + {-235620000 10800 1 EEST} + {-228279600 7200 0 EET} + {-177732000 10800 1 EEST} + {-165726000 7200 0 EET} + {10533600 10800 1 EEST} + {23835600 7200 0 EET} + {41983200 10800 1 EEST} + {55285200 7200 0 EET} + {74037600 10800 1 EEST} + {87339600 7200 0 EET} + {107910000 10800 1 EEST} + {121219200 7200 0 EET} + {133920000 10800 1 EEST} + {152676000 7200 0 EET} + {165362400 10800 1 EEST} + {183502800 7200 0 EET} + {202428000 10800 1 EEST} + {215557200 7200 0 EET} + {228866400 10800 1 EEST} + {245797200 7200 0 EET} + {260316000 10800 1 EEST} + {277246800 14400 0 TRST} + {291769200 14400 1 TRST} + {308779200 10800 0 TRT} + {323827200 14400 1 TRST} + {340228800 10800 0 TRT} + {354672000 14400 1 TRST} + {371678400 10800 0 TRT} + {386121600 14400 1 TRST} + {403128000 10800 0 TRT} + {428446800 14400 1 TRST} + {433886400 10800 0 TRT} + {482792400 7200 0 EET} + {482796000 10800 1 EEST} + {496702800 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670374000 10800 1 EEST} + {686098800 7200 0 EET} + {701823600 10800 1 EEST} + {717548400 7200 0 EET} + {733273200 10800 1 EEST} + {748998000 7200 0 EET} + {764722800 10800 1 EEST} + {780447600 7200 0 EET} + {796172400 10800 1 EEST} + {811897200 7200 0 EET} + {828226800 10800 1 EEST} + {846370800 7200 0 EET} + {859676400 10800 1 EEST} + {877820400 7200 0 EET} + {891126000 10800 1 EEST} + {909270000 7200 0 EET} + {922575600 10800 1 EEST} + {941324400 7200 0 EET} + {954025200 10800 1 EEST} + {972774000 7200 0 EET} + {985474800 10800 1 EEST} + {1004223600 7200 0 EET} + {1017529200 10800 1 EEST} + {1035673200 7200 0 EET} + {1048978800 10800 1 EEST} + {1067122800 7200 0 EET} + {1080428400 10800 1 EEST} + {1099177200 7200 0 EET} + {1111878000 10800 1 EEST} + {1130626800 7200 0 EET} + {1143327600 10800 1 EEST} + {1162076400 7200 0 EET} + {1167602400 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 7200 0 EET} + {1301274000 10800 0 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Jersey b/inkstitch/bin/tcl/tzdata/Europe/Jersey new file mode 100644 index 0000000..e4da512 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Jersey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Jersey) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad b/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad new file mode 100644 index 0000000..d5be459 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad @@ -0,0 +1,84 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Kaliningrad) { + {-9223372036854775808 4920 0 LMT} + {-2422056120 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 7200 0 CET} + {-778730400 10800 1 CEST} + {-762663600 7200 0 CET} + {-757389600 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701816400 10800 1 EEST} + {717537600 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {909273600 7200 0 EET} + {922579200 10800 1 EEST} + {941328000 7200 0 EET} + {954028800 10800 1 EEST} + {972777600 7200 0 EET} + {985478400 10800 1 EEST} + {1004227200 7200 0 EET} + {1017532800 10800 1 EEST} + {1035676800 7200 0 EET} + {1048982400 10800 1 EEST} + {1067126400 7200 0 EET} + {1080432000 10800 1 EEST} + {1099180800 7200 0 EET} + {1111881600 10800 1 EEST} + {1130630400 7200 0 EET} + {1143331200 10800 1 EEST} + {1162080000 7200 0 EET} + {1174780800 10800 1 EEST} + {1193529600 7200 0 EET} + {1206835200 10800 1 EEST} + {1224979200 7200 0 EET} + {1238284800 10800 1 EEST} + {1256428800 7200 0 EET} + {1269734400 10800 1 EEST} + {1288483200 7200 0 EET} + {1301184000 10800 0 FET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Kiev b/inkstitch/bin/tcl/tzdata/Europe/Kiev new file mode 100644 index 0000000..0206be7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Kiev @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Kiev) { + {-9223372036854775808 7324 0 LMT} + {-2840148124 7324 0 KMT} + {-1441159324 7200 0 EET} + {-1247536800 10800 0 MSK} + {-892522800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-825382800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {646786800 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Lisbon b/inkstitch/bin/tcl/tzdata/Europe/Lisbon new file mode 100644 index 0000000..79c688a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Lisbon @@ -0,0 +1,351 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Lisbon) { + {-9223372036854775808 -2192 0 LMT} + {-2713908208 -2192 0 LMT} + {-1830381808 0 0 WET} + {-1689555600 3600 1 WEST} + {-1677801600 0 0 WET} + {-1667437200 3600 1 WEST} + {-1647738000 0 0 WET} + {-1635814800 3600 1 WEST} + {-1616202000 0 0 WET} + {-1604365200 3600 1 WEST} + {-1584666000 0 0 WET} + {-1572742800 3600 1 WEST} + {-1553043600 0 0 WET} + {-1541206800 3600 1 WEST} + {-1521507600 0 0 WET} + {-1442451600 3600 1 WEST} + {-1426813200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942022800 3600 1 WEST} + {-922669200 0 0 WET} + {-906944400 3600 1 WEST} + {-891133200 0 0 WET} + {-877309200 3600 1 WEST} + {-873684000 7200 1 WEMT} + {-864007200 3600 1 WEST} + {-857955600 0 0 WET} + {-845859600 3600 1 WEST} + {-842839200 7200 1 WEMT} + {-831348000 3600 1 WEST} + {-825901200 0 0 WET} + {-814410000 3600 1 WEST} + {-810784800 7200 1 WEMT} + {-799898400 3600 1 WEST} + {-794451600 0 0 WET} + {-782960400 3600 1 WEST} + {-779335200 7200 1 WEMT} + {-768448800 3600 1 WEST} + {-763002000 0 0 WET} + {-749091600 3600 1 WEST} + {-733366800 0 0 WET} + {-717631200 3600 1 WEST} + {-701906400 0 0 WET} + {-686181600 3600 1 WEST} + {-670456800 0 0 WET} + {-654732000 3600 1 WEST} + {-639007200 0 0 WET} + {-591832800 3600 1 WEST} + {-575503200 0 0 WET} + {-559778400 3600 1 WEST} + {-544053600 0 0 WET} + {-528328800 3600 1 WEST} + {-512604000 0 0 WET} + {-496879200 3600 1 WEST} + {-481154400 0 0 WET} + {-465429600 3600 1 WEST} + {-449704800 0 0 WET} + {-433980000 3600 1 WEST} + {-417650400 0 0 WET} + {-401925600 3600 1 WEST} + {-386200800 0 0 WET} + {-370476000 3600 1 WEST} + {-354751200 0 0 WET} + {-339026400 3600 1 WEST} + {-323301600 0 0 WET} + {-307576800 3600 1 WEST} + {-291852000 0 0 WET} + {-276127200 3600 1 WEST} + {-260402400 0 0 WET} + {-244677600 3600 1 WEST} + {-228348000 0 0 WET} + {-212623200 3600 1 WEST} + {-196898400 0 0 WET} + {-181173600 3600 1 WEST} + {-165448800 0 0 WET} + {-149724000 3600 1 WEST} + {-133999200 0 0 WET} + {-118274400 3600 0 CET} + {212544000 0 0 WET} + {228268800 3600 1 WEST} + {243993600 0 0 WET} + {260323200 3600 1 WEST} + {276048000 0 0 WET} + {291772800 3600 1 WEST} + {307501200 0 0 WET} + {323222400 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417578400 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 3600 0 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Ljubljana b/inkstitch/bin/tcl/tzdata/Europe/Ljubljana new file mode 100644 index 0000000..42c7df4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Ljubljana @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Ljubljana) $TZData(:Europe/Belgrade) diff --git a/inkstitch/bin/tcl/tzdata/Europe/London b/inkstitch/bin/tcl/tzdata/Europe/London new file mode 100644 index 0000000..2014e00 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/London @@ -0,0 +1,372 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/London) { + {-9223372036854775808 -75 0 LMT} + {-3852662325 0 0 GMT} + {-1691964000 3600 1 BST} + {-1680472800 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1507500000 3600 1 BST} + {-1490565600 0 0 GMT} + {-1473631200 3600 1 BST} + {-1460930400 0 0 GMT} + {-1442786400 3600 1 BST} + {-1428876000 0 0 GMT} + {-1410732000 3600 1 BST} + {-1396216800 0 0 GMT} + {-1379282400 3600 1 BST} + {-1364767200 0 0 GMT} + {-1348437600 3600 1 BST} + {-1333317600 0 0 GMT} + {-1315778400 3600 1 BST} + {-1301263200 0 0 GMT} + {-1284328800 3600 1 BST} + {-1269813600 0 0 GMT} + {-1253484000 3600 1 BST} + {-1238364000 0 0 GMT} + {-1221429600 3600 1 BST} + {-1206914400 0 0 GMT} + {-1189980000 3600 1 BST} + {-1175464800 0 0 GMT} + {-1159135200 3600 1 BST} + {-1143410400 0 0 GMT} + {-1126476000 3600 1 BST} + {-1111960800 0 0 GMT} + {-1095631200 3600 1 BST} + {-1080511200 0 0 GMT} + {-1063576800 3600 1 BST} + {-1049061600 0 0 GMT} + {-1032127200 3600 1 BST} + {-1017612000 0 0 GMT} + {-1001282400 3600 1 BST} + {-986162400 0 0 GMT} + {-969228000 3600 1 BST} + {-950479200 0 0 GMT} + {-942012000 3600 1 BST} + {-904518000 7200 1 BDST} + {-896050800 3600 1 BST} + {-875487600 7200 1 BDST} + {-864601200 3600 1 BST} + {-844038000 7200 1 BDST} + {-832546800 3600 1 BST} + {-812588400 7200 1 BDST} + {-798073200 3600 1 BST} + {-781052400 7200 1 BDST} + {-772066800 3600 1 BST} + {-764805600 0 0 GMT} + {-748476000 3600 1 BST} + {-733356000 0 0 GMT} + {-719445600 3600 1 BST} + {-717030000 7200 1 BDST} + {-706748400 3600 1 BST} + {-699487200 0 0 GMT} + {-687996000 3600 1 BST} + {-668037600 0 0 GMT} + {-654732000 3600 1 BST} + {-636588000 0 0 GMT} + {-622072800 3600 1 BST} + {-605743200 0 0 GMT} + {-590623200 3600 1 BST} + {-574293600 0 0 GMT} + {-558568800 3600 1 BST} + {-542239200 0 0 GMT} + {-527119200 3600 1 BST} + {-512604000 0 0 GMT} + {-496274400 3600 1 BST} + {-481154400 0 0 GMT} + {-464220000 3600 1 BST} + {-449704800 0 0 GMT} + {-432165600 3600 1 BST} + {-417650400 0 0 GMT} + {-401320800 3600 1 BST} + {-386200800 0 0 GMT} + {-369266400 3600 1 BST} + {-354751200 0 0 GMT} + {-337816800 3600 1 BST} + {-323301600 0 0 GMT} + {-306972000 3600 1 BST} + {-291852000 0 0 GMT} + {-276732000 3600 1 BST} + {-257983200 0 0 GMT} + {-245282400 3600 1 BST} + {-226533600 0 0 GMT} + {-213228000 3600 1 BST} + {-195084000 0 0 GMT} + {-182383200 3600 1 BST} + {-163634400 0 0 GMT} + {-150933600 3600 1 BST} + {-132184800 0 0 GMT} + {-119484000 3600 1 BST} + {-100735200 0 0 GMT} + {-88034400 3600 1 BST} + {-68680800 0 0 GMT} + {-59004000 3600 1 BST} + {-37238400 3600 0 BST} + {57722400 0 0 GMT} + {69818400 3600 1 BST} + {89172000 0 0 GMT} + {101268000 3600 1 BST} + {120621600 0 0 GMT} + {132717600 3600 1 BST} + {152071200 0 0 GMT} + {164167200 3600 1 BST} + {183520800 0 0 GMT} + {196221600 3600 1 BST} + {214970400 0 0 GMT} + {227671200 3600 1 BST} + {246420000 0 0 GMT} + {259120800 3600 1 BST} + {278474400 0 0 GMT} + {290570400 3600 1 BST} + {309924000 0 0 GMT} + {322020000 3600 1 BST} + {341373600 0 0 GMT} + {354675600 3600 1 BST} + {372819600 0 0 GMT} + {386125200 3600 1 BST} + {404269200 0 0 GMT} + {417574800 3600 1 BST} + {435718800 0 0 GMT} + {449024400 3600 1 BST} + {467773200 0 0 GMT} + {481078800 3600 1 BST} + {499222800 0 0 GMT} + {512528400 3600 1 BST} + {530672400 0 0 GMT} + {543978000 3600 1 BST} + {562122000 0 0 GMT} + {575427600 3600 1 BST} + {593571600 0 0 GMT} + {606877200 3600 1 BST} + {625626000 0 0 GMT} + {638326800 3600 1 BST} + {657075600 0 0 GMT} + {670381200 3600 1 BST} + {688525200 0 0 GMT} + {701830800 3600 1 BST} + {719974800 0 0 GMT} + {733280400 3600 1 BST} + {751424400 0 0 GMT} + {764730000 3600 1 BST} + {782874000 0 0 GMT} + {796179600 3600 1 BST} + {814323600 0 0 GMT} + {820454400 0 0 GMT} + {828234000 3600 1 BST} + {846378000 0 0 GMT} + {859683600 3600 1 BST} + {877827600 0 0 GMT} + {891133200 3600 1 BST} + {909277200 0 0 GMT} + {922582800 3600 1 BST} + {941331600 0 0 GMT} + {954032400 3600 1 BST} + {972781200 0 0 GMT} + {985482000 3600 1 BST} + {1004230800 0 0 GMT} + {1017536400 3600 1 BST} + {1035680400 0 0 GMT} + {1048986000 3600 1 BST} + {1067130000 0 0 GMT} + {1080435600 3600 1 BST} + {1099184400 0 0 GMT} + {1111885200 3600 1 BST} + {1130634000 0 0 GMT} + {1143334800 3600 1 BST} + {1162083600 0 0 GMT} + {1174784400 3600 1 BST} + {1193533200 0 0 GMT} + {1206838800 3600 1 BST} + {1224982800 0 0 GMT} + {1238288400 3600 1 BST} + {1256432400 0 0 GMT} + {1269738000 3600 1 BST} + {1288486800 0 0 GMT} + {1301187600 3600 1 BST} + {1319936400 0 0 GMT} + {1332637200 3600 1 BST} + {1351386000 0 0 GMT} + {1364691600 3600 1 BST} + {1382835600 0 0 GMT} + {1396141200 3600 1 BST} + {1414285200 0 0 GMT} + {1427590800 3600 1 BST} + {1445734800 0 0 GMT} + {1459040400 3600 1 BST} + {1477789200 0 0 GMT} + {1490490000 3600 1 BST} + {1509238800 0 0 GMT} + {1521939600 3600 1 BST} + {1540688400 0 0 GMT} + {1553994000 3600 1 BST} + {1572138000 0 0 GMT} + {1585443600 3600 1 BST} + {1603587600 0 0 GMT} + {1616893200 3600 1 BST} + {1635642000 0 0 GMT} + {1648342800 3600 1 BST} + {1667091600 0 0 GMT} + {1679792400 3600 1 BST} + {1698541200 0 0 GMT} + {1711846800 3600 1 BST} + {1729990800 0 0 GMT} + {1743296400 3600 1 BST} + {1761440400 0 0 GMT} + {1774746000 3600 1 BST} + {1792890000 0 0 GMT} + {1806195600 3600 1 BST} + {1824944400 0 0 GMT} + {1837645200 3600 1 BST} + {1856394000 0 0 GMT} + {1869094800 3600 1 BST} + {1887843600 0 0 GMT} + {1901149200 3600 1 BST} + {1919293200 0 0 GMT} + {1932598800 3600 1 BST} + {1950742800 0 0 GMT} + {1964048400 3600 1 BST} + {1982797200 0 0 GMT} + {1995498000 3600 1 BST} + {2014246800 0 0 GMT} + {2026947600 3600 1 BST} + {2045696400 0 0 GMT} + {2058397200 3600 1 BST} + {2077146000 0 0 GMT} + {2090451600 3600 1 BST} + {2108595600 0 0 GMT} + {2121901200 3600 1 BST} + {2140045200 0 0 GMT} + {2153350800 3600 1 BST} + {2172099600 0 0 GMT} + {2184800400 3600 1 BST} + {2203549200 0 0 GMT} + {2216250000 3600 1 BST} + {2234998800 0 0 GMT} + {2248304400 3600 1 BST} + {2266448400 0 0 GMT} + {2279754000 3600 1 BST} + {2297898000 0 0 GMT} + {2311203600 3600 1 BST} + {2329347600 0 0 GMT} + {2342653200 3600 1 BST} + {2361402000 0 0 GMT} + {2374102800 3600 1 BST} + {2392851600 0 0 GMT} + {2405552400 3600 1 BST} + {2424301200 0 0 GMT} + {2437606800 3600 1 BST} + {2455750800 0 0 GMT} + {2469056400 3600 1 BST} + {2487200400 0 0 GMT} + {2500506000 3600 1 BST} + {2519254800 0 0 GMT} + {2531955600 3600 1 BST} + {2550704400 0 0 GMT} + {2563405200 3600 1 BST} + {2582154000 0 0 GMT} + {2595459600 3600 1 BST} + {2613603600 0 0 GMT} + {2626909200 3600 1 BST} + {2645053200 0 0 GMT} + {2658358800 3600 1 BST} + {2676502800 0 0 GMT} + {2689808400 3600 1 BST} + {2708557200 0 0 GMT} + {2721258000 3600 1 BST} + {2740006800 0 0 GMT} + {2752707600 3600 1 BST} + {2771456400 0 0 GMT} + {2784762000 3600 1 BST} + {2802906000 0 0 GMT} + {2816211600 3600 1 BST} + {2834355600 0 0 GMT} + {2847661200 3600 1 BST} + {2866410000 0 0 GMT} + {2879110800 3600 1 BST} + {2897859600 0 0 GMT} + {2910560400 3600 1 BST} + {2929309200 0 0 GMT} + {2942010000 3600 1 BST} + {2960758800 0 0 GMT} + {2974064400 3600 1 BST} + {2992208400 0 0 GMT} + {3005514000 3600 1 BST} + {3023658000 0 0 GMT} + {3036963600 3600 1 BST} + {3055712400 0 0 GMT} + {3068413200 3600 1 BST} + {3087162000 0 0 GMT} + {3099862800 3600 1 BST} + {3118611600 0 0 GMT} + {3131917200 3600 1 BST} + {3150061200 0 0 GMT} + {3163366800 3600 1 BST} + {3181510800 0 0 GMT} + {3194816400 3600 1 BST} + {3212960400 0 0 GMT} + {3226266000 3600 1 BST} + {3245014800 0 0 GMT} + {3257715600 3600 1 BST} + {3276464400 0 0 GMT} + {3289165200 3600 1 BST} + {3307914000 0 0 GMT} + {3321219600 3600 1 BST} + {3339363600 0 0 GMT} + {3352669200 3600 1 BST} + {3370813200 0 0 GMT} + {3384118800 3600 1 BST} + {3402867600 0 0 GMT} + {3415568400 3600 1 BST} + {3434317200 0 0 GMT} + {3447018000 3600 1 BST} + {3465766800 0 0 GMT} + {3479072400 3600 1 BST} + {3497216400 0 0 GMT} + {3510522000 3600 1 BST} + {3528666000 0 0 GMT} + {3541971600 3600 1 BST} + {3560115600 0 0 GMT} + {3573421200 3600 1 BST} + {3592170000 0 0 GMT} + {3604870800 3600 1 BST} + {3623619600 0 0 GMT} + {3636320400 3600 1 BST} + {3655069200 0 0 GMT} + {3668374800 3600 1 BST} + {3686518800 0 0 GMT} + {3699824400 3600 1 BST} + {3717968400 0 0 GMT} + {3731274000 3600 1 BST} + {3750022800 0 0 GMT} + {3762723600 3600 1 BST} + {3781472400 0 0 GMT} + {3794173200 3600 1 BST} + {3812922000 0 0 GMT} + {3825622800 3600 1 BST} + {3844371600 0 0 GMT} + {3857677200 3600 1 BST} + {3875821200 0 0 GMT} + {3889126800 3600 1 BST} + {3907270800 0 0 GMT} + {3920576400 3600 1 BST} + {3939325200 0 0 GMT} + {3952026000 3600 1 BST} + {3970774800 0 0 GMT} + {3983475600 3600 1 BST} + {4002224400 0 0 GMT} + {4015530000 3600 1 BST} + {4033674000 0 0 GMT} + {4046979600 3600 1 BST} + {4065123600 0 0 GMT} + {4078429200 3600 1 BST} + {4096573200 0 0 GMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Luxembourg b/inkstitch/bin/tcl/tzdata/Europe/Luxembourg new file mode 100644 index 0000000..2a88c4b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Luxembourg @@ -0,0 +1,313 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Luxembourg) { + {-9223372036854775808 1476 0 LMT} + {-2069713476 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1662343200 7200 1 CEST} + {-1650157200 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1612659600 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585519200 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552258800 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520550000 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490572800 0 0 WET} + {-1473642000 3600 1 WEST} + {-1459119600 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427673600 0 0 WET} + {-1411866000 3600 1 WEST} + {-1396224000 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364774400 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333324800 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301270400 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269813600 0 0 WET} + {-1253484000 3600 1 WEST} + {-1238364000 0 0 WET} + {-1221429600 3600 1 WEST} + {-1206914400 0 0 WET} + {-1191189600 3600 1 WEST} + {-1175464800 0 0 WET} + {-1160344800 3600 1 WEST} + {-1143410400 0 0 WET} + {-1127685600 3600 1 WEST} + {-1111960800 0 0 WET} + {-1096840800 3600 1 WEST} + {-1080511200 0 0 WET} + {-1063576800 3600 1 WEST} + {-1049061600 0 0 WET} + {-1033336800 3600 1 WEST} + {-1017612000 0 0 WET} + {-1002492000 3600 1 WEST} + {-986162400 0 0 WET} + {-969228000 3600 1 WEST} + {-950479200 0 0 WET} + {-942012000 3600 1 WEST} + {-935186400 7200 0 WEST} + {-857257200 3600 0 WET} + {-844556400 7200 1 WEST} + {-828226800 3600 0 WET} + {-812502000 7200 1 WEST} + {-797983200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {-745455600 7200 1 CEST} + {-733273200 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Madrid b/inkstitch/bin/tcl/tzdata/Europe/Madrid new file mode 100644 index 0000000..50de14f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Madrid @@ -0,0 +1,294 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Madrid) { + {-9223372036854775808 -884 0 LMT} + {-2177451916 0 0 WET} + {-1661734800 3600 1 WEST} + {-1648429200 0 0 WET} + {-1631926800 3600 1 WEST} + {-1616893200 0 0 WET} + {-1601254800 3600 1 WEST} + {-1585357200 0 0 WET} + {-1442451600 3600 1 WEST} + {-1427677200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1029114000 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002848400 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-954118800 0 0 WET} + {-940208400 3600 1 WEST} + {-873079200 7200 1 WEMT} + {-862538400 3600 1 WEST} + {-842839200 7200 1 WEMT} + {-828237600 3600 1 WEST} + {-811389600 7200 1 WEMT} + {-796010400 3600 1 WEST} + {-779940000 7200 1 WEMT} + {-765421200 3600 1 WEST} + {-748490400 7200 1 WEMT} + {-733881600 3600 0 CET} + {-652327200 7200 1 CEST} + {-639190800 3600 0 CET} + {135122400 7200 1 CEST} + {150246000 3600 0 CET} + {167176800 7200 1 CEST} + {181695600 3600 0 CET} + {196812000 7200 1 CEST} + {212540400 3600 0 CET} + {228866400 7200 1 CEST} + {243990000 3600 0 CET} + {260402400 7200 1 CEST} + {276044400 3600 0 CET} + {283993200 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Malta b/inkstitch/bin/tcl/tzdata/Europe/Malta new file mode 100644 index 0000000..b84f68e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Malta @@ -0,0 +1,299 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Malta) { + {-9223372036854775808 3484 0 LMT} + {-2403478684 3600 0 CET} + {-1690851600 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1664758800 7200 1 CEST} + {-1649034000 3600 0 CET} + {-1635123600 7200 1 CEST} + {-1616979600 3600 0 CET} + {-1604278800 7200 1 CEST} + {-1585530000 3600 0 CET} + {-1571014800 7200 1 CEST} + {-1555290000 3600 0 CET} + {-932432400 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-766717200 3600 0 CET} + {-750898800 7200 1 CEST} + {-733359600 3600 0 CET} + {-719456400 7200 1 CEST} + {-701917200 3600 0 CET} + {-689209200 7200 1 CEST} + {-670460400 3600 0 CET} + {-114051600 7200 1 CEST} + {-103168800 3600 0 CET} + {-81997200 7200 1 CEST} + {-71719200 3600 0 CET} + {-50547600 7200 1 CEST} + {-40269600 3600 0 CET} + {-18493200 7200 1 CEST} + {-8215200 3600 0 CET} + {12956400 7200 1 CEST} + {23234400 3600 0 CET} + {43801200 7200 1 CEST} + {54687600 3600 0 CET} + {75855600 7200 1 CEST} + {86738400 3600 0 CET} + {102380400 7200 0 CEST} + {118105200 3600 0 CET} + {135730800 7200 1 CEST} + {148518000 3600 0 CET} + {167187600 7200 1 CEST} + {180489600 3600 0 CET} + {198637200 7200 1 CEST} + {211939200 3600 0 CET} + {230086800 7200 1 CEST} + {243388800 3600 0 CET} + {261536400 7200 1 CEST} + {274838400 3600 0 CET} + {292986000 7200 1 CEST} + {306288000 3600 0 CET} + {323312400 7200 1 CEST} + {338342400 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Mariehamn b/inkstitch/bin/tcl/tzdata/Europe/Mariehamn new file mode 100644 index 0000000..26d9177 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Mariehamn @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Helsinki)]} { + LoadTimeZoneFile Europe/Helsinki +} +set TZData(:Europe/Mariehamn) $TZData(:Europe/Helsinki) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Minsk b/inkstitch/bin/tcl/tzdata/Europe/Minsk new file mode 100644 index 0000000..1adcff8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Minsk @@ -0,0 +1,74 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Minsk) { + {-9223372036854775808 6616 0 LMT} + {-2840147416 6600 0 MMT} + {-1441158600 7200 0 EET} + {-1247536800 10800 0 MSK} + {-899780400 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-804646800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {670374000 10800 1 EEST} + {686102400 7200 0 EET} + {701820000 10800 1 EEST} + {717544800 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {909273600 7200 0 EET} + {922579200 10800 1 EEST} + {941328000 7200 0 EET} + {954028800 10800 1 EEST} + {972777600 7200 0 EET} + {985478400 10800 1 EEST} + {1004227200 7200 0 EET} + {1017532800 10800 1 EEST} + {1035676800 7200 0 EET} + {1048982400 10800 1 EEST} + {1067126400 7200 0 EET} + {1080432000 10800 1 EEST} + {1099180800 7200 0 EET} + {1111881600 10800 1 EEST} + {1130630400 7200 0 EET} + {1143331200 10800 1 EEST} + {1162080000 7200 0 EET} + {1174780800 10800 1 EEST} + {1193529600 7200 0 EET} + {1206835200 10800 1 EEST} + {1224979200 7200 0 EET} + {1238284800 10800 1 EEST} + {1256428800 7200 0 EET} + {1269734400 10800 1 EEST} + {1288483200 7200 0 EET} + {1301184000 10800 0 FET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Monaco b/inkstitch/bin/tcl/tzdata/Europe/Monaco new file mode 100644 index 0000000..f887b0b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Monaco @@ -0,0 +1,315 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Monaco) { + {-9223372036854775808 1772 0 LMT} + {-2486680172 561 0 PMT} + {-1855958961 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1470618000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1253494800 3600 1 WEST} + {-1238374800 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1160355600 3600 1 WEST} + {-1143421200 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942012000 3600 1 WEST} + {-904438800 7200 1 WEMT} + {-891136800 3600 1 WEST} + {-877827600 7200 1 WEMT} + {-857257200 3600 1 WEST} + {-844556400 7200 1 WEMT} + {-828226800 3600 1 WEST} + {-812502000 7200 1 WEMT} + {-796266000 3600 1 WEST} + {-781052400 7200 1 WEMT} + {-766616400 3600 0 CET} + {196819200 7200 1 CEST} + {212540400 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Moscow b/inkstitch/bin/tcl/tzdata/Europe/Moscow new file mode 100644 index 0000000..8f40741 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Moscow @@ -0,0 +1,83 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Moscow) { + {-9223372036854775808 9020 0 LMT} + {-2840149820 9000 0 MMT} + {-1688265000 9048 0 MMT} + {-1656819048 12648 1 MST} + {-1641353448 9048 0 MMT} + {-1627965048 16248 1 MDST} + {-1618716648 12648 1 MST} + {-1596429048 16248 1 MDST} + {-1593822648 14400 0 MSD} + {-1589860800 10800 0 MSK} + {-1542427200 14400 1 MSD} + {-1539493200 18000 1 MSD} + {-1525323600 14400 1 MSD} + {-1522728000 10800 0 MSK} + {-1491188400 7200 0 EET} + {-1247536800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {695779200 10800 0 MSD} + {701812800 14400 1 MSD} + {717534000 10800 0 MSK} + {733273200 14400 1 MSD} + {748998000 10800 0 MSK} + {764722800 14400 1 MSD} + {780447600 10800 0 MSK} + {796172400 14400 1 MSD} + {811897200 10800 0 MSK} + {828226800 14400 1 MSD} + {846370800 10800 0 MSK} + {859676400 14400 1 MSD} + {877820400 10800 0 MSK} + {891126000 14400 1 MSD} + {909270000 10800 0 MSK} + {922575600 14400 1 MSD} + {941324400 10800 0 MSK} + {954025200 14400 1 MSD} + {972774000 10800 0 MSK} + {985474800 14400 1 MSD} + {1004223600 10800 0 MSK} + {1017529200 14400 1 MSD} + {1035673200 10800 0 MSK} + {1048978800 14400 1 MSD} + {1067122800 10800 0 MSK} + {1080428400 14400 1 MSD} + {1099177200 10800 0 MSK} + {1111878000 14400 1 MSD} + {1130626800 10800 0 MSK} + {1143327600 14400 1 MSD} + {1162076400 10800 0 MSK} + {1174777200 14400 1 MSD} + {1193526000 10800 0 MSK} + {1206831600 14400 1 MSD} + {1224975600 10800 0 MSK} + {1238281200 14400 1 MSD} + {1256425200 10800 0 MSK} + {1269730800 14400 1 MSD} + {1288479600 10800 0 MSK} + {1301180400 14400 0 MSK} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Nicosia b/inkstitch/bin/tcl/tzdata/Europe/Nicosia new file mode 100644 index 0000000..2d58355 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Nicosia @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Nicosia)]} { + LoadTimeZoneFile Asia/Nicosia +} +set TZData(:Europe/Nicosia) $TZData(:Asia/Nicosia) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Oslo b/inkstitch/bin/tcl/tzdata/Europe/Oslo new file mode 100644 index 0000000..6787c1e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Oslo @@ -0,0 +1,271 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Oslo) { + {-9223372036854775808 2580 0 LMT} + {-2366757780 3600 0 CET} + {-1691884800 7200 1 CEST} + {-1680573600 3600 0 CET} + {-927511200 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-765327600 3600 0 CET} + {-340844400 7200 1 CEST} + {-324514800 3600 0 CET} + {-308790000 7200 1 CEST} + {-293065200 3600 0 CET} + {-277340400 7200 1 CEST} + {-261615600 3600 0 CET} + {-245890800 7200 1 CEST} + {-230166000 3600 0 CET} + {-214441200 7200 1 CEST} + {-198716400 3600 0 CET} + {-182991600 7200 1 CEST} + {-166662000 3600 0 CET} + {-147913200 7200 1 CEST} + {-135212400 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Paris b/inkstitch/bin/tcl/tzdata/Europe/Paris new file mode 100644 index 0000000..4b22a09 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Paris @@ -0,0 +1,314 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Paris) { + {-9223372036854775808 561 0 LMT} + {-2486678901 561 0 PMT} + {-1855958901 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1470618000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1253494800 3600 1 WEST} + {-1238374800 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1160355600 3600 1 WEST} + {-1143421200 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942012000 3600 1 WEST} + {-932436000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-800067600 7200 0 WEMT} + {-796266000 3600 1 WEST} + {-781052400 7200 1 WEMT} + {-766616400 3600 0 CET} + {196819200 7200 1 CEST} + {212540400 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Podgorica b/inkstitch/bin/tcl/tzdata/Europe/Podgorica new file mode 100644 index 0000000..f4f9066 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Podgorica @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Podgorica) $TZData(:Europe/Belgrade) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Prague b/inkstitch/bin/tcl/tzdata/Europe/Prague new file mode 100644 index 0000000..222b1ae --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Prague @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Prague) { + {-9223372036854775808 3464 0 LMT} + {-3786829064 3464 0 PMT} + {-2469401864 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-798073200 3600 0 CET} + {-780534000 7200 1 CEST} + {-761180400 3600 0 CET} + {-746578800 7200 1 CEST} + {-733359600 3600 0 CET} + {-716425200 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654217200 7200 1 CEST} + {-639010800 3600 0 CET} + {283993200 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Riga b/inkstitch/bin/tcl/tzdata/Europe/Riga new file mode 100644 index 0000000..9fad0f8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Riga @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Riga) { + {-9223372036854775808 5784 0 LMT} + {-2840146584 5784 0 RMT} + {-1632008184 9384 1 LST} + {-1618702584 5784 0 RMT} + {-1601681784 9384 1 LST} + {-1597275384 5784 0 RMT} + {-1377308184 7200 0 EET} + {-928029600 10800 0 MSK} + {-899521200 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-795834000 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {843955200 7200 0 EET} + {853797600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {951775200 7200 0 EET} + {978386400 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Rome b/inkstitch/bin/tcl/tzdata/Europe/Rome new file mode 100644 index 0000000..64948b8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Rome @@ -0,0 +1,301 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Rome) { + {-9223372036854775808 2996 0 LMT} + {-3259097396 2996 0 RMT} + {-2403564596 3600 0 CET} + {-1690851600 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1664758800 7200 1 CEST} + {-1649034000 3600 0 CET} + {-1635123600 7200 1 CEST} + {-1616979600 3600 0 CET} + {-1604278800 7200 1 CEST} + {-1585530000 3600 0 CET} + {-1571014800 7200 1 CEST} + {-1555290000 3600 0 CET} + {-932432400 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-804819600 3600 0 CET} + {-798080400 3600 0 CET} + {-781052400 7200 1 CEST} + {-766717200 3600 0 CET} + {-750898800 7200 1 CEST} + {-733359600 3600 0 CET} + {-719456400 7200 1 CEST} + {-701917200 3600 0 CET} + {-689209200 7200 1 CEST} + {-670460400 3600 0 CET} + {-114051600 7200 1 CEST} + {-103168800 3600 0 CET} + {-81997200 7200 1 CEST} + {-71719200 3600 0 CET} + {-50547600 7200 1 CEST} + {-40269600 3600 0 CET} + {-18493200 7200 1 CEST} + {-8215200 3600 0 CET} + {12956400 7200 1 CEST} + {23234400 3600 0 CET} + {43801200 7200 1 CEST} + {54687600 3600 0 CET} + {75855600 7200 1 CEST} + {86738400 3600 0 CET} + {107910000 7200 1 CEST} + {118188000 3600 0 CET} + {138754800 7200 1 CEST} + {149637600 3600 0 CET} + {170809200 7200 1 CEST} + {181090800 3600 0 CET} + {202258800 7200 1 CEST} + {212540400 3600 0 CET} + {233103600 7200 1 CEST} + {243990000 3600 0 CET} + {265158000 7200 1 CEST} + {276044400 3600 0 CET} + {296607600 7200 1 CEST} + {307494000 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Samara b/inkstitch/bin/tcl/tzdata/Europe/Samara new file mode 100644 index 0000000..f2ac911 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Samara @@ -0,0 +1,73 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Samara) { + {-9223372036854775808 12036 0 LMT} + {-1593825636 10800 0 SAMT} + {-1247540400 14400 0 SAMT} + {-1102305600 14400 0 KUYMMTT} + {354916800 18000 1 KUYST} + {370724400 14400 0 KUYT} + {386452800 18000 1 KUYST} + {402260400 14400 0 KUYT} + {417988800 18000 1 KUYST} + {433796400 14400 0 KUYT} + {449611200 18000 1 KUYST} + {465343200 14400 0 KUYT} + {481068000 18000 1 KUYST} + {496792800 14400 0 KUYT} + {512517600 18000 1 KUYST} + {528242400 14400 0 KUYT} + {543967200 18000 1 KUYST} + {559692000 14400 0 KUYT} + {575416800 18000 1 KUYST} + {591141600 14400 0 KUYT} + {606866400 10800 0 KUYMMTT} + {606870000 14400 1 KUYST} + {622594800 10800 0 KUYT} + {638319600 14400 1 KUYST} + {654649200 10800 0 KUYT} + {670374000 7200 0 KUYMMTT} + {670377600 10800 1 KUYST} + {686102400 10800 0 KUYT} + {687916800 14400 0 SAMT} + {701809200 18000 1 SAMST} + {717530400 14400 0 SAMT} + {733269600 18000 1 SAMST} + {748994400 14400 0 SAMT} + {764719200 18000 1 SAMST} + {780444000 14400 0 SAMT} + {796168800 18000 1 SAMST} + {811893600 14400 0 SAMT} + {828223200 18000 1 SAMST} + {846367200 14400 0 SAMT} + {859672800 18000 1 SAMST} + {877816800 14400 0 SAMT} + {891122400 18000 1 SAMST} + {909266400 14400 0 SAMT} + {922572000 18000 1 SAMST} + {941320800 14400 0 SAMT} + {954021600 18000 1 SAMST} + {972770400 14400 0 SAMT} + {985471200 18000 1 SAMST} + {1004220000 14400 0 SAMT} + {1017525600 18000 1 SAMST} + {1035669600 14400 0 SAMT} + {1048975200 18000 1 SAMST} + {1067119200 14400 0 SAMT} + {1080424800 18000 1 SAMST} + {1099173600 14400 0 SAMT} + {1111874400 18000 1 SAMST} + {1130623200 14400 0 SAMT} + {1143324000 18000 1 SAMST} + {1162072800 14400 0 SAMT} + {1174773600 18000 1 SAMST} + {1193522400 14400 0 SAMT} + {1206828000 18000 1 SAMST} + {1224972000 14400 0 SAMT} + {1238277600 18000 1 SAMST} + {1256421600 14400 0 SAMT} + {1269727200 10800 0 SAMMMTT} + {1269730800 14400 1 SAMST} + {1288479600 10800 0 SAMT} + {1301180400 14400 0 SAMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/San_Marino b/inkstitch/bin/tcl/tzdata/Europe/San_Marino new file mode 100644 index 0000000..927ad29 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/San_Marino @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Rome)]} { + LoadTimeZoneFile Europe/Rome +} +set TZData(:Europe/San_Marino) $TZData(:Europe/Rome) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Sarajevo b/inkstitch/bin/tcl/tzdata/Europe/Sarajevo new file mode 100644 index 0000000..1b14286 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Sarajevo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Sarajevo) $TZData(:Europe/Belgrade) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Simferopol b/inkstitch/bin/tcl/tzdata/Europe/Simferopol new file mode 100644 index 0000000..9836560 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Simferopol @@ -0,0 +1,253 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Simferopol) { + {-9223372036854775808 8184 0 LMT} + {-2840148984 8160 0 SMT} + {-1441160160 7200 0 EET} + {-1247536800 10800 0 MSK} + {-888894000 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-811645200 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {646786800 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {767743200 14400 0 MSD} + {780436800 10800 0 MSK} + {796165200 14400 1 MSD} + {811886400 10800 0 MSK} + {828219600 14400 1 MSD} + {828230400 14400 1 MSD} + {852066000 10800 0 MSK} + {859683600 10800 0 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Skopje b/inkstitch/bin/tcl/tzdata/Europe/Skopje new file mode 100644 index 0000000..07eedbe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Skopje @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Skopje) $TZData(:Europe/Belgrade) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Sofia b/inkstitch/bin/tcl/tzdata/Europe/Sofia new file mode 100644 index 0000000..8fd55f6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Sofia @@ -0,0 +1,259 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Sofia) { + {-9223372036854775808 5596 0 LMT} + {-2840146396 7016 0 IMT} + {-2369527016 7200 0 EET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-781048800 7200 0 EET} + {291762000 10800 0 EEST} + {307576800 7200 0 EET} + {323816400 10800 1 EEST} + {339026400 7200 0 EET} + {355266000 10800 1 EEST} + {370393200 7200 0 EET} + {386715600 10800 1 EEST} + {401842800 10800 0 EEST} + {401846400 7200 0 EET} + {417571200 10800 1 EEST} + {433296000 7200 0 EET} + {449020800 10800 1 EEST} + {465350400 7200 0 EET} + {481075200 10800 1 EEST} + {496800000 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {662680800 7200 0 EET} + {670370400 10800 1 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Stockholm b/inkstitch/bin/tcl/tzdata/Europe/Stockholm new file mode 100644 index 0000000..b74d327 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Stockholm @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Stockholm) { + {-9223372036854775808 4332 0 LMT} + {-2871681132 3614 0 SET} + {-2208992414 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680483600 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Tallinn b/inkstitch/bin/tcl/tzdata/Europe/Tallinn new file mode 100644 index 0000000..17f14e6 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Tallinn @@ -0,0 +1,255 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Tallinn) { + {-9223372036854775808 5940 0 LMT} + {-2840146740 5940 0 TMT} + {-1638322740 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1593824400 5940 0 TMT} + {-1535938740 7200 0 EET} + {-927943200 10800 0 MSK} + {-892954800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-797648400 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {906415200 10800 0 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {941407200 7200 0 EET} + {1014242400 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Tirane b/inkstitch/bin/tcl/tzdata/Europe/Tirane new file mode 100644 index 0000000..14ace2e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Tirane @@ -0,0 +1,263 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Tirane) { + {-9223372036854775808 4760 0 LMT} + {-1767230360 3600 0 CET} + {-932346000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-843519600 3600 0 CET} + {136854000 7200 1 CEST} + {149896800 3600 0 CET} + {168130800 7200 1 CEST} + {181432800 3600 0 CET} + {199839600 7200 1 CEST} + {213141600 3600 0 CET} + {231894000 7200 1 CEST} + {244591200 3600 0 CET} + {263257200 7200 1 CEST} + {276040800 3600 0 CET} + {294706800 7200 1 CEST} + {307490400 3600 0 CET} + {326156400 7200 1 CEST} + {339458400 3600 0 CET} + {357087600 7200 1 CEST} + {370389600 3600 0 CET} + {389142000 7200 1 CEST} + {402444000 3600 0 CET} + {419468400 7200 1 CEST} + {433807200 3600 0 CET} + {449622000 7200 1 CEST} + {457480800 7200 0 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Tiraspol b/inkstitch/bin/tcl/tzdata/Europe/Tiraspol new file mode 100644 index 0000000..ea8f671 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Tiraspol @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Chisinau)]} { + LoadTimeZoneFile Europe/Chisinau +} +set TZData(:Europe/Tiraspol) $TZData(:Europe/Chisinau) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod b/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod new file mode 100644 index 0000000..f6e580b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod @@ -0,0 +1,254 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Uzhgorod) { + {-9223372036854775808 5352 0 LMT} + {-2500939752 3600 0 CET} + {-946774800 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796870800 7200 1 CEST} + {-794714400 3600 0 CET} + {-773456400 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {646786800 3600 0 CET} + {670384800 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Vaduz b/inkstitch/bin/tcl/tzdata/Europe/Vaduz new file mode 100644 index 0000000..3118331 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Vaduz @@ -0,0 +1,245 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Vaduz) { + {-9223372036854775808 2284 0 LMT} + {-2385247084 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Vatican b/inkstitch/bin/tcl/tzdata/Europe/Vatican new file mode 100644 index 0000000..fe50765 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Vatican @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Rome)]} { + LoadTimeZoneFile Europe/Rome +} +set TZData(:Europe/Vatican) $TZData(:Europe/Rome) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Vienna b/inkstitch/bin/tcl/tzdata/Europe/Vienna new file mode 100644 index 0000000..95283eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Vienna @@ -0,0 +1,271 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Vienna) { + {-9223372036854775808 3921 0 LMT} + {-2422055121 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1577926800 3600 0 CET} + {-1569711600 7200 1 CEST} + {-1555801200 3600 0 CET} + {-938905200 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-780188400 3600 0 CET} + {-757386000 3600 0 CET} + {-748479600 7200 1 CEST} + {-733359600 3600 0 CET} + {-717634800 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {323823600 7200 1 CEST} + {338940000 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Vilnius b/inkstitch/bin/tcl/tzdata/Europe/Vilnius new file mode 100644 index 0000000..62d5d87 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Vilnius @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Vilnius) { + {-9223372036854775808 6076 0 LMT} + {-2840146876 5040 0 WMT} + {-1672536240 5736 0 KMT} + {-1585100136 3600 0 CET} + {-1561251600 7200 0 EET} + {-1553565600 3600 0 CET} + {-928198800 10800 0 MSK} + {-900126000 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-802141200 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {883605600 7200 0 EET} + {891133200 7200 0 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 7200 0 EET} + {1041372000 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Volgograd b/inkstitch/bin/tcl/tzdata/Europe/Volgograd new file mode 100644 index 0000000..c3f148f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Volgograd @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Volgograd) { + {-9223372036854775808 10660 0 LMT} + {-1577761060 10800 0 TSAT} + {-1411873200 10800 0 STAT} + {-1247540400 14400 0 STAT} + {-256881600 14400 0 VOLMMTT} + {354916800 18000 1 VOLST} + {370724400 14400 0 VOLT} + {386452800 18000 1 VOLST} + {402260400 14400 0 VOLT} + {417988800 18000 1 VOLST} + {433796400 14400 0 VOLT} + {449611200 18000 1 VOLST} + {465343200 14400 0 VOLT} + {481068000 18000 1 VOLST} + {496792800 14400 0 VOLT} + {512517600 18000 1 VOLST} + {528242400 14400 0 VOLT} + {543967200 18000 1 VOLST} + {559692000 14400 0 VOLT} + {575416800 18000 1 VOLST} + {591141600 14400 0 VOLT} + {606866400 10800 0 VOLMMTT} + {606870000 14400 1 VOLST} + {622594800 10800 0 VOLT} + {638319600 14400 1 VOLST} + {654649200 10800 0 VOLT} + {670374000 14400 0 VOLT} + {701820000 14400 0 VOLST} + {717534000 10800 0 VOLT} + {733273200 14400 1 VOLST} + {748998000 10800 0 VOLT} + {764722800 14400 1 VOLST} + {780447600 10800 0 VOLT} + {796172400 14400 1 VOLST} + {811897200 10800 0 VOLT} + {828226800 14400 1 VOLST} + {846370800 10800 0 VOLT} + {859676400 14400 1 VOLST} + {877820400 10800 0 VOLT} + {891126000 14400 1 VOLST} + {909270000 10800 0 VOLT} + {922575600 14400 1 VOLST} + {941324400 10800 0 VOLT} + {954025200 14400 1 VOLST} + {972774000 10800 0 VOLT} + {985474800 14400 1 VOLST} + {1004223600 10800 0 VOLT} + {1017529200 14400 1 VOLST} + {1035673200 10800 0 VOLT} + {1048978800 14400 1 VOLST} + {1067122800 10800 0 VOLT} + {1080428400 14400 1 VOLST} + {1099177200 10800 0 VOLT} + {1111878000 14400 1 VOLST} + {1130626800 10800 0 VOLT} + {1143327600 14400 1 VOLST} + {1162076400 10800 0 VOLT} + {1174777200 14400 1 VOLST} + {1193526000 10800 0 VOLT} + {1206831600 14400 1 VOLST} + {1224975600 10800 0 VOLT} + {1238281200 14400 1 VOLST} + {1256425200 10800 0 VOLT} + {1269730800 14400 1 VOLST} + {1288479600 10800 0 VOLT} + {1301180400 14400 0 VOLT} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Warsaw b/inkstitch/bin/tcl/tzdata/Europe/Warsaw new file mode 100644 index 0000000..6288a8a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Warsaw @@ -0,0 +1,296 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Warsaw) { + {-9223372036854775808 5040 0 LMT} + {-2840145840 5040 0 WMT} + {-1717032240 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618696800 7200 0 EET} + {-1600473600 10800 1 EEST} + {-1587168000 7200 0 EET} + {-931734000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796870800 7200 0 CEST} + {-796608000 3600 0 CET} + {-778726800 7200 1 CEST} + {-762660000 3600 0 CET} + {-748486800 7200 1 CEST} + {-733273200 3600 0 CET} + {-715215600 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {-397094400 7200 1 CEST} + {-386812800 3600 0 CET} + {-371088000 7200 1 CEST} + {-355363200 3600 0 CET} + {-334195200 7200 1 CEST} + {-323308800 3600 0 CET} + {-307584000 7200 1 CEST} + {-291859200 3600 0 CET} + {-271296000 7200 1 CEST} + {-260409600 3600 0 CET} + {-239846400 7200 1 CEST} + {-228960000 3600 0 CET} + {-208396800 7200 1 CEST} + {-197510400 3600 0 CET} + {-176342400 7200 1 CEST} + {-166060800 3600 0 CET} + {220921200 3600 0 CET} + {228873600 7200 1 CEST} + {243993600 3600 0 CET} + {260323200 7200 1 CEST} + {276048000 3600 0 CET} + {291772800 7200 1 CEST} + {307497600 3600 0 CET} + {323827200 7200 1 CEST} + {338947200 3600 0 CET} + {354672000 7200 1 CEST} + {370396800 3600 0 CET} + {386121600 7200 1 CEST} + {401846400 3600 0 CET} + {417571200 7200 1 CEST} + {433296000 3600 0 CET} + {449020800 7200 1 CEST} + {465350400 3600 0 CET} + {481075200 7200 1 CEST} + {496800000 3600 0 CET} + {512524800 7200 1 CEST} + {528249600 3600 0 CET} + {543974400 7200 1 CEST} + {559699200 3600 0 CET} + {567990000 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Zagreb b/inkstitch/bin/tcl/tzdata/Europe/Zagreb new file mode 100644 index 0000000..46319a4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Zagreb @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Zagreb) $TZData(:Europe/Belgrade) diff --git a/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye b/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye new file mode 100644 index 0000000..01418cd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Zaporozhye) { + {-9223372036854775808 8440 0 LMT} + {-2840149240 8400 0 CUT} + {-1441160400 7200 0 EET} + {-1247536800 10800 0 MSK} + {-894769200 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-826419600 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 10800 0 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/inkstitch/bin/tcl/tzdata/Europe/Zurich b/inkstitch/bin/tcl/tzdata/Europe/Zurich new file mode 100644 index 0000000..33831c3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Europe/Zurich @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Zurich) { + {-9223372036854775808 2048 0 LMT} + {-3827954048 1784 0 BMT} + {-2385246584 3600 0 CET} + {-904435200 7200 1 CEST} + {-891129600 3600 0 CET} + {-872985600 7200 1 CEST} + {-859680000 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/inkstitch/bin/tcl/tzdata/GB b/inkstitch/bin/tcl/tzdata/GB new file mode 100644 index 0000000..72d77ee --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GB @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:GB) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/GB-Eire b/inkstitch/bin/tcl/tzdata/GB-Eire new file mode 100644 index 0000000..1622417 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GB-Eire @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:GB-Eire) $TZData(:Europe/London) diff --git a/inkstitch/bin/tcl/tzdata/GMT b/inkstitch/bin/tcl/tzdata/GMT new file mode 100644 index 0000000..4258564 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GMT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/GMT+0 b/inkstitch/bin/tcl/tzdata/GMT+0 new file mode 100644 index 0000000..a1e8126 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GMT+0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT+0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/GMT-0 b/inkstitch/bin/tcl/tzdata/GMT-0 new file mode 100644 index 0000000..04ccafe --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GMT-0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT-0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/GMT0 b/inkstitch/bin/tcl/tzdata/GMT0 new file mode 100644 index 0000000..92e95a3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/GMT0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT0) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/Greenwich b/inkstitch/bin/tcl/tzdata/Greenwich new file mode 100644 index 0000000..6115233 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Greenwich @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Greenwich) $TZData(:Etc/GMT) diff --git a/inkstitch/bin/tcl/tzdata/HST b/inkstitch/bin/tcl/tzdata/HST new file mode 100644 index 0000000..fea7f14 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/HST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:HST) { + {-9223372036854775808 -36000 0 HST} +} diff --git a/inkstitch/bin/tcl/tzdata/Hongkong b/inkstitch/bin/tcl/tzdata/Hongkong new file mode 100644 index 0000000..f9d4dac --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Hongkong @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Hong_Kong)]} { + LoadTimeZoneFile Asia/Hong_Kong +} +set TZData(:Hongkong) $TZData(:Asia/Hong_Kong) diff --git a/inkstitch/bin/tcl/tzdata/Iceland b/inkstitch/bin/tcl/tzdata/Iceland new file mode 100644 index 0000000..eb3f3eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Iceland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Atlantic/Reykjavik)]} { + LoadTimeZoneFile Atlantic/Reykjavik +} +set TZData(:Iceland) $TZData(:Atlantic/Reykjavik) diff --git a/inkstitch/bin/tcl/tzdata/Indian/Antananarivo b/inkstitch/bin/tcl/tzdata/Indian/Antananarivo new file mode 100644 index 0000000..217715e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Antananarivo @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Antananarivo) { + {-9223372036854775808 11404 0 LMT} + {-1846293004 10800 0 EAT} + {-499924800 14400 1 EAST} + {-492062400 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Chagos b/inkstitch/bin/tcl/tzdata/Indian/Chagos new file mode 100644 index 0000000..a5cec61 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Chagos @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Chagos) { + {-9223372036854775808 17380 0 LMT} + {-1988167780 18000 0 IOT} + {820436400 21600 0 IOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Christmas b/inkstitch/bin/tcl/tzdata/Indian/Christmas new file mode 100644 index 0000000..c36e973 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Christmas @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Christmas) { + {-9223372036854775808 25372 0 LMT} + {-2364102172 25200 0 CXT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Cocos b/inkstitch/bin/tcl/tzdata/Indian/Cocos new file mode 100644 index 0000000..a63ae68 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Cocos @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Cocos) { + {-9223372036854775808 23260 0 LMT} + {-2209012060 23400 0 CCT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Comoro b/inkstitch/bin/tcl/tzdata/Indian/Comoro new file mode 100644 index 0000000..0b3c33a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Comoro @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Comoro) { + {-9223372036854775808 10384 0 LMT} + {-1846291984 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Kerguelen b/inkstitch/bin/tcl/tzdata/Indian/Kerguelen new file mode 100644 index 0000000..b41b85a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Kerguelen @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Kerguelen) { + {-9223372036854775808 0 0 zzz} + {-631152000 18000 0 TFT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Mahe b/inkstitch/bin/tcl/tzdata/Indian/Mahe new file mode 100644 index 0000000..c88a24b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Mahe @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Mahe) { + {-9223372036854775808 13308 0 LMT} + {-2006653308 14400 0 SCT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Maldives b/inkstitch/bin/tcl/tzdata/Indian/Maldives new file mode 100644 index 0000000..2c2c739 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Maldives @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Maldives) { + {-9223372036854775808 17640 0 LMT} + {-2840158440 17640 0 MMT} + {-315636840 18000 0 MVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Mauritius b/inkstitch/bin/tcl/tzdata/Indian/Mauritius new file mode 100644 index 0000000..a9c07eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Mauritius @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Mauritius) { + {-9223372036854775808 13800 0 LMT} + {-1988164200 14400 0 MUT} + {403041600 18000 1 MUST} + {417034800 14400 0 MUT} + {1224972000 18000 1 MUST} + {1238274000 14400 0 MUT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Mayotte b/inkstitch/bin/tcl/tzdata/Indian/Mayotte new file mode 100644 index 0000000..0fe5f56 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Mayotte @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Mayotte) { + {-9223372036854775808 10856 0 LMT} + {-1846292456 10800 0 EAT} +} diff --git a/inkstitch/bin/tcl/tzdata/Indian/Reunion b/inkstitch/bin/tcl/tzdata/Indian/Reunion new file mode 100644 index 0000000..de2dd60 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Indian/Reunion @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Reunion) { + {-9223372036854775808 13312 0 LMT} + {-1848886912 14400 0 RET} +} diff --git a/inkstitch/bin/tcl/tzdata/Iran b/inkstitch/bin/tcl/tzdata/Iran new file mode 100644 index 0000000..e200b4d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Iran @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Tehran)]} { + LoadTimeZoneFile Asia/Tehran +} +set TZData(:Iran) $TZData(:Asia/Tehran) diff --git a/inkstitch/bin/tcl/tzdata/Israel b/inkstitch/bin/tcl/tzdata/Israel new file mode 100644 index 0000000..af521f5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Israel @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Jerusalem)]} { + LoadTimeZoneFile Asia/Jerusalem +} +set TZData(:Israel) $TZData(:Asia/Jerusalem) diff --git a/inkstitch/bin/tcl/tzdata/Jamaica b/inkstitch/bin/tcl/tzdata/Jamaica new file mode 100644 index 0000000..ddb5d45 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Jamaica @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Jamaica)]} { + LoadTimeZoneFile America/Jamaica +} +set TZData(:Jamaica) $TZData(:America/Jamaica) diff --git a/inkstitch/bin/tcl/tzdata/Japan b/inkstitch/bin/tcl/tzdata/Japan new file mode 100644 index 0000000..428a79f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Japan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Tokyo)]} { + LoadTimeZoneFile Asia/Tokyo +} +set TZData(:Japan) $TZData(:Asia/Tokyo) diff --git a/inkstitch/bin/tcl/tzdata/Kwajalein b/inkstitch/bin/tcl/tzdata/Kwajalein new file mode 100644 index 0000000..586db6d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Kwajalein @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Kwajalein)]} { + LoadTimeZoneFile Pacific/Kwajalein +} +set TZData(:Kwajalein) $TZData(:Pacific/Kwajalein) diff --git a/inkstitch/bin/tcl/tzdata/Libya b/inkstitch/bin/tcl/tzdata/Libya new file mode 100644 index 0000000..6cd77e1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Libya @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Tripoli)]} { + LoadTimeZoneFile Africa/Tripoli +} +set TZData(:Libya) $TZData(:Africa/Tripoli) diff --git a/inkstitch/bin/tcl/tzdata/MET b/inkstitch/bin/tcl/tzdata/MET new file mode 100644 index 0000000..8789c97 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/MET @@ -0,0 +1,265 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MET) { + {-9223372036854775808 3600 0 MET} + {-1693706400 7200 1 MEST} + {-1680483600 3600 0 MET} + {-1663455600 7200 1 MEST} + {-1650150000 3600 0 MET} + {-1632006000 7200 1 MEST} + {-1618700400 3600 0 MET} + {-938905200 7200 1 MEST} + {-857257200 3600 0 MET} + {-844556400 7200 1 MEST} + {-828226800 3600 0 MET} + {-812502000 7200 1 MEST} + {-796777200 3600 0 MET} + {-781052400 7200 1 MEST} + {-766623600 3600 0 MET} + {228877200 7200 1 MEST} + {243997200 3600 0 MET} + {260326800 7200 1 MEST} + {276051600 3600 0 MET} + {291776400 7200 1 MEST} + {307501200 3600 0 MET} + {323830800 7200 1 MEST} + {338950800 3600 0 MET} + {354675600 7200 1 MEST} + {370400400 3600 0 MET} + {386125200 7200 1 MEST} + {401850000 3600 0 MET} + {417574800 7200 1 MEST} + {433299600 3600 0 MET} + {449024400 7200 1 MEST} + {465354000 3600 0 MET} + {481078800 7200 1 MEST} + {496803600 3600 0 MET} + {512528400 7200 1 MEST} + {528253200 3600 0 MET} + {543978000 7200 1 MEST} + {559702800 3600 0 MET} + {575427600 7200 1 MEST} + {591152400 3600 0 MET} + {606877200 7200 1 MEST} + {622602000 3600 0 MET} + {638326800 7200 1 MEST} + {654656400 3600 0 MET} + {670381200 7200 1 MEST} + {686106000 3600 0 MET} + {701830800 7200 1 MEST} + {717555600 3600 0 MET} + {733280400 7200 1 MEST} + {749005200 3600 0 MET} + {764730000 7200 1 MEST} + {780454800 3600 0 MET} + {796179600 7200 1 MEST} + {811904400 3600 0 MET} + {828234000 7200 1 MEST} + {846378000 3600 0 MET} + {859683600 7200 1 MEST} + {877827600 3600 0 MET} + {891133200 7200 1 MEST} + {909277200 3600 0 MET} + {922582800 7200 1 MEST} + {941331600 3600 0 MET} + {954032400 7200 1 MEST} + {972781200 3600 0 MET} + {985482000 7200 1 MEST} + {1004230800 3600 0 MET} + {1017536400 7200 1 MEST} + {1035680400 3600 0 MET} + {1048986000 7200 1 MEST} + {1067130000 3600 0 MET} + {1080435600 7200 1 MEST} + {1099184400 3600 0 MET} + {1111885200 7200 1 MEST} + {1130634000 3600 0 MET} + {1143334800 7200 1 MEST} + {1162083600 3600 0 MET} + {1174784400 7200 1 MEST} + {1193533200 3600 0 MET} + {1206838800 7200 1 MEST} + {1224982800 3600 0 MET} + {1238288400 7200 1 MEST} + {1256432400 3600 0 MET} + {1269738000 7200 1 MEST} + {1288486800 3600 0 MET} + {1301187600 7200 1 MEST} + {1319936400 3600 0 MET} + {1332637200 7200 1 MEST} + {1351386000 3600 0 MET} + {1364691600 7200 1 MEST} + {1382835600 3600 0 MET} + {1396141200 7200 1 MEST} + {1414285200 3600 0 MET} + {1427590800 7200 1 MEST} + {1445734800 3600 0 MET} + {1459040400 7200 1 MEST} + {1477789200 3600 0 MET} + {1490490000 7200 1 MEST} + {1509238800 3600 0 MET} + {1521939600 7200 1 MEST} + {1540688400 3600 0 MET} + {1553994000 7200 1 MEST} + {1572138000 3600 0 MET} + {1585443600 7200 1 MEST} + {1603587600 3600 0 MET} + {1616893200 7200 1 MEST} + {1635642000 3600 0 MET} + {1648342800 7200 1 MEST} + {1667091600 3600 0 MET} + {1679792400 7200 1 MEST} + {1698541200 3600 0 MET} + {1711846800 7200 1 MEST} + {1729990800 3600 0 MET} + {1743296400 7200 1 MEST} + {1761440400 3600 0 MET} + {1774746000 7200 1 MEST} + {1792890000 3600 0 MET} + {1806195600 7200 1 MEST} + {1824944400 3600 0 MET} + {1837645200 7200 1 MEST} + {1856394000 3600 0 MET} + {1869094800 7200 1 MEST} + {1887843600 3600 0 MET} + {1901149200 7200 1 MEST} + {1919293200 3600 0 MET} + {1932598800 7200 1 MEST} + {1950742800 3600 0 MET} + {1964048400 7200 1 MEST} + {1982797200 3600 0 MET} + {1995498000 7200 1 MEST} + {2014246800 3600 0 MET} + {2026947600 7200 1 MEST} + {2045696400 3600 0 MET} + {2058397200 7200 1 MEST} + {2077146000 3600 0 MET} + {2090451600 7200 1 MEST} + {2108595600 3600 0 MET} + {2121901200 7200 1 MEST} + {2140045200 3600 0 MET} + {2153350800 7200 1 MEST} + {2172099600 3600 0 MET} + {2184800400 7200 1 MEST} + {2203549200 3600 0 MET} + {2216250000 7200 1 MEST} + {2234998800 3600 0 MET} + {2248304400 7200 1 MEST} + {2266448400 3600 0 MET} + {2279754000 7200 1 MEST} + {2297898000 3600 0 MET} + {2311203600 7200 1 MEST} + {2329347600 3600 0 MET} + {2342653200 7200 1 MEST} + {2361402000 3600 0 MET} + {2374102800 7200 1 MEST} + {2392851600 3600 0 MET} + {2405552400 7200 1 MEST} + {2424301200 3600 0 MET} + {2437606800 7200 1 MEST} + {2455750800 3600 0 MET} + {2469056400 7200 1 MEST} + {2487200400 3600 0 MET} + {2500506000 7200 1 MEST} + {2519254800 3600 0 MET} + {2531955600 7200 1 MEST} + {2550704400 3600 0 MET} + {2563405200 7200 1 MEST} + {2582154000 3600 0 MET} + {2595459600 7200 1 MEST} + {2613603600 3600 0 MET} + {2626909200 7200 1 MEST} + {2645053200 3600 0 MET} + {2658358800 7200 1 MEST} + {2676502800 3600 0 MET} + {2689808400 7200 1 MEST} + {2708557200 3600 0 MET} + {2721258000 7200 1 MEST} + {2740006800 3600 0 MET} + {2752707600 7200 1 MEST} + {2771456400 3600 0 MET} + {2784762000 7200 1 MEST} + {2802906000 3600 0 MET} + {2816211600 7200 1 MEST} + {2834355600 3600 0 MET} + {2847661200 7200 1 MEST} + {2866410000 3600 0 MET} + {2879110800 7200 1 MEST} + {2897859600 3600 0 MET} + {2910560400 7200 1 MEST} + {2929309200 3600 0 MET} + {2942010000 7200 1 MEST} + {2960758800 3600 0 MET} + {2974064400 7200 1 MEST} + {2992208400 3600 0 MET} + {3005514000 7200 1 MEST} + {3023658000 3600 0 MET} + {3036963600 7200 1 MEST} + {3055712400 3600 0 MET} + {3068413200 7200 1 MEST} + {3087162000 3600 0 MET} + {3099862800 7200 1 MEST} + {3118611600 3600 0 MET} + {3131917200 7200 1 MEST} + {3150061200 3600 0 MET} + {3163366800 7200 1 MEST} + {3181510800 3600 0 MET} + {3194816400 7200 1 MEST} + {3212960400 3600 0 MET} + {3226266000 7200 1 MEST} + {3245014800 3600 0 MET} + {3257715600 7200 1 MEST} + {3276464400 3600 0 MET} + {3289165200 7200 1 MEST} + {3307914000 3600 0 MET} + {3321219600 7200 1 MEST} + {3339363600 3600 0 MET} + {3352669200 7200 1 MEST} + {3370813200 3600 0 MET} + {3384118800 7200 1 MEST} + {3402867600 3600 0 MET} + {3415568400 7200 1 MEST} + {3434317200 3600 0 MET} + {3447018000 7200 1 MEST} + {3465766800 3600 0 MET} + {3479072400 7200 1 MEST} + {3497216400 3600 0 MET} + {3510522000 7200 1 MEST} + {3528666000 3600 0 MET} + {3541971600 7200 1 MEST} + {3560115600 3600 0 MET} + {3573421200 7200 1 MEST} + {3592170000 3600 0 MET} + {3604870800 7200 1 MEST} + {3623619600 3600 0 MET} + {3636320400 7200 1 MEST} + {3655069200 3600 0 MET} + {3668374800 7200 1 MEST} + {3686518800 3600 0 MET} + {3699824400 7200 1 MEST} + {3717968400 3600 0 MET} + {3731274000 7200 1 MEST} + {3750022800 3600 0 MET} + {3762723600 7200 1 MEST} + {3781472400 3600 0 MET} + {3794173200 7200 1 MEST} + {3812922000 3600 0 MET} + {3825622800 7200 1 MEST} + {3844371600 3600 0 MET} + {3857677200 7200 1 MEST} + {3875821200 3600 0 MET} + {3889126800 7200 1 MEST} + {3907270800 3600 0 MET} + {3920576400 7200 1 MEST} + {3939325200 3600 0 MET} + {3952026000 7200 1 MEST} + {3970774800 3600 0 MET} + {3983475600 7200 1 MEST} + {4002224400 3600 0 MET} + {4015530000 7200 1 MEST} + {4033674000 3600 0 MET} + {4046979600 7200 1 MEST} + {4065123600 3600 0 MET} + {4078429200 7200 1 MEST} + {4096573200 3600 0 MET} +} diff --git a/inkstitch/bin/tcl/tzdata/MST b/inkstitch/bin/tcl/tzdata/MST new file mode 100644 index 0000000..8c967ab --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/MST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MST) { + {-9223372036854775808 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/MST7MDT b/inkstitch/bin/tcl/tzdata/MST7MDT new file mode 100644 index 0000000..ff52048 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/MST7MDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MST7MDT) { + {-9223372036854775808 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte b/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte new file mode 100644 index 0000000..8f6f459 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Tijuana)]} { + LoadTimeZoneFile America/Tijuana +} +set TZData(:Mexico/BajaNorte) $TZData(:America/Tijuana) diff --git a/inkstitch/bin/tcl/tzdata/Mexico/BajaSur b/inkstitch/bin/tcl/tzdata/Mexico/BajaSur new file mode 100644 index 0000000..6d335a1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Mexico/BajaSur @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Mazatlan)]} { + LoadTimeZoneFile America/Mazatlan +} +set TZData(:Mexico/BajaSur) $TZData(:America/Mazatlan) diff --git a/inkstitch/bin/tcl/tzdata/Mexico/General b/inkstitch/bin/tcl/tzdata/Mexico/General new file mode 100644 index 0000000..0cac92f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Mexico/General @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Mexico_City)]} { + LoadTimeZoneFile America/Mexico_City +} +set TZData(:Mexico/General) $TZData(:America/Mexico_City) diff --git a/inkstitch/bin/tcl/tzdata/NZ b/inkstitch/bin/tcl/tzdata/NZ new file mode 100644 index 0000000..36d22a7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/NZ @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Auckland)]} { + LoadTimeZoneFile Pacific/Auckland +} +set TZData(:NZ) $TZData(:Pacific/Auckland) diff --git a/inkstitch/bin/tcl/tzdata/NZ-CHAT b/inkstitch/bin/tcl/tzdata/NZ-CHAT new file mode 100644 index 0000000..7f7c918 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/NZ-CHAT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chatham)]} { + LoadTimeZoneFile Pacific/Chatham +} +set TZData(:NZ-CHAT) $TZData(:Pacific/Chatham) diff --git a/inkstitch/bin/tcl/tzdata/Navajo b/inkstitch/bin/tcl/tzdata/Navajo new file mode 100644 index 0000000..78cc2e2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Navajo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:Navajo) $TZData(:America/Denver) diff --git a/inkstitch/bin/tcl/tzdata/PRC b/inkstitch/bin/tcl/tzdata/PRC new file mode 100644 index 0000000..1d8bb7c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/PRC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Shanghai)]} { + LoadTimeZoneFile Asia/Shanghai +} +set TZData(:PRC) $TZData(:Asia/Shanghai) diff --git a/inkstitch/bin/tcl/tzdata/PST8PDT b/inkstitch/bin/tcl/tzdata/PST8PDT new file mode 100644 index 0000000..87a94da --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/PST8PDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:PST8PDT) { + {-9223372036854775808 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Apia b/inkstitch/bin/tcl/tzdata/Pacific/Apia new file mode 100644 index 0000000..e6f33ad --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Apia @@ -0,0 +1,188 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Apia) { + {-9223372036854775808 45184 0 LMT} + {-2855737984 -41216 0 LMT} + {-1861878784 -41400 0 SAMT} + {-631110600 -39600 0 WST} + {1285498800 -36000 1 WSDT} + {1301752800 -39600 0 WST} + {1316872800 -36000 1 WSDT} + {1325239200 50400 1 WSDT} + {1333202400 46800 0 WST} + {1348927200 50400 1 WSDT} + {1365256800 46800 0 WST} + {1380376800 50400 1 WSDT} + {1396706400 46800 0 WST} + {1411826400 50400 1 WSDT} + {1428156000 46800 0 WST} + {1443276000 50400 1 WSDT} + {1459605600 46800 0 WST} + {1474725600 50400 1 WSDT} + {1491055200 46800 0 WST} + {1506175200 50400 1 WSDT} + {1522504800 46800 0 WST} + {1538229600 50400 1 WSDT} + {1554559200 46800 0 WST} + {1569679200 50400 1 WSDT} + {1586008800 46800 0 WST} + {1601128800 50400 1 WSDT} + {1617458400 46800 0 WST} + {1632578400 50400 1 WSDT} + {1648908000 46800 0 WST} + {1664028000 50400 1 WSDT} + {1680357600 46800 0 WST} + {1695477600 50400 1 WSDT} + {1712412000 46800 0 WST} + {1727532000 50400 1 WSDT} + {1743861600 46800 0 WST} + {1758981600 50400 1 WSDT} + {1775311200 46800 0 WST} + {1790431200 50400 1 WSDT} + {1806760800 46800 0 WST} + {1821880800 50400 1 WSDT} + {1838210400 46800 0 WST} + {1853330400 50400 1 WSDT} + {1869660000 46800 0 WST} + {1885384800 50400 1 WSDT} + {1901714400 46800 0 WST} + {1916834400 50400 1 WSDT} + {1933164000 46800 0 WST} + {1948284000 50400 1 WSDT} + {1964613600 46800 0 WST} + {1979733600 50400 1 WSDT} + {1996063200 46800 0 WST} + {2011183200 50400 1 WSDT} + {2027512800 46800 0 WST} + {2042632800 50400 1 WSDT} + {2058962400 46800 0 WST} + {2074687200 50400 1 WSDT} + {2091016800 46800 0 WST} + {2106136800 50400 1 WSDT} + {2122466400 46800 0 WST} + {2137586400 50400 1 WSDT} + {2153916000 46800 0 WST} + {2169036000 50400 1 WSDT} + {2185365600 46800 0 WST} + {2200485600 50400 1 WSDT} + {2216815200 46800 0 WST} + {2232540000 50400 1 WSDT} + {2248869600 46800 0 WST} + {2263989600 50400 1 WSDT} + {2280319200 46800 0 WST} + {2295439200 50400 1 WSDT} + {2311768800 46800 0 WST} + {2326888800 50400 1 WSDT} + {2343218400 46800 0 WST} + {2358338400 50400 1 WSDT} + {2374668000 46800 0 WST} + {2389788000 50400 1 WSDT} + {2406117600 46800 0 WST} + {2421842400 50400 1 WSDT} + {2438172000 46800 0 WST} + {2453292000 50400 1 WSDT} + {2469621600 46800 0 WST} + {2484741600 50400 1 WSDT} + {2501071200 46800 0 WST} + {2516191200 50400 1 WSDT} + {2532520800 46800 0 WST} + {2547640800 50400 1 WSDT} + {2563970400 46800 0 WST} + {2579090400 50400 1 WSDT} + {2596024800 46800 0 WST} + {2611144800 50400 1 WSDT} + {2627474400 46800 0 WST} + {2642594400 50400 1 WSDT} + {2658924000 46800 0 WST} + {2674044000 50400 1 WSDT} + {2690373600 46800 0 WST} + {2705493600 50400 1 WSDT} + {2721823200 46800 0 WST} + {2736943200 50400 1 WSDT} + {2753272800 46800 0 WST} + {2768997600 50400 1 WSDT} + {2785327200 46800 0 WST} + {2800447200 50400 1 WSDT} + {2816776800 46800 0 WST} + {2831896800 50400 1 WSDT} + {2848226400 46800 0 WST} + {2863346400 50400 1 WSDT} + {2879676000 46800 0 WST} + {2894796000 50400 1 WSDT} + {2911125600 46800 0 WST} + {2926245600 50400 1 WSDT} + {2942575200 46800 0 WST} + {2958300000 50400 1 WSDT} + {2974629600 46800 0 WST} + {2989749600 50400 1 WSDT} + {3006079200 46800 0 WST} + {3021199200 50400 1 WSDT} + {3037528800 46800 0 WST} + {3052648800 50400 1 WSDT} + {3068978400 46800 0 WST} + {3084098400 50400 1 WSDT} + {3100428000 46800 0 WST} + {3116152800 50400 1 WSDT} + {3132482400 46800 0 WST} + {3147602400 50400 1 WSDT} + {3163932000 46800 0 WST} + {3179052000 50400 1 WSDT} + {3195381600 46800 0 WST} + {3210501600 50400 1 WSDT} + {3226831200 46800 0 WST} + {3241951200 50400 1 WSDT} + {3258280800 46800 0 WST} + {3273400800 50400 1 WSDT} + {3289730400 46800 0 WST} + {3305455200 50400 1 WSDT} + {3321784800 46800 0 WST} + {3336904800 50400 1 WSDT} + {3353234400 46800 0 WST} + {3368354400 50400 1 WSDT} + {3384684000 46800 0 WST} + {3399804000 50400 1 WSDT} + {3416133600 46800 0 WST} + {3431253600 50400 1 WSDT} + {3447583200 46800 0 WST} + {3462703200 50400 1 WSDT} + {3479637600 46800 0 WST} + {3494757600 50400 1 WSDT} + {3511087200 46800 0 WST} + {3526207200 50400 1 WSDT} + {3542536800 46800 0 WST} + {3557656800 50400 1 WSDT} + {3573986400 46800 0 WST} + {3589106400 50400 1 WSDT} + {3605436000 46800 0 WST} + {3620556000 50400 1 WSDT} + {3636885600 46800 0 WST} + {3652610400 50400 1 WSDT} + {3668940000 46800 0 WST} + {3684060000 50400 1 WSDT} + {3700389600 46800 0 WST} + {3715509600 50400 1 WSDT} + {3731839200 46800 0 WST} + {3746959200 50400 1 WSDT} + {3763288800 46800 0 WST} + {3778408800 50400 1 WSDT} + {3794738400 46800 0 WST} + {3809858400 50400 1 WSDT} + {3826188000 46800 0 WST} + {3841912800 50400 1 WSDT} + {3858242400 46800 0 WST} + {3873362400 50400 1 WSDT} + {3889692000 46800 0 WST} + {3904812000 50400 1 WSDT} + {3921141600 46800 0 WST} + {3936261600 50400 1 WSDT} + {3952591200 46800 0 WST} + {3967711200 50400 1 WSDT} + {3984040800 46800 0 WST} + {3999765600 50400 1 WSDT} + {4016095200 46800 0 WST} + {4031215200 50400 1 WSDT} + {4047544800 46800 0 WST} + {4062664800 50400 1 WSDT} + {4078994400 46800 0 WST} + {4094114400 50400 1 WSDT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Auckland b/inkstitch/bin/tcl/tzdata/Pacific/Auckland new file mode 100644 index 0000000..5f7e238 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Auckland @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Auckland) { + {-9223372036854775808 41944 0 LMT} + {-3192435544 41400 0 NZMT} + {-1330335000 45000 1 NZST} + {-1320057000 41400 0 NZMT} + {-1300699800 43200 1 NZST} + {-1287396000 41400 0 NZMT} + {-1269250200 43200 1 NZST} + {-1255946400 41400 0 NZMT} + {-1237800600 43200 1 NZST} + {-1224496800 41400 0 NZMT} + {-1206351000 43200 1 NZST} + {-1192442400 41400 0 NZMT} + {-1174901400 43200 1 NZST} + {-1160992800 41400 0 NZMT} + {-1143451800 43200 1 NZST} + {-1125914400 41400 0 NZMT} + {-1112607000 43200 1 NZST} + {-1094464800 41400 0 NZMT} + {-1081157400 43200 1 NZST} + {-1063015200 41400 0 NZMT} + {-1049707800 43200 1 NZST} + {-1031565600 41400 0 NZMT} + {-1018258200 43200 1 NZST} + {-1000116000 41400 0 NZMT} + {-986808600 43200 1 NZST} + {-968061600 41400 0 NZMT} + {-955359000 43200 1 NZST} + {-936612000 41400 0 NZMT} + {-923304600 43200 1 NZST} + {-757425600 43200 0 NZST} + {152632800 46800 1 NZDT} + {162309600 43200 0 NZST} + {183477600 46800 1 NZDT} + {194968800 43200 0 NZST} + {215532000 46800 1 NZDT} + {226418400 43200 0 NZST} + {246981600 46800 1 NZDT} + {257868000 43200 0 NZST} + {278431200 46800 1 NZDT} + {289317600 43200 0 NZST} + {309880800 46800 1 NZDT} + {320767200 43200 0 NZST} + {341330400 46800 1 NZDT} + {352216800 43200 0 NZST} + {372780000 46800 1 NZDT} + {384271200 43200 0 NZST} + {404834400 46800 1 NZDT} + {415720800 43200 0 NZST} + {436284000 46800 1 NZDT} + {447170400 43200 0 NZST} + {467733600 46800 1 NZDT} + {478620000 43200 0 NZST} + {499183200 46800 1 NZDT} + {510069600 43200 0 NZST} + {530632800 46800 1 NZDT} + {541519200 43200 0 NZST} + {562082400 46800 1 NZDT} + {573573600 43200 0 NZST} + {594136800 46800 1 NZDT} + {605023200 43200 0 NZST} + {623772000 46800 1 NZDT} + {637682400 43200 0 NZST} + {655221600 46800 1 NZDT} + {669132000 43200 0 NZST} + {686671200 46800 1 NZDT} + {700581600 43200 0 NZST} + {718120800 46800 1 NZDT} + {732636000 43200 0 NZST} + {749570400 46800 1 NZDT} + {764085600 43200 0 NZST} + {781020000 46800 1 NZDT} + {795535200 43200 0 NZST} + {812469600 46800 1 NZDT} + {826984800 43200 0 NZST} + {844524000 46800 1 NZDT} + {858434400 43200 0 NZST} + {875973600 46800 1 NZDT} + {889884000 43200 0 NZST} + {907423200 46800 1 NZDT} + {921938400 43200 0 NZST} + {938872800 46800 1 NZDT} + {953388000 43200 0 NZST} + {970322400 46800 1 NZDT} + {984837600 43200 0 NZST} + {1002376800 46800 1 NZDT} + {1016287200 43200 0 NZST} + {1033826400 46800 1 NZDT} + {1047736800 43200 0 NZST} + {1065276000 46800 1 NZDT} + {1079791200 43200 0 NZST} + {1096725600 46800 1 NZDT} + {1111240800 43200 0 NZST} + {1128175200 46800 1 NZDT} + {1142690400 43200 0 NZST} + {1159624800 46800 1 NZDT} + {1174140000 43200 0 NZST} + {1191074400 46800 1 NZDT} + {1207404000 43200 0 NZST} + {1222524000 46800 1 NZDT} + {1238853600 43200 0 NZST} + {1253973600 46800 1 NZDT} + {1270303200 43200 0 NZST} + {1285423200 46800 1 NZDT} + {1301752800 43200 0 NZST} + {1316872800 46800 1 NZDT} + {1333202400 43200 0 NZST} + {1348927200 46800 1 NZDT} + {1365256800 43200 0 NZST} + {1380376800 46800 1 NZDT} + {1396706400 43200 0 NZST} + {1411826400 46800 1 NZDT} + {1428156000 43200 0 NZST} + {1443276000 46800 1 NZDT} + {1459605600 43200 0 NZST} + {1474725600 46800 1 NZDT} + {1491055200 43200 0 NZST} + {1506175200 46800 1 NZDT} + {1522504800 43200 0 NZST} + {1538229600 46800 1 NZDT} + {1554559200 43200 0 NZST} + {1569679200 46800 1 NZDT} + {1586008800 43200 0 NZST} + {1601128800 46800 1 NZDT} + {1617458400 43200 0 NZST} + {1632578400 46800 1 NZDT} + {1648908000 43200 0 NZST} + {1664028000 46800 1 NZDT} + {1680357600 43200 0 NZST} + {1695477600 46800 1 NZDT} + {1712412000 43200 0 NZST} + {1727532000 46800 1 NZDT} + {1743861600 43200 0 NZST} + {1758981600 46800 1 NZDT} + {1775311200 43200 0 NZST} + {1790431200 46800 1 NZDT} + {1806760800 43200 0 NZST} + {1821880800 46800 1 NZDT} + {1838210400 43200 0 NZST} + {1853330400 46800 1 NZDT} + {1869660000 43200 0 NZST} + {1885384800 46800 1 NZDT} + {1901714400 43200 0 NZST} + {1916834400 46800 1 NZDT} + {1933164000 43200 0 NZST} + {1948284000 46800 1 NZDT} + {1964613600 43200 0 NZST} + {1979733600 46800 1 NZDT} + {1996063200 43200 0 NZST} + {2011183200 46800 1 NZDT} + {2027512800 43200 0 NZST} + {2042632800 46800 1 NZDT} + {2058962400 43200 0 NZST} + {2074687200 46800 1 NZDT} + {2091016800 43200 0 NZST} + {2106136800 46800 1 NZDT} + {2122466400 43200 0 NZST} + {2137586400 46800 1 NZDT} + {2153916000 43200 0 NZST} + {2169036000 46800 1 NZDT} + {2185365600 43200 0 NZST} + {2200485600 46800 1 NZDT} + {2216815200 43200 0 NZST} + {2232540000 46800 1 NZDT} + {2248869600 43200 0 NZST} + {2263989600 46800 1 NZDT} + {2280319200 43200 0 NZST} + {2295439200 46800 1 NZDT} + {2311768800 43200 0 NZST} + {2326888800 46800 1 NZDT} + {2343218400 43200 0 NZST} + {2358338400 46800 1 NZDT} + {2374668000 43200 0 NZST} + {2389788000 46800 1 NZDT} + {2406117600 43200 0 NZST} + {2421842400 46800 1 NZDT} + {2438172000 43200 0 NZST} + {2453292000 46800 1 NZDT} + {2469621600 43200 0 NZST} + {2484741600 46800 1 NZDT} + {2501071200 43200 0 NZST} + {2516191200 46800 1 NZDT} + {2532520800 43200 0 NZST} + {2547640800 46800 1 NZDT} + {2563970400 43200 0 NZST} + {2579090400 46800 1 NZDT} + {2596024800 43200 0 NZST} + {2611144800 46800 1 NZDT} + {2627474400 43200 0 NZST} + {2642594400 46800 1 NZDT} + {2658924000 43200 0 NZST} + {2674044000 46800 1 NZDT} + {2690373600 43200 0 NZST} + {2705493600 46800 1 NZDT} + {2721823200 43200 0 NZST} + {2736943200 46800 1 NZDT} + {2753272800 43200 0 NZST} + {2768997600 46800 1 NZDT} + {2785327200 43200 0 NZST} + {2800447200 46800 1 NZDT} + {2816776800 43200 0 NZST} + {2831896800 46800 1 NZDT} + {2848226400 43200 0 NZST} + {2863346400 46800 1 NZDT} + {2879676000 43200 0 NZST} + {2894796000 46800 1 NZDT} + {2911125600 43200 0 NZST} + {2926245600 46800 1 NZDT} + {2942575200 43200 0 NZST} + {2958300000 46800 1 NZDT} + {2974629600 43200 0 NZST} + {2989749600 46800 1 NZDT} + {3006079200 43200 0 NZST} + {3021199200 46800 1 NZDT} + {3037528800 43200 0 NZST} + {3052648800 46800 1 NZDT} + {3068978400 43200 0 NZST} + {3084098400 46800 1 NZDT} + {3100428000 43200 0 NZST} + {3116152800 46800 1 NZDT} + {3132482400 43200 0 NZST} + {3147602400 46800 1 NZDT} + {3163932000 43200 0 NZST} + {3179052000 46800 1 NZDT} + {3195381600 43200 0 NZST} + {3210501600 46800 1 NZDT} + {3226831200 43200 0 NZST} + {3241951200 46800 1 NZDT} + {3258280800 43200 0 NZST} + {3273400800 46800 1 NZDT} + {3289730400 43200 0 NZST} + {3305455200 46800 1 NZDT} + {3321784800 43200 0 NZST} + {3336904800 46800 1 NZDT} + {3353234400 43200 0 NZST} + {3368354400 46800 1 NZDT} + {3384684000 43200 0 NZST} + {3399804000 46800 1 NZDT} + {3416133600 43200 0 NZST} + {3431253600 46800 1 NZDT} + {3447583200 43200 0 NZST} + {3462703200 46800 1 NZDT} + {3479637600 43200 0 NZST} + {3494757600 46800 1 NZDT} + {3511087200 43200 0 NZST} + {3526207200 46800 1 NZDT} + {3542536800 43200 0 NZST} + {3557656800 46800 1 NZDT} + {3573986400 43200 0 NZST} + {3589106400 46800 1 NZDT} + {3605436000 43200 0 NZST} + {3620556000 46800 1 NZDT} + {3636885600 43200 0 NZST} + {3652610400 46800 1 NZDT} + {3668940000 43200 0 NZST} + {3684060000 46800 1 NZDT} + {3700389600 43200 0 NZST} + {3715509600 46800 1 NZDT} + {3731839200 43200 0 NZST} + {3746959200 46800 1 NZDT} + {3763288800 43200 0 NZST} + {3778408800 46800 1 NZDT} + {3794738400 43200 0 NZST} + {3809858400 46800 1 NZDT} + {3826188000 43200 0 NZST} + {3841912800 46800 1 NZDT} + {3858242400 43200 0 NZST} + {3873362400 46800 1 NZDT} + {3889692000 43200 0 NZST} + {3904812000 46800 1 NZDT} + {3921141600 43200 0 NZST} + {3936261600 46800 1 NZDT} + {3952591200 43200 0 NZST} + {3967711200 46800 1 NZDT} + {3984040800 43200 0 NZST} + {3999765600 46800 1 NZDT} + {4016095200 43200 0 NZST} + {4031215200 46800 1 NZDT} + {4047544800 43200 0 NZST} + {4062664800 46800 1 NZDT} + {4078994400 43200 0 NZST} + {4094114400 46800 1 NZDT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Chatham b/inkstitch/bin/tcl/tzdata/Pacific/Chatham new file mode 100644 index 0000000..0ed2260 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Chatham @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Chatham) { + {-9223372036854775808 44028 0 LMT} + {-410271228 45900 0 CHAST} + {152632800 49500 1 CHADT} + {162309600 45900 0 CHAST} + {183477600 49500 1 CHADT} + {194968800 45900 0 CHAST} + {215532000 49500 1 CHADT} + {226418400 45900 0 CHAST} + {246981600 49500 1 CHADT} + {257868000 45900 0 CHAST} + {278431200 49500 1 CHADT} + {289317600 45900 0 CHAST} + {309880800 49500 1 CHADT} + {320767200 45900 0 CHAST} + {341330400 49500 1 CHADT} + {352216800 45900 0 CHAST} + {372780000 49500 1 CHADT} + {384271200 45900 0 CHAST} + {404834400 49500 1 CHADT} + {415720800 45900 0 CHAST} + {436284000 49500 1 CHADT} + {447170400 45900 0 CHAST} + {467733600 49500 1 CHADT} + {478620000 45900 0 CHAST} + {499183200 49500 1 CHADT} + {510069600 45900 0 CHAST} + {530632800 49500 1 CHADT} + {541519200 45900 0 CHAST} + {562082400 49500 1 CHADT} + {573573600 45900 0 CHAST} + {594136800 49500 1 CHADT} + {605023200 45900 0 CHAST} + {623772000 49500 1 CHADT} + {637682400 45900 0 CHAST} + {655221600 49500 1 CHADT} + {669132000 45900 0 CHAST} + {686671200 49500 1 CHADT} + {700581600 45900 0 CHAST} + {718120800 49500 1 CHADT} + {732636000 45900 0 CHAST} + {749570400 49500 1 CHADT} + {764085600 45900 0 CHAST} + {781020000 49500 1 CHADT} + {795535200 45900 0 CHAST} + {812469600 49500 1 CHADT} + {826984800 45900 0 CHAST} + {844524000 49500 1 CHADT} + {858434400 45900 0 CHAST} + {875973600 49500 1 CHADT} + {889884000 45900 0 CHAST} + {907423200 49500 1 CHADT} + {921938400 45900 0 CHAST} + {938872800 49500 1 CHADT} + {953388000 45900 0 CHAST} + {970322400 49500 1 CHADT} + {984837600 45900 0 CHAST} + {1002376800 49500 1 CHADT} + {1016287200 45900 0 CHAST} + {1033826400 49500 1 CHADT} + {1047736800 45900 0 CHAST} + {1065276000 49500 1 CHADT} + {1079791200 45900 0 CHAST} + {1096725600 49500 1 CHADT} + {1111240800 45900 0 CHAST} + {1128175200 49500 1 CHADT} + {1142690400 45900 0 CHAST} + {1159624800 49500 1 CHADT} + {1174140000 45900 0 CHAST} + {1191074400 49500 1 CHADT} + {1207404000 45900 0 CHAST} + {1222524000 49500 1 CHADT} + {1238853600 45900 0 CHAST} + {1253973600 49500 1 CHADT} + {1270303200 45900 0 CHAST} + {1285423200 49500 1 CHADT} + {1301752800 45900 0 CHAST} + {1316872800 49500 1 CHADT} + {1333202400 45900 0 CHAST} + {1348927200 49500 1 CHADT} + {1365256800 45900 0 CHAST} + {1380376800 49500 1 CHADT} + {1396706400 45900 0 CHAST} + {1411826400 49500 1 CHADT} + {1428156000 45900 0 CHAST} + {1443276000 49500 1 CHADT} + {1459605600 45900 0 CHAST} + {1474725600 49500 1 CHADT} + {1491055200 45900 0 CHAST} + {1506175200 49500 1 CHADT} + {1522504800 45900 0 CHAST} + {1538229600 49500 1 CHADT} + {1554559200 45900 0 CHAST} + {1569679200 49500 1 CHADT} + {1586008800 45900 0 CHAST} + {1601128800 49500 1 CHADT} + {1617458400 45900 0 CHAST} + {1632578400 49500 1 CHADT} + {1648908000 45900 0 CHAST} + {1664028000 49500 1 CHADT} + {1680357600 45900 0 CHAST} + {1695477600 49500 1 CHADT} + {1712412000 45900 0 CHAST} + {1727532000 49500 1 CHADT} + {1743861600 45900 0 CHAST} + {1758981600 49500 1 CHADT} + {1775311200 45900 0 CHAST} + {1790431200 49500 1 CHADT} + {1806760800 45900 0 CHAST} + {1821880800 49500 1 CHADT} + {1838210400 45900 0 CHAST} + {1853330400 49500 1 CHADT} + {1869660000 45900 0 CHAST} + {1885384800 49500 1 CHADT} + {1901714400 45900 0 CHAST} + {1916834400 49500 1 CHADT} + {1933164000 45900 0 CHAST} + {1948284000 49500 1 CHADT} + {1964613600 45900 0 CHAST} + {1979733600 49500 1 CHADT} + {1996063200 45900 0 CHAST} + {2011183200 49500 1 CHADT} + {2027512800 45900 0 CHAST} + {2042632800 49500 1 CHADT} + {2058962400 45900 0 CHAST} + {2074687200 49500 1 CHADT} + {2091016800 45900 0 CHAST} + {2106136800 49500 1 CHADT} + {2122466400 45900 0 CHAST} + {2137586400 49500 1 CHADT} + {2153916000 45900 0 CHAST} + {2169036000 49500 1 CHADT} + {2185365600 45900 0 CHAST} + {2200485600 49500 1 CHADT} + {2216815200 45900 0 CHAST} + {2232540000 49500 1 CHADT} + {2248869600 45900 0 CHAST} + {2263989600 49500 1 CHADT} + {2280319200 45900 0 CHAST} + {2295439200 49500 1 CHADT} + {2311768800 45900 0 CHAST} + {2326888800 49500 1 CHADT} + {2343218400 45900 0 CHAST} + {2358338400 49500 1 CHADT} + {2374668000 45900 0 CHAST} + {2389788000 49500 1 CHADT} + {2406117600 45900 0 CHAST} + {2421842400 49500 1 CHADT} + {2438172000 45900 0 CHAST} + {2453292000 49500 1 CHADT} + {2469621600 45900 0 CHAST} + {2484741600 49500 1 CHADT} + {2501071200 45900 0 CHAST} + {2516191200 49500 1 CHADT} + {2532520800 45900 0 CHAST} + {2547640800 49500 1 CHADT} + {2563970400 45900 0 CHAST} + {2579090400 49500 1 CHADT} + {2596024800 45900 0 CHAST} + {2611144800 49500 1 CHADT} + {2627474400 45900 0 CHAST} + {2642594400 49500 1 CHADT} + {2658924000 45900 0 CHAST} + {2674044000 49500 1 CHADT} + {2690373600 45900 0 CHAST} + {2705493600 49500 1 CHADT} + {2721823200 45900 0 CHAST} + {2736943200 49500 1 CHADT} + {2753272800 45900 0 CHAST} + {2768997600 49500 1 CHADT} + {2785327200 45900 0 CHAST} + {2800447200 49500 1 CHADT} + {2816776800 45900 0 CHAST} + {2831896800 49500 1 CHADT} + {2848226400 45900 0 CHAST} + {2863346400 49500 1 CHADT} + {2879676000 45900 0 CHAST} + {2894796000 49500 1 CHADT} + {2911125600 45900 0 CHAST} + {2926245600 49500 1 CHADT} + {2942575200 45900 0 CHAST} + {2958300000 49500 1 CHADT} + {2974629600 45900 0 CHAST} + {2989749600 49500 1 CHADT} + {3006079200 45900 0 CHAST} + {3021199200 49500 1 CHADT} + {3037528800 45900 0 CHAST} + {3052648800 49500 1 CHADT} + {3068978400 45900 0 CHAST} + {3084098400 49500 1 CHADT} + {3100428000 45900 0 CHAST} + {3116152800 49500 1 CHADT} + {3132482400 45900 0 CHAST} + {3147602400 49500 1 CHADT} + {3163932000 45900 0 CHAST} + {3179052000 49500 1 CHADT} + {3195381600 45900 0 CHAST} + {3210501600 49500 1 CHADT} + {3226831200 45900 0 CHAST} + {3241951200 49500 1 CHADT} + {3258280800 45900 0 CHAST} + {3273400800 49500 1 CHADT} + {3289730400 45900 0 CHAST} + {3305455200 49500 1 CHADT} + {3321784800 45900 0 CHAST} + {3336904800 49500 1 CHADT} + {3353234400 45900 0 CHAST} + {3368354400 49500 1 CHADT} + {3384684000 45900 0 CHAST} + {3399804000 49500 1 CHADT} + {3416133600 45900 0 CHAST} + {3431253600 49500 1 CHADT} + {3447583200 45900 0 CHAST} + {3462703200 49500 1 CHADT} + {3479637600 45900 0 CHAST} + {3494757600 49500 1 CHADT} + {3511087200 45900 0 CHAST} + {3526207200 49500 1 CHADT} + {3542536800 45900 0 CHAST} + {3557656800 49500 1 CHADT} + {3573986400 45900 0 CHAST} + {3589106400 49500 1 CHADT} + {3605436000 45900 0 CHAST} + {3620556000 49500 1 CHADT} + {3636885600 45900 0 CHAST} + {3652610400 49500 1 CHADT} + {3668940000 45900 0 CHAST} + {3684060000 49500 1 CHADT} + {3700389600 45900 0 CHAST} + {3715509600 49500 1 CHADT} + {3731839200 45900 0 CHAST} + {3746959200 49500 1 CHADT} + {3763288800 45900 0 CHAST} + {3778408800 49500 1 CHADT} + {3794738400 45900 0 CHAST} + {3809858400 49500 1 CHADT} + {3826188000 45900 0 CHAST} + {3841912800 49500 1 CHADT} + {3858242400 45900 0 CHAST} + {3873362400 49500 1 CHADT} + {3889692000 45900 0 CHAST} + {3904812000 49500 1 CHADT} + {3921141600 45900 0 CHAST} + {3936261600 49500 1 CHADT} + {3952591200 45900 0 CHAST} + {3967711200 49500 1 CHADT} + {3984040800 45900 0 CHAST} + {3999765600 49500 1 CHADT} + {4016095200 45900 0 CHAST} + {4031215200 49500 1 CHADT} + {4047544800 45900 0 CHAST} + {4062664800 49500 1 CHADT} + {4078994400 45900 0 CHAST} + {4094114400 49500 1 CHADT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Chuuk b/inkstitch/bin/tcl/tzdata/Pacific/Chuuk new file mode 100644 index 0000000..70b14b2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Chuuk @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Chuuk) { + {-9223372036854775808 36428 0 LMT} + {-2177489228 36000 0 CHUT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Easter b/inkstitch/bin/tcl/tzdata/Pacific/Easter new file mode 100644 index 0000000..000c6d1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Easter @@ -0,0 +1,275 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Easter) { + {-9223372036854775808 -26264 0 LMT} + {-2524495336 -26248 0 EMT} + {-1178124152 -21600 0 EASST} + {-870552000 -25200 0 EAST} + {-865278000 -21600 1 EASST} + {-740520000 -21600 1 EASST} + {-736376400 -25200 0 EAST} + {-718056000 -25200 0 EAST} + {-36619200 -21600 1 EASST} + {-23922000 -25200 0 EAST} + {-3355200 -21600 1 EASST} + {7527600 -25200 0 EAST} + {24465600 -21600 1 EASST} + {37767600 -25200 0 EAST} + {55915200 -21600 1 EASST} + {69217200 -25200 0 EAST} + {87969600 -21600 1 EASST} + {100666800 -25200 0 EAST} + {118209600 -21600 1 EASST} + {132116400 -25200 0 EAST} + {150868800 -21600 1 EASST} + {163566000 -25200 0 EAST} + {182318400 -21600 1 EASST} + {195620400 -25200 0 EAST} + {213768000 -21600 1 EASST} + {227070000 -25200 0 EAST} + {245217600 -21600 1 EASST} + {258519600 -25200 0 EAST} + {277272000 -21600 1 EASST} + {289969200 -25200 0 EAST} + {308721600 -21600 1 EASST} + {321418800 -25200 0 EAST} + {340171200 -21600 1 EASST} + {353473200 -25200 0 EAST} + {371620800 -21600 1 EASST} + {384922800 -21600 0 EAST} + {403070400 -18000 1 EASST} + {416372400 -21600 0 EAST} + {434520000 -18000 1 EASST} + {447822000 -21600 0 EAST} + {466574400 -18000 1 EASST} + {479271600 -21600 0 EAST} + {498024000 -18000 1 EASST} + {510721200 -21600 0 EAST} + {529473600 -18000 1 EASST} + {545194800 -21600 0 EAST} + {560923200 -18000 1 EASST} + {574225200 -21600 0 EAST} + {591768000 -18000 1 EASST} + {605674800 -21600 0 EAST} + {624427200 -18000 1 EASST} + {637729200 -21600 0 EAST} + {653457600 -18000 1 EASST} + {668574000 -21600 0 EAST} + {687326400 -18000 1 EASST} + {700628400 -21600 0 EAST} + {718776000 -18000 1 EASST} + {732078000 -21600 0 EAST} + {750225600 -18000 1 EASST} + {763527600 -21600 0 EAST} + {781675200 -18000 1 EASST} + {794977200 -21600 0 EAST} + {813729600 -18000 1 EASST} + {826426800 -21600 0 EAST} + {845179200 -18000 1 EASST} + {859690800 -21600 0 EAST} + {876628800 -18000 1 EASST} + {889930800 -21600 0 EAST} + {906868800 -18000 1 EASST} + {923194800 -21600 0 EAST} + {939528000 -18000 1 EASST} + {952830000 -21600 0 EAST} + {971582400 -18000 1 EASST} + {984279600 -21600 0 EAST} + {1003032000 -18000 1 EASST} + {1015729200 -21600 0 EAST} + {1034481600 -18000 1 EASST} + {1047178800 -21600 0 EAST} + {1065931200 -18000 1 EASST} + {1079233200 -21600 0 EAST} + {1097380800 -18000 1 EASST} + {1110682800 -21600 0 EAST} + {1128830400 -18000 1 EASST} + {1142132400 -21600 0 EAST} + {1160884800 -18000 1 EASST} + {1173582000 -21600 0 EAST} + {1192334400 -18000 1 EASST} + {1206846000 -21600 0 EAST} + {1223784000 -18000 1 EASST} + {1237086000 -21600 0 EAST} + {1255233600 -18000 1 EASST} + {1270350000 -21600 0 EAST} + {1286683200 -18000 1 EASST} + {1304823600 -21600 0 EAST} + {1313899200 -18000 1 EASST} + {1335668400 -21600 0 EAST} + {1346558400 -18000 1 EASST} + {1367118000 -21600 0 EAST} + {1378612800 -18000 1 EASST} + {1398567600 -21600 0 EAST} + {1410062400 -18000 1 EASST} + {1430017200 -21600 0 EAST} + {1441512000 -18000 1 EASST} + {1461466800 -21600 0 EAST} + {1472961600 -18000 1 EASST} + {1492916400 -21600 0 EAST} + {1504411200 -18000 1 EASST} + {1524970800 -21600 0 EAST} + {1535860800 -18000 1 EASST} + {1556420400 -21600 0 EAST} + {1567915200 -18000 1 EASST} + {1587870000 -21600 0 EAST} + {1599364800 -18000 1 EASST} + {1619319600 -21600 0 EAST} + {1630814400 -18000 1 EASST} + {1650769200 -21600 0 EAST} + {1662264000 -18000 1 EASST} + {1682218800 -21600 0 EAST} + {1693713600 -18000 1 EASST} + {1714273200 -21600 0 EAST} + {1725768000 -18000 1 EASST} + {1745722800 -21600 0 EAST} + {1757217600 -18000 1 EASST} + {1777172400 -21600 0 EAST} + {1788667200 -18000 1 EASST} + {1808622000 -21600 0 EAST} + {1820116800 -18000 1 EASST} + {1840071600 -21600 0 EAST} + {1851566400 -18000 1 EASST} + {1872126000 -21600 0 EAST} + {1883016000 -18000 1 EASST} + {1903575600 -21600 0 EAST} + {1915070400 -18000 1 EASST} + {1935025200 -21600 0 EAST} + {1946520000 -18000 1 EASST} + {1966474800 -21600 0 EAST} + {1977969600 -18000 1 EASST} + {1997924400 -21600 0 EAST} + {2009419200 -18000 1 EASST} + {2029374000 -21600 0 EAST} + {2040868800 -18000 1 EASST} + {2061428400 -21600 0 EAST} + {2072318400 -18000 1 EASST} + {2092878000 -21600 0 EAST} + {2104372800 -18000 1 EASST} + {2124327600 -21600 0 EAST} + {2135822400 -18000 1 EASST} + {2155777200 -21600 0 EAST} + {2167272000 -18000 1 EASST} + {2187226800 -21600 0 EAST} + {2198721600 -18000 1 EASST} + {2219281200 -21600 0 EAST} + {2230171200 -18000 1 EASST} + {2250730800 -21600 0 EAST} + {2262225600 -18000 1 EASST} + {2282180400 -21600 0 EAST} + {2293675200 -18000 1 EASST} + {2313630000 -21600 0 EAST} + {2325124800 -18000 1 EASST} + {2345079600 -21600 0 EAST} + {2356574400 -18000 1 EASST} + {2376529200 -21600 0 EAST} + {2388024000 -18000 1 EASST} + {2408583600 -21600 0 EAST} + {2419473600 -18000 1 EASST} + {2440033200 -21600 0 EAST} + {2451528000 -18000 1 EASST} + {2471482800 -21600 0 EAST} + {2482977600 -18000 1 EASST} + {2502932400 -21600 0 EAST} + {2514427200 -18000 1 EASST} + {2534382000 -21600 0 EAST} + {2545876800 -18000 1 EASST} + {2565831600 -21600 0 EAST} + {2577326400 -18000 1 EASST} + {2597886000 -21600 0 EAST} + {2609380800 -18000 1 EASST} + {2629335600 -21600 0 EAST} + {2640830400 -18000 1 EASST} + {2660785200 -21600 0 EAST} + {2672280000 -18000 1 EASST} + {2692234800 -21600 0 EAST} + {2703729600 -18000 1 EASST} + {2723684400 -21600 0 EAST} + {2735179200 -18000 1 EASST} + {2755738800 -21600 0 EAST} + {2766628800 -18000 1 EASST} + {2787188400 -21600 0 EAST} + {2798683200 -18000 1 EASST} + {2818638000 -21600 0 EAST} + {2830132800 -18000 1 EASST} + {2850087600 -21600 0 EAST} + {2861582400 -18000 1 EASST} + {2881537200 -21600 0 EAST} + {2893032000 -18000 1 EASST} + {2912986800 -21600 0 EAST} + {2924481600 -18000 1 EASST} + {2945041200 -21600 0 EAST} + {2955931200 -18000 1 EASST} + {2976490800 -21600 0 EAST} + {2987985600 -18000 1 EASST} + {3007940400 -21600 0 EAST} + {3019435200 -18000 1 EASST} + {3039390000 -21600 0 EAST} + {3050884800 -18000 1 EASST} + {3070839600 -21600 0 EAST} + {3082334400 -18000 1 EASST} + {3102894000 -21600 0 EAST} + {3113784000 -18000 1 EASST} + {3134343600 -21600 0 EAST} + {3145838400 -18000 1 EASST} + {3165793200 -21600 0 EAST} + {3177288000 -18000 1 EASST} + {3197242800 -21600 0 EAST} + {3208737600 -18000 1 EASST} + {3228692400 -21600 0 EAST} + {3240187200 -18000 1 EASST} + {3260142000 -21600 0 EAST} + {3271636800 -18000 1 EASST} + {3292196400 -21600 0 EAST} + {3303086400 -18000 1 EASST} + {3323646000 -21600 0 EAST} + {3335140800 -18000 1 EASST} + {3355095600 -21600 0 EAST} + {3366590400 -18000 1 EASST} + {3386545200 -21600 0 EAST} + {3398040000 -18000 1 EASST} + {3417994800 -21600 0 EAST} + {3429489600 -18000 1 EASST} + {3449444400 -21600 0 EAST} + {3460939200 -18000 1 EASST} + {3481498800 -21600 0 EAST} + {3492993600 -18000 1 EASST} + {3512948400 -21600 0 EAST} + {3524443200 -18000 1 EASST} + {3544398000 -21600 0 EAST} + {3555892800 -18000 1 EASST} + {3575847600 -21600 0 EAST} + {3587342400 -18000 1 EASST} + {3607297200 -21600 0 EAST} + {3618792000 -18000 1 EASST} + {3639351600 -21600 0 EAST} + {3650241600 -18000 1 EASST} + {3670801200 -21600 0 EAST} + {3682296000 -18000 1 EASST} + {3702250800 -21600 0 EAST} + {3713745600 -18000 1 EASST} + {3733700400 -21600 0 EAST} + {3745195200 -18000 1 EASST} + {3765150000 -21600 0 EAST} + {3776644800 -18000 1 EASST} + {3796599600 -21600 0 EAST} + {3808094400 -18000 1 EASST} + {3828654000 -21600 0 EAST} + {3839544000 -18000 1 EASST} + {3860103600 -21600 0 EAST} + {3871598400 -18000 1 EASST} + {3891553200 -21600 0 EAST} + {3903048000 -18000 1 EASST} + {3923002800 -21600 0 EAST} + {3934497600 -18000 1 EASST} + {3954452400 -21600 0 EAST} + {3965947200 -18000 1 EASST} + {3986506800 -21600 0 EAST} + {3997396800 -18000 1 EASST} + {4017956400 -21600 0 EAST} + {4029451200 -18000 1 EASST} + {4049406000 -21600 0 EAST} + {4060900800 -18000 1 EASST} + {4080855600 -21600 0 EAST} + {4092350400 -18000 1 EASST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Efate b/inkstitch/bin/tcl/tzdata/Pacific/Efate new file mode 100644 index 0000000..18db6de --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Efate @@ -0,0 +1,26 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Efate) { + {-9223372036854775808 40396 0 LMT} + {-1829387596 39600 0 VUT} + {433256400 43200 1 VUST} + {448977600 39600 0 VUT} + {467298000 43200 1 VUST} + {480427200 39600 0 VUT} + {496760400 43200 1 VUST} + {511876800 39600 0 VUT} + {528210000 43200 1 VUST} + {543931200 39600 0 VUT} + {559659600 43200 1 VUST} + {575380800 39600 0 VUT} + {591109200 43200 1 VUST} + {606830400 39600 0 VUT} + {622558800 43200 1 VUST} + {638280000 39600 0 VUT} + {654008400 43200 1 VUST} + {669729600 39600 0 VUT} + {686062800 43200 1 VUST} + {696340800 39600 0 VUT} + {719931600 43200 1 VUST} + {727790400 39600 0 VUT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Enderbury b/inkstitch/bin/tcl/tzdata/Pacific/Enderbury new file mode 100644 index 0000000..55784c4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Enderbury @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Enderbury) { + {-9223372036854775808 -41060 0 LMT} + {-2177411740 -43200 0 PHOT} + {307627200 -39600 0 PHOT} + {788958000 46800 0 PHOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo b/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo new file mode 100644 index 0000000..6ec98eb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Fakaofo) { + {-9223372036854775808 -41096 0 LMT} + {-2177411704 -39600 0 TKT} + {1325242800 46800 0 TKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Fiji b/inkstitch/bin/tcl/tzdata/Pacific/Fiji new file mode 100644 index 0000000..bfcaa03 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Fiji @@ -0,0 +1,191 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Fiji) { + {-9223372036854775808 42944 0 LMT} + {-1709985344 43200 0 FJT} + {909842400 46800 1 FJST} + {920124000 43200 0 FJT} + {941896800 46800 1 FJST} + {951573600 43200 0 FJT} + {1259416800 46800 1 FJST} + {1269698400 43200 0 FJT} + {1287842400 46800 1 FJST} + {1299333600 43200 0 FJT} + {1319292000 46800 1 FJST} + {1327154400 43200 0 FJT} + {1350741600 46800 1 FJST} + {1358604000 43200 0 FJT} + {1382191200 46800 1 FJST} + {1390053600 43200 0 FJT} + {1413640800 46800 1 FJST} + {1421503200 43200 0 FJT} + {1445090400 46800 1 FJST} + {1453557600 43200 0 FJT} + {1477144800 46800 1 FJST} + {1485007200 43200 0 FJT} + {1508594400 46800 1 FJST} + {1516456800 43200 0 FJT} + {1540044000 46800 1 FJST} + {1547906400 43200 0 FJT} + {1571493600 46800 1 FJST} + {1579356000 43200 0 FJT} + {1602943200 46800 1 FJST} + {1611410400 43200 0 FJT} + {1634997600 46800 1 FJST} + {1642860000 43200 0 FJT} + {1666447200 46800 1 FJST} + {1674309600 43200 0 FJT} + {1697896800 46800 1 FJST} + {1705759200 43200 0 FJT} + {1729346400 46800 1 FJST} + {1737208800 43200 0 FJT} + {1760796000 46800 1 FJST} + {1768658400 43200 0 FJT} + {1792245600 46800 1 FJST} + {1800712800 43200 0 FJT} + {1824300000 46800 1 FJST} + {1832162400 43200 0 FJT} + {1855749600 46800 1 FJST} + {1863612000 43200 0 FJT} + {1887199200 46800 1 FJST} + {1895061600 43200 0 FJT} + {1918648800 46800 1 FJST} + {1926511200 43200 0 FJT} + {1950098400 46800 1 FJST} + {1957960800 43200 0 FJT} + {1982152800 46800 1 FJST} + {1990015200 43200 0 FJT} + {2013602400 46800 1 FJST} + {2021464800 43200 0 FJT} + {2045052000 46800 1 FJST} + {2052914400 43200 0 FJT} + {2076501600 46800 1 FJST} + {2084364000 43200 0 FJT} + {2107951200 46800 1 FJST} + {2115813600 43200 0 FJT} + {2139400800 46800 1 FJST} + {2147868000 43200 0 FJT} + {2171455200 46800 1 FJST} + {2179317600 43200 0 FJT} + {2202904800 46800 1 FJST} + {2210767200 43200 0 FJT} + {2234354400 46800 1 FJST} + {2242216800 43200 0 FJT} + {2265804000 46800 1 FJST} + {2273666400 43200 0 FJT} + {2297253600 46800 1 FJST} + {2305116000 43200 0 FJT} + {2328703200 46800 1 FJST} + {2337170400 43200 0 FJT} + {2360757600 46800 1 FJST} + {2368620000 43200 0 FJT} + {2392207200 46800 1 FJST} + {2400069600 43200 0 FJT} + {2423656800 46800 1 FJST} + {2431519200 43200 0 FJT} + {2455106400 46800 1 FJST} + {2462968800 43200 0 FJT} + {2486556000 46800 1 FJST} + {2495023200 43200 0 FJT} + {2518610400 46800 1 FJST} + {2526472800 43200 0 FJT} + {2550060000 46800 1 FJST} + {2557922400 43200 0 FJT} + {2581509600 46800 1 FJST} + {2589372000 43200 0 FJT} + {2612959200 46800 1 FJST} + {2620821600 43200 0 FJT} + {2644408800 46800 1 FJST} + {2652271200 43200 0 FJT} + {2675858400 46800 1 FJST} + {2684325600 43200 0 FJT} + {2707912800 46800 1 FJST} + {2715775200 43200 0 FJT} + {2739362400 46800 1 FJST} + {2747224800 43200 0 FJT} + {2770812000 46800 1 FJST} + {2778674400 43200 0 FJT} + {2802261600 46800 1 FJST} + {2810124000 43200 0 FJT} + {2833711200 46800 1 FJST} + {2841573600 43200 0 FJT} + {2865765600 46800 1 FJST} + {2873628000 43200 0 FJT} + {2897215200 46800 1 FJST} + {2905077600 43200 0 FJT} + {2928664800 46800 1 FJST} + {2936527200 43200 0 FJT} + {2960114400 46800 1 FJST} + {2967976800 43200 0 FJT} + {2991564000 46800 1 FJST} + {2999426400 43200 0 FJT} + {3023013600 46800 1 FJST} + {3031480800 43200 0 FJT} + {3055068000 46800 1 FJST} + {3062930400 43200 0 FJT} + {3086517600 46800 1 FJST} + {3094380000 43200 0 FJT} + {3117967200 46800 1 FJST} + {3125829600 43200 0 FJT} + {3149416800 46800 1 FJST} + {3157279200 43200 0 FJT} + {3180866400 46800 1 FJST} + {3188728800 43200 0 FJT} + {3212316000 46800 1 FJST} + {3220783200 43200 0 FJT} + {3244370400 46800 1 FJST} + {3252232800 43200 0 FJT} + {3275820000 46800 1 FJST} + {3283682400 43200 0 FJT} + {3307269600 46800 1 FJST} + {3315132000 43200 0 FJT} + {3338719200 46800 1 FJST} + {3346581600 43200 0 FJT} + {3370168800 46800 1 FJST} + {3378636000 43200 0 FJT} + {3402223200 46800 1 FJST} + {3410085600 43200 0 FJT} + {3433672800 46800 1 FJST} + {3441535200 43200 0 FJT} + {3465122400 46800 1 FJST} + {3472984800 43200 0 FJT} + {3496572000 46800 1 FJST} + {3504434400 43200 0 FJT} + {3528021600 46800 1 FJST} + {3535884000 43200 0 FJT} + {3559471200 46800 1 FJST} + {3567938400 43200 0 FJT} + {3591525600 46800 1 FJST} + {3599388000 43200 0 FJT} + {3622975200 46800 1 FJST} + {3630837600 43200 0 FJT} + {3654424800 46800 1 FJST} + {3662287200 43200 0 FJT} + {3685874400 46800 1 FJST} + {3693736800 43200 0 FJT} + {3717324000 46800 1 FJST} + {3725186400 43200 0 FJT} + {3749378400 46800 1 FJST} + {3757240800 43200 0 FJT} + {3780828000 46800 1 FJST} + {3788690400 43200 0 FJT} + {3812277600 46800 1 FJST} + {3820140000 43200 0 FJT} + {3843727200 46800 1 FJST} + {3851589600 43200 0 FJT} + {3875176800 46800 1 FJST} + {3883039200 43200 0 FJT} + {3906626400 46800 1 FJST} + {3915093600 43200 0 FJT} + {3938680800 46800 1 FJST} + {3946543200 43200 0 FJT} + {3970130400 46800 1 FJST} + {3977992800 43200 0 FJT} + {4001580000 46800 1 FJST} + {4009442400 43200 0 FJT} + {4033029600 46800 1 FJST} + {4040892000 43200 0 FJT} + {4064479200 46800 1 FJST} + {4072341600 43200 0 FJT} + {4095928800 46800 1 FJST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Funafuti b/inkstitch/bin/tcl/tzdata/Pacific/Funafuti new file mode 100644 index 0000000..b94e4fb --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Funafuti @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Funafuti) { + {-9223372036854775808 43012 0 LMT} + {-2177495812 43200 0 TVT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Galapagos b/inkstitch/bin/tcl/tzdata/Pacific/Galapagos new file mode 100644 index 0000000..d8c80e8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Galapagos @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Galapagos) { + {-9223372036854775808 -21504 0 LMT} + {-1230746496 -18000 0 ECT} + {504939600 -21600 0 GALT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Gambier b/inkstitch/bin/tcl/tzdata/Pacific/Gambier new file mode 100644 index 0000000..d69f99a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Gambier @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Gambier) { + {-9223372036854775808 -32388 0 LMT} + {-1806678012 -32400 0 GAMT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal b/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal new file mode 100644 index 0000000..09a67dd --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Guadalcanal) { + {-9223372036854775808 38388 0 LMT} + {-1806748788 39600 0 SBT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Guam b/inkstitch/bin/tcl/tzdata/Pacific/Guam new file mode 100644 index 0000000..79cca80 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Guam @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Guam) { + {-9223372036854775808 -51660 0 LMT} + {-3944626740 34740 0 LMT} + {-2177487540 36000 0 GST} + {977493600 36000 0 ChST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Honolulu b/inkstitch/bin/tcl/tzdata/Pacific/Honolulu new file mode 100644 index 0000000..5e70598 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Honolulu @@ -0,0 +1,11 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Honolulu) { + {-9223372036854775808 -37886 0 LMT} + {-2334101314 -37800 0 HST} + {-1157283000 -34200 1 HDT} + {-1155436200 -37800 0 HST} + {-880198200 -34200 1 HDT} + {-765376200 -37800 0 HST} + {-712150200 -36000 0 HST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Johnston b/inkstitch/bin/tcl/tzdata/Pacific/Johnston new file mode 100644 index 0000000..7f9fee4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Johnston @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Johnston) { + {-9223372036854775808 -36000 0 HST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati b/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati new file mode 100644 index 0000000..06b695b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kiritimati) { + {-9223372036854775808 -37760 0 LMT} + {-2177415040 -38400 0 LINT} + {307622400 -36000 0 LINT} + {788954400 50400 0 LINT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Kosrae b/inkstitch/bin/tcl/tzdata/Pacific/Kosrae new file mode 100644 index 0000000..a16b19d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Kosrae @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kosrae) { + {-9223372036854775808 39116 0 LMT} + {-2177491916 39600 0 KOST} + {-7988400 43200 0 KOST} + {915105600 39600 0 KOST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein b/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein new file mode 100644 index 0000000..8600b3b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kwajalein) { + {-9223372036854775808 40160 0 LMT} + {-2177492960 39600 0 MHT} + {-7988400 -43200 0 KWAT} + {745848000 43200 0 MHT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Majuro b/inkstitch/bin/tcl/tzdata/Pacific/Majuro new file mode 100644 index 0000000..468baab --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Majuro @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Majuro) { + {-9223372036854775808 41088 0 LMT} + {-2177493888 39600 0 MHT} + {-7988400 43200 0 MHT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Marquesas b/inkstitch/bin/tcl/tzdata/Pacific/Marquesas new file mode 100644 index 0000000..9bb508f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Marquesas @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Marquesas) { + {-9223372036854775808 -33480 0 LMT} + {-1806676920 -34200 0 MART} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Midway b/inkstitch/bin/tcl/tzdata/Pacific/Midway new file mode 100644 index 0000000..c07b030 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Midway @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Midway) { + {-9223372036854775808 -42568 0 LMT} + {-2177410232 -39600 0 NST} + {-428504400 -36000 1 NDT} + {-420645600 -39600 0 NST} + {-86878800 -39600 0 BST} + {439038000 -39600 0 SST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Nauru b/inkstitch/bin/tcl/tzdata/Pacific/Nauru new file mode 100644 index 0000000..2da1e25 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Nauru @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Nauru) { + {-9223372036854775808 40060 0 LMT} + {-1545131260 41400 0 NRT} + {-877347000 32400 0 JST} + {-800960400 41400 0 NRT} + {294323400 43200 0 NRT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Niue b/inkstitch/bin/tcl/tzdata/Pacific/Niue new file mode 100644 index 0000000..cf149fc --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Niue @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Niue) { + {-9223372036854775808 -40780 0 LMT} + {-2177412020 -40800 0 NUT} + {-599575200 -41400 0 NUT} + {276089400 -39600 0 NUT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Norfolk b/inkstitch/bin/tcl/tzdata/Pacific/Norfolk new file mode 100644 index 0000000..a8fac15 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Norfolk @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Norfolk) { + {-9223372036854775808 40312 0 LMT} + {-2177493112 40320 0 NMT} + {-599656320 41400 0 NFT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Noumea b/inkstitch/bin/tcl/tzdata/Pacific/Noumea new file mode 100644 index 0000000..db1eeae --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Noumea @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Noumea) { + {-9223372036854775808 39948 0 LMT} + {-1829387148 39600 0 NCT} + {250002000 43200 1 NCST} + {257342400 39600 0 NCT} + {281451600 43200 1 NCST} + {288878400 39600 0 NCT} + {849366000 43200 1 NCST} + {857228400 39600 0 NCT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago b/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago new file mode 100644 index 0000000..830f9ee --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pago_Pago) { + {-9223372036854775808 45432 0 LMT} + {-2855738232 -40968 0 LMT} + {-1861879032 -41400 0 SAMT} + {-631110600 -39600 0 NST} + {-86878800 -39600 0 BST} + {439038000 -39600 0 SST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Palau b/inkstitch/bin/tcl/tzdata/Pacific/Palau new file mode 100644 index 0000000..ee0606d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Palau @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Palau) { + {-9223372036854775808 32276 0 LMT} + {-2177485076 32400 0 PWT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn b/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn new file mode 100644 index 0000000..d62644e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pitcairn) { + {-9223372036854775808 -31220 0 LMT} + {-2177421580 -30600 0 PNT} + {893665800 -28800 0 PST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei b/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei new file mode 100644 index 0000000..58978da --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pohnpei) { + {-9223372036854775808 37972 0 LMT} + {-2177490772 39600 0 PONT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Ponape b/inkstitch/bin/tcl/tzdata/Pacific/Ponape new file mode 100644 index 0000000..89644f7 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Ponape @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pohnpei)]} { + LoadTimeZoneFile Pacific/Pohnpei +} +set TZData(:Pacific/Ponape) $TZData(:Pacific/Pohnpei) diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby b/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby new file mode 100644 index 0000000..65eb533 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Port_Moresby) { + {-9223372036854775808 35320 0 LMT} + {-2840176120 35312 0 PMMT} + {-2366790512 36000 0 PGT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga b/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga new file mode 100644 index 0000000..a4ecf8d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Rarotonga) { + {-9223372036854775808 -38344 0 LMT} + {-2177414456 -37800 0 CKT} + {279714600 -34200 0 CKHST} + {289387800 -36000 0 CKT} + {309952800 -34200 1 CKHST} + {320837400 -36000 0 CKT} + {341402400 -34200 1 CKHST} + {352287000 -36000 0 CKT} + {372852000 -34200 1 CKHST} + {384341400 -36000 0 CKT} + {404906400 -34200 1 CKHST} + {415791000 -36000 0 CKT} + {436356000 -34200 1 CKHST} + {447240600 -36000 0 CKT} + {467805600 -34200 1 CKHST} + {478690200 -36000 0 CKT} + {499255200 -34200 1 CKHST} + {510139800 -36000 0 CKT} + {530704800 -34200 1 CKHST} + {541589400 -36000 0 CKT} + {562154400 -34200 1 CKHST} + {573643800 -36000 0 CKT} + {594208800 -34200 1 CKHST} + {605093400 -36000 0 CKT} + {625658400 -34200 1 CKHST} + {636543000 -36000 0 CKT} + {657108000 -34200 1 CKHST} + {667992600 -36000 0 CKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Saipan b/inkstitch/bin/tcl/tzdata/Pacific/Saipan new file mode 100644 index 0000000..b799298 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Saipan @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Saipan) { + {-9223372036854775808 -51420 0 LMT} + {-3944626980 34980 0 LMT} + {-2177487780 32400 0 MPT} + {-7981200 36000 0 MPT} + {977493600 36000 0 ChST} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Samoa b/inkstitch/bin/tcl/tzdata/Pacific/Samoa new file mode 100644 index 0000000..686eb34 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Samoa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pago_Pago)]} { + LoadTimeZoneFile Pacific/Pago_Pago +} +set TZData(:Pacific/Samoa) $TZData(:Pacific/Pago_Pago) diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Tahiti b/inkstitch/bin/tcl/tzdata/Pacific/Tahiti new file mode 100644 index 0000000..f739223 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Tahiti @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tahiti) { + {-9223372036854775808 -35896 0 LMT} + {-1806674504 -36000 0 TAHT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Tarawa b/inkstitch/bin/tcl/tzdata/Pacific/Tarawa new file mode 100644 index 0000000..2dab5a2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Tarawa @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tarawa) { + {-9223372036854775808 41524 0 LMT} + {-2177494324 43200 0 GILT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu b/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu new file mode 100644 index 0000000..da9f857 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tongatapu) { + {-9223372036854775808 44360 0 LMT} + {-2177497160 44400 0 TOT} + {-915193200 46800 0 TOT} + {915102000 46800 0 TOT} + {939214800 50400 1 TOST} + {953384400 46800 0 TOT} + {973342800 50400 1 TOST} + {980596800 46800 0 TOT} + {1004792400 50400 1 TOST} + {1012046400 46800 0 TOT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Truk b/inkstitch/bin/tcl/tzdata/Pacific/Truk new file mode 100644 index 0000000..c9b1894 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Truk @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chuuk)]} { + LoadTimeZoneFile Pacific/Chuuk +} +set TZData(:Pacific/Truk) $TZData(:Pacific/Chuuk) diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Wake b/inkstitch/bin/tcl/tzdata/Pacific/Wake new file mode 100644 index 0000000..5afedf5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Wake @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Wake) { + {-9223372036854775808 39988 0 LMT} + {-2177492788 43200 0 WAKT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Wallis b/inkstitch/bin/tcl/tzdata/Pacific/Wallis new file mode 100644 index 0000000..7bdd964 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Wallis @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Wallis) { + {-9223372036854775808 44120 0 LMT} + {-2177496920 43200 0 WFT} +} diff --git a/inkstitch/bin/tcl/tzdata/Pacific/Yap b/inkstitch/bin/tcl/tzdata/Pacific/Yap new file mode 100644 index 0000000..4931030 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Pacific/Yap @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chuuk)]} { + LoadTimeZoneFile Pacific/Chuuk +} +set TZData(:Pacific/Yap) $TZData(:Pacific/Chuuk) diff --git a/inkstitch/bin/tcl/tzdata/Poland b/inkstitch/bin/tcl/tzdata/Poland new file mode 100644 index 0000000..bd24028 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Poland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Warsaw)]} { + LoadTimeZoneFile Europe/Warsaw +} +set TZData(:Poland) $TZData(:Europe/Warsaw) diff --git a/inkstitch/bin/tcl/tzdata/Portugal b/inkstitch/bin/tcl/tzdata/Portugal new file mode 100644 index 0000000..d1ffd9f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Portugal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Lisbon)]} { + LoadTimeZoneFile Europe/Lisbon +} +set TZData(:Portugal) $TZData(:Europe/Lisbon) diff --git a/inkstitch/bin/tcl/tzdata/ROC b/inkstitch/bin/tcl/tzdata/ROC new file mode 100644 index 0000000..5dd196d --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/ROC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Taipei)]} { + LoadTimeZoneFile Asia/Taipei +} +set TZData(:ROC) $TZData(:Asia/Taipei) diff --git a/inkstitch/bin/tcl/tzdata/ROK b/inkstitch/bin/tcl/tzdata/ROK new file mode 100644 index 0000000..1162ce4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/ROK @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Seoul)]} { + LoadTimeZoneFile Asia/Seoul +} +set TZData(:ROK) $TZData(:Asia/Seoul) diff --git a/inkstitch/bin/tcl/tzdata/Singapore b/inkstitch/bin/tcl/tzdata/Singapore new file mode 100644 index 0000000..1584b35 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Singapore @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Singapore)]} { + LoadTimeZoneFile Asia/Singapore +} +set TZData(:Singapore) $TZData(:Asia/Singapore) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/AST4 b/inkstitch/bin/tcl/tzdata/SystemV/AST4 new file mode 100644 index 0000000..eced0d2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/AST4 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Puerto_Rico)]} { + LoadTimeZoneFile America/Puerto_Rico +} +set TZData(:SystemV/AST4) $TZData(:America/Puerto_Rico) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT b/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT new file mode 100644 index 0000000..c24308f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Halifax)]} { + LoadTimeZoneFile America/Halifax +} +set TZData(:SystemV/AST4ADT) $TZData(:America/Halifax) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/CST6 b/inkstitch/bin/tcl/tzdata/SystemV/CST6 new file mode 100644 index 0000000..d46c015 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/CST6 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:SystemV/CST6) $TZData(:America/Regina) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT b/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT new file mode 100644 index 0000000..234af89 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Chicago)]} { + LoadTimeZoneFile America/Chicago +} +set TZData(:SystemV/CST6CDT) $TZData(:America/Chicago) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/EST5 b/inkstitch/bin/tcl/tzdata/SystemV/EST5 new file mode 100644 index 0000000..52818c1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/EST5 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indianapolis)]} { + LoadTimeZoneFile America/Indianapolis +} +set TZData(:SystemV/EST5) $TZData(:America/Indianapolis) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT b/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT new file mode 100644 index 0000000..6cf2743 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/New_York)]} { + LoadTimeZoneFile America/New_York +} +set TZData(:SystemV/EST5EDT) $TZData(:America/New_York) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/HST10 b/inkstitch/bin/tcl/tzdata/SystemV/HST10 new file mode 100644 index 0000000..a4316af --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/HST10 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Honolulu)]} { + LoadTimeZoneFile Pacific/Honolulu +} +set TZData(:SystemV/HST10) $TZData(:Pacific/Honolulu) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/MST7 b/inkstitch/bin/tcl/tzdata/SystemV/MST7 new file mode 100644 index 0000000..e67a781 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/MST7 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Phoenix)]} { + LoadTimeZoneFile America/Phoenix +} +set TZData(:SystemV/MST7) $TZData(:America/Phoenix) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT b/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT new file mode 100644 index 0000000..fda5bf1 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:SystemV/MST7MDT) $TZData(:America/Denver) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/PST8 b/inkstitch/bin/tcl/tzdata/SystemV/PST8 new file mode 100644 index 0000000..8e30bb8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/PST8 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pitcairn)]} { + LoadTimeZoneFile Pacific/Pitcairn +} +set TZData(:SystemV/PST8) $TZData(:Pacific/Pitcairn) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT b/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT new file mode 100644 index 0000000..8281a9a --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:SystemV/PST8PDT) $TZData(:America/Los_Angeles) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/YST9 b/inkstitch/bin/tcl/tzdata/SystemV/YST9 new file mode 100644 index 0000000..32d3717 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/YST9 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Gambier)]} { + LoadTimeZoneFile Pacific/Gambier +} +set TZData(:SystemV/YST9) $TZData(:Pacific/Gambier) diff --git a/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT b/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT new file mode 100644 index 0000000..fba405f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Anchorage)]} { + LoadTimeZoneFile America/Anchorage +} +set TZData(:SystemV/YST9YDT) $TZData(:America/Anchorage) diff --git a/inkstitch/bin/tcl/tzdata/Turkey b/inkstitch/bin/tcl/tzdata/Turkey new file mode 100644 index 0000000..e20a7a5 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Turkey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Istanbul)]} { + LoadTimeZoneFile Europe/Istanbul +} +set TZData(:Turkey) $TZData(:Europe/Istanbul) diff --git a/inkstitch/bin/tcl/tzdata/UCT b/inkstitch/bin/tcl/tzdata/UCT new file mode 100644 index 0000000..8449328 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/UCT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UCT)]} { + LoadTimeZoneFile Etc/UCT +} +set TZData(:UCT) $TZData(:Etc/UCT) diff --git a/inkstitch/bin/tcl/tzdata/US/Alaska b/inkstitch/bin/tcl/tzdata/US/Alaska new file mode 100644 index 0000000..69a3899 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Alaska @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Anchorage)]} { + LoadTimeZoneFile America/Anchorage +} +set TZData(:US/Alaska) $TZData(:America/Anchorage) diff --git a/inkstitch/bin/tcl/tzdata/US/Aleutian b/inkstitch/bin/tcl/tzdata/US/Aleutian new file mode 100644 index 0000000..024e70b --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Aleutian @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Adak)]} { + LoadTimeZoneFile America/Adak +} +set TZData(:US/Aleutian) $TZData(:America/Adak) diff --git a/inkstitch/bin/tcl/tzdata/US/Arizona b/inkstitch/bin/tcl/tzdata/US/Arizona new file mode 100644 index 0000000..8eaa961 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Arizona @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Phoenix)]} { + LoadTimeZoneFile America/Phoenix +} +set TZData(:US/Arizona) $TZData(:America/Phoenix) diff --git a/inkstitch/bin/tcl/tzdata/US/Central b/inkstitch/bin/tcl/tzdata/US/Central new file mode 100644 index 0000000..2aab66e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Central @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Chicago)]} { + LoadTimeZoneFile America/Chicago +} +set TZData(:US/Central) $TZData(:America/Chicago) diff --git a/inkstitch/bin/tcl/tzdata/US/East-Indiana b/inkstitch/bin/tcl/tzdata/US/East-Indiana new file mode 100644 index 0000000..2035a06 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/East-Indiana @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:US/East-Indiana) $TZData(:America/Indiana/Indianapolis) diff --git a/inkstitch/bin/tcl/tzdata/US/Eastern b/inkstitch/bin/tcl/tzdata/US/Eastern new file mode 100644 index 0000000..3cf2651 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Eastern @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/New_York)]} { + LoadTimeZoneFile America/New_York +} +set TZData(:US/Eastern) $TZData(:America/New_York) diff --git a/inkstitch/bin/tcl/tzdata/US/Hawaii b/inkstitch/bin/tcl/tzdata/US/Hawaii new file mode 100644 index 0000000..6d1af65 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Hawaii @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Honolulu)]} { + LoadTimeZoneFile Pacific/Honolulu +} +set TZData(:US/Hawaii) $TZData(:Pacific/Honolulu) diff --git a/inkstitch/bin/tcl/tzdata/US/Indiana-Starke b/inkstitch/bin/tcl/tzdata/US/Indiana-Starke new file mode 100644 index 0000000..6ffe0e2 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Indiana-Starke @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Knox)]} { + LoadTimeZoneFile America/Indiana/Knox +} +set TZData(:US/Indiana-Starke) $TZData(:America/Indiana/Knox) diff --git a/inkstitch/bin/tcl/tzdata/US/Michigan b/inkstitch/bin/tcl/tzdata/US/Michigan new file mode 100644 index 0000000..b15035c --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Michigan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Detroit)]} { + LoadTimeZoneFile America/Detroit +} +set TZData(:US/Michigan) $TZData(:America/Detroit) diff --git a/inkstitch/bin/tcl/tzdata/US/Mountain b/inkstitch/bin/tcl/tzdata/US/Mountain new file mode 100644 index 0000000..b54235f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Mountain @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:US/Mountain) $TZData(:America/Denver) diff --git a/inkstitch/bin/tcl/tzdata/US/Pacific b/inkstitch/bin/tcl/tzdata/US/Pacific new file mode 100644 index 0000000..7232215 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Pacific @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:US/Pacific) $TZData(:America/Los_Angeles) diff --git a/inkstitch/bin/tcl/tzdata/US/Pacific-New b/inkstitch/bin/tcl/tzdata/US/Pacific-New new file mode 100644 index 0000000..2eb30f8 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Pacific-New @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:US/Pacific-New) $TZData(:America/Los_Angeles) diff --git a/inkstitch/bin/tcl/tzdata/US/Samoa b/inkstitch/bin/tcl/tzdata/US/Samoa new file mode 100644 index 0000000..ad86b4f --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/US/Samoa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pago_Pago)]} { + LoadTimeZoneFile Pacific/Pago_Pago +} +set TZData(:US/Samoa) $TZData(:Pacific/Pago_Pago) diff --git a/inkstitch/bin/tcl/tzdata/UTC b/inkstitch/bin/tcl/tzdata/UTC new file mode 100644 index 0000000..6d04d96 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/UTC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:UTC) $TZData(:Etc/UTC) diff --git a/inkstitch/bin/tcl/tzdata/Universal b/inkstitch/bin/tcl/tzdata/Universal new file mode 100644 index 0000000..4a9ed5e --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Universal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Universal) $TZData(:Etc/UTC) diff --git a/inkstitch/bin/tcl/tzdata/W-SU b/inkstitch/bin/tcl/tzdata/W-SU new file mode 100644 index 0000000..7e1f613 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/W-SU @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Moscow)]} { + LoadTimeZoneFile Europe/Moscow +} +set TZData(:W-SU) $TZData(:Europe/Moscow) diff --git a/inkstitch/bin/tcl/tzdata/WET b/inkstitch/bin/tcl/tzdata/WET new file mode 100644 index 0000000..60366a3 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/WET @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:WET) { + {-9223372036854775808 0 0 WET} + {228877200 3600 1 WEST} + {243997200 0 0 WET} + {260326800 3600 1 WEST} + {276051600 0 0 WET} + {291776400 3600 1 WEST} + {307501200 0 0 WET} + {323830800 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/inkstitch/bin/tcl/tzdata/Zulu b/inkstitch/bin/tcl/tzdata/Zulu new file mode 100644 index 0000000..e9748e4 --- /dev/null +++ b/inkstitch/bin/tcl/tzdata/Zulu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Zulu) $TZData(:Etc/UTC) diff --git a/inkstitch/bin/tcl/word.tcl b/inkstitch/bin/tcl/word.tcl new file mode 100644 index 0000000..b8f34a5 --- /dev/null +++ b/inkstitch/bin/tcl/word.tcl @@ -0,0 +1,144 @@ +# word.tcl -- +# +# This file defines various procedures for computing word boundaries in +# strings. This file is primarily needed so Tk text and entry widgets behave +# properly for different platforms. +# +# Copyright (c) 1996 by Sun Microsystems, Inc. +# Copyright (c) 1998 by Scritpics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The following variables are used to determine which characters are +# interpreted as white space. + +if {$::tcl_platform(platform) eq "windows"} { + # Windows style - any but a unicode space char + set ::tcl_wordchars {\S} + set ::tcl_nonwordchars {\s} +} else { + # Motif style - any unicode word char (number, letter, or underscore) + set ::tcl_wordchars {\w} + set ::tcl_nonwordchars {\W} +} + +# Arrange for caches of the real matcher REs to be kept, which enables the REs +# themselves to be cached for greater performance (and somewhat greater +# clarity too). + +namespace eval ::tcl { + variable WordBreakRE + array set WordBreakRE {} + + proc UpdateWordBreakREs args { + # Ignores the arguments + global tcl_wordchars tcl_nonwordchars + variable WordBreakRE + + # To keep the RE strings short... + set letter $tcl_wordchars + set space $tcl_nonwordchars + + set WordBreakRE(after) "$letter$space|$space$letter" + set WordBreakRE(before) "^.*($letter$space|$space$letter)" + set WordBreakRE(end) "$space*$letter+$space" + set WordBreakRE(next) "$letter*$space+$letter" + set WordBreakRE(previous) "$space*($letter+)$space*\$" + } + + # Initialize the cache + UpdateWordBreakREs + trace add variable ::tcl_wordchars write ::tcl::UpdateWordBreakREs + trace add variable ::tcl_nonwordchars write ::tcl::UpdateWordBreakREs +} + +# tcl_wordBreakAfter -- +# +# This procedure returns the index of the first word boundary after the +# starting point in the given string, or -1 if there are no more boundaries in +# the given string. The index returned refers to the first character of the +# pair that comprises a boundary. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_wordBreakAfter {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(after) $str result + return [lindex $result 1] +} + +# tcl_wordBreakBefore -- +# +# This procedure returns the index of the first word boundary before the +# starting point in the given string, or -1 if there are no more boundaries in +# the given string. The index returned refers to the second character of the +# pair that comprises a boundary. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_wordBreakBefore {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -- $WordBreakRE(before) [string range $str 0 $start] result + return [lindex $result 1] +} + +# tcl_endOfWord -- +# +# This procedure returns the index of the first end-of-word location after a +# starting index in the given string. An end-of-word location is defined to be +# the first whitespace character following the first non-whitespace character +# after the starting point. Returns -1 if there are no more words after the +# starting point. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_endOfWord {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(end) $str result + return [lindex $result 1] +} + +# tcl_startOfNextWord -- +# +# This procedure returns the index of the first start-of-word location after a +# starting index in the given string. A start-of-word location is defined to +# be a non-whitespace character following a whitespace character. Returns -1 +# if there are no more start-of-word locations after the starting point. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_startOfNextWord {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(next) $str result + return [lindex $result 1] +} + +# tcl_startOfPreviousWord -- +# +# This procedure returns the index of the first start-of-word location before +# a starting index in the given string. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_startOfPreviousWord {str start} { + variable ::tcl::WordBreakRE + set word {-1 -1} + regexp -indices -- $WordBreakRE(previous) [string range $str 0 $start-1] \ + result word + return [lindex $word 0] +} diff --git a/inkstitch/bin/tk/bgerror.tcl b/inkstitch/bin/tk/bgerror.tcl new file mode 100644 index 0000000..f46ab4c --- /dev/null +++ b/inkstitch/bin/tk/bgerror.tcl @@ -0,0 +1,259 @@ +# bgerror.tcl -- +# +# Implementation of the bgerror procedure. It posts a dialog box with +# the error message and gives the user a chance to see a more detailed +# stack trace, and possible do something more interesting with that +# trace (like save it to a log). This is adapted from work done by +# Donal K. Fellows. +# +# Copyright (c) 1998-2000 by Ajuba Solutions. +# Copyright (c) 2007 by ActiveState Software Inc. +# Copyright (c) 2007 Daniel A. Steffen + +namespace eval ::tk::dialog::error { + namespace import -force ::tk::msgcat::* + namespace export bgerror + option add *ErrorDialog.function.text [mc "Save To Log"] \ + widgetDefault + option add *ErrorDialog.function.command [namespace code SaveToLog] + option add *ErrorDialog*Label.font TkCaptionFont widgetDefault + if {[tk windowingsystem] eq "aqua"} { + option add *ErrorDialog*background systemAlertBackgroundActive \ + widgetDefault + option add *ErrorDialog*info.text.background white widgetDefault + option add *ErrorDialog*Button.highlightBackground \ + systemAlertBackgroundActive widgetDefault + } +} + +proc ::tk::dialog::error::Return {} { + variable button + + .bgerrorDialog.ok configure -state active -relief sunken + update idletasks + after 100 + set button 0 +} + +proc ::tk::dialog::error::Details {} { + set w .bgerrorDialog + set caption [option get $w.function text {}] + set command [option get $w.function command {}] + if { ($caption eq "") || ($command eq "") } { + grid forget $w.function + } + lappend command [$w.top.info.text get 1.0 end-1c] + $w.function configure -text $caption -command $command + grid $w.top.info - -sticky nsew -padx 3m -pady 3m +} + +proc ::tk::dialog::error::SaveToLog {text} { + if { $::tcl_platform(platform) eq "windows" } { + set allFiles *.* + } else { + set allFiles * + } + set types [list \ + [list [mc "Log Files"] .log] \ + [list [mc "Text Files"] .txt] \ + [list [mc "All Files"] $allFiles] \ + ] + set filename [tk_getSaveFile -title [mc "Select Log File"] \ + -filetypes $types -defaultextension .log -parent .bgerrorDialog] + if {![string length $filename]} { + return + } + set f [open $filename w] + puts -nonewline $f $text + close $f +} + +proc ::tk::dialog::error::Destroy {w} { + if {$w eq ".bgerrorDialog"} { + variable button + set button -1 + } +} + +# ::tk::dialog::error::bgerror -- +# This is the default version of bgerror. +# It tries to execute tkerror, if that fails it posts a dialog box containing +# the error message and gives the user a chance to ask to see a stack +# trace. +# Arguments: +# err - The error message. + +proc ::tk::dialog::error::bgerror err { + global errorInfo tcl_platform + variable button + + set info $errorInfo + + set ret [catch {::tkerror $err} msg]; + if {$ret != 1} {return -code $ret $msg} + + # Ok the application's tkerror either failed or was not found + # we use the default dialog then : + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + set ok [mc Ok] + } else { + set ok [mc OK] + } + + # Truncate the message if it is too wide (>maxLine characters) or + # too tall (>4 lines). Truncation occurs at the first point at + # which one of those conditions is met. + set displayedErr "" + set lines 0 + set maxLine 45 + foreach line [split $err \n] { + if { [string length $line] > $maxLine } { + append displayedErr "[string range $line 0 [expr {$maxLine-3}]]..." + break + } + if { $lines > 4 } { + append displayedErr "..." + break + } else { + append displayedErr "${line}\n" + } + incr lines + } + + set title [mc "Application Error"] + set text [mc "Error: %1\$s" $displayedErr] + set buttons [list ok $ok dismiss [mc "Skip Messages"] \ + function [mc "Details >>"]] + + # 1. Create the top-level window and divide it into top + # and bottom parts. + + set dlg .bgerrorDialog + destroy $dlg + toplevel $dlg -class ErrorDialog + wm withdraw $dlg + wm title $dlg $title + wm iconname $dlg ErrorDialog + wm protocol $dlg WM_DELETE_WINDOW { } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $dlg moveableAlert {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $dlg -type dialog + } + + frame $dlg.bot + frame $dlg.top + if {$windowingsystem eq "x11"} { + $dlg.bot configure -relief raised -bd 1 + $dlg.top configure -relief raised -bd 1 + } + pack $dlg.bot -side bottom -fill both + pack $dlg.top -side top -fill both -expand 1 + + set W [frame $dlg.top.info] + text $W.text -setgrid true -height 10 -wrap char \ + -yscrollcommand [list $W.scroll set] + if {$windowingsystem ne "aqua"} { + $W.text configure -width 40 + } + + scrollbar $W.scroll -command [list $W.text yview] + pack $W.scroll -side right -fill y + pack $W.text -side left -expand yes -fill both + $W.text insert 0.0 "$err\n$info" + $W.text mark set insert 0.0 + bind $W.text { focus %W } + $W.text configure -state disabled + + # 2. Fill the top part with bitmap and message + + # Max-width of message is the width of the screen... + set wrapwidth [winfo screenwidth $dlg] + # ...minus the width of the icon, padding and a fudge factor for + # the window manager decorations and aesthetics. + set wrapwidth [expr {$wrapwidth-60-[winfo pixels $dlg 9m]}] + label $dlg.msg -justify left -text $text -wraplength $wrapwidth + if {$windowingsystem eq "aqua"} { + # On the Macintosh, use the stop bitmap + label $dlg.bitmap -bitmap stop + } else { + # On other platforms, make the error icon + canvas $dlg.bitmap -width 32 -height 32 -highlightthickness 0 + $dlg.bitmap create oval 0 0 31 31 -fill red -outline black + $dlg.bitmap create line 9 9 23 23 -fill white -width 4 + $dlg.bitmap create line 9 23 23 9 -fill white -width 4 + } + grid $dlg.bitmap $dlg.msg -in $dlg.top -row 0 -padx 3m -pady 3m + grid configure $dlg.msg -sticky nsw -padx {0 3m} + grid rowconfigure $dlg.top 1 -weight 1 + grid columnconfigure $dlg.top 1 -weight 1 + + # 3. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach {name caption} $buttons { + button $dlg.$name -text $caption -default normal \ + -command [namespace code [list set button $i]] + grid $dlg.$name -in $dlg.bot -column $i -row 0 -sticky ew -padx 10 + grid columnconfigure $dlg.bot $i -weight 1 + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + if {($name eq "ok") || ($name eq "dismiss")} { + grid columnconfigure $dlg.bot $i -minsize 90 + } + grid configure $dlg.$name -pady 7 + } + incr i + } + # The "OK" button is the default for this dialog. + $dlg.ok configure -default active + + bind $dlg [namespace code Return] + bind $dlg [namespace code [list Destroy %W]] + $dlg.function configure -command [namespace code Details] + + # 6. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $dlg + + # 7. Ensure that we are topmost. + + raise $dlg + if {[tk windowingsystem] eq "win32"} { + # Place it topmost if we aren't at the top of the stacking + # order to ensure that it's seen + if {[lindex [wm stackorder .] end] ne "$dlg"} { + wm attributes $dlg -topmost 1 + } + } + + # 8. Set a grab and claim the focus too. + + ::tk::SetFocusGrab $dlg $dlg.ok + + # 9. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait [namespace which -variable button] + set copy $button; # Save a copy... + + ::tk::RestoreFocusGrab $dlg $dlg.ok destroy + + if {$copy == 1} { + return -code break + } +} + +namespace eval :: { + # Fool the indexer + proc bgerror err {} + rename bgerror {} + namespace import ::tk::dialog::error::bgerror +} diff --git a/inkstitch/bin/tk/button.tcl b/inkstitch/bin/tk/button.tcl new file mode 100644 index 0000000..75378cc --- /dev/null +++ b/inkstitch/bin/tk/button.tcl @@ -0,0 +1,757 @@ +# button.tcl -- +# +# This file defines the default bindings for Tk label, button, +# checkbutton, and radiobutton widgets and provides procedures +# that help in implementing those bindings. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 2002 ActiveState Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for buttons. +#------------------------------------------------------------------------- + +if {[tk windowingsystem] eq "aqua"} { + bind Radiobutton { + tk::ButtonEnter %W + } + bind Radiobutton <1> { + tk::ButtonDown %W + } + bind Radiobutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::ButtonEnter %W + } + bind Checkbutton <1> { + tk::ButtonDown %W + } + bind Checkbutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::ButtonLeave %W + } +} +if {"win32" eq [tk windowingsystem]} { + bind Checkbutton { + tk::CheckRadioInvoke %W select + } + bind Checkbutton { + tk::CheckRadioInvoke %W select + } + bind Checkbutton { + tk::CheckRadioInvoke %W deselect + } + bind Checkbutton <1> { + tk::CheckRadioDown %W + } + bind Checkbutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::CheckRadioEnter %W + } + bind Checkbutton { + tk::ButtonLeave %W + } + + bind Radiobutton <1> { + tk::CheckRadioDown %W + } + bind Radiobutton { + tk::ButtonUp %W + } + bind Radiobutton { + tk::CheckRadioEnter %W + } +} +if {"x11" eq [tk windowingsystem]} { + bind Checkbutton { + if {!$tk_strictMotif} { + tk::CheckInvoke %W + } + } + bind Radiobutton { + if {!$tk_strictMotif} { + tk::CheckRadioInvoke %W + } + } + bind Checkbutton <1> { + tk::CheckInvoke %W + } + bind Radiobutton <1> { + tk::CheckRadioInvoke %W + } + bind Checkbutton { + tk::CheckEnter %W + } + bind Radiobutton { + tk::ButtonEnter %W + } + bind Checkbutton { + tk::CheckLeave %W + } +} + +bind Button { + tk::ButtonInvoke %W +} +bind Checkbutton { + tk::CheckRadioInvoke %W +} +bind Radiobutton { + tk::CheckRadioInvoke %W +} +bind Button <> { + tk::ButtonInvoke %W +} +bind Checkbutton <> { + tk::CheckRadioInvoke %W +} +bind Radiobutton <> { + tk::CheckRadioInvoke %W +} + +bind Button {} +bind Button { + tk::ButtonEnter %W +} +bind Button { + tk::ButtonLeave %W +} +bind Button <1> { + tk::ButtonDown %W +} +bind Button { + tk::ButtonUp %W +} + +bind Checkbutton {} + +bind Radiobutton {} +bind Radiobutton { + tk::ButtonLeave %W +} + +if {"win32" eq [tk windowingsystem]} { + +######################### +# Windows implementation +######################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken -state active + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to inactive. +# Restore any modified relief too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + # Only save the button's relief if it does not yet exist. If there + # is an overrelief setting, Priv($w,relief) will already have been set, + # and the current value of the -relief option will be incorrect. + + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -relief sunken -state active + set Priv($w,prelief) sunken + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set delay [$w cget -repeatdelay] + set Priv(repeated) 0 + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$Priv(buttonWindow) eq $w} { + set Priv(buttonWindow) "" + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + $w configure -state normal + + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +# ::tk::CheckRadioEnter -- +# The procedure below is invoked when the mouse pointer enters a +# checkbutton or radiobutton widget. It records the button we're in +# and changes the state of the button to active unless the button is +# disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckRadioEnter w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + if {$Priv(buttonWindow) eq $w} { + $w configure -state active + } + if {[set over [$w cget -overrelief]] ne ""} { + set Priv($w,relief) [$w cget -relief] + set Priv($w,prelief) $over + $w configure -relief $over + } + } + set Priv(window) $w +} + +# ::tk::CheckRadioDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckRadioDown w { + variable ::tk::Priv + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + set Priv(repeated) 0 + $w configure -state active + } +} + +} + +if {"x11" eq [tk windowingsystem]} { + +##################### +# Unix implementation +##################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # On unix the state is active just with mouse-over + $w configure -state active + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to inactive. +# Restore any modified relief too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + # Only save the button's relief if it does not yet exist. If there + # is an overrelief setting, Priv($w,relief) will already have been set, + # and the current value of the -relief option will be incorrect. + + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -relief sunken + set Priv($w,prelief) sunken + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set delay [$w cget -repeatdelay] + set Priv(repeated) 0 + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$w eq $Priv(buttonWindow)} { + set Priv(buttonWindow) "" + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +} + +if {[tk windowingsystem] eq "aqua"} { + +#################### +# Mac implementation +#################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + + # If there's an -overrelief value, set the relief to that. + + if {$Priv(buttonWindow) eq $w} { + $w configure -state active + } elseif {[set over [$w cget -overrelief]] ne ""} { + set Priv($w,relief) [$w cget -relief] + set Priv($w,prelief) $over + $w configure -relief $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to +# inactive. If we're leaving the button window with a mouse button +# pressed (Priv(buttonWindow) == $w), restore the relief of the +# button too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {$w eq $Priv(buttonWindow)} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -state active + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set Priv(repeated) 0 + if { ![catch {$w cget -repeatdelay} delay] } { + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$Priv(buttonWindow) eq $w} { + set Priv(buttonWindow) "" + $w configure -state normal + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +} + +################## +# Shared routines +################## + +# ::tk::ButtonInvoke -- +# The procedure below is called when a button is invoked through +# the keyboard. It simulate a press of the button via the mouse. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonInvoke w { + if {[$w cget -state] ne "disabled"} { + set oldRelief [$w cget -relief] + set oldState [$w cget -state] + $w configure -state active -relief sunken + update idletasks + after 100 + $w configure -state $oldState -relief $oldRelief + uplevel #0 [list $w invoke] + } +} + +# ::tk::ButtonAutoInvoke -- +# +# Invoke an auto-repeating button, and set it up to continue to repeat. +# +# Arguments: +# w button to invoke. +# +# Results: +# None. +# +# Side effects: +# May create an after event to call ::tk::ButtonAutoInvoke. + +proc ::tk::ButtonAutoInvoke {w} { + variable ::tk::Priv + after cancel $Priv(afterId) + set delay [$w cget -repeatinterval] + if {$Priv(window) eq $w} { + incr Priv(repeated) + uplevel #0 [list $w invoke] + } + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } +} + +# ::tk::CheckRadioInvoke -- +# The procedure below is invoked when the mouse button is pressed in +# a checkbutton or radiobutton widget, or when the widget is invoked +# through the keyboard. It invokes the widget if it +# isn't disabled. +# +# Arguments: +# w - The name of the widget. +# cmd - The subcommand to invoke (one of invoke, select, or deselect). + +proc ::tk::CheckRadioInvoke {w {cmd invoke}} { + if {[$w cget -state] ne "disabled"} { + uplevel #0 [list $w $cmd] + } +} + +# Special versions of the handlers for checkbuttons on Unix that do the magic +# to make things work right when the checkbutton indicator is hidden; +# radiobuttons don't need this complexity. + +# ::tk::CheckInvoke -- +# The procedure below invokes the checkbutton, like ButtonInvoke, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckInvoke {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # Additional logic to switch the "selected" colors around if necessary + # (when we're indicator-less). + + if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { + if {[$w cget -selectcolor] eq $Priv($w,aselectcolor)} { + $w configure -selectcolor $Priv($w,selectcolor) + } else { + $w configure -selectcolor $Priv($w,aselectcolor) + } + } + uplevel #0 [list $w invoke] + } +} + +# ::tk::CheckEnter -- +# The procedure below enters the checkbutton, like ButtonEnter, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # On unix the state is active just with mouse-over + $w configure -state active + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + + # Compute what the "selected and active" color should be. + + if {![$w cget -indicatoron] && [$w cget -selectcolor] ne ""} { + set Priv($w,selectcolor) [$w cget -selectcolor] + lassign [winfo rgb $w [$w cget -selectcolor]] r1 g1 b1 + lassign [winfo rgb $w [$w cget -activebackground]] r2 g2 b2 + set Priv($w,aselectcolor) \ + [format "#%04x%04x%04x" [expr {($r1+$r2)/2}] \ + [expr {($g1+$g2)/2}] [expr {($b1+$b2)/2}]] + # use uplevel to work with other var resolvers + if {[uplevel #0 [list set [$w cget -variable]]] + eq [$w cget -onvalue]} { + $w configure -selectcolor $Priv($w,aselectcolor) + } + } + } + set Priv(window) $w +} + +# ::tk::CheckLeave -- +# The procedure below leaves the checkbutton, like ButtonLeave, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckLeave {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button "selected" color; assume that the user + # wasn't monkeying around with things too much. + + if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { + $w configure -selectcolor $Priv($w,selectcolor) + } + unset -nocomplain Priv($w,selectcolor) Priv($w,aselectcolor) + + # Restore the original button relief if it was changed by Tk. That is + # signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} diff --git a/inkstitch/bin/tk/choosedir.tcl b/inkstitch/bin/tk/choosedir.tcl new file mode 100644 index 0000000..00dca9d --- /dev/null +++ b/inkstitch/bin/tk/choosedir.tcl @@ -0,0 +1,308 @@ +# choosedir.tcl -- +# +# Choose directory dialog implementation for Unix/Mac. +# +# Copyright (c) 1998-2000 by Scriptics Corporation. +# All rights reserved. + +# Make sure the tk::dialog namespace, in which all dialogs should live, exists +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file {} + +# Make the chooseDir namespace inside the dialog namespace +namespace eval ::tk::dialog::file::chooseDir { + namespace import -force ::tk::msgcat::* +} + +# ::tk::dialog::file::chooseDir:: -- +# +# Implements the TK directory selection dialog. +# +# Arguments: +# args Options parsed by the procedure. +# +proc ::tk::dialog::file::chooseDir:: {args} { + variable ::tk::Priv + set dataName __tk_choosedir + upvar ::tk::dialog::file::$dataName data + Config $dataName $args + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + ::tk::dialog::file::Create $w TkChooseDir + } elseif {[winfo class $w] ne "TkChooseDir"} { + destroy $w + ::tk::dialog::file::Create $w TkChooseDir + } else { + set data(dirMenuBtn) $w.contents.f1.menu + set data(dirMenu) $w.contents.f1.menu.menu + set data(upBtn) $w.contents.f1.up + set data(icons) $w.contents.icons + set data(ent) $w.contents.f2.ent + set data(okBtn) $w.contents.f2.ok + set data(cancelBtn) $w.contents.f2.cancel + set data(hiddenBtn) $w.contents.f2.hidden + } + if {$::tk::dialog::file::showHiddenBtn} { + $data(hiddenBtn) configure -state normal + grid $data(hiddenBtn) + } else { + $data(hiddenBtn) configure -state disabled + grid remove $data(hiddenBtn) + } + + # When using -mustexist, manage the OK button state for validity + $data(okBtn) configure -state normal + if {$data(-mustexist)} { + $data(ent) configure -validate key \ + -validatecommand [list ::tk::dialog::file::chooseDir::IsOK? $w %P] + } else { + $data(ent) configure -validate none + } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + trace add variable data(selectPath) write \ + [list ::tk::dialog::file::SetPath $w] + $data(dirMenuBtn) configure \ + -textvariable ::tk::dialog::file::${dataName}(selectPath) + + set data(filter) "*" + set data(previousEntryText) "" + ::tk::dialog::file::UpdateWhenIdle $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(ent) + $data(ent) delete 0 end + $data(ent) insert 0 $data(selectPath) + $data(ent) selection range 0 end + $data(ent) icursor end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + + ::tk::RestoreFocusGrab $w $data(ent) withdraw + + # Cleanup traces on selectPath variable + # + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + $data(dirMenuBtn) configure -textvariable {} + + # Return value to user + # + + return $Priv(selectFilePath) +} + +# ::tk::dialog::file::chooseDir::Config -- +# +# Configures the Tk choosedir dialog according to the argument list +# +proc ::tk::dialog::file::chooseDir::Config {dataName argList} { + upvar ::tk::dialog::file::$dataName data + + # 0: Delete all variable that were set on data(selectPath) the + # last time the file dialog is used. The traces may cause troubles + # if the dialog is now used with a different -parent option. + # + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + + # 1: the configuration specs + # + set specs { + {-mustexist "" "" 0} + {-initialdir "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + } + + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + set data(-title) "[mc "Choose Directory"]" + } + + # Stub out the -multiple value for the dialog; it doesn't make sense for + # choose directory dialogs, but we have to have something there because we + # share so much code with the file dialogs. + set data(-multiple) 0 + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + # Ensure that initialdir is an absolute path name. + if {[file isdirectory $data(-initialdir)]} { + set old [pwd] + cd $data(-initialdir) + set data(selectPath) [pwd] + cd $old + } else { + set data(selectPath) [pwd] + } + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# Gets called when user presses Return in the "Selection" entry or presses OK. +# +proc ::tk::dialog::file::chooseDir::OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + # This is the brains behind selecting non-existant directories. Here's + # the flowchart: + # 1. If the icon list has a selection, join it with the current dir, + # and return that value. + # 1a. If the icon list does not have a selection ... + # 2. If the entry is empty, do nothing. + # 3. If the entry contains an invalid directory, then... + # 3a. If the value is the same as last time through here, end dialog. + # 3b. If the value is different than last time, save it and return. + # 4. If entry contains a valid directory, then... + # 4a. If the value is the same as the current directory, end dialog. + # 4b. If the value is different from the current directory, change to + # that directory. + + set selection [tk::IconList_CurSelection $data(icons)] + if {[llength $selection] != 0} { + set iconText [tk::IconList_Get $data(icons) [lindex $selection 0]] + set iconText [file join $data(selectPath) $iconText] + Done $w $iconText + } else { + set text [$data(ent) get] + if {$text eq ""} { + return + } + set text [file join {*}[file split [string trim $text]]] + if {![file exists $text] || ![file isdirectory $text]} { + # Entry contains an invalid directory. If it's the same as the + # last time they came through here, reset the saved value and end + # the dialog. Otherwise, save the value (so we can do this test + # next time). + if {$text eq $data(previousEntryText)} { + set data(previousEntryText) "" + Done $w $text + } else { + set data(previousEntryText) $text + } + } else { + # Entry contains a valid directory. If it is the same as the + # current directory, end the dialog. Otherwise, change to that + # directory. + if {$text eq $data(selectPath)} { + Done $w $text + } else { + set data(selectPath) $text + } + } + } + return +} + +# Change state of OK button to match -mustexist correctness of entry +# +proc ::tk::dialog::file::chooseDir::IsOK? {w text} { + upvar ::tk::dialog::file::[winfo name $w] data + + set ok [file isdirectory $text] + $data(okBtn) configure -state [expr {$ok ? "normal" : "disabled"}] + + # always return 1 + return 1 +} + +proc ::tk::dialog::file::chooseDir::DblClick {w} { + upvar ::tk::dialog::file::[winfo name $w] data + set selection [tk::IconList_CurSelection $data(icons)] + if {[llength $selection] != 0} { + set filenameFragment \ + [tk::IconList_Get $data(icons) [lindex $selection 0]] + set file $data(selectPath) + if {[file isdirectory $file]} { + ::tk::dialog::file::ListInvoke $w [list $filenameFragment] + return + } + } +} + +# Gets called when user browses the IconList widget (dragging mouse, arrow +# keys, etc) +# +proc ::tk::dialog::file::chooseDir::ListBrowse {w text} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$text eq ""} { + return + } + + set file [::tk::dialog::file::JoinFile $data(selectPath) $text] + $data(ent) delete 0 end + $data(ent) insert 0 $file +} + +# ::tk::dialog::file::chooseDir::Done -- +# +# Gets called when user has input a valid filename. Pops up a +# dialog box to confirm selection when necessary. Sets the +# Priv(selectFilePath) variable, which will break the "vwait" +# loop in tk_chooseDirectory and return the selected filename to the +# script that calls tk_getOpenFile or tk_getSaveFile +# +proc ::tk::dialog::file::chooseDir::Done {w {selectFilePath ""}} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + if {$selectFilePath eq ""} { + set selectFilePath $data(selectPath) + } + if {$data(-mustexist) && ![file isdirectory $selectFilePath]} { + return + } + set Priv(selectFilePath) $selectFilePath +} diff --git a/inkstitch/bin/tk/clrpick.tcl b/inkstitch/bin/tk/clrpick.tcl new file mode 100644 index 0000000..092915c --- /dev/null +++ b/inkstitch/bin/tk/clrpick.tcl @@ -0,0 +1,693 @@ +# clrpick.tcl -- +# +# Color selection dialog for platforms that do not support a +# standard color selection dialog. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# ToDo: +# +# (1): Find out how many free colors are left in the colormap and +# don't allocate too many colors. +# (2): Implement HSV color selection. +# + +# Make sure namespaces exist +namespace eval ::tk {} +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::color { + namespace import ::tk::msgcat::* +} + +# ::tk::dialog::color:: -- +# +# Create a color dialog and let the user choose a color. This function +# should not be called directly. It is called by the tk_chooseColor +# function when a native color selector widget does not exist +# +proc ::tk::dialog::color:: {args} { + variable ::tk::Priv + set dataName __tk__color + upvar ::tk::dialog::color::$dataName data + set w .$dataName + + # The lines variables track the start and end indices of the line + # elements in the colorbar canvases. + set data(lines,red,start) 0 + set data(lines,red,last) -1 + set data(lines,green,start) 0 + set data(lines,green,last) -1 + set data(lines,blue,start) 0 + set data(lines,blue,last) -1 + + # This is the actual number of lines that are drawn in each color strip. + # Note that the bars may be of any width. + # However, NUM_COLORBARS must be a number that evenly divides 256. + # Such as 256, 128, 64, etc. + set data(NUM_COLORBARS) 16 + + # BARS_WIDTH is the number of pixels wide the color bar portion of the + # canvas is. This number must be a multiple of NUM_COLORBARS + set data(BARS_WIDTH) 160 + + # PLGN_WIDTH is the number of pixels wide of the triangular selection + # polygon. This also results in the definition of the padding on the + # left and right sides which is half of PLGN_WIDTH. Make this number even. + set data(PLGN_HEIGHT) 10 + + # PLGN_HEIGHT is the height of the selection polygon and the height of the + # selection rectangle at the bottom of the color bar. No restrictions. + set data(PLGN_WIDTH) 10 + + Config $dataName $args + InitValues $dataName + + set sc [winfo screen $data(-parent)] + set winExists [winfo exists $w] + if {!$winExists || $sc ne [winfo screen $w]} { + if {$winExists} { + destroy $w + } + toplevel $w -class TkColorDialog -screen $sc + if {[tk windowingsystem] eq "x11"} {wm attributes $w -type dialog} + BuildDialog $w + } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + # 5. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # 6. Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(okBtn) + + # 7. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectColor) + set result $Priv(selectColor) + ::tk::RestoreFocusGrab $w $data(okBtn) + unset data + + return $result +} + +# ::tk::dialog::color::InitValues -- +# +# Get called during initialization or when user resets NUM_COLORBARS +# +proc ::tk::dialog::color::InitValues {dataName} { + upvar ::tk::dialog::color::$dataName data + + # IntensityIncr is the difference in color intensity between a colorbar + # and its neighbors. + set data(intensityIncr) [expr {256 / $data(NUM_COLORBARS)}] + + # ColorbarWidth is the width of each colorbar + set data(colorbarWidth) [expr {$data(BARS_WIDTH) / $data(NUM_COLORBARS)}] + + # Indent is the width of the space at the left and right side of the + # colorbar. It is always half the selector polygon width, because the + # polygon extends into the space. + set data(indent) [expr {$data(PLGN_WIDTH) / 2}] + + set data(colorPad) 2 + set data(selPad) [expr {$data(PLGN_WIDTH) / 2}] + + # + # minX is the x coordinate of the first colorbar + # + set data(minX) $data(indent) + + # + # maxX is the x coordinate of the last colorbar + # + set data(maxX) [expr {$data(BARS_WIDTH) + $data(indent)-1}] + + # + # canvasWidth is the width of the entire canvas, including the indents + # + set data(canvasWidth) [expr {$data(BARS_WIDTH) + $data(PLGN_WIDTH)}] + + # Set the initial color, specified by -initialcolor, or the + # color chosen by the user the last time. + set data(selection) $data(-initialcolor) + set data(finalColor) $data(-initialcolor) + set rgb [winfo rgb . $data(selection)] + + set data(red,intensity) [expr {[lindex $rgb 0]/0x100}] + set data(green,intensity) [expr {[lindex $rgb 1]/0x100}] + set data(blue,intensity) [expr {[lindex $rgb 2]/0x100}] +} + +# ::tk::dialog::color::Config -- +# +# Parses the command line arguments to tk_chooseColor +# +proc ::tk::dialog::color::Config {dataName argList} { + variable ::tk::Priv + upvar ::tk::dialog::color::$dataName data + + # 1: the configuration specs + # + if {[info exists Priv(selectColor)] && $Priv(selectColor) ne ""} { + set defaultColor $Priv(selectColor) + } else { + set defaultColor [. cget -background] + } + + set specs [list \ + [list -initialcolor "" "" $defaultColor] \ + [list -parent "" "" "."] \ + [list -title "" "" [mc "Color"]] \ + ] + + # 2: parse the arguments + # + tclParseConfigSpec ::tk::dialog::color::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + set data(-title) " " + } + if {[catch {winfo rgb . $data(-initialcolor)} err]} { + error $err + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# ::tk::dialog::color::BuildDialog -- +# +# Build the dialog. +# +proc ::tk::dialog::color::BuildDialog {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + # TopFrame contains the color strips and the color selection + # + set topFrame [frame $w.top -relief raised -bd 1] + + # StripsFrame contains the colorstrips and the individual RGB entries + set stripsFrame [frame $topFrame.colorStrip] + + set maxWidth [::tk::mcmaxamp &Red &Green &Blue] + set maxWidth [expr {$maxWidth<6 ? 6 : $maxWidth}] + set colorList { + red "&Red" + green "&Green" + blue "&Blue" + } + foreach {color l} $colorList { + # each f frame contains an [R|G|B] entry and the equiv. color strip. + set f [frame $stripsFrame.$color] + + # The box frame contains the label and entry widget for an [R|G|B] + set box [frame $f.box] + + ::tk::AmpWidget label $box.label -text "[mc $l]:" \ + -width $maxWidth -anchor ne + bind $box.label <> [list focus $box.entry] + + entry $box.entry -textvariable \ + ::tk::dialog::color::[winfo name $w]($color,intensity) \ + -width 4 + pack $box.label -side left -fill y -padx 2 -pady 3 + pack $box.entry -side left -anchor n -pady 0 + pack $box -side left -fill both + + set height [expr { + [winfo reqheight $box.entry] - + 2*([$box.entry cget -highlightthickness] + [$box.entry cget -bd]) + }] + + canvas $f.color -height $height \ + -width $data(BARS_WIDTH) -relief sunken -bd 2 + canvas $f.sel -height $data(PLGN_HEIGHT) \ + -width $data(canvasWidth) -highlightthickness 0 + pack $f.color -expand yes -fill both + pack $f.sel -expand yes -fill both + + pack $f -side top -fill x -padx 0 -pady 2 + + set data($color,entry) $box.entry + set data($color,col) $f.color + set data($color,sel) $f.sel + + bind $data($color,col) \ + [list tk::dialog::color::DrawColorScale $w $color 1] + bind $data($color,col) \ + [list tk::dialog::color::EnterColorBar $w $color] + bind $data($color,col) \ + [list tk::dialog::color::LeaveColorBar $w $color] + + bind $data($color,sel) \ + [list tk::dialog::color::EnterColorBar $w $color] + bind $data($color,sel) \ + [list tk::dialog::color::LeaveColorBar $w $color] + + bind $box.entry [list tk::dialog::color::HandleRGBEntry $w] + } + + pack $stripsFrame -side left -fill both -padx 4 -pady 10 + + # The selFrame contains a frame that demonstrates the currently + # selected color + # + set selFrame [frame $topFrame.sel] + set lab [::tk::AmpWidget label $selFrame.lab \ + -text [mc "&Selection:"] -anchor sw] + set ent [entry $selFrame.ent \ + -textvariable ::tk::dialog::color::[winfo name $w](selection) \ + -width 16] + set f1 [frame $selFrame.f1 -relief sunken -bd 2] + set data(finalCanvas) [frame $f1.demo -bd 0 -width 100 -height 70] + + pack $lab $ent -side top -fill x -padx 4 -pady 2 + pack $f1 -expand yes -anchor nw -fill both -padx 6 -pady 10 + pack $data(finalCanvas) -expand yes -fill both + + bind $ent [list tk::dialog::color::HandleSelEntry $w] + + pack $selFrame -side left -fill none -anchor nw + pack $topFrame -side top -expand yes -fill both -anchor nw + + # the botFrame frame contains the buttons + # + set botFrame [frame $w.bot -relief raised -bd 1] + + ::tk::AmpWidget button $botFrame.ok -text [mc "&OK"] \ + -command [list tk::dialog::color::OkCmd $w] + ::tk::AmpWidget button $botFrame.cancel -text [mc "&Cancel"] \ + -command [list tk::dialog::color::CancelCmd $w] + + set data(okBtn) $botFrame.ok + set data(cancelBtn) $botFrame.cancel + + grid x $botFrame.ok x $botFrame.cancel x -sticky ew + grid configure $botFrame.ok $botFrame.cancel -padx 10 -pady 10 + grid columnconfigure $botFrame {0 4} -weight 1 -uniform space + grid columnconfigure $botFrame {1 3} -weight 1 -uniform button + grid columnconfigure $botFrame 2 -weight 2 -uniform space + pack $botFrame -side bottom -fill x + + # Accelerator bindings + bind $lab <> [list focus $ent] + bind $w [list tk::ButtonInvoke $data(cancelBtn)] + bind $w [list tk::AltKeyInDialog $w %A] + + wm protocol $w WM_DELETE_WINDOW [list tk::dialog::color::CancelCmd $w] + bind $lab [list tk::dialog::color::CancelCmd $w] +} + +# ::tk::dialog::color::SetRGBValue -- +# +# Sets the current selection of the dialog box +# +proc ::tk::dialog::color::SetRGBValue {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + set data(red,intensity) [lindex $color 0] + set data(green,intensity) [lindex $color 1] + set data(blue,intensity) [lindex $color 2] + + RedrawColorBars $w all + + # Now compute the new x value of each colorbars pointer polygon + foreach color {red green blue} { + set x [RgbToX $w $data($color,intensity)] + MoveSelector $w $data($color,sel) $color $x 0 + } +} + +# ::tk::dialog::color::XToRgb -- +# +# Converts a screen coordinate to intensity +# +proc ::tk::dialog::color::XToRgb {w x} { + upvar ::tk::dialog::color::[winfo name $w] data + + set x [expr {($x * $data(intensityIncr))/ $data(colorbarWidth)}] + if {$x > 255} { + set x 255 + } + return $x +} + +# ::tk::dialog::color::RgbToX +# +# Converts an intensity to screen coordinate. +# +proc ::tk::dialog::color::RgbToX {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + return [expr {($color * $data(colorbarWidth)/ $data(intensityIncr))}] +} + +# ::tk::dialog::color::DrawColorScale -- +# +# Draw color scale is called whenever the size of one of the color +# scale canvases is changed. +# +proc ::tk::dialog::color::DrawColorScale {w c {create 0}} { + upvar ::tk::dialog::color::[winfo name $w] data + + # col: color bar canvas + # sel: selector canvas + set col $data($c,col) + set sel $data($c,sel) + + # First handle the case that we are creating everything for the first time. + if {$create} { + # First remove all the lines that already exist. + if { $data(lines,$c,last) > $data(lines,$c,start)} { + for {set i $data(lines,$c,start)} \ + {$i <= $data(lines,$c,last)} {incr i} { + $sel delete $i + } + } + # Delete the selector if it exists + if {[info exists data($c,index)]} { + $sel delete $data($c,index) + } + + # Draw the selection polygons + CreateSelector $w $sel $c + $sel bind $data($c,index) \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(selPad) 1] + $sel bind $data($c,index) \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(selPad)] + $sel bind $data($c,index) \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(selPad)] + + set height [winfo height $col] + # Create an invisible region under the colorstrip to catch mouse clicks + # that aren't on the selector. + set data($c,clickRegion) [$sel create rectangle 0 0 \ + $data(canvasWidth) $height -fill {} -outline {}] + + bind $col \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(colorPad)] + bind $col \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(colorPad)] + bind $col \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(colorPad)] + + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(selPad)] + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(selPad)] + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(selPad)] + } else { + # l is the canvas index of the first colorbar. + set l $data(lines,$c,start) + } + + # Draw the color bars. + set highlightW [expr {[$col cget -highlightthickness] + [$col cget -bd]}] + for {set i 0} { $i < $data(NUM_COLORBARS)} { incr i} { + set intensity [expr {$i * $data(intensityIncr)}] + set startx [expr {$i * $data(colorbarWidth) + $highlightW}] + if {$c eq "red"} { + set color [format "#%02x%02x%02x" \ + $intensity $data(green,intensity) $data(blue,intensity)] + } elseif {$c eq "green"} { + set color [format "#%02x%02x%02x" \ + $data(red,intensity) $intensity $data(blue,intensity)] + } else { + set color [format "#%02x%02x%02x" \ + $data(red,intensity) $data(green,intensity) $intensity] + } + + if {$create} { + set index [$col create rect $startx $highlightW \ + [expr {$startx +$data(colorbarWidth)}] \ + [expr {[winfo height $col] + $highlightW}] \ + -fill $color -outline $color] + } else { + $col itemconfigure $l -fill $color -outline $color + incr l + } + } + $sel raise $data($c,index) + + if {$create} { + set data(lines,$c,last) $index + set data(lines,$c,start) [expr {$index - $data(NUM_COLORBARS) + 1}] + } + + RedrawFinalColor $w +} + +# ::tk::dialog::color::CreateSelector -- +# +# Creates and draws the selector polygon at the position +# $data($c,intensity). +# +proc ::tk::dialog::color::CreateSelector {w sel c } { + upvar ::tk::dialog::color::[winfo name $w] data + set data($c,index) [$sel create polygon \ + 0 $data(PLGN_HEIGHT) \ + $data(PLGN_WIDTH) $data(PLGN_HEIGHT) \ + $data(indent) 0] + set data($c,x) [RgbToX $w $data($c,intensity)] + $sel move $data($c,index) $data($c,x) 0 +} + +# ::tk::dialog::color::RedrawFinalColor +# +# Combines the intensities of the three colors into the final color +# +proc ::tk::dialog::color::RedrawFinalColor {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + set color [format "#%02x%02x%02x" $data(red,intensity) \ + $data(green,intensity) $data(blue,intensity)] + + $data(finalCanvas) configure -bg $color + set data(finalColor) $color + set data(selection) $color + set data(finalRGB) [list \ + $data(red,intensity) \ + $data(green,intensity) \ + $data(blue,intensity)] +} + +# ::tk::dialog::color::RedrawColorBars -- +# +# Only redraws the colors on the color strips that were not manipulated. +# Params: color of colorstrip that changed. If color is not [red|green|blue] +# Then all colorstrips will be updated +# +proc ::tk::dialog::color::RedrawColorBars {w colorChanged} { + upvar ::tk::dialog::color::[winfo name $w] data + + switch $colorChanged { + red { + DrawColorScale $w green + DrawColorScale $w blue + } + green { + DrawColorScale $w red + DrawColorScale $w blue + } + blue { + DrawColorScale $w red + DrawColorScale $w green + } + default { + DrawColorScale $w red + DrawColorScale $w green + DrawColorScale $w blue + } + } + RedrawFinalColor $w +} + +#---------------------------------------------------------------------- +# Event handlers +#---------------------------------------------------------------------- + +# ::tk::dialog::color::StartMove -- +# +# Handles a mousedown button event over the selector polygon. +# Adds the bindings for moving the mouse while the button is +# pressed. Sets the binding for the button-release event. +# +# Params: sel is the selector canvas window, color is the color of the strip. +# +proc ::tk::dialog::color::StartMove {w sel color x delta {dontMove 0}} { + upvar ::tk::dialog::color::[winfo name $w] data + + if {!$dontMove} { + MoveSelector $w $sel $color $x $delta + } +} + +# ::tk::dialog::color::MoveSelector -- +# +# Moves the polygon selector so that its middle point has the same +# x value as the specified x. If x is outside the bounds [0,255], +# the selector is set to the closest endpoint. +# +# Params: sel is the selector canvas, c is [red|green|blue] +# x is a x-coordinate. +# +proc ::tk::dialog::color::MoveSelector {w sel color x delta} { + upvar ::tk::dialog::color::[winfo name $w] data + + incr x -$delta + + if { $x < 0 } { + set x 0 + } elseif { $x > $data(BARS_WIDTH)} { + set x $data(BARS_WIDTH) + } + set diff [expr {$x - $data($color,x)}] + $sel move $data($color,index) $diff 0 + set data($color,x) [expr {$data($color,x) + $diff}] + + # Return the x value that it was actually set at + return $x +} + +# ::tk::dialog::color::ReleaseMouse +# +# Removes mouse tracking bindings, updates the colorbars. +# +# Params: sel is the selector canvas, color is the color of the strip, +# x is the x-coord of the mouse. +# +proc ::tk::dialog::color::ReleaseMouse {w sel color x delta} { + upvar ::tk::dialog::color::[winfo name $w] data + + set x [MoveSelector $w $sel $color $x $delta] + + # Determine exactly what color we are looking at. + set data($color,intensity) [XToRgb $w $x] + + RedrawColorBars $w $color +} + +# ::tk::dialog::color::ResizeColorbars -- +# +# Completely redraws the colorbars, including resizing the +# colorstrips +# +proc ::tk::dialog::color::ResizeColorBars {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + if { + ($data(BARS_WIDTH) < $data(NUM_COLORBARS)) || + (($data(BARS_WIDTH) % $data(NUM_COLORBARS)) != 0) + } then { + set data(BARS_WIDTH) $data(NUM_COLORBARS) + } + InitValues [winfo name $w] + foreach color {red green blue} { + $data($color,col) configure -width $data(canvasWidth) + DrawColorScale $w $color 1 + } +} + +# ::tk::dialog::color::HandleSelEntry -- +# +# Handles the return keypress event in the "Selection:" entry +# +proc ::tk::dialog::color::HandleSelEntry {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + set text [string trim $data(selection)] + # Check to make sure that the color is valid + if {[catch {set color [winfo rgb . $text]} ]} { + set data(selection) $data(finalColor) + return + } + + set R [expr {[lindex $color 0]/0x100}] + set G [expr {[lindex $color 1]/0x100}] + set B [expr {[lindex $color 2]/0x100}] + + SetRGBValue $w "$R $G $B" + set data(selection) $text +} + +# ::tk::dialog::color::HandleRGBEntry -- +# +# Handles the return keypress event in the R, G or B entry +# +proc ::tk::dialog::color::HandleRGBEntry {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + foreach c {red green blue} { + if {[catch { + set data($c,intensity) [expr {int($data($c,intensity))}] + }]} { + set data($c,intensity) 0 + } + + if {$data($c,intensity) < 0} { + set data($c,intensity) 0 + } + if {$data($c,intensity) > 255} { + set data($c,intensity) 255 + } + } + + SetRGBValue $w "$data(red,intensity) \ + $data(green,intensity) $data(blue,intensity)" +} + +# mouse cursor enters a color bar +# +proc ::tk::dialog::color::EnterColorBar {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + $data($color,sel) itemconfigure $data($color,index) -fill red +} + +# mouse leaves enters a color bar +# +proc ::tk::dialog::color::LeaveColorBar {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + $data($color,sel) itemconfigure $data($color,index) -fill black +} + +# user hits OK button +# +proc ::tk::dialog::color::OkCmd {w} { + variable ::tk::Priv + upvar ::tk::dialog::color::[winfo name $w] data + + set Priv(selectColor) $data(finalColor) +} + +# user hits Cancel button or destroys window +# +proc ::tk::dialog::color::CancelCmd {w} { + variable ::tk::Priv + set Priv(selectColor) "" +} diff --git a/inkstitch/bin/tk/comdlg.tcl b/inkstitch/bin/tk/comdlg.tcl new file mode 100644 index 0000000..39d27d3 --- /dev/null +++ b/inkstitch/bin/tk/comdlg.tcl @@ -0,0 +1,310 @@ +# comdlg.tcl -- +# +# Some functions needed for the common dialog boxes. Probably need to go +# in a different file. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# tclParseConfigSpec -- +# +# Parses a list of "-option value" pairs. If all options and +# values are legal, the values are stored in +# $data($option). Otherwise an error message is returned. When +# an error happens, the data() array may have been partially +# modified, but all the modified members of the data(0 array are +# guaranteed to have valid values. This is different than +# Tk_ConfigureWidget() which does not modify the value of a +# widget record if any error occurs. +# +# Arguments: +# +# w = widget record to modify. Must be the pathname of a widget. +# +# specs = { +# {-commandlineswitch resourceName ResourceClass defaultValue verifier} +# {....} +# } +# +# flags = currently unused. +# +# argList = The list of "-option value" pairs. +# +proc tclParseConfigSpec {w specs flags argList} { + upvar #0 $w data + + # 1: Put the specs in associative arrays for faster access + # + foreach spec $specs { + if {[llength $spec] < 4} { + error "\"spec\" should contain 5 or 4 elements" + } + set cmdsw [lindex $spec 0] + set cmd($cmdsw) "" + set rname($cmdsw) [lindex $spec 1] + set rclass($cmdsw) [lindex $spec 2] + set def($cmdsw) [lindex $spec 3] + set verproc($cmdsw) [lindex $spec 4] + } + + if {[llength $argList] & 1} { + set cmdsw [lindex $argList end] + if {![info exists cmd($cmdsw)]} { + error "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" + } + error "value for \"$cmdsw\" missing" + } + + # 2: set the default values + # + foreach cmdsw [array names cmd] { + set data($cmdsw) $def($cmdsw) + } + + # 3: parse the argument list + # + foreach {cmdsw value} $argList { + if {![info exists cmd($cmdsw)]} { + error "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" + } + set data($cmdsw) $value + } + + # Done! +} + +proc tclListValidFlags {v} { + upvar $v cmd + + set len [llength [array names cmd]] + set i 1 + set separator "" + set errormsg "" + foreach cmdsw [lsort [array names cmd]] { + append errormsg "$separator$cmdsw" + incr i + if {$i == $len} { + set separator ", or " + } else { + set separator ", " + } + } + return $errormsg +} + +#---------------------------------------------------------------------- +# +# Focus Group +# +# Focus groups are used to handle the user's focusing actions inside a +# toplevel. +# +# One example of using focus groups is: when the user focuses on an +# entry, the text in the entry is highlighted and the cursor is put to +# the end of the text. When the user changes focus to another widget, +# the text in the previously focused entry is validated. +# +#---------------------------------------------------------------------- + + +# ::tk::FocusGroup_Create -- +# +# Create a focus group. All the widgets in a focus group must be +# within the same focus toplevel. Each toplevel can have only +# one focus group, which is identified by the name of the +# toplevel widget. +# +proc ::tk::FocusGroup_Create {t} { + variable ::tk::Priv + if {[winfo toplevel $t] ne $t} { + error "$t is not a toplevel window" + } + if {![info exists Priv(fg,$t)]} { + set Priv(fg,$t) 1 + set Priv(focus,$t) "" + bind $t [list tk::FocusGroup_In $t %W %d] + bind $t [list tk::FocusGroup_Out $t %W %d] + bind $t [list tk::FocusGroup_Destroy $t %W] + } +} + +# ::tk::FocusGroup_BindIn -- +# +# Add a widget into the "FocusIn" list of the focus group. The $cmd will be +# called when the widget is focused on by the user. +# +proc ::tk::FocusGroup_BindIn {t w cmd} { + variable FocusIn + variable ::tk::Priv + if {![info exists Priv(fg,$t)]} { + error "focus group \"$t\" doesn't exist" + } + set FocusIn($t,$w) $cmd +} + + +# ::tk::FocusGroup_BindOut -- +# +# Add a widget into the "FocusOut" list of the focus group. The +# $cmd will be called when the widget loses the focus (User +# types Tab or click on another widget). +# +proc ::tk::FocusGroup_BindOut {t w cmd} { + variable FocusOut + variable ::tk::Priv + if {![info exists Priv(fg,$t)]} { + error "focus group \"$t\" doesn't exist" + } + set FocusOut($t,$w) $cmd +} + +# ::tk::FocusGroup_Destroy -- +# +# Cleans up when members of the focus group is deleted, or when the +# toplevel itself gets deleted. +# +proc ::tk::FocusGroup_Destroy {t w} { + variable FocusIn + variable FocusOut + variable ::tk::Priv + + if {$t eq $w} { + unset Priv(fg,$t) + unset Priv(focus,$t) + + foreach name [array names FocusIn $t,*] { + unset FocusIn($name) + } + foreach name [array names FocusOut $t,*] { + unset FocusOut($name) + } + } else { + if {[info exists Priv(focus,$t)] && ($Priv(focus,$t) eq $w)} { + set Priv(focus,$t) "" + } + unset -nocomplain FocusIn($t,$w) FocusOut($t,$w) + } +} + +# ::tk::FocusGroup_In -- +# +# Handles the event. Calls the FocusIn command for the newly +# focused widget in the focus group. +# +proc ::tk::FocusGroup_In {t w detail} { + variable FocusIn + variable ::tk::Priv + + if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { + # This is caused by mouse moving out&in of the window *or* + # ordinary keypresses some window managers (ie: CDE [Bug: 2960]). + return + } + if {![info exists FocusIn($t,$w)]} { + set FocusIn($t,$w) "" + return + } + if {![info exists Priv(focus,$t)]} { + return + } + if {$Priv(focus,$t) eq $w} { + # This is already in focus + # + return + } else { + set Priv(focus,$t) $w + eval $FocusIn($t,$w) + } +} + +# ::tk::FocusGroup_Out -- +# +# Handles the event. Checks if this is really a lose +# focus event, not one generated by the mouse moving out of the +# toplevel window. Calls the FocusOut command for the widget +# who loses its focus. +# +proc ::tk::FocusGroup_Out {t w detail} { + variable FocusOut + variable ::tk::Priv + + if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { + # This is caused by mouse moving out of the window + return + } + if {![info exists Priv(focus,$t)]} { + return + } + if {![info exists FocusOut($t,$w)]} { + return + } else { + eval $FocusOut($t,$w) + set Priv(focus,$t) "" + } +} + +# ::tk::FDGetFileTypes -- +# +# Process the string given by the -filetypes option of the file +# dialogs. Similar to the C function TkGetFileFilters() on the Mac +# and Windows platform. +# +proc ::tk::FDGetFileTypes {string} { + foreach t $string { + if {[llength $t] < 2 || [llength $t] > 3} { + error "bad file type \"$t\", should be \"typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?\"" + } + lappend fileTypes([lindex $t 0]) {*}[lindex $t 1] + } + + set types {} + foreach t $string { + set label [lindex $t 0] + set exts {} + + if {[info exists hasDoneType($label)]} { + continue + } + + # Validate each macType. This is to agree with the + # behaviour of TkGetFileFilters(). This list may be + # empty. + foreach macType [lindex $t 2] { + if {[string length $macType] != 4} { + error "bad Macintosh file type \"$macType\"" + } + } + + set name "$label \(" + set sep "" + set doAppend 1 + foreach ext $fileTypes($label) { + if {$ext eq ""} { + continue + } + regsub {^[.]} $ext "*." ext + if {![info exists hasGotExt($label,$ext)]} { + if {$doAppend} { + if {[string length $sep] && [string length $name]>40} { + set doAppend 0 + append name $sep... + } else { + append name $sep$ext + } + } + lappend exts $ext + set hasGotExt($label,$ext) 1 + } + set sep "," + } + append name "\)" + lappend types [list $name $exts] + + set hasDoneType($label) 1 + } + + return $types +} diff --git a/inkstitch/bin/tk/console.tcl b/inkstitch/bin/tk/console.tcl new file mode 100644 index 0000000..e44324f --- /dev/null +++ b/inkstitch/bin/tk/console.tcl @@ -0,0 +1,1065 @@ +# console.tcl -- +# +# This code constructs the console window for an application. It +# can be used by non-unix systems that do not have built-in support +# for shells. +# +# Copyright (c) 1995-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Ajuba Solutions. +# Copyright (c) 2007 Daniel A. Steffen +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# TODO: history - remember partially written command + +namespace eval ::tk::console { + variable blinkTime 500 ; # msecs to blink braced range for + variable blinkRange 1 ; # enable blinking of the entire braced range + variable magicKeys 1 ; # enable brace matching and proc/var recognition + variable maxLines 600 ; # maximum # of lines buffered in console + variable showMatches 1 ; # show multiple expand matches + + variable inPlugin [info exists embed_args] + variable defaultPrompt ; # default prompt if tcl_prompt1 isn't used + + + if {$inPlugin} { + set defaultPrompt {subst {[history nextid] % }} + } else { + set defaultPrompt {subst {([file tail [pwd]]) [history nextid] % }} + } +} + +# simple compat function for tkcon code added for this console +interp alias {} EvalAttached {} consoleinterp eval + +# ::tk::ConsoleInit -- +# This procedure constructs and configures the console windows. +# +# Arguments: +# None. + +proc ::tk::ConsoleInit {} { + global tcl_platform + + if {![consoleinterp eval {set tcl_interactive}]} { + wm withdraw . + } + + if {[tk windowingsystem] eq "aqua"} { + set mod "Cmd" + } else { + set mod "Ctrl" + } + + if {[catch {menu .menubar} err]} { + bgerror "INIT: $err" + } + AmpMenuArgs .menubar add cascade -label [mc &File] -menu .menubar.file + AmpMenuArgs .menubar add cascade -label [mc &Edit] -menu .menubar.edit + + menu .menubar.file -tearoff 0 + AmpMenuArgs .menubar.file add command -label [mc "&Source..."] \ + -command {tk::ConsoleSource} + AmpMenuArgs .menubar.file add command -label [mc "&Hide Console"] \ + -command {wm withdraw .} + AmpMenuArgs .menubar.file add command -label [mc "&Clear Console"] \ + -command {.console delete 1.0 "promptEnd linestart"} + if {[tk windowingsystem] ne "aqua"} { + AmpMenuArgs .menubar.file add command -label [mc E&xit] -command {exit} + } + + menu .menubar.edit -tearoff 0 + AmpMenuArgs .menubar.edit add command -label [mc Cu&t] -accel "$mod+X"\ + -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc &Copy] -accel "$mod+C"\ + -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc P&aste] -accel "$mod+V"\ + -command {event generate .console <>} + + if {$tcl_platform(platform) ne "windows"} { + AmpMenuArgs .menubar.edit add command -label [mc Cl&ear] \ + -command {event generate .console <>} + } else { + AmpMenuArgs .menubar.edit add command -label [mc &Delete] \ + -command {event generate .console <>} -accel "Del" + + AmpMenuArgs .menubar add cascade -label [mc &Help] -menu .menubar.help + menu .menubar.help -tearoff 0 + AmpMenuArgs .menubar.help add command -label [mc &About...] \ + -command tk::ConsoleAbout + } + + AmpMenuArgs .menubar.edit add separator + AmpMenuArgs .menubar.edit add command -label [mc "&Increase Font Size"] \ + -accel "$mod++" -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc "&Decrease Font Size"] \ + -accel "$mod+-" -command {event generate .console <>} + + . configure -menu .menubar + + # See if we can find a better font than the TkFixedFont + catch {font create TkConsoleFont {*}[font configure TkFixedFont]} + set families [font families] + switch -exact -- [tk windowingsystem] { + aqua { set preferred {Monaco 10} } + win32 { set preferred {ProFontWindows 8 Consolas 8} } + default { set preferred {} } + } + foreach {family size} $preferred { + if {[lsearch -exact $families $family] != -1} { + font configure TkConsoleFont -family $family -size $size + break + } + } + + # Provide the right border for the text widget (platform dependent). + ::ttk::style layout ConsoleFrame { + Entry.field -sticky news -border 1 -children { + ConsoleFrame.padding -sticky news + } + } + ::ttk::frame .consoleframe -style ConsoleFrame + + set con [text .console -yscrollcommand [list .sb set] -setgrid true \ + -borderwidth 0 -highlightthickness 0 -font TkConsoleFont] + if {[tk windowingsystem] eq "aqua"} { + scrollbar .sb -command [list $con yview] + } else { + ::ttk::scrollbar .sb -command [list $con yview] + } + pack .sb -in .consoleframe -fill both -side right -padx 1 -pady 1 + pack $con -in .consoleframe -fill both -expand 1 -side left -padx 1 -pady 1 + pack .consoleframe -fill both -expand 1 -side left + + ConsoleBind $con + + $con tag configure stderr -foreground red + $con tag configure stdin -foreground blue + $con tag configure prompt -foreground \#8F4433 + $con tag configure proc -foreground \#008800 + $con tag configure var -background \#FFC0D0 + $con tag raise sel + $con tag configure blink -background \#FFFF00 + $con tag configure find -background \#FFFF00 + + focus $con + + # Avoid listing this console in [winfo interps] + if {[info command ::send] eq "::send"} {rename ::send {}} + + wm protocol . WM_DELETE_WINDOW { wm withdraw . } + wm title . [mc "Console"] + flush stdout + $con mark set output [$con index "end - 1 char"] + tk::TextSetCursor $con end + $con mark set promptEnd insert + $con mark gravity promptEnd left + + # A variant of ConsolePrompt to avoid a 'puts' call + set w $con + set temp [$w index "end - 1 char"] + $w mark set output end + if {![consoleinterp eval "info exists tcl_prompt1"]} { + set string [EvalAttached $::tk::console::defaultPrompt] + $w insert output $string stdout + } + $w mark set output $temp + ::tk::TextSetCursor $w end + $w mark set promptEnd insert + $w mark gravity promptEnd left + + if {$tcl_platform(platform) eq "windows"} { + # Subtle work-around to erase the '% ' that tclMain.c prints out + after idle [subst -nocommand { + if {[$con get 1.0 output] eq "% "} { $con delete 1.0 output } + }] + } +} + +# ::tk::ConsoleSource -- +# +# Prompts the user for a file to source in the main interpreter. +# +# Arguments: +# None. + +proc ::tk::ConsoleSource {} { + set filename [tk_getOpenFile -defaultextension .tcl -parent . \ + -title [mc "Select a file to source"] \ + -filetypes [list \ + [list [mc "Tcl Scripts"] .tcl] \ + [list [mc "All Files"] *]]] + if {$filename ne ""} { + set cmd [list source $filename] + if {[catch {consoleinterp eval $cmd} result]} { + ConsoleOutput stderr "$result\n" + } + } +} + +# ::tk::ConsoleInvoke -- +# Processes the command line input. If the command is complete it +# is evaled in the main interpreter. Otherwise, the continuation +# prompt is added and more input may be added. +# +# Arguments: +# None. + +proc ::tk::ConsoleInvoke {args} { + set ranges [.console tag ranges input] + set cmd "" + if {[llength $ranges]} { + set pos 0 + while {[lindex $ranges $pos] ne ""} { + set start [lindex $ranges $pos] + set end [lindex $ranges [incr pos]] + append cmd [.console get $start $end] + incr pos + } + } + if {$cmd eq ""} { + ConsolePrompt + } elseif {[info complete $cmd]} { + .console mark set output end + .console tag delete input + set result [consoleinterp record $cmd] + if {$result ne ""} { + puts $result + } + ConsoleHistory reset + ConsolePrompt + } else { + ConsolePrompt partial + } + .console yview -pickplace insert +} + +# ::tk::ConsoleHistory -- +# This procedure implements command line history for the +# console. In general is evals the history command in the +# main interpreter to obtain the history. The variable +# ::tk::HistNum is used to store the current location in the history. +# +# Arguments: +# cmd - Which action to take: prev, next, reset. + +set ::tk::HistNum 1 +proc ::tk::ConsoleHistory {cmd} { + variable HistNum + + switch $cmd { + prev { + incr HistNum -1 + if {$HistNum == 0} { + set cmd {history event [expr {[history nextid] -1}]} + } else { + set cmd "history event $HistNum" + } + if {[catch {consoleinterp eval $cmd} cmd]} { + incr HistNum + return + } + .console delete promptEnd end + .console insert promptEnd $cmd {input stdin} + } + next { + incr HistNum + if {$HistNum == 0} { + set cmd {history event [expr {[history nextid] -1}]} + } elseif {$HistNum > 0} { + set cmd "" + set HistNum 1 + } else { + set cmd "history event $HistNum" + } + if {$cmd ne ""} { + catch {consoleinterp eval $cmd} cmd + } + .console delete promptEnd end + .console insert promptEnd $cmd {input stdin} + } + reset { + set HistNum 1 + } + } +} + +# ::tk::ConsolePrompt -- +# This procedure draws the prompt. If tcl_prompt1 or tcl_prompt2 +# exists in the main interpreter it will be called to generate the +# prompt. Otherwise, a hard coded default prompt is printed. +# +# Arguments: +# partial - Flag to specify which prompt to print. + +proc ::tk::ConsolePrompt {{partial normal}} { + set w .console + if {$partial eq "normal"} { + set temp [$w index "end - 1 char"] + $w mark set output end + if {[consoleinterp eval "info exists tcl_prompt1"]} { + consoleinterp eval "eval \[set tcl_prompt1\]" + } else { + puts -nonewline [EvalAttached $::tk::console::defaultPrompt] + } + } else { + set temp [$w index output] + $w mark set output end + if {[consoleinterp eval "info exists tcl_prompt2"]} { + consoleinterp eval "eval \[set tcl_prompt2\]" + } else { + puts -nonewline "> " + } + } + flush stdout + $w mark set output $temp + ::tk::TextSetCursor $w end + $w mark set promptEnd insert + $w mark gravity promptEnd left + ::tk::console::ConstrainBuffer $w $::tk::console::maxLines + $w see end +} + +# Copy selected text from the console +proc ::tk::console::Copy {w} { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + } +} +# Copies selected text. If the selection is within the current active edit +# region then it will be cut, if not it is only copied. +proc ::tk::console::Cut {w} { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + if {[$w compare sel.first >= output]} { + $w delete sel.first sel.last + } + } +} +# Paste text from the clipboard +proc ::tk::console::Paste {w} { + catch { + set clip [::tk::GetSelection $w CLIPBOARD] + set list [split $clip \n\r] + tk::ConsoleInsert $w [lindex $list 0] + foreach x [lrange $list 1 end] { + $w mark set insert {end - 1c} + tk::ConsoleInsert $w "\n" + tk::ConsoleInvoke + tk::ConsoleInsert $w $x + } + } +} + +# ::tk::ConsoleBind -- +# This procedure first ensures that the default bindings for the Text +# class have been defined. Then certain bindings are overridden for +# the class. +# +# Arguments: +# None. + +proc ::tk::ConsoleBind {w} { + bindtags $w [list $w Console PostConsole [winfo toplevel $w] all] + + ## Get all Text bindings into Console + foreach ev [bind Text] { + bind Console $ev [bind Text $ev] + } + ## We really didn't want the newline insertion... + bind Console {} + ## ...or any Control-v binding (would block <>) + bind Console {} + + # For the moment, transpose isn't enabled until the console + # gets and overhaul of how it handles input -- hobbs + bind Console {} + + # Ignore all Alt, Meta, and Control keypresses unless explicitly bound. + # Otherwise, if a widget binding for one of these is defined, the + # class binding will also fire and insert the character + # which is wrong. + + bind Console {# nothing } + bind Console {# nothing} + bind Console {# nothing} + + foreach {ev key} { + <> + <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> + } { + event add $ev $key + bind Console $key {} + } + if {[tk windowingsystem] eq "aqua"} { + foreach {ev key} { + <> + <> + } { + event add $ev $key + bind Console $key {} + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W path + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W proc + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W var + } + } + bind Console <> { + %W mark set insert {end - 1c} + tk::ConsoleInsert %W "\n" + tk::ConsoleInvoke + break + } + bind Console { + if {{} ne [%W tag nextrange sel 1.0 end] \ + && [%W compare sel.first >= promptEnd]} { + %W delete sel.first sel.last + } elseif {[%W compare insert >= promptEnd]} { + %W delete insert + %W see insert + } + } + bind Console { + if {{} ne [%W tag nextrange sel 1.0 end] \ + && [%W compare sel.first >= promptEnd]} { + %W delete sel.first sel.last + } elseif {[%W compare insert != 1.0] && \ + [%W compare insert > promptEnd]} { + %W delete insert-1c + %W see insert + } + } + bind Console [bind Console ] + + bind Console { + if {[%W compare insert < promptEnd]} { + tk::TextSetCursor %W {insert linestart} + } else { + tk::TextSetCursor %W promptEnd + } + } + bind Console [bind Console ] + bind Console { + tk::TextSetCursor %W {insert lineend} + } + bind Console [bind Console ] + bind Console { + if {[%W compare insert < promptEnd]} { + break + } + %W delete insert + } + bind Console <> { + if {[%W compare insert < promptEnd]} { + break + } + if {[%W compare insert == {insert lineend}]} { + %W delete insert + } else { + %W delete insert {insert lineend} + } + } + bind Console <> { + ## Clear console display + %W delete 1.0 "promptEnd linestart" + } + bind Console <> { + ## Clear command line (Unix shell staple) + %W delete promptEnd end + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console { + if {[%W compare {insert -1c wordstart} >= promptEnd]} { + %W delete {insert -1c wordstart} insert + } + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console { + if {[%W compare {insert -1c wordstart} >= promptEnd]} { + %W delete {insert -1c wordstart} insert + } + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console <> { + tk::ConsoleHistory prev + } + bind Console <> { + tk::ConsoleHistory next + } + bind Console { + catch {tk::ConsoleInsert %W [::tk::GetSelection %W PRIMARY]} + } + bind Console { + tk::ConsoleInsert %W %A + } + bind Console { + eval destroy [winfo child .] + source [file join $tk_library console.tcl] + } + if {[tk windowingsystem] eq "aqua"} { + bind Console { + exit + } + } + bind Console <> { ::tk::console::Cut %W } + bind Console <> { ::tk::console::Copy %W } + bind Console <> { ::tk::console::Paste %W } + + bind Console <> { + set size [font configure TkConsoleFont -size] + font configure TkConsoleFont -size [incr size] + } + bind Console <> { + set size [font configure TkConsoleFont -size] + font configure TkConsoleFont -size [incr size -1] + } + + ## + ## Bindings for doing special things based on certain keys + ## + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \( \) promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \[ \] promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \{ \} promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchQuote %W promptEnd + } + } + + bind PostConsole { + if {"%A" ne ""} { + ::tk::console::TagProc %W + } + } +} + +# ::tk::ConsoleInsert -- +# Insert a string into a text at the point of the insertion cursor. +# If there is a selection in the text, and it covers the point of the +# insertion cursor, then delete the selection before inserting. Insertion +# is restricted to the prompt area. +# +# Arguments: +# w - The text window in which to insert the string +# s - The string to insert (usually just a single character) + +proc ::tk::ConsoleInsert {w s} { + if {$s eq ""} { + return + } + catch { + if {[$w compare sel.first <= insert] \ + && [$w compare sel.last >= insert]} { + $w tag remove sel sel.first promptEnd + $w delete sel.first sel.last + } + } + if {[$w compare insert < promptEnd]} { + $w mark set insert end + } + $w insert insert $s {input stdin} + $w see insert +} + +# ::tk::ConsoleOutput -- +# +# This routine is called directly by ConsolePutsCmd to cause a string +# to be displayed in the console. +# +# Arguments: +# dest - The output tag to be used: either "stderr" or "stdout". +# string - The string to be displayed. + +proc ::tk::ConsoleOutput {dest string} { + set w .console + $w insert output $string $dest + ::tk::console::ConstrainBuffer $w $::tk::console::maxLines + $w see insert +} + +# ::tk::ConsoleExit -- +# +# This routine is called by ConsoleEventProc when the main window of +# the application is destroyed. Don't call exit - that probably already +# happened. Just delete our window. +# +# Arguments: +# None. + +proc ::tk::ConsoleExit {} { + destroy . +} + +# ::tk::ConsoleAbout -- +# +# This routine displays an About box to show Tcl/Tk version info. +# +# Arguments: +# None. + +proc ::tk::ConsoleAbout {} { + tk_messageBox -type ok -message "[mc {Tcl for Windows}] + +Tcl $::tcl_patchLevel +Tk $::tk_patchLevel" +} + +# ::tk::console::TagProc -- +# +# Tags a procedure in the console if it's recognized +# This procedure is not perfect. However, making it perfect wastes +# too much CPU time... +# +# Arguments: +# w - console text widget + +proc ::tk::console::TagProc w { + if {!$::tk::console::magicKeys} { + return + } + set exp "\[^\\\\\]\[\[ \t\n\r\;{}\"\$\]" + set i [$w search -backwards -regexp $exp insert-1c promptEnd-1c] + if {$i eq ""} { + set i promptEnd + } else { + append i +2c + } + regsub -all "\[\[\\\\\\?\\*\]" [$w get $i "insert-1c wordend"] {\\\0} c + if {[llength [EvalAttached [list info commands $c]]]} { + $w tag add proc $i "insert-1c wordend" + } else { + $w tag remove proc $i "insert-1c wordend" + } + if {[llength [EvalAttached [list info vars $c]]]} { + $w tag add var $i "insert-1c wordend" + } else { + $w tag remove var $i "insert-1c wordend" + } +} + +# ::tk::console::MatchPair -- +# +# Blinks a matching pair of characters +# c2 is assumed to be at the text index 'insert'. +# This proc is really loopy and took me an hour to figure out given +# all possible combinations with escaping except for escaped \'s. +# It doesn't take into account possible commenting... Oh well. If +# anyone has something better, I'd like to see/use it. This is really +# only efficient for small contexts. +# +# Arguments: +# w - console text widget +# c1 - first char of pair +# c2 - second char of pair +# +# Calls: ::tk::console::Blink + +proc ::tk::console::MatchPair {w c1 c2 {lim 1.0}} { + if {!$::tk::console::magicKeys} { + return + } + if {{} ne [set ix [$w search -back $c1 insert $lim]]} { + while { + [string match {\\} [$w get $ix-1c]] && + [set ix [$w search -back $c1 $ix-1c $lim]] ne {} + } {} + set i1 insert-1c + while {$ix ne {}} { + set i0 $ix + set j 0 + while {[set i0 [$w search $c2 $i0 $i1]] ne {}} { + append i0 +1c + if {[string match {\\} [$w get $i0-2c]]} { + continue + } + incr j + } + if {!$j} { + break + } + set i1 $ix + while {$j && [set ix [$w search -back $c1 $ix $lim]] ne {}} { + if {[string match {\\} [$w get $ix-1c]]} { + continue + } + incr j -1 + } + } + if {[string match {} $ix]} { + set ix [$w index $lim] + } + } else { + set ix [$w index $lim] + } + if {$::tk::console::blinkRange} { + Blink $w $ix [$w index insert] + } else { + Blink $w $ix $ix+1c [$w index insert-1c] [$w index insert] + } +} + +# ::tk::console::MatchQuote -- +# +# Blinks between matching quotes. +# Blinks just the quote if it's unmatched, otherwise blinks quoted string +# The quote to match is assumed to be at the text index 'insert'. +# +# Arguments: +# w - console text widget +# +# Calls: ::tk::console::Blink + +proc ::tk::console::MatchQuote {w {lim 1.0}} { + if {!$::tk::console::magicKeys} { + return + } + set i insert-1c + set j 0 + while {[set i [$w search -back \" $i $lim]] ne {}} { + if {[string match {\\} [$w get $i-1c]]} { + continue + } + if {!$j} { + set i0 $i + } + incr j + } + if {$j&1} { + if {$::tk::console::blinkRange} { + Blink $w $i0 [$w index insert] + } else { + Blink $w $i0 $i0+1c [$w index insert-1c] [$w index insert] + } + } else { + Blink $w [$w index insert-1c] [$w index insert] + } +} + +# ::tk::console::Blink -- +# +# Blinks between n index pairs for a specified duration. +# +# Arguments: +# w - console text widget +# i1 - start index to blink region +# i2 - end index of blink region +# dur - duration in usecs to blink for +# +# Outputs: +# blinks selected characters in $w + +proc ::tk::console::Blink {w args} { + eval [list $w tag add blink] $args + after $::tk::console::blinkTime [list $w] tag remove blink $args +} + +# ::tk::console::ConstrainBuffer -- +# +# This limits the amount of data in the text widget +# Called by Prompt and ConsoleOutput +# +# Arguments: +# w - console text widget +# size - # of lines to constrain to +# +# Outputs: +# may delete data in console widget + +proc ::tk::console::ConstrainBuffer {w size} { + if {[$w index end] > $size} { + $w delete 1.0 [expr {int([$w index end])-$size}].0 + } +} + +# ::tk::console::Expand -- +# +# Arguments: +# ARGS: w - text widget in which to expand str +# type - type of expansion (path / proc / variable) +# +# Calls: ::tk::console::Expand(Pathname|Procname|Variable) +# +# Outputs: The string to match is expanded to the longest possible match. +# If ::tk::console::showMatches is non-zero and the longest match +# equaled the string to expand, then all possible matches are +# output to stdout. Triggers bell if no matches are found. +# +# Returns: number of matches found + +proc ::tk::console::Expand {w {type ""}} { + set exp "\[^\\\\\]\[\[ \t\n\r\\\{\"\\\\\$\]" + set tmp [$w search -backwards -regexp $exp insert-1c promptEnd-1c] + if {$tmp eq ""} { + set tmp promptEnd + } else { + append tmp +2c + } + if {[$w compare $tmp >= insert]} { + return + } + set str [$w get $tmp insert] + switch -glob $type { + path* { + set res [ExpandPathname $str] + } + proc* { + set res [ExpandProcname $str] + } + var* { + set res [ExpandVariable $str] + } + default { + set res {} + foreach t {Pathname Procname Variable} { + if {![catch {Expand$t $str} res] && ($res ne "")} { + break + } + } + } + } + set len [llength $res] + if {$len} { + set repl [lindex $res 0] + $w delete $tmp insert + $w insert $tmp $repl {input stdin} + if {($len > 1) && ($::tk::console::showMatches) && ($repl eq $str)} { + puts stdout [lsort [lreplace $res 0 0]] + } + } else { + bell + } + return [incr len -1] +} + +# ::tk::console::ExpandPathname -- +# +# Expand a file pathname based on $str +# This is based on UNIX file name conventions +# +# Arguments: +# str - partial file pathname to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandPathname str { + set pwd [EvalAttached pwd] + if {[catch {EvalAttached [list cd [file dirname $str]]} err]} { + return -code error $err + } + set dir [file tail $str] + ## Check to see if it was known to be a directory and keep the trailing + ## slash if so (file tail cuts it off) + if {[string match */ $str]} { + append dir / + } + if {[catch {lsort [EvalAttached [list glob $dir*]]} m]} { + set match {} + } else { + if {[llength $m] > 1} { + global tcl_platform + if {[string match windows $tcl_platform(platform)]} { + ## Windows is screwy because it's case insensitive + set tmp [ExpandBestMatch [string tolower $m] \ + [string tolower $dir]] + ## Don't change case if we haven't changed the word + if {[string length $dir]==[string length $tmp]} { + set tmp $dir + } + } else { + set tmp [ExpandBestMatch $m $dir] + } + if {[string match ?*/* $str]} { + set tmp [file dirname $str]/$tmp + } elseif {[string match /* $str]} { + set tmp /$tmp + } + regsub -all { } $tmp {\\ } tmp + set match [linsert $m 0 $tmp] + } else { + ## This may look goofy, but it handles spaces in path names + eval append match $m + if {[file isdir $match]} { + append match / + } + if {[string match ?*/* $str]} { + set match [file dirname $str]/$match + } elseif {[string match /* $str]} { + set match /$match + } + regsub -all { } $match {\\ } match + ## Why is this one needed and the ones below aren't!! + set match [list $match] + } + } + EvalAttached [list cd $pwd] + return $match +} + +# ::tk::console::ExpandProcname -- +# +# Expand a tcl proc name based on $str +# +# Arguments: +# str - partial proc name to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandProcname str { + set match [EvalAttached [list info commands $str*]] + if {[llength $match] == 0} { + set ns [EvalAttached \ + "namespace children \[namespace current\] [list $str*]"] + if {[llength $ns]==1} { + set match [EvalAttached [list info commands ${ns}::*]] + } else { + set match $ns + } + } + if {[llength $match] > 1} { + regsub -all { } [ExpandBestMatch $match $str] {\\ } str + set match [linsert $match 0 $str] + } else { + regsub -all { } $match {\\ } match + } + return $match +} + +# ::tk::console::ExpandVariable -- +# +# Expand a tcl variable name based on $str +# +# Arguments: +# str - partial tcl var name to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandVariable str { + if {[regexp {([^\(]*)\((.*)} $str -> ary str]} { + ## Looks like they're trying to expand an array. + set match [EvalAttached [list array names $ary $str*]] + if {[llength $match] > 1} { + set vars $ary\([ExpandBestMatch $match $str] + foreach var $match { + lappend vars $ary\($var\) + } + return $vars + } elseif {[llength $match] == 1} { + set match $ary\($match\) + } + ## Space transformation avoided for array names. + } else { + set match [EvalAttached [list info vars $str*]] + if {[llength $match] > 1} { + regsub -all { } [ExpandBestMatch $match $str] {\\ } str + set match [linsert $match 0 $str] + } else { + regsub -all { } $match {\\ } match + } + } + return $match +} + +# ::tk::console::ExpandBestMatch -- +# +# Finds the best unique match in a list of names. +# The extra $e in this argument allows us to limit the innermost loop a little +# further. This improves speed as $l becomes large or $e becomes long. +# +# Arguments: +# l - list to find best unique match in +# e - currently best known unique match +# +# Returns: longest unique match in the list + +proc ::tk::console::ExpandBestMatch {l {e {}}} { + set ec [lindex $l 0] + if {[llength $l]>1} { + set e [expr {[string length $e] - 1}] + set ei [expr {[string length $ec] - 1}] + foreach l $l { + while {$ei>=$e && [string first $ec $l]} { + set ec [string range $ec 0 [incr ei -1]] + } + } + } + return $ec +} + +# now initialize the console +::tk::ConsoleInit diff --git a/inkstitch/bin/tk/dialog.tcl b/inkstitch/bin/tk/dialog.tcl new file mode 100644 index 0000000..26ec7e0 --- /dev/null +++ b/inkstitch/bin/tk/dialog.tcl @@ -0,0 +1,180 @@ +# dialog.tcl -- +# +# This file defines the procedure tk_dialog, which creates a dialog +# box containing a bitmap, a message, and one or more buttons. +# +# Copyright (c) 1992-1993 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# +# ::tk_dialog: +# +# This procedure displays a dialog box, waits for a button in the dialog +# to be invoked, then returns the index of the selected button. If the +# dialog somehow gets destroyed, -1 is returned. +# +# Arguments: +# w - Window to use for dialog top-level. +# title - Title to display in dialog's decorative frame. +# text - Message to display in dialog. +# bitmap - Bitmap to display in dialog (empty string means none). +# default - Index of button that is to display the default ring +# (-1 means none). +# args - One or more strings to display in buttons across the +# bottom of the dialog box. + +proc ::tk_dialog {w title text bitmap default args} { + global tcl_platform + variable ::tk::Priv + + # Check that $default was properly given + if {[string is integer -strict $default]} { + if {$default >= [llength $args]} { + return -code error "default button index greater than number of\ + buttons specified for tk_dialog" + } + } elseif {"" eq $default} { + set default -1 + } else { + set default [lsearch -exact $args $default] + } + + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + option add *Dialog*background systemDialogBackgroundActive widgetDefault + option add *Dialog*Button.highlightBackground \ + systemDialogBackgroundActive widgetDefault + } + + # 1. Create the top-level window and divide it into top + # and bottom parts. + + destroy $w + toplevel $w -class Dialog + wm title $w $title + wm iconname $w Dialog + wm protocol $w WM_DELETE_WINDOW { } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + # + if {[winfo viewable [winfo toplevel [winfo parent $w]]] } { + wm transient $w [winfo toplevel [winfo parent $w]] + } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $w moveableModal {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $w -type dialog + } + + frame $w.bot + frame $w.top + if {$windowingsystem eq "x11"} { + $w.bot configure -relief raised -bd 1 + $w.top configure -relief raised -bd 1 + } + pack $w.bot -side bottom -fill both + pack $w.top -side top -fill both -expand 1 + grid anchor $w.bot center + + # 2. Fill the top part with bitmap and message (use the option + # database for -wraplength and -font so that they can be + # overridden by the caller). + + option add *Dialog.msg.wrapLength 3i widgetDefault + option add *Dialog.msg.font TkCaptionFont widgetDefault + + label $w.msg -justify left -text $text + pack $w.msg -in $w.top -side right -expand 1 -fill both -padx 3m -pady 3m + if {$bitmap ne ""} { + if {$windowingsystem eq "aqua" && $bitmap eq "error"} { + set bitmap "stop" + } + label $w.bitmap -bitmap $bitmap + pack $w.bitmap -in $w.top -side left -padx 3m -pady 3m + } + + # 3. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach but $args { + button $w.button$i -text $but -command [list set ::tk::Priv(button) $i] + if {$i == $default} { + $w.button$i configure -default active + } else { + $w.button$i configure -default normal + } + grid $w.button$i -in $w.bot -column $i -row 0 -sticky ew \ + -padx 10 -pady 4 + grid columnconfigure $w.bot $i + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + set tmp [string tolower $but] + if {$tmp eq "ok" || $tmp eq "cancel"} { + grid columnconfigure $w.bot $i -minsize 90 + } + grid configure $w.button$i -pady 7 + } + incr i + } + + # 4. Create a binding for on the dialog if there is a + # default button. + # Convention also dictates that if the keyboard focus moves among the + # the buttons that the binding affects the button with the focus. + + if {$default >= 0} { + bind $w [list $w.button$default invoke] + } + bind $w <> [list bind $w {[tk_focusPrev %W] invoke}] + bind $w [list bind $w {[tk_focusNext %W] invoke}] + + # 5. Create a binding for the window that sets the + # button variable to -1; this is needed in case something happens + # that destroys the window, such as its parent window being destroyed. + + bind $w {set ::tk::Priv(button) -1} + + # 6. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w + tkwait visibility $w + + # 7. Set a grab and claim the focus too. + + if {$default >= 0} { + set focus $w.button$default + } else { + set focus $w + } + tk::SetFocusGrab $w $focus + + # 8. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(button) + + catch { + # It's possible that the window has already been destroyed, + # hence this "catch". Delete the Destroy handler so that + # Priv(button) doesn't get reset by it. + + bind $w {} + } + tk::RestoreFocusGrab $w $focus + return $Priv(button) +} diff --git a/inkstitch/bin/tk/entry.tcl b/inkstitch/bin/tk/entry.tcl new file mode 100644 index 0000000..382cc88 --- /dev/null +++ b/inkstitch/bin/tk/entry.tcl @@ -0,0 +1,664 @@ +# entry.tcl -- +# +# This file defines the default bindings for Tk entry widgets and provides +# procedures that help in implementing those bindings. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# afterId - If non-null, it means that auto-scanning is underway +# and it gives the "after" id for the next auto-scan +# command to be executed. +# mouseMoved - Non-zero means the mouse has moved a significant +# amount since the button went down (so, for example, +# start dragging out a selection). +# pressX - X-coordinate at which the mouse button was pressed. +# selectMode - The style of selection currently underway: +# char, word, or line. +# x, y - Last known mouse coordinates for scanning +# and auto-scanning. +# data - Used for Cut and Copy +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- +bind Entry <> { + if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + %W delete sel.first sel.last + unset tk::Priv(data) + } +} +bind Entry <> { + if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + unset tk::Priv(data) + } +} +bind Entry <> { + global tcl_platform + catch { + if {[tk windowingsystem] ne "x11"} { + catch { + %W delete sel.first sel.last + } + } + %W insert insert [::tk::GetSelection %W CLIPBOARD] + tk::EntrySeeInsert %W + } +} +bind Entry <> { + # ignore if there is no selection + catch { %W delete sel.first sel.last } +} +bind Entry <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + tk::EntryPaste %W %x + } +} + +bind Entry <> { + %W selection range 0 end + %W icursor end +} + +# Standard Motif bindings: + +bind Entry <1> { + tk::EntryButton1 %W %x + %W selection clear +} +bind Entry { + set tk::Priv(x) %x + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(selectMode) word + tk::EntryMouseSelect %W %x + catch {%W icursor sel.last} +} +bind Entry { + set tk::Priv(selectMode) line + tk::EntryMouseSelect %W %x + catch {%W icursor sel.last} +} +bind Entry { + set tk::Priv(selectMode) char + %W selection adjust @%x +} +bind Entry { + set tk::Priv(selectMode) word + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(selectMode) line + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(x) %x + tk::EntryAutoScan %W +} +bind Entry { + tk::CancelRepeat +} +bind Entry { + tk::CancelRepeat +} +bind Entry { + %W icursor @%x +} + +bind Entry { + tk::EntrySetCursor %W [expr {[%W index insert] - 1}] +} +bind Entry { + tk::EntrySetCursor %W [expr {[%W index insert] + 1}] +} +bind Entry { + tk::EntryKeySelect %W [expr {[%W index insert] - 1}] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntryKeySelect %W [expr {[%W index insert] + 1}] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W [tk::EntryPreviousWord %W insert] +} +bind Entry { + tk::EntrySetCursor %W [tk::EntryNextWord %W insert] +} +bind Entry { + tk::EntryKeySelect %W [tk::EntryPreviousWord %W insert] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntryKeySelect %W [tk::EntryNextWord %W insert] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W 0 +} +bind Entry { + tk::EntryKeySelect %W 0 + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W end +} +bind Entry { + tk::EntryKeySelect %W end + tk::EntrySeeInsert %W +} + +bind Entry { + if {[%W selection present]} { + %W delete sel.first sel.last + } else { + %W delete insert + } +} +bind Entry { + tk::EntryBackspace %W +} + +bind Entry { + %W selection from insert +} +bind Entry { + tk::ListboxBeginSelect %W [%W index active] +} +bind Listbox { + tk::ListboxBeginExtend %W [%W index active] +} +bind Listbox { + tk::ListboxBeginExtend %W [%W index active] +} +bind Listbox { + tk::ListboxCancel %W +} +bind Listbox { + tk::ListboxSelectAll %W +} +bind Listbox { + if {[%W cget -selectmode] ne "browse"} { + %W selection clear 0 end + event generate %W <> + } +} + +# Additional Tk bindings that aren't part of the Motif look and feel: + +bind Listbox <2> { + %W scan mark %x %y +} +bind Listbox { + %W scan dragto %x %y +} + +# The MouseWheel will typically only fire on Windows and Mac OS X. +# However, someone could use the "event generate" command to produce +# one on other platforms. + +if {[tk windowingsystem] eq "aqua"} { + bind Listbox { + %W yview scroll [expr {- (%D)}] units + } + bind Listbox { + %W yview scroll [expr {-10 * (%D)}] units + } + bind Listbox { + %W xview scroll [expr {- (%D)}] units + } + bind Listbox { + %W xview scroll [expr {-10 * (%D)}] units + } +} else { + bind Listbox { + %W yview scroll [expr {- (%D / 120) * 4}] units + } +} + +if {"x11" eq [tk windowingsystem]} { + # Support for mousewheels on Linux/Unix commonly comes through mapping + # the wheel to the extended buttons. If you have a mousewheel, find + # Linux configuration info at: + # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ + bind Listbox <4> { + if {!$tk_strictMotif} { + %W yview scroll -5 units + } + } + bind Listbox <5> { + if {!$tk_strictMotif} { + %W yview scroll 5 units + } + } +} + +# ::tk::ListboxBeginSelect -- +# +# This procedure is typically invoked on button-1 presses. It begins +# the process of making a selection in the listbox. Its exact behavior +# depends on the selection mode currently in effect for the listbox; +# see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginSelect {w el {focus 1}} { + variable ::tk::Priv + if {[$w cget -selectmode] eq "multiple"} { + if {[$w selection includes $el]} { + $w selection clear $el + } else { + $w selection set $el + } + } else { + $w selection clear 0 end + $w selection set $el + $w selection anchor $el + set Priv(listboxSelection) {} + set Priv(listboxPrev) $el + } + event generate $w <> + # check existence as ListboxSelect may destroy us + if {$focus && [winfo exists $w] && [$w cget -state] eq "normal"} { + focus $w + } +} + +# ::tk::ListboxMotion -- +# +# This procedure is called to process mouse motion events while +# button 1 is down. It may move or extend the selection, depending +# on the listbox's selection mode. +# +# Arguments: +# w - The listbox widget. +# el - The element under the pointer (must be a number). + +proc ::tk::ListboxMotion {w el} { + variable ::tk::Priv + if {$el == $Priv(listboxPrev)} { + return + } + set anchor [$w index anchor] + switch [$w cget -selectmode] { + browse { + $w selection clear 0 end + $w selection set $el + set Priv(listboxPrev) $el + event generate $w <> + } + extended { + set i $Priv(listboxPrev) + if {$i eq ""} { + set i $el + $w selection set $el + } + if {[$w selection includes anchor]} { + $w selection clear $i $el + $w selection set anchor $el + } else { + $w selection clear $i $el + $w selection clear anchor $el + } + if {![info exists Priv(listboxSelection)]} { + set Priv(listboxSelection) [$w curselection] + } + while {($i < $el) && ($i < $anchor)} { + if {[lsearch $Priv(listboxSelection) $i] >= 0} { + $w selection set $i + } + incr i + } + while {($i > $el) && ($i > $anchor)} { + if {[lsearch $Priv(listboxSelection) $i] >= 0} { + $w selection set $i + } + incr i -1 + } + set Priv(listboxPrev) $el + event generate $w <> + } + } +} + +# ::tk::ListboxBeginExtend -- +# +# This procedure is typically invoked on shift-button-1 presses. It +# begins the process of extending a selection in the listbox. Its +# exact behavior depends on the selection mode currently in effect +# for the listbox; see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginExtend {w el} { + if {[$w cget -selectmode] eq "extended"} { + if {[$w selection includes anchor]} { + ListboxMotion $w $el + } else { + # No selection yet; simulate the begin-select operation. + ListboxBeginSelect $w $el + } + } +} + +# ::tk::ListboxBeginToggle -- +# +# This procedure is typically invoked on control-button-1 presses. It +# begins the process of toggling a selection in the listbox. Its +# exact behavior depends on the selection mode currently in effect +# for the listbox; see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginToggle {w el} { + variable ::tk::Priv + if {[$w cget -selectmode] eq "extended"} { + set Priv(listboxSelection) [$w curselection] + set Priv(listboxPrev) $el + $w selection anchor $el + if {[$w selection includes $el]} { + $w selection clear $el + } else { + $w selection set $el + } + event generate $w <> + } +} + +# ::tk::ListboxAutoScan -- +# This procedure is invoked when the mouse leaves an entry window +# with button 1 down. It scrolls the window up, down, left, or +# right, depending on where the mouse left the window, and reschedules +# itself as an "after" command so that the window continues to scroll until +# the mouse moves back into the window or the mouse button is released. +# +# Arguments: +# w - The entry window. + +proc ::tk::ListboxAutoScan {w} { + variable ::tk::Priv + if {![winfo exists $w]} return + set x $Priv(x) + set y $Priv(y) + if {$y >= [winfo height $w]} { + $w yview scroll 1 units + } elseif {$y < 0} { + $w yview scroll -1 units + } elseif {$x >= [winfo width $w]} { + $w xview scroll 2 units + } elseif {$x < 0} { + $w xview scroll -2 units + } else { + return + } + ListboxMotion $w [$w index @$x,$y] + set Priv(afterId) [after 50 [list tk::ListboxAutoScan $w]] +} + +# ::tk::ListboxUpDown -- +# +# Moves the location cursor (active element) up or down by one element, +# and changes the selection if we're in browse or extended selection +# mode. +# +# Arguments: +# w - The listbox widget. +# amount - +1 to move down one item, -1 to move back one item. + +proc ::tk::ListboxUpDown {w amount} { + variable ::tk::Priv + $w activate [expr {[$w index active] + $amount}] + $w see active + switch [$w cget -selectmode] { + browse { + $w selection clear 0 end + $w selection set active + event generate $w <> + } + extended { + $w selection clear 0 end + $w selection set active + $w selection anchor active + set Priv(listboxPrev) [$w index active] + set Priv(listboxSelection) {} + event generate $w <> + } + } +} + +# ::tk::ListboxExtendUpDown -- +# +# Does nothing unless we're in extended selection mode; in this +# case it moves the location cursor (active element) up or down by +# one element, and extends the selection to that point. +# +# Arguments: +# w - The listbox widget. +# amount - +1 to move down one item, -1 to move back one item. + +proc ::tk::ListboxExtendUpDown {w amount} { + variable ::tk::Priv + if {[$w cget -selectmode] ne "extended"} { + return + } + set active [$w index active] + if {![info exists Priv(listboxSelection)]} { + $w selection set $active + set Priv(listboxSelection) [$w curselection] + } + $w activate [expr {$active + $amount}] + $w see active + ListboxMotion $w [$w index active] +} + +# ::tk::ListboxDataExtend +# +# This procedure is called for key-presses such as Shift-KEndData. +# If the selection mode isn't multiple or extend then it does nothing. +# Otherwise it moves the active element to el and, if we're in +# extended mode, extends the selection to that point. +# +# Arguments: +# w - The listbox widget. +# el - An integer element number. + +proc ::tk::ListboxDataExtend {w el} { + set mode [$w cget -selectmode] + if {$mode eq "extended"} { + $w activate $el + $w see $el + if {[$w selection includes anchor]} { + ListboxMotion $w $el + } + } elseif {$mode eq "multiple"} { + $w activate $el + $w see $el + } +} + +# ::tk::ListboxCancel +# +# This procedure is invoked to cancel an extended selection in +# progress. If there is an extended selection in progress, it +# restores all of the items between the active one and the anchor +# to their previous selection state. +# +# Arguments: +# w - The listbox widget. + +proc ::tk::ListboxCancel w { + variable ::tk::Priv + if {[$w cget -selectmode] ne "extended"} { + return + } + set first [$w index anchor] + set last $Priv(listboxPrev) + if {$last eq ""} { + # Not actually doing any selection right now + return + } + if {$first > $last} { + set tmp $first + set first $last + set last $tmp + } + $w selection clear $first $last + while {$first <= $last} { + if {[lsearch $Priv(listboxSelection) $first] >= 0} { + $w selection set $first + } + incr first + } + event generate $w <> +} + +# ::tk::ListboxSelectAll +# +# This procedure is invoked to handle the "select all" operation. +# For single and browse mode, it just selects the active element. +# Otherwise it selects everything in the widget. +# +# Arguments: +# w - The listbox widget. + +proc ::tk::ListboxSelectAll w { + set mode [$w cget -selectmode] + if {$mode eq "single" || $mode eq "browse"} { + $w selection clear 0 end + $w selection set active + } else { + $w selection set 0 end + } + event generate $w <> +} diff --git a/inkstitch/bin/tk/menu.tcl b/inkstitch/bin/tk/menu.tcl new file mode 100644 index 0000000..f133c87 --- /dev/null +++ b/inkstitch/bin/tk/menu.tcl @@ -0,0 +1,1350 @@ +# menu.tcl -- +# +# This file defines the default bindings for Tk menus and menubuttons. +# It also implements keyboard traversal of menus and implements a few +# other utility procedures related to menus. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 2007 Daniel A. Steffen +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# cursor - Saves the -cursor option for the posted menubutton. +# focus - Saves the focus during a menu selection operation. +# Focus gets restored here when the menu is unposted. +# grabGlobal - Used in conjunction with tk::Priv(oldGrab): if +# tk::Priv(oldGrab) is non-empty, then tk::Priv(grabGlobal) +# contains either an empty string or "-global" to +# indicate whether the old grab was a local one or +# a global one. +# inMenubutton - The name of the menubutton widget containing +# the mouse, or an empty string if the mouse is +# not over any menubutton. +# menuBar - The name of the menubar that is the root +# of the cascade hierarchy which is currently +# posted. This is null when there is no menu currently +# being pulled down from a menu bar. +# oldGrab - Window that had the grab before a menu was posted. +# Used to restore the grab state after the menu +# is unposted. Empty string means there was no +# grab previously set. +# popup - If a menu has been popped up via tk_popup, this +# gives the name of the menu. Otherwise this +# value is empty. +# postedMb - Name of the menubutton whose menu is currently +# posted, or an empty string if nothing is posted +# A grab is set on this widget. +# relief - Used to save the original relief of the current +# menubutton. +# window - When the mouse is over a menu, this holds the +# name of the menu; it's cleared when the mouse +# leaves the menu. +# tearoff - Whether the last menu posted was a tearoff or not. +# This is true always for unix, for tearoffs for Mac +# and Windows. +# activeMenu - This is the last active menu for use +# with the <> virtual event. +# activeItem - This is the last active menu item for +# use with the <> virtual event. +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# Overall note: +# This file is tricky because there are five different ways that menus +# can be used: +# +# 1. As a pulldown from a menubutton. In this style, the variable +# tk::Priv(postedMb) identifies the posted menubutton. +# 2. As a torn-off menu copied from some other menu. In this style +# tk::Priv(postedMb) is empty, and menu's type is "tearoff". +# 3. As an option menu, triggered from an option menubutton. In this +# style tk::Priv(postedMb) identifies the posted menubutton. +# 4. As a popup menu. In this style tk::Priv(postedMb) is empty and +# the top-level menu's type is "normal". +# 5. As a pulldown from a menubar. The variable tk::Priv(menubar) has +# the owning menubar, and the menu itself is of type "normal". +# +# The various binding procedures use the state described above to +# distinguish the various cases and take different actions in each +# case. +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for menus +# and menubuttons. +#------------------------------------------------------------------------- + +bind Menubutton {} +bind Menubutton { + tk::MbEnter %W +} +bind Menubutton { + tk::MbLeave %W +} +bind Menubutton <1> { + if {$tk::Priv(inMenubutton) ne ""} { + tk::MbPost $tk::Priv(inMenubutton) %X %Y + } +} +bind Menubutton { + tk::MbMotion %W up %X %Y +} +bind Menubutton { + tk::MbMotion %W down %X %Y +} +bind Menubutton { + tk::MbButtonUp %W +} +bind Menubutton { + tk::MbPost %W + tk::MenuFirstEntry [%W cget -menu] +} +bind Menubutton <> { + tk::MbPost %W + tk::MenuFirstEntry [%W cget -menu] +} + +# Must set focus when mouse enters a menu, in order to allow +# mixed-mode processing using both the mouse and the keyboard. +# Don't set the focus if the event comes from a grab release, +# though: such an event can happen after as part of unposting +# a cascaded chain of menus, after the focus has already been +# restored to wherever it was before menu selection started. + +bind Menu {} + +bind Menu { + set tk::Priv(window) %W + if {[%W cget -type] eq "tearoff"} { + if {"%m" ne "NotifyUngrab"} { + if {[tk windowingsystem] eq "x11"} { + tk_menuSetFocus %W + } + } + } + tk::MenuMotion %W %x %y %s +} + +bind Menu { + tk::MenuLeave %W %X %Y %s +} +bind Menu { + tk::MenuMotion %W %x %y %s +} +bind Menu { + tk::MenuButtonDown %W +} +bind Menu { + tk::MenuInvoke %W 1 +} +bind Menu { + tk::MenuInvoke %W 0 +} +bind Menu <> { + tk::MenuInvoke %W 0 +} +bind Menu { + tk::MenuInvoke %W 0 +} +bind Menu { + tk::MenuEscape %W +} +bind Menu { + tk::MenuLeftArrow %W +} +bind Menu { + tk::MenuRightArrow %W +} +bind Menu { + tk::MenuUpArrow %W +} +bind Menu { + tk::MenuDownArrow %W +} +bind Menu { + tk::TraverseWithinMenu %W %A +} + +# The following bindings apply to all windows, and are used to +# implement keyboard menu traversal. + +if {[tk windowingsystem] eq "x11"} { + bind all { + tk::TraverseToMenu %W %A + } + + bind all { + tk::FirstMenu %W + } +} else { + bind Menubutton { + tk::TraverseToMenu %W %A + } + + bind Menubutton { + tk::FirstMenu %W + } +} + +# ::tk::MbEnter -- +# This procedure is invoked when the mouse enters a menubutton +# widget. It activates the widget unless it is disabled. Note: +# this procedure is only invoked when mouse button 1 is *not* down. +# The procedure ::tk::MbB1Enter is invoked if the button is down. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::MbEnter w { + variable ::tk::Priv + + if {$Priv(inMenubutton) ne ""} { + MbLeave $Priv(inMenubutton) + } + set Priv(inMenubutton) $w + if {[$w cget -state] ne "disabled" && [tk windowingsystem] ne "aqua"} { + $w configure -state active + } +} + +# ::tk::MbLeave -- +# This procedure is invoked when the mouse leaves a menubutton widget. +# It de-activates the widget, if the widget still exists. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::MbLeave w { + variable ::tk::Priv + + set Priv(inMenubutton) {} + if {![winfo exists $w]} { + return + } + if {[$w cget -state] eq "active" && [tk windowingsystem] ne "aqua"} { + $w configure -state normal + } +} + +# ::tk::MbPost -- +# Given a menubutton, this procedure does all the work of posting +# its associated menu and unposting any other menu that is currently +# posted. +# +# Arguments: +# w - The name of the menubutton widget whose menu +# is to be posted. +# x, y - Root coordinates of cursor, used for positioning +# option menus. If not specified, then the center +# of the menubutton is used for an option menu. + +proc ::tk::MbPost {w {x {}} {y {}}} { + global errorInfo + variable ::tk::Priv + global tcl_platform + + if {[$w cget -state] eq "disabled" || $w eq $Priv(postedMb)} { + return + } + set menu [$w cget -menu] + if {$menu eq ""} { + return + } + set tearoff [expr {[tk windowingsystem] eq "x11" \ + || [$menu cget -type] eq "tearoff"}] + if {[string first $w $menu] != 0} { + error "can't post $menu: it isn't a descendant of $w (this is a new requirement in Tk versions 3.0 and later)" + } + set cur $Priv(postedMb) + if {$cur ne ""} { + MenuUnpost {} + } + if {$::tk_strictMotif} { + set Priv(cursor) [$w cget -cursor] + $w configure -cursor arrow + } + if {[tk windowingsystem] ne "aqua"} { + set Priv(relief) [$w cget -relief] + $w configure -relief raised + } else { + $w configure -state active + } + + set Priv(postedMb) $w + set Priv(focus) [focus] + $menu activate none + GenerateMenuSelect $menu + + # If this looks like an option menubutton then post the menu so + # that the current entry is on top of the mouse. Otherwise post + # the menu just below the menubutton, as for a pull-down. + + update idletasks + if {[catch { + switch [$w cget -direction] { + above { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] - [winfo reqheight $menu]}] + # if we go offscreen to the top, show as 'below' + if {$y < [winfo vrooty $w]} { + set y [expr {[winfo vrooty $w] + [winfo rooty $w] + [winfo reqheight $w]}] + } + PostOverPoint $menu $x $y + } + below { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] + [winfo height $w]}] + # if we go offscreen to the bottom, show as 'above' + set mh [winfo reqheight $menu] + if {($y + $mh) > ([winfo vrooty $w] + [winfo vrootheight $w])} { + set y [expr {[winfo vrooty $w] + [winfo vrootheight $w] + [winfo rooty $w] - $mh}] + } + PostOverPoint $menu $x $y + } + left { + set x [expr {[winfo rootx $w] - [winfo reqwidth $menu]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {[$w cget -indicatoron]} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + } + PostOverPoint $menu $x $y + if {$entry ne "" \ + && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } + } + right { + set x [expr {[winfo rootx $w] + [winfo width $w]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {[$w cget -indicatoron]} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + } + PostOverPoint $menu $x $y + if {$entry ne "" \ + && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } + } + default { + if {[$w cget -indicatoron]} { + if {$y eq ""} { + set x [expr {[winfo rootx $w] + [winfo width $w]/2}] + set y [expr {[winfo rooty $w] + [winfo height $w]/2}] + } + PostOverPoint $menu $x $y [MenuFindName $menu [$w cget -text]] + } else { + PostOverPoint $menu [winfo rootx $w] [expr {[winfo rooty $w]+[winfo height $w]}] + } + } + } + } msg]} { + # Error posting menu (e.g. bogus -postcommand). Unpost it and + # reflect the error. + + set savedInfo $errorInfo + MenuUnpost {} + error $msg $savedInfo + + } + + set Priv(tearoff) $tearoff + if {$tearoff != 0} { + focus $menu + if {[winfo viewable $w]} { + SaveGrabInfo $w + grab -global $w + } + } +} + +# ::tk::MenuUnpost -- +# This procedure unposts a given menu, plus all of its ancestors up +# to (and including) a menubutton, if any. It also restores various +# values to what they were before the menu was posted, and releases +# a grab if there's a menubutton involved. Special notes: +# 1. It's important to unpost all menus before releasing the grab, so +# that any Enter-Leave events (e.g. from menu back to main +# application) have mode NotifyGrab. +# 2. Be sure to enclose various groups of commands in "catch" so that +# the procedure will complete even if the menubutton or the menu +# or the grab window has been deleted. +# +# Arguments: +# menu - Name of a menu to unpost. Ignored if there +# is a posted menubutton. + +proc ::tk::MenuUnpost menu { + global tcl_platform + variable ::tk::Priv + set mb $Priv(postedMb) + + # Restore focus right away (otherwise X will take focus away when + # the menu is unmapped and under some window managers (e.g. olvwm) + # we'll lose the focus completely). + + catch {focus $Priv(focus)} + set Priv(focus) "" + + # Unpost menu(s) and restore some stuff that's dependent on + # what was posted. + + after cancel [array get Priv menuActivatedTimer] + unset -nocomplain Priv(menuActivated) + after cancel [array get Priv menuDeactivatedTimer] + unset -nocomplain Priv(menuDeactivated) + + catch { + if {$mb ne ""} { + set menu [$mb cget -menu] + $menu unpost + set Priv(postedMb) {} + if {$::tk_strictMotif} { + $mb configure -cursor $Priv(cursor) + } + if {[tk windowingsystem] ne "aqua"} { + $mb configure -relief $Priv(relief) + } else { + $mb configure -state normal + } + } elseif {$Priv(popup) ne ""} { + $Priv(popup) unpost + set Priv(popup) {} + } elseif {[$menu cget -type] ne "menubar" && [$menu cget -type] ne "tearoff"} { + # We're in a cascaded sub-menu from a torn-off menu or popup. + # Unpost all the menus up to the toplevel one (but not + # including the top-level torn-off one) and deactivate the + # top-level torn off menu if there is one. + + while {1} { + set parent [winfo parent $menu] + if {[winfo class $parent] ne "Menu" || ![winfo ismapped $parent]} { + break + } + $parent activate none + $parent postcascade none + GenerateMenuSelect $parent + set type [$parent cget -type] + if {$type eq "menubar" || $type eq "tearoff"} { + break + } + set menu $parent + } + if {[$menu cget -type] ne "menubar"} { + $menu unpost + } + } + } + + if {($Priv(tearoff) != 0) || $Priv(menuBar) ne ""} { + # Release grab, if any, and restore the previous grab, if there + # was one. + if {$menu ne ""} { + set grab [grab current $menu] + if {$grab ne ""} { + grab release $grab + } + } + RestoreOldGrab + if {$Priv(menuBar) ne ""} { + if {$::tk_strictMotif} { + $Priv(menuBar) configure -cursor $Priv(cursor) + } + set Priv(menuBar) {} + } + if {[tk windowingsystem] ne "x11"} { + set Priv(tearoff) 0 + } + } +} + +# ::tk::MbMotion -- +# This procedure handles mouse motion events inside menubuttons, and +# also outside menubuttons when a menubutton has a grab (e.g. when a +# menu selection operation is in progress). +# +# Arguments: +# w - The name of the menubutton widget. +# upDown - "down" means button 1 is pressed, "up" means +# it isn't. +# rootx, rooty - Coordinates of mouse, in (virtual?) root window. + +proc ::tk::MbMotion {w upDown rootx rooty} { + variable ::tk::Priv + + if {$Priv(inMenubutton) eq $w} { + return + } + set new [winfo containing $rootx $rooty] + if {$new ne $Priv(inMenubutton) \ + && ($new eq "" || [winfo toplevel $new] eq [winfo toplevel $w])} { + if {$Priv(inMenubutton) ne ""} { + MbLeave $Priv(inMenubutton) + } + if {$new ne "" \ + && [winfo class $new] eq "Menubutton" \ + && ([$new cget -indicatoron] == 0) \ + && ([$w cget -indicatoron] == 0)} { + if {$upDown eq "down"} { + MbPost $new $rootx $rooty + } else { + MbEnter $new + } + } + } +} + +# ::tk::MbButtonUp -- +# This procedure is invoked to handle button 1 releases for menubuttons. +# If the release happens inside the menubutton then leave its menu +# posted with element 0 activated. Otherwise, unpost the menu. +# +# Arguments: +# w - The name of the menubutton widget. + +proc ::tk::MbButtonUp w { + variable ::tk::Priv + global tcl_platform + + set menu [$w cget -menu] + set tearoff [expr {[tk windowingsystem] eq "x11" || \ + ($menu ne "" && [$menu cget -type] eq "tearoff")}] + if {($tearoff != 0) && $Priv(postedMb) eq $w \ + && $Priv(inMenubutton) eq $w} { + MenuFirstEntry [$Priv(postedMb) cget -menu] + } else { + MenuUnpost {} + } +} + +# ::tk::MenuMotion -- +# This procedure is called to handle mouse motion events for menus. +# It does two things. First, it resets the active element in the +# menu, if the mouse is over the menu. Second, if a mouse button +# is down, it posts and unposts cascade entries to match the mouse +# position. +# +# Arguments: +# menu - The menu window. +# x - The x position of the mouse. +# y - The y position of the mouse. +# state - Modifier state (tells whether buttons are down). + +proc ::tk::MenuMotion {menu x y state} { + variable ::tk::Priv + if {$menu eq $Priv(window)} { + set activeindex [$menu index active] + if {[$menu cget -type] eq "menubar"} { + if {[info exists Priv(focus)] && $menu ne $Priv(focus)} { + $menu activate @$x,$y + GenerateMenuSelect $menu + } + } else { + $menu activate @$x,$y + GenerateMenuSelect $menu + } + set index [$menu index @$x,$y] + if {[info exists Priv(menuActivated)] \ + && $index ne "none" \ + && $index ne $activeindex} { + set mode [option get $menu clickToFocus ClickToFocus] + if {[string is false $mode]} { + set delay [expr {[$menu cget -type] eq "menubar" ? 0 : 50}] + if {[$menu type $index] eq "cascade"} { + set Priv(menuActivatedTimer) \ + [after $delay [list $menu postcascade active]] + } else { + set Priv(menuDeactivatedTimer) \ + [after $delay [list $menu postcascade none]] + } + } + } + } +} + +# ::tk::MenuButtonDown -- +# Handles button presses in menus. There are a couple of tricky things +# here: +# 1. Change the posted cascade entry (if any) to match the mouse position. +# 2. If there is a posted menubutton, must grab to the menubutton; this +# overrrides the implicit grab on button press, so that the menu +# button can track mouse motions over other menubuttons and change +# the posted menu. +# 3. If there's no posted menubutton (e.g. because we're a torn-off menu +# or one of its descendants) must grab to the top-level menu so that +# we can track mouse motions across the entire menu hierarchy. +# +# Arguments: +# menu - The menu window. + +proc ::tk::MenuButtonDown menu { + variable ::tk::Priv + global tcl_platform + + if {![winfo viewable $menu]} { + return + } + $menu postcascade active + if {$Priv(postedMb) ne "" && [winfo viewable $Priv(postedMb)]} { + grab -global $Priv(postedMb) + } else { + while {[$menu cget -type] eq "normal" \ + && [winfo class [winfo parent $menu]] eq "Menu" \ + && [winfo ismapped [winfo parent $menu]]} { + set menu [winfo parent $menu] + } + + if {$Priv(menuBar) eq {}} { + set Priv(menuBar) $menu + if {$::tk_strictMotif} { + set Priv(cursor) [$menu cget -cursor] + $menu configure -cursor arrow + } + if {[$menu type active] eq "cascade"} { + set Priv(menuActivated) 1 + } + } + + # Don't update grab information if the grab window isn't changing. + # Otherwise, we'll get an error when we unpost the menus and + # restore the grab, since the old grab window will not be viewable + # anymore. + + if {$menu ne [grab current $menu]} { + SaveGrabInfo $menu + } + + # Must re-grab even if the grab window hasn't changed, in order + # to release the implicit grab from the button press. + + if {[tk windowingsystem] eq "x11"} { + grab -global $menu + } + } +} + +# ::tk::MenuLeave -- +# This procedure is invoked to handle Leave events for a menu. It +# deactivates everything unless the active element is a cascade element +# and the mouse is now over the submenu. +# +# Arguments: +# menu - The menu window. +# rootx, rooty - Root coordinates of mouse. +# state - Modifier state. + +proc ::tk::MenuLeave {menu rootx rooty state} { + variable ::tk::Priv + set Priv(window) {} + if {[$menu index active] eq "none"} { + return + } + if {[$menu type active] eq "cascade" \ + && [winfo containing $rootx $rooty] eq \ + [$menu entrycget active -menu]} { + return + } + $menu activate none + GenerateMenuSelect $menu +} + +# ::tk::MenuInvoke -- +# This procedure is invoked when button 1 is released over a menu. +# It invokes the appropriate menu action and unposts the menu if +# it came from a menubutton. +# +# Arguments: +# w - Name of the menu widget. +# buttonRelease - 1 means this procedure is called because of +# a button release; 0 means because of keystroke. + +proc ::tk::MenuInvoke {w buttonRelease} { + variable ::tk::Priv + + if {$buttonRelease && $Priv(window) eq ""} { + # Mouse was pressed over a menu without a menu button, then + # dragged off the menu (possibly with a cascade posted) and + # released. Unpost everything and quit. + + $w postcascade none + $w activate none + event generate $w <> + MenuUnpost $w + return + } + if {[$w type active] eq "cascade"} { + $w postcascade active + set menu [$w entrycget active -menu] + MenuFirstEntry $menu + } elseif {[$w type active] eq "tearoff"} { + ::tk::TearOffMenu $w + MenuUnpost $w + } elseif {[$w cget -type] eq "menubar"} { + $w postcascade none + set active [$w index active] + set isCascade [string equal [$w type $active] "cascade"] + + # Only de-activate the active item if it's a cascade; this prevents + # the annoying "activation flicker" you otherwise get with + # checkbuttons/commands/etc. on menubars + + if { $isCascade } { + $w activate none + event generate $w <> + } + + MenuUnpost $w + + # If the active item is not a cascade, invoke it. This enables + # the use of checkbuttons/commands/etc. on menubars (which is legal, + # but not recommended) + + if { !$isCascade } { + uplevel #0 [list $w invoke $active] + } + } else { + set active [$w index active] + if {$Priv(popup) eq "" || $active ne "none"} { + MenuUnpost $w + } + uplevel #0 [list $w invoke active] + } +} + +# ::tk::MenuEscape -- +# This procedure is invoked for the Cancel (or Escape) key. It unposts +# the given menu and, if it is the top-level menu for a menu button, +# unposts the menu button as well. +# +# Arguments: +# menu - Name of the menu window. + +proc ::tk::MenuEscape menu { + set parent [winfo parent $menu] + if {[winfo class $parent] ne "Menu"} { + MenuUnpost $menu + } elseif {[$parent cget -type] eq "menubar"} { + MenuUnpost $menu + RestoreOldGrab + } else { + MenuNextMenu $menu left + } +} + +# The following routines handle arrow keys. Arrow keys behave +# differently depending on whether the menu is a menu bar or not. + +proc ::tk::MenuUpArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextMenu $menu left + } else { + MenuNextEntry $menu -1 + } +} + +proc ::tk::MenuDownArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextMenu $menu right + } else { + MenuNextEntry $menu 1 + } +} + +proc ::tk::MenuLeftArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextEntry $menu -1 + } else { + MenuNextMenu $menu left + } +} + +proc ::tk::MenuRightArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextEntry $menu 1 + } else { + MenuNextMenu $menu right + } +} + +# ::tk::MenuNextMenu -- +# This procedure is invoked to handle "left" and "right" traversal +# motions in menus. It traverses to the next menu in a menu bar, +# or into or out of a cascaded menu. +# +# Arguments: +# menu - The menu that received the keyboard +# event. +# direction - Direction in which to move: "left" or "right" + +proc ::tk::MenuNextMenu {menu direction} { + variable ::tk::Priv + + # First handle traversals into and out of cascaded menus. + + if {$direction eq "right"} { + set count 1 + set parent [winfo parent $menu] + set class [winfo class $parent] + if {[$menu type active] eq "cascade"} { + $menu postcascade active + set m2 [$menu entrycget active -menu] + if {$m2 ne ""} { + MenuFirstEntry $m2 + } + return + } else { + set parent [winfo parent $menu] + while {$parent ne "."} { + if {[winfo class $parent] eq "Menu" \ + && [$parent cget -type] eq "menubar"} { + tk_menuSetFocus $parent + MenuNextEntry $parent 1 + return + } + set parent [winfo parent $parent] + } + } + } else { + set count -1 + set m2 [winfo parent $menu] + if {[winfo class $m2] eq "Menu"} { + $menu activate none + GenerateMenuSelect $menu + tk_menuSetFocus $m2 + + $m2 postcascade none + + if {[$m2 cget -type] ne "menubar"} { + return + } + } + } + + # Can't traverse into or out of a cascaded menu. Go to the next + # or previous menubutton, if that makes sense. + + set m2 [winfo parent $menu] + if {[winfo class $m2] eq "Menu" && [$m2 cget -type] eq "menubar"} { + tk_menuSetFocus $m2 + MenuNextEntry $m2 -1 + return + } + + set w $Priv(postedMb) + if {$w eq ""} { + return + } + set buttons [winfo children [winfo parent $w]] + set length [llength $buttons] + set i [expr {[lsearch -exact $buttons $w] + $count}] + while {1} { + while {$i < 0} { + incr i $length + } + while {$i >= $length} { + incr i -$length + } + set mb [lindex $buttons $i] + if {[winfo class $mb] eq "Menubutton" \ + && [$mb cget -state] ne "disabled" \ + && [$mb cget -menu] ne "" \ + && [[$mb cget -menu] index last] ne "none"} { + break + } + if {$mb eq $w} { + return + } + incr i $count + } + MbPost $mb + MenuFirstEntry [$mb cget -menu] +} + +# ::tk::MenuNextEntry -- +# Activate the next higher or lower entry in the posted menu, +# wrapping around at the ends. Disabled entries are skipped. +# +# Arguments: +# menu - Menu window that received the keystroke. +# count - 1 means go to the next lower entry, +# -1 means go to the next higher entry. + +proc ::tk::MenuNextEntry {menu count} { + if {[$menu index last] eq "none"} { + return + } + set length [expr {[$menu index last]+1}] + set quitAfter $length + set active [$menu index active] + if {$active eq "none"} { + set i 0 + } else { + set i [expr {$active + $count}] + } + while {1} { + if {$quitAfter <= 0} { + # We've tried every entry in the menu. Either there are + # none, or they're all disabled. Just give up. + + return + } + while {$i < 0} { + incr i $length + } + while {$i >= $length} { + incr i -$length + } + if {[catch {$menu entrycget $i -state} state] == 0} { + if {$state ne "disabled" && \ + ($i!=0 || [$menu cget -type] ne "tearoff" \ + || [$menu type 0] ne "tearoff")} { + break + } + } + if {$i == $active} { + return + } + incr i $count + incr quitAfter -1 + } + $menu activate $i + GenerateMenuSelect $menu + + if {[$menu type $i] eq "cascade" && [$menu cget -type] eq "menubar"} { + set cascade [$menu entrycget $i -menu] + if {$cascade ne ""} { + # Here we auto-post a cascade. This is necessary when + # we traverse left/right in the menubar, but undesirable when + # we traverse up/down in a menu. + $menu postcascade $i + MenuFirstEntry $cascade + } + } +} + +# ::tk::MenuFind -- +# This procedure searches the entire window hierarchy under w for +# a menubutton that isn't disabled and whose underlined character +# is "char" or an entry in a menubar that isn't disabled and whose +# underlined character is "char". +# It returns the name of that window, if found, or an +# empty string if no matching window was found. If "char" is an +# empty string then the procedure returns the name of the first +# menubutton found that isn't disabled. +# +# Arguments: +# w - Name of window where key was typed. +# char - Underlined character to search for; +# may be either upper or lower case, and +# will match either upper or lower case. + +proc ::tk::MenuFind {w char} { + set char [string tolower $char] + set windowlist [winfo child $w] + + foreach child $windowlist { + # Don't descend into other toplevels. + if {[winfo toplevel $w] ne [winfo toplevel $child]} { + continue + } + if {[winfo class $child] eq "Menu" && \ + [$child cget -type] eq "menubar"} { + if {$char eq ""} { + return $child + } + set last [$child index last] + for {set i [$child cget -tearoff]} {$i <= $last} {incr i} { + if {[$child type $i] eq "separator"} { + continue + } + set char2 [string index [$child entrycget $i -label] \ + [$child entrycget $i -underline]] + if {$char eq [string tolower $char2] || $char eq ""} { + if {[$child entrycget $i -state] ne "disabled"} { + return $child + } + } + } + } + } + + foreach child $windowlist { + # Don't descend into other toplevels. + if {[winfo toplevel $w] ne [winfo toplevel $child]} { + continue + } + switch -- [winfo class $child] { + Menubutton { + set char2 [string index [$child cget -text] \ + [$child cget -underline]] + if {$char eq [string tolower $char2] || $char eq ""} { + if {[$child cget -state] ne "disabled"} { + return $child + } + } + } + + default { + set match [MenuFind $child $char] + if {$match ne ""} { + return $match + } + } + } + } + return {} +} + +# ::tk::TraverseToMenu -- +# This procedure implements keyboard traversal of menus. Given an +# ASCII character "char", it looks for a menubutton with that character +# underlined. If one is found, it posts the menubutton's menu +# +# Arguments: +# w - Window in which the key was typed (selects +# a toplevel window). +# char - Character that selects a menu. The case +# is ignored. If an empty string, nothing +# happens. + +proc ::tk::TraverseToMenu {w char} { + variable ::tk::Priv + if {$char eq ""} { + return + } + while {[winfo class $w] eq "Menu"} { + if {[$w cget -type] eq "menubar"} { + break + } elseif {$Priv(postedMb) eq ""} { + return + } + set w [winfo parent $w] + } + set w [MenuFind [winfo toplevel $w] $char] + if {$w ne ""} { + if {[winfo class $w] eq "Menu"} { + tk_menuSetFocus $w + set Priv(window) $w + SaveGrabInfo $w + grab -global $w + TraverseWithinMenu $w $char + } else { + MbPost $w + MenuFirstEntry [$w cget -menu] + } + } +} + +# ::tk::FirstMenu -- +# This procedure traverses to the first menubutton in the toplevel +# for a given window, and posts that menubutton's menu. +# +# Arguments: +# w - Name of a window. Selects which toplevel +# to search for menubuttons. + +proc ::tk::FirstMenu w { + variable ::tk::Priv + set w [MenuFind [winfo toplevel $w] ""] + if {$w ne ""} { + if {[winfo class $w] eq "Menu"} { + tk_menuSetFocus $w + set Priv(window) $w + SaveGrabInfo $w + grab -global $w + MenuFirstEntry $w + } else { + MbPost $w + MenuFirstEntry [$w cget -menu] + } + } +} + +# ::tk::TraverseWithinMenu +# This procedure implements keyboard traversal within a menu. It +# searches for an entry in the menu that has "char" underlined. If +# such an entry is found, it is invoked and the menu is unposted. +# +# Arguments: +# w - The name of the menu widget. +# char - The character to look for; case is +# ignored. If the string is empty then +# nothing happens. + +proc ::tk::TraverseWithinMenu {w char} { + if {$char eq ""} { + return + } + set char [string tolower $char] + set last [$w index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {[catch {set char2 [string index \ + [$w entrycget $i -label] [$w entrycget $i -underline]]}]} { + continue + } + if {$char eq [string tolower $char2]} { + if {[$w type $i] eq "cascade"} { + $w activate $i + $w postcascade active + event generate $w <> + set m2 [$w entrycget $i -menu] + if {$m2 ne ""} { + MenuFirstEntry $m2 + } + } else { + MenuUnpost $w + uplevel #0 [list $w invoke $i] + } + return + } + } +} + +# ::tk::MenuFirstEntry -- +# Given a menu, this procedure finds the first entry that isn't +# disabled or a tear-off or separator, and activates that entry. +# However, if there is already an active entry in the menu (e.g., +# because of a previous call to tk::PostOverPoint) then the active +# entry isn't changed. This procedure also sets the input focus +# to the menu. +# +# Arguments: +# menu - Name of the menu window (possibly empty). + +proc ::tk::MenuFirstEntry menu { + if {$menu eq ""} { + return + } + tk_menuSetFocus $menu + if {[$menu index active] ne "none"} { + return + } + set last [$menu index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {([catch {set state [$menu entrycget $i -state]}] == 0) \ + && $state ne "disabled" && [$menu type $i] ne "tearoff"} { + $menu activate $i + GenerateMenuSelect $menu + # Only post the cascade if the current menu is a menubar; + # otherwise, if the first entry of the cascade is a cascade, + # we can get an annoying cascading effect resulting in a bunch of + # menus getting posted (bug 676) + if {[$menu type $i] eq "cascade" && [$menu cget -type] eq "menubar"} { + set cascade [$menu entrycget $i -menu] + if {$cascade ne ""} { + $menu postcascade $i + MenuFirstEntry $cascade + } + } + return + } + } +} + +# ::tk::MenuFindName -- +# Given a menu and a text string, return the index of the menu entry +# that displays the string as its label. If there is no such entry, +# return an empty string. This procedure is tricky because some names +# like "active" have a special meaning in menu commands, so we can't +# always use the "index" widget command. +# +# Arguments: +# menu - Name of the menu widget. +# s - String to look for. + +proc ::tk::MenuFindName {menu s} { + set i "" + if {![regexp {^active$|^last$|^none$|^[0-9]|^@} $s]} { + catch {set i [$menu index $s]} + return $i + } + set last [$menu index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {![catch {$menu entrycget $i -label} label]} { + if {$label eq $s} { + return $i + } + } + } + return "" +} + +# ::tk::PostOverPoint -- +# This procedure posts a given menu such that a given entry in the +# menu is centered over a given point in the root window. It also +# activates the given entry. +# +# Arguments: +# menu - Menu to post. +# x, y - Root coordinates of point. +# entry - Index of entry within menu to center over (x,y). +# If omitted or specified as {}, then the menu's +# upper-left corner goes at (x,y). + +proc ::tk::PostOverPoint {menu x y {entry {}}} { + global tcl_platform + + if {$entry ne ""} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + incr x [expr {-[winfo reqwidth $menu]/2}] + } + + if {[tk windowingsystem] eq "win32"} { + # osVersion is not available in safe interps + set ver 5 + if {[info exists tcl_platform(osVersion)]} { + scan $tcl_platform(osVersion) %d ver + } + + # We need to fix some problems with menu posting on Windows, + # where, if the menu would overlap top or bottom of screen, + # Windows puts it in the wrong place for us. We must also + # subtract an extra amount for half the height of the current + # entry. To be safe we subtract an extra 10. + # NOTE: this issue appears to have been resolved in the Window + # manager provided with Vista and Windows 7. + if {$ver < 6} { + set yoffset [expr {[winfo screenheight $menu] \ + - $y - [winfo reqheight $menu] - 10}] + if {$yoffset < [winfo vrooty $menu]} { + # The bottom of the menu is offscreen, so adjust upwards + incr y [expr {$yoffset - [winfo vrooty $menu]}] + } + # If we're off the top of the screen (either because we were + # originally or because we just adjusted too far upwards), + # then make the menu popup on the top edge. + if {$y < [winfo vrooty $menu]} { + set y [winfo vrooty $menu] + } + } + } + $menu post $x $y + if {$entry ne "" && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } +} + +# ::tk::SaveGrabInfo -- +# Sets the variables tk::Priv(oldGrab) and tk::Priv(grabStatus) to record +# the state of any existing grab on the w's display. +# +# Arguments: +# w - Name of a window; used to select the display +# whose grab information is to be recorded. + +proc tk::SaveGrabInfo w { + variable ::tk::Priv + set Priv(oldGrab) [grab current $w] + if {$Priv(oldGrab) ne ""} { + set Priv(grabStatus) [grab status $Priv(oldGrab)] + } +} + +# ::tk::RestoreOldGrab -- +# Restores the grab to what it was before TkSaveGrabInfo was called. +# + +proc ::tk::RestoreOldGrab {} { + variable ::tk::Priv + + if {$Priv(oldGrab) ne ""} { + # Be careful restoring the old grab, since it's window may not + # be visible anymore. + + catch { + if {$Priv(grabStatus) eq "global"} { + grab set -global $Priv(oldGrab) + } else { + grab set $Priv(oldGrab) + } + } + set Priv(oldGrab) "" + } +} + +proc ::tk_menuSetFocus {menu} { + variable ::tk::Priv + if {![info exists Priv(focus)] || $Priv(focus) eq ""} { + set Priv(focus) [focus] + } + focus $menu +} + +proc ::tk::GenerateMenuSelect {menu} { + variable ::tk::Priv + + if {$Priv(activeMenu) eq $menu \ + && $Priv(activeItem) eq [$menu index active]} { + return + } + + set Priv(activeMenu) $menu + set Priv(activeItem) [$menu index active] + event generate $menu <> +} + +# ::tk_popup -- +# This procedure pops up a menu and sets things up for traversing +# the menu and its submenus. +# +# Arguments: +# menu - Name of the menu to be popped up. +# x, y - Root coordinates at which to pop up the +# menu. +# entry - Index of a menu entry to center over (x,y). +# If omitted or specified as {}, then menu's +# upper-left corner goes at (x,y). + +proc ::tk_popup {menu x y {entry {}}} { + variable ::tk::Priv + global tcl_platform + if {$Priv(popup) ne "" || $Priv(postedMb) ne ""} { + tk::MenuUnpost {} + } + tk::PostOverPoint $menu $x $y $entry + if {[tk windowingsystem] eq "x11" && [winfo viewable $menu]} { + tk::SaveGrabInfo $menu + grab -global $menu + set Priv(popup) $menu + set Priv(menuActivated) 1 + tk_menuSetFocus $menu + } +} diff --git a/inkstitch/bin/tk/mkpsenc.tcl b/inkstitch/bin/tk/mkpsenc.tcl new file mode 100644 index 0000000..9efb6de --- /dev/null +++ b/inkstitch/bin/tk/mkpsenc.tcl @@ -0,0 +1,1366 @@ +# mkpsenc.tcl -- +# +# Creates Postscript encoding vector for given encoding +# + +proc ::tk::CreatePostscriptEncoding {encoding} { + # now check for known. Even if it is known, it can be other + # than we need. GhostScript seems to be happy with such approach + set result "/CurrentEncoding \[\n" + for {set i 0} {$i<256} {incr i 8} { + for {set j 0} {$j<8} {incr j} { + set enc [encoding convertfrom $encoding [format %c [expr {$i+$j}]]] + if {[catch {format %04X [scan $enc %c]} hexcode]} {set hexcode {}} + if [info exists ::tk::psglyphs($hexcode)] { + append result "/$::tk::psglyphs($hexcode)" + } else { + append result "/space" + } + } + append result "\n" + } + append result "\] def\n" + return $result +} + +# List of adobe glyph names. Converted from glyphlist.txt, downloaded +# from Adobe + +namespace eval ::tk { +array set psglyphs { + 0020 space + 0021 exclam + 0022 quotedbl + 0023 numbersign + 0024 dollar + 0025 percent + 0026 ampersand + 0027 quotesingle + 0028 parenleft + 0029 parenright + 002A asterisk + 002B plus + 002C comma + 002D hyphen + 002E period + 002F slash + 0030 zero + 0031 one + 0032 two + 0033 three + 0034 four + 0035 five + 0036 six + 0037 seven + 0038 eight + 0039 nine + 003A colon + 003B semicolon + 003C less + 003D equal + 003E greater + 003F question + 0040 at + 0041 A + 0042 B + 0043 C + 0044 D + 0045 E + 0046 F + 0047 G + 0048 H + 0049 I + 004A J + 004B K + 004C L + 004D M + 004E N + 004F O + 0050 P + 0051 Q + 0052 R + 0053 S + 0054 T + 0055 U + 0056 V + 0057 W + 0058 X + 0059 Y + 005A Z + 005B bracketleft + 005C backslash + 005D bracketright + 005E asciicircum + 005F underscore + 0060 grave + 0061 a + 0062 b + 0063 c + 0064 d + 0065 e + 0066 f + 0067 g + 0068 h + 0069 i + 006A j + 006B k + 006C l + 006D m + 006E n + 006F o + 0070 p + 0071 q + 0072 r + 0073 s + 0074 t + 0075 u + 0076 v + 0077 w + 0078 x + 0079 y + 007A z + 007B braceleft + 007C bar + 007D braceright + 007E asciitilde + 00A0 space + 00A1 exclamdown + 00A2 cent + 00A3 sterling + 00A4 currency + 00A5 yen + 00A6 brokenbar + 00A7 section + 00A8 dieresis + 00A9 copyright + 00AA ordfeminine + 00AB guillemotleft + 00AC logicalnot + 00AD hyphen + 00AE registered + 00AF macron + 00B0 degree + 00B1 plusminus + 00B2 twosuperior + 00B3 threesuperior + 00B4 acute + 00B5 mu + 00B6 paragraph + 00B7 periodcentered + 00B8 cedilla + 00B9 onesuperior + 00BA ordmasculine + 00BB guillemotright + 00BC onequarter + 00BD onehalf + 00BE threequarters + 00BF questiondown + 00C0 Agrave + 00C1 Aacute + 00C2 Acircumflex + 00C3 Atilde + 00C4 Adieresis + 00C5 Aring + 00C6 AE + 00C7 Ccedilla + 00C8 Egrave + 00C9 Eacute + 00CA Ecircumflex + 00CB Edieresis + 00CC Igrave + 00CD Iacute + 00CE Icircumflex + 00CF Idieresis + 00D0 Eth + 00D1 Ntilde + 00D2 Ograve + 00D3 Oacute + 00D4 Ocircumflex + 00D5 Otilde + 00D6 Odieresis + 00D7 multiply + 00D8 Oslash + 00D9 Ugrave + 00DA Uacute + 00DB Ucircumflex + 00DC Udieresis + 00DD Yacute + 00DE Thorn + 00DF germandbls + 00E0 agrave + 00E1 aacute + 00E2 acircumflex + 00E3 atilde + 00E4 adieresis + 00E5 aring + 00E6 ae + 00E7 ccedilla + 00E8 egrave + 00E9 eacute + 00EA ecircumflex + 00EB edieresis + 00EC igrave + 00ED iacute + 00EE icircumflex + 00EF idieresis + 00F0 eth + 00F1 ntilde + 00F2 ograve + 00F3 oacute + 00F4 ocircumflex + 00F5 otilde + 00F6 odieresis + 00F7 divide + 00F8 oslash + 00F9 ugrave + 00FA uacute + 00FB ucircumflex + 00FC udieresis + 00FD yacute + 00FE thorn + 00FF ydieresis + 0100 Amacron + 0101 amacron + 0102 Abreve + 0103 abreve + 0104 Aogonek + 0105 aogonek + 0106 Cacute + 0107 cacute + 0108 Ccircumflex + 0109 ccircumflex + 010A Cdotaccent + 010B cdotaccent + 010C Ccaron + 010D ccaron + 010E Dcaron + 010F dcaron + 0110 Dcroat + 0111 dcroat + 0112 Emacron + 0113 emacron + 0114 Ebreve + 0115 ebreve + 0116 Edotaccent + 0117 edotaccent + 0118 Eogonek + 0119 eogonek + 011A Ecaron + 011B ecaron + 011C Gcircumflex + 011D gcircumflex + 011E Gbreve + 011F gbreve + 0120 Gdotaccent + 0121 gdotaccent + 0122 Gcommaaccent + 0123 gcommaaccent + 0124 Hcircumflex + 0125 hcircumflex + 0126 Hbar + 0127 hbar + 0128 Itilde + 0129 itilde + 012A Imacron + 012B imacron + 012C Ibreve + 012D ibreve + 012E Iogonek + 012F iogonek + 0130 Idotaccent + 0131 dotlessi + 0132 IJ + 0133 ij + 0134 Jcircumflex + 0135 jcircumflex + 0136 Kcommaaccent + 0137 kcommaaccent + 0138 kgreenlandic + 0139 Lacute + 013A lacute + 013B Lcommaaccent + 013C lcommaaccent + 013D Lcaron + 013E lcaron + 013F Ldot + 0140 ldot + 0141 Lslash + 0142 lslash + 0143 Nacute + 0144 nacute + 0145 Ncommaaccent + 0146 ncommaaccent + 0147 Ncaron + 0148 ncaron + 0149 napostrophe + 014A Eng + 014B eng + 014C Omacron + 014D omacron + 014E Obreve + 014F obreve + 0150 Ohungarumlaut + 0151 ohungarumlaut + 0152 OE + 0153 oe + 0154 Racute + 0155 racute + 0156 Rcommaaccent + 0157 rcommaaccent + 0158 Rcaron + 0159 rcaron + 015A Sacute + 015B sacute + 015C Scircumflex + 015D scircumflex + 015E Scedilla + 015F scedilla + 0160 Scaron + 0161 scaron + 0162 Tcommaaccent + 0163 tcommaaccent + 0164 Tcaron + 0165 tcaron + 0166 Tbar + 0167 tbar + 0168 Utilde + 0169 utilde + 016A Umacron + 016B umacron + 016C Ubreve + 016D ubreve + 016E Uring + 016F uring + 0170 Uhungarumlaut + 0171 uhungarumlaut + 0172 Uogonek + 0173 uogonek + 0174 Wcircumflex + 0175 wcircumflex + 0176 Ycircumflex + 0177 ycircumflex + 0178 Ydieresis + 0179 Zacute + 017A zacute + 017B Zdotaccent + 017C zdotaccent + 017D Zcaron + 017E zcaron + 017F longs + 0192 florin + 01A0 Ohorn + 01A1 ohorn + 01AF Uhorn + 01B0 uhorn + 01E6 Gcaron + 01E7 gcaron + 01FA Aringacute + 01FB aringacute + 01FC AEacute + 01FD aeacute + 01FE Oslashacute + 01FF oslashacute + 0218 Scommaaccent + 0219 scommaaccent + 021A Tcommaaccent + 021B tcommaaccent + 02BC afii57929 + 02BD afii64937 + 02C6 circumflex + 02C7 caron + 02C9 macron + 02D8 breve + 02D9 dotaccent + 02DA ring + 02DB ogonek + 02DC tilde + 02DD hungarumlaut + 0300 gravecomb + 0301 acutecomb + 0303 tildecomb + 0309 hookabovecomb + 0323 dotbelowcomb + 0384 tonos + 0385 dieresistonos + 0386 Alphatonos + 0387 anoteleia + 0388 Epsilontonos + 0389 Etatonos + 038A Iotatonos + 038C Omicrontonos + 038E Upsilontonos + 038F Omegatonos + 0390 iotadieresistonos + 0391 Alpha + 0392 Beta + 0393 Gamma + 0394 Delta + 0395 Epsilon + 0396 Zeta + 0397 Eta + 0398 Theta + 0399 Iota + 039A Kappa + 039B Lambda + 039C Mu + 039D Nu + 039E Xi + 039F Omicron + 03A0 Pi + 03A1 Rho + 03A3 Sigma + 03A4 Tau + 03A5 Upsilon + 03A6 Phi + 03A7 Chi + 03A8 Psi + 03A9 Omega + 03AA Iotadieresis + 03AB Upsilondieresis + 03AC alphatonos + 03AD epsilontonos + 03AE etatonos + 03AF iotatonos + 03B0 upsilondieresistonos + 03B1 alpha + 03B2 beta + 03B3 gamma + 03B4 delta + 03B5 epsilon + 03B6 zeta + 03B7 eta + 03B8 theta + 03B9 iota + 03BA kappa + 03BB lambda + 03BC mu + 03BD nu + 03BE xi + 03BF omicron + 03C0 pi + 03C1 rho + 03C2 sigma1 + 03C3 sigma + 03C4 tau + 03C5 upsilon + 03C6 phi + 03C7 chi + 03C8 psi + 03C9 omega + 03CA iotadieresis + 03CB upsilondieresis + 03CC omicrontonos + 03CD upsilontonos + 03CE omegatonos + 03D1 theta1 + 03D2 Upsilon1 + 03D5 phi1 + 03D6 omega1 + 0401 afii10023 + 0402 afii10051 + 0403 afii10052 + 0404 afii10053 + 0405 afii10054 + 0406 afii10055 + 0407 afii10056 + 0408 afii10057 + 0409 afii10058 + 040A afii10059 + 040B afii10060 + 040C afii10061 + 040E afii10062 + 040F afii10145 + 0410 afii10017 + 0411 afii10018 + 0412 afii10019 + 0413 afii10020 + 0414 afii10021 + 0415 afii10022 + 0416 afii10024 + 0417 afii10025 + 0418 afii10026 + 0419 afii10027 + 041A afii10028 + 041B afii10029 + 041C afii10030 + 041D afii10031 + 041E afii10032 + 041F afii10033 + 0420 afii10034 + 0421 afii10035 + 0422 afii10036 + 0423 afii10037 + 0424 afii10038 + 0425 afii10039 + 0426 afii10040 + 0427 afii10041 + 0428 afii10042 + 0429 afii10043 + 042A afii10044 + 042B afii10045 + 042C afii10046 + 042D afii10047 + 042E afii10048 + 042F afii10049 + 0430 afii10065 + 0431 afii10066 + 0432 afii10067 + 0433 afii10068 + 0434 afii10069 + 0435 afii10070 + 0436 afii10072 + 0437 afii10073 + 0438 afii10074 + 0439 afii10075 + 043A afii10076 + 043B afii10077 + 043C afii10078 + 043D afii10079 + 043E afii10080 + 043F afii10081 + 0440 afii10082 + 0441 afii10083 + 0442 afii10084 + 0443 afii10085 + 0444 afii10086 + 0445 afii10087 + 0446 afii10088 + 0447 afii10089 + 0448 afii10090 + 0449 afii10091 + 044A afii10092 + 044B afii10093 + 044C afii10094 + 044D afii10095 + 044E afii10096 + 044F afii10097 + 0451 afii10071 + 0452 afii10099 + 0453 afii10100 + 0454 afii10101 + 0455 afii10102 + 0456 afii10103 + 0457 afii10104 + 0458 afii10105 + 0459 afii10106 + 045A afii10107 + 045B afii10108 + 045C afii10109 + 045E afii10110 + 045F afii10193 + 0462 afii10146 + 0463 afii10194 + 0472 afii10147 + 0473 afii10195 + 0474 afii10148 + 0475 afii10196 + 0490 afii10050 + 0491 afii10098 + 04D9 afii10846 + 05B0 afii57799 + 05B1 afii57801 + 05B2 afii57800 + 05B3 afii57802 + 05B4 afii57793 + 05B5 afii57794 + 05B6 afii57795 + 05B7 afii57798 + 05B8 afii57797 + 05B9 afii57806 + 05BB afii57796 + 05BC afii57807 + 05BD afii57839 + 05BE afii57645 + 05BF afii57841 + 05C0 afii57842 + 05C1 afii57804 + 05C2 afii57803 + 05C3 afii57658 + 05D0 afii57664 + 05D1 afii57665 + 05D2 afii57666 + 05D3 afii57667 + 05D4 afii57668 + 05D5 afii57669 + 05D6 afii57670 + 05D7 afii57671 + 05D8 afii57672 + 05D9 afii57673 + 05DA afii57674 + 05DB afii57675 + 05DC afii57676 + 05DD afii57677 + 05DE afii57678 + 05DF afii57679 + 05E0 afii57680 + 05E1 afii57681 + 05E2 afii57682 + 05E3 afii57683 + 05E4 afii57684 + 05E5 afii57685 + 05E6 afii57686 + 05E7 afii57687 + 05E8 afii57688 + 05E9 afii57689 + 05EA afii57690 + 05F0 afii57716 + 05F1 afii57717 + 05F2 afii57718 + 060C afii57388 + 061B afii57403 + 061F afii57407 + 0621 afii57409 + 0622 afii57410 + 0623 afii57411 + 0624 afii57412 + 0625 afii57413 + 0626 afii57414 + 0627 afii57415 + 0628 afii57416 + 0629 afii57417 + 062A afii57418 + 062B afii57419 + 062C afii57420 + 062D afii57421 + 062E afii57422 + 062F afii57423 + 0630 afii57424 + 0631 afii57425 + 0632 afii57426 + 0633 afii57427 + 0634 afii57428 + 0635 afii57429 + 0636 afii57430 + 0637 afii57431 + 0638 afii57432 + 0639 afii57433 + 063A afii57434 + 0640 afii57440 + 0641 afii57441 + 0642 afii57442 + 0643 afii57443 + 0644 afii57444 + 0645 afii57445 + 0646 afii57446 + 0647 afii57470 + 0648 afii57448 + 0649 afii57449 + 064A afii57450 + 064B afii57451 + 064C afii57452 + 064D afii57453 + 064E afii57454 + 064F afii57455 + 0650 afii57456 + 0651 afii57457 + 0652 afii57458 + 0660 afii57392 + 0661 afii57393 + 0662 afii57394 + 0663 afii57395 + 0664 afii57396 + 0665 afii57397 + 0666 afii57398 + 0667 afii57399 + 0668 afii57400 + 0669 afii57401 + 066A afii57381 + 066D afii63167 + 0679 afii57511 + 067E afii57506 + 0686 afii57507 + 0688 afii57512 + 0691 afii57513 + 0698 afii57508 + 06A4 afii57505 + 06AF afii57509 + 06BA afii57514 + 06D2 afii57519 + 06D5 afii57534 + 1E80 Wgrave + 1E81 wgrave + 1E82 Wacute + 1E83 wacute + 1E84 Wdieresis + 1E85 wdieresis + 1EF2 Ygrave + 1EF3 ygrave + 200C afii61664 + 200D afii301 + 200E afii299 + 200F afii300 + 2012 figuredash + 2013 endash + 2014 emdash + 2015 afii00208 + 2017 underscoredbl + 2018 quoteleft + 2019 quoteright + 201A quotesinglbase + 201B quotereversed + 201C quotedblleft + 201D quotedblright + 201E quotedblbase + 2020 dagger + 2021 daggerdbl + 2022 bullet + 2024 onedotenleader + 2025 twodotenleader + 2026 ellipsis + 202C afii61573 + 202D afii61574 + 202E afii61575 + 2030 perthousand + 2032 minute + 2033 second + 2039 guilsinglleft + 203A guilsinglright + 203C exclamdbl + 2044 fraction + 2070 zerosuperior + 2074 foursuperior + 2075 fivesuperior + 2076 sixsuperior + 2077 sevensuperior + 2078 eightsuperior + 2079 ninesuperior + 207D parenleftsuperior + 207E parenrightsuperior + 207F nsuperior + 2080 zeroinferior + 2081 oneinferior + 2082 twoinferior + 2083 threeinferior + 2084 fourinferior + 2085 fiveinferior + 2086 sixinferior + 2087 seveninferior + 2088 eightinferior + 2089 nineinferior + 208D parenleftinferior + 208E parenrightinferior + 20A1 colonmonetary + 20A3 franc + 20A4 lira + 20A7 peseta + 20AA afii57636 + 20AB dong + 20AC Euro + 2105 afii61248 + 2111 Ifraktur + 2113 afii61289 + 2116 afii61352 + 2118 weierstrass + 211C Rfraktur + 211E prescription + 2122 trademark + 2126 Omega + 212E estimated + 2135 aleph + 2153 onethird + 2154 twothirds + 215B oneeighth + 215C threeeighths + 215D fiveeighths + 215E seveneighths + 2190 arrowleft + 2191 arrowup + 2192 arrowright + 2193 arrowdown + 2194 arrowboth + 2195 arrowupdn + 21A8 arrowupdnbse + 21B5 carriagereturn + 21D0 arrowdblleft + 21D1 arrowdblup + 21D2 arrowdblright + 21D3 arrowdbldown + 21D4 arrowdblboth + 2200 universal + 2202 partialdiff + 2203 existential + 2205 emptyset + 2206 Delta + 2207 gradient + 2208 element + 2209 notelement + 220B suchthat + 220F product + 2211 summation + 2212 minus + 2215 fraction + 2217 asteriskmath + 2219 periodcentered + 221A radical + 221D proportional + 221E infinity + 221F orthogonal + 2220 angle + 2227 logicaland + 2228 logicalor + 2229 intersection + 222A union + 222B integral + 2234 therefore + 223C similar + 2245 congruent + 2248 approxequal + 2260 notequal + 2261 equivalence + 2264 lessequal + 2265 greaterequal + 2282 propersubset + 2283 propersuperset + 2284 notsubset + 2286 reflexsubset + 2287 reflexsuperset + 2295 circleplus + 2297 circlemultiply + 22A5 perpendicular + 22C5 dotmath + 2302 house + 2310 revlogicalnot + 2320 integraltp + 2321 integralbt + 2329 angleleft + 232A angleright + 2500 SF100000 + 2502 SF110000 + 250C SF010000 + 2510 SF030000 + 2514 SF020000 + 2518 SF040000 + 251C SF080000 + 2524 SF090000 + 252C SF060000 + 2534 SF070000 + 253C SF050000 + 2550 SF430000 + 2551 SF240000 + 2552 SF510000 + 2553 SF520000 + 2554 SF390000 + 2555 SF220000 + 2556 SF210000 + 2557 SF250000 + 2558 SF500000 + 2559 SF490000 + 255A SF380000 + 255B SF280000 + 255C SF270000 + 255D SF260000 + 255E SF360000 + 255F SF370000 + 2560 SF420000 + 2561 SF190000 + 2562 SF200000 + 2563 SF230000 + 2564 SF470000 + 2565 SF480000 + 2566 SF410000 + 2567 SF450000 + 2568 SF460000 + 2569 SF400000 + 256A SF540000 + 256B SF530000 + 256C SF440000 + 2580 upblock + 2584 dnblock + 2588 block + 258C lfblock + 2590 rtblock + 2591 ltshade + 2592 shade + 2593 dkshade + 25A0 filledbox + 25A1 H22073 + 25AA H18543 + 25AB H18551 + 25AC filledrect + 25B2 triagup + 25BA triagrt + 25BC triagdn + 25C4 triaglf + 25CA lozenge + 25CB circle + 25CF H18533 + 25D8 invbullet + 25D9 invcircle + 25E6 openbullet + 263A smileface + 263B invsmileface + 263C sun + 2640 female + 2642 male + 2660 spade + 2663 club + 2665 heart + 2666 diamond + 266A musicalnote + 266B musicalnotedbl + F6BE dotlessj + F6BF LL + F6C0 ll + F6C1 Scedilla + F6C2 scedilla + F6C3 commaaccent + F6C4 afii10063 + F6C5 afii10064 + F6C6 afii10192 + F6C7 afii10831 + F6C8 afii10832 + F6C9 Acute + F6CA Caron + F6CB Dieresis + F6CC DieresisAcute + F6CD DieresisGrave + F6CE Grave + F6CF Hungarumlaut + F6D0 Macron + F6D1 cyrBreve + F6D2 cyrFlex + F6D3 dblGrave + F6D4 cyrbreve + F6D5 cyrflex + F6D6 dblgrave + F6D7 dieresisacute + F6D8 dieresisgrave + F6D9 copyrightserif + F6DA registerserif + F6DB trademarkserif + F6DC onefitted + F6DD rupiah + F6DE threequartersemdash + F6DF centinferior + F6E0 centsuperior + F6E1 commainferior + F6E2 commasuperior + F6E3 dollarinferior + F6E4 dollarsuperior + F6E5 hypheninferior + F6E6 hyphensuperior + F6E7 periodinferior + F6E8 periodsuperior + F6E9 asuperior + F6EA bsuperior + F6EB dsuperior + F6EC esuperior + F6ED isuperior + F6EE lsuperior + F6EF msuperior + F6F0 osuperior + F6F1 rsuperior + F6F2 ssuperior + F6F3 tsuperior + F6F4 Brevesmall + F6F5 Caronsmall + F6F6 Circumflexsmall + F6F7 Dotaccentsmall + F6F8 Hungarumlautsmall + F6F9 Lslashsmall + F6FA OEsmall + F6FB Ogoneksmall + F6FC Ringsmall + F6FD Scaronsmall + F6FE Tildesmall + F6FF Zcaronsmall + F721 exclamsmall + F724 dollaroldstyle + F726 ampersandsmall + F730 zerooldstyle + F731 oneoldstyle + F732 twooldstyle + F733 threeoldstyle + F734 fouroldstyle + F735 fiveoldstyle + F736 sixoldstyle + F737 sevenoldstyle + F738 eightoldstyle + F739 nineoldstyle + F73F questionsmall + F760 Gravesmall + F761 Asmall + F762 Bsmall + F763 Csmall + F764 Dsmall + F765 Esmall + F766 Fsmall + F767 Gsmall + F768 Hsmall + F769 Ismall + F76A Jsmall + F76B Ksmall + F76C Lsmall + F76D Msmall + F76E Nsmall + F76F Osmall + F770 Psmall + F771 Qsmall + F772 Rsmall + F773 Ssmall + F774 Tsmall + F775 Usmall + F776 Vsmall + F777 Wsmall + F778 Xsmall + F779 Ysmall + F77A Zsmall + F7A1 exclamdownsmall + F7A2 centoldstyle + F7A8 Dieresissmall + F7AF Macronsmall + F7B4 Acutesmall + F7B8 Cedillasmall + F7BF questiondownsmall + F7E0 Agravesmall + F7E1 Aacutesmall + F7E2 Acircumflexsmall + F7E3 Atildesmall + F7E4 Adieresissmall + F7E5 Aringsmall + F7E6 AEsmall + F7E7 Ccedillasmall + F7E8 Egravesmall + F7E9 Eacutesmall + F7EA Ecircumflexsmall + F7EB Edieresissmall + F7EC Igravesmall + F7ED Iacutesmall + F7EE Icircumflexsmall + F7EF Idieresissmall + F7F0 Ethsmall + F7F1 Ntildesmall + F7F2 Ogravesmall + F7F3 Oacutesmall + F7F4 Ocircumflexsmall + F7F5 Otildesmall + F7F6 Odieresissmall + F7F8 Oslashsmall + F7F9 Ugravesmall + F7FA Uacutesmall + F7FB Ucircumflexsmall + F7FC Udieresissmall + F7FD Yacutesmall + F7FE Thornsmall + F7FF Ydieresissmall + F8E5 radicalex + F8E6 arrowvertex + F8E7 arrowhorizex + F8E8 registersans + F8E9 copyrightsans + F8EA trademarksans + F8EB parenlefttp + F8EC parenleftex + F8ED parenleftbt + F8EE bracketlefttp + F8EF bracketleftex + F8F0 bracketleftbt + F8F1 bracelefttp + F8F2 braceleftmid + F8F3 braceleftbt + F8F4 braceex + F8F5 integralex + F8F6 parenrighttp + F8F7 parenrightex + F8F8 parenrightbt + F8F9 bracketrighttp + F8FA bracketrightex + F8FB bracketrightbt + F8FC bracerighttp + F8FD bracerightmid + F8FE bracerightbt + FB00 ff + FB01 fi + FB02 fl + FB03 ffi + FB04 ffl + FB1F afii57705 + FB2A afii57694 + FB2B afii57695 + FB35 afii57723 + FB4B afii57700 +} + +# precalculate entire prolog when this file is loaded +# (to speed things up) +set ps_preamable "%%BeginProlog\n" +append ps_preamable [CreatePostscriptEncoding [encoding system]] +append ps_preamable { +50 dict begin +% This is a standard prolog for Postscript generated by Tk's canvas +% widget. + +% The definitions below just define all of the variables used in +% any of the procedures here. This is needed for obscure reasons +% explained on p. 716 of the Postscript manual (Section H.2.7, +% "Initializing Variables," in the section on Encapsulated Postscript). + +/baseline 0 def +/stipimage 0 def +/height 0 def +/justify 0 def +/lineLength 0 def +/spacing 0 def +/stipple 0 def +/strings 0 def +/xoffset 0 def +/yoffset 0 def +/tmpstip null def + + +/cstringshow { + { + dup type /stringtype eq + { show } { glyphshow } + ifelse + } + forall +} bind def + + + +/cstringwidth { + 0 exch 0 exch + { + dup type /stringtype eq + { stringwidth } { + currentfont /Encoding get exch 1 exch put (\001) stringwidth + } + ifelse + exch 3 1 roll add 3 1 roll add exch + } + forall +} bind def + +% font ISOEncode font +% This procedure changes the encoding of a font from the default +% Postscript encoding to current system encoding. It's typically invoked just +% before invoking "setfont". The body of this procedure comes from +% Section 5.6.1 of the Postscript book. + +/ISOEncode { + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding CurrentEncoding def + currentdict + end + + % I'm not sure why it's necessary to use "definefont" on this new + % font, but it seems to be important; just use the name "Temporary" + % for the font. + + /Temporary exch definefont +} bind def + +% StrokeClip +% +% This procedure converts the current path into a clip area under +% the assumption of stroking. It's a bit tricky because some Postscript +% interpreters get errors during strokepath for dashed lines. If +% this happens then turn off dashes and try again. + +/StrokeClip { + {strokepath} stopped { + (This Postscript printer gets limitcheck overflows when) = + (stippling dashed lines; lines will be printed solid instead.) = + [] 0 setdash strokepath} if + clip +} bind def + +% desiredSize EvenPixels closestSize +% +% The procedure below is used for stippling. Given the optimal size +% of a dot in a stipple pattern in the current user coordinate system, +% compute the closest size that is an exact multiple of the device's +% pixel size. This allows stipple patterns to be displayed without +% aliasing effects. + +/EvenPixels { + % Compute exact number of device pixels per stipple dot. + dup 0 matrix currentmatrix dtransform + dup mul exch dup mul add sqrt + + % Round to an integer, make sure the number is at least 1, and compute + % user coord distance corresponding to this. + dup round dup 1 lt {pop 1} if + exch div mul +} bind def + +% width height string StippleFill -- +% +% Given a path already set up and a clipping region generated from +% it, this procedure will fill the clipping region with a stipple +% pattern. "String" contains a proper image description of the +% stipple pattern and "width" and "height" give its dimensions. Each +% stipple dot is assumed to be about one unit across in the current +% user coordinate system. This procedure trashes the graphics state. + +/StippleFill { + % The following code is needed to work around a NeWSprint bug. + + /tmpstip 1 index def + + % Change the scaling so that one user unit in user coordinates + % corresponds to the size of one stipple dot. + 1 EvenPixels dup scale + + % Compute the bounding box occupied by the path (which is now + % the clipping region), and round the lower coordinates down + % to the nearest starting point for the stipple pattern. Be + % careful about negative numbers, since the rounding works + % differently on them. + + pathbbox + 4 2 roll + 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll + 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll + + % Stack now: width height string y1 y2 x1 x2 + % Below is a doubly-nested for loop to iterate across this area + % in units of the stipple pattern size, going up columns then + % across rows, blasting out a stipple-pattern-sized rectangle at + % each position + + 6 index exch { + 2 index 5 index 3 index { + % Stack now: width height string y1 y2 x y + + gsave + 1 index exch translate + 5 index 5 index true matrix tmpstip imagemask + grestore + } for + pop + } for + pop pop pop pop pop +} bind def + +% -- AdjustColor -- +% Given a color value already set for output by the caller, adjusts +% that value to a grayscale or mono value if requested by the CL +% variable. + +/AdjustColor { + CL 2 lt { + currentgray + CL 0 eq { + .5 lt {0} {1} ifelse + } if + setgray + } if +} bind def + +% x y strings spacing xoffset yoffset justify stipple DrawText -- +% This procedure does all of the real work of drawing text. The +% color and font must already have been set by the caller, and the +% following arguments must be on the stack: +% +% x, y - Coordinates at which to draw text. +% strings - An array of strings, one for each line of the text item, +% in order from top to bottom. +% spacing - Spacing between lines. +% xoffset - Horizontal offset for text bbox relative to x and y: 0 for +% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. +% yoffset - Vertical offset for text bbox relative to x and y: 0 for +% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. +% justify - 0 for left justification, 0.5 for center, 1 for right justify. +% stipple - Boolean value indicating whether or not text is to be +% drawn in stippled fashion. If text is stippled, +% procedure StippleText must have been defined to call +% StippleFill in the right way. +% +% Also, when this procedure is invoked, the color and font must already +% have been set for the text. + +/DrawText { + /stipple exch def + /justify exch def + /yoffset exch def + /xoffset exch def + /spacing exch def + /strings exch def + + % First scan through all of the text to find the widest line. + + /lineLength 0 def + strings { + cstringwidth pop + dup lineLength gt {/lineLength exch def} {pop} ifelse + newpath + } forall + + % Compute the baseline offset and the actual font height. + + 0 0 moveto (TXygqPZ) false charpath + pathbbox dup /baseline exch def + exch pop exch sub /height exch def pop + newpath + + % Translate coordinates first so that the origin is at the upper-left + % corner of the text's bounding box. Remember that x and y for + % positioning are still on the stack. + + translate + lineLength xoffset mul + strings length 1 sub spacing mul height add yoffset mul translate + + % Now use the baseline and justification information to translate so + % that the origin is at the baseline and positioning point for the + % first line of text. + + justify lineLength mul baseline neg translate + + % Iterate over each of the lines to output it. For each line, + % compute its width again so it can be properly justified, then + % display it. + + strings { + dup cstringwidth pop + justify neg mul 0 moveto + stipple { + + + % The text is stippled, so turn it into a path and print + % by calling StippledText, which in turn calls StippleFill. + % Unfortunately, many Postscript interpreters will get + % overflow errors if we try to do the whole string at + % once, so do it a character at a time. + + gsave + /char (X) def + { + dup type /stringtype eq { + % This segment is a string. + { + char 0 3 -1 roll put + currentpoint + gsave + char true charpath clip StippleText + grestore + char stringwidth translate + moveto + } forall + } { + % This segment is glyph name + % Temporary override + currentfont /Encoding get exch 1 exch put + currentpoint + gsave (\001) true charpath clip StippleText + grestore + (\001) stringwidth translate + moveto + } ifelse + } forall + grestore + } {cstringshow} ifelse + 0 spacing neg translate + } forall +} bind def + +%%EndProlog +} + +} + +proc tk::ensure_psenc_is_loaded {} { +} diff --git a/inkstitch/bin/tk/msgbox.tcl b/inkstitch/bin/tk/msgbox.tcl new file mode 100644 index 0000000..572510a --- /dev/null +++ b/inkstitch/bin/tk/msgbox.tcl @@ -0,0 +1,451 @@ +# msgbox.tcl -- +# +# Implements messageboxes for platforms that do not have native +# messagebox support. +# +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# Ensure existence of ::tk::dialog namespace +# +namespace eval ::tk::dialog {} + +image create bitmap ::tk::dialog::b1 -foreground black \ +-data "#define b1_width 32\n#define b1_height 32 +static unsigned char q1_bits[] = { + 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x07, 0xe0, 0x00, 0xc0, 0x00, 0x00, 0x03, + 0x20, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, + 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, + 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, + 0x60, 0x00, 0x00, 0x04, 0x80, 0x03, 0x80, 0x03, 0x00, 0x0c, 0x78, 0x00, + 0x00, 0x30, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::b2 -foreground white \ +-data "#define b2_width 32\n#define b2_height 32 +static unsigned char b2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x00, + 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f, + 0xf8, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xf8, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0x07, + 0x80, 0xff, 0xff, 0x03, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::q -foreground blue \ +-data "#define q_width 32\n#define q_height 32 +static unsigned char q_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0x10, 0x0f, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0x38, 0x1e, 0x00, + 0x00, 0x38, 0x1e, 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::i -foreground blue \ +-data "#define i_width 32\n#define i_height 32 +static unsigned char i_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w1 -foreground black \ +-data "#define w1_width 32\n#define w1_height 32 +static unsigned char w1_bits[] = { + 0x00, 0x80, 0x01, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x20, 0x04, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x00, 0x08, 0x10, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x04, 0x20, 0x00, + 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, + 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x01, + 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, + 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x10, + 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x20, + 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w2 -foreground yellow \ +-data "#define w2_width 32\n#define w2_height 32 +static unsigned char w2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x00, + 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xfe, 0x3f, 0x00, + 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x01, + 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xf0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f, 0xf8, 0xff, 0xff, 0x0f, + 0xf8, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x3f, + 0xfe, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w3 -foreground black \ +-data "#define w3_width 32\n#define w3_height 32 +static unsigned char w3_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" + +# ::tk::MessageBox -- +# +# Pops up a messagebox with an application-supplied message with +# an icon and a list of buttons. This procedure will be called +# by tk_messageBox if the platform does not have native +# messagebox support, or if the particular type of messagebox is +# not supported natively. +# +# Color icons are used on Unix displays that have a color +# depth of 4 or more and $tk_strictMotif is not on. +# +# This procedure is a private procedure shouldn't be called +# directly. Call tk_messageBox instead. +# +# See the user documentation for details on what tk_messageBox does. +# +proc ::tk::MessageBox {args} { + global tcl_platform tk_strictMotif + variable ::tk::Priv + + set w ::tk::PrivMsgBox + upvar $w data + + # + # The default value of the title is space (" ") not the empty string + # because for some window managers, a + # wm title .foo "" + # causes the window title to be "foo" instead of the empty string. + # + set specs { + {-default "" "" ""} + {-detail "" "" ""} + {-icon "" "" "info"} + {-message "" "" ""} + {-parent "" "" .} + {-title "" "" " "} + {-type "" "" "ok"} + } + + tclParseConfigSpec $w $specs "" $args + + if {[lsearch -exact {info warning error question} $data(-icon)] == -1} { + error "bad -icon value \"$data(-icon)\": must be error, info, question, or warning" + } + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + switch -- $data(-icon) { + "error" {set data(-icon) "stop"} + "warning" {set data(-icon) "caution"} + "info" {set data(-icon) "note"} + } + option add *Dialog*background systemDialogBackgroundActive widgetDefault + option add *Dialog*Button.highlightBackground \ + systemDialogBackgroundActive widgetDefault + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } + + switch -- $data(-type) { + abortretryignore { + set names [list abort retry ignore] + set labels [list &Abort &Retry &Ignore] + set cancel abort + } + ok { + set names [list ok] + set labels {&OK} + set cancel ok + } + okcancel { + set names [list ok cancel] + set labels [list &OK &Cancel] + set cancel cancel + } + retrycancel { + set names [list retry cancel] + set labels [list &Retry &Cancel] + set cancel cancel + } + yesno { + set names [list yes no] + set labels [list &Yes &No] + set cancel no + } + yesnocancel { + set names [list yes no cancel] + set labels [list &Yes &No &Cancel] + set cancel cancel + } + default { + error "bad -type value \"$data(-type)\": must be\ + abortretryignore, ok, okcancel, retrycancel,\ + yesno, or yesnocancel" + } + } + + set buttons {} + foreach name $names lab $labels { + lappend buttons [list $name -text [mc $lab]] + } + + # If no default button was specified, the default default is the + # first button (Bug: 2218). + + if {$data(-default) eq ""} { + set data(-default) [lindex [lindex $buttons 0] 0] + } + + set valid 0 + foreach btn $buttons { + if {[lindex $btn 0] eq $data(-default)} { + set valid 1 + break + } + } + if {!$valid} { + error "invalid default button \"$data(-default)\"" + } + + # 2. Set the dialog to be a child window of $parent + # + # + if {$data(-parent) ne "."} { + set w $data(-parent).__tk__messagebox + } else { + set w .__tk__messagebox + } + + # There is only one background colour for the whole dialog + set bg [ttk::style lookup . -background] + + # 3. Create the top-level window and divide it into top + # and bottom parts. + + catch {destroy $w} + toplevel $w -class Dialog -bg $bg + wm title $w $data(-title) + wm iconname $w Dialog + wm protocol $w WM_DELETE_WINDOW [list $w.$cancel invoke] + + # Message boxes should be transient with respect to their parent so that + # they always stay on top of the parent window. But some window managers + # will simply create the child window as withdrawn if the parent is not + # viewable (because it is withdrawn or iconified). This is not good for + # "grab"bed windows. So only make the message box transient if the parent + # is viewable. + # + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $w moveableModal {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $w -type dialog + } + + ttk::frame $w.bot;# -background $bg + grid anchor $w.bot center + pack $w.bot -side bottom -fill both + ttk::frame $w.top;# -background $bg + pack $w.top -side top -fill both -expand 1 + if {$windowingsystem ne "aqua"} { + #$w.bot configure -relief raised -bd 1 + #$w.top configure -relief raised -bd 1 + } + + # 4. Fill the top part with bitmap, message and detail (use the + # option database for -wraplength and -font so that they can be + # overridden by the caller). + + option add *Dialog.msg.wrapLength 3i widgetDefault + option add *Dialog.dtl.wrapLength 3i widgetDefault + option add *Dialog.msg.font TkCaptionFont widgetDefault + option add *Dialog.dtl.font TkDefaultFont widgetDefault + + ttk::label $w.msg -anchor nw -justify left -text $data(-message) + #-background $bg + if {$data(-detail) ne ""} { + ttk::label $w.dtl -anchor nw -justify left -text $data(-detail) + #-background $bg + } + if {$data(-icon) ne ""} { + if {$windowingsystem eq "aqua" + || ([winfo depth $w] < 4) || $tk_strictMotif} { + # ttk::label has no -bitmap option + label $w.bitmap -bitmap $data(-icon);# -background $bg + } else { + canvas $w.bitmap -width 32 -height 32 -highlightthickness 0 \ + -background $bg + switch $data(-icon) { + error { + $w.bitmap create oval 0 0 31 31 -fill red -outline black + $w.bitmap create line 9 9 23 23 -fill white -width 4 + $w.bitmap create line 9 23 23 9 -fill white -width 4 + } + info { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::i + } + question { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::q + } + default { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w3 + } + } + } + } + grid $w.bitmap $w.msg -in $w.top -sticky news -padx 2m -pady 2m + grid columnconfigure $w.top 1 -weight 1 + if {$data(-detail) ne ""} { + grid ^ $w.dtl -in $w.top -sticky news -padx 2m -pady {0 2m} + grid rowconfigure $w.top 1 -weight 1 + } else { + grid rowconfigure $w.top 0 -weight 1 + } + + # 5. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach but $buttons { + set name [lindex $but 0] + set opts [lrange $but 1 end] + if {![llength $opts]} { + # Capitalize the first letter of $name + set capName [string toupper $name 0] + set opts [list -text $capName] + } + + eval [list tk::AmpWidget ttk::button $w.$name] $opts \ + [list -command [list set tk::Priv(button) $name]] + # -padx 3m + + if {$name eq $data(-default)} { + $w.$name configure -default active + } else { + $w.$name configure -default normal + } + grid $w.$name -in $w.bot -row 0 -column $i -padx 3m -pady 2m -sticky ew + grid columnconfigure $w.bot $i -uniform buttons + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + set tmp [string tolower $name] + if {$tmp eq "ok" || $tmp eq "cancel" || $tmp eq "yes" || + $tmp eq "no" || $tmp eq "abort" || $tmp eq "retry" || + $tmp eq "ignore"} { + grid columnconfigure $w.bot $i -minsize 90 + } + grid configure $w.$name -pady 7 + } + incr i + + # create the binding for the key accelerator, based on the underline + # + # set underIdx [$w.$name cget -under] + # if {$underIdx >= 0} { + # set key [string index [$w.$name cget -text] $underIdx] + # bind $w [list $w.$name invoke] + # bind $w [list $w.$name invoke] + # } + } + bind $w [list ::tk::AltKeyInDialog $w %A] + + if {$data(-default) ne ""} { + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W configure -default active + } + } + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W configure -default normal + } + } + } + + # 6. Create bindings for , and on the dialog + + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W invoke + } + } + + # Invoke the designated cancelling operation + bind $w [list $w.$cancel invoke] + + # At the buttons have vanished, so must do this directly. + bind $w.msg [list set tk::Priv(button) $cancel] + + # 7. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + + # 8. Set a grab and claim the focus too. + + if {$data(-default) ne ""} { + set focus $w.$data(-default) + } else { + set focus $w + } + ::tk::SetFocusGrab $w $focus + + # 9. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(button) + # Copy the result now so any that happens won't cause + # trouble + set result $Priv(button) + + ::tk::RestoreFocusGrab $w $focus + + return $result +} diff --git a/inkstitch/bin/tk/msgs/cs.msg b/inkstitch/bin/tk/msgs/cs.msg new file mode 100644 index 0000000..cd86ca9 --- /dev/null +++ b/inkstitch/bin/tk/msgs/cs.msg @@ -0,0 +1,84 @@ +namespace eval ::tk { + ::msgcat::mcset cs "&Abort" "&P\u0159eru\u0161it" + ::msgcat::mcset cs "&About..." "&O programu..." + ::msgcat::mcset cs "&Blue" "&Modr\341" + ::msgcat::mcset cs "&Cancel" "&Zru\u0161it" + ::msgcat::mcset cs "&Clear Console" "&Smazat konzolu" + ::msgcat::mcset cs "&Copy" "&Kop\355rovat" + ::msgcat::mcset cs "&Delete" "&Smazat" + ::msgcat::mcset cs "&Directory:" "&Adres\341\u0159:" + ::msgcat::mcset cs "&Edit" "&\332pravy" + ::msgcat::mcset cs "&File" "&Soubor" + ::msgcat::mcset cs "&Filter" "&Filtr" + ::msgcat::mcset cs "&Green" "Ze&len\341" + ::msgcat::mcset cs "&Help" "&N\341pov\u011bda" + ::msgcat::mcset cs "&Hide Console" "&Schovat Konzolu" + ::msgcat::mcset cs "&Ignore" "&Ignorovat" + ::msgcat::mcset cs "&No" "&Ne" + ::msgcat::mcset cs "&OK" + ::msgcat::mcset cs "&Open" "&Otev\u0159\355t" + ::msgcat::mcset cs "&Quit" "&Ukon\u010dit" + ::msgcat::mcset cs "&Red" "\u010ce&rven\341" + ::msgcat::mcset cs "&Retry" "Z&novu" + ::msgcat::mcset cs "&Save" "&Ulo\u017eit" + ::msgcat::mcset cs "&Selection:" "&V\375b\u011br:" + ::msgcat::mcset cs "&Source..." "&Zdroj..." + ::msgcat::mcset cs "&Yes" "&Ano" + ::msgcat::mcset cs "About..." "O programu..." + ::msgcat::mcset cs "All Files" "V\u0161echny soubory" + ::msgcat::mcset cs "Application Error" "Chyba programu" + ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut." + ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e" + ::msgcat::mcset cs "Cl&ear" "Sma&zat" + ::msgcat::mcset cs "Clear" "Smazat" + ::msgcat::mcset cs "Color" "Barva" + ::msgcat::mcset cs "Console" "Konzole" + ::msgcat::mcset cs "Copy" "Kop\355rovat" + ::msgcat::mcset cs "Cu&t" "V&y\u0159\355znout" + ::msgcat::mcset cs "Cut" "Vy\u0159\355znout" + ::msgcat::mcset cs "Delete" "Smazat" + ::msgcat::mcset cs "Details >>" "Detaily >>" + ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje." + ::msgcat::mcset cs "E&xit" "&Konec" + ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s" + ::msgcat::mcset cs "Exit" "Konec" + ::msgcat::mcset cs "Fi&les:" "Sou&bory:" + ::msgcat::mcset cs "Fil&ter:" "Fil&tr:" + ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n" + ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?" + ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje." + ::msgcat::mcset cs "File &name:" "&Jm\351no souboru:" + ::msgcat::mcset cs "File &names:" "&Jm\351na soubor\u016f:" + ::msgcat::mcset cs "Files of &type:" "&Typy soubor\u016f:" + ::msgcat::mcset cs "Hi" "Ahoj" + ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu" + ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"." + ::msgcat::mcset cs "Log Files" "Log soubory" + ::msgcat::mcset cs "Ok" + ::msgcat::mcset cs "Open" "Otev\u0159\355t" + ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f" + ::msgcat::mcset cs "P&aste" "&Vlo\u017eit" + ::msgcat::mcset cs "Paste" "Vlo\u017eit" + ::msgcat::mcset cs "Quit" "Skon\u010dit" + ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?" + ::msgcat::mcset cs "Save As" "Ulo\u017eit jako" + ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu" + ::msgcat::mcset cs "Select Log File" "Vybrat log soubor" + ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355" + ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy" + ::msgcat::mcset cs "Source..." "Nahr\341t..." + ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty" + ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows" + ::msgcat::mcset cs "Text Files" "Textov\351 soubory" + ::msgcat::mcset cs "abort" "p\u0159eru\u0161it" + ::msgcat::mcset cs "blue" "modr\341" + ::msgcat::mcset cs "cancel" "zru\u0161it" + ::msgcat::mcset cs "extension" "p\u0159\355pona" + ::msgcat::mcset cs "extensions" "p\u0159\355pony" + ::msgcat::mcset cs "green" "zelen\341" + ::msgcat::mcset cs "ignore" "ignorovat" + ::msgcat::mcset cs "ok" + ::msgcat::mcset cs "red" "\u010derven\341" + ::msgcat::mcset cs "retry" "znovu" + ::msgcat::mcset cs "yes" "ano" +} diff --git a/inkstitch/bin/tk/msgs/da.msg b/inkstitch/bin/tk/msgs/da.msg new file mode 100644 index 0000000..c749608 --- /dev/null +++ b/inkstitch/bin/tk/msgs/da.msg @@ -0,0 +1,77 @@ +namespace eval ::tk { + ::msgcat::mcset da "&Abort" "&Afbryd" + ::msgcat::mcset da "&About..." "&Om..." + ::msgcat::mcset da "All Files" "Alle filer" + ::msgcat::mcset da "Application Error" "Programfejl" + ::msgcat::mcset da "&Blue" "&Bl\u00E5" + ::msgcat::mcset da "&Cancel" "&Annuller" + ::msgcat::mcset da "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan ikke skifte til katalog \"%1\$s\".\nIngen rettigheder." + ::msgcat::mcset da "Choose Directory" "V\u00E6lg katalog" + ::msgcat::mcset da "&Clear" "&Ryd" + ::msgcat::mcset da "&Clear Console" "&Ryd konsolen" + ::msgcat::mcset da "Color" "Farve" + ::msgcat::mcset da "Console" "Konsol" + ::msgcat::mcset da "&Copy" "&Kopier" + ::msgcat::mcset da "Cu&t" "Kli&p" + ::msgcat::mcset da "&Delete" "&Slet" + ::msgcat::mcset da "Details >>" "Detailer" + ::msgcat::mcset da "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" findes ikke." + ::msgcat::mcset da "&Directory:" "&Katalog:" + ::msgcat::mcset da "&Edit" "&Rediger" + ::msgcat::mcset da "Error: %1\$s" "Fejl: %1\$s" + ::msgcat::mcset da "E&xit" "&Afslut" + ::msgcat::mcset da "&File" "&Fil" + ::msgcat::mcset da "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Filen \"%1\$s\" findes allerede.\nSkal den overskrives?" + ::msgcat::mcset da "File \"%1\$s\" already exists.\n\n" "Filen \"%1\$s\" findes allerede.\n\n" + ::msgcat::mcset da "File \"%1\$s\" does not exist." "Filen \"%1\$s\" findes ikke." + ::msgcat::mcset da "File &name:" "Fil&navn:" + ::msgcat::mcset da "File &names:" "Fil&navne:" + ::msgcat::mcset da "Files of &type:" "Fil&typer:" + ::msgcat::mcset da "Fi&les:" "Fi&ler:" + ::msgcat::mcset da "&Filter" + ::msgcat::mcset da "Fil&ter:" + ::msgcat::mcset da "&Green" "&Gr\u00F8n" + ::msgcat::mcset da "&Help" "&Hj\u00E6lp" + ::msgcat::mcset da "Hi" "Hej" + ::msgcat::mcset da "&Hide Console" "Skjul &konsol" + ::msgcat::mcset da "&Ignore" "&Ignorer" + ::msgcat::mcset da "Invalid file name \"%1\$s\"." "Ugyldig fil navn \"%1\$s\"." + ::msgcat::mcset da "Log Files" "Logfiler" + ::msgcat::mcset da "&No" "&Nej" + ::msgcat::mcset da "OK" "O.K." + ::msgcat::mcset da "&OK" "&O.K." + ::msgcat::mcset da "Ok" + ::msgcat::mcset da "Open" "\u00C5bn" + ::msgcat::mcset da "&Open" "&\u00C5bn" + ::msgcat::mcset da "Open Multiple Files" "\u00C5bn flere filer" + ::msgcat::mcset da "P&aste" "&Inds\u00E6t" + ::msgcat::mcset da "&Quit" "&Afslut" + ::msgcat::mcset da "&Red" "&R\u00F8d" + ::msgcat::mcset da "Replace existing file?" "Erstat eksisterende fil?" + ::msgcat::mcset da "&Retry" "&Gentag" + ::msgcat::mcset da "&Save" "&Gem" + ::msgcat::mcset da "Save As" "Gem som" + ::msgcat::mcset da "Save To Log" "Gem i log" + ::msgcat::mcset da "Select Log File" "V\u00E6lg logfil" + ::msgcat::mcset da "Select a file to source" "V\u00E6lg k\u00F8rbar fil" + ::msgcat::mcset da "&Selection:" "&Udvalg:" + ::msgcat::mcset da "Show &Hidden Directories" "Vis &skjulte kataloger" + ::msgcat::mcset da "Show &Hidden Files and Directories" "Vis &skjulte filer og kataloger" + ::msgcat::mcset da "Skip Messages" "Overspring beskeder" + ::msgcat::mcset da "&Source..." "&K\u00F8r..." + ::msgcat::mcset da "Tcl Scripts" "Tcl-Skripter" + ::msgcat::mcset da "Tcl for Windows" "Tcl for Windows" + ::msgcat::mcset da "Text Files" "Tekstfiler" + ::msgcat::mcset da "&Yes" "&Ja" + ::msgcat::mcset da "abort" "afbryd" + ::msgcat::mcset da "blue" "bl\u00E5" + ::msgcat::mcset da "cancel" "afbryd" + ::msgcat::mcset da "extension" + ::msgcat::mcset da "extensions" + ::msgcat::mcset da "green" "gr\u00F8n" + ::msgcat::mcset da "ignore" "ignorer" + ::msgcat::mcset da "ok" + ::msgcat::mcset da "red" "r\u00F8d" + ::msgcat::mcset da "retry" "gentag" + ::msgcat::mcset da "yes" "ja" +} diff --git a/inkstitch/bin/tk/msgs/de.msg b/inkstitch/bin/tk/msgs/de.msg new file mode 100644 index 0000000..7750313 --- /dev/null +++ b/inkstitch/bin/tk/msgs/de.msg @@ -0,0 +1,76 @@ +namespace eval ::tk { + ::msgcat::mcset de "&Abort" "&Abbruch" + ::msgcat::mcset de "&About..." "&\u00dcber..." + ::msgcat::mcset de "All Files" "Alle Dateien" + ::msgcat::mcset de "Application Error" "Applikationsfehler" + ::msgcat::mcset de "&Blue" "&Blau" + ::msgcat::mcset de "&Cancel" "&Abbruch" + ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." + ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis" + ::msgcat::mcset de "Cl&ear" "&R\u00fccksetzen" + ::msgcat::mcset de "&Clear Console" "&Konsole l\u00f6schen" + ::msgcat::mcset de "Color" "Farbe" + ::msgcat::mcset de "Console" "Konsole" + ::msgcat::mcset de "&Copy" "&Kopieren" + ::msgcat::mcset de "Cu&t" "Aus&schneiden" + ::msgcat::mcset de "&Delete" "&L\u00f6schen" + ::msgcat::mcset de "Details >>" + ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht." + ::msgcat::mcset de "&Directory:" "&Verzeichnis:" + ::msgcat::mcset de "&Edit" "&Bearbeiten" + ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s" + ::msgcat::mcset de "E&xit" "&Ende" + ::msgcat::mcset de "&File" "&Datei" + ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?" + ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" + ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht." + ::msgcat::mcset de "File &name:" "Datei&name:" + ::msgcat::mcset de "File &names:" "Datei&namen:" + ::msgcat::mcset de "Files of &type:" "Dateien des &Typs:" + ::msgcat::mcset de "Fi&les:" "Dat&eien:" + ::msgcat::mcset de "&Filter" + ::msgcat::mcset de "Fil&ter:" + ::msgcat::mcset de "&Green" "&Gr\u00fcn" + ::msgcat::mcset de "&Help" "&Hilfe" + ::msgcat::mcset de "Hi" "Hallo" + ::msgcat::mcset de "&Hide Console" "&Konsole unsichtbar machen" + ::msgcat::mcset de "&Ignore" "&Ignorieren" + ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"." + ::msgcat::mcset de "Log Files" "Protokolldatei" + ::msgcat::mcset de "&No" "&Nein" + ::msgcat::mcset de "&OK" + ::msgcat::mcset de "Ok" + ::msgcat::mcset de "Open" "\u00d6ffnen" + ::msgcat::mcset de "&Open" "\u00d6&ffnen" + ::msgcat::mcset de "Open Multiple Files" "Mehrere Dateien \u00F6ffnen" + ::msgcat::mcset de "P&aste" "E&inf\u00fcgen" + ::msgcat::mcset de "&Quit" "&Beenden" + ::msgcat::mcset de "&Red" "&Rot" + ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?" + ::msgcat::mcset de "&Retry" "&Wiederholen" + ::msgcat::mcset de "&Save" "&Speichern" + ::msgcat::mcset de "Save As" "Speichern unter" + ::msgcat::mcset de "Save To Log" "In Protokoll speichern" + ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen" + ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen" + ::msgcat::mcset de "&Selection:" "Auswah&l:" + ::msgcat::mcset de "Show &Hidden Directories" "Zeige versteckte Dateien" + ::msgcat::mcset de "Show &Hidden Files and Directories" "Zeige versteckte Dateien und Verzeichnisse" + ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen" + ::msgcat::mcset de "&Source..." "&Ausf\u00fchren..." + ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte" + ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows" + ::msgcat::mcset de "Text Files" "Textdateien" + ::msgcat::mcset de "&Yes" "&Ja" + ::msgcat::mcset de "abort" "abbrechen" + ::msgcat::mcset de "blue" "blau" + ::msgcat::mcset de "cancel" "abbrechen" + ::msgcat::mcset de "extension" "Erweiterung" + ::msgcat::mcset de "extensions" "Erweiterungen" + ::msgcat::mcset de "green" "gr\u00fcn" + ::msgcat::mcset de "ignore" "ignorieren" + ::msgcat::mcset de "ok" + ::msgcat::mcset de "red" "rot" + ::msgcat::mcset de "retry" "wiederholen" + ::msgcat::mcset de "yes" "ja" +} diff --git a/inkstitch/bin/tk/msgs/el.msg b/inkstitch/bin/tk/msgs/el.msg new file mode 100644 index 0000000..1dcc451 --- /dev/null +++ b/inkstitch/bin/tk/msgs/el.msg @@ -0,0 +1,86 @@ +## Messages for the Greek (Hellenic - "el") language. +## Please report any changes/suggestions to: +## petasis@iit.demokritos.gr + +namespace eval ::tk { + ::msgcat::mcset el "&Abort" "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "About..." "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..." + ::msgcat::mcset el "All Files" "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1" + ::msgcat::mcset el "Application Error" "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2" + ::msgcat::mcset el "&Blue" "\u039c\u03c0\u03bb\u03b5" + ::msgcat::mcset el "&Cancel" "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" + ::msgcat::mcset el \ +"Cannot change to the directory \"%1\$s\".\nPermission denied." \ +"\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9." + ::msgcat::mcset el "Choose Directory" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5" + ::msgcat::mcset el "Clear" "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "Color" "\u03a7\u03c1\u03ce\u03bc\u03b1" + ::msgcat::mcset el "Console" "\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1" + ::msgcat::mcset el "Copy" "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae" + ::msgcat::mcset el "Cut" "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae" + ::msgcat::mcset el "Delete" "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" + ::msgcat::mcset el "Details >>" "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>" + ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \ + "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." + ::msgcat::mcset el "&Directory:" "&\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:" + ::msgcat::mcset el "Error: %1\$s" "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s" + ::msgcat::mcset el "Exit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" + ::msgcat::mcset el \ + "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;" + ::msgcat::mcset el "File \"%1\$s\" already exists.\n\n" \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n" + ::msgcat::mcset el "File \"%1\$s\" does not exist." \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." + ::msgcat::mcset el "File &name:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:" + ::msgcat::mcset el "File &names:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:" + ::msgcat::mcset el "Files of &type:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &\u03c4\u03cd\u03c0\u03bf\u03c5:" + ::msgcat::mcset el "Fi&les:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:" + ::msgcat::mcset el "&Filter" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf" + ::msgcat::mcset el "Fil&ter:" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:" + ::msgcat::mcset el "&Green" "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" + ::msgcat::mcset el "Hi" "\u0393\u03b5\u03b9\u03b1" + ::msgcat::mcset el "Hide Console" "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2" + ::msgcat::mcset el "&Ignore" "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" + ::msgcat::mcset el "Invalid file name \"%1\$s\"." \ + "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"." + ::msgcat::mcset el "Log Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "&No" "\u038c\u03c7\u03b9" + ::msgcat::mcset el "&OK" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "&Ok" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" + ::msgcat::mcset el "&Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" + ::msgcat::mcset el "Open Multiple Files" \ + "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd" + ::msgcat::mcset el "Paste" "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7" + ::msgcat::mcset el "Quit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" + ::msgcat::mcset el "&Red" "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" + ::msgcat::mcset el "Replace existing file?" \ + "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;" + ::msgcat::mcset el "&Retry" "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" + ::msgcat::mcset el "&Save" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7" + ::msgcat::mcset el "Save As" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd" + ::msgcat::mcset el "Save To Log" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "Select Log File" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "Select a file to source" \ + "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7" + ::msgcat::mcset el "&Selection:" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:" + ::msgcat::mcset el "Skip Messages" "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae\u03bc\u03b7\u03bd\u03c5\u03bc\u03ac\u03c4\u03c9\u03bd" + ::msgcat::mcset el "Source..." "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..." + ::msgcat::mcset el "Tcl Scripts" "Tcl Scripts" + ::msgcat::mcset el "Tcl for Windows" "Tcl \u03b3\u03b9\u03b1 Windows" + ::msgcat::mcset el "Text Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5" + ::msgcat::mcset el "&Yes" "\u039d\u03b1\u03b9" + ::msgcat::mcset el "abort" "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "blue" "\u03bc\u03c0\u03bb\u03b5" + ::msgcat::mcset el "cancel" "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" + ::msgcat::mcset el "extension" "\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7" + ::msgcat::mcset el "extensions" "\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2" + ::msgcat::mcset el "green" "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" + ::msgcat::mcset el "ignore" "\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" + ::msgcat::mcset el "ok" "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "red" "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" + ::msgcat::mcset el "retry" "\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" + ::msgcat::mcset el "yes" "\u03bd\u03b1\u03b9" +} + diff --git a/inkstitch/bin/tk/msgs/en.msg b/inkstitch/bin/tk/msgs/en.msg new file mode 100644 index 0000000..b4e51bf --- /dev/null +++ b/inkstitch/bin/tk/msgs/en.msg @@ -0,0 +1,76 @@ +namespace eval ::tk { + ::msgcat::mcset en "&Abort" + ::msgcat::mcset en "&About..." + ::msgcat::mcset en "All Files" + ::msgcat::mcset en "Application Error" + ::msgcat::mcset en "&Blue" + ::msgcat::mcset en "&Cancel" + ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied." + ::msgcat::mcset en "Choose Directory" + ::msgcat::mcset en "Cl&ear" + ::msgcat::mcset en "&Clear Console" + ::msgcat::mcset en "Color" + ::msgcat::mcset en "Console" + ::msgcat::mcset en "&Copy" + ::msgcat::mcset en "Cu&t" + ::msgcat::mcset en "&Delete" + ::msgcat::mcset en "Details >>" + ::msgcat::mcset en "Directory \"%1\$s\" does not exist." + ::msgcat::mcset en "&Directory:" + ::msgcat::mcset en "&Edit" + ::msgcat::mcset en "Error: %1\$s" + ::msgcat::mcset en "E&xit" + ::msgcat::mcset en "&File" + ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?" + ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n" + ::msgcat::mcset en "File \"%1\$s\" does not exist." + ::msgcat::mcset en "File &name:" + ::msgcat::mcset en "File &names:" + ::msgcat::mcset en "Files of &type:" + ::msgcat::mcset en "Fi&les:" + ::msgcat::mcset en "&Filter" + ::msgcat::mcset en "Fil&ter:" + ::msgcat::mcset en "&Green" + ::msgcat::mcset en "&Help" + ::msgcat::mcset en "Hi" + ::msgcat::mcset en "&Hide Console" + ::msgcat::mcset en "&Ignore" + ::msgcat::mcset en "Invalid file name \"%1\$s\"." + ::msgcat::mcset en "Log Files" + ::msgcat::mcset en "&No" + ::msgcat::mcset en "&OK" + ::msgcat::mcset en "Ok" + ::msgcat::mcset en "Open" + ::msgcat::mcset en "&Open" + ::msgcat::mcset en "Open Multiple Files" + ::msgcat::mcset en "P&aste" + ::msgcat::mcset en "&Quit" + ::msgcat::mcset en "&Red" + ::msgcat::mcset en "Replace existing file?" + ::msgcat::mcset en "&Retry" + ::msgcat::mcset en "&Save" + ::msgcat::mcset en "Save As" + ::msgcat::mcset en "Save To Log" + ::msgcat::mcset en "Select Log File" + ::msgcat::mcset en "Select a file to source" + ::msgcat::mcset en "&Selection:" + ::msgcat::mcset en "Show &Hidden Directories" + ::msgcat::mcset en "Show &Hidden Files and Directories" + ::msgcat::mcset en "Skip Messages" + ::msgcat::mcset en "&Source..." + ::msgcat::mcset en "Tcl Scripts" + ::msgcat::mcset en "Tcl for Windows" + ::msgcat::mcset en "Text Files" + ::msgcat::mcset en "&Yes" + ::msgcat::mcset en "abort" + ::msgcat::mcset en "blue" + ::msgcat::mcset en "cancel" + ::msgcat::mcset en "extension" + ::msgcat::mcset en "extensions" + ::msgcat::mcset en "green" + ::msgcat::mcset en "ignore" + ::msgcat::mcset en "ok" + ::msgcat::mcset en "red" + ::msgcat::mcset en "retry" + ::msgcat::mcset en "yes" +} diff --git a/inkstitch/bin/tk/msgs/en_gb.msg b/inkstitch/bin/tk/msgs/en_gb.msg new file mode 100644 index 0000000..efafa38 --- /dev/null +++ b/inkstitch/bin/tk/msgs/en_gb.msg @@ -0,0 +1,3 @@ +namespace eval ::tk { + ::msgcat::mcset en_gb Color Colour +} diff --git a/inkstitch/bin/tk/msgs/eo.msg b/inkstitch/bin/tk/msgs/eo.msg new file mode 100644 index 0000000..85436c3 --- /dev/null +++ b/inkstitch/bin/tk/msgs/eo.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset eo "&Abort" "&\u0108esigo" + ::msgcat::mcset eo "&About..." "Pri..." + ::msgcat::mcset eo "All Files" "\u0108ioj dosieroj" + ::msgcat::mcset eo "Application Error" "Aplikoerraro" + ::msgcat::mcset eo "&Blue" "&Blua" + ::msgcat::mcset eo "&Cancel" "&Rezignu" + ::msgcat::mcset eo "Cannot change to the directory \"%1\$s\".\nPermission denied." "Neeble \u0109angi al dosierulon \"%1\$s\".\nVi ne rajtas tion." + ::msgcat::mcset eo "Choose Directory" "Elektu Dosierujo" + ::msgcat::mcset eo "&Clear" "&Klaru" + ::msgcat::mcset eo "&Clear Console" "&Klaru konzolon" + ::msgcat::mcset eo "Color" "Farbo" + ::msgcat::mcset eo "Console" "Konzolo" + ::msgcat::mcset eo "&Copy" "&Kopiu" + ::msgcat::mcset eo "Cu&t" "&Enpo\u015digu" + ::msgcat::mcset eo "&Delete" "&Forprenu" + ::msgcat::mcset eo "Details >>" "Detaloj >>" + ::msgcat::mcset eo "Directory \"%1\$s\" does not exist." "La dosierujo \"%1\$s\" ne ekzistas." + ::msgcat::mcset eo "&Directory:" "&Dosierujo:" + ::msgcat::mcset eo "&Edit" "&Redaktu" + ::msgcat::mcset eo "Error: %1\$s" "Eraro: %1\$s" + ::msgcat::mcset eo "E&xit" "&Eliru" + ::msgcat::mcset eo "&File" "&Dosiero" + ::msgcat::mcset eo "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "La dosiero \"%1\$s\" jam ekzistas.\n\u0108u vi volas anstata\u00fbigi la dosieron?" + ::msgcat::mcset eo "File \"%1\$s\" already exists.\n\n" "La dosiero \"%1\$s\" jam egzistas. \n\n" + ::msgcat::mcset eo "File \"%1\$s\" does not exist." "La dosierp \"%1\$s\" ne estas." + ::msgcat::mcset eo "File &name:" "Dosiero&nomo:" + ::msgcat::mcset eo "File &names:" "Dosiero&nomoj:" + ::msgcat::mcset eo "Files of &type:" "Dosieroj de &Typo:" + ::msgcat::mcset eo "Fi&les:" "Do&sieroj:" + ::msgcat::mcset eo "&Filter" "&Filtrilo" + ::msgcat::mcset eo "Fil&ter:" "&Filtrilo:" + ::msgcat::mcset eo "&Green" "&Verda" + ::msgcat::mcset eo "&Help" "&Helpu" + ::msgcat::mcset eo "Hi" "Saluton" + ::msgcat::mcset eo "&Hide Console" "&Ka\u015du konzolon" + ::msgcat::mcset eo "&Ignore" "&Ignoru" + ::msgcat::mcset eo "Invalid file name \"%1\$s\"." "Malvalida dosieronomo \"%1\$s\"." + ::msgcat::mcset eo "Log Files" "Protokolo" + ::msgcat::mcset eo "&No" "&Ne" + ::msgcat::mcset eo "OK" + ::msgcat::mcset eo "Ok" + ::msgcat::mcset eo "Open" "Malfermu" + ::msgcat::mcset eo "&Open" "&Malfermu" + ::msgcat::mcset eo "Open Multiple Files" "Melfermu multan dosierojn" + ::msgcat::mcset eo "P&aste" "&Elpo\u015digi" + ::msgcat::mcset eo "&Quit" "&Finigu" + ::msgcat::mcset eo "&Red" "&Rosa" + ::msgcat::mcset eo "Replace existing file?" "\u0108u anstata\u00fbu ekzistantan dosieron?" + ::msgcat::mcset eo "&Retry" "&Ripetu" + ::msgcat::mcset eo "&Save" "&Savu" + ::msgcat::mcset eo "Save As" "Savu kiel" + ::msgcat::mcset eo "Save To Log" "Savu en protokolon" + ::msgcat::mcset eo "Select Log File" "Elektu prokolodosieron" + ::msgcat::mcset eo "Select a file to source" "Elektu dosieron por interpreti" + ::msgcat::mcset eo "&Selection:" "&Elekto:" + ::msgcat::mcset eo "Skip Messages" "transsaltu pluajn mesa\u011dojn" + ::msgcat::mcset eo "&Source..." "&Fontoprogramo..." + ::msgcat::mcset eo "Tcl Scripts" "Tcl-skriptoj" + ::msgcat::mcset eo "Tcl for Windows" "Tcl por vindoso" + ::msgcat::mcset eo "Text Files" "Tekstodosierojn" + ::msgcat::mcset eo "&Yes" "&Jes" + ::msgcat::mcset eo "abort" "\u0109esigo" + ::msgcat::mcset eo "blue" "blua" + ::msgcat::mcset eo "cancel" "rezignu" + ::msgcat::mcset eo "extension" "ekspansio" + ::msgcat::mcset eo "extensions" "ekspansioj" + ::msgcat::mcset eo "green" "verda" + ::msgcat::mcset eo "ignore" "ignorieren" + ::msgcat::mcset eo "red" "ru\u011da" + ::msgcat::mcset eo "retry" "ripetu" + ::msgcat::mcset eo "yes" "jes" +} diff --git a/inkstitch/bin/tk/msgs/es.msg b/inkstitch/bin/tk/msgs/es.msg new file mode 100644 index 0000000..ceb12d6 --- /dev/null +++ b/inkstitch/bin/tk/msgs/es.msg @@ -0,0 +1,74 @@ +namespace eval ::tk { + ::msgcat::mcset es "&Abort" "&Abortar" + ::msgcat::mcset es "&About..." "&Acerca de ..." + ::msgcat::mcset es "All Files" "Todos los archivos" + ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n" + ::msgcat::mcset es "&Blue" "&Azul" + ::msgcat::mcset es "&Cancel" "&Cancelar" + ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado." + ::msgcat::mcset es "Choose Directory" "Elegir directorio" + ::msgcat::mcset es "Cl&ear" "&Borrar" + ::msgcat::mcset es "&Clear Console" "&Borrar consola" + ::msgcat::mcset es "Color" "Color" + ::msgcat::mcset es "Console" "Consola" + ::msgcat::mcset es "&Copy" "&Copiar" + ::msgcat::mcset es "Cu&t" "Cor&tar" + ::msgcat::mcset es "&Delete" "&Borrar" + ::msgcat::mcset es "Details >>" "Detalles >>" + ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe." + ::msgcat::mcset es "&Directory:" "&Directorio:" + ::msgcat::mcset es "&Edit" "&Editar" + ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s" + ::msgcat::mcset es "E&xit" "Salir" + ::msgcat::mcset es "&File" "&Archivo" + ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\n\u00bfDesea sobreescribirlo?" + ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n" + ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe." + ::msgcat::mcset es "File &name:" "&Nombre de archivo:" + ::msgcat::mcset es "File &names:" "&Nombres de archivo:" + ::msgcat::mcset es "Files of &type:" "Archivos de &tipo:" + ::msgcat::mcset es "Fi&les:" "&Archivos:" + ::msgcat::mcset es "&Filter" "&Filtro" + ::msgcat::mcset es "Fil&ter:" "Fil&tro:" + ::msgcat::mcset es "&Green" "&Verde" + ::msgcat::mcset es "&Help" "&Ayuda" + ::msgcat::mcset es "Hi" "Hola" + ::msgcat::mcset es "&Hide Console" "&Esconder la consola" + ::msgcat::mcset es "&Ignore" "&Ignorar" + ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"." + ::msgcat::mcset es "Log Files" "Ficheros de traza" + ::msgcat::mcset es "&No" "&No" + ::msgcat::mcset es "&OK" "&OK" + ::msgcat::mcset es "Ok" "Ok" + ::msgcat::mcset es "Open" "Abrir" + ::msgcat::mcset es "&Open" "&Abrir" + ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos" + ::msgcat::mcset es "P&aste" "Peg&ar" + ::msgcat::mcset es "&Quit" "&Abandonar" + ::msgcat::mcset es "&Red" "&Rojo" + ::msgcat::mcset es "Replace existing file?" "\u00bfReemplazar el archivo existente?" + ::msgcat::mcset es "&Retry" "&Reintentar" + ::msgcat::mcset es "&Save" "&Guardar" + ::msgcat::mcset es "Save As" "Guardar como" + ::msgcat::mcset es "Save To Log" "Guardar al archivo de traza" + ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza" + ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar" + ::msgcat::mcset es "&Selection:" "&Selecci\u00f3n:" + ::msgcat::mcset es "Skip Messages" "Omitir los mensajes" + ::msgcat::mcset es "&Source..." "E&valuar..." + ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows" + ::msgcat::mcset es "Text Files" "Archivos de texto" + ::msgcat::mcset es "&Yes" "&S\u00ed" + ::msgcat::mcset es "abort" "abortar" + ::msgcat::mcset es "blue" "azul" + ::msgcat::mcset es "cancel" "cancelar" + ::msgcat::mcset es "extension" "extensi\u00f3n" + ::msgcat::mcset es "extensions" "extensiones" + ::msgcat::mcset es "green" "verde" + ::msgcat::mcset es "ignore" "ignorar" + ::msgcat::mcset es "ok" "ok" + ::msgcat::mcset es "red" "rojo" + ::msgcat::mcset es "retry" "reintentar" + ::msgcat::mcset es "yes" "s\u00ed" +} diff --git a/inkstitch/bin/tk/msgs/fr.msg b/inkstitch/bin/tk/msgs/fr.msg new file mode 100644 index 0000000..b1eb7e3 --- /dev/null +++ b/inkstitch/bin/tk/msgs/fr.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset fr "&Abort" "&Annuler" + ::msgcat::mcset fr "About..." "\u00c0 propos..." + ::msgcat::mcset fr "All Files" "Tous les fichiers" + ::msgcat::mcset fr "Application Error" "Erreur d'application" + ::msgcat::mcset fr "&Blue" "&Bleu" + ::msgcat::mcset fr "&Cancel" "&Annuler" + ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e." + ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire" + ::msgcat::mcset fr "Clear" "Effacer" + ::msgcat::mcset fr "Color" "Couleur" + ::msgcat::mcset fr "Console" + ::msgcat::mcset fr "Copy" "Copier" + ::msgcat::mcset fr "Cut" "Couper" + ::msgcat::mcset fr "Delete" "Effacer" + ::msgcat::mcset fr "Details >>" "D\u00e9tails >>" + ::msgcat::mcset fr "Directory \"%1\$s\" does not exist." "Le r\u00e9pertoire \"%1\$s\" n'existe pas." + ::msgcat::mcset fr "&Directory:" "&R\u00e9pertoire:" + ::msgcat::mcset fr "Error: %1\$s" "Erreur: %1\$s" + ::msgcat::mcset fr "Exit" "Quitter" + ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?" + ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n" + ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas." + ::msgcat::mcset fr "File &name:" "&Nom de fichier:" + ::msgcat::mcset fr "File &names:" "&Noms de fichiers:" + ::msgcat::mcset fr "Files of &type:" "&Type de fichiers:" + ::msgcat::mcset fr "Fi&les:" "Fich&iers:" + ::msgcat::mcset fr "&Filter" "&Filtre" + ::msgcat::mcset fr "Fil&ter:" "Fil&tre:" + ::msgcat::mcset fr "&Green" "&Vert" + ::msgcat::mcset fr "Hi" "Salut" + ::msgcat::mcset fr "Hide Console" "Cacher la Console" + ::msgcat::mcset fr "&Ignore" "&Ignorer" + ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"." + ::msgcat::mcset fr "Log Files" "Fichiers de trace" + ::msgcat::mcset fr "&No" "&Non" + ::msgcat::mcset fr "&OK" + ::msgcat::mcset fr "Ok" + ::msgcat::mcset fr "Open" "Ouvrir" + ::msgcat::mcset fr "&Open" "&Ouvrir" + ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers" + ::msgcat::mcset fr "Paste" "Coller" + ::msgcat::mcset fr "Quit" "Quitter" + ::msgcat::mcset fr "&Red" "&Rouge" + ::msgcat::mcset fr "Replace existing file?" "Remplacer le fichier existant?" + ::msgcat::mcset fr "&Retry" "&R\u00e9-essayer" + ::msgcat::mcset fr "&Save" "&Sauvegarder" + ::msgcat::mcset fr "Save As" "Sauvegarder sous" + ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace" + ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace" + ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer" + ::msgcat::mcset fr "&Selection:" "&S\u00e9lection:" + ::msgcat::mcset fr "Skip Messages" "Omettre les messages" + ::msgcat::mcset fr "Source..." "\u00c9valuer..." + ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows" + ::msgcat::mcset fr "Text Files" "Fichiers texte" + ::msgcat::mcset fr "&Yes" "&Oui" + ::msgcat::mcset fr "abort" "abandonner" + ::msgcat::mcset fr "blue" "bleu" + ::msgcat::mcset fr "cancel" "annuler" + ::msgcat::mcset fr "extension" + ::msgcat::mcset fr "extensions" + ::msgcat::mcset fr "green" "vert" + ::msgcat::mcset fr "ignore" "ignorer" + ::msgcat::mcset fr "ok" + ::msgcat::mcset fr "red" "rouge" + ::msgcat::mcset fr "retry" "r\u00e9essayer" + ::msgcat::mcset fr "yes" "oui" +} diff --git a/inkstitch/bin/tk/msgs/hu.msg b/inkstitch/bin/tk/msgs/hu.msg new file mode 100644 index 0000000..fc4700f --- /dev/null +++ b/inkstitch/bin/tk/msgs/hu.msg @@ -0,0 +1,77 @@ +namespace eval ::tk { + ::msgcat::mcset hu "&Abort" "&Megszak\u00edt\u00e1s" + ::msgcat::mcset hu "About..." "N\u00e9vjegy..." + ::msgcat::mcset hu "All Files" "Minden f\u00e1jl" + ::msgcat::mcset hu "All Files (*) " "Minden f\u00e1jl (*) " + ::msgcat::mcset hu "Application Error" "Alkalmaz\u00e1s hiba" + ::msgcat::mcset hu "&Blue" "&K\u00e9k" + ::msgcat::mcset hu "&Cancel" "M\u00e9g&sem" + ::msgcat::mcset hu "Cannot change to the directory \"%1\$s\".\nPermission denied." "A k\u00f6nyvt\u00e1rv\u00e1lt\u00e1s nem siker\u00fclt: \"%1\$s\".\nHozz\u00e1f\u00e9r\u00e9s megtagadva." + ::msgcat::mcset hu "Choose Directory" "K\u00f6nyvt\u00e1r kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "Clear" "T\u00f6rl\u00e9s" + ::msgcat::mcset hu "&Clear Console" "&T\u00f6rl\u00e9s Konzol" + ::msgcat::mcset hu "Color" "Sz\u00edn" + ::msgcat::mcset hu "Console" "Konzol" + ::msgcat::mcset hu "&Copy" "&M\u00e1sol\u00e1s" + ::msgcat::mcset hu "Cu&t" "&Kiv\u00e1g\u00e1s" + ::msgcat::mcset hu "&Delete" "&T\u00f6rl\u00e9s" + ::msgcat::mcset hu "Details >>" "R\u00e9szletek >>" + ::msgcat::mcset hu "Directory \"%1\$s\" does not exist." "\"%1\$s\" k\u00f6nyvt\u00e1r nem l\u00e9tezik." + ::msgcat::mcset hu "&Directory:" "&K\u00f6nyvt\u00e1r:" + #::msgcat::mcset hu "&Edit" + ::msgcat::mcset hu "Error: %1\$s" "Hiba: %1\$s" + ::msgcat::mcset hu "E&xit" "Kil\u00e9p\u00e9s" + ::msgcat::mcset hu "&File" "&F\u00e1jl" + ::msgcat::mcset hu "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "\"%1\$s\" f\u00e1jl m\u00e1r l\u00e9tezik.\nFel\u00fcl\u00edrjam?" + ::msgcat::mcset hu "File \"%1\$s\" already exists.\n\n" "\"%1\$s\" f\u00e1jl m\u00e1r l\u00e9tezik.\n\n" + ::msgcat::mcset hu "File \"%1\$s\" does not exist." "\"%1\$s\" f\u00e1jl nem l\u00e9tezik." + ::msgcat::mcset hu "File &name:" "F\u00e1jl &neve:" + ::msgcat::mcset hu "File &names:" "F\u00e1jlok &nevei:" + ::msgcat::mcset hu "Files of &type:" "F\u00e1jlok &t\u00edpusa:" + ::msgcat::mcset hu "Fi&les:" "F\u00e1j&lok:" + ::msgcat::mcset hu "&Filter" "&Sz\u0171r\u0151" + ::msgcat::mcset hu "Fil&ter:" "S&z\u0171r\u0151:" + ::msgcat::mcset hu "&Green" "&Z\u00f6ld" + #::msgcat::mcset hu "&Help" + ::msgcat::mcset hu "Hi" "\u00dcdv" + ::msgcat::mcset hu "&Hide Console" "Konzol &elrejt\u00e9se" + ::msgcat::mcset hu "&Ignore" "K&ihagy\u00e1s" + ::msgcat::mcset hu "Invalid file name \"%1\$s\"." "\u00c9rv\u00e9nytelen f\u00e1jln\u00e9v: \"%1\$s\"." + ::msgcat::mcset hu "Log Files" "Log f\u00e1jlok" + ::msgcat::mcset hu "&No" "&Nem" + ::msgcat::mcset hu "&OK" + ::msgcat::mcset hu "OK" + ::msgcat::mcset hu "Open" "Megnyit\u00e1s" + ::msgcat::mcset hu "&Open" "&Megnyit\u00e1s" + ::msgcat::mcset hu "Open Multiple Files" "T\u00f6bb f\u00e1jl megnyit\u00e1sa" + ::msgcat::mcset hu "P&aste" "&Beilleszt\u00e9s" + ::msgcat::mcset hu "&Quit" "&Kil\u00e9p\u00e9s" + ::msgcat::mcset hu "&Red" "&V\u00f6r\u00f6s" + ::msgcat::mcset hu "Replace existing file?" "Megl\u00e9v\u0151 f\u00e1jl cser\u00e9je?" + ::msgcat::mcset hu "&Retry" "\u00daj&ra" + ::msgcat::mcset hu "&Save" "&Ment\u00e9s" + ::msgcat::mcset hu "Save As" "Ment\u00e9s m\u00e1sk\u00e9nt" + ::msgcat::mcset hu "Save To Log" "Ment\u00e9s log f\u00e1jlba" + ::msgcat::mcset hu "Select Log File" "Log f\u00e1jl kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "Select a file to source" "Forr\u00e1sf\u00e1jl kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "&Selection:" "&Kijel\u00f6l\u00e9s:" + ::msgcat::mcset hu "Show &Hidden Directories" "&Rejtett k\u00f6nyvt\u00e1rak megjelen\u00edt\u00e9se" + ::msgcat::mcset hu "Show &Hidden Files and Directories" "&Rejtett f\u00e1jlok \u00e9s k\u00f6nyvt\u00e1rak megjelen\u00edt\u00e9se" + ::msgcat::mcset hu "Skip Messages" "\u00dczenetek kihagy\u00e1sa" + ::msgcat::mcset hu "&Source..." "&Forr\u00e1s..." + ::msgcat::mcset hu "Tcl Scripts" "Tcl scriptek" + ::msgcat::mcset hu "Tcl for Windows" "Tcl Windows-hoz" + ::msgcat::mcset hu "Text Files" "Sz\u00f6vegf\u00e1jlok" + ::msgcat::mcset hu "&Yes" "&Igen" + ::msgcat::mcset hu "abort" "megszak\u00edt\u00e1s" + ::msgcat::mcset hu "blue" "k\u00e9k" + ::msgcat::mcset hu "cancel" "m\u00e9gsem" + ::msgcat::mcset hu "extension" "kiterjeszt\u00e9s" + ::msgcat::mcset hu "extensions" "kiterjeszt\u00e9sek" + ::msgcat::mcset hu "green" "z\u00f6ld" + ::msgcat::mcset hu "ignore" "ignorer" + ::msgcat::mcset hu "ok" + ::msgcat::mcset hu "red" "v\u00f6r\u00f6s" + ::msgcat::mcset hu "retry" "\u00fajra" + ::msgcat::mcset hu "yes" "igen" +} diff --git a/inkstitch/bin/tk/msgs/it.msg b/inkstitch/bin/tk/msgs/it.msg new file mode 100644 index 0000000..52394cd --- /dev/null +++ b/inkstitch/bin/tk/msgs/it.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset it "&Abort" "&Interrompi" + ::msgcat::mcset it "About..." "Informazioni..." + ::msgcat::mcset it "All Files" "Tutti i file" + ::msgcat::mcset it "Application Error" "Errore dell' applicazione" + ::msgcat::mcset it "&Blue" "&Blu" + ::msgcat::mcset it "&Cancel" "&Annulla" + ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato." + ::msgcat::mcset it "Choose Directory" "Scegli una directory" + ::msgcat::mcset it "Clear" "Azzera" + ::msgcat::mcset it "Color" "Colore" + ::msgcat::mcset it "Console" + ::msgcat::mcset it "Copy" "Copia" + ::msgcat::mcset it "Cut" "Taglia" + ::msgcat::mcset it "Delete" "Cancella" + ::msgcat::mcset it "Details >>" "Dettagli >>" + ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste." + ::msgcat::mcset it "&Directory:" + ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s" + ::msgcat::mcset it "Exit" "Esci" + ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?" + ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n" + ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste." + ::msgcat::mcset it "File &name:" "&Nome del file:" + ::msgcat::mcset it "File &names:" "&Nomi dei file:" + ::msgcat::mcset it "Files of &type:" "File di &tipo:" + ::msgcat::mcset it "Fi&les:" "Fi&le:" + ::msgcat::mcset it "&Filter" "&Filtro" + ::msgcat::mcset it "Fil&ter:" "Fil&tro:" + ::msgcat::mcset it "&Green" "&Verde" + ::msgcat::mcset it "Hi" "Salve" + ::msgcat::mcset it "Hide Console" "Nascondi la console" + ::msgcat::mcset it "&Ignore" "&Ignora" + ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"." + ::msgcat::mcset it "Log Files" "File di log" + ::msgcat::mcset it "&No" + ::msgcat::mcset it "&OK" + ::msgcat::mcset it "Ok" + ::msgcat::mcset it "&Open" "A&pri" + ::msgcat::mcset it "Open" "Apri" + ::msgcat::mcset it "Open Multiple Files" "Apri file multipli" + ::msgcat::mcset it "Paste" "Incolla" + ::msgcat::mcset it "Quit" "Esci" + ::msgcat::mcset it "&Red" "&Rosso" + ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?" + ::msgcat::mcset it "&Retry" "&Riprova" + ::msgcat::mcset it "&Save" "&Salva" + ::msgcat::mcset it "Save As" "Salva come" + ::msgcat::mcset it "Save To Log" "Salva il log" + ::msgcat::mcset it "Select Log File" "Scegli un file di log" + ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire" + ::msgcat::mcset it "&Selection:" "&Selezione:" + ::msgcat::mcset it "Skip Messages" "Salta i messaggi" + ::msgcat::mcset it "Source..." "Esegui..." + ::msgcat::mcset it "Tcl Scripts" "Script Tcl" + ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows" + ::msgcat::mcset it "Text Files" "File di testo" + ::msgcat::mcset it "&Yes" "&S\u00ec" + ::msgcat::mcset it "abort" "interrompi" + ::msgcat::mcset it "blue" "blu" + ::msgcat::mcset it "cancel" "annulla" + ::msgcat::mcset it "extension" "estensione" + ::msgcat::mcset it "extensions" "estensioni" + ::msgcat::mcset it "green" "verde" + ::msgcat::mcset it "ignore" "ignora" + ::msgcat::mcset it "ok" + ::msgcat::mcset it "red" "rosso" + ::msgcat::mcset it "retry" "riprova" + ::msgcat::mcset it "yes" "s\u00ec" +} diff --git a/inkstitch/bin/tk/msgs/nl.msg b/inkstitch/bin/tk/msgs/nl.msg new file mode 100644 index 0000000..90446c8 --- /dev/null +++ b/inkstitch/bin/tk/msgs/nl.msg @@ -0,0 +1,109 @@ +namespace eval ::tk { + ::msgcat::mcset nl "\"%1\$s\" must be an absolute pathname" "\"%1\$s\" moet een absolute pad-naam zijn" + ::msgcat::mcset nl "%1\$s is not a toplevel window" "%1\$s is geen toplevel window" + ::msgcat::mcset nl ", or" ", of" + ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type" + ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title" + ::msgcat::mcset nl "&Abort" "&Afbreken" + ::msgcat::mcset nl "About..." "Over..." + ::msgcat::mcset nl "All Files" "Alle Bestanden" + ::msgcat::mcset nl "Application Error" "Toepassingsfout" + ::msgcat::mcset nl "&Blue" "&Blauw" + ::msgcat::mcset nl "&Cancel" "&Annuleren" + ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming." + ::msgcat::mcset nl "Choose Directory" "Kies map" + ::msgcat::mcset nl "Clear" "Wissen" + ::msgcat::mcset nl "Clear entry, Press OK; Enter %1\$s, press OK" "Wis veld, Druk op OK; typ %1\$s in, druk op OK" + ::msgcat::mcset nl "&Clear Console" "&Wis Console" + ::msgcat::mcset nl "Color" "Kleur" + ::msgcat::mcset nl "Console" + ::msgcat::mcset nl "Copy" "Kopi\u00ebren" + ::msgcat::mcset nl "Cut" "Knippen" + ::msgcat::mcset nl "Delete" "Wissen" + ::msgcat::mcset nl "Details" + ::msgcat::mcset nl "Details >>" + ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet." + ::msgcat::mcset nl "&Directory:" "&Map:" + ::msgcat::mcset nl "Edit" "Bewerken" + ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Typ \"%1\$s\", druk op OK" + ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK" + ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s" + ::msgcat::mcset nl "Exit" "Be\u00ebindigen" + ::msgcat::mcset nl "File" "Bestand" + ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n" + ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?" + ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet." + ::msgcat::mcset nl "File &name:" "Bestands&naam:" + ::msgcat::mcset nl "File &names:" "Bestands&namen:" + ::msgcat::mcset nl "Files of &type:" "Bestanden van het &type:" + ::msgcat::mcset nl "Fi&les:" "&Bestanden:" + ::msgcat::mcset nl "&Filter" + ::msgcat::mcset nl "Fil&ter:" + ::msgcat::mcset nl "&Green" "&Groen" + ::msgcat::mcset nl "Hi" "H\u00e9" + ::msgcat::mcset nl "Hide Console" "Verberg Console" + ::msgcat::mcset nl "&Ignore" "&Negeren" + ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"." + ::msgcat::mcset nl "Log Files" "Log Bestanden" + ::msgcat::mcset nl "&No" "&Nee" + ::msgcat::mcset nl "&OK" + ::msgcat::mcset nl "Ok" + ::msgcat::mcset nl "&Open" "&Openen" + ::msgcat::mcset nl "Open" "Openen" + ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden" + ::msgcat::mcset nl "Paste" "Plakken" + ::msgcat::mcset nl "Please press %1\$s" "Druk op %1\$s, A.U.B." + ::msgcat::mcset nl "Please press ok" "Druk op ok, A.U.B." + ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren" + ::msgcat::mcset nl "Press Ok" "Druk op Ok" + ::msgcat::mcset nl "Quit" "Stoppen" + ::msgcat::mcset nl "&Red" "&Rood" + ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?" + ::msgcat::mcset nl "&Retry" "&Herhalen" + ::msgcat::mcset nl "&Save" "Op&slaan" + ::msgcat::mcset nl "Save As" "Opslaan als" + ::msgcat::mcset nl "Save To Log" "Opslaan naar Log" + ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand" + ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand" + ::msgcat::mcset nl "&Selection:" "&Selectie:" + ::msgcat::mcset nl "Skip Messages" "Berichten overslaan" + ::msgcat::mcset nl "Source..." "Bron..." + ::msgcat::mcset nl "Tcl Scripts" + ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows" + ::msgcat::mcset nl "Text Files" "Tekstbestanden" + ::msgcat::mcset nl "&Yes" "&Ja" + ::msgcat::mcset nl "abort" "afbreken" + ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja" + ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel" + ::msgcat::mcset nl "bad %1\$s value \"%2\$s\": must be %3\$s" "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s" + ::msgcat::mcset nl "bad file type \"%1\$s\", should be" "verkeerd bestandstype \"%1\$s\", moet zijn" + ::msgcat::mcset nl "bad option \"%1\$s\": should be %2\$s" "verkeerde optie \"%1\$s\": moet zijn %2\$s" + ::msgcat::mcset nl "bad window path name \"%1\$s\"" "verkeerde window-padnaam \"%1\$s\"" + ::msgcat::mcset nl "blue" "blauw" + ::msgcat::mcset nl "can't post %1\$s: it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)" "kan %1\$s niet verzenden: het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)" + ::msgcat::mcset nl "cancel" "annuleren" + ::msgcat::mcset nl "default button index greater than number of buttons specified for tk_dialog" "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog" + ::msgcat::mcset nl "display name to use (current one otherwise)" "te gebruiken schermnaam (anders huidige scherm)" + ::msgcat::mcset nl "error, info, question, or warning" "error, info, question, of warning" + ::msgcat::mcset nl "extension" + ::msgcat::mcset nl "extensions" + ::msgcat::mcset nl "focus group \"%1\$s\" doesn't exist" "focusgroep \"%1\$s\" bestaat niet" + ::msgcat::mcset nl "green" "groen" + ::msgcat::mcset nl "history event %1\$s" + ::msgcat::mcset nl "ignore" "negeren" + ::msgcat::mcset nl "invalid default button \"%1\$s\"" "ongeldige default knop \"%1\$s\"" + ::msgcat::mcset nl "macType" + ::msgcat::mcset nl "macTypes" + ::msgcat::mcset nl "must specify a background color" "een achtergrondkleur is verplicht" + ::msgcat::mcset nl "name of the slave interpreter" "naam van de slaaf-interpreter" + ::msgcat::mcset nl "no winfo screen . nor env(DISPLAY)" "geen winfo scherm . noch env(DISPLAY)" + ::msgcat::mcset nl "ok" + ::msgcat::mcset nl "red" "rood" + ::msgcat::mcset nl "retry" "opnieuw" + ::msgcat::mcset nl "should contain 5 or 4 elements" "moet 4 of 5 elementen bevatten" + ::msgcat::mcset nl "spec" + ::msgcat::mcset nl "tk_chooseDirectory command" "tk_chooseDirectory opdracht" + ::msgcat::mcset nl "tk_chooseDirectory command, cancel gives null" "tk_chooseDirectory opdracht, annuleren geeft lege waarde" + ::msgcat::mcset nl "tk_chooseDirectory command, initialdir" "tk_chooseDirectory opdracht, initi\u00eble map" + ::msgcat::mcset nl "yes" "ja" +} diff --git a/inkstitch/bin/tk/msgs/pl.msg b/inkstitch/bin/tk/msgs/pl.msg new file mode 100644 index 0000000..debebcb --- /dev/null +++ b/inkstitch/bin/tk/msgs/pl.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset pl "&Abort" "&Przerwij" + ::msgcat::mcset pl "&About..." "O programie..." + ::msgcat::mcset pl "All Files" "Wszystkie pliki" + ::msgcat::mcset pl "Application Error" "B\u0142\u0105d w programie" + ::msgcat::mcset pl "&Blue" "&Niebieski" + ::msgcat::mcset pl "&Cancel" "&Anuluj" + ::msgcat::mcset pl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nie mo\u017cna otworzy\u0107 katalogu \"%1\$s\".\nOdmowa dost\u0119pu." + ::msgcat::mcset pl "Choose Directory" "Wybierz katalog" + ::msgcat::mcset pl "Cl&ear" "&Wyczy\u015b\u0107" + ::msgcat::mcset pl "&Clear Console" "&Wyczy\u015b\u0107 konsol\u0119" + ::msgcat::mcset pl "Color" "Kolor" + ::msgcat::mcset pl "Console" "Konsola" + ::msgcat::mcset pl "&Copy" "&Kopiuj" + ::msgcat::mcset pl "Cu&t" "&Wytnij" + ::msgcat::mcset pl "&Delete" "&Usu\u0144" + ::msgcat::mcset pl "Details >>" "Szczeg\u00f3\u0142y >>" + ::msgcat::mcset pl "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" nie istnieje." + ::msgcat::mcset pl "&Directory:" "&Katalog:" + ::msgcat::mcset pl "&Edit" "&Edytuj" + ::msgcat::mcset pl "Error: %1\$s" "B\u0142\u0105d: %1\$s" + ::msgcat::mcset pl "E&xit" "&Wyjd\u017a" + ::msgcat::mcset pl "&File" "&Plik" + ::msgcat::mcset pl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Plik \"%1\$s\" ju\u017c istnieje.\nCzy chcesz go nadpisa\u0107?" + ::msgcat::mcset pl "File \"%1\$s\" already exists.\n\n" "Plik \"%1\$s\" ju\u017c istnieje.\n\n" + ::msgcat::mcset pl "File \"%1\$s\" does not exist." "Plik \"%1\$s\" nie istnieje." + ::msgcat::mcset pl "File &name:" "Nazwa &pliku:" + ::msgcat::mcset pl "File &names:" "Nazwy &plik\u00f3w:" + ::msgcat::mcset pl "Files of &type:" "Pliki &typu:" + ::msgcat::mcset pl "Fi&les:" "Pli&ki:" + ::msgcat::mcset pl "&Filter" "&Filtr" + ::msgcat::mcset pl "Fil&ter:" "&Filtr:" + ::msgcat::mcset pl "&Green" "&Zielony" + ::msgcat::mcset pl "&Help" "&Pomoc" + ::msgcat::mcset pl "Hi" "Witaj" + ::msgcat::mcset pl "&Hide Console" "&Ukryj konsol\u0119" + ::msgcat::mcset pl "&Ignore" "&Ignoruj" + ::msgcat::mcset pl "Invalid file name \"%1\$s\"." "Niew\u0142a\u015bciwa nazwa pliku \"%1\$s\"." + ::msgcat::mcset pl "Log Files" "Pliki dziennika" + ::msgcat::mcset pl "&No" "&Nie" + ::msgcat::mcset pl "OK" "OK" + ::msgcat::mcset pl "Ok" "Ok" + ::msgcat::mcset pl "Open" "Otw\u00f3rz" + ::msgcat::mcset pl "&Open" "&Otw\u00f3rz" + ::msgcat::mcset pl "Open Multiple Files" "Otw\u00f3rz wiele plik\u00f3w" + ::msgcat::mcset pl "P&aste" "&Wklej" + ::msgcat::mcset pl "&Quit" "&Zako\u0144cz" + ::msgcat::mcset pl "&Red" "&Czerwony" + ::msgcat::mcset pl "Replace existing file?" "Czy zast\u0105pi\u0107 istniej\u0105cy plik?" + ::msgcat::mcset pl "&Retry" "&Pon\u00f3w" + ::msgcat::mcset pl "&Save" "&Zapisz" + ::msgcat::mcset pl "Save As" "Zapisz jako" + ::msgcat::mcset pl "Save To Log" "Wpisz do dziennika" + ::msgcat::mcset pl "Select Log File" "Wybierz plik dziennika" + ::msgcat::mcset pl "Select a file to source" "Wybierz plik do wykonania" + ::msgcat::mcset pl "&Selection:" "&Wyb\u00f3r:" + ::msgcat::mcset pl "Skip Messages" "Pomi\u0144 pozosta\u0142e komunikaty" + ::msgcat::mcset pl "&Source..." "&Kod \u017ar\u00f3d\u0142owy..." + ::msgcat::mcset pl "Tcl Scripts" "Skrypty Tcl" + ::msgcat::mcset pl "Tcl for Windows" "Tcl dla Windows" + ::msgcat::mcset pl "Text Files" "Pliki tekstowe" + ::msgcat::mcset pl "&Yes" "&Tak" + ::msgcat::mcset pl "abort" "przerwij" + ::msgcat::mcset pl "blue" "niebieski" + ::msgcat::mcset pl "cancel" "anuluj" + ::msgcat::mcset pl "extension" "rozszerzenie" + ::msgcat::mcset pl "extensions" "rozszerzenia" + ::msgcat::mcset pl "green" "zielony" + ::msgcat::mcset pl "ignore" "ignoruj" + ::msgcat::mcset pl "red" "czerwony" + ::msgcat::mcset pl "retry" "pon\u00f3w" + ::msgcat::mcset pl "yes" "tak" +} diff --git a/inkstitch/bin/tk/msgs/pt.msg b/inkstitch/bin/tk/msgs/pt.msg new file mode 100644 index 0000000..259f82e --- /dev/null +++ b/inkstitch/bin/tk/msgs/pt.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset pt_br "&Abort" "&Abortar" + ::msgcat::mcset pt_br "About..." "Sobre ..." + ::msgcat::mcset pt_br "All Files" "Todos os arquivos" + ::msgcat::mcset pt_br "Application Error" "Erro de aplica\u00e7\u00e3o" + ::msgcat::mcset pt_br "&Blue" "&Azul" + ::msgcat::mcset pt_br "&Cancel" "&Cancelar" + ::msgcat::mcset pt_br "Cannot change to the directory \"%1\$s\".\nPermission denied." "N\u00e3o foi poss\u00edvel mudar para o diret\u00f3rio \"%1\$s\".\nPermiss\u00e3o negada." + ::msgcat::mcset pt_br "Choose Directory" "Escolha um diret\u00f3rio" + ::msgcat::mcset pt_br "Clear" "Apagar" + ::msgcat::mcset pt_br "Color" "Cor" + ::msgcat::mcset pt_br "Console" "Console" + ::msgcat::mcset pt_br "Copy" "Copiar" + ::msgcat::mcset pt_br "Cut" "Recortar" + ::msgcat::mcset pt_br "Delete" "Excluir" + ::msgcat::mcset pt_br "Details >>" "Detalhes >>" + ::msgcat::mcset pt_br "Directory \"%1\$s\" does not exist." "O diret\u00f3rio \"%1\$s\" n\u00e3o existe." + ::msgcat::mcset pt_br "&Directory:" "&Diret\u00f3rio:" + ::msgcat::mcset pt_br "Error: %1\$s" "Erro: %1\$s" + ::msgcat::mcset pt_br "Exit" "Sair" + ::msgcat::mcset pt_br "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "O arquivo \"%1\$s\" j\u00e1 existe.\nDeseja sobrescreve-lo?" + ::msgcat::mcset pt_br "File \"%1\$s\" already exists.\n\n" "O arquivo \"%1\$s\" j\u00e1 existe.\n\n" + ::msgcat::mcset pt_br "File \"%1\$s\" does not exist." "Arquivo \"%1\$s\" n\u00e3o existe." + ::msgcat::mcset pt_br "File &name:" "&Nome do arquivo:" + ::msgcat::mcset pt_br "File &names:" "&Nomes dos arquivos:" + ::msgcat::mcset pt_br "Files of &type:" "Arquivos do &tipo:" + ::msgcat::mcset pt_br "Fi&les:" "&Arquivos:" + ::msgcat::mcset pt_br "&Filter" "&Filtro" + ::msgcat::mcset pt_br "Fil&ter:" "Fil&tro:" + ::msgcat::mcset pt_br "&Green" "&Verde" + ::msgcat::mcset pt_br "Hi" "Oi" + ::msgcat::mcset pt_br "Hide Console" "Ocultar console" + ::msgcat::mcset pt_br "&Ignore" "&Ignorar" + ::msgcat::mcset pt_br "Invalid file name \"%1\$s\"." "O nome do arquivo \u00e9 inv\u00e1lido \"%1\$s\"." + ::msgcat::mcset pt_br "Log Files" "Arquivos de log" + ::msgcat::mcset pt_br "&No" "&N\u00e3o" + ::msgcat::mcset pt_br "&OK" "&OK" + ::msgcat::mcset pt_br "Ok" "Ok" + ::msgcat::mcset pt_br "Open" "Abrir" + ::msgcat::mcset pt_br "&Open" "&Abrir" + ::msgcat::mcset pt_br "Open Multiple Files" "Abrir m\u00faltiplos arquivos" + ::msgcat::mcset pt_br "Paste" "Colar" + ::msgcat::mcset pt_br "Quit" "Encerrar" + ::msgcat::mcset pt_br "&Red" "&Vermelho" + ::msgcat::mcset pt_br "Replace existing file?" "Substituir arquivo existente?" + ::msgcat::mcset pt_br "&Retry" "Tenta&r novamente" + ::msgcat::mcset pt_br "&Save" "&Salvar" + ::msgcat::mcset pt_br "Save As" "Salvar como" + ::msgcat::mcset pt_br "Save To Log" "Salvar arquivo de log" + ::msgcat::mcset pt_br "Select Log File" "Selecionar arquivo de log" + ::msgcat::mcset pt_br "Select a file to source" "Selecione um arquivo como fonte(source)" + ::msgcat::mcset pt_br "&Selection:" "&Sele\u00e7\u00e3o:" + ::msgcat::mcset pt_br "Skip Messages" "Omitir as mensagens" + ::msgcat::mcset pt_br "Source..." "Source..." + ::msgcat::mcset pt_br "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset pt_br "Tcl for Windows" "Tcl para Windows" + ::msgcat::mcset pt_br "Text Files" "Arquivos de texto" + ::msgcat::mcset pt_br "&Yes" "&Sim" + ::msgcat::mcset pt_br "abort" "abortar" + ::msgcat::mcset pt_br "blue" "azul" + ::msgcat::mcset pt_br "cancel" "cancelar" + ::msgcat::mcset pt_br "extension" "extens\u00e3o" + ::msgcat::mcset pt_br "extensions" "extens\u00f5es" + ::msgcat::mcset pt_br "green" "verde" + ::msgcat::mcset pt_br "ignore" "ignorar" + ::msgcat::mcset pt_br "ok" "ok" + ::msgcat::mcset pt_br "red" "vermelho" + ::msgcat::mcset pt_br "retry" "tentar novamente" + ::msgcat::mcset pt_br "yes" "sim" +} diff --git a/inkstitch/bin/tk/msgs/ru.msg b/inkstitch/bin/tk/msgs/ru.msg new file mode 100644 index 0000000..9f6aa80 --- /dev/null +++ b/inkstitch/bin/tk/msgs/ru.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset ru "&Abort" "&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c" + ::msgcat::mcset ru "About..." "\u041f\u0440\u043e..." + ::msgcat::mcset ru "All Files" "\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b" + ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435" + ::msgcat::mcset ru "&Blue" " &\u0413\u043e\u043b\u0443\u0431\u043e\u0439" + ::msgcat::mcset ru "&Cancel" "\u041e\u0442&\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "Cannot change to the directory \"%1\$s\".\nPermission denied." \ + "\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \"%1\$s\".\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430" + ::msgcat::mcset ru "Choose Directory" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433" + ::msgcat::mcset ru "Clear" "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c" + ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442" + ::msgcat::mcset ru "Console" "\u041a\u043e\u043d\u0441\u043e\u043b\u044c" + ::msgcat::mcset ru "Copy" "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c" + ::msgcat::mcset ru "Cut" "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c" + ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c" + ::msgcat::mcset ru "Details >>" "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 >>" + ::msgcat::mcset ru "Directory \"%1\$s\" does not exist." "\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \"%1\$s\" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ::msgcat::mcset ru "&Directory:" "&\u041a\u0430\u0442\u0430\u043b\u043e\u0433:" + ::msgcat::mcset ru "Error: %1\$s" "\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s" + ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434" + ::msgcat::mcset ru "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ + "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?" + ::msgcat::mcset ru "File \"%1\$s\" already exists.\n\n" "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\n" + ::msgcat::mcset ru "File \"%1\$s\" does not exist." "\u0424\u0430\u0439\u043b \"%1\$s\" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ::msgcat::mcset ru "File &name:" "&\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:" + ::msgcat::mcset ru "File &names:" "&\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:" + ::msgcat::mcset ru "Files of &type:" "&\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:" + ::msgcat::mcset ru "Fi&les:" "\u0424\u0430\u0439&\u043b\u044b:" + ::msgcat::mcset ru "&Filter" "&\u0424\u0438\u043b\u044c\u0442\u0440" + ::msgcat::mcset ru "Fil&ter:" "\u0424\u0438\u043b\u044c&\u0442\u0440:" + ::msgcat::mcset ru "&Green" " &\u0417\u0435\u043b\u0435\u043d\u044b\u0439" + ::msgcat::mcset ru "Hi" "\u041f\u0440\u0438\u0432\u0435\u0442" + ::msgcat::mcset ru "Hide Console" "\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c" + ::msgcat::mcset ru "&Ignore" "&\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c" + ::msgcat::mcset ru "Invalid file name \"%1\$s\"." "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \"%1\$s\"." + ::msgcat::mcset ru "Log Files" "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430" + ::msgcat::mcset ru "&No" "&\u041d\u0435\u0442" + ::msgcat::mcset ru "&OK" "&\u041e\u041a" + ::msgcat::mcset ru "Ok" "\u0414\u0430" + ::msgcat::mcset ru "Open" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c" + ::msgcat::mcset ru "&Open" "&\u041e\u0442\u043a\u0440\u044b\u0442\u044c" + ::msgcat::mcset ru "Open Multiple Files" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432" + ::msgcat::mcset ru "Paste" "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c" + ::msgcat::mcset ru "Quit" "\u0412\u044b\u0445\u043e\u0434" + ::msgcat::mcset ru "&Red" " &\u041a\u0440\u0430\u0441\u043d\u044b\u0439" + ::msgcat::mcset ru "Replace existing file?" "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?" + ::msgcat::mcset ru "&Retry" "&\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" + ::msgcat::mcset ru "&Save" "&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c" + ::msgcat::mcset ru "Save As" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a" + ::msgcat::mcset ru "Save To Log" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b" + ::msgcat::mcset ru "Select Log File" "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b" + ::msgcat::mcset ru "Select a file to source" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438" + ::msgcat::mcset ru "&Selection:" "&Selection:" + ::msgcat::mcset ru "Skip Messages" "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f" + ::msgcat::mcset ru "Source..." "\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b..." + ::msgcat::mcset ru "Tcl Scripts" "\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL" + ::msgcat::mcset ru "Tcl for Windows" "TCL \u0434\u043b\u044f Windows" + ::msgcat::mcset ru "Text Files" "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b" + ::msgcat::mcset ru "&Yes" "&\u0414\u0430" + ::msgcat::mcset ru "abort" "\u043e\u0442\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439" + ::msgcat::mcset ru "cancel" "\u043e\u0442\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "extension" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435" + ::msgcat::mcset ru "extensions" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f" + ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439" + ::msgcat::mcset ru "ignore" "\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c" + ::msgcat::mcset ru "ok" "\u043e\u043a" + ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439" + ::msgcat::mcset ru "retry" "\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" + ::msgcat::mcset ru "yes" "\u0434\u0430" +} + diff --git a/inkstitch/bin/tk/msgs/sv.msg b/inkstitch/bin/tk/msgs/sv.msg new file mode 100644 index 0000000..14ce14d --- /dev/null +++ b/inkstitch/bin/tk/msgs/sv.msg @@ -0,0 +1,74 @@ +namespace eval ::tk { + ::msgcat::mcset sv "&Abort" "&Avsluta" + ::msgcat::mcset sv "&About..." "&Om..." + ::msgcat::mcset sv "All Files" "Samtliga filer" + ::msgcat::mcset sv "Application Error" "Programfel" + ::msgcat::mcset sv "&Blue" "&Bl\u00e5" + ::msgcat::mcset sv "&Cancel" "&Avbryt" + ::msgcat::mcset sv "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan ej n\u00e5 mappen \"%1\$s\".\nSaknar r\u00e4ttigheter." + ::msgcat::mcset sv "Choose Directory" "V\u00e4lj mapp" + ::msgcat::mcset sv "&Clear" "&Radera" + ::msgcat::mcset sv "&Clear Console" "&Radera konsollen" + ::msgcat::mcset sv "Color" "F\u00e4rg" + ::msgcat::mcset sv "Console" "Konsoll" + ::msgcat::mcset sv "&Copy" "&Kopiera" + ::msgcat::mcset sv "Cu&t" "Klipp u&t" + ::msgcat::mcset sv "&Delete" "&Radera" + ::msgcat::mcset sv "Details >>" "Detaljer >>" + ::msgcat::mcset sv "Directory \"%1\$s\" does not exist." "Mappen \"%1\$s\" finns ej." + ::msgcat::mcset sv "&Directory:" "&Mapp:" + ::msgcat::mcset sv "&Edit" "R&edigera" + ::msgcat::mcset sv "Error: %1\$s" "Fel: %1\$s" + ::msgcat::mcset sv "E&xit" "&Avsluta" + ::msgcat::mcset sv "&File" "&Fil" + ::msgcat::mcset sv "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Filen \"%1\$s\" finns redan.\nVill du skriva \u00f6ver den?" + ::msgcat::mcset sv "File \"%1\$s\" already exists.\n\n" "Filen \"%1\$s\" finns redan.\n\n" + ::msgcat::mcset sv "File \"%1\$s\" does not exist." "Filen \"%1\$s\" finns ej." + ::msgcat::mcset sv "File &name:" "Fil&namn:" + ::msgcat::mcset sv "File &names:" "Fil&namn:" + ::msgcat::mcset sv "Files of &type:" "Filer av &typ:" + ::msgcat::mcset sv "Fi&les:" "Fi&ler:" + ::msgcat::mcset sv "&Filter" + ::msgcat::mcset sv "Fil&ter:" + ::msgcat::mcset sv "&Green" "&Gr\u00f6n" + ::msgcat::mcset sv "&Help" "&Hj\u00e4lp" + ::msgcat::mcset sv "Hi" "Hej" + ::msgcat::mcset sv "&Hide Console" "&G\u00f6m konsollen" + ::msgcat::mcset sv "&Ignore" "&Ignorera" + ::msgcat::mcset sv "Invalid file name \"%1\$s\"." "Ogiltigt filnamn \"%1\$s\"." + ::msgcat::mcset sv "Log Files" "Loggfiler" + ::msgcat::mcset sv "&No" "&Nej" + ::msgcat::mcset sv "OK" + ::msgcat::mcset sv "Ok" + ::msgcat::mcset sv "Open" "\u00d6ppna" + ::msgcat::mcset sv "&Open" "&\u00d6ppna" + ::msgcat::mcset sv "Open Multiple Files" "\u00d6ppna flera filer" + ::msgcat::mcset sv "P&aste" "&Klistra in" + ::msgcat::mcset sv "&Quit" "&Avsluta" + ::msgcat::mcset sv "&Red" "&R\u00f6d" + ::msgcat::mcset sv "Replace existing file?" "Ers\u00e4tt existerande fil?" + ::msgcat::mcset sv "&Retry" "&F\u00f6rs\u00f6k igen" + ::msgcat::mcset sv "&Save" "&Spara" + ::msgcat::mcset sv "Save As" "Spara som" + ::msgcat::mcset sv "Save To Log" "Spara till logg" + ::msgcat::mcset sv "Select Log File" "V\u00e4lj loggfil" + ::msgcat::mcset sv "Select a file to source" "V\u00e4lj k\u00e4llfil" + ::msgcat::mcset sv "&Selection:" "&Val:" + ::msgcat::mcset sv "Skip Messages" "Hoppa \u00f6ver meddelanden" + ::msgcat::mcset sv "&Source..." "&K\u00e4lla..." + ::msgcat::mcset sv "Tcl Scripts" "Tcl skript" + ::msgcat::mcset sv "Tcl for Windows" "Tcl f\u00f6r Windows" + ::msgcat::mcset sv "Text Files" "Textfiler" + ::msgcat::mcset sv "&Yes" "&Ja" + ::msgcat::mcset sv "abort" "avbryt" + ::msgcat::mcset sv "blue" "bl\u00e5" + ::msgcat::mcset sv "cancel" "avbryt" + ::msgcat::mcset sv "extension" "utvidgning" + ::msgcat::mcset sv "extensions" "utvidgningar" + ::msgcat::mcset sv "green" "gr\u00f6n" + ::msgcat::mcset sv "ignore" "ignorera" + ::msgcat::mcset sv "ok" + ::msgcat::mcset sv "red" "r\u00f6d" + ::msgcat::mcset sv "retry" "f\u00f6rs\u00f6k igen" + ::msgcat::mcset sv "yes" "ja" +} diff --git a/inkstitch/bin/tk/obsolete.tcl b/inkstitch/bin/tk/obsolete.tcl new file mode 100644 index 0000000..3ee7f28 --- /dev/null +++ b/inkstitch/bin/tk/obsolete.tcl @@ -0,0 +1,178 @@ +# obsolete.tcl -- +# +# This file contains obsolete procedures that people really shouldn't +# be using anymore, but which are kept around for backward compatibility. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# The procedures below are here strictly for backward compatibility with +# Tk version 3.6 and earlier. The procedures are no longer needed, so +# they are no-ops. You should not use these procedures anymore, since +# they may be removed in some future release. + +proc tk_menuBar args {} +proc tk_bindForTraversal args {} + +# ::tk::classic::restore -- +# +# Restore the pre-8.5 (Tk classic) look as the widget defaults for classic +# Tk widgets. +# +# The value following an 'option add' call is the new 8.5 value. +# +namespace eval ::tk::classic { + # This may need to be adjusted for some window managers that are + # more aggressive with their own Xdefaults (like KDE and CDE) + variable prio "widgetDefault" +} + +proc ::tk::classic::restore {args} { + # Restore classic (8.4) look to classic Tk widgets + variable prio + + if {[llength $args]} { + foreach what $args { + ::tk::classic::restore_$what + } + } else { + foreach cmd [info procs restore_*] { + $cmd + } + } +} + +proc ::tk::classic::restore_font {args} { + # Many widgets were adjusted from hard-coded defaults to using the + # TIP#145 fonts defined in fonts.tcl (eg TkDefaultFont, TkFixedFont, ...) + # For restoring compatibility, we only correct size and weighting changes, + # as the fonts themselves remained mostly the same. + if {[tk windowingsystem] eq "x11"} { + font configure TkDefaultFont -weight bold ; # normal + font configure TkFixedFont -size -12 ; # -10 + } + # Add these with prio 21 to override value in dialog/msgbox.tcl + if {[tk windowingsystem] eq "aqua"} { + option add *Dialog.msg.font system 21; # TkCaptionFont + option add *Dialog.dtl.font system 21; # TkCaptionFont + option add *ErrorDialog*Label.font system 21; # TkCaptionFont + } else { + option add *Dialog.msg.font {Times 12} 21; # TkCaptionFont + option add *Dialog.dtl.font {Times 10} 21; # TkCaptionFont + option add *ErrorDialog*Label.font {Times -18} 21; # TkCaptionFont + } +} + +proc ::tk::classic::restore_button {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + foreach cls {Button Radiobutton Checkbutton} { + option add *$cls.borderWidth 2 $prio; # 1 + } + } +} + +proc ::tk::classic::restore_entry {args} { + variable prio + # Entry and Spinbox share core defaults + foreach cls {Entry Spinbox} { + if {[tk windowingsystem] ne "aqua"} { + option add *$cls.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "x11"} { + option add *$cls.background "#d9d9d9" $prio; # "white" + option add *$cls.selectBorderWidth 1 $prio; # 0 + } + } +} + +proc ::tk::classic::restore_listbox {args} { + variable prio + if {[tk windowingsystem] ne "win32"} { + option add *Listbox.background "#d9d9d9" $prio; # "white" + option add *Listbox.activeStyle "underline" $prio; # "dotbox" + } + if {[tk windowingsystem] ne "aqua"} { + option add *Listbox.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "x11"} { + option add *Listbox.selectBorderWidth 1 $prio; # 0 + } + # Remove focus into Listbox added for 8.5 + bind Listbox <1> { + if {[winfo exists %W]} { + tk::ListboxBeginSelect %W [%W index @%x,%y] + } + } +} + +proc ::tk::classic::restore_menu {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + option add *Menu.activeBorderWidth 2 $prio; # 1 + option add *Menu.borderWidth 2 $prio; # 1 + option add *Menu.clickToFocus true $prio + option add *Menu.useMotifHelp true $prio + } + if {[tk windowingsystem] ne "aqua"} { + option add *Menu.font "TkDefaultFont" $prio; # "TkMenuFont" + } +} + +proc ::tk::classic::restore_menubutton {args} { + variable prio + option add *Menubutton.borderWidth 2 $prio; # 1 +} + +proc ::tk::classic::restore_message {args} { + variable prio + option add *Message.borderWidth 2 $prio; # 1 +} + +proc ::tk::classic::restore_panedwindow {args} { + variable prio + option add *Panedwindow.borderWidth 2 $prio; # 1 + option add *Panedwindow.sashWidth 2 $prio; # 3 + option add *Panedwindow.sashPad 2 $prio; # 0 + option add *Panedwindow.sashRelief raised $prio; # flat + option add *Panedwindow.opaqueResize 0 $prio; # 1 + if {[tk windowingsystem] ne "win32"} { + option add *Panedwindow.showHandle 1 $prio; # 0 + } +} + +proc ::tk::classic::restore_scale {args} { + variable prio + option add *Scale.borderWidth 2 $prio; # 1 + if {[tk windowingsystem] eq "x11"} { + option add *Scale.troughColor "#c3c3c3" $prio; # "#b3b3b3" + } +} + +proc ::tk::classic::restore_scrollbar {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + option add *Scrollbar.borderWidth 2 $prio; # 1 + option add *Scrollbar.highlightThickness 1 $prio; # 0 + option add *Scrollbar.width 15 $prio; # 11 + option add *Scrollbar.troughColor "#c3c3c3" $prio; # "#b3b3b3" + } +} + +proc ::tk::classic::restore_text {args} { + variable prio + if {[tk windowingsystem] ne "aqua"} { + option add *Text.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "win32"} { + option add *Text.font "TkDefaultFont" $prio; # "TkFixedFont" + } + if {[tk windowingsystem] eq "x11"} { + option add *Text.background "#d9d9d9" $prio; # white + option add *Text.selectBorderWidth 1 $prio; # 0 + } +} diff --git a/inkstitch/bin/tk/optMenu.tcl b/inkstitch/bin/tk/optMenu.tcl new file mode 100644 index 0000000..7cfdaa0 --- /dev/null +++ b/inkstitch/bin/tk/optMenu.tcl @@ -0,0 +1,43 @@ +# optMenu.tcl -- +# +# This file defines the procedure tk_optionMenu, which creates +# an option button and its associated menu. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# ::tk_optionMenu -- +# This procedure creates an option button named $w and an associated +# menu. Together they provide the functionality of Motif option menus: +# they can be used to select one of many values, and the current value +# appears in the global variable varName, as well as in the text of +# the option menubutton. The name of the menu is returned as the +# procedure's result, so that the caller can use it to change configuration +# options on the menu or otherwise manipulate it. +# +# Arguments: +# w - The name to use for the menubutton. +# varName - Global variable to hold the currently selected value. +# firstValue - First of legal values for option (must be >= 1). +# args - Any number of additional values. + +proc ::tk_optionMenu {w varName firstValue args} { + upvar #0 $varName var + + if {![info exists var]} { + set var $firstValue + } + menubutton $w -textvariable $varName -indicatoron 1 -menu $w.menu \ + -relief raised -highlightthickness 1 -anchor c \ + -direction flush + menu $w.menu -tearoff 0 + $w.menu add radiobutton -label $firstValue -variable $varName + foreach i $args { + $w.menu add radiobutton -label $i -variable $varName + } + return $w.menu +} diff --git a/inkstitch/bin/tk/palette.tcl b/inkstitch/bin/tk/palette.tcl new file mode 100644 index 0000000..21be8dc --- /dev/null +++ b/inkstitch/bin/tk/palette.tcl @@ -0,0 +1,243 @@ +# palette.tcl -- +# +# This file contains procedures that change the color palette used +# by Tk. +# +# Copyright (c) 1995-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# ::tk_setPalette -- +# Changes the default color scheme for a Tk application by setting +# default colors in the option database and by modifying all of the +# color options for existing widgets that have the default value. +# +# Arguments: +# The arguments consist of either a single color name, which +# will be used as the new background color (all other colors will +# be computed from this) or an even number of values consisting of +# option names and values. The name for an option is the one used +# for the option database, such as activeForeground, not -activeforeground. + +proc ::tk_setPalette {args} { + if {[winfo depth .] == 1} { + # Just return on monochrome displays, otherwise errors will occur + return + } + + # Create an array that has the complete new palette. If some colors + # aren't specified, compute them from other colors that are specified. + + if {[llength $args] == 1} { + set new(background) [lindex $args 0] + } else { + array set new $args + } + if {![info exists new(background)]} { + error "must specify a background color" + } + set bg [winfo rgb . $new(background)] + if {![info exists new(foreground)]} { + # Note that the range of each value in the triple returned by + # [winfo rgb] is 0-65535, and your eyes are more sensitive to + # green than to red, and more to red than to blue. + foreach {r g b} $bg {break} + if {$r+1.5*$g+0.5*$b > 100000} { + set new(foreground) black + } else { + set new(foreground) white + } + } + lassign [winfo rgb . $new(foreground)] fg_r fg_g fg_b + lassign $bg bg_r bg_g bg_b + set darkerBg [format #%02x%02x%02x [expr {(9*$bg_r)/2560}] \ + [expr {(9*$bg_g)/2560}] [expr {(9*$bg_b)/2560}]] + + foreach i {activeForeground insertBackground selectForeground \ + highlightColor} { + if {![info exists new($i)]} { + set new($i) $new(foreground) + } + } + if {![info exists new(disabledForeground)]} { + set new(disabledForeground) [format #%02x%02x%02x \ + [expr {(3*$bg_r + $fg_r)/1024}] \ + [expr {(3*$bg_g + $fg_g)/1024}] \ + [expr {(3*$bg_b + $fg_b)/1024}]] + } + if {![info exists new(highlightBackground)]} { + set new(highlightBackground) $new(background) + } + if {![info exists new(activeBackground)]} { + # Pick a default active background that islighter than the + # normal background. To do this, round each color component + # up by 15% or 1/3 of the way to full white, whichever is + # greater. + + foreach i {0 1 2} color $bg { + set light($i) [expr {$color/256}] + set inc1 [expr {($light($i)*15)/100}] + set inc2 [expr {(255-$light($i))/3}] + if {$inc1 > $inc2} { + incr light($i) $inc1 + } else { + incr light($i) $inc2 + } + if {$light($i) > 255} { + set light($i) 255 + } + } + set new(activeBackground) [format #%02x%02x%02x $light(0) \ + $light(1) $light(2)] + } + if {![info exists new(selectBackground)]} { + set new(selectBackground) $darkerBg + } + if {![info exists new(troughColor)]} { + set new(troughColor) $darkerBg + } + + # let's make one of each of the widgets so we know what the + # defaults are currently for this platform. + toplevel .___tk_set_palette + wm withdraw .___tk_set_palette + foreach q { + button canvas checkbutton entry frame label labelframe + listbox menubutton menu message radiobutton scale scrollbar + spinbox text + } { + $q .___tk_set_palette.$q + } + + # Walk the widget hierarchy, recoloring all existing windows. + # The option database must be set according to what we do here, + # but it breaks things if we set things in the database while + # we are changing colors...so, ::tk::RecolorTree now returns the + # option database changes that need to be made, and they + # need to be evalled here to take effect. + # We have to walk the whole widget tree instead of just + # relying on the widgets we've created above to do the work + # because different extensions may provide other kinds + # of widgets that we don't currently know about, so we'll + # walk the whole hierarchy just in case. + + eval [tk::RecolorTree . new] + + destroy .___tk_set_palette + + # Change the option database so that future windows will get the + # same colors. + + foreach option [array names new] { + option add *$option $new($option) widgetDefault + } + + # Save the options in the variable ::tk::Palette, for use the + # next time we change the options. + + array set ::tk::Palette [array get new] +} + +# ::tk::RecolorTree -- +# This procedure changes the colors in a window and all of its +# descendants, according to information provided by the colors +# argument. This looks at the defaults provided by the option +# database, if it exists, and if not, then it looks at the default +# value of the widget itself. +# +# Arguments: +# w - The name of a window. This window and all its +# descendants are recolored. +# colors - The name of an array variable in the caller, +# which contains color information. Each element +# is named after a widget configuration option, and +# each value is the value for that option. + +proc ::tk::RecolorTree {w colors} { + upvar $colors c + set result {} + set prototype .___tk_set_palette.[string tolower [winfo class $w]] + if {![winfo exists $prototype]} { + unset prototype + } + foreach dbOption [array names c] { + set option -[string tolower $dbOption] + set class [string replace $dbOption 0 0 [string toupper \ + [string index $dbOption 0]]] + if {![catch {$w configure $option} value]} { + # if the option database has a preference for this + # dbOption, then use it, otherwise use the defaults + # for the widget. + set defaultcolor [option get $w $dbOption $class] + if {$defaultcolor eq "" || \ + ([info exists prototype] && \ + [$prototype cget $option] ne "$defaultcolor")} { + set defaultcolor [lindex $value 3] + } + if {$defaultcolor ne ""} { + set defaultcolor [winfo rgb . $defaultcolor] + } + set chosencolor [lindex $value 4] + if {$chosencolor ne ""} { + set chosencolor [winfo rgb . $chosencolor] + } + if {[string match $defaultcolor $chosencolor]} { + # Change the option database so that future windows will get + # the same colors. + append result ";\noption add [list \ + *[winfo class $w].$dbOption $c($dbOption) 60]" + $w configure $option $c($dbOption) + } + } + } + foreach child [winfo children $w] { + append result ";\n[::tk::RecolorTree $child c]" + } + return $result +} + +# ::tk::Darken -- +# Given a color name, computes a new color value that darkens (or +# brightens) the given color by a given percent. +# +# Arguments: +# color - Name of starting color. +# perecent - Integer telling how much to brighten or darken as a +# percent: 50 means darken by 50%, 110 means brighten +# by 10%. + +proc ::tk::Darken {color percent} { + foreach {red green blue} [winfo rgb . $color] { + set red [expr {($red/256)*$percent/100}] + set green [expr {($green/256)*$percent/100}] + set blue [expr {($blue/256)*$percent/100}] + break + } + if {$red > 255} { + set red 255 + } + if {$green > 255} { + set green 255 + } + if {$blue > 255} { + set blue 255 + } + return [format "#%02x%02x%02x" $red $green $blue] +} + +# ::tk_bisque -- +# Reset the Tk color palette to the old "bisque" colors. +# +# Arguments: +# None. + +proc ::tk_bisque {} { + tk_setPalette activeBackground #e6ceb1 activeForeground black \ + background #ffe4c4 disabledForeground #b0b0b0 foreground black \ + highlightBackground #ffe4c4 highlightColor black \ + insertBackground black \ + selectBackground #e6ceb1 selectForeground black \ + troughColor #cdb79e +} diff --git a/inkstitch/bin/tk/panedwindow.tcl b/inkstitch/bin/tk/panedwindow.tcl new file mode 100644 index 0000000..d3dfabc --- /dev/null +++ b/inkstitch/bin/tk/panedwindow.tcl @@ -0,0 +1,194 @@ +# panedwindow.tcl -- +# +# This file defines the default bindings for Tk panedwindow widgets and +# provides procedures that help in implementing those bindings. + +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 0 } + +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 0 } + +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 1} +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 0} + +bind Panedwindow { ::tk::panedwindow::Motion %W %x %y } + +bind Panedwindow { ::tk::panedwindow::Leave %W } + +# Initialize namespace +namespace eval ::tk::panedwindow {} + +# ::tk::panedwindow::MarkSash -- +# +# Handle marking the correct sash for possible dragging +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# None +# +proc ::tk::panedwindow::MarkSash {w x y proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + set what [$w identify $x $y] + if { [llength $what] == 2 } { + lassign $what index which + if {!$::tk_strictMotif || $which eq "handle"} { + if {!$proxy} { + $w sash mark $index $x $y + } + set Priv(sash) $index + lassign [$w sash coord $index] sx sy + set Priv(dx) [expr {$sx-$x}] + set Priv(dy) [expr {$sy-$y}] + # Do this to init the proxy location + DragSash $w $x $y $proxy + } + } +} + +# ::tk::panedwindow::DragSash -- +# +# Handle dragging of the correct sash +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# Moves sash +# +proc ::tk::panedwindow::DragSash {w x y proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + if {[info exists Priv(sash)]} { + if {$proxy} { + $w proxy place [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}] + } else { + $w sash place $Priv(sash) \ + [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}] + } + } +} + +# ::tk::panedwindow::ReleaseSash -- +# +# Handle releasing of the sash +# +# Arguments: +# w the widget +# proxy whether this should be a proxy sash +# Results: +# Returns ... +# +proc ::tk::panedwindow::ReleaseSash {w proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + if {[info exists Priv(sash)]} { + if {$proxy} { + lassign [$w proxy coord] x y + $w sash place $Priv(sash) $x $y + $w proxy forget + } + unset Priv(sash) Priv(dx) Priv(dy) + } +} + +# ::tk::panedwindow::Motion -- +# +# Handle motion on the widget. This is used to change the cursor +# when the user moves over the sash area. +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# Results: +# May change the cursor. Sets up a timer to verify that we are still +# over the widget. +# +proc ::tk::panedwindow::Motion {w x y} { + variable ::tk::Priv + set id [$w identify $x $y] + if {([llength $id] == 2) && \ + (!$::tk_strictMotif || [lindex $id 1] eq "handle")} { + if {![info exists Priv($w,panecursor)]} { + set Priv($w,panecursor) [$w cget -cursor] + if {[$w cget -sashcursor] ne ""} { + $w configure -cursor [$w cget -sashcursor] + } elseif {[$w cget -orient] eq "horizontal"} { + $w configure -cursor sb_h_double_arrow + } else { + $w configure -cursor sb_v_double_arrow + } + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + } + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } + return + } + if {[info exists Priv($w,panecursor)]} { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + } +} + +# ::tk::panedwindow::Cursor -- +# +# Handles returning the normal cursor when we are no longer over the +# sash area. This needs to be done this way, because the panedwindow +# won't see Leave events when the mouse moves from the sash to a +# paned child, although the child does receive an Enter event. +# +# Arguments: +# w the widget +# Results: +# May restore the default cursor, or schedule a timer to do it. +# +proc ::tk::panedwindow::Cursor {w} { + variable ::tk::Priv + # Make sure to check window existence in case it is destroyed. + if {[info exists Priv($w,panecursor)] && [winfo exists $w]} { + if {[winfo containing [winfo pointerx $w] [winfo pointery $w]] eq $w} { + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } else { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + unset Priv($w,pwAfterId) + } + } + } +} + +# ::tk::panedwindow::Leave -- +# +# Return to default cursor when leaving the pw widget. +# +# Arguments: +# w the widget +# Results: +# Restores the default cursor +# +proc ::tk::panedwindow::Leave {w} { + variable ::tk::Priv + if {[info exists Priv($w,panecursor)]} { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + } +} diff --git a/inkstitch/bin/tk/pkgIndex.tcl b/inkstitch/bin/tk/pkgIndex.tcl new file mode 100644 index 0000000..8f54276 --- /dev/null +++ b/inkstitch/bin/tk/pkgIndex.tcl @@ -0,0 +1,7 @@ +if {[catch {package present Tcl 8.5.0}]} { return } +if {($::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)] + || ([info exists ::argv] && ("-display" in $::argv)))} { + package ifneeded Tk 8.5.15 [list load [file join $dir .. .. bin libtk8.5.dll] Tk] +} else { + package ifneeded Tk 8.5.15 [list load [file join $dir .. .. bin tk85.dll] Tk] +} diff --git a/inkstitch/bin/tk/safetk.tcl b/inkstitch/bin/tk/safetk.tcl new file mode 100644 index 0000000..c975fd6 --- /dev/null +++ b/inkstitch/bin/tk/safetk.tcl @@ -0,0 +1,264 @@ +# safetk.tcl -- +# +# Support procs to use Tk in safe interpreters. +# +# Copyright (c) 1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# see safetk.n for documentation + +# +# +# Note: It is now ok to let untrusted code being executed +# between the creation of the interp and the actual loading +# of Tk in that interp because the C side Tk_Init will +# now look up the master interp and ask its safe::TkInit +# for the actual parameters to use for it's initialization (if allowed), +# not relying on the slave state. +# + +# We use opt (optional arguments parsing) +package require opt 0.4.1; + +namespace eval ::safe { + + # counter for safe toplevels + variable tkSafeId 0 +} + +# +# tkInterpInit : prepare the slave interpreter for tk loading +# most of the real job is done by loadTk +# returns the slave name (tkInterpInit does) +# +proc ::safe::tkInterpInit {slave argv} { + global env tk_library + + # We have to make sure that the tk_library variable is normalized. + set tk_library [file normalize $tk_library] + + # Clear Tk's access for that interp (path). + allowTk $slave $argv + + # Ensure tk_library and subdirs (eg, ttk) are on the access path + ::interp eval $slave [list set tk_library [::safe::interpAddToAccessPath $slave $tk_library]] + foreach subdir [::safe::AddSubDirs [list $tk_library]] { + ::safe::interpAddToAccessPath $slave $subdir + } + return $slave +} + + +# tkInterpLoadTk: +# Do additional configuration as needed (calling tkInterpInit) +# and actually load Tk into the slave. +# +# Either contained in the specified windowId (-use) or +# creating a decorated toplevel for it. + +# empty definition for auto_mkIndex +proc ::safe::loadTk {} {} + +::tcl::OptProc ::safe::loadTk { + {slave -interp "name of the slave interpreter"} + {-use -windowId {} "window Id to use (new toplevel otherwise)"} + {-display -displayName {} "display name to use (current one otherwise)"} +} { + set displayGiven [::tcl::OptProcArgGiven "-display"] + if {!$displayGiven} { + # Try to get the current display from "." + # (which might not exist if the master is tk-less) + if {[catch {set display [winfo screen .]}]} { + if {[info exists ::env(DISPLAY)]} { + set display $::env(DISPLAY) + } else { + Log $slave "no winfo screen . nor env(DISPLAY)" WARNING + set display ":0.0" + } + } + } + + # Get state for access to the cleanupHook. + namespace upvar ::safe S$slave state + + if {![::tcl::OptProcArgGiven "-use"]} { + # create a decorated toplevel + ::tcl::Lassign [tkTopLevel $slave $display] w use + + # set our delete hook (slave arg is added by interpDelete) + # to clean up both window related code and tkInit(slave) + set state(cleanupHook) [list tkDelete {} $w] + + } else { + + # set our delete hook (slave arg is added by interpDelete) + # to clean up tkInit(slave) + set state(cleanupHook) [list disallowTk] + + # Let's be nice and also accept tk window names instead of ids + if {[string match ".*" $use]} { + set windowName $use + set use [winfo id $windowName] + set nDisplay [winfo screen $windowName] + } else { + # Check for a better -display value + # (works only for multi screens on single host, but not + # cross hosts, for that a tk window name would be better + # but embeding is also usefull for non tk names) + if {![catch {winfo pathname $use} name]} { + set nDisplay [winfo screen $name] + } else { + # Can't have a better one + set nDisplay $display + } + } + if {$nDisplay ne $display} { + if {$displayGiven} { + error "conflicting -display $display and -use\ + $use -> $nDisplay" + } else { + set display $nDisplay + } + } + } + + # Prepares the slave for tk with those parameters + tkInterpInit $slave [list "-use" $use "-display" $display] + + load {} Tk $slave + + return $slave +} + +proc ::safe::TkInit {interpPath} { + variable tkInit + if {[info exists tkInit($interpPath)]} { + set value $tkInit($interpPath) + Log $interpPath "TkInit called, returning \"$value\"" NOTICE + return $value + } else { + Log $interpPath "TkInit called for interp with clearance:\ + preventing Tk init" ERROR + error "not allowed" + } +} + +# safe::allowTk -- +# +# Set tkInit(interpPath) to allow Tk to be initialized in +# safe::TkInit. +# +# Arguments: +# interpPath slave interpreter handle +# argv arguments passed to safe::TkInterpInit +# +# Results: +# none. + +proc ::safe::allowTk {interpPath argv} { + variable tkInit + set tkInit($interpPath) $argv + return +} + + +# safe::disallowTk -- +# +# Unset tkInit(interpPath) to disallow Tk from getting initialized +# in safe::TkInit. +# +# Arguments: +# interpPath slave interpreter handle +# +# Results: +# none. + +proc ::safe::disallowTk {interpPath} { + variable tkInit + # This can already be deleted by the DeleteHook of the interp + if {[info exists tkInit($interpPath)]} { + unset tkInit($interpPath) + } + return +} + + +# safe::tkDelete -- +# +# Clean up the window associated with the interp being deleted. +# +# Arguments: +# interpPath slave interpreter handle +# +# Results: +# none. + +proc ::safe::tkDelete {W window slave} { + + # we are going to be called for each widget... skip untill it's + # top level + + Log $slave "Called tkDelete $W $window" NOTICE + if {[::interp exists $slave]} { + if {[catch {::safe::interpDelete $slave} msg]} { + Log $slave "Deletion error : $msg" + } + } + if {[winfo exists $window]} { + Log $slave "Destroy toplevel $window" NOTICE + destroy $window + } + + # clean up tkInit(slave) + disallowTk $slave + return +} + +proc ::safe::tkTopLevel {slave display} { + variable tkSafeId + incr tkSafeId + set w ".safe$tkSafeId" + if {[catch {toplevel $w -screen $display -class SafeTk} msg]} { + return -code error "Unable to create toplevel for\ + safe slave \"$slave\" ($msg)" + } + Log $slave "New toplevel $w" NOTICE + + set msg "Untrusted Tcl applet ($slave)" + wm title $w $msg + + # Control frame (we must create a style for it) + ttk::style layout TWarningFrame {WarningFrame.border -sticky nswe} + ttk::style configure TWarningFrame -background red + + set wc $w.fc + ttk::frame $wc -relief ridge -borderwidth 4 -style TWarningFrame + + # We will destroy the interp when the window is destroyed + bindtags $wc [concat Safe$wc [bindtags $wc]] + bind Safe$wc [list ::safe::tkDelete %W $w $slave] + + ttk::label $wc.l -text $msg -anchor w + + # We want the button to be the last visible item + # (so be packed first) and at the right and not resizing horizontally + + # frame the button so it does not expand horizontally + # but still have the default background instead of red one from the parent + ttk::frame $wc.fb -borderwidth 0 + ttk::button $wc.fb.b -text "Delete" \ + -command [list ::safe::tkDelete $w $w $slave] + pack $wc.fb.b -side right -fill both + pack $wc.fb -side right -fill both -expand 1 + pack $wc.l -side left -fill both -expand 1 -ipady 2 + pack $wc -side bottom -fill x + + # Container frame + frame $w.c -container 1 + pack $w.c -fill both -expand 1 + + # return both the toplevel window name and the id to use for embedding + list $w [winfo id $w.c] +} diff --git a/inkstitch/bin/tk/scale.tcl b/inkstitch/bin/tk/scale.tcl new file mode 100644 index 0000000..b4da824 --- /dev/null +++ b/inkstitch/bin/tk/scale.tcl @@ -0,0 +1,284 @@ +# scale.tcl -- +# +# This file defines the default bindings for Tk scale widgets and provides +# procedures that help in implementing the bindings. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994-1995 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- + +# Standard Motif bindings: + +bind Scale { + if {$tk_strictMotif} { + set tk::Priv(activeBg) [%W cget -activebackground] + %W configure -activebackground [%W cget -background] + } + tk::ScaleActivate %W %x %y +} +bind Scale { + tk::ScaleActivate %W %x %y +} +bind Scale { + if {$tk_strictMotif} { + %W configure -activebackground $tk::Priv(activeBg) + } + if {[%W cget -state] eq "active"} { + %W configure -state normal + } +} +bind Scale <1> { + tk::ScaleButtonDown %W %x %y +} +bind Scale { + tk::ScaleDrag %W %x %y +} +bind Scale { } +bind Scale { } +bind Scale { + tk::CancelRepeat + tk::ScaleEndDrag %W + tk::ScaleActivate %W %x %y +} +bind Scale <2> { + tk::ScaleButton2Down %W %x %y +} +bind Scale { + tk::ScaleDrag %W %x %y +} +bind Scale { } +bind Scale { } +bind Scale { + tk::CancelRepeat + tk::ScaleEndDrag %W + tk::ScaleActivate %W %x %y +} +if {[tk windowingsystem] eq "win32"} { + # On Windows do the same with button 3, as that is the right mouse button + bind Scale <3> [bind Scale <2>] + bind Scale [bind Scale ] + bind Scale [bind Scale ] + bind Scale [bind Scale ] + bind Scale [bind Scale ] +} +bind Scale { + tk::ScaleControlPress %W %x %y +} +bind Scale { + tk::ScaleIncrement %W up little noRepeat +} +bind Scale { + tk::ScaleIncrement %W down little noRepeat +} +bind Scale { + tk::ScaleIncrement %W up little noRepeat +} +bind Scale { + tk::ScaleIncrement %W down little noRepeat +} +bind Scale { + tk::ScaleIncrement %W up big noRepeat +} +bind Scale { + tk::ScaleIncrement %W down big noRepeat +} +bind Scale { + tk::ScaleIncrement %W up big noRepeat +} +bind Scale { + tk::ScaleIncrement %W down big noRepeat +} +bind Scale { + %W set [%W cget -from] +} +bind Scale { + %W set [%W cget -to] +} + +# ::tk::ScaleActivate -- +# This procedure is invoked to check a given x-y position in the +# scale and activate the slider if the x-y position falls within +# the slider. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates. + +proc ::tk::ScaleActivate {w x y} { + if {[$w cget -state] eq "disabled"} { + return + } + if {[$w identify $x $y] eq "slider"} { + set state active + } else { + set state normal + } + if {[$w cget -state] ne $state} { + $w configure -state $state + } +} + +# ::tk::ScaleButtonDown -- +# This procedure is invoked when a button is pressed in a scale. It +# takes different actions depending on where the button was pressed. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates of button press. + +proc ::tk::ScaleButtonDown {w x y} { + variable ::tk::Priv + set Priv(dragging) 0 + set el [$w identify $x $y] + + # save the relief + set Priv($w,relief) [$w cget -sliderrelief] + + if {$el eq "trough1"} { + ScaleIncrement $w up little initial + } elseif {$el eq "trough2"} { + ScaleIncrement $w down little initial + } elseif {$el eq "slider"} { + set Priv(dragging) 1 + set Priv(initValue) [$w get] + set coords [$w coords] + set Priv(deltaX) [expr {$x - [lindex $coords 0]}] + set Priv(deltaY) [expr {$y - [lindex $coords 1]}] + switch -exact -- $Priv($w,relief) { + "raised" { $w configure -sliderrelief sunken } + "ridge" { $w configure -sliderrelief groove } + } + } +} + +# ::tk::ScaleDrag -- +# This procedure is called when the mouse is dragged with +# mouse button 1 down. If the drag started inside the slider +# (i.e. the scale is active) then the scale's value is adjusted +# to reflect the mouse's position. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates. + +proc ::tk::ScaleDrag {w x y} { + variable ::tk::Priv + if {!$Priv(dragging)} { + return + } + $w set [$w get [expr {$x-$Priv(deltaX)}] [expr {$y-$Priv(deltaY)}]] +} + +# ::tk::ScaleEndDrag -- +# This procedure is called to end an interactive drag of the +# slider. It just marks the drag as over. +# +# Arguments: +# w - The scale widget. + +proc ::tk::ScaleEndDrag {w} { + variable ::tk::Priv + set Priv(dragging) 0 + if {[info exists Priv($w,relief)]} { + $w configure -sliderrelief $Priv($w,relief) + unset Priv($w,relief) + } +} + +# ::tk::ScaleIncrement -- +# This procedure is invoked to increment the value of a scale and +# to set up auto-repeating of the action if that is desired. The +# way the value is incremented depends on the "dir" and "big" +# arguments. +# +# Arguments: +# w - The scale widget. +# dir - "up" means move value towards -from, "down" means +# move towards -to. +# big - Size of increments: "big" or "little". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +proc ::tk::ScaleIncrement {w dir big repeat} { + variable ::tk::Priv + if {![winfo exists $w]} return + if {$big eq "big"} { + set inc [$w cget -bigincrement] + if {$inc == 0} { + set inc [expr {abs([$w cget -to] - [$w cget -from])/10.0}] + } + if {$inc < [$w cget -resolution]} { + set inc [$w cget -resolution] + } + } else { + set inc [$w cget -resolution] + } + if {([$w cget -from] > [$w cget -to]) ^ ($dir eq "up")} { + set inc [expr {-$inc}] + } + $w set [expr {[$w get] + $inc}] + + if {$repeat eq "again"} { + set Priv(afterId) [after [$w cget -repeatinterval] \ + [list tk::ScaleIncrement $w $dir $big again]] + } elseif {$repeat eq "initial"} { + set delay [$w cget -repeatdelay] + if {$delay > 0} { + set Priv(afterId) [after $delay \ + [list tk::ScaleIncrement $w $dir $big again]] + } + } +} + +# ::tk::ScaleControlPress -- +# This procedure handles button presses that are made with the Control +# key down. Depending on the mouse position, it adjusts the scale +# value to one end of the range or the other. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates where the button was pressed. + +proc ::tk::ScaleControlPress {w x y} { + set el [$w identify $x $y] + if {$el eq "trough1"} { + $w set [$w cget -from] + } elseif {$el eq "trough2"} { + $w set [$w cget -to] + } +} + +# ::tk::ScaleButton2Down +# This procedure is invoked when button 2 is pressed over a scale. +# It sets the value to correspond to the mouse position and starts +# a slider drag. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScaleButton2Down {w x y} { + variable ::tk::Priv + + if {[$w cget -state] eq "disabled"} { + return + } + + $w configure -state active + $w set [$w get $x $y] + set Priv(dragging) 1 + set Priv(initValue) [$w get] + set Priv($w,relief) [$w cget -sliderrelief] + set coords "$x $y" + set Priv(deltaX) 0 + set Priv(deltaY) 0 +} diff --git a/inkstitch/bin/tk/scrlbar.tcl b/inkstitch/bin/tk/scrlbar.tcl new file mode 100644 index 0000000..4cb95bd --- /dev/null +++ b/inkstitch/bin/tk/scrlbar.tcl @@ -0,0 +1,427 @@ +# scrlbar.tcl -- +# +# This file defines the default bindings for Tk scrollbar widgets. +# It also provides procedures that help in implementing the bindings. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for scrollbars. +#------------------------------------------------------------------------- + +# Standard Motif bindings: +if {[tk windowingsystem] eq "x11"} { + +bind Scrollbar { + if {$tk_strictMotif} { + set tk::Priv(activeBg) [%W cget -activebackground] + %W configure -activebackground [%W cget -background] + } + %W activate [%W identify %x %y] +} +bind Scrollbar { + %W activate [%W identify %x %y] +} + +# The "info exists" command in the following binding handles the +# situation where a Leave event occurs for a scrollbar without the Enter +# event. This seems to happen on some systems (such as Solaris 2.4) for +# unknown reasons. + +bind Scrollbar { + if {$tk_strictMotif && [info exists tk::Priv(activeBg)]} { + %W configure -activebackground $tk::Priv(activeBg) + } + %W activate {} +} +bind Scrollbar <1> { + tk::ScrollButtonDown %W %x %y +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollButtonUp %W %x %y +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar <2> { + tk::ScrollButton2Down %W %x %y +} +bind Scrollbar { + # Do nothing, since button 1 is already down. +} +bind Scrollbar { + # Do nothing, since button 2 is already down. +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollButtonUp %W %x %y +} +bind Scrollbar { + # Do nothing: B1 release will handle it. +} +bind Scrollbar { + # Do nothing: B2 release will handle it. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + tk::ScrollTopBottom %W %x %y +} +bind Scrollbar { + tk::ScrollTopBottom %W %x %y +} + +bind Scrollbar { + tk::ScrollByUnits %W v -1 +} +bind Scrollbar { + tk::ScrollByUnits %W v 1 +} +bind Scrollbar { + tk::ScrollByPages %W v -1 +} +bind Scrollbar { + tk::ScrollByPages %W v 1 +} +bind Scrollbar { + tk::ScrollByUnits %W h -1 +} +bind Scrollbar { + tk::ScrollByUnits %W h 1 +} +bind Scrollbar { + tk::ScrollByPages %W h -1 +} +bind Scrollbar { + tk::ScrollByPages %W h 1 +} +bind Scrollbar { + tk::ScrollByPages %W hv -1 +} +bind Scrollbar { + tk::ScrollByPages %W hv 1 +} +bind Scrollbar { + tk::ScrollToPos %W 0 +} +bind Scrollbar { + tk::ScrollToPos %W 1 +} +} +if {[tk windowingsystem] eq "aqua"} { + bind Scrollbar { + tk::ScrollByUnits %W v [expr {- (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W v [expr {-10 * (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W h [expr {- (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W h [expr {-10 * (%D)}] + } +} +# tk::ScrollButtonDown -- +# This procedure is invoked when a button is pressed in a scrollbar. +# It changes the way the scrollbar is displayed and takes actions +# depending on where the mouse is. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +proc tk::ScrollButtonDown {w x y} { + variable ::tk::Priv + set Priv(relief) [$w cget -activerelief] + $w configure -activerelief sunken + set element [$w identify $x $y] + if {$element eq "slider"} { + ScrollStartDrag $w $x $y + } else { + ScrollSelect $w $element initial + } +} + +# ::tk::ScrollButtonUp -- +# This procedure is invoked when a button is released in a scrollbar. +# It cancels scans and auto-repeats that were in progress, and restores +# the way the active element is displayed. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +proc ::tk::ScrollButtonUp {w x y} { + variable ::tk::Priv + tk::CancelRepeat + if {[info exists Priv(relief)]} { + # Avoid error due to spurious release events + $w configure -activerelief $Priv(relief) + ScrollEndDrag $w $x $y + $w activate [$w identify $x $y] + } +} + +# ::tk::ScrollSelect -- +# This procedure is invoked when a button is pressed over the scrollbar. +# It invokes one of several scrolling actions depending on where in +# the scrollbar the button was pressed. +# +# Arguments: +# w - The scrollbar widget. +# element - The element of the scrollbar that was selected, such +# as "arrow1" or "trough2". Shouldn't be "slider". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +proc ::tk::ScrollSelect {w element repeat} { + variable ::tk::Priv + if {![winfo exists $w]} return + switch -- $element { + "arrow1" {ScrollByUnits $w hv -1} + "trough1" {ScrollByPages $w hv -1} + "trough2" {ScrollByPages $w hv 1} + "arrow2" {ScrollByUnits $w hv 1} + default {return} + } + if {$repeat eq "again"} { + set Priv(afterId) [after [$w cget -repeatinterval] \ + [list tk::ScrollSelect $w $element again]] + } elseif {$repeat eq "initial"} { + set delay [$w cget -repeatdelay] + if {$delay > 0} { + set Priv(afterId) [after $delay \ + [list tk::ScrollSelect $w $element again]] + } + } +} + +# ::tk::ScrollStartDrag -- +# This procedure is called to initiate a drag of the slider. It just +# remembers the starting position of the mouse and slider. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the start of the drag operation. + +proc ::tk::ScrollStartDrag {w x y} { + variable ::tk::Priv + + if {[$w cget -command] eq ""} { + return + } + set Priv(pressX) $x + set Priv(pressY) $y + set Priv(initValues) [$w get] + set iv0 [lindex $Priv(initValues) 0] + if {[llength $Priv(initValues)] == 2} { + set Priv(initPos) $iv0 + } elseif {$iv0 == 0} { + set Priv(initPos) 0.0 + } else { + set Priv(initPos) [expr {(double([lindex $Priv(initValues) 2])) \ + / [lindex $Priv(initValues) 0]}] + } +} + +# ::tk::ScrollDrag -- +# This procedure is called for each mouse motion even when the slider +# is being dragged. It notifies the associated widget if we're not +# jump scrolling, and it just updates the scrollbar if we are jump +# scrolling. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The current mouse position. + +proc ::tk::ScrollDrag {w x y} { + variable ::tk::Priv + + if {$Priv(initPos) eq ""} { + return + } + set delta [$w delta [expr {$x - $Priv(pressX)}] [expr {$y - $Priv(pressY)}]] + if {[$w cget -jump]} { + if {[llength $Priv(initValues)] == 2} { + $w set [expr {[lindex $Priv(initValues) 0] + $delta}] \ + [expr {[lindex $Priv(initValues) 1] + $delta}] + } else { + set delta [expr {round($delta * [lindex $Priv(initValues) 0])}] + eval [list $w] set [lreplace $Priv(initValues) 2 3 \ + [expr {[lindex $Priv(initValues) 2] + $delta}] \ + [expr {[lindex $Priv(initValues) 3] + $delta}]] + } + } else { + ScrollToPos $w [expr {$Priv(initPos) + $delta}] + } +} + +# ::tk::ScrollEndDrag -- +# This procedure is called to end an interactive drag of the slider. +# It scrolls the window if we're in jump mode, otherwise it does nothing. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the end of the drag operation. + +proc ::tk::ScrollEndDrag {w x y} { + variable ::tk::Priv + + if {$Priv(initPos) eq ""} { + return + } + if {[$w cget -jump]} { + set delta [$w delta [expr {$x - $Priv(pressX)}] \ + [expr {$y - $Priv(pressY)}]] + ScrollToPos $w [expr {$Priv(initPos) + $delta}] + } + set Priv(initPos) "" +} + +# ::tk::ScrollByUnits -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of units. It notifies the associated widget +# in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many units to scroll: typically 1 or -1. + +proc ::tk::ScrollByUnits {w orient amount} { + set cmd [$w cget -command] + if {$cmd eq "" || ([string first \ + [string index [$w cget -orient] 0] $orient] < 0)} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd scroll $amount units + } else { + uplevel #0 $cmd [expr {[lindex $info 2] + $amount}] + } +} + +# ::tk::ScrollByPages -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of screenfuls. It notifies the associated +# widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many screens to scroll: typically 1 or -1. + +proc ::tk::ScrollByPages {w orient amount} { + set cmd [$w cget -command] + if {$cmd eq "" || ([string first \ + [string index [$w cget -orient] 0] $orient] < 0)} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd scroll $amount pages + } else { + uplevel #0 $cmd [expr {[lindex $info 2] + $amount*([lindex $info 1] - 1)}] + } +} + +# ::tk::ScrollToPos -- +# This procedure tells the scrollbar's associated widget to scroll to +# a particular location, given by a fraction between 0 and 1. It notifies +# the associated widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# pos - A fraction between 0 and 1 indicating a desired position +# in the document. + +proc ::tk::ScrollToPos {w pos} { + set cmd [$w cget -command] + if {$cmd eq ""} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd moveto $pos + } else { + uplevel #0 $cmd [expr {round([lindex $info 0]*$pos)}] + } +} + +# ::tk::ScrollTopBottom +# Scroll to the top or bottom of the document, depending on the mouse +# position. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScrollTopBottom {w x y} { + variable ::tk::Priv + set element [$w identify $x $y] + if {[string match *1 $element]} { + ScrollToPos $w 0 + } elseif {[string match *2 $element]} { + ScrollToPos $w 1 + } + + # Set Priv(relief), since it's needed by tk::ScrollButtonUp. + + set Priv(relief) [$w cget -activerelief] +} + +# ::tk::ScrollButton2Down +# This procedure is invoked when button 2 is pressed over a scrollbar. +# If the button is over the trough or slider, it sets the scrollbar to +# the mouse position and starts a slider drag. Otherwise it just +# behaves the same as button 1. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScrollButton2Down {w x y} { + variable ::tk::Priv + set element [$w identify $x $y] + if {[string match {arrow[12]} $element]} { + ScrollButtonDown $w $x $y + return + } + ScrollToPos $w [$w fraction $x $y] + set Priv(relief) [$w cget -activerelief] + + # Need the "update idletasks" below so that the widget calls us + # back to reset the actual scrollbar position before we start the + # slider drag. + + update idletasks + $w configure -activerelief sunken + $w activate slider + ScrollStartDrag $w $x $y +} diff --git a/inkstitch/bin/tk/spinbox.tcl b/inkstitch/bin/tk/spinbox.tcl new file mode 100644 index 0000000..cb501ee --- /dev/null +++ b/inkstitch/bin/tk/spinbox.tcl @@ -0,0 +1,572 @@ +# spinbox.tcl -- +# +# This file defines the default bindings for Tk spinbox widgets and provides +# procedures that help in implementing those bindings. The spinbox builds +# off the entry widget, so it can reuse Entry bindings and procedures. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1999-2000 Jeffrey Hobbs +# Copyright (c) 2000 Ajuba Solutions +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# afterId - If non-null, it means that auto-scanning is underway +# and it gives the "after" id for the next auto-scan +# command to be executed. +# mouseMoved - Non-zero means the mouse has moved a significant +# amount since the button went down (so, for example, +# start dragging out a selection). +# pressX - X-coordinate at which the mouse button was pressed. +# selectMode - The style of selection currently underway: +# char, word, or line. +# x, y - Last known mouse coordinates for scanning +# and auto-scanning. +# data - Used for Cut and Copy +#------------------------------------------------------------------------- + +# Initialize namespace +namespace eval ::tk::spinbox {} + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- +bind Spinbox <> { + if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + %W delete sel.first sel.last + unset tk::Priv(data) + } +} +bind Spinbox <> { + if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + unset tk::Priv(data) + } +} +bind Spinbox <> { + global tcl_platform + catch { + if {[tk windowingsystem] ne "x11"} { + catch { + %W delete sel.first sel.last + } + } + %W insert insert [::tk::GetSelection %W CLIPBOARD] + ::tk::EntrySeeInsert %W + } +} +bind Spinbox <> { + %W delete sel.first sel.last +} +bind Spinbox <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + ::tk::spinbox::Paste %W %x + } +} + +bind Spinbox <> { + %W selection range 0 end + %W icursor end +} + +# Standard Motif bindings: + +bind Spinbox <1> { + ::tk::spinbox::ButtonDown %W %x %y +} +bind Spinbox { + ::tk::spinbox::Motion %W %x %y +} +bind Spinbox { + set tk::Priv(selectMode) word + ::tk::spinbox::MouseSelect %W %x sel.first +} +bind Spinbox { + set tk::Priv(selectMode) line + ::tk::spinbox::MouseSelect %W %x 0 +} +bind Spinbox { + set tk::Priv(selectMode) char + %W selection adjust @%x +} +bind Spinbox { + set tk::Priv(selectMode) word + ::tk::spinbox::MouseSelect %W %x +} +bind Spinbox { + set tk::Priv(selectMode) line + ::tk::spinbox::MouseSelect %W %x +} +bind Spinbox { + set tk::Priv(x) %x + ::tk::spinbox::AutoScan %W +} +bind Spinbox { + tk::CancelRepeat +} +bind Spinbox { + ::tk::spinbox::ButtonUp %W %x %y +} +bind Spinbox { + %W icursor @%x +} + +bind Spinbox { + %W invoke buttonup +} +bind Spinbox { + %W invoke buttondown +} + +bind Spinbox { + ::tk::EntrySetCursor %W [expr {[%W index insert] - 1}] +} +bind Spinbox { + ::tk::EntrySetCursor %W [expr {[%W index insert] + 1}] +} +bind Spinbox { + ::tk::EntryKeySelect %W [expr {[%W index insert] - 1}] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntryKeySelect %W [expr {[%W index insert] + 1}] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W [::tk::EntryPreviousWord %W insert] +} +bind Spinbox { + ::tk::EntrySetCursor %W [::tk::EntryNextWord %W insert] +} +bind Spinbox { + ::tk::EntryKeySelect %W [::tk::EntryPreviousWord %W insert] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntryKeySelect %W [::tk::EntryNextWord %W insert] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W 0 +} +bind Spinbox { + ::tk::EntryKeySelect %W 0 + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W end +} +bind Spinbox { + ::tk::EntryKeySelect %W end + ::tk::EntrySeeInsert %W +} + +bind Spinbox { + if {[%W selection present]} { + %W delete sel.first sel.last + } else { + %W delete insert + } +} +bind Spinbox { + ::tk::EntryBackspace %W +} + +bind Spinbox { + %W selection from insert +} +bind Spinbox { + %W mark set [tk::TextAnchor %W] insert +} +bind Text { + set tk::Priv(selectMode) char + tk::TextKeyExtend %W insert +} +bind Text { + set tk::Priv(selectMode) char + tk::TextKeyExtend %W insert +} +bind Text { + %W tag add sel 1.0 end +} +bind Text { + %W tag remove sel 1.0 end +} +bind Text <> { + tk_textCut %W +} +bind Text <> { + tk_textCopy %W +} +bind Text <> { + tk_textPaste %W +} +bind Text <> { + catch {%W delete sel.first sel.last} +} +bind Text <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + tk::TextPasteSelection %W %x %y + } +} +bind Text { + catch {tk::TextInsert %W [::tk::GetSelection %W PRIMARY]} +} +bind Text { + tk::TextInsert %W %A +} + +# Ignore all Alt, Meta, and Control keypresses unless explicitly bound. +# Otherwise, if a widget binding for one of these is defined, the +# class binding will also fire and insert the character, +# which is wrong. Ditto for . + +bind Text {# nothing } +bind Text {# nothing} +bind Text {# nothing} +bind Text {# nothing} +bind Text {# nothing} +if {[tk windowingsystem] eq "aqua"} { + bind Text {# nothing} +} + +# Additional emacs-like bindings: + +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W {insert display linestart} + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W insert-1displayindices + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + %W delete insert + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W {insert display lineend} + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W insert+1displayindices + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + if {[%W compare insert == {insert lineend}]} { + %W delete insert + } else { + %W delete insert {insert lineend} + } + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextUpDownLine %W 1] + } +} +bind Text { + if {!$tk_strictMotif} { + %W insert insert \n + %W mark set insert insert-1c + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextUpDownLine %W -1] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextTranspose %W + } +} + +bind Text <> { + catch { %W edit undo } +} + +bind Text <> { + catch { %W edit redo } +} + +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + %W delete insert [tk::TextNextWord %W insert] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextNextWord %W insert] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W 1.0 + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W end-1c + } +} +bind Text { + if {!$tk_strictMotif} { + %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert + } +} +bind Text { + if {!$tk_strictMotif} { + %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert + } +} + +# Macintosh only bindings: + +if {[tk windowingsystem] eq "aqua"} { +bind Text { + tk::TextSetCursor %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] +} +bind Text { + tk::TextSetCursor %W [tk::TextNextWord %W insert] +} +bind Text { + tk::TextSetCursor %W [tk::TextPrevPara %W insert] +} +bind Text { + tk::TextSetCursor %W [tk::TextNextPara %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] +} +bind Text { + tk::TextKeySelect %W [tk::TextNextWord %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextPrevPara %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextNextPara %W insert] +} +bind Text { + tk::TextScrollPages %W 1 +} + +# End of Mac only bindings +} + +# A few additional bindings of my own. + +bind Text { + if {!$tk_strictMotif && [%W compare insert != 1.0]} { + %W delete insert-1c + %W see insert + } +} +bind Text <2> { + if {!$tk_strictMotif} { + tk::TextScanMark %W %x %y + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextScanDrag %W %x %y + } +} +set ::tk::Priv(prevPos) {} + +# The MouseWheel will typically only fire on Windows and MacOS X. +# However, someone could use the "event generate" command to produce one +# on other platforms. We must be careful not to round -ve values of %D +# down to zero. + +if {[tk windowingsystem] eq "aqua"} { + bind Text { + %W yview scroll [expr {-15 * (%D)}] pixels + } + bind Text { + %W yview scroll [expr {-150 * (%D)}] pixels + } + bind Text { + %W xview scroll [expr {-15 * (%D)}] pixels + } + bind Text { + %W xview scroll [expr {-150 * (%D)}] pixels + } +} else { + # We must make sure that positive and negative movements are rounded + # equally to integers, avoiding the problem that + # (int)1/3 = 0, + # but + # (int)-1/3 = -1 + # The following code ensure equal +/- behaviour. + bind Text { + if {%D >= 0} { + %W yview scroll [expr {-%D/3}] pixels + } else { + %W yview scroll [expr {(2-%D)/3}] pixels + } + } +} + +if {"x11" eq [tk windowingsystem]} { + # Support for mousewheels on Linux/Unix commonly comes through mapping + # the wheel to the extended buttons. If you have a mousewheel, find + # Linux configuration info at: + # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ + bind Text <4> { + if {!$tk_strictMotif} { + %W yview scroll -50 pixels + } + } + bind Text <5> { + if {!$tk_strictMotif} { + %W yview scroll 50 pixels + } + } +} + +# ::tk::TextClosestGap -- +# Given x and y coordinates, this procedure finds the closest boundary +# between characters to the given coordinates and returns the index +# of the character just after the boundary. +# +# Arguments: +# w - The text window. +# x - X-coordinate within the window. +# y - Y-coordinate within the window. + +proc ::tk::TextClosestGap {w x y} { + set pos [$w index @$x,$y] + set bbox [$w bbox $pos] + if {$bbox eq ""} { + return $pos + } + if {($x - [lindex $bbox 0]) < ([lindex $bbox 2]/2)} { + return $pos + } + $w index "$pos + 1 char" +} + +# ::tk::TextButton1 -- +# This procedure is invoked to handle button-1 presses in text +# widgets. It moves the insertion cursor, sets the selection anchor, +# and claims the input focus. +# +# Arguments: +# w - The text window in which the button was pressed. +# x - The x-coordinate of the button press. +# y - The x-coordinate of the button press. + +proc ::tk::TextButton1 {w x y} { + variable ::tk::Priv + + set Priv(selectMode) char + set Priv(mouseMoved) 0 + set Priv(pressX) $x + set anchorname [tk::TextAnchor $w] + $w mark set insert [TextClosestGap $w $x $y] + $w mark set $anchorname insert + # Set the anchor mark's gravity depending on the click position + # relative to the gap + set bbox [$w bbox [$w index $anchorname]] + if {$x > [lindex $bbox 0]} { + $w mark gravity $anchorname right + } else { + $w mark gravity $anchorname left + } + # Allow focus in any case on Windows, because that will let the + # selection be displayed even for state disabled text widgets. + if {[tk windowingsystem] eq "win32" \ + || [$w cget -state] eq "normal"} { + focus $w + } + if {[$w cget -autoseparators]} { + $w edit separator + } +} + +# ::tk::TextSelectTo -- +# This procedure is invoked to extend the selection, typically when +# dragging it with the mouse. Depending on the selection mode (character, +# word, line) it selects in different-sized units. This procedure +# ignores mouse motions initially until the mouse has moved from +# one character to another or until there have been multiple clicks. +# +# Note that the 'anchor' is implemented programmatically using +# a text widget mark, and uses a name that will be unique for each +# text widget (even when there are multiple peers). Currently the +# anchor is considered private to Tk, hence the name 'tk::anchor$w'. +# +# Arguments: +# w - The text window in which the button was pressed. +# x - Mouse x position. +# y - Mouse y position. + +set ::tk::Priv(textanchoruid) 0 + +proc ::tk::TextAnchor {w} { + variable Priv + if {![info exists Priv(textanchor,$w)]} { + set Priv(textanchor,$w) tk::anchor[incr Priv(textanchoruid)] + } + return $Priv(textanchor,$w) +} + +proc ::tk::TextSelectTo {w x y {extend 0}} { + global tcl_platform + variable ::tk::Priv + + set anchorname [tk::TextAnchor $w] + set cur [TextClosestGap $w $x $y] + if {[catch {$w index $anchorname}]} { + $w mark set $anchorname $cur + } + set anchor [$w index $anchorname] + if {[$w compare $cur != $anchor] || (abs($Priv(pressX) - $x) >= 3)} { + set Priv(mouseMoved) 1 + } + switch -- $Priv(selectMode) { + char { + if {[$w compare $cur < $anchorname]} { + set first $cur + set last $anchorname + } else { + set first $anchorname + set last $cur + } + } + word { + # Set initial range based only on the anchor (1 char min width) + if {[$w mark gravity $anchorname] eq "right"} { + set first $anchorname + set last "$anchorname + 1c" + } else { + set first "$anchorname - 1c" + set last $anchorname + } + # Extend range (if necessary) based on the current point + if {[$w compare $cur < $first]} { + set first $cur + } elseif {[$w compare $cur > $last]} { + set last $cur + } + + # Now find word boundaries + set first [TextPrevPos $w "$first + 1c" tcl_wordBreakBefore] + set last [TextNextPos $w "$last - 1c" tcl_wordBreakAfter] + } + line { + # Set initial range based only on the anchor + set first "$anchorname linestart" + set last "$anchorname lineend" + + # Extend range (if necessary) based on the current point + if {[$w compare $cur < $first]} { + set first "$cur linestart" + } elseif {[$w compare $cur > $last]} { + set last "$cur lineend" + } + set first [$w index $first] + set last [$w index "$last + 1c"] + } + } + if {$Priv(mouseMoved) || ($Priv(selectMode) ne "char")} { + $w tag remove sel 0.0 end + $w mark set insert $cur + $w tag add sel $first $last + $w tag remove sel $last end + update idletasks + } +} + +# ::tk::TextKeyExtend -- +# This procedure handles extending the selection from the keyboard, +# where the point to extend to is really the boundary between two +# characters rather than a particular character. +# +# Arguments: +# w - The text window. +# index - The point to which the selection is to be extended. + +proc ::tk::TextKeyExtend {w index} { + + set anchorname [tk::TextAnchor $w] + set cur [$w index $index] + if {[catch {$w index $anchorname}]} { + $w mark set $anchorname $cur + } + set anchor [$w index $anchorname] + if {[$w compare $cur < $anchorname]} { + set first $cur + set last $anchorname + } else { + set first $anchorname + set last $cur + } + $w tag remove sel 0.0 $first + $w tag add sel $first $last + $w tag remove sel $last end +} + +# ::tk::TextPasteSelection -- +# This procedure sets the insertion cursor to the mouse position, +# inserts the selection, and sets the focus to the window. +# +# Arguments: +# w - The text window. +# x, y - Position of the mouse. + +proc ::tk::TextPasteSelection {w x y} { + $w mark set insert [TextClosestGap $w $x $y] + if {![catch {::tk::GetSelection $w PRIMARY} sel]} { + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w configure -autoseparators 0 + $w edit separator + } + $w insert insert $sel + if {$oldSeparator} { + $w edit separator + $w configure -autoseparators 1 + } + } + if {[$w cget -state] eq "normal"} { + focus $w + } +} + +# ::tk::TextAutoScan -- +# This procedure is invoked when the mouse leaves a text window +# with button 1 down. It scrolls the window up, down, left, or right, +# depending on where the mouse is (this information was saved in +# ::tk::Priv(x) and ::tk::Priv(y)), and reschedules itself as an "after" +# command so that the window continues to scroll until the mouse +# moves back into the window or the mouse button is released. +# +# Arguments: +# w - The text window. + +proc ::tk::TextAutoScan {w} { + variable ::tk::Priv + if {![winfo exists $w]} { + return + } + if {$Priv(y) >= [winfo height $w]} { + $w yview scroll [expr {1 + $Priv(y) - [winfo height $w]}] pixels + } elseif {$Priv(y) < 0} { + $w yview scroll [expr {-1 + $Priv(y)}] pixels + } elseif {$Priv(x) >= [winfo width $w]} { + $w xview scroll 2 units + } elseif {$Priv(x) < 0} { + $w xview scroll -2 units + } else { + return + } + TextSelectTo $w $Priv(x) $Priv(y) + set Priv(afterId) [after 50 [list tk::TextAutoScan $w]] +} + +# ::tk::TextSetCursor +# Move the insertion cursor to a given position in a text. Also +# clears the selection, if there is one in the text, and makes sure +# that the insertion cursor is visible. Also, don't let the insertion +# cursor appear on the dummy last line of the text. +# +# Arguments: +# w - The text window. +# pos - The desired new position for the cursor in the window. + +proc ::tk::TextSetCursor {w pos} { + if {[$w compare $pos == end]} { + set pos {end - 1 chars} + } + $w mark set insert $pos + $w tag remove sel 1.0 end + $w see insert + if {[$w cget -autoseparators]} { + $w edit separator + } +} + +# ::tk::TextKeySelect +# This procedure is invoked when stroking out selections using the +# keyboard. It moves the cursor to a new position, then extends +# the selection to that position. +# +# Arguments: +# w - The text window. +# new - A new position for the insertion cursor (the cursor hasn't +# actually been moved to this position yet). + +proc ::tk::TextKeySelect {w new} { + set anchorname [tk::TextAnchor $w] + if {[$w tag nextrange sel 1.0 end] eq ""} { + if {[$w compare $new < insert]} { + $w tag add sel $new insert + } else { + $w tag add sel insert $new + } + $w mark set $anchorname insert + } else { + if {[$w compare $new < $anchorname]} { + set first $new + set last $anchorname + } else { + set first $anchorname + set last $new + } + $w tag remove sel 1.0 $first + $w tag add sel $first $last + $w tag remove sel $last end + } + $w mark set insert $new + $w see insert + update idletasks +} + +# ::tk::TextResetAnchor -- +# Set the selection anchor to whichever end is farthest from the +# index argument. One special trick: if the selection has two or +# fewer characters, just leave the anchor where it is. In this +# case it doesn't matter which point gets chosen for the anchor, +# and for the things like Shift-Left and Shift-Right this produces +# better behavior when the cursor moves back and forth across the +# anchor. +# +# Arguments: +# w - The text widget. +# index - Position at which mouse button was pressed, which determines +# which end of selection should be used as anchor point. + +proc ::tk::TextResetAnchor {w index} { + if {[$w tag ranges sel] eq ""} { + # Don't move the anchor if there is no selection now; this + # makes the widget behave "correctly" when the user clicks + # once, then shift-clicks somewhere -- ie, the area between + # the two clicks will be selected. [Bug: 5929]. + return + } + set anchorname [tk::TextAnchor $w] + set a [$w index $index] + set b [$w index sel.first] + set c [$w index sel.last] + if {[$w compare $a < $b]} { + $w mark set $anchorname sel.last + return + } + if {[$w compare $a > $c]} { + $w mark set $anchorname sel.first + return + } + scan $a "%d.%d" lineA chA + scan $b "%d.%d" lineB chB + scan $c "%d.%d" lineC chC + if {$lineB < $lineC+2} { + set total [string length [$w get $b $c]] + if {$total <= 2} { + return + } + if {[string length [$w get $b $a]] < ($total/2)} { + $w mark set $anchorname sel.last + } else { + $w mark set $anchorname sel.first + } + return + } + if {($lineA-$lineB) < ($lineC-$lineA)} { + $w mark set $anchorname sel.last + } else { + $w mark set $anchorname sel.first + } +} + +# ::tk::TextCursorInSelection -- +# Check whether the selection exists and contains the insertion cursor. Note +# that it assumes that the selection is contiguous. +# +# Arguments: +# w - The text widget whose selection is to be checked + +proc ::tk::TextCursorInSelection {w} { + expr { + [llength [$w tag ranges sel]] + && [$w compare sel.first <= insert] + && [$w compare sel.last >= insert] + } +} + +# ::tk::TextInsert -- +# Insert a string into a text at the point of the insertion cursor. +# If there is a selection in the text, and it covers the point of the +# insertion cursor, then delete the selection before inserting. +# +# Arguments: +# w - The text window in which to insert the string +# s - The string to insert (usually just a single character) + +proc ::tk::TextInsert {w s} { + if {$s eq "" || [$w cget -state] eq "disabled"} { + return + } + set compound 0 + if {[TextCursorInSelection $w]} { + set compound [$w cget -autoseparators] + if {$compound} { + $w configure -autoseparators 0 + $w edit separator + } + $w delete sel.first sel.last + } + $w insert insert $s + $w see insert + if {$compound} { + $w edit separator + $w configure -autoseparators 1 + } +} + +# ::tk::TextUpDownLine -- +# Returns the index of the character one display line above or below the +# insertion cursor. There are two tricky things here. First, we want to +# maintain the original x position across repeated operations, even though +# some lines that will get passed through don't have enough characters to +# cover the original column. Second, don't try to scroll past the +# beginning or end of the text. +# +# Arguments: +# w - The text window in which the cursor is to move. +# n - The number of display lines to move: -1 for up one line, +# +1 for down one line. + +proc ::tk::TextUpDownLine {w n} { + variable ::tk::Priv + + set i [$w index insert] + if {$Priv(prevPos) ne $i} { + set Priv(textPosOrig) $i + } + set lines [$w count -displaylines $Priv(textPosOrig) $i] + set new [$w index \ + "$Priv(textPosOrig) + [expr {$lines + $n}] displaylines"] + if {[$w compare $new == end] \ + || [$w compare $new == "insert display linestart"]} { + set new $i + } + set Priv(prevPos) $new + return $new +} + +# ::tk::TextPrevPara -- +# Returns the index of the beginning of the paragraph just before a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# pos - Position at which to start search. + +proc ::tk::TextPrevPara {w pos} { + set pos [$w index "$pos linestart"] + while {1} { + if {([$w get "$pos - 1 line"] eq "\n" && ([$w get $pos] ne "\n")) \ + || $pos eq "1.0"} { + if {[regexp -indices -- {^[ \t]+(.)} \ + [$w get $pos "$pos lineend"] -> index]} { + set pos [$w index "$pos + [lindex $index 0] chars"] + } + if {[$w compare $pos != insert] || [lindex [split $pos .] 0]==1} { + return $pos + } + } + set pos [$w index "$pos - 1 line"] + } +} + +# ::tk::TextNextPara -- +# Returns the index of the beginning of the paragraph just after a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. + +proc ::tk::TextNextPara {w start} { + set pos [$w index "$start linestart + 1 line"] + while {[$w get $pos] ne "\n"} { + if {[$w compare $pos == end]} { + return [$w index "end - 1c"] + } + set pos [$w index "$pos + 1 line"] + } + while {[$w get $pos] eq "\n"} { + set pos [$w index "$pos + 1 line"] + if {[$w compare $pos == end]} { + return [$w index "end - 1c"] + } + } + if {[regexp -indices -- {^[ \t]+(.)} \ + [$w get $pos "$pos lineend"] -> index]} { + return [$w index "$pos + [lindex $index 0] chars"] + } + return $pos +} + +# ::tk::TextScrollPages -- +# This is a utility procedure used in bindings for moving up and down +# pages and possibly extending the selection along the way. It scrolls +# the view in the widget by the number of pages, and it returns the +# index of the character that is at the same position in the new view +# as the insertion cursor used to be in the old view. +# +# Arguments: +# w - The text window in which the cursor is to move. +# count - Number of pages forward to scroll; may be negative +# to scroll backwards. + +proc ::tk::TextScrollPages {w count} { + set bbox [$w bbox insert] + $w yview scroll $count pages + if {$bbox eq ""} { + return [$w index @[expr {[winfo height $w]/2}],0] + } + return [$w index @[lindex $bbox 0],[lindex $bbox 1]] +} + +# ::tk::TextTranspose -- +# This procedure implements the "transpose" function for text widgets. +# It tranposes the characters on either side of the insertion cursor, +# unless the cursor is at the end of the line. In this case it +# transposes the two characters to the left of the cursor. In either +# case, the cursor ends up to the right of the transposed characters. +# +# Arguments: +# w - Text window in which to transpose. + +proc ::tk::TextTranspose w { + set pos insert + if {[$w compare $pos != "$pos lineend"]} { + set pos [$w index "$pos + 1 char"] + } + set new [$w get "$pos - 1 char"][$w get "$pos - 2 char"] + if {[$w compare "$pos - 1 char" == 1.0]} { + return + } + # ensure this is seen as an atomic op to undo + set autosep [$w cget -autoseparators] + if {$autosep} { + $w configure -autoseparators 0 + $w edit separator + } + $w delete "$pos - 2 char" $pos + $w insert insert $new + $w see insert + if {$autosep} { + $w edit separator + $w configure -autoseparators $autosep + } +} + +# ::tk_textCopy -- +# This procedure copies the selection from a text widget into the +# clipboard. +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textCopy w { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + } +} + +# ::tk_textCut -- +# This procedure copies the selection from a text widget into the +# clipboard, then deletes the selection (if it exists in the given +# widget). +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textCut w { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + $w delete sel.first sel.last + } +} + +# ::tk_textPaste -- +# This procedure pastes the contents of the clipboard to the insertion +# point in a text widget. +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textPaste w { + global tcl_platform + if {![catch {::tk::GetSelection $w CLIPBOARD} sel]} { + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w configure -autoseparators 0 + $w edit separator + } + if {[tk windowingsystem] ne "x11"} { + catch { $w delete sel.first sel.last } + } + $w insert insert $sel + if {$oldSeparator} { + $w edit separator + $w configure -autoseparators 1 + } + } +} + +# ::tk::TextNextWord -- +# Returns the index of the next word position after a given position in the +# text. The next word is platform dependent and may be either the next +# end-of-word position or the next start-of-word position after the next +# end-of-word position. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. + +if {[tk windowingsystem] eq "win32"} { + proc ::tk::TextNextWord {w start} { + TextNextPos $w [TextNextPos $w $start tcl_endOfWord] \ + tcl_startOfNextWord + } +} else { + proc ::tk::TextNextWord {w start} { + TextNextPos $w $start tcl_endOfWord + } +} + +# ::tk::TextNextPos -- +# Returns the index of the next position after the given starting +# position in the text as computed by a specified function. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. +# op - Function to use to find next position. + +proc ::tk::TextNextPos {w start op} { + set text "" + set cur $start + while {[$w compare $cur < end]} { + set text $text[$w get -displaychars $cur "$cur lineend + 1c"] + set pos [$op $text 0] + if {$pos >= 0} { + return [$w index "$start + $pos display chars"] + } + set cur [$w index "$cur lineend +1c"] + } + return end +} + +# ::tk::TextPrevPos -- +# Returns the index of the previous position before the given starting +# position in the text as computed by a specified function. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. +# op - Function to use to find next position. + +proc ::tk::TextPrevPos {w start op} { + set text "" + set cur $start + while {[$w compare $cur > 0.0]} { + set text [$w get -displaychars "$cur linestart - 1c" $cur]$text + set pos [$op $text end] + if {$pos >= 0} { + return [$w index "$cur linestart - 1c + $pos display chars"] + } + set cur [$w index "$cur linestart - 1c"] + } + return 0.0 +} + +# ::tk::TextScanMark -- +# +# Marks the start of a possible scan drag operation +# +# Arguments: +# w - The text window from which the text to get +# x - x location on screen +# y - y location on screen + +proc ::tk::TextScanMark {w x y} { + variable ::tk::Priv + $w scan mark $x $y + set Priv(x) $x + set Priv(y) $y + set Priv(mouseMoved) 0 +} + +# ::tk::TextScanDrag -- +# +# Marks the start of a possible scan drag operation +# +# Arguments: +# w - The text window from which the text to get +# x - x location on screen +# y - y location on screen + +proc ::tk::TextScanDrag {w x y} { + variable ::tk::Priv + # Make sure these exist, as some weird situations can trigger the + # motion binding without the initial press. [Bug #220269] + if {![info exists Priv(x)]} { + set Priv(x) $x + } + if {![info exists Priv(y)]} { + set Priv(y) $y + } + if {($x != $Priv(x)) || ($y != $Priv(y))} { + set Priv(mouseMoved) 1 + } + if {[info exists Priv(mouseMoved)] && $Priv(mouseMoved)} { + $w scan dragto $x $y + } +} diff --git a/inkstitch/bin/tk/tk.tcl b/inkstitch/bin/tk/tk.tcl new file mode 100644 index 0000000..f432861 --- /dev/null +++ b/inkstitch/bin/tk/tk.tcl @@ -0,0 +1,592 @@ +# tk.tcl -- +# +# Initialization script normally executed in the interpreter for each Tk-based +# application. Arranges class bindings for widgets. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Ajuba Solutions. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +package require Tcl 8.5 ;# Guard against [source] in an 8.4- interp before + ;# using 8.5 [package] features. +# Insist on running with compatible version of Tcl +package require Tcl 8.5.0 +# Verify that we have Tk binary and script components from the same release +package require -exact Tk 8.5.15 + +# Create a ::tk namespace +namespace eval ::tk { + # Set up the msgcat commands + namespace eval msgcat { + namespace export mc mcmax + if {[interp issafe] || [catch {package require msgcat}]} { + # The msgcat package is not available. Supply our own minimal + # replacement. + proc mc {src args} { + return [format $src {*}$args] + } + proc mcmax {args} { + set max 0 + foreach string $args { + set len [string length $string] + if {$len>$max} { + set max $len + } + } + return $max + } + } else { + # Get the commands from the msgcat package that Tk uses. + namespace import ::msgcat::mc + namespace import ::msgcat::mcmax + ::msgcat::mcload [file join $::tk_library msgs] + } + } + namespace import ::tk::msgcat::* +} +# and a ::ttk namespace +namespace eval ::ttk { + if {$::tk_library ne ""} { + # avoid file join to work in safe interps, but this is also x-plat ok + variable library $::tk_library/ttk + } +} + +# Add Ttk & Tk's directory to the end of the auto-load search path, if it +# isn't already on the path: + +if {[info exists ::auto_path] && ($::tk_library ne "") + && ($::tk_library ni $::auto_path)} { + lappend ::auto_path $::tk_library $::ttk::library +} + +# Turn off strict Motif look and feel as a default. + +set ::tk_strictMotif 0 + +# Turn on useinputmethods (X Input Methods) by default. We catch this because +# safe interpreters may not allow the call. + +catch {tk useinputmethods 1} + +# ::tk::PlaceWindow -- +# Place a toplevel at a particular position +# Arguments: +# toplevel name of toplevel window +# ?placement? pointer ?center? ; places $w centered on the pointer +# widget widgetPath ; centers $w over widget_name +# defaults to placing toplevel in the middle of the screen +# ?anchor? center or widgetPath +# Results: +# Returns nothing +# +proc ::tk::PlaceWindow {w {place ""} {anchor ""}} { + wm withdraw $w + update idletasks + set checkBounds 1 + if {$place eq ""} { + set x [expr {([winfo screenwidth $w]-[winfo reqwidth $w])/2}] + set y [expr {([winfo screenheight $w]-[winfo reqheight $w])/2}] + set checkBounds 0 + } elseif {[string equal -length [string length $place] $place "pointer"]} { + ## place at POINTER (centered if $anchor == center) + if {[string equal -length [string length $anchor] $anchor "center"]} { + set x [expr {[winfo pointerx $w]-[winfo reqwidth $w]/2}] + set y [expr {[winfo pointery $w]-[winfo reqheight $w]/2}] + } else { + set x [winfo pointerx $w] + set y [winfo pointery $w] + } + } elseif {[string equal -length [string length $place] $place "widget"] && \ + [winfo exists $anchor] && [winfo ismapped $anchor]} { + ## center about WIDGET $anchor, widget must be mapped + set x [expr {[winfo rootx $anchor] + \ + ([winfo width $anchor]-[winfo reqwidth $w])/2}] + set y [expr {[winfo rooty $anchor] + \ + ([winfo height $anchor]-[winfo reqheight $w])/2}] + } else { + set x [expr {([winfo screenwidth $w]-[winfo reqwidth $w])/2}] + set y [expr {([winfo screenheight $w]-[winfo reqheight $w])/2}] + set checkBounds 0 + } + if {$checkBounds} { + if {$x < [winfo vrootx $w]} { + set x [winfo vrootx $w] + } elseif {$x > ([winfo vrootx $w]+[winfo vrootwidth $w]-[winfo reqwidth $w])} { + set x [expr {[winfo vrootx $w]+[winfo vrootwidth $w]-[winfo reqwidth $w]}] + } + if {$y < [winfo vrooty $w]} { + set y [winfo vrooty $w] + } elseif {$y > ([winfo vrooty $w]+[winfo vrootheight $w]-[winfo reqheight $w])} { + set y [expr {[winfo vrooty $w]+[winfo vrootheight $w]-[winfo reqheight $w]}] + } + if {[tk windowingsystem] eq "aqua"} { + # Avoid the native menu bar which sits on top of everything. + if {$y < 22} { set y 22 } + } + } + wm maxsize $w [winfo vrootwidth $w] [winfo vrootheight $w] + wm geometry $w +$x+$y + wm deiconify $w +} + +# ::tk::SetFocusGrab -- +# Swap out current focus and grab temporarily (for dialogs) +# Arguments: +# grab new window to grab +# focus window to give focus to +# Results: +# Returns nothing +# +proc ::tk::SetFocusGrab {grab {focus {}}} { + set index "$grab,$focus" + upvar ::tk::FocusGrab($index) data + + lappend data [focus] + set oldGrab [grab current $grab] + lappend data $oldGrab + if {[winfo exists $oldGrab]} { + lappend data [grab status $oldGrab] + } + # The "grab" command will fail if another application already holds the + # grab. So catch it. + catch {grab $grab} + if {[winfo exists $focus]} { + focus $focus + } +} + +# ::tk::RestoreFocusGrab -- +# Restore old focus and grab (for dialogs) +# Arguments: +# grab window that had taken grab +# focus window that had taken focus +# destroy destroy|withdraw - how to handle the old grabbed window +# Results: +# Returns nothing +# +proc ::tk::RestoreFocusGrab {grab focus {destroy destroy}} { + set index "$grab,$focus" + if {[info exists ::tk::FocusGrab($index)]} { + foreach {oldFocus oldGrab oldStatus} $::tk::FocusGrab($index) { break } + unset ::tk::FocusGrab($index) + } else { + set oldGrab "" + } + + catch {focus $oldFocus} + grab release $grab + if {$destroy eq "withdraw"} { + wm withdraw $grab + } else { + destroy $grab + } + if {[winfo exists $oldGrab] && [winfo ismapped $oldGrab]} { + if {$oldStatus eq "global"} { + grab -global $oldGrab + } else { + grab $oldGrab + } + } +} + +# ::tk::GetSelection -- +# This tries to obtain the default selection. On Unix, we first try and get +# a UTF8_STRING, a type supported by modern Unix apps for passing Unicode +# data safely. We fall back on the default STRING type otherwise. On +# Windows, only the STRING type is necessary. +# Arguments: +# w The widget for which the selection will be retrieved. +# Important for the -displayof property. +# sel The source of the selection (PRIMARY or CLIPBOARD) +# Results: +# Returns the selection, or an error if none could be found +# +if {[tk windowingsystem] ne "win32"} { + proc ::tk::GetSelection {w {sel PRIMARY}} { + if {[catch {selection get -displayof $w -selection $sel \ + -type UTF8_STRING} txt] \ + && [catch {selection get -displayof $w -selection $sel} txt]} { + return -code error "could not find default selection" + } else { + return $txt + } + } +} else { + proc ::tk::GetSelection {w {sel PRIMARY}} { + if {[catch {selection get -displayof $w -selection $sel} txt]} { + return -code error "could not find default selection" + } else { + return $txt + } + } +} + +# ::tk::ScreenChanged -- +# This procedure is invoked by the binding mechanism whenever the "current" +# screen is changing. The procedure does two things. First, it uses "upvar" +# to make variable "::tk::Priv" point at an array variable that holds state +# for the current display. Second, it initializes the array if it didn't +# already exist. +# +# Arguments: +# screen - The name of the new screen. + +proc ::tk::ScreenChanged {screen} { + set x [string last . $screen] + if {$x > 0} { + set disp [string range $screen 0 [expr {$x - 1}]] + } else { + set disp $screen + } + + # Ensure that namespace separators never occur in the display name (as + # they cause problems in variable names). Double-colons exist in some VNC + # display names. [Bug 2912473] + set disp [string map {:: _doublecolon_} $disp] + + uplevel #0 [list upvar #0 ::tk::Priv.$disp ::tk::Priv] + variable ::tk::Priv + global tcl_platform + + if {[info exists Priv]} { + set Priv(screen) $screen + return + } + array set Priv { + activeMenu {} + activeItem {} + afterId {} + buttons 0 + buttonWindow {} + dragging 0 + focus {} + grab {} + initPos {} + inMenubutton {} + listboxPrev {} + menuBar {} + mouseMoved 0 + oldGrab {} + popup {} + postedMb {} + pressX 0 + pressY 0 + prevPos 0 + selectMode char + } + set Priv(screen) $screen + set Priv(tearoff) [string equal [tk windowingsystem] "x11"] + set Priv(window) {} +} + +# Do initial setup for Priv, so that it is always bound to something +# (otherwise, if someone references it, it may get set to a non-upvar-ed +# value, which will cause trouble later). + +tk::ScreenChanged [winfo screen .] + +# ::tk::EventMotifBindings -- +# This procedure is invoked as a trace whenever ::tk_strictMotif is changed. +# It is used to turn on or turn off the motif virtual bindings. +# +# Arguments: +# n1 - the name of the variable being changed ("::tk_strictMotif"). + +proc ::tk::EventMotifBindings {n1 dummy dummy} { + upvar $n1 name + + if {$name} { + set op delete + } else { + set op add + } + + event $op <> + event $op <> + event $op <> + event $op <> +} + +#---------------------------------------------------------------------- +# Define common dialogs on platforms where they are not implemented using +# compiled code. +#---------------------------------------------------------------------- + +if {![llength [info commands tk_chooseColor]]} { + proc ::tk_chooseColor {args} { + return [tk::dialog::color:: {*}$args] + } +} +if {![llength [info commands tk_getOpenFile]]} { + proc ::tk_getOpenFile {args} { + if {$::tk_strictMotif} { + return [tk::MotifFDialog open {*}$args] + } else { + return [::tk::dialog::file:: open {*}$args] + } + } +} +if {![llength [info commands tk_getSaveFile]]} { + proc ::tk_getSaveFile {args} { + if {$::tk_strictMotif} { + return [tk::MotifFDialog save {*}$args] + } else { + return [::tk::dialog::file:: save {*}$args] + } + } +} +if {![llength [info commands tk_messageBox]]} { + proc ::tk_messageBox {args} { + return [tk::MessageBox {*}$args] + } +} +if {![llength [info command tk_chooseDirectory]]} { + proc ::tk_chooseDirectory {args} { + return [::tk::dialog::file::chooseDir:: {*}$args] + } +} + +#---------------------------------------------------------------------- +# Define the set of common virtual events. +#---------------------------------------------------------------------- + +switch -exact -- [tk windowingsystem] { + "x11" { + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + # Some OS's define a goofy (as in, not ) keysym that is + # returned when the user presses . In order for tab + # traversal to work, we have to add these keysyms to the PrevWindow + # event. We use catch just in case the keysym isn't recognized. This + # is needed for XFree86 systems + catch { event add <> } + # This seems to be correct on *some* HP systems. + catch { event add <> } + + trace add variable ::tk_strictMotif write ::tk::EventMotifBindings + set ::tk_strictMotif $::tk_strictMotif + # On unix, we want to always display entry/text selection, regardless + # of which window has focus + set ::tk::AlwaysShowSelection 1 + } + "win32" { + event add <> \ + + event add <> \ + + event add <> \ + + event add <> + event add <> + event add <> + } + "aqua" { + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + } +} + +# ---------------------------------------------------------------------- +# Read in files that define all of the class bindings. +# ---------------------------------------------------------------------- + +if {$::tk_library ne ""} { + proc ::tk::SourceLibFile {file} { + namespace eval :: [list source [file join $::tk_library $file.tcl]] + } + namespace eval ::tk { + SourceLibFile button + SourceLibFile entry + SourceLibFile listbox + SourceLibFile menu + SourceLibFile panedwindow + SourceLibFile scale + SourceLibFile scrlbar + SourceLibFile spinbox + SourceLibFile text + } +} + +# ---------------------------------------------------------------------- +# Default bindings for keyboard traversal. +# ---------------------------------------------------------------------- + +event add <> +bind all {tk::TabToWindow [tk_focusNext %W]} +bind all <> {tk::TabToWindow [tk_focusPrev %W]} + +# ::tk::CancelRepeat -- +# This procedure is invoked to cancel an auto-repeat action described by +# ::tk::Priv(afterId). It's used by several widgets to auto-scroll the widget +# when the mouse is dragged out of the widget with a button pressed. +# +# Arguments: +# None. + +proc ::tk::CancelRepeat {} { + variable ::tk::Priv + after cancel $Priv(afterId) + set Priv(afterId) {} +} + +# ::tk::TabToWindow -- +# This procedure moves the focus to the given widget. +# It sends a <> virtual event to the previous focus window, if +# any, before changing the focus, and a <> event to the new focus +# window afterwards. +# +# Arguments: +# w - Window to which focus should be set. + +proc ::tk::TabToWindow {w} { + set focus [focus] + if {$focus ne ""} { + event generate $focus <> + } + focus $w + event generate $w <> +} + +# ::tk::UnderlineAmpersand -- +# This procedure takes some text with ampersand and returns text w/o ampersand +# and position of the ampersand. Double ampersands are converted to single +# ones. Position returned is -1 when there is no ampersand. +# +proc ::tk::UnderlineAmpersand {text} { + set s [string map {&& & & \ufeff} $text] + set idx [string first \ufeff $s] + return [list [string map {\ufeff {}} $s] $idx] +} + +# ::tk::SetAmpText -- +# Given widget path and text with "magic ampersands", sets -text and +# -underline options for the widget +# +proc ::tk::SetAmpText {widget text} { + lassign [UnderlineAmpersand $text] newtext under + $widget configure -text $newtext -underline $under +} + +# ::tk::AmpWidget -- +# Creates new widget, turning -text option into -text and -underline options, +# returned by ::tk::UnderlineAmpersand. +# +proc ::tk::AmpWidget {class path args} { + set options {} + foreach {opt val} $args { + if {$opt eq "-text"} { + lassign [UnderlineAmpersand $val] newtext under + lappend options -text $newtext -underline $under + } else { + lappend options $opt $val + } + } + set result [$class $path {*}$options] + if {[string match "*button" $class]} { + bind $path <> [list $path invoke] + } + return $result +} + +# ::tk::AmpMenuArgs -- +# Processes arguments for a menu entry, turning -label option into -label and +# -underline options, returned by ::tk::UnderlineAmpersand. +# +proc ::tk::AmpMenuArgs {widget add type args} { + set options {} + foreach {opt val} $args { + if {$opt eq "-label"} { + lassign [UnderlineAmpersand $val] newlabel under + lappend options -label $newlabel -underline $under + } else { + lappend options $opt $val + } + } + $widget add $type {*}$options +} + +# ::tk::FindAltKeyTarget -- +# Search recursively through the hierarchy of visible widgets to find button +# or label which has $char as underlined character +# +proc ::tk::FindAltKeyTarget {path char} { + switch -- [winfo class $path] { + Button - Label - + TButton - TLabel - TCheckbutton { + if {[string equal -nocase $char \ + [string index [$path cget -text] [$path cget -underline]]]} { + return $path + } else { + return {} + } + } + default { + foreach child [concat [grid slaves $path] \ + [pack slaves $path] [place slaves $path]] { + set target [FindAltKeyTarget $child $char] + if {$target ne ""} { + return $target + } + } + } + } + return {} +} + +# ::tk::AltKeyInDialog -- +# event handler for standard dialogs. Sends <> to +# button or label which has appropriate underlined character +# +proc ::tk::AltKeyInDialog {path key} { + set target [FindAltKeyTarget $path $key] + if { $target eq ""} return + event generate $target <> +} + +# ::tk::mcmaxamp -- +# Replacement for mcmax, used for texts with "magic ampersand" in it. +# + +proc ::tk::mcmaxamp {args} { + set maxlen 0 + foreach arg $args { + # Should we run [mc] in caller's namespace? + lassign [UnderlineAmpersand [mc $arg]] msg + set length [string length $msg] + if {$length > $maxlen} { + set maxlen $length + } + } + return $maxlen +} + +# For now, turn off the custom mdef proc for the mac: + +if {[tk windowingsystem] eq "aqua"} { + namespace eval ::tk::mac { + variable useCustomMDEF 0 + } +} + +# Run the Ttk themed widget set initialization +if {$::ttk::library ne ""} { + uplevel \#0 [list source [file join $::ttk::library ttk.tcl]] +} + +# Local Variables: +# mode: tcl +# fill-column: 78 +# End: diff --git a/inkstitch/bin/tk/tkfbox.tcl b/inkstitch/bin/tk/tkfbox.tcl new file mode 100644 index 0000000..e145805 --- /dev/null +++ b/inkstitch/bin/tk/tkfbox.tcl @@ -0,0 +1,1960 @@ +# tkfbox.tcl -- +# +# Implements the "TK" standard file selection dialog box. This +# dialog box is used on the Unix platforms whenever the tk_strictMotif +# flag is not set. +# +# The "TK" standard file selection dialog box is similar to the +# file selection dialog box on Win95(TM). The user can navigate +# the directories by clicking on the folder icons or by +# selecting the "Directory" option menu. The user can select +# files by clicking on the file icons or by entering a filename +# in the "Filename:" entry. +# +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +package require Ttk + +#---------------------------------------------------------------------- +# +# I C O N L I S T +# +# This is a pseudo-widget that implements the icon list inside the +# ::tk::dialog::file:: dialog box. +# +#---------------------------------------------------------------------- + +# ::tk::IconList -- +# +# Creates an IconList widget. +# +proc ::tk::IconList {w args} { + IconList_Config $w $args + IconList_Create $w +} + +proc ::tk::IconList_Index {w i} { + upvar #0 ::tk::$w data ::tk::$w:itemList itemList + if {![info exists data(list)]} { + set data(list) {} + } + switch -regexp -- $i { + "^-?[0-9]+$" { + if {$i < 0} { + set i 0 + } + if {$i >= [llength $data(list)]} { + set i [expr {[llength $data(list)] - 1}] + } + return $i + } + "^active$" { + return $data(index,active) + } + "^anchor$" { + return $data(index,anchor) + } + "^end$" { + return [llength $data(list)] + } + "@-?[0-9]+,-?[0-9]+" { + foreach {x y} [scan $i "@%d,%d"] { + break + } + set item [$data(canvas) find closest \ + [$data(canvas) canvasx $x] [$data(canvas) canvasy $y]] + return [lindex [$data(canvas) itemcget $item -tags] 1] + } + } +} + +proc ::tk::IconList_Selection {w op args} { + upvar ::tk::$w data + switch -exact -- $op { + "anchor" { + if {[llength $args] == 1} { + set data(index,anchor) [tk::IconList_Index $w [lindex $args 0]] + } else { + return $data(index,anchor) + } + } + "clear" { + if {[llength $args] == 2} { + foreach {first last} $args { + break + } + } elseif {[llength $args] == 1} { + set first [set last [lindex $args 0]] + } else { + error "wrong # args: should be [lindex [info level 0] 0] path\ + clear first ?last?" + } + set first [IconList_Index $w $first] + set last [IconList_Index $w $last] + if {$first > $last} { + set tmp $first + set first $last + set last $tmp + } + set ind 0 + foreach item $data(selection) { + if { $item >= $first } { + set first $ind + break + } + incr ind + } + set ind [expr {[llength $data(selection)] - 1}] + for {} {$ind >= 0} {incr ind -1} { + set item [lindex $data(selection) $ind] + if { $item <= $last } { + set last $ind + break + } + } + + if { $first > $last } { + return + } + set data(selection) [lreplace $data(selection) $first $last] + event generate $w <> + IconList_DrawSelection $w + } + "includes" { + set index [lsearch -exact $data(selection) [lindex $args 0]] + return [expr {$index != -1}] + } + "set" { + if { [llength $args] == 2 } { + foreach {first last} $args { + break + } + } elseif { [llength $args] == 1 } { + set last [set first [lindex $args 0]] + } else { + error "wrong # args: should be [lindex [info level 0] 0] path\ + set first ?last?" + } + + set first [IconList_Index $w $first] + set last [IconList_Index $w $last] + if { $first > $last } { + set tmp $first + set first $last + set last $tmp + } + for {set i $first} {$i <= $last} {incr i} { + lappend data(selection) $i + } + set data(selection) [lsort -integer -unique $data(selection)] + event generate $w <> + IconList_DrawSelection $w + } + } +} + +proc ::tk::IconList_CurSelection {w} { + upvar ::tk::$w data + return $data(selection) +} + +proc ::tk::IconList_DrawSelection {w} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + $data(canvas) delete selection + $data(canvas) itemconfigure selectionText -fill black + $data(canvas) dtag selectionText + set cbg [ttk::style lookup TEntry -selectbackground focus] + set cfg [ttk::style lookup TEntry -selectforeground focus] + foreach item $data(selection) { + set rTag [lindex [lindex $data(list) $item] 2] + foreach {iTag tTag text serial} $itemList($rTag) { + break + } + + set bbox [$data(canvas) bbox $tTag] + $data(canvas) create rect $bbox -fill $cbg -outline $cbg \ + -tags selection + $data(canvas) itemconfigure $tTag -fill $cfg -tags selectionText + } + $data(canvas) lower selection + return +} + +proc ::tk::IconList_Get {w item} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + set rTag [lindex [lindex $data(list) $item] 2] + foreach {iTag tTag text serial} $itemList($rTag) { + break + } + return $text +} + +# ::tk::IconList_Config -- +# +# Configure the widget variables of IconList, according to the command +# line arguments. +# +proc ::tk::IconList_Config {w argList} { + + # 1: the configuration specs + # + set specs { + {-command "" "" ""} + {-multiple "" "" "0"} + } + + # 2: parse the arguments + # + tclParseConfigSpec ::tk::$w $specs "" $argList +} + +# ::tk::IconList_Create -- +# +# Creates an IconList widget by assembling a canvas widget and a +# scrollbar widget. Sets all the bindings necessary for the IconList's +# operations. +# +proc ::tk::IconList_Create {w} { + upvar ::tk::$w data + + ttk::frame $w + ttk::entry $w.cHull -takefocus 0 -cursor {} + set data(sbar) [ttk::scrollbar $w.cHull.sbar -orient horizontal -takefocus 0] + catch {$data(sbar) configure -highlightthickness 0} + set data(canvas) [canvas $w.cHull.canvas -highlightthick 0 \ + -width 400 -height 120 -takefocus 1 -background white] + pack $data(sbar) -side bottom -fill x -padx 2 -in $w.cHull -pady {0 2} + pack $data(canvas) -expand yes -fill both -padx 2 -pady {2 0} + pack $w.cHull -expand yes -fill both -ipadx 2 -ipady 2 + + $data(sbar) configure -command [list $data(canvas) xview] + $data(canvas) configure -xscrollcommand [list $data(sbar) set] + + # Initializes the max icon/text width and height and other variables + # + set data(maxIW) 1 + set data(maxIH) 1 + set data(maxTW) 1 + set data(maxTH) 1 + set data(numItems) 0 + set data(noScroll) 1 + set data(selection) {} + set data(index,anchor) "" + set fg [option get $data(canvas) foreground Foreground] + if {$fg eq ""} { + set data(fill) black + } else { + set data(fill) $fg + } + + # Creates the event bindings. + # + bind $data(canvas) [list tk::IconList_Arrange $w] + + bind $data(canvas) <1> [list tk::IconList_Btn1 $w %x %y] + bind $data(canvas) [list tk::IconList_Motion1 $w %x %y] + bind $data(canvas) [list tk::IconList_Leave1 $w %x %y] + bind $data(canvas) [list tk::IconList_CtrlBtn1 $w %x %y] + bind $data(canvas) [list tk::IconList_ShiftBtn1 $w %x %y] + bind $data(canvas) [list tk::CancelRepeat] + bind $data(canvas) [list tk::CancelRepeat] + bind $data(canvas) \ + [list tk::IconList_Double1 $w %x %y] + + bind $data(canvas) {;} + bind $data(canvas) \ + [list tk::IconList_ShiftMotion1 $w %x %y] + + bind $data(canvas) [list tk::IconList_UpDown $w -1] + bind $data(canvas) [list tk::IconList_UpDown $w 1] + bind $data(canvas) [list tk::IconList_LeftRight $w -1] + bind $data(canvas) [list tk::IconList_LeftRight $w 1] + bind $data(canvas) [list tk::IconList_ReturnKey $w] + bind $data(canvas) [list tk::IconList_KeyPress $w %A] + bind $data(canvas) ";" + bind $data(canvas) ";" + + bind $data(canvas) [list tk::IconList_FocusIn $w] + bind $data(canvas) [list tk::IconList_FocusOut $w] + + return $w +} + +# ::tk::IconList_AutoScan -- +# +# This procedure is invoked when the mouse leaves an entry window +# with button 1 down. It scrolls the window up, down, left, or +# right, depending on where the mouse left the window, and reschedules +# itself as an "after" command so that the window continues to scroll until +# the mouse moves back into the window or the mouse button is released. +# +# Arguments: +# w - The IconList window. +# +proc ::tk::IconList_AutoScan {w} { + upvar ::tk::$w data + variable ::tk::Priv + + if {![winfo exists $w]} return + set x $Priv(x) + set y $Priv(y) + + if {$data(noScroll)} { + return + } + if {$x >= [winfo width $data(canvas)]} { + $data(canvas) xview scroll 1 units + } elseif {$x < 0} { + $data(canvas) xview scroll -1 units + } elseif {$y >= [winfo height $data(canvas)]} { + # do nothing + } elseif {$y < 0} { + # do nothing + } else { + return + } + + IconList_Motion1 $w $x $y + set Priv(afterId) [after 50 [list tk::IconList_AutoScan $w]] +} + +# Deletes all the items inside the canvas subwidget and reset the IconList's +# state. +# +proc ::tk::IconList_DeleteAll {w} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + $data(canvas) delete all + unset -nocomplain data(selected) data(rect) data(list) itemList + set data(maxIW) 1 + set data(maxIH) 1 + set data(maxTW) 1 + set data(maxTH) 1 + set data(numItems) 0 + set data(noScroll) 1 + set data(selection) {} + set data(index,anchor) "" + $data(sbar) set 0.0 1.0 + $data(canvas) xview moveto 0 +} + +# Adds an icon into the IconList with the designated image and text +# +proc ::tk::IconList_Add {w image items} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + upvar ::tk::$w:textList textList + + foreach text $items { + set iTag [$data(canvas) create image 0 0 -image $image -anchor nw \ + -tags [list icon $data(numItems) item$data(numItems)]] + set tTag [$data(canvas) create text 0 0 -text $text -anchor nw \ + -font $data(font) -fill $data(fill) \ + -tags [list text $data(numItems) item$data(numItems)]] + set rTag [$data(canvas) create rect 0 0 0 0 -fill "" -outline "" \ + -tags [list rect $data(numItems) item$data(numItems)]] + + foreach {x1 y1 x2 y2} [$data(canvas) bbox $iTag] { + break + } + set iW [expr {$x2 - $x1}] + set iH [expr {$y2 - $y1}] + if {$data(maxIW) < $iW} { + set data(maxIW) $iW + } + if {$data(maxIH) < $iH} { + set data(maxIH) $iH + } + + foreach {x1 y1 x2 y2} [$data(canvas) bbox $tTag] { + break + } + set tW [expr {$x2 - $x1}] + set tH [expr {$y2 - $y1}] + if {$data(maxTW) < $tW} { + set data(maxTW) $tW + } + if {$data(maxTH) < $tH} { + set data(maxTH) $tH + } + + lappend data(list) [list $iTag $tTag $rTag $iW $iH $tW \ + $tH $data(numItems)] + set itemList($rTag) [list $iTag $tTag $text $data(numItems)] + set textList($data(numItems)) [string tolower $text] + incr data(numItems) + } +} + +# Places the icons in a column-major arrangement. +# +proc ::tk::IconList_Arrange {w} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + if {[info exists data(canvas)] && [winfo exists $data(canvas)]} { + set data(noScroll) 1 + $data(sbar) configure -command "" + } + return + } + + set W [winfo width $data(canvas)] + set H [winfo height $data(canvas)] + set pad [expr {[$data(canvas) cget -highlightthickness] + \ + [$data(canvas) cget -bd]}] + if {$pad < 2} { + set pad 2 + } + + incr W -[expr {$pad*2}] + incr H -[expr {$pad*2}] + + set dx [expr {$data(maxIW) + $data(maxTW) + 8}] + if {$data(maxTH) > $data(maxIH)} { + set dy $data(maxTH) + } else { + set dy $data(maxIH) + } + incr dy 2 + set shift [expr {$data(maxIW) + 4}] + + set x [expr {$pad * 2}] + set y [expr {$pad * 1}] ; # Why * 1 ? + set usedColumn 0 + foreach sublist $data(list) { + set usedColumn 1 + foreach {iTag tTag rTag iW iH tW tH} $sublist { + break + } + + set i_dy [expr {($dy - $iH)/2}] + set t_dy [expr {($dy - $tH)/2}] + + $data(canvas) coords $iTag $x [expr {$y + $i_dy}] + $data(canvas) coords $tTag [expr {$x + $shift}] [expr {$y + $t_dy}] + $data(canvas) coords $rTag $x $y [expr {$x+$dx}] [expr {$y+$dy}] + + incr y $dy + if {($y + $dy) > $H} { + set y [expr {$pad * 1}] ; # *1 ? + incr x $dx + set usedColumn 0 + } + } + + if {$usedColumn} { + set sW [expr {$x + $dx}] + } else { + set sW $x + } + + if {$sW < $W} { + $data(canvas) configure -scrollregion [list $pad $pad $sW $H] + $data(sbar) configure -command "" + $data(canvas) xview moveto 0 + set data(noScroll) 1 + } else { + $data(canvas) configure -scrollregion [list $pad $pad $sW $H] + $data(sbar) configure -command [list $data(canvas) xview] + set data(noScroll) 0 + } + + set data(itemsPerColumn) [expr {($H-$pad)/$dy}] + if {$data(itemsPerColumn) < 1} { + set data(itemsPerColumn) 1 + } + + IconList_DrawSelection $w +} + +# Gets called when the user invokes the IconList (usually by double-clicking +# or pressing the Return key). +# +proc ::tk::IconList_Invoke {w} { + upvar ::tk::$w data + + if {$data(-command) ne "" && [llength $data(selection)]} { + uplevel #0 $data(-command) + } +} + +# ::tk::IconList_See -- +# +# If the item is not (completely) visible, scroll the canvas so that +# it becomes visible. +proc ::tk::IconList_See {w rTag} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + if {$data(noScroll)} { + return + } + set sRegion [$data(canvas) cget -scrollregion] + if {$sRegion eq ""} { + return + } + + if { $rTag < 0 || $rTag >= [llength $data(list)] } { + return + } + + set bbox [$data(canvas) bbox item$rTag] + set pad [expr {[$data(canvas) cget -highlightthickness] + \ + [$data(canvas) cget -bd]}] + + set x1 [lindex $bbox 0] + set x2 [lindex $bbox 2] + incr x1 -[expr {$pad * 2}] + incr x2 -[expr {$pad * 1}] ; # *1 ? + + set cW [expr {[winfo width $data(canvas)] - $pad*2}] + + set scrollW [expr {[lindex $sRegion 2]-[lindex $sRegion 0]+1}] + set dispX [expr {int([lindex [$data(canvas) xview] 0]*$scrollW)}] + set oldDispX $dispX + + # check if out of the right edge + # + if {($x2 - $dispX) >= $cW} { + set dispX [expr {$x2 - $cW}] + } + # check if out of the left edge + # + if {($x1 - $dispX) < 0} { + set dispX $x1 + } + + if {$oldDispX ne $dispX} { + set fraction [expr {double($dispX)/double($scrollW)}] + $data(canvas) xview moveto $fraction + } +} + +proc ::tk::IconList_Btn1 {w x y} { + upvar ::tk::$w data + + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i +} + +proc ::tk::IconList_CtrlBtn1 {w x y} { + upvar ::tk::$w data + + if { $data(-multiple) } { + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + if { [IconList_Selection $w includes $i] } { + IconList_Selection $w clear $i + } else { + IconList_Selection $w set $i + IconList_Selection $w anchor $i + } + } +} + +proc ::tk::IconList_ShiftBtn1 {w x y} { + upvar ::tk::$w data + + if { $data(-multiple) } { + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + if {[IconList_Index $w anchor] eq ""} { + IconList_Selection $w anchor $i + } + IconList_Selection $w clear 0 end + IconList_Selection $w set anchor $i + } +} + +# Gets called on button-1 motions +# +proc ::tk::IconList_Motion1 {w x y} { + variable ::tk::Priv + set Priv(x) $x + set Priv(y) $y + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i +} + +proc ::tk::IconList_ShiftMotion1 {w x y} { + upvar ::tk::$w data + variable ::tk::Priv + set Priv(x) $x + set Priv(y) $y + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set anchor $i +} + +proc ::tk::IconList_Double1 {w x y} { + upvar ::tk::$w data + + if {[llength $data(selection)]} { + IconList_Invoke $w + } +} + +proc ::tk::IconList_ReturnKey {w} { + IconList_Invoke $w +} + +proc ::tk::IconList_Leave1 {w x y} { + variable ::tk::Priv + + set Priv(x) $x + set Priv(y) $y + IconList_AutoScan $w +} + +proc ::tk::IconList_FocusIn {w} { + upvar ::tk::$w data + + $w.cHull state focus + if {![info exists data(list)]} { + return + } + + if {[llength $data(selection)]} { + IconList_DrawSelection $w + } +} + +proc ::tk::IconList_FocusOut {w} { + $w.cHull state !focus + IconList_Selection $w clear 0 end +} + +# ::tk::IconList_UpDown -- +# +# Moves the active element up or down by one element +# +# Arguments: +# w - The IconList widget. +# amount - +1 to move down one item, -1 to move back one item. +# +proc ::tk::IconList_UpDown {w amount} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + return + } + + set curr [tk::IconList_CurSelection $w] + if { [llength $curr] == 0 } { + set i 0 + } else { + set i [tk::IconList_Index $w anchor] + if {$i eq ""} { + return + } + incr i $amount + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i + IconList_See $w $i +} + +# ::tk::IconList_LeftRight -- +# +# Moves the active element left or right by one column +# +# Arguments: +# w - The IconList widget. +# amount - +1 to move right one column, -1 to move left one column. +# +proc ::tk::IconList_LeftRight {w amount} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + return + } + + set curr [IconList_CurSelection $w] + if { [llength $curr] == 0 } { + set i 0 + } else { + set i [IconList_Index $w anchor] + if {$i eq ""} { + return + } + incr i [expr {$amount*$data(itemsPerColumn)}] + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i + IconList_See $w $i +} + +#---------------------------------------------------------------------- +# Accelerator key bindings +#---------------------------------------------------------------------- + +# ::tk::IconList_KeyPress -- +# +# Gets called when user enters an arbitrary key in the listbox. +# +proc ::tk::IconList_KeyPress {w key} { + variable ::tk::Priv + + append Priv(ILAccel,$w) $key + IconList_Goto $w $Priv(ILAccel,$w) + catch { + after cancel $Priv(ILAccel,$w,afterId) + } + set Priv(ILAccel,$w,afterId) [after 500 [list tk::IconList_Reset $w]] +} + +proc ::tk::IconList_Goto {w text} { + upvar ::tk::$w data + upvar ::tk::$w:textList textList + + if {![info exists data(list)]} { + return + } + + if {$text eq "" || $data(numItems) == 0} { + return + } + + if {[llength [IconList_CurSelection $w]]} { + set start [IconList_Index $w anchor] + } else { + set start 0 + } + + set theIndex -1 + set less 0 + set len [string length $text] + set len0 [expr {$len-1}] + set i $start + + # Search forward until we find a filename whose prefix is a + # case-insensitive match with $text + while {1} { + if {[string equal -nocase -length $len0 $textList($i) $text]} { + set theIndex $i + break + } + incr i + if {$i == $data(numItems)} { + set i 0 + } + if {$i == $start} { + break + } + } + + if {$theIndex > -1} { + IconList_Selection $w clear 0 end + IconList_Selection $w set $theIndex + IconList_Selection $w anchor $theIndex + IconList_See $w $theIndex + } +} + +proc ::tk::IconList_Reset {w} { + variable ::tk::Priv + + unset -nocomplain Priv(ILAccel,$w) +} + +#---------------------------------------------------------------------- +# +# F I L E D I A L O G +# +#---------------------------------------------------------------------- + +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file { + namespace import -force ::tk::msgcat::* + set ::tk::dialog::file::showHiddenBtn 0 + set ::tk::dialog::file::showHiddenVar 1 +} + +# ::tk::dialog::file:: -- +# +# Implements the TK file selection dialog. This dialog is used when +# the tk_strictMotif flag is set to false. This procedure shouldn't +# be called directly. Call tk_getOpenFile or tk_getSaveFile instead. +# +# Arguments: +# type "open" or "save" +# args Options parsed by the procedure. +# + +proc ::tk::dialog::file:: {type args} { + variable ::tk::Priv + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + + Config $dataName $type $args + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + Create $w TkFDialog + } elseif {[winfo class $w] ne "TkFDialog"} { + destroy $w + Create $w TkFDialog + } else { + set data(dirMenuBtn) $w.contents.f1.menu + set data(dirMenu) $w.contents.f1.menu.menu + set data(upBtn) $w.contents.f1.up + set data(icons) $w.contents.icons + set data(ent) $w.contents.f2.ent + set data(typeMenuLab) $w.contents.f2.lab2 + set data(typeMenuBtn) $w.contents.f2.menu + set data(typeMenu) $data(typeMenuBtn).m + set data(okBtn) $w.contents.f2.ok + set data(cancelBtn) $w.contents.f2.cancel + set data(hiddenBtn) $w.contents.f2.hidden + SetSelectMode $w $data(-multiple) + } + if {$::tk::dialog::file::showHiddenBtn} { + $data(hiddenBtn) configure -state normal + grid $data(hiddenBtn) + } else { + $data(hiddenBtn) configure -state disabled + grid remove $data(hiddenBtn) + } + + # Make sure subseqent uses of this dialog are independent [Bug 845189] + unset -nocomplain data(extUsed) + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]]} { + wm transient $w $data(-parent) + } + + # Add traces on the selectPath variable + # + + trace add variable data(selectPath) write \ + [list ::tk::dialog::file::SetPath $w] + $data(dirMenuBtn) configure \ + -textvariable ::tk::dialog::file::${dataName}(selectPath) + + # Cleanup previous menu + # + $data(typeMenu) delete 0 end + $data(typeMenuBtn) configure -state normal -text "" + + # Initialize the file types menu + # + if {[llength $data(-filetypes)]} { + # Default type and name to first entry + set initialtype [lindex $data(-filetypes) 0] + set initialTypeName [lindex $initialtype 0] + if {$data(-typevariable) ne ""} { + upvar #0 $data(-typevariable) typeVariable + if {[info exists typeVariable]} { + set initialTypeName $typeVariable + } + } + foreach type $data(-filetypes) { + set title [lindex $type 0] + set filter [lindex $type 1] + $data(typeMenu) add command -label $title \ + -command [list ::tk::dialog::file::SetFilter $w $type] + # string first avoids glob-pattern char issues + if {[string first ${initialTypeName} $title] == 0} { + set initialtype $type + } + } + SetFilter $w $initialtype + $data(typeMenuBtn) configure -state normal + $data(typeMenuLab) configure -state normal + } else { + set data(filter) "*" + $data(typeMenuBtn) configure -state disabled -takefocus 0 + $data(typeMenuLab) configure -state disabled + } + UpdateWhenIdle $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(ent) + $data(ent) delete 0 end + $data(ent) insert 0 $data(selectFile) + $data(ent) selection range 0 end + $data(ent) icursor end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + + ::tk::RestoreFocusGrab $w $data(ent) withdraw + + # Cleanup traces on selectPath variable + # + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + $data(dirMenuBtn) configure -textvariable {} + + return $Priv(selectFilePath) +} + +# ::tk::dialog::file::Config -- +# +# Configures the TK filedialog according to the argument list +# +proc ::tk::dialog::file::Config {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + set data(type) $type + + # 0: Delete all variable that were set on data(selectPath) the + # last time the file dialog is used. The traces may cause troubles + # if the dialog is now used with a different -parent option. + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + + # 1: the configuration specs + # + set specs { + {-defaultextension "" "" ""} + {-filetypes "" "" ""} + {-initialdir "" "" ""} + {-initialfile "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + {-typevariable "" "" ""} + } + + # The "-multiple" option is only available for the "open" file dialog. + # + if {$type eq "open"} { + lappend specs {-multiple "" "" "0"} + } + + # The "-confirmoverwrite" option is only for the "save" file dialog. + # + if {$type eq "save"} { + lappend specs {-confirmoverwrite "" "" "1"} + } + + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + set data(selectFile) "" + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + if {$type eq "open"} { + set data(-title) [mc "Open"] + } else { + set data(-title) [mc "Save As"] + } + } + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + # Ensure that initialdir is an absolute path name. + if {[file isdirectory $data(-initialdir)]} { + set old [pwd] + cd $data(-initialdir) + set data(selectPath) [pwd] + cd $old + } else { + set data(selectPath) [pwd] + } + } + set data(selectFile) $data(-initialfile) + + # 5. Parse the -filetypes option + # + set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } + + # Set -multiple to a one or zero value (not other boolean types + # like "yes") so we can use it in tests more easily. + if {$type eq "save"} { + set data(-multiple) 0 + } elseif {$data(-multiple)} { + set data(-multiple) 1 + } else { + set data(-multiple) 0 + } +} + +proc ::tk::dialog::file::Create {w class} { + set dataName [lindex [split $w .] end] + upvar ::tk::dialog::file::$dataName data + variable ::tk::Priv + global tk_library + + toplevel $w -class $class + if {[tk windowingsystem] eq "x11"} {wm attributes $w -type dialog} + pack [ttk::frame $w.contents] -expand 1 -fill both + #set w $w.contents + + # f1: the frame with the directory option menu + # + set f1 [ttk::frame $w.contents.f1] + bind [::tk::AmpWidget ttk::label $f1.lab -text [mc "&Directory:"]] \ + <> [list focus $f1.menu] + + set data(dirMenuBtn) $f1.menu + if {![info exists data(selectPath)]} { + set data(selectPath) "" + } + set data(dirMenu) $f1.menu.menu + ttk::menubutton $f1.menu -menu $data(dirMenu) -direction flush \ + -textvariable [format %s(selectPath) ::tk::dialog::file::$dataName] + [menu $data(dirMenu) -tearoff 0] add radiobutton -label "" -variable \ + [format %s(selectPath) ::tk::dialog::file::$dataName] + set data(upBtn) [ttk::button $f1.up] + if {![info exists Priv(updirImage)]} { + set Priv(updirImage) [image create bitmap -data { +#define updir_width 28 +#define updir_height 16 +static char updir_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, + 0x20, 0x40, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x10, 0x00, 0x00, 0x01, + 0x10, 0x02, 0x00, 0x01, 0x10, 0x07, 0x00, 0x01, 0x90, 0x0f, 0x00, 0x01, + 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, + 0x10, 0xfe, 0x07, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, + 0xf0, 0xff, 0xff, 0x01};}] + } + $data(upBtn) configure -image $Priv(updirImage) + + $f1.menu configure -takefocus 1;# -highlightthickness 2 + + pack $data(upBtn) -side right -padx 4 -fill both + pack $f1.lab -side left -padx 4 -fill both + pack $f1.menu -expand yes -fill both -padx 4 + + # data(icons): the IconList that list the files and directories. + # + if {$class eq "TkFDialog"} { + if { $data(-multiple) } { + set fNameCaption [mc "File &names:"] + } else { + set fNameCaption [mc "File &name:"] + } + set fTypeCaption [mc "Files of &type:"] + set iconListCommand [list ::tk::dialog::file::OkCmd $w] + } else { + set fNameCaption [mc "&Selection:"] + set iconListCommand [list ::tk::dialog::file::chooseDir::DblClick $w] + } + set data(icons) [::tk::IconList $w.contents.icons \ + -command $iconListCommand -multiple $data(-multiple)] + bind $data(icons) <> \ + [list ::tk::dialog::file::ListBrowse $w] + + # f2: the frame with the OK button, cancel button, "file name" field + # and file types field. + # + set f2 [ttk::frame $w.contents.f2] + bind [::tk::AmpWidget ttk::label $f2.lab -text $fNameCaption -anchor e]\ + <> [list focus $f2.ent] + # -pady 0 + set data(ent) [ttk::entry $f2.ent] + + # The font to use for the icons. The default Canvas font on Unix + # is just deviant. + set ::tk::$w.contents.icons(font) [$data(ent) cget -font] + + # Make the file types bits only if this is a File Dialog + if {$class eq "TkFDialog"} { + set data(typeMenuLab) [::tk::AmpWidget ttk::label $f2.lab2 \ + -text $fTypeCaption -anchor e] + # -pady [$f2.lab cget -pady] + set data(typeMenuBtn) [ttk::menubutton $f2.menu \ + -menu $f2.menu.m] + # -indicatoron 1 + set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0] + # $data(typeMenuBtn) configure -takefocus 1 -relief raised -anchor w + bind $data(typeMenuLab) <> [list \ + focus $data(typeMenuBtn)] + } + + # The hidden button is displayed when ::tk::dialog::file::showHiddenBtn + # is true. Create it disabled so the binding doesn't trigger if it + # isn't shown. + if {$class eq "TkFDialog"} { + set text [mc "Show &Hidden Files and Directories"] + } else { + set text [mc "Show &Hidden Directories"] + } + set data(hiddenBtn) [::tk::AmpWidget ttk::checkbutton $f2.hidden \ + -text $text -state disabled \ + -variable ::tk::dialog::file::showHiddenVar \ + -command [list ::tk::dialog::file::UpdateWhenIdle $w]] +# -anchor w -padx 3 + + # the okBtn is created after the typeMenu so that the keyboard traversal + # is in the right order, and add binding so that we find out when the + # dialog is destroyed by the user (added here instead of to the overall + # window so no confusion about how much gets called; exactly + # once will do). [Bug 987169] + + set data(okBtn) [::tk::AmpWidget ttk::button $f2.ok \ + -text [mc "&OK"] -default active];# -pady 3] + bind $data(okBtn) [list ::tk::dialog::file::Destroyed $w] + set data(cancelBtn) [::tk::AmpWidget ttk::button $f2.cancel \ + -text [mc "&Cancel"] -default normal];# -pady 3] + + # grid the widgets in f2 + # + grid $f2.lab $f2.ent $data(okBtn) -padx 4 -pady 3 -sticky ew + grid configure $f2.ent -padx 2 + if {$class eq "TkFDialog"} { + grid $data(typeMenuLab) $data(typeMenuBtn) $data(cancelBtn) \ + -padx 4 -sticky ew + grid configure $data(typeMenuBtn) -padx 0 + grid $data(hiddenBtn) -columnspan 2 -padx 4 -sticky ew + } else { + grid $data(hiddenBtn) - $data(cancelBtn) -padx 4 -sticky ew + } + grid columnconfigure $f2 1 -weight 1 + + # Pack all the frames together. We are done with widget construction. + # + pack $f1 -side top -fill x -pady 4 + pack $f2 -side bottom -pady 4 -fill x + pack $data(icons) -expand yes -fill both -padx 4 -pady 1 + + # Set up the event handlers that are common to Directory and File Dialogs + # + + wm protocol $w WM_DELETE_WINDOW [list ::tk::dialog::file::CancelCmd $w] + $data(upBtn) configure -command [list ::tk::dialog::file::UpDirCmd $w] + $data(cancelBtn) configure -command [list ::tk::dialog::file::CancelCmd $w] + bind $w [list $data(cancelBtn) invoke] + bind $w [list tk::AltKeyInDialog $w %A] + + # Set up event handlers specific to File or Directory Dialogs + # + if {$class eq "TkFDialog"} { + bind $data(ent) [list ::tk::dialog::file::ActivateEnt $w] + $data(okBtn) configure -command [list ::tk::dialog::file::OkCmd $w] + bind $w [format { + if {[%s cget -state] eq "normal"} { + focus %s + } + } $data(typeMenuBtn) $data(typeMenuBtn)] + } else { + set okCmd [list ::tk::dialog::file::chooseDir::OkCmd $w] + bind $data(ent) $okCmd + $data(okBtn) configure -command $okCmd + bind $w [list focus $data(ent)] + bind $w [list $data(okBtn) invoke] + } + bind $w [list $data(hiddenBtn) invoke] + bind $data(ent) [list ::tk::dialog::file::CompleteEnt $w] + + # Build the focus group for all the entries + # + ::tk::FocusGroup_Create $w + ::tk::FocusGroup_BindIn $w $data(ent) [list \ + ::tk::dialog::file::EntFocusIn $w] + ::tk::FocusGroup_BindOut $w $data(ent) [list \ + ::tk::dialog::file::EntFocusOut $w] +} + +# ::tk::dialog::file::SetSelectMode -- +# +# Set the select mode of the dialog to single select or multi-select. +# +# Arguments: +# w The dialog path. +# multi 1 if the dialog is multi-select; 0 otherwise. +# +# Results: +# None. + +proc ::tk::dialog::file::SetSelectMode {w multi} { + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + if { $multi } { + set fNameCaption [mc "File &names:"] + } else { + set fNameCaption [mc "File &name:"] + } + set iconListCommand [list ::tk::dialog::file::OkCmd $w] + ::tk::SetAmpText $w.contents.f2.lab $fNameCaption + ::tk::IconList_Config $data(icons) \ + [list -multiple $multi -command $iconListCommand] + return +} + +# ::tk::dialog::file::UpdateWhenIdle -- +# +# Creates an idle event handler which updates the dialog in idle +# time. This is important because loading the directory may take a long +# time and we don't want to load the same directory for multiple times +# due to multiple concurrent events. +# +proc ::tk::dialog::file::UpdateWhenIdle {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[info exists data(updateId)]} { + return + } else { + set data(updateId) [after idle [list ::tk::dialog::file::Update $w]] + } +} + +# ::tk::dialog::file::Update -- +# +# Loads the files and directories into the IconList widget. Also +# sets up the directory option menu for quick access to parent +# directories. +# +proc ::tk::dialog::file::Update {w} { + + # This proc may be called within an idle handler. Make sure that the + # window has not been destroyed before this proc is called + if {![winfo exists $w]} { + return + } + set class [winfo class $w] + if {($class ne "TkFDialog") && ($class ne "TkChooseDir")} { + return + } + + set dataName [winfo name $w] + upvar ::tk::dialog::file::$dataName data + variable ::tk::Priv + global tk_library + unset -nocomplain data(updateId) + + if {![info exists Priv(folderImage)]} { + set Priv(folderImage) [image create photo -data { +R0lGODlhEAAMAKEAAAD//wAAAPD/gAAAACH5BAEAAAAALAAAAAAQAAwAAAIghINhyycvVFsB +QtmS3rjaH1Hg141WaT5ouprt2HHcUgAAOw==}] + set Priv(fileImage) [image create photo -data { +R0lGODlhDAAMAKEAALLA3AAAAP//8wAAACH5BAEAAAAALAAAAAAMAAwAAAIgRI4Ha+IfWHsO +rSASvJTGhnhcV3EJlo3kh53ltF5nAhQAOw==}] + } + set folder $Priv(folderImage) + set file $Priv(fileImage) + + set appPWD [pwd] + if {[catch { + cd $data(selectPath) + }]} { + # We cannot change directory to $data(selectPath). $data(selectPath) + # should have been checked before ::tk::dialog::file::Update is called, so + # we normally won't come to here. Anyways, give an error and abort + # action. + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $data(selectPath)] + cd $appPWD + return + } + + # Turn on the busy cursor. BUG?? We haven't disabled X events, though, + # so the user may still click and cause havoc ... + # + set entCursor [$data(ent) cget -cursor] + set dlgCursor [$w cget -cursor] + $data(ent) configure -cursor watch + $w configure -cursor watch + update idletasks + + ::tk::IconList_DeleteAll $data(icons) + + set showHidden $::tk::dialog::file::showHiddenVar + + # Make the dir list. Note that using an explicit [pwd] (instead of '.') is + # better in some VFS cases. + ::tk::IconList_Add $data(icons) $folder [GlobFiltered [pwd] d 1] + + if {$class eq "TkFDialog"} { + # Make the file list if this is a File Dialog, selecting all but + # 'd'irectory type files. + # + ::tk::IconList_Add $data(icons) $file \ + [GlobFiltered [pwd] {f b c l p s}] + } + + ::tk::IconList_Arrange $data(icons) + + # Update the Directory: option menu + # + set list "" + set dir "" + foreach subdir [file split $data(selectPath)] { + set dir [file join $dir $subdir] + lappend list $dir + } + + $data(dirMenu) delete 0 end + set var [format %s(selectPath) ::tk::dialog::file::$dataName] + foreach path $list { + $data(dirMenu) add command -label $path -command [list set $var $path] + } + + # Restore the PWD to the application's PWD + # + cd $appPWD + + if {$class eq "TkFDialog"} { + # Restore the Open/Save Button if this is a File Dialog + # + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } + + # turn off the busy cursor. + # + $data(ent) configure -cursor $entCursor + $w configure -cursor $dlgCursor +} + +# ::tk::dialog::file::SetPathSilently -- +# +# Sets data(selectPath) without invoking the trace procedure +# +proc ::tk::dialog::file::SetPathSilently {w path} { + upvar ::tk::dialog::file::[winfo name $w] data + + trace remove variable data(selectPath) write [list ::tk::dialog::file::SetPath $w] + set data(selectPath) $path + trace add variable data(selectPath) write [list ::tk::dialog::file::SetPath $w] +} + + +# This proc gets called whenever data(selectPath) is set +# +proc ::tk::dialog::file::SetPath {w name1 name2 op} { + if {[winfo exists $w]} { + upvar ::tk::dialog::file::[winfo name $w] data + UpdateWhenIdle $w + # On directory dialogs, we keep the entry in sync with the currentdir. + if {[winfo class $w] eq "TkChooseDir"} { + $data(ent) delete 0 end + $data(ent) insert end $data(selectPath) + } + } +} + +# This proc gets called whenever data(filter) is set +# +proc ::tk::dialog::file::SetFilter {w type} { + upvar ::tk::dialog::file::[winfo name $w] data + upvar ::tk::$data(icons) icons + + set data(filterType) $type + set data(filter) [lindex $type 1] + $data(typeMenuBtn) configure -text [lindex $type 0] ;#-indicatoron 1 + + # If we aren't using a default extension, use the one suppled + # by the filter. + if {![info exists data(extUsed)]} { + if {[string length $data(-defaultextension)]} { + set data(extUsed) 1 + } else { + set data(extUsed) 0 + } + } + + if {!$data(extUsed)} { + # Get the first extension in the list that matches {^\*\.\w+$} + # and remove all * from the filter. + set index [lsearch -regexp $data(filter) {^\*\.\w+$}] + if {$index >= 0} { + set data(-defaultextension) \ + [string trimleft [lindex $data(filter) $index] "*"] + } else { + # Couldn't find anything! Reset to a safe default... + set data(-defaultextension) "" + } + } + + $icons(sbar) set 0.0 0.0 + + UpdateWhenIdle $w +} + +# tk::dialog::file::ResolveFile -- +# +# Interpret the user's text input in a file selection dialog. +# Performs: +# +# (1) ~ substitution +# (2) resolve all instances of . and .. +# (3) check for non-existent files/directories +# (4) check for chdir permissions +# (5) conversion of environment variable references to their +# contents (once only) +# +# Arguments: +# context: the current directory you are in +# text: the text entered by the user +# defaultext: the default extension to add to files with no extension +# expandEnv: whether to expand environment variables (yes by default) +# +# Return vaue: +# [list $flag $directory $file] +# +# flag = OK : valid input +# = PATTERN : valid directory/pattern +# = PATH : the directory does not exist +# = FILE : the directory exists by the file doesn't +# exist +# = CHDIR : Cannot change to the directory +# = ERROR : Invalid entry +# +# directory : valid only if flag = OK or PATTERN or FILE +# file : valid only if flag = OK or PATTERN +# +# directory may not be the same as context, because text may contain +# a subdirectory name +# +proc ::tk::dialog::file::ResolveFile {context text defaultext {expandEnv 1}} { + set appPWD [pwd] + + set path [JoinFile $context $text] + + # If the file has no extension, append the default. Be careful not + # to do this for directories, otherwise typing a dirname in the box + # will give back "dirname.extension" instead of trying to change dir. + if { + ![file isdirectory $path] && ([file ext $path] eq "") && + ![string match {$*} [file tail $path]] + } then { + set path "$path$defaultext" + } + + if {[catch {file exists $path}]} { + # This "if" block can be safely removed if the following code + # stop generating errors. + # + # file exists ~nonsuchuser + # + return [list ERROR $path ""] + } + + if {[file exists $path]} { + if {[file isdirectory $path]} { + if {[catch {cd $path}]} { + return [list CHDIR $path ""] + } + set directory [pwd] + set file "" + set flag OK + cd $appPWD + } else { + if {[catch {cd [file dirname $path]}]} { + return [list CHDIR [file dirname $path] ""] + } + set directory [pwd] + set file [file tail $path] + set flag OK + cd $appPWD + } + } else { + set dirname [file dirname $path] + if {[file exists $dirname]} { + if {[catch {cd $dirname}]} { + return [list CHDIR $dirname ""] + } + set directory [pwd] + cd $appPWD + set file [file tail $path] + # It's nothing else, so check to see if it is an env-reference + if {$expandEnv && [string match {$*} $file]} { + set var [string range $file 1 end] + if {[info exist ::env($var)]} { + return [ResolveFile $context $::env($var) $defaultext 0] + } + } + if {[regexp {[*?]} $file]} { + set flag PATTERN + } else { + set flag FILE + } + } else { + set directory $dirname + set file [file tail $path] + set flag PATH + # It's nothing else, so check to see if it is an env-reference + if {$expandEnv && [string match {$*} $file]} { + set var [string range $file 1 end] + if {[info exist ::env($var)]} { + return [ResolveFile $context $::env($var) $defaultext 0] + } + } + } + } + + return [list $flag $directory $file] +} + + +# Gets called when the entry box gets keyboard focus. We clear the selection +# from the icon list . This way the user can be certain that the input in the +# entry box is the selection. +# +proc ::tk::dialog::file::EntFocusIn {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(ent) get] ne ""} { + $data(ent) selection range 0 end + $data(ent) icursor end + } else { + $data(ent) selection clear + } + + if {[winfo class $w] eq "TkFDialog"} { + # If this is a File Dialog, make sure the buttons are labeled right. + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } +} + +proc ::tk::dialog::file::EntFocusOut {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(ent) selection clear +} + + +# Gets called when user presses Return in the "File name" entry. +# +proc ::tk::dialog::file::ActivateEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text [$data(ent) get] + if {$data(-multiple)} { + foreach t $text { + VerifyFileName $w $t + } + } else { + VerifyFileName $w $text + } +} + +# Verification procedure +# +proc ::tk::dialog::file::VerifyFileName {w filename} { + upvar ::tk::dialog::file::[winfo name $w] data + + set list [ResolveFile $data(selectPath) $filename $data(-defaultextension)] + foreach {flag path file} $list { + break + } + + switch -- $flag { + OK { + if {$file eq ""} { + # user has entered an existing (sub)directory + set data(selectPath) $path + $data(ent) delete 0 end + } else { + SetPathSilently $w $path + if {$data(-multiple)} { + lappend data(selectFile) $file + } else { + set data(selectFile) $file + } + Done $w + } + } + PATTERN { + set data(selectPath) $path + set data(filter) $file + } + FILE { + if {$data(type) eq "open"} { + tk_messageBox -icon warning -type ok -parent $w \ + -message [mc "File \"%1\$s\" does not exist." \ + [file join $path $file]] + $data(ent) selection range 0 end + $data(ent) icursor end + } else { + SetPathSilently $w $path + if {$data(-multiple)} { + lappend data(selectFile) $file + } else { + set data(selectFile) $file + } + Done $w + } + } + PATH { + tk_messageBox -icon warning -type ok -parent $w \ + -message [mc "Directory \"%1\$s\" does not exist." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + CHDIR { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory\ + \"%1\$s\".\nPermission denied." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + ERROR { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Invalid file name \"%1\$s\"." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + } +} + +# Gets called when user presses the Alt-s or Alt-o keys. +# +proc ::tk::dialog::file::InvokeBtn {w key} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(okBtn) cget -text] eq $key} { + $data(okBtn) invoke + } +} + +# Gets called when user presses the "parent directory" button +# +proc ::tk::dialog::file::UpDirCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$data(selectPath) ne "/"} { + set data(selectPath) [file dirname $data(selectPath)] + } +} + +# Join a file name to a path name. The "file join" command will break +# if the filename begins with ~ +# +proc ::tk::dialog::file::JoinFile {path file} { + if {[string match {~*} $file] && [file exists $path/$file]} { + return [file join $path ./$file] + } else { + return [file join $path $file] + } +} + +# Gets called when user presses the "OK" button +# +proc ::tk::dialog::file::OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set filenames {} + foreach item [::tk::IconList_CurSelection $data(icons)] { + lappend filenames [::tk::IconList_Get $data(icons) $item] + } + + if {([llength $filenames] && !$data(-multiple)) || \ + ($data(-multiple) && ([llength $filenames] == 1))} { + set filename [lindex $filenames 0] + set file [JoinFile $data(selectPath) $filename] + if {[file isdirectory $file]} { + ListInvoke $w [list $filename] + return + } + } + + ActivateEnt $w +} + +# Gets called when user presses the "Cancel" button +# +proc ::tk::dialog::file::CancelCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + bind $data(okBtn) {} + set Priv(selectFilePath) "" +} + +# Gets called when user destroys the dialog directly [Bug 987169] +# +proc ::tk::dialog::file::Destroyed {w} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + set Priv(selectFilePath) "" +} + +# Gets called when user browses the IconList widget (dragging mouse, arrow +# keys, etc) +# +proc ::tk::dialog::file::ListBrowse {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text {} + foreach item [::tk::IconList_CurSelection $data(icons)] { + lappend text [::tk::IconList_Get $data(icons) $item] + } + if {[llength $text] == 0} { + return + } + if {$data(-multiple)} { + set newtext {} + foreach file $text { + set fullfile [JoinFile $data(selectPath) $file] + if { ![file isdirectory $fullfile] } { + lappend newtext $file + } + } + set text $newtext + set isDir 0 + } else { + set text [lindex $text 0] + set file [JoinFile $data(selectPath) $text] + set isDir [file isdirectory $file] + } + if {!$isDir} { + $data(ent) delete 0 end + $data(ent) insert 0 $text + + if {[winfo class $w] eq "TkFDialog"} { + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } + } elseif {[winfo class $w] eq "TkFDialog"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } +} + +# Gets called when user invokes the IconList widget (double-click, +# Return key, etc) +# +proc ::tk::dialog::file::ListInvoke {w filenames} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[llength $filenames] == 0} { + return + } + + set file [JoinFile $data(selectPath) [lindex $filenames 0]] + + set class [winfo class $w] + if {$class eq "TkChooseDir" || [file isdirectory $file]} { + set appPWD [pwd] + if {[catch {cd $file}]} { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $file] + } else { + cd $appPWD + set data(selectPath) $file + } + } else { + if {$data(-multiple)} { + set data(selectFile) $filenames + } else { + set data(selectFile) $file + } + Done $w + } +} + +# ::tk::dialog::file::Done -- +# +# Gets called when user has input a valid filename. Pops up a +# dialog box to confirm selection when necessary. Sets the +# tk::Priv(selectFilePath) variable, which will break the "vwait" +# loop in ::tk::dialog::file:: and return the selected filename to the +# script that calls tk_getOpenFile or tk_getSaveFile +# +proc ::tk::dialog::file::Done {w {selectFilePath ""}} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + if {$selectFilePath eq ""} { + if {$data(-multiple)} { + set selectFilePath {} + foreach f $data(selectFile) { + lappend selectFilePath [JoinFile $data(selectPath) $f] + } + } else { + set selectFilePath [JoinFile $data(selectPath) $data(selectFile)] + } + + set Priv(selectFile) $data(selectFile) + set Priv(selectPath) $data(selectPath) + + if {($data(type) eq "save") && $data(-confirmoverwrite) && [file exists $selectFilePath]} { + set reply [tk_messageBox -icon warning -type yesno -parent $w \ + -message [mc "File \"%1\$s\" already exists.\nDo you want\ + to overwrite it?" $selectFilePath]] + if {$reply eq "no"} { + return + } + } + if {[info exists data(-typevariable)] && $data(-typevariable) ne "" + && [info exists data(-filetypes)] && [llength $data(-filetypes)] + && [info exists data(filterType)] && $data(filterType) ne ""} { + upvar #0 $data(-typevariable) typeVariable + set typeVariable [lindex $data(filterType) 0] + } + } + bind $data(okBtn) {} + set Priv(selectFilePath) $selectFilePath +} + +proc ::tk::dialog::file::GlobFiltered {dir type {overrideFilter 0}} { + # $dir == where to search + # $type == what to look for ('d' or 'f b c l p s') + # $overrideFilter == whether to ignore the filter + + variable showHiddenVar + upvar 1 data(filter) filter + + if {$filter eq "*" || $overrideFilter} { + set patterns [list *] + if {$showHiddenVar} { + lappend patterns .* + } + } elseif {[string is list $filter]} { + set patterns $filter + } else { + # Invalid list; assume we can use non-whitespace sequences as words + set patterns [regexp -inline -all {\S+} $filter] + } + + set opts [list -tails -directory $dir -type $type -nocomplain] + + set result {} + catch { + # We have a catch because we might have a really bad pattern (e.g., + # with an unbalanced brace); even [glob -nocomplain] doesn't like it. + # Using a catch ensures that it just means we match nothing instead of + # throwing a nasty error at the user... + foreach f [glob {*}$opts -- {*}$patterns] { + if {$f eq "." || $f eq ".."} { + continue + } + lappend result $f + } + } + return [lsort -dictionary -unique $result] +} + +proc ::tk::dialog::file::CompleteEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + set f [$data(ent) get] + if {$data(-multiple)} { + if {![string is list $f] || [llength $f] != 1} { + return -code break + } + set f [lindex $f 0] + } + + # Get list of matching filenames and dirnames + set files [if {[winfo class $w] eq "TkFDialog"} { + GlobFiltered $data(selectPath) {f b c l p s} + }] + set dirs2 {} + foreach d [GlobFiltered $data(selectPath) d] {lappend dirs2 $d/} + + set targets [concat \ + [lsearch -glob -all -inline $files $f*] \ + [lsearch -glob -all -inline $dirs2 $f*]] + + if {[llength $targets] == 1} { + # We have a winner! + set f [lindex $targets 0] + } elseif {$f in $targets || [llength $targets] == 0} { + if {[string length $f] > 0} { + bell + } + return + } elseif {[llength $targets] > 1} { + # Multiple possibles + if {[string length $f] == 0} { + return + } + set t0 [lindex $targets 0] + for {set len [string length $t0]} {$len>0} {} { + set allmatch 1 + foreach s $targets { + if {![string equal -length $len $s $t0]} { + set allmatch 0 + break + } + } + incr len -1 + if {$allmatch} break + } + set f [string range $t0 0 $len] + } + + if {$data(-multiple)} { + set f [list $f] + } + $data(ent) delete 0 end + $data(ent) insert 0 $f + return -code break +} diff --git a/inkstitch/bin/tk/ttk/altTheme.tcl b/inkstitch/bin/tk/ttk/altTheme.tcl new file mode 100644 index 0000000..d57227c --- /dev/null +++ b/inkstitch/bin/tk/ttk/altTheme.tcl @@ -0,0 +1,101 @@ +# +# Ttk widget set: Alternate theme +# + +namespace eval ttk::theme::alt { + + variable colors + array set colors { + -frame "#d9d9d9" + -window "#ffffff" + -darker "#c3c3c3" + -border "#414141" + -activebg "#ececec" + -disabledfg "#a3a3a3" + -selectbg "#4a6984" + -selectfg "#ffffff" + } + + ttk::style theme settings alt { + + ttk::style configure "." \ + -background $colors(-frame) \ + -foreground black \ + -troughcolor $colors(-darker) \ + -bordercolor $colors(-border) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -font TkDefaultFont \ + ; + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] ; + ttk::style map "." -foreground [list disabled $colors(-disabledfg)] ; + ttk::style map "." -embossed [list disabled 1] ; + + ttk::style configure TButton \ + -anchor center -width -11 -padding "1 1" \ + -relief raised -shiftrelief 1 \ + -highlightthickness 1 -highlightcolor $colors(-frame) + + ttk::style map TButton -relief { + {pressed !disabled} sunken + {active !disabled} raised + } -highlightcolor {alternate black} + + ttk::style configure TCheckbutton -indicatorcolor "#ffffff" -padding 2 + ttk::style configure TRadiobutton -indicatorcolor "#ffffff" -padding 2 + ttk::style map TCheckbutton -indicatorcolor \ + [list disabled $colors(-frame) pressed $colors(-frame)] + ttk::style map TRadiobutton -indicatorcolor \ + [list disabled $colors(-frame) pressed $colors(-frame)] + + ttk::style configure TMenubutton \ + -width -11 -padding "3 3" -relief raised + + ttk::style configure TEntry -padding 1 + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure TCombobox -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure Toolbutton -relief flat -padding 2 + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + ttk::style map Toolbutton -background \ + [list pressed $colors(-darker) active $colors(-activebg)] + + ttk::style configure TScrollbar -relief raised + + ttk::style configure TLabelframe -relief groove -borderwidth 2 + + ttk::style configure TNotebook -tabmargins {2 2 1 0} + ttk::style configure TNotebook.Tab \ + -padding {4 2} -background $colors(-darker) + ttk::style map TNotebook.Tab \ + -background [list selected $colors(-frame)] \ + -expand [list selected {2 2 1 0}] \ + ; + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + ttk::style configure TScale \ + -groovewidth 4 -troughrelief sunken \ + -sliderwidth raised -borderwidth 2 + ttk::style configure TProgressbar \ + -background $colors(-selectbg) -borderwidth 0 + } +} diff --git a/inkstitch/bin/tk/ttk/aquaTheme.tcl b/inkstitch/bin/tk/ttk/aquaTheme.tcl new file mode 100644 index 0000000..fa0fa12 --- /dev/null +++ b/inkstitch/bin/tk/ttk/aquaTheme.tcl @@ -0,0 +1,59 @@ +# +# Aqua theme (OSX native look and feel) +# + +namespace eval ttk::theme::aqua { + ttk::style theme settings aqua { + + ttk::style configure . \ + -font TkDefaultFont \ + -background systemWindowBody \ + -foreground systemModelessDialogActiveText \ + -selectbackground systemHighlight \ + -selectforeground systemModelessDialogActiveText \ + -selectborderwidth 0 \ + -insertwidth 1 + + ttk::style map . \ + -foreground {disabled systemModelessDialogInactiveText + background systemModelessDialogInactiveText} \ + -selectbackground {background systemHighlightSecondary + !focus systemHighlightSecondary} \ + -selectforeground {background systemModelessDialogInactiveText + !focus systemDialogActiveText} + + # Workaround for #1100117: + # Actually, on Aqua we probably shouldn't stipple images in + # disabled buttons even if it did work... + ttk::style configure . -stipple {} + + ttk::style configure TButton -anchor center -width -6 + ttk::style configure Toolbutton -padding 4 + + ttk::style configure TNotebook -tabmargins {10 0} -tabposition n + ttk::style configure TNotebook -padding {18 8 18 17} + ttk::style configure TNotebook.Tab -padding {12 3 12 2} + + # Combobox: + ttk::style configure TCombobox -postoffset {5 -2 -10 0} + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -rowheight 18 -background White + ttk::style map Treeview \ + -background {{selected background} systemHighlightSecondary + selected systemHighlight} + + # Enable animation for ttk::progressbar widget: + ttk::style configure TProgressbar -period 100 -maxphase 255 + + # For Aqua, labelframe labels should appear outside the border, + # with a 14 pixel inset and 4 pixels spacing between border and label + # (ref: Apple Human Interface Guidelines / Controls / Grouping Controls) + # + ttk::style configure TLabelframe \ + -labeloutside true -labelmargins {14 0 14 4} + + # TODO: panedwindow sashes should be 9 pixels (HIG:Controls:Split Views) + } +} diff --git a/inkstitch/bin/tk/ttk/button.tcl b/inkstitch/bin/tk/ttk/button.tcl new file mode 100644 index 0000000..9f2cec7 --- /dev/null +++ b/inkstitch/bin/tk/ttk/button.tcl @@ -0,0 +1,83 @@ +# +# Bindings for Buttons, Checkbuttons, and Radiobuttons. +# +# Notes: , only control the "pressed" +# state; widgets remain "active" if the pointer is dragged out. +# This doesn't seem to be conventional, but it's a nice way +# to provide extra feedback while the grab is active. +# (If the button is released off the widget, the grab deactivates and +# we get a event then, which turns off the "active" state) +# +# Normally, and events are +# delivered to the widget which received the initial +# event. However, Tk [grab]s (#1223103) and menu interactions +# (#1222605) can interfere with this. To guard against spurious +# events, the binding only sets +# the pressed state if the button is currently active. +# + +namespace eval ttk::button {} + +bind TButton { %W instate !disabled {%W state active} } +bind TButton { %W state !active } +bind TButton { ttk::button::activate %W } +bind TButton <> { ttk::button::activate %W } + +bind TButton \ + { %W instate !disabled { ttk::clickToFocus %W; %W state pressed } } +bind TButton \ + { %W instate pressed { %W state !pressed; %W instate !disabled { %W invoke } } } +bind TButton \ + { %W state !pressed } +bind TButton \ + { %W instate {active !disabled} { %W state pressed } } + +# Checkbuttons and Radiobuttons have the same bindings as Buttons: +# +ttk::copyBindings TButton TCheckbutton +ttk::copyBindings TButton TRadiobutton + +# ...plus a few more: + +bind TRadiobutton { ttk::button::RadioTraverse %W -1 } +bind TRadiobutton { ttk::button::RadioTraverse %W +1 } + +# bind TCheckbutton { %W select } +# bind TCheckbutton { %W deselect } + +# activate -- +# Simulate a button press: temporarily set the state to 'pressed', +# then invoke the button. +# +proc ttk::button::activate {w} { + $w instate disabled { return } + set oldState [$w state pressed] + update idletasks; after 100 ;# block event loop to avoid reentrancy + $w state $oldState + $w invoke +} + +# RadioTraverse -- up/down keyboard traversal for radiobutton groups. +# Set focus to previous/next radiobutton in a group. +# A radiobutton group consists of all the radiobuttons with +# the same parent and -variable; this is a pretty good heuristic +# that works most of the time. +# +proc ttk::button::RadioTraverse {w dir} { + set group [list] + foreach sibling [winfo children [winfo parent $w]] { + if { [winfo class $sibling] eq "TRadiobutton" + && [$sibling cget -variable] eq [$w cget -variable] + && ![$sibling instate disabled] + } { + lappend group $sibling + } + } + + if {![llength $group]} { # Shouldn't happen, but can. + return + } + + set pos [expr {([lsearch -exact $group $w] + $dir) % [llength $group]}] + tk::TabToWindow [lindex $group $pos] +} diff --git a/inkstitch/bin/tk/ttk/clamTheme.tcl b/inkstitch/bin/tk/ttk/clamTheme.tcl new file mode 100644 index 0000000..f184ea0 --- /dev/null +++ b/inkstitch/bin/tk/ttk/clamTheme.tcl @@ -0,0 +1,137 @@ +# +# "Clam" theme. +# +# Inspired by the XFCE family of Gnome themes. +# + +namespace eval ttk::theme::clam { + variable colors + array set colors { + -disabledfg "#999999" + -frame "#dcdad5" + -window "#ffffff" + -dark "#cfcdc8" + -darker "#bab5ab" + -darkest "#9e9a91" + -lighter "#eeebe7" + -lightest "#ffffff" + -selectbg "#4a6984" + -selectfg "#ffffff" + } + + ttk::style theme settings clam { + + ttk::style configure "." \ + -background $colors(-frame) \ + -foreground black \ + -bordercolor $colors(-darkest) \ + -darkcolor $colors(-dark) \ + -lightcolor $colors(-lighter) \ + -troughcolor $colors(-darker) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -selectborderwidth 0 \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -background [list disabled $colors(-frame) \ + active $colors(-lighter)] \ + -foreground [list disabled $colors(-disabledfg)] \ + -selectbackground [list !focus $colors(-darkest)] \ + -selectforeground [list !focus white] \ + ; + # -selectbackground [list !focus "#847d73"] + + ttk::style configure TButton \ + -anchor center -width -11 -padding 5 -relief raised + ttk::style map TButton \ + -background [list \ + disabled $colors(-frame) \ + pressed $colors(-darker) \ + active $colors(-lighter)] \ + -lightcolor [list pressed $colors(-darker)] \ + -darkcolor [list pressed $colors(-darker)] \ + -bordercolor [list alternate "#000000"] \ + ; + + ttk::style configure Toolbutton \ + -anchor center -padding 2 -relief flat + ttk::style map Toolbutton \ + -relief [list \ + disabled flat \ + selected sunken \ + pressed sunken \ + active raised] \ + -background [list \ + disabled $colors(-frame) \ + pressed $colors(-darker) \ + active $colors(-lighter)] \ + -lightcolor [list pressed $colors(-darker)] \ + -darkcolor [list pressed $colors(-darker)] \ + ; + + ttk::style configure TCheckbutton \ + -indicatorbackground "#ffffff" \ + -indicatormargin {1 1 4 1} \ + -padding 2 ; + ttk::style configure TRadiobutton \ + -indicatorbackground "#ffffff" \ + -indicatormargin {1 1 4 1} \ + -padding 2 ; + ttk::style map TCheckbutton -indicatorbackground \ + [list disabled $colors(-frame) pressed $colors(-frame)] + ttk::style map TRadiobutton -indicatorbackground \ + [list disabled $colors(-frame) pressed $colors(-frame)] + + ttk::style configure TMenubutton \ + -width -11 -padding 5 -relief raised + + ttk::style configure TEntry -padding 1 -insertwidth 1 + ttk::style map TEntry \ + -background [list readonly $colors(-frame)] \ + -bordercolor [list focus $colors(-selectbg)] \ + -lightcolor [list focus "#6f9dc6"] \ + -darkcolor [list focus "#6f9dc6"] \ + ; + + ttk::style configure TCombobox -padding 1 -insertwidth 1 + ttk::style map TCombobox \ + -background [list active $colors(-lighter) \ + pressed $colors(-lighter)] \ + -fieldbackground [list {readonly focus} $colors(-selectbg) \ + readonly $colors(-frame)] \ + -foreground [list {readonly focus} $colors(-selectfg)] \ + ; + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox \ + -background [list readonly $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TNotebook.Tab -padding {6 2 6 2} + ttk::style map TNotebook.Tab \ + -padding [list selected {6 4 6 2}] \ + -background [list selected $colors(-frame) {} $colors(-darker)] \ + -lightcolor [list selected $colors(-lighter) {} $colors(-dark)] \ + ; + + # Treeview: + ttk::style configure Heading \ + -font TkHeadingFont -relief raised -padding {3} + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + ttk::style configure TLabelframe \ + -labeloutside true -labelmargins {0 0 0 4} \ + -borderwidth 2 -relief raised + + ttk::style configure TProgressbar -background $colors(-frame) + + ttk::style configure Sash -sashthickness 6 -gripcount 10 + } +} diff --git a/inkstitch/bin/tk/ttk/classicTheme.tcl b/inkstitch/bin/tk/ttk/classicTheme.tcl new file mode 100644 index 0000000..7e3eff5 --- /dev/null +++ b/inkstitch/bin/tk/ttk/classicTheme.tcl @@ -0,0 +1,108 @@ +# +# "classic" Tk theme. +# +# Implements Tk's traditional Motif-like look and feel. +# + +namespace eval ttk::theme::classic { + + variable colors; array set colors { + -frame "#d9d9d9" + -window "#ffffff" + -activebg "#ececec" + -troughbg "#c3c3c3" + -selectbg "#c3c3c3" + -selectfg "#000000" + -disabledfg "#a3a3a3" + -indicator "#b03060" + } + + ttk::style theme settings classic { + ttk::style configure "." \ + -font TkDefaultFont \ + -background $colors(-frame) \ + -foreground black \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -troughcolor $colors(-troughbg) \ + -indicatorcolor $colors(-frame) \ + -highlightcolor $colors(-frame) \ + -highlightthickness 1 \ + -selectborderwidth 1 \ + -insertwidth 2 \ + ; + + # To match pre-Xft X11 appearance, use: + # ttk::style configure . -font {Helvetica 12 bold} + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] + ttk::style map "." -foreground \ + [list disabled $colors(-disabledfg)] + + ttk::style map "." -highlightcolor [list focus black] + + ttk::style configure TButton \ + -anchor center -padding "3m 1m" -relief raised -shiftrelief 1 + ttk::style map TButton -relief [list {!disabled pressed} sunken] + + ttk::style configure TCheckbutton -indicatorrelief raised + ttk::style map TCheckbutton \ + -indicatorcolor [list \ + pressed $colors(-frame) selected $colors(-indicator)] \ + -indicatorrelief {selected sunken pressed sunken} \ + ; + + ttk::style configure TRadiobutton -indicatorrelief raised + ttk::style map TRadiobutton \ + -indicatorcolor [list \ + pressed $colors(-frame) selected $colors(-indicator)] \ + -indicatorrelief {selected sunken pressed sunken} \ + ; + + ttk::style configure TMenubutton -relief raised -padding "3m 1m" + + ttk::style configure TEntry -relief sunken -padding 1 -font TkTextFont + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure TCombobox -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TLabelframe -borderwidth 2 -relief groove + + ttk::style configure TScrollbar -relief raised + ttk::style map TScrollbar -relief {{pressed !disabled} sunken} + + ttk::style configure TScale -sliderrelief raised + ttk::style map TScale -sliderrelief {{pressed !disabled} sunken} + + ttk::style configure TProgressbar -background SteelBlue + ttk::style configure TNotebook.Tab \ + -padding {3m 1m} \ + -background $colors(-troughbg) + ttk::style map TNotebook.Tab -background [list selected $colors(-frame)] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + # + # Toolbar buttons: + # + ttk::style configure Toolbutton -padding 2 -relief flat -shiftrelief 2 + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + ttk::style map Toolbutton -background \ + [list pressed $colors(-troughbg) active $colors(-activebg)] + } +} diff --git a/inkstitch/bin/tk/ttk/combobox.tcl b/inkstitch/bin/tk/ttk/combobox.tcl new file mode 100644 index 0000000..03821a2 --- /dev/null +++ b/inkstitch/bin/tk/ttk/combobox.tcl @@ -0,0 +1,456 @@ +# +# Combobox bindings. +# +# <>: +# +# Need to set [wm transient] just before mapping the popdown +# instead of when it's created, in case a containing frame +# has been reparented [#1818441]. +# +# On Windows: setting [wm transient] prevents the parent +# toplevel from becoming inactive when the popdown is posted +# (Tk 8.4.8+) +# +# On X11: WM_TRANSIENT_FOR on override-redirect windows +# may be used by compositing managers and by EWMH-aware +# window managers (even though the older ICCCM spec says +# it's meaningless). +# +# On OSX: [wm transient] does utterly the wrong thing. +# Instead, we use [MacWindowStyle "help" "noActivates hideOnSuspend"]. +# The "noActivates" attribute prevents the parent toplevel +# from deactivating when the popdown is posted, and is also +# necessary for "help" windows to receive mouse events. +# "hideOnSuspend" makes the popdown disappear (resp. reappear) +# when the parent toplevel is deactivated (resp. reactivated). +# (see [#1814778]). Also set [wm resizable 0 0], to prevent +# TkAqua from shrinking the scrollbar to make room for a grow box +# that isn't there. +# +# In order to work around other platform quirks in TkAqua, +# [grab] and [focus] are set in bindings instead of +# immediately after deiconifying the window. +# + +namespace eval ttk::combobox { + variable Values ;# Values($cb) is -listvariable of listbox widget + variable State + set State(entryPress) 0 +} + +### Combobox bindings. +# +# Duplicate the Entry bindings, override if needed: +# + +ttk::copyBindings TEntry TCombobox + +bind TCombobox { ttk::combobox::Post %W } +bind TCombobox { ttk::combobox::Unpost %W } + +bind TCombobox { ttk::combobox::Press "" %W %x %y } +bind TCombobox { ttk::combobox::Press "s" %W %x %y } +bind TCombobox { ttk::combobox::Press "2" %W %x %y } +bind TCombobox { ttk::combobox::Press "3" %W %x %y } +bind TCombobox { ttk::combobox::Drag %W %x } +bind TCombobox { ttk::combobox::Motion %W %x %y } + +ttk::bindMouseWheel TCombobox [list ttk::combobox::Scroll %W] + +bind TCombobox <> { ttk::combobox::TraverseIn %W } + +### Combobox listbox bindings. +# +bind ComboboxListbox { ttk::combobox::LBSelected %W } +bind ComboboxListbox { ttk::combobox::LBSelected %W } +bind ComboboxListbox { ttk::combobox::LBCancel %W } +bind ComboboxListbox { ttk::combobox::LBTab %W next } +bind ComboboxListbox <> { ttk::combobox::LBTab %W prev } +bind ComboboxListbox { ttk::combobox::LBCleanup %W } +bind ComboboxListbox { ttk::combobox::LBHover %W %x %y } +bind ComboboxListbox { focus -force %W } + +switch -- [tk windowingsystem] { + win32 { + # Dismiss listbox when user switches to a different application. + # NB: *only* do this on Windows (see #1814778) + bind ComboboxListbox { ttk::combobox::LBCancel %W } + } +} + +### Combobox popdown window bindings. +# +bind ComboboxPopdown { ttk::combobox::MapPopdown %W } +bind ComboboxPopdown { ttk::combobox::UnmapPopdown %W } +bind ComboboxPopdown \ + { ttk::combobox::Unpost [winfo parent %W] } + +### Option database settings. +# + +option add *TCombobox*Listbox.font TkTextFont +option add *TCombobox*Listbox.relief flat +option add *TCombobox*Listbox.highlightThickness 0 + +## Platform-specific settings. +# +switch -- [tk windowingsystem] { + x11 { + option add *TCombobox*Listbox.background white + } + aqua { + option add *TCombobox*Listbox.borderWidth 0 + } +} + +### Binding procedures. +# + +## Press $mode $x $y -- ButtonPress binding for comboboxes. +# Either post/unpost the listbox, or perform Entry widget binding, +# depending on widget state and location of button press. +# +proc ttk::combobox::Press {mode w x y} { + variable State + + $w instate disabled { return } + + set State(entryPress) [expr { + [$w instate !readonly] + && [string match *textarea [$w identify element $x $y]] + }] + + focus $w + if {$State(entryPress)} { + switch -- $mode { + s { ttk::entry::Shift-Press $w $x ; # Shift } + 2 { ttk::entry::Select $w $x word ; # Double click} + 3 { ttk::entry::Select $w $x line ; # Triple click } + "" - + default { ttk::entry::Press $w $x } + } + } else { + Post $w + } +} + +## Drag -- B1-Motion binding for comboboxes. +# If the initial ButtonPress event was handled by Entry binding, +# perform Entry widget drag binding; otherwise nothing. +# +proc ttk::combobox::Drag {w x} { + variable State + if {$State(entryPress)} { + ttk::entry::Drag $w $x + } +} + +## Motion -- +# Set cursor. +# +proc ttk::combobox::Motion {w x y} { + if { [$w identify $x $y] eq "textarea" + && [$w instate {!readonly !disabled}] + } { + ttk::setCursor $w text + } else { + ttk::setCursor $w "" + } +} + +## TraverseIn -- receive focus due to keyboard navigation +# For editable comboboxes, set the selection and insert cursor. +# +proc ttk::combobox::TraverseIn {w} { + $w instate {!readonly !disabled} { + $w selection range 0 end + $w icursor end + } +} + +## SelectEntry $cb $index -- +# Set the combobox selection in response to a user action. +# +proc ttk::combobox::SelectEntry {cb index} { + $cb current $index + $cb selection range 0 end + $cb icursor end + event generate $cb <> -when mark +} + +## Scroll -- Mousewheel binding +# +proc ttk::combobox::Scroll {cb dir} { + $cb instate disabled { return } + set max [llength [$cb cget -values]] + set current [$cb current] + incr current $dir + if {$max != 0 && $current == $current % $max} { + SelectEntry $cb $current + } +} + +## LBSelected $lb -- Activation binding for listbox +# Set the combobox value to the currently-selected listbox value +# and unpost the listbox. +# +proc ttk::combobox::LBSelected {lb} { + set cb [LBMaster $lb] + LBSelect $lb + Unpost $cb + focus $cb +} + +## LBCancel -- +# Unpost the listbox. +# +proc ttk::combobox::LBCancel {lb} { + Unpost [LBMaster $lb] +} + +## LBTab -- Tab key binding for combobox listbox. +# Set the selection, and navigate to next/prev widget. +# +proc ttk::combobox::LBTab {lb dir} { + set cb [LBMaster $lb] + switch -- $dir { + next { set newFocus [tk_focusNext $cb] } + prev { set newFocus [tk_focusPrev $cb] } + } + + if {$newFocus ne ""} { + LBSelect $lb + Unpost $cb + # The [grab release] call in [Unpost] queues events that later + # re-set the focus (@@@ NOTE: this might not be true anymore). + # Set new focus later: + after 0 [list ttk::traverseTo $newFocus] + } +} + +## LBHover -- binding for combobox listbox. +# Follow selection on mouseover. +# +proc ttk::combobox::LBHover {w x y} { + $w selection clear 0 end + $w activate @$x,$y + $w selection set @$x,$y +} + +## MapPopdown -- binding for ComboboxPopdown +# +proc ttk::combobox::MapPopdown {w} { + [winfo parent $w] state pressed + ttk::globalGrab $w +} + +## UnmapPopdown -- binding for ComboboxPopdown +# +proc ttk::combobox::UnmapPopdown {w} { + [winfo parent $w] state !pressed + ttk::releaseGrab $w +} + +### +# + +namespace eval ::ttk::combobox { + # @@@ Until we have a proper native scrollbar on Aqua, use + # @@@ the regular Tk one. Use ttk::scrollbar on other platforms. + variable scrollbar ttk::scrollbar + if {[tk windowingsystem] eq "aqua"} { + set scrollbar ::scrollbar + } +} + +## PopdownWindow -- +# Returns the popdown widget associated with a combobox, +# creating it if necessary. +# +proc ttk::combobox::PopdownWindow {cb} { + variable scrollbar + + if {![winfo exists $cb.popdown]} { + set poplevel [PopdownToplevel $cb.popdown] + set popdown [ttk::frame $poplevel.f -style ComboboxPopdownFrame] + + $scrollbar $popdown.sb \ + -orient vertical -command [list $popdown.l yview] + listbox $popdown.l \ + -listvariable ttk::combobox::Values($cb) \ + -yscrollcommand [list $popdown.sb set] \ + -exportselection false \ + -selectmode browse \ + -activestyle none \ + ; + + bindtags $popdown.l \ + [list $popdown.l ComboboxListbox Listbox $popdown all] + + grid $popdown.l -row 0 -column 0 -padx {1 0} -pady 1 -sticky nsew + grid $popdown.sb -row 0 -column 1 -padx {0 1} -pady 1 -sticky ns + grid columnconfigure $popdown 0 -weight 1 + grid rowconfigure $popdown 0 -weight 1 + + grid $popdown -sticky news -padx 0 -pady 0 + grid rowconfigure $poplevel 0 -weight 1 + grid columnconfigure $poplevel 0 -weight 1 + } + return $cb.popdown +} + +## PopdownToplevel -- Create toplevel window for the combobox popdown +# +# See also <> +# +proc ttk::combobox::PopdownToplevel {w} { + toplevel $w -class ComboboxPopdown + wm withdraw $w + switch -- [tk windowingsystem] { + default - + x11 { + $w configure -relief flat -borderwidth 0 + wm attributes $w -type combo + wm overrideredirect $w true + } + win32 { + $w configure -relief flat -borderwidth 0 + wm overrideredirect $w true + wm attributes $w -topmost 1 + } + aqua { + $w configure -relief solid -borderwidth 0 + tk::unsupported::MacWindowStyle style $w \ + help {noActivates hideOnSuspend} + wm resizable $w 0 0 + } + } + return $w +} + +## ConfigureListbox -- +# Set listbox values, selection, height, and scrollbar visibility +# from current combobox values. +# +proc ttk::combobox::ConfigureListbox {cb} { + variable Values + + set popdown [PopdownWindow $cb].f + set values [$cb cget -values] + set current [$cb current] + if {$current < 0} { + set current 0 ;# no current entry, highlight first one + } + set Values($cb) $values + $popdown.l selection clear 0 end + $popdown.l selection set $current + $popdown.l activate $current + $popdown.l see $current + set height [llength $values] + if {$height > [$cb cget -height]} { + set height [$cb cget -height] + grid $popdown.sb + grid configure $popdown.l -padx {1 0} + } else { + grid remove $popdown.sb + grid configure $popdown.l -padx 1 + } + $popdown.l configure -height $height +} + +## PlacePopdown -- +# Set popdown window geometry. +# +# @@@TODO: factor with menubutton::PostPosition +# +proc ttk::combobox::PlacePopdown {cb popdown} { + set x [winfo rootx $cb] + set y [winfo rooty $cb] + set w [winfo width $cb] + set h [winfo height $cb] + set postoffset [ttk::style lookup TCombobox -postoffset {} {0 0 0 0}] + foreach var {x y w h} delta $postoffset { + incr $var $delta + } + + set H [winfo reqheight $popdown] + if {$y + $h + $H > [winfo screenheight $popdown]} { + set Y [expr {$y - $H}] + } else { + set Y [expr {$y + $h}] + } + wm geometry $popdown ${w}x${H}+${x}+${Y} +} + +## Post $cb -- +# Pop down the associated listbox. +# +proc ttk::combobox::Post {cb} { + # Don't do anything if disabled: + # + $cb instate disabled { return } + + # ASSERT: ![$cb instate pressed] + + # Run -postcommand callback: + # + uplevel #0 [$cb cget -postcommand] + + set popdown [PopdownWindow $cb] + ConfigureListbox $cb + update idletasks ;# needed for geometry propagation. + PlacePopdown $cb $popdown + # See <> + switch -- [tk windowingsystem] { + x11 - win32 { wm transient $popdown [winfo toplevel $cb] } + } + + # Post the listbox: + # + wm attribute $popdown -topmost 1 + wm deiconify $popdown + raise $popdown +} + +## Unpost $cb -- +# Unpost the listbox. +# +proc ttk::combobox::Unpost {cb} { + if {[winfo exists $cb.popdown]} { + wm withdraw $cb.popdown + } + grab release $cb.popdown ;# in case of stuck or unexpected grab [#1239190] +} + +## LBMaster $lb -- +# Return the combobox main widget that owns the listbox. +# +proc ttk::combobox::LBMaster {lb} { + winfo parent [winfo parent [winfo parent $lb]] +} + +## LBSelect $lb -- +# Transfer listbox selection to combobox value. +# +proc ttk::combobox::LBSelect {lb} { + set cb [LBMaster $lb] + set selection [$lb curselection] + if {[llength $selection] == 1} { + SelectEntry $cb [lindex $selection 0] + } +} + +## LBCleanup $lb -- +# binding for combobox listboxes. +# Cleans up by unsetting the linked textvariable. +# +# Note: we can't just use { unset [%W cget -listvariable] } +# because the widget command is already gone when this binding fires). +# [winfo parent] still works, fortunately. +# +proc ttk::combobox::LBCleanup {lb} { + variable Values + unset Values([LBMaster $lb]) +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/cursors.tcl b/inkstitch/bin/tk/ttk/cursors.tcl new file mode 100644 index 0000000..75f7791 --- /dev/null +++ b/inkstitch/bin/tk/ttk/cursors.tcl @@ -0,0 +1,186 @@ +# +# Map symbolic cursor names to platform-appropriate cursors. +# +# The following cursors are defined: +# +# standard -- default cursor for most controls +# "" -- inherit cursor from parent window +# none -- no cursor +# +# text -- editable widgets (entry, text) +# link -- hyperlinks within text +# crosshair -- graphic selection, fine control +# busy -- operation in progress +# forbidden -- action not allowed +# +# hresize -- horizontal resizing +# vresize -- vertical resizing +# +# Also resize cursors for each of the compass points, +# {nw,n,ne,w,e,sw,s,se}resize. +# +# Platform notes: +# +# Windows doesn't distinguish resizing at the 8 compass points, +# only horizontal, vertical, and the two diagonals. +# +# OSX doesn't have resize cursors for nw, ne, sw, or se corners. +# We use the Tk-defined X11 fallbacks for these. +# +# X11 doesn't have a "forbidden" cursor (usually a slashed circle); +# "pirate" seems to be the conventional cursor for this purpose. +# +# Windows has an IDC_HELP cursor, but it's not available from Tk. +# +# Tk does not support "none" on Windows. +# + +namespace eval ttk { + + variable Cursors + + # Use X11 cursor names as defaults, since Tk supplies these + # on all platforms. + # + array set Cursors { + "" "" + none none + + standard left_ptr + text xterm + link hand2 + crosshair crosshair + busy watch + forbidden pirate + + hresize sb_h_double_arrow + vresize sb_v_double_arrow + + nresize top_side + sresize bottom_side + wresize left_side + eresize right_side + nwresize top_left_corner + neresize top_right_corner + swresize bottom_left_corner + seresize bottom_right_corner + move fleur + + } + + # Platform-specific overrides for Windows and OSX. + # + switch [tk windowingsystem] { + "win32" { + array set Cursors { + none {} + + standard arrow + text ibeam + link hand2 + crosshair crosshair + busy wait + forbidden no + + vresize size_ns + nresize size_ns + sresize size_ns + + wresize size_we + eresize size_we + hresize size_we + + nwresize size_nw_se + swresize size_ne_sw + + neresize size_ne_sw + seresize size_nw_se + } + } + + "aqua" { + if {[package vsatisfies [package provide Tk] 8.5]} { + # appeared 2007-04-23, Tk 8.5a6 + array set Cursors { + standard arrow + text ibeam + link pointinghand + crosshair crosshair + busy watch + forbidden notallowed + + hresize resizeleftright + vresize resizeupdown + nresize resizeup + sresize resizedown + wresize resizeleft + eresize resizeright + } + } + } + } +} + +## ttk::cursor $cursor -- +# Return platform-specific cursor for specified symbolic cursor. +# +proc ttk::cursor {name} { + variable Cursors + return $Cursors($name) +} + +## ttk::setCursor $w $cursor -- +# Set the cursor for specified window. +# +# [ttk::setCursor] should be used in bindings +# instead of directly calling [$w configure -cursor ...], +# as the latter always incurs a server round-trip and +# can lead to high CPU load (see [#1184746]) +# + +proc ttk::setCursor {w name} { + variable Cursors + if {[$w cget -cursor] ne $Cursors($name)} { + $w configure -cursor $Cursors($name) + } +} + +## Interactive test harness: +# +proc ttk::CursorSampler {f} { + ttk::frame $f + + set r 0 + foreach row { + {nwresize nresize neresize} + { wresize move eresize} + {swresize sresize seresize} + {text link crosshair} + {hresize vresize ""} + {busy forbidden ""} + {none standard ""} + } { + set c 0 + foreach cursor $row { + set w $f.${r}${c} + ttk::label $w -text $cursor -cursor [ttk::cursor $cursor] \ + -relief solid -borderwidth 1 -padding 3 + grid $w -row $r -column $c -sticky nswe + grid columnconfigure $f $c -uniform cols -weight 1 + incr c + } + grid rowconfigure $f $r -uniform rows -weight 1 + incr r + } + + return $f +} + +if {[info exists argv0] && $argv0 eq [info script]} { + wm title . "[array size ::ttk::Cursors] cursors" + pack [ttk::CursorSampler .f] -expand true -fill both + bind . [list destroy .] + focus .f +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/defaults.tcl b/inkstitch/bin/tk/ttk/defaults.tcl new file mode 100644 index 0000000..05a46bd --- /dev/null +++ b/inkstitch/bin/tk/ttk/defaults.tcl @@ -0,0 +1,125 @@ +# +# Settings for default theme. +# + +namespace eval ttk::theme::default { + variable colors + array set colors { + -frame "#d9d9d9" + -foreground "#000000" + -window "#ffffff" + -text "#000000" + -activebg "#ececec" + -selectbg "#4a6984" + -selectfg "#ffffff" + -darker "#c3c3c3" + -disabledfg "#a3a3a3" + -indicator "#4a6984" + } + + ttk::style theme settings default { + + ttk::style configure "." \ + -borderwidth 1 \ + -background $colors(-frame) \ + -foreground $colors(-foreground) \ + -troughcolor $colors(-darker) \ + -font TkDefaultFont \ + -selectborderwidth 1 \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -insertwidth 1 \ + -indicatordiameter 10 \ + ; + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] + ttk::style map "." -foreground \ + [list disabled $colors(-disabledfg)] + + ttk::style configure TButton \ + -anchor center -padding "3 3" -width -9 \ + -relief raised -shiftrelief 1 + ttk::style map TButton -relief [list {!disabled pressed} sunken] + + ttk::style configure TCheckbutton \ + -indicatorcolor "#ffffff" -indicatorrelief sunken -padding 1 + ttk::style map TCheckbutton -indicatorcolor \ + [list pressed $colors(-activebg) selected $colors(-indicator)] + + ttk::style configure TRadiobutton \ + -indicatorcolor "#ffffff" -indicatorrelief sunken -padding 1 + ttk::style map TRadiobutton -indicatorcolor \ + [list pressed $colors(-activebg) selected $colors(-indicator)] + + ttk::style configure TMenubutton \ + -relief raised -padding "10 3" + + ttk::style configure TEntry \ + -relief sunken -fieldbackground white -padding 1 + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TCombobox -arrowsize 12 -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TLabelframe \ + -relief groove -borderwidth 2 + + ttk::style configure TScrollbar \ + -width 12 -arrowsize 12 + ttk::style map TScrollbar \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TScale \ + -sliderrelief raised + ttk::style configure TProgressbar \ + -background $colors(-selectbg) + + ttk::style configure TNotebook.Tab \ + -padding {4 2} -background $colors(-darker) + ttk::style map TNotebook.Tab \ + -background [list selected $colors(-frame)] + + # Treeview. + # + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview \ + -background $colors(-window) \ + -foreground $colors(-text) ; + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + # Combobox popdown frame + ttk::style layout ComboboxPopdownFrame { + ComboboxPopdownFrame.border -sticky nswe + } + ttk::style configure ComboboxPopdownFrame \ + -borderwidth 1 -relief solid + + # + # Toolbar buttons: + # + ttk::style layout Toolbutton { + Toolbutton.border -children { + Toolbutton.padding -children { + Toolbutton.label + } + } + } + + ttk::style configure Toolbutton \ + -padding 2 -relief flat + ttk::style map Toolbutton -relief \ + [list disabled flat selected sunken pressed sunken active raised] + ttk::style map Toolbutton -background \ + [list pressed $colors(-darker) active $colors(-activebg)] + } +} diff --git a/inkstitch/bin/tk/ttk/entry.tcl b/inkstitch/bin/tk/ttk/entry.tcl new file mode 100644 index 0000000..2c9fbc8 --- /dev/null +++ b/inkstitch/bin/tk/ttk/entry.tcl @@ -0,0 +1,585 @@ +# +# DERIVED FROM: tk/library/entry.tcl r1.22 +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 2004, Joe English +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +namespace eval ttk { + namespace eval entry { + variable State + + set State(x) 0 + set State(selectMode) char + set State(anchor) 0 + set State(scanX) 0 + set State(scanIndex) 0 + set State(scanMoved) 0 + + # Button-2 scan speed is (scanNum/scanDen) characters + # per pixel of mouse movement. + # The standard Tk entry widget uses the equivalent of + # scanNum = 10, scanDen = average character width. + # I don't know why that was chosen. + # + set State(scanNum) 1 + set State(scanDen) 1 + set State(deadband) 3 ;# #pixels for mouse-moved deadband. + } +} + +### Option database settings. +# +option add *TEntry.cursor [ttk::cursor text] + +### Bindings. +# +# Removed the following standard Tk bindings: +# +# , , +# , : +# ttk::entry widget doesn't use selection anchor. +# : +# Inserts PRIMARY selection (on non-Windows platforms). +# This is inconsistent with typical platform bindings. +# , : +# These don't do the right thing to start with. +# , , , +# , : +# Judgment call. If happens to be assigned to the Alt key, +# these could conflict with application accelerators. +# (Plus, who has a Meta key these days?) +# : +# Another judgment call. If anyone misses this, let me know +# and I'll put it back. +# + +## Clipboard events: +# +bind TEntry <> { ttk::entry::Cut %W } +bind TEntry <> { ttk::entry::Copy %W } +bind TEntry <> { ttk::entry::Paste %W } +bind TEntry <> { ttk::entry::Clear %W } + +## Button1 bindings: +# Used for selection and navigation. +# +bind TEntry { ttk::entry::Press %W %x } +bind TEntry { ttk::entry::Shift-Press %W %x } +bind TEntry { ttk::entry::Select %W %x word } +bind TEntry { ttk::entry::Select %W %x line } +bind TEntry { ttk::entry::Drag %W %x } + +bind TEntry { ttk::Repeatedly ttk::entry::AutoScroll %W } +bind TEntry { ttk::CancelRepeat } +bind TEntry { ttk::CancelRepeat } + +bind TEntry { + %W instate {!readonly !disabled} { %W icursor @%x ; focus %W } +} + +## Button2 bindings: +# Used for scanning and primary transfer. +# Note: ButtonRelease-2 is mapped to <> in tk.tcl. +# +bind TEntry { ttk::entry::ScanMark %W %x } +bind TEntry { ttk::entry::ScanDrag %W %x } +bind TEntry { ttk::entry::ScanRelease %W %x } +bind TEntry <> { ttk::entry::ScanRelease %W %x } + +## Keyboard navigation bindings: +# +bind TEntry { ttk::entry::Move %W prevchar } +bind TEntry { ttk::entry::Move %W nextchar } +bind TEntry { ttk::entry::Move %W prevword } +bind TEntry { ttk::entry::Move %W nextword } +bind TEntry { ttk::entry::Move %W home } +bind TEntry { ttk::entry::Move %W end } + +bind TEntry { ttk::entry::Extend %W prevchar } +bind TEntry { ttk::entry::Extend %W nextchar } +bind TEntry { ttk::entry::Extend %W prevword } +bind TEntry { ttk::entry::Extend %W nextword } +bind TEntry { ttk::entry::Extend %W home } +bind TEntry { ttk::entry::Extend %W end } + +bind TEntry { %W selection range 0 end } +bind TEntry { %W selection clear } + +bind TEntry <> { %W selection range 0 end; %W icursor end } + +## Edit bindings: +# +bind TEntry { ttk::entry::Insert %W %A } +bind TEntry { ttk::entry::Delete %W } +bind TEntry { ttk::entry::Backspace %W } + +# Ignore all Alt, Meta, and Control keypresses unless explicitly bound. +# Otherwise, the class binding will fire and insert the character. +# Ditto for Escape, Return, and Tab. +# +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} + +# Argh. Apparently on Windows, the NumLock modifier is interpreted +# as a Command modifier. +if {[tk windowingsystem] eq "aqua"} { + bind TEntry {# nothing} +} +# Tk-on-Cocoa generates characters for these two keys. [Bug 2971663] +bind TEntry {# nothing} +bind TEntry {# nothing} + +## Additional emacs-like bindings: +# +bind TEntry { ttk::entry::Move %W home } +bind TEntry { ttk::entry::Move %W prevchar } +bind TEntry { ttk::entry::Delete %W } +bind TEntry { ttk::entry::Move %W end } +bind TEntry { ttk::entry::Move %W nextchar } +bind TEntry { ttk::entry::Backspace %W } +bind TEntry { %W delete insert end } + +### Clipboard procedures. +# + +## EntrySelection -- Return the selected text of the entry. +# Raises an error if there is no selection. +# +proc ttk::entry::EntrySelection {w} { + set entryString [string range [$w get] [$w index sel.first] \ + [expr {[$w index sel.last] - 1}]] + if {[$w cget -show] ne ""} { + return [string repeat [string index [$w cget -show] 0] \ + [string length $entryString]] + } + return $entryString +} + +## Paste -- Insert clipboard contents at current insert point. +# +proc ttk::entry::Paste {w} { + catch { + set clipboard [::tk::GetSelection $w CLIPBOARD] + PendingDelete $w + $w insert insert $clipboard + See $w insert + } +} + +## Copy -- Copy selection to clipboard. +# +proc ttk::entry::Copy {w} { + if {![catch {EntrySelection $w} selection]} { + clipboard clear -displayof $w + clipboard append -displayof $w $selection + } +} + +## Clear -- Delete the selection. +# +proc ttk::entry::Clear {w} { + catch { $w delete sel.first sel.last } +} + +## Cut -- Copy selection to clipboard then delete it. +# +proc ttk::entry::Cut {w} { + Copy $w; Clear $w +} + +### Navigation procedures. +# + +## ClosestGap -- Find closest boundary between characters. +# Returns the index of the character just after the boundary. +# +proc ttk::entry::ClosestGap {w x} { + set pos [$w index @$x] + set bbox [$w bbox $pos] + if {$x - [lindex $bbox 0] > [lindex $bbox 2]/2} { + incr pos + } + return $pos +} + +## See $index -- Make sure that the character at $index is visible. +# +proc ttk::entry::See {w {index insert}} { + update idletasks ;# ensure scroll data up-to-date + set c [$w index $index] + # @@@ OR: check [$w index left] / [$w index right] + if {$c < [$w index @0] || $c >= [$w index @[winfo width $w]]} { + $w xview $c + } +} + +## NextWord -- Find the next word position. +# Note: The "next word position" follows platform conventions: +# either the next end-of-word position, or the start-of-word +# position following the next end-of-word position. +# +set ::ttk::entry::State(startNext) \ + [string equal [tk windowingsystem] "win32"] + +proc ttk::entry::NextWord {w start} { + variable State + set pos [tcl_endOfWord [$w get] [$w index $start]] + if {$pos >= 0 && $State(startNext)} { + set pos [tcl_startOfNextWord [$w get] $pos] + } + if {$pos < 0} { + return end + } + return $pos +} + +## PrevWord -- Find the previous word position. +# +proc ttk::entry::PrevWord {w start} { + set pos [tcl_startOfPreviousWord [$w get] [$w index $start]] + if {$pos < 0} { + return 0 + } + return $pos +} + +## RelIndex -- Compute character/word/line-relative index. +# +proc ttk::entry::RelIndex {w where {index insert}} { + switch -- $where { + prevchar { expr {[$w index $index] - 1} } + nextchar { expr {[$w index $index] + 1} } + prevword { PrevWord $w $index } + nextword { NextWord $w $index } + home { return 0 } + end { $w index end } + default { error "Bad relative index $index" } + } +} + +## Move -- Move insert cursor to relative location. +# Also clears the selection, if any, and makes sure +# that the insert cursor is visible. +# +proc ttk::entry::Move {w where} { + $w icursor [RelIndex $w $where] + $w selection clear + See $w insert +} + +### Selection procedures. +# + +## ExtendTo -- Extend the selection to the specified index. +# +# The other end of the selection (the anchor) is determined as follows: +# +# (1) if there is no selection, the anchor is the insert cursor; +# (2) if the index is outside the selection, grow the selection; +# (3) if the insert cursor is at one end of the selection, anchor the other end +# (4) otherwise anchor the start of the selection +# +# The insert cursor is placed at the new end of the selection. +# +# Returns: selection anchor. +# +proc ttk::entry::ExtendTo {w index} { + set index [$w index $index] + set insert [$w index insert] + + # Figure out selection anchor: + if {![$w selection present]} { + set anchor $insert + } else { + set selfirst [$w index sel.first] + set sellast [$w index sel.last] + + if { ($index < $selfirst) + || ($insert == $selfirst && $index <= $sellast) + } { + set anchor $sellast + } else { + set anchor $selfirst + } + } + + # Extend selection: + if {$anchor < $index} { + $w selection range $anchor $index + } else { + $w selection range $index $anchor + } + + $w icursor $index + return $anchor +} + +## Extend -- Extend the selection to a relative position, show insert cursor +# +proc ttk::entry::Extend {w where} { + ExtendTo $w [RelIndex $w $where] + See $w +} + +### Button 1 binding procedures. +# +# Double-clicking followed by a drag enters "word-select" mode. +# Triple-clicking enters "line-select" mode. +# + +## Press -- ButtonPress-1 binding. +# Set the insertion cursor, claim the input focus, set up for +# future drag operations. +# +proc ttk::entry::Press {w x} { + variable State + + $w icursor [ClosestGap $w $x] + $w selection clear + $w instate !disabled { focus $w } + + # Set up for future drag, double-click, or triple-click. + set State(x) $x + set State(selectMode) char + set State(anchor) [$w index insert] +} + +## Shift-Press -- Shift-ButtonPress-1 binding. +# Extends the selection, sets anchor for future drag operations. +# +proc ttk::entry::Shift-Press {w x} { + variable State + + focus $w + set anchor [ExtendTo $w @$x] + + set State(x) $x + set State(selectMode) char + set State(anchor) $anchor +} + +## Select $w $x $mode -- Binding for double- and triple- clicks. +# Selects a word or line (according to mode), +# and sets the selection mode for subsequent drag operations. +# +proc ttk::entry::Select {w x mode} { + variable State + set cur [ClosestGap $w $x] + + switch -- $mode { + word { WordSelect $w $cur $cur } + line { LineSelect $w $cur $cur } + char { # no-op } + } + + set State(anchor) $cur + set State(selectMode) $mode +} + +## Drag -- Button1 motion binding. +# +proc ttk::entry::Drag {w x} { + variable State + set State(x) $x + DragTo $w $x +} + +## DragTo $w $x -- Extend selection to $x based on current selection mode. +# +proc ttk::entry::DragTo {w x} { + variable State + + set cur [ClosestGap $w $x] + switch $State(selectMode) { + char { CharSelect $w $State(anchor) $cur } + word { WordSelect $w $State(anchor) $cur } + line { LineSelect $w $State(anchor) $cur } + } +} + +## AutoScroll +# Called repeatedly when the mouse is outside an entry window +# with Button 1 down. Scroll the window left or right, +# depending on where the mouse is, and extend the selection +# according to the current selection mode. +# +# TODO: AutoScroll should repeat faster (50ms) than normal autorepeat. +# TODO: Need a way for Repeat scripts to cancel themselves. +# +proc ttk::entry::AutoScroll {w} { + variable State + if {![winfo exists $w]} return + set x $State(x) + if {$x > [winfo width $w]} { + $w xview scroll 2 units + DragTo $w $x + } elseif {$x < 0} { + $w xview scroll -2 units + DragTo $w $x + } +} + +## CharSelect -- select characters between index $from and $to +# +proc ttk::entry::CharSelect {w from to} { + if {$to <= $from} { + $w selection range $to $from + } else { + $w selection range $from $to + } + $w icursor $to +} + +## WordSelect -- Select whole words between index $from and $to +# +proc ttk::entry::WordSelect {w from to} { + if {$to < $from} { + set first [WordBack [$w get] $to] + set last [WordForward [$w get] $from] + $w icursor $first + } else { + set first [WordBack [$w get] $from] + set last [WordForward [$w get] $to] + $w icursor $last + } + $w selection range $first $last +} + +## WordBack, WordForward -- helper routines for WordSelect. +# +proc ttk::entry::WordBack {text index} { + if {[set pos [tcl_wordBreakBefore $text $index]] < 0} { return 0 } + return $pos +} +proc ttk::entry::WordForward {text index} { + if {[set pos [tcl_wordBreakAfter $text $index]] < 0} { return end } + return $pos +} + +## LineSelect -- Select the entire line. +# +proc ttk::entry::LineSelect {w _ _} { + variable State + $w selection range 0 end + $w icursor end +} + +### Button 2 binding procedures. +# + +## ScanMark -- ButtonPress-2 binding. +# Marks the start of a scan or primary transfer operation. +# +proc ttk::entry::ScanMark {w x} { + variable State + set State(scanX) $x + set State(scanIndex) [$w index @0] + set State(scanMoved) 0 +} + +## ScanDrag -- Button2 motion binding. +# +proc ttk::entry::ScanDrag {w x} { + variable State + + set dx [expr {$State(scanX) - $x}] + if {abs($dx) > $State(deadband)} { + set State(scanMoved) 1 + } + set left [expr {$State(scanIndex) + ($dx*$State(scanNum))/$State(scanDen)}] + $w xview $left + + if {$left != [set newLeft [$w index @0]]} { + # We've scanned past one end of the entry; + # reset the mark so that the text will start dragging again + # as soon as the mouse reverses direction. + # + set State(scanX) $x + set State(scanIndex) $newLeft + } +} + +## ScanRelease -- Button2 release binding. +# Do a primary transfer if the mouse has not moved since the button press. +# +proc ttk::entry::ScanRelease {w x} { + variable State + if {!$State(scanMoved)} { + $w instate {!disabled !readonly} { + $w icursor [ClosestGap $w $x] + catch {$w insert insert [::tk::GetSelection $w PRIMARY]} + } + } +} + +### Insertion and deletion procedures. +# + +## PendingDelete -- Delete selection prior to insert. +# If the entry currently has a selection, delete it and +# set the insert position to where the selection was. +# Returns: 1 if pending delete occurred, 0 if nothing was selected. +# +proc ttk::entry::PendingDelete {w} { + if {[$w selection present]} { + $w icursor sel.first + $w delete sel.first sel.last + return 1 + } + return 0 +} + +## Insert -- Insert text into the entry widget. +# If a selection is present, the new text replaces it. +# Otherwise, the new text is inserted at the insert cursor. +# +proc ttk::entry::Insert {w s} { + if {$s eq ""} { return } + PendingDelete $w + $w insert insert $s + See $w insert +} + +## Backspace -- Backspace over the character just before the insert cursor. +# If there is a selection, delete that instead. +# If the new insert position is offscreen to the left, +# scroll to place the cursor at about the middle of the window. +# +proc ttk::entry::Backspace {w} { + if {[PendingDelete $w]} { + See $w + return + } + set x [expr {[$w index insert] - 1}] + if {$x < 0} { return } + + $w delete $x + + if {[$w index @0] >= [$w index insert]} { + set range [$w xview] + set left [lindex $range 0] + set right [lindex $range 1] + $w xview moveto [expr {$left - ($right - $left)/2.0}] + } +} + +## Delete -- Delete the character after the insert cursor. +# If there is a selection, delete that instead. +# +proc ttk::entry::Delete {w} { + if {![PendingDelete $w]} { + $w delete insert + } +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/fonts.tcl b/inkstitch/bin/tk/ttk/fonts.tcl new file mode 100644 index 0000000..52298c5 --- /dev/null +++ b/inkstitch/bin/tk/ttk/fonts.tcl @@ -0,0 +1,157 @@ +# +# Font specifications. +# +# This file, [source]d at initialization time, sets up the following +# symbolic fonts based on the current platform: +# +# TkDefaultFont -- default for GUI items not otherwise specified +# TkTextFont -- font for user text (entry, listbox, others) +# TkFixedFont -- standard fixed width font +# TkHeadingFont -- headings (column headings, etc) +# TkCaptionFont -- dialog captions (primary text in alert dialogs, etc.) +# TkTooltipFont -- font to use for tooltip windows +# TkIconFont -- font to use for icon captions +# TkMenuFont -- used to use for menu items +# +# In Tk 8.5, some of these fonts may be provided by the TIP#145 implementation +# (On Windows and Mac OS X as of Oct 2007). +# +# +++ Platform notes: +# +# Windows: +# The default system font changed from "MS Sans Serif" to "Tahoma" +# in Windows XP/Windows 2000. +# +# MS documentation says to use "Tahoma 8" in Windows 2000/XP, +# although many MS programs still use "MS Sans Serif 8" +# +# Should use SystemParametersInfo() instead. +# +# Mac OSX / Aqua: +# Quoth the Apple HIG: +# The _system font_ (Lucida Grande Regular 13 pt) is used for text +# in menus, dialogs, and full-size controls. +# [...] Use the _view font_ (Lucida Grande Regular 12pt) as the default +# font of text in lists and tables. +# [...] Use the _emphasized system font_ (Lucida Grande Bold 13 pt) +# sparingly. It is used for the message text in alerts. +# [...] The _small system font_ (Lucida Grande Regular 11 pt) [...] +# is also the default font for column headings in lists, for help tags, +# and for small controls. +# +# Note that the font for column headings (TkHeadingFont) is +# _smaller_ than the default font. +# +# There does not appear to be any recommendations for fixed-width fonts. +# +# X11: +# Need a way to tell if Xft is enabled or not. +# For now, assume patch #971980 applied. +# +# "Classic" look used Helvetica bold for everything except +# for entry widgets, which use Helvetica medium. +# Most other toolkits use medium weight for all UI elements, +# which is what we do now. +# +# Font size specified in pixels on X11, not points. +# This is Theoretically Wrong, but in practice works better; using +# points leads to huge inconsistencies across different servers. +# + +namespace eval ttk { + +set tip145 [catch {font create TkDefaultFont}] +catch {font create TkTextFont} +catch {font create TkHeadingFont} +catch {font create TkCaptionFont} +catch {font create TkTooltipFont} +catch {font create TkFixedFont} +catch {font create TkIconFont} +catch {font create TkMenuFont} +catch {font create TkSmallCaptionFont} + +if {!$tip145} { +variable F ;# miscellaneous platform-specific font parameters +switch -- [tk windowingsystem] { + win32 { + # In safe interps there is no osVersion element. + if {[info exists tcl_platform(osVersion)]} { + if {$tcl_platform(osVersion) >= 5.0} { + set F(family) "Tahoma" + } else { + set F(family) "MS Sans Serif" + } + } else { + if {[lsearch -exact [font families] Tahoma] != -1} { + set F(family) "Tahoma" + } else { + set F(family) "MS Sans Serif" + } + } + set F(size) 8 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(size) + font configure TkCaptionFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(size) + font configure TkFixedFont -family Courier -size 10 + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(size) + font configure TkSmallCaptionFont -family $F(family) -size $F(size) + } + aqua { + set F(family) "Lucida Grande" + set F(fixed) "Monaco" + set F(menusize) 14 + set F(size) 13 + set F(viewsize) 12 + set F(smallsize) 11 + set F(labelsize) 10 + set F(fixedsize) 11 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(smallsize) + font configure TkCaptionFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(smallsize) + font configure TkFixedFont -family $F(fixed) -size $F(fixedsize) + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(menusize) + font configure TkSmallCaptionFont -family $F(family) -size $F(labelsize) + } + default - + x11 { + if {![catch {tk::pkgconfig get fontsystem} F(fs)] && $F(fs) eq "xft"} { + set F(family) "sans-serif" + set F(fixed) "monospace" + } else { + set F(family) "Helvetica" + set F(fixed) "courier" + } + set F(size) -12 + set F(ttsize) -10 + set F(capsize) -14 + set F(fixedsize) -12 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkCaptionFont -family $F(family) -size $F(capsize) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(ttsize) + font configure TkFixedFont -family $F(fixed) -size $F(fixedsize) + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(size) + font configure TkSmallCaptionFont -family $F(family) -size $F(ttsize) + } +} +unset -nocomplain F +} + +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/menubutton.tcl b/inkstitch/bin/tk/ttk/menubutton.tcl new file mode 100644 index 0000000..093bb02 --- /dev/null +++ b/inkstitch/bin/tk/ttk/menubutton.tcl @@ -0,0 +1,169 @@ +# +# Bindings for Menubuttons. +# +# Menubuttons have three interaction modes: +# +# Pulldown: Press menubutton, drag over menu, release to activate menu entry +# Popdown: Click menubutton to post menu +# Keyboard: or accelerator key to post menu +# +# (In addition, when menu system is active, "dropdown" -- menu posts +# on mouse-over. Ttk menubuttons don't implement this). +# +# For keyboard and popdown mode, we hand off to tk_popup and let +# the built-in Tk bindings handle the rest of the interaction. +# +# ON X11: +# +# Standard Tk menubuttons use a global grab on the menubutton. +# This won't work for Ttk menubuttons in pulldown mode, +# since we need to process the final event, +# and this might be delivered to the menu. So instead we +# rely on the passive grab that occurs on events, +# and transition to popdown mode when the mouse is released +# or dragged outside the menubutton. +# +# ON WINDOWS: +# +# I'm not sure what the hell is going on here. [$menu post] apparently +# sets up some kind of internal grab for native menus. +# On this platform, just use [tk_popup] for all menu actions. +# +# ON MACOS: +# +# Same probably applies here. +# + +namespace eval ttk { + namespace eval menubutton { + variable State + array set State { + pulldown 0 + oldcursor {} + } + } +} + +bind TMenubutton { %W instate !disabled {%W state active } } +bind TMenubutton { %W state !active } +bind TMenubutton { ttk::menubutton::Popdown %W } +bind TMenubutton <> { ttk::menubutton::Popdown %W } + +if {[tk windowingsystem] eq "x11"} { + bind TMenubutton { ttk::menubutton::Pulldown %W } + bind TMenubutton { ttk::menubutton::TransferGrab %W } + bind TMenubutton { ttk::menubutton::TransferGrab %W } +} else { + bind TMenubutton \ + { %W state pressed ; ttk::menubutton::Popdown %W } + bind TMenubutton \ + { %W state !pressed } +} + +# PostPosition -- +# Returns the x and y coordinates where the menu +# should be posted, based on the menubutton and menu size +# and -direction option. +# +# TODO: adjust menu width to be at least as wide as the button +# for -direction above, below. +# +proc ttk::menubutton::PostPosition {mb menu} { + set x [winfo rootx $mb] + set y [winfo rooty $mb] + set dir [$mb cget -direction] + + set bw [winfo width $mb] + set bh [winfo height $mb] + set mw [winfo reqwidth $menu] + set mh [winfo reqheight $menu] + set sw [expr {[winfo screenwidth $menu] - $bw - $mw}] + set sh [expr {[winfo screenheight $menu] - $bh - $mh}] + + switch -- $dir { + above { if {$y >= $mh} { incr y -$mh } { incr y $bh } } + below { if {$y <= $sh} { incr y $bh } { incr y -$mh } } + left { if {$x >= $mw} { incr x -$mw } { incr x $bw } } + right { if {$x <= $sw} { incr x $bw } { incr x -$mw } } + flush { + # post menu atop menubutton. + # If there's a menu entry whose label matches the + # menubutton -text, assume this is an optionmenu + # and place that entry over the menubutton. + set index [FindMenuEntry $menu [$mb cget -text]] + if {$index ne ""} { + incr y -[$menu yposition $index] + } + } + } + + return [list $x $y] +} + +# Popdown -- +# Post the menu and set a grab on the menu. +# +proc ttk::menubutton::Popdown {mb} { + if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { + return + } + foreach {x y} [PostPosition $mb $menu] { break } + tk_popup $menu $x $y +} + +# Pulldown (X11 only) -- +# Called when Button1 is pressed on a menubutton. +# Posts the menu; a subsequent ButtonRelease +# or Leave event will set a grab on the menu. +# +proc ttk::menubutton::Pulldown {mb} { + variable State + if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { + return + } + foreach {x y} [PostPosition $mb $menu] { break } + set State(pulldown) 1 + set State(oldcursor) [$mb cget -cursor] + + $mb state pressed + $mb configure -cursor [$menu cget -cursor] + $menu post $x $y + tk_menuSetFocus $menu +} + +# TransferGrab (X11 only) -- +# Switch from pulldown mode (menubutton has an implicit grab) +# to popdown mode (menu has an explicit grab). +# +proc ttk::menubutton::TransferGrab {mb} { + variable State + if {$State(pulldown)} { + $mb configure -cursor $State(oldcursor) + $mb state {!pressed !active} + set State(pulldown) 0 + + set menu [$mb cget -menu] + tk_popup $menu [winfo rootx $menu] [winfo rooty $menu] + } +} + +# FindMenuEntry -- +# Hack to support tk_optionMenus. +# Returns the index of the menu entry with a matching -label, +# -1 if not found. +# +proc ttk::menubutton::FindMenuEntry {menu s} { + set last [$menu index last] + if {$last eq "none"} { + return "" + } + for {set i 0} {$i <= $last} {incr i} { + if {![catch {$menu entrycget $i -label} label] + && ($label eq $s)} { + return $i + } + } + return "" +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/notebook.tcl b/inkstitch/bin/tk/ttk/notebook.tcl new file mode 100644 index 0000000..d424b6c --- /dev/null +++ b/inkstitch/bin/tk/ttk/notebook.tcl @@ -0,0 +1,197 @@ +# +# Bindings for TNotebook widget +# + +namespace eval ttk::notebook { + variable TLNotebooks ;# See enableTraversal +} + +bind TNotebook { ttk::notebook::Press %W %x %y } +bind TNotebook { ttk::notebook::CycleTab %W 1; break } +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +bind TNotebook { ttk::notebook::CycleTab %W 1; break } +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +catch { +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +} +bind TNotebook { ttk::notebook::Cleanup %W } + +# ActivateTab $nb $tab -- +# Select the specified tab and set focus. +# +# Desired behavior: +# + take focus when reselecting the currently-selected tab; +# + keep focus if the notebook already has it; +# + otherwise set focus to the first traversable widget +# in the newly-selected tab; +# + do not leave the focus in a deselected tab. +# +proc ttk::notebook::ActivateTab {w tab} { + set oldtab [$w select] + $w select $tab + set newtab [$w select] ;# NOTE: might not be $tab, if $tab is disabled + + if {[focus] eq $w} { return } + if {$newtab eq $oldtab} { focus $w ; return } + + update idletasks ;# needed so focus logic sees correct mapped states + if {[set f [ttk::focusFirst $newtab]] ne ""} { + ttk::traverseTo $f + } else { + focus $w + } +} + +# Press $nb $x $y -- +# ButtonPress-1 binding for notebook widgets. +# Activate the tab under the mouse cursor, if any. +# +proc ttk::notebook::Press {w x y} { + set index [$w index @$x,$y] + if {$index ne ""} { + ActivateTab $w $index + } +} + +# CycleTab -- +# Select the next/previous tab in the list. +# +proc ttk::notebook::CycleTab {w dir} { + if {[$w index end] != 0} { + set current [$w index current] + set select [expr {($current + $dir) % [$w index end]}] + while {[$w tab $select -state] != "normal" && ($select != $current)} { + set select [expr {($select + $dir) % [$w index end]}] + } + if {$select != $current} { + ActivateTab $w $select + } + } +} + +# MnemonicTab $nb $key -- +# Scan all tabs in the specified notebook for one with the +# specified mnemonic. If found, returns path name of tab; +# otherwise returns "" +# +proc ttk::notebook::MnemonicTab {nb key} { + set key [string toupper $key] + foreach tab [$nb tabs] { + set label [$nb tab $tab -text] + set underline [$nb tab $tab -underline] + set mnemonic [string toupper [string index $label $underline]] + if {$mnemonic ne "" && $mnemonic eq $key} { + return $tab + } + } + return "" +} + +# +++ Toplevel keyboard traversal. +# + +# enableTraversal -- +# Enable keyboard traversal for a notebook widget +# by adding bindings to the containing toplevel window. +# +# TLNotebooks($top) keeps track of the list of all traversal-enabled +# notebooks contained in the toplevel +# +proc ttk::notebook::enableTraversal {nb} { + variable TLNotebooks + + set top [winfo toplevel $nb] + + if {![info exists TLNotebooks($top)]} { + # Augment $top bindings: + # + bind $top {+ttk::notebook::TLCycleTab %W 1} + bind $top {+ttk::notebook::TLCycleTab %W -1} + bind $top {+ttk::notebook::TLCycleTab %W 1} + bind $top {+ttk::notebook::TLCycleTab %W -1} + catch { + bind $top {+ttk::notebook::TLCycleTab %W -1} + } + if {[tk windowingsystem] eq "aqua"} { + bind $top \ + +[list ttk::notebook::MnemonicActivation $top %K] + } else { + bind $top \ + +[list ttk::notebook::MnemonicActivation $top %K] + } + bind $top {+ttk::notebook::TLCleanup %W} + } + + lappend TLNotebooks($top) $nb +} + +# TLCleanup -- binding for traversal-enabled toplevels +# +proc ttk::notebook::TLCleanup {w} { + variable TLNotebooks + if {$w eq [winfo toplevel $w]} { + unset -nocomplain -please TLNotebooks($w) + } +} + +# Cleanup -- binding for notebooks +# +proc ttk::notebook::Cleanup {nb} { + variable TLNotebooks + set top [winfo toplevel $nb] + if {[info exists TLNotebooks($top)]} { + set index [lsearch -exact $TLNotebooks($top) $nb] + set TLNotebooks($top) [lreplace $TLNotebooks($top) $index $index] + } +} + +# EnclosingNotebook $w -- +# Return the nearest traversal-enabled notebook widget +# that contains $w. +# +# BUGS: this only works properly for tabs that are direct children +# of the notebook widget. This routine should follow the +# geometry manager hierarchy, not window ancestry, but that +# information is not available in Tk. +# +proc ttk::notebook::EnclosingNotebook {w} { + variable TLNotebooks + + set top [winfo toplevel $w] + if {![info exists TLNotebooks($top)]} { return } + + while {$w ne $top && $w ne ""} { + if {[lsearch -exact $TLNotebooks($top) $w] >= 0} { + return $w + } + set w [winfo parent $w] + } + return "" +} + +# TLCycleTab -- +# toplevel binding procedure for Control-Tab / Shift-Control-Tab +# Select the next/previous tab in the nearest ancestor notebook. +# +proc ttk::notebook::TLCycleTab {w dir} { + set nb [EnclosingNotebook $w] + if {$nb ne ""} { + CycleTab $nb $dir + return -code break + } +} + +# MnemonicActivation $nb $key -- +# Alt-KeyPress binding procedure for mnemonic activation. +# Scan all notebooks in specified toplevel for a tab with the +# the specified mnemonic. If found, activate it and return TCL_BREAK. +# +proc ttk::notebook::MnemonicActivation {top key} { + variable TLNotebooks + foreach nb $TLNotebooks($top) { + if {[set tab [MnemonicTab $nb $key]] ne ""} { + ActivateTab $nb [$nb index $tab] + return -code break + } + } +} diff --git a/inkstitch/bin/tk/ttk/panedwindow.tcl b/inkstitch/bin/tk/ttk/panedwindow.tcl new file mode 100644 index 0000000..a2e073b --- /dev/null +++ b/inkstitch/bin/tk/ttk/panedwindow.tcl @@ -0,0 +1,82 @@ +# +# Bindings for ttk::panedwindow widget. +# + +namespace eval ttk::panedwindow { + variable State + array set State { + pressed 0 + pressX - + pressY - + sash - + sashPos - + } +} + +## Bindings: +# +bind TPanedwindow { ttk::panedwindow::Press %W %x %y } +bind TPanedwindow { ttk::panedwindow::Drag %W %x %y } +bind TPanedwindow { ttk::panedwindow::Release %W %x %y } + +bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } +bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } +bind TPanedwindow { ttk::panedwindow::ResetCursor %W } +# See <> +bind TPanedwindow <> { ttk::panedwindow::ResetCursor %W } + +## Sash movement: +# +proc ttk::panedwindow::Press {w x y} { + variable State + + set sash [$w identify $x $y] + if {$sash eq ""} { + set State(pressed) 0 + return + } + set State(pressed) 1 + set State(pressX) $x + set State(pressY) $y + set State(sash) $sash + set State(sashPos) [$w sashpos $sash] +} + +proc ttk::panedwindow::Drag {w x y} { + variable State + if {!$State(pressed)} { return } + switch -- [$w cget -orient] { + horizontal { set delta [expr {$x - $State(pressX)}] } + vertical { set delta [expr {$y - $State(pressY)}] } + } + $w sashpos $State(sash) [expr {$State(sashPos) + $delta}] +} + +proc ttk::panedwindow::Release {w x y} { + variable State + set State(pressed) 0 + SetCursor $w $x $y +} + +## Cursor management: +# +proc ttk::panedwindow::ResetCursor {w} { + variable State + if {!$State(pressed)} { + ttk::setCursor $w {} + } +} + +proc ttk::panedwindow::SetCursor {w x y} { + set cursor "" + if {[llength [$w identify $x $y]]} { + # Assume we're over a sash. + switch -- [$w cget -orient] { + horizontal { set cursor hresize } + vertical { set cursor vresize } + } + } + ttk::setCursor $w $cursor +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/progress.tcl b/inkstitch/bin/tk/ttk/progress.tcl new file mode 100644 index 0000000..34dce72 --- /dev/null +++ b/inkstitch/bin/tk/ttk/progress.tcl @@ -0,0 +1,49 @@ +# +# Ttk widget set: progress bar utilities. +# + +namespace eval ttk::progressbar { + variable Timers ;# Map: widget name -> after ID +} + +# Autoincrement -- +# Periodic callback procedure for autoincrement mode +# +proc ttk::progressbar::Autoincrement {pb steptime stepsize} { + variable Timers + + if {![winfo exists $pb]} { + # widget has been destroyed -- cancel timer + unset -nocomplain Timers($pb) + return + } + + set Timers($pb) [after $steptime \ + [list ttk::progressbar::Autoincrement $pb $steptime $stepsize] ] + + $pb step $stepsize +} + +# ttk::progressbar::start -- +# Start autoincrement mode. Invoked by [$pb start] widget code. +# +proc ttk::progressbar::start {pb {steptime 50} {stepsize 1}} { + variable Timers + if {![info exists Timers($pb)]} { + Autoincrement $pb $steptime $stepsize + } +} + +# ttk::progressbar::stop -- +# Cancel autoincrement mode. Invoked by [$pb stop] widget code. +# +proc ttk::progressbar::stop {pb} { + variable Timers + if {[info exists Timers($pb)]} { + after cancel $Timers($pb) + unset Timers($pb) + } + $pb configure -value 0 +} + + diff --git a/inkstitch/bin/tk/ttk/scale.tcl b/inkstitch/bin/tk/ttk/scale.tcl new file mode 100644 index 0000000..4a534de --- /dev/null +++ b/inkstitch/bin/tk/ttk/scale.tcl @@ -0,0 +1,91 @@ +# scale.tcl - Copyright (C) 2004 Pat Thoyts +# +# Bindings for the TScale widget + +namespace eval ttk::scale { + variable State + array set State { + dragging 0 + } +} + +bind TScale { ttk::scale::Press %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Jump %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Jump %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Increment %W -1 } +bind TScale { ttk::scale::Increment %W -1 } +bind TScale { ttk::scale::Increment %W 1 } +bind TScale { ttk::scale::Increment %W 1 } +bind TScale { ttk::scale::Increment %W -10 } +bind TScale { ttk::scale::Increment %W -10 } +bind TScale { ttk::scale::Increment %W 10 } +bind TScale { ttk::scale::Increment %W 10 } +bind TScale { %W set [%W cget -from] } +bind TScale { %W set [%W cget -to] } + +proc ttk::scale::Press {w x y} { + variable State + set State(dragging) 0 + + switch -glob -- [$w identify $x $y] { + *track - + *trough { + set inc [expr {([$w get $x $y] <= [$w get]) ^ ([$w cget -from] > [$w cget -to]) ? -1 : 1}] + ttk::Repeatedly Increment $w $inc + } + *slider { + set State(dragging) 1 + set State(initial) [$w get] + } + } +} + +# scale::Jump -- ButtonPress-2/3 binding for scale acts like +# Press except that clicking in the trough jumps to the +# clicked position. +proc ttk::scale::Jump {w x y} { + variable State + set State(dragging) 0 + + switch -glob -- [$w identify $x $y] { + *track - + *trough { + $w set [$w get $x $y] + set State(dragging) 1 + set State(initial) [$w get] + } + *slider { + Press $w $x $y + } + } +} + +proc ttk::scale::Drag {w x y} { + variable State + if {$State(dragging)} { + $w set [$w get $x $y] + } +} + +proc ttk::scale::Release {w x y} { + variable State + set State(dragging) 0 + ttk::CancelRepeat +} + +proc ttk::scale::Increment {w delta} { + if {![winfo exists $w]} return + if {([$w cget -from] > [$w cget -to])} { + set delta [expr {-$delta}] + } + $w set [expr {[$w get] + $delta}] +} diff --git a/inkstitch/bin/tk/ttk/scrollbar.tcl b/inkstitch/bin/tk/ttk/scrollbar.tcl new file mode 100644 index 0000000..4bd5107 --- /dev/null +++ b/inkstitch/bin/tk/ttk/scrollbar.tcl @@ -0,0 +1,123 @@ +# +# Bindings for TScrollbar widget +# + +# Still don't have a working ttk::scrollbar under OSX - +# Swap in a [tk::scrollbar] on that platform, +# unless user specifies -class or -style. +# +if {[tk windowingsystem] eq "aqua"} { + rename ::ttk::scrollbar ::ttk::_scrollbar + proc ttk::scrollbar {w args} { + set constructor ::tk::scrollbar + foreach {option _} $args { + if {$option eq "-class" || $option eq "-style"} { + set constructor ::ttk::_scrollbar + break + } + } + return [$constructor $w {*}$args] + } +} + +namespace eval ttk::scrollbar { + variable State + # State(xPress) -- + # State(yPress) -- initial position of mouse at start of drag. + # State(first) -- value of -first at start of drag. +} + +bind TScrollbar { ttk::scrollbar::Press %W %x %y } +bind TScrollbar { ttk::scrollbar::Drag %W %x %y } +bind TScrollbar { ttk::scrollbar::Release %W %x %y } + +bind TScrollbar { ttk::scrollbar::Jump %W %x %y } +bind TScrollbar { ttk::scrollbar::Drag %W %x %y } +bind TScrollbar { ttk::scrollbar::Release %W %x %y } + +proc ttk::scrollbar::Scroll {w n units} { + set cmd [$w cget -command] + if {$cmd ne ""} { + uplevel #0 $cmd scroll $n $units + } +} + +proc ttk::scrollbar::Moveto {w fraction} { + set cmd [$w cget -command] + if {$cmd ne ""} { + uplevel #0 $cmd moveto $fraction + } +} + +proc ttk::scrollbar::Press {w x y} { + variable State + + set State(xPress) $x + set State(yPress) $y + + switch -glob -- [$w identify $x $y] { + *uparrow - + *leftarrow { + ttk::Repeatedly Scroll $w -1 units + } + *downarrow - + *rightarrow { + ttk::Repeatedly Scroll $w 1 units + } + *thumb { + set State(first) [lindex [$w get] 0] + } + *trough { + set f [$w fraction $x $y] + if {$f < [lindex [$w get] 0]} { + # Clicked in upper/left trough + ttk::Repeatedly Scroll $w -1 pages + } elseif {$f > [lindex [$w get] 1]} { + # Clicked in lower/right trough + ttk::Repeatedly Scroll $w 1 pages + } else { + # Clicked on thumb (???) + set State(first) [lindex [$w get] 0] + } + } + } +} + +proc ttk::scrollbar::Drag {w x y} { + variable State + if {![info exists State(first)]} { + # Initial buttonpress was not on the thumb, + # or something screwy has happened. In either case, ignore: + return; + } + set xDelta [expr {$x - $State(xPress)}] + set yDelta [expr {$y - $State(yPress)}] + Moveto $w [expr {$State(first) + [$w delta $xDelta $yDelta]}] +} + +proc ttk::scrollbar::Release {w x y} { + variable State + unset -nocomplain State(xPress) State(yPress) State(first) + ttk::CancelRepeat +} + +# scrollbar::Jump -- ButtonPress-2 binding for scrollbars. +# Behaves exactly like scrollbar::Press, except that +# clicking in the trough jumps to the the selected position. +# +proc ttk::scrollbar::Jump {w x y} { + variable State + + switch -glob -- [$w identify $x $y] { + *thumb - + *trough { + set State(first) [$w fraction $x $y] + Moveto $w $State(first) + set State(xPress) $x + set State(yPress) $y + } + default { + Press $w $x $y + } + } +} diff --git a/inkstitch/bin/tk/ttk/sizegrip.tcl b/inkstitch/bin/tk/ttk/sizegrip.tcl new file mode 100644 index 0000000..153e310 --- /dev/null +++ b/inkstitch/bin/tk/ttk/sizegrip.tcl @@ -0,0 +1,102 @@ +# +# Sizegrip widget bindings. +# +# Dragging a sizegrip widget resizes the containing toplevel. +# +# NOTE: the sizegrip widget must be in the lower right hand corner. +# + +switch -- [tk windowingsystem] { + x11 - + win32 { + option add *TSizegrip.cursor [ttk::cursor seresize] + } + aqua { + # Aqua sizegrips use default Arrow cursor. + } +} + +namespace eval ttk::sizegrip { + variable State + array set State { + pressed 0 + pressX 0 + pressY 0 + width 0 + height 0 + widthInc 1 + heightInc 1 + resizeX 1 + resizeY 1 + toplevel {} + } +} + +bind TSizegrip { ttk::sizegrip::Press %W %X %Y } +bind TSizegrip { ttk::sizegrip::Drag %W %X %Y } +bind TSizegrip { ttk::sizegrip::Release %W %X %Y } + +proc ttk::sizegrip::Press {W X Y} { + variable State + + if {[$W instate disabled]} { return } + + set top [winfo toplevel $W] + + # If the toplevel is not resizable then bail + foreach {State(resizeX) State(resizeY)} [wm resizable $top] break + if {!$State(resizeX) && !$State(resizeY)} { + return + } + + # Sanity-checks: + # If a negative X or Y position was specified for [wm geometry], + # just bail out -- there's no way to handle this cleanly. + # + if {[scan [wm geometry $top] "%dx%d+%d+%d" width height x y] != 4} { + return; + } + + # Account for gridded geometry: + # + set grid [wm grid $top] + if {[llength $grid]} { + set State(widthInc) [lindex $grid 2] + set State(heightInc) [lindex $grid 3] + } else { + set State(widthInc) [set State(heightInc) 1] + } + + set State(toplevel) $top + set State(pressX) $X + set State(pressY) $Y + set State(width) $width + set State(height) $height + set State(x) $x + set State(y) $y + set State(pressed) 1 +} + +proc ttk::sizegrip::Drag {W X Y} { + variable State + if {!$State(pressed)} { return } + set w $State(width) + set h $State(height) + if {$State(resizeX)} { + set w [expr {$w + ($X - $State(pressX))/$State(widthInc)}] + } + if {$State(resizeY)} { + set h [expr {$h + ($Y - $State(pressY))/$State(heightInc)}] + } + if {$w <= 0} { set w 1 } + if {$h <= 0} { set h 1 } + set x $State(x) ; set y $State(y) + wm geometry $State(toplevel) ${w}x${h}+${x}+${y} +} + +proc ttk::sizegrip::Release {W X Y} { + variable State + set State(pressed) 0 +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/spinbox.tcl b/inkstitch/bin/tk/ttk/spinbox.tcl new file mode 100644 index 0000000..1aa0ccb --- /dev/null +++ b/inkstitch/bin/tk/ttk/spinbox.tcl @@ -0,0 +1,173 @@ +# +# ttk::spinbox bindings +# + +namespace eval ttk::spinbox { } + +### Spinbox bindings. +# +# Duplicate the Entry bindings, override if needed: +# + +ttk::copyBindings TEntry TSpinbox + +bind TSpinbox { ttk::spinbox::Motion %W %x %y } +bind TSpinbox { ttk::spinbox::Press %W %x %y } +bind TSpinbox { ttk::spinbox::Release %W } +bind TSpinbox { ttk::spinbox::DoubleClick %W %x %y } +bind TSpinbox {} ;# disable TEntry triple-click + +bind TSpinbox { event generate %W <> } +bind TSpinbox { event generate %W <> } + +bind TSpinbox <> { ttk::spinbox::Spin %W +1 } +bind TSpinbox <> { ttk::spinbox::Spin %W -1 } + +ttk::bindMouseWheel TSpinbox [list ttk::spinbox::MouseWheel %W] + +## Motion -- +# Sets cursor. +# +proc ttk::spinbox::Motion {w x y} { + if { [$w identify $x $y] eq "textarea" + && [$w instate {!readonly !disabled}] + } { + ttk::setCursor $w text + } else { + ttk::setCursor $w "" + } +} + +## Press -- +# +proc ttk::spinbox::Press {w x y} { + if {[$w instate disabled]} { return } + focus $w + switch -glob -- [$w identify $x $y] { + *textarea { ttk::entry::Press $w $x } + *rightarrow - + *uparrow { ttk::Repeatedly event generate $w <> } + *leftarrow - + *downarrow { ttk::Repeatedly event generate $w <> } + *spinbutton { + if {$y * 2 >= [winfo height $w]} { + set event <> + } else { + set event <> + } + ttk::Repeatedly event generate $w $event + } + } +} + +## DoubleClick -- +# Select all if over the text area; otherwise same as Press. +# +proc ttk::spinbox::DoubleClick {w x y} { + if {[$w instate disabled]} { return } + + switch -glob -- [$w identify $x $y] { + *textarea { SelectAll $w } + * { Press $w $x $y } + } +} + +proc ttk::spinbox::Release {w} { + ttk::CancelRepeat +} + +## MouseWheel -- +# Mousewheel callback. Turn these into <> (-1, up) +# or < (+1, down) events. +# +proc ttk::spinbox::MouseWheel {w dir} { + if {$dir < 0} { + event generate $w <> + } else { + event generate $w <> + } +} + +## SelectAll -- +# Select widget contents. +# +proc ttk::spinbox::SelectAll {w} { + $w selection range 0 end + $w icursor end +} + +## Limit -- +# Limit $v to lie between $min and $max +# +proc ttk::spinbox::Limit {v min max} { + if {$v < $min} { return $min } + if {$v > $max} { return $max } + return $v +} + +## Wrap -- +# Adjust $v to lie between $min and $max, wrapping if out of bounds. +# +proc ttk::spinbox::Wrap {v min max} { + if {$v < $min} { return $max } + if {$v > $max} { return $min } + return $v +} + +## Adjust -- +# Limit or wrap spinbox value depending on -wrap. +# +proc ttk::spinbox::Adjust {w v min max} { + if {[$w cget -wrap]} { + return [Wrap $v $min $max] + } else { + return [Limit $v $min $max] + } +} + +## Spin -- +# Handle <> and <> events. +# If -values is specified, cycle through the list. +# Otherwise cycle through numeric range based on +# -from, -to, and -increment. +# +proc ttk::spinbox::Spin {w dir} { + set nvalues [llength [set values [$w cget -values]]] + set value [$w get] + if {$nvalues} { + set current [lsearch -exact $values $value] + set index [Adjust $w [expr {$current + $dir}] 0 [expr {$nvalues - 1}]] + $w set [lindex $values $index] + } else { + if {[catch { + set v [expr {[scan [$w get] %f] + $dir * [$w cget -increment]}] + }]} { + set v [$w cget -from] + } + $w set [FormatValue $w [Adjust $w $v [$w cget -from] [$w cget -to]]] + } + SelectAll $w + uplevel #0 [$w cget -command] +} + +## FormatValue -- +# Reformat numeric value based on -format. +# +proc ttk::spinbox::FormatValue {w val} { + set fmt [$w cget -format] + if {$fmt eq ""} { + # Try to guess a suitable -format based on -increment. + set delta [expr {abs([$w cget -increment])}] + if {0 < $delta && $delta < 1} { + # NB: This guesses wrong if -increment has more than 1 + # significant digit itself, e.g., -increment 0.25 + set nsd [expr {int(ceil(-log10($delta)))}] + set fmt "%.${nsd}f" + } else { + set fmt "%.0f" + } + } + return [format $fmt $val] +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/treeview.tcl b/inkstitch/bin/tk/ttk/treeview.tcl new file mode 100644 index 0000000..1160e9b --- /dev/null +++ b/inkstitch/bin/tk/ttk/treeview.tcl @@ -0,0 +1,363 @@ +# +# ttk::treeview widget bindings and utilities. +# + +namespace eval ttk::treeview { + variable State + + # Enter/Leave/Motion + # + set State(activeWidget) {} + set State(activeHeading) {} + + # Press/drag/release: + # + set State(pressMode) none + set State(pressX) 0 + + # For pressMode == "resize" + set State(resizeColumn) #0 + + # For pressmode == "heading" + set State(heading) {} +} + +### Widget bindings. +# + +bind Treeview { ttk::treeview::Motion %W %x %y } +bind Treeview { #nothing } +bind Treeview { ttk::treeview::ActivateHeading {} {}} +bind Treeview { ttk::treeview::Press %W %x %y } +bind Treeview { ttk::treeview::DoubleClick %W %x %y } +bind Treeview { ttk::treeview::Release %W %x %y } +bind Treeview { ttk::treeview::Drag %W %x %y } +bind Treeview { ttk::treeview::Keynav %W up } +bind Treeview { ttk::treeview::Keynav %W down } +bind Treeview { ttk::treeview::Keynav %W right } +bind Treeview { ttk::treeview::Keynav %W left } +bind Treeview { %W yview scroll -1 pages } +bind Treeview { %W yview scroll 1 pages } +bind Treeview { ttk::treeview::ToggleFocus %W } +bind Treeview { ttk::treeview::ToggleFocus %W } + +bind Treeview \ + { ttk::treeview::Select %W %x %y extend } +bind Treeview \ + { ttk::treeview::Select %W %x %y toggle } + +ttk::copyBindings TtkScrollable Treeview + +### Binding procedures. +# + +## Keynav -- Keyboard navigation +# +# @@@ TODO: verify/rewrite up and down code. +# +proc ttk::treeview::Keynav {w dir} { + set focus [$w focus] + if {$focus eq ""} { return } + + switch -- $dir { + up { + if {[set up [$w prev $focus]] eq ""} { + set focus [$w parent $focus] + } else { + while {[$w item $up -open] && [llength [$w children $up]]} { + set up [lindex [$w children $up] end] + } + set focus $up + } + } + down { + if {[$w item $focus -open] && [llength [$w children $focus]]} { + set focus [lindex [$w children $focus] 0] + } else { + set up $focus + while {$up ne "" && [set down [$w next $up]] eq ""} { + set up [$w parent $up] + } + set focus $down + } + } + left { + if {[$w item $focus -open] && [llength [$w children $focus]]} { + CloseItem $w $focus + } else { + set focus [$w parent $focus] + } + } + right { + OpenItem $w $focus + } + } + + if {$focus != {}} { + SelectOp $w $focus choose + } +} + +## Motion -- pointer motion binding. +# Sets cursor, active element ... +# +proc ttk::treeview::Motion {w x y} { + set cursor {} + set activeHeading {} + + switch -- [$w identify region $x $y] { + separator { set cursor hresize } + heading { set activeHeading [$w identify column $x $y] } + } + + ttk::setCursor $w $cursor + ActivateHeading $w $activeHeading +} + +## ActivateHeading -- track active heading element +# +proc ttk::treeview::ActivateHeading {w heading} { + variable State + + if {$w != $State(activeWidget) || $heading != $State(activeHeading)} { + if {$State(activeHeading) != {}} { + $State(activeWidget) heading $State(activeHeading) state !active + } + if {$heading != {}} { + $w heading $heading state active + } + set State(activeHeading) $heading + set State(activeWidget) $w + } +} + +## Select $w $x $y $selectop +# Binding procedure for selection operations. +# See "Selection modes", below. +# +proc ttk::treeview::Select {w x y op} { + if {[set item [$w identify row $x $y]] ne "" } { + SelectOp $w $item $op + } +} + +## DoubleClick -- Double-ButtonPress-1 binding. +# +proc ttk::treeview::DoubleClick {w x y} { + if {[set row [$w identify row $x $y]] ne ""} { + Toggle $w $row + } else { + Press $w $x $y ;# perform single-click action + } +} + +## Press -- ButtonPress binding. +# +proc ttk::treeview::Press {w x y} { + focus $w + switch -- [$w identify region $x $y] { + nothing { } + heading { heading.press $w $x $y } + separator { resize.press $w $x $y } + tree - + cell { + set item [$w identify item $x $y] + SelectOp $w $item choose + switch -glob -- [$w identify element $x $y] { + *indicator - + *disclosure { Toggle $w $item } + } + } + } +} + +## Drag -- B1-Motion binding +# +proc ttk::treeview::Drag {w x y} { + variable State + switch $State(pressMode) { + resize { resize.drag $w $x } + heading { heading.drag $w $x $y } + } +} + +proc ttk::treeview::Release {w x y} { + variable State + switch $State(pressMode) { + resize { resize.release $w $x } + heading { heading.release $w } + } + set State(pressMode) none + Motion $w $x $y +} + +### Interactive column resizing. +# +proc ttk::treeview::resize.press {w x y} { + variable State + set State(pressMode) "resize" + set State(resizeColumn) [$w identify column $x $y] +} + +proc ttk::treeview::resize.drag {w x} { + variable State + $w drag $State(resizeColumn) $x +} + +proc ttk::treeview::resize.release {w x} { + # no-op +} + +### Heading activation. +# + +proc ttk::treeview::heading.press {w x y} { + variable State + set column [$w identify column $x $y] + set State(pressMode) "heading" + set State(heading) $column + $w heading $column state pressed +} + +proc ttk::treeview::heading.drag {w x y} { + variable State + if { [$w identify region $x $y] eq "heading" + && [$w identify column $x $y] eq $State(heading) + } { + $w heading $State(heading) state pressed + } else { + $w heading $State(heading) state !pressed + } +} + +proc ttk::treeview::heading.release {w} { + variable State + if {[lsearch -exact [$w heading $State(heading) state] pressed] >= 0} { + after 0 [$w heading $State(heading) -command] + } + $w heading $State(heading) state !pressed +} + +### Selection modes. +# + +## SelectOp $w $item [ choose | extend | toggle ] -- +# Dispatch to appropriate selection operation +# depending on current value of -selectmode. +# +proc ttk::treeview::SelectOp {w item op} { + select.$op.[$w cget -selectmode] $w $item +} + +## -selectmode none: +# +proc ttk::treeview::select.choose.none {w item} { $w focus $item } +proc ttk::treeview::select.toggle.none {w item} { $w focus $item } +proc ttk::treeview::select.extend.none {w item} { $w focus $item } + +## -selectmode browse: +# +proc ttk::treeview::select.choose.browse {w item} { BrowseTo $w $item } +proc ttk::treeview::select.toggle.browse {w item} { BrowseTo $w $item } +proc ttk::treeview::select.extend.browse {w item} { BrowseTo $w $item } + +## -selectmode multiple: +# +proc ttk::treeview::select.choose.extended {w item} { + BrowseTo $w $item +} +proc ttk::treeview::select.toggle.extended {w item} { + $w selection toggle [list $item] +} +proc ttk::treeview::select.extend.extended {w item} { + if {[set anchor [$w focus]] ne ""} { + $w selection set [between $w $anchor $item] + } else { + BrowseTo $w $item + } +} + +### Tree structure utilities. +# + +## between $tv $item1 $item2 -- +# Returns a list of all items between $item1 and $item2, +# in preorder traversal order. $item1 and $item2 may be +# in either order. +# +# NOTES: +# This routine is O(N) in the size of the tree. +# There's probably a way to do this that's O(N) in the number +# of items returned, but I'm not clever enough to figure it out. +# +proc ttk::treeview::between {tv item1 item2} { + variable between [list] + variable selectingBetween 0 + ScanBetween $tv $item1 $item2 {} + return $between +} + +## ScanBetween -- +# Recursive worker routine for ttk::treeview::between +# +proc ttk::treeview::ScanBetween {tv item1 item2 item} { + variable between + variable selectingBetween + + if {$item eq $item1 || $item eq $item2} { + lappend between $item + set selectingBetween [expr {!$selectingBetween}] + } elseif {$selectingBetween} { + lappend between $item + } + foreach child [$tv children $item] { + ScanBetween $tv $item1 $item2 $child + } +} + +### User interaction utilities. +# + +## OpenItem, CloseItem -- Set the open state of an item, generate event +# + +proc ttk::treeview::OpenItem {w item} { + $w focus $item + event generate $w <> + $w item $item -open true +} + +proc ttk::treeview::CloseItem {w item} { + $w item $item -open false + $w focus $item + event generate $w <> +} + +## Toggle -- toggle opened/closed state of item +# +proc ttk::treeview::Toggle {w item} { + if {[$w item $item -open]} { + CloseItem $w $item + } else { + OpenItem $w $item + } +} + +## ToggleFocus -- toggle opened/closed state of focus item +# +proc ttk::treeview::ToggleFocus {w} { + set item [$w focus] + if {$item ne ""} { + Toggle $w $item + } +} + +## BrowseTo -- navigate to specified item; set focus and selection +# +proc ttk::treeview::BrowseTo {w item} { + $w see $item + $w focus $item + $w selection set [list $item] +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/ttk.tcl b/inkstitch/bin/tk/ttk/ttk.tcl new file mode 100644 index 0000000..7bae211 --- /dev/null +++ b/inkstitch/bin/tk/ttk/ttk.tcl @@ -0,0 +1,176 @@ +# +# Ttk widget set initialization script. +# + +### Source library scripts. +# + +namespace eval ::ttk { + variable library + if {![info exists library]} { + set library [file dirname [info script]] + } +} + +source [file join $::ttk::library fonts.tcl] +source [file join $::ttk::library cursors.tcl] +source [file join $::ttk::library utils.tcl] + +## ttk::deprecated $old $new -- +# Define $old command as a deprecated alias for $new command +# $old and $new must be fully namespace-qualified. +# +proc ttk::deprecated {old new} { + interp alias {} $old {} ttk::do'deprecate $old $new +} +## do'deprecate -- +# Implementation procedure for deprecated commands -- +# issue a warning (once), then re-alias old to new. +# +proc ttk::do'deprecate {old new args} { + deprecated'warning $old $new + interp alias {} $old {} $new + uplevel 1 [linsert $args 0 $new] +} + +## deprecated'warning -- +# Gripe about use of deprecated commands. +# +proc ttk::deprecated'warning {old new} { + puts stderr "$old deprecated -- use $new instead" +} + +### Backward-compatibility. +# +# +# Make [package require tile] an effective no-op; +# see SF#3016598 for discussion. +# +package ifneeded tile 0.8.6 { package provide tile 0.8.6 } + +# ttk::panedwindow used to be named ttk::paned. Keep the alias for now. +# +::ttk::deprecated ::ttk::paned ::ttk::panedwindow + +### ::ttk::ThemeChanged -- +# Called from [::ttk::style theme use]. +# Sends a <> virtual event to all widgets. +# +proc ::ttk::ThemeChanged {} { + set Q . + while {[llength $Q]} { + set QN [list] + foreach w $Q { + event generate $w <> + foreach child [winfo children $w] { + lappend QN $child + } + } + set Q $QN + } +} + +### Public API. +# + +proc ::ttk::themes {{ptn *}} { + set themes [list] + + foreach pkg [lsearch -inline -all -glob [package names] ttk::theme::$ptn] { + lappend themes [namespace tail $pkg] + } + + return $themes +} + +## ttk::setTheme $theme -- +# Set the current theme to $theme, loading it if necessary. +# +proc ::ttk::setTheme {theme} { + variable currentTheme ;# @@@ Temp -- [::ttk::style theme use] doesn't work + if {$theme ni [::ttk::style theme names]} { + package require ttk::theme::$theme + } + ::ttk::style theme use $theme + set currentTheme $theme +} + +### Load widget bindings. +# +source [file join $::ttk::library button.tcl] +source [file join $::ttk::library menubutton.tcl] +source [file join $::ttk::library scrollbar.tcl] +source [file join $::ttk::library scale.tcl] +source [file join $::ttk::library progress.tcl] +source [file join $::ttk::library notebook.tcl] +source [file join $::ttk::library panedwindow.tcl] +source [file join $::ttk::library entry.tcl] +source [file join $::ttk::library combobox.tcl] ;# dependency: entry.tcl +source [file join $::ttk::library spinbox.tcl] ;# dependency: entry.tcl +source [file join $::ttk::library treeview.tcl] +source [file join $::ttk::library sizegrip.tcl] + +## Label and Labelframe bindings: +# (not enough to justify their own file...) +# +bind TLabelframe <> { tk::TabToWindow [tk_focusNext %W] } +bind TLabel <> { tk::TabToWindow [tk_focusNext %W] } + +### Load settings for built-in themes: +# +proc ttk::LoadThemes {} { + variable library + + # "default" always present: + uplevel #0 [list source [file join $library defaults.tcl]] + + set builtinThemes [style theme names] + foreach {theme scripts} { + classic classicTheme.tcl + alt altTheme.tcl + clam clamTheme.tcl + winnative winTheme.tcl + xpnative {xpTheme.tcl vistaTheme.tcl} + aqua aquaTheme.tcl + } { + if {[lsearch -exact $builtinThemes $theme] >= 0} { + foreach script $scripts { + uplevel #0 [list source [file join $library $script]] + } + } + } +} + +ttk::LoadThemes; rename ::ttk::LoadThemes {} + +### Select platform-specific default theme: +# +# Notes: +# + On OSX, aqua theme is the default +# + On Windows, xpnative takes precedence over winnative if available. +# + On X11, users can use the X resource database to +# specify a preferred theme (*TkTheme: themeName); +# otherwise "default" is used. +# + +proc ttk::DefaultTheme {} { + set preferred [list aqua vista xpnative winnative] + + set userTheme [option get . tkTheme TkTheme] + if {$userTheme ne {} && ![catch { + uplevel #0 [list package require ttk::theme::$userTheme] + }]} { + return $userTheme + } + + foreach theme $preferred { + if {[package provide ttk::theme::$theme] ne ""} { + return $theme + } + } + return "default" +} + +ttk::setTheme [ttk::DefaultTheme] ; rename ttk::DefaultTheme {} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/utils.tcl b/inkstitch/bin/tk/ttk/utils.tcl new file mode 100644 index 0000000..7cc1bb7 --- /dev/null +++ b/inkstitch/bin/tk/ttk/utils.tcl @@ -0,0 +1,350 @@ +# +# Utilities for widget implementations. +# + +### Focus management. +# +# See also: #1516479 +# + +## ttk::takefocus -- +# This is the default value of the "-takefocus" option +# for ttk::* widgets that participate in keyboard navigation. +# +# NOTES: +# tk::FocusOK (called by tk_focusNext) tests [winfo viewable] +# if -takefocus is 1, empty, or missing; but not if it's a +# script prefix, so we have to check that here as well. +# +# +proc ttk::takefocus {w} { + expr {[$w instate !disabled] && [winfo viewable $w]} +} + +## ttk::GuessTakeFocus -- +# This routine is called as a fallback for widgets +# with a missing or empty -takefocus option. +# +# It implements the same heuristics as tk::FocusOK. +# +proc ttk::GuessTakeFocus {w} { + # Don't traverse to widgets with '-state disabled': + # + if {![catch {$w cget -state} state] && $state eq "disabled"} { + return 0 + } + + # Allow traversal to widgets with explicit key or focus bindings: + # + if {[regexp {Key|Focus} [concat [bind $w] [bind [winfo class $w]]]]} { + return 1; + } + + # Default is nontraversable: + # + return 0; +} + +## ttk::traverseTo $w -- +# Set the keyboard focus to the specified window. +# +proc ttk::traverseTo {w} { + set focus [focus] + if {$focus ne ""} { + event generate $focus <> + } + focus $w + event generate $w <> +} + +## ttk::clickToFocus $w -- +# Utility routine, used in bindings -- +# Assign keyboard focus to the specified widget if -takefocus is enabled. +# +proc ttk::clickToFocus {w} { + if {[ttk::takesFocus $w]} { focus $w } +} + +## ttk::takesFocus w -- +# Test if the widget can take keyboard focus. +# +# See the description of the -takefocus option in options(n) +# for details. +# +proc ttk::takesFocus {w} { + if {![winfo viewable $w]} { + return 0 + } elseif {[catch {$w cget -takefocus} takefocus]} { + return [GuessTakeFocus $w] + } else { + switch -- $takefocus { + "" { return [GuessTakeFocus $w] } + 0 { return 0 } + 1 { return 1 } + default { + return [expr {[uplevel #0 $takefocus [list $w]] == 1}] + } + } + } +} + +## ttk::focusFirst $w -- +# Return the first descendant of $w, in preorder traversal order, +# that can take keyboard focus, "" if none do. +# +# See also: tk_focusNext +# + +proc ttk::focusFirst {w} { + if {[ttk::takesFocus $w]} { + return $w + } + foreach child [winfo children $w] { + if {[set c [ttk::focusFirst $child]] ne ""} { + return $c + } + } + return "" +} + +### Grabs. +# +# Rules: +# Each call to [grabWindow $w] or [globalGrab $w] must be +# matched with a call to [releaseGrab $w] in LIFO order. +# +# Do not call [grabWindow $w] for a window that currently +# appears on the grab stack. +# +# See #1239190 and #1411983 for more discussion. +# +namespace eval ttk { + variable Grab ;# map: window name -> grab token + + # grab token details: + # Two-element list containing: + # 1) a script to evaluate to restore the previous grab (if any); + # 2) a script to evaluate to restore the focus (if any) +} + +## SaveGrab -- +# Record current grab and focus windows. +# +proc ttk::SaveGrab {w} { + variable Grab + + if {[info exists Grab($w)]} { + # $w is already on the grab stack. + # This should not happen, but bail out in case it does anyway: + # + return + } + + set restoreGrab [set restoreFocus ""] + + set grabbed [grab current $w] + if {[winfo exists $grabbed]} { + switch [grab status $grabbed] { + global { set restoreGrab [list grab -global $grabbed] } + local { set restoreGrab [list grab $grabbed] } + none { ;# grab window is really in a different interp } + } + } + + set focus [focus] + if {$focus ne ""} { + set restoreFocus [list focus -force $focus] + } + + set Grab($w) [list $restoreGrab $restoreFocus] +} + +## RestoreGrab -- +# Restore previous grab and focus windows. +# If called more than once without an intervening [SaveGrab $w], +# does nothing. +# +proc ttk::RestoreGrab {w} { + variable Grab + + if {![info exists Grab($w)]} { # Ignore + return; + } + + # The previous grab/focus window may have been destroyed, + # unmapped, or some other abnormal condition; ignore any errors. + # + foreach script $Grab($w) { + catch $script + } + + unset Grab($w) +} + +## ttk::grabWindow $w -- +# Records the current focus and grab windows, sets an application-modal +# grab on window $w. +# +proc ttk::grabWindow {w} { + SaveGrab $w + grab $w +} + +## ttk::globalGrab $w -- +# Same as grabWindow, but sets a global grab on $w. +# +proc ttk::globalGrab {w} { + SaveGrab $w + grab -global $w +} + +## ttk::releaseGrab -- +# Release the grab previously set by [ttk::grabWindow] +# or [ttk::globalGrab]. +# +proc ttk::releaseGrab {w} { + grab release $w + RestoreGrab $w +} + +### Auto-repeat. +# +# NOTE: repeating widgets do not have -repeatdelay +# or -repeatinterval resources as in standard Tk; +# instead a single set of settings is applied application-wide. +# (TODO: make this user-configurable) +# +# (@@@ Windows seems to use something like 500/50 milliseconds +# @@@ for -repeatdelay/-repeatinterval) +# + +namespace eval ttk { + variable Repeat + array set Repeat { + delay 300 + interval 100 + timer {} + script {} + } +} + +## ttk::Repeatedly -- +# Begin auto-repeat. +# +proc ttk::Repeatedly {args} { + variable Repeat + after cancel $Repeat(timer) + set script [uplevel 1 [list namespace code $args]] + set Repeat(script) $script + uplevel #0 $script + set Repeat(timer) [after $Repeat(delay) ttk::Repeat] +} + +## Repeat -- +# Continue auto-repeat +# +proc ttk::Repeat {} { + variable Repeat + uplevel #0 $Repeat(script) + set Repeat(timer) [after $Repeat(interval) ttk::Repeat] +} + +## ttk::CancelRepeat -- +# Halt auto-repeat. +# +proc ttk::CancelRepeat {} { + variable Repeat + after cancel $Repeat(timer) +} + +### Bindings. +# + +## ttk::copyBindings $from $to -- +# Utility routine; copies bindings from one bindtag onto another. +# +proc ttk::copyBindings {from to} { + foreach event [bind $from] { + bind $to $event [bind $from $event] + } +} + +### Mousewheel bindings. +# +# Platform inconsistencies: +# +# On X11, the server typically maps the mouse wheel to Button4 and Button5. +# +# On OSX, Tk generates sensible values for the %D field in events. +# +# On Windows, %D must be scaled by a factor of 120. +# In addition, Tk redirects mousewheel events to the window with +# keyboard focus instead of sending them to the window under the pointer. +# We do not attempt to fix that here, see also TIP#171. +# +# OSX conventionally uses Shift+MouseWheel for horizontal scrolling, +# and Option+MouseWheel for accelerated scrolling. +# +# The Shift+MouseWheel behavior is not conventional on Windows or most +# X11 toolkits, but it's useful. +# +# MouseWheel scrolling is accelerated on X11, which is conventional +# for Tk and appears to be conventional for other toolkits (although +# Gtk+ and Qt do not appear to use as large a factor). +# + +## ttk::bindMouseWheel $bindtag $command... +# Adds basic mousewheel support to $bindtag. +# $command will be passed one additional argument +# specifying the mousewheel direction (-1: up, +1: down). +# + +proc ttk::bindMouseWheel {bindtag callback} { + switch -- [tk windowingsystem] { + x11 { + bind $bindtag "$callback -1" + bind $bindtag "$callback +1" + } + win32 { + bind $bindtag [append callback { [expr {-(%D/120)}]}] + } + aqua { + bind $bindtag [append callback { [expr {-(%D)}]} ] + } + } +} + +## Mousewheel bindings for standard scrollable widgets. +# +# Usage: [ttk::copyBindings TtkScrollable $bindtag] +# +# $bindtag should be for a widget that supports the +# standard scrollbar protocol. +# + +switch -- [tk windowingsystem] { + x11 { + bind TtkScrollable { %W yview scroll -5 units } + bind TtkScrollable { %W yview scroll 5 units } + bind TtkScrollable { %W xview scroll -5 units } + bind TtkScrollable { %W xview scroll 5 units } + } + win32 { + bind TtkScrollable \ + { %W yview scroll [expr {-(%D/120)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-(%D/120)}] units } + } + aqua { + bind TtkScrollable \ + { %W yview scroll [expr {-(%D)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-(%D)}] units } + bind TtkScrollable \ + { %W yview scroll [expr {-10*(%D)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-10*(%D)}] units } + } +} + +#*EOF* diff --git a/inkstitch/bin/tk/ttk/vistaTheme.tcl b/inkstitch/bin/tk/ttk/vistaTheme.tcl new file mode 100644 index 0000000..99410cb --- /dev/null +++ b/inkstitch/bin/tk/ttk/vistaTheme.tcl @@ -0,0 +1,224 @@ +# +# Settings for Microsoft Windows Vista and Server 2008 +# + +# The Vista theme can only be defined on Windows Vista and above. The theme +# is created in C due to the need to assign a theme-enabled function for +# detecting when themeing is disabled. On systems that cannot support the +# Vista theme, there will be no such theme created and we must not +# evaluate this script. + +if {"vista" ni [ttk::style theme names]} { + return +} + +namespace eval ttk::theme::vista { + + ttk::style theme settings vista { + + ttk::style configure . \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -foreground [list disabled SystemGrayText] \ + ; + + ttk::style configure TButton -anchor center -padding {1 1} -width -11 + ttk::style configure TRadiobutton -padding 2 + ttk::style configure TCheckbutton -padding 2 + ttk::style configure TMenubutton -padding {8 4} + + ttk::style element create Menubutton.dropdown vsapi \ + TOOLBAR 4 {{selected active} 6 {selected !active} 5 + disabled 4 pressed 3 active 2 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style map TNotebook.Tab \ + -expand [list selected {2 2 2 2}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + # Label and Toolbutton + ttk::style configure TLabelframe.Label -foreground "#0046d5" + + ttk::style configure Toolbutton -padding {4 4} + + # Combobox + ttk::style configure TCombobox -padding 2 + ttk::style element create Combobox.field vsapi \ + COMBOBOX 2 {{} 1} + ttk::style element create Combobox.border vsapi \ + COMBOBOX 4 {disabled 4 focus 3 active 2 hover 2 {} 1} + ttk::style element create Combobox.rightdownarrow vsapi \ + COMBOBOX 6 {disabled 4 pressed 3 active 2 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style layout TCombobox { + Combobox.border -sticky nswe -border 0 -children { + Combobox.rightdownarrow -side right -sticky ns + Combobox.padding -expand 1 -sticky nswe -children { + Combobox.focus -expand 1 -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + } + } + # Vista.Combobox droplist frame + ttk::style element create ComboboxPopdownFrame.background vsapi\ + LISTBOX 3 {disabled 4 active 3 focus 2 {} 1} + ttk::style layout ComboboxPopdownFrame { + ComboboxPopdownFrame.background -sticky news -border 1 -children { + ComboboxPopdownFrame.padding -sticky news + } + } + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + # Entry + ttk::style configure TEntry -padding {1 1 1 1} ;# Needs lookup + ttk::style element create Entry.field vsapi \ + EDIT 6 {disabled 4 focus 3 hover 2 {} 1} -padding {2 2 2 2} + ttk::style element create Entry.background vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1} + ttk::style layout TEntry { + Entry.field -sticky news -border 0 -children { + Entry.background -sticky news -children { + Entry.padding -sticky news -children { + Entry.textarea -sticky news + } + } + } + } + ttk::style map TEntry \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + # Spinbox + ttk::style configure TSpinbox -padding 0 + ttk::style element create Spinbox.field vsapi \ + EDIT 9 {disabled 4 focus 3 hover 2 {} 1} -padding {1 1 1 2} + ttk::style element create Spinbox.background vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1} + ttk::style element create Spinbox.innerbg vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1}\ + -padding {2 0 15 2} + ttk::style element create Spinbox.uparrow vsapi \ + SPIN 1 {disabled 4 pressed 3 active 2 {} 1} \ + -padding 1 -halfheight 1 \ + -syssize { SM_CXVSCROLL SM_CYVSCROLL } + ttk::style element create Spinbox.downarrow vsapi \ + SPIN 2 {disabled 4 pressed 3 active 2 {} 1} \ + -padding 1 -halfheight 1 \ + -syssize { SM_CXVSCROLL SM_CYVSCROLL } + ttk::style layout TSpinbox { + Spinbox.field -sticky nswe -children { + Spinbox.background -sticky news -children { + Spinbox.padding -sticky news -children { + Spinbox.innerbg -sticky news -children { + Spinbox.textarea -expand 1 -sticky {} + } + } + Spinbox.uparrow -side top -sticky ens + Spinbox.downarrow -side bottom -sticky ens + } + } + } + ttk::style map TSpinbox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + + # SCROLLBAR elements (Vista includes a state for 'hover') + ttk::style element create Vertical.Scrollbar.uparrow vsapi \ + SCROLLBAR 1 {disabled 4 pressed 3 active 2 hover 17 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.downarrow vsapi \ + SCROLLBAR 1 {disabled 8 pressed 7 active 6 hover 18 {} 5} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.trough vsapi \ + SCROLLBAR 7 {disabled 4 pressed 3 active 2 hover 5 {} 1} + ttk::style element create Vertical.Scrollbar.thumb vsapi \ + SCROLLBAR 3 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.grip vsapi \ + SCROLLBAR 9 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Horizontal.Scrollbar.leftarrow vsapi \ + SCROLLBAR 1 {disabled 12 pressed 11 active 10 hover 19 {} 9} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.rightarrow vsapi \ + SCROLLBAR 1 {disabled 16 pressed 15 active 14 hover 20 {} 13} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.trough vsapi \ + SCROLLBAR 5 {disabled 4 pressed 3 active 2 hover 5 {} 1} + ttk::style element create Horizontal.Scrollbar.thumb vsapi \ + SCROLLBAR 2 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.grip vsapi \ + SCROLLBAR 8 {disabled 4 pressed 3 active 2 hover 5 {} 1} + + # Progressbar + ttk::style element create Horizontal.Progressbar.pbar vsapi \ + PROGRESS 3 {{} 1} -padding 8 + ttk::style layout Horizontal.TProgressbar { + Horizontal.Progressbar.trough -sticky nswe -children { + Horizontal.Progressbar.pbar -side left -sticky ns + } + } + ttk::style element create Vertical.Progressbar.pbar vsapi \ + PROGRESS 3 {{} 1} -padding 8 + ttk::style layout Vertical.TProgressbar { + Vertical.Progressbar.trough -sticky nswe -children { + Vertical.Progressbar.pbar -side bottom -sticky we + } + } + + # Scale + ttk::style element create Horizontal.Scale.slider vsapi \ + TRACKBAR 3 {disabled 5 focus 4 pressed 3 active 2 {} 1} \ + -width 6 -height 12 + ttk::style layout Horizontal.TScale { + Scale.focus -expand 1 -sticky nswe -children { + Horizontal.Scale.trough -expand 1 -sticky nswe -children { + Horizontal.Scale.track -sticky we + Horizontal.Scale.slider -side left -sticky {} + } + } + } + ttk::style element create Vertical.Scale.slider vsapi \ + TRACKBAR 6 {disabled 5 focus 4 pressed 3 active 2 {} 1} \ + -width 12 -height 6 + ttk::style layout Vertical.TScale { + Scale.focus -expand 1 -sticky nswe -children { + Vertical.Scale.trough -expand 1 -sticky nswe -children { + Vertical.Scale.track -sticky ns + Vertical.Scale.slider -side top -sticky {} + } + } + } + + # Treeview + ttk::style configure Item -padding {4 0 0 0} + + package provide ttk::theme::vista 1.0 + } +} diff --git a/inkstitch/bin/tk/ttk/winTheme.tcl b/inkstitch/bin/tk/ttk/winTheme.tcl new file mode 100644 index 0000000..55367bc --- /dev/null +++ b/inkstitch/bin/tk/ttk/winTheme.tcl @@ -0,0 +1,80 @@ +# +# Settings for 'winnative' theme. +# + +namespace eval ttk::theme::winnative { + ttk::style theme settings winnative { + + ttk::style configure "." \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -troughcolor SystemScrollbar \ + -font TkDefaultFont \ + ; + + ttk::style map "." -foreground [list disabled SystemGrayText] ; + ttk::style map "." -embossed [list disabled 1] ; + + ttk::style configure TButton \ + -anchor center -width -11 -relief raised -shiftrelief 1 + ttk::style configure TCheckbutton -padding "2 4" + ttk::style configure TRadiobutton -padding "2 4" + ttk::style configure TMenubutton \ + -padding "8 4" -arrowsize 3 -relief raised + + ttk::style map TButton -relief {{!disabled pressed} sunken} + + ttk::style configure TEntry \ + -padding 2 -selectborderwidth 0 -insertwidth 1 + ttk::style map TEntry \ + -fieldbackground \ + [list readonly SystemButtonFace disabled SystemButtonFace] \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + ttk::style configure TCombobox -padding 2 + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -fieldbackground [list \ + readonly SystemButtonFace \ + disabled SystemButtonFace] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + ttk::style element create ComboboxPopdownFrame.border from default + ttk::style configure ComboboxPopdownFrame \ + -borderwidth 1 -relief solid + + ttk::style configure TSpinbox -padding {2 0 16 0} + + ttk::style configure TLabelframe -borderwidth 2 -relief groove + + ttk::style configure Toolbutton -relief flat -padding {8 4} + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + + ttk::style configure TScale -groovewidth 4 + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style configure TNotebook.Tab -padding {3 1} -borderwidth 1 + ttk::style map TNotebook.Tab -expand [list selected {2 2 2 0}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + ttk::style configure TProgressbar \ + -background SystemHighlight -borderwidth 0 ; + } +} diff --git a/inkstitch/bin/tk/ttk/xpTheme.tcl b/inkstitch/bin/tk/ttk/xpTheme.tcl new file mode 100644 index 0000000..187ce0b --- /dev/null +++ b/inkstitch/bin/tk/ttk/xpTheme.tcl @@ -0,0 +1,65 @@ +# +# Settings for 'xpnative' theme +# + +namespace eval ttk::theme::xpnative { + + ttk::style theme settings xpnative { + + ttk::style configure . \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -foreground [list disabled SystemGrayText] \ + ; + + ttk::style configure TButton -anchor center -padding {1 1} -width -11 + ttk::style configure TRadiobutton -padding 2 + ttk::style configure TCheckbutton -padding 2 + ttk::style configure TMenubutton -padding {8 4} + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style map TNotebook.Tab \ + -expand [list selected {2 2 2 2}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + ttk::style configure TLabelframe.Label -foreground "#0046d5" + + # OR: -padding {3 3 3 6}, which some apps seem to use. + ttk::style configure TEntry -padding {2 2 2 4} + ttk::style map TEntry \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + ttk::style configure TCombobox -padding 2 + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + ttk::style configure TSpinbox -padding {2 0 14 0} + ttk::style map TSpinbox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + ttk::style configure Toolbutton -padding {4 4} + + } +} diff --git a/inkstitch/bin/tk/unsupported.tcl b/inkstitch/bin/tk/unsupported.tcl new file mode 100644 index 0000000..aeece38 --- /dev/null +++ b/inkstitch/bin/tk/unsupported.tcl @@ -0,0 +1,295 @@ +# unsupported.tcl -- +# +# Commands provided by Tk without official support. Use them at your +# own risk. They may change or go away without notice. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# ---------------------------------------------------------------------- +# Unsupported compatibility interface for folks accessing Tk's private +# commands and variable against recommended usage. +# ---------------------------------------------------------------------- + +namespace eval ::tk::unsupported { + + # Map from the old global names of Tk private commands to their + # new namespace-encapsulated names. + + variable PrivateCommands + array set PrivateCommands { + tkButtonAutoInvoke ::tk::ButtonAutoInvoke + tkButtonDown ::tk::ButtonDown + tkButtonEnter ::tk::ButtonEnter + tkButtonInvoke ::tk::ButtonInvoke + tkButtonLeave ::tk::ButtonLeave + tkButtonUp ::tk::ButtonUp + tkCancelRepeat ::tk::CancelRepeat + tkCheckRadioDown ::tk::CheckRadioDown + tkCheckRadioEnter ::tk::CheckRadioEnter + tkCheckRadioInvoke ::tk::CheckRadioInvoke + tkColorDialog ::tk::dialog::color:: + tkColorDialog_BuildDialog ::tk::dialog::color::BuildDialog + tkColorDialog_CancelCmd ::tk::dialog::color::CancelCmd + tkColorDialog_Config ::tk::dialog::color::Config + tkColorDialog_CreateSelector ::tk::dialog::color::CreateSelector + tkColorDialog_DrawColorScale ::tk::dialog::color::DrawColorScale + tkColorDialog_EnterColorBar ::tk::dialog::color::EnterColorBar + tkColorDialog_InitValues ::tk::dialog::color::InitValues + tkColorDialog_HandleRGBEntry ::tk::dialog::color::HandleRGBEntry + tkColorDialog_HandleSelEntry ::tk::dialog::color::HandleSelEntry + tkColorDialog_LeaveColorBar ::tk::dialog::color::LeaveColorBar + tkColorDialog_MoveSelector ::tk::dialog::color::MoveSelector + tkColorDialog_OkCmd ::tk::dialog::color::OkCmd + tkColorDialog_RedrawColorBars ::tk::dialog::color::RedrawColorBars + tkColorDialog_RedrawFinalColor ::tk::dialog::color::RedrawFinalColor + tkColorDialog_ReleaseMouse ::tk::dialog::color::ReleaseMouse + tkColorDialog_ResizeColorBars ::tk::dialog::color::ResizeColorBars + tkColorDialog_RgbToX ::tk::dialog::color::RgbToX + tkColorDialog_SetRGBValue ::tk::dialog::color::SetRGBValue + tkColorDialog_StartMove ::tk::dialog::color::StartMove + tkColorDialog_XToRgb ::tk::dialog::color::XToRGB + tkConsoleAbout ::tk::ConsoleAbout + tkConsoleBind ::tk::ConsoleBind + tkConsoleExit ::tk::ConsoleExit + tkConsoleHistory ::tk::ConsoleHistory + tkConsoleInit ::tk::ConsoleInit + tkConsoleInsert ::tk::ConsoleInsert + tkConsoleInvoke ::tk::ConsoleInvoke + tkConsoleOutput ::tk::ConsoleOutput + tkConsolePrompt ::tk::ConsolePrompt + tkConsoleSource ::tk::ConsoleSource + tkDarken ::tk::Darken + tkEntryAutoScan ::tk::EntryAutoScan + tkEntryBackspace ::tk::EntryBackspace + tkEntryButton1 ::tk::EntryButton1 + tkEntryClosestGap ::tk::EntryClosestGap + tkEntryGetSelection ::tk::EntryGetSelection + tkEntryInsert ::tk::EntryInsert + tkEntryKeySelect ::tk::EntryKeySelect + tkEntryMouseSelect ::tk::EntryMouseSelect + tkEntryNextWord ::tk::EntryNextWord + tkEntryPaste ::tk::EntryPaste + tkEntryPreviousWord ::tk::EntryPreviousWord + tkEntrySeeInsert ::tk::EntrySeeInsert + tkEntrySetCursor ::tk::EntrySetCursor + tkEntryTranspose ::tk::EntryTranspose + tkEventMotifBindings ::tk::EventMotifBindings + tkFDGetFileTypes ::tk::FDGetFileTypes + tkFirstMenu ::tk::FirstMenu + tkFocusGroup_BindIn ::tk::FocusGroup_BindIn + tkFocusGroup_BindOut ::tk::FocusGroup_BindOut + tkFocusGroup_Create ::tk::FocusGroup_Create + tkFocusGroup_Destroy ::tk::FocusGroup_Destroy + tkFocusGroup_In ::tk::FocusGroup_In + tkFocusGroup_Out ::tk::FocusGroup_Out + tkFocusOK ::tk::FocusOK + tkGenerateMenuSelect ::tk::GenerateMenuSelect + tkIconList ::tk::IconList + tkIconList_Add ::tk::IconList_Add + tkIconList_Arrange ::tk::IconList_Arrange + tkIconList_AutoScan ::tk::IconList_AutoScan + tkIconList_Btn1 ::tk::IconList_Btn1 + tkIconList_Config ::tk::IconList_Config + tkIconList_Create ::tk::IconList_Create + tkIconList_CtrlBtn1 ::tk::IconList_CtrlBtn1 + tkIconList_Curselection ::tk::IconList_CurSelection + tkIconList_DeleteAll ::tk::IconList_DeleteAll + tkIconList_Double1 ::tk::IconList_Double1 + tkIconList_DrawSelection ::tk::IconList_DrawSelection + tkIconList_FocusIn ::tk::IconList_FocusIn + tkIconList_FocusOut ::tk::IconList_FocusOut + tkIconList_Get ::tk::IconList_Get + tkIconList_Goto ::tk::IconList_Goto + tkIconList_Index ::tk::IconList_Index + tkIconList_Invoke ::tk::IconList_Invoke + tkIconList_KeyPress ::tk::IconList_KeyPress + tkIconList_Leave1 ::tk::IconList_Leave1 + tkIconList_LeftRight ::tk::IconList_LeftRight + tkIconList_Motion1 ::tk::IconList_Motion1 + tkIconList_Reset ::tk::IconList_Reset + tkIconList_ReturnKey ::tk::IconList_ReturnKey + tkIconList_See ::tk::IconList_See + tkIconList_Select ::tk::IconList_Select + tkIconList_Selection ::tk::IconList_Selection + tkIconList_ShiftBtn1 ::tk::IconList_ShiftBtn1 + tkIconList_UpDown ::tk::IconList_UpDown + tkListbox ::tk::Listbox + tkListboxAutoScan ::tk::ListboxAutoScan + tkListboxBeginExtend ::tk::ListboxBeginExtend + tkListboxBeginSelect ::tk::ListboxBeginSelect + tkListboxBeginToggle ::tk::ListboxBeginToggle + tkListboxCancel ::tk::ListboxCancel + tkListboxDataExtend ::tk::ListboxDataExtend + tkListboxExtendUpDown ::tk::ListboxExtendUpDown + tkListboxKeyAccel_Goto ::tk::ListboxKeyAccel_Goto + tkListboxKeyAccel_Key ::tk::ListboxKeyAccel_Key + tkListboxKeyAccel_Reset ::tk::ListboxKeyAccel_Reset + tkListboxKeyAccel_Set ::tk::ListboxKeyAccel_Set + tkListboxKeyAccel_Unset ::tk::ListboxKeyAccel_Unxet + tkListboxMotion ::tk::ListboxMotion + tkListboxSelectAll ::tk::ListboxSelectAll + tkListboxUpDown ::tk::ListboxUpDown + tkListboxBeginToggle ::tk::ListboxBeginToggle + tkMbButtonUp ::tk::MbButtonUp + tkMbEnter ::tk::MbEnter + tkMbLeave ::tk::MbLeave + tkMbMotion ::tk::MbMotion + tkMbPost ::tk::MbPost + tkMenuButtonDown ::tk::MenuButtonDown + tkMenuDownArrow ::tk::MenuDownArrow + tkMenuDup ::tk::MenuDup + tkMenuEscape ::tk::MenuEscape + tkMenuFind ::tk::MenuFind + tkMenuFindName ::tk::MenuFindName + tkMenuFirstEntry ::tk::MenuFirstEntry + tkMenuInvoke ::tk::MenuInvoke + tkMenuLeave ::tk::MenuLeave + tkMenuLeftArrow ::tk::MenuLeftArrow + tkMenuMotion ::tk::MenuMotion + tkMenuNextEntry ::tk::MenuNextEntry + tkMenuNextMenu ::tk::MenuNextMenu + tkMenuRightArrow ::tk::MenuRightArrow + tkMenuUnpost ::tk::MenuUnpost + tkMenuUpArrow ::tk::MenuUpArrow + tkMessageBox ::tk::MessageBox + tkMotifFDialog ::tk::MotifFDialog + tkMotifFDialog_ActivateDList ::tk::MotifFDialog_ActivateDList + tkMotifFDialog_ActivateFList ::tk::MotifFDialog_ActivateFList + tkMotifFDialog_ActivateFEnt ::tk::MotifFDialog_ActivateFEnt + tkMotifFDialog_ActivateSEnt ::tk::MotifFDialog_ActivateSEnt + tkMotifFDialog ::tk::MotifFDialog + tkMotifFDialog_BrowseDList ::tk::MotifFDialog_BrowseDList + tkMotifFDialog_BrowseFList ::tk::MotifFDialog_BrowseFList + tkMotifFDialog_BuildUI ::tk::MotifFDialog_BuildUI + tkMotifFDialog_CancelCmd ::tk::MotifFDialog_CancelCmd + tkMotifFDialog_Config ::tk::MotifFDialog_Config + tkMotifFDialog_Create ::tk::MotifFDialog_Create + tkMotifFDialog_FileTypes ::tk::MotifFDialog_FileTypes + tkMotifFDialog_FilterCmd ::tk::MotifFDialog_FilterCmd + tkMotifFDialog_InterpFilter ::tk::MotifFDialog_InterpFilter + tkMotifFDialog_LoadFiles ::tk::MotifFDialog_LoadFiles + tkMotifFDialog_MakeSList ::tk::MotifFDialog_MakeSList + tkMotifFDialog_OkCmd ::tk::MotifFDialog_OkCmd + tkMotifFDialog_SetFilter ::tk::MotifFDialog_SetFilter + tkMotifFDialog_SetListMode ::tk::MotifFDialog_SetListMode + tkMotifFDialog_Update ::tk::MotifFDialog_Update + tkPostOverPoint ::tk::PostOverPoint + tkRecolorTree ::tk::RecolorTree + tkRestoreOldGrab ::tk::RestoreOldGrab + tkSaveGrabInfo ::tk::SaveGrabInfo + tkScaleActivate ::tk::ScaleActivate + tkScaleButtonDown ::tk::ScaleButtonDown + tkScaleButton2Down ::tk::ScaleButton2Down + tkScaleControlPress ::tk::ScaleControlPress + tkScaleDrag ::tk::ScaleDrag + tkScaleEndDrag ::tk::ScaleEndDrag + tkScaleIncrement ::tk::ScaleIncrement + tkScreenChanged ::tk::ScreenChanged + tkScrollButtonDown ::tk::ScrollButtonDown + tkScrollButton2Down ::tk::ScrollButton2Down + tkScrollButtonDrag ::tk::ScrollButtonDrag + tkScrollButtonUp ::tk::ScrollButtonUp + tkScrollByPages ::tk::ScrollByPages + tkScrollByUnits ::tk::ScrollByUnits + tkScrollEndDrag ::tk::ScrollEndDrag + tkScrollSelect ::tk::ScrollSelect + tkScrollStartDrag ::tk::ScrollStartDrag + tkScrollTopBottom ::tk::ScrollTopBottom + tkScrollToPos ::tk::ScrollToPos + tkTabToWindow ::tk::TabToWindow + tkTearOffMenu ::tk::TearOffMenu + tkTextAutoScan ::tk::TextAutoScan + tkTextButton1 ::tk::TextButton1 + tkTextClosestGap ::tk::TextClosestGap + tkTextInsert ::tk::TextInsert + tkTextKeyExtend ::tk::TextKeyExtend + tkTextKeySelect ::tk::TextKeySelect + tkTextNextPara ::tk::TextNextPara + tkTextNextPos ::tk::TextNextPos + tkTextNextWord ::tk::TextNextWord + tkTextPaste ::tk::TextPaste + tkTextPrevPara ::tk::TextPrevPara + tkTextPrevPos ::tk::TextPrevPos + tkTextPrevWord ::tk::TextPrevWord + tkTextResetAnchor ::tk::TextResetAnchor + tkTextScrollPages ::tk::TextScrollPages + tkTextSelectTo ::tk::TextSelectTo + tkTextSetCursor ::tk::TextSetCursor + tkTextTranspose ::tk::TextTranspose + tkTextUpDownLine ::tk::TextUpDownLine + tkTraverseToMenu ::tk::TraverseToMenu + tkTraverseWithinMenu ::tk::TraverseWithinMenu + unsupported1 ::tk::unsupported::MacWindowStyle + } + + # Map from the old global names of Tk private variable to their + # new namespace-encapsulated names. + + variable PrivateVariables + array set PrivateVariables { + droped_to_start ::tk::mac::Droped_to_start + histNum ::tk::HistNum + stub_location ::tk::mac::Stub_location + tkFocusIn ::tk::FocusIn + tkFocusOut ::tk::FocusOut + tkPalette ::tk::Palette + tkPriv ::tk::Priv + tkPrivMsgBox ::tk::PrivMsgBox + } +} + +# ::tk::unsupported::ExposePrivateCommand -- +# +# Expose one of Tk's private commands to be visible under its +# old global name +# +# Arguments: +# cmd Global name by which the command was once known, +# or a glob-style pattern. +# +# Results: +# None. +# +# Side effects: +# The old command name in the global namespace is aliased to the +# new private name. + +proc ::tk::unsupported::ExposePrivateCommand {cmd} { + variable PrivateCommands + set cmds [array get PrivateCommands $cmd] + if {[llength $cmds] == 0} { + return -code error "No compatibility support for \[$cmd]" + } + foreach {old new} $cmds { + namespace eval :: [list interp alias {} $old {}] $new + } +} + +# ::tk::unsupported::ExposePrivateVariable -- +# +# Expose one of Tk's private variables to be visible under its +# old global name +# +# Arguments: +# var Global name by which the variable was once known, +# or a glob-style pattern. +# +# Results: +# None. +# +# Side effects: +# The old variable name in the global namespace is aliased to the +# new private name. + +proc ::tk::unsupported::ExposePrivateVariable {var} { + variable PrivateVariables + set vars [array get PrivateVariables $var] + if {[llength $vars] == 0} { + return -code error "No compatibility support for \$$var" + } + namespace eval ::tk::mac {} + foreach {old new} $vars { + namespace eval :: [list upvar "#0" $new $old] + } +} diff --git a/inkstitch/bin/tk/xmfbox.tcl b/inkstitch/bin/tk/xmfbox.tcl new file mode 100644 index 0000000..0cbf251 --- /dev/null +++ b/inkstitch/bin/tk/xmfbox.tcl @@ -0,0 +1,987 @@ +# xmfbox.tcl -- +# +# Implements the "Motif" style file selection dialog for the +# Unix platform. This implementation is used only if the +# "::tk_strictMotif" flag is set. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Scriptics Corporation +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file {} + + +# ::tk::MotifFDialog -- +# +# Implements a file dialog similar to the standard Motif file +# selection box. +# +# Arguments: +# type "open" or "save" +# args Options parsed by the procedure. +# +# Results: +# When -multiple is set to 0, this returns the absolute pathname +# of the selected file. (NOTE: This is not the same as a single +# element list.) +# +# When -multiple is set to > 0, this returns a Tcl list of absolute +# pathnames. The argument for -multiple is ignored, but for consistency +# with Windows it defines the maximum amount of memory to allocate for +# the returned filenames. + +proc ::tk::MotifFDialog {type args} { + variable ::tk::Priv + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + + set w [MotifFDialog_Create $dataName $type $args] + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(sEnt) + $data(sEnt) selection range 0 end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + set result $Priv(selectFilePath) + ::tk::RestoreFocusGrab $w $data(sEnt) withdraw + + return $result +} + +# ::tk::MotifFDialog_Create -- +# +# Creates the Motif file dialog (if it doesn't exist yet) and +# initialize the internal data structure associated with the +# dialog. +# +# This procedure is used by ::tk::MotifFDialog to create the +# dialog. It's also used by the test suite to test the Motif +# file dialog implementation. User code shouldn't call this +# procedure directly. +# +# Arguments: +# dataName Name of the global "data" array for the file dialog. +# type "Save" or "Open" +# argList Options parsed by the procedure. +# +# Results: +# Pathname of the file dialog. + +proc ::tk::MotifFDialog_Create {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + MotifFDialog_Config $dataName $type $argList + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + MotifFDialog_BuildUI $w + } elseif {[winfo class $w] ne "TkMotifFDialog"} { + destroy $w + MotifFDialog_BuildUI $w + } else { + set data(fEnt) $w.top.f1.ent + set data(dList) $w.top.f2.a.l + set data(fList) $w.top.f2.b.l + set data(sEnt) $w.top.f3.ent + set data(okBtn) $w.bot.ok + set data(filterBtn) $w.bot.filter + set data(cancelBtn) $w.bot.cancel + } + MotifFDialog_SetListMode $w + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + MotifFDialog_FileTypes $w + MotifFDialog_Update $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w + wm title $w $data(-title) + + return $w +} + +# ::tk::MotifFDialog_FileTypes -- +# +# Checks the -filetypes option. If present this adds a list of radio- +# buttons to pick the file types from. +# +# Arguments: +# w Pathname of the tk_get*File dialogue. +# +# Results: +# none + +proc ::tk::MotifFDialog_FileTypes {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set f $w.top.f3.types + destroy $f + + # No file types: use "*" as the filter and display no radio-buttons + if {$data(-filetypes) eq ""} { + set data(filter) * + return + } + + # The filetypes radiobuttons + # set data(fileType) $data(-defaulttype) + # Default type to first entry + set initialTypeName [lindex $data(-filetypes) 0 0] + if {$data(-typevariable) ne ""} { + upvar #0 $data(-typevariable) typeVariable + if {[info exist typeVariable]} { + set initialTypeName $typeVariable + } + } + set ix 0 + set data(fileType) 0 + foreach fltr $data(-filetypes) { + set fname [lindex $fltr 0] + if {[string first $initialTypeName $fname] == 0} { + set data(fileType) $ix + break + } + incr ix + } + + MotifFDialog_SetFilter $w [lindex $data(-filetypes) $data(fileType)] + + #don't produce radiobuttons for only one filetype + if {[llength $data(-filetypes)] == 1} { + return + } + + frame $f + set cnt 0 + if {$data(-filetypes) ne {}} { + foreach type $data(-filetypes) { + set title [lindex [lindex $type 0] 0] + set filter [lindex $type 1] + radiobutton $f.b$cnt \ + -text $title \ + -variable ::tk::dialog::file::[winfo name $w](fileType) \ + -value $cnt \ + -command [list tk::MotifFDialog_SetFilter $w $type] + pack $f.b$cnt -side left + incr cnt + } + } + $f.b$data(fileType) invoke + + pack $f -side bottom -fill both + + return +} + +# This proc gets called whenever data(filter) is set +# +proc ::tk::MotifFDialog_SetFilter {w type} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + set data(filter) [lindex $type 1] + set Priv(selectFileType) [lindex [lindex $type 0] 0] + + MotifFDialog_Update $w +} + +# ::tk::MotifFDialog_Config -- +# +# Iterates over the optional arguments to determine the option +# values for the Motif file dialog; gives default values to +# unspecified options. +# +# Arguments: +# dataName The name of the global variable in which +# data for the file dialog is stored. +# type "Save" or "Open" +# argList Options parsed by the procedure. + +proc ::tk::MotifFDialog_Config {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + set data(type) $type + + # 1: the configuration specs + # + set specs { + {-defaultextension "" "" ""} + {-filetypes "" "" ""} + {-initialdir "" "" ""} + {-initialfile "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + {-typevariable "" "" ""} + } + if {$type eq "open"} { + lappend specs {-multiple "" "" "0"} + } + if {$type eq "save"} { + lappend specs {-confirmoverwrite "" "" "1"} + } + + set data(-multiple) 0 + set data(-confirmoverwrite) 1 + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + set data(selectFile) "" + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + if {$type eq "open"} { + if {$data(-multiple) != 0} { + set data(-title) "[mc {Open Multiple Files}]" + } else { + set data(-title) [mc "Open"] + } + } else { + set data(-title) [mc "Save As"] + } + } + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + if {[file isdirectory $data(-initialdir)]} { + set data(selectPath) [lindex [glob $data(-initialdir)] 0] + } else { + set data(selectPath) [pwd] + } + + # Convert the initialdir to an absolute path name. + + set old [pwd] + cd $data(selectPath) + set data(selectPath) [pwd] + cd $old + } + set data(selectFile) $data(-initialfile) + + # 5. Parse the -filetypes option. It is not used by the motif + # file dialog, but we check for validity of the value to make sure + # the application code also runs fine with the TK file dialog. + # + set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] + + if {![info exists data(filter)]} { + set data(filter) * + } + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# ::tk::MotifFDialog_BuildUI -- +# +# Builds the UI components of the Motif file dialog. +# +# Arguments: +# w Pathname of the dialog to build. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BuildUI {w} { + set dataName [lindex [split $w .] end] + upvar ::tk::dialog::file::$dataName data + + # Create the dialog toplevel and internal frames. + # + toplevel $w -class TkMotifFDialog + set top [frame $w.top -relief raised -bd 1] + set bot [frame $w.bot -relief raised -bd 1] + + pack $w.bot -side bottom -fill x + pack $w.top -side top -expand yes -fill both + + set f1 [frame $top.f1] + set f2 [frame $top.f2] + set f3 [frame $top.f3] + + pack $f1 -side top -fill x + pack $f3 -side bottom -fill x + pack $f2 -expand yes -fill both + + set f2a [frame $f2.a] + set f2b [frame $f2.b] + + grid $f2a -row 0 -column 0 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ + -sticky news + grid $f2b -row 0 -column 1 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ + -sticky news + grid rowconfigure $f2 0 -minsize 0 -weight 1 + grid columnconfigure $f2 0 -minsize 0 -weight 1 + grid columnconfigure $f2 1 -minsize 150 -weight 2 + + # The Filter box + # + bind [::tk::AmpWidget label $f1.lab -text [mc "Fil&ter:"] -anchor w] \ + <> [list focus $f1.ent] + entry $f1.ent + pack $f1.lab -side top -fill x -padx 6 -pady 4 + pack $f1.ent -side top -fill x -padx 4 -pady 0 + set data(fEnt) $f1.ent + + # The file and directory lists + # + set data(dList) [MotifFDialog_MakeSList $w $f2a \ + [mc "&Directory:"] DList] + set data(fList) [MotifFDialog_MakeSList $w $f2b \ + [mc "Fi&les:"] FList] + + # The Selection box + # + bind [::tk::AmpWidget label $f3.lab -text [mc "&Selection:"] -anchor w] \ + <> [list focus $f3.ent] + entry $f3.ent + pack $f3.lab -side top -fill x -padx 6 -pady 0 + pack $f3.ent -side top -fill x -padx 4 -pady 4 + set data(sEnt) $f3.ent + + # The buttons + # + set maxWidth [::tk::mcmaxamp &OK &Filter &Cancel] + set maxWidth [expr {$maxWidth<6?6:$maxWidth}] + set data(okBtn) [::tk::AmpWidget button $bot.ok -text [mc "&OK"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_OkCmd $w]] + set data(filterBtn) [::tk::AmpWidget button $bot.filter -text [mc "&Filter"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_FilterCmd $w]] + set data(cancelBtn) [::tk::AmpWidget button $bot.cancel -text [mc "&Cancel"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_CancelCmd $w]] + + pack $bot.ok $bot.filter $bot.cancel -padx 10 -pady 10 -expand yes \ + -side left + + # Create the bindings: + # + bind $w [list ::tk::AltKeyInDialog $w %A] + + bind $data(fEnt) [list tk::MotifFDialog_ActivateFEnt $w] + bind $data(sEnt) [list tk::MotifFDialog_ActivateSEnt $w] + bind $w [list tk::MotifFDialog_CancelCmd $w] + bind $w.bot {set ::tk::Priv(selectFilePath) {}} + + wm protocol $w WM_DELETE_WINDOW [list tk::MotifFDialog_CancelCmd $w] +} + +proc ::tk::MotifFDialog_SetListMode {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$data(-multiple) != 0} { + set selectmode extended + } else { + set selectmode browse + } + set f $w.top.f2.b + $f.l configure -selectmode $selectmode +} + +# ::tk::MotifFDialog_MakeSList -- +# +# Create a scrolled-listbox and set the keyboard accelerator +# bindings so that the list selection follows what the user +# types. +# +# Arguments: +# w Pathname of the dialog box. +# f Frame widget inside which to create the scrolled +# listbox. This frame widget already exists. +# label The string to display on top of the listbox. +# under Sets the -under option of the label. +# cmdPrefix Specifies procedures to call when the listbox is +# browsed or activated. + +proc ::tk::MotifFDialog_MakeSList {w f label cmdPrefix} { + bind [::tk::AmpWidget label $f.lab -text $label -anchor w] \ + <> [list focus $f.l] + listbox $f.l -width 12 -height 5 -exportselection 0\ + -xscrollcommand [list $f.h set] -yscrollcommand [list $f.v set] + scrollbar $f.v -orient vertical -takefocus 0 -command [list $f.l yview] + scrollbar $f.h -orient horizontal -takefocus 0 -command [list $f.l xview] + grid $f.lab -row 0 -column 0 -sticky news -rowspan 1 -columnspan 2 \ + -padx 2 -pady 2 + grid $f.l -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news + grid $f.v -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky news + grid $f.h -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news + + grid rowconfigure $f 0 -weight 0 -minsize 0 + grid rowconfigure $f 1 -weight 1 -minsize 0 + grid columnconfigure $f 0 -weight 1 -minsize 0 + + # bindings for the listboxes + # + set list $f.l + bind $list <> [list tk::MotifFDialog_Browse$cmdPrefix $w] + bind $list \ + [list tk::MotifFDialog_Activate$cmdPrefix $w] + bind $list "tk::MotifFDialog_Browse$cmdPrefix [list $w]; \ + tk::MotifFDialog_Activate$cmdPrefix [list $w]" + + bindtags $list [list Listbox $list [winfo toplevel $list] all] + ListBoxKeyAccel_Set $list + + return $f.l +} + +# ::tk::MotifFDialog_InterpFilter -- +# +# Interpret the string in the filter entry into two components: +# the directory and the pattern. If the string is a relative +# pathname, give a warning to the user and restore the pattern +# to original. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# A list of two elements. The first element is the directory +# specified # by the filter. The second element is the filter +# pattern itself. + +proc ::tk::MotifFDialog_InterpFilter {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text [string trim [$data(fEnt) get]] + + # Perform tilde substitution + # + set badTilde 0 + if {[string index $text 0] eq "~"} { + set list [file split $text] + set tilde [lindex $list 0] + if {[catch {set tilde [glob $tilde]}]} { + set badTilde 1 + } else { + set text [eval file join [concat $tilde [lrange $list 1 end]]] + } + } + + # If the string is a relative pathname, combine it + # with the current selectPath. + + set relative 0 + if {[file pathtype $text] eq "relative"} { + set relative 1 + } elseif {$badTilde} { + set relative 1 + } + + if {$relative} { + tk_messageBox -icon warning -type ok \ + -message "\"$text\" must be an absolute pathname" + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(filter)] + + return [list $data(selectPath) $data(filter)] + } + + set resolved [::tk::dialog::file::JoinFile [file dirname $text] [file tail $text]] + + if {[file isdirectory $resolved]} { + set dir $resolved + set fil $data(filter) + } else { + set dir [file dirname $resolved] + set fil [file tail $resolved] + } + + return [list $dir $fil] +} + +# ::tk::MotifFDialog_Update +# +# Load the files and synchronize the "filter" and "selection" fields +# boxes. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_Update {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 \ + [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] + $data(sEnt) delete 0 end + $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(selectFile)] + + MotifFDialog_LoadFiles $w +} + +# ::tk::MotifFDialog_LoadFiles -- +# +# Loads the files and directories into the two listboxes according +# to the filter setting. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_LoadFiles {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(dList) delete 0 end + $data(fList) delete 0 end + + set appPWD [pwd] + if {[catch {cd $data(selectPath)}]} { + cd $appPWD + + $data(dList) insert end ".." + return + } + + # Make the dir and file lists + # + # For speed we only have one glob, which reduces the file system + # calls (good for slow NFS networks). + # + # We also do two smaller sorts (files + dirs) instead of one large sort, + # which gives a small speed increase. + # + set top 0 + set dlist "" + set flist "" + foreach f [glob -nocomplain .* *] { + if {[file isdir ./$f]} { + lappend dlist $f + } else { + foreach pat $data(filter) { + if {[string match $pat $f]} { + if {[string match .* $f]} { + incr top + } + lappend flist $f + break + } + } + } + } + eval [list $data(dList) insert end] [lsort -dictionary $dlist] + eval [list $data(fList) insert end] [lsort -dictionary $flist] + + # The user probably doesn't want to see the . files. We adjust the view + # so that the listbox displays all the non-dot files + $data(fList) yview $top + + cd $appPWD +} + +# ::tk::MotifFDialog_BrowseDList -- +# +# This procedure is called when the directory list is browsed +# (clicked-over) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BrowseDList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + focus $data(dList) + if {[$data(dList) curselection] eq ""} { + return + } + set subdir [$data(dList) get [$data(dList) curselection]] + if {$subdir eq ""} { + return + } + + $data(fList) selection clear 0 end + + set list [MotifFDialog_InterpFilter $w] + set data(filter) [lindex $list 1] + + switch -- $subdir { + . { + set newSpec [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] + } + .. { + set newSpec [::tk::dialog::file::JoinFile [file dirname $data(selectPath)] \ + $data(filter)] + } + default { + set newSpec [::tk::dialog::file::JoinFile [::tk::dialog::file::JoinFile \ + $data(selectPath) $subdir] $data(filter)] + } + } + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 $newSpec +} + +# ::tk::MotifFDialog_ActivateDList -- +# +# This procedure is called when the directory list is activated +# (double-clicked) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateDList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(dList) curselection] eq ""} { + return + } + set subdir [$data(dList) get [$data(dList) curselection]] + if {$subdir eq ""} { + return + } + + $data(fList) selection clear 0 end + + switch -- $subdir { + . { + set newDir $data(selectPath) + } + .. { + set newDir [file dirname $data(selectPath)] + } + default { + set newDir [::tk::dialog::file::JoinFile $data(selectPath) $subdir] + } + } + + set data(selectPath) $newDir + MotifFDialog_Update $w + + if {$subdir ne ".."} { + $data(dList) selection set 0 + $data(dList) activate 0 + } else { + $data(dList) selection set 1 + $data(dList) activate 1 + } +} + +# ::tk::MotifFDialog_BrowseFList -- +# +# This procedure is called when the file list is browsed +# (clicked-over) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BrowseFList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + focus $data(fList) + set data(selectFile) "" + foreach item [$data(fList) curselection] { + lappend data(selectFile) [$data(fList) get $item] + } + if {[llength $data(selectFile)] == 0} { + return + } + + $data(dList) selection clear 0 end + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(filter)] + $data(fEnt) xview end + + # if it's a multiple selection box, just put in the filenames + # otherwise put in the full path as usual + $data(sEnt) delete 0 end + if {$data(-multiple) != 0} { + $data(sEnt) insert 0 $data(selectFile) + } else { + $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + [lindex $data(selectFile) 0]] + } + $data(sEnt) xview end +} + +# ::tk::MotifFDialog_ActivateFList -- +# +# This procedure is called when the file list is activated +# (double-clicked) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateFList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(fList) curselection] eq ""} { + return + } + set data(selectFile) [$data(fList) get [$data(fList) curselection]] + if {$data(selectFile) eq ""} { + return + } else { + MotifFDialog_ActivateSEnt $w + } +} + +# ::tk::MotifFDialog_ActivateFEnt -- +# +# This procedure is called when the user presses Return inside +# the "filter" entry. It updates the dialog according to the +# text inside the filter entry. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateFEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set list [MotifFDialog_InterpFilter $w] + set data(selectPath) [lindex $list 0] + set data(filter) [lindex $list 1] + + MotifFDialog_Update $w +} + +# ::tk::MotifFDialog_ActivateSEnt -- +# +# This procedure is called when the user presses Return inside +# the "selection" entry. It sets the ::tk::Priv(selectFilePath) +# variable so that the vwait loop in tk::MotifFDialog will be +# terminated. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateSEnt {w} { + variable ::tk::Priv + upvar ::tk::dialog::file::[winfo name $w] data + + set selectFilePath [string trim [$data(sEnt) get]] + + if {$selectFilePath eq ""} { + MotifFDialog_FilterCmd $w + return + } + + if {$data(-multiple) == 0} { + set selectFilePath [list $selectFilePath] + } + + if {[file isdirectory [lindex $selectFilePath 0]]} { + set data(selectPath) [lindex [glob $selectFilePath] 0] + set data(selectFile) "" + MotifFDialog_Update $w + return + } + + set newFileList "" + foreach item $selectFilePath { + if {[file pathtype $item] ne "absolute"} { + set item [file join $data(selectPath) $item] + } elseif {![file exists [file dirname $item]]} { + tk_messageBox -icon warning -type ok \ + -message [mc {Directory "%1$s" does not exist.} \ + [file dirname $item]] + return + } + + if {![file exists $item]} { + if {$data(type) eq "open"} { + tk_messageBox -icon warning -type ok \ + -message [mc {File "%1$s" does not exist.} $item] + return + } + } elseif {$data(type) eq "save" && $data(-confirmoverwrite)} { + set message [format %s%s \ + [mc "File \"%1\$s\" already exists.\n\n" $selectFilePath] \ + [mc {Replace existing file?}]] + set answer [tk_messageBox -icon warning -type yesno \ + -message $message] + if {$answer eq "no"} { + return + } + } + + lappend newFileList $item + } + + # Return selected filter + if {[info exists data(-typevariable)] && $data(-typevariable) ne "" + && [info exists data(-filetypes)] && $data(-filetypes) ne ""} { + upvar #0 $data(-typevariable) typeVariable + set typeVariable [lindex $data(-filetypes) $data(fileType) 0] + } + + if {$data(-multiple) != 0} { + set Priv(selectFilePath) $newFileList + } else { + set Priv(selectFilePath) [lindex $newFileList 0] + } + + # Set selectFile and selectPath to first item in list + set Priv(selectFile) [file tail [lindex $newFileList 0]] + set Priv(selectPath) [file dirname [lindex $newFileList 0]] +} + + +proc ::tk::MotifFDialog_OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + MotifFDialog_ActivateSEnt $w +} + +proc ::tk::MotifFDialog_FilterCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + MotifFDialog_ActivateFEnt $w +} + +proc ::tk::MotifFDialog_CancelCmd {w} { + variable ::tk::Priv + + set Priv(selectFilePath) "" + set Priv(selectFile) "" + set Priv(selectPath) "" +} + +proc ::tk::ListBoxKeyAccel_Set {w} { + bind Listbox "" + bind $w [list tk::ListBoxKeyAccel_Unset $w] + bind $w [list tk::ListBoxKeyAccel_Key $w %A] +} + +proc ::tk::ListBoxKeyAccel_Unset {w} { + variable ::tk::Priv + + catch {after cancel $Priv(lbAccel,$w,afterId)} + unset -nocomplain Priv(lbAccel,$w) Priv(lbAccel,$w,afterId) +} + +# ::tk::ListBoxKeyAccel_Key-- +# +# This procedure maintains a list of recently entered keystrokes +# over a listbox widget. It arranges an idle event to move the +# selection of the listbox to the entry that begins with the +# keystrokes. +# +# Arguments: +# w The pathname of the listbox. +# key The key which the user just pressed. +# +# Results: +# None. + +proc ::tk::ListBoxKeyAccel_Key {w key} { + variable ::tk::Priv + + if { $key eq "" } { + return + } + append Priv(lbAccel,$w) $key + ListBoxKeyAccel_Goto $w $Priv(lbAccel,$w) + catch { + after cancel $Priv(lbAccel,$w,afterId) + } + set Priv(lbAccel,$w,afterId) [after 500 \ + [list tk::ListBoxKeyAccel_Reset $w]] +} + +proc ::tk::ListBoxKeyAccel_Goto {w string} { + variable ::tk::Priv + + set string [string tolower $string] + set end [$w index end] + set theIndex -1 + + for {set i 0} {$i < $end} {incr i} { + set item [string tolower [$w get $i]] + if {[string compare $string $item] >= 0} { + set theIndex $i + } + if {[string compare $string $item] <= 0} { + set theIndex $i + break + } + } + + if {$theIndex >= 0} { + $w selection clear 0 end + $w selection set $theIndex $theIndex + $w activate $theIndex + $w see $theIndex + event generate $w <> + } +} + +proc ::tk::ListBoxKeyAccel_Reset {w} { + variable ::tk::Priv + + unset -nocomplain Priv(lbAccel,$w) +} + +proc ::tk_getFileType {} { + variable ::tk::Priv + + return $Priv(selectFileType) +} + diff --git a/inkstitch/bin/unicodedata.pyd b/inkstitch/bin/unicodedata.pyd new file mode 100644 index 0000000..883789d Binary files /dev/null and b/inkstitch/bin/unicodedata.pyd differ diff --git a/inkstitch/bin/win32api.pyd b/inkstitch/bin/win32api.pyd new file mode 100644 index 0000000..6efa006 Binary files /dev/null and b/inkstitch/bin/win32api.pyd differ diff --git a/inkstitch/bin/win32com.shell.shell.pyd b/inkstitch/bin/win32com.shell.shell.pyd new file mode 100644 index 0000000..b1b47e7 Binary files /dev/null and b/inkstitch/bin/win32com.shell.shell.pyd differ diff --git a/inkstitch/bin/win32pdh.pyd b/inkstitch/bin/win32pdh.pyd new file mode 100644 index 0000000..db15385 Binary files /dev/null and b/inkstitch/bin/win32pdh.pyd differ diff --git a/inkstitch/bin/win32pipe.pyd b/inkstitch/bin/win32pipe.pyd new file mode 100644 index 0000000..68c4fd7 Binary files /dev/null and b/inkstitch/bin/win32pipe.pyd differ diff --git a/inkstitch/bin/win32trace.pyd b/inkstitch/bin/win32trace.pyd new file mode 100644 index 0000000..4f8974b Binary files /dev/null and b/inkstitch/bin/win32trace.pyd differ diff --git a/inkstitch/bin/win32ui.pyd b/inkstitch/bin/win32ui.pyd new file mode 100644 index 0000000..c28ec48 Binary files /dev/null and b/inkstitch/bin/win32ui.pyd differ diff --git a/inkstitch/bin/win32wnet.pyd b/inkstitch/bin/win32wnet.pyd new file mode 100644 index 0000000..23e2d15 Binary files /dev/null and b/inkstitch/bin/win32wnet.pyd differ diff --git a/inkstitch/bin/wx._adv.pyd b/inkstitch/bin/wx._adv.pyd new file mode 100644 index 0000000..f2d6438 Binary files /dev/null and b/inkstitch/bin/wx._adv.pyd differ diff --git a/inkstitch/bin/wx._core.pyd b/inkstitch/bin/wx._core.pyd new file mode 100644 index 0000000..0133935 Binary files /dev/null and b/inkstitch/bin/wx._core.pyd differ diff --git a/inkstitch/bin/wx.siplib.pyd b/inkstitch/bin/wx.siplib.pyd new file mode 100644 index 0000000..4ad11fb Binary files /dev/null and b/inkstitch/bin/wx.siplib.pyd differ diff --git a/inkstitch/electron/LICENSE.electron.txt b/inkstitch/electron/LICENSE.electron.txt new file mode 100644 index 0000000..7a40eac --- /dev/null +++ b/inkstitch/electron/LICENSE.electron.txt @@ -0,0 +1,20 @@ +Copyright (c) 2013-2018 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/inkstitch/electron/LICENSES.chromium.html b/inkstitch/electron/LICENSES.chromium.html new file mode 100644 index 0000000..99c1769 --- /dev/null +++ b/inkstitch/electron/LICENSES.chromium.html @@ -0,0 +1,38430 @@ + + + + + +Credits + + + + +Credits + +
    +
    +Abseil +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +   
    +   
    +
    +
    + +
    +Accessibility Audit library, from Accessibility Developer Tools +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Alliance for Open Media Video Codec +homepage + + +
    +
    Copyright (c) 2016, Alliance for Open Media. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +Almost Native Graphics Layer Engine +homepage + + +
    +
    // Copyright 2018 The ANGLE Project Authors.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions
    +// are met:
    +//
    +//     Redistributions of source code must retain the above copyright
    +//     notice, this list of conditions and the following disclaimer.
    +//
    +//     Redistributions in binary form must reproduce the above
    +//     copyright notice, this list of conditions and the following
    +//     disclaimer in the documentation and/or other materials provided
    +//     with the distribution.
    +//
    +//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
    +//     Ltd., nor the names of their contributors may be used to endorse
    +//     or promote products derived from this software without specific
    +//     prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +// POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +American Fuzzy Lop +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android bionic libc +homepage + + +
    +
       Copyright (c) 2014, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +   strchr - find a character in a string
    +
    +   Copyright (c) 2014, ARM Limited
    +   All rights Reserved.
    +   Copyright (c) 2014, Linaro Ltd.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the company nor the names of its contributors
    +         may be used to endorse or promote products derived from this
    +         software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    + Copyright (c) 1993 John Brezak
    + All rights reserved.
    +
    + Redistribution and use in source and binary forms, with or without
    + modification, are permitted provided that the following conditions
    + are met:
    + 1. Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    + 2. Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in the
    +    documentation and/or other materials provided with the distribution.
    + 3. The name of the author may be used to endorse or promote products
    +    derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +====================================================
    +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
    +
    +Developed at SunPro, a Sun Microsystems, Inc. business.
    +Permission to use, copy, modify, and distribute this
    +software is freely granted, provided that this notice
    +is preserved.
    +
    +-------------------------------------------------------------------
    +
    +Based on the UCB version with the ID appearing below.
    +This is ANSIish only when "multibyte character == plain character".
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the project nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
    +Copyright (C) 1995-1999, 2001, 2003  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
    +Copyright (C) 1997-2001  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2006 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2006 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +All rights reserved.
    +Copyright (c) 2013-2014, NVIDIA Corporation.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2009 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +Copyright (c) 2008 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Android adaptation and tweak by Jim Huang <jserv@0xlab.org>.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2011 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2012 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2012 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +All rights reserved.
    +Copyright (c) 2013-2014 NVIDIA Corporation.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2014 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2014 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2015 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2015 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1980, 1983, 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1982, 1986, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1982, 1986, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1987, 1989
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1989
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software written by Ken Arnold and
    +published in UNIX Review, Vol. 6, No. 8.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms are permitted
    +provided that the above copyright notice and this paragraph are
    +duplicated in all such forms and that any documentation,
    +advertising materials, and other materials related to such
    +distribution and use acknowledge that the software was developed
    +by the University of California, Berkeley. The name of the
    +University may not be used to endorse or promote products derived
    +from this software without specific prior written permission.
    +THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Roger L. Snyder.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from locore.s.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +William Jolitz.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Donn Seeley at UUNET Technologies, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Donn Seeley at UUNET Technologies, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Berkeley Software Design, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +This code is derived from software contributed to Berkeley by
    +Hugh Smith at The University of Guelph.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993, 1995,
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Havard Eidnes.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992 Henry Spencer.
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer of the University of Toronto.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Ralph Campbell.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Ralph Campbell. This file is derived from the MIPS RISC
    +Architecture book by Gerry Kane.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This software was developed by the Computer Systems Engineering group
    +at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
    +contributed to Berkeley.
    +
    +All advertising materials mentioning features or use of this software
    +must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Lawrence Berkeley Laboratory.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993, 1994 Henry Spencer.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1993 Martin Birgmeier
    +All rights reserved.
    +
    +You may redistribute unmodified or modified versions of this source
    +code provided that the above copyright notice and this and the
    +following conditions are retained.
    +
    +This software is provided ``as is'', and comes with no warranties
    +of any kind. I shall in no event be liable for anything that happens
    +to anyone/anything when using this software.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1994 SigmaSoft, Th. Lockert <tholo@sigmasoft.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
    +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
    +CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996, David Mazieres <dm@uun.org>
    +Copyright (c) 2008, Damien Miller <djm@openbsd.org>
    +Copyright (c) 2013, Markus Friedl <markus@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996-1998, 2008 Theo de Raadt
    +Copyright (c) 1997, 2008-2009 Todd C. Miller
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Mark Brinicombe
    +Copyright (c) 2010 Android Open Source Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by Mark Brinicombe
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code was contributed to The NetBSD Foundation by Klaus Klein.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Luke Mewburn.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Luke Mewburn; and by Jason R. Thorpe.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Softweyr LLC.  All rights reserved.
    +
    +strtok_r, from Berkeley strtok
    +Oct 13, 1998 by Wes Peters <wes@softweyr.com>
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notices, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notices, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL SOFTWEYR LLC, THE
    +REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Klaus Klein.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1999
    +   David E. O'Brien
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 Ben Harris.
    +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the project nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Atsushi Onoe.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the NetBSD
    +   Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Dieter Baron and Thomas Klausner.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001 Wasabi Systems, Inc.
    +All rights reserved.
    +
    +Written by Frank van der Linden for Wasabi Systems, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +     This product includes software developed for the NetBSD Project by
    +     Wasabi Systems, Inc.
    +4. The name of Wasabi Systems, Inc. may not be used to endorse
    +   or promote products derived from this software without specific prior
    +   written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of Opsycon AB nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Daniel Hartmeier
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +   - Redistributions of source code must retain the above copyright
    +     notice, this list of conditions and the following disclaimer.
    +   - Redistributions in binary form must reproduce the above
    +     copyright notice, this list of conditions and the following
    +     disclaimer in the documentation and/or other materials provided
    +     with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Marc Espie.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
    +PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Tim J. Robbins
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Sponsored in part by the Defense Advanced Research Projects
    +Agency (DARPA) and Air Force Research Laboratory, Air Force
    +Materiel Command, USAF, under agreement number F39502-99-1-0512.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002, 2003 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002-2004 Tim J. Robbins
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002-2004 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru>
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The names of the authors may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 David Schultz <das@FreeBSD.ORG>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Networks Associates Technology, Inc.
    +All rights reserved.
    +
    +Portions of this software were developed for the FreeBSD Project by
    +Jacques A. Vidrine, Safeport Network Services, and Network
    +Associates Laboratories, the Security Research Division of Network
    +Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
    +("CBOSS"), as part of the DARPA CHATS research program.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Sponsored in part by the Defense Advanced Research Projects
    +Agency (DARPA) and Air Force Research Laboratory, Air Force
    +Materiel Command, USAF, under agreement number F39502-99-1-0512.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1997,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Portions Copyright (c) 1996-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004, 2005 David Schultz <das@FreeBSD.ORG>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2005 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2005 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007-2008  Michael G Schwern
    +
    +This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
    +
    +The MIT License:
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007-2008  Michael G Schwern
    +
    +This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
    +
    +The MIT License:
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +Origin: http://code.google.com/p/y2038
    +Modified for Bionic by the Android Open Source Project
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008  Android Open Source Project (query id randomization)
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008 Todd C. Miller <millert@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008, Damien Miller <djm@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 David Schultz <das@FreeBSD.org>
    +All rights reserved.
    +
    +Copyright (c) 2011 The FreeBSD Foundation
    +All rights reserved.
    +Portions of this software were developed by David Chisnall
    +under sponsorship from the FreeBSD Foundation.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 David Schultz <das@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 The NetBSD Foundation, Inc.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Roy Marples.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010 MIPS Technologies, Inc.
    +
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +     * Redistributions of source code must retain the above copyright
    +       notice, this list of conditions and the following disclaimer.
    +     * Redistributions in binary form must reproduce the above copyright
    +       notice, this list of conditions and the following disclaimer
    +       in the documentation and/or other materials provided with
    +       the distribution.
    +     * Neither the name of MIPS Technologies Inc. nor the names of its
    +       contributors may be used to endorse or promote products derived
    +       from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010, 2011, 2012, 2013 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 David Chisnall
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Ed Schouten <ed@FreeBSD.org>
    +                   David Chisnall <theraven@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
    +Copyright (c) 2009 Ted Unangst
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 The Android Open Source Project
    +Copyright (c) 2008 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, 2012, 2013 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, VMware, Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +    * Neither the name of the VMware, Inc. nor the names of its contributors
    +      may be used to endorse or promote products derived from this software
    +      without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012, Linaro Limited
    +   All rights reserved.
    +   Copyright (c) 2014, NVIDIA Corporation.  All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012-2015
    +     MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013
    +     MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 Antoine Jacoutot <ajacoutot@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014
    +     Imagination Technologies Limited.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY IMAGINATION TECHNOLOGIES LIMITED ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL IMAGINATION TECHNOLOGIES LIMITED BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
    +Copyright (c) 2014 Bob Beck <beck@obtuse.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Emulation of getentropy(2) as documented at:
    +http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)1999 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)1999, 2000, 2001 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)2001 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)2003 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
    +Copyright 2008 Damien Miller <djm@openbsd.org>
    +All rights reserved.
    +
    +Theo de Raadt <deraadt@openbsd.org> came up with the idea of using
    +such a mathematical system to generate more random (yet non-repeating)
    +ids to solve the resolver/named problem.  But Niels designed the
    +actual system based on the constraints.
    +
    +Later modified by Damien Miller to wrap the LCG output in a 15-bit
    +permutation generator based on a Luby-Rackoff block cipher. This
    +ensures the output is non-repeating and preserves the MSB twiddle
    +trick, but makes it more resistant to LCG prediction.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright 2008  Android Open Source Project (source port randomization)
    +Copyright (c) 1985, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (C) 2004, 2005, 2008, 2009  Internet Systems Consortium, Inc. ("ISC")
    +Portions Copyright (C) 1996-2003  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (c) 1995 by International Business Machines, Inc.
    +
    +International Business Machines, Inc. (hereinafter called IBM) grants
    +permission under its copyrights to use, copy, modify, and distribute this
    +Software with or without fee, provided that the above copyright notice and
    +all paragraphs of this notice appear in all copies, and that the name of IBM
    +not be used in connection with the marketing of any product incorporating
    +the Software or modifications thereof, without specific, written prior
    +permission.
    +
    +To the extent it has a right to do so, IBM grants an immunity from suit
    +under its patents, if any, for the use, sale or manufacture of products to
    +the extent that such products are used for performing Domain Name System
    +dynamic updates in TCP/IP networks by means of the Software.  No immunity is
    +granted for any product per se or for any other function of any product.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
    +DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
    +IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright(C) 1995, Jason Downs.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998, 1999 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998, 2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998-2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998-2001 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +memchr - find a character in a memory zone
    +
    +Copyright (c) 2014, ARM Limited
    +All rights Reserved.
    +Copyright (c) 2014, Linaro Ltd.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +    * Neither the name of the company nor the names of its contributors
    +      may be used to endorse or promote products derived from this
    +      software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +
    +
    +
    + +
    +Android Crazy Linker +homepage + + +
    +
    // Copyright 2014 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +/*
    + * Copyright (C) 2012 The Android Open Source Project
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *  * Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *  * Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + */
    +
    +
    +
    + +
    +Android Explicit Synchronization +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android FloatProperty +homepage + + +
    +
       Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android Open Source Project - App Compat Library +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android Open Source Project - Settings App +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android SDK +homepage + + +
    +
    Notice for all the files in this folder.
    +------------------------------------------------------------
    +
    +
    +   
    +   Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    + 
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Apple sample code +homepage + + +
    +
    Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
    +Inc. ("Apple") in consideration of your agreement to the following
    +terms, and your use, installation, modification or redistribution of
    +this Apple software constitutes acceptance of these terms.  If you do
    +not agree with these terms, please do not use, install, modify or
    +redistribute this Apple software.
    +
    +In consideration of your agreement to abide by the following terms, and
    +subject to these terms, Apple grants you a personal, non-exclusive
    +license, under Apple's copyrights in this original Apple software (the
    +"Apple Software"), to use, reproduce, modify and redistribute the Apple
    +Software, with or without modifications, in source and/or binary forms;
    +provided that if you redistribute the Apple Software in its entirety and
    +without modifications, you must retain this notice and the following
    +text and disclaimers in all such redistributions of the Apple Software.
    +Neither the name, trademarks, service marks or logos of Apple Inc. may
    +be used to endorse or promote products derived from the Apple Software
    +without specific prior written permission from Apple.  Except as
    +expressly stated in this notice, no other rights or licenses, express or
    +implied, are granted by Apple herein, including but not limited to any
    +patent rights that may be infringed by your derivative works or by other
    +works in which the Apple Software may be incorporated.
    +
    +The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
    +MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
    +THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
    +OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
    +
    +IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
    +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
    +MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
    +AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
    +STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +Copyright (C) 2009 Apple Inc. All Rights Reserved.
    +
    +
    + +
    +ARCore SDK +homepage + + +
    +
    Copyright (c) 2017, Google Inc.
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +                                Apache License
    +                        Version 2.0, January 2004
    +                    http://www.apache.org/licenses/
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +1. Definitions.
    +    "License" shall mean the terms and conditions for use, reproduction,
    +    and distribution as defined by Sections 1 through 9 of this document.
    +    "Licensor" shall mean the copyright owner or entity authorized by
    +    the copyright owner that is granting the License.
    +    "Legal Entity" shall mean the union of the acting entity and all
    +    other entities that control, are controlled by, or are under common
    +    control with that entity. For the purposes of this definition,
    +    "control" means (i) the power, direct or indirect, to cause the
    +    direction or management of such entity, whether by contract or
    +    otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +    outstanding shares, or (iii) beneficial ownership of such entity.
    +    "You" (or "Your") shall mean an individual or Legal Entity
    +    exercising permissions granted by this License.
    +    "Source" form shall mean the preferred form for making modifications,
    +    including but not limited to software source code, documentation
    +    source, and configuration files.
    +    "Object" form shall mean any form resulting from mechanical
    +    transformation or translation of a Source form, including but
    +    not limited to compiled object code, generated documentation,
    +    and conversions to other media types.
    +    "Work" shall mean the work of authorship, whether in Source or
    +    Object form, made available under the License, as indicated by a
    +    copyright notice that is included in or attached to the work
    +    (an example is provided in the Appendix below).
    +    "Derivative Works" shall mean any work, whether in Source or Object
    +    form, that is based on (or derived from) the Work and for which the
    +    editorial revisions, annotations, elaborations, or other modifications
    +    represent, as a whole, an original work of authorship. For the purposes
    +    of this License, Derivative Works shall not include works that remain
    +    separable from, or merely link (or bind by name) to the interfaces of,
    +    the Work and Derivative Works thereof.
    +    "Contribution" shall mean any work of authorship, including
    +    the original version of the Work and any modifications or additions
    +    to that Work or Derivative Works thereof, that is intentionally
    +    submitted to Licensor for inclusion in the Work by the copyright owner
    +    or by an individual or Legal Entity authorized to submit on behalf of
    +    the copyright owner. For the purposes of this definition, "submitted"
    +    means any form of electronic, verbal, or written communication sent
    +    to the Licensor or its representatives, including but not limited to
    +    communication on electronic mailing lists, source code control systems,
    +    and issue tracking systems that are managed by, or on behalf of, the
    +    Licensor for the purpose of discussing and improving the Work, but
    +    excluding communication that is conspicuously marked or otherwise
    +    designated in writing by the copyright owner as "Not a Contribution."
    +    "Contributor" shall mean Licensor and any individual or Legal Entity
    +    on behalf of whom a Contribution has been received by Licensor and
    +    subsequently incorporated within the Work.
    +2. Grant of Copyright License. Subject to the terms and conditions of
    +    this License, each Contributor hereby grants to You a perpetual,
    +    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +    copyright license to reproduce, prepare Derivative Works of,
    +    publicly display, publicly perform, sublicense, and distribute the
    +    Work and such Derivative Works in Source or Object form.
    +3. Grant of Patent License. Subject to the terms and conditions of
    +    this License, each Contributor hereby grants to You a perpetual,
    +    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +    (except as stated in this section) patent license to make, have made,
    +    use, offer to sell, sell, import, and otherwise transfer the Work,
    +    where such license applies only to those patent claims licensable
    +    by such Contributor that are necessarily infringed by their
    +    Contribution(s) alone or by combination of their Contribution(s)
    +    with the Work to which such Contribution(s) was submitted. If You
    +    institute patent litigation against any entity (including a
    +    cross-claim or counterclaim in a lawsuit) alleging that the Work
    +    or a Contribution incorporated within the Work constitutes direct
    +    or contributory patent infringement, then any patent licenses
    +    granted to You under this License for that Work shall terminate
    +    as of the date such litigation is filed.
    +4. Redistribution. You may reproduce and distribute copies of the
    +    Work or Derivative Works thereof in any medium, with or without
    +    modifications, and in Source or Object form, provided that You
    +    meet the following conditions:
    +    (a) You must give any other recipients of the Work or
    +        Derivative Works a copy of this License; and
    +    (b) You must cause any modified files to carry prominent notices
    +        stating that You changed the files; and
    +    (c) You must retain, in the Source form of any Derivative Works
    +        that You distribute, all copyright, patent, trademark, and
    +        attribution notices from the Source form of the Work,
    +        excluding those notices that do not pertain to any part of
    +        the Derivative Works; and
    +    (d) If the Work includes a "NOTICE" text file as part of its
    +        distribution, then any Derivative Works that You distribute must
    +        include a readable copy of the attribution notices contained
    +        within such NOTICE file, excluding those notices that do not
    +        pertain to any part of the Derivative Works, in at least one
    +        of the following places: within a NOTICE text file distributed
    +        as part of the Derivative Works; within the Source form or
    +        documentation, if provided along with the Derivative Works; or,
    +        within a display generated by the Derivative Works, if and
    +        wherever such third-party notices normally appear. The contents
    +        of the NOTICE file are for informational purposes only and
    +        do not modify the License. You may add Your own attribution
    +        notices within Derivative Works that You distribute, alongside
    +        or as an addendum to the NOTICE text from the Work, provided
    +        that such additional attribution notices cannot be construed
    +        as modifying the License.
    +    You may add Your own copyright statement to Your modifications and
    +    may provide additional or different license terms and conditions
    +    for use, reproduction, or distribution of Your modifications, or
    +    for any such Derivative Works as a whole, provided Your use,
    +    reproduction, and distribution of the Work otherwise complies with
    +    the conditions stated in this License.
    +5. Submission of Contributions. Unless You explicitly state otherwise,
    +    any Contribution intentionally submitted for inclusion in the Work
    +    by You to the Licensor shall be under the terms and conditions of
    +    this License, without any additional terms or conditions.
    +    Notwithstanding the above, nothing herein shall supersede or modify
    +    the terms of any separate license agreement you may have executed
    +    with Licensor regarding such Contributions.
    +6. Trademarks. This License does not grant permission to use the trade
    +    names, trademarks, service marks, or product names of the Licensor,
    +    except as required for reasonable and customary use in describing the
    +    origin of the Work and reproducing the content of the NOTICE file.
    +7. Disclaimer of Warranty. Unless required by applicable law or
    +    agreed to in writing, Licensor provides the Work (and each
    +    Contributor provides its Contributions) on an "AS IS" BASIS,
    +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +    implied, including, without limitation, any warranties or conditions
    +    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +    PARTICULAR PURPOSE. You are solely responsible for determining the
    +    appropriateness of using or redistributing the Work and assume any
    +    risks associated with Your exercise of permissions under this License.
    +8. Limitation of Liability. In no event and under no legal theory,
    +    whether in tort (including negligence), contract, or otherwise,
    +    unless required by applicable law (such as deliberate and grossly
    +    negligent acts) or agreed to in writing, shall any Contributor be
    +    liable to You for damages, including any direct, indirect, special,
    +    incidental, or consequential damages of any character arising as a
    +    result of this License or out of the use or inability to use the
    +    Work (including but not limited to damages for loss of goodwill,
    +    work stoppage, computer failure or malfunction, or any and all
    +    other commercial damages or losses), even if such Contributor
    +    has been advised of the possibility of such damages.
    +9. Accepting Warranty or Additional Liability. While redistributing
    +    the Work or Derivative Works thereof, You may choose to offer,
    +    and charge a fee for, acceptance of support, warranty, indemnity,
    +    or other liability obligations and/or rights consistent with this
    +    License. However, in accepting such obligations, You may act only
    +    on Your own behalf and on Your sole responsibility, not on behalf
    +    of any other Contributor, and only if You agree to indemnify,
    +    defend, and hold each Contributor harmless for any liability
    +    incurred by, or claims asserted against, such Contributor by reason
    +    of your accepting any such warranty or additional liability.
    +END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +AsyncTask +homepage + + +
    +
    Notice for all the files in this folder.
    +------------------------------------------------------------
    +
    +
    +   
    +   Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    + 
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +AXE-CORE Accessibility Audit +homepage + + +
    +
    Mozilla Public License, version 2.0
    +
    +1. Definitions
    +
    +1.1. "Contributor"
    +
    +     means each individual or legal entity that creates, contributes to the
    +     creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +
    +     means the combination of the Contributions of others (if any) used by a
    +     Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +
    +     means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +
    +     means Source Code Form to which the initial Contributor has attached the
    +     notice in Exhibit A, the Executable Form of such Source Code Form, and
    +     Modifications of such Source Code Form, in each case including portions
    +     thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +     means
    +
    +     a. that the initial Contributor has attached the notice described in
    +        Exhibit B to the Covered Software; or
    +
    +     b. that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the terms of
    +        a Secondary License.
    +
    +1.6. "Executable Form"
    +
    +     means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +
    +     means a work that combines Covered Software with other material, in a
    +     separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +
    +     means this document.
    +
    +1.9. "Licensable"
    +
    +     means having the right to grant, to the maximum extent possible, whether
    +     at the time of the initial grant or subsequently, any and all of the
    +     rights conveyed by this License.
    +
    +1.10. "Modifications"
    +
    +     means any of the following:
    +
    +     a. any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered Software; or
    +
    +     b. any new file in Source Code Form that contains any Covered Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +
    +      means any patent claim(s), including without limitation, method,
    +      process, and apparatus claims, in any patent Licensable by such
    +      Contributor that would be infringed, but for the grant of the License,
    +      by the making, using, selling, offering for sale, having made, import,
    +      or transfer of either its Contributions or its Contributor Version.
    +
    +1.12. "Secondary License"
    +
    +      means either the GNU General Public License, Version 2.0, the GNU Lesser
    +      General Public License, Version 2.1, the GNU Affero General Public
    +      License, Version 3.0, or any later versions of those licenses.
    +
    +1.13. "Source Code Form"
    +
    +      means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +
    +      means an individual or a legal entity exercising rights under this
    +      License. For legal entities, "You" includes any entity that controls, is
    +      controlled by, or is under common control with You. For purposes of this
    +      definition, "control" means (a) the power, direct or indirect, to cause
    +      the direction or management of such entity, whether by contract or
    +      otherwise, or (b) ownership of more than fifty percent (50%) of the
    +      outstanding shares or beneficial ownership of such entity.
    +
    +
    +2. License Grants and Conditions
    +
    +2.1. Grants
    +
    +     Each Contributor hereby grants You a world-wide, royalty-free,
    +     non-exclusive license:
    +
    +     a. under intellectual property rights (other than patent or trademark)
    +        Licensable by such Contributor to use, reproduce, make available,
    +        modify, display, perform, distribute, and otherwise exploit its
    +        Contributions, either on an unmodified basis, with Modifications, or
    +        as part of a Larger Work; and
    +
    +     b. under Patent Claims of such Contributor to make, use, sell, offer for
    +        sale, have made, import, and otherwise transfer either its
    +        Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +     The licenses granted in Section 2.1 with respect to any Contribution
    +     become effective for each Contribution on the date the Contributor first
    +     distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +     The licenses granted in this Section 2 are the only rights granted under
    +     this License. No additional rights or licenses will be implied from the
    +     distribution or licensing of Covered Software under this License.
    +     Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +     Contributor:
    +
    +     a. for any code that a Contributor has removed from Covered Software; or
    +
    +     b. for infringements caused by: (i) Your and any other third party's
    +        modifications of Covered Software, or (ii) the combination of its
    +        Contributions with other software (except as part of its Contributor
    +        Version); or
    +
    +     c. under Patent Claims infringed by Covered Software in the absence of
    +        its Contributions.
    +
    +     This License does not grant any rights in the trademarks, service marks,
    +     or logos of any Contributor (except as may be necessary to comply with
    +     the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +     No Contributor makes additional grants as a result of Your choice to
    +     distribute the Covered Software under a subsequent version of this
    +     License (see Section 10.2) or under the terms of a Secondary License (if
    +     permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +     Each Contributor represents that the Contributor believes its
    +     Contributions are its original creation(s) or it has sufficient rights to
    +     grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +     This License is not intended to limit any rights You have under
    +     applicable copyright doctrines of fair use, fair dealing, or other
    +     equivalents.
    +
    +2.7. Conditions
    +
    +     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
    +     Section 2.1.
    +
    +
    +3. Responsibilities
    +
    +3.1. Distribution of Source Form
    +
    +     All distribution of Covered Software in Source Code Form, including any
    +     Modifications that You create or to which You contribute, must be under
    +     the terms of this License. You must inform recipients that the Source
    +     Code Form of the Covered Software is governed by the terms of this
    +     License, and how they can obtain a copy of this License. You may not
    +     attempt to alter or restrict the recipients' rights in the Source Code
    +     Form.
    +
    +3.2. Distribution of Executable Form
    +
    +     If You distribute Covered Software in Executable Form then:
    +
    +     a. such Covered Software must also be made available in Source Code Form,
    +        as described in Section 3.1, and You must inform recipients of the
    +        Executable Form how they can obtain a copy of such Source Code Form by
    +        reasonable means in a timely manner, at a charge no more than the cost
    +        of distribution to the recipient; and
    +
    +     b. You may distribute such Executable Form under the terms of this
    +        License, or sublicense it under different terms, provided that the
    +        license for the Executable Form does not attempt to limit or alter the
    +        recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +     You may create and distribute a Larger Work under terms of Your choice,
    +     provided that You also comply with the requirements of this License for
    +     the Covered Software. If the Larger Work is a combination of Covered
    +     Software with a work governed by one or more Secondary Licenses, and the
    +     Covered Software is not Incompatible With Secondary Licenses, this
    +     License permits You to additionally distribute such Covered Software
    +     under the terms of such Secondary License(s), so that the recipient of
    +     the Larger Work may, at their option, further distribute the Covered
    +     Software under the terms of either this License or such Secondary
    +     License(s).
    +
    +3.4. Notices
    +
    +     You may not remove or alter the substance of any license notices
    +     (including copyright notices, patent notices, disclaimers of warranty, or
    +     limitations of liability) contained within the Source Code Form of the
    +     Covered Software, except that You may alter any license notices to the
    +     extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +     You may choose to offer, and to charge a fee for, warranty, support,
    +     indemnity or liability obligations to one or more recipients of Covered
    +     Software. However, You may do so only on Your own behalf, and not on
    +     behalf of any Contributor. You must make it absolutely clear that any
    +     such warranty, support, indemnity, or liability obligation is offered by
    +     You alone, and You hereby agree to indemnify every Contributor for any
    +     liability incurred by such Contributor as a result of warranty, support,
    +     indemnity or liability terms You offer. You may include additional
    +     disclaimers of warranty and limitations of liability specific to any
    +     jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +
    +   If it is impossible for You to comply with any of the terms of this License
    +   with respect to some or all of the Covered Software due to statute,
    +   judicial order, or regulation then You must: (a) comply with the terms of
    +   this License to the maximum extent possible; and (b) describe the
    +   limitations and the code they affect. Such description must be placed in a
    +   text file included with all distributions of the Covered Software under
    +   this License. Except to the extent prohibited by statute or regulation,
    +   such description must be sufficiently detailed for a recipient of ordinary
    +   skill to be able to understand it.
    +
    +5. Termination
    +
    +5.1. The rights granted under this License will terminate automatically if You
    +     fail to comply with any of its terms. However, if You become compliant,
    +     then the rights granted under this License from a particular Contributor
    +     are reinstated (a) provisionally, unless and until such Contributor
    +     explicitly and finally terminates Your grants, and (b) on an ongoing
    +     basis, if such Contributor fails to notify You of the non-compliance by
    +     some reasonable means prior to 60 days after You have come back into
    +     compliance. Moreover, Your grants from a particular Contributor are
    +     reinstated on an ongoing basis if such Contributor notifies You of the
    +     non-compliance by some reasonable means, this is the first time You have
    +     received notice of non-compliance with this License from such
    +     Contributor, and You become compliant prior to 30 days after Your receipt
    +     of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +     infringement claim (excluding declaratory judgment actions,
    +     counter-claims, and cross-claims) alleging that a Contributor Version
    +     directly or indirectly infringes any patent, then the rights granted to
    +     You by any and all Contributors for the Covered Software under Section
    +     2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
    +     license agreements (excluding distributors and resellers) which have been
    +     validly granted by You or Your distributors under this License prior to
    +     termination shall survive termination.
    +
    +6. Disclaimer of Warranty
    +
    +   Covered Software is provided under this License on an "as is" basis,
    +   without warranty of any kind, either expressed, implied, or statutory,
    +   including, without limitation, warranties that the Covered Software is free
    +   of defects, merchantable, fit for a particular purpose or non-infringing.
    +   The entire risk as to the quality and performance of the Covered Software
    +   is with You. Should any Covered Software prove defective in any respect,
    +   You (not any Contributor) assume the cost of any necessary servicing,
    +   repair, or correction. This disclaimer of warranty constitutes an essential
    +   part of this License. No use of  any Covered Software is authorized under
    +   this License except under this disclaimer.
    +
    +7. Limitation of Liability
    +
    +   Under no circumstances and under no legal theory, whether tort (including
    +   negligence), contract, or otherwise, shall any Contributor, or anyone who
    +   distributes Covered Software as permitted above, be liable to You for any
    +   direct, indirect, special, incidental, or consequential damages of any
    +   character including, without limitation, damages for lost profits, loss of
    +   goodwill, work stoppage, computer failure or malfunction, or any and all
    +   other commercial damages or losses, even if such party shall have been
    +   informed of the possibility of such damages. This limitation of liability
    +   shall not apply to liability for death or personal injury resulting from
    +   such party's negligence to the extent applicable law prohibits such
    +   limitation. Some jurisdictions do not allow the exclusion or limitation of
    +   incidental or consequential damages, so this exclusion and limitation may
    +   not apply to You.
    +
    +8. Litigation
    +
    +   Any litigation relating to this License may be brought only in the courts
    +   of a jurisdiction where the defendant maintains its principal place of
    +   business and such litigation shall be governed by laws of that
    +   jurisdiction, without reference to its conflict-of-law provisions. Nothing
    +   in this Section shall prevent a party's ability to bring cross-claims or
    +   counter-claims.
    +
    +9. Miscellaneous
    +
    +   This License represents the complete agreement concerning the subject
    +   matter hereof. If any provision of this License is held to be
    +   unenforceable, such provision shall be reformed only to the extent
    +   necessary to make it enforceable. Any law or regulation which provides that
    +   the language of a contract shall be construed against the drafter shall not
    +   be used to construe this License against a Contributor.
    +
    +
    +10. Versions of the License
    +
    +10.1. New Versions
    +
    +      Mozilla Foundation is the license steward. Except as provided in Section
    +      10.3, no one other than the license steward has the right to modify or
    +      publish new versions of this License. Each version will be given a
    +      distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +      You may distribute the Covered Software under the terms of the version
    +      of the License under which You originally received the Covered Software,
    +      or under the terms of any subsequent version published by the license
    +      steward.
    +
    +10.3. Modified Versions
    +
    +      If you create software not governed by this License, and you want to
    +      create a new license for such software, you may create and use a
    +      modified version of this License if you rename the license and remove
    +      any references to the name of the license steward (except to note that
    +      such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +      Licenses If You choose to distribute Source Code Form that is
    +      Incompatible With Secondary Licenses under the terms of this version of
    +      the License, the notice described in Exhibit B of this License must be
    +      attached.
    +
    +Exhibit A - Source Code Form License Notice
    +
    +      This Source Code Form is subject to the
    +      terms of the Mozilla Public License, v.
    +      2.0. If a copy of the MPL was not
    +      distributed with this file, You can
    +      obtain one at
    +      http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular file,
    +then You may include the notice in a location (such as a LICENSE file in a
    +relevant directory) where a recipient would be likely to look for such a
    +notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +
    +      This Source Code Form is "Incompatible
    +      With Secondary Licenses", as defined by
    +      the Mozilla Public License, v. 2.0.
    +
    +
    +
    + +
    +Blackmagic DeckLink SDK - Mac +homepage + + +
    +
    Extracted from mac/include/DeckLinkAPI.h:
    +
    +** Copyright (c) 2014 Blackmagic Design
    +**
    +** Permission is hereby granted, free of charge, to any person or organization
    +** obtaining a copy of the software and accompanying documentation covered by
    +** this license (the "Software") to use, reproduce, display, distribute,
    +** execute, and transmit the Software, and to prepare derivative works of the
    +** Software, and to permit third-parties to whom the Software is furnished to
    +** do so, all subject to the following:
    +** 
    +** The copyright notices in the Software and this entire statement, including
    +** the above license grant, this restriction and the following disclaimer,
    +** must be included in all copies of the Software, in whole or in part, and
    +** all derivative works of the Software, unless such copies or derivative
    +** works are solely in the form of machine-executable object code generated by
    +** a source language processor.
    +** 
    +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
    +** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
    +** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
    +** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +** DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +blink HTMLTokenizer +homepage + + +
    +
    Copyright (C) 2008 Apple Inc. All Rights Reserved.
    +Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
    +Copyright (C) 2010 Google, Inc. All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    + *
    +THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +BoringSSL +homepage + + +
    +
    BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Files in third_party/ have their own licenses, as described therein. The MIT
    +license, for third_party/fiat, which, unlike other third_party directories, is
    +compiled into non-test libraries, is included below.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +The following are Google-internal bug numbers where explicit permission from
    +some authors is recorded for use of their work. (This is purely for our own
    +record keeping.)
    +  27287199
    +  27287880
    +  27287883
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer. 
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + * 
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + * 
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from 
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + * 
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + * 
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +The code in third_party/fiat carries the MIT license:
    +
    +Copyright (c) 2015-2016 the fiat-crypto authors (see
    +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +Licenses for support code
    +-------------------------
    +
    +Parts of the TLS test suite are under the Go license. This code is not included
    +in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
    +distributing code linked against BoringSSL does not trigger this license:
    +
    +Copyright (c) 2009 The Go Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +BoringSSL uses the Chromium test infrastructure to run a continuous build,
    +trybots etc. The scripts which manage this, and the script for generating build
    +metadata, are under the Chromium license. Distributing code linked against
    +BoringSSL does not trigger this license.
    +
    +Copyright 2015 The Chromium Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Braille Translation Library +homepage + + +
    +
    (Copied from src/liblouis/liblouis.h.in)
    +
    +/* liblouis Braille Translation and Back-Translation Library
    +
    +   Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by
    +   The BRLTTY Team
    +
    +   Copyright (C) 2004, 2005, 2006, 2009 ViewPlus Technologies, Inc.
    +   www.viewplus.com and JJB Software, Inc. www.jjb-software.com
    +
    +   liblouis is free software: you can redistribute it and/or modify it
    +   under the terms of the GNU Lesser General Public License as
    +   published by the Free Software Foundation, either version 3 of the
    +   License, or (at your option) any later version.
    +
    +   liblouis is distributed in the hope that it will be useful, but
    +   WITHOUT ANY WARRANTY; without even the implied warranty of
    +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    +   Lesser General Public License for more details.
    +
    +   You should have received a copy of the GNU Lesser General Public
    +   License along with this program. If not, see
    +   <http://www.gnu.org/licenses/>.
    +
    +   Maintained by John J. Boyer john.boyer@abilitiessoft.com
    +   */
    +
    +
    +
    +
    + +
    +Breakpad, An open-source multi-platform crash reporting system +homepage + + +
    +
    Copyright (c) 2006, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1996 - 2011, Daniel Stenberg, <daniel@haxx.se>.
    +
    +All rights reserved.
    +
    +Permission to use, copy, modify, and distribute this software for any purpose
    +with or without fee is hereby granted, provided that the above copyright
    +notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
    +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
    +OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +
    +Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
    +
    +@APPLE_LICENSE_HEADER_START@
    +
    +This file contains Original Code and/or Modifications of Original Code
    +as defined in and that are subject to the Apple Public Source License
    +Version 2.0 (the 'License'). You may not use this file except in
    +compliance with the License. Please obtain a copy of the License at
    +http://www.opensource.apple.com/apsl/ and read it before using this
    +file.
    +
    +The Original Code and all software distributed under the License are
    +distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
    +EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
    +INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
    +Please see the License for the specific language governing rights and
    +limitations under the License.
    +
    +@APPLE_LICENSE_HEADER_END@
    +
    +
    +Copyright 2007-2008 Google Inc.
    +
    +Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +use this file except in compliance with the License.  You may obtain a copy
    +of the License at
    +
    +http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +License for the specific language governing permissions and limitations under
    +the License.
    +
    +
    +
    + +
    +Brotli +homepage + + +
    +
    Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +BSDiff +homepage + + +
    +
    Copyright 2003-2005 Colin Percival
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions 
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +bsdiff +homepage + + +
    +
    BSD Protection License
    +February 2002
    +
    +Preamble
    +--------
    +
    +The Berkeley Software Distribution ("BSD") license has proven very effective
    +over the years at allowing for a wide spread of work throughout both
    +commercial and non-commercial products.  For programmers whose primary
    +intention is to improve the general quality of available software, it is
    +arguable that there is no better license than the BSD license, as it
    +permits improvements to be used wherever they will help, without idealogical
    +or metallic constraint.
    +
    +This is of particular value to those who produce reference implementations
    +of proposed standards: The case of TCP/IP clearly illustrates that freely
    +and universally available implementations leads the rapid acceptance of
    +standards -- often even being used instead of a de jure standard (eg, OSI
    +network models).
    +
    +With the rapid proliferation of software licensed under the GNU General
    +Public License, however, the continued success of this role is called into
    +question.  Given that the inclusion of a few lines of "GPL-tainted" work
    +into a larger body of work will result in restricted distribution -- and
    +given that further work will likely build upon the "tainted" portions,
    +making them difficult to remove at a future date -- there are inevitable
    +circumstances where authors would, in order to protect their goal of
    +providing for the widespread usage of their work, wish to guard against
    +such "GPL-taint".
    +
    +In addition, one can imagine that companies which operate by producing and
    +selling (possibly closed-source) code would wish to protect themselves
    +against the rise of a GPL-licensed competitor.  While under existing
    +licenses this would mean not releasing their code under any form of open
    +license, if a license existed under which they could incorporate any
    +improvements back into their own (commercial) products then they might be
    +far more willing to provide for non-closed distribution.
    +
    +For the above reasons, we put forth this "BSD Protection License": A
    +license designed to retain the freedom granted by the BSD license to use
    +licensed works in a wide variety of settings, both non-commercial and
    +commercial, while protecting the work from having future contributors
    +restrict that freedom.
    +
    +The precise terms and conditions for copying, distribution, and
    +modification follow.
    +
    +BSD PROTECTION LICENSE
    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
    +----------------------------------------------------------------
    +
    +0. Definitions.
    +   a) "Program", below, refers to any program or work distributed under
    +      the terms of this license.
    +   b) A "work based on the Program", below, refers to either the Program
    +      or any derivative work under copyright law.
    +   c) "Modification", below, refers to the act of creating derivative works.
    +   d) "You", below, refers to each licensee.
    +
    +1. Scope.
    +   This license governs the copying, distribution, and modification of the
    +   Program.  Other activities are outside the scope of this license; The
    +   act of running the Program is not restricted, and the output from the
    +   Program is covered only if its contents constitute a work based on the
    +   Program.
    +
    +2. Verbatim copies.
    +   You may copy and distribute verbatim copies of the Program as you
    +   receive it, in any medium, provided that you conspicuously and
    +   appropriately publish on each copy an appropriate copyright notice; keep
    +   intact all the notices that refer to this License and to the absence of
    +   any warranty; and give any other recipients of the Program a copy of this
    +   License along with the Program.
    +
    +3. Modification and redistribution under closed license.
    +   You may modify your copy or copies of the Program, and distribute
    +   the resulting derivative works, provided that you meet the
    +   following conditions:
    +   a) The copyright notice and disclaimer on the Program must be reproduced
    +      and included in the source code, documentation, and/or other materials
    +      provided in a manner in which such notices are normally distributed.
    +   b) The derivative work must be clearly identified as such, in order that
    +      it may not be confused with the original work.
    +   c) The license under which the derivative work is distributed must
    +      expressly prohibit the distribution of further derivative works.
    +
    +4. Modification and redistribution under open license.
    +   You may modify your copy or copies of the Program, and distribute
    +   the resulting derivative works, provided that you meet the
    +   following conditions:
    +   a) The copyright notice and disclaimer on the Program must be reproduced
    +      and included in the source code, documentation, and/or other materials
    +      provided in a manner in which such notices are normally distributed.
    +   b) You must clearly indicate the nature and date of any changes made
    +      to the Program.  The full details need not necessarily be included in
    +      the individual modified files, provided that each modified file is
    +      clearly marked as such and instructions are included on where the
    +      full details of the modifications may be found.
    +   c) You must cause any work that you distribute or publish, that in whole
    +      or in part contains or is derived from the Program or any part
    +      thereof, to be licensed as a whole at no charge to all third
    +      parties under the terms of this License.
    +
    +5. Implied acceptance.
    +   You may not copy or distribute the Program or any derivative works except
    +   as expressly provided under this license.  Consequently, any such action
    +   will be taken as implied acceptance of the terms of this license.
    +
    +6. NO WARRANTY.
    +   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +   THE COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE FOR ANY DIRECT,
    +   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +   ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING, BUT
    +   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    +   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    +   TORT, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +   POSSIBILITY OF SUCH DAMAGES.
    +
    +
    +
    + +
    +bspatch +homepage + + +
    +
    Copyright 2003,2004 Colin Percival
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Chrome Custom Tabs - Example and Usage +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +
    +
    + +
    +ChromeVox +homepage + + +
    +
    // Copyright 2013 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +
    + +
    +Closure compiler +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Cocoa extension code from Camino +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is mozilla.org code.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2002
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Compact Encoding Detection +homepage + + +
    +
    // Copyright (c) 2010 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Compact Language Detector v3 +homepage + + +
    +
    Copyright 2016 Google Inc.  All rights reserved.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2016, Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Crashpad +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +CRC32C +homepage + + +
    +
    Copyright 2017, The CRC32C Authors.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +d3 +homepage + + +
    +
    Copyright (c) 2010-2014, Michael Bostock
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +
    +* The name Michael Bostock may not be used to endorse or promote products
    +  derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Darwin +homepage + + +
    +
    APPLE PUBLIC SOURCE LICENSE Version 2.0 -  August 6, 2003
    +
    +Please read this License carefully before downloading this software.  By
    +downloading or using this software, you are agreeing to be bound by the terms of
    +this License.  If you do not or cannot agree to the terms of this License,
    +please do not download or use the software.
    +
    +Apple Note:  In January 2007, Apple changed its corporate name from "Apple
    +Computer, Inc." to "Apple Inc."  This change has been reflected below and
    +copyright years updated, but no other changes have been made to the APSL 2.0.
    +
    +1.	General; Definitions.  This License applies to any program or other work
    +which Apple Inc. ("Apple") makes publicly available and which contains a notice
    +placed by Apple identifying such program or work as "Original Code" and stating
    +that it is subject to the terms of this Apple Public Source License version 2.0
    +("License").  As used in this License:
    +
    +1.1	 "Applicable Patent Rights" mean:  (a) in the case where Apple is the
    +grantor of rights, (i) claims of patents that are now or hereafter acquired,
    +owned by or assigned to Apple and (ii) that cover subject matter contained in
    +the Original Code, but only to the extent necessary to use, reproduce and/or
    +distribute the Original Code without infringement; and (b) in the case where You
    +are the grantor of rights, (i) claims of patents that are now or hereafter
    +acquired, owned by or assigned to You and (ii) that cover subject matter in Your
    +Modifications, taken alone or in combination with Original Code.
    +
    +1.2	"Contributor" means any person or entity that creates or contributes to the
    +creation of Modifications.
    +
    +1.3	 "Covered Code" means the Original Code, Modifications, the combination of
    +Original Code and any Modifications, and/or any respective portions thereof.
    +
    +1.4	"Externally Deploy" means: (a) to sublicense, distribute or otherwise make
    +Covered Code available, directly or indirectly, to anyone other than You; and/or
    +(b) to use Covered Code, alone or as part of a Larger Work, in any way to
    +provide a service, including but not limited to delivery of content, through
    +electronic communication with a client other than You.
    +
    +1.5	"Larger Work" means a work which combines Covered Code or portions thereof
    +with code not governed by the terms of this License.
    +
    +1.6	"Modifications" mean any addition to, deletion from, and/or change to, the
    +substance and/or structure of the Original Code, any previous Modifications, the
    +combination of Original Code and any previous Modifications, and/or any
    +respective portions thereof.  When code is released as a series of files, a
    +Modification is:  (a) any addition to or deletion from the contents of a file
    +containing Covered Code; and/or (b) any new file or other representation of
    +computer program statements that contains any part of Covered Code.
    +
    +1.7	"Original Code" means (a) the Source Code of a program or other work as
    +originally made available by Apple under this License, including the Source Code
    +of any updates or upgrades to such programs or works made available by Apple
    +under this License, and that has been expressly identified by Apple as such in
    +the header file(s) of such work; and (b) the object code compiled from such
    +Source Code and originally made available by Apple under this License
    +
    +1.8	"Source Code" means the human readable form of a program or other work that
    +is suitable for making modifications to it, including all modules it contains,
    +plus any associated interface definition files, scripts used to control
    +compilation and installation of an executable (object code).
    +
    +1.9	"You" or "Your" means an individual or a legal entity exercising rights
    +under this License.  For legal entities, "You" or "Your" includes any entity
    +which controls, is controlled by, or is under common control with, You, where
    +"control" means (a) the power, direct or indirect, to cause the direction or
    +management of such entity, whether by contract or otherwise, or (b) ownership of
    +fifty percent (50%) or more of the outstanding shares or beneficial ownership of
    +such entity.
    +
    +2.	Permitted Uses; Conditions & Restrictions.   Subject to the terms and
    +conditions of this License, Apple hereby grants You, effective on the date You
    +accept this License and download the Original Code, a world-wide, royalty-free,
    +non-exclusive license, to the extent of Apple's Applicable Patent Rights and
    +copyrights covering the Original Code, to do the following:
    +
    +2.1	Unmodified Code.  You may use, reproduce, display, perform, internally
    +distribute within Your organization, and Externally Deploy verbatim, unmodified
    +copies of the Original Code, for commercial or non-commercial purposes, provided
    +that in each instance:
    +
    +(a)	You must retain and reproduce in all copies of Original Code the copyright
    +and other proprietary notices and disclaimers of Apple as they appear in the
    +Original Code, and keep intact all notices in the Original Code that refer to
    +this License; and
    +
    +(b) 	You must include a copy of this License with every copy of Source Code of
    +Covered Code and documentation You distribute or Externally Deploy, and You may
    +not offer or impose any terms on such Source Code that alter or restrict this
    +License or the recipients' rights hereunder, except as permitted under Section
    +6.
    +
    +2.2	Modified Code.  You may modify Covered Code and use, reproduce, display,
    +perform, internally distribute within Your organization, and Externally Deploy
    +Your Modifications and Covered Code, for commercial or non-commercial purposes,
    +provided that in each instance You also meet all of these conditions:
    +
    +(a)	You must satisfy all the conditions of Section 2.1 with respect to the
    +Source Code of the Covered Code;
    +
    +(b)	You must duplicate, to the extent it does not already exist, the notice in
    +Exhibit A in each file of the Source Code of all Your Modifications, and cause
    +the modified files to carry prominent notices stating that You changed the files
    +and the date of any change; and
    +
    +(c)	If You Externally Deploy Your Modifications, You must make Source Code of
    +all Your Externally Deployed Modifications either available to those to whom You
    +have Externally Deployed Your Modifications, or publicly available.  Source Code
    +of Your Externally Deployed Modifications must be released under the terms set
    +forth in this License, including the license grants set forth in Section 3
    +below, for as long as you Externally Deploy the Covered Code or twelve (12)
    +months from the date of initial External Deployment, whichever is longer. You
    +should preferably distribute the Source Code of Your Externally Deployed
    +Modifications electronically (e.g. download from a web site).
    +
    +2.3	Distribution of Executable Versions.  In addition, if You Externally Deploy
    +Covered Code (Original Code and/or Modifications) in object code, executable
    +form only, You must include a prominent notice, in the code itself as well as in
    +related documentation, stating that Source Code of the Covered Code is available
    +under the terms of this License with information on how and where to obtain such
    +Source Code.
    +
    +2.4	Third Party Rights.  You expressly acknowledge and agree that although
    +Apple and each Contributor grants the licenses to their respective portions of
    +the Covered Code set forth herein, no assurances are provided by Apple or any
    +Contributor that the Covered Code does not infringe the patent or other
    +intellectual property rights of any other entity. Apple and each Contributor
    +disclaim any liability to You for claims brought by any other entity based on
    +infringement of intellectual property rights or otherwise. As a condition to
    +exercising the rights and licenses granted hereunder, You hereby assume sole
    +responsibility to secure any other intellectual property rights needed, if any.
    +For example, if a third party patent license is required to allow You to
    +distribute the Covered Code, it is Your responsibility to acquire that license
    +before distributing the Covered Code.
    +
    +3.	Your Grants.  In consideration of, and as a condition to, the licenses
    +granted to You under this License, You hereby grant to any person or entity
    +receiving or distributing Covered Code under this License a non-exclusive,
    +royalty-free, perpetual, irrevocable license, under Your Applicable Patent
    +Rights and other intellectual property rights (other than patent) owned or
    +controlled by You, to use, reproduce, display, perform, modify, sublicense,
    +distribute and Externally Deploy Your Modifications of the same scope and extent
    +as Apple's licenses under Sections 2.1 and 2.2 above.
    +
    +4.	Larger Works.  You may create a Larger Work by combining Covered Code with
    +other code not governed by the terms of this License and distribute the Larger
    +Work as a single product.  In each such instance, You must make sure the
    +requirements of this License are fulfilled for the Covered Code or any portion
    +thereof.
    +
    +5.	Limitations on Patent License.   Except as expressly stated in Section 2, no
    +other patent rights, express or implied, are granted by Apple herein. 
    +Modifications and/or Larger Works may require additional patent licenses from
    +Apple which Apple may grant in its sole discretion.
    +
    +6.	Additional Terms.  You may choose to offer, and to charge a fee for,
    +warranty, support, indemnity or liability obligations and/or other rights
    +consistent with the scope of the license granted herein ("Additional Terms") to
    +one or more recipients of Covered Code. However, You may do so only on Your own
    +behalf and as Your sole responsibility, and not on behalf of Apple or any
    +Contributor. You must obtain the recipient's agreement that any such Additional
    +Terms are offered by You alone, and You hereby agree to indemnify, defend and
    +hold Apple and every Contributor harmless for any liability incurred by or
    +claims asserted against Apple or such Contributor by reason of any such
    +Additional Terms.
    +
    +7.	Versions of the License.  Apple may publish revised and/or new versions of
    +this License from time to time.  Each version will be given a distinguishing
    +version number.  Once Original Code has been published under a particular
    +version of this License, You may continue to use it under the terms of that
    +version. You may also choose to use such Original Code under the terms of any
    +subsequent version of this License published by Apple.  No one other than Apple
    +has the right to modify the terms applicable to Covered Code created under this
    +License.
    +
    +8.	NO WARRANTY OR SUPPORT.  The Covered Code may contain in whole or in part
    +pre-release, untested, or not fully tested works.  The Covered Code may contain
    +errors that could cause failures or loss of data, and may be incomplete or
    +contain inaccuracies.  You expressly acknowledge and agree that use of the
    +Covered Code, or any portion thereof, is at Your sole and entire risk.  THE
    +COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
    +ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
    +FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
    +ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY
    +QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT,
    +AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE AND EACH CONTRIBUTOR DOES NOT
    +WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE
    +FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE
    +OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT
    +DEFECTS IN THE COVERED CODE WILL BE CORRECTED.  NO ORAL OR WRITTEN INFORMATION
    +OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR
    +SHALL CREATE A WARRANTY.  You acknowledge that the Covered Code is not intended
    +for use in the operation of nuclear facilities, aircraft navigation,
    +communication systems, or air traffic control machines in which case the failure
    +of the Covered Code could lead to death, personal injury, or severe physical or
    +environmental damage.
    +
    +9.	LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
    +SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT
    +OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE
    +OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER UNDER A
    +THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR
    +OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY
    +OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY
    +REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF
    +INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In
    +no event shall Apple's total liability to You for all damages (other than as may
    +be required by applicable law) under this License exceed the amount of fifty
    +dollars ($50.00).
    +
    +10.	Trademarks.  This License does not grant any rights to use the trademarks
    +or trade names  "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime Streaming
    +Server" or any other trademarks, service marks, logos or trade names belonging
    +to Apple (collectively "Apple Marks") or to any trademark, service mark, logo or
    +trade name belonging to any Contributor.  You agree not to use any Apple Marks
    +in or as part of the name of products derived from the Original Code or to
    +endorse or promote products derived from the Original Code other than as
    +expressly permitted by and in strict compliance at all times with Apple's third
    +party trademark usage guidelines which are posted at
    +http://www.apple.com/legal/guidelinesfor3rdparties.html.
    +
    +11.	Ownership. Subject to the licenses granted under this License, each
    +Contributor retains all rights, title and interest in and to any Modifications
    +made by such Contributor.  Apple retains all rights, title and interest in and
    +to the Original Code and any Modifications made by or on behalf of Apple ("Apple
    +Modifications"), and such Apple Modifications will not be automatically subject
    +to this License.  Apple may, at its sole discretion, choose to license such
    +Apple Modifications under this License, or on different terms from those
    +contained in this License or may choose not to license them at all.
    +
    +12.	Termination.
    +
    +12.1	Termination.  This License and the rights granted hereunder will
    +terminate:
    +
    +(a)	automatically without notice from Apple if You fail to comply with any
    +term(s) of this License and fail to cure such breach within 30 days of becoming
    +aware of such breach; (b)	immediately in the event of the circumstances
    +described in Section 13.5(b); or (c)	automatically without notice from Apple if
    +You, at any time during the term of this License, commence an action for patent
    +infringement against Apple; provided that Apple did not first commence an action
    +for patent infringement against You in that instance.
    +
    +12.2	Effect of Termination.  Upon termination, You agree to immediately stop
    +any further use, reproduction, modification, sublicensing and distribution of
    +the Covered Code.  All sublicenses to the Covered Code which have been properly
    +granted prior to termination shall survive any termination of this License. 
    +Provisions which, by their nature, should remain in effect beyond the
    +termination of this License shall survive, including but not limited to Sections
    +3, 5, 8, 9, 10, 11, 12.2 and 13.  No party will be liable to any other for
    +compensation, indemnity or damages of any sort solely as a result of terminating
    +this License in accordance with its terms, and termination of this License will
    +be without prejudice to any other right or remedy of any party.
    +
    +13. 	Miscellaneous.
    +
    +13.1	Government End Users.   The Covered Code is a "commercial item" as defined
    +in FAR 2.101.  Government software and technical data rights in the Covered Code
    +include only those rights customarily provided to the public as defined in this
    +License. This customary commercial license in technical data and software is
    +provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
    +Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical
    +Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software
    +or Computer Software Documentation).  Accordingly, all U.S. Government End Users
    +acquire Covered Code with only those rights set forth herein.
    +
    +13.2	Relationship of Parties.  This License will not be construed as creating
    +an agency, partnership, joint venture or any other form of legal association
    +between or among You, Apple or any Contributor, and You will not represent to
    +the contrary, whether expressly, by implication, appearance or otherwise.
    +
    +13.3	Independent Development.   Nothing in this License will impair Apple's
    +right to acquire, license, develop, have others develop for it, market and/or
    +distribute technology or products that perform the same or similar functions as,
    +or otherwise compete with, Modifications, Larger Works, technology or products
    +that You may develop, produce, market or distribute.
    +
    +13.4	Waiver; Construction.  Failure by Apple or any Contributor to enforce any
    +provision of this License will not be deemed a waiver of future enforcement of
    +that or any other provision.  Any law or regulation which provides that the
    +language of a contract shall be construed against the drafter will not apply to
    +this License.
    +
    +13.5	Severability.  (a) If for any reason a court of competent jurisdiction
    +finds any provision of this License, or portion thereof, to be unenforceable,
    +that provision of the License will be enforced to the maximum extent permissible
    +so as to effect the economic benefits and intent of the parties, and the
    +remainder of this License will continue in full force and effect.  (b)
    +Notwithstanding the foregoing, if applicable law prohibits or restricts You from
    +fully and/or specifically complying with Sections 2 and/or 3 or prevents the
    +enforceability of either of those Sections, this License will immediately
    +terminate and You must immediately discontinue any use of the Covered Code and
    +destroy all copies of it that are in your possession or control.
    +
    +13.6	Dispute Resolution.  Any litigation or other dispute resolution between
    +You and Apple relating to this License shall take place in the Northern District
    +of California, and You and Apple hereby consent to the personal jurisdiction of,
    +and venue in, the state and federal courts within that District with respect to
    +this License. The application of the United Nations Convention on Contracts for
    +the International Sale of Goods is expressly excluded.
    +
    +13.7	Entire Agreement; Governing Law.  This License constitutes the entire
    +agreement between the parties with respect to the subject matter hereof.  This
    +License shall be governed by the laws of the United States and the State of
    +California, except that body of California law concerning conflicts of law.
    +
    +Where You are located in the province of Quebec, Canada, the following clause
    +applies:  The parties hereby confirm that they have requested that this License
    +and all related documents be drafted in English.  Les parties ont exigé que le
    +présent contrat et tous les documents connexes soient rédigés en anglais.
    +
    +EXHIBIT A.
    +
    +"Portions Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.
    +
    +This file contains Original Code and/or Modifications of Original Code as
    +defined in and that are subject to the Apple Public Source License Version 2.0
    +(the 'License').  You may not use this file except in compliance with the
    +License.  Please obtain a copy of the License at
    +http://www.opensource.apple.com/apsl/ and read it before using this file.
    +
    +The Original Code and all software distributed under the License are distributed
    +on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    +AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION,
    +ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
    +ENJOYMENT OR NON-INFRINGEMENT.  Please see the License for the specific language
    +governing rights and limitations under the License." 
    +
    +
    +
    + +
    +David M. Gay's floating point routines +homepage + + +
    +
    /****************************************************************
    + *
    + * The author of this software is David M. Gay.
    + *
    + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
    + *
    + * Permission to use, copy, modify, and distribute this software for any
    + * purpose without fee is hereby granted, provided that this entire notice
    + * is included in all copies of any software which is or includes a copy
    + * or modification of this software and in all copies of the supporting
    + * documentation for such software.
    + *
    + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    + * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
    + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    + *
    + ***************************************************************/
    +
    +
    +
    + +
    +divsufsort +homepage + + +
    +
    The MIT License (MIT)
    +
    +Copyright (c) 2003 Yuta Mori All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +dom-distiller-js +homepage + + +
    +
    Copyright 2014 The Chromium Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +Parts of the following directories are available under Apache v2.0
    +
    +src/de
    +Copyright (c) 2009-2011 Christian Kohlschütter
    +
    +third_party/gwt_exporter
    +Copyright 2007 Timepedia.org
    +
    +third_party/gwt-2.5.1
    +Copyright 2008 Google
    +
    +java/org/chromium/distiller/dev
    +Copyright 2008 Google
    +
    +Apache License
    +
    +Version 2.0, January 2004
    +
    +http://www.apache.org/licenses/
    +
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +1. Definitions.
    +
    +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
    +
    +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
    +
    +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
    +
    +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
    +
    +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
    +
    +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
    +
    +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
    +
    +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
    +
    +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
    +
    +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
    +
    +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
    +
    +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
    +
    +You must give any other recipients of the Work or Derivative Works a copy of this License; and
    +You must cause any modified files to carry prominent notices stating that You changed the files; and
    +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
    +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. 
    +
    +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
    +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
    +
    +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
    +
    +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
    +
    +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
    +
    +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
    +
    +END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +drawElements Quality Program +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +dynamic annotations +homepage + + +
    +
    /* Copyright (c) 2008-2009, Google Inc.
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + * notice, this list of conditions and the following disclaimer.
    + *     * Neither the name of Google Inc. nor the names of its
    + * contributors may be used to endorse or promote products derived from
    + * this software without specific prior written permission.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + * ---
    + * Author: Kostya Serebryany
    + */
    +
    +
    +
    + +
    +etc1 +homepage + + +
    +
    /*
    + * Copyright (C) 2009 The Android Open Source Project
    + *
    + * Licensed under the Apache License, Version 2.0 (the "License");
    + * you may not use this file except in compliance with the License.
    + * You may obtain a copy of the License at
    + *
    + *      http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +
    + +
    +Expat XML Parser +homepage + + +
    +
    Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
    +Copyright (c) 2001-2017 Expat maintainers
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +fdlibm +homepage + + +
    +
    Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.
    +
    +Developed at SunSoft, a Sun Microsystems, Inc. business.
    +Permission to use, copy, modify, and distribute this
    +software is freely granted, provided that this notice
    +is preserved.
    +
    +
    +
    + +
    +Feed +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +ffmpeg +homepage + + +
    +
    # License
    +
    +Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
    +or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
    +files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
    +FFmpeg.
    +
    +Some optional parts of FFmpeg are licensed under the GNU General Public License
    +version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
    +these parts are used by default, you have to explicitly pass `--enable-gpl` to
    +configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
    +
    +Specifically, the GPL parts of FFmpeg are:
    +
    +- libpostproc
    +- optional x86 optimization in the files
    +    - `libavcodec/x86/flac_dsp_gpl.asm`
    +    - `libavcodec/x86/idct_mmx.c`
    +    - `libavfilter/x86/vf_removegrain.asm`
    +- the following building and testing tools
    +    - `compat/solaris/make_sunver.pl`
    +    - `doc/t2h.pm`
    +    - `doc/texi2pod.pl`
    +    - `libswresample/swresample-test.c`
    +    - `tests/checkasm/*`
    +    - `tests/tiny_ssim.c`
    +- the following filters in libavfilter:
    +    - `vf_blackframe.c`
    +    - `vf_boxblur.c`
    +    - `vf_colormatrix.c`
    +    - `vf_cover_rect.c`
    +    - `vf_cropdetect.c`
    +    - `vf_delogo.c`
    +    - `vf_eq.c`
    +    - `vf_find_rect.c`
    +    - `vf_fspp.c`
    +    - `vf_geq.c`
    +    - `vf_histeq.c`
    +    - `vf_hqdn3d.c`
    +    - `vf_interlace.c`
    +    - `vf_kerndeint.c`
    +    - `vf_mcdeint.c`
    +    - `vf_mpdecimate.c`
    +    - `vf_owdenoise.c`
    +    - `vf_perspective.c`
    +    - `vf_phase.c`
    +    - `vf_pp.c`
    +    - `vf_pp7.c`
    +    - `vf_pullup.c`
    +    - `vf_repeatfields.c`
    +    - `vf_sab.c`
    +    - `vf_smartblur.c`
    +    - `vf_spp.c`
    +    - `vf_stereo3d.c`
    +    - `vf_super2xsai.c`
    +    - `vf_tinterlace.c`
    +    - `vf_uspp.c`
    +    - `vsrc_mptestsrc.c`
    +
    +Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
    +the configure parameter `--enable-version3` will activate this licensing option
    +for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
    +`COPYING.GPLv3` to learn the exact legal terms that apply in this case.
    +
    +There are a handful of files under other licensing terms, namely:
    +
    +* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
    +  `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
    +  licensing details. Specifically note that you must credit the IJG in the
    +  documentation accompanying your program if you only distribute executables.
    +  You must also indicate any changes including additions and deletions to
    +  those three files in the documentation.
    +* `tests/reference.pnm` is under the expat license.
    +
    +
    +## External libraries
    +
    +FFmpeg can be combined with a number of external libraries, which sometimes
    +affect the licensing of binaries resulting from the combination.
    +
    +### Compatible libraries
    +
    +The following libraries are under GPL:
    +- frei0r
    +- libcdio
    +- librubberband
    +- libvidstab
    +- libx264
    +- libx265
    +- libxavs
    +- libxvid
    +
    +When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
    +passing `--enable-gpl` to configure.
    +
    +The OpenCORE and VisualOn libraries are under the Apache License 2.0. That
    +license is incompatible with the LGPL v2.1 and the GPL v2, but not with
    +version 3 of those licenses. So to combine these libraries with FFmpeg, the
    +license version needs to be upgraded by passing `--enable-version3` to configure.
    +
    +### Incompatible libraries
    +
    +There are certain libraries you can combine with FFmpeg whose licenses are not
    +compatible with the GPL and/or the LGPL. If you wish to enable these
    +libraries, even in circumstances that their license may be incompatible, pass
    +`--enable-nonfree` to configure. But note that if you enable any of these
    +libraries the resulting binary will be under a complex license mix that is
    +more restrictive than the LGPL and that may result in additional obligations.
    +It is possible that these restrictions cause the resulting binary to be
    +unredistributable.
    +
    +The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
    +incompatible with the GPLv2 and v3. To the best of our knowledge, they are
    +compatible with the LGPL.
    +
    +The NVENC library, while its header file is licensed under the compatible MIT
    +license, requires a proprietary binary blob at run time, and is deemed to be
    +incompatible with the GPL. We are not certain if it is compatible with the
    +LGPL, but we require `--enable-nonfree` even with LGPL configurations in case
    +it is not.
    +
    +
    +********************************************************************************
    +
    +libavcodec/arm/vp8dsp_armv6.S
    +
    +VP8 ARMv6 optimisations
    +
    +Copyright (c) 2010 Google Inc.
    +Copyright (c) 2010 Rob Clark <rob@ti.com>
    +Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +This code was partially ported from libvpx, which uses this license:
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +* Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in
    +the documentation and/or other materials provided with the
    +distribution.
    +
    +* Neither the name of Google nor the names of its contributors may
    +be used to endorse or promote products derived from this software
    +without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +********************************************************************************
    +
    +libavcodec/x86/xvididct.asm
    +
    +XVID MPEG-4 VIDEO CODEC
    +
    + Conversion from gcc syntax to x264asm syntax with modifications
    + by Christophe Gisquet <christophe.gisquet@gmail.com>
    +
    + ===========     SSE2 inverse discrete cosine transform     ===========
    +
    + Copyright(C) 2003 Pascal Massimino <skal@planet-d.net>
    +
    + Conversion to gcc syntax with modifications
    + by Alexander Strange <astrange@ithinksw.com>
    +
    + Originally from dct/x86_asm/fdct_sse2_skal.asm in Xvid.
    +
    + Vertical pass is an implementation of the scheme:
    +  Loeffler C., Ligtenberg A., and Moschytz C.S.:
    +  Practical Fast 1D DCT Algorithm with Eleven Multiplications,
    +  Proc. ICASSP 1989, 988-991.
    +
    + Horizontal pass is a double 4x4 vector/matrix multiplication,
    + (see also Intel's Application Note 922:
    +  http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
    +  Copyright (C) 1999 Intel Corporation)
    +
    + More details at http://skal.planet-d.net/coding/dct.html
    +
    + =======     MMX and XMM forward discrete cosine transform     =======
    +
    + Copyright(C) 2001 Peter Ross <pross@xvid.org>
    +
    + Originally provided by Intel at AP-922
    + http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
    + (See more app notes at http://developer.intel.com/vtune/cbts/strmsimd/appnotes.htm)
    + but in a limited edition.
    + New macro implements a column part for precise iDCT
    + The routine precision now satisfies IEEE standard 1180-1990.
    +
    + Copyright(C) 2000-2001 Peter Gubanov <peter@elecard.net.ru>
    + Rounding trick Copyright(C) 2000 Michel Lespinasse <walken@zoy.org>
    +
    + http://www.elecard.com/peter/idct.html
    + http://www.linuxvideo.org/mpeg2dec/
    +
    + These examples contain code fragments for first stage iDCT 8x8
    + (for rows) and first stage DCT 8x8 (for columns)
    +
    + conversion to gcc syntax by Michael Niedermayer
    +
    + ======================================================================
    +
    + This file is part of FFmpeg.
    +
    + FFmpeg is free software; you can redistribute it and/or
    + modify it under the terms of the GNU Lesser General Public
    + License as published by the Free Software Foundation; either
    + version 2.1 of the License, or (at your option) any later version.
    +
    + FFmpeg is distributed in the hope that it will be useful,
    + but WITHOUT ANY WARRANTY; without even the implied warranty of
    + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    + Lesser General Public License for more details.
    +
    + You should have received a copy of the GNU Lesser General Public License
    + along with FFmpeg; if not, write to the Free Software Foundation,
    + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/arm/jrevdct_arm.S
    +
    +C-like prototype :
    +        void j_rev_dct_arm(DCTBLOCK data)
    +
    +   With DCTBLOCK being a pointer to an array of 64 'signed shorts'
    +
    +   Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)
    +
    +   Permission is hereby granted, free of charge, to any person obtaining a copy
    +   of this software and associated documentation files (the "Software"), to deal
    +   in the Software without restriction, including without limitation the rights
    +   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +   copies of the Software, and to permit persons to whom the Software is
    +   furnished to do so, subject to the following conditions:
    +
    +   The above copyright notice and this permission notice shall be included in
    +   all copies or substantial portions of the Software.
    +
    +   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +libswresample/version.h
    +
    +Version macros.
    +
    +This file is part of libswresample
    +
    +libswresample is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +libswresample is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with libswresample; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/amrwbdec_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/celp_math_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +Math operations optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavformat/oggparsetheora.c
    +
    +Copyright (C) 2005  Matthieu CASTET, Alex Beregszaszi
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +libavcodec/mips/fft_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Stanislav Ocovaj (socovaj@mips.com)
    +Author:  Zoran Lukic (zoranl@mips.com)
    +
    +Optimized MDCT/IMDCT and FFT transforms
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/acelp_filters_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +various filters for ACELP-based codecs optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/mpegaudiodsp_mips_float.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Bojan Zivkovic (bojan@mips.com)
    +
    +MPEG Audio decoder optimized for MIPS floating-point architecture
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/acelp_vectors_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +adaptive and fixed codebook vector operations for ACELP-based codecs
    +optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/celp_filters_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +various filters for CELP-based codecs optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libswresample/swresample.h
    +
    +Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
    +
    +This file is part of libswresample
    +
    +libswresample is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +libswresample is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with libswresample; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/jfdctfst.c
    +libavcodec/jfdctint_template.c
    +libavcodec/jrevdct.c
    +
    +This file is part of the Independent JPEG Group's software.
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and
    +you, its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1994-1996, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to
    +these conditions:
    +(1) If any part of the source code for this software is distributed, then
    +this README file must be included, with this copyright and no-warranty
    +notice unaltered; and any additions, deletions, or changes to the original
    +files must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work
    +of the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG
    +code, not just to the unmodified library.  If you use our work, you ought
    +to acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company
    +name in advertising or publicity relating to this software or products
    +derived from it.  This software may be referred to only as "the Independent
    +JPEG Group's software".
    +
    +We specifically permit and encourage the use of this software as the basis
    +of commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +********************************************************************************
    +
    +libavcodec/fft_fixed_32.c
    +libavcodec/fft_init_table.c
    +libavcodec/fft_table.h
    +libavcodec/mdct_fixed_32.c
    +libavcodec/mips/aacdec_mips.c
    +libavcodec/mips/aacdec_mips.h
    +libavcodec/mips/aacpsdsp_mips.c
    +libavcodec/mips/aacsbr_mips.c
    +libavcodec/mips/aacsbr_mips.h
    +libavcodec/mips/amrwbdec_mips.h
    +libavcodec/mips/compute_antialias_fixed.h
    +libavcodec/mips/compute_antialias_float.h
    +libavcodec/mips/lsp_mips.h
    +libavcodec/mips/sbrdsp_mips.c
    +libavutil/fixed_dsp.c
    +libavutil/fixed_dsp.h
    +libavutil/mips/float_dsp_mips.c
    +libavutil/mips/libm_mips.h
    +libavutil/softfloat_tables.h
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Authors:
    +Branimir Vasic   (bvasic@mips.com)
    +Darko Laus       (darko@mips.com)
    +Djordje Pesut    (djordje@mips.com)
    +Goran Cordasic   (goran@mips.com)
    +Nedeljko Babic   (nedeljko.babic imgtec com)
    +Mirjana Vulin    (mvulin@mips.com)
    +Stanislav Ocovaj (socovaj@mips.com)
    +Zoran Lukic      (zoranl@mips.com)
    +
    +********************************************************************************
    +
    +libavformat/oggdec.c
    +libavformat/oggdec.h
    +libavformat/oggparseogm.c
    +libavformat/oggparsevorbis.c
    +
    +Copyright (C) 2005  Michael Ahlberg, Måns Rullgård
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    + +
    +Fiat-Crypto: Synthesizing Correct-by-Construction Code for Cryptographic Primitives +homepage + + +
    +
    The MIT License (MIT)
    +
    +Copyright (c) 2015-2016 the fiat-crypto authors (see
    +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +fips181 +homepage + + +
    +
    Copyright (c) 1999, 2000, 2001, 2002
    +Adel I. Mirzazhanov. All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + 
    +     1.Redistributions of source code must retain the above copyright notice,
    +       this list of conditions and the following disclaimer. 
    +     2.Redistributions in binary form must reproduce the above copyright
    +       notice, this list of conditions and the following disclaimer in the
    +       documentation and/or other materials provided with the distribution. 
    +     3.The name of the author may not be used to endorse or promote products
    +       derived from this software without specific prior written permission. 
    + 		  
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN  NO  EVENT  SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE
    +GOODS OR SERVICES;  LOSS OF USE,  DATA,  OR  PROFITS;  OR BUSINESS
    +INTERRUPTION)  HOWEVER  CAUSED  AND  ON  ANY  THEORY OF LIABILITY,
    +WHETHER  IN  CONTRACT,   STRICT   LIABILITY,  OR  TORT  (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +		  
    +
    +
    + +
    +flac +homepage + + +
    +
    Copyright (C) 2000-2009  Josh Coalson
    +Copyright (C) 2011-2014  Xiph.Org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +FlatBuffers +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Flot Javascript/JQuery library for creating graphs +homepage + + +
    +
    Copyright (c) 2007-2013 IOLA and Ole Laursen
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use,
    +copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following
    +conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +FreeType +homepage + + +
    +
                        The FreeType Project LICENSE
    +                    ----------------------------
    +
    +                            2006-Jan-27
    +
    +                    Copyright 1996-2002, 2006 by
    +          David Turner, Robert Wilhelm, and Werner Lemberg
    +
    +
    +
    +Introduction
    +============
    +
    +  The FreeType  Project is distributed in  several archive packages;
    +  some of them may contain, in addition to the FreeType font engine,
    +  various tools and  contributions which rely on, or  relate to, the
    +  FreeType Project.
    +
    +  This  license applies  to all  files found  in such  packages, and
    +  which do not  fall under their own explicit  license.  The license
    +  affects  thus  the  FreeType   font  engine,  the  test  programs,
    +  documentation and makefiles, at the very least.
    +
    +  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
    +  (Independent JPEG  Group) licenses, which  all encourage inclusion
    +  and  use of  free  software in  commercial  and freeware  products
    +  alike.  As a consequence, its main points are that:
    +
    +    o We don't promise that this software works. However, we will be
    +      interested in any kind of bug reports. (`as is' distribution)
    +
    +    o You can  use this software for whatever you  want, in parts or
    +      full form, without having to pay us. (`royalty-free' usage)
    +
    +    o You may not pretend that  you wrote this software.  If you use
    +      it, or  only parts of it,  in a program,  you must acknowledge
    +      somewhere  in  your  documentation  that  you  have  used  the
    +      FreeType code. (`credits')
    +
    +  We  specifically  permit  and  encourage  the  inclusion  of  this
    +  software, with  or without modifications,  in commercial products.
    +  We  disclaim  all warranties  covering  The  FreeType Project  and
    +  assume no liability related to The FreeType Project.
    +
    +
    +  Finally,  many  people  asked  us  for  a  preferred  form  for  a
    +  credit/disclaimer to use in compliance with this license.  We thus
    +  encourage you to use the following text:
    +
    +   """
    +    Portions of this software are copyright © <year> The FreeType
    +    Project (www.freetype.org).  All rights reserved.
    +   """
    +
    +  Please replace <year> with the value from the FreeType version you
    +  actually use.
    +
    +
    +Legal Terms
    +===========
    +
    +0. Definitions
    +--------------
    +
    +  Throughout this license,  the terms `package', `FreeType Project',
    +  and  `FreeType  archive' refer  to  the  set  of files  originally
    +  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
    +  Werner Lemberg) as the `FreeType Project', be they named as alpha,
    +  beta or final release.
    +
    +  `You' refers to  the licensee, or person using  the project, where
    +  `using' is a generic term including compiling the project's source
    +  code as  well as linking it  to form a  `program' or `executable'.
    +  This  program is  referred to  as  `a program  using the  FreeType
    +  engine'.
    +
    +  This  license applies  to all  files distributed  in  the original
    +  FreeType  Project,   including  all  source   code,  binaries  and
    +  documentation,  unless  otherwise  stated   in  the  file  in  its
    +  original, unmodified form as  distributed in the original archive.
    +  If you are  unsure whether or not a particular  file is covered by
    +  this license, you must contact us to verify this.
    +
    +  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
    +  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
    +  specified below.
    +
    +1. No Warranty
    +--------------
    +
    +  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
    +  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
    +  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
    +  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
    +  USE, OF THE FREETYPE PROJECT.
    +
    +2. Redistribution
    +-----------------
    +
    +  This  license  grants  a  worldwide, royalty-free,  perpetual  and
    +  irrevocable right  and license to use,  execute, perform, compile,
    +  display,  copy,   create  derivative  works   of,  distribute  and
    +  sublicense the  FreeType Project (in  both source and  object code
    +  forms)  and  derivative works  thereof  for  any  purpose; and  to
    +  authorize others  to exercise  some or all  of the  rights granted
    +  herein, subject to the following conditions:
    +
    +    o Redistribution of  source code  must retain this  license file
    +      (`FTL.TXT') unaltered; any  additions, deletions or changes to
    +      the original  files must be clearly  indicated in accompanying
    +      documentation.   The  copyright   notices  of  the  unaltered,
    +      original  files must  be  preserved in  all  copies of  source
    +      files.
    +
    +    o Redistribution in binary form must provide a  disclaimer  that
    +      states  that  the software is based in part of the work of the
    +      FreeType Team,  in  the  distribution  documentation.  We also
    +      encourage you to put an URL to the FreeType web page  in  your
    +      documentation, though this isn't mandatory.
    +
    +  These conditions  apply to any  software derived from or  based on
    +  the FreeType Project,  not just the unmodified files.   If you use
    +  our work, you  must acknowledge us.  However, no  fee need be paid
    +  to us.
    +
    +3. Advertising
    +--------------
    +
    +  Neither the  FreeType authors and  contributors nor you  shall use
    +  the name of the  other for commercial, advertising, or promotional
    +  purposes without specific prior written permission.
    +
    +  We suggest,  but do not require, that  you use one or  more of the
    +  following phrases to refer  to this software in your documentation
    +  or advertising  materials: `FreeType Project',  `FreeType Engine',
    +  `FreeType library', or `FreeType Distribution'.
    +
    +  As  you have  not signed  this license,  you are  not  required to
    +  accept  it.   However,  as  the FreeType  Project  is  copyrighted
    +  material, only  this license, or  another one contracted  with the
    +  authors, grants you  the right to use, distribute,  and modify it.
    +  Therefore,  by  using,  distributing,  or modifying  the  FreeType
    +  Project, you indicate that you understand and accept all the terms
    +  of this license.
    +
    +4. Contacts
    +-----------
    +
    +  There are two mailing lists related to FreeType:
    +
    +    o freetype@nongnu.org
    +
    +      Discusses general use and applications of FreeType, as well as
    +      future and  wanted additions to the  library and distribution.
    +      If  you are looking  for support,  start in  this list  if you
    +      haven't found anything to help you in the documentation.
    +
    +    o freetype-devel@nongnu.org
    +
    +      Discusses bugs,  as well  as engine internals,  design issues,
    +      specific licenses, porting, etc.
    +
    +  Our home page can be found at
    +
    +    https://www.freetype.org
    +
    +
    +--- end of FTL.TXT ---
    +
    +
    +
    + +
    +gestures +homepage + + +
    +
    gestures/LICENSE
    +
    +// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +GifPlayer Animated GIF Library +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Google Cache Invalidation API +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Google fork of Khronos reference front-end for GLSL and ESSL +homepage + + +
    +
    Copyright (c) 2015-2016 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
    +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
    +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
    +   https://www.khronos.org/registry/
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +
    + +
    +Google Input Tools +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2013 Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Google Toolbox for Mac +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +google-glog's symbolization library +homepage + + +
    +
    // Copyright (c) 2006, Google Inc.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//     * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//     * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//     * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +google-jstemplate +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +GVR Android SDK +homepage + + +
    +
       Copyright (c) 2015, Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +====================
    +Open Source Licenses
    +====================
    +
    +This software may use portions of the following libraries subject to the accompanying licenses:
    +
    +****************************
    +chromium_audio
    +****************************
    +// Copyright 2014 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +curl
    +****************************
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1996 - 2014, Daniel Stenberg, <daniel@haxx.se>.
    +
    +All rights reserved.
    +
    +Permission to use, copy, modify, and distribute this software for any purpose
    +with or without fee is hereby granted, provided that the above copyright
    +notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
    +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
    +OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +
    +****************************
    +dynamic_annotations
    +****************************
    +Copyright (c) 2008-2009, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +eigen3
    +****************************
    +Eigen is primarily MPL2 licensed. See COPYING.MPL2 and these links:
    +  http://www.mozilla.org/MPL/2.0/
    +  http://www.mozilla.org/MPL/2.0/FAQ.html
    +
    +Some files contain third-party code under BSD or LGPL licenses, whence
    +the other COPYING.* files here.
    +
    +All the LGPL code is either LGPL 2.1-only, or LGPL 2.1-or-later.
    +For this reason, the COPYING.LGPL file contains the LGPL 2.1 text.
    +
    +If you want to guarantee that the Eigen code that you are #including
    +is licensed under the MPL2 and possibly more permissive licenses (like
    +BSD), #define this preprocessor symbol: EIGEN_MPL2_ONLY
    +For example, with most compilers, you could add this to your project
    +      CXXFLAGS: -DEIGEN_MPL2_ONLY
    +This will cause a compilation error to be generated if you #include
    +any code that is LGPL licensed.
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./test/mapstaticmethods.cpp
    +./test/schur_real.cpp
    +./test/prec_inverse_4x4.cpp
    +./test/smallvectors.cpp
    +./test/redux.cpp
    +./test/special_numbers.cpp
    +./test/adjoint.cpp
    +./test/resize.cpp
    +./test/mixingtypes.cpp
    +./test/product_trmv.cpp
    +./test/sparse_solvers.cpp
    +./test/cholesky.cpp
    +./test/geo_quaternion.cpp
    +./test/miscmatrices.cpp
    +./test/stddeque.cpp
    +./test/integer_types.cpp
    +./test/product_large.cpp
    +./test/eigensolver_generic.cpp
    +./test/householder.cpp
    +./test/geo_orthomethods.cpp
    +./test/array_for_matrix.cpp
    +./test/sparseLM.cpp
    +./test/upperbidiagonalization.cpp
    +./test/nomalloc.cpp
    +./test/packetmath.cpp
    +./test/jacobisvd.cpp
    +./test/geo_transformations.cpp
    +./test/swap.cpp
    +./test/eigensolver_selfadjoint.cpp
    +./test/inverse.cpp
    +./test/product_selfadjoint.cpp
    +./test/product_trsolve.cpp
    +./test/product_extra.cpp
    +./test/sparse_solver.h
    +./test/mapstride.cpp
    +./test/mapped_matrix.cpp
    +./test/geo_eulerangles.cpp
    +./test/eigen2support.cpp
    +./test/denseLM.cpp
    +./test/stdvector.cpp
    +./test/nesting_ops.cpp
    +./test/sparse_permutations.cpp
    +./test/zerosized.cpp
    +./test/exceptions.cpp
    +./test/vectorwiseop.cpp
    +./test/cwiseop.cpp
    +./test/basicstuff.cpp
    +./test/product_trmm.cpp
    +./test/linearstructure.cpp
    +./test/sparse_product.cpp
    +./test/stdvector_overload.cpp
    +./test/stable_norm.cpp
    +./test/umeyama.cpp
    +./test/unalignedcount.cpp
    +./test/triangular.cpp
    +./test/product_mmtr.cpp
    +./test/sparse_basic.cpp
    +./test/sparse_vector.cpp
    +./test/meta.cpp
    +./test/real_qz.cpp
    +./test/ref.cpp
    +./test/eigensolver_complex.cpp
    +./test/cholmod_support.cpp
    +./test/conjugate_gradient.cpp
    +./test/sparse.h
    +./test/simplicial_cholesky.cpp
    +./test/bicgstab.cpp
    +./test/dynalloc.cpp
    +./test/product_notemporary.cpp
    +./test/geo_hyperplane.cpp
    +./test/lu.cpp
    +./test/qr.cpp
    +./test/hessenberg.cpp
    +./test/sizeof.cpp
    +./test/main.h
    +./test/selfadjoint.cpp
    +./test/permutationmatrices.cpp
    +./test/superlu_support.cpp
    +./test/qtvector.cpp
    +./test/geo_homogeneous.cpp
    +./test/determinant.cpp
    +./test/array_reverse.cpp
    +./test/unalignedassert.cpp
    +./test/stdlist.cpp
    +./test/product_symm.cpp
    +./test/corners.cpp
    +./test/dontalign.cpp
    +./test/visitor.cpp
    +./test/geo_alignedbox.cpp
    +./test/diagonalmatrices.cpp
    +./test/product_small.cpp
    +./test/eigensolver_generalized_real.cpp
    +./test/umfpack_support.cpp
    +./test/first_aligned.cpp
    +./test/qr_fullpivoting.cpp
    +./test/array_replicate.cpp
    +./test/geo_parametrizedline.cpp
    +./test/eigen2/eigen2_unalignedassert.cpp
    +./test/eigen2/eigen2_prec_inverse_4x4.cpp
    +./test/eigen2/eigen2_alignedbox.cpp
    +./test/eigen2/eigen2_sparse_product.cpp
    +./test/eigen2/eigen2_meta.cpp
    +./test/eigen2/eigen2_nomalloc.cpp
    +./test/eigen2/eigen2_visitor.cpp
    +./test/eigen2/eigen2_packetmath.cpp
    +./test/eigen2/eigen2_svd.cpp
    +./test/eigen2/eigen2_mixingtypes.cpp
    +./test/eigen2/eigen2_qr.cpp
    +./test/eigen2/eigen2_cwiseop.cpp
    +./test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp
    +./test/eigen2/eigen2_smallvectors.cpp
    +./test/eigen2/eigen2_commainitializer.cpp
    +./test/eigen2/eigen2_sparse_solvers.cpp
    +./test/eigen2/eigen2_hyperplane.cpp
    +./test/eigen2/eigen2_eigensolver.cpp
    +./test/eigen2/eigen2_linearstructure.cpp
    +./test/eigen2/eigen2_sizeof.cpp
    +./test/eigen2/eigen2_parametrizedline.cpp
    +./test/eigen2/eigen2_lu.cpp
    +./test/eigen2/eigen2_adjoint.cpp
    +./test/eigen2/eigen2_geometry.cpp
    +./test/eigen2/eigen2_stdvector.cpp
    +./test/eigen2/eigen2_newstdvector.cpp
    +./test/eigen2/eigen2_submatrices.cpp
    +./test/eigen2/sparse.h
    +./test/eigen2/eigen2_swap.cpp
    +./test/eigen2/eigen2_triangular.cpp
    +./test/eigen2/eigen2_basicstuff.cpp
    +./test/eigen2/gsl_helper.h
    +./test/eigen2/eigen2_dynalloc.cpp
    +./test/eigen2/eigen2_array.cpp
    +./test/eigen2/eigen2_map.cpp
    +./test/eigen2/main.h
    +./test/eigen2/eigen2_miscmatrices.cpp
    +./test/eigen2/eigen2_product_large.cpp
    +./test/eigen2/eigen2_first_aligned.cpp
    +./test/eigen2/eigen2_cholesky.cpp
    +./test/eigen2/eigen2_determinant.cpp
    +./test/eigen2/eigen2_sum.cpp
    +./test/eigen2/eigen2_inverse.cpp
    +./test/eigen2/eigen2_regression.cpp
    +./test/eigen2/eigen2_product_small.cpp
    +./test/eigen2/eigen2_qtvector.cpp
    +./test/eigen2/eigen2_sparse_vector.cpp
    +./test/eigen2/product.h
    +./test/eigen2/eigen2_sparse_basic.cpp
    +./test/eigen2/eigen2_bug_132.cpp
    +./test/array.cpp
    +./test/product_syrk.cpp
    +./test/commainitializer.cpp
    +./test/conservative_resize.cpp
    +./test/qr_colpivoting.cpp
    +./test/nullary.cpp
    +./test/bandmatrix.cpp
    +./test/pastix_support.cpp
    +./test/product.h
    +./test/block.cpp
    +./test/vectorization_logic.cpp
    +./test/jacobi.cpp
    +./test/diagonal.cpp
    +./test/schur_complex.cpp
    +./test/sizeoverflow.cpp
    +./bench/BenchTimer.h
    +./bench/benchFFT.cpp
    +./bench/eig33.cpp
    +./bench/spbench/spbenchsolver.h
    +./bench/spbench/spbenchstyle.h
    +./lapack/complex_double.cpp
    +./lapack/cholesky.cpp
    +./lapack/lapack_common.h
    +./lapack/eigenvalues.cpp
    +./lapack/single.cpp
    +./lapack/lu.cpp
    +./lapack/complex_single.cpp
    +./lapack/double.cpp
    +./demos/mix_eigen_and_c/binary_library.cpp
    +./demos/mix_eigen_and_c/binary_library.h
    +./demos/mix_eigen_and_c/example.c
    +./demos/mandelbrot/mandelbrot.cpp
    +./demos/mandelbrot/mandelbrot.h
    +./demos/opengl/icosphere.cpp
    +./demos/opengl/icosphere.h
    +./demos/opengl/camera.cpp
    +./demos/opengl/quaternion_demo.h
    +./demos/opengl/camera.h
    +./demos/opengl/trackball.h
    +./demos/opengl/gpuhelper.h
    +./demos/opengl/trackball.cpp
    +./demos/opengl/gpuhelper.cpp
    +./demos/opengl/quaternion_demo.cpp
    +./debug/gdb/printers.py
    +./unsupported/test/minres.cpp
    +./unsupported/test/openglsupport.cpp
    +./unsupported/test/jacobisvd.cpp
    +./unsupported/test/dgmres.cpp
    +./unsupported/test/matrix_square_root.cpp
    +./unsupported/test/bdcsvd.cpp
    +./unsupported/test/matrix_exponential.cpp
    +./unsupported/test/forward_adolc.cpp
    +./unsupported/test/polynomialsolver.cpp
    +./unsupported/test/matrix_function.cpp
    +./unsupported/test/sparse_extra.cpp
    +./unsupported/test/matrix_functions.h
    +./unsupported/test/svd_common.h
    +./unsupported/test/FFTW.cpp
    +./unsupported/test/alignedvector3.cpp
    +./unsupported/test/autodiff.cpp
    +./unsupported/test/gmres.cpp
    +./unsupported/test/BVH.cpp
    +./unsupported/test/levenberg_marquardt.cpp
    +./unsupported/test/matrix_power.cpp
    +./unsupported/test/kronecker_product.cpp
    +./unsupported/test/splines.cpp
    +./unsupported/test/polynomialutils.cpp
    +./unsupported/bench/bench_svd.cpp
    +./unsupported/Eigen/IterativeSolvers
    +./unsupported/Eigen/src/IterativeSolvers/DGMRES.h
    +./unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h
    +./unsupported/Eigen/src/IterativeSolvers/GMRES.h
    +./unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h
    +./unsupported/Eigen/src/IterativeSolvers/Scaling.h
    +./unsupported/Eigen/src/IterativeSolvers/MINRES.h
    +./unsupported/Eigen/src/SparseExtra/RandomSetter.h
    +./unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h
    +./unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h
    +./unsupported/Eigen/src/SparseExtra/MarketIO.h
    +./unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h
    +./unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h
    +./unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h
    +./unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h
    +./unsupported/Eigen/src/BVH/BVAlgorithms.h
    +./unsupported/Eigen/src/BVH/KdBVH.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffVector.h
    +./unsupported/Eigen/src/Splines/Spline.h
    +./unsupported/Eigen/src/Splines/SplineFitting.h
    +./unsupported/Eigen/src/Splines/SplineFwd.h
    +./unsupported/Eigen/src/SVD/JacobiSVD.h
    +./unsupported/Eigen/src/SVD/BDCSVD.h
    +./unsupported/Eigen/src/SVD/SVDBase.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h
    +./unsupported/Eigen/src/MatrixFunctions/StemFunction.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixPower.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h
    +./unsupported/Eigen/src/MoreVectorization/MathFunctions.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
    +./unsupported/Eigen/src/FFT/ei_fftw_impl.h
    +./unsupported/Eigen/src/FFT/ei_kissfft_impl.h
    +./unsupported/Eigen/src/Polynomials/PolynomialSolver.h
    +./unsupported/Eigen/src/Polynomials/Companion.h
    +./unsupported/Eigen/src/Polynomials/PolynomialUtils.h
    +./unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
    +./unsupported/Eigen/src/Skyline/SkylineProduct.h
    +./unsupported/Eigen/src/Skyline/SkylineMatrixBase.h
    +./unsupported/Eigen/src/Skyline/SkylineStorage.h
    +./unsupported/Eigen/src/Skyline/SkylineUtil.h
    +./unsupported/Eigen/src/Skyline/SkylineInplaceLU.h
    +./unsupported/Eigen/src/Skyline/SkylineMatrix.h
    +./unsupported/Eigen/SparseExtra
    +./unsupported/Eigen/AdolcForward
    +./unsupported/Eigen/KroneckerProduct
    +./unsupported/Eigen/NonLinearOptimization
    +./unsupported/Eigen/BVH
    +./unsupported/Eigen/OpenGLSupport
    +./unsupported/Eigen/ArpackSupport
    +./unsupported/Eigen/AutoDiff
    +./unsupported/Eigen/Splines
    +./unsupported/Eigen/MPRealSupport
    +./unsupported/Eigen/MatrixFunctions
    +./unsupported/Eigen/MoreVectorization
    +./unsupported/Eigen/LevenbergMarquardt
    +./unsupported/Eigen/AlignedVector3
    +./unsupported/Eigen/FFT
    +./unsupported/Eigen/Polynomials
    +./unsupported/Eigen/NumericalDiff
    +./unsupported/Eigen/Skyline
    +./COPYING.README
    +./COPYING.README
    +./LICENSE
    +./LICENSE
    +./LICENSE
    +./Eigen/Eigen2Support
    +./Eigen/src/Eigen2Support/VectorBlock.h
    +./Eigen/src/Eigen2Support/Cwise.h
    +./Eigen/src/Eigen2Support/Minor.h
    +./Eigen/src/Eigen2Support/Lazy.h
    +./Eigen/src/Eigen2Support/Memory.h
    +./Eigen/src/Eigen2Support/MathFunctions.h
    +./Eigen/src/Eigen2Support/Geometry/AlignedBox.h
    +./Eigen/src/Eigen2Support/Geometry/Hyperplane.h
    +./Eigen/src/Eigen2Support/Geometry/Quaternion.h
    +./Eigen/src/Eigen2Support/Geometry/Rotation2D.h
    +./Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h
    +./Eigen/src/Eigen2Support/Geometry/RotationBase.h
    +./Eigen/src/Eigen2Support/Geometry/Translation.h
    +./Eigen/src/Eigen2Support/Geometry/Scaling.h
    +./Eigen/src/Eigen2Support/Geometry/AngleAxis.h
    +./Eigen/src/Eigen2Support/Geometry/Transform.h
    +./Eigen/src/Eigen2Support/TriangularSolver.h
    +./Eigen/src/Eigen2Support/LU.h
    +./Eigen/src/Eigen2Support/QR.h
    +./Eigen/src/Eigen2Support/SVD.h
    +./Eigen/src/Eigen2Support/Meta.h
    +./Eigen/src/Eigen2Support/Block.h
    +./Eigen/src/Eigen2Support/Macros.h
    +./Eigen/src/Eigen2Support/LeastSquares.h
    +./Eigen/src/Eigen2Support/CwiseOperators.h
    +./Eigen/src/Jacobi/Jacobi.h
    +./Eigen/src/misc/Kernel.h
    +./Eigen/src/misc/SparseSolve.h
    +./Eigen/src/misc/Solve.h
    +./Eigen/src/misc/Image.h
    +./Eigen/src/SparseCore/SparseColEtree.h
    +./Eigen/src/SparseCore/SparseTranspose.h
    +./Eigen/src/SparseCore/SparseUtil.h
    +./Eigen/src/SparseCore/SparseCwiseBinaryOp.h
    +./Eigen/src/SparseCore/SparseDiagonalProduct.h
    +./Eigen/src/SparseCore/SparseProduct.h
    +./Eigen/src/SparseCore/SparseDot.h
    +./Eigen/src/SparseCore/SparseCwiseUnaryOp.h
    +./Eigen/src/SparseCore/SparseSparseProductWithPruning.h
    +./Eigen/src/SparseCore/SparseBlock.h
    +./Eigen/src/SparseCore/SparseDenseProduct.h
    +./Eigen/src/SparseCore/CompressedStorage.h
    +./Eigen/src/SparseCore/SparseMatrixBase.h
    +./Eigen/src/SparseCore/MappedSparseMatrix.h
    +./Eigen/src/SparseCore/SparseTriangularView.h
    +./Eigen/src/SparseCore/SparseView.h
    +./Eigen/src/SparseCore/SparseFuzzy.h
    +./Eigen/src/SparseCore/TriangularSolver.h
    +./Eigen/src/SparseCore/SparseSelfAdjointView.h
    +./Eigen/src/SparseCore/SparseMatrix.h
    +./Eigen/src/SparseCore/SparseVector.h
    +./Eigen/src/SparseCore/AmbiVector.h
    +./Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
    +./Eigen/src/SparseCore/SparseRedux.h
    +./Eigen/src/SparseCore/SparsePermutation.h
    +./Eigen/src/Eigenvalues/RealSchur.h
    +./Eigen/src/Eigenvalues/ComplexEigenSolver.h
    +./Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
    +./Eigen/src/Eigenvalues/ComplexSchur.h
    +./Eigen/src/Eigenvalues/RealQZ.h
    +./Eigen/src/Eigenvalues/EigenSolver.h
    +./Eigen/src/Eigenvalues/HessenbergDecomposition.h
    +./Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
    +./Eigen/src/Eigenvalues/Tridiagonalization.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
    +./Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
    +./Eigen/src/SuperLUSupport/SuperLUSupport.h
    +./Eigen/src/StlSupport/StdDeque.h
    +./Eigen/src/StlSupport/StdVector.h
    +./Eigen/src/StlSupport/StdList.h
    +./Eigen/src/StlSupport/details.h
    +./Eigen/src/SparseQR/SparseQR.h
    +./Eigen/src/LU/Inverse.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/Determinant.h
    +./Eigen/src/LU/PartialPivLU.h
    +./Eigen/src/LU/FullPivLU.h
    +./Eigen/src/UmfPackSupport/UmfPackSupport.h
    +./Eigen/src/OrderingMethods/Ordering.h
    +./Eigen/src/OrderingMethods/Eigen_Colamd.h
    +./Eigen/src/QR/HouseholderQR.h
    +./Eigen/src/QR/ColPivHouseholderQR.h
    +./Eigen/src/QR/FullPivHouseholderQR.h
    +./Eigen/src/SVD/JacobiSVD.h
    +./Eigen/src/SVD/UpperBidiagonalization.h
    +./Eigen/src/Geometry/OrthoMethods.h
    +./Eigen/src/Geometry/AlignedBox.h
    +./Eigen/src/Geometry/Hyperplane.h
    +./Eigen/src/Geometry/Quaternion.h
    +./Eigen/src/Geometry/EulerAngles.h
    +./Eigen/src/Geometry/Rotation2D.h
    +./Eigen/src/Geometry/ParametrizedLine.h
    +./Eigen/src/Geometry/RotationBase.h
    +./Eigen/src/Geometry/arch/Geometry_SSE.h
    +./Eigen/src/Geometry/Umeyama.h
    +./Eigen/src/Geometry/Homogeneous.h
    +./Eigen/src/Geometry/Translation.h
    +./Eigen/src/Geometry/Scaling.h
    +./Eigen/src/Geometry/AngleAxis.h
    +./Eigen/src/Geometry/Transform.h
    +./Eigen/src/plugins/BlockMethods.h
    +./Eigen/src/plugins/CommonCwiseUnaryOps.h
    +./Eigen/src/plugins/CommonCwiseBinaryOps.h
    +./Eigen/src/plugins/MatrixCwiseUnaryOps.h
    +./Eigen/src/plugins/MatrixCwiseBinaryOps.h
    +./Eigen/src/Householder/Householder.h
    +./Eigen/src/Householder/HouseholderSequence.h
    +./Eigen/src/Householder/BlockHouseholder.h
    +./Eigen/src/Core/VectorBlock.h
    +./Eigen/src/Core/Matrix.h
    +./Eigen/src/Core/Ref.h
    +./Eigen/src/Core/SelfAdjointView.h
    +./Eigen/src/Core/MathFunctions.h
    +./Eigen/src/Core/GlobalFunctions.h
    +./Eigen/src/Core/MapBase.h
    +./Eigen/src/Core/EigenBase.h
    +./Eigen/src/Core/GenericPacketMath.h
    +./Eigen/src/Core/NestByValue.h
    +./Eigen/src/Core/CwiseUnaryOp.h
    +./Eigen/src/Core/SolveTriangular.h
    +./Eigen/src/Core/Fuzzy.h
    +./Eigen/src/Core/Visitor.h
    +./Eigen/src/Core/Map.h
    +./Eigen/src/Core/NoAlias.h
    +./Eigen/src/Core/Diagonal.h
    +./Eigen/src/Core/StableNorm.h
    +./Eigen/src/Core/CoreIterators.h
    +./Eigen/src/Core/products/Parallelizer.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
    +./Eigen/src/Core/products/TriangularSolverMatrix.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix.h
    +./Eigen/src/Core/products/SelfadjointProduct.h
    +./Eigen/src/Core/products/CoeffBasedProduct.h
    +./Eigen/src/Core/products/TriangularMatrixVector.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix.h
    +./Eigen/src/Core/products/TriangularSolverVector.h
    +./Eigen/src/Core/products/SelfadjointRank2Update.h
    +./Eigen/src/Core/products/GeneralBlockPanelKernel.h
    +./Eigen/src/Core/products/GeneralMatrixVector.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix.h
    +./Eigen/src/Core/Reverse.h
    +./Eigen/src/Core/BooleanRedux.h
    +./Eigen/src/Core/Replicate.h
    +./Eigen/src/Core/arch/AltiVec/PacketMath.h
    +./Eigen/src/Core/arch/AltiVec/Complex.h
    +./Eigen/src/Core/arch/SSE/PacketMath.h
    +./Eigen/src/Core/arch/SSE/Complex.h
    +./Eigen/src/Core/arch/SSE/MathFunctions.h
    +./Eigen/src/Core/arch/NEON/PacketMath.h
    +./Eigen/src/Core/arch/NEON/Complex.h
    +./Eigen/src/Core/arch/Default/Settings.h
    +./Eigen/src/Core/CwiseUnaryView.h
    +./Eigen/src/Core/Array.h
    +./Eigen/src/Core/ArrayWrapper.h
    +./Eigen/src/Core/Swap.h
    +./Eigen/src/Core/Transpositions.h
    +./Eigen/src/Core/Random.h
    +./Eigen/src/Core/IO.h
    +./Eigen/src/Core/SelfCwiseBinaryOp.h
    +./Eigen/src/Core/VectorwiseOp.h
    +./Eigen/src/Core/Select.h
    +./Eigen/src/Core/ArrayBase.h
    +./Eigen/src/Core/DenseCoeffsBase.h
    +./Eigen/src/Core/DiagonalProduct.h
    +./Eigen/src/Core/Assign.h
    +./Eigen/src/Core/Redux.h
    +./Eigen/src/Core/ForceAlignedAccess.h
    +./Eigen/src/Core/BandMatrix.h
    +./Eigen/src/Core/PlainObjectBase.h
    +./Eigen/src/Core/DenseBase.h
    +./Eigen/src/Core/Flagged.h
    +./Eigen/src/Core/CwiseBinaryOp.h
    +./Eigen/src/Core/ProductBase.h
    +./Eigen/src/Core/TriangularMatrix.h
    +./Eigen/src/Core/Transpose.h
    +./Eigen/src/Core/DiagonalMatrix.h
    +./Eigen/src/Core/Dot.h
    +./Eigen/src/Core/Functors.h
    +./Eigen/src/Core/PermutationMatrix.h
    +./Eigen/src/Core/NumTraits.h
    +./Eigen/src/Core/MatrixBase.h
    +./Eigen/src/Core/DenseStorage.h
    +./Eigen/src/Core/util/Memory.h
    +./Eigen/src/Core/util/StaticAssert.h
    +./Eigen/src/Core/util/BlasUtil.h
    +./Eigen/src/Core/util/MatrixMapper.h
    +./Eigen/src/Core/util/XprHelper.h
    +./Eigen/src/Core/util/ForwardDeclarations.h
    +./Eigen/src/Core/util/Meta.h
    +./Eigen/src/Core/util/Macros.h
    +./Eigen/src/Core/util/Constants.h
    +./Eigen/src/Core/CwiseNullaryOp.h
    +./Eigen/src/Core/Block.h
    +./Eigen/src/Core/GeneralProduct.h
    +./Eigen/src/Core/CommaInitializer.h
    +./Eigen/src/Core/ReturnByValue.h
    +./Eigen/src/Core/Stride.h
    +./Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
    +./Eigen/src/SparseLU/SparseLU_column_dfs.h
    +./Eigen/src/SparseLU/SparseLU_panel_dfs.h
    +./Eigen/src/SparseLU/SparseLU_relax_snode.h
    +./Eigen/src/SparseLU/SparseLU_panel_bmod.h
    +./Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
    +./Eigen/src/SparseLU/SparseLU_Utils.h
    +./Eigen/src/SparseLU/SparseLU_gemm_kernel.h
    +./Eigen/src/SparseLU/SparseLU_kernel_bmod.h
    +./Eigen/src/SparseLU/SparseLU_pivotL.h
    +./Eigen/src/SparseLU/SparseLU_Memory.h
    +./Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
    +./Eigen/src/SparseLU/SparseLUImpl.h
    +./Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
    +./Eigen/src/SparseLU/SparseLU_Structs.h
    +./Eigen/src/SparseLU/SparseLU.h
    +./Eigen/src/SparseLU/SparseLU_column_bmod.h
    +./Eigen/src/SparseLU/SparseLU_pruneL.h
    +./Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
    +./Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
    +./Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
    +./Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
    +./Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
    +./Eigen/src/SparseCholesky/SimplicialCholesky.h
    +./Eigen/src/Cholesky/LDLT.h
    +./Eigen/src/Cholesky/LLT.h
    +./Eigen/src/CholmodSupport/CholmodSupport.h
    +./Eigen/src/PaStiXSupport/PaStiXSupport.h
    +./Eigen/src/MetisSupport/MetisSupport.h
    +./Eigen/StdVector
    +./Eigen/Core
    +./Eigen/SparseLU
    +./Eigen/StdList
    +./Eigen/StdDeque
    +./Eigen/SparseCholesky
    +./scripts/relicense.py
    +./scripts/relicense.py
    +./blas/BandTriangularSolver.h
    +./blas/PackedTriangularMatrixVector.h
    +./blas/complex_double.cpp
    +./blas/level2_real_impl.h
    +./blas/level1_cplx_impl.h
    +./blas/level1_impl.h
    +./blas/level1_real_impl.h
    +./blas/level3_impl.h
    +./blas/single.cpp
    +./blas/level2_cplx_impl.h
    +./blas/PackedSelfadjointProduct.h
    +./blas/Rank2Update.h
    +./blas/complex_single.cpp
    +./blas/PackedTriangularSolverVector.h
    +./blas/double.cpp
    +./blas/common.h
    +./blas/level2_impl.h
    +./blas/GeneralRank1Update.h
    +
    +Mozilla Public License Version 2.0
    +==================================
    +
    +1. Definitions
    +--------------
    +
    +1.1. "Contributor"
    +    means each individual or legal entity that creates, contributes to
    +    the creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +    means the combination of the Contributions of others (if any) used
    +    by a Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +    means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +    means Source Code Form to which the initial Contributor has attached
    +    the notice in Exhibit A, the Executable Form of such Source Code
    +    Form, and Modifications of such Source Code Form, in each case
    +    including portions thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +    means
    +
    +    (a) that the initial Contributor has attached the notice described
    +        in Exhibit B to the Covered Software; or
    +
    +    (b) that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the
    +        terms of a Secondary License.
    +
    +1.6. "Executable Form"
    +    means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +    means a work that combines Covered Software with other material, in
    +    a separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +    means this document.
    +
    +1.9. "Licensable"
    +    means having the right to grant, to the maximum extent possible,
    +    whether at the time of the initial grant or subsequently, any and
    +    all of the rights conveyed by this License.
    +
    +1.10. "Modifications"
    +    means any of the following:
    +
    +    (a) any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered
    +        Software; or
    +
    +    (b) any new file in Source Code Form that contains any Covered
    +        Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +    means any patent claim(s), including without limitation, method,
    +    process, and apparatus claims, in any patent Licensable by such
    +    Contributor that would be infringed, but for the grant of the
    +    License, by the making, using, selling, offering for sale, having
    +    made, import, or transfer of either its Contributions or its
    +    Contributor Version.
    +
    +1.12. "Secondary License"
    +    means either the GNU General Public License, Version 2.0, the GNU
    +    Lesser General Public License, Version 2.1, the GNU Affero General
    +    Public License, Version 3.0, or any later versions of those
    +    licenses.
    +
    +1.13. "Source Code Form"
    +    means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +    means an individual or a legal entity exercising rights under this
    +    License. For legal entities, "You" includes any entity that
    +    controls, is controlled by, or is under common control with You. For
    +    purposes of this definition, "control" means (a) the power, direct
    +    or indirect, to cause the direction or management of such entity,
    +    whether by contract or otherwise, or (b) ownership of more than
    +    fifty percent (50%) of the outstanding shares or beneficial
    +    ownership of such entity.
    +
    +2. License Grants and Conditions
    +--------------------------------
    +
    +2.1. Grants
    +
    +Each Contributor hereby grants You a world-wide, royalty-free,
    +non-exclusive license:
    +
    +(a) under intellectual property rights (other than patent or trademark)
    +    Licensable by such Contributor to use, reproduce, make available,
    +    modify, display, perform, distribute, and otherwise exploit its
    +    Contributions, either on an unmodified basis, with Modifications, or
    +    as part of a Larger Work; and
    +
    +(b) under Patent Claims of such Contributor to make, use, sell, offer
    +    for sale, have made, import, and otherwise transfer either its
    +    Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +The licenses granted in Section 2.1 with respect to any Contribution
    +become effective for each Contribution on the date the Contributor first
    +distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +The licenses granted in this Section 2 are the only rights granted under
    +this License. No additional rights or licenses will be implied from the
    +distribution or licensing of Covered Software under this License.
    +Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +Contributor:
    +
    +(a) for any code that a Contributor has removed from Covered Software;
    +    or
    +
    +(b) for infringements caused by: (i) Your and any other third party's
    +    modifications of Covered Software, or (ii) the combination of its
    +    Contributions with other software (except as part of its Contributor
    +    Version); or
    +
    +(c) under Patent Claims infringed by Covered Software in the absence of
    +    its Contributions.
    +
    +This License does not grant any rights in the trademarks, service marks,
    +or logos of any Contributor (except as may be necessary to comply with
    +the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +No Contributor makes additional grants as a result of Your choice to
    +distribute the Covered Software under a subsequent version of this
    +License (see Section 10.2) or under the terms of a Secondary License (if
    +permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +Each Contributor represents that the Contributor believes its
    +Contributions are its original creation(s) or it has sufficient rights
    +to grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +This License is not intended to limit any rights You have under
    +applicable copyright doctrines of fair use, fair dealing, or other
    +equivalents.
    +
    +2.7. Conditions
    +
    +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
    +in Section 2.1.
    +
    +3. Responsibilities
    +-------------------
    +
    +3.1. Distribution of Source Form
    +
    +All distribution of Covered Software in Source Code Form, including any
    +Modifications that You create or to which You contribute, must be under
    +the terms of this License. You must inform recipients that the Source
    +Code Form of the Covered Software is governed by the terms of this
    +License, and how they can obtain a copy of this License. You may not
    +attempt to alter or restrict the recipients' rights in the Source Code
    +Form.
    +
    +3.2. Distribution of Executable Form
    +
    +If You distribute Covered Software in Executable Form then:
    +
    +(a) such Covered Software must also be made available in Source Code
    +    Form, as described in Section 3.1, and You must inform recipients of
    +    the Executable Form how they can obtain a copy of such Source Code
    +    Form by reasonable means in a timely manner, at a charge no more
    +    than the cost of distribution to the recipient; and
    +
    +(b) You may distribute such Executable Form under the terms of this
    +    License, or sublicense it under different terms, provided that the
    +    license for the Executable Form does not attempt to limit or alter
    +    the recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +You may create and distribute a Larger Work under terms of Your choice,
    +provided that You also comply with the requirements of this License for
    +the Covered Software. If the Larger Work is a combination of Covered
    +Software with a work governed by one or more Secondary Licenses, and the
    +Covered Software is not Incompatible With Secondary Licenses, this
    +License permits You to additionally distribute such Covered Software
    +under the terms of such Secondary License(s), so that the recipient of
    +the Larger Work may, at their option, further distribute the Covered
    +Software under the terms of either this License or such Secondary
    +License(s).
    +
    +3.4. Notices
    +
    +You may not remove or alter the substance of any license notices
    +(including copyright notices, patent notices, disclaimers of warranty,
    +or limitations of liability) contained within the Source Code Form of
    +the Covered Software, except that You may alter any license notices to
    +the extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +You may choose to offer, and to charge a fee for, warranty, support,
    +indemnity or liability obligations to one or more recipients of Covered
    +Software. However, You may do so only on Your own behalf, and not on
    +behalf of any Contributor. You must make it absolutely clear that any
    +such warranty, support, indemnity, or liability obligation is offered by
    +You alone, and You hereby agree to indemnify every Contributor for any
    +liability incurred by such Contributor as a result of warranty, support,
    +indemnity or liability terms You offer. You may include additional
    +disclaimers of warranty and limitations of liability specific to any
    +jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +---------------------------------------------------
    +
    +If it is impossible for You to comply with any of the terms of this
    +License with respect to some or all of the Covered Software due to
    +statute, judicial order, or regulation then You must: (a) comply with
    +the terms of this License to the maximum extent possible; and (b)
    +describe the limitations and the code they affect. Such description must
    +be placed in a text file included with all distributions of the Covered
    +Software under this License. Except to the extent prohibited by statute
    +or regulation, such description must be sufficiently detailed for a
    +recipient of ordinary skill to be able to understand it.
    +
    +5. Termination
    +--------------
    +
    +5.1. The rights granted under this License will terminate automatically
    +if You fail to comply with any of its terms. However, if You become
    +compliant, then the rights granted under this License from a particular
    +Contributor are reinstated (a) provisionally, unless and until such
    +Contributor explicitly and finally terminates Your grants, and (b) on an
    +ongoing basis, if such Contributor fails to notify You of the
    +non-compliance by some reasonable means prior to 60 days after You have
    +come back into compliance. Moreover, Your grants from a particular
    +Contributor are reinstated on an ongoing basis if such Contributor
    +notifies You of the non-compliance by some reasonable means, this is the
    +first time You have received notice of non-compliance with this License
    +from such Contributor, and You become compliant prior to 30 days after
    +Your receipt of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +infringement claim (excluding declaratory judgment actions,
    +counter-claims, and cross-claims) alleging that a Contributor Version
    +directly or indirectly infringes any patent, then the rights granted to
    +You by any and all Contributors for the Covered Software under Section
    +2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all
    +end user license agreements (excluding distributors and resellers) which
    +have been validly granted by You or Your distributors under this License
    +prior to termination shall survive termination.
    +
    +************************************************************************
    +*                                                                      *
    +*  6. Disclaimer of Warranty                                           *
    +*  -------------------------                                           *
    +*                                                                      *
    +*  Covered Software is provided under this License on an "as is"       *
    +*  basis, without warranty of any kind, either expressed, implied, or  *
    +*  statutory, including, without limitation, warranties that the       *
    +*  Covered Software is free of defects, merchantable, fit for a        *
    +*  particular purpose or non-infringing. The entire risk as to the     *
    +*  quality and performance of the Covered Software is with You.        *
    +*  Should any Covered Software prove defective in any respect, You     *
    +*  (not any Contributor) assume the cost of any necessary servicing,   *
    +*  repair, or correction. This disclaimer of warranty constitutes an   *
    +*  essential part of this License. No use of any Covered Software is   *
    +*  authorized under this License except under this disclaimer.         *
    +*                                                                      *
    +************************************************************************
    +
    +************************************************************************
    +*                                                                      *
    +*  7. Limitation of Liability                                          *
    +*  --------------------------                                          *
    +*                                                                      *
    +*  Under no circumstances and under no legal theory, whether tort      *
    +*  (including negligence), contract, or otherwise, shall any           *
    +*  Contributor, or anyone who distributes Covered Software as          *
    +*  permitted above, be liable to You for any direct, indirect,         *
    +*  special, incidental, or consequential damages of any character      *
    +*  including, without limitation, damages for lost profits, loss of    *
    +*  goodwill, work stoppage, computer failure or malfunction, or any    *
    +*  and all other commercial damages or losses, even if such party      *
    +*  shall have been informed of the possibility of such damages. This   *
    +*  limitation of liability shall not apply to liability for death or   *
    +*  personal injury resulting from such party's negligence to the       *
    +*  extent applicable law prohibits such limitation. Some               *
    +*  jurisdictions do not allow the exclusion or limitation of           *
    +*  incidental or consequential damages, so this exclusion and          *
    +*  limitation may not apply to You.                                    *
    +*                                                                      *
    +************************************************************************
    +
    +8. Litigation
    +-------------
    +
    +Any litigation relating to this License may be brought only in the
    +courts of a jurisdiction where the defendant maintains its principal
    +place of business and such litigation shall be governed by laws of that
    +jurisdiction, without reference to its conflict-of-law provisions.
    +Nothing in this Section shall prevent a party's ability to bring
    +cross-claims or counter-claims.
    +
    +9. Miscellaneous
    +----------------
    +
    +This License represents the complete agreement concerning the subject
    +matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent
    +necessary to make it enforceable. Any law or regulation which provides
    +that the language of a contract shall be construed against the drafter
    +shall not be used to construe this License against a Contributor.
    +
    +10. Versions of the License
    +---------------------------
    +
    +10.1. New Versions
    +
    +Mozilla Foundation is the license steward. Except as provided in Section
    +10.3, no one other than the license steward has the right to modify or
    +publish new versions of this License. Each version will be given a
    +distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +You may distribute the Covered Software under the terms of the version
    +of the License under which You originally received the Covered Software,
    +or under the terms of any subsequent version published by the license
    +steward.
    +
    +10.3. Modified Versions
    +
    +If you create software not governed by this License, and you want to
    +create a new license for such software, you may create and use a
    +modified version of this License if you rename the license and remove
    +any references to the name of the license steward (except to note that
    +such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +Licenses
    +
    +If You choose to distribute Source Code Form that is Incompatible With
    +Secondary Licenses under the terms of this version of the License, the
    +notice described in Exhibit B of this License must be attached.
    +
    +Exhibit A - Source Code Form License Notice
    +-------------------------------------------
    +
    +  This Source Code Form is subject to the terms of the Mozilla Public
    +  License, v. 2.0. If a copy of the MPL was not distributed with this
    +  file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular
    +file, then You may include the notice in a location (such as a LICENSE
    +file in a relevant directory) where a recipient would be likely to look
    +for such a notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +---------------------------------------------------------
    +
    +  This Source Code Form is "Incompatible With Secondary Licenses", as
    +  defined by the Mozilla Public License, v. 2.0.
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./doc/UsingIntelMKL.dox
    +./doc/UsingIntelMKL.dox
    +./Eigen/src/Eigenvalues/ComplexSchur_MKL.h
    +./Eigen/src/Eigenvalues/ComplexSchur_MKL.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h
    +./Eigen/src/Eigenvalues/RealSchur_MKL.h
    +./Eigen/src/Eigenvalues/RealSchur_MKL.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/PartialPivLU_MKL.h
    +./Eigen/src/LU/PartialPivLU_MKL.h
    +./Eigen/src/QR/HouseholderQR_MKL.h
    +./Eigen/src/QR/HouseholderQR_MKL.h
    +./Eigen/src/QR/ColPivHouseholderQR_MKL.h
    +./Eigen/src/QR/ColPivHouseholderQR_MKL.h
    +./Eigen/src/SVD/JacobiSVD_MKL.h
    +./Eigen/src/SVD/JacobiSVD_MKL.h
    +./Eigen/src/PardisoSupport/PardisoSupport.h
    +./Eigen/src/PardisoSupport/PardisoSupport.h
    +./Eigen/src/Core/Assign_MKL.h
    +./Eigen/src/Core/Assign_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixVector_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixVector_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h
    +./Eigen/src/Core/products/TriangularSolverMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularSolverMatrix_MKL.h
    +./Eigen/src/Core/util/MKL_support.h
    +./Eigen/src/Core/util/MKL_support.h
    +./Eigen/src/Cholesky/LLT_MKL.h
    +./Eigen/src/Cholesky/LLT_MKL.h
    +
    +/*
    + Copyright (c) 2011, Intel Corporation. All rights reserved.
    +
    + Redistribution and use in source and binary forms, with or without
    + modification, are permitted provided that the following conditions
    + are met:
    +
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.  *
    +   Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.  * Neither the name of Intel Corporation nor the
    +   names of its contributors may be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + */
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +  everything under ./bench/btl
    +
    +                    GNU GENERAL PUBLIC LICENSE
    +                       Version 3, 29 June 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +                            Preamble
    +
    +  The GNU General Public License is a free, copyleft license for
    +software and other kinds of works.
    +
    +  The licenses for most software and other practical works are designed
    +to take away your freedom to share and change the works.  By contrast,
    +the GNU General Public License is intended to guarantee your freedom to
    +share and change all versions of a program--to make sure it remains free
    +software for all its users.  We, the Free Software Foundation, use the
    +GNU General Public License for most of our software; it applies also to
    +any other work released this way by its authors.  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +them if you wish), that you receive source code or can get it if you
    +want it, that you can change the software or use pieces of it in new
    +free programs, and that you know you can do these things.
    +
    +  To protect your rights, we need to prevent others from denying you
    +these rights or asking you to surrender the rights.  Therefore, you have
    +certain responsibilities if you distribute copies of the software, or if
    +you modify it: responsibilities to respect the freedom of others.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must pass on to the recipients the same
    +freedoms that you received.  You must make sure that they, too, receive
    +or can get the source code.  And you must show them these terms so they
    +know their rights.
    +
    +  Developers that use the GNU GPL protect your rights with two steps:
    +(1) assert copyright on the software, and (2) offer you this License
    +giving you legal permission to copy, distribute and/or modify it.
    +
    +  For the developers' and authors' protection, the GPL clearly explains
    +that there is no warranty for this free software.  For both users' and
    +authors' sake, the GPL requires that modified versions be marked as
    +changed, so that their problems will not be attributed erroneously to
    +authors of previous versions.
    +
    +  Some devices are designed to deny users access to install or run
    +modified versions of the software inside them, although the manufacturer
    +can do so.  This is fundamentally incompatible with the aim of
    +protecting users' freedom to change the software.  The systematic
    +pattern of such abuse occurs in the area of products for individuals to
    +use, which is precisely where it is most unacceptable.  Therefore, we
    +have designed this version of the GPL to prohibit the practice for those
    +products.  If such problems arise substantially in other domains, we
    +stand ready to extend this provision to those domains in future versions
    +of the GPL, as needed to protect the freedom of users.
    +
    +  Finally, every program is threatened constantly by software patents.
    +States should not allow patents to restrict development and use of
    +software on general-purpose computers, but in those that do, we wish to
    +avoid the special danger that patents applied to a free program could
    +make it effectively proprietary.  To prevent this, the GPL assures that
    +patents cannot be used to render the program non-free.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +                       TERMS AND CONDITIONS
    +
    +  0. Definitions.
    +
    +  "This License" refers to version 3 of the GNU General Public License.
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds
    +of works, such as semiconductor masks.
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +"recipients" may be individuals or organizations.
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +in a fashion requiring copyright permission, other than the making of an
    +exact copy.  The resulting work is called a "modified version" of the
    +earlier work or a work "based on" the earlier work.
    +
    +  A "covered work" means either the unmodified Program or a work based
    +on the Program.
    +
    +  To "propagate" a work means to do anything with it that, without
    +permission, would make you directly or secondarily liable for
    +infringement under applicable copyright law, except executing it on a
    +computer or modifying a private copy.  Propagation includes copying,
    +distribution (with or without modification), making available to the
    +public, and in some countries other activities as well.
    +
    +  To "convey" a work means any kind of propagation that enables other
    +parties to make or receive copies.  Mere interaction with a user through
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +to the extent that it includes a convenient and prominently visible
    +feature that (1) displays an appropriate copyright notice, and (2)
    +tells the user that there is no warranty for the work (except to the
    +extent that warranties are provided), that licensees may convey the
    +work under this License, and how to view a copy of this License.  If
    +the interface presents a list of user commands or options, such as a
    +menu, a prominent item in the list meets this criterion.
    +
    +  1. Source Code.
    +
    +  The "source code" for a work means the preferred form of the work
    +for making modifications to it.  "Object code" means any non-source
    +form of a work.
    +
    +  A "Standard Interface" means an interface that either is an official
    +standard defined by a recognized standards body, or, in the case of
    +interfaces specified for a particular programming language, one that
    +is widely used among developers working in that language.
    +
    +  The "System Libraries" of an executable work include anything, other
    +than the work as a whole, that (a) is included in the normal form of
    +packaging a Major Component, but which is not part of that Major
    +Component, and (b) serves only to enable use of the work with that
    +Major Component, or to implement a Standard Interface for which an
    +implementation is available to the public in source code form.  A
    +"Major Component", in this context, means a major essential component
    +(kernel, window system, and so on) of the specific operating system
    +(if any) on which the executable work runs, or a compiler used to
    +produce the work, or an object code interpreter used to run it.
    +
    +  The "Corresponding Source" for a work in object code form means all
    +the source code needed to generate, install, and (for an executable
    +work) run the object code and to modify the work, including scripts to
    +control those activities.  However, it does not include the work's
    +System Libraries, or general-purpose tools or generally available free
    +programs which are used unmodified in performing those activities but
    +which are not part of the work.  For example, Corresponding Source
    +includes interface definition files associated with source files for
    +the work, and the source code for shared libraries and dynamically
    +linked subprograms that the work is specifically designed to require,
    +such as by intimate data communication or control flow between those
    +subprograms and other parts of the work.
    +
    +  The Corresponding Source need not include anything that users
    +can regenerate automatically from other parts of the Corresponding
    +Source.
    +
    +  The Corresponding Source for a work in source code form is that
    +same work.
    +
    +  2. Basic Permissions.
    +
    +  All rights granted under this License are granted for the term of
    +copyright on the Program, and are irrevocable provided the stated
    +conditions are met.  This License explicitly affirms your unlimited
    +permission to run the unmodified Program.  The output from running a
    +covered work is covered by this License only if the output, given its
    +content, constitutes a covered work.  This License acknowledges your
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +  You may make, run and propagate covered works that you do not
    +convey, without conditions so long as your license otherwise remains
    +in force.  You may convey covered works to others for the sole purpose
    +of having them make modifications exclusively for you, or provide you
    +with facilities for running those works, provided that you comply with
    +the terms of this License in conveying all material for which you do
    +not control copyright.  Those thus making or running the covered works
    +for you must do so exclusively on your behalf, under your direction
    +and control, on terms that prohibit them from making any copies of
    +your copyrighted material outside their relationship with you.
    +
    +  Conveying under any other circumstances is permitted solely under
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +makes it unnecessary.
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +  No covered work shall be deemed part of an effective technological
    +measure under any applicable law fulfilling obligations under article
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +similar laws prohibiting or restricting circumvention of such
    +measures.
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +circumvention of technological measures to the extent such circumvention
    +is effected by exercising rights under this License with respect to
    +the covered work, and you disclaim any intention to limit operation or
    +modification of the work as a means of enforcing, against the work's
    +users, your or third parties' legal rights to forbid circumvention of
    +technological measures.
    +
    +  4. Conveying Verbatim Copies.
    +
    +  You may convey verbatim copies of the Program's source code as you
    +receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice;
    +keep intact all notices stating that this License and any
    +non-permissive terms added in accord with section 7 apply to the code;
    +keep intact all notices of the absence of any warranty; and give all
    +recipients a copy of this License along with the Program.
    +
    +  You may charge any price or no price for each copy that you convey,
    +and you may offer support or warranty protection for a fee.
    +
    +  5. Conveying Modified Source Versions.
    +
    +  You may convey a work based on the Program, or the modifications to
    +produce it from the Program, in the form of source code under the
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +    a) The work must carry prominent notices stating that you modified
    +    it, and giving a relevant date.
    +
    +    b) The work must carry prominent notices stating that it is
    +    released under this License and any conditions added under section
    +    7.  This requirement modifies the requirement in section 4 to
    +    "keep intact all notices".
    +
    +    c) You must license the entire work, as a whole, under this
    +    License to anyone who comes into possession of a copy.  This
    +    License will therefore apply, along with any applicable section 7
    +    additional terms, to the whole of the work, and all its parts,
    +    regardless of how they are packaged.  This License gives no
    +    permission to license the work in any other way, but it does not
    +    invalidate such permission if you have separately received it.
    +
    +    d) If the work has interactive user interfaces, each must display
    +    Appropriate Legal Notices; however, if the Program has interactive
    +    interfaces that do not display Appropriate Legal Notices, your
    +    work need not make them do so.
    +
    +  A compilation of a covered work with other separate and independent
    +works, which are not by their nature extensions of the covered work,
    +and which are not combined with it such as to form a larger program,
    +in or on a volume of a storage or distribution medium, is called an
    +"aggregate" if the compilation and its resulting copyright are not
    +used to limit the access or legal rights of the compilation's users
    +beyond what the individual works permit.  Inclusion of a covered work
    +in an aggregate does not cause this License to apply to the other
    +parts of the aggregate.
    +
    +  6. Conveying Non-Source Forms.
    +
    +  You may convey a covered work in object code form under the terms
    +of sections 4 and 5, provided that you also convey the
    +machine-readable Corresponding Source under the terms of this License,
    +in one of these ways:
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by the
    +    Corresponding Source fixed on a durable physical medium
    +    customarily used for software interchange.
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by a
    +    written offer, valid for at least three years and valid for as
    +    long as you offer spare parts or customer support for that product
    +    model, to give anyone who possesses the object code either (1) a
    +    copy of the Corresponding Source for all the software in the
    +    product that is covered by this License, on a durable physical
    +    medium customarily used for software interchange, for a price no
    +    more than your reasonable cost of physically performing this
    +    conveying of source, or (2) access to copy the
    +    Corresponding Source from a network server at no charge.
    +
    +    c) Convey individual copies of the object code with a copy of the
    +    written offer to provide the Corresponding Source.  This
    +    alternative is allowed only occasionally and noncommercially, and
    +    only if you received the object code with such an offer, in accord
    +    with subsection 6b.
    +
    +    d) Convey the object code by offering access from a designated
    +    place (gratis or for a charge), and offer equivalent access to the
    +    Corresponding Source in the same way through the same place at no
    +    further charge.  You need not require recipients to copy the
    +    Corresponding Source along with the object code.  If the place to
    +    copy the object code is a network server, the Corresponding Source
    +    may be on a different server (operated by you or a third party)
    +    that supports equivalent copying facilities, provided you maintain
    +    clear directions next to the object code saying where to find the
    +    Corresponding Source.  Regardless of what server hosts the
    +    Corresponding Source, you remain obligated to ensure that it is
    +    available for as long as needed to satisfy these requirements.
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +    you inform other peers where the object code and Corresponding
    +    Source of the work are being offered to the general public at no
    +    charge under subsection 6d.
    +
    +  A separable portion of the object code, whose source code is excluded
    +from the Corresponding Source as a System Library, need not be
    +included in conveying the object code work.
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +tangible personal property which is normally used for personal,
    +family, or household purposes, or (2) anything designed or sold for
    +incorporation into a dwelling.  In determining whether a product is a
    +consumer product, doubtful cases shall be resolved in favor of
    +coverage.  For a particular product received by a particular user,
    +"normally used" refers to a typical or common use of that class of
    +product, regardless of the status of the particular user or of the way
    +in which the particular user actually uses, or expects or is expected
    +to use, the product.  A product is a consumer product regardless of
    +whether the product has substantial commercial, industrial or
    +non-consumer uses, unless such uses represent the only significant
    +mode of use of the product.
    +
    +  "Installation Information" for a User Product means any methods,
    +procedures, authorization keys, or other information required to
    +install and execute modified versions of a covered work in that User
    +Product from a modified version of its Corresponding Source.  The
    +information must suffice to ensure that the continued functioning of
    +the modified object code is in no case prevented or interfered with
    +solely because modification has been made.
    +
    +  If you convey an object code work under this section in, or with, or
    +specifically for use in, a User Product, and the conveying occurs as
    +part of a transaction in which the right of possession and use of the
    +User Product is transferred to the recipient in perpetuity or for a
    +fixed term (regardless of how the transaction is characterized), the
    +Corresponding Source conveyed under this section must be accompanied
    +by the Installation Information.  But this requirement does not apply
    +if neither you nor any third party retains the ability to install
    +modified object code on the User Product (for example, the work has
    +been installed in ROM).
    +
    +  The requirement to provide Installation Information does not include
    +a requirement to continue to provide support service, warranty, or
    +updates for a work that has been modified or installed by the
    +recipient, or for the User Product in which it has been modified or
    +installed.  Access to a network may be denied when the modification
    +itself materially and adversely affects the operation of the network
    +or violates the rules and protocols for communication across the
    +network.
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +in accord with this section must be in a format that is publicly
    +documented (and with an implementation available to the public in
    +source code form), and must require no special password or key for
    +unpacking, reading or copying.
    +
    +  7. Additional Terms.
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +License by making exceptions from one or more of its conditions.
    +Additional permissions that are applicable to the entire Program shall
    +be treated as though they were included in this License, to the extent
    +that they are valid under applicable law.  If additional permissions
    +apply only to part of the Program, that part may be used separately
    +under those permissions, but the entire Program remains governed by
    +this License without regard to the additional permissions.
    +
    +  When you convey a copy of a covered work, you may at your option
    +remove any additional permissions from that copy, or from any part of
    +it.  (Additional permissions may be written to require their own
    +removal in certain cases when you modify the work.)  You may place
    +additional permissions on material, added by you to a covered work,
    +for which you have or can give appropriate copyright permission.
    +
    +  Notwithstanding any other provision of this License, for material
    +you add to a covered work, you may (if authorized by the copyright
    +holders of that material) supplement the terms of this License with
    +terms:
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +    terms of sections 15 and 16 of this License; or
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +    author attributions in that material or in the Appropriate Legal
    +    Notices displayed by works containing it; or
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +    requiring that modified versions of such material be marked in
    +    reasonable ways as different from the original version; or
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +    authors of the material; or
    +
    +    e) Declining to grant rights under trademark law for use of some
    +    trade names, trademarks, or service marks; or
    +
    +    f) Requiring indemnification of licensors and authors of that
    +    material by anyone who conveys the material (or modified versions
    +    of it) with contractual assumptions of liability to the recipient,
    +    for any liability that these contractual assumptions directly
    +    impose on those licensors and authors.
    +
    +  All other non-permissive additional terms are considered "further
    +restrictions" within the meaning of section 10.  If the Program as you
    +received it, or any part of it, contains a notice stating that it is
    +governed by this License along with a term that is a further
    +restriction, you may remove that term.  If a license document contains
    +a further restriction but permits relicensing or conveying under this
    +License, you may add to a covered work material governed by the terms
    +of that license document, provided that the further restriction does
    +not survive such relicensing or conveying.
    +
    +  If you add terms to a covered work in accord with this section, you
    +must place, in the relevant source files, a statement of the
    +additional terms that apply to those files, or a notice indicating
    +where to find the applicable terms.
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +form of a separately written license, or stated as exceptions;
    +the above requirements apply either way.
    +
    +  8. Termination.
    +
    +  You may not propagate or modify a covered work except as expressly
    +provided under this License.  Any attempt otherwise to propagate or
    +modify it is void, and will automatically terminate your rights under
    +this License (including any patent licenses granted under the third
    +paragraph of section 11).
    +
    +  However, if you cease all violation of this License, then your
    +license from a particular copyright holder is reinstated (a)
    +provisionally, unless and until the copyright holder explicitly and
    +finally terminates your license, and (b) permanently, if the copyright
    +holder fails to notify you of the violation by some reasonable means
    +prior to 60 days after the cessation.
    +
    +  Moreover, your license from a particular copyright holder is
    +reinstated permanently if the copyright holder notifies you of the
    +violation by some reasonable means, this is the first time you have
    +received notice of violation of this License (for any work) from that
    +copyright holder, and you cure the violation prior to 30 days after
    +your receipt of the notice.
    +
    +  Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License.  If your rights have been terminated and not permanently
    +reinstated, you do not qualify to receive new licenses for the same
    +material under section 10.
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +  You are not required to accept this License in order to receive or
    +run a copy of the Program.  Ancillary propagation of a covered work
    +occurring solely as a consequence of using peer-to-peer transmission
    +to receive a copy likewise does not require acceptance.  However,
    +nothing other than this License grants you permission to propagate or
    +modify any covered work.  These actions infringe copyright if you do
    +not accept this License.  Therefore, by modifying or propagating a
    +covered work, you indicate your acceptance of this License to do so.
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +  Each time you convey a covered work, the recipient automatically
    +receives a license from the original licensors, to run, modify and
    +propagate that work, subject to this License.  You are not responsible
    +for enforcing compliance by third parties with this License.
    +
    +  An "entity transaction" is a transaction transferring control of an
    +organization, or substantially all assets of one, or subdividing an
    +organization, or merging organizations.  If propagation of a covered
    +work results from an entity transaction, each party to that
    +transaction who receives a copy of the work also receives whatever
    +licenses to the work the party's predecessor in interest had or could
    +give under the previous paragraph, plus a right to possession of the
    +Corresponding Source of the work from the predecessor in interest, if
    +the predecessor has it or can get it with reasonable efforts.
    +
    +  You may not impose any further restrictions on the exercise of the
    +rights granted or affirmed under this License.  For example, you may
    +not impose a license fee, royalty, or other charge for exercise of
    +rights granted under this License, and you may not initiate litigation
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +any patent claim is infringed by making, using, selling, offering for
    +sale, or importing the Program or any portion of it.
    +
    +  11. Patents.
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +License of the Program or a work on which the Program is based.  The
    +work thus licensed is called the contributor's "contributor version".
    +
    +  A contributor's "essential patent claims" are all patent claims
    +owned or controlled by the contributor, whether already acquired or
    +hereafter acquired, that would be infringed by some manner, permitted
    +by this License, of making, using, or selling its contributor version,
    +but do not include claims that would be infringed only as a
    +consequence of further modification of the contributor version.  For
    +purposes of this definition, "control" includes the right to grant
    +patent sublicenses in a manner consistent with the requirements of
    +this License.
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +patent license under the contributor's essential patent claims, to
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +propagate the contents of its contributor version.
    +
    +  In the following three paragraphs, a "patent license" is any express
    +agreement or commitment, however denominated, not to enforce a patent
    +(such as an express permission to practice a patent or covenant not to
    +sue for patent infringement).  To "grant" such a patent license to a
    +party means to make such an agreement or commitment not to enforce a
    +patent against the party.
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +and the Corresponding Source of the work is not available for anyone
    +to copy, free of charge and under the terms of this License, through a
    +publicly available network server or other readily accessible means,
    +then you must either (1) cause the Corresponding Source to be so
    +available, or (2) arrange to deprive yourself of the benefit of the
    +patent license for this particular work, or (3) arrange, in a manner
    +consistent with the requirements of this License, to extend the patent
    +license to downstream recipients.  "Knowingly relying" means you have
    +actual knowledge that, but for the patent license, your conveying the
    +covered work in a country, or your recipient's use of the covered work
    +in a country, would infringe one or more identifiable patents in that
    +country that you have reason to believe are valid.
    +
    +  If, pursuant to or in connection with a single transaction or
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +covered work, and grant a patent license to some of the parties
    +receiving the covered work authorizing them to use, propagate, modify
    +or convey a specific copy of the covered work, then the patent license
    +you grant is automatically extended to all recipients of the covered
    +work and works based on it.
    +
    +  A patent license is "discriminatory" if it does not include within
    +the scope of its coverage, prohibits the exercise of, or is
    +conditioned on the non-exercise of one or more of the rights that are
    +specifically granted under this License.  You may not convey a covered
    +work if you are a party to an arrangement with a third party that is
    +in the business of distributing software, under which you make payment
    +to the third party based on the extent of your activity of conveying
    +the work, and under which the third party grants, to any of the
    +parties who would receive the covered work from you, a discriminatory
    +patent license (a) in connection with copies of the covered work
    +conveyed by you (or copies made from those copies), or (b) primarily
    +for and in connection with specific products or compilations that
    +contain the covered work, unless you entered into that arrangement,
    +or that patent license was granted, prior to 28 March 2007.
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +any implied license or other defenses to infringement that may
    +otherwise be available to you under applicable patent law.
    +
    +  12. No Surrender of Others' Freedom.
    +
    +  If conditions are imposed on you (whether by court order, agreement
    +or otherwise) that contradict the conditions of this License, they do
    +not excuse you from the conditions of this License.  If you cannot
    +convey a covered work so as to satisfy simultaneously your obligations
    +under this License and any other pertinent obligations, then as a
    +consequence you may not convey it at all.  For example, if you agree
    +to terms that obligate you to collect a royalty for further conveying
    +from those to whom you convey the Program, the only way you could
    +satisfy both those terms and this License would be to refrain entirely
    +from conveying the Program.
    +
    +  13. Use with the GNU Affero General Public License.
    +
    +  Notwithstanding any other provision of this License, you have
    +permission to link or combine any covered work with a work licensed
    +under version 3 of the GNU Affero General Public License into a single
    +combined work, and to convey the resulting work.  The terms of this
    +License will continue to apply to the part which is the covered work,
    +but the special requirements of the GNU Affero General Public License,
    +section 13, concerning interaction through a network will apply to the
    +combination as such.
    +
    +  14. Revised Versions of this License.
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +of the GNU General Public License from time to time.  Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.
    +
    +  Each version is given a distinguishing version number.  If the
    +Program specifies that a certain numbered version of the GNU General
    +Public License "or any later version" applies to it, you have the
    +option of following the terms and conditions either of that numbered
    +version or of any later version published by the Free Software
    +Foundation.  If the Program does not specify a version number of the
    +GNU General Public License, you may choose any version ever published
    +by the Free Software Foundation.
    +
    +  If the Program specifies that a proxy can decide which future
    +versions of the GNU General Public License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Program.
    +
    +  Later license versions may give you additional or different
    +permissions.  However, no additional obligations are imposed on any
    +author or copyright holder as a result of your choosing to follow a
    +later version.
    +
    +  15. Disclaimer of Warranty.
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
    +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
    +PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
    +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
    +CORRECTION.
    +
    +  16. Limitation of Liability.
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
    +AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
    +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
    +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
    +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
    +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
    +THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
    +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +above cannot be given local legal effect according to their terms,
    +reviewing courts shall apply local law that most closely approximates
    +an absolute waiver of all civil liability in connection with the
    +Program, unless a warranty or assumption of liability accompanies a
    +copy of the Program in return for a fee.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +            How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these
    +terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +state the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it
    +    does.>
    +    Copyright (C) <year> <name of author>
    +
    +    This program is free software: you can redistribute it and/or
    +    modify it under the terms of the GNU General Public License as
    +    published by the Free Software Foundation, either version 3 of the
    +    License, or (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program.  If not, see
    +    <http://www.gnu.org/licenses/>.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +  If the program does terminal interaction, make it output a short
    +notice like this when it starts in an interactive mode:
    +
    +    <program> Copyright (C) <year> <name of author> This program comes
    +    with ABSOLUTELY NO WARRANTY; for details type `show w'.  This is
    +    free software, and you are welcome to redistribute it under
    +    certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the
    +appropriate parts of the General Public License.  Of course, your
    +program's commands might be different; for a GUI interface, you would
    +use an "about box".
    +
    +  You should also get your employer (if you work as a programmer) or
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  For more information on this, and how to apply and follow
    +the GNU GPL, see <http://www.gnu.org/licenses/>.
    +
    +  The GNU General Public License does not permit incorporating your
    +program into proprietary programs.  If your program is a subroutine
    +library, you may consider it more useful to permit linking proprietary
    +applications with the library.  If this is what you want to do, use
    +the GNU Lesser General Public License instead of this License.  But
    +first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
    +
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./test/metis_support.cpp
    +./test/sparselu.cpp
    +./unsupported/test/mpreal/mpreal.h
    +./unsupported/Eigen/src/IterativeSolvers/IterationController.h
    +./unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h
    +./unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h
    +./Eigen/src/OrderingMethods/Amd.h
    +./Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 3, 29 June 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +
    +  This version of the GNU Lesser General Public License incorporates
    +the terms and conditions of version 3 of the GNU General Public
    +License, supplemented by the additional permissions listed below.
    +
    +  0. Additional Definitions.
    +
    +  As used herein, "this License" refers to version 3 of the GNU Lesser
    +General Public License, and the "GNU GPL" refers to version 3 of the
    +GNU General Public License.
    +
    +  "The Library" refers to a covered work governed by this License,
    +other than an Application or a Combined Work as defined below.
    +
    +  An "Application" is any work that makes use of an interface provided
    +by the Library, but which is not otherwise based on the Library.
    +Defining a subclass of a class defined by the Library is deemed a mode
    +of using an interface provided by the Library.
    +
    +  A "Combined Work" is a work produced by combining or linking an
    +Application with the Library.  The particular version of the Library
    +with which the Combined Work was made is also called the "Linked
    +Version".
    +
    +  The "Minimal Corresponding Source" for a Combined Work means the
    +Corresponding Source for the Combined Work, excluding any source code
    +for portions of the Combined Work that, considered in isolation, are
    +based on the Application, and not on the Linked Version.
    +
    +  The "Corresponding Application Code" for a Combined Work means the
    +object code and/or source code for the Application, including any data
    +and utility programs needed for reproducing the Combined Work from the
    +Application, but excluding the System Libraries of the Combined Work.
    +
    +  1. Exception to Section 3 of the GNU GPL.
    +
    +  You may convey a covered work under sections 3 and 4 of this License
    +without being bound by section 3 of the GNU GPL.
    +
    +  2. Conveying Modified Versions.
    +
    +  If you modify a copy of the Library, and, in your modifications, a
    +facility refers to a function or data to be supplied by an Application
    +that uses the facility (other than as an argument passed when the
    +facility is invoked), then you may convey a copy of the modified
    +version:
    +
    +   a) under this License, provided that you make a good faith effort to
    +   ensure that, in the event an Application does not supply the
    +   function or data, the facility still operates, and performs
    +   whatever part of its purpose remains meaningful, or
    +
    +   b) under the GNU GPL, with none of the additional permissions of
    +   this License applicable to that copy.
    +
    +  3. Object Code Incorporating Material from Library Header Files.
    +
    +  The object code form of an Application may incorporate material from
    +a header file that is part of the Library.  You may convey such object
    +code under terms of your choice, provided that, if the incorporated
    +material is not limited to numerical parameters, data structure
    +layouts and accessors, or small macros, inline functions and templates
    +(ten or fewer lines in length), you do both of the following:
    +
    +   a) Give prominent notice with each copy of the object code that the
    +   Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the object code with a copy of the GNU GPL and this
    +   license document.
    +
    +  4. Combined Works.
    +
    +  You may convey a Combined Work under terms of your choice that,
    +taken together, effectively do not restrict modification of the
    +portions of the Library contained in the Combined Work and reverse
    +engineering for debugging such modifications, if you also do each of
    +the following:
    +
    +   a) Give prominent notice with each copy of the Combined Work that
    +   the Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the Combined Work with a copy of the GNU GPL and this
    +   license document.
    +
    +   c) For a Combined Work that displays copyright notices during
    +   execution, include the copyright notice for the Library among
    +   these notices, as well as a reference directing the user to the
    +   copies of the GNU GPL and this license document.
    +
    +   d) Do one of the following:
    +
    +       0) Convey the Minimal Corresponding Source under the terms of
    +       this License, and the Corresponding Application Code in a form
    +       suitable for, and under terms that permit, the user to
    +       recombine or relink the Application with a modified version of
    +       the Linked Version to produce a modified Combined Work, in the
    +       manner specified by section 6 of the GNU GPL for conveying
    +       Corresponding Source.
    +
    +       1) Use a suitable shared library mechanism for linking with the
    +       Library.  A suitable mechanism is one that (a) uses at run time
    +       a copy of the Library already present on the user's computer
    +       system, and (b) will operate properly with a modified version
    +       of the Library that is interface-compatible with the Linked
    +       Version.
    +
    +   e) Provide Installation Information, but only if you would otherwise
    +   be required to provide such information under section 6 of the
    +   GNU GPL, and only to the extent that such information is
    +   necessary to install and execute a modified version of the
    +   Combined Work produced by recombining or relinking the
    +   Application with a modified version of the Linked Version. (If
    +   you use option 4d0, the Installation Information must accompany
    +   the Minimal Corresponding Source and Corresponding Application
    +   Code. If you use option 4d1, you must provide the Installation
    +   Information in the manner specified by section 6 of the GNU GPL
    +   for conveying Corresponding Source.)
    +
    +  5. Combined Libraries.
    +
    +  You may place library facilities that are a work based on the
    +Library side by side in a single library together with other library
    +facilities that are not Applications and are not covered by this
    +License, and convey such a combined library under terms of your
    +choice, if you do both of the following:
    +
    +   a) Accompany the combined library with a copy of the same work based
    +   on the Library, uncombined with any other library facilities,
    +   conveyed under the terms of this License.
    +
    +   b) Give prominent notice with the combined library that part of it
    +   is a work based on the Library, and explaining where to find the
    +   accompanying uncombined form of the same work.
    +
    +  6. Revised Versions of the GNU Lesser General Public License.
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +of the GNU Lesser General Public License from time to time. Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.
    +
    +  Each version is given a distinguishing version number. If the
    +Library as you received it specifies that a certain numbered version
    +of the GNU Lesser General Public License "or any later version"
    +applies to it, you have the option of following the terms and
    +conditions either of that published version or of any later version
    +published by the Free Software Foundation. If the Library as you
    +received it does not specify a version number of the GNU Lesser
    +General Public License, you may choose any version of the GNU Lesser
    +General Public License ever published by the Free Software Foundation.
    +
    +  If the Library as you received it specifies that a proxy can decide
    +whether future versions of the GNU Lesser General Public License shall
    +apply, that proxy's public statement of acceptance of any version is
    +permanent authorization for you to choose that version for the
    +Library.
    +
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMpar.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h
    +
    +Minpack Copyright Notice (1999) University of Chicago.  All rights
    +reserved
    +
    +Redistribution and use in source and binary forms, with or
    +without modification, are permitted provided that the
    +following conditions are met:
    +
    +1. Redistributions of source code must retain the above
    +copyright notice, this list of conditions and the following
    +disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following
    +disclaimer in the documentation and/or other materials
    +provided with the distribution.
    +
    +3. The end-user documentation included with the
    +redistribution, if any, must include the following
    +acknowledgment:
    +
    +   "This product includes software developed by the
    +   University of Chicago, as Operator of Argonne National
    +   Laboratory.
    +
    +Alternately, this acknowledgment may appear in the software
    +itself, if and wherever such third-party acknowledgments
    +normally appear.
    +
    +4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
    +WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
    +UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
    +THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
    +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
    +OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
    +OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
    +USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
    +THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
    +DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
    +UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
    +BE CORRECTED.
    +
    +5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
    +HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
    +ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
    +INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
    +ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
    +PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
    +SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
    +(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
    +EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
    +POSSIBILITY OF SUCH LOSS OR DAMAGES.
    +
    +
    +****************************
    +freetype2
    +****************************
    +FreeType
    +
    +Quoth http://freetype.sourceforge.net/license.html:
    +
    +FreeType comes with two licenses from which you can choose the one
    +which fits your needs best.
    +
    +   * The FreeType License is the most commonly used one.
    +    It is a BSD-style license with a credit clause (and thus not
    +    compatible with the GPL).
    +
    +  * The GNU General Public License (GPL).
    +    For all projects which use the GPL also or which need a license
    +    compatible to the GPL.
    +
    +FTL.TXT:
    +---
    +
    +                    The FreeType Project LICENSE
    +                    ----------------------------
    +
    +                            2006-Jan-27
    +
    +                    Copyright 1996-2002, 2006 by
    +          David Turner, Robert Wilhelm, and Werner Lemberg
    +
    +
    +
    +Introduction
    +============
    +
    +  The FreeType  Project is distributed in  several archive packages;
    +  some of them may contain, in addition to the FreeType font engine,
    +  various tools and  contributions which rely on, or  relate to, the
    +  FreeType Project.
    +
    +  This  license applies  to all  files found  in such  packages, and
    +  which do not  fall under their own explicit  license.  The license
    +  affects  thus  the  FreeType   font  engine,  the  test  programs,
    +  documentation and makefiles, at the very least.
    +
    +  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
    +  (Independent JPEG  Group) licenses, which  all encourage inclusion
    +  and  use of  free  software in  commercial  and freeware  products
    +  alike.  As a consequence, its main points are that:
    +
    +    o We don't promise that this software works. However, we will be
    +      interested in any kind of bug reports. (`as is' distribution)
    +
    +    o You can  use this software for whatever you  want, in parts or
    +      full form, without having to pay us. (`royalty-free' usage)
    +
    +    o You may not pretend that  you wrote this software.  If you use
    +      it, or  only parts of it,  in a program,  you must acknowledge
    +      somewhere  in  your  documentation  that  you  have  used  the
    +      FreeType code. (`credits')
    +
    +  We  specifically  permit  and  encourage  the  inclusion  of  this
    +  software, with  or without modifications,  in commercial products.
    +  We  disclaim  all warranties  covering  The  FreeType Project  and
    +  assume no liability related to The FreeType Project.
    +
    +
    +  Finally,  many  people  asked  us  for  a  preferred  form  for  a
    +  credit/disclaimer to use in compliance with this license.  We thus
    +  encourage you to use the following text:
    +
    +   """
    +    Portions of this software are copyright (C) <year> The FreeType
    +    Project (www.freetype.org).  All rights reserved.
    +   """
    +
    +  Please replace <year> with the value from the FreeType version you
    +  actually use.
    +
    +
    +Legal Terms
    +===========
    +
    +0. Definitions
    +--------------
    +
    +  Throughout this license,  the terms `package', `FreeType Project',
    +  and  `FreeType  archive' refer  to  the  set  of files  originally
    +  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
    +  Werner Lemberg) as the `FreeType Project', be they named as alpha,
    +  beta or final release.
    +
    +  `You' refers to  the licensee, or person using  the project, where
    +  `using' is a generic term including compiling the project's source
    +  code as  well as linking it  to form a  `program' or `executable'.
    +  This  program is  referred to  as  `a program  using the  FreeType
    +  engine'.
    +
    +  This  license applies  to all  files distributed  in  the original
    +  FreeType  Project,   including  all  source   code,  binaries  and
    +  documentation,  unless  otherwise  stated   in  the  file  in  its
    +  original, unmodified form as  distributed in the original archive.
    +  If you are  unsure whether or not a particular  file is covered by
    +  this license, you must contact us to verify this.
    +
    +  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
    +  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
    +  specified below.
    +
    +1. No Warranty
    +--------------
    +
    +  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
    +  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
    +  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
    +  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
    +  USE, OF THE FREETYPE PROJECT.
    +
    +2. Redistribution
    +-----------------
    +
    +  This  license  grants  a  worldwide, royalty-free,  perpetual  and
    +  irrevocable right  and license to use,  execute, perform, compile,
    +  display,  copy,   create  derivative  works   of,  distribute  and
    +  sublicense the  FreeType Project (in  both source and  object code
    +  forms)  and  derivative works  thereof  for  any  purpose; and  to
    +  authorize others  to exercise  some or all  of the  rights granted
    +  herein, subject to the following conditions:
    +
    +    o Redistribution of  source code  must retain this  license file
    +      (`FTL.TXT') unaltered; any  additions, deletions or changes to
    +      the original  files must be clearly  indicated in accompanying
    +      documentation.   The  copyright   notices  of  the  unaltered,
    +      original  files must  be  preserved in  all  copies of  source
    +      files.
    +
    +    o Redistribution in binary form must provide a  disclaimer  that
    +      states  that  the software is based in part of the work of the
    +      FreeType Team,  in  the  distribution  documentation.  We also
    +      encourage you to put an URL to the FreeType web page  in  your
    +      documentation, though this isn't mandatory.
    +
    +  These conditions  apply to any  software derived from or  based on
    +  the FreeType Project,  not just the unmodified files.   If you use
    +  our work, you  must acknowledge us.  However, no  fee need be paid
    +  to us.
    +
    +3. Advertising
    +--------------
    +
    +  Neither the  FreeType authors and  contributors nor you  shall use
    +  the name of the  other for commercial, advertising, or promotional
    +  purposes without specific prior written permission.
    +
    +  We suggest,  but do not require, that  you use one or  more of the
    +  following phrases to refer  to this software in your documentation
    +  or advertising  materials: `FreeType Project',  `FreeType Engine',
    +  `FreeType library', or `FreeType Distribution'.
    +
    +  As  you have  not signed  this license,  you are  not  required to
    +  accept  it.   However,  as  the FreeType  Project  is  copyrighted
    +  material, only  this license, or  another one contracted  with the
    +  authors, grants you  the right to use, distribute,  and modify it.
    +  Therefore,  by  using,  distributing,  or modifying  the  FreeType
    +  Project, you indicate that you understand and accept all the terms
    +  of this license.
    +
    +4. Contacts
    +-----------
    +
    +  There are two mailing lists related to FreeType:
    +
    +    o freetype@nongnu.org
    +
    +      Discusses general use and applications of FreeType, as well as
    +      future and  wanted additions to the  library and distribution.
    +      If  you are looking  for support,  start in  this list  if you
    +      haven't found anything to help you in the documentation.
    +
    +    o freetype-devel@nongnu.org
    +
    +      Discusses bugs,  as well  as engine internals,  design issues,
    +      specific licenses, porting, etc.
    +
    +  Our home page can be found at
    +
    +    http://www.freetype.org
    +
    +
    +--- end of FTL.TXT ---
    +
    +
    +****************************
    +GL
    +****************************
    +Mesa Component Licenses
    +
    +Component         Location               Primary Author      License
    +----------------------------------------------------------------------------
    +Main Mesa code    src/mesa/              Brian Paul          Mesa (MIT)
    +
    +Device drivers    src/mesa/drivers/*     See drivers         See drivers
    +
    +Ext headers       include/GL/glext.h     SGI                 SGI Free B
    +                  include/GL/glxext.h
    +
    +GLUT              src/glut/              Mark Kilgard        Mark's copyright
    +
    +GLEW              src/glew-1.13.0        Nigel Stewart       Modified BSD
    +
    +Mesa GLU library  src/glu/mesa/          Brian Paul          GNU-LGPL
    +
    +SGI GLU library   src/glu/sgi/           SGI                 SGI Free B
    +
    +demo programs     progs/demos/           various             see source files
    +
    +X demos           progs/xdemos/          Brian Paul          see source files
    +
    +SGI demos         progs/samples/         SGI                 SGI copyright
    +
    +RedBook demos     progs/redbook/         SGI                 SGI copyright
    +
    +---------------------
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +----------------------------
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Alan Hourihane not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  Alan Hourihane makes no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +
    +----------------------------------------------------------------------
    +
    +
    +      GNU LIBRARY GENERAL PUBLIC LICENSE
    +           Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    +                    675 Mass Ave, Cambridge, MA 02139, USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +          Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +      GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +          NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +         END OF TERMS AND CONDITIONS
    +
    +     Appendix: How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Library General Public
    +    License as published by the Free Software Foundation; either
    +    version 2 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Library General Public License for more details.
    +
    +    You should have received a copy of the GNU Library General Public
    +    License along with this library; if not, write to the Free
    +    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +---------------------
    +
    +The OpenGL Extension Wrangler Library
    +Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
    +Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
    +Copyright (C) 2002, Lev Povalahev
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +* The name of the author may be used to endorse or promote products
    +  derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
    +THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +gradle
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +------------------------------------------------------------------------------
    +License for the slf4j package
    +------------------------------------------------------------------------------
    +SLF4J License
    +
    +Copyright (c) 2004-2007 QOS.ch
    +All rights reserved.
    +
    +Permission is hereby granted, free  of charge, to any person obtaining
    +a  copy  of this  software  and  associated  documentation files  (the
    +"Software"), to  deal in  the Software without  restriction, including
    +without limitation  the rights to  use, copy, modify,  merge, publish,
    +distribute,  sublicense, and/or sell  copies of  the Software,  and to
    +permit persons to whom the Software  is furnished to do so, subject to
    +the following conditions:
    +
    +The  above  copyright  notice  and  this permission  notice  shall  be
    +included in all copies or substantial portions of the Software.
    +
    +THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
    +EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
    +MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +These terms are identical to those of the MIT License, also called the X License or the X11 License,
    +which is a simple, permissive non-copyleft free software license. It is deemed compatible with virtually
    +all types of licenses, commercial or otherwise. In particular, the Free Software Foundation has declared it
    +compatible with GNU GPL. It is also known to be approved by the Apache Software Foundation as compatible
    +with Apache Software License.
    +
    +
    +------------------------------------------------------------------------------
    +License for the JUnit package
    +------------------------------------------------------------------------------
    +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
    +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
    +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    +
    +1. DEFINITIONS
    +
    +"Contribution" means:
    +
    +a) in the case of the initial Contributor, the initial code and
    +documentation distributed under this Agreement, and
    +
    +b) in the case of each subsequent Contributor:
    +
    +i) changes to the Program, and
    +
    +ii) additions to the Program;
    +
    +where such changes and/or additions to the Program originate from and are
    +distributed by that particular Contributor. A Contribution 'originates' from a
    +Contributor if it was added to the Program by such Contributor itself or anyone
    +acting on such Contributor's behalf. Contributions do not include additions to
    +the Program which: (i) are separate modules of software distributed in
    +conjunction with the Program under their own license agreement, and (ii) are not
    +derivative works of the Program.
    +
    +"Contributor" means any person or entity that distributes the Program.
    +
    +"Licensed Patents " mean patent claims licensable by a Contributor which are
    +necessarily infringed by the use or sale of its Contribution alone or when
    +combined with the Program.
    +
    +"Program" means the Contributions distributed in accordance with this Agreement.
    +
    +"Recipient" means anyone who receives the Program under this Agreement,
    +including all Contributors.
    +
    +2. GRANT OF RIGHTS
    +
    +a) Subject to the terms of this Agreement, each Contributor hereby grants
    +Recipient a non-exclusive, worldwide, royalty-free copyright license to
    +reproduce, prepare derivative works of, publicly display, publicly perform,
    +distribute and sublicense the Contribution of such Contributor, if any, and such
    +derivative works, in source code and object code form.
    +
    +b) Subject to the terms of this Agreement, each Contributor hereby grants
    +Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
    +Patents to make, use, sell, offer to sell, import and otherwise transfer the
    +Contribution of such Contributor, if any, in source code and object code form.
    +This patent license shall apply to the combination of the Contribution and the
    +Program if, at the time the Contribution is added by the Contributor, such
    +addition of the Contribution causes such combination to be covered by the
    +Licensed Patents. The patent license shall not apply to any other combinations
    +which include the Contribution. No hardware per se is licensed hereunder.
    +
    +c) Recipient understands that although each Contributor grants the licenses
    +to its Contributions set forth herein, no assurances are provided by any
    +Contributor that the Program does not infringe the patent or other intellectual
    +property rights of any other entity. Each Contributor disclaims any liability to
    +Recipient for claims brought by any other entity based on infringement of
    +intellectual property rights or otherwise. As a condition to exercising the
    +rights and licenses granted hereunder, each Recipient hereby assumes sole
    +responsibility to secure any other intellectual property rights needed, if any.
    +For example, if a third party patent license is required to allow Recipient to
    +distribute the Program, it is Recipient's responsibility to acquire that license
    +before distributing the Program.
    +
    +d) Each Contributor represents that to its knowledge it has sufficient
    +copyright rights in its Contribution, if any, to grant the copyright license set
    +forth in this Agreement.
    +
    +3. REQUIREMENTS
    +
    +A Contributor may choose to distribute the Program in object code form under its
    +own license agreement, provided that:
    +
    +a) it complies with the terms and conditions of this Agreement; and
    +
    +b) its license agreement:
    +
    +i) effectively disclaims on behalf of all Contributors all warranties and
    +conditions, express and implied, including warranties or conditions of title and
    +non-infringement, and implied warranties or conditions of merchantability and
    +fitness for a particular purpose;
    +
    +ii) effectively excludes on behalf of all Contributors all liability for
    +damages, including direct, indirect, special, incidental and consequential
    +damages, such as lost profits;
    +
    +iii) states that any provisions which differ from this Agreement are offered
    +by that Contributor alone and not by any other party; and
    +
    +iv) states that source code for the Program is available from such
    +Contributor, and informs licensees how to obtain it in a reasonable manner on or
    +through a medium customarily used for software exchange.
    +
    +When the Program is made available in source code form:
    +
    +a) it must be made available under this Agreement; and
    +
    +b) a copy of this Agreement must be included with each copy of the Program.
    +
    +Contributors may not remove or alter any copyright notices contained within the
    +Program.
    +
    +Each Contributor must identify itself as the originator of its Contribution, if
    +any, in a manner that reasonably allows subsequent Recipients to identify the
    +originator of the Contribution.
    +
    +4. COMMERCIAL DISTRIBUTION
    +
    +Commercial distributors of software may accept certain responsibilities with
    +respect to end users, business partners and the like. While this license is
    +intended to facilitate the commercial use of the Program, the Contributor who
    +includes the Program in a commercial product offering should do so in a manner
    +which does not create potential liability for other Contributors. Therefore, if
    +a Contributor includes the Program in a commercial product offering, such
    +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
    +every other Contributor ("Indemnified Contributor") against any losses, damages
    +and costs (collectively "Losses") arising from claims, lawsuits and other legal
    +actions brought by a third party against the Indemnified Contributor to the
    +extent caused by the acts or omissions of such Commercial Contributor in
    +connection with its distribution of the Program in a commercial product
    +offering. The obligations in this section do not apply to any claims or Losses
    +relating to any actual or alleged intellectual property infringement. In order
    +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
    +Contributor in writing of such claim, and b) allow the Commercial Contributor to
    +control, and cooperate with the Commercial Contributor in, the defense and any
    +related settlement negotiations. The Indemnified Contributor may participate in
    +any such claim at its own expense.
    +
    +For example, a Contributor might include the Program in a commercial product
    +offering, Product X. That Contributor is then a Commercial Contributor. If that
    +Commercial Contributor then makes performance claims, or offers warranties
    +related to Product X, those performance claims and warranties are such
    +Commercial Contributor's responsibility alone. Under this section, the
    +Commercial Contributor would have to defend claims against the other
    +Contributors related to those performance claims and warranties, and if a court
    +requires any other Contributor to pay any damages as a result, the Commercial
    +Contributor must pay those damages.
    +
    +5. NO WARRANTY
    +
    +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
    +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
    +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
    +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
    +Recipient is solely responsible for determining the appropriateness of using and
    +distributing the Program and assumes all risks associated with its exercise of
    +rights under this Agreement, including but not limited to the risks and costs of
    +program errors, compliance with applicable laws, damage to or loss of data,
    +programs or equipment, and unavailability or interruption of operations.
    +
    +6. DISCLAIMER OF LIABILITY
    +
    +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
    +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
    +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
    +GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +7. GENERAL
    +
    +If any provision of this Agreement is invalid or unenforceable under applicable
    +law, it shall not affect the validity or enforceability of the remainder of the
    +terms of this Agreement, and without further action by the parties hereto, such
    +provision shall be reformed to the minimum extent necessary to make such
    +provision valid and enforceable.
    +
    +If Recipient institutes patent litigation against a Contributor with respect to
    +a patent applicable to software (including a cross-claim or counterclaim in a
    +lawsuit), then any patent licenses granted by that Contributor to such Recipient
    +under this Agreement shall terminate as of the date such litigation is filed. In
    +addition, if Recipient institutes patent litigation against any entity
    +(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
    +itself (excluding combinations of the Program with other software or hardware)
    +infringes such Recipient's patent(s), then such Recipient's rights granted under
    +Section 2(b) shall terminate as of the date such litigation is filed.
    +
    +All Recipient's rights under this Agreement shall terminate if it fails to
    +comply with any of the material terms or conditions of this Agreement and does
    +not cure such failure in a reasonable period of time after becoming aware of
    +such noncompliance. If all Recipient's rights under this Agreement terminate,
    +Recipient agrees to cease use and distribution of the Program as soon as
    +reasonably practicable. However, Recipient's obligations under this Agreement
    +and any licenses granted by Recipient relating to the Program shall continue and
    +survive.
    +
    +Everyone is permitted to copy and distribute copies of this Agreement, but in
    +order to avoid inconsistency the Agreement is copyrighted and may only be
    +modified in the following manner. The Agreement Steward reserves the right to
    +publish new versions (including revisions) of this Agreement from time to time.
    +No one other than the Agreement Steward has the right to modify this Agreement.
    +IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
    +as the Agreement Steward to a suitable separate entity. Each new version of the
    +Agreement will be given a distinguishing version number. The Program (including
    +Contributions) may always be distributed subject to the version of the Agreement
    +under which it was received. In addition, after a new version of the Agreement
    +is published, Contributor may elect to distribute the Program (including its
    +Contributions) under the new version. Except as expressly stated in Sections
    +2(a) and 2(b) above, Recipient receives no rights or licenses to the
    +intellectual property of any Contributor under this Agreement, whether
    +expressly, by implication, estoppel or otherwise. All rights in the Program not
    +expressly granted under this Agreement are reserved.
    +
    +This Agreement is governed by the laws of the State of New York and the
    +intellectual property laws of the United States of America. No party to this
    +Agreement will bring a legal action under this Agreement more than one year
    +after the cause of action arose. Each party waives its rights to a jury trial in
    +any resulting litigation.
    +
    +------------------------------------------------------------------------------
    +License for the JCIFS package
    +------------------------------------------------------------------------------
    +JCIFS License
    +
    +          GNU LESSER GENERAL PUBLIC LICENSE
    +               Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +          GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +             END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +****************************
    +icu
    +****************************
    +ICU
    +
    +There are two licenses here:
    +- ICU license
    +- Unicode Terms of Use
    +------------------------------------------------------------------------------
    +ICU License - ICU 1.8.1 and later
    +From http://source.icu-project.org/repos/icu/icu/trunk/license.html
    +X License (old version). For license pedigree see the
    +ICU FAQ at http://icu-project.org/userguide/icufaq.html
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2006 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, and/or sell copies of the
    +Software, and to permit persons to whom the Software is furnished to do so,
    +provided that the above copyright notice(s) and this permission notice appear
    +in all copies of the Software and that both the above copyright notice(s) and
    +this permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
    +LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
    +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the property of their respective owners.
    +
    +------------------------------------------------------------------------------
    +Unicode Terms of Use, from http://www.unicode.org/copyright.html
    +
    +    For the general privacy policy governing access to this site, see the
    +Unicode Privacy Policy. For trademark usage, see the Unicode Consortium
    +Trademarks and Logo Policy.
    +    Notice to End User: Terms of Use
    +    Carefully read the following legal agreement ("Agreement"). Use or copying
    +of the software and/or codes provided with this agreement (The "Software")
    +constitutes your acceptance of these terms
    +
    +       1. Unicode Copyright.
    +             1. Copyright  1991-2007 Unicode, Inc. All rights reserved.
    +             2. Certain documents and files on this website contain a legend
    +indicating that "Modification is permitted." Any person is hereby authorized,
    +without fee, to modify such documents and files to create derivative works
    +conforming to the Unicode Standard, subject to Terms and Conditions herein.
    +             3. Any person is hereby authorized, without fee, to view, use,
    +reproduce, and distribute all documents and files solely for informational
    +purposes in the creation of products supporting the Unicode Standard, subject
    +to the Terms and Conditions herein.
    +             4. Further specifications of rights and restrictions pertaining
    +to the use of the particular set of data files known as the "Unicode Character
    +Database" can be found in Exhibit 1.
    +             5. Each version of the Unicode Standard has further specifications
    +of rights and restrictions of use. For the book editions, these are found on
    +the back of the title page. For the online edition, certain files (such as the
    +PDF files for book chapters and code charts) carry specific restrictions. All
    +other files are covered under these general Terms of Use.  To request a
    +permission to reproduce any part of the Unicode Standard, please contact the
    +Unicode Consortium.
    +             6. No license is granted to "mirror" the Unicode website where a
    +fee is charged for access to the "mirror" site.
    +             7. Modification is not permitted with respect to this document.
    +All copies of this document must be verbatim.
    +       2. Restricted Rights Legend. Any technical data or software which is
    +licensed to the United States of America, its agencies and/or instrumentalities
    +under this Agreement is commercial technical data or commercial computer
    +software developed exclusively at private expense as defined in FAR 2.101, or
    +DFARS 252.227-7014 (June 1995), as applicable. For technical data, use,
    +duplication, or disclosure by the Government is subject to restrictions as set
    +forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995)
    +and this Agreement. For Software, in accordance with FAR 12-212 or
    +DFARS 227-7202, as applicable, use, duplication or disclosure by the Government
    +is subject to the restrictions set forth in this Agreement.
    +       3. Warranties and Disclaimers.
    +             1. This publication and/or website may include technical or
    +typographical errors or other inaccuracies . Changes are periodically added to
    +the information herein; these changes will be incorporated in new editions of
    +the publication and/or website. Unicode may make improvements and/or changes
    +in the product(s) and/or program(s) described in this publication and/or
    +website at any time.
    +             2. If this file has been purchased on magnetic or optical media
    +from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange
    +of the defective media within ninety (90) days of original purchase.
    +             3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
    +SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS,
    +IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
    +UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
    +THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
    +LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
    +       4. Waiver of Damages. In no event shall Unicode or its licensors be
    +liable for any special, incidental, indirect or consequential damages of any
    +kind, or any damages whatsoever, whether or not Unicode was advised of the
    +possibility of the damage, including, without limitation, those resulting from
    +the following: loss of use, data or profits, in connection with the use,
    +modification or distribution of this information or its derivatives.
    +       5. Trademarks.
    +             1. Unicode and the Unicode logo are registered trademarks of
    +Unicode, Inc.
    +             2. This site contains product names and corporate names of other
    +companies. All product names and company names and logos mentioned herein are
    +the trademarks or registered trademarks of their respective owners. Other
    +products and corporate names mentioned herein which are trademarks of a third
    +party are used only for explanation and for the owners' benefit and with no
    +intent to infringe.
    +             3. Use of third party products or information referred to herein
    +is at the user\x{2019}s risk.
    +       6. Miscellaneous.
    +             1. Jurisdiction and Venue. This server is operated from a location
    +in the State of California, United States of America. Unicode makes no
    +representation that the materials are appropriate for use in other locations.
    +If you access this server from other locations, you are responsible for
    +compliance with local laws. This Agreement, all use of this site and any
    +claims and damages resulting from use of this site are governed solely by the
    +laws of the State of California without regard to any principles which would
    +apply the laws of a different jurisdiction. The user agrees that any disputes
    +regarding this site shall be resolved solely in the courts located in Santa
    +Clara County, California. The user agrees said courts have personal
    +jurisdiction and agree to waive any right to transfer the dispute to any other
    +forum.
    +             2. Modification by Unicode Unicode shall have the right to modify
    +this Agreement at any time by posting it to this site. The user may not assign
    +any part of this Agreement without Unicode\x{2019}s prior written consent.
    +             3. Taxes. The user agrees to pay any taxes arising from access to
    +this website or use of the information herein, except for those based on
    +Unicode\x{2019}s net income.
    +             4. Severability.  If any provision of this Agreement is declared
    +invalid or unenforceable, the remaining provisions of this Agreement shall
    +remain in effect.
    +             5. Entire Agreement. This Agreement constitutes the entire
    +agreement between the parties.
    +
    +EXHIBIT 1
    +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
    +
    +    Unicode Data Files include all data files under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
    +published in the Unicode Standard or under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/.
    +
    +    NOTICE TO USER: Carefully read the following legal agreement. BY
    +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
    +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
    +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF
    +YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA
    +FILES OR SOFTWARE.
    +
    +    COPYRIGHT AND PERMISSION NOTICE
    +
    +    Copyright  1991-2007 Unicode, Inc. All rights reserved. Distributed under
    +the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +    Permission is hereby granted, free of charge, to any person obtaining a
    +copy of the Unicode data files and any associated documentation (the "Data
    +Files") or Unicode software and any associated documentation (the "Software")
    +to deal in the Data Files or Software without restriction, including without
    +limitation the rights to use, copy, modify, merge, publish, distribute, and/or
    +sell copies of the Data Files or Software, and to permit persons to whom the
    +Data Files or Software are furnished to do so, provided that (a) the above
    +copyright notice(s) and this permission notice appear with all copies of the
    +Data Files or Software, (b) both the above copyright notice(s) and this
    +permission notice appear in associated documentation, and (c) there is clear
    +notice in each modified Data File or in the Software as well as in the
    +documentation associated with the Data File(s) or Software that the data or
    +software has been modified.
    +
    +    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
    +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
    +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
    +SOFTWARE.
    +
    +    Except as contained in this notice, the name of a copyright holder shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in these Data Files or Software without prior written authorization
    +of the copyright holder.
    +
    +    Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
    +registered in some jurisdictions. All other trademarks and registered
    +trademarks mentioned herein are the property of their respective owners.
    +
    +
    +****************************
    +icu
    +****************************
    +ICU
    +
    +There are two licenses here:
    +- ICU license
    +- Unicode Terms of Use
    +------------------------------------------------------------------------------
    +ICU License - ICU 1.8.1 and later
    +From http://source.icu-project.org/repos/icu/icu/trunk/license.html
    +X License (old version). For license pedigree see the
    +ICU FAQ at http://icu-project.org/userguide/icufaq.html
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2006 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, and/or sell copies of the
    +Software, and to permit persons to whom the Software is furnished to do so,
    +provided that the above copyright notice(s) and this permission notice appear
    +in all copies of the Software and that both the above copyright notice(s) and
    +this permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
    +LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
    +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the property of their respective owners.
    +
    +------------------------------------------------------------------------------
    +Unicode Terms of Use, from http://www.unicode.org/copyright.html
    +
    +    For the general privacy policy governing access to this site, see the
    +Unicode Privacy Policy. For trademark usage, see the Unicode Consortium
    +Trademarks and Logo Policy.
    +    Notice to End User: Terms of Use
    +    Carefully read the following legal agreement ("Agreement"). Use or copying
    +of the software and/or codes provided with this agreement (The "Software")
    +constitutes your acceptance of these terms
    +
    +       1. Unicode Copyright.
    +             1. Copyright  1991-2007 Unicode, Inc. All rights reserved.
    +             2. Certain documents and files on this website contain a legend
    +indicating that "Modification is permitted." Any person is hereby authorized,
    +without fee, to modify such documents and files to create derivative works
    +conforming to the Unicode Standard, subject to Terms and Conditions herein.
    +             3. Any person is hereby authorized, without fee, to view, use,
    +reproduce, and distribute all documents and files solely for informational
    +purposes in the creation of products supporting the Unicode Standard, subject
    +to the Terms and Conditions herein.
    +             4. Further specifications of rights and restrictions pertaining
    +to the use of the particular set of data files known as the "Unicode Character
    +Database" can be found in Exhibit 1.
    +             5. Each version of the Unicode Standard has further specifications
    +of rights and restrictions of use. For the book editions, these are found on
    +the back of the title page. For the online edition, certain files (such as the
    +PDF files for book chapters and code charts) carry specific restrictions. All
    +other files are covered under these general Terms of Use.  To request a
    +permission to reproduce any part of the Unicode Standard, please contact the
    +Unicode Consortium.
    +             6. No license is granted to "mirror" the Unicode website where a
    +fee is charged for access to the "mirror" site.
    +             7. Modification is not permitted with respect to this document.
    +All copies of this document must be verbatim.
    +       2. Restricted Rights Legend. Any technical data or software which is
    +licensed to the United States of America, its agencies and/or instrumentalities
    +under this Agreement is commercial technical data or commercial computer
    +software developed exclusively at private expense as defined in FAR 2.101, or
    +DFARS 252.227-7014 (June 1995), as applicable. For technical data, use,
    +duplication, or disclosure by the Government is subject to restrictions as set
    +forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995)
    +and this Agreement. For Software, in accordance with FAR 12-212 or
    +DFARS 227-7202, as applicable, use, duplication or disclosure by the Government
    +is subject to the restrictions set forth in this Agreement.
    +       3. Warranties and Disclaimers.
    +             1. This publication and/or website may include technical or
    +typographical errors or other inaccuracies . Changes are periodically added to
    +the information herein; these changes will be incorporated in new editions of
    +the publication and/or website. Unicode may make improvements and/or changes
    +in the product(s) and/or program(s) described in this publication and/or
    +website at any time.
    +             2. If this file has been purchased on magnetic or optical media
    +from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange
    +of the defective media within ninety (90) days of original purchase.
    +             3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
    +SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS,
    +IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
    +UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
    +THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
    +LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
    +       4. Waiver of Damages. In no event shall Unicode or its licensors be
    +liable for any special, incidental, indirect or consequential damages of any
    +kind, or any damages whatsoever, whether or not Unicode was advised of the
    +possibility of the damage, including, without limitation, those resulting from
    +the following: loss of use, data or profits, in connection with the use,
    +modification or distribution of this information or its derivatives.
    +       5. Trademarks.
    +             1. Unicode and the Unicode logo are registered trademarks of
    +Unicode, Inc.
    +             2. This site contains product names and corporate names of other
    +companies. All product names and company names and logos mentioned herein are
    +the trademarks or registered trademarks of their respective owners. Other
    +products and corporate names mentioned herein which are trademarks of a third
    +party are used only for explanation and for the owners' benefit and with no
    +intent to infringe.
    +             3. Use of third party products or information referred to herein
    +is at the user\x{2019}s risk.
    +       6. Miscellaneous.
    +             1. Jurisdiction and Venue. This server is operated from a location
    +in the State of California, United States of America. Unicode makes no
    +representation that the materials are appropriate for use in other locations.
    +If you access this server from other locations, you are responsible for
    +compliance with local laws. This Agreement, all use of this site and any
    +claims and damages resulting from use of this site are governed solely by the
    +laws of the State of California without regard to any principles which would
    +apply the laws of a different jurisdiction. The user agrees that any disputes
    +regarding this site shall be resolved solely in the courts located in Santa
    +Clara County, California. The user agrees said courts have personal
    +jurisdiction and agree to waive any right to transfer the dispute to any other
    +forum.
    +             2. Modification by Unicode Unicode shall have the right to modify
    +this Agreement at any time by posting it to this site. The user may not assign
    +any part of this Agreement without Unicode\x{2019}s prior written consent.
    +             3. Taxes. The user agrees to pay any taxes arising from access to
    +this website or use of the information herein, except for those based on
    +Unicode\x{2019}s net income.
    +             4. Severability.  If any provision of this Agreement is declared
    +invalid or unenforceable, the remaining provisions of this Agreement shall
    +remain in effect.
    +             5. Entire Agreement. This Agreement constitutes the entire
    +agreement between the parties.
    +
    +EXHIBIT 1
    +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
    +
    +    Unicode Data Files include all data files under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
    +published in the Unicode Standard or under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/.
    +
    +    NOTICE TO USER: Carefully read the following legal agreement. BY
    +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
    +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
    +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF
    +YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA
    +FILES OR SOFTWARE.
    +
    +    COPYRIGHT AND PERMISSION NOTICE
    +
    +    Copyright  1991-2007 Unicode, Inc. All rights reserved. Distributed under
    +the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +    Permission is hereby granted, free of charge, to any person obtaining a
    +copy of the Unicode data files and any associated documentation (the "Data
    +Files") or Unicode software and any associated documentation (the "Software")
    +to deal in the Data Files or Software without restriction, including without
    +limitation the rights to use, copy, modify, merge, publish, distribute, and/or
    +sell copies of the Data Files or Software, and to permit persons to whom the
    +Data Files or Software are furnished to do so, provided that (a) the above
    +copyright notice(s) and this permission notice appear with all copies of the
    +Data Files or Software, (b) both the above copyright notice(s) and this
    +permission notice appear in associated documentation, and (c) there is clear
    +notice in each modified Data File or in the Software as well as in the
    +documentation associated with the Data File(s) or Software that the data or
    +software has been modified.
    +
    +    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
    +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
    +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
    +SOFTWARE.
    +
    +    Except as contained in this notice, the name of a copyright holder shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in these Data Files or Software without prior written authorization
    +of the copyright holder.
    +
    +    Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
    +registered in some jurisdictions. All other trademarks and registered
    +trademarks mentioned herein are the property of their respective owners.
    +
    +
    +****************************
    +java/android_libs/exoplayer
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +java/android_libs/protobuf_nano
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +javascript/jquery_ui
    +****************************
    +The MIT License (MIT)
    +
    +Copyright (c) 2015 jQuery Foundation and other contributors
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
    +the Software, and to permit persons to whom the Software is furnished to do so,
    +subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
    +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +javascript/jquery/v2_0_1
    +****************************
    +Copyright 2013 jQuery Foundation and other contributors
    +http://jquery.com/
    +
    +https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt
    +https://github.com/jquery/sizzle/blob/master/LICENSE
    +
    +jQuery and Sizzle are released under MIT Licence.
    +
    +The text is provided below.
    +
    +MIT License
    +----
    +
    +Copyright 2013 jQuery Foundation and other contributors
    +http://jquery.com/
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +javascript/tracing_framework
    +****************************
    +Copyright 2012, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +java_src/android_libs/exoplayer
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +java_src/android_libs/protobuf_nano/v2
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +jpeg
    +****************************
    +(extracted from src/README)
    +
    +LEGAL ISSUES
    +============
    +
    +In plain English:
    +
    +1. We don't promise that this software works.  (But if you find any bugs,
    +   please let us know!)
    +2. You can use this software for whatever you want.  You don't have to pay us.
    +3. You may not pretend that you wrote this software.  If you use it in a
    +   program, you must acknowledge somewhere in your documentation that
    +   you've used the IJG code.
    +
    +In legalese:
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
    +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
    +ansi2knr.c is NOT covered by the above copyright and conditions, but instead
    +by the usual distribution terms of the Free Software Foundation; principally,
    +that you must include source code if you redistribute it.  (See the file
    +ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
    +of any program generated from the IJG code, this does not limit you more than
    +the foregoing paragraphs do.
    +
    +The Unix configuration script "configure" was produced with GNU Autoconf.
    +It is copyright by the Free Software Foundation but is freely distributable.
    +The same holds for its supporting scripts (config.guess, config.sub,
    +ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
    +by M.I.T. but is also freely distributable.
    +
    +It appears that the arithmetic coding option of the JPEG spec is covered by
    +patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
    +legally be used without obtaining one or more licenses.  For this reason,
    +support for arithmetic coding has been removed from the free JPEG software.
    +(Since arithmetic coding provides only a marginal gain over the unpatented
    +Huffman mode, it is unlikely that very many implementations will support it.)
    +So far as we are aware, there are no patent restrictions on the remaining
    +code.
    +
    +The IJG distribution formerly included code to read and write GIF files.
    +To avoid entanglement with the Unisys LZW patent, GIF reading support has
    +been removed altogether, and the GIF writer has been simplified to produce
    +"uncompressed GIFs".  This technique does not use the LZW algorithm; the
    +resulting GIF files are larger than usual, but are readable by all standard
    +GIF decoders.
    +
    +We are required to state that
    +    "The Graphics Interchange Format(c) is the Copyright property of
    +    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    +    CompuServe Incorporated."
    +
    +
    +****************************
    +libogg
    +****************************
    +Copyright (c) 2002, Xiph.org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +****************************
    +libunwind
    +****************************
    +Copyright (c) 2002 Hewlett-Packard Co.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +libvorbis
    +****************************
    +Copyright (c) 2002-2008 Xiph.org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +libxcb
    +****************************
    +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett.
    +All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated
    +documentation files (the "Software"), to deal in the
    +Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute,
    +sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so,
    +subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall
    +be included in all copies or substantial portions of the
    +Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
    +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the names of the authors
    +or their institutions shall not be used in advertising or
    +otherwise to promote the sale, use or other dealings in this
    +Software without prior written authorization from the
    +authors.
    +
    +
    +****************************
    +libxml
    +****************************
    +Libxml2, an XML C Parser
    +
    +Except where otherwise noted in the source code (e.g. the files hash.c,
    +list.c and the trio files, which are covered by a similar licence but
    +with different Copyright notices) all the files are:
    +
    + Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2000,2012 Bjorn Reese and Daniel Veillard.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +Author: breese@users.sourceforge.net
    +
    +(taken from hash.c)
    +
    +--------------------------------------------------------------------
    +
    + Copyright (C) 2000 Gary Pennington and Daniel Veillard.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +Author: Gary.Pennington@uk.sun.com
    +
    +(taken from list.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from trio.h and trio.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triodef.h, trionan.h, and trionan.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triop.h)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triostr.h and triostr.c)
    +
    +*************************************************************************
    +
    +http://ctrio.sourceforge.net/
    +
    +*************************************************************************
    +
    +
    +****************************
    +lodepng
    +****************************
    +LodePNG
    +
    +Copyright (c) 2005-2013 Lode Vandevenne
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +    1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    +
    +    2. Altered source versions must be plainly marked as such, and must not be
    +    misrepresented as being the original software.
    +
    +    3. This notice may not be removed or altered from any source
    +    distribution.
    +
    +
    +****************************
    +minizip
    +****************************
    +zlib
    +
    +(extracted from README, except for match.S)
    +
    +Copyright notice:
    +
    + (C) 1995-2004 Jean-loup Gailly and Mark Adler
    +
    +  This software is provided 'as-is', without any express or implied
    +  warranty.  In no event will the authors be held liable for any damages
    +  arising from the use of this software.
    +
    +  Permission is granted to anyone to use this software for any purpose,
    +  including commercial applications, and to alter it and redistribute it
    +  freely, subject to the following restrictions:
    +
    +  1. The origin of this software must not be misrepresented; you must not
    +     claim that you wrote the original software. If you use this software
    +     in a product, an acknowledgment in the product documentation would be
    +     appreciated but is not required.
    +  2. Altered source versions must be plainly marked as such, and must not be
    +     misrepresented as being the original software.
    +  3. This notice may not be removed or altered from any source distribution.
    +
    +  Jean-loup Gailly        Mark Adler
    +  jloup@gzip.org          madler@alumni.caltech.edu
    +
    +
    +(extracted from match.S, for match.S only)
    +
    + Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
    +
    + This software is provided 'as-is', without any express or implied
    + warranty.  In no event will the author be held liable for any damages
    + arising from the use of this software.
    +
    + Permission is granted to anyone to use this software for any purpose,
    + including commercial applications, and to alter it and redistribute it
    + freely, subject to the following restrictions:
    +
    + 1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    + 2. Altered source versions must be plainly marked as such, and must not be
    +    misrepresented as being the original software.
    + 3. This notice may not be removed or altered from any source distribution.
    +
    +
    +****************************
    +mongoose
    +****************************
    +Copyright (c) 2004-2013 Sergey Lyubka
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +****************************
    +objective_c/gtm_session_fetcher
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +openctm
    +****************************
    +Copyright (c) 2009-2010 Marcus Geelnard
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +    1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    +
    +    2. Altered source versions must be plainly marked as such, and must not
    +    be misrepresented as being the original software.
    +
    +    3. This notice may not be removed or altered from any source
    +    distribution.
    +
    +
    +****************************
    +OpenCV
    +****************************
    +IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
    +
    +By downloading, copying, installing or using the software you agree to this license.
    +If you do not agree to this license, do not download, install,
    +copy or use the software.
    +
    +
    +                       Intel License Agreement
    +               For Open Source Computer Vision Library
    +
    +Copyright (C) 2000, 2001, Intel Corporation, all rights reserved.
    +Copyright (C) 2013, OpenCV Foundation, all rights reserved.
    +Third party copyrights are property of their respective owners.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +  * Redistribution's of source code must retain the above copyright notice,
    +    this list of conditions and the following disclaimer.
    +
    +  * Redistribution's in binary form must reproduce the above copyright notice,
    +    this list of conditions and the following disclaimer in the documentation
    +    and/or other materials provided with the distribution.
    +
    +  * The name of Intel Corporation may not be used to endorse or promote products
    +    derived from this software without specific prior written permission.
    +
    +This software is provided by the copyright holders and contributors "as is" and
    +any express or implied warranties, including, but not limited to, the implied
    +warranties of merchantability and fitness for a particular purpose are disclaimed.
    +In no event shall the Intel Corporation or contributors be liable for any direct,
    +indirect, incidental, special, exemplary, or consequential damages
    +(including, but not limited to, procurement of substitute goods or services;
    +loss of use, data, or profits; or business interruption) however caused
    +and on any theory of liability, whether in contract, strict liability,
    +or tort (including negligence or otherwise) arising in any way out of
    +the use of this software, even if advised of the possibility of such damage.
    +
    +****************************
    +openssl
    +****************************
    +BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Some files from Intel are under yet another license, which is also included
    +underneath.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + *
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + *
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + *
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +Some files from Intel carry the following license:
    +
    +# Copyright (c) 2012, Intel Corporation
    +#
    +# All rights reserved.
    +#
    +# Redistribution and use in source and binary forms, with or without
    +# modification, are permitted provided that the following conditions are
    +# met:
    +#
    +# *  Redistributions of source code must retain the above copyright
    +#    notice, this list of conditions and the following disclaimer.
    +#
    +# *  Redistributions in binary form must reproduce the above copyright
    +#    notice, this list of conditions and the following disclaimer in the
    +#    documentation and/or other materials provided with the
    +#    distribution.
    +#
    +# *  Neither the name of the Intel Corporation nor the names of its
    +#    contributors may be used to endorse or promote products derived from
    +#    this software without specific prior written permission.
    +#
    +#
    +# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
    +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
    +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +openssl/boringssl
    +****************************
    +BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Some files from Intel are under yet another license, which is also included
    +underneath.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + *
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + *
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + *
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +Some files from Intel carry the following license:
    +
    +# Copyright (c) 2012, Intel Corporation
    +#
    +# All rights reserved.
    +#
    +# Redistribution and use in source and binary forms, with or without
    +# modification, are permitted provided that the following conditions are
    +# met:
    +#
    +# *  Redistributions of source code must retain the above copyright
    +#    notice, this list of conditions and the following disclaimer.
    +#
    +# *  Redistributions in binary form must reproduce the above copyright
    +#    notice, this list of conditions and the following disclaimer in the
    +#    documentation and/or other materials provided with the
    +#    distribution.
    +#
    +# *  Neither the name of the Intel Corporation nor the names of its
    +#    contributors may be used to endorse or promote products derived from
    +#    this software without specific prior written permission.
    +#
    +#
    +# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
    +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
    +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +pcre
    +****************************
    +PCRE LICENCE
    +------------
    +
    +PCRE is a library of functions to support regular expressions whose syntax
    +and semantics are as close as possible to those of the Perl 5 language.
    +
    +Release 8 of PCRE is distributed under the terms of the "BSD" licence, as
    +specified below. The documentation for PCRE, supplied in the "doc"
    +directory, is distributed under the same terms as the software itself. The data
    +in the testdata directory is not copyrighted and is in the public domain.
    +
    +The basic library functions are written in C and are freestanding. Also
    +included in the distribution is a set of C++ wrapper functions, and a
    +just-in-time compiler that can be used to optimize pattern matching. These
    +are both optional features that can be omitted when the library is built.
    +
    +
    +THE BASIC LIBRARY FUNCTIONS
    +---------------------------
    +
    +Written by:       Philip Hazel
    +Email local part: ph10
    +Email domain:     cam.ac.uk
    +
    +University of Cambridge Computing Service,
    +Cambridge, England.
    +
    +Copyright (c) 1997-2015 University of Cambridge
    +All rights reserved.
    +
    +
    +PCRE JUST-IN-TIME COMPILATION SUPPORT
    +-------------------------------------
    +
    +Written by:       Zoltan Herczeg
    +Email local part: hzmester
    +Emain domain:     freemail.hu
    +
    +Copyright(c) 2010-2015 Zoltan Herczeg
    +All rights reserved.
    +
    +
    +STACK-LESS JUST-IN-TIME COMPILER
    +--------------------------------
    +
    +Written by:       Zoltan Herczeg
    +Email local part: hzmester
    +Emain domain:     freemail.hu
    +
    +Copyright(c) 2009-2015 Zoltan Herczeg
    +All rights reserved.
    +
    +
    +THE C++ WRAPPER FUNCTIONS
    +-------------------------
    +
    +Contributed by:   Google Inc.
    +
    +Copyright (c) 2007-2012, Google Inc.
    +All rights reserved.
    +
    +
    +THE "BSD" LICENCE
    +-----------------
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the name of the University of Cambridge nor the name of Google
    +      Inc. nor the names of their contributors may be used to endorse or
    +      promote products derived from this software without specific prior
    +      written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +End
    +
    +
    +****************************
    +pffft
    +****************************
    +Copyright (c) 2013  Julien Pommier ( pommier@modartt.com )
    +
    +Based on original fortran 77 code from FFTPACKv4 from NETLIB,
    +authored by Dr Paul Swarztrauber of NCAR, in 1985.
    +
    +As confirmed by the NCAR fftpack software curators, the following
    +FFTPACKv5 license applies to FFTPACKv4 sources. My changes are
    +released under the same terms.
    +
    +FFTPACK license:
    +
    +http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html
    +
    +Copyright (c) 2004 the University Corporation for Atmospheric
    +Research ("UCAR"). All rights reserved. Developed by NCAR's
    +Computational and Information Systems Laboratory, UCAR,
    +www.cisl.ucar.edu.
    +
    +Redistribution and use of the Software in source and binary forms,
    +with or without modification, is permitted provided that the
    +following conditions are met:
    +
    +- Neither the names of NCAR's Computational and Information Systems
    +Laboratory, the University Corporation for Atmospheric Research,
    +nor the names of its sponsors or contributors may be used to
    +endorse or promote products derived from this Software without
    +specific prior written permission.
    +
    +- Redistributions of source code must retain the above copyright
    +notices, this list of conditions, and the disclaimer below.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions, and the disclaimer below in the
    +documentation and/or other materials provided with the
    +distribution.
    +
    +THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +
    +****************************
    +png
    +****************************
    +libpng
    +
    +This copy of the libpng notices is provided for your convenience.  In case of
    +any discrepancy between this copy and the notices in the file png.h that is
    +included in the libpng distribution, the latter shall prevail.
    +
    +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
    +
    +If you modify libpng you may insert additional notices immediately following
    +this sentence.
    +
    +libpng versions 1.2.6, August 15, 2004, through 1.2.27, April 29, 2008, are
    +Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-1.2.5
    +with the following individual added to the list of Contributing Authors
    +
    +   Cosmin Truta
    +
    +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
    +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-1.0.6
    +with the following individuals added to the list of Contributing Authors
    +
    +   Simon-Pierre Cadieux
    +   Eric S. Raymond
    +   Gilles Vollant
    +
    +and with the following additions to the disclaimer:
    +
    +   There is no warranty against interference with your enjoyment of the
    +   library or against infringement.  There is no warranty that our
    +   efforts or the library will fulfill any of your particular purposes
    +   or needs.  This library is provided with all faults, and the entire
    +   risk of satisfactory quality, performance, accuracy, and effort is with
    +   the user.
    +
    +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
    +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-0.96,
    +with the following individuals added to the list of Contributing Authors:
    +
    +   Tom Lane
    +   Glenn Randers-Pehrson
    +   Willem van Schaik
    +
    +libpng versions 0.89, June 1996, through 0.96, May 1997, are
    +Copyright (c) 1996, 1997 Andreas Dilger
    +Distributed according to the same disclaimer and license as libpng-0.88,
    +with the following individuals added to the list of Contributing Authors:
    +
    +   John Bowler
    +   Kevin Bracey
    +   Sam Bushell
    +   Magnus Holmgren
    +   Greg Roelofs
    +   Tom Tanner
    +
    +libpng versions 0.5, May 1995, through 0.88, January 1996, are
    +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
    +
    +For the purposes of this copyright and license, "Contributing Authors"
    +is defined as the following set of individuals:
    +
    +   Andreas Dilger
    +   Dave Martindale
    +   Guy Eric Schalnat
    +   Paul Schmidt
    +   Tim Wegner
    +
    +The PNG Reference Library is supplied "AS IS".  The Contributing Authors
    +and Group 42, Inc. disclaim all warranties, expressed or implied,
    +including, without limitation, the warranties of merchantability and of
    +fitness for any purpose.  The Contributing Authors and Group 42, Inc.
    +assume no liability for direct, indirect, incidental, special, exemplary,
    +or consequential damages, which may result from the use of the PNG
    +Reference Library, even if advised of the possibility of such damage.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +source code, or portions hereof, for any purpose, without fee, subject
    +to the following restrictions:
    +
    +1. The origin of this source code must not be misrepresented.
    +
    +2. Altered versions must be plainly marked as such and must not
    +   be misrepresented as being the original source.
    +
    +3. This Copyright notice may not be removed or altered from any
    +   source or altered source distribution.
    +
    +The Contributing Authors and Group 42, Inc. specifically permit, without
    +fee, and encourage the use of this source code as a component to
    +supporting the PNG file format in commercial products.  If you use this
    +source code in a product, acknowledgment is not required but would be
    +appreciated.
    +
    +
    +A "png_get_copyright" function is available, for convenient use in "about"
    +boxes and the like:
    +
    +   printf("%s",png_get_copyright(NULL));
    +
    +Also, the PNG logo (in PNG format, of course) is supplied in the
    +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
    +
    +Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
    +certification mark of the Open Source Initiative.
    +
    +Glenn Randers-Pehrson
    +glennrp at users.sourceforge.net
    +April 29, 2008
    +
    +
    +****************************
    +protobuf
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +re2
    +****************************
    +// Copyright (c) 2009 The RE2 Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +stblib
    +****************************
    +        License for STBLIB - A collection of public-domain single-file C/C++
    +        libraries, primarily aimed at game developers.
    +
    +The compilation and test files are licensed under the MIT license, but the
    +single-file libraries themselves are in the public domain (free for use and
    +modification for any purpose without legal friction).
    +
    +The MIT License (MIT)
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    + of this software and associated documentation files (the "Software"), to deal
    + in the Software without restriction, including without limitation the rights
    + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    + copies of the Software, and to permit persons to whom the Software is
    + furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    + all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    + THE SOFTWARE.
    +
    +
    +****************************
    +stl
    +****************************
    +SGI STL
    +
    +The STL portion of GNU libstdc++ that is used with gcc3 and gcc4 is licensed
    +under the GPL, with the following exception:
    +
    +# As a special exception, you may use this file as part of a free software
    +# library without restriction.  Specifically, if other files instantiate
    +# templates or use macros or inline functions from this file, or you compile
    +# this file and link it with other files to produce an executable, this
    +# file does not by itself cause the resulting executable to be covered by
    +# the GNU General Public License.  This exception does not however
    +# invalidate any other reasons why the executable file might be covered by
    +# the GNU General Public License.
    +
    +
    +
    +****************************
    +tinyxml
    +****************************
    +TinyXml is released under the zlib license:
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any
    +damages arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any
    +purpose, including commercial applications, and to alter it and
    +redistribute it freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must
    +not claim that you wrote the original software. If you use this
    +software in a product, an acknowledgment in the product documentation
    +would be appreciated but is not required.
    +
    +2. Altered source versions must be plainly marked as such, and
    +must not be misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source
    +distribution.
    +
    +
    +
    +****************************
    +tz
    +****************************
    +With a few exceptions, all files in the tz code and data (including
    +this one) are in the public domain.  The exceptions are tzcode's
    +date.c, newstrftime.3, and strftime.c, which contain material derived
    +from BSD and which use the BSD 3-clause license.
    +
    +
    +****************************
    +utf
    +****************************
    +UTF-8 Library
    +
    +The authors of this software are Rob Pike and Ken Thompson.
    +             Copyright (c) 1998-2002 by Lucent Technologies.
    +Permission to use, copy, modify, and distribute this software for any
    +purpose without fee is hereby granted, provided that this entire notice
    +is included in all copies of any software which is or includes a copy
    +or modification of this software and in all copies of the supporting
    +documentation for such software.
    +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
    +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    +
    +
    +****************************
    +xmpmeta
    +****************************
    +xmpmeta. A fast XMP metadata parsing and writing library.
    +Copyright 2016 Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +* Neither the name of Google Inc. nor the names of its contributors may be
    +  used to endorse or promote products derived from this software without
    +  specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +Xorg
    +****************************
    +The following is the 'standard copyright' agreed upon by most contributors,
    +and is currently the canonical license preferred by the X.Org Foundation.
    +This is a slight variant of the common MIT license form published by the
    +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php
    +
    +Copyright holders of new code should use this license statement where
    +possible, and insert their name to this list.  Please sort by surname
    +for people, and by the full name for other entities (e.g.  Juliusz
    +Chroboczek sorts before Intel Corporation sorts before Daniel Stone).
    +
    +See each individual source file or directory for the license that applies
    +to that file.
    +
    +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett
    +Copyright © 2009 Red Hat, Inc.
    +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates.
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice (including the next
    +paragraph) shall be included in all copies or substantial portions of the
    +Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    + ----------------------------------------------------------------------
    +
    +The following licenses are 'legacy' - usually MIT/X11 licenses with the name
    +of the copyright holder(s) in the license statement:
    +
    +Copyright 1984-1994, 1998 The Open Group
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation.
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of The Open Group shall not be
    +used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization from The Open Group.
    +
    +X Window System is a trademark of The Open Group.
    +
    +    ----------------------------------------
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium
    +Copyright 2000 The XFree86 Project, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the X Consortium shall
    +not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization
    +from the X Consortium.
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
    +Digital Equipment Corporation
    +
    +Portions Copyright 1990, 1991 by Tektronix, Inc.
    +
    +Permission to use, copy, modify and distribute this documentation for
    +any purpose and without fee is hereby granted, provided that the above
    +copyright notice appears in all copies and that both that copyright notice
    +and this permission notice appear in all copies, and that the names of
    +Digital and Tektronix not be used in in advertising or publicity pertaining
    +to this documentation without specific, written prior permission.
    +Digital and Tektronix makes no representations about the suitability
    +of this documentation for any purpose.
    +It is provided ``as is'' without express or implied warranty.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 1999-2000  Free Software Foundation, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
    +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the Free Software Foundation
    +shall not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization from the
    +Free Software Foundation.
    +
    +    ----------------------------------------
    +
    +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
    +  All Rights Reserved
    +
    +This file is a component of an X Window System-specific implementation
    +of Xcms based on the TekColor Color Management System.  TekColor is a
    +trademark of Tektronix, Inc.  The term "TekHVC" designates a particular
    +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent
    +foreign patents pending).  Permission is hereby granted to use, copy,
    +modify, sell, and otherwise distribute this software and its
    +documentation for any purpose and without fee, provided that:
    +
    +1. This copyright, permission, and disclaimer notice is reproduced in
    +   all copies of this software and any modification thereof and in
    +   supporting documentation;
    +2. Any color-handling application which displays TekHVC color
    +   cooordinates identifies these as TekHVC color coordinates in any
    +   interface that displays these coordinates and in any associated
    +   documentation;
    +3. The term "TekHVC" is always used, and is only used, in association
    +   with the mathematical derivations of the TekHVC Color Space,
    +   including those provided in this file and any equivalent pathways and
    +   mathematical derivations, regardless of digital (e.g., floating point
    +   or integer) representation.
    +
    +Tektronix makes no representation about the suitability of this software
    +for any purpose.  It is provided "as is" and with all faults.
    +
    +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
    +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +(c) Copyright 1995 FUJITSU LIMITED
    +This is source code modified by FUJITSU LIMITED under the Joint
    +Development Agreement for the CDE/Motif PST.
    +
    +    ----------------------------------------
    +
    +Copyright 1992 by Oki Technosystems Laboratory, Inc.
    +Copyright 1992 by Fuji Xerox Co., Ltd.
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Oki Technosystems
    +Laboratory and Fuji Xerox not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.
    +Oki Technosystems Laboratory and Fuji Xerox make no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS
    +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED
    +not be used in advertising or publicity pertaining to distribution
    +of the software without specific, written prior permission.
    +FUJITSU LIMITED makes no representations about the suitability of
    +this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright (c) 1995 David E. Wexelblat.  All rights reserved
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of David E. Wexelblat shall
    +not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization
    +from David E. Wexelblat.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name OMRON not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  OMRON makes no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
    +Digital Equipment Corporation
    +
    +Portions Copyright 1990, 1991 by Tektronix, Inc
    +
    +Rewritten for X.org by Chris Lee <clee@freedesktop.org>
    +
    +Permission to use, copy, modify, distribute, and sell this documentation
    +for any purpose and without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +Chris Lee makes no representations about the suitability for any purpose
    +of the information in this document.  It is provided \`\`as-is'' without
    +express or implied warranty.
    +
    +    ----------------------------------------
    +
    +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts,
    +Copyright 1994 by FUJITSU LIMITED
    +Copyright 1994 by Sony Corporation
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the names of Digital, FUJITSU
    +LIMITED and Sony Corporation not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.
    +
    +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED
    +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991 by the Open Software Foundation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Open Software Foundation
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Open Software
    +Foundation makes no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO
    +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED
    +Copyright 1993, 1994                  by Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and
    +its documentation for any purpose is hereby granted without fee, provided
    +that the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of FUJITSU LIMITED and Sony Corporation
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  FUJITSU LIMITED and
    +Sony Corporation makes no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE
    +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
    +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
    +USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc.
    +
    +Permission to use, copy, modify, and distribute this
    +software and its documentation for any purpose and without
    +fee is hereby granted, provided that the above copyright
    +notice appear in all copies and that both that copyright
    +notice and this permission notice appear in supporting
    +documentation, and that the name of Silicon Graphics not be
    +used in advertising or publicity pertaining to distribution
    +of the software without specific prior written permission.
    +Silicon Graphics makes no representation about the suitability
    +of this software for any purpose. It is provided "as is"
    +without any express or implied warranty.
    +
    +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
    +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
    +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
    +THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED
    +Copyright 1993 by Digital Equipment Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of FUJITSU LIMITED and
    +Digital Equipment Corporation not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.  FUJITSU LIMITED and Digital Equipment Corporation
    +makes no representations about the suitability of this software for
    +any purpose.  It is provided "as is" without express or implied
    +warranty.
    +
    +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR
    +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by FUJITSU LIMITED
    +Copyright 1993 by Fujitsu Open Systems Solutions, Inc.
    +Copyright 1994 by Sony Corporation
    +
    +Permission to use, copy, modify, distribute and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED,
    +Fujitsu Open Systems Solutions, Inc. and Sony Corporation  not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and
    +Sony Corporation make no representations about the suitability of
    +this software for any purpose.  It is provided "as is" without
    +express or implied warranty.
    +
    +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY
    +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
    +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED
    +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation,
    +Maynard, Massachusetts,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of Digital not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1993 by SunSoft, Inc.
    +Copyright 1999-2000 by Bruno Haible
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the names of SunSoft, Inc. and
    +Bruno Haible not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.  SunSoft, Inc. and Bruno Haible make no representations
    +about the suitability of this software for any purpose.  It is
    +provided "as is" without express or implied warranty.
    +
    +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE
    +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the TOSHIBA Corp.
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of Open Software Foundation and TOSHIBA
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Open Software
    +Foundation and TOSHIBA make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO
    +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca.,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name Wyse not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993, 1994 by the Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of Open Software Foundation and
    +Sony Corporation not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior permission.
    +Open Software Foundation and Sony Corporation make no
    +representations about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN
    +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL,
    +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by FUJITSU LIMITED
    +Copyright 1993 by Fujitsu Open Systems Solutions, Inc.
    +
    +Permission to use, copy, modify, distribute and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED and
    +Fujitsu Open Systems Solutions, Inc. not be used in advertising or
    +publicity pertaining to distribution of the software without specific,
    +written prior permission.
    +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no
    +representations about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS
    +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT
    +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
    +OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1993, 1994 by Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Sony Corporation
    +not be used in advertising or publicity pertaining to distribution
    +of the software without specific, written prior permission.
    +Sony Corporation makes no representations about the suitability of
    +this software for any purpose. It is provided "as is" without
    +express or implied warranty.
    +
    +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1986, 1998  The Open Group
    +Copyright (c) 2000  The XFree86 Project, Inc.
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation.
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +Except as contained in this notice, the name of the X Consortium or of the
    +XFree86 Project shall not be used in advertising or otherwise to promote the
    +sale, use or other dealings in this Software without prior written
    +authorization from the X Consortium and the XFree86 Project.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, NTT, and
    +Open Software Foundation not be used in advertising or publicity
    +pertaining to distribution of the software without specific,
    +written prior permission. OMRON, NTT Software, NTT, and Open Software
    +Foundation make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION
    +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
    +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca,
    +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name Digital not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991, 1992 by Fuji Xerox Co., Ltd.
    +Copyright 1992, 1993, 1994 by FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Fuji Xerox,
    +FUJITSU LIMITED not be used in advertising or publicity pertaining
    +to distribution of the software without specific, written prior
    +permission. Fuji Xerox, FUJITSU LIMITED make no representations
    +about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX,
    +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
    +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 2006 Josh Triplett
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +    ----------------------------------------
    +
    +(c) Copyright 1996 by Sebastien Marineau and Holger Veit
    +      <marineau@genie.uottawa.ca>
    +                     <Holger.Veit@gmd.de>
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +HOLGER VEIT  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
    +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit
    +shall not be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Software without prior written authorization from Holger Veit or
    +Sebastien Marineau.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the TOSHIBA Corp.
    +Copyright 1993, 1994 by Sony Corporation
    +Copyright 1993, 1994 by the FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, NTT, Open
    +Software Foundation, and Sony Corporation not be used in advertising
    +or publicity pertaining to distribution of the software without specific,
    +written prior permission. OMRON, NTT Software, NTT, Open Software
    +Foundation, and Sony Corporation  make no representations about the
    +suitability of this software for any purpose.  It is provided "as is"
    +without express or implied warranty.
    +
    +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY
    +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
    +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY
    +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 2000 by Bruno Haible
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Bruno Haible not
    +be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Bruno Haible
    +makes no representations about the suitability of this software for
    +any purpose.  It is provided "as is" without express or implied
    +warranty.
    +
    +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
    +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright © 2003 Keith Packard
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Keith Packard not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  Keith Packard makes no
    +representations about the suitability of this software for any purpose.  It
    +is provided "as is" without express or implied warranty.
    +
    +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 2007-2009, Troy D. Hanson
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by TOSHIBA Corp.
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted, provided
    +that the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of TOSHIBA not be used in advertising
    +or publicity pertaining to distribution of the software without specific,
    +written prior permission. TOSHIBA make no representations about the
    +suitability of this software for any purpose.  It is provided "as is"
    +without express or implied warranty.
    +
    +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +
    +    ----------------------------------------
    +
    +Copyright IBM Corporation 1993
    +
    +All Rights Reserved
    +
    +License to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of IBM not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND
    +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL
    +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, and NTT
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission. OMRON, NTT Software,
    +and NTT make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +
    +****************************
    +zlib
    +****************************
    +(extracted from README, except for match.S)
    +
    +Copyright notice:
    +
    + (C) 1995-2013 Jean-loup Gailly and Mark Adler
    +
    +  This software is provided 'as-is', without any express or implied
    +  warranty.  In no event will the authors be held liable for any damages
    +  arising from the use of this software.
    +
    +  Permission is granted to anyone to use this software for any purpose,
    +  including commercial applications, and to alter it and redistribute it
    +  freely, subject to the following restrictions:
    +
    +  1. The origin of this software must not be misrepresented; you must not
    +     claim that you wrote the original software. If you use this software
    +     in a product, an acknowledgment in the product documentation would be
    +     appreciated but is not required.
    +  2. Altered source versions must be plainly marked as such, and must not be
    +     misrepresented as being the original software.
    +  3. This notice may not be removed or altered from any source distribution.
    +
    +  Jean-loup Gailly        Mark Adler
    +  jloup@gzip.org          madler@alumni.caltech.edu
    +
    +If you use the zlib library in a product, we would appreciate *not* receiving
    +lengthy legal documents to sign.  The sources are provided for free but without
    +warranty of any kind.  The library has been entirely written by Jean-loup
    +Gailly and Mark Adler; it does not include third-party code.
    +
    +If you redistribute modified sources, we would appreciate that you include in
    +the file ChangeLog history information documenting your changes.  Please read
    +the FAQ for more information on the distribution of modified source versions.
    +
    +(extracted from match.S, for match.S only)
    +
    +Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
    +
    +This software is provided 'as-is', without any express or implied
    +warranty.  In no event will the author be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not
    +  claim that you wrote the original software. If you use this software
    +  in a product, an acknowledgment in the product documentation would be
    +  appreciated but is not required.
    +2. Altered source versions must be plainly marked as such, and must not be
    +  misrepresented as being the original software.
    +3. This notice may not be removed or altered from any source distribution.
    +
    +
    +****************************
    +googleurl
    +****************************
    +Copyright 2007, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------------------
    +
    +The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
    +licensed separately as follows:
    +
    +The contents of this file are subject to the Mozilla Public License Version
    +1.1 (the "License"); you may not use this file except in compliance with
    +the License. You may obtain a copy of the License at
    +http://www.mozilla.org/MPL/
    +
    +Software distributed under the License is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    +for the specific language governing rights and limitations under the
    +License.
    +
    +The Original Code is mozilla.org code.
    +
    +The Initial Developer of the Original Code is
    +Netscape Communications Corporation.
    +Portions created by the Initial Developer are Copyright (C) 1998
    +the Initial Developer. All Rights Reserved.
    +
    +Contributor(s):
    +  Darin Fisher (original author)
    +
    +Alternatively, the contents of this file may be used under the terms of
    +either the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    +in which case the provisions of the GPL or the LGPL are applicable instead
    +of those above. If you wish to allow use of your version of this file only
    +under the terms of either the GPL or the LGPL, and not to allow others to
    +use your version of this file under the terms of the MPL, indicate your
    +decision by deleting the provisions above and replace them with the notice
    +and other provisions required by the GPL or the LGPL. If you do not delete
    +the provisions above, a recipient may use your version of this file under
    +the terms of any one of the MPL, the GPL or the LGPL.
    +
    +-------------------------------------------------------------------------------
    +
    +The file icu_utf.cc is from IBM. This file is licensed separately as follows:
    +
    +ICU License - ICU 1.8.1 and later
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2009 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, and/or sell copies of the Software, and to permit persons
    +to whom the Software is furnished to do so, provided that the above
    +copyright notice(s) and this permission notice appear in all copies of
    +the Software and that both the above copyright notice(s) and this
    +permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
    +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
    +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale, use
    +or other dealings in this Software without prior written authorization
    +of the copyright holder.
    +
    +
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +jsoncpp
    +****************************
    +The JsonCpp library's source code, including accompanying documentation,
    +tests and demonstration applications, are licensed under the following
    +conditions...
    +
    +The author (Baptiste Lepilleur) explicitly disclaims copyright in all
    +jurisdictions which recognize such a disclaimer. In such jurisdictions,
    +this software is released into the Public Domain.
    +
    +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
    +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
    +released under the terms of the MIT License (see below).
    +
    +In jurisdictions which recognize Public Domain property, the user of this
    +software may choose to accept it either as 1) Public Domain, 2) under the
    +conditions of the MIT License (see below), or 3) under the terms of dual
    +Public Domain/MIT License conditions described here, as they choose.
    +
    +The MIT License is about as close to Public Domain as a license can get, and is
    +described in clear, concise terms at:
    +
    +   http://en.wikipedia.org/wiki/MIT_License
    +
    +The full text of the MIT License follows:
    +
    +========================================================================
    +Copyright (c) 2007-2010 Baptiste Lepilleur
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +========================================================================
    +(END LICENSE TEXT)
    +
    +The MIT license is compatible with both the GPL and commercial
    +software, affording one all of the rights of Public Domain with the
    +minor nuisance of being required to keep the above copyright notice
    +and license text in the source code. Note also that by accepting the
    +Public Domain "license" you can re-license your copy using whatever
    +license you like.
    +
    +
    +****************************
    +libwebp
    +****************************
    +Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +GVR Keyboard +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +harfbuzz-ng +homepage + + +
    +
    HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
    +For parts of HarfBuzz that are licensed under different licenses see individual
    +files names COPYING in subdirectories where applicable.
    +
    +Copyright © 2010,2011,2012  Google, Inc.
    +Copyright © 2012  Mozilla Foundation
    +Copyright © 2011  Codethink Limited
    +Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
    +Copyright © 2009  Keith Stribley
    +Copyright © 2009  Martin Hosken and SIL International
    +Copyright © 2007  Chris Wilson
    +Copyright © 2006  Behdad Esfahbod
    +Copyright © 2005  David Turner
    +Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
    +Copyright © 1998-2004  David Turner and Werner Lemberg
    +
    +For full copyright notices consult the individual files in the package.
    +
    +
    +Permission is hereby granted, without written agreement and without
    +license or royalty fees, to use, copy, modify, and distribute this
    +software and its documentation for any purpose, provided that the
    +above copyright notice and the following two paragraphs appear in
    +all copies of this software.
    +
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
    +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
    +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
    +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGE.
    +
    +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
    +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
    +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
    +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
    +
    +
    +
    + +
    +Headless Android Heap Analyzer +homepage + + +
    +
    perflib, guava:
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +================================================================================
    +trove4j:
    +
    +This library is free software; you can redistribute it and/or modify it under
    +the terms of the GNU Lesser General Public License as published by the Free
    +Software Foundation; either version 2.1 of the License, or (at your option) any
    +later version. This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
    +for more details. You should have received a copy of the GNU Lesser General
    +Public License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +
    +Two classes (HashFunctions and PrimeFinder) included in Trove are licensed
    +under the following terms:
    +
    +Copyright (c) 1999 CERN - European Organization for Nuclear Research.
    +Permission to use, copy, modify, distribute and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that the
    +above copyright notice appear in all copies and that both that copyright notice
    +and this permission notice appear in supporting documentation. CERN makes no
    +representations about the suitability of this software for any purpose. It is
    +provided "as is" without expressed or implied warranty.
    +
    +
    +
    +
    + +
    +hunspell +homepage + + +
    +
                              MOZILLA PUBLIC LICENSE
    +                                Version 1.1
    +
    +                              ---------------
    +
    +1. Definitions.
    +
    +     1.0.1. "Commercial Use" means distribution or otherwise making the
    +     Covered Code available to a third party.
    +
    +     1.1. "Contributor" means each entity that creates or contributes to
    +     the creation of Modifications.
    +
    +     1.2. "Contributor Version" means the combination of the Original
    +     Code, prior Modifications used by a Contributor, and the Modifications
    +     made by that particular Contributor.
    +
    +     1.3. "Covered Code" means the Original Code or Modifications or the
    +     combination of the Original Code and Modifications, in each case
    +     including portions thereof.
    +
    +     1.4. "Electronic Distribution Mechanism" means a mechanism generally
    +     accepted in the software development community for the electronic
    +     transfer of data.
    +
    +     1.5. "Executable" means Covered Code in any form other than Source
    +     Code.
    +
    +     1.6. "Initial Developer" means the individual or entity identified
    +     as the Initial Developer in the Source Code notice required by Exhibit
    +     A.
    +
    +     1.7. "Larger Work" means a work which combines Covered Code or
    +     portions thereof with code not governed by the terms of this License.
    +
    +     1.8. "License" means this document.
    +
    +     1.8.1. "Licensable" means having the right to grant, to the maximum
    +     extent possible, whether at the time of the initial grant or
    +     subsequently acquired, any and all of the rights conveyed herein.
    +
    +     1.9. "Modifications" means any addition to or deletion from the
    +     substance or structure of either the Original Code or any previous
    +     Modifications. When Covered Code is released as a series of files, a
    +     Modification is:
    +          A. Any addition to or deletion from the contents of a file
    +          containing Original Code or previous Modifications.
    +
    +          B. Any new file that contains any part of the Original Code or
    +          previous Modifications.
    +
    +     1.10. "Original Code" means Source Code of computer software code
    +     which is described in the Source Code notice required by Exhibit A as
    +     Original Code, and which, at the time of its release under this
    +     License is not already Covered Code governed by this License.
    +
    +     1.10.1. "Patent Claims" means any patent claim(s), now owned or
    +     hereafter acquired, including without limitation,  method, process,
    +     and apparatus claims, in any patent Licensable by grantor.
    +
    +     1.11. "Source Code" means the preferred form of the Covered Code for
    +     making modifications to it, including all modules it contains, plus
    +     any associated interface definition files, scripts used to control
    +     compilation and installation of an Executable, or source code
    +     differential comparisons against either the Original Code or another
    +     well known, available Covered Code of the Contributor's choice. The
    +     Source Code can be in a compressed or archival form, provided the
    +     appropriate decompression or de-archiving software is widely available
    +     for no charge.
    +
    +     1.12. "You" (or "Your")  means an individual or a legal entity
    +     exercising rights under, and complying with all of the terms of, this
    +     License or a future version of this License issued under Section 6.1.
    +     For legal entities, "You" includes any entity which controls, is
    +     controlled by, or is under common control with You. For purposes of
    +     this definition, "control" means (a) the power, direct or indirect,
    +     to cause the direction or management of such entity, whether by
    +     contract or otherwise, or (b) ownership of more than fifty percent
    +     (50%) of the outstanding shares or beneficial ownership of such
    +     entity.
    +
    +2. Source Code License.
    +
    +     2.1. The Initial Developer Grant.
    +     The Initial Developer hereby grants You a world-wide, royalty-free,
    +     non-exclusive license, subject to third party intellectual property
    +     claims:
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Initial Developer to use, reproduce,
    +          modify, display, perform, sublicense and distribute the Original
    +          Code (or portions thereof) with or without Modifications, and/or
    +          as part of a Larger Work; and
    +
    +          (b) under Patents Claims infringed by the making, using or
    +          selling of Original Code, to make, have made, use, practice,
    +          sell, and offer for sale, and/or otherwise dispose of the
    +          Original Code (or portions thereof).
    +
    +          (c) the licenses granted in this Section 2.1(a) and (b) are
    +          effective on the date Initial Developer first distributes
    +          Original Code under the terms of this License.
    +
    +          (d) Notwithstanding Section 2.1(b) above, no patent license is
    +          granted: 1) for code that You delete from the Original Code; 2)
    +          separate from the Original Code;  or 3) for infringements caused
    +          by: i) the modification of the Original Code or ii) the
    +          combination of the Original Code with other software or devices.
    +
    +     2.2. Contributor Grant.
    +     Subject to third party intellectual property claims, each Contributor
    +     hereby grants You a world-wide, royalty-free, non-exclusive license
    +
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Contributor, to use, reproduce, modify,
    +          display, perform, sublicense and distribute the Modifications
    +          created by such Contributor (or portions thereof) either on an
    +          unmodified basis, with other Modifications, as Covered Code
    +          and/or as part of a Larger Work; and
    +
    +          (b) under Patent Claims infringed by the making, using, or
    +          selling of  Modifications made by that Contributor either alone
    +          and/or in combination with its Contributor Version (or portions
    +          of such combination), to make, use, sell, offer for sale, have
    +          made, and/or otherwise dispose of: 1) Modifications made by that
    +          Contributor (or portions thereof); and 2) the combination of
    +          Modifications made by that Contributor with its Contributor
    +          Version (or portions of such combination).
    +
    +          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
    +          effective on the date Contributor first makes Commercial Use of
    +          the Covered Code.
    +
    +          (d)    Notwithstanding Section 2.2(b) above, no patent license is
    +          granted: 1) for any code that Contributor has deleted from the
    +          Contributor Version; 2)  separate from the Contributor Version;
    +          3)  for infringements caused by: i) third party modifications of
    +          Contributor Version or ii)  the combination of Modifications made
    +          by that Contributor with other software  (except as part of the
    +          Contributor Version) or other devices; or 4) under Patent Claims
    +          infringed by Covered Code in the absence of Modifications made by
    +          that Contributor.
    +
    +3. Distribution Obligations.
    +
    +     3.1. Application of License.
    +     The Modifications which You create or to which You contribute are
    +     governed by the terms of this License, including without limitation
    +     Section 2.2. The Source Code version of Covered Code may be
    +     distributed only under the terms of this License or a future version
    +     of this License released under Section 6.1, and You must include a
    +     copy of this License with every copy of the Source Code You
    +     distribute. You may not offer or impose any terms on any Source Code
    +     version that alters or restricts the applicable version of this
    +     License or the recipients' rights hereunder. However, You may include
    +     an additional document offering the additional rights described in
    +     Section 3.5.
    +
    +     3.2. Availability of Source Code.
    +     Any Modification which You create or to which You contribute must be
    +     made available in Source Code form under the terms of this License
    +     either on the same media as an Executable version or via an accepted
    +     Electronic Distribution Mechanism to anyone to whom you made an
    +     Executable version available; and if made available via Electronic
    +     Distribution Mechanism, must remain available for at least twelve (12)
    +     months after the date it initially became available, or at least six
    +     (6) months after a subsequent version of that particular Modification
    +     has been made available to such recipients. You are responsible for
    +     ensuring that the Source Code version remains available even if the
    +     Electronic Distribution Mechanism is maintained by a third party.
    +
    +     3.3. Description of Modifications.
    +     You must cause all Covered Code to which You contribute to contain a
    +     file documenting the changes You made to create that Covered Code and
    +     the date of any change. You must include a prominent statement that
    +     the Modification is derived, directly or indirectly, from Original
    +     Code provided by the Initial Developer and including the name of the
    +     Initial Developer in (a) the Source Code, and (b) in any notice in an
    +     Executable version or related documentation in which You describe the
    +     origin or ownership of the Covered Code.
    +
    +     3.4. Intellectual Property Matters
    +          (a) Third Party Claims.
    +          If Contributor has knowledge that a license under a third party's
    +          intellectual property rights is required to exercise the rights
    +          granted by such Contributor under Sections 2.1 or 2.2,
    +          Contributor must include a text file with the Source Code
    +          distribution titled "LEGAL" which describes the claim and the
    +          party making the claim in sufficient detail that a recipient will
    +          know whom to contact. If Contributor obtains such knowledge after
    +          the Modification is made available as described in Section 3.2,
    +          Contributor shall promptly modify the LEGAL file in all copies
    +          Contributor makes available thereafter and shall take other steps
    +          (such as notifying appropriate mailing lists or newsgroups)
    +          reasonably calculated to inform those who received the Covered
    +          Code that new knowledge has been obtained.
    +
    +          (b) Contributor APIs.
    +          If Contributor's Modifications include an application programming
    +          interface and Contributor has knowledge of patent licenses which
    +          are reasonably necessary to implement that API, Contributor must
    +          also include this information in the LEGAL file.
    +
    +               (c)    Representations.
    +          Contributor represents that, except as disclosed pursuant to
    +          Section 3.4(a) above, Contributor believes that Contributor's
    +          Modifications are Contributor's original creation(s) and/or
    +          Contributor has sufficient rights to grant the rights conveyed by
    +          this License.
    +
    +     3.5. Required Notices.
    +     You must duplicate the notice in Exhibit A in each file of the Source
    +     Code.  If it is not possible to put such notice in a particular Source
    +     Code file due to its structure, then You must include such notice in a
    +     location (such as a relevant directory) where a user would be likely
    +     to look for such a notice.  If You created one or more Modification(s)
    +     You may add your name as a Contributor to the notice described in
    +     Exhibit A.  You must also duplicate this License in any documentation
    +     for the Source Code where You describe recipients' rights or ownership
    +     rights relating to Covered Code.  You may choose to offer, and to
    +     charge a fee for, warranty, support, indemnity or liability
    +     obligations to one or more recipients of Covered Code. However, You
    +     may do so only on Your own behalf, and not on behalf of the Initial
    +     Developer or any Contributor. You must make it absolutely clear than
    +     any such warranty, support, indemnity or liability obligation is
    +     offered by You alone, and You hereby agree to indemnify the Initial
    +     Developer and every Contributor for any liability incurred by the
    +     Initial Developer or such Contributor as a result of warranty,
    +     support, indemnity or liability terms You offer.
    +
    +     3.6. Distribution of Executable Versions.
    +     You may distribute Covered Code in Executable form only if the
    +     requirements of Section 3.1-3.5 have been met for that Covered Code,
    +     and if You include a notice stating that the Source Code version of
    +     the Covered Code is available under the terms of this License,
    +     including a description of how and where You have fulfilled the
    +     obligations of Section 3.2. The notice must be conspicuously included
    +     in any notice in an Executable version, related documentation or
    +     collateral in which You describe recipients' rights relating to the
    +     Covered Code. You may distribute the Executable version of Covered
    +     Code or ownership rights under a license of Your choice, which may
    +     contain terms different from this License, provided that You are in
    +     compliance with the terms of this License and that the license for the
    +     Executable version does not attempt to limit or alter the recipient's
    +     rights in the Source Code version from the rights set forth in this
    +     License. If You distribute the Executable version under a different
    +     license You must make it absolutely clear that any terms which differ
    +     from this License are offered by You alone, not by the Initial
    +     Developer or any Contributor. You hereby agree to indemnify the
    +     Initial Developer and every Contributor for any liability incurred by
    +     the Initial Developer or such Contributor as a result of any such
    +     terms You offer.
    +
    +     3.7. Larger Works.
    +     You may create a Larger Work by combining Covered Code with other code
    +     not governed by the terms of this License and distribute the Larger
    +     Work as a single product. In such a case, You must make sure the
    +     requirements of this License are fulfilled for the Covered Code.
    +
    +4. Inability to Comply Due to Statute or Regulation.
    +
    +     If it is impossible for You to comply with any of the terms of this
    +     License with respect to some or all of the Covered Code due to
    +     statute, judicial order, or regulation then You must: (a) comply with
    +     the terms of this License to the maximum extent possible; and (b)
    +     describe the limitations and the code they affect. Such description
    +     must be included in the LEGAL file described in Section 3.4 and must
    +     be included with all distributions of the Source Code. Except to the
    +     extent prohibited by statute or regulation, such description must be
    +     sufficiently detailed for a recipient of ordinary skill to be able to
    +     understand it.
    +
    +5. Application of this License.
    +
    +     This License applies to code to which the Initial Developer has
    +     attached the notice in Exhibit A and to related Covered Code.
    +
    +6. Versions of the License.
    +
    +     6.1. New Versions.
    +     Netscape Communications Corporation ("Netscape") may publish revised
    +     and/or new versions of the License from time to time. Each version
    +     will be given a distinguishing version number.
    +
    +     6.2. Effect of New Versions.
    +     Once Covered Code has been published under a particular version of the
    +     License, You may always continue to use it under the terms of that
    +     version. You may also choose to use such Covered Code under the terms
    +     of any subsequent version of the License published by Netscape. No one
    +     other than Netscape has the right to modify the terms applicable to
    +     Covered Code created under this License.
    +
    +     6.3. Derivative Works.
    +     If You create or use a modified version of this License (which you may
    +     only do in order to apply it to code which is not already Covered Code
    +     governed by this License), You must (a) rename Your license so that
    +     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
    +     "MPL", "NPL" or any confusingly similar phrase do not appear in your
    +     license (except to note that your license differs from this License)
    +     and (b) otherwise make it clear that Your version of the license
    +     contains terms which differ from the Mozilla Public License and
    +     Netscape Public License. (Filling in the name of the Initial
    +     Developer, Original Code or Contributor in the notice described in
    +     Exhibit A shall not of themselves be deemed to be modifications of
    +     this License.)
    +
    +7. DISCLAIMER OF WARRANTY.
    +
    +     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
    +     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
    +     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
    +     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
    +     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
    +     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
    +     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
    +     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
    +     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
    +     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    +
    +8. TERMINATION.
    +
    +     8.1.  This License and the rights granted hereunder will terminate
    +     automatically if You fail to comply with terms herein and fail to cure
    +     such breach within 30 days of becoming aware of the breach. All
    +     sublicenses to the Covered Code which are properly granted shall
    +     survive any termination of this License. Provisions which, by their
    +     nature, must remain in effect beyond the termination of this License
    +     shall survive.
    +
    +     8.2.  If You initiate litigation by asserting a patent infringement
    +     claim (excluding declatory judgment actions) against Initial Developer
    +     or a Contributor (the Initial Developer or Contributor against whom
    +     You file such action is referred to as "Participant")  alleging that:
    +
    +     (a)  such Participant's Contributor Version directly or indirectly
    +     infringes any patent, then any and all rights granted by such
    +     Participant to You under Sections 2.1 and/or 2.2 of this License
    +     shall, upon 60 days notice from Participant terminate prospectively,
    +     unless if within 60 days after receipt of notice You either: (i)
    +     agree in writing to pay Participant a mutually agreeable reasonable
    +     royalty for Your past and future use of Modifications made by such
    +     Participant, or (ii) withdraw Your litigation claim with respect to
    +     the Contributor Version against such Participant.  If within 60 days
    +     of notice, a reasonable royalty and payment arrangement are not
    +     mutually agreed upon in writing by the parties or the litigation claim
    +     is not withdrawn, the rights granted by Participant to You under
    +     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
    +     the 60 day notice period specified above.
    +
    +     (b)  any software, hardware, or device, other than such Participant's
    +     Contributor Version, directly or indirectly infringes any patent, then
    +     any rights granted to You by such Participant under Sections 2.1(b)
    +     and 2.2(b) are revoked effective as of the date You first made, used,
    +     sold, distributed, or had made, Modifications made by that
    +     Participant.
    +
    +     8.3.  If You assert a patent infringement claim against Participant
    +     alleging that such Participant's Contributor Version directly or
    +     indirectly infringes any patent where such claim is resolved (such as
    +     by license or settlement) prior to the initiation of patent
    +     infringement litigation, then the reasonable value of the licenses
    +     granted by such Participant under Sections 2.1 or 2.2 shall be taken
    +     into account in determining the amount or value of any payment or
    +     license.
    +
    +     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
    +     all end user license agreements (excluding distributors and resellers)
    +     which have been validly granted by You or any distributor hereunder
    +     prior to termination shall survive termination.
    +
    +9. LIMITATION OF LIABILITY.
    +
    +     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
    +     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
    +     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
    +     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
    +     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
    +     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
    +     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
    +     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
    +     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
    +     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
    +     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
    +     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
    +     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
    +     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    +
    +10. U.S. GOVERNMENT END USERS.
    +
    +     The Covered Code is a "commercial item," as that term is defined in
    +     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
    +     software" and "commercial computer software documentation," as such
    +     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
    +     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
    +     all U.S. Government End Users acquire Covered Code with only those
    +     rights set forth herein.
    +
    +11. MISCELLANEOUS.
    +
    +     This License represents the complete agreement concerning subject
    +     matter hereof. If any provision of this License is held to be
    +     unenforceable, such provision shall be reformed only to the extent
    +     necessary to make it enforceable. This License shall be governed by
    +     California law provisions (except to the extent applicable law, if
    +     any, provides otherwise), excluding its conflict-of-law provisions.
    +     With respect to disputes in which at least one party is a citizen of,
    +     or an entity chartered or registered to do business in the United
    +     States of America, any litigation relating to this License shall be
    +     subject to the jurisdiction of the Federal Courts of the Northern
    +     District of California, with venue lying in Santa Clara County,
    +     California, with the losing party responsible for costs, including
    +     without limitation, court costs and reasonable attorneys' fees and
    +     expenses. The application of the United Nations Convention on
    +     Contracts for the International Sale of Goods is expressly excluded.
    +     Any law or regulation which provides that the language of a contract
    +     shall be construed against the drafter shall not apply to this
    +     License.
    +
    +12. RESPONSIBILITY FOR CLAIMS.
    +
    +     As between Initial Developer and the Contributors, each party is
    +     responsible for claims and damages arising, directly or indirectly,
    +     out of its utilization of rights under this License and You agree to
    +     work with Initial Developer and Contributors to distribute such
    +     responsibility on an equitable basis. Nothing herein is intended or
    +     shall be deemed to constitute any admission of liability.
    +
    +13. MULTIPLE-LICENSED CODE.
    +
    +     Initial Developer may designate portions of the Covered Code as
    +     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
    +     Developer permits you to utilize portions of the Covered Code under
    +     Your choice of the NPL or the alternative licenses, if any, specified
    +     by the Initial Developer in the file described in Exhibit A.
    +
    +EXHIBIT A -Mozilla Public License.
    +
    +     ``The contents of this file are subject to the Mozilla Public License
    +     Version 1.1 (the "License"); you may not use this file except in
    +     compliance with the License. You may obtain a copy of the License at
    +     http://www.mozilla.org/MPL/
    +
    +     Software distributed under the License is distributed on an "AS IS"
    +     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
    +     License for the specific language governing rights and limitations
    +     under the License.
    +
    +     The Original Code is ______________________________________.
    +
    +     The Initial Developer of the Original Code is ________________________.
    +     Portions created by ______________________ are Copyright (C) ______
    +     _______________________. All Rights Reserved.
    +
    +     Contributor(s): ______________________________________.
    +
    +     Alternatively, the contents of this file may be used under the terms
    +     of the _____ license (the  "[___] License"), in which case the
    +     provisions of [______] License are applicable instead of those
    +     above.  If you wish to allow use of your version of this file only
    +     under the terms of the [____] License and not to allow others to use
    +     your version of this file under the MPL, indicate your decision by
    +     deleting  the provisions above and replace  them with the notice and
    +     other provisions required by the [___] License.  If you do not delete
    +     the provisions above, a recipient may use your version of this file
    +     under either the MPL or the [___] License."
    +
    +     [NOTE: The text of this Exhibit A may differ slightly from the text of
    +     the notices in the Source Code files of the Original Code. You should
    +     use the text of this Exhibit A rather than the text found in the
    +     Original Code Source Code for Your Modifications.]
    +
    +
    +
    +
    + +
    +hunspell dictionaries +homepage + + +
    +
    GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
    +
    +The contents of this software may be used under the terms of
    +the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
    +see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
    +intl/ directory) the Mozilla Public License Version 1.1 or later
    +(the "MPL", see COPYING.MPL).
    +
    +Software distributed under these licenses is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
    +for the specific language governing rights and limitations under the licenses.
    +
    +
    +
    + +
    +IAccessible2 COM interfaces for accessibility +homepage + + +
    +
    /*************************************************************************
    + *
    + *  IAccessible2 IDL Specification 
    + * 
    + *  Copyright (c) 2007, 2010 Linux Foundation 
    + *  Copyright (c) 2006 IBM Corporation 
    + *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
    + *  All rights reserved. 
    + *   
    + *   
    + *  Redistribution and use in source and binary forms, with or without 
    + *  modification, are permitted provided that the following conditions 
    + *  are met: 
    + *   
    + *   1. Redistributions of source code must retain the above copyright 
    + *      notice, this list of conditions and the following disclaimer. 
    + *   
    + *   2. Redistributions in binary form must reproduce the above 
    + *      copyright notice, this list of conditions and the following 
    + *      disclaimer in the documentation and/or other materials 
    + *      provided with the distribution. 
    + *
    + *   3. Neither the name of the Linux Foundation nor the names of its 
    + *      contributors may be used to endorse or promote products 
    + *      derived from this software without specific prior written 
    + *      permission. 
    + *   
    + *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
    + *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
    + *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
    + *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
    + *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
    + *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    + *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
    + *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
    + *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
    + *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    + *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
    + *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
    + *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
    + *   
    + *  This BSD License conforms to the Open Source Initiative "Simplified 
    + *  BSD License" as published at: 
    + *  http://www.opensource.org/licenses/bsd-license.php 
    + *   
    + *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
    + *  mark may be used in accordance with the Linux Foundation Trademark 
    + *  Policy to indicate compliance with the IAccessible2 specification. 
    + * 
    + ************************************************************************/ 
    +
    +
    +
    + +
    +iccjpeg +homepage + + +
    +
    (Copied from the README.)
    +
    +--------------------------------------------------------------------------------
    +
    +LICENSE extracted from IJG's jpeg distribution:
    +-----------------------------------------------
    +
    +In plain English:
    +
    +1. We don't promise that this software works.  (But if you find any bugs,
    +   please let us know!)
    +2. You can use this software for whatever you want.  You don't have to pay us.
    +3. You may not pretend that you wrote this software.  If you use it in a
    +   program, you must acknowledge somewhere in your documentation that
    +   you've used the IJG code.
    +
    +In legalese:
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +
    +
    + +
    +icu +homepage + + +
    +
    COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
    +
    +Copyright © 1991-2018 Unicode, Inc. All rights reserved.
    +Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Unicode data files and any associated documentation
    +(the "Data Files") or Unicode software and any associated documentation
    +(the "Software") to deal in the Data Files or Software
    +without restriction, including without limitation the rights to use,
    +copy, modify, merge, publish, distribute, and/or sell copies of
    +the Data Files or Software, and to permit persons to whom the Data Files
    +or Software are furnished to do so, provided that either
    +(a) this copyright and permission notice appear with all copies
    +of the Data Files or Software, or
    +(b) this copyright and permission notice appear in associated
    +Documentation.
    +
    +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
    +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
    +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THE DATA FILES OR SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale,
    +use or other dealings in these Data Files or Software without prior
    +written authorization of the copyright holder.
    +
    +---------------------
    +
    +Third-Party Software Licenses
    +
    +This section contains third-party software notices and/or additional
    +terms for licensed third-party software components included within ICU
    +libraries.
    +
    +1. ICU License - ICU 1.8.1 to ICU 57.1
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2016 International Business Machines Corporation and others
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, and/or sell copies of the Software, and to permit persons
    +to whom the Software is furnished to do so, provided that the above
    +copyright notice(s) and this permission notice appear in all copies of
    +the Software and that both the above copyright notice(s) and this
    +permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
    +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
    +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale, use
    +or other dealings in this Software without prior written authorization
    +of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the
    +property of their respective owners.
    +
    +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
    +
    + #     The Google Chrome software developed by Google is licensed under
    + # the BSD license. Other software included in this distribution is
    + # provided under other licenses, as set forth below.
    + #
    + #  The BSD License
    + #  http://opensource.org/licenses/bsd-license.php
    + #  Copyright (C) 2006-2008, Google Inc.
    + #
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + # modification, are permitted provided that the following conditions are met:
    + #
    + #  Redistributions of source code must retain the above copyright notice,
    + # this list of conditions and the following disclaimer.
    + #  Redistributions in binary form must reproduce the above
    + # copyright notice, this list of conditions and the following
    + # disclaimer in the documentation and/or other materials provided with
    + # the distribution.
    + #  Neither the name of  Google Inc. nor the names of its
    + # contributors may be used to endorse or promote products derived from
    + # this software without specific prior written permission.
    + #
    + #
    + #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
    + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + #
    + #
    + #  The word list in cjdict.txt are generated by combining three word lists
    + # listed below with further processing for compound word breaking. The
    + # frequency is generated with an iterative training against Google web
    + # corpora.
    + #
    + #  * Libtabe (Chinese)
    + #    - https://sourceforge.net/project/?group_id=1519
    + #    - Its license terms and conditions are shown below.
    + #
    + #  * IPADIC (Japanese)
    + #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
    + #    - Its license terms and conditions are shown below.
    + #
    + #  ---------COPYING.libtabe ---- BEGIN--------------------
    + #
    + #  /*
    + #   * Copyright (c) 1999 TaBE Project.
    + #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
    + #   * All rights reserved.
    + #   *
    + #   * Redistribution and use in source and binary forms, with or without
    + #   * modification, are permitted provided that the following conditions
    + #   * are met:
    + #   *
    + #   * . Redistributions of source code must retain the above copyright
    + #   *   notice, this list of conditions and the following disclaimer.
    + #   * . Redistributions in binary form must reproduce the above copyright
    + #   *   notice, this list of conditions and the following disclaimer in
    + #   *   the documentation and/or other materials provided with the
    + #   *   distribution.
    + #   * . Neither the name of the TaBE Project nor the names of its
    + #   *   contributors may be used to endorse or promote products derived
    + #   *   from this software without specific prior written permission.
    + #   *
    + #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + #   * OF THE POSSIBILITY OF SUCH DAMAGE.
    + #   */
    + #
    + #  /*
    + #   * Copyright (c) 1999 Computer Systems and Communication Lab,
    + #   *                    Institute of Information Science, Academia
    + #       *                    Sinica. All rights reserved.
    + #   *
    + #   * Redistribution and use in source and binary forms, with or without
    + #   * modification, are permitted provided that the following conditions
    + #   * are met:
    + #   *
    + #   * . Redistributions of source code must retain the above copyright
    + #   *   notice, this list of conditions and the following disclaimer.
    + #   * . Redistributions in binary form must reproduce the above copyright
    + #   *   notice, this list of conditions and the following disclaimer in
    + #   *   the documentation and/or other materials provided with the
    + #   *   distribution.
    + #   * . Neither the name of the Computer Systems and Communication Lab
    + #   *   nor the names of its contributors may be used to endorse or
    + #   *   promote products derived from this software without specific
    + #   *   prior written permission.
    + #   *
    + #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + #   * OF THE POSSIBILITY OF SUCH DAMAGE.
    + #   */
    + #
    + #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
    + #      University of Illinois
    + #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
    + #
    + #  ---------------COPYING.libtabe-----END--------------------------------
    + #
    + #
    + #  ---------------COPYING.ipadic-----BEGIN-------------------------------
    + #
    + #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
    + #  and Technology.  All Rights Reserved.
    + #
    + #  Use, reproduction, and distribution of this software is permitted.
    + #  Any copy of this software, whether in its original form or modified,
    + #  must include both the above copyright notice and the following
    + #  paragraphs.
    + #
    + #  Nara Institute of Science and Technology (NAIST),
    + #  the copyright holders, disclaims all warranties with regard to this
    + #  software, including all implied warranties of merchantability and
    + #  fitness, in no event shall NAIST be liable for
    + #  any special, indirect or consequential damages or any damages
    + #  whatsoever resulting from loss of use, data or profits, whether in an
    + #  action of contract, negligence or other tortuous action, arising out
    + #  of or in connection with the use or performance of this software.
    + #
    + #  A large portion of the dictionary entries
    + #  originate from ICOT Free Software.  The following conditions for ICOT
    + #  Free Software applies to the current dictionary as well.
    + #
    + #  Each User may also freely distribute the Program, whether in its
    + #  original form or modified, to any third party or parties, PROVIDED
    + #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
    + #  on, or be attached to, the Program, which is distributed substantially
    + #  in the same form as set out herein and that such intended
    + #  distribution, if actually made, will neither violate or otherwise
    + #  contravene any of the laws and regulations of the countries having
    + #  jurisdiction over the User or the intended distribution itself.
    + #
    + #  NO WARRANTY
    + #
    + #  The program was produced on an experimental basis in the course of the
    + #  research and development conducted during the project and is provided
    + #  to users as so produced on an experimental basis.  Accordingly, the
    + #  program is provided without any warranty whatsoever, whether express,
    + #  implied, statutory or otherwise.  The term "warranty" used herein
    + #  includes, but is not limited to, any warranty of the quality,
    + #  performance, merchantability and fitness for a particular purpose of
    + #  the program and the nonexistence of any infringement or violation of
    + #  any right of any third party.
    + #
    + #  Each user of the program will agree and understand, and be deemed to
    + #  have agreed and understood, that there is no warranty whatsoever for
    + #  the program and, accordingly, the entire risk arising from or
    + #  otherwise connected with the program is assumed by the user.
    + #
    + #  Therefore, neither ICOT, the copyright holder, or any other
    + #  organization that participated in or was otherwise related to the
    + #  development of the program and their respective officials, directors,
    + #  officers and other employees shall be held liable for any and all
    + #  damages, including, without limitation, general, special, incidental
    + #  and consequential damages, arising out of or otherwise in connection
    + #  with the use or inability to use the program or any product, material
    + #  or result produced or otherwise obtained by using the program,
    + #  regardless of whether they have been advised of, or otherwise had
    + #  knowledge of, the possibility of such damages at any time during the
    + #  project or thereafter.  Each user will be deemed to have agreed to the
    + #  foregoing by his or her commencement of use of the program.  The term
    + #  "use" as used herein includes, but is not limited to, the use,
    + #  modification, copying and distribution of the program and the
    + #  production of secondary products from the program.
    + #
    + #  In the case where the program, whether in its original form or
    + #  modified, was distributed or delivered to or received by a user from
    + #  any person, organization or entity other than ICOT, unless it makes or
    + #  grants independently of ICOT any specific warranty to the user in
    + #  writing, such person, organization or entity, will also be exempted
    + #  from and not be held liable to the user for any such damages as noted
    + #  above as far as the program is concerned.
    + #
    + #  ---------------COPYING.ipadic-----END----------------------------------
    +
    +3. Lao Word Break Dictionary Data (laodict.txt)
    +
    + #  Copyright (c) 2013 International Business Machines Corporation
    + #  and others. All Rights Reserved.
    + #
    + # Project: http://code.google.com/p/lao-dictionary/
    + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
    + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
    + #              (copied below)
    + #
    + #  This file is derived from the above dictionary, with slight
    + #  modifications.
    + #  ----------------------------------------------------------------------
    + #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + #  modification,
    + #  are permitted provided that the following conditions are met:
    + #
    + #
    + # Redistributions of source code must retain the above copyright notice, this
    + #  list of conditions and the following disclaimer. Redistributions in
    + #  binary form must reproduce the above copyright notice, this list of
    + #  conditions and the following disclaimer in the documentation and/or
    + #  other materials provided with the distribution.
    + #
    + #
    + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + # OF THE POSSIBILITY OF SUCH DAMAGE.
    + #  --------------------------------------------------------------------------
    +
    +4. Burmese Word Break Dictionary Data (burmesedict.txt)
    +
    + #  Copyright (c) 2014 International Business Machines Corporation
    + #  and others. All Rights Reserved.
    + #
    + #  This list is part of a project hosted at:
    + #    github.com/kanyawtech/myanmar-karen-word-lists
    + #
    + #  --------------------------------------------------------------------------
    + #  Copyright (c) 2013, LeRoy Benjamin Sharon
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + #  modification, are permitted provided that the following conditions
    + #  are met: Redistributions of source code must retain the above
    + #  copyright notice, this list of conditions and the following
    + #  disclaimer.  Redistributions in binary form must reproduce the
    + #  above copyright notice, this list of conditions and the following
    + #  disclaimer in the documentation and/or other materials provided
    + #  with the distribution.
    + #
    + #    Neither the name Myanmar Karen Word Lists, nor the names of its
    + #    contributors may be used to endorse or promote products derived
    + #    from this software without specific prior written permission.
    + #
    + #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
    + #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    + #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    + #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    + #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
    + #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    + #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    + #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    + #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    + #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
    + #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + #  SUCH DAMAGE.
    + #  --------------------------------------------------------------------------
    +
    +5. Time Zone Database
    +
    +  ICU uses the public domain data and code derived from Time Zone
    +Database for its time zone support. The ownership of the TZ database
    +is explained in BCP 175: Procedure for Maintaining the Time Zone
    +Database section 7.
    +
    + # 7.  Database Ownership
    + #
    + #    The TZ database itself is not an IETF Contribution or an IETF
    + #    document.  Rather it is a pre-existing and regularly updated work
    + #    that is in the public domain, and is intended to remain in the
    + #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
    + #    not apply to the TZ Database or contributions that individuals make
    + #    to it.  Should any claims be made and substantiated against the TZ
    + #    Database, the organization that is providing the IANA
    + #    Considerations defined in this RFC, under the memorandum of
    + #    understanding with the IETF, currently ICANN, may act in accordance
    + #    with all competent court orders.  No ownership claims will be made
    + #    by ICANN or the IETF Trust on the database or the code.  Any person
    + #    making a contribution to the database or code waives all rights to
    + #    future claims in that contribution or in the TZ Database.
    +
    +6. Google double-conversion
    +
    +Copyright 2006-2011, the V8 project authors. All rights reserved.
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +      contributors may be used to endorse or promote products derived
    +      from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +inspector protocol +homepage + + +
    +
    // Copyright 2016 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +International Phone Number Library +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +ISimpleDOM COM interfaces for accessibility +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is mozilla.org code.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2002
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Jinja2 Python Template Engine +homepage + + +
    +
    Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
    +
    +Some rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +
    +    * The names of the contributors may not be used to endorse or
    +      promote products derived from this software without specific
    +      prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +jsoncpp +homepage + + +
    +
    The JsonCpp library's source code, including accompanying documentation, 
    +tests and demonstration applications, are licensed under the following
    +conditions...
    +
    +The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
    +jurisdictions which recognize such a disclaimer. In such jurisdictions, 
    +this software is released into the Public Domain.
    +
    +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
    +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
    +released under the terms of the MIT License (see below).
    +
    +In jurisdictions which recognize Public Domain property, the user of this 
    +software may choose to accept it either as 1) Public Domain, 2) under the 
    +conditions of the MIT License (see below), or 3) under the terms of dual 
    +Public Domain/MIT License conditions described here, as they choose.
    +
    +The MIT License is about as close to Public Domain as a license can get, and is
    +described in clear, concise terms at:
    +
    +   http://en.wikipedia.org/wiki/MIT_License
    +   
    +The full text of the MIT License follows:
    +
    +========================================================================
    +Copyright (c) 2007-2010 Baptiste Lepilleur
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +========================================================================
    +(END LICENSE TEXT)
    +
    +The MIT license is compatible with both the GPL and commercial
    +software, affording one all of the rights of Public Domain with the
    +minor nuisance of being required to keep the above copyright notice
    +and license text in the source code. Note also that by accepting the
    +Public Domain "license" you can re-license your copy using whatever
    +license you like.
    +
    +
    +
    + +
    +Khronos header files +homepage + + +
    +
    Copyright (c) 2007-2010 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
    +
    +Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +The above copyright notice including the dates of first publication and either
    +this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
    +shall be included in all copies or substantial portions of the Software. 
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
    +GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of Silicon Graphics, Inc. shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Software without prior written authorization from Silicon
    +Graphics, Inc.
    +
    +
    +
    + +
    +LCOV - the LTP GCOV extension +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License along
    +    with this program; if not, write to the Free Software Foundation, Inc.,
    +    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Lesser General
    +Public License instead of this License.
    +
    +
    +
    + +
    +LeakCanary +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +LevelDB: A Fast Persistent Key-Value Store +homepage + + +
    +
    Copyright (c) 2011 The LevelDB Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +libaddressinput +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +libcxx +homepage + + +
    +
    ==============================================================================
    +libc++ License
    +==============================================================================
    +
    +The libc++ library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libcxxabi +homepage + + +
    +
    ==============================================================================
    +libc++abi License
    +==============================================================================
    +
    +The libc++abi library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libevdev +homepage + + +
    +
    Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
    +Use of this source code is governed by a BSD-style license that can be
    +found in the LICENSE file.
    +
    +
    +
    + +
    +libevent +homepage + + +
    +
    Libevent is available for use under the following license, commonly known
    +as the 3-clause (or "modified") BSD license:
    +
    +==============================
    +Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
    +Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +==============================
    +
    +Portions of Libevent are based on works by others, also made available by
    +them under the three-clause BSD license above.  The copyright notices are
    +available in the corresponding source files; the license is as above.  Here's
    +a list:
    +
    +log.c:
    +   Copyright (c) 2000 Dug Song <dugsong@monkey.org>
    +   Copyright (c) 1993 The Regents of the University of California.
    +
    +strlcpy.c:
    +   Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +win32.c:
    +   Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
    +
    +evport.c:
    +   Copyright (c) 2007 Sun Microsystems
    +
    +min_heap.h:
    +   Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
    +
    +tree.h:
    +   Copyright 2002 Niels Provos <provos@citi.umich.edu>
    +
    +
    +
    + +
    +libFuzzer +homepage + + +
    +
    ==============================================================================
    +LLVM Release License
    +==============================================================================
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign.
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +Copyrights and Licenses for Third Party Software Distributed with LLVM:
    +==============================================================================
    +The LLVM software contains code written by third parties.  Such software will
    +have its own individual LICENSE.TXT file in the directory in which it appears.
    +This file will describe the copyrights, license, and restrictions which apply
    +to that code.
    +
    +The disclaimer of warranty in the University of Illinois Open Source License
    +applies to all code in the LLVM Distribution, and nothing in any of the
    +other licenses gives permission to use the names of the LLVM Team or the
    +University of Illinois to endorse or promote products derived from this
    +Software.
    +
    +The following pieces of software have additional or alternate copyrights,
    +licenses, and/or restrictions:
    +
    +Program             Directory
    +-------             ---------
    +Autoconf            llvm/autoconf
    +                    llvm/projects/ModuleMaker/autoconf
    +Google Test         llvm/utils/unittest/googletest
    +OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
    +pyyaml tests        llvm/test/YAMLParser/{*.data, LICENSE.TXT}
    +ARM contributions   llvm/lib/Target/ARM/LICENSE.TXT
    +md5 contributions   llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h
    +
    +
    +
    + +
    +libjingle XMPP and xmllite libraries +homepage + + +
    +
    Copyright (c) 2011, The WebRTC project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +libjpeg +homepage + + +
    +
    (Copied from the README.)
    +
    +--------------------------------------------------------------------------------
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
    +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
    +ansi2knr.c is NOT covered by the above copyright and conditions, but instead
    +by the usual distribution terms of the Free Software Foundation; principally,
    +that you must include source code if you redistribute it.  (See the file
    +ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
    +of any program generated from the IJG code, this does not limit you more than
    +the foregoing paragraphs do.
    +
    +The Unix configuration script "configure" was produced with GNU Autoconf.
    +It is copyright by the Free Software Foundation but is freely distributable.
    +The same holds for its supporting scripts (config.guess, config.sub,
    +ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
    +by M.I.T. but is also freely distributable.
    +
    +It appears that the arithmetic coding option of the JPEG spec is covered by
    +patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
    +legally be used without obtaining one or more licenses.  For this reason,
    +support for arithmetic coding has been removed from the free JPEG software.
    +(Since arithmetic coding provides only a marginal gain over the unpatented
    +Huffman mode, it is unlikely that very many implementations will support it.)
    +So far as we are aware, there are no patent restrictions on the remaining
    +code.
    +
    +The IJG distribution formerly included code to read and write GIF files.
    +To avoid entanglement with the Unisys LZW patent, GIF reading support has
    +been removed altogether, and the GIF writer has been simplified to produce
    +"uncompressed GIFs".  This technique does not use the LZW algorithm; the
    +resulting GIF files are larger than usual, but are readable by all standard
    +GIF decoders.
    +
    +We are required to state that
    +    "The Graphics Interchange Format(c) is the Copyright property of
    +    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    +    CompuServe Incorporated."
    +
    +--------------------------------------------------------------------------------
    +
    +jconfig.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
    +
    +jmorecfg.h contains modifications, which are distributed under the Netscape
    +Public License.
    +
    +
    +
    + +
    +libjpeg-turbo +homepage + + +
    +
    libjpeg-turbo Licenses
    +======================
    +
    +libjpeg-turbo is covered by three compatible BSD-style open source licenses:
    +
    +- The IJG (Independent JPEG Group) License, which is listed in
    +  [README.ijg](README.ijg)
    +
    +  This license applies to the libjpeg API library and associated programs
    +  (any code inherited from libjpeg, and any modifications to that code.)
    +
    +- The Modified (3-clause) BSD License, which is listed in
    +  [turbojpeg.c](turbojpeg.c)
    +
    +  This license covers the TurboJPEG API library and associated programs.
    +
    +- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc)
    +
    +  This license is a subset of the other two, and it covers the libjpeg-turbo
    +  SIMD extensions.
    +
    +
    +Complying with the libjpeg-turbo Licenses
    +=========================================
    +
    +This section provides a roll-up of the libjpeg-turbo licensing terms, to the
    +best of our understanding.
    +
    +1.  If you are distributing a modified version of the libjpeg-turbo source,
    +    then:
    +
    +    1.  You cannot alter or remove any existing copyright or license notices
    +        from the source.
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +        - Clause 1 of the Modified BSD License
    +        - Clauses 1 and 3 of the zlib License
    +
    +    2.  You must add your own copyright notice to the header of each source
    +        file you modified, so others can tell that you modified that file (if
    +        there is not an existing copyright header in that file, then you can
    +        simply add a notice stating that you modified the file.)
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +        - Clause 2 of the zlib License
    +
    +    3.  You must include the IJG README file, and you must not alter any of the
    +        copyright or license text in that file.
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +
    +2.  If you are distributing only libjpeg-turbo binaries without the source, or
    +    if you are distributing an application that statically links with
    +    libjpeg-turbo, then:
    +
    +    1.  Your product documentation must include a message stating:
    +
    +        This software is based in part on the work of the Independent JPEG
    +        Group.
    +
    +        **Origin**
    +        - Clause 2 of the IJG license
    +
    +    2.  If your binary distribution includes or uses the TurboJPEG API, then
    +        your product documentation must include the text of the Modified BSD
    +        License.
    +
    +        **Origin**
    +        - Clause 2 of the Modified BSD License
    +
    +3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the
    +    contributors thereof in advertising, publicity, etc.
    +
    +    **Origin**
    +    - IJG License
    +    - Clause 3 of the Modified BSD License
    +
    +4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
    +    free of defects, nor do we accept any liability for undesirable
    +    consequences resulting from your use of the software.
    +
    +    **Origin**
    +    - IJG License
    +    - Modified BSD License
    +    - zlib License
    +
    +
    +
    + +
    +libpng +homepage + + +
    +
    +This copy of the libpng notices is provided for your convenience.  In case of
    +any discrepancy between this copy and the notices in the file png.h that is
    +included in the libpng distribution, the latter shall prevail.
    +
    +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
    +
    +If you modify libpng you may insert additional notices immediately following
    +this sentence.
    +
    +Using custom versions of pnglibconf.h and pngprefix.h for Chrome.
    +
    +This code is released under the libpng license.
    +
    +libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
    +Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
    +derived from libpng-1.0.6, and are distributed according to the same
    +disclaimer and license as libpng-1.0.6 with the following individuals
    +added to the list of Contributing Authors:
    +
    +   Simon-Pierre Cadieux
    +   Eric S. Raymond
    +   Mans Rullgard
    +   Cosmin Truta
    +   Gilles Vollant
    +   James Yu
    +   Mandar Sahastrabuddhe
    +   Google Inc.
    +   Vadim Barkov
    +
    +and with the following additions to the disclaimer:
    +
    +   There is no warranty against interference with your enjoyment of the
    +   library or against infringement.  There is no warranty that our
    +   efforts or the library will fulfill any of your particular purposes
    +   or needs.  This library is provided with all faults, and the entire
    +   risk of satisfactory quality, performance, accuracy, and effort is with
    +   the user.
    +
    +Some files in the "contrib" directory and some configure-generated
    +files that are distributed with libpng have other copyright owners and
    +are released under other open source licenses.
    +
    +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
    +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
    +libpng-0.96, and are distributed according to the same disclaimer and
    +license as libpng-0.96, with the following individuals added to the list
    +of Contributing Authors:
    +
    +   Tom Lane
    +   Glenn Randers-Pehrson
    +   Willem van Schaik
    +
    +libpng versions 0.89, June 1996, through 0.96, May 1997, are
    +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
    +and are distributed according to the same disclaimer and license as
    +libpng-0.88, with the following individuals added to the list of
    +Contributing Authors:
    +
    +   John Bowler
    +   Kevin Bracey
    +   Sam Bushell
    +   Magnus Holmgren
    +   Greg Roelofs
    +   Tom Tanner
    +
    +Some files in the "scripts" directory have other copyright owners
    +but are released under this license.
    +
    +libpng versions 0.5, May 1995, through 0.88, January 1996, are
    +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
    +
    +For the purposes of this copyright and license, "Contributing Authors"
    +is defined as the following set of individuals:
    +
    +   Andreas Dilger
    +   Dave Martindale
    +   Guy Eric Schalnat
    +   Paul Schmidt
    +   Tim Wegner
    +
    +The PNG Reference Library is supplied "AS IS".  The Contributing Authors
    +and Group 42, Inc. disclaim all warranties, expressed or implied,
    +including, without limitation, the warranties of merchantability and of
    +fitness for any purpose.  The Contributing Authors and Group 42, Inc.
    +assume no liability for direct, indirect, incidental, special, exemplary,
    +or consequential damages, which may result from the use of the PNG
    +Reference Library, even if advised of the possibility of such damage.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +source code, or portions hereof, for any purpose, without fee, subject
    +to the following restrictions:
    +
    +  1. The origin of this source code must not be misrepresented.
    +
    +  2. Altered versions must be plainly marked as such and must not
    +     be misrepresented as being the original source.
    +
    +  3. This Copyright notice may not be removed or altered from any
    +     source or altered source distribution.
    +
    +The Contributing Authors and Group 42, Inc. specifically permit, without
    +fee, and encourage the use of this source code as a component to
    +supporting the PNG file format in commercial products.  If you use this
    +source code in a product, acknowledgment is not required but would be
    +appreciated.
    +
    +END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
    +
    +TRADEMARK:
    +
    +The name "libpng" has not been registered by the Copyright owner
    +as a trademark in any jurisdiction.  However, because libpng has
    +been distributed and maintained world-wide, continually since 1995,
    +the Copyright owner claims "common-law trademark protection" in any
    +jurisdiction where common-law trademark is recognized.
    +
    +OSI CERTIFICATION:
    +
    +Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
    +a certification mark of the Open Source Initiative. OSI has not addressed
    +the additional disclaimers inserted at version 1.0.7.
    +
    +EXPORT CONTROL:
    +
    +The Copyright owner believes that the Export Control Classification
    +Number (ECCN) for libpng is EAR99, which means not subject to export
    +controls or International Traffic in Arms Regulations (ITAR) because
    +it is open source, publicly available software, that does not contain
    +any encryption software.  See the EAR, paragraphs 734.3(b)(3) and
    +734.7(b).
    +
    +Glenn Randers-Pehrson
    +glennrp at users.sourceforge.net
    +September 29, 2017
    +
    +
    +
    + +
    +libprotobuf-mutator +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +libsecret +homepage + + +
    +
                      GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    + +
    +libsrtp +homepage + + +
    +
    /*
    + *	
    + * Copyright (c) 2001-2017 Cisco Systems, Inc.
    + * All rights reserved.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 
    + *   Redistributions of source code must retain the above copyright
    + *   notice, this list of conditions and the following disclaimer.
    + * 
    + *   Redistributions in binary form must reproduce the above
    + *   copyright notice, this list of conditions and the following
    + *   disclaimer in the documentation and/or other materials provided
    + *   with the distribution.
    + * 
    + *   Neither the name of the Cisco Systems, Inc. nor the names of its
    + *   contributors may be used to endorse or promote products derived
    + *   from this software without specific prior written permission.
    + * 
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +
    +
    + +
    +libudev +homepage + + +
    +
                      GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    + +
    +libunwind +homepage + + +
    +
    ==============================================================================
    +libunwind License
    +==============================================================================
    +
    +The libunwind library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libusbx +homepage + + +
    +
    		  GNU LESSER GENERAL PUBLIC LICENSE
    +		       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    +
    + +
    +libvpx +homepage + + +
    +
    Copyright (c) 2010, The WebM Project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google, nor the WebM Project, nor the names
    +    of its contributors may be used to endorse or promote products
    +    derived from this software without specific prior written
    +    permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +libxml +homepage + + +
    +
    Except where otherwise noted in the source code (e.g. the files hash.c,
    +list.c and the trio files, which are covered by a similar licence but
    +with different Copyright notices) all the files are:
    +
    + Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libxslt +homepage + + +
    +
    Licence for libxslt except libexslt
    +----------------------------------------------------------------------
    + Copyright (C) 2001-2002 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
    +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of Daniel Veillard shall not
    +be used in advertising or otherwise to promote the sale, use or other deal-
    +ings in this Software without prior written authorization from him.
    +
    +----------------------------------------------------------------------
    +
    +Licence for libexslt
    +----------------------------------------------------------------------
    + Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.
    + All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
    +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the authors shall not
    +be used in advertising or otherwise to promote the sale, use or other deal-
    +ings in this Software without prior written authorization from him.
    +----------------------------------------------------------------------
    +
    +
    +
    + +
    +libyuv +homepage + + +
    +
    Copyright 2011 The LibYuv Project Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +logilab +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License along
    +    with this program; if not, write to the Free Software Foundation, Inc.,
    +    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Lesser General
    +Public License instead of this License.
    +
    +
    +
    + +
    +LZMA SDK +homepage + + +
    +
    LZMA SDK is placed in the public domain.
    +
    +
    +
    + +
    +mach_override +homepage + + +
    +
    Copyright (c) 2003-2012 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
    +Some rights reserved: http://opensource.org/licenses/mit
    +
    +mach_override includes a copy of libudis86, licensed as follows:
    +
    +Copyright (c) 2002-2009 Vivek Thampi
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification, 
    +are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice, 
    +      this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright notice, 
    +      this list of conditions and the following disclaimer in the documentation 
    +      and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Material Components for iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Design Icons +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Material Font Disk Loader iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Internationalization for iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Roboto Font Loader iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Sprited Animation View +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Material Text Accessibility iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +MediaController Android sample. +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +mesa +homepage + + +
    +
    The default Mesa license is as follows:
    +
    +Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    +Some parts of Mesa are copyrighted under the GNU LGPL.  See the
    +Mesa/docs/COPYRIGHT file for details.
    +
    +The following is the standard GNU copyright file.
    +----------------------------------------------------------------------
    +
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    +                    675 Mass Ave, Cambridge, MA 02139, USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +     Appendix: How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Library General Public
    +    License as published by the Free Software Foundation; either
    +    version 2 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Library General Public License for more details.
    +
    +    You should have received a copy of the GNU Library General Public
    +    License along with this library; if not, write to the Free
    +    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    + +
    +Metrics Protos +homepage + + +
    +
    // Copyright 2015 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +minigbm +homepage + + +
    +
    // Copyright 2014 The Chromium OS Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +modp base64 decoder +homepage + + +
    +
     * MODP_B64 - High performance base64 encoder/decoder
    + * Version 1.3 -- 17-Mar-2006
    + * http://modp.com/release/base64
    + *
    + * Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *   Redistributions of source code must retain the above copyright
    + *   notice, this list of conditions and the following disclaimer.
    + *
    + *   Redistributions in binary form must reproduce the above copyright
    + *   notice, this list of conditions and the following disclaimer in the
    + *   documentation and/or other materials provided with the distribution.
    + *
    + *   Neither the name of the modp.com nor the names of its
    + *   contributors may be used to endorse or promote products derived from
    + *   this software without specific prior written permission.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Motion Animator for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Motion Interchange for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Motion Transitioning for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Mozilla Personal Security Manager +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is the Netscape security libraries.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2000
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Netscape Portable Runtime (NSPR) +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is the Netscape Portable Runtime (NSPR).
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 1998-2000
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Network Security Services (NSS) +homepage + + +
    +
    NSS is available under the Mozilla Public License, version 2, a copy of which
    +is below.
    +
    +Note on GPL Compatibility
    +-------------------------
    +
    +The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
    +General Public License (GPL) version 2, or any later version of that
    +license, to make a Larger Work, and distribute the result under the GPL.
    +The only condition is that you must also make NSS, and any changes you
    +have made to it, available to recipients under the terms of the MPL 2 also.
    +
    +Anyone who receives the combined code from you does not have to continue
    +to dual licence in this way, and may, if they wish, distribute under the
    +terms of either of the two licences - either the MPL alone or the GPL
    +alone. However, we discourage people from distributing copies of NSS under
    +the GPL alone, because it means that any improvements they make cannot be
    +reincorporated into the main version of NSS. There is never a need to do
    +this for license compatibility reasons.
    +
    +Note on LGPL Compatibility
    +--------------------------
    +
    +The above also applies to combining MPLed code in a single library with
    +code under the GNU Lesser General Public License (LGPL) version 2.1, or
    +any later version of that license. If the LGPLed code and the MPLed code
    +are not in the same library, then the copyleft coverage of the two
    +licences does not overlap, so no issues arise.
    +
    +
    +Mozilla Public License Version 2.0
    +==================================
    +
    +1. Definitions
    +--------------
    +
    +1.1. "Contributor"
    +    means each individual or legal entity that creates, contributes to
    +    the creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +    means the combination of the Contributions of others (if any) used
    +    by a Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +    means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +    means Source Code Form to which the initial Contributor has attached
    +    the notice in Exhibit A, the Executable Form of such Source Code
    +    Form, and Modifications of such Source Code Form, in each case
    +    including portions thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +    means
    +
    +    (a) that the initial Contributor has attached the notice described
    +        in Exhibit B to the Covered Software; or
    +
    +    (b) that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the
    +        terms of a Secondary License.
    +
    +1.6. "Executable Form"
    +    means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +    means a work that combines Covered Software with other material, in 
    +    a separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +    means this document.
    +
    +1.9. "Licensable"
    +    means having the right to grant, to the maximum extent possible,
    +    whether at the time of the initial grant or subsequently, any and
    +    all of the rights conveyed by this License.
    +
    +1.10. "Modifications"
    +    means any of the following:
    +
    +    (a) any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered
    +        Software; or
    +
    +    (b) any new file in Source Code Form that contains any Covered
    +        Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +    means any patent claim(s), including without limitation, method,
    +    process, and apparatus claims, in any patent Licensable by such
    +    Contributor that would be infringed, but for the grant of the
    +    License, by the making, using, selling, offering for sale, having
    +    made, import, or transfer of either its Contributions or its
    +    Contributor Version.
    +
    +1.12. "Secondary License"
    +    means either the GNU General Public License, Version 2.0, the GNU
    +    Lesser General Public License, Version 2.1, the GNU Affero General
    +    Public License, Version 3.0, or any later versions of those
    +    licenses.
    +
    +1.13. "Source Code Form"
    +    means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +    means an individual or a legal entity exercising rights under this
    +    License. For legal entities, "You" includes any entity that
    +    controls, is controlled by, or is under common control with You. For
    +    purposes of this definition, "control" means (a) the power, direct
    +    or indirect, to cause the direction or management of such entity,
    +    whether by contract or otherwise, or (b) ownership of more than
    +    fifty percent (50%) of the outstanding shares or beneficial
    +    ownership of such entity.
    +
    +2. License Grants and Conditions
    +--------------------------------
    +
    +2.1. Grants
    +
    +Each Contributor hereby grants You a world-wide, royalty-free,
    +non-exclusive license:
    +
    +(a) under intellectual property rights (other than patent or trademark)
    +    Licensable by such Contributor to use, reproduce, make available,
    +    modify, display, perform, distribute, and otherwise exploit its
    +    Contributions, either on an unmodified basis, with Modifications, or
    +    as part of a Larger Work; and
    +
    +(b) under Patent Claims of such Contributor to make, use, sell, offer
    +    for sale, have made, import, and otherwise transfer either its
    +    Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +The licenses granted in Section 2.1 with respect to any Contribution
    +become effective for each Contribution on the date the Contributor first
    +distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +The licenses granted in this Section 2 are the only rights granted under
    +this License. No additional rights or licenses will be implied from the
    +distribution or licensing of Covered Software under this License.
    +Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +Contributor:
    +
    +(a) for any code that a Contributor has removed from Covered Software;
    +    or
    +
    +(b) for infringements caused by: (i) Your and any other third party's
    +    modifications of Covered Software, or (ii) the combination of its
    +    Contributions with other software (except as part of its Contributor
    +    Version); or
    +
    +(c) under Patent Claims infringed by Covered Software in the absence of
    +    its Contributions.
    +
    +This License does not grant any rights in the trademarks, service marks,
    +or logos of any Contributor (except as may be necessary to comply with
    +the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +No Contributor makes additional grants as a result of Your choice to
    +distribute the Covered Software under a subsequent version of this
    +License (see Section 10.2) or under the terms of a Secondary License (if
    +permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +Each Contributor represents that the Contributor believes its
    +Contributions are its original creation(s) or it has sufficient rights
    +to grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +This License is not intended to limit any rights You have under
    +applicable copyright doctrines of fair use, fair dealing, or other
    +equivalents.
    +
    +2.7. Conditions
    +
    +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
    +in Section 2.1.
    +
    +3. Responsibilities
    +-------------------
    +
    +3.1. Distribution of Source Form
    +
    +All distribution of Covered Software in Source Code Form, including any
    +Modifications that You create or to which You contribute, must be under
    +the terms of this License. You must inform recipients that the Source
    +Code Form of the Covered Software is governed by the terms of this
    +License, and how they can obtain a copy of this License. You may not
    +attempt to alter or restrict the recipients' rights in the Source Code
    +Form.
    +
    +3.2. Distribution of Executable Form
    +
    +If You distribute Covered Software in Executable Form then:
    +
    +(a) such Covered Software must also be made available in Source Code
    +    Form, as described in Section 3.1, and You must inform recipients of
    +    the Executable Form how they can obtain a copy of such Source Code
    +    Form by reasonable means in a timely manner, at a charge no more
    +    than the cost of distribution to the recipient; and
    +
    +(b) You may distribute such Executable Form under the terms of this
    +    License, or sublicense it under different terms, provided that the
    +    license for the Executable Form does not attempt to limit or alter
    +    the recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +You may create and distribute a Larger Work under terms of Your choice,
    +provided that You also comply with the requirements of this License for
    +the Covered Software. If the Larger Work is a combination of Covered
    +Software with a work governed by one or more Secondary Licenses, and the
    +Covered Software is not Incompatible With Secondary Licenses, this
    +License permits You to additionally distribute such Covered Software
    +under the terms of such Secondary License(s), so that the recipient of
    +the Larger Work may, at their option, further distribute the Covered
    +Software under the terms of either this License or such Secondary
    +License(s).
    +
    +3.4. Notices
    +
    +You may not remove or alter the substance of any license notices
    +(including copyright notices, patent notices, disclaimers of warranty,
    +or limitations of liability) contained within the Source Code Form of
    +the Covered Software, except that You may alter any license notices to
    +the extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +You may choose to offer, and to charge a fee for, warranty, support,
    +indemnity or liability obligations to one or more recipients of Covered
    +Software. However, You may do so only on Your own behalf, and not on
    +behalf of any Contributor. You must make it absolutely clear that any
    +such warranty, support, indemnity, or liability obligation is offered by
    +You alone, and You hereby agree to indemnify every Contributor for any
    +liability incurred by such Contributor as a result of warranty, support,
    +indemnity or liability terms You offer. You may include additional
    +disclaimers of warranty and limitations of liability specific to any
    +jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +---------------------------------------------------
    +
    +If it is impossible for You to comply with any of the terms of this
    +License with respect to some or all of the Covered Software due to
    +statute, judicial order, or regulation then You must: (a) comply with
    +the terms of this License to the maximum extent possible; and (b)
    +describe the limitations and the code they affect. Such description must
    +be placed in a text file included with all distributions of the Covered
    +Software under this License. Except to the extent prohibited by statute
    +or regulation, such description must be sufficiently detailed for a
    +recipient of ordinary skill to be able to understand it.
    +
    +5. Termination
    +--------------
    +
    +5.1. The rights granted under this License will terminate automatically
    +if You fail to comply with any of its terms. However, if You become
    +compliant, then the rights granted under this License from a particular
    +Contributor are reinstated (a) provisionally, unless and until such
    +Contributor explicitly and finally terminates Your grants, and (b) on an
    +ongoing basis, if such Contributor fails to notify You of the
    +non-compliance by some reasonable means prior to 60 days after You have
    +come back into compliance. Moreover, Your grants from a particular
    +Contributor are reinstated on an ongoing basis if such Contributor
    +notifies You of the non-compliance by some reasonable means, this is the
    +first time You have received notice of non-compliance with this License
    +from such Contributor, and You become compliant prior to 30 days after
    +Your receipt of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +infringement claim (excluding declaratory judgment actions,
    +counter-claims, and cross-claims) alleging that a Contributor Version
    +directly or indirectly infringes any patent, then the rights granted to
    +You by any and all Contributors for the Covered Software under Section
    +2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all
    +end user license agreements (excluding distributors and resellers) which
    +have been validly granted by You or Your distributors under this License
    +prior to termination shall survive termination.
    +
    +************************************************************************
    +*                                                                      *
    +*  6. Disclaimer of Warranty                                           *
    +*  -------------------------                                           *
    +*                                                                      *
    +*  Covered Software is provided under this License on an "as is"       *
    +*  basis, without warranty of any kind, either expressed, implied, or  *
    +*  statutory, including, without limitation, warranties that the       *
    +*  Covered Software is free of defects, merchantable, fit for a        *
    +*  particular purpose or non-infringing. The entire risk as to the     *
    +*  quality and performance of the Covered Software is with You.        *
    +*  Should any Covered Software prove defective in any respect, You     *
    +*  (not any Contributor) assume the cost of any necessary servicing,   *
    +*  repair, or correction. This disclaimer of warranty constitutes an   *
    +*  essential part of this License. No use of any Covered Software is   *
    +*  authorized under this License except under this disclaimer.         *
    +*                                                                      *
    +************************************************************************
    +
    +************************************************************************
    +*                                                                      *
    +*  7. Limitation of Liability                                          *
    +*  --------------------------                                          *
    +*                                                                      *
    +*  Under no circumstances and under no legal theory, whether tort      *
    +*  (including negligence), contract, or otherwise, shall any           *
    +*  Contributor, or anyone who distributes Covered Software as          *
    +*  permitted above, be liable to You for any direct, indirect,         *
    +*  special, incidental, or consequential damages of any character      *
    +*  including, without limitation, damages for lost profits, loss of    *
    +*  goodwill, work stoppage, computer failure or malfunction, or any    *
    +*  and all other commercial damages or losses, even if such party      *
    +*  shall have been informed of the possibility of such damages. This   *
    +*  limitation of liability shall not apply to liability for death or   *
    +*  personal injury resulting from such party's negligence to the       *
    +*  extent applicable law prohibits such limitation. Some               *
    +*  jurisdictions do not allow the exclusion or limitation of           *
    +*  incidental or consequential damages, so this exclusion and          *
    +*  limitation may not apply to You.                                    *
    +*                                                                      *
    +************************************************************************
    +
    +8. Litigation
    +-------------
    +
    +Any litigation relating to this License may be brought only in the
    +courts of a jurisdiction where the defendant maintains its principal
    +place of business and such litigation shall be governed by laws of that
    +jurisdiction, without reference to its conflict-of-law provisions.
    +Nothing in this Section shall prevent a party's ability to bring
    +cross-claims or counter-claims.
    +
    +9. Miscellaneous
    +----------------
    +
    +This License represents the complete agreement concerning the subject
    +matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent
    +necessary to make it enforceable. Any law or regulation which provides
    +that the language of a contract shall be construed against the drafter
    +shall not be used to construe this License against a Contributor.
    +
    +10. Versions of the License
    +---------------------------
    +
    +10.1. New Versions
    +
    +Mozilla Foundation is the license steward. Except as provided in Section
    +10.3, no one other than the license steward has the right to modify or
    +publish new versions of this License. Each version will be given a
    +distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +You may distribute the Covered Software under the terms of the version
    +of the License under which You originally received the Covered Software,
    +or under the terms of any subsequent version published by the license
    +steward.
    +
    +10.3. Modified Versions
    +
    +If you create software not governed by this License, and you want to
    +create a new license for such software, you may create and use a
    +modified version of this License if you rename the license and remove
    +any references to the name of the license steward (except to note that
    +such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +Licenses
    +
    +If You choose to distribute Source Code Form that is Incompatible With
    +Secondary Licenses under the terms of this version of the License, the
    +notice described in Exhibit B of this License must be attached.
    +
    +Exhibit A - Source Code Form License Notice
    +-------------------------------------------
    +
    +  This Source Code Form is subject to the terms of the Mozilla Public
    +  License, v. 2.0. If a copy of the MPL was not distributed with this
    +  file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular
    +file, then You may include the notice in a location (such as a LICENSE
    +file in a relevant directory) where a recipient would be likely to look
    +for such a notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +---------------------------------------------------------
    +
    +  This Source Code Form is "Incompatible With Secondary Licenses", as
    +  defined by the Mozilla Public License, v. 2.0.
    +
    +
    +
    + +
    +newlib-extras +homepage + + +
    +
                            README for newlib-2.0.0 release
    +           (mostly cribbed from the README in the gdb-4.13 release)
    +
    +This is `newlib', a simple ANSI C library, math library, and collection
    +of board support packages.
    +
    +The newlib and libgloss subdirectories are a collection of software from
    +several sources, each wi6h their own copyright and license.  See the file
    +COPYING.NEWLIB for details.  The rest of the release tree is under either
    +the GNU GPL or LGPL licenses.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    +
    +
    +Unpacking and Installation -- quick overview
    +==========================
    +
    +When you unpack the newlib-2.0.0.tar.gz file, you'll find a directory
    +called `newlib-2.0.0', which contains:
    +
    +COPYING          config/          install-sh*      mpw-configure
    +COPYING.LIB      config-ml.in     libgloss/        mpw-install
    +COPYING.NEWLIB   config.guess*    mkinstalldirs*   newlib/
    +CYGNUS           config.sub*      move-if-change*  symlink-tree*
    +ChangeLog        configure*       mpw-README       texinfo/
    +Makefile.in      configure.in     mpw-build.in
    +README           etc/             mpw-config.in
    +
    +To build NEWLIB, you must follow the instructions in the section entitled
    +"Compiling NEWLIB".
    +
    +This will configure and build all the libraries and crt0 (if one exists).
    +If `configure' can't determine your host system type, specify one as its
    +argument, e.g., sun4 or sun4sol2.  NEWLIB is most often used in cross
    +environments.
    +
    +NOTE THAT YOU MUST HAVE ALREADY BUILT AND INSTALLED GCC and BINUTILS.
    +
    +
    +More Documentation
    +==================
    +
    +   Newlib documentation is available on the net via:
    +   http://sourceware.org/newlib/docs.html
    +
    +   All the documentation for NEWLIB comes as part of the machine-readable
    +distribution.  The documentation is written in Texinfo format, which is
    +a documentation system that uses a single source file to produce both
    +on-line information and a printed manual.  You can use one of the Info
    +formatting commands to create the on-line version of the documentation
    +and TeX (or `texi2roff') to typeset the printed version.
    +
    +   If you want to format these Info files yourself, you need one of the
    +Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
    +
    +   If you want to typeset and print copies of this manual, you need TeX,
    +a program to print its DVI output files, and `texinfo.tex', the Texinfo
    +definitions file.
    +
    +   TeX is a typesetting program; it does not print files directly, but
    +produces output files called DVI files.  To print a typeset document,
    +you need a program to print DVI files.  If your system has TeX
    +installed, chances are it has such a program.  The precise command to
    +use depends on your system; `lpr -d' is common; another (for PostScript
    +devices) is `dvips'.  The DVI print command may require a file name
    +without any extension or a `.dvi' extension.
    +
    +   TeX also requires a macro definitions file called `texinfo.tex'. 
    +This file tells TeX how to typeset a document written in Texinfo
    +format.  On its own, TeX cannot read, much less typeset a Texinfo file.
    +`texinfo.tex' is distributed with NEWLIB and is located in the
    +`newlib-VERSION-NUMBER/texinfo' directory.
    +
    +
    +
    +Compiling NEWLIB
    +================
    +
    +   To compile NEWLIB, you must build it in a directory separate from
    +the source directory.  If you want to run NEWLIB versions for several host 
    +or target machines, you need a different `newlib' compiled for each combination
    +of host and target.  `configure' is designed to make this easy by allowing 
    +you to generate each configuration in a separate subdirectory.
    +If your `make' program handles the `VPATH' feature correctly (like GNU `make')
    +running `make' in each of these directories builds the `newlib' libraries
    +specified there.
    +
    +   To build `newlib' in a specific directory, run `configure' with the
    +`--srcdir' option to specify where to find the source. (You also need
    +to specify a path to find `configure' itself from your working
    +directory.  If the path to `configure' would be the same as the
    +argument to `--srcdir', you can leave out the `--srcdir' option; it
    +will be assumed.)
    +
    +   For example, with version 2.0.0, you can build NEWLIB in a separate
    +directory for a Sun 4 cross m68k-aout environment like this:
    +
    +     cd newlib-2.0.0
    +     mkdir ../newlib-m68k-aout
    +     cd ../newlib-m68k-aout
    +     ../newlib-2.0.0/configure --host=sun4 --target=m68k-aout
    +     make
    +
    +   When `configure' builds a configuration using a remote source
    +directory, it creates a tree for the binaries with the same structure
    +(and using the same names) as the tree under the source directory.  In
    +the example, you'd find the Sun 4 library `libiberty.a' in the
    +directory `newlib-m68k-aout/libiberty', and NEWLIB itself in
    +`newlib-m68k-aout/newlib'.
    +
    +   When you run `make' to build a program or library, you must run it
    +in a configured directory--whatever directory you were in when you
    +called `configure' (or one of its subdirectories).
    +
    +   The `Makefile' that `configure' generates in each source directory
    +also runs recursively.  If you type `make' in a source directory such
    +as `newlib-2.0.0' (or in a separate configured directory configured with
    +`--srcdir=PATH/newlib-2.0.0'), you will build all the required libraries.
    +
    +   When you have multiple hosts or targets configured in separate
    +directories, you can run `make' on them in parallel (for example, if
    +they are NFS-mounted on each of the hosts); they will not interfere
    +with each other.
    +
    +
    +Specifying names for hosts and targets
    +======================================
    +
    +   The specifications used for hosts and targets in the `configure'
    +script are based on a three-part naming scheme, but some short
    +predefined aliases are also supported.  The full naming scheme encodes
    +three pieces of information in the following pattern:
    +
    +     ARCHITECTURE-VENDOR-OS
    +
    +   For example, you can use the alias `sun4' as a HOST argument or in a
    +`--target=TARGET' option.  The equivalent full name is
    +`sparc-sun-sunos4'.
    +
    +   The `configure' script accompanying NEWLIB does not provide any query
    +facility to list all supported host and target names or aliases. 
    +`configure' calls the Bourne shell script `config.sub' to map
    +abbreviations to full names; you can read the script, if you wish, or
    +you can use it to test your guesses on abbreviations--for example:
    +
    +     % sh config.sub sun4
    +     sparc-sun-sunos4.1.1
    +     % sh config.sub sun3
    +     m68k-sun-sunos4.1.1
    +     % sh config.sub decstation
    +     mips-dec-ultrix4.2
    +     % sh config.sub hp300bsd
    +     m68k-hp-bsd
    +     % sh config.sub i386v
    +     i386-pc-sysv
    +     % sh config.sub i786v
    +     Invalid configuration `i786v': machine `i786v' not recognized
    +
    +The Build, Host and Target Concepts in newlib
    +=============================================
    +
    +The build, host and target concepts are defined for gcc as follows:
    +
    +build: the platform on which gcc is built.
    +host: the platform on which gcc is run.
    +target: the platform for which gcc generates code.
    +
    +Since newlib is a library, the target concept does not apply to it, and the
    +build, host, and target options given to the top-level configure script must
    +be changed for newlib's use.
    +
    +The options are shifted according to these correspondences:
    +
    +gcc's build platform has no equivalent in newlib.
    +gcc's host platform is newlib's build platform.
    +gcc's target platform is newlib's host platform.
    +and as mentioned before, newlib has no concept of target.
    +
    +`configure' options
    +===================
    +
    +   Here is a summary of the `configure' options and arguments that are
    +most often useful for building NEWLIB.  `configure' also has several other
    +options not listed here.
    +
    +     configure [--help]
    +               [--prefix=DIR]
    +               [--srcdir=PATH]
    +               [--target=TARGET] HOST
    +
    +You may introduce options with a single `-' rather than `--' if you
    +prefer; but you may abbreviate option names if you use `--'.
    +
    +`--help'
    +     Display a quick summary of how to invoke `configure'.
    +
    +`--prefix=DIR'
    +     Configure the source to install programs and files in directory
    +     `DIR'.
    +
    +`--exec-prefix=DIR'
    +     Configure the source to install host-dependent files in directory
    +     `DIR'.
    +
    +`--srcdir=PATH'
    +     *Warning: using this option requires GNU `make', or another `make'
    +     that compatibly implements the `VPATH' feature.
    +     Use this option to make configurations in directories separate
    +     from the NEWLIB source directories.  Among other things, you can use
    +     this to build (or maintain) several configurations simultaneously,
    +     in separate directories.  `configure' writes configuration
    +     specific files in the current directory, but arranges for them to
    +     use the source in the directory PATH.  `configure' will create
    +     directories under the working directory in parallel to the source
    +     directories below PATH.
    +
    +`--norecursion'
    +     Configure only the directory level where `configure' is executed;
    +     do not propagate configuration to subdirectories.
    +
    +`--target=TARGET'
    +     Configure NEWLIB for running on the specified TARGET.
    +
    +     There is no convenient way to generate a list of all available
    +     targets.
    +
    +`HOST ...'
    +     Configure NEWLIB to be built using a cross compiler running on
    +     the specified HOST.
    +
    +     There is no convenient way to generate a list of all available
    +     hosts.
    +
    +To fit diverse usage models, NEWLIB supports a group of configuration
    +options so that library features can be turned on/off according to
    +target system's requirements.
    +
    +One feature can be enabled by specifying `--enable-FEATURE=yes' or
    +`--enable-FEATURE'.  Or it can be disable by `--enable-FEATURE=no' or
    +`--disable-FEATURE'.
    +
    +`--enable-newlib-io-pos-args'
    +     Enable printf-family positional arg support.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-io-c99-formats'
    +     Enable C99 support in IO functions like printf/scanf.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-register-fini'
    +     Enable finalization function registration using atexit.
    +     Disabled by default.
    +
    +`--enable-newlib-io-long-long'
    +     Enable long long type support in IO functions like printf/scanf.
    +     Disabled by default, but many hosts enable it in configure.host.
    +
    +`--enable-newlib-io-long-double'
    +     Enable long double type support in IO functions printf/scanf.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-mb'
    +     Enable multibyte support.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-encodings'
    +     Enable specific comma-separated list of bidirectional iconv
    +     encodings to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-from-encodings'
    +     Enable specific comma-separated list of \"from\" iconv encodings
    +     to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-to-encodings'
    +     Enable specific comma-separated list of \"to\" iconv encodings
    +     to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-external-ccs'
    +     Enable capabilities to load external CCS files for iconv.
    +     Disabled by default.
    +
    +`--disable-newlib-atexit-dynamic-alloc'
    +     Disable dynamic allocation of atexit entries.
    +     Most hosts and targets have it enabled in configure.host.
    +
    +`--enable-newlib-reent-small'
    +     Enable small reentrant struct support.
    +     Disabled by default.
    +
    +`--disable-newlib-fvwrite-in-streamio'
    +     NEWLIB implements the vector buffer mechanism to support stream IO
    +     buffering required by C standard.  This feature is possibly
    +     unnecessary for embedded systems which won't change file buffering
    +     with functions like `setbuf' or `setvbuf'.  The buffering mechanism
    +     still acts as default for STDIN/STDOUT/STDERR even if this option
    +     is specified.
    +     Enabled by default.
    +
    +`--disable-newlib-fseek-optimization'
    +     Disable fseek optimization.  It can decrease code size of application
    +     calling `fseek`.
    +     Enabled by default.
    +
    +`--disable-newlib-wide-orient'
    +     C99 states that each stream has an orientation, wide or byte.  This
    +     feature is possibly unnecessary for embedded systems which only do
    +     byte input/output operations on stream.  It can decrease code size
    +     by disable the feature.
    +     Enabled by default.
    +
    +`--enable-newlib-nano-malloc'
    +     NEWLIB has two implementations of malloc family's functions, one in
    +     `mallocr.c' and the other one in `nano-mallocr.c'.  This options
    +     enables the nano-malloc implementation, which is for small systems
    +     with very limited memory.  Note that this implementation does not
    +     support `--enable-malloc-debugging' any more.
    +     Disabled by default.
    +
    +`--disable-newlib-unbuf-stream-opt'
    +     NEWLIB does optimization when `fprintf to write only unbuffered unix
    +     file'.  It creates a temorary buffer to do the optimization that
    +     increases stack consumption by about `BUFSIZ' bytes.  This option
    +     disables the optimization and saves size of text and stack.
    +     Enabled by default.
    +
    +`--enable-multilib'
    +     Build many library versions.
    +     Enabled by default.
    +
    +`--enable-target-optspace'
    +     Optimize for space.
    +     Disabled by default.
    +
    +`--enable-malloc-debugging'
    +     Indicate malloc debugging requested.
    +     Disabled by default.
    +
    +`--enable-newlib-multithread'
    +     Enable support for multiple threads.
    +     Enabled by default.
    +
    +`--enable-newlib-iconv'
    +     Enable iconv library support.
    +     Disabled by default.
    +
    +`--enable-newlib-elix-level'
    +     Supply desired elix library level (1-4).  Please refer to HOWTO for
    +     more information about this option.
    +     Set to level 0 by default.
    +
    +`--disable-newlib-io-float'
    +     Disable printf/scanf family float support.
    +     Enabled by default.
    +
    +`--disable-newlib-supplied-syscalls'
    +     Disable newlib from supplying syscalls.
    +     Enabled by default.
    +
    +`--enable-lite-exit'
    +     Enable lite exit, a size-reduced implementation of exit that doesn't
    +     invoke clean-up functions such as _fini or global destructors.
    +     Disabled by default.
    +
    +Running the Testsuite
    +=====================
    +
    +To run newlib's testsuite, you'll need a site.exp in your home
    +directory which points dejagnu to the proper baseboards directory and
    +the proper exp file for your target.
    +
    +Before running make check-target-newlib, set the DEJAGNU environment
    +variable to point to ~/site.exp.
    +
    +Here is a sample site.exp:
    +
    +# Make sure we look in the right place for the board description files.
    +if ![info exists boards_dir] {
    +    set boards_dir {}
    +}
    +lappend boards_dir "your dejagnu/baseboards here"
    +
    +verbose "Global Config File: target_triplet is $target_triplet" 2
    +
    +global target_list
    +case "$target_triplet" in {
    +
    +    { "mips-*elf*" } {
    +	set target_list "mips-sim"
    +    }
    +
    +    default {
    +	set target_list { "unix" }
    +    }
    +}
    +
    +mips-sim refers to an exp file in the baseboards directory.  You'll
    +need to add the other targets you're testing to the case statement.
    +
    +Now type make check-target-newlib in the top-level build directory to
    +run the testsuite.
    +
    +Shared newlib
    +=============
    +
    +newlib uses libtool when it is being compiled natively (with
    +--target=i[34567]86-pc-linux-gnu) on an i[34567]86-pc-linux-gnu
    +host. This allows newlib to be compiled as a shared library.
    +
    +To configure newlib, do the following from your build directory:
    +
    +$(source_dir)/src/configure --with-newlib --prefix=$(install_dir)
    +
    +configure will recognize that host == target ==
    +i[34567]86-pc-linux-gnu, so it will tell newlib to compile itself using
    +libtool. By default, libtool will build shared and static versions of
    +newlib.
    +
    +To compile a program against shared newlib, do the following (where
    +target_install_dir = $(install_dir)/i[34567]86-pc-linux-gnu):
    +
    +gcc -nostdlib $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm -lgcc
    +
    +To run the program, make sure that $(target_install_dir)/lib is listed
    +in the LD_LIBRARY_PATH environment variable.
    +
    +To create a static binary linked against newlib, do the following:
    +
    +gcc -nostdlib -static $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm
    +
    +libtool can be instructed to produce only static libraries. To build
    +newlib as a static library only, do the following from your build
    +directory:
    +
    +$(source_dir)/src/configure --with-newlib --prefix=$(install_dir) --disable-shared
    +
    +Regenerating Configuration Files
    +================================
    +
    +At times you will need to make changes to configure.in and Makefile.am files.
    +This will mean that configure and Makefile.in files will need to be
    +regenerated.
    +
    +At the top level of newlib is the file: acinclude.m4.  This file contains
    +the definition of the NEWLIB_CONFIGURE macro which is used by all configure.in
    +files in newlib.  You will notice that each directory in newlib containing
    +a configure.in file also contains an aclocal.m4 file.  This file is
    +generated by issuing: aclocal -I${relative_path_to_toplevel_newlib_dir}
    +-I${relative_path_to_toplevel_src_dir}
    +The first relative directory is to access acinclude.m4.  The second relative
    +directory is to access libtool information in the top-level src directory.
    +
    +For example, to regenerate aclocal.m4 in newlib/libc/machine/arm:
    +
    +  aclocal -I ../../.. -I ../../../..
    +
    +Note that if the top level acinclude.m4 is altered, every aclocal.m4 file 
    +in newlib should be regenerated.
    +
    +If the aclocal.m4 file is regenerated due to a change in acinclude.m4 or
    +if a configure.in file is modified, the corresponding configure file in the 
    +directory must be regenerated using autoconf.  No parameters are necessary.
    +In the previous example, we would issue:
    +
    +  autoconf
    +
    +from the newlib/libc/machine/arm directory.
    +
    +If you have regenerated a configure file or if you have modified a Makefile.am
    +file, you will need to regenerate the appropriate Makefile.in file(s).
    +For newlib, automake is a bit trickier.  First of all, all Makefile.in
    +files in newlib (and libgloss) are generated using the --cygnus option
    +of automake.  
    +
    +Makefile.in files are generated from the nearest directory up the chain
    +which contains a configure.in file.  In most cases, this is the same
    +directory containing configure.in, but there are exceptions.
    +For example, the newlib/libc directory has a number of
    +subdirectories that do not contain their own configure.in files (e.g. stdio).
    +For these directories, you must issue the automake command from newlib/libc
    +which is the nearest parent directory that contains a configure.in.
    +When you issue the automake command, you specify the subdirectory for
    +the Makefile.in you are regenerating.  For example:
    +
    +   automake --cygnus stdio/Makefile stdlib/Makefile
    +
    +Note how multiple Makefile.in files can be created in the same step.  You
    +would not specify machine/Makefile or sys/Makefile in the previous example
    +because both of these subdirectories contain their own configure.in files.
    +One would change to each of these subdirectories and in turn issue:
    +
    +   automake --cygnus Makefile
    +
    +Let's say you create a new machine directory XXXX off of newlib/libc/machine.
    +After creating a new configure.in and Makefile.am file, you would issue:
    +
    +   aclocal -I ../../..
    +   autoconf
    +   automake --cygnus Makefile
    +
    +from newlib/libc/machine/XXXX
    +
    +It is strongly advised that you use an adequate version of autotools.
    +For this latest release, the following were used: autoconf 2.68, aclocal 1.11.6, and 
    +automake 1.11.6.
    +
    +Reporting Bugs
    +==============
    +
    +The correct address for reporting bugs found in NEWLIB is
    +"newlib@sourceware.org".  Please email all bug reports to that
    +address.  Please include the NEWLIB version number (e.g., newlib-2.0.0),
    +and how you configured it (e.g., "sun4 host and m68k-aout target").
    +Since NEWLIB supports many different configurations, it is important
    +that you be precise about this.
    +
    +Archives of the newlib mailing list are on-line, see
    +	http://sourceware.org/ml/newlib/
    +
    +
    +
    + +
    +NSBezierPath additions from Sean Patrick O'Brien +homepage + + +
    +
    Copyright 2008 MolokoCacao
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions 
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +NVidia Control X Extension Library +homepage + + +
    +
    /*
    + * Copyright (c) 2008 NVIDIA, Corporation
    + *
    + * Permission is hereby granted, free of charge, to any person obtaining a copy
    + * of this software and associated documentation files (the "Software"), to deal
    + * in the Software without restriction, including without limitation the rights
    + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    + * copies of the Software, and to permit persons to whom the Software is
    + * furnished to do so, subject to the following conditions:
    + *
    + * The above copyright notice and this permission notice (including the next
    + * paragraph) shall be included in all copies or substantial portions of the
    + * Software.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    + * SOFTWARE.
    + */
    +
    +
    + +
    +Oculus SDK for Windows +homepage + + +
    +
    Copyright © 2014-2017 Oculus VR, LLC. All rights reserved.
    +
    +
    + +
    +OpenH264 +homepage + + +
    +
    Copyright (c) 2013, Cisco Systems
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice, this
    +  list of conditions and the following disclaimer in the documentation and/or
    +  other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    + +
    +OpenMAX DL +homepage + + +
    +
    Use of this source code is governed by a BSD-style license that can be
    +found in the LICENSE file in the root of the source tree. All
    +contributing project authors may be found in the AUTHORS file in the
    +root of the source tree.
    +
    +The files were originally licensed by ARM Limited.
    +
    +The following files:
    +
    +    * dl/api/omxtypes.h
    +    * dl/sp/api/omxSP.h
    +
    +are licensed by Khronos:
    +
    +Copyright © 2005-2008 The Khronos Group Inc. All Rights Reserved. 
    +
    +These materials are protected by copyright laws and contain material 
    +proprietary to the Khronos Group, Inc.  You may use these materials 
    +for implementing Khronos specifications, without altering or removing 
    +any trademark, copyright or other notice from the specification.
    +
    +Khronos Group makes no, and expressly disclaims any, representations 
    +or warranties, express or implied, regarding these materials, including, 
    +without limitation, any implied warranties of merchantability or fitness 
    +for a particular purpose or non-infringement of any intellectual property. 
    +Khronos Group makes no, and expressly disclaims any, warranties, express 
    +or implied, regarding the correctness, accuracy, completeness, timeliness, 
    +and reliability of these materials. 
    +
    +Under no circumstances will the Khronos Group, or any of its Promoters, 
    +Contributors or Members or their respective partners, officers, directors, 
    +employees, agents or representatives be liable for any damages, whether 
    +direct, indirect, special or consequential damages for lost revenues, 
    +lost profits, or otherwise, arising from or in connection with these 
    +materials.
    +
    +Khronos and OpenMAX are trademarks of the Khronos Group Inc. 
    +
    +
    +
    + +
    +OpenVR SDK +homepage + + +
    +
    Copyright (c) 2015, Valve Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +1. Redistributions of source code must retain the above copyright notice, this
    +list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright notice,
    +this list of conditions and the following disclaimer in the documentation and/or
    +other materials provided with the distribution.
    +
    +3. Neither the name of the copyright holder nor the names of its contributors
    +may be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +opus +homepage + + +
    +
    Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
    +                    Jean-Marc Valin, Timothy B. Terriberry,
    +                    CSIRO, Gregory Maxwell, Mark Borgerding,
    +                    Erik de Castro Lopo
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of Internet Society, IETF or IETF Trust, nor the
    +names of specific contributors, may be used to endorse or promote
    +products derived from this software without specific prior written
    +permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Opus is subject to the royalty-free patent licenses which are
    +specified at:
    +
    +Xiph.Org Foundation:
    +https://datatracker.ietf.org/ipr/1524/
    +
    +Microsoft Corporation:
    +https://datatracker.ietf.org/ipr/1914/
    +
    +Broadcom Corporation:
    +https://datatracker.ietf.org/ipr/1526/
    +
    +
    +
    + +
    +OTS (OpenType Sanitizer) +homepage + + +
    +
    Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Paul Hsieh's SuperFastHash +homepage + + +
    +
    Paul Hsieh OLD BSD license
    +
    +Copyright (c) 2010, Paul Hsieh
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice, this
    +  list of conditions and the following disclaimer in the documentation and/or
    +  other materials provided with the distribution.
    +* Neither my name, Paul Hsieh, nor the names of any other contributors to the
    +  code use may not be used to endorse or promote products derived from this
    +  software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +PDFium +homepage + + +
    +
    // Copyright 2014 PDFium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Perfetto +homepage + + +
    +
    +
    +
    +
    + +
    +PLY (Python Lex-Yacc) +homepage + + +
    +
    PLY (Python Lex-Yacc)                   Version 3.4
    +
    +Copyright (C) 2001-2011,
    +David M. Beazley (Dabeaz LLC)
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.  
    +* Redistributions in binary form must reproduce the above copyright notice, 
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.  
    +* Neither the name of the David Beazley or Dabeaz LLC may be used to
    +  endorse or promote products derived from this software without
    +  specific prior written permission. 
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    + +
    +Polymer +homepage + + +
    +
    // Copyright (c) 2012 The Polymer Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Protocol Buffers +homepage + + +
    +
    This license applies to all parts of Protocol Buffers except the following:
    +
    +  - Atomicops support for generic gcc, located in
    +    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
    +    This file is copyrighted by Red Hat Inc.
    +
    +  - Atomicops support for AIX/POWER, located in
    +    src/google/protobuf/stubs/atomicops_internals_power.h.
    +    This file is copyrighted by Bloomberg Finance LP.
    +
    +Copyright 2014, Google Inc.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +
    + +
    +pyjson5 +homepage + + +
    +
    Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "{}"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright {yyyy} {name of copyright owner}
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +pylint +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year  name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +
    +
    + +
    +Quick Color Management System +homepage + + +
    +
    qcms
    +Copyright (C) 2009 Mozilla Corporation
    +Copyright (C) 1998-2007 Marti Maria
    +
    +Permission is hereby granted, free of charge, to any person obtaining 
    +a copy of this software and associated documentation files (the "Software"), 
    +to deal in the Software without restriction, including without limitation 
    +the rights to use, copy, modify, merge, publish, distribute, sublicense, 
    +and/or sell copies of the Software, and to permit persons to whom the Software 
    +is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in 
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
    +THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +re2 - an efficient, principled regular expression library +homepage + + +
    +
    // Copyright (c) 2009 The RE2 Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Recurrent neural network for audio noise reduction +homepage + + +
    +
    Copyright (c) 2017, Mozilla
    +Copyright (c) 2007-2017, Jean-Marc Valin
    +Copyright (c) 2005-2017, Xiph.Org Foundation
    +Copyright (c) 2003-2004, Mark Borgerding
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.Org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +sfntly +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +simplejson +homepage + + +
    +
    Copyright (c) 2006 Bob Ippolito
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +Skia +homepage + + +
    +
    // Copyright (c) 2011 Google Inc. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +--------------------------------------------------------------------------------
    +
    +
    +
    + +
    +SMHasher +homepage + + +
    +
    All MurmurHash source files are placed in the public domain.
    +
    +The license below applies to all other code in SMHasher:
    +
    +Copyright (c) 2011 Google, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +Snappy: A fast compressor/decompressor +homepage + + +
    +
    Copyright 2011, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +===
    +
    +Some of the benchmark data in testdata/ is licensed differently:
    +
    + - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and
    +   is licensed under the Creative Commons Attribution 3.0 license
    +   (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/
    +   for more information.
    +
    + - kppkn.gtb is taken from the Gaviota chess tablebase set, and
    +   is licensed under the MIT License. See
    +   https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1
    +   for more information.
    +
    + - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper
    +   “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA
    +   Replication Timing in _Drosophila_” by Federico Comoglio and Renato Paro,
    +   which is licensed under the CC-BY license. See
    +   http://www.ploscompbiol.org/static/license for more ifnormation.
    +
    + - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project
    +   Gutenberg. The first three have expired copyrights and are in the public
    +   domain; the latter does not have expired copyright, but is still in the
    +   public domain according to the license information
    +   (http://www.gutenberg.org/ebooks/53).
    +
    +
    +
    + +
    +Speech Dispatcher +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +
    +
    +
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations
    +below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it
    +becomes a de-facto standard.  To achieve this, non-free programs must
    +be allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control
    +compilation and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at least
    +    three years, to give the same user the materials specified in
    +    Subsection 6a, above, for a charge no more than the cost of
    +    performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply, and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License
    +may add an explicit geographical distribution limitation excluding those
    +countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +
    +
    +
    +
    +
    + +
    +SPIR-V Tools +homepage + + +
    +
    Copyright (c) 2015-2016 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
    +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
    +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
    +   https://www.khronos.org/registry/
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +
    + +
    +sqlite +homepage + + +
    +
    The author disclaims copyright to this source code.  In place of
    +a legal notice, here is a blessing:
    +
    +   May you do good and not evil.
    +   May you find forgiveness for yourself and forgive others.
    +   May you share freely, never taking more than you give.
    +
    +
    +
    + +
    +Strongtalk +homepage + + +
    +
    Copyright (c) 1994-2006 Sun Microsystems Inc.
    +All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +- Redistributions of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimer.
    +
    +- Redistribution in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of Sun Microsystems or the names of contributors may
    +be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Sudden Motion Sensor library +homepage + + +
    +
    SMSLib Sudden Motion Sensor Access Library
    +Copyright (c) 2010 Suitable Systems
    +All rights reserved.
    +
    +Developed by: Daniel Griscom
    +              Suitable Systems
    +              http://www.suitable.com
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the
    +"Software"), to deal with the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +- Redistributions of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimers.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimers in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the names of Suitable Systems nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this Software without specific prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
    +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
    +
    +For more information about SMSLib, see
    +   <http://www.suitable.com/tools/smslib.html>
    +or contact
    +   Daniel Griscom
    +   Suitable Systems
    +   1 Centre Street, Suite 204
    +   Wakefield, MA 01880
    +   (781) 665-0053
    +
    +
    +
    + +
    +SwiftShader +homepage + + +
    +
    
    +                                 Apache License
    
    +                           Version 2.0, January 2004
    
    +                        http://www.apache.org/licenses/
    
    +
    
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    
    +
    
    +   1. Definitions.
    
    +
    
    +      "License" shall mean the terms and conditions for use, reproduction,
    
    +      and distribution as defined by Sections 1 through 9 of this document.
    
    +
    
    +      "Licensor" shall mean the copyright owner or entity authorized by
    
    +      the copyright owner that is granting the License.
    
    +
    
    +      "Legal Entity" shall mean the union of the acting entity and all
    
    +      other entities that control, are controlled by, or are under common
    
    +      control with that entity. For the purposes of this definition,
    
    +      "control" means (i) the power, direct or indirect, to cause the
    
    +      direction or management of such entity, whether by contract or
    
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    
    +
    
    +      "You" (or "Your") shall mean an individual or Legal Entity
    
    +      exercising permissions granted by this License.
    
    +
    
    +      "Source" form shall mean the preferred form for making modifications,
    
    +      including but not limited to software source code, documentation
    
    +      source, and configuration files.
    
    +
    
    +      "Object" form shall mean any form resulting from mechanical
    
    +      transformation or translation of a Source form, including but
    
    +      not limited to compiled object code, generated documentation,
    
    +      and conversions to other media types.
    
    +
    
    +      "Work" shall mean the work of authorship, whether in Source or
    
    +      Object form, made available under the License, as indicated by a
    
    +      copyright notice that is included in or attached to the work
    
    +      (an example is provided in the Appendix below).
    
    +
    
    +      "Derivative Works" shall mean any work, whether in Source or Object
    
    +      form, that is based on (or derived from) the Work and for which the
    
    +      editorial revisions, annotations, elaborations, or other modifications
    
    +      represent, as a whole, an original work of authorship. For the purposes
    
    +      of this License, Derivative Works shall not include works that remain
    
    +      separable from, or merely link (or bind by name) to the interfaces of,
    
    +      the Work and Derivative Works thereof.
    
    +
    
    +      "Contribution" shall mean any work of authorship, including
    
    +      the original version of the Work and any modifications or additions
    
    +      to that Work or Derivative Works thereof, that is intentionally
    
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    
    +      or by an individual or Legal Entity authorized to submit on behalf of
    
    +      the copyright owner. For the purposes of this definition, "submitted"
    
    +      means any form of electronic, verbal, or written communication sent
    
    +      to the Licensor or its representatives, including but not limited to
    
    +      communication on electronic mailing lists, source code control systems,
    
    +      and issue tracking systems that are managed by, or on behalf of, the
    
    +      Licensor for the purpose of discussing and improving the Work, but
    
    +      excluding communication that is conspicuously marked or otherwise
    
    +      designated in writing by the copyright owner as "Not a Contribution."
    
    +
    
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    
    +      on behalf of whom a Contribution has been received by Licensor and
    
    +      subsequently incorporated within the Work.
    
    +
    
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    
    +      this License, each Contributor hereby grants to You a perpetual,
    
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    
    +      copyright license to reproduce, prepare Derivative Works of,
    
    +      publicly display, publicly perform, sublicense, and distribute the
    
    +      Work and such Derivative Works in Source or Object form.
    
    +
    
    +   3. Grant of Patent License. Subject to the terms and conditions of
    
    +      this License, each Contributor hereby grants to You a perpetual,
    
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    
    +      (except as stated in this section) patent license to make, have made,
    
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    
    +      where such license applies only to those patent claims licensable
    
    +      by such Contributor that are necessarily infringed by their
    
    +      Contribution(s) alone or by combination of their Contribution(s)
    
    +      with the Work to which such Contribution(s) was submitted. If You
    
    +      institute patent litigation against any entity (including a
    
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    
    +      or a Contribution incorporated within the Work constitutes direct
    
    +      or contributory patent infringement, then any patent licenses
    
    +      granted to You under this License for that Work shall terminate
    
    +      as of the date such litigation is filed.
    
    +
    
    +   4. Redistribution. You may reproduce and distribute copies of the
    
    +      Work or Derivative Works thereof in any medium, with or without
    
    +      modifications, and in Source or Object form, provided that You
    
    +      meet the following conditions:
    
    +
    
    +      (a) You must give any other recipients of the Work or
    
    +          Derivative Works a copy of this License; and
    
    +
    
    +      (b) You must cause any modified files to carry prominent notices
    
    +          stating that You changed the files; and
    
    +
    
    +      (c) You must retain, in the Source form of any Derivative Works
    
    +          that You distribute, all copyright, patent, trademark, and
    
    +          attribution notices from the Source form of the Work,
    
    +          excluding those notices that do not pertain to any part of
    
    +          the Derivative Works; and
    
    +
    
    +      (d) If the Work includes a "NOTICE" text file as part of its
    
    +          distribution, then any Derivative Works that You distribute must
    
    +          include a readable copy of the attribution notices contained
    
    +          within such NOTICE file, excluding those notices that do not
    
    +          pertain to any part of the Derivative Works, in at least one
    
    +          of the following places: within a NOTICE text file distributed
    
    +          as part of the Derivative Works; within the Source form or
    
    +          documentation, if provided along with the Derivative Works; or,
    
    +          within a display generated by the Derivative Works, if and
    
    +          wherever such third-party notices normally appear. The contents
    
    +          of the NOTICE file are for informational purposes only and
    
    +          do not modify the License. You may add Your own attribution
    
    +          notices within Derivative Works that You distribute, alongside
    
    +          or as an addendum to the NOTICE text from the Work, provided
    
    +          that such additional attribution notices cannot be construed
    
    +          as modifying the License.
    
    +
    
    +      You may add Your own copyright statement to Your modifications and
    
    +      may provide additional or different license terms and conditions
    
    +      for use, reproduction, or distribution of Your modifications, or
    
    +      for any such Derivative Works as a whole, provided Your use,
    
    +      reproduction, and distribution of the Work otherwise complies with
    
    +      the conditions stated in this License.
    
    +
    
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    
    +      any Contribution intentionally submitted for inclusion in the Work
    
    +      by You to the Licensor shall be under the terms and conditions of
    
    +      this License, without any additional terms or conditions.
    
    +      Notwithstanding the above, nothing herein shall supersede or modify
    
    +      the terms of any separate license agreement you may have executed
    
    +      with Licensor regarding such Contributions.
    
    +
    
    +   6. Trademarks. This License does not grant permission to use the trade
    
    +      names, trademarks, service marks, or product names of the Licensor,
    
    +      except as required for reasonable and customary use in describing the
    
    +      origin of the Work and reproducing the content of the NOTICE file.
    
    +
    
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    
    +      agreed to in writing, Licensor provides the Work (and each
    
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    
    +      implied, including, without limitation, any warranties or conditions
    
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    
    +      appropriateness of using or redistributing the Work and assume any
    
    +      risks associated with Your exercise of permissions under this License.
    
    +
    
    +   8. Limitation of Liability. In no event and under no legal theory,
    
    +      whether in tort (including negligence), contract, or otherwise,
    
    +      unless required by applicable law (such as deliberate and grossly
    
    +      negligent acts) or agreed to in writing, shall any Contributor be
    
    +      liable to You for damages, including any direct, indirect, special,
    
    +      incidental, or consequential damages of any character arising as a
    
    +      result of this License or out of the use or inability to use the
    
    +      Work (including but not limited to damages for loss of goodwill,
    
    +      work stoppage, computer failure or malfunction, or any and all
    
    +      other commercial damages or losses), even if such Contributor
    
    +      has been advised of the possibility of such damages.
    
    +
    
    +   9. Accepting Warranty or Additional Liability. While redistributing
    
    +      the Work or Derivative Works thereof, You may choose to offer,
    
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    
    +      or other liability obligations and/or rights consistent with this
    
    +      License. However, in accepting such obligations, You may act only
    
    +      on Your own behalf and on Your sole responsibility, not on behalf
    
    +      of any other Contributor, and only if You agree to indemnify,
    
    +      defend, and hold each Contributor harmless for any liability
    
    +      incurred by, or claims asserted against, such Contributor by reason
    
    +      of your accepting any such warranty or additional liability.
    
    +
    
    +   END OF TERMS AND CONDITIONS
    
    +
    
    +   APPENDIX: How to apply the Apache License to your work.
    
    +
    
    +      To apply the Apache License to your work, attach the following
    
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    
    +      replaced with your own identifying information. (Don't include
    
    +      the brackets!)  The text should be enclosed in the appropriate
    
    +      comment syntax for the file format. We also recommend that a
    
    +      file or class name and description of purpose be included on the
    
    +      same "printed page" as the copyright notice for easier
    
    +      identification within third-party archives.
    
    +
    
    +   Copyright [yyyy] [name of copyright owner]
    
    +
    
    +   Licensed under the Apache License, Version 2.0 (the "License");
    
    +   you may not use this file except in compliance with the License.
    
    +   You may obtain a copy of the License at
    
    +
    
    +       http://www.apache.org/licenses/LICENSE-2.0
    
    +
    
    +   Unless required by applicable law or agreed to in writing, software
    
    +   distributed under the License is distributed on an "AS IS" BASIS,
    
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    
    +   See the License for the specific language governing permissions and
    
    +   limitations under the License.
    
    +
    +
    +
    + +
    +tcmalloc +homepage + + +
    +
    // Copyright (c) 2005, Google Inc.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//     * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//     * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//     * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +test_fonts +homepage + + +
    +
    The SIL OPEN FONT LICENSE applies to the following files:
    +Gelasio-Bold.ttf
    +Gelasio-BoldItalic.ttf
    +Gelasio-Italic.ttf
    +Gelasio-Regular.ttf
    +Lohit-Devanagari.ttf
    +Lohit-Gurmukhi.ttf
    +Lohit-Tamil.ttf
    +
    +
    +Copyright 2011-13 Lohit Fonts Project contributors
    +  <http://fedorahosted.org/lohit>
    +
    +This Font Software is licensed under the SIL Open Font License, Version 1.1.
    +This license is copied below, and is also available with a FAQ at:
    +http://scripts.sil.org/OFL
    +
    +
    +-----------------------------------------------------------
    +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    +-----------------------------------------------------------
    +
    +PREAMBLE
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    +development of collaborative font projects, to support the font creation
    +efforts of academic and linguistic communities, and to provide a free and
    +open framework in which fonts may be shared and improved in partnership
    +with others.
    +
    +The OFL allows the licensed fonts to be used, studied, modified and
    +redistributed freely as long as they are not sold by themselves. The
    +fonts, including any derivative works, can be bundled, embedded,
    +redistributed and/or sold with any software provided that any reserved
    +names are not used by derivative works. The fonts and derivatives,
    +however, cannot be released under any other type of license. The
    +requirement for fonts to remain under this license does not apply
    +to any document created using the fonts or their derivatives.
    +
    +DEFINITIONS
    +"Font Software" refers to the set of files released by the Copyright
    +Holder(s) under this license and clearly marked as such. This may
    +include source files, build scripts and documentation.
    +
    +"Reserved Font Name" refers to any names specified as such after the
    +copyright statement(s).
    +
    +"Original Version" refers to the collection of Font Software components as
    +distributed by the Copyright Holder(s).
    +
    +"Modified Version" refers to any derivative made by adding to, deleting,
    +or substituting -- in part or in whole -- any of the components of the
    +Original Version, by changing formats or by porting the Font Software to a
    +new environment.
    +
    +"Author" refers to any designer, engineer, programmer, technical
    +writer or other person who contributed to the Font Software.
    +
    +PERMISSION & CONDITIONS
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Font Software, to use, study, copy, merge, embed, modify,
    +redistribute, and sell modified and unmodified copies of the Font
    +Software, subject to the following conditions:
    +
    +1) Neither the Font Software nor any of its individual components,
    +in Original or Modified Versions, may be sold by itself.
    +
    +2) Original or Modified Versions of the Font Software may be bundled,
    +redistributed and/or sold with any software, provided that each copy
    +contains the above copyright notice and this license. These can be
    +included either as stand-alone text files, human-readable headers or
    +in the appropriate machine-readable metadata fields within text or
    +binary files as long as those fields can be easily viewed by the user.
    +
    +3) No Modified Version of the Font Software may use the Reserved Font
    +Name(s) unless explicit written permission is granted by the corresponding
    +Copyright Holder. This restriction only applies to the primary font name as
    +presented to the users.
    +
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +Software shall not be used to promote, endorse or advertise any
    +Modified Version, except to acknowledge the contribution(s) of the
    +Copyright Holder(s) and the Author(s) or with their explicit written
    +permission.
    +
    +5) The Font Software, modified or unmodified, in part or in whole,
    +must be distributed entirely under this license, and must not be
    +distributed under any other license. The requirement for fonts to
    +remain under this license does not apply to any document created
    +using the Font Software.
    +
    +TERMINATION
    +This license becomes null and void if any of the above conditions are
    +not met.
    +
    +DISCLAIMER
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +
    +--------------------------------------------------------------------------------
    +The GPL v2 license applies to the following files
    +Garuda.ttf
    +MuktiNarrow.ttf
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) 19yy  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) 19yy name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +--------------------------------------------------------------------------------
    +The Vera Bitstream License applies to the following files:
    +DejaVuSans-Bold.ttf
    +DejaVuSans.ttf
    +
    +
    +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
    +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
    +
    +
    +Bitstream Vera Fonts Copyright
    +------------------------------
    +
    +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
    +a trademark of Bitstream, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of the fonts accompanying this license ("Fonts") and associated
    +documentation files (the "Font Software"), to reproduce and distribute the
    +Font Software, including without limitation the rights to use, copy, merge,
    +publish, distribute, and/or sell copies of the Font Software, and to permit
    +persons to whom the Font Software is furnished to do so, subject to the
    +following conditions:
    +
    +The above copyright and trademark notices and this permission notice shall
    +be included in all copies of one or more of the Font Software typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in particular
    +the designs of glyphs or characters in the Fonts may be modified and
    +additional glyphs or characters may be added to the Fonts, only if the fonts
    +are renamed to names not containing either the words "Bitstream" or the word
    +"Vera".
    +
    +This License becomes null and void to the extent applicable to Fonts or Font
    +Software that has been modified and is distributed under the "Bitstream
    +Vera" names.
    +
    +The Font Software may be sold as part of a larger software package but no
    +copy of one or more of the Font Software typefaces may be sold by itself.
    +
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
    +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
    +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
    +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
    +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
    +FONT SOFTWARE.
    +
    +Except as contained in this notice, the names of Gnome, the Gnome
    +Foundation, and Bitstream Inc., shall not be used in advertising or
    +otherwise to promote the sale, use or other dealings in this Font Software
    +without prior written authorization from the Gnome Foundation or Bitstream
    +Inc., respectively. For further information, contact: fonts at gnome dot
    +org.
    +
    +Arev Fonts Copyright
    +------------------------------
    +
    +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the fonts accompanying this license ("Fonts") and
    +associated documentation files (the "Font Software"), to reproduce
    +and distribute the modifications to the Bitstream Vera Font Software,
    +including without limitation the rights to use, copy, merge, publish,
    +distribute, and/or sell copies of the Font Software, and to permit
    +persons to whom the Font Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright and trademark notices and this permission notice
    +shall be included in all copies of one or more of the Font Software
    +typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in
    +particular the designs of glyphs or characters in the Fonts may be
    +modified and additional glyphs or characters may be added to the
    +Fonts, only if the fonts are renamed to names not containing either
    +the words "Tavmjong Bah" or the word "Arev".
    +
    +This License becomes null and void to the extent applicable to Fonts
    +or Font Software that has been modified and is distributed under the
    +"Tavmjong Bah Arev" names.
    +
    +The Font Software may be sold as part of a larger software package but
    +no copy of one or more of the Font Software typefaces may be sold by
    +itself.
    +
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
    +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +Except as contained in this notice, the name of Tavmjong Bah shall not
    +be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Font Software without prior written authorization
    +from Tavmjong Bah. For further information, contact: tavmjong @ free
    +. fr.
    +
    +TeX Gyre DJV Math
    +-----------------
    +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
    +
    +Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
    +(on behalf of TeX users groups) are in public domain.
    +
    +Letters imported from Euler Fraktur from AMSfonts are (c) American
    +Mathematical Society (see below).
    +Bitstream Vera Fonts Copyright
    +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
    +is a trademark of Bitstream, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of the fonts accompanying this license (“Fonts”) and associated
    +documentation
    +files (the “Font Software”), to reproduce and distribute the Font Software,
    +including without limitation the rights to use, copy, merge, publish,
    +distribute,
    +and/or sell copies of the Font Software, and to permit persons  to whom
    +the Font Software is furnished to do so, subject to the following
    +conditions:
    +
    +The above copyright and trademark notices and this permission notice
    +shall be
    +included in all copies of one or more of the Font Software typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in particular
    +the designs of glyphs or characters in the Fonts may be modified and
    +additional
    +glyphs or characters may be added to the Fonts, only if the fonts are
    +renamed
    +to names not containing either the words “Bitstream” or the word “Vera”.
    +
    +This License becomes null and void to the extent applicable to Fonts or
    +Font Software
    +that has been modified and is distributed under the “Bitstream Vera”
    +names.
    +
    +The Font Software may be sold as part of a larger software package but
    +no copy
    +of one or more of the Font Software typefaces may be sold by itself.
    +
    +THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
    +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
    +FOUNDATION
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
    +SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
    +ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
    +INABILITY TO USE
    +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
    +Except as contained in this notice, the names of GNOME, the GNOME
    +Foundation,
    +and Bitstream Inc., shall not be used in advertising or otherwise to promote
    +the sale, use or other dealings in this Font Software without prior written
    +authorization from the GNOME Foundation or Bitstream Inc., respectively.
    +For further information, contact: fonts at gnome dot org.
    +
    +AMSFonts (v. 2.2) copyright
    +
    +The PostScript Type 1 implementation of the AMSFonts produced by and
    +previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
    +available for general use. This has been accomplished through the
    +cooperation
    +of a consortium of scientific publishers with Blue Sky Research and Y&Y.
    +Members of this consortium include:
    +
    +Elsevier Science IBM Corporation Society for Industrial and Applied
    +Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
    +
    +In order to assure the authenticity of these fonts, copyright will be
    +held by
    +the American Mathematical Society. This is not meant to restrict in any way
    +the legitimate use of the fonts, such as (but not limited to) electronic
    +distribution of documents containing these fonts, inclusion of these fonts
    +into other public domain or commercial font collections or computer
    +applications, use of the outline data to create derivative fonts and/or
    +faces, etc. However, the AMS does require that the AMS copyright notice be
    +removed from any derivative versions of the fonts which have been altered in
    +any way. In addition, to ensure the fidelity of TeX documents using Computer
    +Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
    +has requested that any alterations which yield different font metrics be
    +given a different name.
    +
    +$Id$
    +--------------------------------------------------------------------------------
    +The SIL OPEN FONT LICENSE for Noto applies to the following files:
    +NotoSansKhmer-Regular.ttf
    +
    +This Font Software is licensed under the SIL Open Font License,
    +Version 1.1.
    +
    +This license is copied below, and is also available with a FAQ at:
    +http://scripts.sil.org/OFL
    +
    +-----------------------------------------------------------
    +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    +-----------------------------------------------------------
    +
    +PREAMBLE
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    +development of collaborative font projects, to support the font
    +creation efforts of academic and linguistic communities, and to
    +provide a free and open framework in which fonts may be shared and
    +improved in partnership with others.
    +
    +The OFL allows the licensed fonts to be used, studied, modified and
    +redistributed freely as long as they are not sold by themselves. The
    +fonts, including any derivative works, can be bundled, embedded,
    +redistributed and/or sold with any software provided that any reserved
    +names are not used by derivative works. The fonts and derivatives,
    +however, cannot be released under any other type of license. The
    +requirement for fonts to remain under this license does not apply to
    +any document created using the fonts or their derivatives.
    +
    +DEFINITIONS
    +"Font Software" refers to the set of files released by the Copyright
    +Holder(s) under this license and clearly marked as such. This may
    +include source files, build scripts and documentation.
    +
    +"Reserved Font Name" refers to any names specified as such after the
    +copyright statement(s).
    +
    +"Original Version" refers to the collection of Font Software
    +components as distributed by the Copyright Holder(s).
    +
    +"Modified Version" refers to any derivative made by adding to,
    +deleting, or substituting -- in part or in whole -- any of the
    +components of the Original Version, by changing formats or by porting
    +the Font Software to a new environment.
    +
    +"Author" refers to any designer, engineer, programmer, technical
    +writer or other person who contributed to the Font Software.
    +
    +PERMISSION & CONDITIONS
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Font Software, to use, study, copy, merge, embed,
    +modify, redistribute, and sell modified and unmodified copies of the
    +Font Software, subject to the following conditions:
    +
    +1) Neither the Font Software nor any of its individual components, in
    +Original or Modified Versions, may be sold by itself.
    +
    +2) Original or Modified Versions of the Font Software may be bundled,
    +redistributed and/or sold with any software, provided that each copy
    +contains the above copyright notice and this license. These can be
    +included either as stand-alone text files, human-readable headers or
    +in the appropriate machine-readable metadata fields within text or
    +binary files as long as those fields can be easily viewed by the user.
    +
    +3) No Modified Version of the Font Software may use the Reserved Font
    +Name(s) unless explicit written permission is granted by the
    +corresponding Copyright Holder. This restriction only applies to the
    +primary font name as presented to the users.
    +
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +Software shall not be used to promote, endorse or advertise any
    +Modified Version, except to acknowledge the contribution(s) of the
    +Copyright Holder(s) and the Author(s) or with their explicit written
    +permission.
    +
    +5) The Font Software, modified or unmodified, in part or in whole,
    +must be distributed entirely under this license, and must not be
    +distributed under any other license. The requirement for fonts to
    +remain under this license does not apply to any document created using
    +the Font Software.
    +
    +TERMINATION
    +This license becomes null and void if any of the above conditions are
    +not met.
    +
    +DISCLAIMER
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +
    +--------------------------------------------------------------------------------
    +The Apache License applies to the following files
    +Arimo-Bold.ttf
    +Arimo-BoldItalic.ttf
    +Arimo-Italic.ttf
    +Arimo-Regular.ttf
    +Cousine-Bold.ttf
    +Cousine-BoldItalic.ttf
    +Cousine-Italic.ttf
    +Cousine-Regular.ttf
    +Tinos-Bold.ttf
    +Tinos-BoldItalic.ttf
    +Tinos-Italic.ttf
    +Tinos-Regular.ttf
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +--------------------------------------------------------------------------------
    +The public domain/Creative Commons Zero license applies to the following files
    +Ahem.ttf
    +
    +The Ahem font in this directory belongs to the public domain. In
    +jurisdictions that do not recognize public domain ownership of these
    +files, the following Creative Commons Zero declaration applies:
    +
    +<http://labs.creativecommons.org/licenses/zero-waive/1.0/us/legalcode>
    +
    +which is quoted below:
    +
    + The person who has associated a work with this document (the "Work")
    + affirms that he or she (the "Affirmer") is the/an author or owner of
    + the Work. The Work may be any work of authorship, including a
    + database.
    +
    + The Affirmer hereby fully, permanently and irrevocably waives and
    + relinquishes all of her or his copyright and related or neighboring
    + legal rights in the Work available under any federal or state law,
    + treaty or contract, including but not limited to moral rights,
    + publicity and privacy rights, rights protecting against unfair
    + competition and any rights protecting the extraction, dissemination
    + and reuse of data, whether such rights are present or future, vested
    + or contingent (the "Waiver"). The Affirmer makes the Waiver for the
    + benefit of the public at large and to the detriment of the Affirmer's
    + heirs or successors.
    +
    + The Affirmer understands and intends that the Waiver has the effect
    + of eliminating and entirely removing from the Affirmer's control all
    + the copyright and related or neighboring legal rights previously held
    + by the Affirmer in the Work, to that extent making the Work freely
    + available to the public for any and all uses and purposes without
    + restriction of any kind, including commercial use and uses in media
    + and formats or by methods that have not yet been invented or
    + conceived. Should the Waiver for any reason be judged legally
    + ineffective in any jurisdiction, the Affirmer hereby grants a free,
    + full, permanent, irrevocable, nonexclusive and worldwide license for
    + all her or his copyright and related or neighboring legal rights in
    + the Work.
    +
    +
    +--------------------------------------------------------------------------------
    +The public domain license applies to the following files
    +GardinerModBug.ttf
    +GardinerModCat.ttf
    +
    +In lieu of a licence Fonts in this site are offered free for any use; they may be installed, embedded, opened, edited,
    +modified, regenerated, posted, packaged and redistributed. George Douros
    +
    +
    +
    + +
    +The Chromium Project +homepage + + +
    +
    // Copyright 2015 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +The USB ID Repository +homepage + + +
    +
    Copyright (c) 2012, Linux USB Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
    +
    +o Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +
    +o Redistributions in binary form must reproduce the above copyright
    +  notice, this list of conditions and the following disclaimer in the
    +  documentation and/or other materials provided with the distribution.
    +
    +o Neither the name of the Linux USB Project nor the names of its
    +  contributors may be used to endorse or promote products derived from
    +  this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +tlslite +homepage + + +
    +
    +TLS Lite includes code from different sources. All code is either dedicated to
    +the public domain by its authors, or available under a BSD-style license. In
    +particular:
    +
    +- 
    +
    +Code written by Trevor Perrin, Kees Bos, Sam Rushing, Dimitris Moraitis,
    +Marcelo Fernandez, Martin von Loewis, Dave Baggett, and Yngve Pettersen is 
    +available under the following terms:
    +
    +This is free and unencumbered software released into the public domain.
    +
    +Anyone is free to copy, modify, publish, use, compile, sell, or distribute
    +this software, either in source code form or as a compiled binary, for any
    +purpose, commercial or non-commercial, and by any means.
    +
    +In jurisdictions that recognize copyright laws, the author or authors of this
    +software dedicate any and all copyright interest in the software to the public
    +domain. We make this dedication for the benefit of the public at large and to
    +the detriment of our heirs and successors. We intend this dedication to be an
    +overt act of relinquishment in perpetuity of all present and future rights to
    +this software under copyright law.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +-
    +
    +Code written by Bram Cohen (rijndael.py) was dedicated to the public domain by
    +its author. See rijndael.py for details.
    +
    +-
    +
    +Code written by Google is available under the following terms:
    +
    +Copyright (c) 2008, The Chromium Authors 
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    + * Redistributions of source code must retain the above copyright notice, this
    +   list of conditions and the following disclaimer.
    +
    + * Redistributions in binary form must reproduce the above copyright notice,
    +   this list of conditions and the following disclaimer in the documentation
    +   and/or other materials provided with the distribution.
    +
    + * Neither the name of the Google Inc. nor the names of its contributors may
    +   be used to endorse or promote products derived from this software without
    +   specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +UnRAR source for decompressing .RAR and other files. +homepage + + +
    +
     ******    *****   ******   UnRAR - free utility for RAR archives
    + **   **  **   **  **   **  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + ******   *******  ******    License for use and distribution of
    + **   **  **   **  **   **   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + **   **  **   **  **   **         FREE portable version
    +                                   ~~~~~~~~~~~~~~~~~~~~~
    +
    +      The source code of UnRAR utility is freeware. This means:
    +
    +   1. All copyrights to RAR and the utility UnRAR are exclusively
    +      owned by the author - Alexander Roshal.
    +
    +   2. UnRAR source code may be used in any software to handle
    +      RAR archives without limitations free of charge, but cannot be
    +      used to develop RAR (WinRAR) compatible archiver and to
    +      re-create RAR compression algorithm, which is proprietary.
    +      Distribution of modified UnRAR source code in separate form
    +      or as a part of other software is permitted, provided that
    +      full text of this paragraph, starting from "UnRAR source code"
    +      words, is included in license, or in documentation if license
    +      is not available, and in source code comments of resulting package.
    +
    +   3. The UnRAR utility may be freely distributed. It is allowed
    +      to distribute UnRAR inside of other software packages.
    +
    +   4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS".
    +      NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.  YOU USE AT 
    +      YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, 
    +      DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING
    +      OR MISUSING THIS SOFTWARE.
    +
    +   5. Installing and using the UnRAR utility signifies acceptance of
    +      these terms and conditions of the license.
    +
    +   6. If you don't agree with terms of the license you must remove
    +      UnRAR files from your storage devices and cease to use the
    +      utility.
    +
    +      Thank you for your interest in RAR and UnRAR.
    +
    +
    +                                            Alexander L. Roshal
    +
    +
    +
    + +
    +url_parse +homepage + + +
    +
    Copyright 2007, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------------------
    +
    +The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
    +licensed separately as follows:
    +
    +The contents of this file are subject to the Mozilla Public License Version
    +1.1 (the "License"); you may not use this file except in compliance with
    +the License. You may obtain a copy of the License at
    +http://www.mozilla.org/MPL/
    +
    +Software distributed under the License is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    +for the specific language governing rights and limitations under the
    +License.
    +
    +The Original Code is mozilla.org code.
    +
    +The Initial Developer of the Original Code is
    +Netscape Communications Corporation.
    +Portions created by the Initial Developer are Copyright (C) 1998
    +the Initial Developer. All Rights Reserved.
    +
    +Contributor(s):
    +  Darin Fisher (original author)
    +
    +Alternatively, the contents of this file may be used under the terms of
    +either the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    +in which case the provisions of the GPL or the LGPL are applicable instead
    +of those above. If you wish to allow use of your version of this file only
    +under the terms of either the GPL or the LGPL, and not to allow others to
    +use your version of this file under the terms of the MPL, indicate your
    +decision by deleting the provisions above and replace them with the notice
    +and other provisions required by the GPL or the LGPL. If you do not delete
    +the provisions above, a recipient may use your version of this file under
    +the terms of any one of the MPL, the GPL or the LGPL.
    +
    +
    +
    + +
    +usrsctp +homepage + + +
    +
    (Copied from the COPYRIGHT file of
    +https://code.google.com/p/sctp-refimpl/source/browse/trunk/COPYRIGHT)
    +--------------------------------------------------------------------------------
    +
    +Copyright (c) 2001, 2002 Cisco Systems, Inc.
    +Copyright (c) 2002-12 Randall R. Stewart
    +Copyright (c) 2002-12 Michael Tuexen
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +
    +
    + +
    +v4l-utils +homepage + + +
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +		       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +     51 Franklin Street, Suite 500, Boston, MA  02110-1335  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations
    +below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +^L
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it
    +becomes a de-facto standard.  To achieve this, non-free programs must
    +be allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +^L
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control
    +compilation and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +^L
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +^L
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at least
    +    three years, to give the same user the materials specified in
    +    Subsection 6a, above, for a charge no more than the cost of
    +    performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +^L
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +^L
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply, and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License
    +may add an explicit geographical distribution limitation excluding those
    +countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +^L
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +^L
    +	   How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms
    +of the ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.
    +It is safest to attach them to the start of each source file to most
    +effectively convey the exclusion of warranty; and each file should
    +have at least the "copyright" line and a pointer to where the full
    +notice is found.
    +
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02111-1307  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or
    +your school, if any, to sign a "copyright disclaimer" for the library,
    +if necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James
    +  Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    +
    + +
    +V8 JavaScript Engine +homepage + + +
    +
    This license applies to all parts of V8 that are not externally
    +maintained libraries.  The externally maintained libraries used by V8
    +are:
    +
    +  - PCRE test suite, located in
    +    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
    +    test suite from PCRE-7.3, which is copyrighted by the University
    +    of Cambridge and Google, Inc.  The copyright notice and license
    +    are embedded in regexp-pcre.js.
    +
    +  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
    +    based on layout tests from webkit.org which are copyrighted by
    +    Apple Computer, Inc. and released under a 3-clause BSD license.
    +
    +  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
    +    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
    +    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
    +    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
    +    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
    +    This code is copyrighted by Sun Microsystems Inc. and released
    +    under a 3-clause BSD license.
    +
    +  - Valgrind client API header, located at third_party/valgrind/valgrind.h
    +    This is release under the BSD license.
    +
    +  - antlr4 parser generator Cpp library located in third_party/antlr4
    +    This is release under the BSD license.
    +
    +These libraries have their own licenses; we recommend you read them,
    +as their terms may differ from the terms below.
    +
    +Further license information can be found in LICENSE files located in 
    +sub-directories.
    +
    +Copyright 2014, the V8 project authors. All rights reserved.
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +      contributors may be used to endorse or promote products derived
    +      from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +valgrind +homepage + + +
    +
       Notice that the following BSD-style license applies to the Valgrind header
    +   files used by Chromium (valgrind.h and memcheck.h). However, the rest of
    +   Valgrind is licensed under the terms of the GNU General Public License,
    +   version 2, unless otherwise indicated.
    +
    +   ----------------------------------------------------------------
    +
    +   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions
    +   are met:
    +
    +   1. Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +
    +   2. The origin of this software must not be misrepresented; you must 
    +      not claim that you wrote the original software.  If you use this 
    +      software in a product, an acknowledgment in the product 
    +      documentation would be appreciated but is not required.
    +
    +   3. Altered source versions must be plainly marked as such, and must
    +      not be misrepresented as being the original software.
    +
    +   4. The name of the author may not be used to endorse or promote 
    +      products derived from this software without specific prior written 
    +      permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
    +   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Web Animations JS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +WebKit +homepage + + +
    +
    (WebKit doesn't distribute an explicit license.  This LICENSE is derived from
    +license text in the source.)
    +
    +Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    +2006, 2007 Alexander Kellett, Alexey Proskuryakov, Alex Mathews, Allan
    +Sandfeld Jensen, Alp Toker, Anders Carlsson, Andrew Wellington, Antti
    +Koivisto, Apple Inc., Arthur Langereis, Baron Schwartz, Bjoern Graf,
    +Brent Fulgham, Cameron Zwarich, Charles Samuels, Christian Dywan,
    +Collabora Ltd., Cyrus Patel, Daniel Molkentin, Dave Maclachlan, David
    +Smith, Dawit Alemayehu, Dirk Mueller, Dirk Schulze, Don Gibson, Enrico
    +Ros, Eric Seidel, Frederik Holljen, Frerich Raabe, Friedmann Kleint,
    +George Staikos, Google Inc., Graham Dennis, Harri Porten, Henry Mason,
    +Hiroyuki Ikezoe, Holger Hans Peter Freyther, IBM, James G. Speth, Jan
    +Alonzo, Jean-Loup Gailly, John Reis, Jonas Witt, Jon Shier, Jonas
    +Witt, Julien Chaffraix, Justin Haygood, Kevin Ollivier, Kevin Watters,
    +Kimmo Kinnunen, Kouhei Sutou, Krzysztof Kowalczyk, Lars Knoll, Luca
    +Bruno, Maks Orlovich, Malte Starostik, Mark Adler, Martin Jones,
    +Marvin Decker, Matt Lilek, Michael Emmel, Mitz Pettel, mozilla.org,
    +Netscape Communications Corporation, Nicholas Shanks, Nikolas
    +Zimmermann, Nokia, Oliver Hunt, Opened Hand, Paul Johnston, Peter
    +Kelly, Pioneer Research Center USA, Rich Moore, Rob Buis, Robin Dunn,
    +Ronald Tschalär, Samuel Weinig, Simon Hausmann, Staikos Computing
    +Services Inc., Stefan Schimanski, Symantec Corporation, The Dojo
    +Foundation, The Karbon Developers, Thomas Boyer, Tim Copperfield,
    +Tobias Anton, Torben Weis, Trolltech, University of Cambridge, Vaclav
    +Slavik, Waldo Bastian, Xan Lopez, Zack Rusin
    +
    +The terms and conditions vary from file to file, but are one of:
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.
    +
    +*OR*
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.
    +3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
    +   its contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +                  GNU LIBRARY GENERAL PUBLIC LICENSE
    +                       Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +                  GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +WebM container parser and writer. +homepage + + +
    +
    Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +WebP image encoder/decoder +homepage + + +
    +
    Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Additional IP Rights Grant (Patents)
    +------------------------------------
    +
    +"These implementations" means the copyrightable works that implement the WebM
    +codecs distributed by Google as part of the WebM Project.
    +
    +Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
    +royalty-free, irrevocable (except as stated in this section) patent license to
    +make, have made, use, offer to sell, sell, import, transfer, and otherwise
    +run, modify and propagate the contents of these implementations of WebM, where
    +such license applies only to those patent claims, both currently owned by
    +Google and acquired in the future, licensable by Google that are necessarily
    +infringed by these implementations of WebM. This grant does not include claims
    +that would be infringed only as a consequence of further modification of these
    +implementations. If you or your agent or exclusive licensee institute or order
    +or agree to the institution of patent litigation or any other patent
    +enforcement activity against any entity (including a cross-claim or
    +counterclaim in a lawsuit) alleging that any of these implementations of WebM
    +or any code incorporated within any of these implementations of WebM
    +constitute direct or contributory patent infringement, or inducement of
    +patent infringement, then any patent rights granted to you under this License
    +for these implementations of WebM shall terminate as of the date such
    +litigation is filed.
    +
    +
    +
    + +
    +WebRTC +homepage + + +
    +
    Copyright (c) 2011, The WebRTC project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Windows Template Library (WTL) +homepage + + +
    +
    Microsoft Permissive License (Ms-PL)
    +Published: October 12, 2006
    +
    +
    +This license governs use of the accompanying software. If you use the software,
    +you accept this license. If you do not accept the license, do not use the
    +software.
    +
    +
    +1. Definitions
    +
    +The terms "reproduce," "reproduction," "derivative works," and "distribution"
    +have the same meaning here as under U.S. copyright law.
    +
    +A "contribution" is the original software, or any additions or changes to the
    +software.
    +
    +A "contributor" is any person that distributes its contribution under this
    +license.
    +
    +"Licensed patents" are a contributor’s patent claims that read directly on its
    +contribution.
    +
    +
    +2. Grant of Rights
    +
    +(A) Copyright Grant- Subject to the terms of this license, including the
    +license conditions and limitations in section 3, each contributor grants you a
    +non-exclusive, worldwide, royalty-free copyright license to reproduce its
    +contribution, prepare derivative works of its contribution, and distribute its
    +contribution or any derivative works that you create.
    +
    +(B) Patent Grant- Subject to the terms of this license, including the license
    +conditions and limitations in section 3, each contributor grants you a
    +non-exclusive, worldwide, royalty-free license under its licensed patents to
    +make, have made, use, sell, offer for sale, import, and/or otherwise dispose of
    +its contribution in the software or derivative works of the contribution in the
    +software.
    +
    +
    +3. Conditions and Limitations
    +
    +(A) No Trademark License- This license does not grant you rights to use any
    +contributors’ name, logo, or trademarks.
    +
    +(B) If you bring a patent claim against any contributor over patents that you
    +claim are infringed by the software, your patent license from such contributor
    +to the software ends automatically.
    +
    +(C) If you distribute any portion of the software, you must retain all
    +copyright, patent, trademark, and attribution notices that are present in the
    +software.
    +
    +(D) If you distribute any portion of the software in source code form, you may
    +do so only under this license by including a complete copy of this license with
    +your distribution. If you distribute any portion of the software in compiled or
    +object code form, you may only do so under a license that complies with this
    +license.
    +
    +(E) The software is licensed "as-is." You bear the risk of using it. The
    +contributors give no express warranties, guarantees or conditions. You may have
    +additional consumer rights under your local laws which this license cannot
    +change. To the extent permitted under your local laws, the contributors exclude
    +the implied warranties of merchantability, fitness for a particular purpose and
    +non-infringement.
    +
    +
    +
    + +
    +woff2 +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +xdg-mime +homepage + + +
    +
    Licensed under the Academic Free License version 2.0 (below)
    +Or under the following terms:
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, write to the
    +Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    +Boston, MA 02111-1307, USA.
    +
    +
    +--------------------------------------------------------------------------------
    +Academic Free License v. 2.0
    +--------------------------------------------------------------------------------
    +
    +This Academic Free License (the "License") applies to any original work of
    +authorship (the "Original Work") whose owner (the "Licensor") has placed the
    +following notice immediately following the copyright notice for the Original
    +Work:
    +
    +Licensed under the Academic Free License version 2.0
    +1) Grant of Copyright License. Licensor hereby grants You a world-wide,
    +royalty-free, non-exclusive, perpetual, sublicenseable license to do the
    +following:
    +
    +a) to reproduce the Original Work in copies;
    +b) to prepare derivative works ("Derivative Works") based upon the Original
    +   Work;
    +c) to distribute copies of the Original Work and Derivative Works to the
    +   public;
    +d) to perform the Original Work publicly; and
    +e) to display the Original Work publicly.
    +
    +2) Grant of Patent License. Licensor hereby grants You a world-wide,
    +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
    +claims owned or controlled by the Licensor that are embodied in the Original
    +Work as furnished by the Licensor, to make, use, sell and offer for sale the
    +Original Work and Derivative Works.
    +
    +3) Grant of Source Code License. The term "Source Code" means the preferred
    +form of the Original Work for making modifications to it and all available
    +documentation describing how to modify the Original Work. Licensor hereby
    +agrees to provide a machine-readable copy of the Source Code of the Original
    +Work along with each copy of the Original Work that Licensor distributes.
    +Licensor reserves the right to satisfy this obligation by placing a
    +machine-readable copy of the Source Code in an information repository
    +reasonably calculated to permit inexpensive and convenient access by You for as
    +long as Licensor continues to distribute the Original Work, and by publishing
    +the address of that information repository in a notice immediately following
    +the copyright notice that applies to the Original Work.
    +
    +4) Exclusions From License Grant. Neither the names of Licensor, nor the names
    +of any contributors to the Original Work, nor any of their trademarks or
    +service marks, may be used to endorse or promote products derived from this
    +Original Work without express prior written permission of the Licensor. Nothing
    +in this License shall be deemed to grant any rights to trademarks, copyrights,
    +patents, trade secrets or any other intellectual property of Licensor except as
    +expressly stated herein. No patent license is granted to make, use, sell or
    +offer to sell embodiments of any patent claims other than the licensed claims
    +defined in Section 2. No right is granted to the trademarks of Licensor even if
    +such marks are included in the Original Work. Nothing in this License shall be
    +interpreted to prohibit Licensor from licensing under different terms from this
    +License any Original Work that Licensor otherwise would have a right to
    +license.
    +
    +5) This section intentionally omitted.
    +
    +6) Attribution Rights. You must retain, in the Source Code of any Derivative
    +Works that You create, all copyright, patent or trademark notices from the
    +Source Code of the Original Work, as well as any notices of licensing and any
    +descriptive text identified therein as an "Attribution Notice." You must cause
    +the Source Code for any Derivative Works that You create to carry a prominent
    +Attribution Notice reasonably calculated to inform recipients that You have
    +modified the Original Work.
    +
    +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
    +the copyright in and to the Original Work and the patent rights granted herein
    +by Licensor are owned by the Licensor or are sublicensed to You under the terms
    +of this License with the permission of the contributor(s) of those copyrights
    +and patent rights. Except as expressly stated in the immediately proceeding
    +sentence, the Original Work is provided under this License on an "AS IS" BASIS
    +and WITHOUT WARRANTY, either express or implied, including, without limitation,
    +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
    +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
    +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
    +license to Original Work is granted hereunder except under this disclaimer.
    +
    +8) Limitation of Liability. Under no circumstances and under no legal theory,
    +whether in tort (including negligence), contract, or otherwise, shall the
    +Licensor be liable to any person for any direct, indirect, special, incidental,
    +or consequential damages of any character arising as a result of this License
    +or the use of the Original Work including, without limitation, damages for loss
    +of goodwill, work stoppage, computer failure or malfunction, or any and all
    +other commercial damages or losses. This limitation of liability shall not
    +apply to liability for death or personal injury resulting from Licensor's
    +negligence to the extent applicable law prohibits such limitation. Some
    +jurisdictions do not allow the exclusion or limitation of incidental or
    +consequential damages, so this exclusion and limitation may not apply to You.
    +
    +9) Acceptance and Termination. If You distribute copies of the Original Work or
    +a Derivative Work, You must make a reasonable effort under the circumstances to
    +obtain the express assent of recipients to the terms of this License. Nothing
    +else but this License (or another written agreement between Licensor and You)
    +grants You permission to create Derivative Works based upon the Original Work
    +or to exercise any of the rights granted in Section 1 herein, and any attempt
    +to do so except under the terms of this License (or another written agreement
    +between Licensor and You) is expressly prohibited by U.S. copyright law, the
    +equivalent laws of other countries, and by international treaty. Therefore, by
    +exercising any of the rights granted to You in Section 1 herein, You indicate
    +Your acceptance of this License and all of its terms and conditions.
    +
    +10) Termination for Patent Action. This License shall terminate automatically
    +and You may no longer exercise any of the rights granted to You by this License
    +as of the date You commence an action, including a cross-claim or counterclaim,
    +for patent infringement (i) against Licensor with respect to a patent
    +applicable to software or (ii) against any entity with respect to a patent
    +applicable to the Original Work (but excluding combinations of the Original
    +Work with other software or hardware).
    +
    +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
    +License may be brought only in the courts of a jurisdiction wherein the
    +Licensor resides or in which Licensor conducts its primary business, and under
    +the laws of that jurisdiction excluding its conflict-of-law provisions. The
    +application of the United Nations Convention on Contracts for the International
    +Sale of Goods is expressly excluded. Any use of the Original Work outside the
    +scope of this License or after its termination shall be subject to the
    +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq.,
    +the equivalent laws of other countries, and international treaty. This section
    +shall survive the termination of this License.
    +
    +12) Attorneys Fees. In any action to enforce the terms of this License or
    +seeking damages relating thereto, the prevailing party shall be entitled to
    +recover its costs and expenses, including, without limitation, reasonable
    +attorneys' fees and costs incurred in connection with such action, including
    +any appeal of such action. This section shall survive the termination of this
    +License.
    +
    +13) Miscellaneous. This License represents the complete agreement concerning
    +the subject matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent necessary to
    +make it enforceable.
    +
    +14) Definition of "You" in This License. "You" throughout this License, whether
    +in upper or lower case, means an individual or a legal entity exercising rights
    +under, and complying with all of the terms of, this License. For legal
    +entities, "You" includes any entity that controls, is controlled by, or is
    +under common control with you. For purposes of this definition, "control" means
    +(i) the power, direct or indirect, to cause the direction or management of such
    +entity, whether by contract or otherwise, or (ii) ownership of fifty percent
    +(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
    +entity.
    +
    +15) Right to Use. You may use the Original Work in all ways not otherwise
    +restricted or conditioned by this License or by law, and Licensor promises not
    +to interfere with or be responsible for such uses by You.
    +
    +This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved.
    +Permission is hereby granted to copy and distribute this license without
    +modification. This license may not be modified without the express written
    +permission of its copyright owner.
    +
    +
    +
    + +
    +xdg-user-dirs +homepage + + +
    +
      Copyright (c) 2007 Red Hat, inc
    +
    +  Permission is hereby granted, free of charge, to any person
    +  obtaining a copy of this software and associated documentation files
    +  (the "Software"), to deal in the Software without restriction,
    +  including without limitation the rights to use, copy, modify, merge,
    +  publish, distribute, sublicense, and/or sell copies of the Software,
    +  and to permit persons to whom the Software is furnished to do so,
    +  subject to the following conditions: 
    +
    +  The above copyright notice and this permission notice shall be
    +  included in all copies or substantial portions of the Software. 
    +
    +  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +  SOFTWARE.
    +
    +
    +
    + +
    +XZ Utils +homepage + + +
    +
    See http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/xz/COPYING
    +
    +
    +
    + +
    +Yara +homepage + + +
    +
    Copyright (c) 2007-2016. The YARA Authors. All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +1. Redistributions of source code must retain the above copyright notice, this
    +list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright notice,
    +this list of conditions and the following disclaimer in the documentation and/or
    +other materials provided with the distribution.
    +
    +3. Neither the name of the copyright holder nor the names of its contributors
    +may be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +yasm +homepage + + +
    +
    Yasm is Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
    +
    +Yasm developers and/or contributors include:
    +  Peter Johnson
    +  Michael Urman
    +  Brian Gladman (Visual Studio build files, other fixes)
    +  Stanislav Karchebny (options parser)
    +  Mathieu Monnier (SSE4 instruction patches, NASM preprocessor additions)
    +  Anonymous "NASM64" developer (NASM preprocessor fixes)
    +  Stephen Polkowski (x86 instruction patches)
    +  Henryk Richter (Mach-O object format)
    +  Ben Skeggs (patches, bug reports)
    +  Alexei Svitkine (GAS preprocessor)
    +  Samuel Thibault (TASM parser and frontend)
    +
    +-----------------------------------
    +Yasm licensing overview and summary
    +-----------------------------------
    +
    +Note: This document does not provide legal advice nor is it the actual
    +license of any part of Yasm.  See the individual licenses for complete
    +details.  Consult a lawyer for legal advice.
    +
    +The primary license of Yasm is the 2-clause BSD license.  Please use this
    +license if you plan on submitting code to the project.
    +
    +Yasm has absolutely no warranty; not even for merchantibility or fitness
    +for a particular purpose.
    +
    +-------
    +Libyasm
    +-------
    +Libyasm is 2-clause or 3-clause BSD licensed, with the exception of
    +bitvect, which is triple-licensed under the Artistic license, GPL, and
    +LGPL.  Libyasm is thus GPL and LGPL compatible.  In addition, this also
    +means that libyasm is free for binary-only distribution as long as the
    +terms of the 3-clause BSD license and Artistic license (as it applies to
    +bitvect) are fulfilled.
    +
    +-------
    +Modules
    +-------
    +The modules are 2-clause or 3-clause BSD licensed.
    +
    +---------
    +Frontends
    +---------
    +The frontends are 2-clause BSD licensed.
    +
    +-------------
    +License Texts
    +-------------
    +The full text of all licenses are provided in separate files in the source
    +distribution.  Each source file may include the entire license (in the case
    +of the BSD and Artistic licenses), or may reference the GPL or LGPL license
    +file.
    +
    +BSD.txt - 2-clause and 3-clause BSD licenses
    +Artistic.txt - Artistic license
    +GNU_GPL-2.0 - GNU General Public License
    +GNU_LGPL-2.0 - GNU Library General Public License
    +
    +
    +
    + +
    +zlib +homepage + + +
    +
    version 1.2.11, January 15th, 2017
    +
    +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
    +
    +This software is provided 'as-is', without any express or implied
    +warranty.  In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not
    +   claim that you wrote the original software. If you use this software
    +   in a product, an acknowledgment in the product documentation would be
    +   appreciated but is not required.
    +2. Altered source versions must be plainly marked as such, and must not be
    +   misrepresented as being the original software.
    +3. This notice may not be removed or altered from any source distribution.
    +
    +
    +
    + +
    diff --git a/inkstitch/electron/chrome_100_percent.pak b/inkstitch/electron/chrome_100_percent.pak new file mode 100644 index 0000000..6bdc63e Binary files /dev/null and b/inkstitch/electron/chrome_100_percent.pak differ diff --git a/inkstitch/electron/chrome_200_percent.pak b/inkstitch/electron/chrome_200_percent.pak new file mode 100644 index 0000000..210663a Binary files /dev/null and b/inkstitch/electron/chrome_200_percent.pak differ diff --git a/inkstitch/electron/icudtl.dat b/inkstitch/electron/icudtl.dat new file mode 100644 index 0000000..2b2bc0a Binary files /dev/null and b/inkstitch/electron/icudtl.dat differ diff --git a/inkstitch/electron/locales/am.pak b/inkstitch/electron/locales/am.pak new file mode 100644 index 0000000..0e92145 Binary files /dev/null and b/inkstitch/electron/locales/am.pak differ diff --git a/inkstitch/electron/locales/ar.pak b/inkstitch/electron/locales/ar.pak new file mode 100644 index 0000000..a2d197e Binary files /dev/null and b/inkstitch/electron/locales/ar.pak differ diff --git a/inkstitch/electron/locales/bg.pak b/inkstitch/electron/locales/bg.pak new file mode 100644 index 0000000..d724ce1 Binary files /dev/null and b/inkstitch/electron/locales/bg.pak differ diff --git a/inkstitch/electron/locales/bn.pak b/inkstitch/electron/locales/bn.pak new file mode 100644 index 0000000..059abdf Binary files /dev/null and b/inkstitch/electron/locales/bn.pak differ diff --git a/inkstitch/electron/locales/ca.pak b/inkstitch/electron/locales/ca.pak new file mode 100644 index 0000000..049f398 Binary files /dev/null and b/inkstitch/electron/locales/ca.pak differ diff --git a/inkstitch/electron/locales/cs.pak b/inkstitch/electron/locales/cs.pak new file mode 100644 index 0000000..144e021 Binary files /dev/null and b/inkstitch/electron/locales/cs.pak differ diff --git a/inkstitch/electron/locales/da.pak b/inkstitch/electron/locales/da.pak new file mode 100644 index 0000000..ef0583a Binary files /dev/null and b/inkstitch/electron/locales/da.pak differ diff --git a/inkstitch/electron/locales/de.pak b/inkstitch/electron/locales/de.pak new file mode 100644 index 0000000..23bf3d4 Binary files /dev/null and b/inkstitch/electron/locales/de.pak differ diff --git a/inkstitch/electron/locales/el.pak b/inkstitch/electron/locales/el.pak new file mode 100644 index 0000000..b1e708f Binary files /dev/null and b/inkstitch/electron/locales/el.pak differ diff --git a/inkstitch/electron/locales/en-GB.pak b/inkstitch/electron/locales/en-GB.pak new file mode 100644 index 0000000..5b0d625 Binary files /dev/null and b/inkstitch/electron/locales/en-GB.pak differ diff --git a/inkstitch/electron/locales/en-US.pak b/inkstitch/electron/locales/en-US.pak new file mode 100644 index 0000000..a94a7d0 Binary files /dev/null and b/inkstitch/electron/locales/en-US.pak differ diff --git a/inkstitch/electron/locales/es-419.pak b/inkstitch/electron/locales/es-419.pak new file mode 100644 index 0000000..949e62a Binary files /dev/null and b/inkstitch/electron/locales/es-419.pak differ diff --git a/inkstitch/electron/locales/es.pak b/inkstitch/electron/locales/es.pak new file mode 100644 index 0000000..48d9818 Binary files /dev/null and b/inkstitch/electron/locales/es.pak differ diff --git a/inkstitch/electron/locales/et.pak b/inkstitch/electron/locales/et.pak new file mode 100644 index 0000000..8c0bab3 Binary files /dev/null and b/inkstitch/electron/locales/et.pak differ diff --git a/inkstitch/electron/locales/fa.pak b/inkstitch/electron/locales/fa.pak new file mode 100644 index 0000000..9d5768f Binary files /dev/null and b/inkstitch/electron/locales/fa.pak differ diff --git a/inkstitch/electron/locales/fi.pak b/inkstitch/electron/locales/fi.pak new file mode 100644 index 0000000..c496fd2 Binary files /dev/null and b/inkstitch/electron/locales/fi.pak differ diff --git a/inkstitch/electron/locales/fil.pak b/inkstitch/electron/locales/fil.pak new file mode 100644 index 0000000..bfd0081 Binary files /dev/null and b/inkstitch/electron/locales/fil.pak differ diff --git a/inkstitch/electron/locales/fr.pak b/inkstitch/electron/locales/fr.pak new file mode 100644 index 0000000..24507d6 Binary files /dev/null and b/inkstitch/electron/locales/fr.pak differ diff --git a/inkstitch/electron/locales/gu.pak b/inkstitch/electron/locales/gu.pak new file mode 100644 index 0000000..662e585 Binary files /dev/null and b/inkstitch/electron/locales/gu.pak differ diff --git a/inkstitch/electron/locales/he.pak b/inkstitch/electron/locales/he.pak new file mode 100644 index 0000000..b2aedbd Binary files /dev/null and b/inkstitch/electron/locales/he.pak differ diff --git a/inkstitch/electron/locales/hi.pak b/inkstitch/electron/locales/hi.pak new file mode 100644 index 0000000..72c9971 Binary files /dev/null and b/inkstitch/electron/locales/hi.pak differ diff --git a/inkstitch/electron/locales/hr.pak b/inkstitch/electron/locales/hr.pak new file mode 100644 index 0000000..40a0dac Binary files /dev/null and b/inkstitch/electron/locales/hr.pak differ diff --git a/inkstitch/electron/locales/hu.pak b/inkstitch/electron/locales/hu.pak new file mode 100644 index 0000000..6852cad Binary files /dev/null and b/inkstitch/electron/locales/hu.pak differ diff --git a/inkstitch/electron/locales/id.pak b/inkstitch/electron/locales/id.pak new file mode 100644 index 0000000..cfd80f5 Binary files /dev/null and b/inkstitch/electron/locales/id.pak differ diff --git a/inkstitch/electron/locales/it.pak b/inkstitch/electron/locales/it.pak new file mode 100644 index 0000000..716f19a Binary files /dev/null and b/inkstitch/electron/locales/it.pak differ diff --git a/inkstitch/electron/locales/ja.pak b/inkstitch/electron/locales/ja.pak new file mode 100644 index 0000000..6833f67 Binary files /dev/null and b/inkstitch/electron/locales/ja.pak differ diff --git a/inkstitch/electron/locales/kn.pak b/inkstitch/electron/locales/kn.pak new file mode 100644 index 0000000..d7fb68c Binary files /dev/null and b/inkstitch/electron/locales/kn.pak differ diff --git a/inkstitch/electron/locales/ko.pak b/inkstitch/electron/locales/ko.pak new file mode 100644 index 0000000..d3d642a Binary files /dev/null and b/inkstitch/electron/locales/ko.pak differ diff --git a/inkstitch/electron/locales/lt.pak b/inkstitch/electron/locales/lt.pak new file mode 100644 index 0000000..ab8d964 Binary files /dev/null and b/inkstitch/electron/locales/lt.pak differ diff --git a/inkstitch/electron/locales/lv.pak b/inkstitch/electron/locales/lv.pak new file mode 100644 index 0000000..69ce283 Binary files /dev/null and b/inkstitch/electron/locales/lv.pak differ diff --git a/inkstitch/electron/locales/ml.pak b/inkstitch/electron/locales/ml.pak new file mode 100644 index 0000000..cc080cd Binary files /dev/null and b/inkstitch/electron/locales/ml.pak differ diff --git a/inkstitch/electron/locales/mr.pak b/inkstitch/electron/locales/mr.pak new file mode 100644 index 0000000..75a80de Binary files /dev/null and b/inkstitch/electron/locales/mr.pak differ diff --git a/inkstitch/electron/locales/ms.pak b/inkstitch/electron/locales/ms.pak new file mode 100644 index 0000000..d54a4d4 Binary files /dev/null and b/inkstitch/electron/locales/ms.pak differ diff --git a/inkstitch/electron/locales/nb.pak b/inkstitch/electron/locales/nb.pak new file mode 100644 index 0000000..0cef51e Binary files /dev/null and b/inkstitch/electron/locales/nb.pak differ diff --git a/inkstitch/electron/locales/nl.pak b/inkstitch/electron/locales/nl.pak new file mode 100644 index 0000000..cc00bde Binary files /dev/null and b/inkstitch/electron/locales/nl.pak differ diff --git a/inkstitch/electron/locales/pl.pak b/inkstitch/electron/locales/pl.pak new file mode 100644 index 0000000..b75e5b4 Binary files /dev/null and b/inkstitch/electron/locales/pl.pak differ diff --git a/inkstitch/electron/locales/pt-BR.pak b/inkstitch/electron/locales/pt-BR.pak new file mode 100644 index 0000000..5194a15 Binary files /dev/null and b/inkstitch/electron/locales/pt-BR.pak differ diff --git a/inkstitch/electron/locales/pt-PT.pak b/inkstitch/electron/locales/pt-PT.pak new file mode 100644 index 0000000..82c941f Binary files /dev/null and b/inkstitch/electron/locales/pt-PT.pak differ diff --git a/inkstitch/electron/locales/ro.pak b/inkstitch/electron/locales/ro.pak new file mode 100644 index 0000000..72deef2 Binary files /dev/null and b/inkstitch/electron/locales/ro.pak differ diff --git a/inkstitch/electron/locales/ru.pak b/inkstitch/electron/locales/ru.pak new file mode 100644 index 0000000..e5a32e0 Binary files /dev/null and b/inkstitch/electron/locales/ru.pak differ diff --git a/inkstitch/electron/locales/sk.pak b/inkstitch/electron/locales/sk.pak new file mode 100644 index 0000000..c395f09 Binary files /dev/null and b/inkstitch/electron/locales/sk.pak differ diff --git a/inkstitch/electron/locales/sl.pak b/inkstitch/electron/locales/sl.pak new file mode 100644 index 0000000..1ad8367 Binary files /dev/null and b/inkstitch/electron/locales/sl.pak differ diff --git a/inkstitch/electron/locales/sr.pak b/inkstitch/electron/locales/sr.pak new file mode 100644 index 0000000..21f93e4 Binary files /dev/null and b/inkstitch/electron/locales/sr.pak differ diff --git a/inkstitch/electron/locales/sv.pak b/inkstitch/electron/locales/sv.pak new file mode 100644 index 0000000..eb009ef Binary files /dev/null and b/inkstitch/electron/locales/sv.pak differ diff --git a/inkstitch/electron/locales/sw.pak b/inkstitch/electron/locales/sw.pak new file mode 100644 index 0000000..e243b88 Binary files /dev/null and b/inkstitch/electron/locales/sw.pak differ diff --git a/inkstitch/electron/locales/ta.pak b/inkstitch/electron/locales/ta.pak new file mode 100644 index 0000000..bd2ab0e Binary files /dev/null and b/inkstitch/electron/locales/ta.pak differ diff --git a/inkstitch/electron/locales/te.pak b/inkstitch/electron/locales/te.pak new file mode 100644 index 0000000..58d3e46 Binary files /dev/null and b/inkstitch/electron/locales/te.pak differ diff --git a/inkstitch/electron/locales/th.pak b/inkstitch/electron/locales/th.pak new file mode 100644 index 0000000..5f8d4f8 Binary files /dev/null and b/inkstitch/electron/locales/th.pak differ diff --git a/inkstitch/electron/locales/tr.pak b/inkstitch/electron/locales/tr.pak new file mode 100644 index 0000000..9222267 Binary files /dev/null and b/inkstitch/electron/locales/tr.pak differ diff --git a/inkstitch/electron/locales/uk.pak b/inkstitch/electron/locales/uk.pak new file mode 100644 index 0000000..b2cad45 Binary files /dev/null and b/inkstitch/electron/locales/uk.pak differ diff --git a/inkstitch/electron/locales/vi.pak b/inkstitch/electron/locales/vi.pak new file mode 100644 index 0000000..2f2cb88 Binary files /dev/null and b/inkstitch/electron/locales/vi.pak differ diff --git a/inkstitch/electron/locales/zh-CN.pak b/inkstitch/electron/locales/zh-CN.pak new file mode 100644 index 0000000..3f8f519 Binary files /dev/null and b/inkstitch/electron/locales/zh-CN.pak differ diff --git a/inkstitch/electron/locales/zh-TW.pak b/inkstitch/electron/locales/zh-TW.pak new file mode 100644 index 0000000..cd885a7 Binary files /dev/null and b/inkstitch/electron/locales/zh-TW.pak differ diff --git a/inkstitch/electron/natives_blob.bin b/inkstitch/electron/natives_blob.bin new file mode 100644 index 0000000..25466a7 Binary files /dev/null and b/inkstitch/electron/natives_blob.bin differ diff --git a/inkstitch/electron/resources.pak b/inkstitch/electron/resources.pak new file mode 100644 index 0000000..83daff1 Binary files /dev/null and b/inkstitch/electron/resources.pak differ diff --git a/inkstitch/electron/resources/app.asar b/inkstitch/electron/resources/app.asar new file mode 100644 index 0000000..58094b6 Binary files /dev/null and b/inkstitch/electron/resources/app.asar differ diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f3a1be4 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md @@ -0,0 +1,50 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of +fostering an open and welcoming community, we pledge to respect all people who +contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic + addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to +fairly and consistently applying these principles to every aspect of managing +this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting a project maintainer at paul@paulbetts.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. Maintainers are +obligated to maintain confidentiality with regard to the reporter of an +incident. + + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.3.0, available at +[http://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/3/0/ diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING new file mode 100644 index 0000000..dded164 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING @@ -0,0 +1,7 @@ +Copyright (c) 2016 Paul Betts + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd new file mode 100644 index 0000000..e469702 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd @@ -0,0 +1 @@ +npm i && npm t diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh new file mode 100644 index 0000000..7346845 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +npm i && npm t diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json new file mode 100644 index 0000000..a47b076 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json @@ -0,0 +1,26 @@ +{ + "source": "./src", + "destination": "./docs", + "includes": ["\\.(js|es6)$"], + "excludes": ["\\.config\\.(js|es6)$"], + "access": ["public", "protected"], + "autoPrivate": true, + "unexportIdentifier": false, + "undocumentIdentifier": true, + "builtinExternal": true, + "index": "./README.md", + "package": "./package.json", + "coverage": true, + "includeSource": true, + "title": "electron-compilers", + "plugins": [ + {"name": "esdoc-es7-plugin"}, + {"name": "esdoc-plugin-async-to-sync"} + ], + "test": { + "type": "mocha", + "source": "./test", + "includes": ["\\.(js|es6)$"] + }, + "lint": true +} diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js new file mode 100644 index 0000000..f639d17 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js @@ -0,0 +1,352 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.findActualExecutable = findActualExecutable; +exports.spawnDetached = spawnDetached; +exports.spawn = spawn; +exports.spawnDetachedPromise = spawnDetachedPromise; +exports.spawnPromise = spawnPromise; + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _net = require('net'); + +var _net2 = _interopRequireDefault(_net); + +var _fs = require('fs'); + +var _fs2 = _interopRequireDefault(_fs); + +require('rxjs/add/observable/of'); + +require('rxjs/add/observable/merge'); + +require('rxjs/add/operator/pluck'); + +require('rxjs/add/operator/reduce'); + +var _Observable = require('rxjs/Observable'); + +var _Subscription = require('rxjs/Subscription'); + +var _AsyncSubject = require('rxjs/AsyncSubject'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const spawnOg = require('child_process').spawn; +const isWindows = process.platform === 'win32'; + +const d = require('debug')('spawn-rx'); + +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file) { + try { + return _fs2.default.statSync(file); + } catch (e) { + return null; + } +} + +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe) { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + + let target = _path2.default.join('.', exe); + if (statSyncNoException(target)) { + d(`Found executable in currect directory: ${ target }`); + return target; + } + + let haystack = process.env.PATH.split(isWindows ? ';' : ':'); + for (let p of haystack) { + let needle = _path2.default.join(p, exe); + if (statSyncNoException(needle)) return needle; + } + + d('Failed to find executable anywhere in path'); + return exe; +} + +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +function findActualExecutable(exe, args) { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') return { cmd: runDownPath(exe), args: args }; + + if (!_fs2.default.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + const possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (let ext of possibleExts) { + let possibleFullPath = runDownPath(`${ exe }${ ext }`); + + if (_fs2.default.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + + if (exe.match(/\.ps1$/i)) { + let cmd = _path2.default.join(process.env.SYSTEMROOT, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + let psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + + return { cmd: cmd, args: psargs.concat(args) }; + } + + if (exe.match(/\.(bat|cmd)$/i)) { + let cmd = _path2.default.join(process.env.SYSTEMROOT, 'System32', 'cmd.exe'); + let cmdArgs = ['/C', `${ exe } ${ args.join(' ') }`]; + + return { cmd: cmd, args: cmdArgs }; + } + + if (exe.match(/\.(js)$/i)) { + let cmd = process.execPath; + let nodeArgs = [exe]; + + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + + // Dunno lol + return { cmd: exe, args: args }; +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawnDetached(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + var _findActualExecutable = findActualExecutable(exe, params); + + let cmd = _findActualExecutable.cmd, + args = _findActualExecutable.args; + + + if (!isWindows) return spawn(cmd, args, Object.assign({}, opts || {}, { detached: true })); + const newParams = [cmd].concat(args); + + let target = _path2.default.join(__dirname, '..', 'vendor', 'jobber', 'jobber.exe'); + let options = Object.assign({}, opts || {}, { detached: true, jobber: true }); + + d(`spawnDetached: ${ target }, ${ newParams }`); + return spawn(target, newParams, options); +} + +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawn(exe) { + let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + opts = opts || {}; + let spawnObs = _Observable.Observable.create(subj => { + let proc = null; + + var _findActualExecutable2 = findActualExecutable(exe, params); + + let cmd = _findActualExecutable2.cmd, + args = _findActualExecutable2.args; + + d(`spawning process: ${ cmd } ${ args.join() }, ${ JSON.stringify(opts) }`); + let origOpts = Object.assign({}, opts); + if ('jobber' in origOpts) delete origOpts.jobber; + if ('split' in origOpts) delete origOpts.split; + + proc = spawnOg(cmd, args, origOpts); + + let bufHandler = source => b => { + if (b.length < 1) return; + let chunk = "<< String sent back was too long >>"; + try { + chunk = b.toString(); + } catch (e) { + chunk = `<< Lost chunk of process output for ${ exe } - length was ${ b.length }>>`; + } + + subj.next({ source: source, text: chunk }); + }; + + let ret = new _Subscription.Subscription(); + + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe(x => proc.stdin.write(x), subj.error, () => proc.stdin.end())); + } else { + subj.error(new Error(`opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required`)); + } + } + + let stderrCompleted = null; + let stdoutCompleted = null; + let noClose = false; + + if (proc.stdout) { + stdoutCompleted = new _AsyncSubject.AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', () => { + stdoutCompleted.next(true);stdoutCompleted.complete(); + }); + } else { + stdoutCompleted = _Observable.Observable.of(true); + } + + if (proc.stderr) { + stderrCompleted = new _AsyncSubject.AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', () => { + stderrCompleted.next(true);stderrCompleted.complete(); + }); + } else { + stderrCompleted = _Observable.Observable.of(true); + } + + proc.on('error', e => { + noClose = true; + subj.error(e); + }); + + proc.on('close', code => { + noClose = true; + let pipesClosed = _Observable.Observable.merge(stdoutCompleted, stderrCompleted).reduce(acc => acc, true); + + if (code === 0) { + pipesClosed.subscribe(() => subj.complete()); + } else { + pipesClosed.subscribe(() => subj.error(new Error(`Failed with exit code: ${ code }`))); + } + }); + + ret.add(new _Subscription.Subscription(() => { + if (noClose) return; + + d(`Killing process: ${ cmd } ${ args.join() }`); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + _net2.default.connect(`\\\\.\\pipe\\jobber-${ proc.pid }`); + setTimeout(() => proc.kill(), 5 * 1000); + } else { + proc.kill(); + } + })); + + return ret; + }); + + return opts.split ? spawnObs : spawnObs.pluck('text'); +} + +function wrapObservableInPromise(obs) { + return new Promise((res, rej) => { + let out = ''; + + obs.subscribe(x => out += x, e => rej(new Error(`${ out }\n${ e.message }`)), () => res(out)); + }); +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnDetachedPromise(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} + +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnPromise(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + return wrapObservableInPromise(spawn(exe, params, opts)); +} \ No newline at end of file diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js new file mode 100644 index 0000000..46a0b06 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js @@ -0,0 +1,317 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var path = require("path"); +var net = require("net"); +var sfs = require("fs"); +var assign = require("lodash.assign"); +require("rxjs/add/observable/of"); +require("rxjs/add/observable/merge"); +require("rxjs/add/operator/pluck"); +require("rxjs/add/operator/reduce"); +var Observable_1 = require("rxjs/Observable"); +var Subscription_1 = require("rxjs/Subscription"); +var AsyncSubject_1 = require("rxjs/AsyncSubject"); +var spawnOg = require('child_process').spawn; //tslint:disable-line:no-var-requires +var isWindows = process.platform === 'win32'; +var d = require('debug')('spawn-rx'); //tslint:disable-line:no-var-requires +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file) { + try { + return sfs.statSync(file); + } + catch (e) { + return null; + } +} +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe) { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + var target = path.join('.', exe); + if (statSyncNoException(target)) { + d("Found executable in currect directory: " + target); + return target; + } + var haystack = process.env.PATH.split(isWindows ? ';' : ':'); + for (var _i = 0, haystack_1 = haystack; _i < haystack_1.length; _i++) { + var p = haystack_1[_i]; + var needle = path.join(p, exe); + if (statSyncNoException(needle)) { + return needle; + } + ; + } + d('Failed to find executable anywhere in path'); + return exe; +} +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +function findActualExecutable(exe, args) { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') { + return { cmd: runDownPath(exe), args: args }; + } + if (!sfs.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + var possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (var _i = 0, possibleExts_1 = possibleExts; _i < possibleExts_1.length; _i++) { + var ext = possibleExts_1[_i]; + var possibleFullPath = runDownPath("" + exe + ext); + if (sfs.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + if (exe.match(/\.ps1$/i)) { + var cmd = path.join(process.env.SYSTEMROOT, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + var psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + return { cmd: cmd, args: psargs.concat(args) }; + } + if (exe.match(/\.(bat|cmd)$/i)) { + var cmd = path.join(process.env.SYSTEMROOT, 'System32', 'cmd.exe'); + var cmdArgs = ['/C', exe].concat(args); + return { cmd: cmd, args: cmdArgs }; + } + if (exe.match(/\.(js)$/i)) { + var cmd = process.execPath; + var nodeArgs = [exe]; + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + // Dunno lol + return { cmd: exe, args: args }; +} +exports.findActualExecutable = findActualExecutable; +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawnDetached(exe, params, opts) { + if (opts === void 0) { opts = null; } + var _a = findActualExecutable(exe, params), cmd = _a.cmd, args = _a.args; + if (!isWindows) { + return spawn(cmd, args, assign({}, opts || {}, { detached: true })); + } + ; + var newParams = [cmd].concat(args); + var target = path.join(__dirname, '..', '..', 'vendor', 'jobber', 'Jobber.exe'); + var options = assign({}, opts || {}, { detached: true, jobber: true }); + d("spawnDetached: " + target + ", " + newParams); + return spawn(target, newParams, options); +} +exports.spawnDetached = spawnDetached; +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawn(exe, params, opts) { + if (params === void 0) { params = []; } + if (opts === void 0) { opts = null; } + opts = opts || {}; + var spawnObs = Observable_1.Observable.create(function (subj) { + var stdin = opts.stdin, optsWithoutStdIn = __rest(opts, ["stdin"]); + var _a = findActualExecutable(exe, params), cmd = _a.cmd, args = _a.args; + d("spawning process: " + cmd + " " + args.join() + ", " + JSON.stringify(optsWithoutStdIn)); + var origOpts = assign({}, optsWithoutStdIn); + if ('jobber' in origOpts) { + delete origOpts.jobber; + } + if ('split' in origOpts) { + delete origOpts.split; + } + ; + var proc = spawnOg(cmd, args, origOpts); + var bufHandler = function (source) { return function (b) { + if (b.length < 1) { + return; + } + ; + var chunk = '<< String sent back was too long >>'; + try { + if (typeof b === 'string') { + chunk = b.toString(); + } + else { + chunk = b.toString(origOpts.encoding || 'utf8'); + } + } + catch (e) { + chunk = "<< Lost chunk of process output for " + exe + " - length was " + b.length + ">>"; + } + subj.next({ source: source, text: chunk }); + }; }; + var ret = new Subscription_1.Subscription(); + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe(function (x) { return proc.stdin.write(x); }, subj.error.bind(subj), function () { return proc.stdin.end(); })); + } + else { + subj.error(new Error("opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required")); + } + } + var stderrCompleted = null; + var stdoutCompleted = null; + var noClose = false; + if (proc.stdout) { + stdoutCompleted = new AsyncSubject_1.AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', function () { stdoutCompleted.next(true); stdoutCompleted.complete(); }); + } + else { + stdoutCompleted = Observable_1.Observable.of(true); + } + if (proc.stderr) { + stderrCompleted = new AsyncSubject_1.AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', function () { stderrCompleted.next(true); stderrCompleted.complete(); }); + } + else { + stderrCompleted = Observable_1.Observable.of(true); + } + proc.on('error', function (e) { + noClose = true; + subj.error(e); + }); + proc.on('close', function (code) { + noClose = true; + var pipesClosed = Observable_1.Observable.merge(stdoutCompleted, stderrCompleted) + .reduce(function (acc) { return acc; }, true); + if (code === 0) { + pipesClosed.subscribe(function () { return subj.complete(); }); + } + else { + pipesClosed.subscribe(function () { return subj.error(new Error("Failed with exit code: " + code)); }); + } + }); + ret.add(new Subscription_1.Subscription(function () { + if (noClose) { + return; + } + ; + d("Killing process: " + cmd + " " + args.join()); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + net.connect("\\\\.\\pipe\\jobber-" + proc.pid); + setTimeout(function () { return proc.kill(); }, 5 * 1000); + } + else { + proc.kill(); + } + })); + return ret; + }); + return opts.split ? spawnObs : spawnObs.pluck('text'); +} +exports.spawn = spawn; +function wrapObservableInPromise(obs) { + return new Promise(function (res, rej) { + var out = ''; + obs.subscribe(function (x) { return out += x; }, function (e) { return rej(new Error(out + "\n" + e.message)); }, function () { return res(out); }); + }); +} +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnDetachedPromise(exe, params, opts) { + if (opts === void 0) { opts = null; } + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} +exports.spawnDetachedPromise = spawnDetachedPromise; +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnPromise(exe, params, opts) { + if (opts === void 0) { opts = null; } + return wrapObservableInPromise(spawn(exe, params, opts)); +} +exports.spawnPromise = spawnPromise; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map new file mode 100644 index 0000000..4e82fe2 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2BAA6B;AAC7B,yBAA2B;AAC3B,wBAA0B;AAC1B,sCAAwC;AAExC,kCAAgC;AAChC,qCAAmC;AACnC,mCAAiC;AACjC,oCAAkC;AAClC,8CAA6C;AAE7C,kDAAiD;AACjD,kDAAiD;AAIjD,IAAM,OAAO,GAA8B,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC;AAChH,IAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAE/C,IAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;AAE7E;;;;;;;GAOG;AACH,6BAA6B,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,qBAAqB,GAAW;IAC9B,sEAAsE;IACtE,aAAa;IAEb,uDAAuD;IACvD,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,sCAAsC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC;IACb,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,4CAA0C,MAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,GAAG,CAAC,CAAU,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ;QAAjB,IAAI,CAAC,iBAAA;QACR,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC;QAChB,CAAC;QAAA,CAAC;KACH;IAED,CAAC,CAAC,4CAA4C,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,8BAAqC,GAAW,EAAE,IAAmB;IAInE,qEAAqE;IACrE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,gFAAgF;QAChF,+EAA+E;QAC/E,uCAAuC;QACvC,IAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,GAAG,CAAC,CAAY,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY;YAAvB,IAAI,GAAG,qBAAA;YACV,IAAI,gBAAgB,GAAG,WAAW,CAAC,KAAG,GAAG,GAAG,GAAK,CAAC,CAAC;YAEnD,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;SACF;IACH,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACxG,IAAI,MAAM,GAAG,CAAC,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE9F,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,OAAO,IAAI,IAAI,EAAE,GAAG,SAAK,IAAI,CAAC,CAAC;QAEnC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC3B,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,YAAY;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AA9CD,oDA8CC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,uBAA8B,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IAC1E,IAAA,sCAAiD,EAA/C,YAAG,EAAE,cAAI,CAAuC;IAExD,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAAA,CAAC;IAEF,IAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,oBAAkB,MAAM,UAAK,SAAW,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAdD,sCAcC;AAED;;;;;;;;;;;;;;GAcG;AAEH,eAAkC,GAAW,EAAE,MAA0B,EAAE,IAAgB;IAA5C,uBAAA,EAAA,WAA0B;IAAE,qBAAA,EAAA,WAAgB;IACzF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,QAAQ,GAAG,uBAAU,CAAC,MAAM,CAAC,UAAC,IAG9B;QACI,IAAA,kBAAK,EAAE,0CAAmB,CAAU;QACtC,IAAA,sCAAiD,EAA/C,YAAG,EAAE,cAAI,CAAuC;QACtD,CAAC,CAAC,uBAAqB,GAAG,SAAI,IAAI,CAAC,IAAI,EAAE,UAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAG,CAAC,CAAC;QAClF,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC5C,EAAE,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,EAAE,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,CAAC;QAAA,CAAC;QAEF,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,UAAU,GAAG,UAAC,MAAc,IAAK,OAAA,UAAC,CAAkB;YACtD,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC;YACT,CAAC;YAAA,CAAC;YACF,IAAI,KAAK,GAAG,qCAAqC,CAAC;YAClD,IAAI,CAAC;gBACH,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;oBAC1B,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACvB,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACX,KAAK,GAAG,yCAAuC,GAAG,sBAAiB,CAAC,CAAC,MAAM,OAAI,CAAC;YAClF,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC,EAhBoC,CAgBpC,CAAC;QAEF,IAAI,GAAG,GAAG,IAAI,2BAAY,EAAE,CAAC;QAE7B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACf,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAC1B,UAAC,CAAM,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAnB,CAAmB,EAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAhB,CAAgB,CACvB,CAAC,CAAC;YACL,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;QAED,IAAI,eAAe,GAAkD,IAAI,CAAC;QAC1E,IAAI,eAAe,GAAkD,IAAI,CAAC;QAC1E,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChB,eAAe,GAAG,IAAI,2BAAY,EAAW,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAS,eAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,eAAqC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,eAAe,GAAG,uBAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChB,eAAe,GAAG,IAAI,2BAAY,EAAW,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAS,eAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,eAAqC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,eAAe,GAAG,uBAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAQ;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,IAAY;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,WAAW,GAAG,uBAAU,CAAC,KAAK,CAAC,eAAgB,EAAE,eAAgB,CAAC;iBACnE,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,EAAH,CAAG,EAAE,IAAI,CAAC,CAAC;YAE9B,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBACf,WAAW,CAAC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC,CAAC;YAC/C,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,WAAW,CAAC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4BAA0B,IAAM,CAAC,CAAC,EAAvD,CAAuD,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,IAAI,2BAAY,CAAC;YACvB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBACZ,MAAM,CAAC;YACT,CAAC;YAAA,CAAC;YAEF,CAAC,CAAC,sBAAoB,GAAG,SAAI,IAAI,CAAC,IAAI,EAAI,CAAC,CAAC;YAC5C,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChB,qDAAqD;gBACrD,GAAG,CAAC,OAAO,CAAC,yBAAuB,IAAI,CAAC,GAAK,CAAC,CAAC;gBAC/C,UAAU,CAAC,cAAM,OAAA,IAAI,CAAC,IAAI,EAAE,EAAX,CAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1C,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AA3GD,sBA2GC;AAED,iCAAoC,GAAkB;IACpD,MAAM,CAAC,IAAI,OAAO,CAAS,UAAC,GAAG,EAAE,GAAG;QAClC,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,GAAG,CAAC,SAAS,CACX,UAAC,CAAC,IAAK,OAAA,GAAG,IAAI,CAAC,EAAR,CAAQ,EACf,UAAC,CAAC,IAAK,OAAA,GAAG,CAAC,IAAI,KAAK,CAAI,GAAG,UAAK,CAAC,CAAC,OAAS,CAAC,CAAC,EAAtC,CAAsC,EAC7C,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,8BAAqC,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IACvF,MAAM,CAAC,uBAAuB,CAAS,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAFD,oDAEC;AAED;;;;;;;;;;;;GAYG;AACH,sBAA6B,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IAC/E,MAAM,CAAC,uBAAuB,CAAS,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC;AAFD,oCAEC"} \ No newline at end of file diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json new file mode 100644 index 0000000..8b98f12 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json @@ -0,0 +1,38 @@ +{ + "name": "spawn-rx", + "version": "2.0.12", + "description": "An Rx-version of child_process.spawn", + "repository": { + "type": "git", + "url": "https://github.com/paulcbetts/spawn-rx" + }, + "author": "Paul Betts ", + "license": "MIT", + "main": "lib/src/index.js", + "typings": "lib/src/index.d.ts", + "homepage": "https://github.com/paulcbetts/spawn-rx", + "dependencies": { + "debug": "^2.5.1", + "lodash.assign": "^4.2.0", + "rxjs": "^5.1.1" + }, + "devDependencies": { + "@types/chai": "^4.0.4", + "@types/chai-as-promised": "^7.1.0", + "@types/mocha": "^2.2.39", + "@types/node": "^8.0.32", + "babel-register": "^6.23.0", + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "esdoc": "^0.5.2", + "esdoc-es7-plugin": "0.0.3", + "esdoc-plugin-async-to-sync": "^0.5.0", + "marked": "^0.3.6", + "mocha": "^4.0.0", + "npm-run-all": "^4.0.2", + "ts-node": "^3.3.0", + "tslint": "^5.7.0", + "typescript": "^2.5.3", + "uuid": "3.0.1" + } +} \ No newline at end of file diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts new file mode 100644 index 0000000..f7b0428 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts @@ -0,0 +1,341 @@ +import * as path from 'path'; +import * as net from 'net'; +import * as sfs from 'fs'; +import * as assign from 'lodash.assign'; + +import 'rxjs/add/observable/of'; +import 'rxjs/add/observable/merge'; +import 'rxjs/add/operator/pluck'; +import 'rxjs/add/operator/reduce'; +import { Observable } from 'rxjs/Observable'; +import { Observer } from 'rxjs/Observer'; +import { Subscription } from 'rxjs/Subscription'; +import { AsyncSubject } from 'rxjs/AsyncSubject'; +import { Subject } from 'rxjs/Subject'; +import * as childProcess from 'child_process'; + +const spawnOg: typeof childProcess.spawn = require('child_process').spawn; //tslint:disable-line:no-var-requires +const isWindows = process.platform === 'win32'; + +const d = require('debug')('spawn-rx'); //tslint:disable-line:no-var-requires + +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file: string): sfs.Stats | null { + try { + return sfs.statSync(file); + } catch (e) { + return null; + } +} + +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe: string): string { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + + let target = path.join('.', exe); + if (statSyncNoException(target)) { + d(`Found executable in currect directory: ${target}`); + return target; + } + + let haystack = process.env.PATH!.split(isWindows ? ';' : ':'); + for (let p of haystack) { + let needle = path.join(p, exe); + if (statSyncNoException(needle)) { + return needle; + }; + } + + d('Failed to find executable anywhere in path'); + return exe; +} + +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +export function findActualExecutable(exe: string, args: Array): { + cmd: string; + args: Array +} { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') { + return { cmd: runDownPath(exe), args: args }; + } + + if (!sfs.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + const possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (let ext of possibleExts) { + let possibleFullPath = runDownPath(`${exe}${ext}`); + + if (sfs.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + + if (exe.match(/\.ps1$/i)) { + let cmd = path.join(process.env.SYSTEMROOT!, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + let psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + + return { cmd: cmd, args: psargs.concat(args) }; + } + + if (exe.match(/\.(bat|cmd)$/i)) { + let cmd = path.join(process.env.SYSTEMROOT!, 'System32', 'cmd.exe'); + let cmdArgs = ['/C', exe, ...args]; + + return { cmd: cmd, args: cmdArgs }; + } + + if (exe.match(/\.(js)$/i)) { + let cmd = process.execPath; + let nodeArgs = [exe]; + + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + + // Dunno lol + return { cmd: exe, args: args }; +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +export function spawnDetached(exe: string, params: Array, opts: any = null): Observable { + const { cmd, args } = findActualExecutable(exe, params); + + if (!isWindows) { + return spawn(cmd, args, assign({}, opts || {}, { detached: true })); + }; + + const newParams = [cmd].concat(args); + + let target = path.join(__dirname, '..', '..', 'vendor', 'jobber', 'Jobber.exe'); + let options = assign({}, opts || {}, { detached: true, jobber: true }); + + d(`spawnDetached: ${target}, ${newParams}`); + return spawn(target, newParams, options); +} + +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ + +export function spawn(exe: string, params: Array = [], opts: any = null): Observable { + opts = opts || {}; + let spawnObs = Observable.create((subj: Observer<{ + source: any, + text: any + }>) => { + let { stdin, ...optsWithoutStdIn } = opts; + let { cmd, args } = findActualExecutable(exe, params); + d(`spawning process: ${cmd} ${args.join()}, ${JSON.stringify(optsWithoutStdIn)}`); + let origOpts = assign({}, optsWithoutStdIn); + if ('jobber' in origOpts) { + delete origOpts.jobber; + } + if ('split' in origOpts) { + delete origOpts.split; + }; + + const proc = spawnOg(cmd, args, origOpts); + + let bufHandler = (source: string) => (b: string | Buffer) => { + if (b.length < 1) { + return; + }; + let chunk = '<< String sent back was too long >>'; + try { + if (typeof b === 'string') { + chunk = b.toString(); + } else { + chunk = b.toString(origOpts.encoding || 'utf8'); + } + } catch (e) { + chunk = `<< Lost chunk of process output for ${exe} - length was ${b.length}>>`; + } + + subj.next({ source: source, text: chunk }); + }; + + let ret = new Subscription(); + + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe( + (x: any) => proc.stdin.write(x), + subj.error.bind(subj), + () => proc.stdin.end() + )); + } else { + subj.error(new Error(`opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required`)); + } + } + + let stderrCompleted: Subject | Observable | null = null; + let stdoutCompleted: Subject | Observable | null = null; + let noClose = false; + + if (proc.stdout) { + stdoutCompleted = new AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', () => { (stdoutCompleted! as Subject).next(true); (stdoutCompleted! as Subject).complete(); }); + } else { + stdoutCompleted = Observable.of(true); + } + + if (proc.stderr) { + stderrCompleted = new AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', () => { (stderrCompleted! as Subject).next(true); (stderrCompleted! as Subject).complete(); }); + } else { + stderrCompleted = Observable.of(true); + } + + proc.on('error', (e: Error) => { + noClose = true; + subj.error(e); + }); + + proc.on('close', (code: number) => { + noClose = true; + let pipesClosed = Observable.merge(stdoutCompleted!, stderrCompleted!) + .reduce((acc) => acc, true); + + if (code === 0) { + pipesClosed.subscribe(() => subj.complete()); + } else { + pipesClosed.subscribe(() => subj.error(new Error(`Failed with exit code: ${code}`))); + } + }); + + ret.add(new Subscription(() => { + if (noClose) { + return; + }; + + d(`Killing process: ${cmd} ${args.join()}`); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + net.connect(`\\\\.\\pipe\\jobber-${proc.pid}`); + setTimeout(() => proc.kill(), 5 * 1000); + } else { + proc.kill(); + } + })); + + return ret; + }); + + return opts.split ? spawnObs : spawnObs.pluck('text'); +} + +function wrapObservableInPromise(obs: Observable) { + return new Promise((res, rej) => { + let out = ''; + + obs.subscribe( + (x) => out += x, + (e) => rej(new Error(`${out}\n${e.message}`)), + () => res(out)); + }); +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +export function spawnDetachedPromise(exe: string, params: Array, opts: any = null): Promise { + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} + +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +export function spawnPromise(exe: string, params: Array, opts: any = null): Promise { + return wrapObservableInPromise(spawn(exe, params, opts)); +} diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json new file mode 100644 index 0000000..2d7bf55 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "removeComments": false, + "preserveConstEnums": true, + "sourceMap": true, + "declaration": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "noImplicitThis": true, + "noUnusedParameters": true, + "module": "commonjs", + "moduleResolution": "node", + "pretty": true, + "target": "es5", + "outDir": "lib", + "lib": ["dom", "es2015"] + }, + "formatCodeOptions": { + "indentSize": 2, + "tabSize": 2 + }, + "exclude": [ + "node_modules", + "lib" + ] +} \ No newline at end of file diff --git a/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json new file mode 100644 index 0000000..4f40502 --- /dev/null +++ b/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json @@ -0,0 +1,38 @@ +{ + "rules": { + "curly": true, + "eofline": false, + "align": [true, "parameters"], + "class-name": true, + "indent": [true, "spaces"], + "max-line-length": [true, 150], + "no-consecutive-blank-lines": [true], + "no-trailing-whitespace": true, + "no-duplicate-variable": true, + "no-var-keyword": true, + "no-empty": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-requires": true, + "one-line": [true, + "check-else", + "check-whitespace", + "check-open-brace"], + "quotemark": [true, + "single", + "avoid-escape"], + "semicolon": [true, "always"], + "typedef-whitespace": [true, { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-type"] + } +} \ No newline at end of file diff --git a/inkstitch/electron/resources/electron.asar b/inkstitch/electron/resources/electron.asar new file mode 100644 index 0000000..7c0b08e Binary files /dev/null and b/inkstitch/electron/resources/electron.asar differ diff --git a/inkstitch/electron/snapshot_blob.bin b/inkstitch/electron/snapshot_blob.bin new file mode 100644 index 0000000..9e7ec2d Binary files /dev/null and b/inkstitch/electron/snapshot_blob.bin differ diff --git a/inkstitch/electron/v8_context_snapshot.bin b/inkstitch/electron/v8_context_snapshot.bin new file mode 100644 index 0000000..ee5159e Binary files /dev/null and b/inkstitch/electron/v8_context_snapshot.bin differ diff --git a/inkstitch/examples/Applique Color Change.svg b/inkstitch/examples/Applique Color Change.svg new file mode 100644 index 0000000..3d7b616 --- /dev/null +++ b/inkstitch/examples/Applique Color Change.svg @@ -0,0 +1,470 @@ + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 1. Digitize placement and tackdown stitches as differentcolors, in order to force a stop on your machine. + Steps: + 2. May or may not have to digitize the zig zag tackdown stitch as a different color, depends on the design. + 3. Complete the rest of the design as normal. + 4. Start sewing like normal, after machine does PlacementStitch, stop machine. + 5. Place material over Placement stitch, totally covering the stitch. Use a light adhesive spray to hold material. + 6. Start sewing 1st Tackdown stitch. Stop Machine after. + 7. Completely cut away excess material from the tackdown stitch. Best to use applique scissors if available. + 8. Start machine again and let it finish stitching the rest of the design. Applique portion is finished at this point. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Applique Stop.svg b/inkstitch/examples/Applique Stop.svg new file mode 100644 index 0000000..884013d --- /dev/null +++ b/inkstitch/examples/Applique Stop.svg @@ -0,0 +1,466 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 1. Digitize placement and tackdown stitches and apply stop code at the end to force machine to stop. + Steps: + 2. May or may not have to add a stop code for the zig zag stitches, depends on the design. + 3. Complete the rest of the design as normal. + 4. Start sewing like normal, after machine does PlacementStitch, stop machine. + 5. Place material over Placement stitch, totally covering the stitch. Use a light adhesive spray to hold material. + 6. Start sewing 1st Tackdown stitch. Stop Machine after. + 7. Completely cut away excess material from the tackdown stitch. Best to use applique scissors if available. + 8. Start machine again and let it finish stitching the rest of the design. Applique portion is finished at this point. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Bfly FSL.svg b/inkstitch/examples/Bfly FSL.svg new file mode 100644 index 0000000..9e528f1 --- /dev/null +++ b/inkstitch/examples/Bfly FSL.svg @@ -0,0 +1,837 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + "matrix(5, 0, 0, 5, -598.975, -235.975)" + + + Instructions + 1. For free standing lace, the areas thatwould be for traditional fills are going tobe for 2 layers of loose fill with opposingangles. For instance, one loose fill wouldhave 0 degree angle and the second layer would have 90 degree angle. + 2. Experiment with different densitylevels and stitch angles to attach different looks and affects. + 3. For detail work and outline work, use a decent size satin stitch. Satin stitchoutlines are required as that helps "seal"the edges and keep the design togetherafter the solvy stabilizer is removed. + 4. For the actual embroidery, use solvyand I prefer heavy weight solvy, usually with two layers of stabilizer. Dependingon the brand, may still have to use moreeven with it being heavy weight. Just have to experiement to find out what isneeded. + 5. Following the instructions on the stabilizer for removal. I tend to like to have a little of the stabilizer left and to try not to remove all of it. This allows forsome stiffness to remain in the finishedproduct. + 6. Enjoy your new FSL ornament. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Donkey FullBack Design.svg b/inkstitch/examples/Donkey FullBack Design.svg new file mode 100644 index 0000000..fd9ae08 --- /dev/null +++ b/inkstitch/examples/Donkey FullBack Design.svg @@ -0,0 +1,652 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Faux Fill Blend.svg b/inkstitch/examples/Faux Fill Blend.svg new file mode 100644 index 0000000..c3a91e9 --- /dev/null +++ b/inkstitch/examples/Faux Fill Blend.svg @@ -0,0 +1,580 @@ + + + + + + + + Fill stitch starting point + + + + + Fill stitch ending point + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + Instructions + 1. A faux blend has a regular fill layer on bottom and each subsequent layer has variable density settings + 2. Make sure that all of the layers havethe same stitch angle, this allows for blending to happen + 3. When doing more then 2 layers, eachblending layer uses less density then the previous layer + 4. Make sure to follow the same startand end points for each layer. For instance, if the base layer starts at top top and ends at bottom right, follow that same sequence for each layer. + 5. Underlay is typically not needed, but it does depend on the individualproject. + 6. Typically, it is best to work from lightto dark colors, but again it does depend on the design and the desired end look. + 7. While this is not a true blend, inmost instances, this type of blend isgood enough to achieve the desiredend look. + 8. The density values in this exampleare not set in stone, but just toillustrate the concept. True settings will depend on the design, fabric it's goingon and the size of design. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Fill Stitch Starting and Ending Point.svg b/inkstitch/examples/Fill Stitch Starting and Ending Point.svg new file mode 100644 index 0000000..d11a24a --- /dev/null +++ b/inkstitch/examples/Fill Stitch Starting and Ending Point.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + Fill stitch ending point + + + + + Fill stitch starting point + + + + + + + + image/svg+xml + + + + + + + + fill-stitch starting point fill-stitch ending point The start and end markers above tell Ink/Stitch where to start and end the fill stitch.To use the markers, first install them using the Ink/Stitch "Install add-ons for Inkscape" extension and restart Inkscape.Access the markers using the Symbols tool (Object -> Symbols). Select "Ink/Stitch Comm ands" as the symbol set. Drag a marker out onto your canvas (doesn't matter where). Use the Flow-Chart Tool ("create diagram connectors") to draw a connection between the marker and the fill object to which it should apply. This will add a connector path. Adding an arrow on that path as in the above example is not necessary.Moving the marker will change the connector's position to match. You can also move the endpoints of the connector manually. The connector's endpoint nearest to the fill object is the point at which stitching will start or end. + + + + + diff --git a/inkstitch/examples/Fringe Example.svg b/inkstitch/examples/Fringe Example.svg new file mode 100644 index 0000000..9e256de --- /dev/null +++ b/inkstitch/examples/Fringe Example.svg @@ -0,0 +1,500 @@ + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg b/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg new file mode 100644 index 0000000..15f188c --- /dev/null +++ b/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg @@ -0,0 +1,421 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/InkStitch 1 Color.svg b/inkstitch/examples/InkStitch 1 Color.svg new file mode 100644 index 0000000..0081f33 --- /dev/null +++ b/inkstitch/examples/InkStitch 1 Color.svg @@ -0,0 +1,404 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/InkStitch Logo QR Code Patch.svg b/inkstitch/examples/InkStitch Logo QR Code Patch.svg new file mode 100644 index 0000000..bcbeeef --- /dev/null +++ b/inkstitch/examples/InkStitch Logo QR Code Patch.svg @@ -0,0 +1,2312 @@ + +Fill stitch ending pointFill stitch starting pointimage/svg+xml"Ink/Stitch""1""400px QR code for Ink/Stitch""matrix(2.1218, 0, 0, 2.1218, -187.183, -187.183)""matrix(1.6617263999999998,0,0,1.6617263999999998,-191,-236)" \ No newline at end of file diff --git a/inkstitch/examples/InkStitch Multi Color.svg b/inkstitch/examples/InkStitch Multi Color.svg new file mode 100644 index 0000000..9d4b11e --- /dev/null +++ b/inkstitch/examples/InkStitch Multi Color.svg @@ -0,0 +1,430 @@ + + + + + + + + + + image/svg+xml + + + + + + "matrix(2.23777, 0, 0, 2.23777, -204, -268)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Logo Hat Embroidery.svg b/inkstitch/examples/Logo Hat Embroidery.svg new file mode 100644 index 0000000..bddb372 --- /dev/null +++ b/inkstitch/examples/Logo Hat Embroidery.svg @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + Hat Embroidery + 1. Hats require a very specific sequence.Bottom to top, center out. + 2. It does not matter which way you gocenter out, to the right or to the left firstjust be consistent throughout the design + 3. Be careful of the design field for hatson your machine. Some limit the height,some can go as tall as what canphysically fit. 50mm to 57mm tall is a good height on average. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Monogram Frame Example.svg b/inkstitch/examples/Monogram Frame Example.svg new file mode 100644 index 0000000..ffb21b7 --- /dev/null +++ b/inkstitch/examples/Monogram Frame Example.svg @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + "Black Stallion" + "matrix(1.53415, 0, 0, 1.53415, -188.975, -188.975)" + + + Instructions + 1. Frame intended to have monogramletters to be sandwiched between bothframes. The monogram can be longer then the frames if desired.2. Can use both frames, or delete eitherone and just use it as a top or bottom frame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/Puff Only.svg b/inkstitch/examples/Puff Only.svg new file mode 100644 index 0000000..d435e99 --- /dev/null +++ b/inkstitch/examples/Puff Only.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + Steps + 1. Digitizing puff to where thestitches are surrounding the entire embroidery area to aidin foam removal. + 2. Use either the pinch or capping method toaccomplish this. This designuses the pinching method. + 3. After everything stitchesremove the foam and any post stitching cleanup for thenubbies that might be around. + + Pinch + Pinch + + + + + + + diff --git a/inkstitch/examples/PuffRegular.svg b/inkstitch/examples/PuffRegular.svg new file mode 100644 index 0000000..4678bf2 --- /dev/null +++ b/inkstitch/examples/PuffRegular.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + Steps + 2. Digitizing puff to where thestitches are surrounding the entire embroidery area to aidin foam removal. + 3. Use either the pinch or capping method toaccomplish this. This designuses the pinching method. + 4. After everything stitchesremove the foam and any post stitching cleanup for thenubbies that might be around. + + 1. Digitize regular embroideryfirst and then insert a stopcommand (or color change). + Pinch + Pinch + + + + + + + + + + + + diff --git a/inkstitch/examples/True Blend.svg b/inkstitch/examples/True Blend.svg new file mode 100644 index 0000000..94bd521 --- /dev/null +++ b/inkstitch/examples/True Blend.svg @@ -0,0 +1,710 @@ + + + + + + + + Fill stitch starting point + + + + + Fill stitch ending point + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 100% + 0% + 75% + 25% + 25% + 75% + 0% + 100% + =100% + =100% + =100% + =100% + Instructions + 1. Many of the conditions of faux blendsalso apply here. Stitch angle, start/endsequencing, typically go from light to dark colors (depends on the design aswell) + 2. Biggest difference is math is involvedand the more complicated the blend, the more complicated the math. Justhave to make sure that each layer for agiven section equals 100% of the density for that section that you are wanting. + 3. This can involve more layers of colorsand more increments of densityvariation. The biggest factor is the size/shape of the design and the specifics of the project. + 4. What makes this a true blend compared to a faux blend is that eachsection of the layers are actually mixing with each other. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/examples/inkstitch_logo_screenshot.png b/inkstitch/examples/inkstitch_logo_screenshot.png new file mode 100644 index 0000000..6c77a85 Binary files /dev/null and b/inkstitch/examples/inkstitch_logo_screenshot.png differ diff --git a/inkstitch/fonts/medium_font/LICENSE b/inkstitch/fonts/medium_font/LICENSE new file mode 100644 index 0000000..10ea73a --- /dev/null +++ b/inkstitch/fonts/medium_font/LICENSE @@ -0,0 +1,94 @@ +Copyright (c) 2017, Lex Neva. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + diff --git a/inkstitch/fonts/medium_font/README_en.md b/inkstitch/fonts/medium_font/README_en.md new file mode 100644 index 0000000..129d3fb --- /dev/null +++ b/inkstitch/fonts/medium_font/README_en.md @@ -0,0 +1,24 @@ +Small Font +========== + +This is a small font for use in machine embroidery. It includes capital and lowercase letters, numbers, and the following punctuation: `< > = - + , : ( ) @ . _ ' " “ ”` + +Currently one size is available, 0.2 inches, as measured by the width of the capital letter "M". + +You may use this font for free in any embroidery project, including in designs that you intend to sell or sew out and sell. There is no limitation on the number of designs or items you may sell. For full details, check the LICENSE file in the top directory. + +I've taken pains to make this font sew out nicely even though it's tiny. Every character is properly underlayed using a center-walk stitch. Even still, your choice of fabric, needle, and stabilizer will definitely affect your end results! Make sure you test it out before sewing onto a garment or anything else that you really care about. + +If you can see areas for improvement, I'd like to know. Just open a github issue in this repo and we can talk through your ideas. + +File Structure +-------------- + +This font is designed for Ink/Stitch and uses its standard font folder layout. The folder contains four files: + +* `→.svg` contains glyphs designed for words laid out horizontally and stitched left-to-right +* `←.svg` contains glyphs designed for words laid out horizontally and stitched right-to-left +* `↓.svg` contains glyphs designed for words laid out vertically and stitched top-to-bottom +* `↑.svg` contains glyphs designed for words laid out vertically and stitched bottom-to-top + +The files are named as they are so as to (hopefully) be recognizable to native speakers of multiple languages. diff --git a/inkstitch/fonts/medium_font/font.json b/inkstitch/fonts/medium_font/font.json new file mode 100644 index 0000000..df760bd --- /dev/null +++ b/inkstitch/fonts/medium_font/font.json @@ -0,0 +1,14 @@ +{ + "name": "Ink/Stitch Medium Font", + "description": "A basic font suited for medium-sized characters. The capital em is 0.6 inches wide at 100% scale. Can be scaled down to 75% or up to 150%. Every satin has contour underlay.", + "leading": 24, + "letter_spacing": 4.5, + "word_spacing": 13.5, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 0.75, + "max_scale": 2.0, + "kerning_pairs": { + "wo": -0.9 + } +} diff --git a/inkstitch/fonts/medium_font/←.svg b/inkstitch/fonts/medium_font/←.svg new file mode 100644 index 0000000..3a2c793 --- /dev/null +++ b/inkstitch/fonts/medium_font/←.svg @@ -0,0 +1,392 @@ + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/fonts/medium_font/↑.svg b/inkstitch/fonts/medium_font/↑.svg new file mode 100644 index 0000000..30c6c02 --- /dev/null +++ b/inkstitch/fonts/medium_font/↑.svg @@ -0,0 +1,389 @@ + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/fonts/medium_font/→.svg b/inkstitch/fonts/medium_font/→.svg new file mode 100644 index 0000000..38fe99a --- /dev/null +++ b/inkstitch/fonts/medium_font/→.svg @@ -0,0 +1,393 @@ + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/fonts/medium_font/↓.svg b/inkstitch/fonts/medium_font/↓.svg new file mode 100644 index 0000000..30ba188 --- /dev/null +++ b/inkstitch/fonts/medium_font/↓.svg @@ -0,0 +1,389 @@ + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inkstitch/fonts/small_font/LICENSE b/inkstitch/fonts/small_font/LICENSE new file mode 100644 index 0000000..10ea73a --- /dev/null +++ b/inkstitch/fonts/small_font/LICENSE @@ -0,0 +1,94 @@ +Copyright (c) 2017, Lex Neva. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + diff --git a/inkstitch/fonts/small_font/README_en.md b/inkstitch/fonts/small_font/README_en.md new file mode 100644 index 0000000..129d3fb --- /dev/null +++ b/inkstitch/fonts/small_font/README_en.md @@ -0,0 +1,24 @@ +Small Font +========== + +This is a small font for use in machine embroidery. It includes capital and lowercase letters, numbers, and the following punctuation: `< > = - + , : ( ) @ . _ ' " “ ”` + +Currently one size is available, 0.2 inches, as measured by the width of the capital letter "M". + +You may use this font for free in any embroidery project, including in designs that you intend to sell or sew out and sell. There is no limitation on the number of designs or items you may sell. For full details, check the LICENSE file in the top directory. + +I've taken pains to make this font sew out nicely even though it's tiny. Every character is properly underlayed using a center-walk stitch. Even still, your choice of fabric, needle, and stabilizer will definitely affect your end results! Make sure you test it out before sewing onto a garment or anything else that you really care about. + +If you can see areas for improvement, I'd like to know. Just open a github issue in this repo and we can talk through your ideas. + +File Structure +-------------- + +This font is designed for Ink/Stitch and uses its standard font folder layout. The folder contains four files: + +* `→.svg` contains glyphs designed for words laid out horizontally and stitched left-to-right +* `←.svg` contains glyphs designed for words laid out horizontally and stitched right-to-left +* `↓.svg` contains glyphs designed for words laid out vertically and stitched top-to-bottom +* `↑.svg` contains glyphs designed for words laid out vertically and stitched bottom-to-top + +The files are named as they are so as to (hopefully) be recognizable to native speakers of multiple languages. diff --git a/inkstitch/fonts/small_font/font.json b/inkstitch/fonts/small_font/font.json new file mode 100644 index 0000000..7732a7a --- /dev/null +++ b/inkstitch/fonts/small_font/font.json @@ -0,0 +1,14 @@ +{ + "name": "Ink/Stitch Small Font", + "description": "A font suited for small characters. The capital em is 0.2 inches wide at 100% scale. Can be scaled up to 300%.", + "leading": 8, + "letter_spacing": 1.5, + "word_spacing": 4.5, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 1.0, + "max_scale": 3.0, + "kerning_pairs": { + "wo": -0.3 + } +} diff --git a/inkstitch/fonts/small_font/←.svg b/inkstitch/fonts/small_font/←.svg new file mode 100644 index 0000000..dd635bc --- /dev/null +++ b/inkstitch/fonts/small_font/←.svg @@ -0,0 +1,2989 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/small_font/↑.svg b/inkstitch/fonts/small_font/↑.svg new file mode 100644 index 0000000..e304a71 --- /dev/null +++ b/inkstitch/fonts/small_font/↑.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/small_font/→.svg b/inkstitch/fonts/small_font/→.svg new file mode 100644 index 0000000..a4da0a6 --- /dev/null +++ b/inkstitch/fonts/small_font/→.svg @@ -0,0 +1,2978 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/small_font/↓.svg b/inkstitch/fonts/small_font/↓.svg new file mode 100644 index 0000000..484937b --- /dev/null +++ b/inkstitch/fonts/small_font/↓.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_directors/README_en.md b/inkstitch/fonts/tt_directors/README_en.md new file mode 100644 index 0000000..52ba4a2 --- /dev/null +++ b/inkstitch/fonts/tt_directors/README_en.md @@ -0,0 +1,13 @@ +Font origin and licence for TT_Masters + +www.free-fonts-download.com/Script/tt-directors-font +Font's name: TT Directors Font +Font's license: Public domain / GPL / OFL +Zip File size: 532 kb +Designed by: Jovanny Lemonad +Designer web: http://typetype.ru/ + +Font is traced and converted to suit Inkstitch embroidery lettering format. + + + diff --git a/inkstitch/fonts/tt_directors/font.json b/inkstitch/fonts/tt_directors/font.json new file mode 100644 index 0000000..a819c2c --- /dev/null +++ b/inkstitch/fonts/tt_directors/font.json @@ -0,0 +1,14 @@ +{ + "name": "TT Directors", + "description": "A font suited for directing", + "leading": 20, + "letter_spacing": 1.0, + "word_spacing": 4.5, + "auto_satin": true, + "default_glyph": "?", + "min_scale": 1.0, + "max_scale": 5.0, + "kerning_pairs": { + "wo": -0.3 + } +} diff --git a/inkstitch/fonts/tt_directors/←.svg b/inkstitch/fonts/tt_directors/←.svg new file mode 100644 index 0000000..d944f19 --- /dev/null +++ b/inkstitch/fonts/tt_directors/←.svg @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_directors/↑.svg b/inkstitch/fonts/tt_directors/↑.svg new file mode 100644 index 0000000..d944f19 --- /dev/null +++ b/inkstitch/fonts/tt_directors/↑.svg @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_directors/→.svg b/inkstitch/fonts/tt_directors/→.svg new file mode 100644 index 0000000..d944f19 --- /dev/null +++ b/inkstitch/fonts/tt_directors/→.svg @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_directors/↓.svg b/inkstitch/fonts/tt_directors/↓.svg new file mode 100644 index 0000000..d944f19 --- /dev/null +++ b/inkstitch/fonts/tt_directors/↓.svg @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_masters/README_en.md b/inkstitch/fonts/tt_masters/README_en.md new file mode 100644 index 0000000..1941e46 --- /dev/null +++ b/inkstitch/fonts/tt_masters/README_en.md @@ -0,0 +1,13 @@ +Font origin and licence for TT_Masters + +www.free-fonts-download.com/Script/tt-masters-font +Font's name: TT Masters Font +Font's license: Public domain / GPL / OFL +Zip File size: 532 kb +Designed by: Jovanny Lemonad +Designer web: http://typetype.ru/ + +Font is traced and converted to suit Inkstitch embroidery lettering format. + + + diff --git a/inkstitch/fonts/tt_masters/font.json b/inkstitch/fonts/tt_masters/font.json new file mode 100644 index 0000000..341aae5 --- /dev/null +++ b/inkstitch/fonts/tt_masters/font.json @@ -0,0 +1,16 @@ +{ + "name": "TT Masters", + "description": "A font suited for heavy typing :)", + "leading": 22, + "letter_spacing": 1.5, + "word_spacing": 7, + "auto_satin": true, + "default_glyph": "?", + "min_scale": 1.0, + "max_scale": 3.0, + "kerning_pairs": { + "wo": -0.3, + "vo": -0.3 + + } +} diff --git a/inkstitch/fonts/tt_masters/←.svg b/inkstitch/fonts/tt_masters/←.svg new file mode 100644 index 0000000..16dd7a4 --- /dev/null +++ b/inkstitch/fonts/tt_masters/←.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_masters/↑.svg b/inkstitch/fonts/tt_masters/↑.svg new file mode 100644 index 0000000..16dd7a4 --- /dev/null +++ b/inkstitch/fonts/tt_masters/↑.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_masters/→.svg b/inkstitch/fonts/tt_masters/→.svg new file mode 100644 index 0000000..16dd7a4 --- /dev/null +++ b/inkstitch/fonts/tt_masters/→.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/fonts/tt_masters/↓.svg b/inkstitch/fonts/tt_masters/↓.svg new file mode 100644 index 0000000..16dd7a4 --- /dev/null +++ b/inkstitch/fonts/tt_masters/↓.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inkstitch/palettes/InkStitch ARC Polyester.gpl b/inkstitch/palettes/InkStitch ARC Polyester.gpl new file mode 100644 index 0000000..a9d2b2c --- /dev/null +++ b/inkstitch/palettes/InkStitch ARC Polyester.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: ARC Polyester +Columns: 4 +# RGB Value Color Name Number +236 244 251 White 10 +250 176 68 Scholastic 432 +229 100 52 Orange 650 +242 172 179 Pale Pink 305 +194 147 173 Smoky Grape 345 + 56 64 89 Light Midnight 5553 + 51 80 138 Imperial Blue 806 + 0 142 138 Jade Green 447 + 46 159 117 Pale Jade 1615 +227 196 152 Winter Wheat 1145 +126 92 62 Dark Brown 1545 +155 169 165 Quarry 111 +240 247 248 White 15 +233 146 37 Goldenrod 520 +227 103 50 Orange 134 +227 92 120 Shrimp 315 +167 109 144 Mulberry 347 + 58 65 79 Dark Grey / Blue 422 +125 171 187 Milky Blue 404 + 0 153 153 Cyan 443 + 37 117 72 Jade 992 +201 173 127 Latte 2518 +143 95 69 Rancho Brown 3142 +134 142 140 Platinum 8010 +237 237 210 Light Yellow 1140 +248 149 64 Orange 649 +243 89 47 Tangerine 135 +240 111 140 Light Cerise 313 +131 84 120 Argyle Purple 1323 + 58 66 75 Dark Navy 423 + 85 187 200 Capri 446 +174 215 168 Green Ash 947 + 67 100 72 Teal 995 +197 161 108 Honey 2526 +111 81 67 Medium Brown 859 +141 147 138 Platinum 1713 +240 242 216 Vanilla Ice 811 +229 178 92 Golden Cream 466 +224 93 67 Dark Salmon Pink 526 +255 161 181 Dusty Rose 307 +130 98 139 Light Grape 1313 +168 190 213 Angel Falls 379 + 78 182 193 Capri 444 +185 222 138 Lettuce Green 984 +152 171 134 Olive Green 962 +182 163 108 Lark 1552 +133 88 55 Dark Brown 841 +136 145 134 Neutral Gray 112 +227 237 207 Light Yellow 828 +197 146 52 Old Gold 652 +221 88 81 Dark Salmon Pink 527 +231 127 157 Wild Orchid 309 +103 64 103 Dark Purple 348 +160 191 215 Blue Baron 380 + 81 178 187 River Blue 4419 +192 232 124 Lime 985 +122 142 104 Loden Frost 963 +191 155 84 Oak Buff 620 +113 77 61 Brown 1527 +117 126 120 Medium Grey 675 +240 238 204 Glass Green 165 +193 136 47 Medium Orange / Brown 654 +186 70 54 Dark Orange / Brown 528 +167 59 65 Terra Cotta 1240 + 93 74 110 Steel 398 +144 174 202 Pale Blue 382 + 0 153 175 Dark Blue / Green 5555 +152 193 115 Medium Green 1619 +166 164 121 Sage Green 653 +206 158 89 Oak Buff 619 +119 104 82 Medium Green / Yellow 5558 +126 137 142 Grey 589 +247 230 185 Almond Oil 627 +174 133 72 Gold 905 +207 76 63 Dark Salmon 3016 +194 71 85 Dusky Pink 190 + 89 65 74 Dark Brown 362 +144 166 198 Pale Blue 381 + 36 156 187 Dark Turquoise Blue 445 +127 217 87 Bright Green 1183 +184 198 107 Celery Green 983 +176 148 91 Medium Yellow 843 +115 92 72 Bagby Green 878 +115 127 127 Stormy Sea 115 +244 238 128 Medium Yellow 632 +179 119 60 Wicker 624 +226 140 115 Blush 3014 +185 64 54 Dark Orange / Brown 700 +177 184 211 Ice Blue 383 +127 174 202 Pale Blue / Green 406 + 0 120 166 Pretty Blue 697 +115 181 78 Medium Green 988 +155 153 85 Olive Green 951 +177 152 75 Faded Brass 842 +104 80 68 Dark Fawn 890 +118 119 124 Medium Grey 585 +250 227 55 Yellow 635 +177 109 70 Wicker 146 +156 87 68 Medium Brown 839 +180 58 57 Dark Orange / Brown 3015 +170 166 198 Pale Violet 388 +168 202 217 Crystal Blue 6137 + 30 97 106 Deep Atlantic 913 +135 188 166 Dusty Jade Green 961 +159 170 83 Bright Green 950 +209 172 73 Misted Yellow 616 +118 85 71 Medium Brown 888 +109 110 115 Pewter 1716 +248 190 0 Fluo Yellow 763 +186 110 77 Brown 253 +135 74 60 Dark Brown 840 +192 70 66 Dark Salmon Pink 266 +210 195 204 Orchid Leaf 387 +175 203 207 Light Blue / Green 402 + 72 112 114 Gander Green 1386 + 82 179 151 Emerald Green 909 +204 184 109 Rattan 982 +186 156 69 Medium Green / Yellow 2519 +106 77 66 Dark Fawn 513 + 98 127 126 Trellis 966 +247 225 63 Lemon 633 +165 88 58 Medium Brown 255 +148 76 66 Dark Red / Orange 838 +168 61 58 Dark Orange / Brown 187 +169 152 178 Sterling 343 +150 200 217 Moderate Blue 403 + 67 90 106 Petrol Blue 5556 + 30 158 137 Tender Teal 109 +156 138 64 Light Green / Yellow 952 +193 185 157 Sand 1147 + 95 78 64 Dark Fawn 1152 + 98 136 138 Arctic 965 +247 215 72 Gold Goblet 604 +253 219 185 Opaline 1160 +252 225 209 Rosewater 301 +182 70 71 Terra Cotta 529 +153 144 177 Light Lilac 386 +157 200 214 Aqua Lake 4004 + 57 98 118 Medium Green / Blue 142 + 0 140 110 Dark Blue / Green 450 +138 134 74 Medium Green / Yellow 953 +189 185 162 Alfalfa 1141 +104 78 59 Clayrust 858 +108 124 126 Flint Stone 114 +255 210 52 Yellow 419 +245 209 185 Flesh 501 +205 171 153 Peach 830 +154 65 62 Rust 571 +129 116 159 Aster Purple 1324 +118 175 203 Alaskan Blue 5554 +106 135 149 Medium Blue / Grey 541 + 0 115 83 Medium Green 449 +125 120 66 Olive Green 845 +163 162 142 Flint Gray 1149 + 81 73 69 Dark Brown 891 + 86 94 90 Dark Grey 116 +255 197 0 Sunflower 4117 +242 197 173 Bisque 503 +230 207 213 Orchid Ice 376 +155 59 64 Rust 213 +124 104 171 Light Purple 390 + 96 153 177 Wonder Blue 405 +192 233 218 Bleached Aqua 442 + 0 139 111 Dark Blue / Green 825 +117 113 68 Dark Green / Yellow 956 +150 139 119 Moon Rock 1520 + 84 74 68 Dark Brown 892 + 72 80 82 Granite 247 +245 222 143 Blond 601 +238 197 174 Bisque 502 +255 206 210 Blushing Bride 302 +144 67 74 Dark Brown 531 +102 80 143 Kings Purple 392 + 57 129 163 Medium Green / Blue 409 +147 212 198 Pale Aqua Green 903 + 54 125 103 Dark Blue / Green 3325 + 97 101 62 Olive Drab 955 +168 151 129 Light Brown 4371 +203 209 194 Almost Aqua 101 + 81 82 80 Granite 117 +255 215 125 Glow 612 +216 162 133 Cinnamon 831 +251 222 214 Rosewater 303 +141 63 67 Dark Rust Red 1241 + 75 72 132 Purple 1031 + 0 128 168 Medium Turquoise Blue 2093 +148 211 187 Pale Aqua 904 + 41 95 74 Green Petal 695 + 97 96 66 Olive Drab 655 +148 135 117 Moon Rock 836 +198 200 186 Light Green / Yellow 5829 + 59 60 59 Black 20 +238 217 134 Pale Yellow / Gold 613 +190 135 109 Tawny Birch 832 +246 202 213 Pink Bazaar 304 +131 68 83 Dark Brown 2250 + 83 85 153 Medium Purple 1331 + 67 126 176 Medium Blue 809 + 62 173 158 Grizzly Turquoise 906 +207 226 189 Ambrosia 945 + 76 91 65 Medium Green / Yellow 240 +138 123 107 Pine Bark 873 +187 195 181 Palm Leaf 829 +255 201 76 Cornsilk 42 +241 206 88 Primrose Yellow 605 +255 190 172 Flesh Pink 504 +233 176 186 Light Melon 306 +115 59 61 Sepia 1243 + 67 111 157 Cornflower 385 + 55 112 164 Medium Blue 1163 + 91 185 169 Aqua Green 907 +214 225 182 Lime Cream 944 +177 153 131 Fawn 819 +120 118 104 Mushroom 118 +208 210 204 Light Green 5559 +241 255 82 Gold / Yellow 21 +248 210 114 Daffodil 602 +253 174 153 Salmon 505 +223 152 181 Pink 321 +117 71 79 Dark Purple 363 + 55 73 124 Medium Purple 2031 + 62 105 156 Cornflower 417 + 46 165 155 Grizzly Turquoise 138 + 64 155 71 Sage 5557 +217 193 157 Pale Peach 818 +185 163 129 Cane 628 +181 191 184 Winter Sage 1708 +184 81 110 Dark Pink 54 +251 191 73 Scholastic 286 +238 153 142 Salmon 506 +189 83 121 Dark Pink 332 +108 62 71 Dark Purple 216 + 59 72 109 Ash 5550 + 0 102 153 Danish Teal 413 + 0 135 122 Medium Green / Blue 4627 + 53 143 72 Dark Green 990 +210 192 149 Taupe 815 +176 138 87 Medium Yellow 621 +192 203 198 Ballad Blue 1707 +255 118 95 Persimmon 47 +226 180 63 Mustard Yellow 609 +250 166 129 Coral Reef 508 +183 82 122 Dark Pink 325 +106 60 74 Dark Purple 361 + 55 77 112 Ash 5551 + 26 102 144 Medium Blue 104 + 87 120 104 Gander Green 455 + 0 139 71 Emerald 777 +199 186 154 Gravel 1148 +159 138 103 Kelp 412 +165 176 171 Aqua Gray 1710 +255 233 98 Star Gold 33 +246 188 58 Yellow Gold 641 +227 123 85 Copper 525 +203 105 143 Passion Pink 324 +197 155 147 Adobe Rose 862 + 51 76 105 Dark Navy 415 + 30 96 149 Dark Royal Blue 4453 + 67 74 49 Dark Bottle Green 448 + 0 131 64 Green 317 +220 204 168 Sea Mist 814 +120 97 69 Bagby Green 857 +174 185 182 Pearl Blue 102 +255 133 144 Azalea 46 +244 178 69 Amber 642 +234 129 76 Gold 3001 +177 64 91 Dusky Pink 333 +170 123 114 Nostalgia Rose 864 + 61 67 91 Light Midnight 416 + 32 99 145 Medium Blue 414 + 48 85 79 Enchanted Sea 4735 + 49 135 87 Celtics Green 451 +234 222 188 Cream 812 +170 126 96 Fawn 833 +150 158 156 Dark Grey 588 +255 185 83 Mimosa 43 +252 163 59 Orange 646 +233 108 50 Golden Brown 651 +157 61 74 Terra Cotta 530 +159 110 99 Orange / Brown 867 + 62 66 77 Dark Navy 5552 + 48 108 166 Medium Blue 1423 + 0 147 142 Peppermint 688 + 83 174 121 Green 949 +211 200 165 Light Green / Yellow 1146 +133 102 72 Medium Brown 854 +178 191 189 Surf Spray 107 +150 232 69 Bright Green 32 diff --git a/inkstitch/palettes/InkStitch ARC Rayon.gpl b/inkstitch/palettes/InkStitch ARC Rayon.gpl new file mode 100644 index 0000000..909aebb --- /dev/null +++ b/inkstitch/palettes/InkStitch ARC Rayon.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: ARC Rayon +Columns: 4 +# RGB Value Color Name Number + 66 69 73 Dark Navy 920 +232 170 67 Amber 882 + 48 154 148 Tender Teal 691 + 96 59 68 Intense Maroon 331 +175 193 119 Nile 791 +231 190 165 Evening Sand 601 + 73 61 58 Black Chrome 880 + 72 79 65 Dark Grey / Green 303 +245 224 199 Aspen White 599 +163 190 190 Canal Blue 380 +196 212 201 Pale Blue 820 +244 252 253 White 15 + 66 70 77 Dark Navy 921 +255 182 37 Golden Lights 764 + 0 135 121 Isle Green 157 +205 147 176 Violet Toule 640 +142 157 78 Medium Green / Yellow 793 +242 156 125 Peach Pink 607 + 89 73 65 Dark Brown 354 + 77 94 83 Kahki Green 245 +236 211 202 Chalk 742 +151 186 199 Pale Blue 682 +170 195 201 Aqualine 822 +234 245 253 White 10 + 56 63 79 Dark Grey / Blue 120 +255 200 85 Cornsilk 763 + 0 169 134 Peppermint 676 +226 197 209 Light Pink 376 + 68 102 82 Kahki Green 695 +164 81 72 Dark Red / Orange 572 +122 92 69 Medium Brown 878 + 56 88 78 Enchanted Sea 324 +235 133 149 Light Orange 713 + 98 139 154 Dull Blue 783 +112 147 164 Medium Blue 453 +197 202 191 Gray Violet 580 + 58 72 94 Dark Blue / Green 218 +245 243 195 Celery 662 + 59 196 160 Peppermint 637 +112 64 106 Dark Purple 745 + 98 148 89 Holly Green 320 +167 85 75 Medium Brown 260 +128 111 92 Medium Green / Yellow 355 + 55 114 109 Dark Green / Blue 185 +133 71 69 Dark Brown 333 + 73 97 121 Dark Grey / Blue 544 + 92 125 144 Slate Grey 540 +194 200 189 Pale Grey 581 + 74 84 102 Petrol Blue 123 +229 223 171 Light Yellow / Orange 667 +138 222 208 Seafrost 681 +167 71 105 Medium Purple 215 +133 171 85 Medium Green / Yellow 690 +188 102 81 Faded Rose 258 + 87 71 61 Dark Brown 613 + 62 108 98 Dark Green 563 +108 63 70 Sepia 416 + 70 104 136 Petrol Blue 142 + 84 102 115 Grey 381 +169 179 172 Traditional Gray 582 + 54 94 148 Medium Purple 808 +246 232 174 Tusk 288 +131 219 190 Tropical Wave 679 +225 130 163 Pink 274 +145 183 114 Medium Green 312 +162 87 65 Medium Brown 255 + 71 64 61 Black Chrome 879 +156 199 155 Hemlock 683 +244 178 186 Candy Pink 670 + 74 93 106 Dark Grey / Blue 541 + 79 91 95 Dark Grey / Blue 542 +160 169 164 Quarry 118 +171 190 204 Cashmere Blue 103 +245 235 189 Transparent Yellow 665 +179 232 207 Mint 635 +231 189 206 Light Pink 659 +134 188 122 Medium Green 315 +165 98 71 Brown 256 +175 138 108 Tawny Birch 620 +152 175 144 Moss 617 +233 176 179 Salmon 327 + 71 71 103 Petrol Blue 217 +133 154 180 Medium Blue / Grey 660 +165 172 168 Aqua Gray 588 +102 128 160 Limoges Blue 272 +233 218 162 Banana Crepe 285 + 93 164 156 Medium Green / Blue 138 +243 217 218 Light Pink 710 +146 183 110 Medium Green 311 +193 131 62 Medium Orange / Brown 384 +184 164 136 Pale Orange 626 +114 135 123 Cloudy Jade 363 +241 199 196 Pink Mist 611 + 59 65 84 Dark Grey / Blue 122 + 85 102 141 Medium Blue 389 +134 136 126 Dark Green 243 + 62 95 149 Slate Blue 806 +239 211 43 Pale Beige 219 + 49 134 122 Jade 110 +204 163 186 Lilac Pink 639 +191 231 144 Green Dust 537 +195 134 70 Sunburst 387 +177 160 130 Twill 600 + 77 94 83 Kahki Green 364 +230 194 178 Peach Whip 352 +175 183 201 Medium Grey 815 + 68 79 125 Grey / Blue 366 +101 110 107 Metal 675 + 44 92 132 Imperial Blue 809 +251 226 146 Popcorn 661 + 49 85 78 Enchanted Sea 129 +194 134 168 Smoky Grape 644 + 96 203 131 Pale Green 634 +254 184 113 Buff Orange 290 +174 149 115 Beige 412 + 85 106 80 Water Lilly 240 +121 65 72 Dark Brown 216 +111 111 150 Dusted Peri 301 + 65 75 112 Ash 391 + 99 114 115 Trooper 244 + 49 103 143 Medium Blue 104 +255 202 87 Cornsilk 663 + 90 131 132 Pale Green / Blue 385 +214 105 153 Hot Pink 261 + 0 179 130 Medium Green / Blue 638 +251 214 158 New Gold 338 +181 152 114 Beige 628 +110 123 76 Lt. Olive 692 +105 60 62 Sepia 330 +145 139 176 Persian Violet 388 +117 145 134 Olive 362 +106 109 107 Steel Gray 677 + 95 134 150 Dull Blue 539 +255 185 51 Medium Orange 664 +213 239 220 Light Blue 368 +200 84 133 Medium Pink 263 + 92 195 153 Medium Green 630 +237 177 92 Chamois 466 +166 146 120 Almondine 394 +186 192 145 Gravel 619 +244 209 211 Light Pink 705 +133 125 165 Dark Lilac 817 + 59 98 103 Dark Blue / Green 673 +125 135 135 Lead 589 +112 155 174 Delphinium Blue 785 +253 163 57 Orange 432 + 91 188 166 Aqua Green 671 +212 84 131 Medium Pink 259 + 0 144 83 Medium Green 317 +214 129 68 Sunburst 766 +125 103 81 Medium Brown 877 +178 178 143 Eucalyptus 618 +246 215 199 Crystal Pink 707 +198 184 202 Purple Heather 641 + 47 98 106 Dark Blue / Green 689 +137 141 140 Platinum 678 + 86 144 175 Blue 402 +237 184 70 Yellow / Gold 286 + 71 157 152 Light Aqua 687 +175 74 82 Terra Cotta 188 + 92 120 70 Moss Green 722 +255 140 69 Golden Poppy 521 +206 194 166 Pale Gray Green 830 + 71 82 67 Dark Grey / Green 650 +237 184 156 Peach 605 +160 139 172 Light Lilac 642 + 0 115 133 Dark Turquoise Blue 126 +147 142 141 Silver Moon 672 + 0 101 156 Dark Blue 807 +245 235 91 Daffodil 568 + 30 112 95 Green Forest 307 +171 59 61 Terra Cotta 187 + 70 131 69 Dark Green 538 +230 101 64 Orange 519 +233 215 174 Pale Peach 627 + 85 81 55 Dark Green / Grey 755 +240 156 149 Salmon 708 +142 104 147 Purple Haze 647 + 55 84 92 Enchanted Sea 382 +187 187 173 Skylight 585 + 0 128 172 Medium Turquoise Blue 697 +243 243 154 Mustard 566 + 0 126 126 Light Green / Blue 688 +206 64 58 Dark Salmon Pink 925 + 66 123 70 Dark Green 560 +237 116 74 Orange Glow 524 +205 181 132 Light Brown 623 + 88 82 55 Dark Green / Grey 655 +237 145 142 Light Orange 732 +162 129 158 Regal Orchid 507 + 66 106 115 Medium Green / Blue 386 +181 178 155 Gray 674 + 0 142 173 Medium Turquoise Blue 608 +253 218 109 Snapdragon 289 + 44 200 185 Peppermint 693 +235 133 152 Light Orange 614 +153 222 165 Green Ash 636 +233 121 102 Medium Orange 632 +232 230 201 Glass Green 828 + 82 84 62 Dark Grey / Green 238 + 84 81 133 Storm Blue 306 +171 117 140 Valerian 323 + 63 95 86 Dark Jade Green 242 +179 182 172 Highrise 587 + 0 152 189 Blue / Green 176 +231 222 160 Straw Yellow 287 + 96 212 218 Light Blue / Green 269 +235 181 194 Lilac Sachet 575 +207 219 201 Light Blue Green 821 +248 149 58 Orange 520 +240 240 216 Vanilla Ice 100 + 88 96 71 Medium Green / Yellow 235 +137 126 140 Penguin Grey 837 +159 97 110 Mellow Mauve 550 +208 172 121 Tan 404 +144 139 117 Spanish Olive 591 +147 202 204 Pale Aqua Green 684 +245 236 202 Vanilla 856 + 0 198 208 Aquamarine 680 +132 71 87 Dark Brown 399 + 0 114 91 Alpine Teal 534 +242 136 75 Autumn Sunset 523 +233 222 189 Cream 857 +129 126 83 Medium Green / Yellow 237 +114 91 141 Veronica Violet 367 +168 112 119 Nostalgia Rose 586 +192 145 105 Light Bronze 195 +148 148 133 Pale / Grey 592 +157 201 210 Aqua Lake 543 +253 221 99 Star Gold 419 + 0 183 199 Aquamarine 268 +206 69 67 Dark Salmon Pink 266 + 0 125 96 Jade 776 +243 148 99 Cadmium Orange 522 +216 189 154 Pale Peach 555 +138 129 76 Medium Green / Yellow 753 + 94 79 117 Steel 652 +171 129 132 Light Purple 325 +173 120 68 Wicker 624 +123 119 111 Charcoal 436 +116 180 193 Milky Blue 696 +228 188 64 Mustard Yellow 625 + 0 181 198 Aquamarine 267 +200 72 77 Dark Salmon 236 + 0 178 147 Bluestone 737 +245 171 138 Flamingo 606 +212 174 123 Tan 403 +176 157 91 Pale Green / Yellow 754 + 98 86 125 Velvet Morning 309 +179 150 139 Fawn 706 +148 106 75 Medium Brown 395 +102 98 86 Dark Grey 593 + 0 131 174 Medium Turquoise Blue 177 +213 172 45 Medium Yellow 396 + 0 151 168 Dark Blue / Green 271 +219 83 68 Dark Salmon Pink 590 + 58 122 79 Dark Green 557 +176 111 92 Canyon Rose 254 +223 181 120 New Wheat 405 +167 168 129 Sage Green 234 +100 106 154 Slate Blue 305 +183 92 111 Red Violet 214 +148 93 61 Medium Brown 146 + 80 83 81 Granite 247 + 58 122 159 Medium Blue 784 +210 172 45 Medium Yellow 579 + 78 151 142 Sea Blue 319 +173 75 72 Terra Cotta 571 + 49 109 72 Tropical Green 536 +159 91 75 Brown 257 +148 108 67 Medium Brown 343 +181 197 129 Nile 790 +134 130 172 Dark Lilac 816 +161 71 86 Terra Cotta 335 +116 83 68 Medium Brown 345 + 75 81 82 Granite 246 + 81 140 164 Dale Blue 270 +196 150 78 Oak Buff 401 + 14 161 144 Parrot 109 +147 66 64 Dark Rust Red 213 + 31 115 85 Green Forest 535 +151 84 63 Medium Brown 512 +142 105 74 Toast 144 + 93 113 68 Olive Drab 239 +100 119 156 Slate Blue 805 +156 78 94 Medium Pink 334 +103 77 62 Clayrust 145 + 56 57 56 Black 20 diff --git a/inkstitch/palettes/InkStitch Admelody Polyester.gpl b/inkstitch/palettes/InkStitch Admelody Polyester.gpl new file mode 100644 index 0000000..1bad74a --- /dev/null +++ b/inkstitch/palettes/InkStitch Admelody Polyester.gpl @@ -0,0 +1,324 @@ +GIMP Palette +Name: Ink/Stitch: Admelody Polyester +Columns: 4 +# RGB Value Color Name Number +255 187 193 Powder Pink 6001 +252 151 158 Salmon Rose 6002 +182 66 75 Geranium 6003 +207 58 64 Hibiscus 6004 +223 45 52 Fiery Red 6005 +226 77 103 Calypso Coral 6006 +206 47 82 Teaberry 6007 +155 33 60 Barberry 6008 +167 44 80 Rose Red 6009 +171 49 73 Raspberry 6010 +126 23 42 Crimson 6011 +250 156 195 Candy Pink 6012 +207 91 144 Carmine Rose 6013 +231 106 148 Camellia Rose 6014 +169 38 94 Beetroot Purple 6015 +166 44 102 Fuchsia Purple 6016 +113 33 75 Baton Rouge 6017 +197 61 153 Raspberry Rose 6018 +147 47 119 Fuchsia Red 6019 + 95 38 92 Hollyhock 6020 +254 206 221 Blushing Bride 6021 +255 188 204 Quartz Pink 6022 +255 150 174 Pink Lemonade 6023 +194 109 128 Rapture Rose 6024 +140 70 91 Carmine 6025 + 92 35 56 Beet Red 6026 + 85 33 56 Anemone 6027 +148 116 140 Orchid Haze 6028 + 74 39 70 Phlox 6029 + 82 49 76 Purple Passion 6030 + 60 40 55 Deep Purple 6031 + 52 37 45 Prune Purple 6032 +254 216 214 Pink Dogwood 6033 +233 195 186 Creole Pink 6034 +187 143 145 Pale Mauve 6035 +123 76 72 Chutney 6036 +112 87 90 Mellow Mauve 6037 + 91 60 59 Mahogany 6038 + 82 39 32 Henna 6039 + 59 44 43 Deep Mahogany 6040 +222 106 0 Flame Orange 6041 +230 96 10 Orange Peel 6042 +221 75 13 Vermillion Orange 6043 +212 57 11 Spicy Orange 6044 +173 42 21 Mandarin Red 6045 +171 30 29 High Risk Red 6046 +170 35 36 Flame Scarlet 6047 +151 19 27 Aurora Red 6048 +133 31 34 Formula One 6049 +255 170 161 Apricot Blush 6050 +247 136 118 Peach Amber 6051 +223 107 102 Georgia Peach 6052 +194 78 61 Emberglow 6053 +148 50 45 Paprika 6054 +115 34 33 Scarlet 6055 +102 29 33 Tango Red 6056 +119 33 44 Red Rust 6057 + 96 35 45 Deep Claret 6058 +104 33 53 Red Bud 6059 +111 42 58 Earth Red 6060 +252 203 169 Pale Peach 6061 +250 204 176 Spanish Villa 6062 +249 170 146 Peach Nectar 6063 +235 149 125 Shrimp 6064 +242 116 78 Fresh Salmon 6065 +213 82 37 Sunset 6066 +148 49 32 Red Clay 6067 +119 47 27 Burnt Ochre 6068 +114 52 48 Cinnabar 6069 +185 151 126 Pale Tan 6070 +174 135 102 Strawberry Pink 6071 +102 54 37 Ginger Bread 6072 + 85 43 30 Arabian Spice 6073 + 98 65 51 Tortoise Shell 6074 + 69 47 37 Friar Brown 6075 +255 180 129 Peach Nougat 6076 +174 100 52 Butterum 6077 +175 75 23 Caramel 6078 +144 74 39 Rust 6079 +138 64 38 Amberglow 6080 +223 164 48 Mimosa 6081 +193 133 39 Arrowwood 6082 +186 119 13 Golden Yellow 6083 +214 133 36 Artisa Gold 6084 +245 141 0 Citrus 6085 +249 147 0 Old Gold 6086 +240 153 68 Marigold 6087 +211 119 17 Radiant Yellow 6088 +231 165 90 Flax 6089 +169 102 29 Inca Gold 6090 +124 80 33 Buckthorn Brown 6091 +122 72 34 Glazed Ginger 6092 +110 78 51 Chipmunk 6093 + 91 61 35 Monks Robe 6094 +208 168 94 Golden Tan 6095 +190 164 107 Parsnip 6096 +145 129 84 Willow 6097 +159 132 76 Fall Leaf 6098 +159 112 44 Honey 6099 +152 112 38 Green Sulphur 6100 +250 247 220 Pearly Cream 6101 +234 234 199 Papyrus 6102 +248 236 189 Rutabaga 6103 +202 190 156 Wood Ash 6104 +217 217 176 Glass Green 6105 +249 235 134 Leomonade 6106 +252 216 112 Custard 6107 +249 222 96 Cornsilk 6108 +254 221 78 Aurora 6109 +255 225 0 Empire Yellow 6110 +253 237 60 Blazing Yellow 6111 +255 206 0 Vibrant Yellow 6112 +253 196 56 Goldenrod 6113 +255 195 0 Dandelion 6114 +209 149 13 Freesia 6115 +235 163 13 Lemon Chrome 6116 +255 213 114 Snapdragon 6117 +229 179 29 Sulphur 6118 +157 121 27 Oil Yellow 6119 +156 130 0 Golden Palm 6120 +206 186 226 Orchid Bouquet 6121 +141 117 157 Lavender Herb 6122 +158 113 161 Crocus 6123 +147 101 161 Iris Orchid 6124 +140 106 173 Hyacinth 6125 +103 49 129 Dahlia 6126 +105 38 110 Redish Purple 6127 + 72 24 87 Amaranth Purple 6128 + 94 50 92 Clover 6129 + 75 50 85 Grape Juice 6130 +154 153 199 Pastel Lilac 6131 +121 129 181 Violet Tulip 6132 + 91 75 147 Passion Flower 6133 + 63 41 117 Helliotrope 6134 + 46 38 106 Black Purple 6135 + 48 42 85 Gentian Violet 6136 + 48 42 65 Darkest Purple 6137 +158 140 182 Lupine 6138 +113 111 134 Plum Gray 6139 + 33 33 41 Mysterioso 6140 +172 214 240 Baby Blue 6141 +151 192 228 Powder Blue 6142 +148 197 234 Angel Falls 6143 +115 172 208 Dusk Blue 6144 +124 175 222 Placid Blue 6145 + 64 126 187 Azure Blue 6146 + 38 83 146 Turkish Sea 6147 + 18 56 106 True Blue 6148 +101 137 202 Grapemist 6149 + 84 107 174 Baja blue 6150 + 64 73 149 Blue Iris 6151 + 33 42 114 Clematis blue 6152 + 32 59 120 Dazzling Blue 6153 + 28 46 100 Bright Navy 6154 + 27 46 84 Blueprint 6155 + 35 44 80 Mazarine Blue 6156 + 27 47 78 True navy 6157 + 29 47 64 Insignia Blue 6158 + 29 40 50 Mood Indigo 6159 + 29 35 46 Eclipse Blue 6160 + 96 190 222 Light Turquoise 6161 + 0 134 186 Dresdon Blue 6162 + 0 95 150 Blue Aster 6163 + 0 84 143 Victoria Blue 6164 + 31 97 157 Campanula 6165 + 7 66 125 Strong Blue 6166 + 20 49 80 Moonlight Blue 6167 +134 166 181 Winter Sky 6168 +125 169 199 Blue Bell 6169 + 89 131 167 Coronet Blue 6170 + 65 129 164 Niagra 6171 + 55 105 139 Cendre Blue 6172 + 47 116 139 Storm Blue 6173 + 68 100 115 Citadel 6174 + 24 75 94 Ink blue 6175 + 37 77 114 Federal Blue 6176 + 24 70 99 Stellar Blue 6177 + 35 63 85 Dark Denim 6178 + 26 54 65 Indian Teal 6179 + 27 43 56 Black Iris 6180 +209 200 177 Birch 6181 +180 167 145 Feather Gray 6182 +248 216 160 Apricot Gelao 6183 +207 181 142 Almond Buff 6184 +174 144 99 Lark 6185 +163 132 95 Tan 6186 +142 122 95 Doe 6187 +117 88 42 Dried Tobacco 6188 +249 207 159 Apricot Illusion 6189 +213 179 143 Sheepskin 6190 +162 117 72 Biscuit 6191 +134 126 112 Simply Taupe 6192 +138 117 102 Natural 6193 +103 84 72 Partridge 6194 +102 92 75 Dark Sand 6195 + 84 76 65 Chocolate Chip 6196 + 86 76 63 Canteen 6197 +122 106 85 Mink 6198 + 92 75 48 Kangaroo 6199 + 87 73 54 Sepia 6200 +197 205 230 Thistle 6201 +106 106 110 Gull 6202 +101 106 115 Excalibur 6203 + 71 71 81 Graystone 6204 + 97 102 108 Shark 6205 +134 141 143 Griffin 6206 +158 171 177 Pearl Blue 6207 +148 160 166 Quarry 6208 +157 174 189 Celestial Blue 6209 +116 143 163 Blue Shadow 6210 + 71 101 124 Captains Blue 6211 + 74 92 113 Ensign Blue 6212 + 59 75 96 Estate Blue 6213 +102 116 129 Monument 6214 + 62 76 82 Stargazar 6215 + 35 43 46 Moonless Night 6216 +107 113 110 Opal Gray 6217 +104 107 104 Charcoal Gray 6218 + 93 99 98 Gargoyle 6219 + 88 92 92 Plum Kitten 6220 +198 195 194 Wind Chime 6221 +184 176 170 Silver Gray 6222 +152 129 121 Stucco 6223 + 81 63 55 Fudgesickle 6224 + 52 46 42 Chocolate Brown 6225 + 47 47 47 Shale 6226 +229 231 225 White Sand 6227 +198 208 208 Silver Birch 6228 +175 182 178 Gray violet 6229 +179 189 189 High Rise 6230 +140 153 151 Limestone 6231 +106 107 103 Cloudburst 6232 +166 163 145 Cement 6233 +144 141 125 Spray Green 6234 +138 134 117 Seneca Rock 6235 + 94 87 69 Timber Wolf 6236 + 62 58 36 Olive Drab 6237 + 85 85 76 Brindle 6238 + 57 61 53 Beluga 6239 + 57 59 58 Dark gull Gray 6240 +250 252 240 Egret 6241 +249 253 251 Snow White 6242 +240 245 255 Bright White 6243 +226 235 255 Blanc de Blanc 6244 +222 230 255 Cloud Dancer 6245 + 29 34 31 Caviar 6246 +186 244 123 Jasmine Green 6247 +103 145 75 Grass Green 6248 +116 166 77 Bud Green 6249 + 67 106 51 Online Lime 6250 +213 217 56 Sulphur Spring 6251 +123 157 30 Parrot Green 6252 + 79 105 29 Peridot 6253 + 75 156 33 Island Green 6254 + 52 152 52 Classic Green 6255 + 25 139 57 Fern Green 6256 + 58 119 46 Vibrant Green 6257 + 0 126 56 Bright Green 6258 + 0 121 66 Jelly Bean 6259 + 1 81 41 Verdant Green 6260 +162 207 202 Eggshell Blue 6261 +125 207 208 Blue Radiance 6262 +140 212 242 Aquamarine 6263 + 66 179 210 Aquarius 6264 + 61 172 186 Blue Atoll 6265 + 35 150 175 Horizon Blue 6266 + 0 139 169 Blue Danube 6267 + 0 110 133 Blue Jewel 6268 + 0 94 115 Lyons Blue 6269 +120 208 189 Pool Blue 6270 + 61 167 159 Blue Turquoise 6271 + 40 166 153 Ceramic 6272 + 0 143 142 Tile Blue 6273 + 26 155 159 Bluebird 6274 + 0 104 109 Enamel Blue 6275 + 0 121 125 Lake Blue 6276 + 0 131 120 Viridian Green 6277 + 5 80 90 Ocean Depths 6278 + 12 64 66 Deep Teal 6279 + 29 59 55 June Bug 6280 +156 188 154 Sprucestone 6281 +148 197 159 Hemlock 6282 +122 205 140 Spring Bouquet 6283 +120 206 163 Cabbage 6284 + 81 174 146 Marine Green 6285 + 4 145 106 Simply Green 6286 + 30 161 98 Deep Mint 6287 + 0 112 70 Bright Jade 6288 + 0 88 57 Pepper Green 6289 + 13 82 50 Darkest Jade 6290 + 56 112 111 Green-Blue Slate 6291 + 36 116 96 Greenlake 6292 + 0 128 105 Cadmium Green 6293 + 0 91 70 Ultramarine Green 6294 + 0 84 69 Parasailing 6295 + 42 75 48 Fairway 6296 + 47 78 64 Fir 6297 + 35 64 41 Foliage Green 6298 + 21 59 46 Alpine Green 6299 + 18 66 63 Shaded Spruce 6300 +172 190 125 Lettuce Green 6301 +145 163 101 Herbal Garden 6302 +255 251 191 Pastel Yellow 6303 +204 195 123 Shadow Green 6304 +180 162 72 Golden Green 6305 +142 121 41 Golden Olive 6306 +103 87 28 Ecru Olive 6307 +131 124 73 Moss 6308 +133 125 54 Oasis 6309 +111 99 33 Woodbine 6310 + 80 83 32 Calla Green 6311 + 79 76 30 Olive 6312 + 63 63 40 Cypress 6313 + 68 66 31 Avocado 6314 + 99 101 76 Olive Branch 6315 + 98 114 98 Green Bay 6316 + 62 83 61 Elm Green 6317 + 46 60 37 Bronze Green 6318 + 52 64 52 Pineneedle 6319 + 50 54 39 Kombu Green 6320 diff --git a/inkstitch/palettes/InkStitch Admelody Rayon.gpl b/inkstitch/palettes/InkStitch Admelody Rayon.gpl new file mode 100644 index 0000000..d80ec7f --- /dev/null +++ b/inkstitch/palettes/InkStitch Admelody Rayon.gpl @@ -0,0 +1,424 @@ +GIMP Palette +Name: Ink/Stitch: Admelody Rayon +Columns: 4 +# RGB Value Color Name Number +247 242 222 Pearly Cream 101 +231 213 195 Peach Cloud 102 +246 215 202 Palest Peach 103 +225 180 166 Sandy Peach 104 +248 195 179 Light Salmon 105 +234 156 143 Salmon 106 +231 125 109 Deep Coral 107 +229 126 106 Coral Rose 108 +190 80 70 Orange 109 +150 45 47 Rust 110 +225 80 15 Bright Orange 111 +241 110 15 Pumpkin Orange 112 +233 116 79 Copper 113 +217 101 55 Sunset 114 +193 85 45 Golden Glory 115 +250 148 31 Solell 116 +249 135 18 Wild Carrot 117 +244 229 143 Pale Lemon 118 +241 216 130 Saffron 119 +250 210 94 Snapdragon 120 +254 222 124 Popcorn 121 +251 220 114 Cornsilk 122 +253 200 78 Buttered Popcorn 123 +255 192 12 Orangeade 124 +255 185 24 Dark Orangeade 125 +239 178 93 Lt. Golden Tan 126 +235 161 64 Persimmon 127 +215 158 70 Gold 128 +202 137 69 Sunburst 129 +239 147 68 Marigold 130 +249 250 221 Yellow Cream 131 +250 244 189 Mellow Yellow 132 +237 227 27 Lime 133 +249 237 122 Light Yellow 134 +248 230 85 Soft Yellow 135 +240 231 80 Yellow 136 +251 226 20 Yellow Finch 137 +248 204 95 Mimosa 138 +248 216 23 Dark Lemon 139 +253 203 0 Daffodil 140 +249 227 233 Powder Pink 141 +234 183 213 Sugar Pink 142 +224 183 212 Delicate Mauve 143 +213 172 206 Palest Pink 144 +185 139 171 Lt. Red Violet 145 +185 116 165 Rosie Pink 146 +174 85 148 Clematis 147 +163 35 99 Rose Splash 148 +157 67 116 Wild Rose 149 +116 33 74 Dark Wild Rose 150 +127 38 83 Raspberry 151 +104 30 64 Bilberry 152 + 99 28 54 Deep Bilberry 153 +101 31 45 Claret 154 + 94 30 57 Burgundy 155 + 84 31 47 Maroon 156 + 92 27 51 Plum Wine 157 + 81 28 35 Rich Burgundy 158 + 73 37 51 Eggplant 159 + 50 30 33 Black Wine 160 +238 236 219 Eggshell White 161 +241 218 193 Palest Fawn 162 +224 214 190 Creamy White 163 +195 180 155 Coffee Cream 164 +200 174 163 Victorian Rose 165 +221 179 178 Pink Cloud 166 +197 152 142 Bronze 167 +202 147 150 Blush 168 +156 119 119 Pale Mauve 169 +150 101 105 Pale Wine 170 +115 64 65 Mocha Rose 171 +103 47 46 Rusty Plum 172 + 89 47 41 Plum 173 +220 154 191 Petal Pink 174 +211 123 170 Rose Pink 175 +192 128 159 Sunset Pink 176 +186 112 139 Desert Rose 177 +174 71 106 Dusty Rose 178 +209 99 158 Pink Rose 179 +195 65 129 Magenta 180 +214 75 108 Fiesta Pink 181 +203 54 74 Scarlet 182 +180 29 30 Ruby 183 +191 41 32 True Red 184 +187 39 31 Red 185 +195 50 26 Firecracker 186 +172 29 40 Cherry Red 187 +149 19 32 Baked Cherry 188 +148 19 31 Carmine 189 +114 40 41 Red Wine 190 +120 33 32 Wine 191 +162 59 77 Antique Red 192 +157 35 69 Brandy 193 +165 29 55 Crimson 194 +151 26 51 Chili Pepper 195 +138 22 41 Grenadine 196 +142 24 36 Brick 197 +123 32 40 Bronze Red 198 + 99 28 36 Dark Rust 199 + 95 32 34 Cranberry 200 +219 118 176 Passion Pink 201 +195 65 126 Bright Pink 202 +193 63 127 Madcap Pink 203 +203 72 129 Lipstick Pink 204 +206 70 115 Pink Rapture 205 +189 34 92 Cerise 206 +162 34 97 Fuchsia 207 +177 53 96 Pink Lady 208 +171 47 93 Light Fuchsia 209 +189 40 84 Hot Pink 210 +135 22 53 Blood Red 211 +125 21 45 Old Burgundy 212 +232 137 168 Pink Blush 213 +225 119 150 Pink Mist 214 +216 104 127 Light Cerise 215 +214 103 146 Pink 216 +205 77 119 Pink Aster 217 +196 68 118 Pink Carnation 218 +216 118 127 Dusty Pink 219 +193 59 90 Deep Pink 220 +244 246 223 White Whisper 221 +246 248 240 Palest Ivory 222 +243 246 238 Pale White 223 +213 226 255 Bright White 224 +239 244 255 Dove White 225 +226 233 255 White 226 + 29 34 34 Black 227 +195 204 193 Grey Mist 228 +182 204 198 Blue Foam 229 +125 145 144 Green Shadow 230 +175 205 178 Dusty Green 231 +171 204 190 Seafoam Grey 232 +138 162 143 Sea Green 233 +137 160 142 Slate Grey 234 + 87 115 95 Grecian Green 235 + 89 118 96 Slate Green 236 + 67 93 72 Teal 237 + 43 67 53 Forest Green 238 + 44 77 59 Pine Green 239 + 39 65 48 Spruce Green 240 +166 190 176 Soft Pale Green 241 +168 232 202 Bright Mint 242 +138 198 181 Wintermint 243 +170 218 198 Mint 244 +139 211 196 Peppermint 245 +104 192 174 Aqua 246 + 51 148 129 Lido 247 + 0 158 140 Blue Turquoise 248 + 21 164 140 Aztec Blue 249 + 0 142 123 Regend Green 250 + 0 110 89 Tropical Green 251 + 78 174 139 Lt. Sea Green 252 + 0 120 88 Dk. Sea Green 253 + 0 138 81 Emerald 254 + 29 125 67 Green 255 + 23 115 67 Festive Green 256 + 10 126 96 Jade 257 + 58 142 76 Light Green 258 + 78 134 63 Northern Pine 259 + 88 146 79 Clear Green 260 +188 218 141 Lt. Celery 261 +195 231 161 After Dinner Mint 262 +200 234 191 Palest Mint 263 +176 229 187 Palest Green 264 +141 196 152 Light Jade 265 +116 185 141 Cool Mint 266 +113 179 157 Marshland Green 267 +126 204 177 Tropical Lagoon 268 +140 184 110 Dark Celery 269 +101 155 87 Spring Green 270 +156 180 73 Presh Green 271 + 98 137 48 Meadow Green 272 + 96 138 52 Sweet Pea 273 + 93 178 95 Lt. Blue Jade 274 + 66 175 88 Shamrock 275 + 85 126 69 Foilage Green 276 + 48 112 74 Leaf Green 277 + 63 142 99 Cloudy Jade 278 + 33 135 85 Bangkok Green 279 + 36 126 91 Med. Jade 280 +238 245 236 Angel Blue 281 +216 243 246 Whispering Sky 282 +205 234 237 Pale Blue 283 +209 230 226 Skylight Blue 284 +203 226 221 Iceburg Blue 285 +182 237 240 Palest Aqua 286 +159 216 218 Med. Aqua 287 +141 218 227 Pacific Mist 288 + 64 181 198 Capri 289 + 31 182 216 Turquoise 290 + 0 139 170 Kingfisher 291 + 0 125 171 Dk. Turquoise 292 + 0 136 181 Med. Turquoise 293 + 48 129 139 Cyan 294 + 50 130 139 Lagoon 295 + 0 85 103 Deep Atlantic 296 + 51 94 85 Steel Blue 297 + 21 79 83 Dk. Steel Blue 298 + 25 59 70 Ocean Depths 299 + 22 56 57 Rolled Steel 300 +231 230 191 Gream 301 +169 183 95 Green Apple 302 +146 155 79 Pistachio 303 +178 176 70 Chartreuse 304 +162 162 45 Sumatra Green 305 +123 120 41 Avacodo 306 +108 107 53 Dk. Avacodo 307 + 90 89 65 Camouflage Green 308 +178 197 166 Cream de Menthe 309 +138 161 116 Smokey Sage 310 +111 129 86 Light Olive 311 +114 133 94 Bronze Olive Light 312 + 81 92 52 Dk. Leaf Green 313 + 61 81 48 Olive 314 + 68 79 60 Eucalyptus 315 + 47 53 37 Midnight Green 316 + 60 76 57 Dk. Eucalyptus 317 + 79 134 97 Sage 318 + 44 103 71 Rainforest Green 319 + 31 89 52 Dark Green 320 +215 196 93 Goldenrod 321 +184 157 70 Tawny Gold 322 +164 131 50 Wheat Brown 323 +124 99 45 Khaki 324 +134 100 54 Cargo 325 +126 100 72 Natural Brown 326 +109 84 60 Dark Oak 327 + 77 58 45 Traditional Brown 328 + 60 49 42 Chocolate Cake 329 + 91 86 81 Raven 330 +103 81 79 Coffee Bean 331 +101 66 63 Mahogony 332 +154 86 46 TerraCotta 333 +174 71 33 Russet 334 +172 146 95 Prairie Wheat 335 +183 147 99 Sunkissed 336 +190 142 57 Bright Gold 337 +214 160 88 Golden Lights 338 +215 146 62 Burnished Gold 339 +170 117 66 Auburn 340 +191 189 159 Gravel 341 +182 161 118 Med. Taupe 342 +216 188 148 Beige 343 +207 186 158 Ash Blonde 344 +155 138 106 Taupe 345 +128 97 65 Brownstone 346 +158 116 92 Brazil Brown 347 +122 87 63 Tan 348 +166 120 80 Light Brown 349 +154 101 55 Golden Brown 350 +156 103 62 Cinnamon 351 +103 73 60 Old Maghonoy 352 + 84 57 46 Med. Brown 353 + 85 52 40 Brown 354 + 59 35 32 Fudge Brownie 355 + 84 58 44 Walnut 356 + 90 66 53 Walnut Stain 357 + 81 55 42 Sepia 358 + 68 49 45 Dark Chocolate 359 + 62 48 41 Dark Pecan 360 +205 223 234 Silver Lining 361 +186 203 216 Sterling Blue 362 +212 225 229 Misty Blue 363 +148 154 156 Cadet Grey 364 +147 158 168 Med. Grey 365 +157 173 182 Sleet Grey 366 +188 201 209 Palest Grey 367 +162 176 183 Med. Silver 368 +148 165 183 Lt. Smokey Blue 369 +107 133 154 Silver Blue 370 +115 135 154 Dk. Pewter 371 + 92 120 142 Country Blue 372 + 54 90 118 Wedgewood Blue 373 + 76 95 117 Dk. Slate 374 + 51 66 78 Slate 375 + 58 79 92 Nightfall Blue 376 +107 129 133 Pewter 377 + 72 92 93 Heritage Blue 378 + 61 77 75 Dk. Steel 379 + 45 69 78 Seal 380 +210 224 239 Pale Baby Blue 381 +199 208 210 Platinum 382 +173 177 187 Grey Sky 383 +174 180 189 Pale Grey 384 +169 181 192 Light Pewter 385 +164 180 188 Blissful Blue 386 +142 153 162 French Grey Blue 387 +149 157 160 Med. Granite 388 +161 163 165 Med. Pewter 389 +183 185 185 Silver Shadow 390 +172 178 175 Grey 391 +144 141 143 Pigeon Grey 392 +129 131 130 Polished Pewter 393 +117 121 132 Granite 394 +132 135 133 Burnished Pewter 395 +107 114 112 Dk Granite 396 +122 124 126 Silver Moon 397 +107 116 128 Tarnished Silver 398 + 86 92 99 Steel 399 + 63 72 78 Midnight 400 +201 189 176 Pale Mink 401 +171 159 146 Heirloom Beige 402 +178 165 159 Heirloom Rose / Beige 403 +140 131 124 Med. Mink 404 +147 131 122 Mink 405 +108 92 86 Dark Mink 406 + 55 48 39 Dk. Black Brown 407 + 36 37 34 Carbon Black 408 +207 212 218 Palest Silver 409 +198 201 204 Pale Silver 410 +179 180 180 Amish Grey 411 +198 200 208 Misted Wisteria 412 +165 159 167 Silver Fox 413 +106 105 118 Plum Grey 414 + 97 94 109 Dark Grey 415 + 55 54 63 Coal Black 416 + 82 80 83 Cool Grey 417 + 77 80 92 Darkest Pewter 418 + 55 62 73 Raging Blue 419 + 45 51 52 Licorice Black 420 +201 186 164 Palest Sand 421 +162 156 140 Sandstone 422 +172 158 129 Mudstone 423 +121 108 83 Mushroom 424 +127 115 95 Birch Bark 425 +108 87 63 Bark 426 +180 181 166 Khaki Beige 427 +158 164 146 Shale Green 428 +142 141 127 Mud Brown 429 +128 137 128 Hammered Iron 430 +121 120 102 Willow 431 +133 139 124 Weathered Driftwood 432 + 82 77 65 Mississippi Mud 433 + 57 65 68 Dk. Night Blue 434 + 55 164 211 Med. Peacock 435 + 0 131 181 Peacock 436 + 0 105 165 Dk. Peacock 437 + 28 106 156 Petrel Blue 438 + 12 99 146 Dk. Dutch Blue 439 + 0 87 108 Dk. Victorian Teal Blue 440 +183 212 224 Palest Blue 441 +174 202 215 Winter Blue 442 +185 218 234 Palest Bright Blue 443 +154 188 216 Light Blue 444 +144 179 201 Colonial Blue 445 +132 174 211 Powder Blue 446 +117 161 198 Darker Med. Blue 447 + 71 116 147 Slate Blue 448 + 50 90 116 Copenhagen Blue 449 + 59 96 121 Storm Blue 450 + 41 88 125 Darkest Aqua 451 + 20 78 129 Royal Blue 452 +111 162 217 Mid Blue 453 + 94 141 182 Sky Blue 454 + 38 99 156 Imperial Blue 455 + 26 71 125 Dark Blue 456 + 19 86 162 Bright Blue 457 + 10 73 149 Dk. Bright Blue 458 + 29 76 152 Brightest Dk. Blue 459 + 33 66 120 Dk. Aqua Blue 460 +172 192 227 Pale Periwinkle 461 +135 169 218 Periwinkle 462 +101 142 203 Med. Periwinkle 463 + 68 121 183 Dk. Periwinkle 464 + 53 92 153 Blueberry 465 + 25 43 110 Dk. Royal Blue 466 + 37 52 108 Royalty Blue 467 + 38 52 97 Navy Blue 468 + 31 39 65 Dark Navy Blue 469 + 29 38 59 Darkest Navy Blue 470 + 34 50 66 Historical Blue 471 + 31 44 64 Blazer Blue 472 + 32 45 59 Ebony Blue 473 + 28 43 51 Dk. Ebony Blue 474 + 35 45 62 Carbon Blue 475 + 31 37 44 Corrections Blue 476 + 27 40 49 Wrought Iron 477 + 36 40 43 Blackest Navy 478 + 37 44 55 Prussian Blue 479 + 29 35 40 Dk. Prussian Blue 480 +207 203 226 Pastel Lavender 481 +186 180 205 Palest Mauve 482 +196 186 218 Pale Lilac 483 +182 165 197 Lt. Purple 484 +170 157 203 Pastel Violet 485 +155 146 179 Med. Blue Lavender 486 +168 173 208 Lt. Blue Lavender 487 +157 137 173 Soft Violet 488 +139 115 153 Smokey Grape 489 +129 106 148 Lilac 490 +124 102 167 Amethyst 491 + 86 61 113 Imperial Purple 492 +123 54 121 Purple 493 +162 113 157 Lavender 494 +136 91 159 Lt. Grape 495 +120 85 154 Violet 496 + 89 57 125 Dark Violet 497 + 66 45 106 Deep Violet 498 + 58 49 118 Dk. Plum 499 + 54 48 116 Cassis 500 +216 219 234 Touch of Lavender 501 +179 182 221 Wisteria 502 +112 111 174 Purple Iris 503 + 86 83 154 Med. Purple 504 + 72 55 79 Plum Escape 505 + 91 84 118 Dk. Smokey Grape 506 + 55 54 95 Royal Purple 507 + 46 50 85 Dk. Navy Purple 508 + 37 39 100 Darkest Blue Violet 509 + 78 95 163 Blue Violet 510 + 56 72 130 Med. Blue Violet 511 + 52 72 137 Dk. Blue Purple 512 + 44 69 134 Ultra Blue 513 + 74 85 122 Denim 514 +117 141 195 Blue Lavender 515 +143 167 201 Cape Cod Blue 516 +126 150 197 Sugared Lilac 517 +109 128 174 Blueberry Cream 518 +131 129 163 Mauve Thistle 519 +133 138 198 Clear Lt. Purple 520 diff --git a/inkstitch/palettes/InkStitch Anchor.gpl b/inkstitch/palettes/InkStitch Anchor.gpl new file mode 100644 index 0000000..96a88b2 --- /dev/null +++ b/inkstitch/palettes/InkStitch Anchor.gpl @@ -0,0 +1,427 @@ +GIMP Palette +Name: Ink/Stitch: Anchor +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 1 +255 255 255 White 2 +255 196 184 Salmon Very Light 6 +255 198 140 Salmon Light 8 +255 157 144 Salmon Medium Light 9 +255 128 135 Salmon Medium 10 +237 69 90 Salmon Medium Dark 11 +219 24 85 Salmon Dark 13 +153 92 48 Burgundy Very Dark 22 +255 234 235 Carnation Ultra Light 23 +255 177 174 Carnation Very Light 24 +255 211 212 Carnation Light 25 +255 140 191 Carnation Medium Light 26 +255 194 191 Carnation Medium 27 +243 149 157 Carmine Rose Medium Light 41 +204 51 119 Carnation Medium Dark 28 +230 0 102 Carnation Dark 29 +254 212 219 Blush Light 31 +255 128 109 Blush Medium 33 +255 85 91 Blush Dark 35 +255 157 150 Blossem Pink Light 36 +219 36 79 Blossem Pink Dark 38 +255 109 115 Carmine Rose Light 40 +214 43 91 Carmine Rose Medium 42 +166 0 91 Carmine Rose Medium Dark 43 +162 0 88 Carmine Rose Dark 45 +213 39 86 Crimson Red 46 +231 18 97 Carmine Red 47 +255 234 235 China Rose Very Light 48 +255 213 216 China Rose Light 49 +255 204 208 China Rose Medium 50 +233 109 115 China Rose Medium Dark 52 +255 109 115 Rose Dark China 54 +255 189 202 Beauty Rose Light 55 +222 57 105 Beauty Rose Medium 57 +201 79 91 China Rose 59 +250 151 144 Magenta Light 60 +255 115 140 Magenta Medium 62 +231 84 122 Magenta Dark 63 +201 79 91 Rose Very Dark Antique 65 +250 151 144 Raspberry Light 66 +203 78 97 Raspberry Medium Light 68 +230 0 102 Raspberry Very Dark 72 +255 233 233 Antique Rose Very Light 73 +255 214 209 Antique Rose Light 74 +203 78 97 Antique Rose Medium 76 +255 154 148 Antique Rose Medium Light 75 +203 78 97 Antique Rose Medium Dark 77 +171 22 95 Antique Rose Dark 78 +255 214 229 Orchid Light 85 +247 152 182 Orchid Medium Light 86 +231 79 134 Orchid Medium 87 +219 55 121 Orchid Medium Dark 88 +171 22 95 Orchid Dark 89 +204 163 204 Plum Light 90 +160 100 146 Plum Medium 92 +171 22 95 Plum Dark 94 +255 214 229 Violet Very Light 95 +247 152 182 Violet Light 96 +243 206 225 Violet Medium Light 97 +160 100 146 Violet Medium 98 +146 85 130 Violet 99 + 61 0 103 Violet Medium Dark 100 +109 18 97 Violet Dark 101 +109 18 97 Violet Very Dark 102 +243 218 228 Very Light Plum 103 +236 207 225 Lavender Light 108 +206 148 186 Lavender Medium Light 109 +148 91 128 Lavender Medium 110 +145 180 197 Thistle Light 117 +162 121 164 Thistle Medium 118 +127 84 130 Thistle Dark 119 +230 236 232 Bleuberry Light 120 +187 208 218 Bleuberry Medium Light 121 +119 89 179 Medium Bleuberry 122 + 71 55 93 Bleuberry Dark 123 + 0 0 73 Indigo 127 +247 246 248 Cobalt Bleu Light 128 +202 226 229 Cobalt Bleu 129 +190 193 205 Cobalt Bleu Medium Light 130 +103 115 141 Cobalt Bleu Medium 131 + 30 66 99 Cobalt Bleu Medium Dark 132 + 30 58 95 Cobalt Bleu Dark 133 + 30 54 85 Cobalt Bleu Very Dark 134 +132 156 182 Wedgewood Light 136 +103 115 141 Wedgewood Medium 137 + 30 66 99 Wedgewood Dark 139 +158 176 206 Copen Bleu Light 140 +103 115 141 Copen Bleu Medium 142 + 30 66 99 Copen Bleu Dark 143 +233 238 233 Delft Bleu Very Light 144 +132 156 182 Light Delft Bleu 145 +103 115 141 Delft Bleu 146 + 30 66 99 Delft Bleu Medium Light 147 + 0 79 97 Delft Bleu Medium 148 + 36 73 103 Delft Bleu Medium Dark 149 + 36 73 103 Delft Bleu Dark 150 + 0 0 49 Delft Bleu Very Dark 152 +240 247 239 Sapphire Very Light 158 +213 231 232 Sapphire Medium Light 160 +175 195 205 Sapphire Medium 161 + 16 127 135 Sapphire Medium Dark 162 + 71 97 116 Sapphire Dark 164 + 0 102 179 Sapphire Dark 164 + 24 101 111 Surf Bleu Very Light 167 +128 167 160 Surf Bleu Light 168 + 30 130 133 Surf Bleu Medium 169 + 24 128 134 Surf Bleu Dark 170 +187 208 218 Ocean Bleu Light 175 +147 139 164 Ocean Bleu 176 +128 96 191 Ocean Bleu Medium 177 + 71 55 93 Ocean Bleu Dark 178 +208 224 210 Sea Green Light 185 +171 206 177 Sea Green Medium Light 186 + 0 160 130 Sea Green Medium 187 + 83 166 130 Sea Green Medium Dark 188 + 14 140 86 Sea Green Dark 189 +170 213 164 Mint Green Light 203 +153 188 149 Mint Green Medium 204 + 49 128 97 Mint Green Dark 205 +214 230 204 Spruce Light 206 +182 212 180 Spruce Medium Light 208 +115 158 115 Spruce 209 + 97 134 97 Spruce Medium 210 + 59 96 76 Spruce Dark 212 +206 221 193 Juniper Very Light 213 +181 206 162 Juniper Light 214 +138 153 120 Juniper Medium Light 215 + 97 134 97 Juniper Medium 216 + 95 112 91 Juniper Medium Dark 217 + 85 95 82 Juniper Dark 218 + 79 86 76 Juniper Dark 218 + 79 121 66 Emerald Light 225 + 79 121 66 Emerald Medium Light 226 + 79 108 69 Emerald Medium 227 + 0 96 47 Emerald Medium Dark 228 + 48 116 91 Emerald Dark 229 +235 207 185 Rose Grey Light 231 +210 185 175 Rose Grey Medium 232 +179 151 143 Rose Grey 233 +232 232 229 Charcoal Grey Light 234 +167 139 136 Charcoal Grey Medium 235 + 81 76 83 Charcoal Grey 236 +121 144 76 Medium Spring Dark Grey 238 + 79 121 66 Spring Grey Dark 239 +206 213 176 Grass Green Light 240 +161 196 125 Grass Green 241 +151 183 110 Grass Green Medium Light 242 +134 145 110 Grass Green Medium 243 + 83 97 73 Grass Green Medium Dark 244 + 83 97 73 Grass Green Dark 245 + 58 82 65 Grass Green Very Dark 246 +240 255 200 Parrot Green Very Light 253 +238 255 182 Parrot Green Light 254 +185 200 102 Parrot Green Medium Light 255 +143 163 89 Parrot Green Medium 256 + 98 119 57 Parrot Green Medium Dark 257 + 78 95 57 Parrot Green Dark 258 +231 249 203 Loden Green Very Light 259 +161 167 135 Loden Green Light 260 +187 179 148 Loden Green Medium Light 261 +137 141 114 Loden Green Medium 262 + 96 95 84 Loden Green Dark 263 +234 249 194 Avocado Very Light 264 +225 249 190 Avocado Light 265 +176 187 140 Light Avocado Medium 266 +116 114 92 Avocado Medium 267 + 73 86 55 Avocado Medium Dark 268 + 69 69 49 Avocado Dark 269 +248 247 221 Soft Carnation 271 +113 113 113 Stone Grey Dark 273 +225 224 216 Bleu Mist Light 274 +246 234 219 Citrus Ultra Light 275 +239 214 188 Pearl 276 +136 95 18 Desert Very Dark 277 +206 244 7 Olive Green Light 278 +186 196 5 Olive Green Medium Light 279 +158 158 7 Olive Green Medium 280 +112 112 20 Olive Green Dark 281 +255 255 190 Canary Yellow Light 288 +255 231 109 Canary Yellow Medium Light 289 +255 176 0 Canary Yellow Medium 290 +255 176 0 Canary Yellow Dark 291 +255 255 220 Jonquil Very Light 292 +255 235 168 Jonquil Light 293 +255 224 128 Jonquil Medium Light 295 +255 194 67 Jonquil Medium 297 +255 146 0 Jonquil Dark 298 +255 240 197 Citrus Light 300 +255 239 170 Citrus 301 +255 230 146 Citrus Medium Light 302 +255 183 85 Citrus Medium 303 +255 142 4 Citrus Dark 304 +255 200 124 Topaz Light 305 +225 146 85 Topaz Medium Light 306 +255 242 128 Topaz Medium Light 306 +204 119 66 Topaz Medium 307 +181 107 56 Topaz Medium Dark 308 +181 98 46 Topaz Dark 309 +178 103 70 Topaz Very Dark 310 +255 204 128 Tangerine Very Light 311 +255 181 105 Tangerine Light 313 +255 142 4 Tangerine Medium Light 314 +255 106 0 Tangerine Dark 316 +255 146 109 Apricot Light 323 +200 36 43 Apricot Dark 326 +255 172 162 Melon Light 328 +255 123 103 Melon Medium 329 +255 91 0 Melon Dark Medium 330 +244 73 0 Blaze Light 332 +206 43 0 Blaze Medium Light 333 +255 0 0 Blaze Medium 334 +255 0 0 Blaze Dark 335 +255 172 162 Terra Cotta Light 336 +237 122 100 Terra Cotta Medium Light 337 +237 122 100 Terra Cotta 338 +197 94 88 Terra Cotta Medium 339 +180 75 82 Terra Cotta Medium Dark 340 +168 68 76 Terra Cotta Dark 341 +243 218 228 Lilac Light 342 +194 209 206 Slate Bleu 343 +194 101 76 Bark Light 347 +209 102 84 Bark Medium 349 +157 60 39 Bark Medium Dark 351 +143 57 38 Bark Dark 352 +158 67 18 Mocha Medium 355 +151 84 20 Mocha Dark 357 +151 84 20 Coffee 358 +123 71 20 Coffee Medium 359 +118 55 19 Coffee Dark 360 +244 195 139 Nutmeg Light 361 +238 171 121 Nutmeg Medium Light 362 +191 157 105 Dessert Medium 373 +140 91 43 Dessert Medium Dark 374 +153 92 48 Dessert Dark 375 +217 174 130 Fawn Light 376 +166 129 91 Fawn Medium 378 +128 85 30 Fawn Dark 379 + 94 56 27 Fudge 380 + 99 39 16 Fudge Medium 381 + 83 37 16 Fudge Dark 382 +255 250 204 Citrus Very Light 386 +255 236 191 Ecru 387 +219 194 164 Ecru Medium 388 +242 234 219 Linen Light 390 +239 219 190 Linen 391 +231 207 178 Linen Medium 392 +140 117 109 Linen Dark 393 +210 208 205 Grey Light 397 +221 221 218 Grey 398 +197 198 190 Grey Medium Light 399 +167 139 136 Grey Medium 400 + 85 85 89 Grey Dark 401 + 0 0 0 Black 403 + 0 123 134 Electric Bleu Dark 410 +170 222 225 Electric Bleu 433 + 85 73 0 Forest Dark 681 + 43 57 41 Turf Green 683 +255 220 193 Flesh Light 778 + 92 110 108 Bleu Mist Medium Dark 779 +230 191 136 Sierra Very Light 830 +219 176 122 Sierra Light 831 +203 152 103 Sierra Medium 832 +204 196 129 Fern Green Light 842 +171 170 89 Fern Green 843 +150 140 40 Fern Green Medium 844 +132 119 17 Fern Green Medium Dark 845 +123 119 17 Fern Green Dark 846 +233 233 223 Bleu Mist Very Light 847 +200 198 194 Bleu Mist 848 +200 198 194 Bleu Mist Medium Light 849 + 96 116 115 Bleu Mist Medium 850 + 86 99 100 Bleu Mist Dark 851 +255 236 211 Turf Very Light 852 +203 162 107 Turf Light 853 +196 155 100 Turf Medium Light 854 +184 138 87 Turf Medium 855 +184 138 87 Turf Dark 856 +189 197 151 Laurel Green Light 858 +172 183 142 Laurel Green 859 +159 169 142 Laurel Green Medium Light 860 + 67 63 47 Laurel Green Medium 861 + 55 73 18 Laurel Green Dark 862 +255 177 147 Flesh Medium 868 +235 235 231 Amethyst Light 869 +225 205 200 Amethyst 870 +190 155 167 Amethyst Medium Light 871 +156 125 133 Amethyst Medium 872 +156 125 133 Amethyst Dark 873 +242 209 142 Saffron Medium 874 +182 242 216 Pine Light 875 +143 191 171 Pine 876 + 98 140 122 Pine Medium 877 + 67 85 73 Pine Medium Dark 878 + 43 57 41 Pine Dark 879 +255 229 188 Copper Light 880 +255 206 164 Copper 881 +194 101 76 Copper Medium 883 +197 94 88 Copper Dark 884 +244 233 202 Sand Stone Light 885 +255 231 182 Sand Stone 886 +229 193 139 Sand Stone Medium Light 887 +216 151 105 Sand Stone Medium 888 +151 104 84 Sand Stone Medium Dark 889 +243 176 128 Light Brass 890 +255 206 158 Brass 891 +219 128 115 Rose Wine Medium 895 +184 75 77 Rose Wine Dark 896 +156 41 74 Rose Wine Very Dark 897 +158 109 91 Sierra 898 +206 175 144 Tawny Light 899 +202 202 202 Pewter Light 900 +209 140 103 Brass Medium 901 +188 156 120 Tawny Medium 903 +113 71 42 Tawny 904 +100 71 42 Tawny Dark 905 +130 90 8 Brass Dark 906 +178 119 55 Saffron Dark 907 +194 101 76 Flesh Medium Dark 914 +124 135 145 Denim Light 920 +124 135 145 Denim Medium 921 +102 122 140 Denim Dark 922 + 0 91 6 Emerald Very Dark 923 +140 103 0 Olive Green Very Dark 924 +255 115 97 Tangerine Very Dark 925 +245 240 219 Ecru Very Light 926 +227 234 230 Larkspur Light 928 +239 214 188 Fawn Very Light 933 +162 77 52 Fawn Very Dark 936 +158 176 206 Stormy Bleu Medium 939 + 71 97 116 Stormy Bleu Medium Dark 940 + 97 97 128 Stormy Bleu Very Dark 941 +244 195 139 Wheat Light 942 +237 172 123 Wheat Medium 943 +153 92 48 Wheat Dark 944 +242 209 142 Harvest Medium 945 +219 176 122 Harvest Light 956 +255 199 184 Wineberry Light 968 +219 128 115 Wineberry Medium 969 +203 78 97 Wineberry Medium Dark 970 +161 0 72 Wineberry Dark 972 +237 247 238 Sea Bleu Light 975 +194 209 206 Sea Bleu Medium Light 976 +115 140 170 Sea Bleu Medium 977 + 81 109 135 Sea Bleu Medium Dark 978 + 58 84 103 Sea Bleu Dark 979 +255 199 176 Rose Wine 893 +246 141 57 Antique Gold Medium 1001 +255 164 73 Antique Gold Light 1002 +206 103 91 Amberglow 1003 +197 94 88 Apricot Very Dark 1004 +179 0 91 Cherry Red Medium 1005 +188 0 97 Cherry Red 1006 +173 83 62 Chicory Dark 1007 +231 134 103 Chicory Medium 1008 +255 250 224 Copper Very Light 1009 +255 229 188 Cinnamon Very Light 1010 +255 243 231 Flesh Very Light 1011 +251 227 209 Chickory Light 1012 +237 122 100 Brick Medium 1013 +189 73 47 Brick Very Dark 1014 +191 64 36 Brick Ultra Dark 1015 +255 199 196 Antique Mauve Light 1016 +220 141 141 Antique Mauve Medium 1017 +195 118 123 Antique Mauve Dark 1018 +163 90 91 Antique Mauve Very Dark 1019 +253 229 217 Peony Very Light 1020 +255 201 188 Peony Light 1021 +249 160 146 Peony Medium Light 1022 +230 101 107 Peony 1023 +188 64 85 Peony Medium 1024 +194 36 67 Peony Medium Dark 1025 +255 240 228 Wineberry Very Light 1026 +184 89 88 Rose Wine Medium Dark 1027 +161 53 79 Raspberry Medium Dark 1028 +170 24 91 Antique Rose Ultra Dark 1029 +149 102 162 Thistle Medium Dark 1030 +237 247 247 Antique Bleu Ultra Light 1031 +194 209 206 Antique Bleu Very Light 1032 +182 186 194 Antique Bleu Light 1033 +124 135 145 Antique Bleu Medium 1034 +102 122 140 Antique Bleu Dark 1035 + 12 91 108 Antique Bleu Very Dark 1036 +248 248 252 Sea Bleu Very Light 1037 +194 209 207 Glacier Bleu Medium 1038 +102 148 154 Glacier Bleu Medium Dark 1039 +190 190 185 Pewter Medium 1040 +107 103 102 Stone Grey Very Dark 1041 +206 221 193 Pine Very Light 1042 +243 250 209 Grass Green Very Light 1043 + 89 92 78 Grass Green Ultra Dark 1044 +231 152 115 Toast Light 1045 +234 175 15 Toast 1046 +255 190 164 Cinnamon Light 1047 +221 109 91 Red Cinnamon 1048 +209 102 84 Cinnamon 1049 +113 71 42 Mocha Brown Dark 1050 +204 255 255 Teal Ultra Light 1060 +208 223 205 Teal Very Light 1062 +128 151 132 Teal Light 1064 + 0 153 153 Teal Medium 1066 + 0 107 107 Teal 1068 +192 224 200 Jade Light 1070 +146 183 165 Jade Medium Light 1072 + 70 140 110 Jade Medium 1074 + 47 91 73 Jade 1076 +219 194 164 Taupe Light 1080 +188 134 107 Taupe Medium Light 1082 +128 85 30 Taupe 1084 +109 66 39 Taupe Dark 1086 + 94 56 27 Taupe Very Dark 1088 + 77 121 255 Electric Bleu Medium 1089 +128 220 255 Electric Bleu Light 1090 +208 224 210 Sea Green Very Light 1092 +255 207 214 Beauty Rose Very Light 1094 +237 247 247 Slate Bleu Light 1096 +255 44 0 Crimson Red Light 1098 +239 162 127 Flesh Medium Light 4146 +179 82 18 Brick Dark 5975 +172 172 170 Stone Grey 8581 +231 18 97 Christmas Red 9046 +237 247 238 Glacier Bleu 9159 +255 177 147 Bleu Medium Light 9575 diff --git a/inkstitch/palettes/InkStitch Aurifil Lana.gpl b/inkstitch/palettes/InkStitch Aurifil Lana.gpl new file mode 100644 index 0000000..8118077 --- /dev/null +++ b/inkstitch/palettes/InkStitch Aurifil Lana.gpl @@ -0,0 +1,110 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Lana +Columns: 4 +# RGB Value Color Name Number +242 242 242 White 8024 +207 161 105 Honey 8140 +193 19 30 Flame Red 8265 +254 227 241 Oyster 8410 +177 118 41 Tiger Eye 8330 +202 217 198 Light Blue Green 8310 +201 25 137 Dark Pink 8440 +255 255 227 Ivory White 8021 +255 125 0 Pumpkin 8235 +177 17 7 Warm Red 8460 +253 227 241 Oyster 8420 +209 92 0 Orange 8334 +178 178 94 Medium Green / Yellow 8315 +192 95 173 Lavender 8430 +239 226 191 Etherial Green 8110 +209 119 0 Almond 8240 +160 1 69 Burgundy 8450 +251 187 207 Pink 8425 +102 50 4 Mushroom 8360 +178 178 0 Green / Gold 8346 +249 137 160 Rose Pink 8433 +232 246 166 Dark Olive Green 8115 +251 63 63 Fluo Pink 8248 +108 10 66 French Raspberry Red 8455 +252 187 196 Pink 8405 + 71 15 0 Dark Brown 8380 +158 158 55 Pistachio 8320 +228 154 203 Light Pink 8454 +254 227 149 Popcorn 8130 +253 24 19 Cardinal Red 8220 +250 169 211 Medium Pink 8401 +251 187 200 Pink 8332 +239 214 202 Chalk 8325 +144 152 89 Olive Green 8910 +225 201 227 Light Pink 8574 +227 242 65 Gold / Yellow 8120 +252 25 33 Cardinal Red 8250 +242 38 144 Ruby Glint 8402 +253 210 190 Grape 8205 +230 202 187 Pale Orange 8341 +165 176 3 Peapod 8920 +207 167 191 Orchid Bloom 8553 +253 169 104 Chamois 8135 +237 23 31 Scarlet 8260 +242 1 108 Fuschia 8255 +250 146 154 Shrimp 8210 +252 187 181 Salmon Pink 8333 +127 131 1 Crescent Moon 8331 +211 98 175 Lavender 8535 +225 186 144 Pink Sand 8174 +239 18 9 Red 8225 +202 0 59 Dark Red 8403 +250 126 132 Shell Pink 8215 +224 166 167 Pale Salmon 8344 +112 112 15 Cypress 8361 +202 44 146 Dark Pink 8530 +144 18 132 Plum 8540 + 15 35 140 Blue 8762 +240 240 240 White 8345 +125 206 226 Turquoise 8805 + 47 126 32 Green 8880 + 0 0 0 Black 8692 +145 121 133 Gray Ridge 8088 +176 130 190 Purple 8510 + 12 71 157 Warrior Blue 8720 +227 227 227 Silver Gray 8605 + 31 96 169 Magic Blue 8810 + 40 96 23 Green 8890 +135 135 135 Medium Grey 8082 +145 45 0 Chocolate 8089 +136 75 161 Laurie Lilac 8520 + 18 12 128 Royal 8725 +186 186 186 Winter Sage 8610 + 0 128 141 Calypso Green 8850 + 0 76 55 Dark Green 8892 + 89 89 89 Dark Grey 8083 +105 28 138 Dark Purple 8545 + 5 60 109 Salem Blue 8730 + 90 89 89 Dark Grey 8980 +168 221 185 Brook Green 8940 + 0 81 56 Dark Green 8970 +209 224 238 Pale Silver 8757 +186 216 233 Ice Blue 8600 +104 106 176 Baja Blue 8525 + 61 166 57 Emerald 8820 +112 196 140 Sliced Lime 8860 + 0 100 69 Green 8960 +159 171 164 Aqua Gray 8085 +186 209 229 Ice Blue 8710 + 59 0 113 Purple Maze 8550 + 9 58 128 Royal Blue 8782 + 19 155 137 Parrot 8955 + 0 122 84 Medium Green 8950 + 19 72 51 Green 8090 +168 209 229 Sky Blue 8781 + 6 15 61 Navy Blue 8784 + 92 147 174 Wonder Blue 8861 + 1 147 118 Peacock Green 8870 +145 145 0 Tamarack 8930 +185 175 164 Ashes Of Roses 8084 +145 201 224 Pale Blue 8715 + 6 13 60 Navy Blue 8785 + 79 182 139 Emerald Green 8825 + 24 150 76 Medium Green 8875 +146 146 2 Tamarack 8340 +167 150 141 Atmosphere 8087 diff --git a/inkstitch/palettes/InkStitch Aurifil Mako.gpl b/inkstitch/palettes/InkStitch Aurifil Mako.gpl new file mode 100644 index 0000000..b8ed79a --- /dev/null +++ b/inkstitch/palettes/InkStitch Aurifil Mako.gpl @@ -0,0 +1,162 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Mako +Columns: 4 +# RGB Value Color Name Number +242 242 242 White 2024 +254 227 149 Popcorn 2130 +253 90 30 Burnt Orange 1104 +236 226 219 Palest Ivory 2310 +145 119 19 Desert Cactus 2335 + 89 89 89 Dark Grey 1140 +244 217 222 Pale Pink 2410 +248 250 226 Bright White 2021 +250 179 67 Scholastic 2135 +247 63 63 Fluo Pink 1154 +225 208 197 Crystal Gray 2315 +209 92 11 Dark Orange 2155 + 79 79 61 Dark Grey / Green 1285 +246 210 218 Primrose Pink 2415 +247 250 226 Bright White 2110 +246 158 50 Gold / Orange 2140 +245 73 92 Fluo Pink 2277 +223 186 169 Pale / Orange 2320 +167 74 17 Old Dark Tex Orange 2350 +122 35 32 Burgundy 2345 +247 196 205 Sugar Pink 2437 +248 248 79 Lemon 2115 +246 124 27 Soleil 2145 +247 23 19 Cardinal Red 2245 +215 167 147 Peachbeige 2210 +102 50 13 Mushroom 2355 + 52 11 9 Dark Chocolate 2468 +241 114 169 Floral Pink 2425 +247 246 25 Canary Yellow 2120 +247 125 17 Fluo Orange 1133 +246 16 45 Cardinal Red 2255 +178 128 105 Fawn 2330 +209 209 197 Pearl Gray 2325 +133 54 26 Burgundy 4012 +229 89 163 Medium Pink 2435 +231 209 154 Light Yellow / Orange 2125 +249 102 17 Fluo Orange 2150 +241 54 102 Pink 2230 +247 136 111 Coral 2215 +145 146 126 Pale / Grey 2370 +101 50 13 Mushroom 2360 +243 146 154 Shrimp 2220 +195 190 141 Vegas Gold 2920 +247 88 16 Paprika 2235 +244 23 39 Cardinal Red 2250 +167 123 14 Bullion 2340 +124 125 106 Vertiver Green 1318 + 23 31 11 Black 1130 +242 126 133 Shell Pink 2225 +249 249 125 Medium Yellow 1135 +209 84 10 Dark Orange 2240 +204 37 43 Red Orange 2260 +179 147 17 Shimmering Gold 2930 +110 92 78 Dark Grey 2372 + 54 8 46 Dark Brown 2465 +244 186 195 Orchid Pink 2420 +252 197 205 Pink 2205 +220 100 176 Medium Pink 2430 +229 190 221 Light Pink 2510 + 65 0 125 Purple Maze 2545 + 12 37 119 Royal Blue 2730 +178 166 208 Pale Purple 2770 +217 217 217 Natural 2610 +243 57 154 Crimson 2440 +201 25 137 Dark Pink 2479 +213 151 201 Light Pink 2515 + 13 9 94 Imperial Blue 1200 + 12 8 94 Imperial Blue 2735 + 13 43 136 Blue 1320 +135 135 135 Medium Grey 1158 +164 17 40 Atom Red 1103 +136 22 135 Grape Wine 2588 +136 75 161 Laurie Lilac 2520 +104 106 176 Baja Blue 2525 + 11 14 88 Navy Blue 2740 + 17 22 134 Royal 4140 + 79 85 86 Granite 4241 +110 28 30 Tan 2460 +127 17 131 Dark Purple 2535 +128 17 131 Dark Purple 2540 + 62 57 151 Purple 1128 + 9 40 105 Royal Blue 2775 + 7 47 103 Blue 1126 + 0 0 0 Black 2692 +240 2 127 Fuschia 2530 +181 76 100 Baroque Rose 2455 +106 28 138 Dark Purple 1243 +185 204 227 Light Blue 2710 + 11 7 79 Navy Blue 2780 +127 132 133 Grey 1246 +217 240 211 Phantom Green 2800 +180 19 133 Dark Pink 4020 +201 25 137 Dark Pink 2450 + 92 17 74 Sugar Beet 4225 +168 203 226 Sky Blue 2715 + 22 12 66 Navy Blue 2784 + 1 64 90 Deep Windsor 1310 +168 221 185 Brook Green 2830 +159 1 89 Dark Red 1100 +129 1 72 Dark Pink 4030 + 54 5 46 Dark Brown 2581 + 31 96 169 Magic Blue 2720 + 6 13 60 Navy Blue 2745 +240 240 240 White 2600 +186 228 188 Light Green / Yellow 2835 +211 98 175 Lavender 2445 +108 10 66 French Raspberry Red 1240 + 59 0 113 Purple Maze 2582 + 32 83 163 Morning Glory 2725 + 6 15 61 Navy Blue 2785 +209 209 209 Lilac Hint 2605 +102 193 157 Spearmint 2805 + 0 128 141 Calypso Green 2815 +158 216 161 Mint Tint 2880 + 0 84 71 Dark Green 2890 +104 138 146 Medium Blue / Grey 2850 +251 180 196 Carnatio 2423 +179 156 60 Medium Green / Yellow 2915 + 0 144 146 Jade Green 1125 +112 196 140 Sliced Lime 1231 + 58 81 10 Green 2887 + 34 161 125 Pale Jade 2860 +174 55 81 Dusky Rose 2452 +178 156 89 Faded Brass 2324 + 15 58 104 Dark Blue 4644 +102 190 125 Zephyr Green 2882 +152 166 5 Tamarack 2910 + 1 131 95 Jade 2865 +179 202 142 Green Oak 2843 +178 134 83 Medium Yellow 2326 + 1 149 131 Peppermint 2810 + 44 163 102 Gotcha Green 1114 +145 145 0 Tamarack 2975 + 0 122 84 Medium Green 2870 +127 184 159 Dusty Jade Green 2847 +178 156 69 Faded Brass 2314 + 1 99 127 Dark Blue 4182 + 81 161 33 Green / Yellow 2884 +145 136 115 Laurel Oak 2900 + 0 80 76 Blue Spruce 2892 +103 96 110 Dark Grey / Blue 2524 +143 177 113 Tarragon 2902 + 19 155 137 Parrot 1148 +158 189 13 Peapod 2888 +111 102 82 Dark Grey 2905 + 0 90 70 Dark Green 4129 + 30 65 102 Dark Blue 1248 +239 227 185 Almond Oil 2000 + 0 81 56 Dark Green 4093 +171 191 8 Peapod 1147 +112 112 15 Cypress 4173 + 0 74 42 Dark Green 2885 + 11 43 120 Royal Blue 2783 +196 232 189 Mint 2886 +145 211 169 Ocean Wave 2840 +135 207 168 Pale Green 2845 + 0 76 55 Dark Green 4026 +229 208 117 Popcorn 2123 diff --git a/inkstitch/palettes/InkStitch Aurifil Polyester.gpl b/inkstitch/palettes/InkStitch Aurifil Polyester.gpl new file mode 100644 index 0000000..6a8ead8 --- /dev/null +++ b/inkstitch/palettes/InkStitch Aurifil Polyester.gpl @@ -0,0 +1,208 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Polyester +Columns: 4 +# RGB Value Color Name Number + 5 20 63 Navy Blue 5102 + 12 8 84 Navy Blue 5120 + 5 60 109 Salem Blue 5138 +178 226 225 Baby Blue 5156 +255 255 227 Ivory White 5202 +254 209 93 Star Gold 5220 +253 210 190 Grape 5238 +242 1 108 Fuschia 5256 + 6 13 60 Navy Blue 5104 +158 169 208 Scalloped Blue 5122 + 9 39 105 Royal Blue 5140 + 7 75 136 Petrel Blue 5158 +255 255 186 Pale Yellow 5204 +254 196 54 Yellow 5222 +254 158 50 Orange 5240 +199 1 85 Dark Red 5258 + 6 15 61 Navy Blue 5106 +209 237 224 Light Blue 5124 +209 224 238 Pale Silver 5142 + 0 104 122 Mallard Blue 5160 +255 240 141 Mustard 5206 +254 112 24 Fluo Orange 5224 +254 145 27 Honeydew 5242 +250 146 154 Shrimp 5260 + 12 32 116 Royal Blue 5108 + 62 181 201 Medium Turquoise 5126 + 7 55 112 Salem Blue 5144 + 0 128 141 Calypso Green 5162 +254 217 94 Star Gold 5208 +254 227 227 Snow White 5226 +255 79 0 Paprika 5244 +249 103 110 Bitteroot 5262 +104 106 176 Baja Blue 5110 + 75 107 175 Medium Blue 5128 + 15 58 104 Dark Blue 5146 +145 213 208 Pale Aqua Green 5164 +254 186 53 Scholastic 5210 +251 179 197 Carnatio 5228 +255 89 0 Paprika 5246 +223 22 43 Foxy Red 5264 +114 100 173 Light Purple 5112 + 11 25 102 Imperial Blue 5130 + 4 42 85 Blue Ribbon 5148 + 0 71 55 Evergreen 5166 +209 84 0 Orange 5212 +250 126 132 Shell Pink 5230 +102 45 0 Chocolate 5248 +164 17 40 Atom Red 5266 +186 216 233 Ice Blue 5114 + 17 12 121 Royal 5132 + 0 76 55 Dark Green 5150 + 0 81 56 Dark Green 5168 +254 232 178 Tusk 5214 +255 89 0 Paprika 5232 +250 159 184 Pale Pink 5250 +110 28 30 Tan 5268 + 1 26 51 Navy Blue 5116 +208 212 232 Palest Blue 5134 + 0 87 88 Dark Teal 5152 + 0 146 112 Medium Jade Green 5170 +254 178 67 Scholastic 5216 +251 103 78 Coral 5234 +213 151 201 Light Pink 5252 +212 0 38 Red 5270 + 11 14 88 Navy Blue 5118 +104 106 176 Baja Blue 5136 + 71 180 148 Emerald Green 5154 +168 221 196 Brook Green 5172 +254 209 114 Daffodil 5218 +255 19 0 Red 5236 +227 2 127 Crimson 5254 +204 0 46 Red 5272 +242 242 242 White 5302 +216 2 127 Passion 5320 +136 74 162 Laurie Lilac 5338 +166 111 180 Iris 5356 + 0 0 0 Black 5402 +249 137 160 Rose Pink 5420 + 0 74 42 Dark Green 5514 + 19 155 137 Parrot 5532 +245 227 227 Oyster 5304 +127 17 131 Dark Purple 5322 + 47 0 124 Purple Maze 5340 + 59 0 113 Purple Maze 5358 + 32 42 14 Black 5404 +179 15 65 Dark Red / Orange 5422 + 58 81 10 Green 5516 +125 203 166 Mint Green 5534 +252 197 212 Memphis Belle 5306 + 92 17 64 French Raspberry Red 5324 + 58 0 111 Purple Maze 5342 +225 221 230 Palest Grey 5360 + 61 58 23 Green 5406 +131 24 52 Maroon 5424 + 24 72 29 Green 5518 + 0 56 34 Ivy 5536 +247 127 190 Fuchsia Pink 5308 +247 114 172 Floral Pink 5326 +177 166 208 Pale Purple 5344 +225 201 207 Steel Gray 5362 +207 161 105 Honey 5408 +145 211 168 Ocean Wave 5502 +127 131 1 Crescent Moon 5520 + 0 57 40 Ivy 5538 +164 17 121 New Berry 5310 +245 92 172 Pink 5328 +114 90 168 Lakers Purple 5346 +165 90 79 Mauvewood 5364 +251 169 154 Salmon 5410 +112 196 140 Sliced Lime 5504 +129 147 125 Green Bay 5522 +129 147 138 Pale Green 5540 +137 12 76 Cranberry 5312 +245 1 89 Cherry Blossom 5330 + 29 10 99 Imperial Blue 5348 +103 18 31 Brown 5366 +226 74 100 Medium Pink 5412 + 44 163 102 Gotcha Green 5506 +240 234 162 PaleYellow 5524 +111 156 18 Meadow Green 5542 +238 205 229 Light Pink 5314 +248 20 66 Cardinal Red 5332 +229 190 221 Light Pink 5350 +176 129 170 Regal Orchid 5368 +181 76 100 Baroque Rose 5414 + 24 150 76 Medium Green 5508 + 0 81 56 Dark Green 5526 +227 227 227 Silver Gray 5544 +220 100 176 Medium Pink 5316 +234 0 48 Ruby 5334 +206 149 200 Purple 5352 +225 201 227 Light Pink 5370 +123 22 29 Cherokee Red 5416 + 0 103 62 Green 5510 + 0 104 91 Green Forest 5528 +168 221 185 Brook Green 5546 +202 44 146 Dark Pink 5318 +176 130 190 Purple 5336 +145 95 172 Medium Purple 5354 + 0 0 0 Black 5372 +251 169 188 Petal Pink 5418 + 0 88 55 Latex Green 5512 + 0 126 111 Jade Green 5530 + 90 130 99 Sea Spray 5548 +171 194 172 Sea Foam 5550 +174 205 111 Light Green 5566 +255 255 0 Gold / Yellow 5610 +240 240 240 White 5626 +123 62 41 Dark Brown 5642 +230 191 192 Pale Orange 5710 +239 240 240 White 5726 +208 197 191 Chrome 5742 +130 164 136 Creme de Menthe 5552 +168 168 16 Peapod 5568 +178 178 0 Green / Gold 5612 +195 178 99 Grapefruit 5628 +225 186 169 Pale / Orange 5644 +224 166 167 Pale Salmon 5712 +227 227 227 Silver Gray 5728 +185 175 170 Cloud 5744 + 40 101 75 Green Forest 5554 +144 152 89 Olive Green 5570 +232 232 207 Pale Orange 5614 +135 111 12 Desert Cactus 5630 +133 60 39 Brown 5646 +209 92 0 Orange 5714 +188 186 186 Pale Grey / Pink 5730 +153 162 155 Jadeite 5746 +209 236 134 Pale Yellow 5556 + 92 103 29 Palmetto 5572 +231 209 154 Light Yellow / Orange 5616 +145 119 0 Crescent Moon 5632 + 78 28 19 Dark Oak 5648 +168 74 9 Old Dark Tex Orange 5716 +135 135 135 Medium Grey 5732 + 0 33 35 Ivy 5748 + 54 146 38 Bright Green 5558 +239 214 186 Ecru 5602 +178 146 0 Shimmering Gold 5618 +135 71 7 Chocolate 5634 +208 197 184 Stainless Steel 5702 +239 214 202 Chalk 5718 + 54 54 54 Dark Grey 5734 + 47 126 32 Green 5560 +226 188 127 Bamboo 5604 +145 145 129 Pale / Grey 5620 +226 208 197 Crystal Gray 5636 +185 175 164 Ashes Of Roses 5704 +144 132 118 Fungi 5720 +158 158 158 Medium Grey 5736 + 27 102 72 Green Petal 5562 +225 186 144 Pink Sand 5606 +125 125 106 Vertiver Green 5622 +254 227 197 Bone 5638 +167 150 141 Atmosphere 5706 +158 149 136 Light Sage 5722 +112 112 112 Medium Grey / Green 5738 +214 222 157 Citron 5564 +255 255 125 Medium Yellow 5608 + 12 55 39 Ivy 5624 +166 105 77 Brown 5640 +145 136 115 Laurel Oak 5708 +177 162 151 String 5724 + 13 16 17 Black 5740 diff --git a/inkstitch/palettes/InkStitch Aurifil Rayon.gpl b/inkstitch/palettes/InkStitch Aurifil Rayon.gpl new file mode 100644 index 0000000..bf608c9 --- /dev/null +++ b/inkstitch/palettes/InkStitch Aurifil Rayon.gpl @@ -0,0 +1,184 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Rayon +Columns: 4 +# RGB Value Color Name Number + 6 15 61 Navy Blue C314 + 31 96 169 Magic Blue C129 + 62 181 201 Medium Turquoise C110 + 43 0 96 Purple Maze C534 +242 237 231 Natural White C181 + 0 104 122 Mallard Blue C761 +102 190 125 Zephyr Green C352 +184 190 2 Dark Green C504 + 6 13 60 Navy Blue C781 + 37 132 187 Dark Turquoise Blue C113 + 0 83 98 Teal Haze C114 + 33 21 75 Dark Purple C520 +255 255 227 Ivory White C282 + 0 38 47 Ivy C119 + 0 135 119 Isle Green C313 +255 255 125 Medium Yellow C004 + 5 20 63 Navy Blue C774 + 12 71 157 Warrior Blue C775 + 0 149 178 Dark Blue / Green C378 + 50 0 87 Purple Maze C516 +227 227 227 Silver Gray C315 +209 237 224 Light Blue C101 + 0 79 69 Dark Green C756 +240 248 63 Lime C005 + 4 28 67 Navy Blue C264 + 11 61 145 Fire Blue C323 +158 186 217 Light Blue C771 + 58 0 111 Purple Maze C409 + 0 0 0 Black C200 +186 228 215 Bleached Aqua C143 + 0 47 48 Ivy C757 +240 249 125 Medium Yellow C212 + 9 24 88 Navy Blue C512 +135 209 206 Pale Turquoise C109 + 75 107 175 Medium Blue C441 +211 98 175 Lavender C514 +168 222 235 Baby Blue C103 +158 217 195 Yucca C550 + 0 79 69 Dark Green C758 +240 175 0 Medium Orange C737 + 13 43 136 Blue C444 +197 224 230 Cadet Blue C121 + 83 116 169 Medium Purple C130 +145 134 191 Light Purple C451 +112 201 212 Basic Turquoise C104 +125 203 166 Mint Green C146 + 0 80 76 Blue Spruce C476 +255 178 16 Merit Gold C741 + 12 32 116 Royal Blue C773 +145 201 224 Pale Blue C339 + 8 31 91 Imperial Blue C484 +224 89 170 Medium Pink C081 + 0 130 155 Dark Aqua Green C107 + 34 161 125 Pale Jade C475 +168 129 0 Autumn Green C746 +255 217 17 Canary C011 + 12 37 119 Royal Blue C778 + 92 147 174 Wonder Blue C797 + 5 22 64 Navy Blue C197 +242 242 242 White C001 + 0 104 122 Mallard Blue C764 + 0 126 111 Jade Green C285 +145 145 0 Tamarack C211 +255 240 109 Snapdragon C502 +255 240 141 Mustard C015 + 47 126 32 Green C751 + 54 146 38 Bright Green C460 + 40 101 75 Green Forest C462 + 0 0 0 Black C497 +242 38 144 Ruby Glint C560 +239 235 227 Natural White C795 +237 183 218 Pale Pink C044 +255 255 0 Gold / Yellow C010 +178 222 105 Spruce C749 +186 228 188 Light Green / Yellow C161 + 50 93 61 Lime C486 +177 149 156 Satin Wine C225 +251 169 188 Petal Pink C382 +238 235 227 Natural White C376 +251 179 197 Carnatio C046 +255 232 85 Star Gold C009 + 55 146 38 Kelly C358 +196 230 104 Sharp Green C165 +195 190 141 Vegas Gold C473 +201 25 137 Dark Pink C530 +252 187 181 Salmon Pink C222 +251 187 207 Pink C021 +249 127 146 Azalea C052 +255 178 16 Merit Gold C743 + 0 101 50 Green C752 +111 156 18 Meadow Green C166 +255 255 125 Medium Yellow C745 +249 147 188 Pale Pink C377 +254 227 227 Snow White C403 +251 136 111 Coral C408 +223 1 76 Cerise C703 +254 186 53 Scholastic C742 + 0 102 50 Green C324 + 0 40 31 Ivy C357 +217 217 167 Sea Mist C474 +247 114 172 Floral Pink C050 +251 169 188 Petal Pink C406 +204 0 46 Red C708 +164 17 40 Atom Red C219 +254 186 53 Scholastic C501 + 0 56 34 Ivy C747 + 0 45 36 Ivy C469 +125 125 0 Crescent Moon C172 +252 210 232 Delicate Mauve C319 +237 36 43 Scarlet C407 +237 23 31 Scarlet C715 +156 39 34 Red Bittersweet C547 +254 255 0 Gold / Yellow C008 + 0 103 62 Green C753 + 12 55 39 Ivy C755 + 32 42 14 Black C176 +253 227 241 Oyster C041 +193 19 30 Flame Red C713 +255 19 0 Red C717 +126 31 63 Maroon C711 +255 217 17 Canary C006 + 1 131 45 Bright Green C154 + 0 47 48 Ivy C120 + 53 50 13 Green C471 +133 35 100 Dark Purple C058 + 60 17 7 Dark Brown C402 +255 19 1 Red C719 +120 45 54 Wine C548 +252 187 181 Salmon Pink C322 +112 55 0 Chocolate C075 +254 158 44 Gold / Orange C029 +241 231 216 Palest Ivory C791 + 33 32 18 Black C554 +239 227 185 Almond Oil C203 + 79 85 86 Granite C494 + 54 54 54 Dark Grey C557 +251 136 111 Coral C025 +225 55 24 Red C724 +254 112 24 Fluo Orange C509 +240 240 204 Glass Green C788 + 71 15 0 Dark Brown C080 +185 175 170 Cloud C204 +128 132 133 Grey C189 +127 132 133 Grey C798 +254 90 23 Burnt Orange C716 +178 55 0 Old Dark Tex Orange C723 +177 118 36 Tiger Eye C730 +254 232 178 Tusk C740 + 53 27 8 Dark Brown C728 + 79 79 61 Dark Grey / Green C477 +240 240 240 White C331 + 13 16 17 Black C278 +253 24 19 Cardinal Red C510 +209 130 12 Almond C066 +226 188 127 Bamboo C552 +254 232 138 Wheat C793 + 70 22 5 Dark Brown C480 +167 158 153 Opal Gray C541 +227 227 227 Silver Gray C182 +230 202 187 Pale Orange C062 +255 168 20 Mango C720 +208 153 79 Oak Buff C432 +254 227 128 Sunshine C744 +231 209 154 Light Yellow / Orange C538 +125 125 106 Vertiver Green C427 +158 164 166 Quarry C799 +254 227 197 Bone C383 +254 145 27 Honeydew C722 +254 232 178 Tusk C289 +254 232 138 Wheat C016 +239 222 212 Yellow / Gold C328 + 54 54 54 Dark Grey C199 + 89 89 89 Dark Grey C342 +239 226 191 Etherial Green C061 +254 90 23 Burnt Orange C359 +239 227 185 Almond Oil C063 +146 125 50 Medium Yellow / Green C417 +241 231 216 Palest Ivory C201 +127 132 133 Grey C232 + 71 71 71 Midnight C273 diff --git a/inkstitch/palettes/InkStitch Aurifil Royal.gpl b/inkstitch/palettes/InkStitch Aurifil Royal.gpl new file mode 100644 index 0000000..d997298 --- /dev/null +++ b/inkstitch/palettes/InkStitch Aurifil Royal.gpl @@ -0,0 +1,503 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Royal +Columns: 4 +# RGB Value Color Name Number +243 231 250 White C001 +255 255 240 Light Beige C003 +255 255 225 Yellow Beige C004 +230 240 102 Green Gold C005 +230 240 102 Green Gold C006 +230 240 102 Green Gold C007 +255 255 102 Lemon Yellow C008 +255 240 204 Pale Gold C009 +255 250 153 Gold C010 +245 240 102 Darker Gold C011 +255 230 75 Mid Gold C012 +255 245 0 Orange Gold C013 +255 250 153 Pale Gold C015 +240 220 170 Creamy Beige C016 +255 250 153 Gold C017 +255 204 0 Copper C018 +255 204 0 Copper C020 +255 204 180 Very Pale Peach C021 +255 180 160 Pale Peach C024 +240 153 130 Peach C025 +255 153 51 Carrot C026 +255 153 51 Carrot C027 +255 153 51 Carrot C029 +255 102 0 Orange C030 +255 51 0 Tomato Red C031 +255 51 0 Tomato Red C032 +255 51 0 Tomato Red C033 +255 0 0 Red C037 +255 0 75 Deep Red C038 +170 0 51 Rich Red C040 +220 220 224 Light Grey C041 +255 204 255 Pale Mauve C042 +255 204 255 Pale Mauve C044 +255 204 215 Mauve Pink C046 +255 204 215 Mauve Pink C048 +250 220 220 Pink C049 +220 153 204 Dark Mauve C050 +255 153 170 Plum Pink C051 +255 160 204 Dark Pink C052 +255 102 153 Bright Pink C053 +215 0 120 Dark Rose C054 +255 0 120 Hot Pink C056 +204 0 180 Plum C058 +102 25 75 Dark Maroon C060 +240 220 215 Brownish Cream C061 +230 204 190 Mushroom cap C062 +220 200 160 Camel C063 +245 204 175 Brownish Cream C064 +255 153 102 Tangerine C065 +255 180 160 Peach C066 +204 153 51 Bronze C067 +204 153 51 Bronze C068 +180 130 75 Light brown C069 +180 130 75 Light brown C070 +153 153 51 Brownish green C071 +185 153 102 Burnished brown C072 +185 153 102 Burnished brown C073 +153 51 51 Red brown C075 +153 51 115 Maroon C076 +153 51 51 Red brown C077 +140 95 65 Brown C078 +120 60 51 Reddish brown C079 +102 51 51 Very dark brown C080 +235 204 215 Pale Lavender C081 +204 140 204 Purple C084 +230 190 220 Darker Lilac C085 +204 153 186 Dusky Mauve C086 +220 153 204 Dark Mauve C087 +204 140 204 Purple C088 +153 104 220 Jacaranda C090 +125 0 153 Purple C094 +120 51 153 Ultra Marine C096 + 51 0 204 Marine Blue C099 +102 2 153 Aubergine C100 +220 255 230 Pale Turquoise C101 + 51 191 204 Medium Aqua C102 + 51 191 204 Medium Aqua C103 + 0 185 204 Bright Aqua C104 + 0 235 255 Medium Turquoise C106 + 0 235 255 Medium Turquoise C107 +175 255 245 Light turquoise C109 + 65 153 175 Medium Teal Blue C110 + 80 134 204 Medium Blue C111 + 65 153 175 Medium Teal Blue C112 + 51 153 204 Teal Blue C113 + 51 102 153 Teal Blue C114 + 65 125 135 Dark Sea Green C119 + 51 102 102 Dark Sea Green C120 +204 249 255 Very Pale Blue C121 +204 249 255 Very Pale Blue C123 +240 245 250 Silver Blue C124 +240 250 255 Sky Blue C125 +170 200 255 Medium Blue C128 +170 200 255 Medium Blue C129 +120 150 220 Medium Blue C130 +102 102 204 Marine Blue C131 + 51 51 200 Bright Blue C132 + 0 0 180 Bright Blue C133 + 0 0 180 Bright Blue C134 + 51 0 160 Ultramarine C135 + 51 0 204 Marine Blue C136 +102 2 153 Aubergine C137 + 50 100 170 Marine Blue C138 + 80 0 120 Aubergine C139 + 0 0 75 Dark navy C140 +153 255 220 Light Green C141 +160 204 180 Light Teal Green C142 + 60 220 170 Light teal Green C143 +160 204 180 Light teal Green C144 +153 240 204 Light teal Green C145 + 51 204 165 Light teal Green C146 + 51 255 153 Mint Green C147 + 51 204 153 Green C148 +220 255 240 Pale Green C151 + 30 151 80 Emerald Green C152 + 51 204 153 Light teal Green C154 + 60 175 120 Teal Green C155 + 0 153 130 Emerald C156 + 51 153 153 Dark Aqua C158 + 51 120 102 Dark Slate Green C159 +204 255 204 Pale Green C161 +220 255 204 Very Pale Green C162 +225 255 153 Pale Green C163 +153 204 51 Medium Green C165 +130 191 53 Med Olive Green C166 + 51 204 51 Medium Green C167 + 51 204 153 Green C168 + 51 153 120 Slate Green C169 + 51 153 120 Slate Green C170 +204 204 150 Light Khaki Green C171 +153 153 51 Brownish Green C172 +153 153 51 Med Leaf Green C174 + 80 110 51 Dark Leaf Green C176 + 0 60 20 Dark Leaf Green C177 +140 160 190 Med Leaf Green C180 +220 220 224 Light Silver Grey C181 +204 210 204 Light Silver Grey C182 +204 204 210 Med Silver Grey C183 +204 204 210 Med Silver Grey C184 +225 204 180 Pale Grey Gold C185 +204 180 170 Med Grey Brown C186 +140 135 125 Dark Grey C187 +190 190 195 Silver Grey C189 +153 153 165 Dark Grey C190 +153 153 153 Dark Grey C191 +127 127 127 Dark Grey C192 +140 140 150 Dark Grey C193 +175 175 180 Dark Grey C194 + 85 85 85 Very Dark Grey C195 + 75 75 75 Very Dark Grey C196 + 0 0 51 Dark Navy C197 + 85 85 85 Very Dark Grey C199 + 0 0 0 Black C200 +245 235 204 Light Grey Brown C201 +240 225 195 Creamy Beige C202 +255 240 204 Beige C203 +245 240 230 Light Grey Brown C204 +200 175 140 Med Grey Brown C205 + 20 190 160 Pale Brown C206 +153 121 102 Medium Brown C207 +225 230 140 Light Khaki Green C209 +230 204 110 Khaki Green C210 +204 204 51 Dark yellow C211 +204 204 51 Dark yellow C212 +255 240 51 Bright yellow C214 +255 204 0 Copper C215 +255 170 51 Orange C216 +153 51 75 Burgundy C219 +160 51 102 Burgandy Rose C220 +255 185 190 Pale Pink C222 +255 154 154 Rose Pink C223 +153 153 154 Medium Grey C225 +210 170 210 Light Violet C226 + 75 75 75 Dark Grey C232 +178 178 178 Silver Grey C234 +140 140 150 Dark Grey C235 +229 229 225 Pale Blue C236 + 0 51 153 Intense Blue C244 +240 150 70 Brown Orange C249 + 0 0 75 Dark Navy C264 +125 102 225 Marine Blue C265 +153 153 153 Dark Grey C267 + 75 75 75 Very Dark Grey C269 +102 51 0 Dark brown C270 +153 153 153 Dark Grey C271 + 85 85 85 Very Dark Grey C273 +150 190 230 Medium Blue C275 +153 153 153 Dark Grey C276 + 80 40 0 Very dark brown C277 + 85 85 85 Very Dark Grey C278 +102 153 255 Medium Blue C280 +255 255 230 Beige C282 +170 200 255 Medium Blue C283 +255 165 125 Peach C284 +102 172 153 Blue Green C285 + 0 153 130 Emerald C288 +255 204 130 Pale Gold C289 +153 51 51 Red brown C291 +120 60 51 Reddish brown C294 + 51 153 153 Dark Aqua C313 + 0 0 51 Navy C314 +255 255 240 Off White C315 +255 255 102 Lemon Yellow C316 +239 255 102 Green Gold C317 +255 225 240 Pale Pink C319 +255 178 150 Rose Pink C320 +255 204 204 Salmon Pink C322 + 0 0 180 Bright Blue C323 + 60 175 120 Teal Green C324 +170 120 53 Brown C325 +175 175 180 Dark Grey C327 +255 255 225 Yellow Beige C328 +255 245 0 Orange Gold C329 +235 204 245 Lilac C330 +190 190 180 Light Grey C331 + 0 40 120 Bright Navy C334 + 0 0 102 Navy C336 +153 255 240 Pale Sea Green C337 + 51 102 153 Teal Blue C339 +140 140 150 Dark Grey C342 +255 0 102 Rose Red C343 +204 102 153 Mid Purple C349 + 75 0 153 Ultra Marine C350 +153 255 220 Light Green C352 +240 140 75 Rich Brown C353 +178 178 178 Silver Grey C354 + 0 51 153 Intense Blue C355 + 51 102 0 Dark Leaf Green C357 + 51 204 70 Medium Green C358 +255 153 51 Orange C359 +204 204 210 Med Silver Grey C360 +178 178 185 Grey C362 +153 51 75 Burgundy C373 +153 204 51 Medium Green C374 +255 255 240 Light Beige C376 +255 204 215 Mauve Pink C377 +150 190 230 Medium Blue C378 +250 220 220 Pink C382 +255 180 160 Peach C383 +255 215 165 Sand C401 +153 80 102 Maroon C402 +220 220 224 Light Grey C403 +255 190 102 Tangerine C405 +255 185 190 Pale Pink C406 +204 51 0 Rust C407 +255 154 154 Rose Pink C408 +153 0 153 Purple C409 +180 102 230 Purple C410 + 90 60 0 Dark Olive Green C411 + 85 85 85 Very Dark Grey C412 +255 51 0 Tomato Red C413 + 80 90 102 Steel blue C414 +204 140 150 Plum Pink C415 + 51 153 120 Slate Green C416 +180 130 75 Light brown C417 +153 153 154 Medium Grey C418 +170 120 53 Brown C419 + 30 151 80 Emerald Green C420 +152 153 102 Khaki Green C421 +180 102 230 Purple C422 + 51 130 135 Dark Aqua C423 +255 255 153 Pale Khaki Green C424 +130 191 53 Med Olive Green C425 +255 204 153 Salmon C426 +204 180 170 Medium grey brown C427 + 51 255 153 Mint Green C428 + 51 204 51 Medium Green C429 +220 190 160 Pale Brown C430 +204 150 140 Brownish pink C431 +185 153 102 Burnished brown C432 +204 153 186 Dusky Mauve C433 +127 127 127 Medium Grey C434 +153 153 154 Medium Grey C435 +255 80 190 Deep Pink C436 +255 180 130 Orange Peach C437 +102 153 153 Sea Green C438 +255 245 0 Orange Gold C439 + 80 40 0 Very dark brown C440 +170 200 255 Medium Blue C441 + 50 100 170 MarineBlue C442 +125 125 140 Medium Blue C443 + 51 51 200 Bright Blue C444 +120 153 190 Medium Blue C445 +153 204 240 Pale Blue C446 + 65 153 175 Medium Teal Blue C447 + 80 0 120 Aubergine C448 + 51 120 102 Dark Slate Green C449 +160 51 102 Burgundy Rose C450 +210 170 210 Light Violet C451 +153 104 220 Jacaranda C452 +225 255 204 Pale Green C453 +153 255 240 Pale Sea Green C454 + 51 153 153 Sea Green C455 + 0 190 204 Medium Teal Blue C456 + 51 180 190 Sea Green C457 + 75 120 125 Sea Green C458 +153 190 51 Med Olive Green C459 + 51 204 153 Green C460 + 0 235 255 Medium Turquoise C461 + 51 153 120 Slate Green C462 + 60 175 120 Teal Green C463 + 0 102 0 Dark Emerald C464 + 0 102 0 Dark Emerald C465 +102 102 51 Dark Olive Green C466 +175 170 255 Light Blue C467 + 51 102 102 Dark Sea Green C468 + 51 102 0 Dark Leaf Green C469 +165 153 51 Brownish Green C470 +102 102 51 Dark Olive Green C471 + 0 73 51 Dark Olive Green C472 +245 240 230 Light Grey Brown C473 +235 245 204 Light Khaki Green C474 + 51 204 180 Light teal Green C475 + 51 180 190 Sea Green C476 +204 180 170 Medium grey brown C477 +185 153 102 Burnished brown C478 +185 153 51 Rust Brown C479 +140 95 65 Brown C480 +204 204 204 Silver Grey C481 +190 190 195 Silver Grey C482 +204 204 185 Light Grey Brown C483 + 61 89 120 Dark Blue C484 + 0 165 180 Medium Teal Blue C485 + 51 153 120 Slate Green C486 +255 0 0 Red C487 +255 51 153 Hot Pink C488 +153 153 51 Med Leaf Green C489 +153 0 125 Dark Purple C490 +255 240 220 Beige C491 +178 178 185 Grey C492 +127 127 127 Medium Grey C494 +102 0 102 Dark Fuschia C495 +220 153 204 Dark Mauve C496 +102 25 75 Dark Maroon C497 +140 95 65 Brown C498 +255 230 75 Mid Gold C501 +255 250 204 Cream C502 +255 204 0 Copper C503 +204 204 51 Dark yellow C504 +255 0 102 Rose Red C505 +255 215 204 Pinkish Beige C506 +204 153 186 Dusky Mauve C507 +255 223 216 Very Pale Pink C508 +255 102 0 Orange C509 +255 0 0 Red C510 +150 175 255 Medium Blue C511 + 80 0 120 Aubergine C512 + 50 90 102 Dark Teal Blue C513 +230 190 220 Darker Lilac C514 +102 0 102 Aurifil Royal Purple C515 +102 0 102 Aurifil Royal Purple C516 +102 2 153 Aubergine C517 + 0 0 102 Navy C518 +102 0 102 Purple C519 +102 0 102 Purple C520 + 51 102 153 Teal Blue C521 + 0 185 204 Bright Aqua C522 + 53 170 130 Teal Green C523 +153 204 51 Medium Green C524 +130 191 53 Med Olive Green C525 + 51 160 102 Medium Green C526 +220 190 160 Pale Brown C527 +185 153 102 Burnished brown C528 +204 140 150 Plum Pink C529 +204 102 204 Purple C530 +153 51 51 Red brown C531 +153 102 51 Brown C532 +175 175 180 Dark Grey C533 + 80 102 125 Steel Blue C534 +153 0 204 Jacaranda C535 + 51 51 200 Bright Blue C536 +153 153 154 Medium Grey C537 +240 220 215 Brownish cream C538 +175 170 255 Light Blue C539 +220 220 224 Light Silver Grey C540 +204 180 170 Medium grey brown C541 +255 240 51 Bright yellow C542 +153 153 165 Dark Grey C544 + 0 165 120 Emerald Green C545 + 0 0 75 Dark navy C546 +153 51 80 Medium maroom C547 +153 51 115 Maroon C548 +150 190 230 Medium Blue C549 +204 255 240 Pale Turquoise C550 +220 255 204 Very Pale Green C551 +180 130 75 Light brown C552 +240 140 75 Rich Brown C553 + 80 40 0 Very dark brown C554 +178 178 185 Grey C555 +140 140 150 Dark Grey C556 +140 140 150 Dark Grey C557 + 75 75 75 Very Dark Grey C558 +175 60 120 Deep Plum C560 + 0 60 20 Dark Leaf Green C561 + 0 255 0 Light Green C638 +128 0 128 Purple C701 +255 0 255 Pink C702 +252 3 90 Dark Pink C703 +254 207 240 Light Pink C704 +174 0 0 Blood Red C705 +128 0 64 Crimson C706 +128 0 64 Crimson Red C707 +128 0 64 Crimson C708 +243 222 242 Light Pink C709 +128 0 0 Purple C710 +113 0 56 Purple C711 +128 0 64 Purple C712 +182 10 74 Sap Red C713 +255 128 192 Pink C714 +202 0 0 Red Riding Hood C715 +255 128 0 Orange C716 +223 0 0 Red C717 +128 0 64 Purple C718 +255 0 0 Red C719 +255 157 111 Light Orange C720 +255 184 149 Light Orange C721 +255 128 0 Orange C722 +204 102 0 Orange Brown C723 +185 92 0 Earth C724 +164 0 0 Red Brown C725 +166 83 0 Light Brown C726 + 97 48 48 Dark Brown C727 + 83 41 0 Wood Brown C728 +128 64 64 Brown C729 +128 64 0 Brown C730 +164 82 0 Light Brown C731 +175 175 97 Bronze C732 +162 162 81 Bronze C733 +255 183 111 Orange Brown C734 +255 128 64 Orange C735 +221 221 0 Yellow Green C736 +219 236 9 Gold C737 +242 242 0 Gold C738 +253 253 0 Yellow Gold C739 +255 255 174 Pale Yellow C740 +230 230 0 Flat Yellow C741 +242 242 0 Bright Yellow C742 +235 245 27 Gold C743 +193 193 0 Gold C744 +255 255 185 White Gold C745 +128 128 0 Bronze C746 + 0 85 43 Green C747 + 0 64 64 Green C748 + 0 255 0 Lime Green C749 + 0 128 0 Deep Green C750 + 0 157 0 Green C751 + 0 151 0 Deep Green C752 + 0 113 0 Deep Green C753 +151 255 151 Light Green C754 + 0 51 0 Forest Green C755 + 64 128 128 Teel C756 + 50 101 101 Dark Teel C757 + 49 129 142 Teel Green C758 + 89 172 172 Teel C759 + 0 164 164 Teel C760 + 50 99 99 Heavy Teel C761 + 64 128 128 Blue Teel C762 + 32 174 171 Ocean Blue C763 + 4 124 244 Midnight Blue C764 +128 128 255 Light Blue C765 + 0 0 160 Blue C766 + 37 0 149 Slate Blue C767 + 47 47 255 Baby Blue C768 + 81 81 255 Sky Blue C769 + 15 177 255 Baby Blue C770 + 0 0 160 Purple Blue C771 + 94 0 187 Light Purple C772 + 0 0 149 Dark Purple C773 + 0 0 64 Black Blue C774 + 0 0 196 Blue C775 + 0 0 179 Blue Purple C776 + 0 0 160 Deep Blue C777 + 0 0 128 Aurifil Royal Blue C778 + 0 0 113 Dark Blue C779 + 69 0 138 Purple C780 + 0 0 47 Midnight Blue C781 + 64 0 64 Crimson C782 +188 116 203 Mauve C783 +128 0 128 Purple C784 +100 0 100 Deep Purple C785 + 64 0 64 Purple Brown C786 +188 188 122 Light Brown C787 +185 185 115 Tan C788 + 79 39 0 Brown C790 +214 214 173 Tan C791 +203 203 150 Goldern Tan C792 +173 145 58 Gold C793 + 44 44 44 Night Sky C794 +185 185 185 Light Grey C795 +114 114 114 Dark Grey C796 + 0 0 130 Silver Blue C797 + 97 97 97 Grey C798 +192 192 192 Silver C799 +255 255 0 Gold PG001 +223 223 0 Gold Sliver PG002 +192 192 192 Silver PS001 +225 225 0 Golden AG001 +191 191 0 Gold AG002 +128 128 128 Silver AS001 diff --git a/inkstitch/palettes/InkStitch BFC Polyester.gpl b/inkstitch/palettes/InkStitch BFC Polyester.gpl new file mode 100644 index 0000000..766f104 --- /dev/null +++ b/inkstitch/palettes/InkStitch BFC Polyester.gpl @@ -0,0 +1,324 @@ +GIMP Palette +Name: Ink/Stitch: BFC Polyester +Columns: 4 +# RGB Value Color Name Number +247 247 247 White 2168 +240 240 240 Bright White 2169 + 0 0 0 Black 2170 +235 231 219 Antique White 2172 +237 201 212 PALE Salmon Pink 2181 +252 187 209 LT Salmon Pink 2182 +248 141 172 MD Salmon Pink 2187 +230 207 217 PALE Pink 2189 +255 188 224 LT Pink 2193 +253 165 203 Pink 2198 +229 86 109 MD Pink 2199 +237 114 170 DK Pink 2202 +235 225 255 PALE Pink Ice 2208 +234 15 107 Pink Lady 2218 +196 43 112 Fushia 2219 +216 69 138 MD Fushia 2220 +215 61 99 LT Cranberry 2222 +165 42 70 MD Cranberry 2223 +166 23 85 DK Cranberry 2226 +225 140 190 MD Bright Pink 2228 +209 161 212 MD Desert Rose 2235 +168 50 97 MD Bright Plum 2241 +133 28 86 DK Bright Plum 2243 +181 66 133 DK Fushia 2245 +102 11 41 DK Burgandy 2247 +238 209 202 PLST Peach 2250 +233 172 165 LT Peach 2253 +255 138 142 MD Peach 2256 +255 105 109 DK Peach 2260 +242 124 138 DK Salmon Pink 2270 +253 152 180 MD Pink Carnation 2271 +244 71 91 DK Pink Carnation 2275 +168 54 81 Ruby Red 2278 +201 80 66 DK Red Rust 2283 + 97 37 51 DKST Burgandy 2287 +214 58 50 Bright Red 2291 +184 20 42 Cherry Red 2295 +161 25 25 Satin Red 2297 +133 0 0 DK Satin Red 2303 +116 5 11 DKST Satin Red 2306 +138 9 13 Red Wine 2307 +196 72 107 Brandy 2315 +148 55 81 MD Burgandy 2317 +194 122 161 Desert Rose 2320 +199 95 138 LT Fushia 2331 + 74 0 0 Black Wine 2342 +247 247 183 PALE Yellow 2368 +247 241 153 LT Yellow 2371 +255 239 11 Yellow 2376 +255 227 87 Buttered Popcorn 2379 +245 200 95 Buttercup 2380 +233 202 0 Bright Yellow 2385 +240 238 183 PALE Mellow Yellow 2388 +250 233 160 LT Buttered Popcorn 2390 +255 230 100 Bright Popcorn 2403 +255 196 133 LT Mock Orange 2410 +255 197 61 LT Apricot 2411 +255 191 71 MD Apricot 2412 +255 203 101 Apricot 2413 +247 182 52 DK Apricot 2414 +230 145 34 MD Mock Orange 2416 +255 146 23 DKST Apricot 2426 +255 201 159 PALE Peach Fuzz 2428 +255 183 151 MD Peach Fuzz 2430 +253 205 195 LT Melon 2433 +252 169 152 Melon 2435 +255 136 101 DK Melon 2437 +227 114 20 Bright orange 2451 +210 58 0 Orange 2454 +255 121 84 Sunset Orange 2455 +255 102 0 Red Orange 2458 +205 46 14 DK Red Orange 2465 +250 206 195 PLST Salmon 2468 +255 200 191 PALE Salmon 2473 +186 82 47 Terra Cotta 2484 +220 210 189 Beige 2490 +189 147 138 LT Rose Taupe 2499 +201 129 66 LT Terra Cotta 2504 +232 216 202 PLST Mink 2508 +217 202 190 LT Mink 2509 +255 188 182 LT Salmon 2513 +255 175 139 MD Salmon 2514 +243 170 186 LT Rose 2515 +158 106 116 MD Ash Rose 2521 +173 117 128 LT Ash Rose 2545 +125 56 68 DK Ash Rose 2546 +219 191 170 PALE Cameo 2552 +233 213 186 Bisque 2553 +117 37 38 DK Brick 2567 +191 177 168 PALE Mauve Gray 2572 +209 204 201 PALE Gray 2575 +124 97 116 MD Mauve 2581 +107 52 58 Mahogany 2586 +109 79 69 Eggplant 2602 + 64 24 24 DK Mauve 2606 +128 125 95 Nutmeg 2611 +242 205 176 LT Sandstone 2630 +133 82 39 Chestnut 2642 +215 184 127 Warm Sand 2656 +209 162 92 Mustard Gold 2657 +253 201 164 PALE Rust 2675 +236 216 183 Ecru 2689 +245 229 206 PALE Ecru 2690 +237 217 184 LT Ecru 2693 +202 140 103 DK Honey 2695 +246 214 167 LT Putty 2709 +189 97 20 Bright Rust 2721 +222 194 160 MD Putty 2729 +204 187 158 Hemp 2731 +120 73 63 MD Chestnut 2745 + 99 68 54 DK Chestnut 2747 +173 157 132 Taupe 2748 +219 215 153 PALE Gold 2751 +168 129 81 DK Mustard Gold 2756 +169 115 69 MD Rust 2758 +135 120 96 DK Taupe 2759 +149 136 104 MD Taupe 2760 +140 104 82 DKST Camel 2765 +191 151 115 Camel 2768 +166 120 90 LT Golden Brown 2772 +156 135 122 Golden Mink 2781 + 84 53 41 DK Earth 2783 + 38 14 14 DKST Earth 2784 +191 175 154 PALE Mink 2793 +106 70 46 Golden Brown 2802 +156 146 142 Mink 2808 +144 126 122 MD Mink 2809 +124 106 104 DK Mink 2817 +114 99 94 DKST Mink 2818 + 82 40 42 DKST Reddish Mink 2819 + 71 35 37 DK Reddish Mink 2821 +191 187 162 Wheat 2828 +240 226 175 Yellow wheat 2829 +255 203 130 LT Amber 2830 +255 201 121 MD Amber 2831 +255 201 63 Golden Amber 2832 +222 167 71 DK Golden Amber 2833 +222 167 57 Harvest Gold 2834 +221 194 93 LT Green Amber 2852 +132 88 59 Bronze Brown 2862 +245 221 81 PALE Olive 2870 +181 163 60 LT Olive 2873 +201 174 87 MD Olive 2881 +127 107 36 DK Olive 2899 + 69 57 43 Loden Green 2906 +255 243 201 PLST Aloe 2911 +220 221 185 PALE Aloe 2913 + 63 44 40 DK Moss 2924 + 45 44 42 DKST Green Gray 2926 +209 204 181 PALE Sage 2928 +161 149 123 LT Sage 2934 + 99 96 63 DK Yellow Green 2943 + 70 71 52 DKST Sage 2945 +227 229 216 Sage Tint White 2949 +118 141 115 Basil 2970 +139 142 140 Gray Basil 2972 +170 191 183 LT Smoke Green 3008 +126 172 135 MD Smoke Green 3009 + 66 97 63 DK Smoke Green 3013 + 61 91 63 DKST Smoke Green 3014 + 61 66 24 DKST Pine Green 3023 +240 254 238 PLST Smoke green 3028 +183 207 180 PALE Smoke Green 3032 +107 145 110 LT Spruce 3034 + 40 87 32 MD Spruce 3035 + 33 71 17 DK Spruce 3038 +162 212 178 LT Jade 3049 + 90 158 144 MD Aqua Green 3050 + 16 74 34 DKST Aqua Green 3059 +101 212 203 LT Aqua Green 3060 + 81 192 162 MD Jade 3069 + 48 166 72 DK Jade 3072 + 38 158 130 DK Aqua Green 3075 + 8 93 34 DK Emerald 3080 + 41 176 185 Bright Aqua 3082 +165 196 157 LT Moss 3092 +188 245 196 PALE Jade 3096 + 17 124 46 Pine Green 3105 +200 255 189 PLST Moss 3110 +127 147 75 Moss 3113 +143 177 101 MD Moss 3116 +188 245 204 PALE Mint 3130 +168 219 183 LT Mint 3133 + 94 125 65 Spearmint 3136 + 80 115 60 DKST Grass Green 3142 + 35 51 25 DKST Moss 3145 +239 242 199 PLST Lime 3148 +202 245 137 PALE Spring Green 3159 +155 219 99 MD Spring Green 3160 +126 204 0 Spring Green 3161 +105 140 71 DK Spring Green 3166 + 15 115 0 DKST Spring Green 3167 +155 165 40 LT Lime 3174 +148 158 46 MD Lime 3176 +173 186 55 PALE Grass Green 3178 +100 113 5 MD Grass Green 3185 +115 109 0 Dk Lime 3186 + 97 130 62 Blue Green 3194 +146 224 130 MD Mint 3200 +102 203 101 DK Mint 3201 + 40 141 35 MD Shamrock Green 3204 + 23 118 16 DK Shamrock Green 3206 +122 161 98 MD Yellow Green 3211 +113 115 0 Md Loden Green 3218 + 46 52 26 DK Loden Green 3225 +128 143 58 LT Grass Green 3235 + 91 102 42 Dk Grass Green 3238 +218 229 225 PLST Silver 3250 +119 138 117 MD Sage 3254 + 55 230 195 DKST Blue Gray 3263 +199 222 213 PLST Sea Green 3295 +143 183 195 Blue Sea Green 3299 +122 151 133 MD Sea Green 3321 + 15 29 32 DKST Blue Granite 3324 +106 119 127 MD Slate 3340 + 77 82 88 DK Slate 3345 +226 226 228 Silver Tint White 3368 +221 221 223 Gray Pearl 3369 +172 165 159 PALE Mauve Pearl 3370 +214 214 224 PALE Cloud Gray 3371 +129 131 128 LT Gray 3376 + 95 102 118 Blue Gray Granite 3379 + 67 82 94 Steel Gray 3380 +155 146 147 LT Pigeon Gray 3393 + 41 36 30 DK Pigeon Gray 3398 +207 206 204 PLST Gray 3408 +209 208 217 Silver 3409 +118 113 109 MD Pigeon Gray 3412 +137 137 145 MD Gray 3413 + 97 82 90 DK Gray 3415 + 82 79 98 LT Pewter 3416 + 99 101 122 MD Pewter 3417 + 84 86 101 DK Pewter 3418 +110 97 125 Purple Ash 3421 + 15 8 29 DKST Eggplant 3427 +233 243 254 PLST Blue 3429 +179 197 221 PALE Blue 3431 +128 159 188 Light Denim 3437 + 70 159 175 Light Turquoise 3468 + 33 113 138 Turquoise 3471 + 85 177 228 LT Peacock 3472 + 36 125 157 Peacock 3474 + 32 102 89 Deep Lake 3479 + 42 77 99 Green Blue Storm 3486 + 51 86 121 DK Lagoon 3487 + 58 92 75 DKST Lagoon 3507 +155 228 198 PALE Teal 3511 +140 229 201 PALE Teal Blue 3513 +140 234 220 LT Teal 3514 +112 209 178 MD Teal 3520 +218 255 255 PALE Aqua 3531 +198 255 255 LT Aqua 3532 + 42 143 130 DK Teal 3542 + 29 99 90 DKST Teal 3545 +218 243 237 Aqua Tint White 3550 + 67 177 192 MD Turqoise 3559 + 76 147 158 LT Mediterranean Blue 3560 + 28 149 132 Dk Turquoise 3563 + 24 30 64 Navy 3587 + 98 142 204 Light Blue Aster 3597 + 20 102 164 MD Blue Aster 3600 + 53 87 161 DK Bright Aster 3601 + 92 128 154 MD Mediterranean Blue 3604 + 45 87 120 DK Mediterranean Blue 3606 + 37 130 196 French Blue 3620 + 29 53 115 DK Marine Blue 3621 +174 212 255 LT Clear Blue 3636 +151 179 200 Dusk Blue 3639 + 13 46 100 Marine Blue 3645 + 38 42 69 DKST Navy 3646 +165 201 253 LT Bright Blue 3649 + 55 119 197 MD Bright Blue 3655 + 3 33 168 DK Bright Blue 3660 +217 235 255 PALE Clear Blue 3668 +177 214 252 LT Blue 3670 +144 175 232 PALE Aster Blue 3674 + 94 154 208 MD Clear Blue 3675 + 84 122 193 DK Clear Blue 3679 +222 229 245 Violet Tint White 3688 +185 202 246 Light Blue Violet 3690 +110 139 209 MD Blue Violet 3692 + 99 109 180 DK Blue Violet 3694 + 32 42 89 DK Heliotrope 3704 +217 200 205 PALE Eggplant 3713 +147 129 145 MD Eggplant 3714 +135 122 152 LT Purple Sage 3721 +102 88 121 MD Purple Sage 3722 + 87 77 85 DK Purple Sage 3727 +234 236 233 Lilac Tint White 3728 +223 226 230 PALE Heather 3730 +219 216 255 LT Lilac 3731 +201 187 240 MD Lilac 3733 +180 180 214 Heather 3735 +139 122 202 MD Heather 3740 +224 236 250 PLST Periwinkle 3749 +136 146 207 LT Periwinkle 3751 +117 113 172 DK Periwinkle 3752 +128 132 201 MD Periwinkle 3753 + 48 55 125 DKST Periwinkle 3756 + 76 80 143 DK Heather 3758 + 50 37 109 DK Blue Purple 3764 +214 186 205 PALE Lavender 3770 +208 198 227 LT Lavender 3772 +132 95 164 MD Lavender 3777 + 68 40 117 Blue Purple 3778 + 63 14 93 Red Purple 3783 +160 129 163 LT African Violet 3793 +147 117 148 African Violet 3794 +185 106 197 MD African Violet 3796 +116 56 153 DK African Violet 3803 + 86 33 120 DKST African Violet 3805 +255 195 243 PALE Orchid 3812 +208 107 170 MD Orchid 3821 +167 73 161 DK Orchid 3822 +239 229 255 PLST Orchid 3828 +224 218 232 PLST Mauve 3830 +210 160 189 LT Orchid 3833 +247 178 222 LT Pink Orchid 3834 +110 59 130 Purple 3841 + 74 6 74 DKST wine 3846 diff --git a/inkstitch/palettes/InkStitch Brildor AC.gpl b/inkstitch/palettes/InkStitch Brildor AC.gpl new file mode 100644 index 0000000..114638e --- /dev/null +++ b/inkstitch/palettes/InkStitch Brildor AC.gpl @@ -0,0 +1,124 @@ +GIMP Palette +Name: Ink/Stitch: Brildor AC +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 5101 +223 221 221 Lt. Putty 5186 +191 184 184 Stainless Steel 5235 +171 160 177 Wisteria 5358 +135 128 128 Med. Dk. Gray 5381 + 72 74 74 Grey Suede 5337 + 52 58 62 Black 5338 + 0 0 0 Black 5392 +246 255 195 Parrot Green Very Light 5399 +234 253 136 Applegreen 5464 +240 253 82 Gold / Yellow 5354 +239 238 28 Gold 5353 +255 255 68 Canary 5412 +255 232 58 Neon Yellow 5224 +252 202 16 Manila 5350 +210 138 45 Bright Gold 5355 +170 112 43 Tiger Eye 5389 +116 54 32 Dark Brown 5308 +239 242 161 PaleYellow 5223 +233 172 89 Toast 5255 +204 110 51 Burnt Orange 5256 +254 78 26 Hunter Orange 5352 +236 65 39 Devil Red 5303 +200 17 17 Wild Fire 5304 +227 48 59 Warm Red 5300 +212 37 49 Dark Red / Orange 5302 +172 26 38 Cherry Red 5281 +114 26 34 Tan 5305 + 56 21 21 Dark Brown 5348 +110 56 40 Dark Brown 5343 +183 114 86 Light Brown 5344 + 54 13 21 Dark Brown 5364 +102 18 33 Brown 5363 +170 16 59 Atom Red 5490 +234 28 74 Blossem Pink Dark 5489 +253 143 120 Coral Reef 5252 +255 227 233 Oyster 5215 +255 205 209 China Rose Medium 5419 +243 166 177 Pale Pink 5360 +202 62 81 Dark Salmon Pink 5329 +106 29 40 Warm Wine 5397 + 57 24 29 Cocoa 5217 +255 139 173 Azalea 5207 +226 108 152 Medium Pink 5209 +192 66 126 Bright Pink 5435 +114 27 74 Baton Rouge 5334 +177 13 85 Wild Fuschia 5400 +157 9 64 Burgundy 5283 +202 123 127 Deep Mocha 5216 +255 218 255 Arden Lavender 5211 +180 131 189 Purple 5380 +104 50 119 Bright Mulberry 5333 + 51 18 48 Dark Purple / Navy 5497 + 24 8 25 Dk. Navy 5143 + 48 26 81 Bright Navy Blue 5361 + 90 64 127 Twilight Lupine 5443 +153 127 205 Lavender 5442 +185 179 255 Cristy Blue 5444 + 98 112 180 Medium Purple 5445 + 41 54 129 Dark Royal Blue 5446 +186 207 255 Pastal Blue 5411 + 46 67 106 Dark Navy 5142 + 16 25 69 Light Navy 5311 + 29 42 109 Dk. Royal Blue 5383 + 92 138 192 Oriental Blue 5384 +150 194 255 Lake Blue 5409 + 42 66 165 Dark Royal Blue 5373 + 28 45 132 Royal Blue 5310 +155 210 255 Pale Blue 5410 + 64 117 173 Medium Blue 5346 + 21 47 77 Dark Teal 5372 + 22 96 142 Deep Ocean 5415 + 47 183 227 Turquoise Medium Bright 5376 + 90 219 217 Light Blue / Green 5375 + 5 80 101 Teal Haze 5371 + 11 80 50 Darkest Jade 5198 + 2 88 82 Green 5285 + 38 105 90 Green Forest 5152 + 92 167 124 Sea Green Medium Dark 5404 +129 223 177 Pale Green 5145 +169 255 229 Pacific Mist 5146 +110 214 198 Medium Aqua 5197 + 38 171 156 Aqua 5496 + 19 110 72 Festive Green 5323 + 11 69 45 Deep Forest Green 5325 + 7 38 25 Olive Green 5321 + 13 110 43 Green 5327 + 22 165 54 Lt Jade 5326 + 81 197 43 Green 5408 +142 217 120 Light Jade 5393 + 83 163 58 Pear 5431 + 60 135 44 Kelly 5440 + 46 113 49 Dark Green 5441 + 14 46 37 Ivy 5199 + 3 33 33 Ivy 5320 + 12 44 26 Olive Green 5322 + 10 50 39 Ivy 5416 + 56 84 46 Harbor Green 5406 +105 130 73 Lt. Olive 5398 +177 188 106 Limerick 5405 +156 191 93 Eventide Green 5339 + 57 70 26 Alpine Green 5403 +119 143 23 Meadow Green 5480 +156 125 37 Medium Green / Yellow 5291 +184 143 43 Black Eyed Susie 5125 +179 128 71 Light brown 5340 +216 203 145 Primedor 5342 +208 190 138 Taupe 5423 +230 226 167 Light Yellow / Orange 5345 +255 255 226 Ivory White 5390 +240 244 239 Pale Blue 5391 +253 236 198 Med. Ecru 5388 +199 177 165 Victorian Rose 5160 +107 92 74 Dark Grey 5236 + 77 66 51 Best Brown 5237 +206 174 112 Light Orange 5341 +115 81 48 Chipmunk 5387 + 61 43 28 Dark Brown 5332 + 24 23 14 Espresso 5331 + 12 11 7 Espresso 5330 diff --git a/inkstitch/palettes/InkStitch Brildor CO.gpl b/inkstitch/palettes/InkStitch Brildor CO.gpl new file mode 100644 index 0000000..4f7e8dc --- /dev/null +++ b/inkstitch/palettes/InkStitch Brildor CO.gpl @@ -0,0 +1,74 @@ +GIMP Palette +Name: Ink/Stitch: Brildor CO +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 4100 +221 221 221 Light Silver Grey 4701 +170 170 170 Stone Grey 4702 +127 127 127 Dark Grey 4704 + 89 89 89 Dark Grey 4706 + 0 0 0 Black 4999 +255 255 0 Gold / Yellow 4122 +255 255 141 Meilee Green 4101 +255 235 102 Star Gold 4118 +255 204 0 Copper 4108 +255 181 0 Goldenrod 4109 +255 164 0 Bright Orange 4110 +255 74 0 Sunkist 4112 +255 19 0 Red 4114 +200 0 0 Red Riding Hood 4211 +162 0 0 Red Brown 4212 + 87 0 0 TH Burgundy 4214 +255 171 167 Shrimp 4231 +255 89 109 Pink 4208 +255 56 89 Fluo Pink 4205 +255 92 128 Dusty Rose 4204 +255 120 167 Wild Pink 4203 +255 144 189 Carnation Medium Light 4232 +255 178 228 Orchid Pink 4202 +252 218 245 Oyster 4201 +253 225 230 Snow White 4228 +255 227 215 Peony Very Light 4230 +250 200 175 Peach 4207 +211 146 246 Tulip 4306 +132 45 174 Medium Purple 4307 + 46 23 88 Violet Blue 4413 + 18 13 49 Med. Dk. Navy 4407 + 63 81 130 Royal Blue 4434 + 20 27 93 Imperial Blue 4411 + 34 51 122 Dark Royal Blue 4410 +100 136 214 Bright Blue 4430 +172 215 255 Heron Blue 4429 +146 191 240 Angel Falls 4427 +112 145 202 Paris Blue 4438 + 55 92 163 Starlight Blue 4409 + 24 46 104 Dark Purple / Navy 4432 + 15 21 37 Charcoal 4414 + 60 106 177 Medium Blue 4431 +124 189 191 Seafrost 4403 +218 255 255 Palest Aqua 4428 +153 231 195 Pale Mint Green 4501 + 3 109 63 Green 4503 + 10 71 48 Dk. Teal 4512 + 5 115 61 Emerald Green dark 4509 + 6 147 59 Vibrant Green 4507 +170 246 193 Aqua 4504 +221 255 132 Applegreen 4513 + 90 141 44 Peapod 4538 + 52 96 30 Dark Green 4516 + 37 87 35 Safari Green 4517 + 61 139 41 Kelly 4529 +211 190 151 Taupe 4603 +224 181 79 Yolk Yellow 4612 +204 128 48 Medium Orange / Brown 4613 +219 186 118 Camel 4607 +246 246 221 Soft Carnation 4117 +246 240 195 Celery 4601 +250 227 138 Wheat 4648 +171 119 52 Brown 4651 +129 62 28 Brown 4620 + 74 38 17 Dark Oak 4621 + 43 25 11 Black 4622 + 27 15 7 Espresso 4623 + 83 26 25 Brown 4611 +153 24 29 Aurora Red 4618 diff --git a/inkstitch/palettes/InkStitch Brildor MF.gpl b/inkstitch/palettes/InkStitch Brildor MF.gpl new file mode 100644 index 0000000..588e368 --- /dev/null +++ b/inkstitch/palettes/InkStitch Brildor MF.gpl @@ -0,0 +1,214 @@ +GIMP Palette +Name: Ink/Stitch: Brildor MF +Columns: 4 +# RGB Value Color Name Number +255 255 243 Winter White 000 +255 255 255 Snow White 100 +230 242 255 White 268 +208 214 214 Illusion Blue 452 +109 108 104 Cloudburst 154 + 53 57 59 Black 156 + 42 45 44 Night Sky 246 + 25 30 33 Black Stallion 123 + 59 70 74 Dark Navy 155 +198 198 186 Light Green / Yellow 133 +182 175 165 Ashes Of Roses 186 +134 140 132 Dark Silver 183 +139 138 135 Wild Dove 207 +122 117 115 Charcoal 124 +104 94 89 Plum Kitten 203 + 56 51 51 Dark Grey 247 + 17 24 30 Charcoal 332 + 23 26 26 Black Stallion 527 + 18 18 18 Charcoal 999 +247 228 0 Sunshine Yellow 119 +247 203 29 Buttercup 111 +218 180 52 Pollen Gold 305 +123 95 21 Earthen Tan 185 +255 250 169 Pale Yellow 513 +255 241 93 Sunburst 112 +219 200 67 Sulphur Yellow 491 +255 226 67 Yellow 148 +254 215 10 Medium Yellow 520 +255 167 29 Mango 265 +255 229 111 Canary Yellow Medium Light 517 +255 123 37 Soleil 118 +255 148 72 Golden Poppy 504 +255 75 26 Fluo Orange 117 +255 210 147 Impala 110 +255 179 131 Orange Peach 531 +255 150 101 Tangerine 147 +215 98 51 Sunset 351 +161 66 42 Bark Medium Dark 218 +128 48 31 Burgundy 455 +192 70 45 Brick Very Dark 259 +160 11 27 Aurora Red 108 +147 10 26 Dark Red 256 +146 14 34 Baked Cherry 511 +111 15 29 Brown 227 + 95 14 31 Brown 107 + 50 10 16 Black Cherry 190 + 33 9 10 Black 223 + 43 11 19 Black 175 + 60 10 32 Parrot Green dark 176 +111 15 65 Purple Ice 145 +156 35 90 Cherrystone 116 +190 98 121 Raspberry Mauve 216 +173 19 63 Dark Red / Orange 200 +222 25 86 Salmon Dark 301 +236 62 86 Salmon Medium Dark 174 +234 93 135 Dark Pink 173 +236 103 146 Light Cerise 255 +252 230 236 Blush 249 +255 211 219 Blush Light 586 +255 192 199 Mountain Rose 240 +247 171 177 Emily Pink 135 +255 142 148 Azalea 109 +240 99 119 Dusty Rose 164 +203 57 78 Scarlet 302 +128 19 51 Maroon 235 +146 33 54 Burgundy 461 +150 54 57 Dark Orange / Red 238 +195 84 81 Dark Rust 213 +164 92 86 Antique Mauve Very Dark 252 +241 185 175 Damask Rose 136 +255 134 103 Light Tangerine 150 +255 73 66 Red 146 +206 76 93 Raspberry Medium Light 239 +179 76 82 Terra Cotta Medium Dark 233 +186 129 125 Dusty Pink medium ST17 153 +189 144 129 Salmon 334 +152 110 98 Hazel 346 +199 84 255 Cindy Purple 166 + 98 36 92 Hollyhock 151 + 53 25 46 Dark Purple / Navy 193 + 59 34 89 Purple Majesty 144 +133 85 151 Mulberry 115 +201 169 255 Tulip 143 + 97 74 173 Violet 152 + 23 18 36 Charcoal 221 + 1 20 35 Midnight Navy 205 + 52 58 81 Dark Grey / Blue 343 + 88 147 178 Blue 234 + 88 119 159 Medium Blue 261 + 44 69 140 Ultra Blue 137 + 0 26 105 Royal Blue 674 + 11 16 33 Charcoal 225 +123 155 200 Delft Blue medium 138 +143 181 223 Lake Blue 450 +138 228 255 Sky Blue 125 +179 229 255 Sun Blue 319 +185 236 255 Sun Blue 391 +140 211 255 Aquamarine 199 +111 182 254 River Mist 126 + 58 112 180 Medium Purple 220 + 0 31 74 Blue Ribbon 272 + 2 14 39 Midnight Navy 101 + 0 36 91 Dark Indigo 206 + 0 46 115 True Blue 127 + 0 73 154 Saphire 102 + 77 152 255 Medium Blue 114 + 15 124 222 Medium Royal Blue 187 + 15 134 222 Bright Blueberry 113 + 0 37 66 Navy 314 + 45 77 115 Federal Blue 182 + 0 83 114 Peacock 283 + 65 166 224 Medium blue 128 +167 232 242 Pacific Mist 167 +219 255 255 Light Blue 103 +171 255 242 Light turquoise 243 + 72 210 225 Aqua Pearl 129 + 0 116 128 Dark Aqua Green 168 + 0 53 68 Deep Slate Blue 236 + 0 134 115 Isle Green 139 + 87 176 149 Emerald Green 165 +106 206 170 Green Light Bright 142 + 12 115 103 Teal Green Dark 140 + 17 62 73 Deep Teal 179 + 70 128 128 Teel 292 +125 197 161 Teal Green 219 + 22 65 65 Shaded Spruce 350 + 14 53 43 Ivy 189 + 9 37 35 Olive Green 104 +137 158 134 Blue Green 211 +157 164 130 Cypress 210 + 76 102 76 Kahki Green 237 +105 142 92 Green Pepper 214 + 99 164 131 Green Spruce 212 +163 215 150 Light Green / Yellow 204 +109 208 125 Pale Green 106 + 0 99 54 Dark Green 130 + 0 67 51 Evergreen 295 + 15 55 40 Ivy 178 + 0 96 51 Shamrock Green 294 + 55 149 67 Dark Green 313 + 61 157 48 Kelly Green 355 + 99 195 48 Electric Green 120 +181 240 72 Flite Green 490 +191 218 89 Spring Fern 162 +170 191 73 Lime 163 + 71 91 32 Palmetto 257 + 20 53 29 Olive Green 232 + 75 124 76 Dark Green 188 + 58 69 43 Pale Yellow / Green 254 + 84 95 47 Pale Green 131 +166 186 118 Lettuce Heart Green 226 +186 186 119 Light Brown 229 +113 112 70 Dark Green / Yellow 169 + 88 95 61 Medium Green / Yellow 132 + 54 61 40 Ebony Black 231 + 28 35 23 Black 248 + 10 32 28 Olive Green 245 +145 132 98 Light Green / Yellow 161 +198 190 170 Overcast 202 +190 180 161 Sand 330 + 90 85 67 Dark Grey / Green 134 + 45 47 36 Midnight Metal 534 + 20 32 29 Black Stallion 300 +117 91 61 Earthen Tan 480 +255 238 191 Ecru 250 +237 220 162 Straw Yellow 191 +233 212 155 Candy Tan 184 +179 144 102 Lark 197 +173 145 95 Prairie Wheat 315 +136 116 68 Olive Green 251 +123 104 67 Cinnamon 532 +163 143 108 Olive Drab 443 +184 164 128 Cane 539 +206 194 152 Sandy Shore 526 +233 229 187 Medium Yellow 209 +181 148 122 Natural 327 +117 92 73 Bagby Green 159 + 55 47 35 Dk. Black Brown 242 + 49 44 35 Midnight Metal 181 + 30 25 21 Midnight Blue 260 + 42 28 19 Black 157 +119 91 80 Chocolate Brown 208 +194 141 100 Bamboo 323 +163 104 52 Tan Brown 215 +134 90 50 Light Cocoa 192 + 53 33 24 Dark Brown 158 + 65 33 26 Dark Oak 275 + 32 25 19 Black 486 + 23 21 18 Charcoal 306 +249 222 162 Linen 122 +255 230 172 Blonde 160 +227 190 147 Cornsilk 253 +172 113 57 Cocoa Brown 121 +106 43 30 Tan 676 + 89 26 24 Brown 311 +231 199 58 Fluo Yellow 347 +206 131 43 Pollen Gold 195 +174 89 26 Coppertone 224 +100 59 21 Mushroom 196 +238 218 136 Pale Yellow / Gold 228 +218 174 82 Mustard 325 +200 138 50 Golden Brown medium 244 +175 130 49 Palomino 465 +127 84 25 Fawn Dark 304 +109 67 20 Sand Dune 530 + 87 57 20 Mocha Brown / Very Dark 194 + 87 59 28 Brown 630 + 88 226 16 Fluorescent Green 170 +255 67 41 Fluo Pink 171 +217 255 0 Lemon 172 diff --git a/inkstitch/palettes/InkStitch Brildor NY.gpl b/inkstitch/palettes/InkStitch Brildor NY.gpl new file mode 100644 index 0000000..68faab6 --- /dev/null +++ b/inkstitch/palettes/InkStitch Brildor NY.gpl @@ -0,0 +1,184 @@ +GIMP Palette +Name: Ink/Stitch: Brildor NY +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 3005 +255 249 243 White Silk 3001 +235 228 214 Yellow / Gold 3087 +214 207 195 Light Grey / Green 3085 +154 154 154 Medium Grey 3011 +121 121 121 Beaver Grey / Dark 3012 + 94 94 94 Medium Grey 3118 +132 123 106 Pine Bark 3062 + 79 77 77 Dark Grey 3361 + 58 57 57 Black 3239 + 72 62 62 Black Chrome 3240 +117 97 86 Deep Taupe 3136 +145 119 122 Lasting Cocoa 3040 + 87 87 91 Dark Grey 3041 + 5 16 29 Black 3241 + 3 11 22 Black 3009 + 0 0 0 Black 3000 +255 255 167 Pale Yellow 3067 +255 255 93 Lemon Yellow 3135 +255 229 0 Mimosa Yellow 3124 +245 190 19 Gold 3125 +228 160 23 Gold / Orange 3172 +194 117 0 Almond 3025 +255 244 112 Pastel Yellow 3066 +249 219 88 Star Gold 3270 +230 176 64 Mustard Yellow 3070 +140 94 24 Desert Very Dark 3192 +165 128 0 Autumn Green 3352 +229 214 45 Pale Beige 3159 +207 128 31 Pollen Gold 3225 +214 137 53 Golden Earth 3173 +238 255 77 Gold / Yellow 3023 +243 255 36 Yellow 3223 +255 243 36 Canary Yellow 3064 +255 226 17 Yellow Finch 3068 +255 202 10 Canary 3024 +255 154 1 Honey Dew 3137 +255 119 1 Pumpkin 3065 +190 59 1 Bright Rust 3021 +170 29 1 Med. Maple 3221 +155 6 0 Cherrywood Red 3039 +133 6 15 Cranberry 3038 +105 13 21 Brown 3174 + 46 0 9 Dark Chocolate 3236 + 70 0 25 Mahogany 3035 + 84 0 21 Dark Chocolate 3384 +104 0 24 Brown 3182 +122 0 21 Cranberry 3181 +184 0 18 Red Jubilee 3147 +178 0 0 Red Jubilee 3037 +214 28 16 Foxy Red 3378 +235 44 19 Scarlet 3078 +255 76 14 Pumpkin 3278 +255 94 18 Neon Orange 3178 +255 146 56 Neon Orange 3155 +231 118 50 Amberglow 3226 +185 40 21 Light Orange / Red 3179 +181 0 28 Medium Red / Orange 3184 +157 0 29 Dark Red 3081 +152 0 25 Dark Red 3281 +255 223 255 White 3115 +255 197 255 Pale Mauve 3116 +255 144 240 Mid Lilac 3321 +234 95 206 Medium Pink 3309 +221 10 111 Cheeky Pink 3109 +198 20 82 Dark Pink 3110 +166 4 55 Pomegranate 3383 +129 9 42 Tahoe Red 3183 +140 0 65 Cranberry 3310 +203 18 67 Rose / Very Dark 3354 +223 43 90 Carmine Rose Medium 3117 +254 125 170 Wild Pink 3108 +255 147 176 Pink Lemonade 3315 +255 153 145 Antique Rose Medium Light 3016 +255 145 123 Coral Reef 3020 +241 192 153 Peach Pastel 3017 +255 203 162 Copper 3053 +255 189 164 Cinnamon Light 3018 +255 162 151 Blossem Pink Light 3019 +255 147 126 Coral Reef 3254 +255 201 255 Pale Mauve 3120 +255 171 239 Orchid Pink 3121 +150 69 150 Violet 3080 +130 49 98 Cerise 3235 + 86 28 94 Purple 3033 + 51 24 56 Dark Purple / Navy 3122 + 57 23 87 Dark Purple 3112 +166 122 244 Purple 3311 +192 128 255 Russian Saga 3232 +130 50 180 Amethyst 3032 + 72 39 102 Ultraviolet 3312 + 71 49 144 Deep Purple 3330 + 47 69 151 Medium Royal Blue 3143 +174 203 240 Pale Blue 3074 +142 179 230 Sky Blue 3075 + 57 89 188 Medium Blue 3029 + 46 72 174 Jamie Blue 3133 + 21 43 111 Dk. Royal Blue 3134 + 7 11 26 Black 3244 + 11 15 79 Navy Blue 3166 + 19 33 118 Prussian Blue 3076 + 43 77 162 Dark Royal Blue 3176 + 10 29 78 Navy Blue 3042 + 8 23 59 Navy Blue 3242 + 13 17 44 Deep Arctic Sky 3243 +203 214 255 Pastal Blue 3153 +173 187 223 Lake Blue 3030 + 37 79 125 Lake Blue 3028 + 31 67 111 Navy Blue 3175 + 7 14 24 Black 3044 +153 211 245 Pale Blue 3092 +138 190 221 Dark Seashell Blue 3027 + 96 130 169 Slate Blue 3360 + 29 47 71 Blue Velvet 3364 + 15 25 33 Charcoal 3043 + 74 151 128 Winter Green 3227 + 35 72 101 Delft Bleu Medium Dark 3160 + 4 43 139 Brilliant Blue 3297 + 0 108 160 Pro Band Blue 3295 + 0 140 185 Blue Horizon 3095 + 77 239 255 Capri 3093 + 0 32 40 Ivy 3162 + 0 44 52 Ivy 3161 + 15 53 63 Dark Blue 3252 + 32 145 177 Horizon Blue 3291 + 68 180 197 Capri 3089 +161 242 255 Powder Blue 3292 + 0 118 93 Alpine Teal 3246 + 4 56 46 Beau Geste 3185 + 7 33 23 Ocean Teal 3390 + 5 40 34 Ivy 3290 + 0 45 37 Ivy 3371 + 13 99 60 Dark Green 3279 + 70 210 150 Peppermint 3046 +162 247 171 Green Oak 3047 + 37 64 37 Foliage Green 3392 + 16 37 16 Ocean Teal 3303 + 6 54 24 Dark Leaf Green 3370 + 0 73 25 Dark Green 3250 + 0 90 19 Dark Green 3079 + 11 115 22 Jade 3051 + 0 118 51 Green 3247 + 7 45 29 Olive Green 3103 + 60 132 23 Green 3049 + 53 112 19 Green 3170 + 89 149 15 Meadow 3169 +169 213 75 Dark Green Oak 3104 +186 221 110 Tamarack 3100 + 14 32 20 Ocean Teal 3393 + 20 40 25 Olive Green 3394 + 79 95 40 Green / Yellow 3156 +103 124 32 Meadow 3106 +192 203 43 Dark yellow 3350 +223 249 117 Pale Yellow 3150 +189 182 84 Misted Yellow 3105 + 75 78 42 Mars Green 3306 + 81 82 36 Calla Green 3157 +167 137 73 Light Green / Yellow 3338 +255 255 241 Light Beige 3003 +235 238 205 Light Yellow 3071 +240 230 179 Wax Yellow 3072 +233 211 164 Banana Crepe 3149 +193 140 108 Dk. Ecru 3142 + 58 34 23 Dark Brown 3336 + 97 66 37 Brown 3144 +175 140 103 Light Brown 3128 +214 205 146 Primedor 3060 +222 201 141 Primedor 3082 +255 231 152 Popcorn 3084 +252 216 129 Glow 3055 +124 90 45 Chocolate Brown 3344 +255 205 135 Visor Gold 3127 +185 107 44 New Penny 3126 +148 81 31 Brown 3056 +116 62 31 Dark Brown 3057 + 85 32 21 Fudge Dark 3158 + 68 25 16 Dark Oak 3058 + 37 20 16 Black 3145 + 20 15 13 Espresso 3129 + 12 7 6 Espresso 3130 diff --git a/inkstitch/palettes/InkStitch Brildor PB.gpl b/inkstitch/palettes/InkStitch Brildor PB.gpl new file mode 100644 index 0000000..60ccae7 --- /dev/null +++ b/inkstitch/palettes/InkStitch Brildor PB.gpl @@ -0,0 +1,264 @@ +GIMP Palette +Name: Ink/Stitch: Brildor PB +Columns: 4 +# RGB Value Color Name Number +240 243 242 White 1090 +250 251 252 White 1100 +187 189 187 Winter Sage 1971 +165 171 165 Aqua Gray 2702 +172 181 162 Steel Grey 1140 + 83 94 99 Bleu Mist Dark 2704 + 50 58 59 Black 2706 + 29 33 42 Black 2707 + 11 14 17 Black 1674 + 10 14 16 Black 1999 +217 213 185 Cream 2701 +169 154 148 Gravel 1139 +113 129 110 Willow 1218 +144 141 143 Cinder 2131 + 77 82 97 Petrol Blue 2674 + 67 66 78 Dark Navy 1612 +255 221 0 Canary 1177 +255 237 0 Manila 2122 +254 255 58 Daffodil 2120 +250 255 140 Meilee Green 1270 +238 246 232 Pale Yellow-Green 1101 +255 255 221 Jonquil Very Light 1071 +255 254 184 Pale Yellow 1300 +255 253 150 Celery 1162 +255 252 114 Glow 1163 +255 228 82 Hawaiian Sunrise 2106 +255 218 103 Star Gold 2108 +255 187 69 Scholastic 1165 +240 157 52 Orange Sorbet 2010 +246 76 16 Reddish Brown 1102 +239 69 0 Sunkist 1800 +235 31 18 Red 1804 +243 47 23 Scarlet 1305 +239 220 103 Yellow Cream 1640 +244 181 76 Amber 1167 +127 27 17 Cherokee Red 1334 +183 47 23 Light Orange / Red 1021 +255 84 40 Fluorescent Orange 1168 +244 160 90 Medium Orange 2111 +247 223 193 Almond Oil 1060 +253 188 139 Pooh 1362 +255 129 69 Orange 1352 +226 173 137 Pink Sand 2645 +195 135 106 Tawny Birch 1255 +138 36 25 Burgundy 2618 +184 51 41 Dark Rust 2616 +168 40 27 Light Orange / Red 2210 + 39 11 13 Black 2216 + 93 14 18 Brown 2214 +125 6 11 Cranberry 1263 +156 8 11 Deep Scarlet 2212 +185 10 13 Red Jubilee 2211 +201 11 14 Carmine 1703 +219 12 15 Foxy Red 1169 +137 16 13 Cranberry 1913 +161 7 19 Dark Red 1902 +195 18 26 Wild Fire 1170 +230 80 84 Medium Red / Orange 2209 +240 115 124 Confetti 1840 +146 8 14 Dark Red 1906 +185 8 21 Red Jubilee 1900 +229 66 84 Medium Red / Orange 2205 +240 106 132 Light Cerise 2204 +250 153 180 Pale Pink 2203 +250 164 182 Pale Pink 1151 +252 200 214 Memphis Belle 2232 +254 234 236 Carnation Ultra Light 2202 +170 44 51 Rust 1921 +162 55 70 Terra Cotta 1741 +220 103 125 Petal Pink 2152 +208 131 144 Heather Pink 1199 +227 169 172 Pale Salmon 1761 +253 224 220 Rosewater 1145 +197 90 97 Coral Flame 1308 +250 228 221 Peony Very Light 2228 +249 173 156 Champagne Pink 1159 +255 151 130 Coral Reef 1532 +242 149 112 Salmon 2207 +253 198 156 Peach Fuzz 2615 +140 33 49 Dark Red S 1188 +184 19 58 Medium Red 2300 +210 35 83 Crimson Red 1158 +225 80 123 Azalea 1157 +251 156 202 Dark Pink 1155 +255 182 213 Pale Pink 1152 +249 202 244 Orchid Pink 2301 +254 227 249 White 2305 +222 158 198 Light Pink 1153 +215 112 187 Medium Pink 2310 +130 37 93 Dark Purple 1144 +152 48 103 Boysenberry 2304 + 72 14 46 Dk. Chestnut 2715 + 50 23 49 Dark Purple / Navy 1536 + 28 19 42 Midnight Blue 2414 +118 29 47 Dark Maroon 2506 + 82 28 52 Dark Purple 2711 + 68 39 56 Plum 1189 +158 110 167 Sugar Plum 2241 +243 227 244 Light Pink 1186 +213 181 222 Soft Tulip 1142 +160 101 172 Sugar Plum 1187 +118 58 147 Cachet 2308 + 75 42 97 Blackberry 1039 + 31 27 57 Dark Purple 1353 +208 145 200 Purple 2045 + 91 35 78 Medium Purple 2810 + 25 21 71 Dark Purple 1602 + 43 23 111 Dark Purple Blue 1541 + 65 47 140 Deep Purple 1210 + 60 42 109 Violet Blue 1211 + 38 27 76 Dark Navy 1182 + 32 25 45 Midnight Navy 1355 + 87 91 206 Marine Blue 1331 + 33 28 139 Team Blue 2439 +208 235 255 Ice Blue 1113 +189 213 255 Pastal Blue 1117 +139 179 255 Medium Blue 1119 +115 153 255 Medium Blue 1120 + 83 104 182 Corn Flower 2431 + 62 98 184 Medium Blue 1121 + 29 52 147 Dark Blue 2410 + 23 42 119 Provence 2411 + 14 29 87 Navy Blue 1122 + 36 32 81 Dark Navy 1184 + 22 26 62 Navy 2440 + 21 19 38 Charcoal 1241 +232 236 239 Pearl Grey 1138 +212 220 240 Pale Silver 1114 +199 210 255 Pastal Blue 1115 +161 179 255 Medium Blue 2438 + 81 107 159 Medium Blue 2434 + 34 38 75 Blueberry Blue 1037 + 59 78 108 Ash 1953 + 42 54 82 Dark Navy 1743 + 56 160 218 Medium blue 2441 + 53 135 208 Sapphire 2442 + 34 95 178 Magic Blue 2443 + 25 66 136 Blue Twirl 1797 + 75 96 124 Dark Grey / Blue 1842 + 95 127 151 Ocean Blue 2403 +208 229 255 Ice Blue 1116 +124 165 213 Little Boy Blue 2430 + 62 114 165 Blueball 2404 + 36 80 136 Blue Dusk 2405 +252 253 253 Paper White 2428 +208 238 250 Ice Blue 1112 +138 211 236 Light Blue / Green 2230 + 62 139 194 Blithe 1181 +202 228 228 Cobalt Bleu 1250 +131 203 205 Pale Turquoise 1430 + 83 168 180 Bright Blue 1128 + 36 98 126 Imperial Blue 1421 + 20 49 78 Dark Teal 1442 + 17 36 64 Navy 1033 + 27 52 70 Atlantic 1644 + 24 45 61 Flag Blue 1515 + 58 99 94 Dark Blue / Green 1185 +102 138 129 Cilantro 1201 +206 255 226 Sprite 1125 +143 234 186 Pale Aqua 1126 + 55 135 117 Jade 1610 +223 255 227 Palest Mint 2501 +125 205 154 Pale Aqua 2502 + 17 129 92 Jade 2503 + 10 59 37 Ivy 1137 + 12 41 30 Olive Green 1374 + 21 43 26 Olive Green 1207 + 7 90 30 Dark Green 2509 + 8 125 35 Green 2531 + 9 146 41 Veggie Green 1988 + 10 168 47 Lt Jade 1613 + 78 196 91 Poison Green 2507 + 7 96 32 Dark Green 1422 + 19 65 31 Green 1326 +105 221 132 Pale Green 1179 + 24 154 83 Emerald Green 1710 + 27 76 47 Dark Mint Green 2335 + 44 92 58 Pistachio Green dark 2511 +125 176 121 Easter Green 1212 +155 209 147 Medium Mint Green 2510 + 78 171 64 Medium Lime 1264 +126 221 75 Bright Green 1135 +208 243 161 Dark Olive Green 1131 +151 238 152 Light Green 1130 +208 255 195 Pale Green 2504 +238 255 232 Silver Grey 1123 + 69 94 47 Green / Yellow 1176 +218 245 160 Dark Olive Green 1129 +167 215 100 Apple Green 2822 + 99 144 27 Meadow Green 2833 + 73 107 25 Palmetto 2538 + 37 65 21 Blue Spruce 2518 +150 190 24 Peapod 2515 + 64 87 10 Dark Olive 1934 +189 255 9 Olive Green Light 2514 +161 223 19 Lime Green 2527 +255 255 219 Jonquil Very Light 1124 +244 255 138 Meilee Green 2513 +185 215 77 Flite Green 1132 +179 192 81 Pale Green Oak 1133 + 95 102 41 Lt. Army Green 1173 + 68 65 37 Black Avocado Green 1156 + 46 62 33 Field Green 1072 +105 124 2 Meadow Green 2133 +130 127 1 Bronze 2132 +179 185 41 Lime 1732 +224 217 21 Yellow 1721 +195 165 37 Gold 2901 + 92 115 85 Juniper Medium Dark 1463 + 94 80 65 Dark Fawn 1776 +147 160 133 Pale Green 1873 +187 184 166 Silver Cloud 1254 +145 134 120 Medium Green / Yellow 1874 +191 170 156 Light Brown 1106 +232 218 181 Tan Light 1104 +241 241 211 Vanilla Ice 1103 +204 182 130 Light Brown 1672 +185 164 112 Lark 2091 +133 132 63 Caper 1552 +202 161 82 Medium Honey 2612 +218 137 51 Golden Earth 1164 +200 145 54 Old Gold 1290 +195 134 51 Golden Brown medium 1166 +214 108 22 Rust 1625 +183 79 16 Brick Dark 1940 +134 50 19 Bark 1932 +120 50 19 Coffee Dark 2610 +127 73 45 Brown 2620 + 62 24 23 Dark Oak 1855 + 55 21 20 Dark Brown 1846 + 20 9 8 Espresso 2623 + 42 26 16 Black 2621 +123 91 57 Sand Dune 2604 + 68 43 27 Dark Brown 1945 +217 186 97 Rice Paper 2650 +134 86 40 Brown 1240 +192 142 53 Old Gold 1941 +218 155 51 Pollen Gold 2613 +221 163 63 Artisan Gold 2608 +238 207 125 Cornsilk 1107 +255 225 159 Linen 1161 +255 230 158 PaleYellow 2648 +225 196 100 Gold 2607 +207 160 77 Medium Honey 2651 +203 149 71 Pale Orange / Brown 1109 + 85 55 25 Mocha Brown / Very Dark 1110 +255 165 69 Singh Mist 2930 +255 131 56 Medium Orange 2931 +255 73 0 Sunkist 2946 +255 35 0 Crimson Red Light 2937 +255 112 84 Persimmon 2932 +255 64 86 Fluo Pink 2922 +255 240 0 Gold / Yellow 2983 +242 54 94 Pink 2920 +254 96 129 Dusty Rose 2921 +241 0 62 Deep Coral 2912 +233 255 73 Gold / Yellow 2967 +222 250 24 Gold 2910 + 68 246 30 Fluorescent Green 2940 + 63 230 7 Erin Green 2911 diff --git a/inkstitch/palettes/InkStitch Brother Country.gpl b/inkstitch/palettes/InkStitch Brother Country.gpl new file mode 100644 index 0000000..c15e898 --- /dev/null +++ b/inkstitch/palettes/InkStitch Brother Country.gpl @@ -0,0 +1,65 @@ +GIMP Palette +Name: Ink/Stitch: Brother Country +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 100 +240 240 240 White 000 +231 2 104 Red 149 +253 86 110 Pink 155 +204 40 56 Deep Rose 024 +252 141 175 Flesh Pink 152 +160 7 78 Dark Fuchsia 126 +255 66 9 Vermilion 148 +229 0 51 Carmine 158 + 69 4 81 Royal Purple 636 +103 0 112 Magenta 625 +241 159 188 Salmon Pink 122 +233 76 100 Amber Red 212 +254 254 123 Lemon Yellow 342 +251 251 32 Yellow 043 +251 233 106 Harvest Gold 334 +250 182 0 Orange 335 +250 173 78 Pumpkin 322 +250 183 0 Tangerine 336 +255 239 168 Cream Brown 331 +255 235 132 Cream Yellow 370 +228 152 59 Khaki 242 +242 153 14 Deep Gold 354 +238 204 12 Brass 404 +252 219 161 Linen 025 + 29 24 3 Dark Brown 717 +254 71 12 Reddish Brown 264 +184 116 50 Clay Brown 224 +240 213 179 Beige 012 +172 154 97 Warm Gray 706 +186 163 8 Russet Brown 414 +104 36 8 Light Brown 255 +116 198 177 Seacrest 505 +200 220 200 Mint Green 461 +119 196 135 Leaf Green 463 + 13 42 7 Olive Green 476 +176 207 120 Dark Olive 473 +120 199 159 Teal Green 483 + 0 81 39 Emerald Green 485 + 0 48 30 Deep Green 467 +203 233 162 Fresh Green 442 +182 221 17 Lime Green 444 + 81 137 33 Moss Green 446 + 0 99 144 Blue 586 + 10 89 163 Ultramarine 575 +213 236 235 Light Blue 150 +177 226 223 Sky Blue 512 + 8 90 111 Electric Blue 564 + 5 96 96 Peacock Blue 057 + 6 41 52 Prussian Blue 588 + 85 127 186 Corn Flower Blue 015 +243 111 177 Light Lilac 133 +196 160 207 Lilac 623 +180 128 196 Violet 624 +105 21 136 Purple 635 +146 133 195 Lavender 604 +156 190 219 Wistaria Violet 003 +168 171 173 Pewter 745 + 16 20 12 Dark Gray 747 +224 202 198 Silver 020 +110 100 82 Gray 734 diff --git a/inkstitch/palettes/InkStitch Brother Embroidery.gpl b/inkstitch/palettes/InkStitch Brother Embroidery.gpl new file mode 100644 index 0000000..915989e --- /dev/null +++ b/inkstitch/palettes/InkStitch Brother Embroidery.gpl @@ -0,0 +1,65 @@ +GIMP Palette +Name: Ink/Stitch: Brother Embroidery +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 900 +240 240 240 White 001 +237 23 31 Red 800 +249 147 188 Pink 085 +246 74 138 Deep Rose 086 +253 217 222 Flesh Pink 124 +199 1 86 Dark Fuchsia 107 +254 55 15 Vermilion 030 +247 56 102 Carmine 807 +119 1 118 Royal Purple 869 +145 54 151 Magenta 620 +252 187 196 Salmon Pink 079 +181 76 100 Amber Red 333 +240 249 112 Lemon Yellow 202 +255 255 0 Yellow 205 +255 217 17 Harvest Gold 206 +254 186 53 Orange 208 +254 179 67 Pumpkin 126 +254 158 50 Tangerine 209 +255 255 179 Cream Brown 010 +255 240 141 Cream Yellow 812 +208 166 96 Khaki 348 +232 169 0 Deep Gold 214 +186 152 0 Brass 328 +254 227 197 Linen 307 + 42 19 1 Dark Brown 058 +209 92 0 Reddish Brown 337 +209 84 0 Clay Brown 339 +239 227 185 Beige 843 +216 204 198 Warm Gray 399 +125 111 0 Russet Brown 330 +178 118 36 Light Brown 323 +168 221 196 Seacrest 542 +158 214 125 Mint Green 502 +102 186 73 Leaf Green 509 + 19 43 26 Olive Green 519 + 67 86 7 Dark Olive 517 + 0 135 119 Teal Green 534 + 0 103 62 Emerald Green 507 + 0 56 34 Deep Green 808 +227 243 91 Fresh Green 027 +112 188 31 Lime Green 513 + 47 126 32 Moss Green 515 + 10 85 163 Blue 405 + 11 61 145 Ultramarine 406 +168 222 235 Light Blue 017 + 37 132 187 Sky Blue 019 + 9 91 166 Electric Blue 420 + 19 74 118 Peacock Blue 415 + 14 31 124 Prussian Blue 007 + 75 107 175 Corn Flower 070 +228 154 203 Light Lilac 810 +145 95 172 Lilac 612 +106 28 138 Violet 613 + 78 41 144 Purple 614 +178 175 212 Lavender 804 +104 106 176 Wistaria Violet 607 + 79 85 86 Pewter 704 + 41 49 51 Dark Gray 707 +168 168 168 Silver 005 +135 135 135 Gray 817 diff --git a/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl b/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl new file mode 100644 index 0000000..f9cd6c9 --- /dev/null +++ b/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl @@ -0,0 +1,308 @@ +GIMP Palette +Name: Ink/Stitch: Coats Alcazar Jazz +Columns: 4 +# RGB Value Color Name Number +230 232 255 White 0001 +236 230 89 Light Yellow 0002 +239 218 23 Yellow 0003 +241 215 0 Yellow 0005 +242 175 30 Light Orange 0012 +217 169 49 Light Orange 0013 +196 156 48 Brown / Gold 0014 +190 138 16 Orange / Brown 0015 +170 115 23 Brown / Olive 0016 +157 114 73 Brown 0017 +133 127 53 Dark Green / Yellow 0020 +233 233 232 White 0022 +170 141 84 Medium Yellow 0025 +226 222 218 Light Orange / Red 0026 +168 140 102 Pale Brown 0027 +160 88 7 Orange / Brown 0031 +233 235 227 Light Yellow 0101 +241 218 151 Light Yellow 0104 +235 223 129 Pale Yellow / Gold 0105 +241 143 0 Medium Orange 0109 +242 139 0 Medium Orange 0120 +241 124 0 Orange 0122 +104 89 35 Dark Green / Yellow 0129 +205 147 66 Pale Orange / Brown 0131 +200 131 49 Medium Orange / Brown 0132 +244 196 71 Yellow Gold 0134 +245 190 34 Medium Orange 0135 +208 170 46 Medium Yellow 0136 +224 208 190 Light Orange 0137 +156 115 44 Medium Brown 0138 +175 100 0 Orange / Brown 0141 +228 207 151 Light Yellow / Orange 0150 +232 197 187 Pale Orange 0203 +243 173 154 Pale Orange 0205 +239 143 120 Medium Orange 0206 +233 96 5 Orange 0208 +173 43 22 Light Orange / Red 0209 +235 147 150 Light Orange 0212 +219 49 0 Orange / Red 0215 +223 185 167 Pale Orange 0218 +170 76 40 Brown 0219 +223 87 0 Orange 0220 +225 176 178 Medium Pink 0221 +241 137 53 Medium Orange 0222 +201 159 120 Light Red / Orange 0225 +214 86 110 Medium Pink 0227 + 91 29 40 Dark Brown 0231 +224 183 161 Pale Orange 0242 +187 133 92 Pale Red / Orange 0245 +128 75 40 Brown 0250 +239 186 144 Light Orange 0252 +237 87 0 Orange 0260 +188 93 61 Brown 0262 +161 76 66 Dark Red / Orange 0265 +110 51 54 Dark Brown 0271 +189 0 26 Medium Red / Orange 0300 +161 0 43 Dark Red / Orange 0303 +217 131 146 Medium Pink 0306 +169 0 73 Red 0307 +128 39 61 Brown 0311 +231 194 222 Light Pink 0316 +185 87 120 Dark Pink 0317 +185 221 189 Light Green / Yellow 0318 +140 44 77 Brown 0319 +140 54 87 Brown 0322 +160 0 37 Dark Red 0323 +135 68 80 Dark Brown 0326 +213 62 98 Red 0327 +115 62 86 Dark Purple 0329 +112 30 81 Dark Purple 0330 +208 83 158 Medium Pink 0331 +227 155 198 Light Pink 0335 +188 99 150 Medium Pink 0337 + 98 46 77 Dark Purple 0338 +190 92 144 Medium Pink 0339 +173 0 58 Dark Red 0343 +168 0 36 Red 0344 +143 0 49 Dark Red 0345 + 73 33 60 Dark Purple 0346 +123 16 53 Dark Purple 0347 +100 31 52 Brown 0349 + 89 32 55 Dark Purple 0350 +236 207 222 Light Pink 0355 +215 96 143 Dark Pink 0358 +199 23 94 Red 0361 +140 0 50 Red 0363 +227 162 190 Light Pink 0364 +214 109 135 Medium Pink 0365 +220 101 98 Dark Red / Orange 0367 +197 0 48 Red 0372 +188 0 89 Dark Red 0373 +157 0 93 Dark Red 0377 + 68 35 44 Dark Purple 0380 +184 0 93 Dark Pink 0383 +166 124 138 Light Purple 0406 +161 154 125 Pale Green / Yellow 0410 +115 99 93 Medium Brown 0412 + 83 69 66 Dark Brown 0414 +132 100 73 Medium Brown 0416 + 95 61 55 Dark Brown 0418 +148 127 100 Light Green / Yellow 0419 +171 151 125 Light Brown 0420 +157 145 132 Light Brown 0421 +209 208 203 Light Green 0423 +193 182 168 Light Brown 0426 +134 129 119 Dark Grey 0427 +211 205 166 Light Green / Yellow 0430 +191 165 137 Pale Orange 0432 + 91 64 60 Dark Brown 0441 +203 192 191 Light Purple 0442 + 69 50 48 Black 0443 +142 121 121 Medium Brown 0445 +120 118 100 Medium Green / Yellow 0446 +187 172 154 Light Brown 0449 +161 138 129 Light Brown 0450 +194 171 149 Pale Orange 0457 +110 82 58 Brown 0460 +102 65 40 Brown 0461 + 75 52 45 Dark Brown 0462 + 62 48 51 Black 0463 + 74 36 37 Dark Brown 0466 + 58 33 40 Dark Brown 0467 +230 198 199 Medium Pink 0471 +212 205 195 Light Grey / Green 0473 +200 180 163 Light Brown 0474 +143 102 52 Medium Orange / Brown 0477 + 84 57 45 Dark Brown 0481 +154 129 113 Pale Brown 0484 +142 114 96 Pale Brown 0486 +112 82 60 Medium Brown 0487 + 59 64 33 Green 0488 +233 232 191 Light Yellow 0489 +190 206 189 Light Green 0503 +119 162 142 Pale Green / Blue 0505 + 0 83 61 Dark Green 0510 + 35 77 48 Dark Green 0512 + 0 134 66 Green 0519 + 34 63 47 Dark Green 0520 +154 217 224 Light Blue / Green 0521 + 30 178 167 Medium Blue / Green 0523 + 0 172 171 Medium Green / Blue 0524 +102 199 202 Light Blue / Green 0525 + 0 138 111 Medium Green / Blue 0528 + 0 140 125 Medium Green / Blue 0529 + 0 93 77 Green 0530 + 0 96 93 Dark Green / Blue 0531 + 96 162 153 Medium Green / Blue 0536 + 27 71 63 Dark Green / Blue 0538 +181 192 159 Dark Green / Yellow 0540 +160 195 149 Light Green 0542 +157 215 210 Light Green / Blue 0543 + 94 195 159 Medium Green 0551 +101 115 84 Medium Blue / Green 0552 + 0 107 49 Green 0555 + 0 137 77 Green 0557 + 0 119 68 Green 0558 +120 180 57 Green / Yellow 0560 + 47 59 41 Dark Green 0563 +138 140 122 Pale Grey 0564 + 75 170 130 Green 0569 + 60 121 72 Dark Green 0570 + 19 84 44 Green 0573 + 32 143 107 Medium Green 0574 + 0 109 62 Green 0580 + 18 139 125 Green / Blue 0582 +129 133 68 Medium Green / Yellow 0585 + 45 82 63 Dark Green 0586 +106 114 55 Dark Green / Yellow 0589 + 28 50 47 Dark Blue / Green 0590 + 53 137 74 Dark Green 0598 + 34 59 76 Dark Blue 0601 +119 138 178 Medium Blue 0602 + 83 105 164 Medium Purple 0603 + 42 58 117 Dark Blue 0605 +148 213 230 Light Blue / Green 0610 +136 183 202 Pale Blue / Green 0611 + 0 147 194 Blue / Green 0613 + 78 166 216 Light Blue 0614 + 0 103 173 Medium Blue 0615 + 0 121 185 Medium Blue 0616 + 70 115 175 Medium Blue 0621 + 46 13 151 Medium Green / Blue 0623 + 0 101 112 Medium Green / Blue 0624 + 0 90 99 Dark Green / Yellow 0625 + 0 53 137 Blue 0626 + 32 57 136 Royal Blue 0629 + 0 117 140 Blue / Green 0630 + 45 62 149 Dark Blue 0631 +159 194 226 Pale Blue 0634 +150 178 207 Light Blue 0635 +114 152 193 Pale Purple 0636 +162 202 231 Pale Blue 0638 +110 162 218 Medium Blue 0639 + 0 72 144 Blue 0642 + 37 56 117 Dark Blue 0643 + 29 49 127 Royal Blue 0645 + 41 40 91 Dark Purple 0646 +179 196 220 Light Blue 0647 + 59 105 142 Medium Blue 0649 +118 149 208 Medium Purple 0651 + 66 108 180 Medium Purple 0652 + 83 115 163 Medium Purple 0653 + 26 69 125 Blue 0655 + 95 136 201 Medium Blue 0658 + 9 97 181 Blue 0659 + 67 105 181 Medium Purple 0661 + 35 93 138 Medium Blue 0662 + 51 61 92 Dark Grey / Blue 0665 + 0 159 205 Medium Blue / Green 0667 + 85 120 139 Medium Blue / Green 0669 + 45 91 106 Dark Blue / Green 0670 + 19 81 116 Dark Blue 0672 + 38 42 67 Dark Purple 0673 + 32 52 47 Dark Green 0674 + 39 36 109 Purple 0675 +159 172 213 Light Purple 0677 + 12 47 92 Blue 0678 + 86 98 153 Medium Blue 0680 + 30 77 138 Dark Blue 0682 + 82 186 208 Medium Blue / Green 0684 + 24 63 98 Dark Blue 0689 + 43 38 54 Dark Grey 0700 + 37 36 64 Dark Purple 0701 + 45 39 57 Dark Purple 0702 + 33 34 44 Black 0703 + 38 35 109 Purple 0801 +207 165 204 Light Pink 0804 +185 126 186 Purple 0805 +192 149 201 Purple 0807 + 87 33 98 Purple 0817 + 84 49 92 Dark Purple 0818 +146 123 186 Pale Purple 0822 +112 68 146 Purple 0824 +101 55 132 Purple 0826 + 81 41 113 Purple 0827 +153 164 206 Light Purple 0842 +117 137 189 Medium Purple 0843 +165 161 211 Light Purple 0845 + 77 87 164 Medium Purple 0847 +112 100 163 Medium Purple 0851 + 54 33 96 Purple 0852 +161 83 149 Medium Purple 0853 + 78 97 171 Light Blue 0856 + 9 51 128 Dark Purple 0862 + 78 56 133 Purple 0863 + 33 33 37 Black 0900 +146 152 161 Pale Grey 0902 +116 127 142 Pale Grey / Blue 0903 + 80 90 98 Dark Grey / Blue 0904 + 79 94 123 Dark Grey / Blue 0909 +160 165 174 Medium Grey 0910 +121 121 120 Medium Grey 0916 +145 175 200 Pale Blue 0917 +106 111 128 Grey 0918 +116 121 133 Medium Grey 0919 + 76 89 126 Grey / Blue 0924 + 81 84 48 Green / Yellow 0925 +102 103 97 Medium Grey 0928 +163 165 157 Pale Grey 0930 +137 137 136 Medium Grey 0931 + 64 59 58 Black 0935 +165 173 183 Medium Grey 0939 + 87 85 99 Dark Grey 0940 +130 147 130 Pale Green 0941 +147 153 167 Medium Grey 0942 + 58 57 64 Black 0943 + 82 87 98 Dark Grey 0945 +193 197 211 Light Purple 0946 +173 173 189 Light Purple 0947 +120 119 139 Medium Grey / Blue 0951 + 99 91 112 Dark Grey / Blue 0952 +125 127 141 Grey 0967 + 94 109 132 Dark Grey / Blue 0968 + 0 84 161 Blue 1015 +180 3 57 Dark Red / Orange 1016 + 66 56 136 Purple 1020 + 44 48 127 Purple 1022 +232 221 171 Light Yellow / Orange 1026 +204 88 102 Medium Orange / Red 1028 +128 83 44 Brown 1033 + 37 57 92 Dark Blue 1036 +237 126 108 Medium Orange 1037 + 18 56 70 Dark Blue 1039 + 45 49 71 Dark Purple 1042 +156 0 111 Medium Purple 1047 +200 173 112 Light Orange 1062 +186 0 39 Red 1066 + 0 135 177 Blue / Green 1068 +141 137 137 Medium Grey 1071 +135 111 78 Medium Brown 1072 +130 95 86 Medium Brown 1073 + 96 37 70 Medium Purple 1076 + 0 109 92 Dark Green 1078 + 0 103 99 Dark Blue / Green 1079 +181 137 46 Orange / Brown 1080 + 0 124 121 Light Green / Blue 1081 +107 24 109 Dark Purple 1082 + 59 32 85 Dark Purple 1084 +199 134 141 Light Pink 1087 + 60 115 105 Dark Green / Blue 1088 +122 12 42 Red 1089 + 45 30 95 Dark Purple / Navy 1090 + 10 52 127 Royal Blue 1098 + 46 76 69 Dark Green / Blue 1391 diff --git a/inkstitch/palettes/InkStitch Coats Alcazar.gpl b/inkstitch/palettes/InkStitch Coats Alcazar.gpl new file mode 100644 index 0000000..e1891b0 --- /dev/null +++ b/inkstitch/palettes/InkStitch Coats Alcazar.gpl @@ -0,0 +1,504 @@ +GIMP Palette +Name: Ink/Stitch: Coats Alcazar +Columns: 4 +# RGB Value Color Name Number +230 232 255 White 0001 +236 230 89 Light Yellow 0002 +239 218 23 Yellow 0003 +241 215 0 Yellow 0005 +189 185 132 Pale Yellow / Green 0006 +153 133 46 Medium Yellow / Green 0008 +242 168 0 Medium Orange 0011 +242 175 30 Light Orange 0012 +217 169 49 Light Orange 0013 +196 156 48 Brown / Gold 0014 +190 138 16 Orange / Brown 0015 +170 115 23 Brown / Olive 0016 +157 114 73 Brown 0017 +178 113 0 Orange / Brown 0018 +150 147 80 Medium Green / Yellow 0019 +133 127 53 Dark Green / Yellow 0020 +233 233 232 White 0022 +190 168 59 Medium Green / Yellow 0023 +154 134 82 Pale Brown 0024 +170 141 84 Medium Yellow 0025 +226 222 218 Light Orange / Red 0026 +168 140 102 Pale Brown 0027 +142 91 36 Medium Brown 0028 +161 116 57 Pale Brown 0029 +160 88 7 Orange / Brown 0031 +233 235 227 Light Yellow 0101 +234 235 206 Light Yellow 0103 +241 218 151 Light Orange 0104 +235 223 129 Pale Yellow / Gold 0105 +241 143 0 Medium Orange 0109 +242 139 0 Medium Orange 0120 +241 124 0 Orange 0122 +235 92 0 Orange / Red 0124 +184 160 99 Pale Green / Yellow 0125 +168 144 52 Medium Green / Yellow 0126 +104 89 35 Dark Green / Yellow 0129 +205 147 66 Pale Orange / Brown 0131 +200 131 49 Medium Orange / Brown 0132 +241 204 103 Yellow Gold 0133 +244 196 71 Yellow Gold 0134 +245 190 34 Medium Orange 0135 +208 170 46 Medium Yellow 0136 +224 208 190 Light Orange 0137 +156 115 44 Medium Brown 0138 +235 232 208 Pale Orange 0139 +233 232 219 Light Yellow 0140 +175 100 0 Orange / Brown 0141 +228 207 151 Light Yellow / Orange 0150 +210 63 0 Dark Orange 0202 +232 197 187 Pale Orange 0203 +243 173 154 Pale Orange 0205 +239 143 120 Medium Orange 0206 +174 55 44 Orange / Red 0207 +233 96 5 Orange 0208 +173 43 22 Light Orange / Red 0209 +166 48 37 Dark Orange / Red 0210 +192 53 44 Orange / Red 0211 +235 147 150 Light Orange 0212 +233 152 100 Pale Orange 0213 +219 49 0 Orange / Red 0215 +223 185 167 Pale / Orange 0218 +170 76 40 Brown 0219 +223 87 0 Orange 0220 +225 176 178 Medium Pink 0221 +241 137 53 Medium Orange 0222 +157 125 45 Medium Green / Yellow 0223 +201 159 120 Light Red / Orange 0225 +214 86 110 Medium Pink 0227 +166 36 73 Dark Pink 0229 +111 38 50 Brown 0230 + 91 29 40 Dark Brown 0231 +151 47 51 Dark Orange / Red 0238 +127 47 52 Brown 0240 +224 183 161 Pale Orange 0242 +187 133 92 Pale Red / Orange 0245 +189 114 78 Brown 0246 +171 95 34 Orange / Brown 0247 +138 84 53 Brown 0248 +128 75 40 Brown 0250 +128 76 67 Dark Brown 0251 +239 186 144 Light Orange 0252 +237 175 121 Medium Orange 0253 +238 156 85 Medium Orange 0254 +211 106 50 Orange 0257 +178 101 52 Dark Orange / Brown 0258 +237 87 0 Orange 0260 +188 93 61 Brown 0262 +161 76 66 Dark Red / Orange 0265 +118 53 47 Dark Brown 0267 +110 51 54 Dark Brown 0271 +159 83 65 Medium Brown 0273 +189 0 26 Medium Red / Orange 0300 +166 103 128 Medium Purple 0301 +227 120 138 Medium Pink 0302 +161 0 43 Dark Red / Orange 0303 +217 131 146 Medium Pink 0306 +169 0 73 Red 0307 +160 85 102 Medium Pink 0308 +207 54 122 Dark Pink 0309 +128 39 61 Brown 0311 +119 46 66 Brown 0312 +231 191 209 Light Pink 0313 +231 194 222 Light Pink 0316 +185 87 120 Dark Pink 0317 +185 221 189 Light Green / Yellow 0318 +140 44 77 Brown 0319 +218 76 85 Medium Red / Orange 0321 +140 54 87 Brown 0322 +160 0 37 Dark Red 0323 +119 38 74 Dark Purple 0324 +135 68 80 Dark Brown 0326 +213 62 98 Red 0327 +115 62 86 Dark Purple 0329 +112 30 81 Dark Purple 0330 +208 83 158 Medium Pink 0331 +194 15 125 Dark Pink 0332 +227 155 198 Light Pink 0335 +188 99 150 Medium Pink 0337 + 98 46 77 Dark Purple 0338 +190 92 144 Medium Pink 0339 +151 70 117 Medium Purple 0340 +162 66 108 Medium Purple 0341 +134 52 99 Medium Purple 0342 +173 0 58 Dark Red 0343 +168 0 36 Red 0344 +143 0 49 Dark Red 0345 + 73 33 60 Dark Purple 0346 +123 16 53 Dark Purple 0347 + 53 34 44 Dark Brown 0348 +100 31 52 Brown 0349 + 89 32 55 Dark Purple 0350 +236 207 222 Light Pink 0355 +231 190 211 Light Pink 0356 +215 96 143 Dark Pink 0358 +210 38 103 Red 0360 +199 23 94 Red 0361 +140 0 50 Red 0363 +227 162 190 Light Pink 0364 +214 109 135 Medium Pink 0365 +200 82 132 Medium Pink 0366 +220 101 98 Dark Red / Orange 0367 +217 35 63 Dark Red / Orange 0368 +176 39 130 Medium Purple 0369 +221 48 57 Warm Red 0370 +197 0 48 Red 0372 +188 0 89 Dark Red 0373 +165 0 110 Dark Red 0376 +157 0 93 Dark Red 0377 +189 39 61 Dark Red / Orange 0378 + 68 35 44 Dark Purple 0380 +222 114 183 Medium Pink 0381 +226 126 170 Pink 0382 +184 0 93 Dark Pink 0383 +166 156 143 Warm Gray 0400 +183 151 160 Light Purple 0401 + 95 77 50 Dark Green / Yellow 0402 +158 115 117 Pale Brown 0404 +166 125 138 Light Purple 0406 +110 81 100 Medium Purple 0408 +164 162 165 Light Grey 0409 +161 154 125 Pale Green / Yellow 0410 +117 104 95 Medium Brown 0411 +115 99 93 Medium Brown 0412 +123 111 86 Medium Green / Yellow 0413 + 83 69 66 Dark Brown 0414 +132 100 73 Medium Brown 0416 +196 192 175 Light Grey / Green 0417 + 95 61 44 Dark Brown 0418 +148 127 100 Light Green / Yellow 0419 +171 151 125 Light Brown 0420 +157 145 132 Light Brown 0421 +192 174 161 Pale Orange 0422 +209 208 203 Light Green 0423 +125 114 97 Medium Green / Yellow 0424 +169 163 153 Light Green / Yellow 0425 +193 182 168 Light Brown 0426 +134 129 119 Dark Grey 0427 +103 95 80 Dark Grey 0428 +183 180 165 Light Grey / Green 0429 +211 205 166 Light Green / Yellow 0430 +159 158 139 Pale Green / Yellow 0431 +191 165 137 Pale Orange 0432 +155 148 114 Medium Green / Grey 0433 + 89 75 51 Dark Green / Grey 0435 +208 179 136 Light Brown 0436 +160 155 134 Pale Green / Grey 0439 +160 107 93 Orange / Brown 0440 + 91 64 60 Dark Brown 0441 +203 192 191 Light Purple 0442 + 69 50 48 Black 0443 +142 121 121 Medium Brown 0445 +120 118 100 Medium Green / Yellow 0446 +136 102 94 Medium Brown 0447 +187 172 154 Light Brown 0449 +161 138 129 Light Brown 0450 +122 76 62 Dark Brown 0451 +199 200 186 Light Green / Yellow 0452 + 91 64 52 Brown 0453 + 72 56 53 Black 0455 + 48 34 48 Dark Purple / Navy 0456 +194 171 149 Pale Orange 0457 +143 108 77 Medium Brown 0459 +110 82 58 Brown 0460 +102 65 40 Brown 0461 + 75 52 45 Dark Brown 0462 + 62 48 51 Black 0463 + 74 36 37 Dark Brown 0466 + 58 33 40 Dark Brown 0467 +230 198 199 Medium Pink 0471 +168 153 118 Pale Green / Yellow 0472 +212 205 195 Light Grey / Green 0473 +200 180 163 Light Brown 0474 +160 137 76 Light Green / Yellow 0475 +153 118 76 Pale Brown 0476 +143 102 52 Medium Orange / Brown 0477 +178 131 139 Pale Pink 0479 +111 75 59 Brown 0480 + 84 57 45 Dark Brown 0481 +200 186 181 Light Pink 0482 +186 168 156 Light Brown 0483 +154 129 113 Pale Brown 0484 +154 137 126 Light Brown 0485 +142 114 96 Pale Brown 0486 +112 82 60 Medium Brown 0487 + 59 64 33 Green 0488 +233 232 191 Light Yellow 0489 +103 187 57 Green 0501 +190 206 189 Light Green 0503 + 27 183 158 Medium Green / Blue 0504 +119 162 142 Pale Green / Blue 0505 + 67 147 134 Medium Green / Blue 0507 + 0 83 61 Dark Green 0510 + 35 77 48 Dark Green 0512 + 77 134 75 Dark Green 0513 +136 169 128 Medium Green 0514 + 0 134 66 Green 0519 + 34 63 47 Dark Green 0520 +154 217 224 Light Blue / Green 0521 + 30 178 167 Medium Blue / Green 0523 + 0 172 171 Medium Green / Blue 0524 +102 199 202 Light Blue / Green 0525 + 0 162 151 Medium Green / Blue 0526 + 0 77 45 Dark Green 0527 + 0 138 111 Dark Blue / Green 0528 + 0 140 125 Medium Green / Blue 0529 + 0 93 77 Green 0530 + 0 96 93 Dark Green / Blue 0531 +157 189 174 Pale Green / Blue 0532 +108 146 122 Pale Blue / Green 0533 + 63 116 100 Dark Green 0534 + 0 134 104 Blue / Green 0535 + 96 162 153 Medium Green / Blue 0536 +166 219 144 Light Green / Yellow 0537 + 27 71 63 Dark Green / Blue 0538 + 55 123 111 Dark Blue / Green 0539 +181 192 159 Dark Green / Yellow 0540 + 36 60 53 Dark Green / Blue 0541 +160 195 149 Light Green 0542 +157 215 210 Light Green / Blue 0543 +105 144 65 Green / Yellow 0547 + 94 195 159 Medium Green 0551 +101 115 84 Medium Blue / Green 0552 + 0 114 73 Green 0553 + 0 107 49 Green 0555 + 73 157 98 Green 0556 + 0 137 77 Green 0557 + 0 119 68 Green 0558 + 0 93 46 Green 0559 +120 180 57 Green / Yellow 0560 +130 191 76 Green / Yellow 0562 + 47 59 41 Dark Green 0563 +138 140 122 Pale Grey 0564 + 83 124 59 Medium Green 0565 + 75 170 130 Green 0569 + 60 121 72 Dark Green 0570 + 82 160 45 Green / Yellow 0571 + 19 84 44 Green 0573 + 32 143 107 Medium Green 0574 + 90 91 28 Dark Green / Yellow 0575 + 63 107 60 Dark Green 0578 + 56 91 48 Dark Green 0579 + 0 109 62 Green 0580 + 72 118 97 Dark Green 0581 + 18 139 125 Green / Blue 0582 +139 164 79 Medium Green / Yellow 0583 +122 131 45 Medium Green / Yellow 0584 +129 133 68 Medium Green / Yellow 0585 + 45 82 63 Dark Green 0586 +106 114 55 Dark Green / Yellow 0589 + 28 50 47 Dark Blue / Green 0590 + 28 48 47 Dark Blue / Green 0592 + 85 94 67 Medium Green / Yellow 0595 + 0 91 98 Blue / Green 0596 + 0 152 170 Dark Blue / Green 0597 + 53 137 74 Dark Green 0598 + 34 59 76 Dark Blue 0601 +119 138 178 Medium Blue 0602 + 83 105 164 Medium Purple 0603 + 56 66 124 Medium Purple 0604 + 42 58 117 Dark Blue 0605 + 52 71 91 Dark Blue / Green 0606 + 27 78 121 Dark Blue 0608 +174 203 212 Light Blue / Green 0609 +148 213 230 Light Blue / Green 0610 +136 183 202 Pale Blue / Green 0611 + 0 167 206 Medium Blue / Green 0612 + 0 147 194 Blue / Green 0613 + 78 166 216 Light Blue 0614 + 0 103 173 Medium Blue 0615 + 0 121 185 Medium Blue 0616 + 72 163 209 Light Blue 0619 + 0 124 184 Medium Blue / Green 0620 + 70 115 175 Medium Blue 0621 +110 163 176 Medium Green / Blue 0622 + 46 137 151 Medium Green / Blue 0623 + 0 101 112 Medium Green / Blue 0624 + 0 90 99 Dark Green / Yellow 0625 + 0 53 137 Blue 0626 +105 162 158 Pale Green 0627 + 33 76 162 Royal Blue 0628 + 32 57 136 Royal Blue 0629 + 0 117 140 Blue / Green 0630 + 45 62 149 Dark Blue 0631 +157 182 199 Pale Blue 0632 +159 194 226 Pale Blue 0634 +150 178 207 Light Blue 0635 +114 152 193 Pale Purple 0636 + 78 114 161 Medium Blue 0637 +162 202 231 Pale Blue 0638 +110 162 218 Medium Blue 0639 + 84 124 197 Light Blue 0641 + 0 72 144 Blue 0642 + 37 56 117 Dark Blue 0643 + 29 49 127 Royal Blue 0645 + 41 40 91 Dark Purple 0646 +179 196 220 Light Blue 0647 +110 136 186 Pale Blue 0648 + 59 105 142 Medium Blue 0649 +159 188 222 Light Blue 0650 +118 149 208 Medium Purple 0651 + 66 108 180 Medium Purple 0652 + 83 115 163 Medium Purple 0653 + 59 92 143 Medium Purple 0654 + 26 69 125 Blue 0655 + 34 51 91 Navy 0656 + 25 51 105 Dark Purple / Navy 0657 + 95 136 201 MediumBlue 0658 + 9 97 181 Blue 0659 + 67 105 181 Medium Purple 0661 + 35 93 138 Medium Blue 0662 + 51 61 92 Dark Grey / Blue 0665 + 0 159 205 Medium Blue / Green 0667 +135 166 181 Pale Blue 0668 + 85 120 139 Medium Blue / Green 0669 + 45 91 106 Dark Blue / Green 0670 + 43 42 56 Dark Navy 0671 + 19 81 116 Dark Blue 0672 + 38 42 67 Dark Purple 0673 + 32 52 47 Dark Green 0674 + 39 36 109 Purple 0675 +159 172 213 Light Purple 0677 + 12 47 92 Blue 0678 +113 133 173 Pale Purple 0679 + 86 98 153 Medium Blue 0680 + 30 77 138 Dark Blue 0682 + 0 64 126 Light Blue / Green 0683 + 82 186 208 Medium Blue / Green 0684 + 24 63 98 Dark Blue 0689 + 43 38 54 Dark Grey 0700 + 37 36 64 Dark Purple 0701 + 45 39 57 Dark Purple 0702 + 33 34 44 Black 0703 + 38 35 109 Purple 0801 +207 165 204 Light Pink 0804 +185 126 186 Purple 0805 +141 89 159 Medium Purple 0806 +192 149 201 Purple 0807 +180 97 160 Medium Purple 0811 +118 17 87 Dark Purple 0813 +111 31 104 Dark Purple 0814 +118 0 73 Dark Pink 0815 + 87 33 98 Purple 0817 + 84 49 92 Dark Purple 0818 +115 107 139 Medium Purple 0819 +146 123 186 Pale Purple 0822 +112 68 146 Purple 0824 +101 55 132 Purple 0826 + 81 41 113 Purple 0827 +133 118 144 Pale Purple 0830 +153 164 206 Light Purple 0842 +117 137 189 Medium Purple 0843 +165 161 211 Light Purple 0845 + 77 87 164 Medium Purple 0847 + 59 58 119 Purple 0848 +178 158 204 Pale Purple 0849 +140 128 189 Light Purple 0850 +112 100 163 Medium Purple 0851 + 54 33 96 Purple 0852 +161 83 149 Medium Purple 0853 +121 100 166 Light Purple 0854 + 97 115 180 Medium Purple 0855 + 78 97 171 Light Blue 0856 +182 191 212 Light Grey 0857 + 79 51 128 Dark Purple 0862 + 78 56 133 Purple 0863 + 33 33 37 Black 0900 +146 152 161 Pale Grey 0902 +116 127 142 Pale Grey / Blue 0903 + 80 90 98 Dark Grey / Blue 0904 +112 117 110 Medium Grey / Green 0905 +181 192 195 Light Green 0906 +181 191 200 Pale Purple 0907 +125 132 140 Grey 0908 + 79 94 123 Dark Grey / Blue 0909 +160 165 174 Medium Grey 0910 + 63 63 80 Dark Grey / Blue 0911 +106 100 96 Medium Grey / Green 0913 +115 140 160 Medium Blue 0915 +121 121 120 Medium Grey 0916 +145 175 200 Pale Blue 0917 +106 111 128 Grey 0918 +116 121 133 Medium Grey 0919 + 55 54 62 Black 0920 +141 158 129 Pale Green 0921 +112 124 87 Medium Green / Yellow 0922 +121 134 154 Medium Grey / Blue 0923 + 76 89 126 Grey / Blue 0924 + 81 84 48 Green / Yellow 0925 +145 146 129 Pale / Grey 0927 +102 103 97 Medium Grey 0928 +163 165 157 Pale Grey 0929 +182 185 178 Light Grey / Green 0930 +137 137 136 Medium Grey 0931 + 84 87 90 Dark Grey 0933 + 64 59 58 Black 0935 + 95 126 135 Pale Green / Blue 0936 + 63 106 123 Medium Green / Blue 0937 +165 173 183 Medium Grey 0939 + 87 85 99 Dark Grey 0940 +130 147 130 Pale Green 0941 +147 153 167 Medium Grey 0942 + 58 57 64 Black 0943 +172 176 185 Medium Grey 0944 + 82 87 98 Dark Grey 0945 +193 197 211 Light Purple 0946 +173 173 189 Light Purple 0947 +164 164 184 LightPurple 0948 +144 140 157 Medium Purple 0950 +120 119 139 Medium Grey / Blue 0951 + 99 91 112 Dark Grey / Blue 0952 +175 183 199 Medium Grey 0953 +103 112 125 Grey 0955 +121 121 129 Cool Grey 0965 + 91 99 111 Grey 0966 +125 127 141 Grey 0967 + 94 109 132 Dark Grey / Blue 0968 + 94 50 38 Dark Brown 1008 +142 193 117 Medium Green 1013 + 0 84 161 Blue 1015 +180 3 57 Dark Red / Orange 1016 + 66 56 136 Purple 1020 +145 145 146 Pale Grey 1021 + 44 48 127 Purple 1022 +232 221 171 Light Yellow / Orange 1026 + 84 81 64 Dark Grey / Green 1027 +204 88 102 Medium Orange / Red 1028 +128 83 44 Brown 1033 + 37 57 92 Dark Blue 1036 +237 126 108 Medium Orange 1037 +126 45 115 Dark Purple 1038 + 18 56 70 Dark Blue 1039 + 45 49 71 Dark Purple 1042 + 0 82 95 Blue / Green 1046 +156 0 111 Medium Purple 1047 + 72 54 81 Dark Purple 1060 +200 173 112 Light Orange 1062 +195 0 64 Dark Red 1063 +186 0 39 Red 1066 + 0 135 177 Blue / Green 1068 +178 40 122 Dark Pink 1069 +141 137 137 Medium Grey 1071 +135 111 78 Medium Brown 1072 +130 95 86 Medium Brown 1073 + 96 37 70 Medium Purple 1076 + 0 109 92 Dark Green 1078 + 0 103 99 Dark Blue / Green 1079 +181 137 46 Orange / Brown 1080 + 0 124 121 Light Green / Blue 1081 +107 24 109 Dark Purple 1082 + 59 32 85 Dark Purple 1084 +199 134 141 Light Pink 1087 + 60 115 105 Dark Green / Blue 1088 +122 12 42 Red 1089 + 45 30 95 Dark Purple / Navy 1090 + 0 100 65 Green 1092 + 46 33 88 Dark Purple / Navy 1097 + 10 52 127 Royal Blue 1098 + 0 88 124 Blue 1099 + 46 76 69 Dark Green / Blue 1391 +198 15 0 Warm Red 2210 diff --git a/inkstitch/palettes/InkStitch Coats Sylko USA.gpl b/inkstitch/palettes/InkStitch Coats Sylko USA.gpl new file mode 100644 index 0000000..af220f6 --- /dev/null +++ b/inkstitch/palettes/InkStitch Coats Sylko USA.gpl @@ -0,0 +1,307 @@ +GIMP Palette +Name: Ink/Stitch: Coats Sylko USA +Columns: 4 +# RGB Value Color Name Number +223 255 44 Fluorescent Yellow B1015 +238 222 162 Straw Yellow B1137 +226 217 153 Maize Silk B1143 +226 224 138 Pale Yellow B1169 +237 229 159 Pale Sunflower B1170 +222 203 61 Mimosa B1213 +238 238 88 Daffodil B1216 +243 210 67 Gold Goblet B1224 +236 196 96 Yellow B1232 +241 188 0 Golden Yellow B1261 +233 180 49 Yellow Poppy B1266 +223 151 26 Goldenrod B1267 +230 171 11 Liberty Gold B1269 +225 155 0 Marigold B1271 +237 179 17 Gold B1274 +230 147 0 Gold Rush B1285 +215 172 97 Shelley Gold B1318 +229 206 151 Maize B1340 +239 225 175 Lemonade B1357 +233 210 121 Popcorn B1376 +190 137 0 Brass B1416 +211 154 0 Royal Gold B1422 +196 170 101 Grapefruit B1456 +171 136 30 Golden Wheat B1479 +169 154 82 Faded Brass B1488 +231 239 249 White B1720 +255 84 46 Fluorescent Orange B2024 +236 138 111 Bright Coral B2101 +224 194 174 Light Apricot B2154 +220 128 100 Miami B2163 +184 112 92 Saffron B2200 +200 48 47 Spanish Red B2216 +218 69 35 Paprika B2239 +196 36 54 Hawks Red B2267 +218 64 93 Iced Poppy B2291 +151 125 88 Sandy Soil B2329 +144 97 53 Unaka Sand B2345 +123 82 47 Dark Red Orange B2348 +166 111 0 Ginger B2354 +165 111 37 Temple Gold B2358 +202 168 102 Pineapple Gold B2360 +202 156 109 Honey B2379 +171 89 30 Coppertone B2382 +178 118 35 Tiger Eye B2388 +227 163 95 Cantaloupe B2406 +208 76 22 Tropical Orange B2432 +234 118 77 Orange Glow B2440 +196 85 31 Autumn Leaf B2462 +227 134 0 Orange Ice B2480 +255 159 0 Bright Orange B2482 +224 122 0 Marigold B2484 +214 93 20 Dark Orange B2495 +236 239 230 Natural White B2730 +255 102 156 Fluorescent Dahlia B3003 +255 79 118 Fluorescent Red B3063 +222 121 129 Peach B3105 +225 160 177 Pink B3108 +233 189 218 Pink B3114 +228 154 195 Anemone B3117 +235 138 172 Pink Petunia B3128 +212 110 148 French Rose B3133 +233 184 184 Light Melon B3138 +212 169 155 Peach B3140 +207 180 174 Rose Beige B3142 +231 203 217 Rose Pink B3162 +234 216 220 Light Pink B3170 +232 182 203 Orchid Rose B3174 +221 149 142 Coral B3196 +240 176 170 Pink Petal B3198 +198 82 97 Coral Flame B3257 +187 87 79 Clay B3285 +187 113 150 Rose Dust B3326 +158 83 106 Medium Berry B3371 +223 80 113 Shocking Pink #2 B3435 +193 0 70 Bulls Red B3436 +211 47 89 Bullet Red B3438 +216 45 106 Carmine B3453 +225 95 135 Dark Pink B3461 +216 46 107 Shocking Pink B3462 +212 23 116 Ruby Glint B3490 +174 72 147 Azalea B3602 +138 36 114 Grape Wine B3608 +118 0 73 Magenta B3617 + 98 26 78 Sugar Beet B3628 +181 0 107 Royal Fuchsia B3633 +197 78 133 Persian Rose B3661 +160 23 100 Rebecca Rose B3695 +101 22 60 French Raspberry Red B3747 +139 46 80 Wine B3751 +139 0 65 Cranberry B3764 +131 15 43 Cranberry B3793 +177 0 71 Rose Bud B3797 +193 32 43 Red Orange B3810 +173 51 41 Canyon Red B3811 +188 0 33 Foxy Red B3813 +167 68 72 Terra Cotta B3815 +159 0 35 Miami Artillery B3845 +200 17 31 Flame Red B3865 +137 0 37 Scarlet Tanager B3876 +186 22 45 Red B3884 +177 0 46 Jefferson Red B3886 +174 0 41 Holly Berry B3887 +174 10 46 Atom Red B3891 +183 0 43 Candy Red B3893 + 96 32 45 Medoc Wine B3947 +132 28 56 Berry Wine B3962 +133 11 41 Tahoe Red B3964 +123 15 39 Cherokee Red B3965 +125 25 57 Kings Wine B3970 +115 30 60 Red Licorice B3984 +138 32 50 Dark Red S B3998 +161 141 183 Light Lilac B4114 +130 123 170 Dark Lilac B4146 +187 185 210 Lavender Azalea B4154 +193 163 187 Lilac Pink B4177 +112 57 135 Deep Violet B4305 +109 80 120 Jazz Purple B4308 +117 70 154 Dark Purple B4314 + 98 75 151 Kings Purple B4315 +122 76 158 Iris B4316 +113 94 142 Veronica Violet B4323 +112 91 165 Lakers Purple B4340 +119 63 142 Purple B4368 +131 109 140 Light Grape B4372 +181 119 159 Loganberry B4381 +187 144 190 Wild Plum B4385 +186 143 192 Lavender B4388 + 58 51 92 Concord B4615 + 91 55 140 Suns Purple B4644 + 87 58 136 Purple Aster B4647 + 99 100 166 Bright Iris B4681 + 47 40 118 Oriental Violet B4705 + 95 40 86 Pale Purple B4902 + 77 44 81 Blackberry B4913 + 72 39 55 Plum B4921 + 88 41 119 Purple Iris B4955 + 68 38 101 Ultraviolet B4956 + 63 35 88 Purple Majesty B4993 +192 255 126 Brilliant Lime B5000 +133 188 88 Lime B5037 +118 216 56 Fluorescent Green B5076 + 0 107 103 Imperial Aqua B5107 + 0 86 58 Latex Green B5126 + 0 94 54 Shamrock Green B5129 + 48 153 105 Gotcha Green B5132 + 0 134 71 Emerald B5135 + 96 179 157 Fountain Green B5142 + 46 144 93 Celtics Green B5146 +112 184 145 Sliced Lime B5157 +143 197 192 Bridal Turquoise B5160 + 0 131 110 Green B5177 + 38 140 124 Jade B5187 + 0 113 95 Alpine Teal B5199 + 31 105 82 Green Forest B5201 + 26 141 79 Kelly B5220 + 47 75 50 Holly Leaf B5225 + 0 134 81 Gator Green B5230 + 0 127 61 Bright Green B5234 + 18 143 130 Inlet Green B5274 +103 143 63 Dark Lime B5332 +105 131 66 Applemint B5343 +151 156 114 Arcadian Green B5347 +164 210 167 Mint Tint B5354 +160 178 76 Bright Green B5356 +179 209 104 Light Green B5360 +142 199 107 Lime B5365 + 92 137 76 Holly Green B5371 + 64 159 92 Plains Green B5391 +112 140 120 Cloudy Jade B5506 +144 143 117 Spanish Olive B5516 + 84 109 102 Seattle Green B5550 + 78 115 105 Gander Green B5554 + 77 102 86 Bucks Green B5558 +166 194 181 Mint B5585 + 61 68 46 Swamp Gator B5752 + 99 93 59 Olive Drab B5766 + 34 56 52 Spruce B5945 + 39 70 61 Mitchell Green B5970 + 31 57 65 Atlantic B5988 + 43 70 57 Forest Green B5992 +139 206 198 Tropical Wave B6133 + 61 160 164 Aqua B6137 + 63 159 161 Light Aqua B6182 +111 194 216 Basic Turquoise B6316 + 67 155 173 Western Sky B6319 + 54 151 178 Radiant Turquoise B6321 +171 201 202 Aqualine B6378 +155 206 208 Aqua Lake B6384 + 0 83 87 Dark Teal B6600 + 0 100 104 Azure B6632 + 55 165 166 Grizzly Turquoise B6640 + 13 150 134 Parrot B6648 + 34 151 144 Tender Teal B6662 + 0 129 136 Calypso Green B6667 + 0 120 116 Bright Peacock B6676 + 0 82 99 Teal Haze B6686 + 0 121 138 Hornets Teal B6698 + 92 139 140 Sea Green B6792 + 33 151 194 Blue B6928 + 0 103 149 Danish Teal B6937 + 23 57 75 Dark Teal B6949 + 76 108 129 Bluestone B6970 + 0 110 137 Oasis B6976 +189 202 214 Misty Fog B7061 +106 130 159 Limoges Blue B7104 + 90 130 168 Dale Blue B7115 + 98 118 156 Slate Blue B7116 +173 187 209 Ice Blue B7122 + 88 145 181 Blue B7126 +156 173 206 Scalloped Blue B7154 +165 192 211 Blue Baron B7164 +145 182 206 Light Blue B7168 +125 149 186 Blue B7178 +136 175 191 Blue B7185 +163 205 222 Bahama Blue B7186 +134 163 192 Sky Blue B7192 + 33 81 165 Morning Glory B7300 + 40 85 165 Minnesota Blue B7302 + 32 85 169 Bright Wedgewood B7303 + 34 96 171 Magic Blue B7306 + 32 68 140 Blue Bird B7308 + 36 61 132 Blue Twirl B7320 + 46 52 116 Calypso B7321 + 43 55 133 Chow Blue B7323 + 42 65 112 Navy B7328 + 45 53 95 Blue Nugget B7332 + 36 51 97 Blue Cobalt B7337 + 43 86 141 Blue Dusk B7344 + 92 114 168 Cavaliers Blue B7348 + 33 73 121 Maverick B7352 + 17 81 145 Warrior Blue B7358 + 0 74 138 Surf B7360 + 10 102 175 Too Blue B7362 + 0 117 168 Pretty Blue B7374 + 68 119 187 Knicks Blue B7377 + 66 132 194 Indian Sky B7386 + 49 98 160 Empire Blue B7392 + 77 109 151 Medium Blue B7394 + 85 124 147 Slate Grey B7537 + 79 101 124 Wedgewood B7542 + 83 98 129 Williamsburg B7559 + 33 80 122 Lake Blue B7568 + 34 61 89 Dragon Fly B7571 + 67 107 156 Cornflower B7576 + 49 53 83 Blue Shadow B7926 + 44 45 58 Nightblu Arctic B7951 + 40 46 68 French Navy B7968 + 41 46 79 Blueberry B7972 + 43 50 80 Colonial Blue B7983 + 43 48 67 Legion Blie B7984 + 41 46 65 Flag Blue B7990 + 48 47 63 Navy B7995 +188 172 149 Straw B8102 +193 185 162 Sand B8104 +186 180 165 Sparrow B8105 +226 220 205 Sand Dune B8129 +222 212 192 Silk Beige B8146 +211 204 188 Champagne B8148 +199 205 206 Pearl B8152 +223 210 182 Champagne Mist B8165 +198 182 141 Vegas Gold B8195 +216 220 215 Natural B8256 +233 234 215 Ivory B8257 +225 230 231 Cream B8262 +186 167 129 Cane B8321 +174 161 146 Honey Fudge B8332 +156 153 139 Light Sage B8338 +184 157 122 Dark Cream B8355 +166 146 130 Taupe Beige B8364 +187 168 145 Tan B8405 +178 152 114 Beige B8414 +166 140 114 Camel B8425 +141 107 75 Toast B8500 +122 116 103 Mushroom B8511 +136 111 89 Doeskin B8525 +131 101 97 Dark Brown B8586 +110 92 67 Bagby Green B8666 +140 94 71 Rancho Brown B8691 +154 49 35 Red Bittersweet B8701 +152 64 60 Rust B8705 +106 73 57 Clayrust B8731 +110 63 47 Emberlite B8765 + 78 51 47 Cassis Brown B8792 + 66 49 45 Brown Mule B8936 + 63 57 47 Dark Olive B8944 + 62 52 51 Moghar Brown B8972 + 73 54 52 Walnut B8994 +187 196 201 Spurs Silver B9119 +138 143 144 Platinum B9126 +176 181 178 Heather Grey B9133 +170 176 184 Grey Ghost B9143 +145 158 165 Grey Opal B9158 +188 192 187 Winter Sage B9165 +175 187 198 Soft Grey B9352 +172 172 160 Chino B9359 +152 162 172 Nickel B9382 + 93 96 107 Grey Blue B9621 +135 132 136 Penguin Grey B9632 + 81 80 83 Granite B9636 + 96 95 105 Western Grey B9639 +108 115 133 Desma Blue B9650 + 44 46 48 Black B9720 + 61 62 71 Soot B9901 diff --git a/inkstitch/palettes/InkStitch Coats Sylko.gpl b/inkstitch/palettes/InkStitch Coats Sylko.gpl new file mode 100644 index 0000000..5096015 --- /dev/null +++ b/inkstitch/palettes/InkStitch Coats Sylko.gpl @@ -0,0 +1,403 @@ +GIMP Palette +Name: Ink/Stitch: Coats Sylko +Columns: 4 +# RGB Value Color Name Number +236 240 255 White B1003 +233 238 242 Pale Silver B1008 +230 234 178 Bright Yellow B1156 +242 233 158 PaleYellow B1171 +218 239 168 Dark Olive Green B1178 +231 239 112 Pale Yellow B1181 +237 233 127 Medium Yellow B1182 +224 233 128 Pale Yellow B1183 +225 255 159 Dark Olive Green B1190 +222 228 91 Pale Yellow B1195 +200 255 78 Fluo Yellow / Green B1197 +213 231 44 Dark Green B1198 +210 228 67 Dark Green B1199 +231 211 47 Pale Beige B1214 +236 236 44 Pale Yellow B1234 +245 220 0 Gold / Yellow B1237 +253 251 0 Gold / Yellow B1238 +239 231 0 Gold / Yellow B1239 +232 255 69 Gold / Yellow B1220 +232 195 50 Fluo Yellow B1222 +232 202 112 Pale Yellow B1233 +237 215 144 Pale Yellow B1235 +241 215 102 Cream B1236 +227 218 0 Fluo Orange B1240 +231 183 65 Mustard Yellow B1256 +245 193 0 Fluo Yellow B1261 +230 168 45 Gold / Yellow B1265 +231 185 34 Mustard Yellow B1269 +233 157 15 Gold / Orange B1270 +230 157 0 Dark Gold / Orange B1271 +239 161 0 Dark Gold / Orange B1273 +230 176 0 Dark Gold / Yellow B1282 +235 187 0 Fluo Yellow / Green B1284 +241 190 0 Dark Green B1286 +255 212 0 Medium Yellow B1290 +255 188 0 Fluo Orange B1293 +237 188 134 Peach B1328 +237 220 179 Medium Yellow B1339 +234 210 178 Pale Peach B1345 +240 216 151 Pale Yellow B1360 +222 192 124 Pale Gold B1371 +242 191 132 Peach B1394 +205 153 51 Gold B1413 +189 139 33 Gold B1415 +200 134 41 Gold / Orange B1418 +204 151 0 Cream B1431 +230 183 70 Yellow / Gold B1423 +232 160 47 Gold / Orange B1432 +198 160 31 Gold B1435 +180 163 0 Green / Gold B1439 +175 146 47 Green / Gold B1464 +238 242 255 White B1719 +244 132 106 Salmon Pink B2120 +255 71 92 Fluo Pink B2129 +217 181 150 Pale Peach B2140 +255 141 64 Orange B2146 +250 221 207 Pale Pink B2153 +240 162 146 Salmon Pink B2158 +235 183 153 Peach B2159 +238 210 191 Cream / Pink B2160 +197 36 32 Red B2224 +225 66 37 Orange B2225 +218 81 40 Orange B2244 +212 53 18 Red B2245 +220 92 76 Dark Salmon Pink B2246 +255 65 72 Fluo Pink B2252 +209 85 85 Dark Salmon Pink B2256 +207 63 77 Dark Salmon Pink B2275 +150 78 47 Medium Brown B2285 +214 60 90 Dark Pink B2291 +160 101 46 Tan Brown B2292 +156 94 63 Medium Brown B2298 +253 51 99 Fluo Pink B2299 +193 116 68 Copper B2310 +188 138 97 Fawn B2316 +175 132 97 Fawn B2328 +136 86 60 Dark Brown B2330 +144 104 76 Medium Brown B2351 +181 127 51 Gold B2358 +168 140 82 Gold B2367 +171 105 28 Tan Brown B2375 +250 113 17 Fluo Orange B2428 +226 79 0 Orange B2431 +255 72 32 Fluo Orange B2450 +220 92 58 Orange B2452 +217 88 44 Medium Orange B2458 +202 90 41 Rust B2463 +214 105 58 Copper / Orange B2464 +232 145 0 Dark Yellow B2470 +220 109 0 Gold / Orange B2485 +232 158 81 Pale Gold B2488 +255 107 32 Fluo Orange B2494 +234 241 243 Ivory B2704 +229 235 236 Ivory B2707 +239 145 168 Medium Pink B3105 +255 123 165 Medium Pink B3114 +242 176 203 Pale Pink B3135 +241 168 173 Pale Pink B3137 +242 183 171 Pale Salmon Pink B3146 +219 172 164 Pale Salmon B3154 +235 153 181 Medium Pink B3160 +214 111 142 Dark Pink B3163 +208 163 172 Pale Pink B3164 +235 187 207 Pale Pink B3167 +238 148 193 Medium Pink B3168 +239 216 221 Pale Pink B3170 +244 187 212 Pale Pink B3174 +243 199 229 Pale Pink B3178 +135 99 109 Pink / Brown B3319 +171 87 116 Dusky Pink B3364 +131 35 68 Maroon B3375 +134 31 71 Maroon B3377 +239 79 127 Fluo Pink B3432 +222 75 113 Medium Pink B3435 +193 67 92 Dusky Pink B3439 +255 37 105 Dark Fluo Pink B3440 +194 30 84 Dark Pink B3456 +185 0 74 Dark Pink B3483 +208 0 95 Dark Pink B3487 +213 39 93 Dark Pink B3488 +157 45 127 Dark Purple B3610 +196 0 105 Dark Pink B3632 +203 39 118 Dark Pink B3645 +226 105 157 Medium Pink B3650 +255 111 163 Fluo Medium Pink B3654 +213 72 141 Dark Pink B3660 +204 59 134 Dark Pink B3670 +217 82 150 Medium Pink B3671 +210 88 157 Medium Pink B3672 +197 87 157 Medium Pink B3674 +120 44 128 Purple B3684 +183 0 108 Dark Pink B3690 +166 45 111 Dark Pink B3698 +144 0 48 Dark Red B3796 +159 0 32 Dark Red B3831 +170 0 41 Dark Rust Red B3845 +211 70 78 Dark Salmon B3869 +193 26 51 Medium Red B3872 +186 0 36 Medium Red B3884 +175 0 41 Dark Rust Red B3891 +180 0 40 Medium Red B3898 +171 0 38 Dark Red B3928 + 95 31 40 Dark Maroon B3949 +101 31 55 Dark Maroon B3951 +103 28 64 Dark Maroon B3955 +127 6 45 Dark Maroon B3960 +111 30 50 Dark Maroon B3976 +122 45 55 Pale Maroon B3979 +133 22 57 Maroon B3989 +150 32 46 Medium Rust Red B3992 +156 151 214 Lilac B4117 +136 126 160 Dark Lilac B4143 +169 162 210 Lilac B4144 +208 193 218 Pale Lilac B4155 + 82 52 143 Dark Violet B4306 +103 75 157 Medium Purple B4315 +129 68 174 Medium Purple B4322 +105 92 180 Violet B4326 +171 144 187 Dark Lilac B4341 +157 89 163 Medium Purple B4347 +150 92 175 Medium Purple B4355 +197 170 210 Lilac B4357 +126 28 111 Dark Purple B4367 +129 49 142 Dark Purple B4369 + 99 0 110 Dark Purple B4370 +121 57 130 Dark Purple B4374 +233 182 223 Pale Pink B4398 +238 167 209 Medium Pink B4399 + 44 55 135 Dark Royal Blue B4640 + 61 39 133 Dark Royal Blue B4646 + 74 39 143 Dark Violet B4651 + 47 66 145 Medium Royal Blue B4653 + 87 33 139 Dark Purple B4654 +126 125 200 Violet B4686 +126 146 194 Medium Blue B4687 +103 109 184 Violet B4688 + 87 52 72 Dark Maroon B4910 + 99 52 89 Dark Maroon B4916 +101 62 104 Dark Purple B4918 + 66 50 84 Dark Navy B4942 + 91 34 121 Dark Purple B4955 + 46 42 89 Dark Navy B4972 +140 197 88 Medium Green B5037 + 0 86 62 Dark Green B5126 + 0 121 68 Medium Green B5129 + 0 115 105 Dark Aqua Green B5148 + 95 202 155 Pale Green B5151 +154 226 203 Pale Mint Green B5163 + 0 127 110 Jade Green B5170 + 31 125 108 Jade Green B5185 + 0 96 86 Dark Green B5193 + 0 140 137 Jade Green B5206 + 29 77 67 Dark Green B5209 + 0 96 62 Dark Green B5219 + 0 102 74 Dark Green B5226 + 0 123 83 Medium Green B5231 + 0 78 52 Dark Green B5232 + 4 87 65 Dark Green B5235 + 0 97 57 Dark Green B5236 + 0 88 51 Dark Green B5237 + 47 90 57 Lime B5238 + 0 139 83 Medium Green B5241 + 52 167 120 Pale Jade B5242 +132 204 155 Mint Green B5245 + 29 146 73 Medium Green B5248 +168 207 186 Pale Jade B5249 + 0 135 81 Medium Green B5250 +171 208 179 Pale Mint Green B5251 + 0 141 112 Medium Jade Green B5281 +119 110 36 Olive Green B5310 +127 125 61 Olive Green B5316 +172 188 78 Lime B5318 +183 206 0 Dark Green B5320 +100 128 57 Bright Green B5343 +102 125 45 Lime B5348 +158 174 132 Olive Green B5351 +166 183 47 Lime B5359 +168 203 100 Lime B5364 +181 226 123 Lime B5372 +123 186 27 Medium Green B5373 +150 153 83 Olive Green B5374 +124 172 104 Bright Green B5377 +116 217 74 Bright Green B5382 +116 187 61 Medium Green B5384 + 65 116 53 Medium Grey / Green B5387 + 76 166 100 Medium Green B5391 + 82 174 95 Medium Green B5395 + 76 100 77 Kahki Green B5526 +135 142 123 Dark Green B5542 + 79 73 43 Dark Olive Green B5751 + 59 67 45 Pale Yellow / Green B5752 + 71 74 51 Dark Bottle Green B5757 + 89 97 44 Pale Green B5764 + 94 76 37 Dark Olive Green B5771 +117 105 44 Olive Green B5772 +100 96 44 Olive Green B5773 + 78 64 45 Dark Brown B5917 + 39 64 68 Dark Green B5929 + 57 66 54 Fluo Lime B5939 + 47 71 51 Medium Yellow / Green B5962 + 57 91 79 Dark Jade Green B5989 + 44 72 56 Bright Green / Yellow B5992 + 61 163 172 Turquoise Blue B6109 +139 205 212 Pale Turquoise B6124 + 21 157 168 Dark Turquoise Blue B6136 +146 205 204 Pale Aqua Green B6153 +170 226 214 Pale Green B6155 + 85 180 165 Aqua Green B6160 + 82 137 187 Medium Blue B6317 + 65 171 196 Medium Turquoise B6323 +153 197 226 Pale Blue B6325 + 66 168 199 Medium Turquoise Blue B6327 +120 192 217 Pale blue B6335 + 36 148 185 Dark Turquoise Blue B6350 + 88 176 215 Medium Blue B6360 + 49 153 186 Medium Turqoise Blue B6362 +114 190 231 Medium Blue B6365 +172 199 208 Pale Blue B6380 +125 196 217 Pale Turquoise B6383 + 99 140 151 Medium Blue / Grey B6399 + 31 79 83 Dark Bottle Green B6612 + 64 125 134 Dark Aqua Green B6628 +133 203 177 Pale Green B6661 + 0 117 134 Dark Turquoise Blue B6663 + 0 117 130 Dark Aqua Green B6665 + 0 120 155 Dark Turquoise Blue B6666 + 0 127 147 Dark Aqua Green B6698 + 50 114 150 Petrol Blue B6910 + 81 161 208 Medium Blue B6938 + 0 96 161 Dark Blue B6940 + 62 163 215 Medium blue B6947 + 0 92 129 Dark Blue B6972 + 34 84 117 Dark Blue B6975 + 23 123 184 Medium Blue B6977 + 0 113 149 Medium Blue B6981 + 48 73 107 Dark Navy B6984 + 74 109 136 Petrol Blue B6998 + 0 135 172 Medium Turquoise Blue B6999 +102 119 160 Medium Blue / Purple B7404 +167 186 211 Pale Blue B7224 +155 163 200 Pale Lilac B7235 +130 168 224 Medium Blue B7406 +158 182 226 Pale Blue B7414 +137 156 184 Medium Blue / Grey B7411 +179 195 234 Pale Lilac B7263 +174 198 229 Pale Blue B7408 +153 182 223 Medium Blue / Grey B7267 +179 201 236 Pale Blue B7412 +137 160 207 Medium Blue B7416 +165 187 229 Pale Blue B7407 + 78 118 196 Royal Blue B7403 + 35 84 173 Dark Royal Blue B7402 + 34 71 145 Dark Royal Blue B7400 + 41 46 125 Dark Royal Blue B7323 +103 122 176 Medium Blue B7348 + 67 76 155 Purple B7387 + 36 87 150 Dark Royal Blue B7390 + 42 58 130 Dark Royal Blue B7401 + 42 75 161 Dark Royal Blue B7405 + 30 87 166 Royal Blue B7409 + 56 102 180 Medium Blue B7410 + 55 80 168 Dark Royal Blue B7413 + 33 53 124 Dark Royal Blue B7415 + 54 55 106 Dark Navy Blue B7422 + 40 54 97 Navy Blue B7439 + 42 51 89 Navy Blue B7440 + 42 50 94 Navy Blue B7442 + 21 67 127 Royal Blue B7444 + 67 111 173 Medium Blue B7484 + 59 109 164 Medium Blue B7491 + 50 50 75 Dark Navy B7520 + 77 90 126 Petrol Blue B7526 + 91 123 156 Medium Blue B7536 + 40 62 95 Dark Navy B7578 + 42 59 92 Dark Navy B7877 + 49 59 83 Dark Navy B7878 + 45 55 83 Dark Navy B7896 + 36 39 57 Dark Navy B7897 + 45 50 73 Dark Navy B7898 + 57 44 60 Dark Maroon B7899 + 77 80 114 Petrol Blue B7905 + 56 59 87 Dark Navy B7926 + 41 46 82 Dark Navy B7972 + 43 46 65 Dark Navy B7983 +199 186 172 Medium Beige B8105 +236 224 209 Yellow / Gold B8129 +216 206 184 Cream B8134 +195 186 172 Beige B8141 +231 233 215 Pale Beige B8143 +230 218 201 Pale Beige B8146 +208 201 175 Pale Beige B8175 +216 210 184 Cream B8180 +228 225 214 Medium Yellow B8183 +234 231 216 Ivory B8257 +168 165 104 Medium Green / Yellow B8309 +176 156 110 Gold / Beige B8314 +223 197 168 Pale Peach B8350 +210 186 156 Beige B8365 +185 160 123 Gold / Brown B8367 +160 156 144 Green / Grey B8371 +147 139 124 Fawn B8373 +164 138 123 Fawn B8376 +162 139 141 Light Brown B8378 +161 139 118 Light Brown B8393 +145 136 86 Medium Olive Green B8394 +124 98 89 Medium Brown B8619 +144 124 105 Dark Beige B8621 +102 82 71 Dark Fawn B8651 + 80 64 66 Dark Grey B8653 +174 67 48 Dark Orange / Brown B8710 +109 55 45 Dark Brown B8715 +124 82 84 Brown / Pink B8723 +116 83 70 Medium Brown B8724 +145 61 62 Dark Rust Red B8725 +162 98 96 Dark Salmon Pink B8740 +115 66 49 Dark Brown B8759 +123 73 46 Brown B8768 +106 66 43 Dark Brown B8780 + 83 51 48 Dark Brown B8792 + 79 44 34 Dark Brown B8915 + 60 51 52 Dark Grey B8921 + 63 53 57 Dark Grey B8932 + 75 48 50 Dark Maroon B8935 +165 125 59 Gold / Yellow B8974 +220 190 155 Pale Peach B8977 +190 196 207 Pale Silver B9119 +183 188 192 Medium Grey B9120 +201 204 205 Medium Silver B9123 +152 154 157 Dark Grey B9126 +212 207 214 Pale Grey / Pink B9130 +178 181 192 Medium Grey B9143 +158 159 167 Medium Grey B9148 +176 181 190 Medium Grey / Blue B9160 +159 169 172 Light Grey B9162 +204 201 199 Pale Silver B9163 +204 218 228 Pale Silver B9169 +209 226 233 Pale Silver B9172 +196 194 194 Pale Grey B9180 +160 154 154 Medium Grey B9182 +194 197 193 Pale Grey B9190 +125 115 116 Dark Grey B9342 +193 184 186 Pale Grey / Pink B9344 +165 172 188 Medium Grey B9355 +161 162 159 Medium Grey B9365 +171 179 194 Pale Grey B9369 +151 149 150 Dark Grey B9379 +120 125 144 Dark Gey B9509 +139 134 145 Dark Grey B9532 + 80 75 78 Dark Grey B9558 +103 104 110 Dark Grey B9595 +125 126 120 Green / Grey B9596 +119 116 118 Dark Grey B9608 +140 133 137 Medium Grey B9632 + 83 79 82 Dark Grey B9636 + 63 66 76 Dark Navy B9901 + 59 61 68 Dark grey B9912 + 42 46 51 Dark Grey B9914 + 78 85 99 Petrol Blue B9946 + 39 41 44 Dark Grey B9953 diff --git a/inkstitch/palettes/InkStitch DMC.gpl b/inkstitch/palettes/InkStitch DMC.gpl new file mode 100644 index 0000000..38d68bc --- /dev/null +++ b/inkstitch/palettes/InkStitch DMC.gpl @@ -0,0 +1,462 @@ +GIMP Palette +Name: Ink/Stitch: DMC +Columns: 4 +# RGB Value Color Name Number +255 255 255 White White +233 233 212 Ecru Ecru +255 255 255 White 0000 +255 236 191 Ecru 0000 +148 91 128 Lavender Very Dark 0208 +206 148 186 Lavender Dark 0209 +236 207 225 Lavender Medium 0210 +243 218 228 Lavender Light 0211 +156 41 74 Shell Pink Very Dark 0221 +219 128 115 Shell Pink Light 0223 +255 199 176 Shell Pink Very Light 0224 +255 240 228 Shell Pink Ultra Very L 0225 +143 57 38 Mahogany Very Dark 0300 +209 102 84 Mahogany Medium 0301 +188 0 97 Christmas Red Medium 0304 +255 231 109 Lemon 0307 +214 43 91 Rose Dark 0309 + 0 0 0 Black 0310 + 0 79 97 Navy Blue Medium 0311 + 58 84 103 Navy Blue Light 0312 +163 90 91 Antique Mauve Very Dark 0315 +220 141 141 Antique Mauve Medium 0316 +167 139 136 Pewter Grey 0317 +197 198 190 Steel Grey Light 0318 + 85 95 82 Pistachio Green Very Dark 0319 +138 153 120 Pistachio Green Medium 0320 +231 18 97 Christmas Red 0321 + 81 109 135 Navy Blue Very Light 0322 +188 22 65 Rose Very Dark 0326 + 61 0 103 Violet Dark 0327 +127 84 130 Blue Violet Very Dark 0333 +115 140 170 Baby Blue Medium 0334 +219 36 79 Rose 0335 + 36 73 103 Navy Blue 0336 +162 121 164 Blue Violet Medium 0340 +145 180 197 Blue Violet Light 0341 +194 36 67 Salmon Very Dark 0347 +220 61 91 Coral Dark 0349 +237 69 90 Coral Medium 0350 +255 128 135 Coral 0351 +255 157 144 Coral Light 0352 +255 196 184 Peach Flesh 0353 +189 73 47 Terra Cotta Dark 0355 +226 114 91 Terra Cotta Medium 0356 + 95 112 91 Pistachio Green Dark 0367 +181 206 162 Pistachio Green Light 0368 +243 250 209 Pistachio Green Very Light 0369 +184 138 87 Mustard Medium 0370 +196 155 100 Mustard 0371 +203 162 107 Mustard Light 0372 +157 60 39 Mahogany Dark 0400 +255 190 164 Mahogany Very Light 0402 +194 101 76 Sportsman Flsh Very D 0407 +109 95 95 Pewter Grey Dark 0413 +167 139 136 Steel Grey Dark 0414 +221 221 218 Pearl Grey 0415 +140 91 43 Hazel Nut Brown Dark 0420 +237 172 123 Hazel Nut Brown Light 0422 +151 84 20 Brown Medium 0433 +178 103 70 Brown Light 0434 +187 107 57 Brown Very Light 0435 +231 152 115 Tan 0436 +238 171 121 Tan Light 0437 +255 176 0 Lemon Dark 0444 +255 255 190 Lemon Light 0445 +179 151 143 Shell Grey Dark 0451 +210 185 175 Shell Grey Medium 0452 +235 207 185 Shell Grey Light 0453 +116 114 92 Avocado Green 0469 +133 143 108 Avocado Green Light 0470 +176 187 140 Avocado Green Very Light 0471 +238 255 182 Avocado Green Ultra Light 0472 +187 0 97 Christmas Red Light 0498 + 43 57 41 Blue Green Very Dark 0500 + 67 85 73 Blue Green Dark 0501 +134 158 134 Blue Green 0502 +195 206 183 Blue Green Medium 0503 +206 221 193 Blue Green Light 0504 + 16 127 135 Wedgewood Medium 0517 +102 148 154 Wedgewood Light 0518 +194 209 207 Sky Blue 0519 + 55 73 18 Fern Green Dark 0520 +159 169 142 Fern Green 0522 +172 183 142 Fern Green Light 0523 +205 182 158 Fern Green Very Light 0524 + 85 85 89 Ash Grey Very Light 0535 +239 214 188 Beige Brown Ultra Very Light 0543 +109 18 97 Violet Very Light 0550 +146 85 130 Violet Medium 0552 +160 100 146 Violet 0553 +243 206 225 Violet Light 0554 + 59 96 76 Jade Very Dark 0561 + 97 134 97 Jade Medium 0562 +182 212 180 Jade Light 0563 +214 230 204 Jade Very Light 0564 + 0 103 0 Moss Green Dark 0580 +151 152 49 Moss Green 0581 +128 151 132 Turquoise 0597 +208 223 205 Turquoise Light 0598 +208 57 106 Cranberry Very Dark 0600 +222 57 105 Cranberry Dark 0601 +231 84 122 Cranberry Medium 0602 +255 115 140 Cranberry 0603 +255 189 202 Cranberry Light 0604 +255 207 214 Cranberry Very Light 0605 +255 0 0 Bright Orange Red 0606 +255 91 0 Bright Orange 0608 +151 104 84 Drab Brown Very Dark 0610 +158 109 91 Drab Brown Dark 0611 +203 152 103 Drab Brown Medium 0612 +219 176 122 Drab Brown Light 0613 +162 77 52 Negro Flesh Medium 0632 +163 163 157 Beige Grey Very Dark 0640 +174 176 170 Beige Grey Dark 0642 +224 224 215 Beige Grey Medium 0644 +113 113 113 Beaver Grey Very Dark 0645 +121 121 121 Beaver Grey Dark 0646 +190 190 185 Beaver Grey Medium 0647 +202 202 202 Beaver Grey Light 0648 +213 39 86 Christmas Red Light 0666 +255 206 158 Old Gold Light 0676 +255 231 182 Old Gold Very Light 0677 +209 140 103 Old Gold Dark 0680 + 0 91 6 Chirstmas Green 0699 + 0 96 47 Christmas Green Bright 0700 + 79 108 69 Christmas Green Light 0701 + 79 121 66 Kelly Green 0702 +121 144 76 Chartreuse 0703 +165 164 103 Chartreuse Bright 0704 +245 240 219 Cream 0712 +219 55 121 Plum 0718 +200 36 43 Orange Spice Dark 0720 +255 115 97 Orange Spice Medium 0721 +255 146 109 Orange Spice Light 0722 +255 200 124 Topaz 0725 +255 224 128 Topaz Light 0726 +255 235 168 Topaz Very Light 0727 +243 176 128 Old Gold Medium 0729 +132 119 17 Olive Green Very Dark 0730 +123 119 10 Olive Green Dark 0731 +128 125 21 Olive Green 0732 +158 158 7 Olive Green Medium 0733 +186 196 5 Olive Green Light 0734 +244 195 139 Tan Very Light 0738 +244 233 202 Tan Ultra Very Light 0739 +255 131 19 Tangerine 0740 +255 142 4 Tangerine Medium 0741 +255 183 85 Tangerine Light 0742 +255 230 146 Yellow Medium 0743 +255 239 170 Yellow Pale 0744 +255 240 197 Yellow Light Pale 0745 +246 234 219 Off White 0746 +240 247 239 Sky Blue Very Light 0747 +251 227 209 Peach Flesh Light 0754 +255 177 147 Terra Cotta Very Light 0758 +249 160 146 Salmon 0760 +255 201 188 Salmon Light 0761 +232 232 229 Pearl Grey Very Light 0762 +231 249 203 Pine Green Light 0772 +247 246 248 Baby Blue Very Light 0775 +255 177 174 Pink Medium 0776 +255 199 184 Antique Mauve Very Light 0778 +181 98 46 Topaz Ultra Very Dark 0780 +181 107 56 Topaz Very Dark 0781 +204 119 66 Topaz Dark 0782 +225 146 85 Topaz Medium 0783 + 71 55 93 Cornflower Blue VeryD 0791 + 97 97 128 Cornflower Blue Dark 0792 +147 139 164 Cornflower Blue Medium 0793 +187 208 218 Cornflower Blue Light 0794 + 30 58 95 Royal Blue Dark 0796 + 30 66 99 Royal Blue 0797 +103 115 141 Delft Dark 0798 +132 156 182 Delft Medium 0799 +233 238 233 Delft PALE 0800 +123 71 20 Coffee Brown Dark 0801 + 30 130 133 Peacock Blue Dark 0806 +128 167 160 Peacock Blue 0807 +190 193 205 Delft 0809 +175 195 205 Blue Light 0813 +162 0 88 Garnet Dark 0814 +166 0 91 Garnet Medium 0815 +179 0 91 Garnet 0816 +219 24 85 Coral Red Very Dark 0817 +255 234 235 Baby Pink 0818 +248 247 221 Baby Pink Light 0819 + 30 54 85 Royal Blue Very Dark 0820 +242 234 219 Beige Grey Light 0822 + 0 0 73 Navy Blue Dark 0823 + 71 97 116 Blue Very Dark 0824 + 85 108 128 Blue Dark 0825 +115 138 153 Blue Medium 0826 +213 231 232 Blue Very Light 0827 +237 247 238 Blue Ultra Very Light 0828 +130 90 8 Golden Olive Very Dark 0829 +136 95 18 Golden Olive Dark 0830 +144 103 18 Golden Olive Medium 0831 +178 119 55 Golden Olive 0832 +219 182 128 Golden Olive Light 0833 +242 209 142 Golden Olive Very Light 0834 + 94 56 27 Beige Brown Very Dark 0838 +109 66 39 Beige Brown Dark 0839 +128 85 30 Beige Brown Medium 0840 +188 134 107 Beige Brown Light 0841 +219 194 164 Beige Brown Very Light 0842 +107 103 102 Beaver Brown Ultra Dark 0844 +153 92 48 Hazel Nut Brown Very Dark 0868 +153 92 48 Hazel Nut Brown Very Dark 0869 + 79 86 76 Pistachio Green Ultra Dark 0890 +241 49 84 Carnation Dark 0891 +249 90 97 Carnation Medium 0892 +243 149 157 Carnation Light 0893 +255 194 191 Carnation Very Light 0894 + 89 92 78 Hunter Green Very Dark 0895 +118 55 19 Coffee Brown Very Dark 0898 +233 109 115 Rose Medium 0899 +206 43 0 Burnt Orange Dark 0900 +138 24 77 Granet Very Dark 0902 + 78 95 57 Parrot Green Very Dark 0904 + 98 119 57 Parrot Green Dark 0905 +143 163 89 Parrot Green Medium 0906 +185 200 102 Parrot Green Light 0907 + 49 105 85 Emerald Green Very Dark 0909 + 48 116 91 Emerald Green Dark 0910 + 49 128 97 Emerald Green Medium 0911 +115 158 115 Emerald Green Light 0912 +153 188 149 Nile Green Medium 0913 +170 24 91 Plum Dark 0915 +171 22 95 Plum Medium 0917 +168 68 76 Red Copper Dark 0918 +180 75 82 Red Copper 0919 +197 94 88 Copper Medium 0920 +206 103 91 Copper 0921 +237 134 115 Copper Light 0922 + 86 99 100 Grey Green Very Dark 0924 + 96 116 115 Grey Green Light 0926 +200 198 194 Grey Green Light 0927 +225 224 216 Grey Green Very Light 0928 +102 122 140 Antique Blue Dark 0930 +124 135 145 Antique Blue Medium 0931 +182 186 194 Antique Blue Light 0932 + 62 59 40 Black Avocado Green 0934 + 67 63 47 Avocado Green Dark 0935 + 69 69 49 Avocado Green Very D 0936 + 73 86 55 Avocado Green Medium 0937 + 99 39 16 Coffee Brown Ultra Dark 0938 + 0 0 49 Navy Blue Very Dark 0939 + 0 162 117 Aquamarine Medium 0943 +255 206 164 Flesh Medium 0945 +244 73 0 Burnt Orange Medium 0946 +255 91 0 Burnt Orange 0947 +255 243 231 Peach Flesh Very Light 0948 +239 162 127 Sportsman Flesh 0950 +255 229 188 Flesh 0951 +170 213 164 Nile Green 0954 +214 230 204 Nile Green Light 0955 +255 109 115 Geranium 0956 +255 204 208 Gernanium Pale 0957 + 0 160 130 Sea Green Dark 0958 +171 206 177 Sea Green Medium 0959 +243 108 123 Dusty Rose Dark 0961 +253 134 141 Dusty Rose Medium 0962 +255 233 233 Dusty Rose Ultra Very L 0963 +208 224 210 Sea Green Light 0964 +206 213 176 Baby Green Medium 0966 +255 117 24 Pumpkin Light 0970 +255 106 0 Pumpkin 0971 +255 146 0 Canary Dark 0972 +255 194 67 Canary BRT 0973 +158 67 18 Golden Brown Dark 0975 +246 141 57 Golden Brown Medium 0976 +255 164 73 Golden Brown Light 0977 + 58 82 65 Forest Green Very Dark 0986 + 83 97 73 Forest Green Dark 0987 +134 145 110 Forest Green Medium 0988 +134 153 110 Forest Green 0989 + 47 91 73 Aquamarine Dark 0991 +146 183 165 Aquamarine 0992 +192 224 200 Aquamarine Light 0993 + 0 123 134 Electric Blue Dark 0995 +170 222 225 Electric Blue Medium 0996 +123 119 17 Khaki Green Dark 3011 +181 170 89 Khaki Green Medium 3012 +204 196 129 Khaki Green Light 3013 +115 91 93 Brown Grey Very Dark 3021 +172 172 170 Brown Grey Medium 3022 +198 190 173 Brown Grey Light 3023 +210 208 205 Brown Grey Very Light 3024 + 84 56 23 Mocha Brown Very Dark 3031 +188 156 120 Mocha Brown Medium 3032 +239 219 190 Mocha Brown Very Light 3033 +190 155 167 Antique Violet Medium 3041 +225 205 200 Antique Violet Light 3042 +216 151 105 Yellow Beige Dark 3045 +229 193 139 Yellow Beige Medium 3046 +255 236 211 Yellow Beige Light 3047 + 85 73 0 Green Grey Dark 3051 +137 141 114 Green Grey Medium 3052 +187 179 148 Green Grey 3053 +194 101 76 Dessert Sand 3064 +233 233 223 Beaver Grey Very Light 3072 +255 255 220 Golden Yellow Very Light 3078 +202 226 229 Baby Blue Light 3325 +255 157 150 Rose Light 3326 +188 64 85 Salmon Dark 3328 +255 123 103 Apricot Medium 3340 +255 172 162 Apricot 3341 + 97 100 82 Hunter Green Dark 3345 +120 134 107 Hunter Green 3346 +128 152 115 Yellow Green Medium 3347 +225 249 190 Yellow Green Light 3348 +201 79 91 Dusty Rose Ultra Dark 3350 +255 214 209 Dusty Rose Light 3354 + 96 95 84 Pine Green Dark 3362 +116 127 96 Pine Green Medium 3363 +161 167 135 Pine Green 3364 + 83 37 16 Black Brown 3371 +231 79 134 Plum Light 3607 +247 152 182 Plum Very Light 3608 +255 214 229 Plum Ultra Light 3609 +161 53 79 Mauve Dark 3685 +203 78 97 Mauve 3687 +250 151 144 Mauve Medium 3688 +255 213 216 Mauve Light 3689 +255 85 91 Melon Dark 3705 +255 128 109 Melon Medium 3706 +254 212 219 Melon Light 3708 +230 101 107 Salmon Medium 3712 +253 229 217 Salmon Very Light 3713 +255 211 212 Dusty Rose Very Light 3716 +184 75 77 Shell Pink Dark 3721 +184 89 88 Shell Pink Medium 3722 +195 118 123 Antique Mauve Dark 3726 +255 199 196 Antique Mauve Light 3727 +209 93 103 Dusty Rose Very Dark 3731 +255 154 148 Dusty Rose 3733 +156 125 133 Antique Violet Dark 3740 +235 235 231 Antique Violet Very L 3743 +149 102 162 Blue Violet Dark 3746 +230 236 232 Blue Violet Very Light 3747 + 12 91 108 Antique Blue Very Dark 3750 +194 209 206 Antique Blue Very Light 3752 +237 247 247 Ant. Blue Ultra Very Light 3753 +158 176 206 Baby Blue 3755 +248 248 252 Baby Blue Ultra Very Light 3756 +102 142 152 Wedgewood 3760 +227 234 230 Sky Blue Light 3761 + 24 128 134 Peacock Blue Very Dark 3765 + 24 101 111 Peacock Blue Light 3766 + 92 110 108 Grey Green Dark 3768 +255 250 224 Flesh Very Light 3770 +173 83 62 Negro Flesh 3772 +231 134 103 Sportsman Flesh Medium 3773 +255 220 193 Sportsman Flesh Very L 3774 +221 109 91 Mahogony Light 3776 +191 64 36 Terra Cotta Very Dark 3777 +237 122 100 Terra Cotta Light 3778 +255 177 152 Ter. Cotta Ultra Very L 3779 +113 71 42 Mocha Brown Dark 3781 +206 175 144 Mocho Brown Light 3782 +139 109 115 Brown Grey Dark 3787 +140 117 109 Beige Grey Ultra Dark 3790 + 81 76 83 Pewter Grey Very Dark 3799 +255 44 0 Dark Melon Very 3801 + 9 145 160 Antique Mauve Very Dark 3802 +161 0 72 Mauve Dark 3803 +242 24 121 Cyclamen Pink Dark 3804 +255 38 135 Cyclamen Pink 3805 +242 121 175 Cyclamen Pink Light 3806 +119 89 179 Cornflower Bleu 3807 + 0 107 107 Turquoise Ultra Very Dark 3808 + 0 153 153 Turquoise Very Dark 3809 + 0 191 191 Turquoise Dark 3810 +204 255 255 Turquoise Very Light 3811 + 83 166 130 Seagreen Very Dark 3812 +195 217 207 Bleu Green Light 3813 + 70 140 110 Aquamarine 3814 + 98 140 122 Celadon Green Dark 3815 +143 191 171 Celadon Green 3816 +182 242 216 Celadon Green Light 3817 + 0 107 61 Emarald Green Ultra Very Dark 3818 +206 244 7 Moss Green Light 3819 +255 242 128 Straw Dark 3820 +255 234 51 Straw 3821 +255 242 128 Straw Light 3822 +255 250 204 Pale Yellow Ultra 3823 +255 198 140 Apricot Light 3824 +255 211 166 Pale Pumpkin 3825 +191 120 48 Golden Brown 3826 +255 204 128 Pale Golden Brown 3827 +191 157 105 Hazelnut Brown 3828 +204 163 102 Old Gold Very Dark 3829 +179 82 18 Terra Cotta 3830 +230 0 102 Raspberry Dark 3831 +204 51 119 Raspberry Medium 3832 +255 140 191 Raspberry Light 3833 +138 69 138 Grape Dark 3834 +166 83 166 Grape Medium 3835 +204 163 204 Grape Light 3836 +153 0 153 Lavender Ultra Dark 3837 +128 96 191 Lavender Bleu Dark 3838 +105 127 191 Lavender Bleu Medium 3839 +207 212 230 Lavender Bleu Light 3840 +220 229 250 Pale Baby Bleu 3841 + 0 102 179 Wedgwood Dark 3842 + 77 121 255 Electric Bleu 3843 + 23 173 230 Turquoise Dark Bright 3844 + 46 179 230 Turquoise Medium Bright 3845 +128 220 255 Turquoise Light Bright 3846 + 11 115 115 Teal Green Dark 3847 + 0 153 153 Teal Green Medium 3848 +110 173 172 Teal Green Light 3849 + 14 140 86 Green Dark Bright 3850 +104 199 160 Green Light Bright 3851 +255 214 0 Straw Very Dark 3852 +255 165 13 Autumn Gold Dark 3853 +255 181 105 Autumn Gold Medium 3854 +255 236 191 Autumn Gold Light 3855 +255 226 191 Mahogany Ultra Very Light 3856 +153 77 0 Rosewood Dark 3857 +166 96 25 Rosewood Medium 3858 +217 141 65 Rosewood Light 3859 +166 122 58 Cocoa 3860 +166 129 91 Cocao Light 3861 +166 104 41 Mocha Beige Dark 3862 +191 134 77 Mocha Beige Medium 3863 +217 174 130 Mocha Beige Light 3864 +255 255 242 Winter White 3865 +245 240 219 Mocha Brown Ultra Very Light 3866 +138 55 59 Raspberry Very Dark 0777 +242 188 197 Dusty Rose Very Light 0151 +159 56 69 Dusty Rose Ultra Very Dark 0150 +207 162 150 Shell Pink Medium Light 0152 +222 188 217 Violet Very Light 0153 + 77 46 61 Grape Very Dark 0154 +139 154 197 Blue Violet Medium Light 0156 +144 139 195 Blue Violet Medium Dark 0155 +171 194 222 Cornflower Blue Very Light 0157 + 70 80 130 Cornflower Blue Medium V 0158 +189 219 230 Blue Ultra Very Light 0162 + 44 73 111 Baby Blue Ultra Very Dark 0803 + 65 130 83 Jade 0505 + 86 149 113 Celadon Green Medium 0163 +159 204 141 Forestgreen Light 0164 +218 216 120 MOSS Green Very Light 0165 +191 187 32 Moss Green Medium Light 0166 +159 132 71 Yellowbeige Very Dark 0167 +236 191 60 Topaz 0728 +243 200 182 Apricot Very Light 0967 +232 181 143 Terra Cotta Ultra Very Light 3771 +109 87 72 Cocoa Dark 0779 +255 255 255 White 0001 +167 180 205 Gray Blue Light 0159 +130 144 174 Gray Blue Medium 0160 +102 117 148 Gray Blue 0161 +180 195 193 Pewter Very Light 0168 +139 154 148 Pewter Light 0169 +255 255 255 Snow White(B5200) 5200 diff --git a/inkstitch/palettes/InkStitch Embroidex.gpl b/inkstitch/palettes/InkStitch Embroidex.gpl new file mode 100644 index 0000000..06d75f7 --- /dev/null +++ b/inkstitch/palettes/InkStitch Embroidex.gpl @@ -0,0 +1,262 @@ +GIMP Palette +Name: Ink/Stitch: Embroidex +Columns: 4 +# RGB Value Color Name Number +144 86 50 Warm Toffee 2161 +107 73 58 Peach Spice 2286 +170 92 55 Pumpkin Pie Spice 2175 + 95 73 60 Dusky Salmon 2160 + 88 61 49 Rosy Brick 2052 +175 91 62 Rusty Brick 2181 + 93 65 50 Metallic Copper 2024 +105 68 43 Uncertain Orange 2053 +105 68 44 Orange Sunrise 2048 +130 66 50 Wild Salmon 2007 +203 89 63 Orange Glow 2176 +136 71 51 Orange Sherbert 2047 +145 76 50 Dayglow Orange 2153 +244 116 53 Pumpkin 2051 +233 125 73 Pumpkin Ice 2865 +131 97 68 Salmon Rush 2173 +106 80 49 Shades of Melon 2050 +131 106 53 Apricot Dawn 2006 +148 104 52 Orange Delight 2157 +133 104 54 Cantaloupe 2022 +146 103 39 Apricot Glow 2156 +210 139 83 Meskmelon Orange 2049 +176 116 114 Dawn Pink 2033 +101 98 102 Rosy Beige 2032 +111 98 94 Chocolate Cream 2122 +197 128 107 Tangerine Peach 2046 +116 95 86 Rose Gold 2821 +221 159 120 Antique Rose 2404 +140 124 115 Dainty Pink Brush 2178 +118 120 112 Rose Beige 2171 +120 124 111 Beige Blush 2117 +115 124 103 Warm Beige 2158 +130 163 96 Spring Yellow 2018 +143 153 96 Pineapple Ice 2155 +146 145 68 Pale Tangerine 2020 +122 130 68 Lemon Sherbet 2005 +199 166 98 Lemon Ice 2017 +208 175 91 Hint of Gold 2019 +170 140 82 Butterscotch 2025 +106 107 58 Dk. Avacodo 2106 +163 125 80 Butter Taffy 2125 +219 153 68 Sunrise Gold 2021 +247 144 75 Bright Persimmon 2403 +211 157 137 Pale Rose 2164 +196 160 144 Warm Almond 2172 +213 174 155 Chocolate Milk 2120 +178 154 138 Sphinx 2137 +160 144 126 Creamy Beige 2119 +174 148 116 Desert Morning 2274 +171 140 109 Apricot Blush 1914 +180 139 101 Summer Tan 2174 +174 134 88 Daybreak Apricot 2014 +150 115 72 Gold Wire 2128 +120 91 56 Bright Penny 2278 +147 108 89 Mauve 2163 +131 108 75 Rosy Ecru 2121 +139 112 92 Cafe au Lait 2075 + 98 78 47 Dark Bronze 2030 +103 84 52 Antique Gold 2028 +117 93 76 Pale Mauve 2295 +114 87 60 Light Brown 2132 +127 97 60 Copper Penny 2289 +124 80 54 Pecan Brown 2291 +136 85 52 Metallic Bronze 2029 + 80 57 38 Aztec Gold 2124 +139 79 100 Plum 2040 +104 52 74 Wine 2058 + 85 42 72 Dark Claret 2059 +108 73 120 Dark Lilac 2083 + 85 53 89 Royal Purple 2084 + 52 41 62 No Doubt Purple 2210 + 98 69 73 Pale Grape 2815 + 67 41 51 Dark Plum 2085 + 94 58 62 Amethyst Pink 2060 + 96 30 33 Burgundy 2056 + 78 31 38 Rich Burgundy 2055 + 69 35 45 Dusky Burgandy 2057 + 81 47 55 Fudge Delight 2186 +121 62 55 Dusty Pink 2037 +147 78 63 Desert Sandstone 2131 +149 68 44 Bright Penny 2180 +115 66 49 Copper Wire 2126 +125 56 41 Walnut Brown 2290 +127 68 55 Brick Sparkle 2127 +100 70 56 Silver Brown 2130 + 92 54 48 Cocoa Brown 2280 +137 108 124 Mulberry 2294 +136 114 140 Concord Grape 2080 +139 88 134 Bright Purple 2081 +165 117 178 Purple Twilight 2082 +173 137 155 French Lilac 2079 +164 136 168 Lavender 2078 +167 146 179 Lilac Gray 2077 +153 143 196 Lavender Mist 2202 + 86 82 119 Purple Cloud 2208 + 64 53 69 Purple Smoke 2086 + 70 58 82 Indigo 2305 + 90 79 95 Plum Delight 2931 +120 108 121 Twilight Lilac 2203 +143 135 153 Ghost Gray 2205 +170 172 187 Summer Rainstorm 2143 +153 155 180 Blue Gray 2063 +128 141 180 Dusky Blue 2065 +129 157 180 Summer Sky 2189 + 82 63 54 Old Pewter 2145 + 83 62 49 Traditional Brown 2134 + 79 49 43 Rich Brown 2283 + 71 42 37 Dark Brown 2133 +168 210 125 Elfin Green 2241 +168 197 140 Lime Green 2003 +165 207 155 Spring Garden Green 2245 +155 186 157 Powder Green 2236 +147 159 141 Dark Seafoam Green 2225 +137 173 185 True Aqua 2090 +131 166 171 Pistachio Green 2223 +105 169 159 True Turquoise 2096 + 95 148 127 Real Teal 2214 +108 132 129 Pale Aqua 2089 + 80 170 141 Bright Turquoise 2104 + 76 142 144 Standalone Teal 2217 + 44 90 98 Bright Teal 2220 + 52 92 121 Metallic Teal 2221 + 60 95 117 Blue Assertion 2232 + 71 96 131 Dark Topaz 2312 + 71 96 130 Brilliant Blue 2231 + 73 141 173 Dark Aquamarine 2233 +102 130 176 Bright Sky Blue 2066 +114 137 177 Blue Bonnet Blue 2190 +152 170 203 Dapple Gray 2207 +135 132 112 Light Pewter 2249 +122 123 88 Covert Green 2300 +130 126 101 Spanish Moss 2261 + 77 75 67 Charcoal Shadow 2147 + 77 92 97 Smokey Teal 2198 + 74 101 124 Stormy Teal 2215 + 71 78 92 Dark Gray 2296 + 43 59 70 Dark Teal 2200 + 64 78 88 Stormy Cloud Blue 2062 + 62 65 81 Twilight Night 2206 + 52 55 73 Bold Amethyst 2209 + 58 61 78 Blueberry 2088 + 51 69 110 Navy Blue 2071 + 37 60 119 Twilight Blue 2067 + 45 58 89 Little Boy Blue 2196 + 42 56 85 Sapphire Blue 2069 + 32 51 85 Blue Willow 2199 + 43 58 95 Wild Larkspur 2194 + 58 71 104 Charcoal Night 2201 + 36 28 44 Eggplant 2901 + 41 47 68 India Ink Blue 2070 +128 122 96 Lichen Green 2264 +138 143 113 Gray Green 2111 +146 160 101 Dark Moss Green 2246 +138 186 88 Spring Green 2101 +169 184 81 Neon Green 2001 +161 184 107 Mint Green 2002 +125 166 104 Bright Grass Green 2015 +125 150 81 Leaf Green 2100 + 97 104 73 Fresh Mint Green 2260 + 83 121 58 Herb Garden Green 2242 + 96 117 85 Pea Green 2099 + 94 158 96 Sunlit Meadow Green 2110 + 87 144 96 Irish Green 2240 +103 171 109 Kelly Green 2102 +114 172 95 Grass Green 2004 + 65 70 64 Deep Water Green 2114 + 80 85 111 Slate Blue 2092 + 85 98 130 Silver Sky 2191 + 62 81 132 Royal Blue 2068 + 69 89 156 Faded Denim Blue 2197 + 40 66 85 Stained Glass Blue 2230 + 63 75 97 Cadet Blue 2087 +154 147 137 Icicle 2297 +151 143 143 Silver Blue 2146 +150 138 141 Platinum Ice 2299 +149 143 148 GS Gray 2141 +113 115 117 Sea Spray Green 2061 +120 118 116 Smoke 2276 +143 129 125 Cinder 2138 +155 148 137 Light Sage 2136 +151 150 138 Smoky Green 2098 +120 122 115 Mint Ice 2188 +143 146 138 Pale Moss 2298 +173 174 154 Glacier Green 2224 +154 154 126 Silver Patina 2265 +171 176 124 Hint of Celery 2154 +135 152 110 Forest Green 2234 +132 164 115 Pale Green 2238 +144 171 132 Moss Green 2235 + 52 100 94 Dark Turquoise 2097 + 74 137 116 Holly Green 2244 + 66 126 102 Shamrock Green 2103 + 69 108 92 Leprechaun Green 2109 + 68 76 69 Brilliant Green 2106 +168 152 137 Stark White 2271 +192 178 167 First Snowfall White 2149 +178 166 160 Heirloom Rose / Beige 2140 +184 173 164 Foggy Morning Blue 2187 +194 176 173 Adobe Brick 2255 +187 152 141 Golden Sands 2170 +163 144 130 Woodsmoke 2293 +179 154 129 White Shadow 2115 +200 175 139 Cloud White 2272 +204 183 139 White Gold 2259 +201 197 147 Sandy Shore 2118 +199 192 135 Rich Vanilla 2016 +170 160 116 Sun Washed White 2116 + 81 88 81 Oak Green 2250 + 62 75 64 Dark Forest Green 2105 + 65 68 58 Dark Pewter 2252 + 51 56 52 Ash Green 2251 + 58 61 50 Hunter Green 2405 + 42 54 44 Shadowy Forest Green 2108 + 35 47 51 Black Forest Green 2268 + 35 39 54 Midnight Sky Blue 2072 + 98 87 82 Battleship Gray 2144 +107 94 82 Mountain Waterfall 2277 +110 93 61 Green Smoke 2113 +120 100 73 Teak 2129 +128 111 90 Beige Smoke 2123 +120 106 92 Medium Taupe 2292 + 78 59 48 Medium Gray 2302 + 67 62 53 Dark Taupe 2281 + 76 68 63 Dark Brown 2135 + 60 54 62 Stormy Waters 2148 + 49 53 65 Paving Stone 2304 + 52 51 54 Inky Midnight 2074 + 67 56 57 Black Walnut 2285 + 67 56 56 Genuine Brown 2212 + 47 34 29 Coffee Brown 2284 + 51 45 43 Dull Black 2306 + 35 35 33 Dark Charcoal 2150 +127 54 47 Old Brick Red 2182 +173 51 56 Pink With Attitude 2183 +191 57 54 Raspberry Ice 2319 +209 61 52 Strawberry Delight 2406 +194 81 81 Dark Rose 2168 +118 82 92 Dusty Rose 2834 +145 69 82 Crimson 2042 +148 61 106 Bright Magenta 2041 +182 117 152 Blueberry Cream 2204 +191 53 77 Dark Crimson 2044 +169 64 77 Ruby 2043 +173 70 102 Peppermint Stick Pink 2167 +172 57 90 Cranberry Red 2184 +195 83 107 Strawberry Frappe 2269 +196 94 90 Candy Apple Red 2185 +219 87 95 Bright Rose Pink 2010 +212 113 114 Candy Cane Pink 2166 +207 110 111 Cherry Blossom Pink 2034 +246 149 157 Heirloom Pink 2009 +232 177 174 Breath of Lilac 2076 +247 155 139 Bright Pink 2038 +246 148 140 Rose Delight 2179 +247 148 138 Baby Doll Pink 2036 +226 139 134 Cotton Candy Pink 2165 +233 139 139 Honest Pink 2035 +196 174 171 Shadow on Snow 2142 diff --git a/inkstitch/palettes/InkStitch Emmel.gpl b/inkstitch/palettes/InkStitch Emmel.gpl new file mode 100644 index 0000000..908ab78 --- /dev/null +++ b/inkstitch/palettes/InkStitch Emmel.gpl @@ -0,0 +1,525 @@ +GIMP Palette +Name: Ink/Stitch: Emmel +Columns: 4 +# RGB Value Color Name Number +239 236 217 Eggshell White ML1001 +246 216 208 Whisper Pink ML1002 +245 199 199 Crystal Pink ML1003 +242 176 178 Sweet Pink ML1004 +254 159 155 Flamingo Pink ML1005 +234 105 110 Dusty Rose ML1006 +235 95 96 Country Rose 2 ML1007 +247 200 194 Light Coral ML1008 +238 183 176 Peach Skin ML1009 +241 169 170 Pale Pink ML1010 +238 151 159 Medium Pink ML1011 +250 108 120 Brick ML1012 +254 86 119 Dark Pink ML1013 +232 69 100 Medium Pink ML1014 +228 64 99 Pink ML1015 +220 30 74 Cerise ML1016 +252 221 193 Peach ML1017 +255 179 181 Corsage ML1018 +240 122 122 Dark Peach ML1019 +219 104 121 Antique Pink ML1020 +249 186 171 Flesh Pink ML1021 +252 145 148 Azalea ML1022 +254 94 102 Begonia ML1023 +246 45 61 Fluo Pink ML1024 +229 9 21 Fire Engine Red ML1025 +255 209 219 Delicate Mauve ML1026 +252 170 192 Petal Pink ML1028 +236 99 143 Begonia ML1029 +242 78 128 Fluo Pink ML1030 +235 61 114 Azalea ML1031 +218 27 58 N / A ML1032 +242 186 197 Light Mauve ML1033 +226 162 188 Light Pink ML1034 +217 163 197 Orchid ML1035 +195 116 161 Desert Rose ML1036 +177 72 128 DK Fushia ML1037 +197 48 103 Dark Pink ML1038 +190 43 97 Ruby Glint ML1039 +241 151 176 Medium Pink ML1040 +253 121 160 Medium Pink ML1041 +222 88 125 Cranberry medium ML1042 +205 69 119 Pink Rapture ML1043 +190 58 97 Dark Pink ML1044 +176 40 80 Candy Apple Red ML1045 + 83 25 11 Dark Brown ML1046 +206 153 145 Brownish pink ML1047 +161 95 99 Marsh Rose ML1048 +138 53 56 Raspberry Very Dark ML1049 +117 50 57 Wine ML1050 +255 238 219 Beige ML1051 +255 219 193 Flesh Light ML1052 +254 188 164 Cinnamon Light ML1053 +255 166 152 Champagne Pink ML1054 +247 126 109 Blush Medium ML1055 +244 64 67 Fluo Pink ML1056 +222 58 69 Desert Rose ML1057 +221 46 51 Fiery Red ML1058 +207 43 41 Christmas Red BR ML1059 +182 47 53 Orange ML1060 + 88 2 5 TH Burgundy ML1061 +255 102 114 Bitteroot ML1062 +251 77 68 Red ML1063 +229 41 55 Persimmon ML1064 +228 32 34 Ruby Red ML1065 +203 27 29 Wild Fire ML1066 +209 19 19 Carmine ML1067 +221 30 25 Fire Engine Red ML1068 +185 35 47 Warm Red ML1069 +157 32 40 Cabernet ML1070 +139 29 38 Brick ML1071 +103 24 29 Brown ML1072 +131 35 36 Formula One ML1073 +154 34 35 Aurora Red ML1074 + 73 42 40 Deep Walnut ML1075 +246 233 217 Bridal Blush ML1076 +255 229 214 Rosewater ML1077 +253 236 192 Ecru ML1078 +253 187 139 Pooh ML1079 +255 145 89 Summer Splendor ML1080 +254 127 60 Orange ML1081 +254 102 55 Bijol ML1082 +252 81 37 Fluorescent Orange ML1083 +255 69 40 Fluo Pink ML1084 +250 54 40 Paprika ML1085 +253 72 45 Fluo Pink ML1086 +255 70 50 Fluo Pink ML1087 +253 52 42 Paprika ML1088 +255 238 224 Light Coral ML1089 +254 177 171 Carnation Very Light ML1090 +255 123 108 Blush Medium ML1091 +252 59 69 Fluo Pink ML1092 +234 203 198 Medium Pink ML1093 +244 194 195 Pink Glaze ML1094 +218 158 160 Hyacinth ML1095 +202 119 127 Deep Mocha ML1096 +207 83 93 China Rose ML1097 +228 148 157 Sea Pink ML1098 +202 54 68 Strawberry Red ML1099 +163 43 52 Red Berry ML1100 +254 216 213 Pink Dogwood ML1101 +254 198 185 Peony Light ML1102 +238 147 144 Light Orange ML1103 +198 97 101 Coral Flame ML1104 +184 70 78 Chrysanthemum ML1105 +201 89 101 Medium Orange / Red ML1106 +168 56 55 Dark Orange / Brown ML1107 +255 240 215 Eggshell ML1108 +244 212 191 Cream / Pink ML1109 +208 146 135 Brandied Apricot ML1110 +189 114 108 K. A. Bronze ML1111 +147 64 74 Dark Brown ML1112 +243 219 209 Chalk ML1113 +237 196 190 Pink Mist ML1114 +237 193 184 Pale Orange ML1115 +222 165 172 Pale Salmon ML1116 +206 124 138 Festive Pink ML1117 +181 95 104 Baroque Rose ML1118 +167 80 86 Scalloped Coral ML1119 +233 181 185 Bisque ML1120 +236 156 165 Medium Pink ML1121 +208 107 123 Med Plum ML1122 +184 93 110 Red Violet ML1123 +184 88 102 Berry Red ML1124 +148 60 84 Medium maroom ML1125 +195 213 171 Mint ML1126 +162 186 134 Palest Green ML1127 +155 211 172 LT Jade ML1128 +114 158 131 Creme de Menthe ML1129 + 61 103 63 Green Dust ML1130 + 42 78 66 Harbor Green ML1131 +222 255 239 Pale Green ML1132 +192 255 247 Pale Green ML1133 +166 239 220 Island Waters ML1134 + 99 233 222 Seafoam ML1135 +107 229 216 Seafoam ML1136 + 68 222 213 Light Blue / Green ML1137 + 27 122 90 Jade ML1138 + 98 229 187 Light teal Green ML1139 +125 209 194 Tropical Wave ML1140 + 55 204 211 Lilac Silk ML1141 + 61 176 181 Bright Aqua ML1142 + 61 215 225 Capri ML1143 + 80 204 194 Aquamarine ML1144 + 59 164 196 Horizon Blue ML1145 +241 232 157 PaleYellow ML1146 +208 214 142 Lemon ML1147 +177 188 120 Nile ML1148 +135 135 73 Cone ML1149 +105 105 55 Dk. Avacodo ML1150 +206 211 170 Palm Leaf ML1151 +225 255 224 Pastel Green ML1152 +166 190 156 Sprucestone ML1153 +104 189 130 Zephyr Green ML1154 + 82 146 111 Celadon Green Medium ML1155 + 66 126 92 Evergreen ML1156 +228 244 199 Loden Green Very Light ML1157 +195 203 126 Avocado Green Light ML1158 +152 170 96 Leaf Green ML1159 + 80 115 85 Elm Green ML1160 + 73 122 92 Blue Green-dark ML1161 + 41 79 51 Dark Green ML1162 + 35 70 38 Wreath Green ML1163 +228 255 202 Pale Green ML1164 +215 255 220 Pastel Green ML1165 +183 250 197 Slightly Green ML1166 +154 206 158 Medium Mint Green ML1167 + 78 164 91 Vibrant Green ML1168 + 60 128 69 Leaf Green ML1169 +167 163 90 Bronze ML1170 +154 152 75 French Toast ML1171 +111 118 64 Lt. Olive ML1172 + 53 63 26 Special Green ML1173 + 50 63 19 Black Pine ML1174 + 44 59 36 Bronze Green ML1175 +235 246 190 Avocado Very Light ML1176 +227 246 180 Dark Olive Green ML1177 +143 216 134 Light Jade ML1178 +126 168 92 Forest Green medium ML1179 + 71 133 66 Dark Green ML1180 + 45 138 58 Signal Green ML1181 + 18 138 64 Kelly ML1182 +237 255 232 Silver Grey ML1183 +236 255 166 Dark Olive Green ML1184 +164 198 114 Pastoral Green ML1185 +140 194 100 Lime ML1186 + 60 119 35 Green ML1187 + 97 127 63 Spearmint ML1188 + 71 98 47 Green / Yellow ML1189 +226 216 92 Aurora ML1190 +173 153 54 Medium Green / Yellow ML1191 +173 158 63 Golden Olive ML1192 +107 92 33 Dark Green / Yellow ML1193 +176 170 94 Seaweed ML1194 +130 119 63 Seafrost ML1195 +102 111 48 Medium Palmetto Green ML1196 +128 95 2 Earthen Tan ML1197 +198 192 130 Rich Vanilla ML1198 + 87 98 55 Pale Green ML1199 + 71 76 18 Dark Olive ML1200 +239 254 249 Shallow Green ML1201 +210 254 253 Teal Ultra Light ML1202 +180 243 235 Sky Blue ML1203 +140 222 210 Seafrost ML1204 +244 255 250 Silver Tinsel ML1205 +226 255 253 Light Blue ML1206 +194 213 209 Pastel Blue ML1207 +161 193 192 Snow Blue ML1208 + 24 44 81 Blueprint ML1209 + 39 76 85 Dark Bottle Green ML1210 + 54 72 92 Dark Blue / Green ML1211 +244 254 243 Pale Yellow-Green ML1212 +214 242 254 Ice Blue ML1213 +183 226 245 Sun Blue ML1214 + 27 95 116 Deep Sea Blue ML1215 + 60 120 174 Laguna ML1216 + 52 69 115 Navy Blue ML1217 + 48 53 82 Blue Shadow ML1218 + 45 49 61 Navy ML1219 + 45 62 72 Dark Teal ML1220 +183 198 175 Palm Leaf ML1221 +166 185 165 Carousel Green ML1222 +168 191 163 Sea Foam ML1223 + 66 99 82 Kahki Green ML1224 + 50 80 68 Fir ML1225 +242 254 242 Pale Yellow-Green ML1226 +243 254 246 Sea Bleu Light ML1227 +238 255 249 Shallow Green ML1228 +226 238 234 Misty Mint ML1229 +199 232 239 Pale Blue ML1230 +133 181 204 Pale Blue / Green ML1231 + 77 121 158 Peacock Blue ML1232 + 42 82 117 Blue ML1233 + 31 58 103 Dark Blue ML1234 + 24 42 80 Deep Turquoise ML1235 +180 240 230 Sky Blue ML1236 +149 213 197 Pale Aqua Green ML1237 + 30 124 124 Light Green / Blue ML1238 + 22 125 132 Sapphire Medium Dark ML1239 +142 255 245 Pale Sea Green ML1240 +189 229 231 Bleached Aqua ML1241 + 85 153 176 Wonder Blue ML1242 +215 255 254 PALE Aqua ML1243 +255 254 252 White ML1244 +208 255 239 Pale Turquoise ML1245 + 93 224 210 Seafoam ML1246 + 65 190 194 Willow2 ML1247 + 61 142 136 Exotic Green ML1248 +184 254 255 Pillow Blue ML1249 +167 255 254 Aqua ML1250 +233 244 240 Slate Bleu Light ML1251 +212 245 245 Cameron Blue ML1252 +167 225 239 Baby Blue ML1253 +166 217 244 Baby Blue ML1254 +112 183 227 Ultra Blue ML1255 + 44 85 173 Dark Royal Blue ML1256 + 40 67 154 Fire Blue ML1257 + 34 58 148 Imperial Blue ML1258 +199 255 252 LT Aqua ML1259 +218 253 255 Light Blue ML1260 +176 254 255 Aqua ML1261 +128 247 255 Powder Blue ML1262 + 90 228 255 Turquoise ML1263 + 59 194 241 Turquoise Medium Bright ML1264 + 58 196 235 Medium Blue / Green ML1265 + 71 167 215 Light Blue ML1266 + 69 148 189 Surfs' Up ML1267 +244 250 246 Pale Blue ML1268 +172 203 231 Winter Sky ML1269 + 94 130 164 Slate Blue ML1270 + 42 64 103 Dark Navy ML1271 + 17 24 43 Midnight Blue ML1272 + 66 47 79 Blackberry ML1273 + 72 178 240 LT Peacock ML1274 + 68 138 210 Dolphin Blue ML1275 +249 244 242 White ML1276 +254 236 196 Med. Ecru ML1277 +177 183 149 Brown Gray Light ML1278 +133 142 125 Boffin Green ML1279 + 98 95 80 Loden Green Dark ML1280 + 67 68 60 Hedge ML1281 + 63 64 56 Black Chrome ML1282 +252 255 228 Cream Silk ML1283 +255 255 225 Yellow Beige ML1284 +218 218 192 Cream ML1285 +157 122 90 Tawny Birch ML1286 +141 124 96 Espresso ML1287 +252 254 249 Iced Silver ML1288 +190 198 177 Putty ML1289 +195 197 194 Pale Grey ML1290 + 84 86 85 Very Dark Grey ML1291 + 43 53 52 Dark Green / Blue ML1292 +251 238 229 Wineberry Very Light ML1293 +227 198 166 Straw ML1294 +193 165 141 Iced Mocha ML1295 +157 137 112 Sand ML1296 + 94 70 57 Dusky Salmon ML1297 +194 183 155 Light Green / Yellow ML1298 +121 123 110 Beige Blush ML1299 +248 239 232 Star White ML1300 +245 247 233 Off White ML1301 +237 238 224 Summer Shower ML1302 +240 242 228 Maize 4 ML1303 +193 195 181 Light Green / Yellow ML1304 +202 203 197 Chrome ML1305 +127 126 121 Moon Mist ML1306 +101 100 95 Twilight ML1307 + 70 72 71 Grey Suede ML1308 + 35 35 35 Black ML1309 +234 238 223 Summer Shower ML1310 +155 175 173 Soft Steel Blue ML1311 +154 173 169 Quarry ML1312 + 96 116 125 Blue Mirage ML1313 + 71 90 88 Heritage Blue ML1314 + 57 66 65 Dk. Night Blue ML1315 +200 205 198 Dawn Blue ML1316 +215 209 187 Bone White ML1317 +223 227 212 Sage Tint White ML1318 +190 194 180 Palm Leaf ML1319 +135 148 128 Weed ML1320 +183 208 202 Blue Foam ML1321 +154 184 186 Snow Blue ML1322 +114 145 150 Country Gray ML1323 + 70 107 113 Medium Green / Blue ML1324 + 45 79 80 Dark Bottle Green ML1325 +253 231 145 Wheat 2 ML1326 +255 227 113 Snapdragon ML1327 +255 217 108 Snapdragon ML1328 +190 123 52 Autumn Leaf ML1329 +155 89 39 Medium Brown ML1330 +169 86 42 Light Cinnamon ML1331 +255 255 217 Ivory White ML1332 +255 241 164 Light Butter ML1333 +255 255 190 Canary Yellow Light ML1334 +255 238 134 Pale Yellow ML1335 +255 216 85 Warm Yellow ML1336 +252 186 64 Cantaloupe ML1337 +255 192 79 Scholastic ML1338 +255 255 207 Pale Lemon ML1339 +255 244 174 Pale Yellow ML1340 +229 186 133 Glow ML1341 +255 183 80 Mimosa ML1342 +254 134 47 Mango ML1343 +255 101 47 Red Berry ML1344 +255 246 151 Light Mustard ML1345 +209 188 121 Moon Rock ML1346 +196 164 77 Old Gold medium ML1347 +215 176 83 Mustard ML1348 +141 90 35 Medium Brown ML1349 + 91 65 30 Brown ML1350 +233 235 188 Yellow Beige Light ML1351 +244 244 190 Mellow Yellow ML1352 +255 253 189 Canary Yellow Light ML1353 +249 244 153 Mustard ML1354 +255 254 141 Meilee Green ML1355 +255 247 130 Straw Light ML1356 +255 234 81 Hawaiian Sunrise ML1357 +252 200 64 Yellow ML1358 +244 233 167 Maize ML1359 +230 204 119 Old Gold Light ML1360 +219 193 118 Jojoba ML1361 +210 159 67 Black Eyed Susie ML1362 +157 102 35 Golden Grain ML1363 +255 255 224 Yellow Beige ML1364 +240 254 255 Misty Mint ML1365 +240 253 145 Coronation Gold ML1366 +233 252 124 Applegreen ML1367 +234 252 118 Pale Yellow ML1368 +246 255 140 Meilee Green ML1370 +235 255 106 Green Gold ML1371 +195 255 139 Brilliant Lime ML1372 +227 255 142 Applegreen ML1373 +236 255 140 Applegreen ML1374 +239 255 123 Medium Yellow ML1375 +207 175 180 Rose Beige ML1376 +193 141 177 Lt. Red Violet ML1377 +190 154 182 Carnatio ML1378 +128 101 136 Light Grape ML1379 + 97 48 95 Purple ML1380 + 89 46 72 Dark Claret ML1381 +255 255 245 Eggshell ML1382 +232 237 240 Pearl Grey ML1383 +182 178 192 Grey ML1384 +195 219 229 Cadet Blue ML1385 +128 128 130 Polished Pewter ML1386 + 77 85 98 Petrol Blue ML1387 + 50 56 70 Graphite Grey ML1388 +173 170 179 Dark Grey ML1389 +157 154 171 Steel Gray ML1390 +147 144 173 Light Grape ML1391 +141 137 150 Dark Grey ML1392 +101 91 126 Lilac Mist ML1393 + 64 55 108 Petrol Blue ML1394 +229 202 195 Palest Peach ML1395 +220 184 186 Antique Mauve ML1396 +157 108 114 MD Ash Rose ML1397 + 99 74 77 Pale Grape ML1398 + 93 59 75 Medium Purple ML1399 + 44 30 30 Black Wine ML1400 +170 188 192 Celestial Blue ML1401 + 85 112 119 Gobelin Blue ML1402 + 42 66 92 Harbor Twilight ML1403 + 41 50 67 Black ML1404 +225 201 214 Rose Pink ML1405 +212 156 183 Lilac ML1406 +114 57 108 Dark Red ML1407 + 65 23 59 Deep Slate Gray ML1408 + 98 90 101 Plum Kitten ML1409 + 57 47 81 Concord ML1410 + 39 35 58 Aubergine ML1411 + 33 39 71 Blueberry Blue ML1412 +221 187 185 Antique Mauve ML1413 +227 186 192 Orchid ML1415 +180 156 178 Silver Fox ML1416 +143 103 140 Purple Haze MLL1417 + 67 58 113 Dark Purple ML1418 + 78 29 74 Royal Purple ML1419 + 52 28 42 Dark Brown ML1420 +162 150 164 Wisteria ML1422 +214 209 213 Saturn Grey ML1423 +107 38 69 Brushed Burgundy ML1424 +101 48 54 Warm Wine ML1425 +157 143 179 Light Lilac ML1426 +107 101 135 Twilight Purple ML1427 + 99 98 142 Royal Blue ML1428 + 75 74 105 Petrol Blue ML1429 + 63 57 103 Cassis ML1430 + 54 56 79 Dark Grey / Blue ML1431 + 45 48 79 Blueberry ML1432 +231 236 240 Pale Silver ML1433 +191 188 197 Silver Grey ML1434 +152 165 184 Rockport Blue ML1435 + 96 100 127 Velvet Morning ML1436 + 60 79 112 Ash ML1437 +237 244 236 Angel Blue ML1338 +226 227 221 White Sand ML1439 +137 141 144 Steel Gray medium ML1440 +106 117 113 Dk Granite ML1441 + 86 91 95 Dark Gray ML1442 +244 210 182 Opaline ML1443 +230 195 173 Light Apricot ML1444 +200 164 138 Rugby Tan ML1445 +164 101 92 Red Maroon ML1446 +125 80 59 Dark Brown ML1447 +125 74 57 Dark Brown ML1448 +199 249 240 Light Aqua ML1449 +203 207 192 Almost Aqua ML1450 +246 193 162 Tawny ML1451 +235 165 140 Salmon ML1452 +200 138 113 Dk. Ecru ML1453 +242 122 105 Medium Orange ML1454 +166 58 45 Orange / Red ML1455 +169 56 40 Orange / Red ML1456 +244 157 88 Medium Orange ML1457 +198 112 55 Date ML1458 +102 46 29 Tan ML1459 + 91 49 33 Dark Brown ML1460 +237 206 149 Old Gold ML1461 +194 162 103 Parsnip ML1462 +185 161 115 Med. Taupe ML1463 +190 0 0 Radiant Red ML1464 +151 114 72 Gold Wire ML1465 +241 244 225 Sandstone ML1466 +255 255 237 Ivory White ML1467 +255 246 207 Cream ML1468 +232 202 150 Dark Tan ML1469 +216 189 134 Cocoon ML1470 +176 129 83 Gold ML1471 +128 72 37 Brown ML1472 +116 65 38 Dark Brown ML1473 + 75 41 32 Dark Brown ML1474 + 51 42 37 Best Brown ML1475 +255 201 137 Sunburst ML1476 +222 180 130 Golden Olive / Light ML1477 +220 164 113 French Beige ML1478 +183 137 104 Oak Heart ML1479 +146 109 83 Medium Brown ML1480 +150 97 66 Medium Brown ML1481 +255 221 167 Linen ML1482 +249 168 103 Orange Spice Light ML1483 +246 175 121 Peach ML1484 +239 117 52 Canary ML1485 +196 60 34 Brick Ultra Dark ML1486 +250 233 203 Light Ivory ML1487 +190 175 142 Taupe ML1488 +182 148 121 Natural ML1489 +154 0 0 Auburn ML1490 + 87 67 42 Brown ML1491 +255 237 195 Ecru ML1492 +229 164 126 Bamboo ML1493 +175 71 32 Russet ML1494 +168 105 70 Brown ML1495 +140 65 36 Amberglow ML1496 +154 62 47 Indian Paintbrush ML1497 +202 157 124 Light Red / Orange ML1498 +184 97 69 Brown ML1499 +116 57 43 Twig ML1500 +255 255 253 White ML1501 +255 254 251 White ML1502 +254 255 245 Eggshell ML1503 +255 255 255 Snow White ML1504 +255 255 254 White ML1505 +254 255 255 Snow White ML1506 +255 254 255 White ML1507 +231 216 183 Seedpearl ML1508 +219 195 161 Pale Peach ML1509 +165 144 113 Tannin ML1510 +114 105 72 Desert Cactus ML1511 +152 136 103 Dark Beige ML1512 +189 160 100 Parsnip ML1513 +132 112 77 Ermine ML1514 +132 104 65 Medium Orange / Brown ML1515 +141 121 88 Espresso ML1516 + 76 57 42 Traditional Brown ML1517 +255 255 229 Beige ML1518 +255 255 211 Citrus Very Light ML1519 +255 238 198 Med. Ecru ML1520 +225 184 138 Sheepskin ML1521 +255 255 242 Winter White ML1522 +255 237 171 Pale Gold ML1523 +202 182 155 Ash Blonde ML1524 + 13 14 9 Espresso ML1525 diff --git a/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl b/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl new file mode 100644 index 0000000..7e7d30c --- /dev/null +++ b/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl @@ -0,0 +1,217 @@ +GIMP Palette +Name: Ink/Stitch: Fil-Tec Glide +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 10000 +193 181 165 German Granite 10401 +118 122 125 Medium Grey 10424 +102 109 112 Titanium 10431 +173 178 193 Silver 10536 +198 209 214 Mercury 10643 +138 141 143 Sterling 10877 +200 201 199 Cool Grey 3 10CG3 +151 153 155 Cool Grey 7 10CG7 +250 240 230 Linen 10WG1 +185 173 165 Warm Grey 4 10WG4 +165 156 148 Warm Grey 6 10WG6 + 0 0 0 Black 11001 +145 163 153 Nickel 15497 +110 98 89 Warm Grey 11 1WG11 +122 91 17 Leather 20140 +158 84 10 Mahogany 20160 +112 66 20 Medium Brown 20464 +209 191 145 Sand 20466 + 95 51 17 Chocolate 20469 +244 204 170 Apricot Blush 20474 + 89 61 43 Dark Brown 20476 +122 63 40 Rust Brown 20478 +226 191 155 Mocha 20727 +170 117 63 Light Copper 20730 +133 113 77 Vegas Gold 20872 +191 145 12 Dijon 21245 +132 63 15 Sienna 21615 +132 53 17 Sepia 21685 +188 173 117 Cleopatra 24515 +204 191 142 Khaki 24525 + 71 35 17 Brunette 24625 +140 89 51 Bark 24635 +192 148 119 Light Tan 24655 +229 198 170 Cork 24675 +203 160 82 Military Gold 27407 + 19 133 143 Wheat 27500 +148 121 93 Coffee 27504 +225 184 127 Butterscotch 27508 +192 156 131 Chestnut 27521 +171 92 87 Auburn 27523 + 0 40 104 Blue Berry 30281 +155 196 226 Azure 30283 +117 170 219 Hawaiian Blue 30284 + 0 56 168 Empire 30286 + 0 51 127 Bright Blue 30288 +196 216 226 Baby Blue 30290 + 0 45 71 Midnight Navy 30296 + 0 96 124 Cerulean 30308 +201 232 221 Magic Mint 30317 + 58 73 114 Denim 30534 +155 175 196 Graphite 30644 + 94 130 163 Sky 30646 + 12 28 71 Captian Navy 30655 + 0 53 150 Royal 30661 + 20 222 84 Federal 32757 + 0 49 81 Navy 32965 +186 224 226 Light Turquoise 32975 + 0 96 161 Electric 33015 +187 221 230 Cloud 37457 + 0 115 152 Ocean 37468 + 0 118 129 Aquamarine 37474 +127 40 96 Iris 40249 +119 45 107 Violet 40255 +140 112 107 Dusty Plum 40437 +198 163 193 Tabriz Orchard 40522 +175 114 193 Mulberry 40528 +168 147 173 Wisteria 40666 +216 168 216 Periwinkle 42562 +170 114 191 Lavender 42577 +158 79 165 Viking 42583 + 91 2 122 Raven 42607 +201 173 216 Amethyst 42635 +155 109 198 Lilac 42655 +147 122 204 Eggplant 42715 + 73 48 173 Fandango 42736 + 79 33 58 Wine 45115 +162 119 166 Teaberry 47440 +216 140 2 Bronze 50138 +226 140 5 Halloween 50144 +232 117 17 Mars 50158 +249 137 114 Salmon 50170 +247 73 2 Autumn 50172 +147 51 17 Rust 50174 +244 196 160 Peach 50473 +255 211 170 Strawberry Blonde 50712 +252 186 94 Pumpkin Seed 51365 +249 107 7 Lava 51585 +249 165 140 Coral 51625 +165 63 15 Burnt Orange 51675 + 0 102 99 Teal 60323 + 0 124 102 Irish Spring 60335 + 0 86 63 Christmas Pine 60343 +150 216 175 Mint 60345 + 35 79 51 Totem Green 60350 + 33 91 51 Jade 60357 + 51 158 53 Turf 60362 + 86 107 33 Aloe 60371 +206 224 7 Limerick 60389 +175 168 10 Split Pea 60398 + 96 94 79 Army 60418 +112 168 145 Sea Mist 60556 +163 193 173 Thyme 60557 +209 226 211 Pale Mist 60566 + 96 142 58 Willow 60576 +216 221 181 Celery 60580 +181 170 89 Prickly Pear 60618 +165 191 170 Pistachio 60623 +127 160 140 Mint Julep 60624 + 96 221 73 Chartreuse 60802 +124 99 22 Fools Gold 61265 + 0 175 153 Sprout 63268 + 0 140 130 Mermaid 63282 + 0 124 89 Jungle 63415 + 0 104 71 Emerald 63425 + 38 104 109 Persian 65473 +206 216 209 Cool Mint 65513 +119 145 130 Basil 65555 + 84 104 86 Olive 65615 +114 132 112 Fern 65625 + 63 73 38 Mossy 65743 +117 112 43 Light Olive 65825 + 92 184 178 Sea Green 67472 + 13 82 87 Midnight Storm 67476 + 0 159 77 Shamrock 67482 +116 170 80 Kiwi 67489 +249 94 89 Papaya 70178 +249 191 193 Cotton Candy 70182 +175 30 45 Ruby 70187 +255 163 178 Pink 70189 +196 0 67 Rasberry 70193 +196 30 58 Fil-tec 70200 +140 38 51 Light Burgundy 70202 +229 76 124 Rhododendron 70205 +211 5 71 Apple 70206 +192 0 78 Cranberry 70207 +142 35 68 Hokies 70208 +117 38 61 Maroon 70209 +204 2 86 Blossom 70214 +244 191 209 Pink Lemonade 70217 +216 30 5 Jamaica Sun 70485 +183 56 68 Monarch 70703 +249 221 214 Pink Rose 70705 +252 35 102 Hot Pink 70812 +188 135 135 Mauve 75005 +101 29 50 Merlot 77421 +226 69 133 Passion 77424 +151 27 47 Garnet 77427 +181 91 128 Purple Rose 77432 +244 237 71 Lemon 80101 +249 221 22 Bright Yellow 80108 +252 209 22 Mango 80116 +249 226 127 Cornflower 80120 +181 140 10 Honey Gold 80125 +234 175 15 Marigold 80130 +198 147 10 Desert Sunset 80131 +158 124 10 Penny 80132 +255 219 127 Buttercup 80134 +252 163 17 Bright Gold 80137 +242 234 188 Lemon Ice 80607 +221 224 15 Citron Yellow 80809 +122 56 45 Yellow Whisper 87499 +206 17 38 Candy Apple Red 90186 +229 196 214 Peacock 90256 +153 186 221 Tar Heel 90278 + 58 117 196 Pacific 90285 + 96 198 89 Neon Green 90360 +196 229 142 Key Lime 90366 +255 114 71 Neon Orange 90811 +252 206 135 Cantaloupe 91355 +244 124 0 Blaze 91505 +244 63 79 Lip Stick 91787 + 81 191 226 Dark Aqua 92985 + 0 165 219 Marine 92995 + 53 56 66 Eclipse 30532 +217 200 158 Sand Dune 27501 +124 81 61 Cocoa 24705 +127 186 0 Kryptonite 60376 +219 206 165 Shell 24535 + 91 38 38 Cabernet 70490 + 0 56 147 Bombay 30287 +255 204 73 West Point 81225 +213 0 50 Desire 70199 +164 90 42 Hazel 20470 +150 216 175 Mint 60345 + 0 107 63 Viridian 60349 +204 45 48 Imperial Red 71797 +255 198 30 Canary 80123 +206 17 38 Sultry 70186 + 0 160 186 Robin Egg 30632 +226 61 40 Tomato 70179 +178 168 181 Anchor 15295 + 38 84 124 Cobalt 30647 +107 94 79 Zaffre 35405 +142 71 173 Damson 42587 +209 68 20 Firestorm 50173 +249 86 2 Oriole 51655 + 73 89 40 Soldier Green 60574 + 96 145 145 Tidewater 65483 +249 130 127 Tango 70177 +120 47 64 Chianti 70195 + 81 30 38 Bordeaux 70504 +214 40 40 Valentine 71795 +249 224 76 Daisy 80114 +241 180 52 Medallion 80143 + 24 43 73 Deep Sea 32767 + 19 50 43 Evergreen 60627 +245 126 182 Flamingo 70211 +220 88 42 Marmalade 57579 +221 204 165 Caramel 20467 + 0 158 73 Forest 60355 +226 214 181 Biscotti 20468 +109 79 71 Coffee Bean 27518 diff --git a/inkstitch/palettes/InkStitch Floriani Polyester.gpl b/inkstitch/palettes/InkStitch Floriani Polyester.gpl new file mode 100644 index 0000000..36f7639 --- /dev/null +++ b/inkstitch/palettes/InkStitch Floriani Polyester.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Floriani Polyester +Columns: 4 +# RGB Value Color Name Number +243 233 238 Pale Pink 101 +250 209 207 Rose Carolina 1011 +242 95 114 Iceland 1013 +239 83 103 Dusty Rose 1014 +245 214 228 Light Pink 102 +248 229 220 Buff 1021 +253 165 185 Pink 103 +247 126 154 Rosetta 104 +239 75 117 Laurel Pink 105 +217 31 28 Singapore Sunset 1051 +228 30 26 Saffron 1053 +238 71 108 Dark Pink 106 +249 200 205 Pink Rose 1081 +250 143 156 Rose Cerise 1082 +236 63 102 Begonia 1083 +230 30 61 Hibiscus 1084 +223 29 50 Violet Red 1085 +205 18 32 Raspberry 1086 +226 38 92 Pale Peach 110 +237 69 91 Shrimp 1107 +250 221 203 Light Peach 111 +242 99 116 Impatients 1119 +221 46 75 Lafayette Rose 1120 +199 38 53 China Rose 1121 +188 34 44 Marie Antoinette 1122 +245 228 226 Peach Blossom 116 +253 186 192 Misty Pink 117 +182 47 58 Currant 1182 +243 217 230 Pink Mist 123 +248 138 169 Bright Pink 125 +235 56 108 Hot Pink 127 +233 48 104 Scorching Pink 128 +196 17 60 Deep Pink 129 +236 183 206 Light Lilac 131 +196 103 144 Powder Puff 133 +180 46 102 Renaissance 135 +143 25 74 Fandango 137 +250 204 196 Light Coral 140 +249 152 140 Coral 141 +246 105 90 Dark Coral 143 +233 50 53 Rust 145 +229 33 42 Terra Cotta 147 +230 37 62 Martha Washington 155 +230 34 55 Persimmon 156 +154 20 34 Cabernet 1586 +231 125 127 Light Mulberry 1600 +191 83 93 Cameo 1602 +165 53 67 Dark Mulberry 1603 +251 201 192 Fleshtone 163 +194 90 90 Mauve 165 +164 40 45 Deep Mauve 167 +246 125 86 Cantalope 170 +236 57 42 Orange 172 +250 199 177 Pink Flesh 180 +248 119 110 Misty Maize 182 +239 75 72 Salmon 184 +230 38 39 Copper 186 +226 25 45 Iron Rust 188 +176 17 20 Scarlet 190 +250 191 196 Petunia 1900 +229 116 129 Roseleaf 1902 +219 86 97 Pansies Perfections 1904 +209 57 73 Purple Pansies 1906 +178 31 56 Dark Pansies 1908 +131 33 50 Paternina 1910 +153 18 19 Deep Rust 192 +145 18 21 Burgundy 194 +142 28 33 Old Roseleaf 196 +114 23 29 Wine 198 + 6 109 66 True Green 200 +145 184 150 Seafrost 201 +160 165 63 Light Olive 2011 +110 123 40 Avocado 2013 + 84 87 34 Pation Green 2015 + 96 140 111 Moss 203 + 0 153 153 Blue Azure 2040 + 0 151 155 Aquamarine 2042 + 17 87 58 Willow Green 205 + 39 68 33 Wreath Green 206 +156 135 43 Miranda Green 210 +119 98 24 Basil 214 + 88 76 22 Maui Green 218 +166 223 214 Green Mist 219 +104 197 188 Wintergreen 220 + 37 137 124 Neptune 221 + 33 118 109 Teal 222 + 32 110 105 Dark Teal 223 +184 223 128 Cape Green 228 + 91 181 78 Lime 229 + 70 171 77 Sour Apple 231 + 4 151 69 Spring Green 232 + 7 127 74 Irish Green 233 +196 198 122 Ashen Green 236 +117 133 61 Bean Green 237 +109 144 65 Olive Drab 238 +221 245 200 Winter Spring 243 +188 216 152 Celery 244 +114 156 94 Woodland Green 245 + 87 107 60 Ivy 247 + 92 108 66 Hunter Green 248 +244 253 196 Flite Green 251 +205 222 189 Spearmint 252 + 74 179 137 Pale Green 253 + 28 135 104 Evergreen 255 + 77 81 63 Holly Green 257 +142 212 173 Mint 261 + 55 172 116 Nile 262 + 26 162 110 Pale Jade 263 + 13 127 84 Medium Green 264 + 13 90 65 Dinosaur Green 265 + 14 68 55 Emerald Green 266 +185 207 79 Key Lime 273 +164 185 72 Mineral Green 275 + 91 104 52 Green Meadow 277 +206 197 52 Green Gold 283 +178 159 32 Scotch Green 284 +134 123 32 Parsley 285 + 93 190 186 Seaform 291 + 30 108 100 Peppermint 292 + 21 75 70 Blue Spruce 293 + 38 46 55 Pine Green 294 + 35 47 90 Rocket Blue 307 + 34 39 84 Dark Blue 308 + 90 179 198 Colony Blue 310 + 54 140 164 Gettysburg 312 + 49 90 106 Federal Blue 314 + 62 117 166 Periwinkle 332 + 42 74 113 Baltic Blue 333 + 34 51 88 Concord Blue 334 + 28 29 67 Midnight Blue 335 + 92 119 122 Slate Blue 342 + 46 47 52 Pilgrim Blue 344 + 32 28 73 Navy Blue 357 + 31 20 59 Navy Satin 358 + 64 66 95 Midnight Navy 358S + 33 15 26 Dark Navy 360 +206 238 242 Light Blue 361 + 78 169 217 Pastel Blue 362 + 76 146 206 Columbia Blue 363 + 56 99 149 Starlight Blue 364 + 60 102 158 Medium Blue 365 + 46 64 117 Bluejay 366 + 46 65 118 Blueberry 367 + 35 26 85 Royal Blue 368 +139 211 228 Blue Frost 369 + 72 171 205 Mint Julep 370 + 76 162 211 Tahoe Blue 371 + 72 134 194 Blue Pacific 372 + 63 115 170 California Blue 373 + 0 148 171 Indian Ocean 376 + 0 123 148 Deep Sea Turquiose 378 +172 238 249 Venice Blue 383 + 0 133 176 Cascade 384 + 0 104 129 Niagara 385 + 0 129 145 Beryl Blue 391 + 0 103 116 Honey Bird 392 + 0 67 75 Italian Blue 393 +188 183 160 Palm Leaf 411 +125 119 93 Old Silver 413 + 82 71 55 Westpoint 415 + 56 56 47 Penguin 416 +225 209 161 Wood Ash 421 +174 152 96 Lime Gray 422 +151 132 79 Earth Gray 423 +122 163 161 Pewter 434 + 39 42 42 Graphite 436 +191 154 140 Light Taupe 451 +137 113 106 Taupe 452 + 96 74 70 Dark Taupe 453 +204 218 218 Light Gray 483 +116 140 141 Country Gray 484 +120 130 133 Gray 485 + 77 67 68 Slate Gray 486 + 85 85 83 Gun Metal Gray 487 + 59 53 57 Dark Gray 488 + 50 35 38 Charcoal Gray 489 +245 226 124 Chrome Lemon 501 +248 190 91 Dandelion 502 +242 154 76 Sunflower 503 +254 131 66 Primrose Jasmine 512 +210 90 52 Golden Glow 514 +229 108 56 Dark Goldenrod 516 +255 244 162 Cornsilk 521 +255 229 100 Straw 522 +255 196 70 Goldenrod 523 +255 179 60 Old Athletic Gold 524 +255 158 68 Athletic Gold 525 +255 102 52 Bijol 526 +255 252 205 Vanilla 531 +255 196 103 Sunrise 532 +255 177 72 Apricot 533 +255 132 53 Pumpkin 534 +255 120 59 Golden Poppy 535 +255 85 40 Carrot 537 +255 246 203 Cream 540 +255 242 102 Cockatoo 542 +255 224 43 Amber Yellow 544 +255 231 50 Snapdragon 546 +255 222 99 Vegas Gold 560 +255 183 62 Lion Mane 561 +235 145 44 Walnut Taffy 562 +192 98 24 Old Gold 563 +175 98 21 Bran 564 +121 81 19 Harvest 565 +216 99 146 Zephyr 601 +116 14 72 Plum Pewter 603 +101 7 54 Grape 605 +134 156 184 Lilac Blue 612 + 90 92 132 Slate Lilac 614 + 57 45 84 Tyrian Blue 616 +197 192 227 Geisha 622 +169 123 175 Afterglow 624 +117 55 116 Deep Iris 626 +134 94 109 Grape Ice 632 + 54 25 46 Arab Plum 635 +201 127 164 Spring Beauty 653 +121 35 63 Orchid 654 +154 127 185 Light Violet 661 +125 80 155 Violet 663 + 80 26 117 Deep Violet 665 + 66 7 28 Ophelia 6655 +206 186 216 Amethyst 672 +147 78 144 Lavender 673 +134 51 123 Russian Violet 674 +119 34 113 Luxury 675 + 84 28 73 Royal Purple 676 +112 76 154 Voilet Blue 687 + 85 55 131 Grape Jelly 688 + 61 34 86 Concord Grape 689 +123 33 117 Viking Purple 694 + 95 35 115 Purple Passion 695 + 76 22 84 Regal Purple 696 +228 28 23 Mars Red 700 +226 25 22 Fire Engine Red 702 +230 36 35 Ruby Red 703 +219 117 37 Inca Gold 711 +153 55 15 Antique Bronze 713 +124 34 26 Jamoca 715 +232 215 144 Golden Sand 721 +208 172 102 Birch 723 +253 252 252 Off White 730 +245 246 228 Sandstone 731 +243 232 184 Sudan 733 +240 215 152 Oak Buff 734 +222 183 107 Aztec Tan 735 +148 95 50 Indian Spice 737 +165 65 38 Arab Tan 738 + 74 50 30 Cleveland 739 +234 182 127 Pottery Buff 741 +211 150 91 Old World Buff 743 +149 85 42 Harvest Brown 745 + 66 36 29 Mahogany 749 +233 176 88 Sweet Melon 751 +233 163 76 Aurora Orange 752 +230 145 60 Orange Peel 753 +226 80 31 Burnt Orange 755 + 57 45 84 Satin Sheet 765 +200 117 74 Muted Spice 767 +128 37 18 Dark Cinnamon 769 +239 171 121 Sahara Tan 783 +201 102 46 Light Sienna 784 +181 74 31 Sienna Brown 785 +173 61 27 Berkshire Brick 786 +232 185 160 Shasta Pink 792 +168 101 71 Flagstone Clay 794 +125 52 33 Provincial Rose 796 +251 253 252 Pure White 800 +250 251 251 Ice Cap 801 +243 235 207 Angora White 811 +191 183 137 Frontier Tan 813 +178 159 98 Deep Clay 815 +213 198 141 Willow Leaf 842 +154 113 58 African Safari 844 +253 252 252 Lamp Light 850 + 0 0 0 Black 900 + 62 114 167 Solar Blue K07 + 83 187 200 Blue Harmony K33 + 43 136 135 Aqua K37 + 69 10 114 Deep Violet Purple K38 +213 21 55 N / A O23 + 42 57 108 N / A O55 + 29 82 87 N / A O74 +218 24 60 N / A O83 + 64 110 169 N / A OO7 + 55 154 166 N / A P52 +226 38 92 Pink Passion Y40 diff --git a/inkstitch/palettes/InkStitch FuFu Polyester.gpl b/inkstitch/palettes/InkStitch FuFu Polyester.gpl new file mode 100644 index 0000000..fe7cb8f --- /dev/null +++ b/inkstitch/palettes/InkStitch FuFu Polyester.gpl @@ -0,0 +1,717 @@ +GIMP Palette +Name: Ink/Stitch: FuFu Polyester +Columns: 4 +# RGB Value Color Name Number +237 225 228 Oyster 100 +240 204 216 Pale Lavender 101 +241 187 205 Sweet Lilac 102 +243 171 191 Carnation 103 +241 151 175 Medium Pink 104 +236 122 155 Floral Pink 105 +226 93 134 Dark Pink 106 +216 67 118 Medium Pink 107 +244 203 191 Cloud Pink 110 +243 191 176 Peach Melba 111 +246 149 127 Flamingo 113 +241 204 207 Light Pink 116 +222 148 155 Sea Pink 117 +237 191 213 Light Pink 123 +236 151 192 Medium Pink 124 +234 134 177 Pink Petunia 125 +220 122 171 Pink 126 +206 85 152 Medium Pink 127 +179 49 122 Dark Pink 128 +158 28 97 Rebecca Rose 129 +228 191 216 Darker Lilac 130 +224 169 208 Impatient 131 +198 140 183 Lavender Medium Light 132 +192 122 175 Violet 133 +159 101 152 Plum Medium 134 +137 64 123 Deep Violet 135 +126 58 113 Dark Red 136 +122 53 107 Dark Purple 137 +100 42 84 Pale Purple 138 + 80 37 69 Medium Purple 139 +237 175 169 Pink Petal 140 +235 151 147 Emily Pink 141 +231 139 136 Peach Bloosom 142 +222 101 100 Dark Red / Orange 143 +205 86 80 Dark Salmon Pink 144 +198 73 71 Dark Salmon 145 +181 45 57 Terra Cotta 147 +164 41 56 Wildfire 148 +235 185 196 Shell 151 +233 157 179 Medium Pink 152 +232 135 159 Dusty Rose 153 +232 121 145 Medium Pink 154 +220 73 97 Cerise 155 +216 60 87 Dark Pink 156 +193 52 77 Dusky Rose 157 +231 224 224 Silver Gray 160 +237 209 201 Rosewater 161 +231 185 177 Light Peach 163 +191 131 137 Light Pink 165 +169 94 106 Rose Wine 166 +157 86 95 Mauvewood 167 +144 78 78 Dark Brown 168 +251 173 140 Coral Reef 169 +255 155 107 Light Orange 170 +240 107 55 Golden Brown 171 +236 92 38 Red Pepper 172 +234 90 55 Orange 173 +242 179 165 Soft Coral 180 +235 132 131 Peach Bloosom 181 +233 117 116 Tea Rose 182 +230 118 103 Medium Orange 184 +223 96 76 Dark Salmon Pink 185 +209 59 57 Tomato 186 +190 50 63 Burgundy 188 +185 44 64 Poinsettia 190 +162 35 54 Wildfire 192 +142 35 52 Burgundy 193 +149 42 66 Perfect Ruby 194 +125 37 58 Russet 195 +113 42 53 Wine 196 +107 46 55 Wine 197 + 99 43 53 Warm Wine 198 + 86 43 54 Chocolate 199 +242 194 189 Desert Bloom 1011 +225 121 143 Medium Pink 1013 +201 102 125 Med Plum 1014 +232 210 209 Orchid Ice 1020 +236 194 191 Pink Mist 1021 +213 155 176 Pale Pink 1031 +197 132 159 Polignac 1032 +180 106 136 Medium Purple 1033 +168 91 123 Dahlia Mauve 1034 +147 65 98 Medium Purple 1035 +134 63 92 Dark Brown 1036 +124 47 75 Wine 1037 +102 44 70 Grape Shake 1038 +231 69 42 Orange 1051 +226 59 44 Honeysuckle 1052 +224 54 43 Honeysuckle 1053 +243 181 185 Candy Pink 1081 +235 148 162 Classic Wine 1082 +223 85 121 Magenta Dark 1083 +214 53 92 Cerise 1084 +199 19 66 Rose / Very Dark 1085 +187 0 64 Country Red 1086 +240 118 125 Confetti 1106 +240 104 111 Dusty Rose 1107 +218 137 146 Medium Pink 1118 +209 110 134 Medium Pink 1119 +192 82 113 Dark Pink 1120 +176 72 96 Baroque Rose 1121 +163 58 80 Raspberry Medium Dark 1122 +152 36 72 Rose Wine Very Dark 1123 +219 116 126 Tea Rose 1128 +150 58 81 Medium maroom 1182 +150 37 86 Raspberry 1295 +131 49 65 Winterberry 1384 +224 143 193 Petal Pink 1400 +215 118 177 Medium Pink 1401 +208 103 164 Deep Mauve 1402 +185 72 138 Very Berry 1403 +169 63 130 Purple 1404 +161 58 125 Purple 1405 +148 41 109 Dark Red 1406 +243 184 183 Lt. Pink 1510 +245 148 141 Raspberry Light 1511 +243 111 98 Watermelon 1512 +239 86 70 Flamingo 1513 +235 71 51 Light Bronze 1514 +226 94 119 Shrimp 1545 +122 32 58 Russet 1586 +195 152 156 Adobe Rose 1600 +173 125 139 Light Purple 1601 +156 98 114 Perfect Ruby 1602 +133 73 96 Dark Brown 1603 +120 67 82 Dark Purple 1604 +189 156 172 Amethyst Medium Light 1607 +151 108 136 Rose Dust 1608 + 86 49 66 Intense Maroon 1609 +227 104 167 Soft Pink 1700 +220 65 141 Dark Pink 1701 +213 45 126 Dark Pink 1702 +208 25 114 Ruby Glint 1703 +232 89 139 Dark Pink 1714 +219 55 112 Beauty Rose Medium 1715 +204 14 96 Red 1716 +205 68 127 Dark Pink 1727 +187 20 93 Dark Pink 1728 +171 20 88 Antique Rose Ultra Dark 1729 +226 206 208 Orchid Ice 1898 +226 184 194 Golden Sand 1900 +186 117 142 Rose Dust 1902 +170 100 126 Medium Purple 1904 +148 73 102 Medium Purple 1906 +133 58 85 Brown 1908 +123 46 74 Brushed Burgundy 1910 + 0 129 91 Green Dazzle 200 +156 169 147 Laurel Green Medium Light 201 +138 170 144 Surf Bleu Light 202 +118 145 123 Spring Garden 203 + 80 114 93 Harbor Green 204 + 62 91 74 Evergreen 205 + 58 86 71 Grass Green Very Dark 206 +159 159 100 Chartreuse / Bright 208 +148 148 83 Medium Green / Yellow 210 +128 127 68 Medium Green / Yellow 212 +109 109 50 Medium Palmetto Green 214 + 98 99 46 Khaki 216 + 95 96 52 Olive Drab 218 +194 216 211 Pastel Blue 219 +149 198 191 Bridal Turquoise 220 + 56 158 151 Sea Green 221 + 0 141 140 Navigate 222 + 0 122 124 Light Green / Blue 223 + 0 112 108 M. D. Green 224 +208 219 145 Lemon 226 +203 222 123 Green Oak 227 +143 186 92 Lime 228 +128 174 77 Medium Green / Yellow 229 + 96 155 71 Pear 231 + 80 147 82 Sage 232 + 31 137 85 Kelly 233 +176 172 144 Spray Green 234 +165 161 124 Sage Green 235 +150 147 113 Medium Green / Grey 236 +122 119 89 Covert Green 237 +103 96 69 Military Olive 238 + 92 85 62 Dark Grey / Green 239 +193 209 181 Blue Green / Medium 243 +138 164 130 Medium Green 244 + 89 116 89 Juniper Medium Dark 245 + 82 102 75 Grass Green Dark 246 + 66 90 69 French Green 247 + 60 85 68 Grass Green Very Dark 248 + 57 75 58 Mitchell Green 249 +204 208 162 Pastel Green 251 +170 202 175 Sea Green Medium Light 252 +100 156 122 Grass Harper 253 + 77 138 109 Jade Medium 254 + 57 124 98 Dark Blue / Green 255 + 32 94 69 Green Petal 256 + 57 85 74 Enchanted Sea 257 + 56 71 64 Mitchell Green 258 + 47 62 51 Grey Wool 259 +193 225 185 Light Green / Yellow 261 +128 207 149 Pale Aqua 262 + 91 167 113 Green 263 + 0 130 94 Green Dazzle 264 + 0 125 94 Jade 265 + 13 119 94 Jade 266 +198 199 127 Light Pistachio 272 +187 183 90 Tarnished Gold 273 +155 158 72 Pistachio 274 +146 152 78 Medium Green / Yellow 275 +127 138 77 Medium Palmetto 276 + 90 110 41 Meadow 277 +190 166 99 PaleGreen-Yellow 282 +167 142 63 Olive 283 +149 122 43 Medium Yellow / Green 284 +111 92 44 Desert Cactus 285 +144 128 81 Antique Bronze 287 +127 112 66 Olive Green 288 +115 100 60 Moss 289 +103 187 170 Moss 291 + 29 133 122 Surf Bleu Medium 292 + 7 97 93 Peacock Blue 293 + 40 88 89 Dark Bottle Green 294 +107 114 106 Sedona Sage 295 + 82 87 80 Granite 296 + 84 98 93 Dark Gray 297 + 61 74 70 Dark Army Green 298 + 54 67 63 Black 299 +190 194 167 Overcast 2005 +133 132 70 Medium Green / Yellow 2011 +108 104 43 Bronze 2012 + 88 90 42 Green 2013 + 88 89 51 Cajun Mist 2014 + 75 72 45 Water Lilly 2015 + 68 66 47 Laurel Green Medium 2016 + 68 61 51 Black Chrome 2017 +185 207 204 Jade Tint 2039 +158 192 197 Canal Blue 2040 +151 185 189 Snow Blue 2041 +118 164 173 Surf Blue 2042 + 0 157 146 Deep Aqua 2215 + 52 113 66 Tropical Green 2335 +134 168 157 Surf Bleu Light 2411 +104 137 123 Pine Medium 2412 +111 125 109 Willow 2413 + 86 108 93 Harbor Green 2415 + 69 84 64 Dark Grey / Green 2417 +152 204 158 Medium Mint Green 2615 +102 180 121 Zephyr Green 2625 + 60 160 115 Ming Green 2635 +146 212 175 Ocean Wave 2811 +104 203 161 Green Light Bright 2812 + 70 169 138 Isle Green 2813 + 24 153 124 Turquoise 2814 + 0 137 109 Dark Blue / Green 2815 + 72 71 63 Olive 2965 +185 213 222 Ice Blue 301 +148 197 216 Moderate Blue 302 +104 156 185 Pale Purple 303 + 74 135 168 Cendre Blue 304 + 42 114 151 Petrol Blue 305 + 42 90 127 Imperial Blue 306 + 33 84 124 Lake Blue 307 + 30 69 106 Dark Blue 308 + 44 65 92 Dark Navy 309 +152 170 182 Blue Fog 310 +111 138 156 Country Blue 312 + 92 112 131 Dark Grey / Blue 314 + 69 89 102 Petrol Blue 316 + 62 78 93 Grey Pewter 318 + 53 72 85 Dark Blue / Green 320 +175 204 219 Crystal Blue 331 +108 150 186 Pale Purple 332 + 51 95 138 Imperial Blue 333 + 34 70 112 Navy Blue 334 + 43 54 85 Dark Navy 335 +171 189 189 Cloud Blue 340 +122 143 143 Grey 341 +100 125 130 Trellis 342 + 77 99 106 Dark Grey / Blue 343 + 65 85 90 Midnight 344 +190 209 219 Bleuberry Medium Light 351 +153 197 218 Moderate Blue 352 +122 167 197 Sky Blue 353 + 71 137 174 Pale Purple 354 + 39 83 121 Blue 355 + 35 66 103 Dark Blue 356 + 36 59 94 Dark Blue 357 + 41 50 78 Colonial Blue 358 + 59 57 72 Soot 359 + 47 45 57 Nightblu Arctic 360 +177 204 220 Crystal Blue 361 +129 177 206 Pale Blue / Green 362 + 81 144 186 Tropic Blue 363 + 66 127 174 Medium Blue 364 + 29 109 160 Teal 365 + 35 100 169 Magic Blue 366 + 20 82 152 Warrior Blue 367 + 32 64 134 Blue Twirl 368 +143 206 214 Pale Turquoise 369 + 94 203 223 Pacific Blue 370 + 0 179 212 Surf Blue 371 + 0 154 195 California Blue 372 + 0 144 187 Blue Horizon 373 + 0 117 180 Medium Blue 374 + 84 198 208 Spearmint 375 + 0 165 178 Medium Teal Blue 376 + 0 151 167 Dark Blue / Green 377 + 0 136 153 Dark Aqua Green 378 + 0 134 161 Dark Blue 379 +145 191 202 Sky Blue 383 + 70 143 164 Capri 384 + 30 116 141 Teal 385 + 5 111 136 Dark Blue 386 +143 183 195 Thistle Light 390 +107 160 177 Medium Green / Blue 391 + 71 137 160 Blue Moon 392 + 26 109 127 Medium Blue 393 + 42 97 107 Dark Blue / Green 394 + 34 87 99 Deep Atlantic 395 + 43 74 86 Deep Windsor 396 + 51 63 87 Light Midnight 3095 +120 156 178 Country Blue 3101 + 76 120 146 Slate Grey 3102 + 51 92 119 Medium Green / Blue 3103 + 41 79 105 Salem Blue 3104 + 38 65 88 Dragon Fly 3105 +119 193 194 Seafrost 3211 + 57 172 171 Grizzly Turquoise 3212 + 0 151 156 Teal Medium 3213 + 0 141 153 Marine Aqua 3214 + 0 108 120 Pro Teal 3215 + 63 117 122 Deep Atlantic 3216 + 34 106 117 Dark Jade 3217 + 16 84 92 Dark Teal 3218 +144 183 211 Baby Blue 3315 + 66 109 149 Cornflower 3325 + 44 90 143 Blue Dusk 3335 +149 173 170 Quarry 3405 + 45 174 206 Surf Blue 3431 + 0 144 186 Blue Horizon 3432 + 0 122 167 Pretty Blue 3433 + 0 114 161 Dark Turquoise Blue 3434 + 14 99 151 Deep Ocean 3435 + 62 144 197 Blithe 3541 + 25 126 183 Medium Blue 3542 + 9 115 175 Baltic Blue 3543 + 45 131 198 Sapphire 3651 + 0 102 176 Sapphire Dark 3652 + 0 95 172 Medium Blue 3653 +102 145 188 Pale Purple 3654 + 83 131 178 Regatta 3655 + 63 114 164 Blueball 3656 + 58 109 160 Wonder Blue 3657 + 36 52 113 Dark Blue 3685 + 0 188 216 Surf Blue 3705 + 0 161 200 California Blue 3715 + 0 129 185 Baltic Blue 3735 +166 219 222 Baby Blue 3745 +191 204 220 Blue Hint 3761 +137 165 199 Chambray 3762 +110 148 190 Baby Blue 3763 + 85 118 166 Parisian Blue 3764 + 78 101 139 Dark Slate Blue 3765 + 74 79 108 Petrol Blue 3766 + 54 58 79 Dark Grey / Blue 3767 + 45 47 64 Dark Navy 3768 + 45 44 54 Navy 3769 +123 144 185 Cosmic Sky 3871 +113 142 198 Paris Blue 3872 + 94 128 189 Jay Blue 3873 + 74 101 172 Light Blue 3874 + 52 61 125 Medium Purple 3875 + 53 85 136 Imperial Blue 3876 + 60 81 121 Dusty Navy 3877 + 56 59 89 Dark Navy 3878 +200 197 193 Bleu Mist Medium Light 410 +171 163 154 Light Green / Yellow 411 +153 142 131 Light Brown 412 +118 108 101 Black 413 +102 95 92 Plum Kitten 414 + 90 84 83 Rabbit 415 + 72 65 64 Mahogany 416 +205 197 188 Moonstruck 420 +198 187 171 Medium Beige 421 +155 142 126 Light Brown 422 +146 131 115 Fungi 423 +118 104 92 Medium Brown 424 +103 86 76 Egyptian Brown 425 + 93 77 67 Dark Fawn 426 +185 178 185 Pale Sterling Grey 433 +157 152 159 Dark Grey 434 +135 132 143 Dark Grey 435 + 94 90 100 Dark Gray 436 + 79 73 83 Ducky Mauve 437 + 76 73 81 Midnight 438 +189 169 166 Ashes Of Roses 450 +178 156 150 Sphinx 451 +156 133 127 Twilight Mauve 452 +137 118 115 Med. Dk. Khaki 453 +114 95 91 Medium Brown 454 +101 88 89 Sparrow 455 + 81 62 62 Dark Grey 456 +164 170 181 Medium Grey 461 +147 153 166 Medium Grey 462 +129 138 150 Antique Bleu Medium 463 +116 127 140 Pale Grey / Blue 464 + 88 90 101 Dark Gray 465 + 72 69 78 Midnight 466 +141 142 145 Platinum 471 +125 124 126 Dark Grey 472 +108 117 120 Metal 473 + 91 94 96 Dark Gray 474 + 77 80 83 Granite 475 + 66 69 71 Dark Navy 476 +199 203 206 Pearl 482 +181 181 181 Light Grey / Green 483 +160 164 169 Light Grey 484 +141 142 150 Dark Grey 485 +108 110 120 Folkstone Gray 486 + 93 97 104 Grey Blue 487 + 82 82 91 Midnight 488 + 67 62 68 Dark Grey 489 +162 168 185 LightPurple 491 +139 140 157 Medium Purple 492 +116 118 137 Medium Grey / Blue 493 +100 102 118 Lilac Mist 494 + 82 83 99 Nightshadow Blue 495 + 61 58 68 Dark grey 496 +176 166 153 String 4215 +164 154 154 Medium Grey 4251 +152 148 154 Silvery Grey 4252 +136 128 132 Med. Dk. Gray 4253 +121 113 114 Dark Grey 4254 +113 103 108 Charcoal 4255 + 96 89 93 Dark Gull Gray 4256 +199 188 183 Light Pink 4321 +196 185 175 Silver Lining 4322 +191 175 165 Pale Orange 4323 +172 154 142 Atmosphere 4324 +142 127 117 Fungi 4325 +120 105 97 Iron 4326 + 98 89 86 Black Chrome 4327 +115 110 123 Deep Blue 4351 +100 96 108 Dark Grey / Blue 4352 + 86 81 93 Graystone 4353 +188 187 195 Silver Grey 4571 +174 174 182 Dark Grey 4572 +157 156 165 Medium Grey 4573 +122 123 133 Dolphin 4574 +102 100 107 Gray Ridge 4575 + 80 76 81 Charcoal Grey 4576 +169 166 168 Silver 4611 +133 130 135 Penguin Grey 4612 +123 118 119 Charcoal 4613 + 99 93 92 Plum Kitten 4614 + 87 80 79 Twilight 4615 +148 144 143 GS Gray 4761 +138 136 133 Gray 4762 +118 118 118 Dark Grey 4763 + 94 96 91 Medium Grey 4764 + 73 74 70 Black Chrome 4765 +178 180 185 Grey 4835 +143 147 152 Pale Grey 4845 +126 126 132 Medium Grey 4855 + 72 66 73 Midnight 4895 +245 209 104 Gold 501 +234 189 81 Star Gold 502 +222 164 71 Gold 503 +209 138 54 Bright Gold 512 +185 122 56 Autumn Leaf 514 +175 109 43 Tiger Eye 516 +149 86 38 Medium Brown 518 +237 223 186 Tusk 520 +248 214 137 Blond 521 +251 204 93 Moonbeam 522 +255 185 51 Medium Orange 523 +255 162 0 Bright Orange 524 +255 152 0 Honey Dew 525 +254 133 0 Orange Sunrise 526 +247 202 149 Beach Sand 531 +251 175 98 Yellow Mist 532 +249 153 61 Orange 533 +247 134 67 Golden Poppy 534 +237 114 60 Coral Rose 535 +251 112 0 Dark Texas Orange 537 +237 230 207 Pale Orange 538 +229 224 190 Cream 539 +238 231 179 Wax Yellow 540 +240 225 138 Pale Yellow 541 +246 218 111 Snapdragon 542 +247 217 72 Gold Goblet 543 +250 207 59 Yellow 544 +253 203 33 Buttercup 546 +251 184 0 Tangerine 548 +222 179 124 Harvest Light 560 +211 173 104 Gold 561 +195 148 76 Oak Buff 562 +179 127 53 Gold 563 +154 111 55 Golden Grain 564 +136 95 53 Light Cocoa 565 +235 216 173 Pale Peach 571 +242 199 124 Cornsilk 572 +240 194 113 Golden Honey 573 +240 173 82 Scholastic 574 +232 152 63 Khaki 575 +223 127 49 Amberglow 576 +222 118 47 Golden Rust 577 +211 103 41 Orange 578 +225 228 140 Light Khaki Green 581 +220 225 118 Neon Green 583 +216 222 73 Dark Green 585 +238 216 194 Shell 591 +240 202 162 Coast Point 592 +239 171 122 Nutmeg Medium Light 593 +239 154 100 Pale Orange 594 +239 130 65 Apricot 595 +228 93 38 Hazel 596 +243 218 153 Light Orange 5205 +245 173 59 Manila 5235 +202 158 77 Medium Honey 5671 +160 120 59 Pale Brown 5672 +135 103 56 Medium Orange / Brown 5673 +219 180 133 Golden Olive / Light 5681 +210 163 107 Honey 5682 +191 134 78 Mocha Beige Medium 5683 +194 164 202 Viola 600 +176 138 185 African Violet 601 +128 88 146 Mulberry 602 +108 72 122 Jazz Purple 603 + 99 60 112 Bright Plum 604 + 84 50 95 Dark Purple 605 +172 182 200 Medium Grey 611 +151 161 186 Purple Cloud 612 +136 148 176 Purple Impression 613 +105 111 143 Copen Bleu Medium 614 + 86 93 127 Coastal Fjord 615 + 63 69 101 Deep Cobalt 616 +180 182 212 Ice Blue 621 +164 163 200 Pale Lilac 622 +144 140 184 Pale Purple 623 +125 117 168 Dark Lilac 624 +111 97 150 Corsican Blue 625 +100 86 139 Ultra Violet 626 +166 156 175 Wisteria 630 +149 135 158 Ocean Bleu 631 +125 106 130 Gun Metal Gray 632 +107 94 119 Cadet 633 +102 83 111 Mulled Grape 634 + 81 72 101 Blackberry 635 +122 126 187 Deep Periwinkle 641 +108 113 178 Light Royal Blue 642 + 87 93 162 Amparo Blue 643 + 54 54 120 Purple 644 +155 168 213 Light Purple 645 +126 139 194 Oriental Blue 646 +101 118 183 Medium Purple 647 + 77 96 169 Light Blue 648 + 68 80 147 Purple 649 +229 218 225 Light Orange / Red 651 +205 180 198 Haze 652 +171 138 163 Regal Orchid 653 +114 83 117 Crushed Grape 654 + 98 59 79 Medium Purple 655 + 79 59 72 Dark Grey 656 +120 121 175 Deep Periwinkle 661 +118 113 171 Light Purple 662 + 94 92 156 Violet Storm 663 + 89 81 146 Liberty 664 + 70 67 133 Mauve 665 +194 184 212 Purple Heather 671 +184 168 204 Lavender 672 +152 134 182 Bouganville 673 +125 103 159 Iris 674 + 99 79 128 Velvet Morning 675 + 95 63 111 Bright Plum 676 + 72 72 128 Purple 687 + 66 71 119 Skipper Blue 688 + 58 58 103 Dark Navy Blue 689 + 92 68 127 Imperial Purple 694 + 71 59 116 Dark Purple 695 + 68 55 110 Petrol Blue 696 +217 193 215 Light Pink 6001 +134 125 145 Penguin Grey 6271 +116 106 125 Light Grape 6272 + 99 90 115 Dark Grey / Blue 6273 +147 139 165 Ocean Bleu 6351 +134 127 154 Daybreak 6352 +123 116 142 Purple Ash 6353 + 93 83 115 Steel 6354 + 55 63 132 Medium Purple 6495 +187 159 169 Amethyst Medium Light 6501 +159 135 149 Light Brown 6502 +135 108 122 Grapeade 6503 +126 100 121 Gun Metal Gray 6504 +110 84 107 Grayish Purple 6505 +102 67 100 Dk. Plum 6655 + 80 55 82 Dark Purple 6657 +156 162 200 Pale Lilac 6881 +108 115 158 Bleached Denim 6882 +100 106 149 Slate Blue 6883 +221 38 46 Tuxedo Red 700 +215 36 57 Dark Red / Orange 701 +210 23 57 Rosewood 702 +198 0 50 Cardinal 703 +219 124 70 Sunburst 711 +187 104 52 Nutmeg 712 +137 69 48 Mink Brown 713 +120 57 41 Dark Brown 714 +104 49 49 Dark Brown 715 +120 72 59 Brown 719 +230 221 210 Turtledove 720 +210 178 143 Cream 721 +183 149 112 Beige 722 +173 137 100 Light Brown 723 +157 117 84 Fawn 724 +106 68 57 Clayrust 729 +236 231 228 Oyster 730 +237 228 209 Yellow / Gold 731 +231 208 182 Linen Medium 732 +224 193 159 Carmel Cream 733 +206 165 126 Tan 734 +174 128 91 Light Bronze 735 +153 108 74 Medium Brown 736 +140 86 62 Dark Brown 737 +119 77 68 Dark Brown 738 + 86 62 54 Brown 739 +224 189 170 Pale / Orange 740 +216 176 156 Toasted Almond 741 +190 148 127 Salmon 742 +185 137 118 Ash Rose 743 +162 117 100 Orange / Brown 744 +140 94 75 Russet 745 + 67 51 51 Black 749 +249 194 133 Wheat Light 751 +244 155 100 Chamois 752 +238 128 76 Gold 753 +225 107 58 Coral Rose 754 +221 91 44 Medium Orange 755 + 71 57 54 Black 759 +208 164 149 Misty Rose 761 +200 124 116 Canyon Clay 762 +162 82 82 Garnet Rose 763 +147 70 70 Earth Red 764 +219 165 152 Pink 765 +203 141 129 Brandied Apricot 766 +178 113 97 Dewberry 767 +169 102 89 Cedar Wood 768 +134 72 62 Dark Brown 769 +111 70 63 Amber Beige 778 + 81 63 62 Dark Grey 779 +236 158 122 Peach Pink 781 +222 136 99 Salmon Peach 782 +215 122 77 Toast 783 +182 96 66 Brown 784 +155 77 49 Spice 785 +133 60 41 Brown 786 +220 187 181 Lotus 791 +202 160 153 Misty Rose 792 +176 131 127 Tawny Birch 793 +155 105 103 Dark Salmon 794 +143 89 89 Renaissance Rose 795 +139 88 82 Brown 796 +128 86 82 Brown / Pink 797 +151 83 48 Medium Brown 7125 +226 211 183 Champagne Mist 7205 +119 80 61 Dark Brown 7361 +100 64 48 Dark Brown 7362 +222 189 161 Pale Brown 7366 +214 172 141 Light Brown 7367 +195 142 111 Dk. Ecru 7368 +182 124 92 Sirocco 7369 +105 62 45 Dark Brown 7371 + 81 52 47 Dark Brown 7785 +195 181 186 Pale Grey / Pink 7981 +180 153 150 Sphinx 7982 +146 116 118 Medium Brown 7983 +107 79 78 Plum Wine 7984 + 91 63 63 Dark Brown 7985 + 79 51 54 Brown Stone 7986 +229 228 240 Bright White 800 +229 228 239 Bright White 801 +217 193 177 Nude Gold 809 +219 203 186 Cream 810 +201 179 158 Sea Shell 811 +177 159 142 Light Taupe 812 +160 143 125 Taupe 813 +151 132 119 Moon Rock 814 +137 119 103 Pine Bark 815 +118 102 87 Medium Green / Yellow 816 +181 151 130 Fawn 819 +229 227 229 Silver Gray 820 +233 233 240 Blue Blush 821 +175 146 131 Taupe 829 +144 107 89 Beige 839 +198 174 135 Drab Gray 840 +189 158 123 Tawny Medium 841 +180 149 114 Umber 842 +162 138 111 Med. Taupe 843 +137 112 81 Medium Brown 844 +126 97 66 Cinnamon 845 +108 81 53 Brown 846 +129 96 87 Medium Brown 849 +236 232 228 Oyster 850 +102 81 72 Dark Fawn 859 +187 185 172 Skylight 861 +165 162 148 Pale Gray Green 862 +153 150 138 GS Gray 863 + 91 70 62 Dark Brown 869 +160 139 120 Light Brown 871 +148 122 103 Woodsmoke 872 +122 100 88 Medium Brown 873 +104 87 76 Egyptian Brown 874 +236 234 234 Amethyst Light 880 +159 126 105 Fawn 8295 +170 137 97 Candied Ginger 8425 + 46 42 45 Night Sky 900 + 40 37 38 Black 901 +191 167 100 PaleGreen-Yellow 286 diff --git a/inkstitch/palettes/InkStitch FuFu Rayon.gpl b/inkstitch/palettes/InkStitch FuFu Rayon.gpl new file mode 100644 index 0000000..2f64917 --- /dev/null +++ b/inkstitch/palettes/InkStitch FuFu Rayon.gpl @@ -0,0 +1,717 @@ +GIMP Palette +Name: Ink/Stitch: FuFu Rayon +Columns: 4 +# RGB Value Color Name Number +237 225 228 Oyster 100 +240 204 216 Pale Lavender 101 +241 187 205 Sweet Lilac 102 +243 171 191 Carnation 103 +241 151 175 Medium Pink 104 +236 122 155 Floral Pink 105 +226 93 134 Dark Pink 106 +216 67 118 Medium Pink 107 +244 203 191 Cloud Pink 110 +243 191 176 Peach Melba 111 +246 149 127 Flamingo 113 +241 204 207 Light Pink 116 +222 148 155 Sea Pink 117 +237 191 213 Light Pink 123 +236 151 192 Medium Pink 124 +234 134 177 Pink Petunia 125 +220 122 171 Pink 126 +206 85 152 Medium Pink 127 +179 49 122 Dark Pink 128 +158 28 97 Rebecca Rose 129 +228 191 216 Darker Lilac 130 +224 169 208 Impatient 131 +198 140 183 Lavender Medium Light 132 +192 122 175 Violet 133 +159 101 152 Plum Medium 134 +137 64 123 Deep Violet 135 +126 58 113 Dark Red 136 +122 53 107 Dark Purple 137 +100 42 84 Pale Purple 138 + 80 37 69 Medium Purple 139 +237 175 169 Pink Petal 140 +235 151 147 Emily Pink 141 +231 139 136 Peach Bloosom 142 +222 101 100 Dark Red / Orange 143 +205 86 80 Dark Salmon Pink 144 +198 73 71 Dark Salmon 145 +181 45 57 Terra Cotta 147 +164 41 56 Wildfire 148 +235 185 196 Shell 151 +233 157 179 Medium Pink 152 +232 135 159 Dusty Rose 153 +232 121 145 Medium Pink 154 +220 73 97 Cerise 155 +216 60 87 Dark Pink 156 +193 52 77 Dusky Rose 157 +231 224 224 Silver Gray 160 +237 209 201 Rosewater 161 +231 185 177 Light Peach 163 +191 131 137 Light Pink 165 +169 94 106 Rose Wine 166 +157 86 95 Mauvewood 167 +144 78 78 Dark Brown 168 +251 173 140 Coral Reef 169 +255 155 107 Light Orange 170 +240 107 55 Golden Brown 171 +236 92 38 Red Pepper 172 +234 90 55 Orange 173 +242 179 165 Soft Coral 180 +235 132 131 Peach Bloosom 181 +233 117 116 Tea Rose 182 +230 118 103 Medium Orange 184 +223 96 76 Dark Salmon Pink 185 +209 59 57 Tomato 186 +190 50 63 Burgundy 188 +185 44 64 Poinsettia 190 +162 35 54 Wildfire 192 +142 35 52 Burgundy 193 +149 42 66 Perfect Ruby 194 +125 37 58 Russet 195 +113 42 53 Wine 196 +107 46 55 Wine 197 + 99 43 53 Warm Wine 198 + 86 43 54 Chocolate 199 +242 194 189 Desert Bloom 1011 +225 121 143 Medium Pink 1013 +201 102 125 Med Plum 1014 +232 210 209 Orchid Ice 1020 +236 194 191 Pink Mist 1021 +213 155 176 Pale Pink 1031 +197 132 159 Polignac 1032 +180 106 136 Medium Purple 1033 +168 91 123 Dahlia Mauve 1034 +147 65 98 Medium Purple 1035 +134 63 92 Dark Brown 1036 +124 47 75 Wine 1037 +102 44 70 Grape Shake 1038 +231 69 42 Orange 1051 +226 59 44 Honeysuckle 1052 +224 54 43 Honeysuckle 1053 +243 181 185 Candy Pink 1081 +235 148 162 Classic Wine 1082 +223 85 121 Magenta Dark 1083 +214 53 92 Cerise 1084 +199 19 66 Rose / Very Dark 1085 +187 0 64 Country Red 1086 +240 118 125 Confetti 1106 +240 104 111 Dusty Rose 1107 +218 137 146 Medium Pink 1118 +209 110 134 Medium Pink 1119 +192 82 113 Dark Pink 1120 +176 72 96 Baroque Rose 1121 +163 58 80 Raspberry Medium Dark 1122 +152 36 72 Rose Wine Very Dark 1123 +219 116 126 Tea Rose 1128 +150 58 81 Medium maroom 1182 +150 37 86 Raspberry 1295 +131 49 65 Winterberry 1384 +224 143 193 Petal Pink 1400 +215 118 177 Medium Pink 1401 +208 103 164 Deep Mauve 1402 +185 72 138 Very Berry 1403 +169 63 130 Purple 1404 +161 58 125 Purple 1405 +148 41 109 Dark Red 1406 +243 184 183 Lt. Pink 1510 +245 148 141 Raspberry Light 1511 +243 111 98 Watermelon 1512 +239 86 70 Flamingo 1513 +235 71 51 Light Bronze 1514 +226 94 119 Shrimp 1545 +122 32 58 Russet 1586 +195 152 156 Adobe Rose 1600 +173 125 139 Light Purple 1601 +156 98 114 Perfect Ruby 1602 +133 73 96 Dark Brown 1603 +120 67 82 Dark Purple 1604 +189 156 172 Amethyst Medium Light 1607 +151 108 136 Rose Dust 1608 + 86 49 66 Intense Maroon 1609 +227 104 167 Soft Pink 1700 +220 65 141 Dark Pink 1701 +213 45 126 Dark Pink 1702 +208 25 114 Ruby Glint 1703 +232 89 139 Dark Pink 1714 +219 55 112 Beauty Rose Medium 1715 +204 14 96 Red 1716 +205 68 127 Dark Pink 1727 +187 20 93 Dark Pink 1728 +171 20 88 Antique Rose Ultra Dark 1729 +226 206 208 Orchid Ice 1898 +226 184 194 Golden Sand 1900 +186 117 142 Rose Dust 1902 +170 100 126 Medium Purple 1904 +148 73 102 Medium Purple 1906 +133 58 85 Brown 1908 +123 46 74 Brushed Burgundy 1910 + 0 129 91 Green Dazzle 200 +156 169 147 Laurel Green Medium Light 201 +138 170 144 Surf Bleu Light 202 +118 145 123 Spring Garden 203 + 80 114 93 Harbor Green 204 + 62 91 74 Evergreen 205 + 58 86 71 Grass Green Very Dark 206 +159 159 100 Chartreuse / Bright 208 +148 148 83 Medium Green / Yellow 210 +128 127 68 Medium Green / Yellow 212 +109 109 50 Medium Palmetto Green 214 + 98 99 46 Khaki 216 + 95 96 52 Olive Drab 218 +194 216 211 Pastel Blue 219 +149 198 191 Bridal Turquoise 220 + 56 158 151 Sea Green 221 + 0 141 140 Navigate 222 + 0 122 124 Light Green / Blue 223 + 0 112 108 M. D. Green 224 +208 219 145 Lemon 226 +203 222 123 Green Oak 227 +143 186 92 Lime 228 +128 174 77 Medium Green / Yellow 229 + 96 155 71 Pear 231 + 80 147 82 Sage 232 + 31 137 85 Kelly 233 +176 172 144 Spray Green 234 +165 161 124 Sage Green 235 +150 147 113 Medium Green / Grey 236 +122 119 89 Covert Green 237 +103 96 69 Military Olive 238 + 92 85 62 Dark Grey / Green 239 +193 209 181 Blue Green / Medium 243 +138 164 130 Medium Green 244 + 89 116 89 Juniper Medium Dark 245 + 82 102 75 Grass Green Dark 246 + 66 90 69 French Green 247 + 60 85 68 Grass Green Very Dark 248 + 57 75 58 Mitchell Green 249 +204 208 162 Pastel Green 251 +170 202 175 Sea Green Medium Light 252 +100 156 122 Grass Harper 253 + 77 138 109 Jade Medium 254 + 57 124 98 Dark Blue / Green 255 + 32 94 69 Green Petal 256 + 57 85 74 Enchanted Sea 257 + 56 71 64 Mitchell Green 258 + 47 62 51 Grey Wool 259 +193 225 185 Light Green / Yellow 261 +128 207 149 Pale Aqua 262 + 91 167 113 Green 263 + 0 130 94 Green Dazzle 264 + 0 125 94 Jade 265 + 13 119 94 Jade 266 +198 199 127 Light Pistachio 272 +187 183 90 Tarnished Gold 273 +155 158 72 Pistachio 274 +146 152 78 Medium Green / Yellow 275 +127 138 77 Medium Palmetto 276 + 90 110 41 Meadow 277 +190 166 99 PaleGreen-Yellow 282 +167 142 63 Olive 283 +149 122 43 Medium Yellow / Green 284 +111 92 44 Desert Cactus 285 +144 128 81 Antique Bronze 287 +127 112 66 Olive Green 288 +115 100 60 Moss 289 +103 187 170 Moss 291 + 29 133 122 Surf Bleu Medium 292 + 7 97 93 Peacock Blue 293 + 40 88 89 Dark Bottle Green 294 +107 114 106 Sedona Sage 295 + 82 87 80 Granite 296 + 84 98 93 Dark Gray 297 + 61 74 70 Dark Army Green 298 + 54 67 63 Black 299 +190 194 167 Overcast 2005 +133 132 70 Medium Green / Yellow 2011 +108 104 43 Bronze 2012 + 88 90 42 Green 2013 + 88 89 51 Cajun Mist 2014 + 75 72 45 Water Lilly 2015 + 68 66 47 Laurel Green Medium 2016 + 68 61 51 Black Chrome 2017 +185 207 204 Jade Tint 2039 +158 192 197 Canal Blue 2040 +151 185 189 Snow Blue 2041 +118 164 173 Surf Blue 2042 + 0 157 146 Deep Aqua 2215 + 52 113 66 Tropical Green 2335 +134 168 157 Surf Bleu Light 2411 +104 137 123 Pine Medium 2412 +111 125 109 Willow 2413 + 86 108 93 Harbor Green 2415 + 69 84 64 Dark Grey / Green 2417 +152 204 158 Medium Mint Green 2615 +102 180 121 Zephyr Green 2625 + 60 160 115 Ming Green 2635 +146 212 175 Ocean Wave 2811 +104 203 161 Green Light Bright 2812 + 70 169 138 Isle Green 2813 + 24 153 124 Turquoise 2814 + 0 137 109 Dark Blue / Green 2815 + 72 71 63 Olive 2965 +185 213 222 Ice Blue 301 +148 197 216 Moderate Blue 302 +104 156 185 Pale Purple 303 + 74 135 168 Cendre Blue 304 + 42 114 151 Petrol Blue 305 + 42 90 127 Imperial Blue 306 + 33 84 124 Lake Blue 307 + 30 69 106 Dark Blue 308 + 44 65 92 Dark Navy 309 +152 170 182 Blue Fog 310 +111 138 156 Country Blue 312 + 92 112 131 Dark Grey / Blue 314 + 69 89 102 Petrol Blue 316 + 62 78 93 Grey Pewter 318 + 53 72 85 Dark Blue / Green 320 +175 204 219 Crystal Blue 331 +108 150 186 Pale Purple 332 + 51 95 138 Imperial Blue 333 + 34 70 112 Navy Blue 334 + 43 54 85 Dark Navy 335 +171 189 189 Cloud Blue 340 +122 143 143 Grey 341 +100 125 130 Trellis 342 + 77 99 106 Dark Grey / Blue 343 + 65 85 90 Midnight 344 +190 209 219 Bleuberry Medium Light 351 +153 197 218 Moderate Blue 352 +122 167 197 Sky Blue 353 + 71 137 174 Pale Purple 354 + 39 83 121 Blue 355 + 35 66 103 Dark Blue 356 + 36 59 94 Dark Blue 357 + 41 50 78 Colonial Blue 358 + 59 57 72 Soot 359 + 47 45 57 Nightblu Arctic 360 +177 204 220 Crystal Blue 361 +129 177 206 Pale Blue / Green 362 + 81 144 186 Tropic Blue 363 + 66 127 174 Medium Blue 364 + 29 109 160 Teal 365 + 35 100 169 Magic Blue 366 + 20 82 152 Warrior Blue 367 + 32 64 134 Blue Twirl 368 +143 206 214 Pale Turquoise 369 + 94 203 223 Pacific Blue 370 + 0 179 212 Surf Blue 371 + 0 154 195 California Blue 372 + 0 144 187 Blue Horizon 373 + 0 117 180 Medium Blue 374 + 84 198 208 Spearmint 375 + 0 165 178 Medium Teal Blue 376 + 0 151 167 Dark Blue / Green 377 + 0 136 153 Dark Aqua Green 378 + 0 134 161 Dark Blue 379 +145 191 202 Sky Blue 383 + 70 143 164 Capri 384 + 30 116 141 Teal 385 + 5 111 136 Dark Blue 386 +143 183 195 Thistle Light 390 +107 160 177 Medium Green / Blue 391 + 71 137 160 Blue Moon 392 + 26 109 127 Medium Blue 393 + 42 97 107 Dark Blue / Green 394 + 34 87 99 Deep Atlantic 395 + 43 74 86 Deep Windsor 396 + 51 63 87 Light Midnight 3095 +120 156 178 Country Blue 3101 + 76 120 146 Slate Grey 3102 + 51 92 119 Medium Green / Blue 3103 + 41 79 105 Salem Blue 3104 + 38 65 88 Dragon Fly 3105 +119 193 194 Seafrost 3211 + 57 172 171 Grizzly Turquoise 3212 + 0 151 156 Teal Medium 3213 + 0 141 153 Marine Aqua 3214 + 0 108 120 Pro Teal 3215 + 63 117 122 Deep Atlantic 3216 + 34 106 117 Dark Jade 3217 + 16 84 92 Dark Teal 3218 +144 183 211 Baby Blue 3315 + 66 109 149 Cornflower 3325 + 44 90 143 Blue Dusk 3335 +149 173 170 Quarry 3405 + 45 174 206 Surf Blue 3431 + 0 144 186 Blue Horizon 3432 + 0 122 167 Pretty Blue 3433 + 0 114 161 Dark Turquoise Blue 3434 + 14 99 151 Deep Ocean 3435 + 62 144 197 Blithe 3541 + 25 126 183 Medium Blue 3542 + 9 115 175 Baltic Blue 3543 + 45 131 198 Sapphire 3651 + 0 102 176 Sapphire Dark 3652 + 0 95 172 Medium Blue 3653 +102 145 188 Pale Purple 3654 + 83 131 178 Regatta 3655 + 63 114 164 Blueball 3656 + 58 109 160 Wonder Blue 3657 + 36 52 113 Dark Blue 3685 + 0 188 216 Surf Blue 3705 + 0 161 200 California Blue 3715 + 0 129 185 Baltic Blue 3735 +166 219 222 Baby Blue 3745 +191 204 220 Blue Hint 3761 +137 165 199 Chambray 3762 +110 148 190 Baby Blue 3763 + 85 118 166 Parisian Blue 3764 + 78 101 139 Dark Slate Blue 3765 + 74 79 108 Petrol Blue 3766 + 54 58 79 Dark Grey / Blue 3767 + 45 47 64 Dark Navy 3768 + 45 44 54 Navy 3769 +123 144 185 Cosmic Sky 3871 +113 142 198 Paris Blue 3872 + 94 128 189 Jay Blue 3873 + 74 101 172 Light Blue 3874 + 52 61 125 Medium Purple 3875 + 53 85 136 Imperial Blue 3876 + 60 81 121 Dusty Navy 3877 + 56 59 89 Dark Navy 3878 +200 197 193 Bleu Mist Medium Light 410 +171 163 154 Light Green / Yellow 411 +153 142 131 Light Brown 412 +118 108 101 Black 413 +102 95 92 Plum Kitten 414 + 90 84 83 Rabbit 415 + 72 65 64 Mahogany 416 +205 197 188 Moonstruck 420 +198 187 171 Medium Beige 421 +155 142 126 Light Brown 422 +146 131 115 Fungi 423 +118 104 92 Medium Brown 424 +103 86 76 Egyptian Brown 425 + 93 77 67 Dark Fawn 426 +185 178 185 Pale Sterling Grey 433 +157 152 159 Dark Grey 434 +135 132 143 Dark Grey 435 + 94 90 100 Dark Gray 436 + 79 73 83 Ducky Mauve 437 + 76 73 81 Midnight 438 +189 169 166 Ashes Of Roses 450 +178 156 150 Sphinx 451 +156 133 127 Twilight Mauve 452 +137 118 115 Med. Dk. Khaki 453 +114 95 91 Medium Brown 454 +101 88 89 Sparrow 455 + 81 62 62 Dark Grey 456 +164 170 181 Medium Grey 461 +147 153 166 Medium Grey 462 +129 138 150 Antique Bleu Medium 463 +116 127 140 Pale Grey / Blue 464 + 88 90 101 Dark Gray 465 + 72 69 78 Midnight 466 +141 142 145 Platinum 471 +125 124 126 Dark Grey 472 +108 117 120 Metal 473 + 91 94 96 Dark Gray 474 + 77 80 83 Granite 475 + 66 69 71 Dark Navy 476 +199 203 206 Pearl 482 +181 181 181 Light Grey / Green 483 +160 164 169 Light Grey 484 +141 142 150 Dark Grey 485 +108 110 120 Folkstone Gray 486 + 93 97 104 Grey Blue 487 + 82 82 91 Midnight 488 + 67 62 68 Dark Grey 489 +162 168 185 LightPurple 491 +139 140 157 Medium Purple 492 +116 118 137 Medium Grey / Blue 493 +100 102 118 Lilac Mist 494 + 82 83 99 Nightshadow Blue 495 + 61 58 68 Dark grey 496 +176 166 153 String 4215 +164 154 154 Medium Grey 4251 +152 148 154 Silvery Grey 4252 +136 128 132 Med. Dk. Gray 4253 +121 113 114 Dark Grey 4254 +113 103 108 Charcoal 4255 + 96 89 93 Dark Gull Gray 4256 +199 188 183 Light Pink 4321 +196 185 175 Silver Lining 4322 +191 175 165 Pale Orange 4323 +172 154 142 Atmosphere 4324 +142 127 117 Fungi 4325 +120 105 97 Iron 4326 + 98 89 86 Black Chrome 4327 +115 110 123 Deep Blue 4351 +100 96 108 Dark Grey / Blue 4352 + 86 81 93 Graystone 4353 +188 187 195 Silver Grey 4571 +174 174 182 Dark Grey 4572 +157 156 165 Medium Grey 4573 +122 123 133 Dolphin 4574 +102 100 107 Gray Ridge 4575 + 80 76 81 Charcoal Grey 4576 +169 166 168 Silver 4611 +133 130 135 Penguin Grey 4612 +123 118 119 Charcoal 4613 + 99 93 92 Plum Kitten 4614 + 87 80 79 Twilight 4615 +148 144 143 GS Gray 4761 +138 136 133 Gray 4762 +118 118 118 Dark Grey 4763 + 94 96 91 Medium Grey 4764 + 73 74 70 Black Chrome 4765 +178 180 185 Grey 4835 +143 147 152 Pale Grey 4845 +126 126 132 Medium Grey 4855 + 72 66 73 Midnight 4895 +245 209 104 Gold 501 +234 189 81 Star Gold 502 +222 164 71 Gold 503 +209 138 54 Bright Gold 512 +185 122 56 Autumn Leaf 514 +175 109 43 Tiger Eye 516 +149 86 38 Medium Brown 518 +237 223 186 Tusk 520 +248 214 137 Blond 521 +251 204 93 Moonbeam 522 +255 185 51 Medium Orange 523 +255 162 0 Bright Orange 524 +255 152 0 Honey Dew 525 +254 133 0 Orange Sunrise 526 +247 202 149 Beach Sand 531 +251 175 98 Yellow Mist 532 +249 153 61 Orange 533 +247 134 67 Golden Poppy 534 +237 114 60 Coral Rose 535 +251 112 0 Dark Texas Orange 537 +237 230 207 Pale Orange 538 +229 224 190 Cream 539 +238 231 179 Wax Yellow 540 +240 225 138 Pale Yellow 541 +246 218 111 Snapdragon 542 +247 217 72 Gold Goblet 543 +250 207 59 Yellow 544 +253 203 33 Buttercup 546 +251 184 0 Tangerine 548 +222 179 124 Harvest Light 560 +211 173 104 Gold 561 +195 148 76 Oak Buff 562 +179 127 53 Gold 563 +154 111 55 Golden Grain 564 +136 95 53 Light Cocoa 565 +235 216 173 Pale Peach 571 +242 199 124 Cornsilk 572 +240 194 113 Golden Honey 573 +240 173 82 Scholastic 574 +232 152 63 Khaki 575 +223 127 49 Amberglow 576 +222 118 47 Golden Rust 577 +211 103 41 Orange 578 +225 228 140 Light Khaki Green 581 +220 225 118 Neon Green 583 +216 222 73 Dark Green 585 +238 216 194 Shell 591 +240 202 162 Coast Point 592 +239 171 122 Nutmeg Medium Light 593 +239 154 100 Pale Orange 594 +239 130 65 Apricot 595 +228 93 38 Hazel 596 +243 218 153 Light Orange 5205 +245 173 59 Manila 5235 +202 158 77 Medium Honey 5671 +160 120 59 Pale Brown 5672 +135 103 56 Medium Orange / Brown 5673 +219 180 133 Golden Olive / Light 5681 +210 163 107 Honey 5682 +191 134 78 Mocha Beige Medium 5683 +194 164 202 Viola 600 +176 138 185 African Violet 601 +128 88 146 Mulberry 602 +108 72 122 Jazz Purple 603 + 99 60 112 Bright Plum 604 + 84 50 95 Dark Purple 605 +172 182 200 Medium Grey 611 +151 161 186 Purple Cloud 612 +136 148 176 Purple Impression 613 +105 111 143 Copen Bleu Medium 614 + 86 93 127 Coastal Fjord 615 + 63 69 101 Deep Cobalt 616 +180 182 212 Ice Blue 621 +164 163 200 Pale Lilac 622 +144 140 184 Pale Purple 623 +125 117 168 Dark Lilac 624 +111 97 150 Corsican Blue 625 +100 86 139 Ultra Violet 626 +166 156 175 Wisteria 630 +149 135 158 Ocean Bleu 631 +125 106 130 Gun Metal Gray 632 +107 94 119 Cadet 633 +102 83 111 Mulled Grape 634 + 81 72 101 Blackberry 635 +122 126 187 Deep Periwinkle 641 +108 113 178 Light Royal Blue 642 + 87 93 162 Amparo Blue 643 + 54 54 120 Purple 644 +155 168 213 Light Purple 645 +126 139 194 Oriental Blue 646 +101 118 183 Medium Purple 647 + 77 96 169 Light Blue 648 + 68 80 147 Purple 649 +229 218 225 Light Orange / Red 651 +205 180 198 Haze 652 +171 138 163 Regal Orchid 653 +114 83 117 Crushed Grape 654 + 98 59 79 Medium Purple 655 + 79 59 72 Dark Grey 656 +120 121 175 Deep Periwinkle 661 +118 113 171 Light Purple 662 + 94 92 156 Violet Storm 663 + 89 81 146 Liberty 664 + 70 67 133 Mauve 665 +194 184 212 Purple Heather 671 +184 168 204 Lavender 672 +152 134 182 Bouganville 673 +125 103 159 Iris 674 + 99 79 128 Velvet Morning 675 + 95 63 111 Bright Plum 676 + 72 72 128 Purple 687 + 66 71 119 Skipper Blue 688 + 58 58 103 Dark Navy Blue 689 + 92 68 127 Imperial Purple 694 + 71 59 116 Dark Purple 695 + 68 55 110 Petrol Blue 696 +217 193 215 Light Pink 6001 +134 125 145 Penguin Grey 6271 +116 106 125 Light Grape 6272 + 99 90 115 Dark Grey / Blue 6273 +147 139 165 Ocean Bleu 6351 +134 127 154 Daybreak 6352 +123 116 142 Purple Ash 6353 + 93 83 115 Steel 6354 + 55 63 132 Medium Purple 6495 +187 159 169 Amethyst Medium Light 6501 +159 135 149 Light Brown 6502 +135 108 122 Grapeade 6503 +126 100 121 Gun Metal Gray 6504 +110 84 107 Grayish Purple 6505 +102 67 100 Dk. Plum 6655 + 80 55 82 Dark Purple 6657 +156 162 200 Pale Lilac 6881 +108 115 158 Bleached Denim 6882 +100 106 149 Slate Blue 6883 +221 38 46 Tuxedo Red 700 +215 36 57 Dark Red / Orange 701 +210 23 57 Rosewood 702 +198 0 50 Cardinal 703 +219 124 70 Sunburst 711 +187 104 52 Nutmeg 712 +137 69 48 Mink Brown 713 +120 57 41 Dark Brown 714 +104 49 49 Dark Brown 715 +120 72 59 Brown 719 +230 221 210 Turtledove 720 +210 178 143 Cream 721 +183 149 112 Beige 722 +173 137 100 Light Brown 723 +157 117 84 Fawn 724 +106 68 57 Clayrust 729 +236 231 228 Oyster 730 +237 228 209 Yellow / Gold 731 +231 208 182 Linen Medium 732 +224 193 159 Carmel Cream 733 +206 165 126 Tan 734 +174 128 91 Light Bronze 735 +153 108 74 Medium Brown 736 +140 86 62 Dark Brown 737 +119 77 68 Dark Brown 738 + 86 62 54 Brown 739 +224 189 170 Pale / Orange 740 +216 176 156 Toasted Almond 741 +190 148 127 Salmon 742 +185 137 118 Ash Rose 743 +162 117 100 Orange / Brown 744 +140 94 75 Russet 745 + 67 51 51 Black 749 +249 194 133 Wheat Light 751 +244 155 100 Chamois 752 +238 128 76 Gold 753 +225 107 58 Coral Rose 754 +221 91 44 Medium Orange 755 + 71 57 54 Black 759 +208 164 149 Misty Rose 761 +200 124 116 Canyon Clay 762 +162 82 82 Garnet Rose 763 +147 70 70 Earth Red 764 +219 165 152 Pink 765 +203 141 129 Brandied Apricot 766 +178 113 97 Dewberry 767 +169 102 89 Cedar Wood 768 +134 72 62 Dark Brown 769 +111 70 63 Amber Beige 778 + 81 63 62 Dark Grey 779 +236 158 122 Peach Pink 781 +222 136 99 Salmon Peach 782 +215 122 77 Toast 783 +182 96 66 Brown 784 +155 77 49 Spice 785 +133 60 41 Brown 786 +220 187 181 Lotus 791 +202 160 153 Misty Rose 792 +176 131 127 Tawny Birch 793 +155 105 103 Dark Salmon 794 +143 89 89 Renaissance Rose 795 +139 88 82 Brown 796 +128 86 82 Brown / Pink 797 +151 83 48 Medium Brown 7125 +226 211 183 Champagne Mist 7205 +119 80 61 Dark Brown 7361 +100 64 48 Dark Brown 7362 +222 189 161 Pale Brown 7366 +214 172 141 Light Brown 7367 +195 142 111 Dk. Ecru 7368 +182 124 92 Sirocco 7369 +105 62 45 Dark Brown 7371 + 81 52 47 Dark Brown 7785 +195 181 186 Pale Grey / Pink 7981 +180 153 150 Sphinx 7982 +146 116 118 Medium Brown 7983 +107 79 78 Plum Wine 7984 + 91 63 63 Dark Brown 7985 + 79 51 54 Brown Stone 7986 +229 228 240 Bright White 800 +217 193 177 Nude Gold 809 +219 203 186 Cream 810 +201 179 158 Sea Shell 811 +177 159 142 Light Taupe 812 +160 143 125 Taupe 813 +151 132 119 Moon Rock 814 +137 119 103 Pine Bark 815 +118 102 87 Medium Green / Yellow 816 +181 151 130 Fawn 819 +229 227 229 Silver Gray 820 +233 233 240 Blue Blush 821 +175 146 131 Taupe 829 +144 107 89 Beige 839 +198 174 135 Drab Gray 840 +189 158 123 Tawny Medium 841 +180 149 114 Umber 842 +162 138 111 Med. Taupe 843 +137 112 81 Medium Brown 844 +126 97 66 Cinnamon 845 +108 81 53 Brown 846 +129 96 87 Medium Brown 849 +236 232 228 Oyster 850 +237 237 245 Pale Silver 851 +102 81 72 Dark Fawn 859 +187 185 172 Skylight 861 +165 162 148 Pale Gray Green 862 +153 150 138 GS Gray 863 + 91 70 62 Dark Brown 869 +160 139 120 Light Brown 871 +148 122 103 Woodsmoke 872 +122 100 88 Medium Brown 873 +104 87 76 Egyptian Brown 874 +236 234 234 Amethyst Light 880 +159 126 105 Fawn 8295 +170 137 97 Candied Ginger 8425 + 46 42 45 Night Sky 900 + 40 37 38 Black 901 +191 167 100 PaleGreen-Yellow 286 diff --git a/inkstitch/palettes/InkStitch Gunold.gpl b/inkstitch/palettes/InkStitch Gunold.gpl new file mode 100644 index 0000000..efa9127 --- /dev/null +++ b/inkstitch/palettes/InkStitch Gunold.gpl @@ -0,0 +1,134 @@ +GIMP Palette +Name: Ink/Stitch: Gunold +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 61005 +102 51 0 Brown 61129 +102 55 0 Expresso 61130 +255 102 0 Dk Tex Orange 61078 +255 105 0 Sunkist 61184 +255 204 0 Pumpkin 61065 +125 80 41 Sienna 61057 +102 51 51 Smokey 61183 +204 51 51 Auburn 61169 +204 72 51 Dark Rust 61181 + 0 73 51 Dk Green 61103 + 0 75 51 Green Sail 61171 + 0 77 51 Green Petal 61174 + 0 79 51 Green Sail2 61536 +153 102 51 Chocolate 61058 +153 105 51 Date 61158 +225 120 51 Rust 61021 +153 153 51 Palmetto 61176 +204 153 51 Almond 61025 +204 155 51 Almond2 61056 +204 157 51 Toast 61126 +255 153 51 Yellow 61024 +255 155 51 Yellow2 61137 +255 157 51 Yellow3 61185 +204 204 51 Daffodil 61067 +240 204 51 Sun Gold 61159 +225 225 51 Star Gold 61023 +225 227 51 Glow 61135 +225 229 51 Star Gold2 61187 +170 120 53 Wicker 61128 +140 95 65 Lt Cocoa 61170 + 0 0 75 Midnight Navy 61043 + 0 5 75 Midnight Navy2 61044 +255 0 75 Red Berry 61039 +255 5 75 Red Berry2 61147 +102 25 75 Red Jubilee 61035 +102 27 75 Dark Maroon 61189 + 75 75 75 Twilight 61220 +255 80 90 Bashful Pink 61119 +255 240 90 Goldenrod 61124 +255 0 102 Persimmon 61037 +153 80 102 Wine 61190 +153 83 102 Wine2 61214 + 51 120 102 Greenstone 61079 + 51 123 102 Green Forest 61208 + 51 125 102 Fern Green 61230 + 51 127 102 Oceanic Green 61513 + 51 129 102 Fern Green2 61517 +153 121 102 Sand Dune 61156 +204 153 102 Ashley Gold 61055 +153 204 102 Erin Green 61510 +140 230 104 Green Oak 61047 +140 233 104 Peapod 61177 +215 0 120 Cherry Punch 61192 +215 5 120 Crimson 61533 + 0 40 120 Blue Ribbon 61200 + 61 89 120 Dark Teal 61162 +230 51 125 Ruby Glint 61231 +230 55 125 Ruby Glint2 61511 + 0 153 130 Dk Emerald 61051 +240 153 130 Flamingo 61019 +240 155 130 Coral 61020 +240 157 130 Melon 61259 +125 0 153 Purple Accent 61112 +125 5 153 Purple Accent2 61195 +153 0 153 Purple Shadow 61122 +153 5 153 Mulberry 61255 +102 2 153 Purple Twist 61197 +102 5 153 Purple Maze 61235 +120 51 153 Iris 61032 +120 55 153 Iris2 61194 +255 51 153 Azalea 61034 + 51 102 153 Baltic Blue 61096 + 51 105 153 Teal 61206 + 51 204 153 Lt Kelly 61101 +255 250 153 Maize 61061 +225 255 153 Pistachio 61209 +153 153 154 Silvery Gray 61041 +153 155 154 Metal 61166 +255 154 154 Rose 61224 +255 180 160 Peach 61258 +220 200 160 Topaz 61070 +153 153 165 Storm Gray 61040 +153 155 165 Storm Gray2 61219 + 50 100 170 Imperial Blue 61198 +204 180 170 Bamboo 61149 +204 185 170 Rattan 61180 +204 0 180 Plum 61033 +204 5 180 Plum2 61080 +204 153 186 Ducky Mauve 61179 +255 80 190 Begonia 61154 +255 85 190 Passion 61191 +255 185 190 Pink Mist 61108 +230 204 190 Opaline 61017 +230 207 190 Ecru 61127 + 51 51 200 Empire Blue 61042 + 51 55 200 Fire Blue 61076 +255 130 204 Floral Pink 61109 + 51 191 204 Willow 61211 + 51 195 204 Willow2 61212 + 51 198 204 Willow3 61508 +204 204 204 Pearl Grey 61236 +255 204 204 Pink 61225 +204 210 204 Skylight 61011 +204 215 204 Gray 61218 +255 170 220 Pale Orchid 61121 +255 204 220 Opal Mist 61064 +255 240 220 Ivory 61082 + 0 204 230 Mystic Teal 61090 + 0 208 230 Aquamarine 61252 +255 230 230 Bisque 61113 +240 180 235 Tulip 61193 +255 255 235 Natural White 61002 +255 255 240 Eggshell 61071 + 0 215 245 Turquoise 61046 + 0 215 245 Periwinkle 61094 + 0 220 245 Md Green 61503 + 90 140 255 Misty 61172 +165 165 255 Jay Blue 61143 +165 170 255 Blue 61535 +150 175 255 Tropic Blue 61196 +210 220 255 Ultra Blue 61028 +210 223 255 Ultra Blue2 61029 +210 226 255 Sky Blue 61074 +210 229 255 Baby Blue 61145 +210 233 255 Sky Blue2 61222 +240 250 255 Ice Blue 61203 +250 250 255 Snow White 61001 + 0 250 255 Mint Julep 61045 + 0 255 255 Lt Blue 61077 diff --git a/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl b/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl new file mode 100644 index 0000000..aec5e3f --- /dev/null +++ b/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl @@ -0,0 +1,204 @@ +GIMP Palette +Name: Ink/Stitch: Gutermann Creativ Dekor +Columns: 4 +# RGB Value Color Name Number + 28 28 28 Midnight Blue 1000 +230 225 222 Silver Gray 1005 +234 231 219 Light Yellow 1016 +220 214 193 Bone White 1030 +239 197 133 Peach 1130 +237 213 158 Candy Tan 1195 +204 199 170 Beige Brown Light 1365 +237 230 149 Wheat 1405 +145 118 56 Autumn Green 1415 +227 187 86 Star Gold 1440 +227 225 118 Mustard 1445 +250 217 78 Aurora 1455 +213 217 96 Pale Yellow 1460 +248 200 71 Star Gold 1480 +230 171 88 Toast 1565 +242 171 55 Manila 1570 +224 138 37 Goldenrod 1585 +123 94 67 Medium Brown 2605 + 94 66 53 Brown 2585 + 44 33 37 Black 2335 + 82 52 50 Dark Brown 2100 +169 91 51 Medium Brown 2065 +129 67 46 Light Cocoa 1956 +158 86 61 Chocolate 1950 +211 131 58 Splinter 1850 +236 140 77 Rich Brown 1810 +214 141 106 Brass Medium 1790 +223 85 38 Orange 1770 +226 90 35 Hazel 1730 +229 107 65 Coral Rose 1695 +224 153 123 Melon 1660 +214 126 66 Sunburst 1645 +231 127 55 Amberglow 1625 +234 136 29 Goldenrod 1605 +126 99 80 Medium Brown 2610 + 79 58 46 Traditional Brown 2645 +130 91 67 Light Cocoa 2670 +114 108 88 Medium Brown 2735 +119 93 84 Fungi 2755 +217 196 173 Nude Gold 3130 +196 161 130 Sirocco 3165 +218 188 148 Beige 3180 +187 146 115 Champagne 3200 +142 114 100 Coconut 3255 +119 101 83 Medium Green / Yellow 3275 + 45 18 23 Black Red 3340 + 73 25 37 Dark Oak 3380 +154 59 55 Red Fruit 3430 +131 44 43 Burgundy 3450 +209 115 83 Toast 3545 +218 82 58 Orange 3570 +225 82 102 Calypso Coral 4625 +222 70 93 Raspberry 4610 +210 53 40 Saffron 4595 +186 49 58 Currant 4585 +163 49 65 Dark Mulberry 4580 +149 48 64 Perfect Ruby 4565 +170 39 50 Paprika 4550 +128 31 62 Maroon 4500 + 92 38 57 Beet Red 4466 + 63 51 60 Dark Grey 4416 + 60 30 46 Dark Brown 4360 + 85 27 57 Dark Purple 4295 +104 42 53 Warm Wine 4160 +130 80 85 Crushed Berry 4125 +145 118 127 Lasting Cocoa 3893 +211 97 81 Deep Sea Coral 3665 +204 37 39 Red Orange 3590 +192 46 73 Dusky Rose 4700 +171 43 92 Light Fuchsia 4731 +182 45 82 Wildfire 4736 +185 43 96 Ruby Glint 4740 +207 90 139 Carmine Rose 4805 +205 45 88 Teaberry 4810 +162 59 80 Raspberry Medium Dark 4830 +169 70 94 Baroque Rose 4845 +227 91 99 Bashful Pink 4865 +227 93 134 Dark Pink 4870 +226 89 135 Dark Pink 4911 +221 107 142 Dark Pink 4941 +229 141 160 Dusty Rose Light 5020 +221 124 113 Rose Wine Medium 5040 +232 206 205 Light Pink 5080 +229 190 190 Pale Orange 5120 +230 173 169 Flesh Pink 5136 + 54 46 64 Dark Maroon 5470 +120 89 105 Smokey Grey 5455 +118 78 107 Crushed Grape 5435 + 89 58 93 Port Wine 5415 + 83 43 53 Chocolate 5400 +137 54 97 Medium Purple 5385 +126 46 64 Winterberry 5340 +162 47 106 Burgundy Rose 5335 +122 28 80 Dark Wild Rose 5330 +121 28 80 Dark Wild Rose 5315 +136 29 81 Granet / Very Dark 5300 +108 49 105 Peony 5284 +116 59 84 Dark Purple 5280 +143 94 137 Medium Purple 5260 +157 104 148 Plum Medium 5240 +176 125 168 Regal Orchid 5188 +231 162 177 Medium Pink 5185 +229 158 179 Medium Pink 5150 + 40 29 38 Black 5560 + 54 34 60 Dark Maroon 5575 + 84 49 115 Purple Accent 5710 + 66 36 102 Ultraviolet 5720 + 77 37 107 Purple Accent 5727 + 95 48 126 Dahlia 5729 +146 125 161 Iris 5827 +159 133 141 Silver Lilac 5840 +200 173 193 Satin Wine 5845 + 75 56 112 Dark Purple 5865 + 23 22 49 Midnight Blue 5885 + 91 86 141 Royal Blue 5900 + 52 68 89 Dark Blue / Green 5990 + 85 95 122 Coastal Fjord 6008 + 47 65 135 Ultra Blue 6010 + 84 98 159 Medium Blue 6020 +105 111 159 Bleached Denim 6036 +132 138 186 Blue 6260 + 34 35 53 Seal 6805 + 50 44 103 Black Purple 6790 + 47 43 91 Dark Navy 6785 + 43 70 105 Dark Navy 6746 + 48 50 96 Blue Nugget 6665 + 28 59 103 Dark Blue 6660 + 43 55 104 Navy Blue 6655 + 46 53 98 Blue Nugget 6635 + 89 102 147 Dutch Blue 6595 + 91 125 180 Baby Blue dark 6575 + 68 111 156 Cornflower 6574 + 0 79 138 Surf 6540 + 56 110 172 Ocean Blue 6530 + 59 147 181 Radiant Turquoise 6490 +127 186 212 Peacock Blue Light 6445 +151 191 193 Snow Blue 6440 +115 154 183 Dusk Blue 6350 +164 168 193 LightPurple 6280 + 62 52 67 Dark grey 6810 + 47 66 89 Dark Navy 6855 + 62 51 60 Dark Grey 6900 + 63 61 72 Soot 6920 + 32 32 32 Smokey 6950 + 31 72 78 Deep Windsor 6975 + 13 74 112 Royal Blue 7030 + 1 77 111 Peacock 7080 + 1 89 149 Blue 7100 + 1 162 184 Marine Aqua 7160 + 67 145 155 Capri 7165 + 49 169 189 Sea Green 7185 + 35 107 157 Teal 7230 + 1 157 175 Truly Teal 7240 + 1 136 152 Dark Aqua Green 7251 + 0 152 159 Cyan 7337 + 52 112 112 Green-Blue Slate 7385 + 58 145 115 Mountain Lake 7480 + 91 184 130 Peppermint Green 8470 +102 154 88 Spring Green 8450 + 14 99 75 Green Bay 8375 + 58 106 70 Green Dust 8340 + 60 131 65 Leaf Green 8320 + 12 153 91 Light Jade 8310 + 60 146 107 Green Peacock 8275 + 2 140 119 Med. Teal 8270 + 1 86 53 Latex Green 8246 + 1 52 30 Deep Green 8230 + 0 71 53 Evergreen 8220 + 1 94 78 Green 8210 + 11 33 25 Olive Green 8067 + 79 94 85 Kahki Green 7950 + 3 96 89 Green Forest 7550 + 2 132 122 Brite Jade 7543 + 81 146 124 Winter Green 7500 + 99 168 158 Blue Green 7495 +118 187 78 Medium Green 8535 +127 131 75 Medium Palmetto 8595 +164 200 129 Grass Green 8610 +199 223 186 Light Green / Yellow 8615 +174 216 207 Blue Light 8700 + 94 90 79 Raven 8777 + 40 41 36 Grey Olive 8840 + 83 118 53 Sage 8860 + 93 87 94 Dark Gull Gray 9570 + 64 63 69 Dark Grey 9535 + 56 55 61 Black 9530 + 21 40 39 Charcoal 9435 + 36 36 36 Black 9395 + 89 85 57 Dark Green / Grey 8990 +142 134 70 Medium Green / Yellow 8910 + 56 83 40 Harbor Green 8870 + 75 68 76 Midnight 9585 + 94 77 88 Natural Burgundy 9660 +132 121 128 Gray Ridge 9675 +125 128 132 Medium Grey 9720 +105 112 135 Desma Blue 9735 +138 131 139 Medium Grey 9740 +142 126 132 Med. Dk. Gray 9850 +171 177 168 Pro Night Sky 9865 +181 178 189 Grey 9875 diff --git a/inkstitch/palettes/InkStitch Hemingworth.gpl b/inkstitch/palettes/InkStitch Hemingworth.gpl new file mode 100644 index 0000000..2343812 --- /dev/null +++ b/inkstitch/palettes/InkStitch Hemingworth.gpl @@ -0,0 +1,298 @@ +GIMP Palette +Name: Ink/Stitch: Hemingworth +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Classic Black 1000 +255 255 255 Pure White 1001 +165 17 0 Cardinal Red 1002 +243 187 206 Baby Pink 1003 +243 117 198 Pink Kiss 1004 +241 219 223 Whisper Pink 1005 +243 201 211 Gentle Blush 1006 +244 178 193 English Rose 1007 +243 158 188 Sweet Pea 1008 +247 122 180 Rosy Blush 1009 +215 31 133 Passion Pink 1010 +255 176 183 Rose Sunset 1011 +243 120 155 Bubblegum Pink 1012 +145 0 75 Very Berry 1013 +219 77 105 Carnation 1014 +255 164 138 Georgia Peach 1015 +255 139 124 Coral Reef 1016 +244 88 122 Apricot Dream 1017 +245 67 89 Dark Salmon 1018 +255 183 174 Petal Peach 1019 +255 143 112 Tangerine 1020 +251 206 146 Whipped Papaya 1021 +255 193 156 Frosted Peach 1022 +255 160 47 Marigold 1023 +233 131 0 Citrus Burst 1024 +255 112 0 Orange Slice 1025 +255 109 66 Dark Mango 1026 +227 114 34 Fiery Sunset 1027 +251 79 20 Hunter Orange 1028 +221 72 20 Fall Harvest 1029 +205 32 44 Candy Apple 1030 +136 35 50 Rummy Raisin 1031 +167 2 50 Pomegranate 1032 +161 0 107 Azalea 1033 +197 0 132 Primrose 1034 +119 32 89 Mulled Wine 1035 +146 0 117 Fuchsia 1036 +220 214 178 Cornsilk 1037 +198 188 137 Macadamia 1038 +248 228 152 Yellow Plumeria 1039 +248 222 110 Maize 1040 +255 188 61 Cantaloupe 1041 +235 232 177 Soft Sunlight 1042 +238 236 131 Lemon Drop 1043 +242 238 114 Canary Yellow 1044 +243 236 122 Daffodil 1045 +250 220 65 Sun 1046 +254 209 0 Dandelion 1047 +243 207 69 Buttercup 1048 +250 218 99 Dried Banana 1049 +239 189 71 Ginger Root 1050 +234 171 0 Goldenrod 1051 +206 142 0 Old Gold 1052 +255 203 79 Butternut 1053 +199 179 127 Antique Lace 1054 +179 179 140 Malt 1055 +194 194 160 Ecru 1056 +210 194 149 Sandy Shore 1057 +130 124 52 Light Avocado 1058 +181 163 0 Spring Leaf 1059 +248 228 152 Almond Cream 1060 +177 155 0 Split Pea 1061 +221 185 154 Honey Butter 1062 +197 146 23 Pale Caramel 1063 +162 80 34 Light Cinnamon 1064 +213 92 25 Carrot 1065 +170 39 47 Paprika 1066 +207 195 195 Dove Gray 1067 +201 202 200 Silver Lining 1068 +178 180 179 Storm Cloud 1069 +198 198 188 Platinum 1070 +175 173 195 Iron Ore 1071 +142 144 143 Chrome 1072 +108 111 112 Pewter Gray 1073 +129 138 143 Sea Storm 1074 + 92 127 146 Misty Blue Grey 1075 +166 188 198 Nautical Blue 1076 +116 118 120 Antique Silver 1077 + 89 90 92 Bronzed Steel 1078 + 25 29 31 Black Stallion 1079 + 85 81 123 Deep Orchid 1080 + 0 66 80 Pacific Waters 1081 + 21 101 112 Deep Sea 1082 +113 134 116 Dried Sage 1083 + 68 105 125 Blue Steel 1084 + 94 106 113 Shadow 1085 + 55 66 74 Dark Slate 1086 + 27 36 42 Charcoal 1087 +166 230 188 Sea Foam 1088 +115 150 0 Leafy Green 1089 + 83 104 43 Kentucky Grass 1090 +146 212 0 Green Apple1 1091 +122 184 0 Key Lime 1092 + 63 156 53 Kelly Green 1093 + 0 181 136 Cucumber Melon 1094 + 0 121 52 Grassy Green 1095 +200 229 154 Pistachio Nut 1096 +105 190 40 Electric Green 1097 +213 200 51 Cornsilk Green 1098 +195 231 111 Lemony Lime 1099 +185 204 195 Ocean Spray 1100 +106 112 41 Avocado 1101 +137 143 75 Seaweed 1102 + 3 86 66 Ivy 1103 + 0 106 77 Caribbean 1104 + 0 125 87 Dark Jade 1105 + 0 152 95 Light Jade 1106 + 0 155 116 Jade 1107 + 0 133 66 Dark Kelly Green 1108 + 0 105 60 Christmas Green 1109 + 40 78 54 Evergreen 1110 + 0 68 56 Mountain Meadow 1111 + 0 77 70 Forest Green 1112 + 0 80 92 Dragonfly 1113 + 73 108 96 Dark Sage 1114 +148 157 158 Silver Green 1115 + 75 71 26 Parsley 1116 + 75 69 44 Coconut Shell 1117 +213 210 202 Marshmallow 1118 +218 227 234 Ice Blue 1119 +131 132 122 Thyme 1120 + 87 88 79 Oregano 1121 +133 104 34 Sahara 1122 + 64 74 41 Jungle Green 1123 +154 153 110 Soft Beige 1124 + 79 76 37 Mocha 1125 + 69 35 37 Dark Chocolate 1126 + 93 53 38 Burnt Sienna 1127 + 78 46 45 Deep Walnut 1128 + 95 51 39 Cherrywood 1129 +110 50 25 Teddybear Brown 1130 + 93 79 75 Warm Earth 1131 +186 111 46 New Penny 1132 +167 111 62 Brown Sugar 1133 + 96 53 29 Light Chestnut 1134 +110 90 42 Pharaoh Gold 1135 +171 132 34 Autumn Haystack 1136 + 91 73 31 Army Green 1137 +179 153 93 Butter Taffy 1138 +227 155 108 Conch Shell 1139 +108 77 35 Pecan Pie 1140 +187 101 14 Pumpkin Spice 1141 +130 92 38 Toasted Almond 1142 +157 83 36 Auburn 1143 +154 59 38 Indian Paintbrush 1144 +174 125 91 Caramel Cappuccino 1145 +165 172 175 Old Lace 1146 +202 209 231 Moonlight 1147 +209 212 211 Snowflake 1148 +194 178 181 Mercury 1149 +239 214 219 Soft Petal 1150 +178 111 126 Dusty Rose 1151 +216 170 179 Light Mauve 1152 +137 104 124 Dark Mauve 1153 +100 68 89 Wild Plum 1154 +100 31 20 Raspberry 1155 +133 0 60 Magenta 1156 +102 32 70 Mulberry 1157 +110 39 20 Cranberry 1158 +106 26 65 Loganberry 1159 + 89 44 53 Merlot 1160 +246 163 187 Valentine Pink 1161 +119 74 57 Old Penny 1162 +178 84 26 Apple Cider 1163 +131 56 32 Rust 1164 +212 144 168 Winter Rose 1165 +255 129 141 Salmon 1166 +255 194 162 Pink Pearl 1167 +236 193 130 Spun Silk 1168 +239 197 206 Peaches 'n Cream 1169 +239 190 156 Peach Pastel 1170 +189 146 113 Champagne 1171 +193 226 229 Icicle Blue 1172 +143 223 226 Frosty Blue 1173 + 0 175 216 Blue Lagoon 1174 +124 162 149 Wintergreen 1175 + 0 154 166 Light Teal Blue 1176 + 99 206 202 Mint Green 1177 +187 231 230 Crystal Lake 1178 + 0 135 124 Navajo Turquoise 1179 + 0 124 146 Teal Blue 1180 + 0 103 120 Blue Satin 1181 + 0 123 105 Peacock Green 1182 + 2 78 67 Forest Glen 1183 + 0 73 83 Deep Teal 1184 +194 222 234 Cornflower Blue 1185 +143 202 231 Misty Blue 1186 + 75 146 219 Bluebird 1187 +106 173 228 Hyacinth 1188 +152 198 234 Winter Blue 1189 +170 202 230 Winter Sky 1190 +142 186 229 Sky Blue 1191 + 0 91 130 Smoky Blue 1192 + 94 156 174 Light Slate Blue 1193 + 0 105 131 Peacock Blue 1194 + 0 117 176 Medium Aquamarine 1195 + 0 102 161 Dark Aquamarine 1196 +101 207 233 Iceberg Blue 1197 + 0 115 207 China Blue 1198 + 0 34 68 Navy 1199 + 0 65 83 Salem Blue 1200 + 0 65 101 Dark Blueberry 1201 + 61 126 219 Azure 1202 + 0 57 166 Royal Blue 1203 + 0 51 141 Brilliant Blue 1204 + 11 34 101 Deep Blue 1205 +136 132 213 Purple Iris 1206 +157 171 226 Tulip 1207 + 33 36 146 Electric Purple 1208 + 26 33 85 Grape 1209 + 65 18 68 Indigo 1210 +100 89 196 Moon Shadow 1211 + 75 48 106 Huckleberry 1212 +179 130 199 Heather 1213 +156 95 181 Lavender 1214 +110 44 107 Peony 1215 +125 0 99 Dark Fuschia 1216 +220 199 223 Pale Orchid 1217 +220 157 221 Orchid 1218 +194 172 190 Dusty Mauve 1219 +117 40 100 Grape Jelly 1220 +193 175 229 Freesia 1221 +197 185 227 Lilac 1222 + 59 0 131 Royal Purple 1223 +130 36 12 Raspberry Red 1224 +245 236 90 Lemon Citrus 1225 +250 231 0 Sunshine Yellow 1226 +252 217 0 Sunflower 1227 +253 196 128 Baby Peach 1228 +215 211 199 Eggshell 1229 +255 182 82 Orange Cream 1230 +255 182 18 September Sunset 1231 +255 161 0 Orange Meringue 1232 +120 48 20 Redwood 1233 +158 48 57 Rusty Red 1234 +206 169 140 Cream Soda 1235 +103 92 83 Weathered Wood 1236 +118 106 101 Dark Alder 1237 +134 67 30 Cinnamon 1238 +185 201 208 Silvery Grey 1239 +125 154 170 Granite 1240 + 0 60 105 Dark Slate Blue 1241 + 0 57 70 Deep Slate Blue 1242 +145 186 163 Antique Grey 1243 + 97 99 101 Graphite 1244 + 77 79 83 Light Charcoal 1245 +101 85 28 Olive Green 1246 +204 220 0 Kiwi Lime 1247 + 0 175 63 Meadow 1248 + 23 94 84 Holly Leaf 1249 + 28 69 59 Winter Pine 1250 +105 146 58 Dusty Green 1251 + 85 118 48 Bush Ivy 1252 + 13 119 110 Minty Teal 1253 + 0 104 91 Dark Teal 1254 + 0 152 219 Country Blue 1255 +160 207 235 Pale Blue 1256 +111 212 228 Summer Sky 1257 + 0 61 76 Dark Turquoise 1258 + 0 152 195 Turquoise 1259 + 0 176 202 Caribbean Blue 1260 + 0 44 119 True Blue 1261 +111 154 211 Periwinkle 1262 + 0 53 145 Berry Blue 1263 + 0 40 87 Dark Blue 1264 + 0 44 95 Sailor Blue 1265 + 75 8 161 Soft Grape 1266 + 21 28 84 Eggplant 1267 + 87 6 140 Pure Purple 1268 + 73 14 111 Dark Purple 1269 +195 0 20 Christmas Red 1270 +221 224 15 Lemon Ice 1271 +201 221 3 Neon Green 1272 + 96 221 73 Brilliant Lime 1273 +255 204 30 Mango 1274 +255 237 56 Neon Yellow 1275 +255 169 82 Tropical Orange 1276 +255 147 56 Neon Orange 1277 +255 88 95 Rebel Peach 1278 +242 140 163 Shy Flamingo 1279 +254 138 158 Neon Pink 1280 +252 7 79 Neon Peach 1281 +246 171 4 Light Gold 9010 +215 148 0 Dark Gold 9011 +213 210 218 Silver 9012 +169 177 181 Pewter 9013 +204 125 81 Copper 9014 + 0 125 63 Emerald 9015 + 54 201 192 Aquamarine 9016 +137 243 214 Blue Topaz 9017 + 52 23 228 Sapphire 9018 +198 24 204 Amethyst 9019 +248 170 216 Rose Quartz 9020 +219 6 53 Ruby 9021 diff --git a/inkstitch/palettes/InkStitch Isacord Polyester.gpl b/inkstitch/palettes/InkStitch Isacord Polyester.gpl new file mode 100644 index 0000000..a0e14c9 --- /dev/null +++ b/inkstitch/palettes/InkStitch Isacord Polyester.gpl @@ -0,0 +1,394 @@ +GIMP Palette +Name: Ink/Stitch: Isacord Polyester +Columns: 4 +# RGB Value Color Name Number +233 232 222 Ghost White 0003 +173 180 185 Ash Mist 0105 + 97 99 89 Navajo 0128 + 61 62 62 Smoky 0134 + 82 91 96 Heavy Storm 0138 +255 255 102 Sunbeam 0220 +252 243 141 Easter Dress 0230 +255 255 225 Buttercream 0270 +104 102 67 Olive Drab 0454 +127 123 108 Light Sage 0555 + 60 48 46 Very Dark Brown 0576 +189 166 109 Barewood 0643 +105 104 91 Armour 0674 +255 204 70 Orange Peel 0703 +179 133 51 Antique 0721 +203 160 91 Applesauce 0731 +222 190 105 Wheat 0741 +123 113 93 Dark Rattan 0763 +240 221 192 Candlewick 0781 +238 167 102 Passion Fruit 1030 +173 120 41 Bronze 1032 +209 162 97 Peru 1133 +249 139 67 Sunset Orange 1200 +127 77 44 Pony 1233 +229 90 0 Hunter Orange 1310 +210 94 30 Dark Orange 1321 +138 76 52 Dirty Penny 1322 +100 57 40 Coffee Bean 1344 +124 54 45 Apple Butter 1526 +124 76 70 Rusty Rose 1543 +216 44 48 Not Quite Red 1720 +235 93 112 Strawberries n' Cream 1753 + 49 46 47 Blackberry 1776 +234 0 0 Wildfire 1800 +118 35 72 Pomegranate 2211 +188 63 136 Hot Pink 2508 +243 137 178 Rose 2530 +219 107 161 Pretty In Pink 2532 + 90 94 97 Titanium 2564 + 69 43 102 Grape Jelly 2702 +101 7 101 Purple Passion 2704 +143 51 119 Peony 2723 +155 91 170 Frosted Orchid 2732 +169 145 156 Misty Rose 2762 + 62 63 65 Black Chrome 2776 + 81 79 99 Columbine 2864 + 49 36 50 Scrumptious Plum 2944 + 57 52 87 Concord Fog 2953 + 43 37 62 Aubergine 2954 +180 160 192 Amethyst 3030 +138 141 194 Dawn of Violet 3130 + 75 79 88 Slate Gray 3265 +101 108 116 Battleship Gray 3274 + 62 90 160 Forget Me Not 3332 +202 213 240 Lavender Whisper 3350 + 36 46 70 Midnight Blue 3363 + 79 109 161 Rich Blue 3410 +157 165 202 Lavendar 3450 + 0 0 255 Electric Blue 3510 +157 172 185 Summer Grey 3572 + 32 39 48 Darkest Blue 3574 +122 172 231 Sweet Boy 3630 + 76 113 160 Tufts Blue 3631 + 14 56 88 Royal Navy 3644 + 43 55 81 Prussian Blue 3645 + 58 82 108 Blue Shadow 3654 + 40 48 58 Space 3666 + 51 113 174 Cornflower Blue 3713 +153 198 240 Something Blue 3730 + 83 151 189 Surfs' Up 3830 + 99 118 131 Manatee 3852 +200 228 245 Hint of Blue 3963 + 89 100 104 Dimgray 4074 +128 181 189 Serenity 4152 +136 213 198 Aquamarine 4740 +133 171 167 Vintage Blue 4752 +147 206 200 Mystic Blue 4952 +129 223 149 Mint 5440 +166 216 177 Basic Seafoam 5450 + 0 164 90 Kelly 5515 +100 130 112 Garden Moss 5542 + 24 56 35 Enchanting Forest 5565 + 82 108 81 Asparagus 5743 +220 255 185 Chartreuse 5830 +156 189 84 Celery 5832 +190 231 110 Tamarack 6011 +218 224 86 Limelight 6031 +114 119 21 Yellowgreen 6043 +183 180 150 Old Lace 6071 +237 237 177 Lemongrass 6151 +255 255 250 Silky White 0010 +255 255 255 White 0015 +255 255 255 Paper White 0017 + 0 0 0 Black 0020 +255 255 245 Eggshell 0101 +153 153 153 Cobblestone 0108 +127 127 127 Whale 0111 +127 127 127 Leadville 0112 +204 204 185 Fieldstone 0124 +175 175 180 Smoke 0131 + 86 89 89 Dark Pewter 0132 +178 178 178 Sterling 0142 +214 214 216 Skylight 0145 +190 190 180 Mystik Grey 0150 +186 170 158 Cloud 0151 +140 135 125 Dolphin 0152 +214 211 214 Saturn Grey 0182 +224 209 198 Pearl 0184 +230 240 102 Light Brass 0221 +255 230 140 Seaweed 0232 +255 255 204 Lemon Frost 0250 +255 255 102 Yellow 0310 +255 230 0 Canary 0311 +165 153 51 Moss 0345 +230 240 130 Marsh 0352 +204 204 51 Tarnished Gold 0442 +188 173 117 Army Drab 0453 +114 132 112 Cypress 0463 +115 115 51 Umber 0465 +255 237 56 Sun 0501 +255 240 102 Yellow Bird 0506 +255 255 153 Daffodil 0520 +240 220 170 Champagne 0532 +204 185 0 Ochre 0542 +204 180 65 Ginger 0546 +204 180 135 Flax 0552 +255 255 0 Citrus 0600 +255 240 0 Daisy 0605 +255 220 0 Sunshine 0608 +255 250 153 Buttercup 0630 +255 240 204 Parchment 0640 +221 204 165 Cornsilk 0651 +255 250 204 Vanilla 0660 +255 255 240 Cream 0670 +225 204 180 Baquette 0672 +255 173 20 Bright Yellow 0700 +255 230 75 Papaya 0702 +245 240 102 Gold 0704 +255 240 130 Lemon 0713 +153 130 110 Khaki 0722 +140 120 50 Golden Brown 0747 +245 235 204 Oat 0761 +135 120 102 Sage 0776 +255 245 0 Goldenrod 0800 +255 204 0 Candlelight 0811 +240 204 51 Honey 0821 +230 204 110 Palomino 0822 +225 127 61 Liberty Gold 0824 +204 170 120 Sisal 0832 +240 190 130 Toffee 0842 +240 204 145 Old Gold 0851 +170 140 102 Pecan 0853 +221 204 165 Tantone 0861 +163 150 135 Wild Rice 0862 +255 250 230 Muslin 0870 +195 185 160 Stone 0873 +190 160 145 Gravel 0874 +216 140 2 Spanish Gold 0904 +175 117 5 Ashley Gold 0922 +188 109 10 Honey Gold 0931 +185 153 51 Nutmeg 0932 +153 102 51 Redwood 0933 +204 180 153 Fawn 0934 +204 153 51 Autumn Leaf 0940 +180 130 70 Golden Grain 0941 +140 110 70 Pine Park 0945 +255 255 230 Linen 0970 +153 102 51 Bark 1055 +255 230 185 Shrimp Pink 1060 +200 175 140 Taupe 1061 +255 170 51 Pumpkin 1102 +255 127 30 Orange 1106 +240 150 70 Clay 1114 +158 84 10 Copper 1115 +255 188 33 Sunset 1120 +193 168 117 Caramel Cream 1123 +140 89 51 Light Cocoa 1134 +225 220 175 Meringue 1140 +232 178 130 Tan 1141 +140 89 51 Penny 1154 +240 225 204 Ivory 1172 +255 190 102 Apricot 1220 +255 153 51 Tangerine 1300 +209 68 20 Paprika 1301 +255 125 0 Red Pepper 1304 +255 140 0 Fox Fire 1305 +249 89 81 Devil Red 1306 +240 140 75 Date 1311 +155 48 28 Burnt Orange 1312 +188 79 70 Harvest 1332 +204 102 51 Spice 1334 +163 38 56 Dark Rust 1335 +190 125 65 Rust 1342 +135 90 45 Cinnamon 1346 +255 195 153 Starfish 1351 +255 180 130 Salmon 1352 +153 102 51 Fox 1355 +255 215 165 Shrimp 1362 +110 51 0 Mahogany 1366 + 40 40 33 Dark Charcoal 1375 +255 165 125 Melon 1430 +155 48 28 Brick 1514 +226 61 40 Flamingo 1521 +255 185 170 Coral 1532 +102 89 76 Espresso 1565 +235 140 115 Spanish Tile 1600 +255 102 51 Red Berry 1701 +255 0 0 Poppy 1703 +232 17 45 Candy Apple 1704 +220 102 51 Terra Cotta 1725 +240 220 220 Hyacinth 1755 +245 204 175 Twine 1760 +255 220 210 Tea Rose 1761 +193 5 56 Strawberry 1805 +255 175 175 Corsage 1840 +255 245 240 Shell 1860 +130 114 99 Pewter 1874 +125 90 50 Chocolate 1876 +240 0 102 Geranium 1900 +204 0 0 Poinsettia 1902 +229 5 58 Lipstick 1903 +191 10 48 Cardinal 1904 +204 51 102 Tulip 1906 +170 0 51 Foliage Rose 1911 +175 0 75 Winterberry 1912 +204 51 0 Cherry 1913 +210 130 130 Blossom 1921 +255 0 147 Chrysanthemum 1940 +214 0 158 Tropical Pink 1950 +140 137 132 Silvery Grey 1972 +153 33 53 Fire Engine 2011 +140 38 51 Rio Red 2022 +220 180 180 Teaberry 2051 +168 12 53 Country Red 2101 +117 38 51 Cranberry 2113 +122 38 56 Beet Red 2115 +135 0 51 Bordeaux 2123 +255 153 170 Heather Pink 2152 +220 153 160 Dusty Mauve 2153 +255 204 204 Pink Tulip 2155 +250 220 220 Iced Pink 2160 +255 250 245 Chiffon 2170 +255 245 250 Blush 2171 +255 160 204 Tropicana 2220 +153 75 102 Burgundy 2222 +122 38 56 Claret 2224 +204 140 150 Mauve 2241 +255 204 215 Petal Pink 2250 +255 51 153 Bright Ruby 2300 +220 102 130 Raspberry 2320 +153 51 102 Wine 2333 + 81 45 68 Maroon 2336 +255 235 235 Carnation 2363 +185 80 130 Boysenberry 2500 +163 5 127 Plum 2504 +175 60 120 Cerise 2506 +255 204 180 Garden Rose 2520 +226 60 115 Fuchsia 2521 +255 170 220 Soft Pink 2550 +255 185 204 Azalea Pink 2560 +204 102 153 Dusty Grape 2600 +225 170 245 Frosted Plum 2640 +255 204 230 Impatiens 2650 +235 204 215 Aura 2655 +140 140 150 Steel 2674 +153 0 125 Dark Current 2711 +153 0 153 Pansy 2715 +183 114 142 Violet 2764 +204 102 204 Orchid 2810 +204 140 204 Wild Iris 2830 + 89 17 142 Deep Purple 2900 +142 71 173 Iris Blue 2905 +170 114 191 Grape 2910 +137 119 186 Purple 2920 +235 204 245 Lavender 3040 +230 190 220 Cachet 3045 + 75 0 153 Provence 3102 +120 51 153 Dark Ink 3110 + 68 35 89 Purple Twist 3114 +105 89 205 Blueberry 3210 + 98 74 147 Twilight 3211 +210 170 210 Amethyst Frost 3241 +168 147 173 Haze 3251 + 80 0 120 Delft 3323 +175 170 255 Cadet Blue 3331 + 30 28 119 Fire Blue 3333 + 0 56 147 Flag Blue 3335 + 12 56 68 Midnight 3344 + 0 0 125 Light Midnight 3353 + 0 0 102 Dark Indigo 3355 + 80 90 102 Concord 3444 + 45 51 142 Blue 3522 +102 0 102 Heraldic 3536 +153 0 204 Venetian Blue 3541 + 51 0 204 Royal Blue 3543 + 0 56 147 Sapphire 3544 + 2 40 58 Navy 3554 +102 102 204 Nordic Blue 3600 +125 102 255 Blue Ribbon 3611 + 45 51 142 Starlight Blue 3612 + 48 68 181 Imperial Blue 3622 +153 186 221 Lake Blue 3640 +170 180 215 Wedgewood 3641 +240 245 250 Ice Cap 3650 +147 183 209 Baby Blue 3652 + 0 51 76 Slate Blue 3732 + 80 102 125 Harbor 3743 +183 204 219 Winter Frost 3750 +240 250 255 Winter Sky 3761 +214 216 211 Oyster 3770 +120 153 190 Laguna 3810 + 0 142 214 Reef Blue 3815 +150 190 230 Celestial 3820 +235 250 255 Oxford 3840 +120 130 140 Copenhagen 3842 + 0 127 204 Cerulean 3900 + 51 153 204 Tropical Blue 3901 + 0 91 191 Colonial Blue 3902 +153 204 240 Crystal Blue 3910 +180 200 225 Azure Blue 3951 +125 125 140 Ocean Blue 3953 +204 225 245 River Mist 3962 +204 204 204 Silver 3971 + 0 190 204 Caribbean Blue 4010 +102 153 175 Teal 4032 +245 245 250 Glacier Green 4071 +155 153 147 Metal 4073 + 0 165 180 Wave Blue 4101 + 0 163 209 California Blue 4103 + 0 235 255 Turquoise 4111 +120 190 204 Alexis Blue 4113 + 0 109 117 Dark Teal 4116 + 51 102 115 Deep Ocean 4133 + 85 85 85 Charcoal 4174 + 0 204 204 Island Green 4220 +175 255 255 Aqua 4230 +204 255 255 Spearmint 4240 +220 255 250 Snomoon 4250 + 0 160 186 Aqua Velva 4410 + 51 180 190 Light Mallard 4421 + 0 155 170 Marine Aqua 4423 +153 240 220 Island Waters 4430 + 51 102 102 Spruce 4515 + 51 153 153 Caribbean 4531 + 47 185 165 Deep Aqua 4610 + 51 204 180 Jade 4620 + 0 89 81 Seagreen 4625 + 75 120 125 Amazon 4643 +102 130 115 Mallard 4644 + 0 96 86 Rain Forest 5005 + 0 153 135 Scotty Green 5010 +220 255 230 Luster 5050 + 0 165 120 Green 5100 + 51 175 153 Dark Jade 5101 + 51 204 165 Baccarat Green 5115 + 51 204 153 Trellis Green 5210 +160 204 180 Silver Sage 5220 +153 240 204 Bottle Green 5230 + 38 102 89 Field Green 5233 + 2 73 48 Bright Green 5324 + 0 115 80 Evergreen 5326 + 0 73 63 Swamp 5335 + 0 60 20 Forest Green 5374 + 0 135 81 Shamrock 5411 + 0 122 61 Irish Green 5415 + 60 175 120 Swiss Ivy 5422 + 28 206 40 Limedrop 5500 + 51 158 53 Emerald 5510 + 0 158 15 Ming 5513 +153 204 102 Pear 5531 +158 170 153 Palm Leaf 5552 + 35 79 51 Deep Green 5555 +180 240 130 Bright Mint 5610 + 0 183 96 Light Kelly 5613 +102 153 51 Lime 5633 + 33 91 51 Green Dust 5643 +225 255 204 Spring Frost 5650 +119 145 130 Willow 5664 +175 204 130 Kiwi 5822 +153 190 51 Limabean 5833 + 90 60 0 Herb Green 5866 +158 196 0 Erin Green 5912 +140 160 90 Grasshopper 5933 +153 153 51 Moss Green 5934 +217 255 66 Sour Apple neon 5940 + 80 110 51 Backyard Green 5944 +255 255 63 Mountain Dew neon 6010 +225 255 153 Jalapeno 6051 +153 153 45 Caper 6133 +115 102 40 Olive 6156 diff --git a/inkstitch/palettes/InkStitch Isafil Rayon.gpl b/inkstitch/palettes/InkStitch Isafil Rayon.gpl new file mode 100644 index 0000000..5e82a6d --- /dev/null +++ b/inkstitch/palettes/InkStitch Isafil Rayon.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Isafil Rayon +Columns: 4 +# RGB Value Color Name Number +255 255 250 White 0010 +255 255 255 White 0015 + 0 0 0 Black 0020 +255 255 236 Ivory White 0270 +255 255 205 Pale Lemon 0505 +249 243 105 Pale Yellow 0580 +255 238 67 Lemon 0590 +255 224 61 Yellow 0600 +255 238 52 Canary Yellow 0605 +255 203 37 Buttercup 0610 +250 215 37 Canary 0713 +255 255 201 Pale Lemon 0260 +255 255 233 Ivory White 0510 +255 255 203 Pale Lemon 0520 +255 249 111 Pale Yellow 0620 +254 227 87 Star Gold 0615 +252 250 107 Pale Yellow 0625 +221 224 87 Pale Yellow 0221 +219 203 44 Pale Beige 0542 +201 184 44 Medium Yellow 0545 +168 154 51 Medium Green / Yellow 0726 +255 255 217 Ivory White 0660 +249 226 81 Star Gold 0640 +255 240 137 Pale Yellow 0630 +255 215 56 Yellow 0506 +242 155 57 Gold / Orange 0702 +212 173 37 Medium Yellow 0704 +255 212 42 Buttercup 0805 +249 172 27 Light Orange 0800 +226 175 35 Mustard Yellow 0811 +217 149 23 Goldenrod 0821 +255 247 201 Pale Lemon 0635 +255 226 123 Sunshine 0830 +255 168 56 Gold / Orange 0900 +255 152 60 Orange 1100 +187 142 37 Gold 0940 +255 168 30 Mango 1101 +255 140 35 Soleil 1099 +252 121 28 Soleil 1300 +255 225 138 Wheat 1060 +255 220 177 Alesan 1362 +185 81 62 Bronze 1113 +201 116 89 Brown 1211 +255 112 28 Fluo Orange 1320 +253 71 0 Sunkist 1304 +253 79 0 Sunkist 1305 +217 74 9 Orange 1302 +255 240 215 Eggshell 2180 +255 181 125 Peach 1351 +250 133 58 Medium Orange 1430 +215 114 95 Crabapple 1421 +169 65 43 Dark Orange / Brown 1905 +255 166 92 Chamois 1352 +185 70 55 Dark Orange / Brown 1313 +192 109 87 Saffron 1311 +149 74 53 Medium Brown 1324 +131 70 63 Dark Brown 1348 +255 245 238 Star White 2165 +255 236 228 Star White 1870 +255 229 205 Bone 1630 +255 198 188 Strawberry Cream 1850 +241 135 130 Shell Pink 1849 +227 116 79 Copper 1600 +232 51 0 Orange / Red 1701 +235 79 25 Golden Glory 1705 +255 56 33 Paprika 1703 +226 53 39 Honeysuckle 1800 +191 30 30 Red 1902 +231 81 88 Medium Red / Orange 1802 +196 63 79 Dark Salmon Pink 1805 +205 50 76 Dark Salmon Pink 1900 +160 56 51 Terra Cotta 1913 +150 51 49 Dark Orange / Red 2100 +159 74 64 Dark Red / Orange 1914 +145 53 56 Dark Orange / Red 2123 +238 187 180 Peach Skin 2170 +238 229 229 Oyster 2168 +240 215 212 Light Pink 1860 +255 219 222 Delicate Mauve 1855 +236 152 152 Light Orange 1840 +220 117 120 Tea Rose 1750 +185 97 105 Baroque Rose 1921 +145 53 61 Dark Rust Red 1912 +219 201 191 Heather 1761 +193 149 144 Deauville Mauve 2053 +134 69 74 Dark Brown 1842 +168 128 138 Light Purple 2051 +231 210 216 Orchid Ice 2360 +228 200 205 Medium Pink 1960 +205 138 156 Cashmere Rose 2152 +178 108 122 Heather Rose 2241 +139 74 94 Dark Brown 2332 +107 54 73 Dark Purple 2333 +255 224 224 Rosewater 2250 +255 180 204 Pink 2230 +255 145 183 Pale Pink 2220 +217 52 101 Shocking Pink 2300 +255 198 229 Orchid Pink 2555 +237 106 146 Light Cerise 2520 +231 70 127 Azalea 2310 +241 147 174 Medium Pink 2550 +147 115 153 Purple Haze 2524 +189 84 116 Dark Pink 2513 +166 58 109 Medium Purple 2505 +169 85 117 Dusky Pink 2500 + 95 30 37 Dark Maroon 2502 +231 201 198 Medium Pink 2650 +243 192 233 Pale Pink 2640 +229 161 203 Light Pink 2620 +154 85 119 Medium Berry 2600 +123 58 100 Medium Purple 2611 +250 219 238 Oyster 2645 +233 194 229 Light Pink 3045 +185 143 195 Lavender 2830 +143 93 143 Medium Purple 2810 + 71 0 51 Dark Maroon 2715 +199 168 248 Tulip 3040 +201 121 196 Purple 2820 +147 84 152 Violet 2712 +149 123 188 Pale Purple 3213 +100 72 134 Purple 3103 +208 197 220 Pale Lilac 3262 +189 176 207 Pastel Lilac 3241 +183 191 229 Pale Lilac 3340 +149 138 192 Violet Tulip 3230 +108 110 191 Violet 3200 +100 83 170 Violet 3540 + 78 57 114 Dark Purple 3110 + 44 13 63 Dark Purple 2743 +229 233 249 White 3661 +215 229 255 White 3845 +129 147 189 Blue 3430 +123 146 215 Medium Purple 3321 +163 164 201 Pale Lilac 3420 +105 98 165 Bright Iris 3301 + 68 55 133 Purple 3330 + 83 78 153 Medium Purple 3102 + 91 73 127 Imperial Purple 3211 + 76 66 111 Petrol Blue 3222 + 70 45 79 Blackberry 3313 +186 209 241 Ice Blue 3761 +116 140 193 Medium Purple 3631 + 70 82 144 Purple 3611 + 74 85 151 Purple 3543 + 75 81 133 Grey / Blue 3322 + 61 50 88 Concord 3353 + 0 7 79 Navy Blue 3355 +236 240 239 White 4071 +195 206 214 Pastel Blue 3752 +175 198 214 Light Blue / Green 3840 +143 176 207 Light Blue 3820 +110 129 169 Slate Blue 3810 + 86 102 172 Soldier Blue 3600 +192 223 239 Cadet Blue 3961 +171 233 255 Powder Blue 3910 + 20 161 255 Mid Windsor 3901 + 77 166 212 Light Blue 4030 + 72 180 229 Light Blue 4105 +104 121 144 Smoke Blue 4032 + 60 86 99 Dark Blue / Green 4133 +171 194 219 Lake Blue 3851 +126 143 170 Faded Denim 3952 +100 222 131 Pale Green 3743 + 84 79 108 Steel 3443 + 59 45 56 Dark Maroon 3344 +141 167 171 Chicory 4040 + 89 166 175 Bright Blue 4121 + 39 159 166 Grizzly Turquoise 4111 + 28 105 125 Medium Blue 4100 + 29 60 80 Dark Blue 3822 + 24 83 106 Dark Blue 4232 + 44 55 56 Dark Green / Blue 4022 +138 205 198 Tropical Wave 4440 + 93 173 177 Bright Blue 4231 + 44 84 86 Dark Bottle Green 4500 + 54 69 78 Dark Navy 4432 +116 171 174 Light Clear Blue 4430 +101 169 179 Aqua 4420 + 80 125 146 Slate Grey 4421 + 56 117 126 Medium Green / Blue 4400 + 88 107 111 Gobelin Blue 4643 + 58 86 82 Enchanted Sea 4644 + 48 63 46 Dark Green 4516 +245 252 251 White 5040 +173 206 198 Aqualine 4250 +152 217 199 Pale Mint Green 4840 + 92 169 163 Porcelain 4620 + 97 150 147 Teal 4610 + 77 130 131 Bristol Blue 4513 +180 226 203 Mint 5050 +126 217 185 Pale Green 5020 + 30 175 116 Pale Jade 5111 + 37 156 114 Gotcha Green 5000 +121 212 161 Seafoam 5240 +145 203 166 Ocean Wave 5230 + 95 203 119 Neon Green 5210 + 77 180 91 Medium Green 5431 +184 229 187 Mint 5460 +109 145 112 Shale Green 5542 + 55 98 81 Dark Jade Green 5255 + 42 63 51 Dark Green / Blue 5375 +194 254 168 Dark Olive Green 5470 + 60 189 65 Harvest Green 5620 + 2 154 58 Vibrant Green 5515 + 11 124 42 Green 5422 + 2 102 39 Green 5425 + 0 88 39 Green 5326 +121 196 58 Medium Green 5611 + 98 203 58 Green 5600 +205 255 135 Brilliant Lime 5650 +191 240 109 Sharp Green 5840 +175 238 116 Lime 5610 +152 210 98 Lime 5531 + 84 138 62 Moss Green 5633 +187 229 121 Lime 6051 +161 224 91 Spruce 5832 +117 154 49 Green / Yellow 5833 + 79 140 25 Meadow 5933 + 72 126 37 Green 5934 +255 244 214 Eggshell 0970 +253 248 188 Pale Yellow 0251 +221 215 133 Charlock 0232 +173 184 84 Lime 0442 +150 161 74 Pistachio 0345 +232 241 170 Bright Yellow 0241 +191 193 116 Leek Green 0352 +170 166 63 Pistachio 6133 +128 109 80 Medium Brown 0465 + 93 85 67 Dark Grey / Green 6156 +210 229 177 Lime Cream 6071 +167 165 125 Sage Green 0453 +139 147 89 Medium Olive Green 0454 + 88 100 46 Pale Green 6065 + 37 84 49 Dark Green 5765 + 53 98 56 Lime 5944 + 58 93 53 Dark Green 5766 + 58 74 42 Olive 5776 +221 201 165 Pale Peach 0761 +215 191 133 Cocoon 0532 +240 199 115 Pale Yellow 0822 +169 124 63 Gold / Yellow 0551 +102 93 30 Dark Green / Yellow 0936 + 79 79 46 Green / Yellow 0747 +231 201 155 Maize 0851 +172 129 81 Gold 0842 +255 250 227 Ivory White 0961 +231 202 157 Maize 1140 +255 212 177 Alesan 1361 +230 166 112 Apricot Nectar 1041 +174 110 58 Cocoa Brown 0932 +137 91 50 Light Cocoa 0933 +145 93 60 Unaka Sand 1342 +130 88 62 Dark Brown 1355 +105 74 51 Clayrust 1346 + 84 58 30 Brown 1376 +255 255 245 White 0670 +255 255 240 White 0870 +252 225 190 Almond Oil 1172 +170 139 109 Camel 0853 +120 95 74 Bagby Green 0945 + 74 58 42 Dark Brown 0866 +181 148 139 Woodrose 1061 +121 81 53 Mushroom 1055 + 70 46 28 Dark Brown 1876 + 51 37 21 Dark Brown 1366 + 55 41 35 Dark Brown 1276 +207 195 180 Stainless Steel 0672 +198 186 165 Sand 0873 +161 160 134 Pale Green / Grey 0732 + 94 76 62 Dark Grey / Green 1573 +205 205 205 Medium Silver 0109 +240 240 225 Natural White 0150 +212 213 205 Lilac Hint 3971 +216 218 215 Natural 0124 +212 213 205 Lilac Hint 0142 +193 189 195 Vapor Blue 0104 +220 227 235 Cream 0145 +183 182 183 Light Grey / Green 0156 +181 181 181 Light Grey / Green 1972 +149 164 153 Jadeite 0141 +117 122 133 Medium Grey 0108 +130 120 135 Gray Ridge 0152 + 84 97 94 Dark Gray 0111 +149 145 142 GS Gray 0107 +124 120 122 Medium Grey 2675 + 86 85 86 Dark Grey 4175 diff --git a/inkstitch/palettes/InkStitch Isalon Polyester.gpl b/inkstitch/palettes/InkStitch Isalon Polyester.gpl new file mode 100644 index 0000000..5374bba --- /dev/null +++ b/inkstitch/palettes/InkStitch Isalon Polyester.gpl @@ -0,0 +1,418 @@ +GIMP Palette +Name: Ink/Stitch: Isalon Polyester +Columns: 4 +# RGB Value Color Name Number +247 240 232 Star White 0005 +250 237 222 Gardenia 0010 +245 232 217 Bridal Blush 0015 +237 232 222 Lily White 0017 +242 237 181 Tender Yellow 0250 +245 237 128 Limelight 0300 +232 219 82 Aurora 0320 +245 224 59 Buttercup 0600 +232 219 82 Aurora 0500 +245 224 59 Buttercup 0605 +235 212 64 Maize 0603 +240 219 105 Yellow Cream 0304 +237 204 82 Primrose Yellow 0620 +237 204 82 Primrose Yellow 0602 +235 212 64 Maize 0608 +235 212 64 Maize 0311 +235 235 199 Sylvan Green 0460 +245 230 168 French Vanilla 0520 +240 219 105 Yellow Cream 0523 +247 222 115 Snapdragon 0713 +232 196 115 Cornsilk 0507 +245 230 168 French Vanilla 0360 +237 204 82 Primrose Yellow 0502 +250 194 69 Daffodil 0503 +247 201 102 Sunset Gold 0801 +232 196 115 Cornsilk 0711 +247 186 84 Amber Yellow 0701 +224 181 79 Yolk Yellow 0704 +235 176 77 Amber 0705 +237 186 97 Golden Cream 0810 +227 204 145 Straw 0742 +217 194 125 Jojoba 0741 +222 181 102 Ochre 0514 +204 153 89 Oak Buff 0821 +219 168 117 Clay 0632 +240 227 184 Rutabaga 0660 +227 204 128 Dusky Citron 0640 +237 186 97 Golden Cream 0714 +219 163 64 Artisan Gold 0802 +252 143 79 Tangerine 0912 +252 171 71 Marigold 0911 +240 196 79 Mimosa 0902 +250 201 161 Almond Cream 1350 +247 140 97 Melon 1103 +235 120 92 Coral 1330 +217 122 51 Amberglow 1305 +245 214 181 Nude 1570 +250 194 148 Beach Sand 1040 +235 153 92 Muskmelon 1105 +227 135 84 Dusty Orange 1303 +230 112 61 Coral Rose 1307 +232 112 74 Flamingo 1302 +217 194 148 Marzipan 0981 +217 194 148 Marzipan 0950 +242 194 140 Apricot Cream 1030 +252 143 79 Tangerine 1200 +235 153 92 Muskmelon 1110 +240 140 79 Autumn Sunset 1102 +212 125 89 Carnelian 1321 +209 135 87 Coral Gold 1221 +209 130 102 Tawny Orange 1332 +179 99 89 Dusty Cedar 1335 +173 92 74 Redwood 1334 +247 161 140 Peach Amber 1849 +214 94 84 Deep Sea Coral 1510 +186 79 79 Cranberry 1702 +184 71 77 Chrysanthemum 1704 +186 79 79 Cranberry 1800 +184 71 77 Chrysanthemum 1706 +168 79 79 Garnet Rose 1902 +168 79 79 Garnet Rose 2102 +143 69 74 Earth Red 2100 +143 71 84 Dry Rose 1912 +125 79 84 Crushed Berry 2323 +143 71 84 Dry Rose 1724 +143 71 84 Dry Rose 2103 +143 69 74 Earth Red 1911 +184 71 77 Chrysanthemum 2101 +199 77 89 Claret Red 1900 +143 71 84 Dry Rose 2012 +158 84 74 Marsala 2011 +133 74 69 Pompeii 2132 +130 77 74 Roan Rouge 2113 +140 89 94 Renaissance Rose 2222 +240 212 179 Dawn 0961 +224 207 176 Creme Brulee 1571 +217 181 153 Toasted Almond 1260 +194 140 122 Cameo Brown 1451 +186 133 122 Ash Rose 1842 +133 84 99 Tulipwood 2224 +140 89 94 Renaissance Rose 2114 +230 150 135 Lobster Bisque 1540 +232 204 176 Cream Tan 1560 +245 224 207 Dew 1460 +235 219 209 Paster Parchment 2165 +227 179 176 Coral Blush 2340 +227 153 161 Sea Pink 2152 +173 107 117 Heather Rose 2231 +133 84 99 Tulipwood 2333 +115 89 92 Flint 2326 +196 163 171 Red Lilac 2762 +166 117 117 Nostalgia Rose 2164 +133 84 99 Tulipwood 2322 +125 84 102 Berry Conserve 2325 +115 89 92 Flint 2336 +255 212 214 Blushing Bride 1961 +237 204 201 Chalk Pink 2250 +245 191 194 Almond Blossom 2155 +247 191 194 Orchid Pink 2350 +237 133 148 Morning Glory 1941 +209 74 99 Honeysuckle 2130 +168 77 87 Holly Berry 1920 +209 74 99 Honeysuckle 2120 +235 122 135 Bubblegum 1930 +240 194 199 Pink Mist 2555 +237 181 199 Lilac Sachet 2550 +209 120 140 Chateau Rose 2220 +199 77 89 Claret Red 2303 +186 66 94 Carmine 2301 +166 89 102 Rose Wine 2211 +240 222 212 Mauve Morn 2360 +230 204 201 Pale Lilac 2363 +237 181 199 Lilac Sachet 2560 +242 122 150 Pink Carnation 2520 +204 79 110 Pink Flambe 2305 +166 84 120 Meadow Mauve 2723 +227 199 209 Lilac Snow 2740 +214 171 201 Orchid Bouquet 2731 +196 125 171 Violet 2732 +125 77 120 Bright Violet 2704 +125 84 102 Berry Conserve 2633 +135 97 120 Chinese Violet 2700 +171 138 166 Regal Orchid 2830 +194 176 199 Orchid Petal 2940 +189 171 204 Lavender 3030 +143 115 166 Paisley Purple 3213 +112 87 110 Grayish Purple 2702 +191 176 204 Pastel Lilac 3152 +189 171 204 Lavender 3140 +110 97 148 Corsican Blue 3120 +102 82 135 Ultra Violet 3122 +191 184 209 Purple Heather 3450 +166 153 173 Wisteria 3241 +117 105 120 Purple Sage 2864 +105 89 110 Mulled Grape 2954 +112 92 110 Montana Grape 2733 +110 99 117 Cadet 2953 +143 138 176 Persian Violet 3230 +102 117 171 Wedgewood 3320 + 71 74 115 Skipper Blue 3102 + 87 97 125 Coastal Fjord 3353 +143 156 191 Lavender Lustre 3420 +143 156 191 Lavender Lustre 3430 +148 156 201 Easter Egg 3351 +120 135 194 Persian Jewel 3321 + 87 89 135 Purple Mountain 3302 + 87 89 135 Purple Mountain 3524 +102 107 171 Baja Blue 3512 + 94 117 158 Riviera 3600 +163 184 209 Powder Blue 3640 +115 138 179 Allure 3410 +102 117 171 Wedgewood 3611 + 97 97 163 Violet Storm 3543 + 97 97 163 Violet Storm 3300 + 87 97 125 Coastal Fjord 3323 +110 99 117 Cadet 3645 + 79 84 102 Nightshadow Blue 3363 + 89 84 87 Rabbit 3755 +189 199 201 Ballad Blue 3845 +156 184 212 Cerulean 3530 +105 135 179 Silver Lake Blue 3631 + 92 135 199 Marina 3713 + 69 112 163 Blueball 3311 + 82 102 148 Dutch Blue 3734 +122 153 184 Dusk Blue 3841 +179 189 196 Celestial Blue 3951 +143 176 191 Forget-Me-Not 3742 +125 143 163 Faded Denim 3952 + 82 102 148 Dutch Blue 3411 + 87 97 125 Coastal Fjord 3736 + 79 84 102 Nightshadow Blue 3346 + 79 84 102 Nightshadow Blue 3554 + 79 84 102 Nightshadow Blue 3364 +102 92 92 Plum Kitten 3574 +179 189 196 Celestial Blue 3750 +143 176 191 Forget-Me-Not 3851 + 84 110 138 Captains Blue 3833 + 79 84 102 Nightshadow Blue 4055 + 94 84 74 Major Brown 3775 +222 222 217 Barely Blue 3571 +209 212 214 Illusion Blue 3650 +186 201 209 Baby Blue 3761 +163 184 212 Blue Bell 3820 + 79 138 194 Azure Blue 3715 +115 138 179 Allure 3810 + 87 120 166 Parisian Blue 3621 + 79 99 130 Moonlight Blue 3743 +105 107 120 Folkstone Gray 3444 +186 201 209 Baby Blue 3840 +148 199 214 Moderate Blue 3721 +120 163 214 Little Boy Blue 3720 + 69 112 163 Bluebell 3801 + 84 92 163 Amparo Blue 3510 +209 212 214 Illusion Blue 3860 +173 207 212 Blue Glow 3961 +171 204 217 Crystal Blue 4130 +125 176 201 Air Blue 3910 +112 176 207 Blue Grotto 3903 + 51 140 194 Blithe 3901 + 51 140 194 Blithe 3905 +204 224 217 Blue Glass 4040 +148 199 214 Moderate Blue 4120 + 99 191 212 Bachelor Button 4112 + 79 173 196 River Blue 4123 + 64 166 191 Horizon Blue 4102 + 64 125 143 Larkspur 4126 + 64 125 143 Larkspur 4200 + 97 135 156 Niagara 4000 + 84 99 120 China Blue 4143 +222 222 217 Barely Blue 5040 +209 212 214 Illusion Blue 4250 +176 209 212 Light Blue 4740 +110 184 176 Pool Blue 4310 + 89 158 163 Porcelain 4710 + 89 158 163 Porcelain 4520 + 20 122 140 Pagoda Blue 4502 + 74 125 112 Deep Sea 4822 + 46 156 161 Baltic 4712 + 69 166 153 Bright Aqua 5110 + 64 158 130 Marine Green 5122 + 84 133 97 Deep Grass Green 5100 +230 232 217 Ice 4860 +201 209 189 Almost Aqua 5060 +105 153 130 Feldspar 5542 + 99 117 115 Trooper 5665 + 87 99 97 Balsam Green 5365 + 87 99 97 Balsam Green 5575 + 99 115 125 Blue Mirage 4844 +199 222 209 Opal Blue 4850 +212 219 209 Sprout Green 4160 +156 166 163 Quarry 4462 +117 138 148 Cadet Gray 4463 + 99 117 115 Trooper 4776 + 92 105 107 Gobelin Blue 5255 + 87 99 97 Balsam Green 5374 +107 112 107 Sedona Sage 5755 +140 153 140 Green Milieu 5663 +148 163 150 Jadeite 5552 +145 143 128 Rock Ridge 0674 +148 135 120 Moon Rock 0274 +168 153 140 Atmosphere 0555 +186 173 158 Feather Gray 0873 +207 217 173 Seafoam Green 5650 +161 196 120 Jade Lime 5840 +181 209 130 Sap Green 5830 +115 186 97 Bud Green 5600 + 84 168 89 Vibrant Green 5511 + 87 186 97 Poison Green 5502 + 51 158 92 Kelly Green 5503 + 61 163 117 Ming Green 5522 + 61 163 117 Ming Green 5505 + 61 163 117 Ming Green 5515 + 84 133 97 Deep Grass Green 5422 + 79 110 105 Sagebrush Green 5536 + 84 97 89 Dark Forest 5336 +163 201 92 Bright Lime Green 5912 +196 217 99 Wild Lime 6021 +194 207 148 Lily Green 6051 +161 196 120 Jade Lime 5610 +120 168 105 Green Tea 5531 + 94 143 79 Fluorite Green 5513 + 74 105 84 Myrtle 5326 + 74 105 84 Myrtle 5335 +194 207 173 Seacrest 6061 +179 191 130 Nile 5822 +153 173 99 Leaf Green 5832 +115 150 99 Jade Green 5722 + 89 117 99 Dark Ivy 5643 +102 115 102 Laurel Wreath 5746 + 84 97 89 Dark Forest 5865 + 87 99 97 Balsam Green 5576 + 99 107 79 Loden Green 5735 +128 153 71 Spinach Green 6043 +125 145 94 Epsom 5833 + 94 128 89 English Ivy 5933 + 84 97 89 Dark Forest 5765 + 79 99 87 Duck Green 5554 +128 145 125 Green Bay 5743 +204 199 158 Green Haze 6071 +168 166 125 Sage Green 0453 +148 135 107 Coriander 0454 +125 110 94 Walnut 0265 +125 117 92 Covert Green 0544 +115 110 107 Charcoal Gray 0464 +214 201 92 Acacia 0221 +199 186 125 Dried Moss 0313 +199 186 125 Dried Moss 0352 +138 138 97 Boa 6133 + 97 97 97 Pewter 0366 +112 107 94 Bungee Cord 0356 + 97 92 89 Dark Gull Gray 5776 +107 112 107 Sedona Sage 5876 + 92 92 89 Gunmetal 5866 +125 120 102 Vertiver Green 0266 +145 143 128 Rock Ridge 0128 +224 230 207 Water Lily 0370 +214 199 171 Wood Ash 0372 +194 171 133 Candied Ginger 0652 +148 128 82 Antique Bronze 0726 +196 176 135 Drab Gray 0552 +209 186 130 Cocoon 0532 +232 217 191 Seedpearl 1370 +222 209 166 Light Chartreuse 0571 +224 179 130 Desert Mist 0740 +173 140 92 Apple Cinnamon 0941 +227 153 92 Apricot Tan 0913 +227 191 135 Desert Dust 0851 +209 161 122 Toast 0921 +191 158 115 Tan 1133 +184 143 110 Macaroon 1132 +168 122 97 Mocha Mousse 1032 +140 97 87 Cognac 0933 +140 97 87 Cognac 1244 +143 94 77 Russet 1326 +140 97 87 Cognac 1342 +184 122 87 Sunburn 1115 +186 158 130 Nouget 1123 +176 143 112 Praline 1142 +130 92 82 Nutmeg 1354 +125 92 89 Rose Taupe 1746 +135 120 105 Pine Bark 1054 +148 120 110 Antler 1243 +153 128 110 Ginger Snap 0953 +181 163 133 Nomad 1061 +148 120 110 Antler 1453 +138 112 112 Twilight Mauve 1844 +235 237 224 Summer Shower 0003 +237 232 222 Lily White 0190 +227 219 196 White Asparagus 0780 +222 214 194 Bone White 1071 +209 199 179 Oatmeal 0872 +201 191 171 Peyote 0861 +247 237 219 Whisper White 1171 +214 194 166 Shifting Sand 0581 +186 158 130 Nouget 0934 +179 150 125 Natural 0853 +166 143 115 Chanterelle 0753 +133 120 102 Fossil 0945 + 89 84 87 Rabbit 1566 +102 89 89 Sparrow 1164 +184 184 166 Agate Gray 0573 +196 191 171 Overcast 0172 +179 171 148 Spray Green 1062 +168 153 138 Cobblestone 0973 +166 153 140 Goat 0874 +138 130 122 Steeple Gray 1374 +120 94 87 Deep Taupe 0576 +227 219 196 White Asparagus 0870 +214 207 181 Fog 1270 +199 191 176 Gray Morn 0170 +153 145 122 Seneca Rock 0763 +143 130 115 Fungi 0864 +120 107 97 Iron 1573 +102 92 92 Plum Kitten 1186 +115 110 107 Charcoal Gray 0575 +143 130 125 Cinder 0776 +143 130 125 Cinder 0732 +102 89 89 Sparrow 1366 +181 181 179 Storm Gray 0123 +204 209 201 Dawn Blue 0150 +217 222 212 Zephyr Blue 4070 +209 209 199 Foggy Dew 3570 +201 196 181 Moonstruck 0174 +201 196 181 Moonstruck 0160 +140 138 135 Wild Dove 0153 +138 133 133 Frost Gray 0140 +107 102 107 Excalibur 2776 +125 110 94 Walnut 0134 +212 219 209 Sprout Green 4071 +173 184 186 Pearl Blue 4072 +138 158 161 Arona 3853 +207 201 196 Glacier Gray 0145 +171 173 166 Blue Gray 0109 +133 138 135 Monument 4074 + 89 84 87 Rabbit 4175 +105 107 107 Steel Gray 3265 +138 133 133 Frost Gray 0112 +171 163 161 Gull Gray 2673 +204 209 201 Dawn Blue 4171 +189 199 189 Smoke 3971 +181 181 179 Storm Gray 0142 +143 145 140 Griffin 4362 +156 166 163 Quarry 0156 +156 166 163 Quarry 0131 +171 163 161 Gull Gray 1972 +143 145 140 Griffin 0129 +128 128 122 Moon Mist 2564 + 99 99 99 Castlerock 2775 +110 99 102 Shark 3475 +214 217 209 Blue Blush 3760 +189 199 189 Smoke 0163 +156 158 153 Limestone 3974 +179 181 176 Highrise 0106 +145 138 135 Gull 3274 +133 138 135 Monument 3263 +143 158 171 Chicory 3452 +102 92 92 Plum Kitten 3666 +102 92 92 Plum Kitten 3476 + 0 0 0 Black 0020 +135 204 181 Pale Aqua Green 5500 +252 158 156 Flamingo Pink 1306 +242 143 120 Burnt Coral 1501 +250 171 186 Prism Pink 1940 +235 122 135 Bubblegum 1950 diff --git a/inkstitch/palettes/InkStitch Janome.gpl b/inkstitch/palettes/InkStitch Janome.gpl new file mode 100644 index 0000000..44113b2 --- /dev/null +++ b/inkstitch/palettes/InkStitch Janome.gpl @@ -0,0 +1,82 @@ +GIMP Palette +Name: Ink/Stitch: Janome +Columns: 4 +# RGB Value Color Name Number +240 240 240 White 001 + 0 0 0 Black 002 +228 195 93 Gold 003 +246 105 160 Pink 201 +255 0 0 Red 225 +255 102 0 Orange 203 +255 255 23 Yellow 204 + 72 26 5 Dark Brown 205 + 35 115 54 Green 226 + 11 47 132 Blue 207 +171 90 150 Purple 208 +172 156 199 Pale Violet 209 +253 245 181 Pale Yellow 210 +249 153 183 Pale Pink 211 +250 179 129 Peach 212 +215 189 164 Beige 213 +156 100 69 Brown 214 +151 5 51 Wine Red 215 +160 184 204 Pale Sky 216 +101 194 200 Sky 217 +127 194 28 Yellow Green 218 + 47 89 51 Olive Green 219 +229 229 229 Silver Gray 220 +136 155 155 Gray 221 +152 214 189 Pale Aqua 227 +178 225 227 Baby Blue 228 +152 243 254 Powder Blue 229 +112 169 226 Bright Blue 230 + 29 84 120 Slate Blue 231 + 7 22 80 Navy Blue 232 +255 187 187 Salmon Pink 233 +255 96 72 Coral 234 +255 90 39 Burnt Orange 235 +226 161 136 Cinnamon 236 +181 148 116 Umber 237 +245 219 139 Blond 238 +255 204 0 Sunflower 239 +255 189 227 Orchid Pink 240 +195 0 126 Peony Purple 241 +168 0 67 Burgundy 242 + 84 5 113 Royal Purple 243 +255 9 39 Cardinal Red 244 +198 238 203 Opal Green 245 + 96 133 65 Moss Green 246 + 96 148 24 Meadow Green 247 + 6 72 13 Dark Green 248 + 91 210 181 Aquamarine 249 + 76 181 143 Emerald Green 250 + 4 145 123 Peacock Green 251 + 89 91 97 Dark Gray 252 +255 255 220 Ivory White 253 +255 71 32 Vermilion 202 + 0 181 82 Bright Green 206 + 2 87 181 Ocean Blue 222 +208 186 176 Beige Gray 223 +227 190 129 Bamboo 224 +230 101 30 Hazel 254 +230 150 90 Toast 255 +240 156 150 Salmon 256 +167 108 61 Cocoa Brown 257 +180 90 48 Sienna 258 +110 57 55 Sepia 259 + 92 38 37 Dark Sepia 260 + 98 49 189 Violet Blue 261 + 20 50 156 Blue Ink 262 + 22 95 167 Solar Blue 263 +196 227 157 Green Dust 264 +253 51 163 Crimson 265 +238 113 175 Floral Pink 266 +132 49 84 Wine 267 +163 145 102 Olive Drab 268 + 12 137 24 Meadow 269 +247 242 151 Mustard 270 +204 153 0 Yellow Ocher 271 +199 151 50 Old Gold 272 +255 157 0 Honey Dew 273 +255 186 94 Tangerine 274 +252 241 33 Canary Yellow 275 diff --git a/inkstitch/palettes/InkStitch King Star.gpl b/inkstitch/palettes/InkStitch King Star.gpl new file mode 100644 index 0000000..bf2020c --- /dev/null +++ b/inkstitch/palettes/InkStitch King Star.gpl @@ -0,0 +1,434 @@ +GIMP Palette +Name: Ink/Stitch: King Star +Columns: 4 +# RGB Value Color Name Number +255 245 254 White 1 +240 222 218 Light Pink 2 +247 219 215 Heavenly Pink 3 +249 188 204 Pink 4 +248 171 191 Petal Pink 5 +248 154 181 Pale Pink 6 +242 117 151 Pink 7 +239 62 104 Pink 8 +224 0 71 Cerise 9 +200 7 64 Dark Red 10 +239 198 202 Parfait Pink 11 +249 188 204 Pink 12 +249 154 176 Rose 13 +253 122 174 Wild Pink 14 +210 83 150 Medium Pink 15 +182 37 112 Dark Pink 16 +159 0 82 Dark Red 17 +137 1 77 Cranberry 18 +106 28 67 Dark Maroon 19 + 76 37 58 Dark Maroon 20 +234 201 208 Pink Bazaar 21 +242 182 208 Violet 22 +252 165 210 Medium Pink 23 +249 114 191 Floral Pink 24 +230 24 148 Ruby Glint 25 +222 30 129 Ruby Glint 26 +238 205 186 Bisque 27 +236 188 168 Pale Salmon Pink 28 +251 172 177 Emily Pink 29 +233 149 123 Coral Haze 30 +246 215 213 Primrose Pink 41 +255 230 223 Snow White 42 +252 222 214 Rosewater 43 +251 206 200 Petal Pink 44 +250 192 180 Impatiens Pink 45 +249 183 171 Flesh Pink 46 +245 192 200 Sugar Pink 47 +239 169 177 Pale Pink 48 +248 143 157 Shrimp 49 +231 141 153 Light Orange 50 +251 155 166 Peony 51 +236 119 128 Confetti 52 +212 60 72 Dark Salmon Pink 53 +203 40 43 Spanish Red 54 +175 28 46 Red Berry 55 +169 8 76 Red 56 +236 166 176 Pale Pink 57 +232 171 186 Cameo Pink 58 +218 130 142 Medium Pink 59 +231 141 153 Light Orange 60 +241 212 198 Crystal Pink 61 +247 171 145 Salmon 62 +233 149 123 Coral Haze 63 +216 126 100 Crabapple 64 +184 93 66 Brown 65 +183 73 48 Dark Orange / Brown 66 +154 48 24 Red Bittersweet 67 +120 40 29 Bark 68 +117 41 53 Wine 69 +154 30 54 Cranberry 70 +236 227 212 Yellow / Gold 81 +238 234 187 Celery 82 +246 227 159 PaleYellow 83 +247 222 138 Wheat 84 +250 201 62 Yellow 85 +253 203 22 Manila 86 +252 184 83 Mimosa 87 +247 164 8 Marigold 88 +211 133 0 Karat 89 +220 136 2 Karat 90 +216 117 0 Gold / Orange 91 +253 199 129 Buff Orange 92 +252 180 122 Peach 93 +251 170 78 Amber 94 +242 127 0 Orange 95 +243 125 1 Orange 96 +225 104 0 Gold / Orange 97 +216 79 0 Orange 98 +189 56 39 Dark Rust 99 +132 52 15 Chocolate 100 +236 227 212 Yellow / Gold 101 +238 234 187 Celery 102 +239 236 159 PaleYellow 103 +245 234 92 Daffodil 104 +248 220 22 Moonbeam 105 +246 211 21 Canary 106 +249 208 22 Manila 107 +253 203 22 Manila 108 +241 190 21 Gold 109 +226 173 17 Pollen Gold 110 +247 234 155 PaleYellow 121 +239 225 126 Pale Yellow / Gold 122 +225 212 118 Popcorn 123 +190 168 49 Medium Green / Yellow 124 +157 126 9 Autumn Green 125 +120 87 8 Earthen Tan 126 +196 160 14 Black Eyed Susie 127 +178 139 10 Shimmering Gold 128 +120 87 8 Earthen Tan 129 +239 215 167 Double Cream 130 +235 188 136 Peach 131 +225 154 98 Pale Orange 132 +253 177 115 Peach 133 +253 172 90 Chamois 134 +251 170 78 Amber 135 +233 157 71 Pale Gold 136 +188 82 6 Rust 137 +132 52 15 Chocolate 138 +220 136 2 Karat 139 +178 85 7 Rust 140 +200 188 136 Vegas Gold 141 +225 214 182 Champagne Mist 142 +212 197 154 Parsnip 143 + 94 80 31 Dark Olive Green 144 + 94 80 31 Dark Olive Green 145 +124 91 22 Earthen Tan 146 +111 89 29 Dark Green / Yellow 147 + 79 74 34 Dark Olive Green 148 + 99 86 18 Dark Green / Yellow 149 +237 207 181 Cottage Beige 150 +231 227 218 Medium Yellow 161 +216 212 185 Cream 162 +225 214 182 Champagne Mist 163 +212 197 154 Parsnip 164 +224 194 168 Pale Peach 165 +211 175 143 Light Brown 166 +194 155 124 Light Red / Orange 167 +176 127 87 Fawn 168 +200 171 153 Pale Orange 169 +187 154 139 Deauville Mauve 170 +178 141 122 Roebuck 171 +129 86 69 Dark Brown 172 + 76 38 17 Dark Oak 173 + 79 50 36 Dark Brown 174 + 76 38 17 Dark Oak 175 + 59 45 42 Best Brown 176 +100 83 75 Dark Fawn 177 + 72 52 51 Egyptian Brown 178 + 63 54 55 Dark Grey 179 + 35 37 36 Black 180 +238 205 186 Bisque 181 +236 188 168 Pale Salmon Pink 182 +217 159 145 Peachbeige 183 +199 131 112 Canyon Clay 184 +142 81 62 Dark Brown 185 +111 56 35 Dark Brown 186 + 91 48 32 Dark Brown 187 +209 201 188 Champagne 188 +206 196 186 Moonstruck 189 +193 183 171 Light Brown 190 +206 235 127 Pale Yellow 201 +187 232 90 Sharp Green 202 +186 211 5 Dark Green 203 +139 173 1 Green Dust 204 +191 210 154 Flite Green 205 +180 202 138 Green Oak 206 +148 177 113 Tarragon 207 +126 156 82 Medium Green / Yellow 208 +149 220 90 Medium Green 209 + 97 192 26 Medium Green 210 + 79 168 2 Meadow 211 + 51 139 39 Bright Green 212 + 51 114 35 Green 213 + 79 139 15 Meadow 214 + 60 125 23 Green 215 + 51 114 35 Green 216 + 57 97 34 Dark Green 217 + 64 80 35 Hedge 218 + 58 80 34 Hedge 219 + 62 72 35 Hedge 220 +231 242 202 Light Yellow 221 +197 214 162 Flite Green 222 +141 169 121 Forest Shade 223 + 99 146 114 Pale Blue / Green 224 + 62 98 72 Teal 225 + 26 70 43 Dark Green 226 + 21 77 40 Green 227 + 26 70 43 Dark Green 228 + 99 164 132 Green Spruce 229 + 35 169 116 Pale Jade 230 +101 199 161 Medium Green 241 + 45 164 106 Gotcha Green 242 + 0 116 53 Green 243 + 0 116 53 Green 244 + 0 116 53 Green 245 + 1 99 58 Dark Green 246 +199 229 227 Soothing Sea 247 +152 220 221 Mint Julep 248 + 78 199 180 Aquamarine 249 + 40 163 142 Tender Teal 250 + 0 129 107 Jade Green 251 + 0 104 87 Green Forest 252 + 0 97 98 Garden Green 253 +177 209 185 Bird Egg Green 254 +118 164 138 Creme de Menthe 255 +118 164 138 Creme de Menthe 256 + 14 107 78 Green Bay 257 + 0 83 63 Dark Green 258 + 1 75 58 Dark Green 259 + 0 66 54 Evergreen 260 +224 204 216 Rose Pink 261 +234 191 221 Pink 262 +209 164 203 Light Pink 263 +223 155 216 Mid Lilac 264 +151 70 149 Violet 265 +156 26 135 Plum 266 +161 0 130 New Berry 267 +131 0 94 Dark Purple 268 +131 0 94 Dark Purple 269 +221 191 215 Light Pink 270 +228 216 220 Light Pink 281 +199 173 220 Tulip 282 +179 147 214 Pale Purple 283 +156 111 202 Iris 284 +169 145 177 Sterling 285 +128 99 143 Light Grape 286 +104 72 121 Jazz Purple 287 +196 198 211 Light Purple 288 +205 203 225 Paris Blue 289 +191 180 220 Purple Heather 290 +171 157 216 Lilac 291 +124 97 174 Light Purple 292 + 39 24 107 Purple 293 +183 172 212 Lavender 294 +179 147 214 Pale Purple 295 +130 114 187 Mauve 296 + 25 68 163 Royal Blue 297 + 0 56 130 Blue 298 + 0 54 150 Fire Blue 299 + 0 54 150 Fire Blue 300 +198 212 223 Cadet Blue 301 +157 177 201 Pale Blue 302 +123 152 184 Dusk Blue 303 + 96 129 160 Slate Blue 304 + 63 101 140 Medium Blue 305 +121 150 206 Cornflower Blue 306 +102 124 209 Jay Blue 307 +129 104 205 Amethyst 308 +111 78 191 Violet 309 + 55 16 143 Medium Green / Blue 310 +199 217 229 Cadet Blue 321 +167 194 205 Angel Falls 322 +140 177 193 Forget-Me-Not 323 + 86 151 157 Porcelain 324 + 55 119 119 Dark Blue / Green 325 + 22 131 154 Dark Aqua Green 326 + 0 104 133 Oasis 327 + 0 77 105 Peacock 328 + 19 53 78 Dark Teal 329 + 90 185 205 Medium Blue / Green 330 + 0 159 188 Marine Aqua 331 +176 218 230 Baby Blue 332 +134 199 229 Pale Turquoise 333 + 86 181 225 Medium Blue 334 + 0 162 224 Mid Windsor 335 + 10 147 215 Baltic Blue 336 + 0 88 156 Solar Blue 337 + 30 20 117 Royal 338 + 0 54 150 Fire Blue 339 + 23 25 99 Imperial Blue 340 +180 216 248 Ice Blue 341 +191 222 217 Bleached Aqua 342 +100 136 168 Slate Blue 343 + 20 56 88 Blue 344 +185 202 230 Light Blue 345 +156 177 196 Pale Blue 346 +133 152 167 Stone Blue 347 + 93 121 142 Medium Blue / Green 348 + 49 86 113 Dark Blue / Green 349 + 23 76 92 Dark Bottle Green 350 +189 197 200 Ballad Blue 361 +159 167 170 Light Grey 362 +129 137 140 Grey 363 + 99 107 110 Metal 364 + 69 77 80 Midnight 365 + 39 47 50 Dark Grey 366 +177 182 186 Medium Grey / Blue 367 +146 151 155 Pale Grey 368 +119 124 128 Cool Grey 369 + 88 93 97 Dark Gray 370 + 66 75 82 Midnight 371 +206 186 185 Light Pink 372 +180 162 158 String 373 +152 139 131 Zinc 374 +127 110 102 Medium Green / Yellow 375 +222 217 213 Vapor 376 +194 191 184 Saturn Gray 377 +149 148 144 GS Gray 378 + 89 89 89 Dark Grey 379 + 52 53 47 Dark Grey 380 +193 199 185 Light Green / Yellow 381 +160 174 159 Willow 382 +138 149 106 Spanish Olive 383 +111 119 70 Lt. Olive 384 + 77 89 13 Palmetto 385 + 64 80 35 Hedge 386 +197 214 162 Flite Green 387 +162 182 129 Palest Green 388 +111 126 71 Lt. Olive 389 + 77 89 13 Palmetto 390 +248 117 148 Pink 801 +241 83 131 Begonia 802 +208 5 69 Strawberry 803 +224 0 71 Cerise 804 +255 197 245 Orchid Pink 805 +255 172 232 Orchid Pink 806 +251 121 219 Wild Pink 807 +242 81 210 Medium Pink 808 +237 50 183 Crimson 809 +217 0 166 Passion 810 +250 151 169 Rose 811 +250 104 125 Dusty Rose 812 +251 45 66 Fluo Pink 813 +250 172 162 Quartz Pink 814 +251 164 154 Flamingo Pink 815 +249 125 115 Shell Pink 816 +249 91 80 Coral 817 +250 58 43 Paprika 818 +237 245 126 Medium Yellow 819 +224 228 17 Yellow 820 +225 215 22 Yellow 821 +255 201 30 Buttercup 822 +255 201 30 Buttercup 823 +254 149 58 Orange 824 +206 251 109 Brilliant Lime 825 +206 250 67 Fluo Yellow / Green 826 +206 251 28 Fluorescent Yellow 827 +123 224 66 Bright Green 828 +123 224 66 Bright Green 829 + 83 184 26 Green / Yellow 830 +225 98 81 Dark Salmon Pink 31 +189 56 39 Dark Rust 32 +210 35 32 Rust 33 +213 45 18 Red 34 +235 39 41 Scarlet 35 +220 25 42 Foxy Red 36 +187 17 43 Red 37 +190 19 55 Medium Red 38 +167 16 57 Atom Red 39 +142 33 65 Perfect Ruby 40 +124 34 43 Burgundy 71 +117 41 53 Wine 72 +214 139 160 Rose Tint 73 +117 38 59 Red Jubilee 74 +142 33 65 Perfect Ruby 75 +122 27 61 Kings Wine 76 +242 207 175 Gray Sand 77 +252 207 148 Impala 78 +252 201 83 Cornsilk 79 +198 149 12 Old Gold 80 +247 237 212 Afterglow 111 +238 234 187 Celery 112 +238 234 187 Celery 113 +239 236 159 PaleYellow 114 +244 238 90 Daffodil 115 +245 231 21 Daffodil 116 +247 224 22 Moonbeam 117 +238 222 109 Yellow Cream 118 +215 167 56 Light Orange 119 +167 130 0 Autumn Green 120 +226 190 156 Gold 151 +200 146 86 Ashley Gold 152 +153 100 8 Orange / Brown 153 +129 91 29 Earthen Tan 154 +107 75 28 Sand Dune 155 +131 61 10 Chocolate 156 +144 91 49 Light Cocoa 157 + 86 63 31 Brown 158 + 79 50 36 Dark Brown 159 + 55 25 15 Dark Brown 160 +176 166 154 String 191 +155 143 129 Light Brown 192 +127 115 101 Medium Green / Yellow 193 +206 203 188 Chrome 194 +182 178 140 Winter Pear 195 +159 156 111 Slate Green 196 +114 104 92 Medium Brown 197 +160 159 111 Slate Green 198 +113 105 86 Medium Brown 199 +221 208 217 Pearl Gray 200 + 1 121 85 Medium Green 231 + 0 129 73 Emerald 232 + 0 110 81 Green Bay 233 +104 181 161 Fountain Green 234 + 77 172 150 Emerald Green 235 + 35 134 106 Medium Green 236 + 1 102 72 Dark Green 237 + 0 76 64 Dark Green 238 + 0 66 54 Evergreen 239 + 1 40 47 Ivy 240 +193 152 208 Purple 271 +132 34 143 Dark Purple 272 +103 15 125 Purple Shadow 273 + 88 1 118 Purple Shadow 274 + 61 25 86 Dark Purple 275 +209 164 203 Light Pink 276 +209 164 203 Light Pink 277 +158 77 170 Medium Purple 278 +131 0 142 Medium Purple 279 +102 0 135 Purple Shadow 280 + 20 31 121 Royal Blue 311 + 0 35 103 Royal Blue 312 + 0 35 103 Royal Blue 313 +194 201 207 Light Purple 314 +185 204 221 Light Blue 315 +158 160 219 Lilac 316 +171 189 229 Pale Blue 317 +121 150 206 Cornflower Blue 318 + 66 107 186 Medium Purple 319 + 0 56 130 Blue 320 + 0 63 78 Deep Windsor 351 + 45 66 119 Navy 352 + 38 86 135 Blue Dusk 353 + 0 46 98 Blue 354 + 0 49 92 Blue 355 + 53 86 139 Imperial Blue 356 + 1 36 76 Blue Ribbon 357 + 0 33 78 Blue Ribbon 358 + 6 37 55 Navy 359 + 0 25 45 Navy Blue 360 + 73 96 26 Palmetto 391 +174 185 177 Heather Grey 392 +149 167 155 Moss 393 +126 151 129 Pale Green 394 +111 130 111 Willow 395 + 94 113 94 Medium Blue / Green 396 +231 227 218 Medium Yellow 397 +250 250 250 White 401 + 0 0 0 Black 402 +231 227 218 Off White 403 diff --git a/inkstitch/palettes/InkStitch MTB - Embroidex.gpl b/inkstitch/palettes/InkStitch MTB - Embroidex.gpl new file mode 100644 index 0000000..378f92f --- /dev/null +++ b/inkstitch/palettes/InkStitch MTB - Embroidex.gpl @@ -0,0 +1,111 @@ +GIMP Palette +Name: Ink/Stitch: MTB - Embroidex +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black P101 +255 255 255 White P102 +255 241 215 Off White P110 +242 251 215 Sand P115 +237 227 184 Lt Beige P120 +198 174 157 Beige P121 +196 187 157 SandStone P122 +183 172 134 Beachcomber P123 +214 194 158 Dusky Goldenrod P125 +191 172 106 Twilight Harvest P126 +120 96 63 Brown P127 +226 197 126 Sienna P130 +185 138 68 Sienna Rose P131 +163 104 20 Sienna Brass P135 +145 87 53 Light Cocoa P140 + 94 52 51 Burnished Eggplant P143 + 72 38 38 Spanish Roast P145 +248 244 211 Pearled Gold P195 +242 236 182 Golden Sand P196 +247 244 201 Pearled bronze P200 +253 236 168 Pale Gold P201 +251 242 89 Buttercup P205 +249 233 38 Bright gold P206 +230 196 77 Goldenrod P207 +226 179 14 Brass P210 +248 194 114 Brass Rose P211 +217 166 3 Dusky Brass P212 +218 99 12 Cayenne P215 +221 121 11 Cinnamon P220 +162 47 3 Orange Glory P221 +190 168 12 Antique Bronze P224 +190 154 12 Antique Gold P225 +158 129 10 Pickled Olive P226 +205 243 167 Cool Mint P300 +168 235 101 California Lime P305 +115 190 12 Vivid Mint P306 +194 218 112 Grey Moss P307 + 96 115 30 Deep Moss P308 + 80 149 38 New Pine P310 + 79 91 26 Lilypad Green P312 + 73 96 26 Palmetto P313 + 50 66 17 Black Pine P314 +196 210 87 Spring Fern P315 +156 139 41 Olive P316 +135 120 35 Parsley P320 + 98 104 26 Golden Pine P325 +225 249 204 Frosted Wintergreen P400 +172 199 116 Pastoral Green P401 + 86 203 128 Deep Wintergreen P405 +108 173 20 Parrot Green P406 + 51 89 9 Christmas Fir P407 +209 250 230 Morning Cyan P408 +131 194 233 Dusky Cyan P409 + 52 139 113 Mountain Lake P410 + 38 111 102 Lake Shadows P411 + 48 129 104 Lake Forest P415 + 22 75 69 Midnight Lake P416 +225 247 244 Winter Morning P420 +208 240 253 Pearled Coneflower P421 +202 213 221 winter Haze P422 +117 120 134 Russina Blue P423 +104 107 119 Charcoal Blue P424 +172 211 223 Summer morning P425 + 48 105 122 Harbor P426 +131 153 186 Cornflower P427 + 92 151 194 Dusky Harbor P428 + 39 65 92 Harbor Twilight P429 + 46 65 114 Royal Blue P430 + 69 81 101 Suskty Navy P431 + 63 60 96 Deep Navy P435 +253 232 236 Frosted Rose P500 +250 190 191 Rose P501 +252 216 216 Pearled Rose P505 +247 155 197 Tea Rose P506 +241 139 221 Vivid Rose P507 +230 159 155 Salmon Rose P510 +177 37 151 Dusty Fuschia P515 +193 13 113 Light Rose P520 +213 0 0 Paprika Red P525 +155 0 0 Cherrywood Red P526 +126 10 65 Dusty Burgundy P530 +111 9 57 Burgandy P531 +188 14 97 Pearld Burgandy P535 + 86 7 65 Syrah P540 +252 228 173 Blonde P600 +254 218 188 Platinum Rose P605 +253 201 166 Dusty Salmon P606 +250 183 150 Pearled Salmon P607 +248 162 120 Salmon P610 +255 128 128 Vivid Salmon P612 +244 187 196 Light Mauve P613 +184 161 169 Light Lilac P695 +141 117 143 Antique Lilac P696 +155 136 139 Silver Lilac P697 +207 154 179 Lilac P700 +150 102 168 Twilight Lilac P701 +125 94 168 Lupine P702 +132 70 122 Deep Violet P703 + 99 60 104 Royal Eggplant P704 + 91 67 124 Twilight Lupine P705 +220 220 219 Platinum P800 +217 232 215 Quartz P801 +198 187 185 Titanium P802 +187 187 187 Blue Titanium P803 +156 156 146 Anitque Platinum P805 +133 133 120 Hematite P810 + 87 80 79 Twilight P815 diff --git a/inkstitch/palettes/InkStitch Madeira Burmilana.gpl b/inkstitch/palettes/InkStitch Madeira Burmilana.gpl new file mode 100644 index 0000000..996c996 --- /dev/null +++ b/inkstitch/palettes/InkStitch Madeira Burmilana.gpl @@ -0,0 +1,125 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Burmilana +Columns: 4 +# RGB Value Color Name Number +239 237 252 Aspen White 3601 +171 121 43 Bullion 3625 + 59 84 103 Sea Bleu Dark 3642 + 44 48 58 Black 3643 +137 171 153 Surf Bleu Light 3645 +175 200 189 Sage Green 3646 + 71 102 94 Green Forest 3652 +190 171 156 Light Brown 3660 +202 199 196 Lunar Rock 3686 +120 191 183 Seafrost 3697 + 25 96 80 Green Petal 3698 + 56 75 64 Mitchell Green 3699 +231 157 179 Medium Pink 3707 +208 116 160 Hot Pink 3709 +202 178 192 Light Pink 3711 +232 201 204 Grape 3715 +162 107 117 Nostalgia Rose 3716 + 72 45 54 Shark 3717 +229 198 150 Winter Wheat 3723 +246 186 89 Mimosa 3724 +152 145 141 GS Gray 3735 +122 106 94 Iron 3736 + 92 84 75 Major Brown 3737 +240 122 118 Dark Peach 3752 +238 162 115 Chamois 3755 +192 115 65 Copper 3756 +140 31 50 Dark Red S 3781 +146 55 91 Brown 3783 + 0 101 95 Imperial Aqua 3785 +159 119 61 Pale Brown 3791 +190 36 42 Red Orange 3800 +176 30 45 Red Berry 3802 +205 86 62 Dark Salmon 3803 +171 54 43 Orange / Red 3804 +123 47 48 Brown 3805 +133 76 53 Rust 3808 + 0 85 139 Fire Blue 3810 + 43 55 82 Dark Navy 3811 + 32 54 51 Spruce 3820 + 20 68 51 Green 3821 + 65 77 56 Mitchell Green 3822 + 0 124 102 Jungle Green 3823 + 0 108 82 Green Bay 3825 + 30 153 79 Emerald Green 3826 + 0 121 63 Green Forest 3827 +175 84 102 Amber Red 3829 + 53 45 45 Best Brown 3830 + 77 59 49 Egyptian Brown 3831 + 98 77 61 Fungi 3832 +118 83 122 Crushed Grape 3833 +123 65 107 Dark Red 3834 + 86 96 100 Bleu Mist Dark 3837 + 67 78 84 Midnight 3838 +161 162 121 Sage Green 3839 +175 133 96 Fawn 3840 +178 149 125 Natural 3841 +209 176 147 Light Tan 3842 +118 77 66 Dark Brown 3843 +171 121 104 Light Brown 3844 +209 191 170 Taupe 3845 + 73 149 181 Medium Teal Blue 3846 + 87 51 51 Dark Sepia 3848 +255 169 61 Gold / Orange 3850 +239 99 34 Hazel 3852 +249 198 63 Yellow 3853 +229 215 117 Canary Yellow 3854 +187 117 43 Toast 3855 +147 146 155 Pale Grey 3858 +236 155 161 Medium Pink 3860 + 69 64 110 Petrol Blue 3861 +127 37 56 Russet 3863 + 97 44 56 Warm Wine 3864 + 0 108 120 Pro Teal 3871 + 0 84 113 Peacock 3872 + 0 113 160 Dark Turquoise Blue 3873 + 98 186 185 Blue Turquoise 3875 + 0 157 167 Dark Blue / Green 3876 +149 133 163 Ocean Bleu 3880 +143 143 141 Griffin 3881 + 48 84 120 Dark Blue / Green 3883 + 88 133 159 Slate Blue 3884 +136 102 79 Wine 3887 +227 197 173 Pale Peach 3888 +143 93 53 Chocolate 3889 +231 223 203 Turtledove 3890 +237 231 228 Oyster 3891 + 41 43 44 Ruby Black 3892 +149 198 153 Hemlock 3893 +118 56 65 Sepia 3897 +129 127 98 Aloe 3898 +209 202 166 Frost Green 3899 +163 52 112 Medium Purple 3900 +102 94 58 Olive Drab 3903 +135 150 134 Weed 3904 +161 153 124 Pale Green / Yellow 3905 + 84 79 56 Dark Green / Grey 3906 +109 166 50 Green / Yellow 3908 +133 169 188 Sky Blue 3909 +147 184 197 Thistle Light 3910 +162 181 198 Pale Blue 3911 +243 203 114 Pale Yellow 3912 + 0 128 156 Blue / Green 3915 + 53 56 49 Dark Grey 3916 +236 184 189 Bisque 3919 +199 177 156 Sea Shell 3923 +126 154 102 Envy 3931 +178 106 155 Medium Purple 3935 + 84 130 77 Dark Green 3940 + 67 115 78 Fairway 3941 +132 142 187 Blue 3942 + 95 97 142 Royal Blue 3943 +156 171 193 Rockport Blue 3944 +102 121 157 Slate Blue 3945 + 56 78 118 Dusty Navy 3946 +227 213 153 Maize Silk 3964 + 68 48 77 Blackberry 3977 +169 148 58 Gold 3980 +203 47 81 Dark Salmon Pink 3989 +141 39 70 Cabernet 3990 + 29 167 149 Tender Teal 3996 + 29 167 148 Tender Teal 3997 diff --git a/inkstitch/palettes/InkStitch Madeira Matt.gpl b/inkstitch/palettes/InkStitch Madeira Matt.gpl new file mode 100644 index 0000000..4797336 --- /dev/null +++ b/inkstitch/palettes/InkStitch Madeira Matt.gpl @@ -0,0 +1,165 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Matt +Columns: 4 +# RGB Value Color Name Number +220 220 230 Aspen White 7611 +200 209 211 Palest Ivory 7613 +250 125 120 Flamingo 7616 +253 119 49 Moonbeam 7621 +251 234 91 Moonbeam 7623 +254 191 84 Moonbeam 7624 +241 184 134 Manila 7625 +207 197 219 Pollen Gold 7627 +191 202 219 Ruby Glint 7628 +183 165 200 Whisper Pink 7630 + 93 13 34 Medium Purple 7635 +204 58 43 Pollen Gold 7639 +118 122 121 Earthen Tan 7640 + 14 20 23 Aqua Pearl 7641 + 13 29 55 Aqua Pearl 7643 +182 221 216 Green Haze 7645 +177 209 159 Bleached Aqua 7647 +183 210 148 Whisper Pink 7648 + 3 108 55 Aqua Pearl 7650 + 1 117 110 Aqua Pearl 7652 +235 221 221 Pink Mist 7653 +167 113 71 Medium Pink 7657 +166 83 56 K. A. Bronze 7658 +238 234 223 Rosewater 7661 +169 148 138 Bullion 7662 +128 115 101 Sterling 7664 +241 234 190 Manila 7666 +147 170 149 Pastel Lilac 7668 +221 193 124 Sunkist 7670 +168 196 205 Pale Gray Green 7674 + 96 50 87 Warm Wine 7680 +211 194 178 Sea Mist 7682 +147 143 133 Thistle 7689 + 4 52 59 Dark Blue 7690 +208 223 228 Dawn Blue 7692 +121 182 176 Pale Blue 7694 + 32 163 188 Aqua Velva 7695 + 3 79 58 Coachman Green 7704 +183 168 76 Whisper Pink 7706 +223 71 149 Sunkist 7710 +193 176 206 Amber Beige 7711 +234 218 221 Bisque 7713 +186 186 197 Old Dark Tex Orange 7718 +240 165 189 Canary 7721 +230 215 175 Daffodil 7723 +226 184 108 Pink 7725 +156 121 112 Light Pink 7729 +182 114 63 Foxy Red 7730 +216 192 206 Cerise 7731 + 90 124 170 Meadow 7733 +240 224 80 Sunshine 7735 + 45 69 59 Black 7739 + 95 105 101 Medium Grey 7741 + 35 12 99 Imperial Blue 7742 +139 95 79 Silvery Gray 7745 +112 188 186 Sky Blue 7746 +131 7 9 Iris 7747 +179 213 136 Platinum 7748 + 99 206 105 Warm Wine 7749 +240 184 168 Flesh Pink 7752 +235 173 146 Blue Blush 7753 +225 59 46 Billowing Sail 7754 +253 173 87 Moonbeam 7755 + 81 138 177 Water Lilly 7760 +215 222 251 Wild Pink 7761 + 48 37 128 Dark Ink 7767 +127 182 100 Sterling 7770 +233 177 98 Flesh Pink 7771 +221 153 65 Sunkist 7773 + 15 117 156 Teal 7775 +226 145 141 Paprika 7777 +240 114 45 Canary 7778 +234 86 80 Natural White 7779 +177 14 60 Bleached Aqua 7781 +233 85 124 Shell Pink 7786 +221 69 130 Sunkist 7787 +140 122 39 Red Bittersweet 7790 +189 125 51 Wildfire 7791 +136 124 64 Seafrost 7793 + 80 80 52 Pale Green 7795 + 0 100 146 Blue 7797 + 4 8 15 Jet Black 7800 +227 222 222 Flamingo 7801 +230 220 210 Daffodil 7803 +197 196 83 Light Pink 7809 +195 187 171 Vapor 7810 +195 190 184 Vapor 7811 +226 203 211 Star Gold 7815 +231 196 203 Peach 7816 +225 203 205 Petal Pink 7818 +224 125 87 Sunkist 7820 +207 44 37 Ivory 7821 +214 207 192 Wild Pink 7822 +236 242 84 PaleYellow 7823 +123 183 194 Green Dust 7827 +135 175 215 Seafrost 7828 +131 81 171 Iris 7832 +210 165 198 Black Eyed Susie 7834 +194 42 53 Lime Cream 7838 + 53 58 61 Black 7841 + 22 59 147 Flag Blue 7842 + 0 36 90 Dark Indigo 7843 + 10 11 13 Black 7844 +150 204 170 Sharp Green 7845 +137 181 105 Banner Gray 7848 + 2 95 70 Frosty Spruce 7851 + 44 130 153 Dark Aqua Green 7852 +246 206 180 Orange 7855 +226 220 194 Star Gold 7860 +231 221 162 Peach 7866 + 10 150 121 Peacock Green 7868 +240 164 89 Canary 7869 +252 208 145 Moonbeam 7870 +160 180 208 Fawn 7871 +182 198 231 Green Haze 7874 +224 206 190 Sunkist 7882 +213 188 167 Buff Orange 7884 +191 149 108 Ruby Glint 7885 +226 223 224 Star Gold 7886 +176 215 211 Bleached Aqua 7892 + 98 184 195 Aquamarine 7893 +190 90 61 Dark Pink 7899 +204 210 184 Seashell 7900 + 16 93 83 Holly Leaf 7902 + 33 86 66 Deep Green 7903 +252 101 103 Moonbeam 7908 +254 150 165 Moonbeam 7909 +236 222 226 Pink Mist 7911 +231 145 159 Daffodil 7917 +221 105 132 Sunkist 7919 +176 177 132 Bleached Aqua 7920 +230 189 205 Crystal Pink 7921 + 88 41 151 Purple 7922 +243 227 42 Lemon 7924 + 55 44 36 Best Brown 7931 + 22 97 167 Sky Blue 7934 +161 146 113 Black Eyed Susie 7936 +253 155 9 Moonbeam 7937 +231 219 197 Peach 7938 +186 165 141 Old Dark Tex Orange 7939 +231 200 198 Peach 7941 +253 146 14 Moonbeam 7946 +232 152 171 Shell Pink 7948 +235 234 232 Pink Mist 7949 +158 226 57 Mint 7950 +250 197 52 Arctic Ice 7951 +240 153 133 Canary 7952 +196 211 224 Vapor 7953 +102 70 57 DK Chestnut 7957 + 11 59 93 Dark Blue 7962 +250 148 59 Arctic Ice 7965 +156 165 133 Light Pink 7969 + 49 106 51 Dark Green 7970 +249 212 67 Flamingo 7971 + 2 30 84 Navy Blue 7976 + 25 144 186 Blue Horizon 7977 +243 211 38 Manila 7980 +173 28 45 Illusion Blue 7982 +232 110 152 Shell Pink 7984 +197 35 33 Vapor 7986 + 11 195 96 Nile 7988 diff --git a/inkstitch/palettes/InkStitch Madeira Polyneon.gpl b/inkstitch/palettes/InkStitch Madeira Polyneon.gpl new file mode 100644 index 0000000..065330e --- /dev/null +++ b/inkstitch/palettes/InkStitch Madeira Polyneon.gpl @@ -0,0 +1,353 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Polyneon +Columns: 4 +# RGB Value Color Name Number +183 195 197 Celestial Blue 1610 +158 169 177 Highrise 1611 +151 166 180 Blue Fog 1612 +147 158 158 Platinum 1613 + 99 103 103 Medium Grey 1614 +112 118 118 Metal 1615 +225 114 116 Shell Pink 1616 + 90 86 96 Gray Ridge 1617 +113 115 126 Silver Rose 1618 + 99 101 108 Gray Ridge 1619 +252 140 151 Azalea 1620 +196 86 45 Old Dark Tex Orange 1621 +238 223 188 Tusk 1622 +245 225 84 Copper 1623 +244 167 49 Gold 1624 +195 127 41 Copper 1625 +248 197 120 Sunset Gold 1626 +121 117 139 Purple Ash 1627 +126 168 192 Pale Purple 1628 +194 199 218 Paris Blue 1629 +148 145 186 Violet Tulip 1630 +141 103 157 Laurie Lilac 1631 + 64 53 79 Fleet Blue 1632 + 93 42 101 Dark Purple 1633 + 64 52 90 Purple Accent 1634 +108 47 65 Dark Maroon 1635 +188 33 48 Warm Red 1637 +133 45 50 Cherry Jubilee 1638 +173 62 65 Red Berry 1639 + 94 97 98 Twilight 1640 + 53 57 61 Black 1641 + 41 90 148 Blue 1642 + 45 53 65 Navy 1643 +119 199 187 Seafrost 1645 +136 186 156 Cameo Green 1647 +137 155 99 Sage Green 1648 +116 149 43 Meadow 1649 + 54 121 54 Medium Green 1650 + 0 132 69 Kelly 1651 + 59 121 122 Deep Atlantic 1652 +240 188 169 Peach 1653 +102 79 76 Twilight Mauve 1654 +191 154 136 Light Red / Orange 1656 +135 91 67 Light Cocoa 1657 +121 70 57 Brown 1658 + 82 56 52 Dark Oak 1659 +177 164 160 Light Brown 1660 +241 235 202 Celery 1661 +139 132 118 Atmosphere 1662 +110 99 85 Cinder 1663 + 97 93 86 Black Chrome 1664 + 73 73 67 Charcoal Gray 1665 +244 229 179 Wheat 1666 +100 118 106 Water Lilly 1668 + 65 76 66 Dark Army Green 1669 +213 167 104 Old Gold 1670 + 91 133 162 Slate Blue 1671 +167 121 62 Shimmering Gold 1672 +173 142 94 Beige 1673 +141 188 220 Angel Falls 1674 +122 174 213 Caribbean Blue 1675 + 46 75 134 Royal 1676 + 0 77 81 Deep Windsor 1677 +237 85 46 Fluorescent Orange 1678 + 92 60 91 Port Wine 1680 +189 55 85 Atom Red 1681 +205 191 172 Taupe 1682 +255 197 86 Buttercup 1683 +190 162 115 Warm Sand 1684 + 0 134 129 J. Turquoise 1685 +210 211 210 Gray Lilac 1686 +189 197 195 Vapor 1687 +108 110 108 Gull 1689 + 23 76 75 Dark Blue 1690 +158 199 195 Pale Blue 1692 + 0 160 174 Marine Aqua 1694 + 0 137 163 Dark Blue 1695 + 72 159 48 Absinthe Green 1701 +104 186 132 Meadow 1702 + 10 93 66 Dark Green 1703 + 26 74 63 Evergreen 1704 + 55 61 50 Dark Army 1705 +148 137 73 Cypress 1706 +197 74 91 Dusky Rose 1707 +206 56 147 Passion 1709 +150 48 113 Dark Red 1710 +161 140 177 Wisteria 1711 +170 122 166 Smoky Grape 1712 +244 203 205 Petal Pink 1713 +145 155 162 Highrise 1718 +110 62 101 Plum Wine 1719 +108 56 91 Dark Purple 1720 +235 100 146 Begonia 1721 + 67 55 123 Purple Maze 1722 +246 209 168 Impala 1723 +222 173 57 Pollen Gold 1724 +202 140 63 Old Gold 1725 +181 128 90 Sirocco 1726 +237 212 117 Mimosa 1727 +152 128 106 Fawn 1728 +150 123 108 Fawn 1729 +125 92 57 Sand Dune 1730 +158 125 146 Very Grape 1731 + 59 123 176 Violet 1733 +228 53 70 Desert Rose 1734 +242 210 98 Lemon 1735 +145 133 122 Medium Green / Yellow 1736 +197 183 156 Pistachio 1738 + 78 74 74 Dark Grey 1739 +123 120 125 Silver Rose 1740 +116 117 115 Gull 1741 + 34 61 92 Blue Ribbon 1742 + 47 55 92 Light Navy 1743 +104 87 76 Egyptian Brown 1744 +118 93 83 Fungi 1745 + 40 163 157 Nile Blue 1746 +164 30 53 Very Red 1747 +169 221 118 Spruce 1748 + 55 163 70 Medium Green 1749 + 0 113 74 Dark Green 1750 + 0 124 73 Vibrant Green 1751 +248 172 136 Coral Reef 1752 +184 107 69 Date 1753 +216 58 74 Spanish Red 1754 +247 143 71 Marigold 1755 + 91 90 47 Green 1756 + 99 82 47 Dark Green / Yellow 1757 +110 74 53 Dark Brown 1758 +150 125 57 Foliage Green 1759 + 74 112 127 Medium Green / Blue 1760 +136 166 180 Stone Blue 1761 + 19 83 104 Deep Windsor 1762 +221 123 42 Karat 1763 + 44 72 93 Blue Ribbon 1764 +237 112 31 Pumpkin 1765 + 53 59 26 Violet Blue 1766 + 38 61 118 Royal 1767 +169 184 130 Celadon Green 1768 + 92 119 44 Pale Green 1769 + 70 113 62 Green 1770 +224 162 66 Gold 1771 +216 150 37 Old Gold 1772 +176 102 50 Almond 1773 + 63 123 157 Lake Blue 1775 + 28 78 104 Blue 1776 +239 135 126 Coral 1777 +231 95 62 Orange 1778 +226 62 40 Honeysuckle 1779 + 0 104 82 Green Forest 1780 +153 30 58 Burgundy 1781 +133 52 72 Red Jubilee 1782 +133 44 88 Red Licorice 1783 +117 44 58 Wine 1784 +104 43 68 Grape Shake 1785 +176 46 84 Candy Apple Red 1786 +181 50 108 Cherrystone 1787 +119 50 105 Dark Purple 1788 +100 62 88 Medium Purple 1789 +126 111 49 Palmetto 1790 +175 121 64 Earthen Tan 1791 +178 136 54 Autumn Green 1792 +117 96 47 Sand Dune 1793 + 86 77 48 Dark Olive Green 1794 + 73 71 53 D. H. Green 1795 + 95 87 47 Khaki 1796 + 0 105 155 Solar Blue 1797 + 63 64 52 Charcoal Gray 1798 + 0 176 158 M. D. Green 1799 + 47 48 50 Black 1800 +228 232 255 Barely Blue 1801 +236 237 255 Aspen White 1802 +237 236 223 Lily White 1803 +236 236 230 Blanc de Blanc 1804 +221 225 255 Lilac Hint 1805 +182 161 85 Hemp 1809 +173 176 174 Pale Grey 1810 +169 176 177 Traditional Gray 1811 +169 170 164 Vapor Blue 1812 +252 190 210 Pink 1815 +253 175 192 Dusty Rose 1816 +246 166 150 Flamingo 1817 +228 189 185 Crystal Pink 1818 +251 159 157 Shell Pink 1819 +245 148 130 Flamingo 1820 +164 59 52 Red Bittersweet 1821 +226 220 197 Seashell 1822 +249 255 0 Yellow 1823 +255 221 0 Canary 1824 +249 178 0 Gold 1825 +255 198 124 Honey 1826 + 85 185 214 Medium Blue 1827 + 65 139 174 Pale Purple 1828 + 0 102 160 Fire Blue 1829 +101 134 188 Jay Blue 1830 +154 100 156 Medium Purple 1831 +106 85 149 Purple Shadow 1832 +119 45 115 Dark Purple 1833 +150 122 162 Iris 1834 +134 49 73 Perfect Ruby 1835 + 76 55 56 Brown Stone 1836 +255 62 38 Fluo Pink 1837 +180 34 50 Foxy Red 1838 +173 29 49 Lipstick 1839 +116 125 135 Wild Dove 1840 + 79 86 92 Midnight 1841 + 0 85 149 Fire Blue 1842 + 15 70 120 Royal Blue 1843 + 49 51 62 Smokey 1844 +109 195 159 Neptune Green 1845 + 0 146 144 J. Turquoise 1846 + 66 171 146 Isle Green 1847 +117 159 86 Meadow 1848 + 33 123 104 Green Bay 1849 + 92 202 75 Green 1850 + 0 94 56 Fleece Green 1851 + 50 124 146 Faded Denim 1852 +239 188 154 Bamboo 1853 +156 132 128 Twilight Mauve 1854 +179 147 113 Wicker 1855 +159 85 57 Chocolate 1856 +137 82 53 Mushroom 1857 +101 55 48 Mink Brown 1858 + 75 63 62 Brown Mule 1859 +176 166 151 String 1860 +240 203 123 Cornsilk 1861 +148 143 131 Vertiver Green 1862 +219 210 177 Cocoa Mulch 1863 +240 221 145 Pale Yellow 1866 +228 255 130 Applegreen 1867 + 0 147 109 Jungle Green 1868 +221 136 58 Golden Earth 1869 +235 166 109 Chamois 1870 +120 172 200 Sky Blue 1871 + 99 81 66 Antler 1872 +144 179 216 Baby Blue 1874 +200 47 43 Saffron 1878 + 0 120 101 Green Forest 1879 +120 63 132 Dark Purple 1880 +249 197 173 Tawny 1882 +255 249 0 Canary 1883 +197 169 141 Rattan 1884 +160 126 97 Tawny Birch 1885 +191 185 186 Stainless Steel 1886 + 70 47 57 Shark 1887 + 0 161 163 Marine Blue 1888 + 0 124 128 Mallard Blue 1890 + 0 85 97 Deep Windsor 1891 +120 200 204 Turquoise 1892 + 46 173 201 Surf Blue 1893 + 0 148 170 Dark Aqua Green 1895 + 0 112 136 Dark Blue 1896 +157 75 56 Desert Sand 1898 +135 59 49 Red Bittersweet 1899 +154 186 155 Nile 1900 + 96 171 39 Emerald 1901 + 45 74 56 Mitchell Green 1902 + 58 89 78 Evergreen 1903 + 71 91 74 Chinois Green 1904 + 59 74 55 Mitchell Green 1905 +106 86 63 Dark Olive Green 1906 +255 61 103 Fluorescent Red 1907 +255 67 104 Dark Fluo Pink 1908 +255 103 144 Dark Pink 1909 +214 36 94 Strawberry 1910 +203 173 207 Light Pink 1911 +253 175 183 Emily Pink 1915 +203 115 135 Rapture Rose 1917 +138 139 142 Limestone 1918 +160 85 102 Maroon 1919 +206 196 137 Cocoon 1920 +243 147 184 Wild Pink 1921 + 77 50 117 Purple Accent 1922 +255 187 84 Merit Gold 1923 +251 212 0 Moonbeam 1924 +255 216 43 Merit Gold 1925 +174 132 108 Tawny Birch 1926 +220 177 146 Gold 1927 +141 119 101 Moon Rock 1928 +105 91 83 Best Brown 1929 + 74 81 145 Violet Blue 1930 + 64 58 60 Dark Grey 1931 +124 197 220 Pale Blue 1932 +121 128 175 Light Purple 1933 + 0 93 153 Light Blue / Green 1934 +232 255 0 Lemon 1935 +125 111 98 Dark Grey 1936 +255 171 0 Orange 1937 +185 169 153 Mushroom 1938 +160 138 96 Nouget 1939 +204 203 76 Fluo Orange 1940 +188 139 143 Light Pink 1941 +143 86 83 Brown 1942 + 91 112 172 Violet 1943 + 46 60 74 Blue Ribbon 1944 +114 79 70 Brown 1945 +255 97 21 Neon Orange 1946 +255 73 67 Red 1947 +253 139 165 Azalea 1948 +240 231 212 Moonbeam 1949 +118 214 56 Green 1950 +246 153 42 Honeydew 1951 +251 123 98 Coral 1952 +162 196 220 Sky Blue 1953 +255 73 81 Bitteroot 1954 +243 139 28 Honeydew 1955 +139 128 85 Olive Green 1956 + 74 64 50 Best Brown 1957 +112 73 74 Coffee Bean 1958 +167 137 21 Shimmering Gold 1959 +115 140 158 Country Blue 1960 + 79 109 131 Tempest 1961 + 37 69 83 Dark Blue 1962 + 75 87 109 Purple Sage 1963 + 72 91 114 Ash 1964 +249 103 34 Orange 1965 + 41 52 81 Light Navy 1966 + 35 57 87 Light Navy 1967 +107 150 89 Fair Green 1968 +108 108 88 Hedge 1969 + 52 92 62 Evergreen 1970 +249 179 36 Manila 1971 +255 187 0 Merit Gold 1972 +147 93 52 Chocolate 1973 +138 63 64 Burgundy 1974 + 40 85 120 Blue 1975 + 44 54 70 Cadet 1976 + 0 129 175 Dark Turquoise Blue 1977 +255 132 66 Orange 1978 + 0 95 67 Frosty Spruce 1979 +251 193 26 Manila 1980 +135 42 57 Wine 1981 +127 37 49 Burgundy 1982 + 78 52 67 Plum 1983 +181 41 98 Ruby Glint 1984 + 0 91 79 Green 1985 +171 34 69 Candy Apple Red 1986 +228 60 34 Fluorescent Orange 1987 + 0 140 67 Kelly 1988 + 0 154 103 Irish Green 1989 +216 95 149 Ruby Glint 1990 + 0 115 121 Blue / Green 1991 + 0 95 118 Peacock 1992 +215 49 92 Cerise 1993 +235 77 112 Bashful Pink 1994 +255 255 0 Bright yellow 1995 + 42 66 64 Green Sail 1996 + 59 48 61 Black 1997 +126 96 100 Elderberry 1998 +102 49 49 Dark Brown 1999 diff --git a/inkstitch/palettes/InkStitch Madeira Rayon.gpl b/inkstitch/palettes/InkStitch Madeira Rayon.gpl new file mode 100644 index 0000000..8f85b62 --- /dev/null +++ b/inkstitch/palettes/InkStitch Madeira Rayon.gpl @@ -0,0 +1,361 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Rayon +Columns: 4 +# RGB Value Color Name Number + 40 41 42 Black 1000 +227 229 251 Bright White 1001 +231 231 244 Bright White 1002 +233 231 231 Natural White 1003 +234 232 238 Blue Blush 1004 +224 228 255 Billowing Sail 1005 + 41 40 42 Diamond Black 1006 + 42 40 41 Black 1007 + 40 42 44 Ruby Black 1008 + 43 43 48 Sapphire Black 1009 +194 196 191 Vapor 1010 +169 175 178 Traditional Gray 1011 +163 175 179 Pastel Blue 1012 +238 209 202 Rosewater 1013 +238 178 188 Orchid Pink 1014 +233 179 177 Desert Bloom 1015 +234 149 149 Emily Pink 1016 +244 188 172 Peach 1017 +240 180 168 Flesh Pink 1018 +233 172 165 Flesh Pink 1019 +247 136 125 Flamingo 1020 +186 82 47 Old Dark Tex Orange 1021 +234 227 185 Medium Yellow 1022 +243 218 104 Lemon 1023 +255 166 23 Buttercup 1024 +205 129 38 Pollen Gold 1025 +244 188 139 Glow 1026 +154 186 202 Cadet Blue 1027 + 90 137 170 Caribbean Blue 1028 + 46 137 189 Dolphin Blue 1029 +148 169 194 Lake Blue 1030 +199 161 191 Carnatio 1031 +129 108 157 Iris 1032 +110 73 129 Mulberry 1033 +153 66 98 Burgundy 1034 + 99 47 61 Warm Wine 1035 + 89 48 50 Dark Sepia 1036 +190 20 34 Tuxedo Red 1037 +140 47 51 Red Bittersweet 1038 +161 40 49 Red Berry 1039 +138 134 137 Silvery Gray 1040 +110 116 123 Metal 1041 + 33 79 119 Imperial Blue 1042 + 44 52 69 Black 1043 + 46 49 62 Navy 1044 +134 204 191 Seafrost 1045 + 79 172 152 Pale Green 1046 +158 189 162 Mint 1047 +123 149 83 Green Dust 1048 +111 160 77 Spruce 1049 + 69 150 69 Emerald 1050 + 0 135 69 Kelly 1051 + 57 116 116 Imperial Aqua 1052 +231 183 165 Peach 1053 +172 131 122 Tawny Birch 1054 +212 177 143 Cream 1055 +158 105 71 Wicker 1056 +160 113 85 Fawn 1057 +113 70 59 Mushroom 1058 + 66 55 52 Egyptian Brown 1059 +179 166 151 Platinum 1060 +244 218 171 Wheat 1061 +141 134 122 Pale Grey 1062 +124 118 105 Medium Green / Yellow 1063 +255 199 29 Daffodil 1064 +229 120 33 Mango 1065 +245 214 161 Pale Yellow 1066 +240 221 166 Sunshine 1067 +255 188 22 Canary 1068 +255 177 4 Manila 1069 +210 169 112 Yellow Gold 1070 +233 229 220 Natural White 1071 +220 210 189 Aspen White 1072 +204 219 207 Billowing Sail 1073 +149 181 207 Ice Blue 1074 +132 168 200 Baby Blue 1075 + 0 87 150 Blue 1076 +226 67 61 Paprika 1077 +237 83 42 Paprika 1078 + 0 135 79 Kelly 1079 +166 125 169 Medium Pink 1080 +186 48 81 Wildfire 1081 +205 186 166 Ivory 1082 +250 206 90 Moonbeam 1083 +210 185 157 Sea Mist 1084 +184 181 175 White Sand 1085 +199 201 198 Palest Ivory 1086 +188 188 184 Pearl Gray 1087 + 97 169 172 Aquamarine 1088 +108 169 178 Basic Turquoise 1089 + 20 133 137 M. D. Green 1090 + 0 112 128 Dark Aqua Green 1091 +147 194 209 Cadet Blue 1092 + 27 187 201 Indian Ocean Blue 1093 + 0 179 201 Periwinkle 1094 + 0 169 194 Aquamarine 1095 + 0 125 155 Pretty Blue 1096 +175 210 192 Bleached Aqua 1097 + 88 135 115 Blue Surf 1098 +186 193 159 Pastel Green 1099 +190 209 178 Pastel Green 1100 + 72 143 82 Emerald 1101 +182 175 124 Green Haze 1102 + 52 77 59 Holly 1103 +193 197 150 Lime Cream 1104 +171 163 126 Silver Fern 1105 +151 140 84 Crescent Moon 1106 +232 98 118 Shell Pink 1107 +233 139 163 Dusty Rose 1108 +207 77 136 Ruby Glint 1109 +191 47 110 Ruby Glint 1110 +197 173 197 Light Pink 1111 + 83 70 128 Purple Accent 1112 +235 197 192 Pink Mist 1113 +234 186 186 Bisque 1114 +239 187 193 Crystal Pink 1115 +235 173 191 Orchid Pink 1116 +212 98 142 Begonia 1117 +137 145 147 Banner Gray 1118 +156 79 100 K. A. Bronze 1119 +230 186 201 Crystal Pink 1120 +226 175 197 Pink 1121 + 78 53 104 Purple Shadow 1122 +237 224 191 Tusk 1123 +250 199 75 Star Gold 1124 +241 177 60 Manila 1125 +174 125 90 Light Bronze 1126 +220 186 165 Alesan 1127 +162 144 130 Taupe 1128 + 72 57 51 Egyptian Brown 1129 + 73 57 55 Espresso 1130 + 59 52 49 Dark Grey 1131 +136 187 207 Pale Blue 1132 + 39 126 183 Dolphin Blue 1133 + 0 85 146 Fire Blue 1134 +245 215 119 Lemon 1135 +139 121 108 String 1136 +244 140 13 Merit Gold 1137 +204 186 164 Seashell 1138 +128 128 51 Tamarack 1140 +156 113 120 Light Pink 1141 +183 155 143 Whisper Pink 1142 + 75 107 153 Jay Blue 1143 +132 106 87 Light Cocoa 1144 + 94 62 53 Brown 1145 +212 39 39 Saffron 1146 +182 15 47 Foxy Red 1147 +220 139 154 Medium Pink 1148 +220 199 179 Ecru 1149 +219 224 140 Pebblestone 1150 +187 197 206 Cadmium Orange 1151 +250 137 114 Arctic Ice 1152 +172 191 203 Illusion Blue 1153 +216 70 96 Cerise 1154 +245 158 101 Chamois 1155 +120 115 70 Medium Green / Yellow 1156 +119 107 76 Desert Cactus 1157 +121 67 55 Mushroom 1158 +210 161 66 Black Eyed Susie 1159 + 76 114 131 Wonder Blue 1160 + 45 72 81 Deep Windsor 1161 + 31 63 74 Deep Windsor 1162 +128 151 158 Blue Gray 1163 + 83 90 99 Gull 1164 + 30 68 130 Royal 1166 + 35 72 119 Blue Suede 1167 +150 168 78 Sharp Green 1168 +141 153 73 Medium Green 1169 + 90 110 41 Meadow 1170 +240 175 69 Star Gold 1171 +231 152 45 Buttercup 1172 +194 121 63 Almond 1173 +132 58 55 Burgundy 1174 + 59 104 141 Slate Blue 1175 + 0 129 182 Baltic Blue 1176 + 0 109 167 Ocean Blue 1177 +246 105 67 Orange 1178 +201 82 75 Dark Rust 1179 +230 196 74 Daffodil 1180 +137 37 51 Red Berry 1181 +120 43 60 Burgundy 1182 +141 49 82 Cranberry 1183 +189 29 68 Wildfire 1184 + 0 98 94 Imperial Aqua 1185 +169 0 66 Red 1186 +183 24 85 Dark Pink 1187 +122 59 109 Dark Red 1188 + 63 84 53 Holly 1189 +149 127 61 Medium Yellow / Green 1190 +146 112 56 Autumn Green 1191 +169 121 42 Bullion 1192 +180 159 85 Hemp 1193 +113 92 45 Desert Cactus 1194 +143 195 180 Pale Green 1195 +161 130 42 Black Eyed Susie 1196 +181 198 214 Cadet Blue 1198 + 42 46 54 Black 1199 +163 175 179 Pale Silver 1212 +239 178 150 Opaline 1217 +173 114 107 Mahogany Rose 1218 +163 188 184 Sprite 1219 +225 117 120 Pink Icing 1220 +170 65 52 Dark Rust 1221 +233 222 186 Celery 1222 +239 200 44 Canary 1223 +226 188 81 Star Gold 1224 +201 141 71 Pollen Gold 1225 +213 141 100 Buff Orange 1226 +121 156 151 Pale Blue 1227 +109 98 88 Vertiver Green 1228 + 93 81 71 Dark Grey 1229 + 97 78 63 Fungi 1230 +167 153 187 Violet 1232 + 78 69 100 Blackberry 1233 +190 55 99 Dark Pink 1234 +154 104 142 Rose Dust 1235 + 78 42 54 Plum 1236 +129 40 51 Dark Orange / Red 1238 + 87 82 81 Twilight 1239 +114 105 103 Charcoal 1240 + 59 63 69 Black 1241 + 35 61 91 Blue Ink 1242 + 51 60 83 Light Navy 1243 + 45 48 56 Black 1244 + 43 159 132 Seafoam 1245 + 0 139 135 M. D. Green 1246 + 0 147 109 Peppermint 1247 +154 206 105 Sharp Green 1248 + 14 161 70 Harvest Green 1249 + 0 112 71 Dark Green 1250 + 0 145 76 Vibrant Green 1251 + 55 91 99 Deep Atlantic 1252 +205 122 78 Toast 1253 +227 141 129 Flamingo 1254 +193 149 108 Gold 1255 +175 127 86 Sirocco 1256 +156 86 47 Orange / Brown 1257 +126 72 51 Light Cocoa 1258 +119 88 84 Dark Brown 1259 +192 176 133 Wheat 1260 +147 157 195 Pastel Lilac 1261 +126 120 151 Sterling 1263 +147 140 158 Thistle 1264 + 43 83 146 Jamie Blue 1266 +236 226 171 PaleYellow 1267 +228 186 130 Glow 1270 +219 162 114 Impala 1272 +167 140 97 Candied Ginger 1273 +112 168 198 Sky Blue 1274 +121 145 183 Cosmic Sky 1275 + 64 116 151 Pale Purple 1276 + 39 60 82 Blue 1277 +255 102 22 Pumpkin 1278 + 0 129 115 Peppermint 1279 + 0 119 99 Jade 1280 +159 35 63 Atom Red 1281 +106 198 163 Pale Aqua 1282 + 0 98 83 Green Forest 1284 +207 205 202 Dawn Blue 1286 +107 104 105 Metal 1287 +122 121 118 Moon Mist 1288 + 70 152 165 Capri 1289 + 21 75 75 Blue Spruce 1290 + 0 100 115 Mallard Blue 1291 +142 196 195 Light Blue 1292 + 0 109 112 M. D. Green 1293 + 0 129 155 Blue / Green 1294 + 0 140 172 Dark Blue / Green 1295 + 0 95 126 Peacock 1296 + 0 113 163 Baltic Blue 1297 + 0 134 122 Brite Jade 1298 + 0 185 172 Aqua Pearl 1299 + 56 168 125 Bluestone 1301 +122 206 150 Pale Aqua 1302 + 54 64 51 Dark Army Green 1303 + 14 78 63 Dark Green 1304 +193 181 151 Light Green / Yellow 1305 +123 121 102 Arcadian Green 1306 +218 71 81 Scarlet 1307 +107 109 89 Medium Green / Yellow 1308 +214 99 153 Wild Pink 1309 +149 60 115 Hot Peony 1310 +142 139 184 Pale Purple 1311 + 88 73 111 Purple Accent 1312 + 68 53 85 Purple Accent 1313 +228 156 167 Pink Mist 1315 +233 160 155 Emily Pink 1317 + 66 64 71 Dark Grey 1318 +162 102 137 Hot Pink 1319 + 90 64 92 Medium Purple 1320 +225 146 184 Petal Pink 1321 + 65 63 121 Dark Purple / Navy 1322 +205 175 76 Yellow 1323 +152 125 110 Shadow Gray 1328 +124 96 84 Dark Olive Green 1329 + 81 94 151 Violet 1330 + 97 50 103 Mulberry 1334 + 69 101 162 Violet 1335 +110 88 81 Dark Brown 1336 +153 154 135 Pussywillow Gray 1337 +171 143 106 Olive Drab 1338 +167 165 149 Pale Gray Green 1339 +141 132 48 Crescent Moon 1340 +164 100 98 K. A. Bronze 1341 +193 153 136 Amber Beige 1342 + 53 56 98 Blue Ink 1343 +143 113 84 Beige 1344 +118 91 52 Earthen Tan 1347 +121 93 60 Earthen Tan 1348 +237 206 136 Pale Yellow 1349 +181 163 72 Green / Gold 1350 + 20 90 74 Green Bay 1351 +184 139 48 Black Eyed Susie 1352 + 79 107 128 Slate Blue 1353 +204 75 109 Cerise 1354 +181 153 161 Rose Beige 1356 + 72 70 52 Green 1357 +119 77 77 Dark Brown 1358 +207 152 45 Pollen Gold 1359 +118 145 161 Country Blue 1360 + 94 96 94 Medium Grey 1361 + 81 76 94 Light Midnight 1362 +121 129 145 Purple Cloud 1363 + 71 89 110 Lake Blue 1364 + 64 73 95 Light Midnight 1365 + 44 53 107 Violet Blue 1366 + 45 47 55 Navy 1367 + 42 55 74 Blue Ribbon 1368 + 58 121 62 Kelly 1369 + 35 79 59 Evergreen 1370 + 32 84 78 Green 1371 +240 166 83 Scholastic 1372 + 89 154 181 Ozone 1373 + 96 44 49 Warm Wine 1374 + 60 125 158 Pale Purple 1375 + 35 77 103 Salem Blue 1376 +113 172 107 Neon Green 1377 +221 56 35 Sunkist 1378 +225 84 69 Coral 1379 + 0 153 134 Bluestone 1380 +140 40 66 Cabernet 1381 +101 61 71 Dark Maroon 1382 +156 31 84 Cherrystone 1383 +110 43 56 Wine 1384 + 97 37 51 Wine 1385 + 77 48 61 Plum 1386 +116 103 126 Light Grape 1387 + 92 53 81 Medium Purple 1388 +115 46 74 Brushed Burgundy 1389 + 44 69 61 Dark Green 1390 + 78 107 97 Green Forest 1391 +106 122 106 Harbor Green 1392 + 65 65 55 Hedge 1393 + 80 84 67 Green / Yellow 1394 + 61 73 63 Mitchell Green 1395 + 81 97 80 Water Lilly 1396 + 33 69 59 Evergreen 1397 diff --git a/inkstitch/palettes/InkStitch Marathon Polyester.gpl b/inkstitch/palettes/InkStitch Marathon Polyester.gpl new file mode 100644 index 0000000..4bae92d --- /dev/null +++ b/inkstitch/palettes/InkStitch Marathon Polyester.gpl @@ -0,0 +1,305 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Polyester +Columns: 4 +# RGB Value Color Name Number +250 230 16 Daffodil 2005 +254 119 88 Persimmon 2007 +239 29 120 Cherry Blossom 2010 +127 187 0 Green Dust 2015 +241 235 135 Pale Yellow 2016 +238 231 93 Light Yellow 2017 +249 231 21 Daffodil 2018 +249 223 22 Moonbeam 2019 +250 215 22 Canary 2020 +254 200 31 Buttercup 2021 +235 177 16 Gold 2022 +240 179 47 Yellow Poppy 2023 +254 183 120 Buff Orange 2024 +192 146 12 Old Gold 2025 +221 205 106 Pale Yellow 2026 +182 172 89 Pale Green / Yellow 2027 +153 144 8 Sun Shadow 2028 +204 122 2 Almond 2029 +175 117 6 Copper 2030 +243 209 190 Grape 2031 +181 145 125 Roebuck 2032 +244 191 210 Memphis Belle 2033 +242 176 194 Carnatio 2034 +250 176 174 Emily Pink 2035 +251 133 142 Azalea 2036 +220 129 140 Medium Pink 2037 +229 77 125 Azalea 2039 +189 55 121 Dark Pink 2040 +226 41 130 Ruby Glint 2041 +208 0 87 Dark Pink 2042 +225 7 71 Cerise 2043 +207 19 38 Foxy Red 2044 +192 11 49 Very Red 2045 +240 182 160 Blossom 2046 +251 144 110 Melon 2047 +252 136 69 Golden Poppy 2048 +232 117 19 Golden Poppy 2049 +228 141 6 Dark Yellow 2050 +223 89 0 Orange 2051 +222 79 4 Orange 2052 +250 64 37 Paprika 2053 +168 12 54 Atom Red 2054 +140 37 50 Burgundy 2055 +144 36 68 Perfect Ruby 2056 +126 31 63 Maroon 2057 +112 25 61 Red Licorice 2058 +155 0 111 Medium Purple 2059 +133 34 108 Grape Wine 2060 +118 179 223 Ultra Blue 2062 +165 187 224 Cristy Blue 2063 +167 176 213 Light Purple 2064 +118 170 220 Caribbean Blue 2065 + 58 117 196 Dolphin Blue 2066 + 0 85 160 Solar Blue 2067 + 47 52 142 Blue 2068 + 0 56 147 Fire Blue 2069 + 0 51 127 Blue Suede 2070 + 37 85 126 Lake Blue 2071 + 15 44 92 Blue Ribbon 2072 + 14 29 71 Light Navy 2073 + 0 69 89 Deep Windsor 2075 +225 206 224 Rose Pink 2076 +207 162 212 Light Pink 2078 +158 146 199 Violet Tulip 2079 +138 119 185 Mauve 2080 +170 116 192 Iris 2081 +142 72 173 Laurie Lilac 2082 + 79 34 113 Purple Accent 2083 + 90 19 142 Dark Purple 2084 + 70 36 90 Purple Accent 2085 + 57 26 122 Purple Maze 2086 + 30 29 120 Royal 2088 +152 215 223 Blue Frost 2090 +113 207 227 Basic Turquoise 2091 + 42 197 218 Periwinkle 2092 + 0 152 180 Dark Blue / Green 2093 + 0 113 159 Dark Turquoise Blue 2095 + 0 115 116 M. D. Green 2097 +196 207 190 Almost Aqua 2098 +187 218 11 Dark Green 2100 +170 221 110 Spruce 2101 + 0 124 88 Irish Green 2103 + 0 152 135 Peppermint 2104 + 0 106 83 Green Bay 2105 + 0 109 102 Imperial Aqua 2106 + 0 126 103 Jungle Green 2108 + 0 106 91 Green Forest 2109 + 59 119 42 Green 2110 + 87 99 20 Palmetto 2111 + 74 70 19 Khaki 2113 + 35 70 54 Mitchell Green 2114 +233 226 215 Palest Ivory 2115 +229 198 171 Pale Peach 2120 +216 180 150 Amber Beige 2121 +227 191 155 Gold 2123 +254 213 145 Impala 2126 +179 131 96 Fawn 2127 + 92 71 36 Dark Olive Green 2130 +117 85 38 Light Cocoa 2131 +177 39 38 Red Berry 2132 +126 45 36 Burgundy 2133 +100 56 38 Dark Brown 2135 +213 216 212 Blue Blush 2137 +220 211 211 Pearl Gray 2138 +174 175 171 Traditional Gray 2139 +146 150 148 Banner Gray 2140 + 43 44 42 Dark Grey 2150 +139 215 0 Erin Green 2151 +255 82 52 Neon Orange 2152 +255 57 66 Fluo Pink 2153 +244 237 177 Tender Yellow 2154 +246 237 72 Lemon 2155 +253 180 21 Merit Gold 2156 +252 164 18 Mango 2157 +248 231 171 Tusk 2158 +241 191 74 Penny 2159 +251 186 131 Apricot Wash 2160 +180 140 11 Shimmering Gold 2162 +242 214 217 Light Pink 2163 +252 191 201 Pink 2164 +236 123 159 Floral Pink 2166 +236 41 148 Ruby Glint 2167 +212 4 72 Strawberry 2168 +174 1 92 Ruby Glint 2169 +251 224 225 Ivory 2170 +248 210 205 Crystal Pink 2171 +243 209 201 Crystal Pink 2172 +249 200 172 Peach 2173 +241 197 176 Bisque 2174 +222 117 0 Marigold 2175 +226 62 40 Honeysuckle 2176 +244 201 201 Crystal Pink 2177 +251 191 195 Orchid Pink 2178 +241 104 119 Dusty Rose 2179 +161 48 50 Terra Cotta 2180 +193 57 40 Dark Rust 2181 +216 30 4 Orange / Red 2182 +244 71 107 Bashful Pink 2183 +194 4 55 Wildfire 2184 +144 5 83 Dark Red 2185 + 96 32 69 Medium Purple 2186 +196 213 214 Pastel Blue 2187 +196 218 226 Cadet Blue 2188 +147 183 210 Baby Blue 2189 +102 137 205 Bright Blue 2191 + 89 97 169 Soldier Blue 2192 + 0 51 127 Blue Suede 2195 + 0 43 127 Blue Suede 2196 +128 139 192 Oriental Blue 2197 + 97 176 221 Ozone 2198 + 52 86 134 Imperial Blue 2199 + 0 38 75 Blue Ribbon 2201 +187 176 211 Pastel Lilac 2202 +180 145 210 Pale Purple 2203 +212 107 199 Medium Pink 2204 +116 82 189 Violet 2208 + 17 32 81 Light Navy 2209 + 38 16 84 Dark Purple / Navy 2210 +179 103 133 Medium Purple 2211 + 89 52 68 Intense Maroon 2212 + 0 179 170 M. D. Green 2214 + 0 133 144 Oceanic Green 2215 + 0 106 119 Mallard Blue 2216 + 0 134 137 J. Turquoise 2217 + 0 141 129 Brite Jade 2218 + 0 101 100 Garden Green 2219 + 0 70 83 Blue Spruce 2220 + 0 65 83 Deep Windsor 2221 + 0 53 58 Dark Blue 2222 +202 232 223 Light Blue 2223 +204 227 222 Soothing Sea 2224 +209 228 212 Blue Glass 2225 +187 224 225 Bleached Aqua 2226 +149 222 219 Mint Julep 2227 + 82 192 226 Medium Blue / Green 2229 + 0 163 222 Mid Windsor 2231 + 0 115 198 Medium Blue 2232 + 0 131 155 Dark Aqua Green 2233 +155 219 194 Pale Aqua 2237 + 91 191 33 Green 2241 + 0 123 62 Kelly 2242 + 0 154 119 Peacock Green 2243 + 0 97 87 Green Forest 2244 +212 233 164 Dark Olive Green 2245 +112 149 2 Meadow Green 2246 + 87 143 21 Meadow 2247 + 86 106 33 Pale Green 2250 + 3 74 49 Evergreen 2251 + 34 83 65 Field Green 2252 + 66 72 23 Green 2253 + 36 59 46 Dark Army Green 2254 +230 220 186 Cocoa Mulch 2255 +178 172 113 Silver Fern 2256 +122 169 145 Moss 2262 +141 176 174 Pale Blue 2265 +194 168 117 Rattan 2275 +126 81 61 Dark Brown 2283 + 64 49 44 Espresso 2285 +250 202 162 New Gold 2286 +250 192 157 Tawny 2287 +234 170 123 Bamboo 2288 +157 83 10 Orange / Brown 2289 +143 75 4 Orange / Brown 2290 +122 65 42 Brown 2291 +166 163 157 Pale Grey 2292 +224 202 203 Orchid Tint 2294 +223 219 210 Vapor 2298 +146 162 153 Jadeite 2301 + 3 41 59 Navy 2306 +252 201 161 Peach Fuzz 2006 +237 181 199 Lilac Sachet 2008 +237 156 181 Begonia Pink 2009 +230 143 168 Rosebloom 2011 +230 143 168 Rosebloom 2012 +227 135 130 Strawberry Ice 2013 +250 201 161 Almond Cream 2125 +235 179 140 Grain 2161 +227 173 181 Cameo Pink 2165 +227 153 161 Sea Pink 2038 +171 204 217 Crystal Blue 2061 +130 158 201 Della Robbia Blue 2190 +102 117 171 Wedgewood 2193 +110 115 158 Bleached Denim 2194 +125 133 153 Tempest 2200 +135 120 130 Gray Ridge 2074 +212 184 194 Winsome Orchid 2077 +163 158 191 Sweet Lavender 2205 +143 138 176 Persian Violet 2206 +143 130 148 Dusk 2207 +115 107 153 Dusted Peri 2087 +117 105 120 Purple Sage 2213 +112 173 176 Light Clear Blue 2096 +189 227 219 Bleached Aqua 2089 +171 204 217 Crystal Blue 2228 +110 166 204 Alaskan Blue 2230 +115 161 189 Cobalt 2094 +214 232 196 Ambrosia 2234 +214 232 196 Ambrosia 2099 +171 209 186 Bird Egg Green 2235 +166 217 168 Green Ash 2236 +153 199 176 Ocean Wave 2238 +107 181 176 Blue Turquoise 2239 + 97 189 153 Spearmint 2102 +143 191 135 Brilliant Green 2240 +168 166 125 Sage Green 2248 +153 145 122 Seneca Rock 2249 +115 130 128 Stormy Sea 2112 +173 191 171 Sea Foam 2257 +194 186 173 Silver Lining 2258 +194 186 173 Silver Lining 2259 +196 227 204 Misty Jade 2260 +161 176 166 Aqua Gray 2261 +161 176 166 Aqua Gray 2263 +161 176 166 Aqua Gray 2264 +135 161 166 Tourmaline 2266 +102 130 140 Smoke Blue 2267 + 0 68 55 Evergreen 2107 + 0 68 55 Evergreen 2268 + 0 68 55 Evergreen 2269 + 0 68 55 Evergreen 2270 +245 240 232 Cloud Dancer 2271 +247 240 232 Star White 2116 +235 219 209 Pastel Parchment 2272 +247 237 219 Whisper White 2117 +222 207 186 Whisper Pink 2118 +222 207 194 Crystal Gray 2273 +237 214 194 Shell 2119 +227 196 181 Peach Whip 2274 +199 191 176 Gray Morn 2122 +176 163 145 Simply Taupe 2276 +179 166 153 String 2277 +191 161 148 Adobe Rose 2278 +201 168 143 Rugby Tan 2128 +181 171 158 Gray 2279 +179 166 153 String 2280 +179 158 145 Sphinx 2124 +194 173 158 Mushroom 2281 +179 158 145 Sphinx 2282 +156 130 130 Quail 2129 +135 120 130 Gray Ridge 2284 +138 112 112 Twilight Mauve 2134 +196 186 186 Lilac Gray 2141 +214 196 191 Hushed Violet 2142 +196 186 186 Lilac Gray 2293 +150 140 148 Silver Rose 2295 +145 138 135 Gull 2296 +161 158 168 Lavender Aura 2144 +171 163 161 Gull Gray 2145 +224 214 204 White Sand 2297 +214 217 209 Blue Blush 2136 +173 184 186 Pearl Blue 2299 +179 181 176 Highrise 2300 +171 163 161 Gull Gray 2302 +166 163 171 Dapple Gray 2303 +189 181 196 Thistle 2143 +153 158 184 Purple Cloud 2146 +150 140 148 Silver Rose 2304 +135 120 130 Gray Ridge 2147 +143 130 148 Dusk 2148 +135 120 130 Gray Ridge 2305 +247 237 222 Snow White 2149 diff --git a/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl b/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl new file mode 100644 index 0000000..31eb396 --- /dev/null +++ b/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl @@ -0,0 +1,388 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Rayon V3 +Columns: 4 +# RGB Value Color Name Number +245 238 126 Medium Yellow 1004 +249 231 21 Daffodil 1005 +198 174 15 Black Eyed Susie 1018 +249 229 39 Canary Yellow 1007 +249 223 22 Moonbeam 1008 +250 215 22 Canary 1009 +199 161 14 Black Eyed Susie 1187 +253 218 87 Star Gold 1011 +253 218 87 Star Gold 1405 +254 200 31 Buttercup 1188 +224 170 15 Pollen Gold 1404 +235 177 16 Gold 1219 +235 177 16 Gold 1425 +253 190 73 Scholastic 1189 +175 117 6 Copper 1224 +240 179 47 Yellow Poppy 1012 +199 127 7 Almond 1015 +247 127 0 Pumpkin 1333 +232 117 19 Golden Poppy 1043 +252 158 113 Cadmium Orange 1041 +250 99 2 Dark Tex Orange 1045 +247 74 3 Sunkist 1046 +251 129 128 Shell Pink 1051 +251 95 88 Coral 1436 +226 62 40 Honeysuckle 1194 +193 57 40 Dark Rust 1157 +251 191 195 Orchid Pink 1032 +233 19 47 Rosewood 1048 +207 19 38 Foxy Red 1050 +207 19 38 Foxy Red 1419 +124 33 41 Burgundy 1158 +255 162 178 Dusty Rose 1192 +252 117 143 Azalea 1034 +230 6 58 Cerise 1335 +218 28 63 Rosewood 1052 +162 37 56 Wildfire 1243 +242 176 194 Carnatio 1022 +176 0 61 Candy Apple Red 1438 +118 39 60 Red Jubilee 1156 +255 160 190 Petal Pink 1227 +249 78 143 Begonia 1024 +234 16 106 Cherry Blossom 1025 +203 3 86 Dark Pink 1026 +166 4 69 Burgundy 1155 +126 31 63 Maroon 1244 +244 191 210 Memphis Belle 1021 +244 191 210 Memphis Belle 1437 +237 114 171 Floral Pink 1027 +226 41 130 Ruby Glint 1329 +112 25 61 Red Licorice 1246 +214 2 112 Crimson 1232 +109 32 65 Brushed Burgundy 1196 +109 32 65 Brushed Burgundy 1429 +251 177 212 Pale Pink 1193 +173 0 118 New Berry 1153 +162 5 127 New Berry 1336 +225 206 224 Rose Pink 1073 +198 171 219 Tulip 1261 +187 176 211 Pastel Lilac 1195 +158 146 199 Violet Tulip 1260 +102 137 205 Bright Blue 1063 +156 196 226 Sky Blue 1062 +118 170 220 Caribbean Blue 1058 + 58 117 196 Dolphin Blue 1064 +169 206 227 Sky Blue 1057 +169 206 227 Sky Blue 1411 + 0 82 186 Ocean Blue 1253 + 0 163 222 Mid Windsor 1059 + 0 115 198 Medium Blue 1097 + 0 78 110 Peacock 1098 + 0 64 83 Deep Windsor 1072 +114 210 223 Turquoise 1099 + 42 197 218 Periwinkle 1100 + 0 174 200 Aquamarine 1101 +149 222 219 Mint Julep 1266 + 0 157 160 Cyan 1277 + 0 134 137 J. Turquoise 1274 + 0 115 116 M. D. Green 1107 +170 222 213 Mint Julep 1093 + 0 141 129 Brite Jade 1279 + 0 120 112 Fern Green 1106 + 0 109 102 Imperial Aqua 1209 + 0 152 125 Peacock Green 1207 +123 210 182 Pale Green 1113 + 0 106 83 Green Bay 1343 + 0 86 65 Dark Green 1346 +180 226 192 Mint 1272 +150 218 176 Pale Aqua 1111 +111 206 156 Seafoam 1112 + 0 158 96 Vibrant Green 1342 + 0 134 81 Dark Green 1116 + 36 79 50 Dark Green 1344 + 36 79 50 Dark Green 1403 + 0 183 96 Bright Green 1285 + 0 183 96 Bright Green 1435 + 0 157 75 Vibrant Green 1115 + 31 181 59 Harvest Green 1125 + 52 159 54 Emerald 1448 + 62 144 50 Kelly 1126 +212 233 164 Dark Olive Green 1119 +170 221 110 Spruce 1121 + 86 172 27 Green / Yellow 1123 + 87 143 21 Meadow 1284 +187 232 96 Sharp Green 1120 +187 232 96 Sharp Green 1423 +186 196 6 Dark Green 1122 +157 157 8 Tamarack 1221 +242 239 134 Medium Yellow 1003 +103 88 77 Dark Taupe 1414 +146 150 148 Banner Gray 1319 +103 109 111 Metal 1321 +103 109 111 Metal 1408 + 70 78 82 Midnight 1216 +137 143 140 Platinum 1320 + 74 76 73 Dark Grey 1178 +215 204 175 Seashell 1300 +227 217 192 Birch 1299 +227 214 125 Popcorn 1017 +210 190 145 Taupe 1406 +221 204 165 Sea Mist 1132 +234 170 123 Bamboo 1138 +100 56 38 Dark Brown 1161 +176 137 113 Tawny Birch 1140 +240 182 160 Blossom 1040 +240 182 160 Blossom 1426 +241 197 176 Bisque 1039 +243 209 190 Grape 1326 +146 52 56 Dark Orange / Red 1159 +220 129 140 Medium Pink 1035 +246 189 191 Desert Bloom 1031 + 82 42 37 Dark Brown 1308 +245 210 205 Crystal Pink 1037 +217 133 189 Medium Pink 1239 + 81 47 70 Dark Maroon 1241 +226 204 212 Orchid Ice 1166 + 82 37 84 Port Wine 1089 +207 162 212 Light Pink 1075 +215 177 215 Palest Mauve 1074 + 54 64 92 Light Midnight 1324 +196 198 206 Light Purple 1164 +213 212 213 Illusion Blue 1311 + 0 49 75 Blue Ribbon 1070 + 0 51 91 Blue 1204 + 94 152 172 Wonder Blue 1250 +163 193 202 Canal Blue 1056 + 35 70 54 Mitchell Green 1298 + 43 76 64 Harbor Green 1345 +209 228 212 Blue Glass 1092 +204 230 213 Blue Glass 1110 + 74 89 41 Green / Yellow 1294 + 84 119 49 Sage 1172 +241 235 135 Pale Yellow 1006 +182 172 89 Pale Green / Yellow 1016 +166 190 171 Sea Foam 1168 +204 227 222 Soothing Sea 1091 + 0 161 185 Marine Aqua 1278 + 0 127 152 Dark Aqua Green 1341 + 0 101 128 Dark Blue 1108 +187 224 225 Bleached Aqua 1205 + 0 160 196 California Blue 1103 + 0 122 167 Pretty Blue 1271 + 37 85 126 Lake Blue 1325 + 0 48 94 Blue 1068 +110 134 169 Slate Blue 1176 + 14 29 71 Light Navy 1413 + 89 97 169 Soldier Blue 1200 + 47 52 142 Blue 1254 + 13 25 117 Royal Blue 1069 +226 212 214 Orchid Ice 1212 +103 75 118 Jazz Purple 1088 + 72 43 88 Blackberry 1090 +242 214 217 Light Pink 1019 +240 199 211 Pink Bazaar 1020 +183 114 144 Rose Dust 1149 +128 42 80 Wine 1331 +179 103 133 Medium Purple 1148 +202 140 141 Salmon 1428 +232 136 144 Light Orange 1332 +251 221 214 Rosewater 1030 +253 173 177 Emily Pink 1033 +225 67 81 Medium Red / Orange 1053 +239 197 157 Opaline 1131 +231 179 131 Gold 1302 +208 143 85 Ashley Gold 1433 +211 168 125 Tan 1451 +193 144 97 Light Bronze 1141 +248 231 171 Tusk 1010 +250 224 139 Wheat 1183 +253 180 21 Merit Gold 1420 +192 146 12 Old Gold 1450 +251 155 14 Honeydew 1190 +254 183 120 Buff Orange 1233 +255 153 64 Orange 1042 +246 126 0 Pumpkin 1044 +222 79 4 Orange 1402 +251 157 163 Flamingo Pink 1234 +215 42 41 Tuxedo Red 1049 +205 46 49 Spanish Red 1334 + 93 46 41 Coffee Bean 1160 +225 7 71 Cerise 1328 +194 4 55 Wildfire 1424 +168 12 54 Atom Red 1054 +149 23 55 Cabernet 1459 +155 0 111 Medium Purple 1154 +217 168 217 Mid Lilac 1076 +186 124 189 Purple 1077 +135 43 149 Dark Purple 1410 + 87 12 112 Royal Purple 1080 +155 109 200 Amethyst 1081 +137 80 191 Amethyst 1082 +192 209 229 Cadet Blue 1060 +165 161 214 Light Purple 1085 +165 187 224 Cristy Blue 1197 + 93 120 203 Jay Blue 1247 +116 82 189 Violet 1263 +103 87 189 Violet 1201 + 95 105 196 Violet 1248 + 75 49 173 Violet Blue 1086 + 30 29 120 Royal 1202 + 30 29 120 Royal 1440 + 52 40 117 Violet Blue 1084 + 44 38 92 Blue Ink 1203 + 0 62 106 Salem Blue 1256 + 0 62 106 Salem Blue 1441 + 82 192 226 Medium Blue / Green 1270 + 0 167 219 Surf Blue 1095 + 0 70 83 Blue Spruce 1071 +127 215 220 Turquoise 1267 + 0 184 200 Aquamarine 1275 + 0 184 200 Aquamarine 1431 + 0 133 144 Oceanic Green 1327 +122 211 193 Tropical Wave 1104 + 0 193 182 M. D. Green 1105 + 0 175 153 Bluestone 1434 + 0 152 135 Peppermint 1118 + 0 97 87 Green Forest 1289 + 0 131 115 Greenstone 1208 + 0 106 91 Green Forest 1117 + 0 80 66 Dark Green 1290 + 0 68 55 Evergreen 1347 + 0 201 147 Bluestone 1114 + 3 74 49 Evergreen 1442 + 3 74 49 Evergreen 1443 +141 89 50 Light Cocoa 1144 +126 81 61 Dark Brown 1307 +154 113 92 Orange / Brown 1422 +204 175 183 Rose Beige 1145 + 72 40 54 Plum 1242 +203 194 200 Skylight 1165 +175 188 192 Celestial Blue 1401 +213 216 212 Blue Blush 1210 + 0 53 58 Dark Blue 1293 +177 187 178 Light Grey / Green 1175 +121 146 129 Olive 1446 +150 171 154 Moss 1170 + 85 105 86 Water Lilly 1296 + 64 74 38 Hedge 1297 +180 181 143 Oxford Tan 1301 +200 199 165 Pale Gray Green 1339 + 74 70 19 Khaki 1295 +242 242 226 Natural White 1001 +248 241 211 Eggshell 1002 +250 233 212 Ivory 1182 +227 208 185 Tapioca 1127 +227 210 195 Crystal Gray 1184 +230 209 197 Peach Blush 1128 +246 229 229 Oyster 1029 +213 232 205 Ambrosia 1109 + 0 151 212 Baltic Blue 1102 + 56 56 56 Black 1180 + 66 46 45 Brown Mule 1310 +233 226 215 Palest Ivory 1312 +187 183 175 Skylight 1316 + 0 145 202 Blue / Green 1096 +239 43 47 Scarlet 1047 + 14 27 141 Blue 1066 +236 0 146 Fuschia 1230 +164 151 136 Goat 1421 + 0 80 66 Dark Green 1292 + 0 80 66 Dark Green 1291 +237 156 181 Begonia Pink 1023 +222 120 153 Wild Orchid 1028 +209 138 150 Cashmere Rose 1229 +153 99 117 Bordeaux 1152 +217 158 194 Orchid 1150 +227 135 130 Strawberry Ice 1409 +209 135 133 Brandied Apricot 1036 +173 107 117 Heather Rose 1151 +201 171 171 Burnished Lilac 1136 +181 138 143 Lilas 1427 +135 105 107 Grape Shake 1417 +204 148 148 Blush 1418 +186 153 161 Mauve Shadows 1146 +130 112 158 Aster Purple 1262 +112 97 143 Veronica 1083 +138 117 150 Purple Haze 1439 +138 117 150 Purple Haze 1079 +181 138 179 African Violet 1078 +186 143 166 Grayish Lavender 1147 +102 117 171 Wedgewood 1065 +209 212 214 Illusion Blue 1055 +166 201 212 Aquamarine 1094 +125 125 176 Deep Periwinkle 1249 +125 125 163 Lavender Violet 1067 +140 161 209 Vista Blue 1061 +115 107 153 Dusted Peri 1255 +110 184 176 Pool Blue 1276 +120 128 150 Purple Dusk 1407 +125 133 153 Tempest 1432 +163 184 209 Powder Blue 1198 +115 138 179 Allure 1199 + 99 158 158 Dusty Turquoise 1287 +102 150 130 Malachite Green 1444 +112 181 128 Absinthe Green 1124 +247 237 219 Whisper White 1348 +227 219 196 White Asparagus 1181 +173 168 148 Abbey Stone 1445 +179 176 161 Pussywillow Gray 1206 +161 158 145 Flint Gray 1340 +148 163 150 Jadeite 1282 +171 191 176 Grayish Green 1169 +199 209 194 Pale Aqua 1265 +140 173 168 Aquifer 1171 +143 156 156 Slate 1288 +125 120 102 Vertiver Green 1173 +140 135 115 Laurel Oak 1330 +148 148 122 Tea 1460 +209 204 158 Hay 1447 +235 214 163 Banana Crepe 1449 +235 179 140 Grain 1014 +247 140 97 Melon 1191 +232 181 150 Almost Apricot 1013 +181 163 133 Nomad 1186 +179 158 140 Light Taupe 1338 +222 184 140 Sheepskin 1430 +148 120 110 Antler 1143 +171 145 122 Almondine 1452 +176 163 145 Simply Taupe 1337 +179 158 145 Sphinx 1303 +194 173 158 Mushroom 1134 +166 158 153 Opal Gray 1135 +179 158 145 Sphinx 1304 +176 148 138 Fawn 1412 +181 125 115 Old Rose 1306 +179 145 125 Roebuck 1139 +194 173 158 Mushroom 1130 +212 184 166 Rose Smoke 1185 +232 204 176 Crean Tan 1129 +232 176 156 Dusty Pink 1137 +181 125 115 Old Rose 1305 +156 130 130 Quail 1416 +171 163 161 Gull Gray 1214 +135 125 153 Daybreak 1087 +135 120 130 Gray Ridge 1323 +135 120 130 Gray Ridge 1458 +150 140 148 Silver Rose 1322 +166 163 171 Dapple Gray 1213 +171 163 161 Gull Gray 1215 +184 173 166 Ashes of Roses 1317 +199 189 173 Silver Gray 1454 +181 171 158 Gray 1133 +135 120 130 Gray Ridge 1415 +138 112 112 Twilight Mauve 1162 +150 140 148 Silver Rose 1174 +214 196 191 Hushed Violet 1211 +189 184 168 Silver Cloud 1453 +209 209 199 Foggy Dew 1163 +194 194 194 Vapor Blue 1314 +145 138 135 Gull 1455 +148 135 145 Purple Ash 1457 +150 140 148 Silver Rose 1177 +179 181 176 Highrise 1318 +138 133 133 Frost Gray 1456 +237 232 222 Lily White 1179 +227 214 191 White Swan 4001 +217 194 148 Marzipan 4003 +217 194 148 Marzipan 4009 +227 217 196 Birch 4004 +219 209 166 Sea Mist 4005 +227 204 145 Straw 4006 +230 196 133 Sahara Sun 4007 +237 209 194 Peach Blush 1038 +171 145 125 Stucco 1142 +179 181 176 Highrise 1167 diff --git a/inkstitch/palettes/InkStitch Marathon Rayon.gpl b/inkstitch/palettes/InkStitch Marathon Rayon.gpl new file mode 100644 index 0000000..c70f864 --- /dev/null +++ b/inkstitch/palettes/InkStitch Marathon Rayon.gpl @@ -0,0 +1,321 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Rayon +Columns: 4 +# RGB Value Color Name Number +242 242 226 Natural White 1001 +248 241 211 Eggshell 1002 +242 239 134 Medium Yellow 1003 +245 238 126 Medium Yellow 1004 +249 231 21 Daffodil 1005 +241 235 135 Pale Yellow 1006 +249 229 39 Canary Yellow 1007 +249 223 22 Moonbeam 1008 +250 215 22 Canary 1009 +248 231 171 Tusk 1010 +253 218 87 Star Gold 1011 +240 179 47 Yellow Poppy 1012 +199 127 7 Almond 1015 +182 172 89 Pale Green / Yellow 1016 +227 214 125 Popcorn 1017 +198 174 15 Black Eyed Susie 1018 +242 214 217 Light Pink 1019 +240 199 211 Pink Bazaar 1020 +244 191 210 Memphis Belle 1021 +242 176 194 Carnatio 1022 +249 78 143 Begonia 1024 +234 16 106 Cherry Blossom 1025 +203 3 86 Dark Pink 1026 +237 114 171 Floral Pink 1027 +246 229 229 Oyster 1029 +251 221 214 Rosewater 1030 +246 189 191 Desert Bloom 1031 +251 191 195 Orchid Pink 1032 +253 173 177 Emily Pink 1033 +252 117 143 Azalea 1034 +220 129 140 Medium Pink 1035 +245 210 205 Crystal Pink 1037 +248 210 205 Crystal Pink 1038 +241 197 176 Bisque 1039 +240 182 160 Blossom 1040 +252 158 113 Cadmium Orange 1041 +255 153 64 Orange 1042 +232 117 19 Golden Poppy 1043 +246 126 0 Pumpkin 1044 +250 99 2 Dark Tex Orange 1045 +247 74 3 Sunkist 1046 +239 43 47 Scarlet 1047 +233 19 47 Rosewood 1048 +215 42 41 Tuxedo Red 1049 +207 19 38 Foxy Red 1050 +251 129 128 Shell Pink 1051 +218 28 63 Rosewood 1052 +225 67 81 Medium Red / Orange 1053 +168 12 54 Atom Red 1054 +163 193 202 Canal Blue 1056 +169 206 227 Sky Blue 1057 +118 170 220 Caribbean Blue 1058 + 0 163 222 Mid Windsor 1059 +192 209 229 Cadet Blue 1060 +156 196 226 Sky Blue 1062 +102 137 205 Bright Blue 1063 + 58 117 196 Dolphin Blue 1064 + 14 27 141 Blue 1066 + 0 48 94 Blue 1068 + 13 25 117 Royal Blue 1069 + 0 49 75 Blue Ribbon 1070 + 0 70 83 Blue Spruce 1071 + 0 64 83 Deep Windsor 1072 +225 206 224 Rose Pink 1073 +215 177 215 Palest Mauve 1074 +207 162 212 Light Pink 1075 +217 168 217 Mid Lilac 1076 +186 124 189 Purple 1077 + 87 12 112 Royal Purple 1080 +155 109 200 Amethyst 1081 +137 80 191 Amethyst 1082 + 52 40 117 Violet Blue 1084 +165 161 214 Light Purple 1085 + 75 49 173 Violet Blue 1086 +179 103 133 Medium Purple 1088 + 82 37 84 Port Wine 1089 + 72 43 88 Blackberry 1090 +204 227 222 Soothing Sea 1091 +209 228 212 Blue Glass 1092 +170 222 213 Mint Julep 1093 + 0 167 219 Surf Blue 1095 + 0 145 202 Blue / Green 1096 + 0 115 198 Medium Blue 1097 + 0 78 110 Peacock 1098 +114 210 223 Turquoise 1099 + 42 197 218 Periwinkle 1100 + 0 174 200 Aquamarine 1101 + 0 151 212 Baltic Blue 1102 + 0 160 196 California Blue 1103 +122 211 193 Tropical Wave 1104 + 0 193 182 M. D. Green 1105 + 0 120 112 Fern Green 1106 + 0 115 116 M. D. Green 1107 + 0 101 128 Dark Blue 1108 +213 232 205 Ambrosia 1109 +204 230 213 Blue Glass 1110 +150 218 176 Pale Aqua 1111 +111 206 156 Seafoam 1112 +123 210 182 Pale Green 1113 + 0 201 147 Bluestone 1114 + 0 157 75 Vibrant Green 1115 + 0 134 81 Dark Green 1116 + 0 106 91 Green Forest 1117 + 0 152 135 Peppermint 1118 +212 233 164 Dark Olive Green 1119 +187 232 96 Sharp Green 1120 +170 221 110 Spruce 1121 +186 196 6 Dark Green 1122 + 86 172 27 Green / Yellow 1123 + 31 181 59 Harvest Green 1125 + 62 144 50 Kelly 1126 +227 208 185 Tapioca 1127 +239 197 157 Opaline 1131 +221 204 165 Sea Mist 1132 +234 170 123 Bamboo 1138 +176 137 113 Tawny Birch 1140 +193 144 97 Light Bronze 1141 +179 131 96 Fawn 1142 +141 89 50 Light Cocoa 1144 +204 175 183 Rose Beige 1145 +179 103 133 Medium Purple 1148 +183 114 144 Rose Dust 1149 +173 0 118 New Berry 1153 +155 0 111 Medium Purple 1154 +166 4 69 Burgundy 1155 +118 39 60 Red Jubilee 1156 +193 57 40 Dark Rust 1157 +124 33 41 Burgundy 1158 +146 52 56 Dark Orange / Red 1159 + 93 46 41 Coffee Bean 1160 +100 56 38 Dark Brown 1161 +196 198 206 Light Purple 1164 +203 194 200 Skylight 1165 +226 204 212 Orchid Ice 1166 +175 188 192 Celestial Blue 1167 +166 190 171 Sea Foam 1168 +150 171 154 Moss 1170 + 84 119 49 Sage 1172 +177 187 178 Light Grey / Green 1175 +110 134 169 Slate Blue 1176 + 74 76 73 Dark Grey 1178 + 56 56 56 Black 1180 +250 233 212 Ivory 1182 +250 224 139 Wheat 1183 +227 210 195 Crystal Gray 1184 +199 161 14 Black Eyed Susie 1187 +254 200 31 Buttercup 1188 +253 190 73 Scholastic 1189 +251 155 14 Honeydew 1190 +255 162 178 Dusty Rose 1192 +251 177 212 Pale Pink 1193 +226 62 40 Honeysuckle 1194 +187 176 211 Pastel Lilac 1195 +109 32 65 Brushed Burgundy 1196 +165 187 224 Cristy Blue 1197 + 89 97 169 Soldier Blue 1200 + 48 70 180 Jamie Blue 1201 + 30 29 120 Royal 1202 + 44 38 92 Blue Ink 1203 + 0 51 91 Blue 1204 +187 224 225 Bleached Aqua 1205 + 0 152 125 Peacock Green 1207 + 0 131 115 Greenstone 1208 + 0 109 102 Imperial Aqua 1209 +213 216 212 Blue Blush 1210 +226 212 214 Orchid Ice 1212 + 70 78 82 Midnight 1216 +235 177 16 Gold 1219 +157 157 8 Tamarack 1221 +175 117 6 Copper 1224 +255 160 190 Petal Pink 1227 +236 0 146 Fuschia 1230 +214 2 112 Crimson 1232 +254 183 120 Buff Orange 1233 +251 157 163 Flamingo Pink 1234 +217 133 189 Medium Pink 1239 + 81 47 70 Dark Maroon 1241 + 72 40 54 Plum 1242 +162 37 56 Wildfire 1243 +126 31 63 Maroon 1244 +112 25 61 Red Licorice 1246 + 93 120 203 Jay Blue 1247 + 95 105 196 Violet 1248 + 94 152 172 Wonder Blue 1250 + 0 82 186 Ocean Blue 1253 + 47 52 142 Blue 1254 + 0 62 106 Salem Blue 1256 +158 146 199 Violet Tulip 1260 +198 171 219 Tulip 1261 +116 82 189 Violet 1263 +149 222 219 Mint Julep 1266 +127 215 220 Turquoise 1267 + 82 192 226 Medium Blue / Green 1270 + 0 122 167 Pretty Blue 1271 +180 226 192 Mint 1272 + 0 134 137 J. Turquoise 1274 + 0 184 200 Aquamarine 1275 + 0 157 160 Cyan 1277 + 0 161 185 Marine Aqua 1278 + 0 141 129 Brite Jade 1279 + 87 143 21 Meadow 1284 + 0 183 96 Bright Green 1285 + 0 97 87 Green Forest 1289 + 0 80 66 Dark Green 1290 + 0 53 58 Dark Blue 1293 + 66 72 23 Green 1294 + 74 70 19 Khaki 1295 + 85 105 86 Water Lilly 1296 + 64 74 38 Hedge 1297 + 35 70 54 Mitchell Green 1298 +227 217 192 Birch 1299 +215 204 175 Seashell 1300 +180 181 143 Oxford Tan 1301 +231 179 131 Gold 1302 +126 81 61 Dark Brown 1307 + 82 42 37 Dark Brown 1308 + 66 46 45 Brown Mule 1310 +213 212 213 Illusion Blue 1311 +233 226 215 Palest Ivory 1312 +187 183 175 Skylight 1316 +146 150 148 Banner Gray 1319 +137 143 140 Platinum 1320 +103 109 111 Metal 1321 + 54 64 92 Light Midnight 1324 + 37 85 126 Lake Blue 1325 +243 209 190 Grape 1326 + 0 133 144 Oceanic Green 1327 +225 7 71 Cerise 1328 +226 41 130 Ruby Glint 1329 +128 42 80 Wine 1331 +232 136 144 Light Orange 1332 +247 127 0 Pumpkin 1333 +205 46 49 Spanish Red 1334 +230 6 58 Cerise 1335 +162 5 127 New Berry 1336 +200 199 165 Pale Gray Green 1339 + 0 127 152 Dark Aqua Green 1341 + 0 158 96 Vibrant Green 1342 + 0 106 83 Green Bay 1343 + 36 79 50 Dark Green 1344 + 43 76 64 Harbor Green 1345 + 0 86 65 Dark Green 1346 + 0 68 55 Evergreen 1347 +235 179 140 Grain 1013 +224 176 145 Pink Sand 1014 +250 171 186 Prism Pink 1023 +209 138 150 Cashmere Rose 1229 +237 140 166 Aurora Pink 1028 +250 148 105 Cadmium Orange 1191 +173 107 117 Heather Rose 1036 +173 107 117 Heather Rose 1151 +166 117 148 Dusty Lavender 1152 +209 212 214 Illusion Blue 1055 +150 173 209 Placid Blue 1198 +150 173 209 Placid Blue 1061 +102 117 171 Wedgewood 1065 +115 107 153 Dusted Peri 1255 +125 125 163 Lavender Violet 1249 +125 125 163 Lavender Violet 1067 +219 166 194 Pastel Lavender 1150 +181 138 179 African Violet 1078 +138 117 150 Purple Haze 1079 +135 125 153 Daybreak 1087 +130 112 158 Aster Purple 1262 +138 117 150 Purple Haze 1083 +186 153 161 Mauve Shadows 1146 +171 138 166 Regal Orchid 1147 +105 163 173 Aqua 1287 +166 201 212 Aquamarine 1094 +122 173 179 Marine Blue 1276 +115 138 179 Allure 1199 +143 191 135 Brilliant Green 1124 +176 179 168 Pigeon 1206 +161 158 145 Flint Gray 1340 +143 150 130 Seagrass 1330 +125 120 102 Vertiver Green 1173 +191 209 201 Pale Blue 1265 +176 196 189 Surf Spray 1169 +143 176 191 Foget-Me-Not 1171 +148 163 150 Jadeite 1282 +135 156 161 Stone Blue 1288 + 0 68 55 Evergreen 1291 + 0 68 55 Evergreen 1292 +247 237 222 Snow White 1348 +237 232 222 Lily White 1181 +179 158 140 Light Taupe 1186 +186 171 148 Oxford Tan 1338 +176 163 145 Simply Taupe 1337 +184 173 166 Ashes Of Roses 1133 +179 166 153 String 1134 +166 158 153 Opal Gray 1135 +166 158 153 Opal Gray 1303 +179 158 145 Sphinx 1304 +153 138 135 Zinc 1143 +143 130 125 Cinder 1162 +222 207 194 Crystal Gray 1128 +227 196 181 Peach Whip 1129 +212 184 166 Rose Smoke 1185 +194 173 158 Mushroom 1130 +201 171 171 Burnished Lilac 1136 +232 176 156 Dusty Pink 1137 +176 148 138 Fawn 1139 +194 140 122 Cameo Brown 1305 +186 133 122 Ash Rose 1306 +212 219 209 Sprout Green 1163 +173 184 186 Pearl Blue 1314 +179 181 176 Highrise 1318 +125 133 153 Tempest 1177 +135 120 130 Gray Ridge 1323 +237 232 222 Lily White 1179 +196 186 186 Lilac Gray 1211 +166 163 171 Dapple Gray 1214 +171 163 161 Gull Gray 1215 +179 181 176 Highrise 1317 +161 158 168 Lavender Aura 1174 +171 163 161 Gull Gray 1213 +150 140 148 Silver Rose 1322 diff --git a/inkstitch/palettes/InkStitch Metro.gpl b/inkstitch/palettes/InkStitch Metro.gpl new file mode 100644 index 0000000..9ba6dd2 --- /dev/null +++ b/inkstitch/palettes/InkStitch Metro.gpl @@ -0,0 +1,172 @@ +GIMP Palette +Name: Ink/Stitch: Metro +Columns: 4 +# RGB Value Color Name Number +240 186 212 Sugar Pink 1624 +237 171 194 Carnatio 1636 +232 122 163 Floral Pink 1637 +171 3 92 Ruby Glint 1643 +189 56 38 Dark Rust 1652 +207 20 43 Candy Apple 1654 +166 15 56 Atom Red 1658 +245 226 227 Oyster 1662 +250 171 176 Emily Pink 1664 +237 204 186 Chiffon 1667 +222 135 3 Karat 1680 +217 79 0 Orange 1682 +222 59 33 Sunkist 1685 +237 235 135 Lemon Drop 1704 +245 232 20 Daffodil 1706 +252 201 23 Manila 1708 +247 181 18 Orange 1709 +247 163 10 Marigold 1710 +252 201 24 Manila 1711 +247 163 11 Marigold 1712 + 0 150 135 Parrot 1723 + 0 125 105 Shutter Green 1724 +207 232 156 Pistachio Nut 1742 +163 217 99 Apple Green 1743 + 97 191 26 Medium Green 1744 + 0 115 54 Green 1751 + 0 99 56 Dark Green 1754 +207 232 155 Pistachio Nut 1761 +163 217 100 Apple Green 1763 +107 143 0 Meadow Green 1764 + 77 89 13 Palmetto 1766 +209 227 227 Sapphire Medium Light 1772 +191 209 214 Ocean Bleu Light 1790 +115 181 224 Ultra Blue 1800 +181 222 227 Bleached Aqua 1802 + 0 110 199 Dark Blue 1804 +156 186 214 Cerulean 1815 + 0 56 150 Flag Blue 1821 + 0 48 130 Blue Ribbon 1823 +199 217 230 Cadet Blue 1838 + 0 176 171 Ocean Blue 1840 + 0 133 138 M. D. Green 1841 + 0 135 125 Navajo Turquoise 1842 +179 199 227 Light Blue 1845 +199 230 227 Soothing Sea 1846 +179 199 226 Azure Blue 1859 + 89 23 138 Dark Purple 1865 + 28 20 117 Royal 1867 +130 28 107 Grape Wine 2645 +140 66 173 Iris Blue 1871 +181 145 214 Pale Purple 1875 +130 28 108 Grape Wine 1885 +186 158 102 Parsnip 1924 +153 79 20 Date 1925 + 84 64 31 Brown 1926 +237 194 130 Spun Silk 1942 +171 115 5 Ginger 1945 +191 148 13 Brass 1950 +215 217 228 PALE Cloud Gray 1961 +140 143 145 Steel Gray medium 1965 +122 122 120 Medium Grey 1966 +207 196 186 Moonstruck 1969 +150 135 125 Light Brown 1975 +189 56 39 Dark Rust 1980 +201 181 130 Antique Lace 1981 + 64 71 20 Green 2007 + 0 71 48 Grass Green 2089 +173 219 227 Light Blue 2096 + 51 13 115 Purple Maze 2110 +194 94 3 Bright Rust 2124 +222 112 8 Sunburst 2126 +107 74 28 Sand Dune 2142 +222 135 181 Azalea Pink 2153 +184 105 140 Medium Purple 2155 +184 56 71 Develish Pink 2161 +153 0 112 Medium Purple 2170 + 0 163 224 Mid Windsor 2190 + 54 87 140 Imperial Blue 2193 +222 31 130 Ruby Glint 2209 +107 23 59 Red Licorice 2295 + 97 33 71 Medium Purple 2296 +232 235 56 Pale Yellow 2324 +255 120 77 Sunset Orange 2327 + 0 148 108 Peppermint 1722 +173 192 124 Lettuce Green 1774 + 31 43 57 Ebony Blue 1825 +106 50 128 Dahlia 1873 +203 177 138 Almond Buff 1903 +241 238 208 Eggshell 1907 +215 176 100 Gold 1947 +189 156 131 Warm Taupe 2255 +143 123 95 Doe 2256 +171 204 217 Crystal Blue 1806 +209 228 212 Blue Glass 1860 +199 191 176 Gray Morn 1922 +135 120 130 Gray Ridge 1940 +199 191 175 Gray Morn 2154 +164 120 171 Afterglow 1863 + 42 79 49 Dark Green 1948 +181 186 182 Heather Grey 1964 + 55 60 53 Beluga 1998 + 39 49 35 Midnight Green 2088 +255 255 255 Snow White 1618 + 0 0 0 Black 1621 +169 221 118 Spruce 2259 + 28 34 32 Caviar 1973 + 93 93 40 Green 2003 +150 112 163 Hyacinth 2104 +126 168 192 Pale Purple 1799 +166 131 221 Lavender 1869 +255 143 126 Coral Reef 1669 +255 90 70 Coral 1670 +216 224 212 Pale Pearl Gray 1619 +228 167 127 Bamboo 1914 +151 1 48 Cranberry 3 1656 +255 91 107 Pink 2231 + 89 71 28 Army Green 2241 + 37 69 83 Dark Blue 2311 + 0 60 71 Deep Slate Blue 2313 + 0 69 68 Green 2317 +254 62 22 Vermilion 2288 +175 126 38 Palomino 2333 + 71 26 107 Dark Purple 2336 +169 221 119 Spruce 2337 +255 103 144 Dark Pink 2340 + 49 27 39 Dark Brown 2341 + 82 56 52 Dark Oak 2342 +205 0 64 Rose / Very Dark 2357 +246 91 139 Neon Pink 2360 +255 96 127 Dusty Rose 2374 +138 0 83 Cranberry 2409 +225 114 116 Shell Pink 2444 +255 91 108 Pink 2458 +255 143 127 Coral Reef 2461 +255 171 0 Orange 2469 +246 91 138 Neon Pink 2471 +255 103 143 Dark Pink 2472 +255 163 0 Bright Orange 2478 +255 132 66 Orange 2480 +255 90 0 Burnt Orange 2484 +244 229 179 Wheat 2486 +255 255 0 Gold / Yellow 2487 +255 249 0 Canary 2488 +228 167 128 Bamboo 2501 +255 231 0 Canary 2505 +255 205 0 Copper 2507 +150 125 57 Foliage Green 2509 +125 92 57 Sand Dune 2510 + 0 147 109 Peppermint 2512 +168 221 118 Spruce 2513 +107 204 92 DK Mint 2515 + 0 32 41 Ivy 2525 + 78 49 31 Dark Brown 2581 + 26 39 42 Moonless Night 2371 +145 133 122 Medium Green / Yellow 2747 + 97 93 86 Black Chrome 2749 +209 175 129 Ashley Gold 2780 + 38 62 82 Dark Denim 2797 +158 125 146 Very Grape 2814 +166 119 132 Light Purple 2821 +158 125 145 Very Grape 2834 +255 141 102 Apricot Light 2865 + 70 34 63 Deep Slate Gray 2901 + 71 26 108 Dark Purple 2931 +101 81 18 Sand Dune 2239 +162 144 104 Olive Drab 2254 + 53 59 66 Black 2731 +157 125 146 Very Grape 2813 diff --git a/inkstitch/palettes/InkStitch Mettler Embroidery.gpl b/inkstitch/palettes/InkStitch Mettler Embroidery.gpl new file mode 100644 index 0000000..5a7993b --- /dev/null +++ b/inkstitch/palettes/InkStitch Mettler Embroidery.gpl @@ -0,0 +1,156 @@ +GIMP Palette +Name: Ink/Stitch: Mettler Embroidery +Columns: 4 +# RGB Value Color Name Number +250 248 246 White 002 + 0 0 0 Black 003 +252 249 239 Natural White 703 +252 249 232 Off White 704 +252 241 211 Eggshell 781 +241 215 170 Seashell 844 +210 176 145 Light Tan 628 +180 133 104 Toast 629 +173 124 100 Light Brown 636 +148 82 61 Tan 511 +128 63 46 Light Cocoa 839 +110 49 35 Brown 711 + 81 37 37 Camel 786 + 57 26 29 Cocoa 712 + 37 15 24 Dark Brown 618 + 3 7 28 Black 745 +113 70 61 Amber Beige 753 +116 87 58 Light Brown 698 +190 161 131 Light Tan 692 +203 186 157 Ecru 820 +244 224 166 Glow 520 +228 186 120 New Gold 515 +210 145 79 Topaz 517 +186 113 60 Coffee 658 +229 122 28 Nut 507 +178 67 44 Date 528 +141 34 17 Coffee Bean 728 +251 136 108 Apricot 592 +251 151 138 Coral 591 +252 187 134 Coral 914 +253 222 174 Bisque 605 +254 245 218 Light Cream 512 +250 248 171 Lemon 502 +255 247 156 Light Mustard 961 +250 253 128 Star Gold 922 +255 212 19 Nectar 827 +254 163 54 Goldenrod 828 +254 153 48 Orange 505 +255 235 50 Yellow 500 +255 240 43 Sunflower 522 +247 244 61 Yellow 501 +242 249 78 Daffodil 911 +254 207 37 Nectar 767 +211 132 63 Splinter 830 +216 95 29 Scholastic 829 +181 76 44 Scholastic 809 +181 13 19 Red Jubilee 534 +175 40 47 Rust 822 +229 67 57 Light Bronze 902 +255 76 11 Pumpkin 953 +255 66 11 Orangeade 594 +252 34 44 Hazy Red 913 +233 11 51 Red 739 +191 1 55 Carolina Red 600 +254 237 222 Light Coral 645 +251 169 156 Champagne Pink 802 +252 200 180 Flamingo 800 +251 162 155 Light Rust 646 +248 78 103 Azalea 596 +169 2 68 Wine 769 + 87 4 57 Dark Maroon 738 + 54 0 37 Dark Brown 771 + 52 0 15 Dark Chocolate 607 +111 5 57 Dark Maroon 601 +172 1 52 Dark Maroon 838 +226 1 49 Maroon 837 +246 28 89 Foxy Red 835 +250 27 61 Foxy Red 821 +248 83 117 Blush 806 +248 114 139 Shrimp 921 +250 164 193 Pink 610 +252 212 222 Bisque 647 +247 127 177 Pink Mist 803 +246 94 161 Rose 805 +245 74 147 Tuxedo Red 923 +244 67 144 Wine 612 +175 13 97 Red Jubilee 960 +129 13 131 Cachet 958 + 57 2 125 Raspberry 583 + 5 14 49 Midnight Navy 916 + 0 0 0 Black 559 +204 233 116 Flite Green 893 +192 227 82 Flite Green 903 +141 203 66 Light Green 900 +100 185 75 Apple Green 952 +136 202 91 Light Green 546 +105 125 43 Green Dust 547 + 91 92 49 Olive Drab 717 + 79 71 66 Dark Brown 706 + 20 21 22 Charcoal 759 + 28 28 39 Midnight Navy 707 + 62 67 74 Metal 696 + 86 86 85 Metal 657 + 89 89 82 Cinder 623 + 71 71 68 Metal 859 + 63 61 60 Charcoal 700 + 48 43 40 Twilight 685 +116 113 93 Palm Leaf 651 +140 136 134 Palm Leaf 724 +146 140 144 Cinder 640 +153 153 145 Dover Gray 725 +217 213 202 Ash White 713 +239 194 223 Bisque 575 +184 62 156 Tulip 959 +177 71 160 Tulip 611 +113 58 152 Cachet 650 + 49 23 96 Violet Blue 581 + 32 1 59 Navy Blue 582 +199 232 171 Pale Green 536 +141 207 131 Pale Green 544 + 32 154 80 Light Emerald 795 + 27 122 55 Fleece Green 847 + 57 90 46 Dark Green 678 + 45 96 49 Green Gables 549 + 93 115 41 Green Dust 540 +103 189 108 Green Gables 895 +100 188 114 Pale Green 899 + 2 142 91 Fleece Green 849 +118 199 156 Green Pearl 548 + 53 113 91 Olive 539 + 4 78 81 Harbor Green 850 + 2 131 107 Pine Green 553 + 78 181 136 Harbor Green 554 + 88 185 141 Green Pearl 889 +169 221 188 Pale Green 561 +222 242 224 Natural White 668 +219 237 233 True White 749 +194 227 230 Light Blue 787 +161 208 203 Light Blue 669 +110 123 116 Teal 681 + 5 58 80 Deep Windsor 690 + 5 43 63 Navy 864 + 2 28 35 Ivy 543 + 26 37 24 Black 894 + 57 90 46 Dark Green 714 +179 211 221 Sky Blue 962 +161 175 191 Winter Blue 736 +119 165 205 Baby Blue 788 +111 147 196 Baby Blue 672 + 95 138 191 Oriental Blue 498 + 87 142 188 Tropic Blue 901 + 52 140 164 Misty 890 + 24 100 142 Misty 814 + 4 144 190 Blue Horizon 892 + 9 113 176 Baltic Blue 888 + 18 74 158 Lannen Blue 790 + 20 56 150 Imperial Blue 885 + 13 40 126 Blue Suede 833 + 12 47 125 Blue Ribbon 675 + 4 16 41 Midnight Navy 792 + 14 39 74 Midnight Navy 688 + 52 58 93 Slate Blue 684 diff --git a/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl b/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl new file mode 100644 index 0000000..d1d91fa --- /dev/null +++ b/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl @@ -0,0 +1,355 @@ +GIMP Palette +Name: Ink/Stitch: Mettler Poly Sheen +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 0015 + 35 31 32 Black 0020 +255 255 255 Silky White 0010 +255 254 244 Eggshell 0101 +246 239 226 Muslin 0870 +205 203 179 Baguette 0672 +162 155 134 Stone 0873 +173 158 148 Gravel 0874 +174 141 127 Taupe 1061 +153 137 128 Khaki 0722 +147 113 95 Pecan 0853 +201 162 131 Fawn 0934 +224 204 170 Ivory 1172 +229 190 146 Cornsilk 0651 +254 215 170 Meringue 1140 +206 157 115 Tan 1141 +206 157 115 Toffee 0842 +176 133 81 Sisal 0832 +186 120 49 Autumn Leaf 0940 +177 119 52 Ashley Gold 0922 +185 104 49 Nutmeg 0932 +149 92 55 Light Cocoa 1134 +132 75 55 Rust 1342 +113 81 58 Redwood 0933 +115 66 57 Fox 1355 + 95 66 57 Cinnamon 1346 + 90 81 78 Chocolate 1876 +103 81 59 Pine Bark 0945 +113 81 58 Bark 1055 +104 73 58 Espresso 1565 +110 89 91 Sage 0776 +157 115 55 Golden Grain 0941 +177 133 53 Palomino 0822 +196 162 118 Flax 0552 +206 183 139 Champagne 0532 +218 206 171 Oat 0761 +255 253 233 Cream 0670 +242 245 194 Lemon Frost 0250 +255 242 0 Citrus 0600 +255 203 8 Canary 0311 +255 243 43 Yellow 0310 +250 236 180 Daffodil 0520 +255 249 231 Linen 0970 +255 244 201 Vanilla 0660 +255 222 136 Parchment 0640 +239 163 31 Candlelight 0811 +252 175 23 Papaya 0702 +255 224 106 Buttercup 0630 +255 210 78 Lemon 0713 +253 184 19 Bright Yellow 0700 +228 160 36 Gold 0704 +249 157 28 Golden Rod 0800 +244 121 32 Pumpkin 1102 +242 101 49 Tangerine 1300 +241 89 34 Red Pepper 1304 +239 64 35 Fox Fire 1305 +228 30 38 Poppy 1703 +183 41 60 Poinsettia 1902 +201 37 53 Lipstick 1903 +183 41 55 Terra Cotta 1725 +176 66 49 Dark Rust 1335 +158 75 52 Spice 1334 +239 196 171 Twine 1760 +254 219 179 Shrimp Pink 1060 +251 179 131 Shrimp 1362 +244 127 59 Apricot 1220 +222 110 69 Clay 1114 +247 150 107 Salmon 1352 +249 165 126 Starfish 1351 +248 170 143 Pink Clay 1551 +246 141 118 Coral 1532 +234 130 101 Melon 1430 +241 90 78 Flamingo 1521 +230 77 64 Spanish Tile 1600 +210 33 62 Strawberry 1805 +201 36 74 Geranium 1900 +166 43 67 Foliage Rose 1911 +132 48 70 Winterberry 1912 +115 49 71 Burgundy 2222 +164 85 106 Mauve 2241 +182 105 123 Teaberry 2051 +215 162 151 Tea Rose 1761 +239 217 215 Chiffon 2170 +243 190 208 Iced Pink 2160 +224 164 166 Hyacinth 1755 +211 126 148 Heather Pink 2152 +237 187 199 Shell 1860 +252 229 238 Blush 2171 +243 133 141 Corsage 1840 +183 65 90 Blossom 1921 +132 48 70 Cranberry 2113 +116 50 66 Bordeaux 2123 + 73 67 66 Mahogany 1366 + 87 122 188 Cadet Blue 3331 + 64 86 166 Twilight 3211 + 59 71 157 Blueberry 3210 + 73 71 157 Venetian Blue 3541 + 37 36 123 Dark Ink 3110 + 71 47 145 Deep Purple 2900 + 9 25 93 Heraldic 3536 + 85 51 100 Pansy 2715 +111 65 123 Orchid 2810 +104 80 162 Purple 2920 +131 98 171 Wild Iris 2830 +222 176 209 Impatient 2650 +223 204 227 Aura 2655 +171 135 162 Violet 2764 +189 132 186 Frosted Plum 2640 +122 45 115 Dusty Grape 2600 +153 63 152 Plum 2504 +131 46 98 Cerise 2506 +182 34 107 Bright Ruby 2300 +238 56 151 Garden Rose 2520 +230 112 172 Soft Pink 2550 +231 132 183 Azalea Pink 2560 +250 213 229 Carnation 2363 +247 183 202 Petal Pink 2250 +247 172 188 Pink Tulip 2155 +238 76 148 Tropicana 2220 +200 33 93 Fuchsia 2521 +182 38 94 Raspberry 2320 +148 44 97 Boysenberry 2500 + 97 18 109 Dark Current 2711 + 77 53 64 Maroon 2336 +176 155 202 Lavender 3040 +122 112 143 Amethyst Frost 3241 +141 126 148 Cinder 3062 +120 125 138 Leadville 0112 + 64 80 100 Dark Pewter 0132 +119 132 148 Steel 2674 +160 157 162 Smoke 0131 +176 173 161 Cloud 0151 +214 204 203 Saturn Grey 0182 +193 190 183 Mystic Grey 0150 +191 199 196 Fieldstone 0124 +190 200 205 Silver 3971 +157 172 178 Sterling 0142 +150 150 154 Silvery Grey 1972 +119 132 141 Cobblestone 0108 +121 125 131 Dolphin 0152 + 92 107 120 Whale 0111 + 36 40 63 Charcoal 4174 + 85 94 93 Dark Charcoal 1375 + 71 73 60 Olive 6156 + 48 67 59 Herb Green 5866 +113 81 58 Umber 0465 +111 95 60 Golden Brown 0747 +120 102 60 Moss 0345 +178 147 53 Ochre 0542 +235 212 23 Light Brass 0221 +177 172 89 Seaweed 0232 +177 180 91 Marsh 0352 +138 132 61 Caper 6133 +106 120 64 Moss Green 5934 + 39 79 62 Backyard Green 5944 + 96 133 119 Willow 5664 +129 148 134 Palm Leaf 5552 +152 159 123 Army Drab 0453 +137 184 116 Kiwi 5822 +162 192 132 Jalepeno 6051 +181 219 173 Spring Frost 5650 + 93 158 69 Pear 5531 +114 177 100 Bright Mint 5610 +113 191 68 Erin Green 5912 +103 132 66 Limabean 5833 + 58 123 68 Lime 5633 + 53 103 65 Green Dust 5643 + 0 159 77 Ming 5513 + 41 164 74 Emerald 5510 + 0 166 81 Light Kelly 5613 + 0 144 88 Kelly 5515 + 0 133 74 Irish Green 5415 + 0 167 109 Swiss Ivy 5422 + 6 101 67 Bright Green 5324 + 34 85 63 Deep Green 5555 + 32 85 72 Evergreen 5326 + 0 122 101 Green 5100 + 0 160 120 Trellis Green 5210 + 74 190 157 Bottle Green 5230 +126 203 174 Silver Sage 5220 +202 222 215 Snomoon 4250 +190 218 215 Luster 5050 + 5 181 157 Baccarat Green 5115 + 0 140 128 Dark Jade 5101 + 0 107 101 Rain Forest 5005 + 36 79 80 Forest Green 5374 +188 208 224 Glacier Green 4071 +175 197 221 Ice Cap 3650 +148 189 229 Wintersky 3761 +126 167 208 Oxford 3840 +118 157 195 Azure Blue 3951 +101 154 210 Celestial 3820 + 53 118 174 Laguna 3810 + 96 122 150 Ocean Blue 3953 + 57 124 148 Copenhagen 3842 + 12 91 116 Mallard 4644 + 28 115 150 Teal 4032 + 0 113 174 Tropical Blue 3901 + 0 114 188 Cerulean 3900 + 1 174 230 Crystal Blue 3910 +112 198 240 River Mist 3962 + 80 198 216 Spearmint 4240 + 76 198 224 Aqua 4230 + 14 163 193 Turquoise 4111 + 0 149 218 California Blue 4103 + 0 159 207 Wave Blue 4101 + 0 136 178 Caribbean Blue 4010 + 0 113 138 Dark Teal 4116 + 22 85 108 Tartan Blue 4033 + 4 96 119 Deep Sea Blue 4442 + 0 124 145 Caribbean 4531 + 0 141 155 Marine Aqua 4423 + 0 176 181 Island Green 4220 + 37 189 173 Jade 4620 + 0 156 147 Deep Aqua 4610 + 0 102 121 Amazon 4643 + 0 101 99 Spruce 4515 +191 202 198 Oyster 3770 +178 187 199 Skylight 0145 +154 180 198 Winter Frost 3750 +149 181 224 Lake Blue 3640 + 85 129 186 Wedgewood 3641 + 12 77 162 Nordic Blue 3600 + 13 78 150 Blue 3522 + 32 71 127 Imperial Blue 3622 + 32 64 154 Royal Blue 3543 + 23 70 158 Sapphire 3544 + 32 64 154 Fire Blue 3333 + 22 43 117 Provence 3102 + 2 37 98 Delft 3323 + 0 38 89 Dark Indigo 3355 + 0 44 84 Concord 3444 + 32 71 127 Slate Blue 3732 + 24 79 121 Harbor 3743 +108 192 103 Limedrop 5500 +226 228 23 Sour Apple 5940 +244 240 110 Sun 0501 +255 200 11 Sunflower 0706 +252 175 23 Sunset 1120 +247 148 30 Orange 1106 +239 64 35 Devil Red 1306 +242 113 146 Chrysanthemum 1940 +239 58 128 Tropical Pink 1950 +190 175 152 Wild Rice 0862 +226 219 204 Sea Shell 0170 +220 209 189 Tantone 0861 +117 116 109 Pewter 1874 +127 62 56 Coffee Bean 1344 +164 116 77 Penny 1154 +228 209 174 Rattan 0771 +224 181 83 Honey Gold 0821 +239 210 36 Mimosa 0504 +231 207 94 Star Gold 0622 +231 183 0 Liberty Gold 0824 +224 199 150 Old Gold 0851 +224 196 156 Carmel Cream 1123 +203 163 138 Dark Tan 1252 +224 196 166 Straw 1161 +214 160 78 Honey 0931 +219 145 74 Copper 1115 +201 113 59 Date 1311 +206 108 52 Burnt Orange 1312 +182 64 49 Brick 1514 +255 253 239 Buttercream 0270 +246 222 0 Daisy 0605 +249 228 59 Sunshine 0608 +240 170 0 Spanish Gold 0904 +250 222 94 Yellow Bird 0506 +228 171 86 Toast 1010 +227 157 83 Harvest 1332 +221 73 32 Paprika 1301 +171 0 51 Cherry 1913 +171 7 64 Fire Engine 2011 +230 72 90 Persimmon 1730 +199 0 78 Tulip 1906 +133 25 74 Claret 2224 +173 10 73 Rio Red 2022 +210 0 43 Candy Apple 1704 +191 0 61 Country Red 2101 +197 0 50 Cardinal 1904 +196 6 47 Wildfire 1800 +225 90 77 Red Berry 1701 +245 165 187 Rose 2530 +214 144 156 Dusty Mauve 2153 +236 218 212 Flesh 2166 +117 31 66 Beet Red 2115 +157 13 80 Wine 2333 +210 200 221 Stainless 3150 +194 194 224 Blue Dawn 3151 + 94 39 132 Purple Twist 3114 +127 93 161 Iris Blue 2905 +170 131 182 Grape 2910 +224 194 217 Cachet 3045 +136 72 147 Easter Purple 2832 +218 188 197 Dessert 2761 +255 246 240 Whitewash 0180 +194 91 153 Roseate 2510 +178 77 146 Very Berry 2721 +156 59 135 Sangria 2720 +164 111 168 Sugar Plum 2912 +155 166 131 Cypress 0463 +255 255 255 Paper White 0017 +247 247 240 Pearl 0184 +229 228 221 Fog 0176 +156 160 162 Metal 4073 +131 119 142 Greyhound 2576 +201 182 201 Haze 3251 + 39 48 117 Light Midnight 3353 +206 188 95 Ginger 0546 +181 179 93 Tarnished Gold 0442 +178 207 128 Spring Green 6141 +165 211 109 Apple Green 5730 + 51 145 52 Green Grass 5722 + 93 140 65 Grasshopper 5933 +201 226 172 Mint 5740 +192 221 106 Tamarack 6011 + 0 152 100 Shamrock 5411 + 0 169 87 Scrub Green 5400 +221 235 208 Spanish Moss 5770 + 0 109 86 Swamp 5335 + 0 124 115 Field Green 5233 + 0 144 141 Seagreen 4625 + 0 178 162 Scotty Green 5010 + 0 165 183 Aqua Velva 4410 + 0 174 234 Pacific Blue 3906 + 0 176 212 Danish Teal 4114 + 72 188 227 Peacock 4122 +120 200 242 Chicory 3920 + 0 176 219 Alexis Blue 4113 + 0 141 166 Light Mallard 4421 +171 216 220 Island Waters 4430 + 0 156 176 Truly Teal 4452 + 0 161 180 Dark Aqua 4425 + 21 98 143 Deep Ocean 4133 +115 159 174 Rough Sea 4332 +126 150 175 Ash Blue 3853 + 0 121 192 Colonial Blue 3902 +112 179 227 Reef Blue 3815 +162 188 213 Country Blue 3762 + 67 112 180 Marine Blue 3620 + 56 127 193 Empire Blue 3722 + 69 129 193 Blue Bird 3710 +197 220 242 Baby Blue 3652 + 73 137 199 Dolphin Blue 3711 + 39 85 164 Blue Ribbon 3611 + 59 94 168 Starlight Blue 3612 + 52 62 146 Flag Blue 3335 + 30 36 93 Navy 3554 + 24 31 80 Midnight 3344 +202 225 0 Mountain Dew 6010 +235 105 104 Watermelon 1501 diff --git a/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl b/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl new file mode 100644 index 0000000..3344ecc --- /dev/null +++ b/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl @@ -0,0 +1,104 @@ +GIMP Palette +Name: Ink/Stitch: Outback Embroidery Rayon +Columns: 4 +# RGB Value Color Name Number + 40 41 42 Black E000 +227 229 251 White E001 +163 175 179 Marri Grey E012 +238 209 202 Lite Pink E013 +233 172 165 Medium Peach E019 +247 136 125 Mature Peach E020 +186 82 47 Sebring Orange E021 +243 218 104 Lemon E023 +255 166 23 Challis E024 +205 129 38 Rich Gold E025 +154 186 202 Light Sky E027 + 90 137 170 Medium Sky E028 +199 161 191 Pastel Orchid E031 +129 108 157 Light Purple E032 +110 73 129 Medium Purple E033 + 99 47 61 Port E035 +190 20 34 Picardy Red E037 +161 40 49 Red Satin E039 +138 134 137 Smoke Grey E040 +110 116 123 Gundagai Grey E041 + 33 79 119 Wild Blue E042 +134 204 191 Light Ocean E045 + 79 172 152 Ocean Green E046 +158 189 162 Sage Green E047 + 0 135 69 Xmas Tree E051 +231 183 165 Lite Peach E053 +172 131 122 Dark Flesh E054 +212 177 143 Bridle E055 +160 113 85 Medium Bridle E057 + 66 55 52 Chocalate E059 +179 166 151 Drum E060 +240 221 166 Sunshine E067 +255 188 22 Sunfire Yellow E068 +210 169 112 Inca E070 +233 229 220 Atherton Ivory E071 +132 168 200 Grey Blue E075 +237 83 42 Valencia Orange E078 +166 125 169 Jester E080 +205 186 166 Sunlit Biege E082 +210 185 157 Medium Flesh E084 +188 188 184 Gloster Grey E087 + 0 125 155 Rhodes Blue E096 +190 209 178 Pastel Green E100 + 72 143 82 Vine Green E101 + 52 77 59 Baltic Green E103 +151 140 84 Lite Kiwi Green E106 +232 98 118 Reef E107 +233 139 163 Dark Riley E108 +191 47 110 Medium Ruby E110 + 83 70 128 Wild Violet E112 +235 173 191 Jester Pink E116 +212 98 142 Dark Ruby E117 +137 145 147 Light Smoke E118 +230 186 201 Pastel Jester E120 +220 186 165 Katherine Biege E127 +162 144 130 Medium Leather E128 + 39 126 183 Dolphin Blue E133 + 0 85 146 Falcon Blue E134 +244 140 13 Dark Challis E137 +183 155 143 Light Leather E142 + 75 107 153 Pastel Navy E143 +132 106 87 Dark Leather E144 + 94 62 53 Light Chocalate E145 +172 191 203 Smoky Blue E153 +120 115 70 Light Military E156 +119 107 76 Medium Military E157 + 83 90 99 Carbine Grey E164 + 30 68 130 Omega Blue E166 +141 153 73 Kiwi Fruit E169 + 90 110 41 Dark Kiwi E170 +194 121 63 Dark Almond E173 + 0 109 167 Night Mist Blue E177 +137 37 51 Dry Red E181 +169 0 66 Light Ruby E186 +122 59 109 Royal Ruby E188 +149 127 61 Inca Green E190 +169 121 42 Dark Inca E192 +233 222 186 Pale Lemon E222 +239 200 44 Monaro Yellow E223 + 51 60 83 Midnite Blue E243 +154 206 105 Lina Mint E248 + 0 112 71 Jewel Green E250 + 0 145 76 Bold Green E251 +255 102 22 Navel Orange E278 + 0 119 99 Dark Ocean E280 + 21 75 75 Deep Ocean E290 + 0 140 172 Vibrant Blue E295 + 56 168 125 Kelp E301 + 14 78 63 Seaton Green E304 +214 99 153 Aggs Pink E309 +149 60 115 Ruby Prudence E310 +142 139 184 Pastel Lavender E311 +171 143 106 Wholemeal E338 + 72 70 52 Verdoro Green E357 + 35 79 59 Duck Green E370 +240 166 83 Light Inca E372 + 35 77 103 Blue Steel E376 +225 84 69 Manderin Red E379 + 97 37 51 Etna Moroon E385 + 80 84 67 Earth Green E394 diff --git a/inkstitch/palettes/InkStitch Poly X40.gpl b/inkstitch/palettes/InkStitch Poly X40.gpl new file mode 100644 index 0000000..c833658 --- /dev/null +++ b/inkstitch/palettes/InkStitch Poly X40.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Poly X40 +Columns: 4 +# RGB Value Color Name Number + 45 175 163 Light Aqua 0909 + 0 73 98 Danish Teal 0913 +219 224 194 Grass Green 3 0944 +235 240 207 Grass Green 4 0945 +179 220 178 Tea Green 0947 + 95 196 156 Green Meadow 0949 +153 181 97 Avocado 0950 +168 160 75 Light Swamp Green 0951 +155 151 54 Medium Gold 0952 +134 144 45 Swamp Green 0953 + 86 96 0 Olive Drab 0955 +119 132 42 Seagrass 0956 +117 182 174 Turquoise 4 0961 +184 202 180 Silver Green 0962 + 61 97 28 Money 0963 + 56 93 109 Blue Mist 0965 + 69 97 109 Lake Combo 0966 +211 188 86 Light Gold 0982 +174 190 32 Green Onion 0983 +200 225 167 Seedling 0984 +196 221 137 Green Apple 0985 +109 179 63 Cilantro 0988 + 0 166 78 Verde Broght Green 0990 + 0 114 63 Jungle Green 0992 + 0 81 58 Spruce 0995 + 44 46 146 Vintage Grapes 1031 +240 242 229 Maize 4 1140 +175 170 148 Muslin 1141 +228 187 131 Straw 1145 +228 215 181 Tan 2 1146 +195 187 168 Blonde 1147 +205 184 153 Tan 3 1148 +150 154 131 Pewter 1149 + 98 70 46 Coffee 2 1152 + 0 93 163 Chicory 1163 +138 199 62 Erin Green 1183 +178 1 55 Carolina Red 1240 +152 1 46 Cranberry 3 1241 +119 1 51 Russet 3 1243 +113 73 146 Orchid Bouquet 1313 +118 34 130 Orchid 1323 +136 114 178 Tulip 3 1324 + 71 71 157 Vintage Grapes 2 1331 + 0 82 103 Enchanted Sea 1386 + 0 78 161 Light Royal 2 1423 +135 123 107 Antelope 1520 + 95 61 33 Twig 2 1527 +119 69 0 Nutmeg 3 1545 +180 152 89 New Gold 1552 + 0 167 124 Seafoam 1615 +166 206 55 Green Apple 2 1619 +191 192 194 Silver 1707 +187 188 190 Moonlight 1708 +160 161 165 Zinc 1710 +125 129 130 Ash 2 1713 +105 106 111 Dark Grey 2 1716 + 0 81 155 Night Horizon 2031 + 0 145 212 Baltic Blue 2093 +123 21 68 Red Jubilee 2250 +216 164 116 French Beige 2518 +181 155 19 Bright Gold 2 2519 +209 158 95 French Beige 2 2562 +244 123 32 Paprika 3001 +245 157 135 Papaya 3014 +180 0 27 Cherry 2 3015 +241 89 75 Country Rose 4 3016 +153 81 0 Bronze 3142 + 0 125 103 Lincoln Green 3325 +138 199 223 Chambray Blue 2 4004 +254 213 0 Sunflower 4117 +136 109 88 Prairie Beige 4371 + 94 203 226 Periwinkle 3 4419 + 0 102 177 Blue Suede 2 4453 + 0 103 102 Azure 2 4627 + 0 94 96 Dark Green 2 4735 + 0 52 102 Royal 2 5550 + 0 75 143 Cobalt Blue 2 5551 + 0 40 76 Legion Blue 3 5552 + 26 64 100 Light Navy 2 5553 +114 176 217 Spa Blue 5554 + 0 131 173 Surf Blue 5555 + 0 54 92 Black Pearl 5556 + 0 176 98 Verde Bright Green 2 5557 + 79 70 37 Bark 5558 +208 202 202 Stainless Steel 5559 +209 201 199 Light Silver 2 5829 +163 215 237 Baby Blue 6137 +106 117 123 Light Grey 2 8010 +245 245 243 White 0010 +245 245 243 Natural 0015 + 34 29 26 Black 0020 +234 231 20 Spring Green 0021 +189 215 46 Neon Green 0032 +254 194 0 Golden 0033 +254 199 57 Light Neon Orange 0042 +250 164 27 Neon Orange 0043 +240 90 136 Neon Pink 0046 +240 76 83 Neon Rose 0047 +187 0 103 Neon Fuchsia 0054 +217 218 210 Light Silver 0101 +167 180 185 Dove Greay 0102 + 0 104 170 China Blue 0104 +158 173 180 Silver Moon 0107 + 45 175 163 Aqua 0109 +129 144 149 Dove Grey 2 0111 +125 129 130 Ash 0112 + 67 87 94 Grey 0114 + 67 86 93 Grey 2 0115 + 68 78 88 Charcoal 0116 + 34 0 0 Greyhound 0117 + 56 99 90 Gray Cat 0118 +243 112 34 Saffron 0134 +241 90 33 Heart 0135 + 34 190 189 Turquoise 0138 + 0 53 89 Salem Blue 0142 +224 144 73 Sienna 0146 +240 240 223 Maize 0165 +181 0 51 Cherry 0187 +210 1 67 Rosewood 0190 +181 40 74 Jockey Red 0213 +123 22 66 Russet 0216 + 0 81 58 Hedge 0240 + 0 21 34 Greyhound 2 0247 +244 132 86 Hazel 0253 +220 102 28 Hazel 2 0255 +237 47 33 Country Rose 0266 +254 195 75 Crocus 0286 +253 229 217 Soft Buff 0301 +248 213 207 Cotton Candy 0302 +247 225 214 Seashell 0303 +249 198 197 Pink Glaze 0304 +245 153 176 Petunia 0305 +246 178 189 Pueblo Pink 0306 +244 156 178 Desert Rose 0307 +242 134 166 Shrimp 0309 +240 89 130 Bashful Pink 0313 +240 89 130 Bashful Pink 2 0315 + 0 152 73 Grass Green 0317 +241 135 181 Pink Sorbet 0321 +239 80 144 Cabernet 0324 +216 69 140 Cabernet 2 0325 +218 103 142 Cabernet 3 0332 +182 53 91 Burgundy 0333 +176 154 200 Tulip 0343 +210 162 200 Opalescent Pink 0345 +166 95 151 Crepe Myrtle 0347 +102 35 132 Plum 0348 +123 21 68 Dark Maroon 0361 + 75 21 79 Hortensia Plum 0362 +123 21 60 Russet 2 0363 +250 222 223 Petal Pink 0376 +148 181 222 Powder Blue 0379 +116 169 213 Country Blue 0380 +118 161 206 Violet Blue 0381 +134 166 204 Slate Blue 0382 +168 166 204 Dark Lilac 0383 + 0 102 177 Sapphire 0385 +176 154 200 Purple Aster 0386 +228 209 213 Pink Glaze 2 0387 +166 144 193 Tulip 2 0388 +139 99 170 Deep Purple 0390 +123 80 159 Purple 0392 + 42 21 98 Purple Shadow 0398 +153 190 199 Ice Blue 0402 +102 181 211 Chambray Blue 0403 + 92 146 182 Saxon Blue 0404 + 53 126 167 Slate Blue 2 0405 + 93 155 206 Country Blue 2 0406 + 34 132 197 Windjammer 0409 +165 132 97 Brown Linen 0412 + 0 108 177 Light Royal 0413 + 0 102 177 Blue Suede 0414 + 0 56 115 Cobalt Blue 0415 + 0 43 85 Light Navy 0416 + 0 90 169 Sapphire 2 0417 +253 237 82 Mustard 0419 + 0 39 75 Legion Blue 0422 + 0 40 76 Legion Blue 2 0423 +254 196 63 Marigold 0432 +205 226 216 Pale Green 0442 + 0 143 151 Turquoise Green 0443 + 0 155 183 Periwinkle 0444 + 0 134 187 Periwinkle 0445 + 76 180 207 Periwinkle 2 0446 + 0 116 123 Turquoise Green 2 0447 + 0 90 90 Blue Spruce 0448 + 0 125 103 Shutter Green 0449 + 0 147 125 Azure 0450 + 0 176 98 Grass Green 2 0451 + 20 120 108 Dark Seafoam 0455 +253 207 111 Peach Sherbert 0466 +253 231 210 Beige 0501 +250 201 187 Flesh 0502 +253 221 198 Flesh 2 0503 +251 200 179 Illusion 0504 +247 169 149 Peach 2 0505 +246 160 145 Carnation Pink 0506 +248 163 99 Peachy Pink 0508 +100 56 45 Dark Brown 0513 +246 147 27 Mandarin 0520 +244 115 32 Honeysuckle 0525 +217 84 27 Heart 2 0526 +240 90 89 Country Rose 2 0527 +217 57 43 Flame Red 0528 +181 0 51 Persimmon 0529 +182 39 83 Cranberry 0530 +133 0 55 Cranberry 2 0531 +100 135 165 Slate Blue 3 0541 +197 46 61 Holly Red 0571 +106 106 116 Dark Grey 0585 +136 143 149 Light Grey 0588 +106 117 123 Grey 3 0589 +241 227 139 Custard 0601 +243 227 142 Wheat 0602 +254 241 110 Pale Yellow 0604 +253 229 97 Yellow Rose 0605 +230 176 26 Crocus 2 0609 +254 232 147 Wheat 2 0612 +243 234 161 Custard 2 0613 +210 169 0 Harvest Gold 0616 +197 149 83 Caramel 0619 +188 138 67 Honey 0620 +186 129 58 Applespice 0621 +223 135 27 Cinnamon 0624 +246 235 203 Tusk 0627 +185 142 100 Fawn 0628 +243 242 152 Pale Yellow 2 0632 +238 235 65 Yellow 0633 +243 238 94 Yellow Rose 2 0635 +254 195 33 Crocus 3 0641 +252 184 21 Crocus 4 0642 +253 204 26 Tangerine 0646 +247 167 56 Cantelope 0649 +243 112 34 Saffron 2 0650 +243 111 34 Saffron 3 0651 +209 172 42 Amber 0652 +157 163 115 Reed Green 0653 +207 139 42 Copper 0654 + 90 86 0 Cactus 0655 + 92 96 95 Volcano 0675 + 0 143 151 Turquoise Green 3 0688 + 0 77 55 Dark Green 0695 +237 47 33 Country Rose 3 0700 +254 203 0 Crocus 5 0763 + 0 153 73 Christmas Green 0777 + 0 85 150 Royal 0806 + 0 90 169 Jay Blue 0809 +240 241 227 Maize 2 0811 +254 230 192 Bone 0812 +231 207 173 Tan 0814 +217 199 153 Taupe 0815 +254 219 187 Peach 0818 +204 150 124 Wicker 0819 + 0 148 126 Teal 0825 +238 240 227 Teal 0828 +202 207 203 Barely Beige 0829 +203 150 132 Cafe Au Lait 0830 +245 157 135 Illusion 2 0831 +212 131 110 Dusty Peach 0832 +150 92 68 Bunny Brown 0833 +124 107 100 Smoky Taupe 0836 +179 82 63 Napa Red 0838 +158 52 21 Cappacino 0839 +137 46 0 Burnished Copper 0840 +128 73 42 Date 0841 +181 155 19 Bright Gold 0842 +168 120 54 Caramel 2 0843 +119 132 42 Seaweed 0845 +129 93 71 Nutmeg 0854 +117 80 0 Honcho Brown 0857 +119 69 0 Nutmeg 2 0858 + 89 21 0 Dark Brown 2 0859 +249 191 190 Light Dusty Rose 0862 +174 112 101 Dusty Rose 0864 +174 112 101 Dark Dusty Rose 0867 +136 117 110 Dusk 0873 + 98 70 46 Coffee 0878 +115 57 45 Twig 0888 + 87 39 0 Teak 0890 + 63 40 50 Mahogany 0891 + 34 0 0 Mahogany 2 0892 +101 200 197 Turquoise 2 0903 +143 205 202 Turquoise Green 4 0904 +205 140 60 Burnt Sienna 0905 + 0 166 158 Turquoise 3 0906 + 32 177 162 Aqua 2 0907 diff --git a/inkstitch/palettes/InkStitch Princess.gpl b/inkstitch/palettes/InkStitch Princess.gpl new file mode 100644 index 0000000..237fcb9 --- /dev/null +++ b/inkstitch/palettes/InkStitch Princess.gpl @@ -0,0 +1,124 @@ +GIMP Palette +Name: Ink/Stitch: Princess +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 1-1 +216 205 212 Grey 1-2 +230 60 102 Pink 1-3 +109 132 72 Lt. Olive 1-4 +255 210 60 Yellow 1-5 + 0 0 0 Black 1-6 + 94 140 176 Mid Blue 1-7 +255 0 3 Red 1-8 + 41 122 30 Green 1-9 + 89 23 23 Brown 1-10 +232 221 192 Cream 2-1 +227 130 70 Gold 2-2 +180 114 83 Light Brown 2-3 +180 45 48 Orange 2-4 +161 63 125 Purple 2-5 +106 112 115 Pewter 2-6 + 0 152 160 Cyan 2-7 + 23 50 142 Dark Blue 2-8 + 60 78 44 Olive 2-9 +128 36 38 Burgundy 2-10 +237 228 216 Palest Ivory 3-1 +232 210 168 Palest Yellow 3-2 +230 198 182 Palest Fawn 3-3 +235 208 203 Palest Peach 3-4 +238 200 220 Palest Pink 3-5 +220 216 225 Palest Grey 3-6 +209 216 231 Palest Blue 3-7 +206 250 244 Palest Aqua 3-8 +155 182 133 Palest Green 3-9 +211 187 213 Palest Mauve 3-10 +182 200 225 Light Blue 4-1 +135 160 212 Powder Blue 4-2 +114 119 199 Sky Blue 4-3 + 62 95 151 Slate Blue 4-4 + 85 87 122 Storm Blue 4-5 + 38 42 92 Denim 4-6 + 10 75 140 Petrel Blue 4-7 + 17 27 94 Imperial Blue 4-8 + 14 34 114 Royal Blue 4-9 + 18 17 59 Navy Blue 4-10 +230 120 80 Copper 5-1 +215 107 60 Golden Brown 5-2 +110 40 25 Tan 5-3 +116 37 20 Bark 5-4 + 75 27 18 Dark Oak 5-5 +130 0 0 Russet 5-6 + 80 20 18 Mahogany 5-7 +120 84 54 Mushroom 5-8 + 91 60 17 Khaki 5-9 + 68 1 0 Dark Chocolate 5-10 +248 189 155 Light Salmon 6-1 +243 138 103 Salmon 6-2 +242 82 56 Tangerine 6-3 +230 145 120 Blush 6-4 +184 90 60 Bronze 6-5 +232 41 37 Scarlet 6-6 +202 32 23 Rust 6-7 +210 4 20 Carmine 6-8 +231 0 28 Ruby 6-9 +224 47 52 Antique Red 6-10 +144 214 130 Light Jade 7-1 +158 164 70 Pistachio 7-2 +170 201 60 Fresh Green 7-3 + 75 148 81 Sage 7-4 + 64 96 64 Teal 7-5 + 54 143 52 Bright Green 7-6 + 41 118 66 Jade 7-7 + 58 130 60 Leaf Green 7-8 + 30 145 41 Emerald 7-9 + 11 96 32 Dark Green 7-10 +245 192 200 Sugar Pink 8-1 +250 170 190 Petal Pink 8-2 +250 134 160 Rose Pink 8-3 +208 102 144 Passion Pink 8-4 +190 52 85 Dusky Rose 8-5 +241 105 133 Light Cerise 8-6 +239 91 111 Dusky Pink 8-7 +220 0 74 Cerise 8-8 +255 0 118 Fuschia 8-9 +149 36 80 Raspberry 8-10 +244 241 236 Platinum 9-1 +185 164 183 Silver Fox 9-2 +176 176 187 Sleet Grey 9-3 +116 121 146 Silver Blue 9-4 +150 140 142 Silver Moon 9-5 +138 125 102 Willow 9-6 +102 83 102 Dark Grey 9-7 + 86 83 108 Steel 9-8 + 75 71 80 Midnight 9-9 + 36 36 54 Seal 9-10 +162 251 230 Pacific Mist 10-1 +184 231 202 Mint 10-2 +149 244 219 Aqua 10-3 + 49 214 227 Capri 10-4 + 70 140 145 Lagoon 10-5 + 21 151 174 Kingfisher 10-6 + 51 142 103 Lido 10-7 + 40 111 68 Tropical Green 10-8 + 34 96 100 Deep Atlantic 10-9 + 40 67 70 Ocean Depths 10-10 +255 210 220 Delicate Mauve 11-1 +225 186 233 Pale Lilac 11-2 +159 107 156 Lilac 11-3 +196 102 168 Lavender 11-4 +151 76 148 Violet 11-5 +189 75 151 Clematis 11-6 + 93 59 123 Imperial Purple 11-7 +142 95 196 Amethyst 11-8 +129 58 126 Deep Violet 11-9 + 63 53 102 Cassis 11-10 +254 246 196 Pale Lemon 12-1 +248 187 85 Mimosa 12-2 +251 251 66 Lime 12-3 +249 210 113 Daffodil 12-4 +215 155 96 Sunkissed 12-5 +245 180 34 Golden Lights 12-6 +255 124 28 Soleil 12-7 +225 72 28 Golden Glory 12-8 +211 131 71 Sunburst 12-9 +214 92 48 Marigold 12-10 diff --git a/inkstitch/palettes/InkStitch RAL.gpl b/inkstitch/palettes/InkStitch RAL.gpl new file mode 100644 index 0000000..22028e0 --- /dev/null +++ b/inkstitch/palettes/InkStitch RAL.gpl @@ -0,0 +1,198 @@ +GIMP Palette +Name: Ink/Stitch: RAL +Columns: 4 +# RGB Value Color Name Number +214 199 148 Green Beige 1000 +217 186 140 Beige 1001 +214 176 117 Sand Yellow 1002 +252 163 41 Signal Yellow 1003 +227 150 36 Golden Yellow 1004 +201 135 33 Honey Yellow 1005 +224 130 31 Maize Yellow 1006 +227 122 31 Daffodil Yellow 1007 +173 122 79 Brown Beige 1011 +227 184 56 Lemon Yellow 1012 +255 245 227 Oyster White 1013 +240 214 171 Ivory 1014 +252 235 204 Light Ivory 1015 +255 245 66 Sulfur Yellow 1016 +255 171 89 Saffron Yellow 1017 +255 214 77 Zinc Yellow 1018 +163 140 122 Grey Beige 1019 +156 143 97 Olive Yellow 1020 +252 189 31 Rape Yellow 1021 +252 184 33 Traffic Yellow 1023 +181 140 79 Ochre Yellow 1024 +255 255 10 Luminous Yellow 1026 +153 117 33 Curry 1027 +255 140 26 Melon Yellow 1028 +227 163 41 Broom Yellow 1032 +255 148 54 Dahlia Yellow 1033 +247 153 92 Pastel Yellow 1034 +224 94 31 Yellow Orange 2000 +186 46 33 Red Orange 2001 +204 36 28 Vermilion 2002 +255 99 54 Pastel Orange 2003 +242 59 28 Pure Orange 2004 +252 28 20 Luminous Orange 2005 +255 117 33 Luminous Bright Orange 2007 +250 79 41 Bright Red Orange 2008 +235 59 28 Traffic Orange 2009 +212 69 41 Signal Orange 2010 +237 92 41 Deep Orange 2011 +222 82 71 Salmon Orange 2012 +171 31 28 Flame Red 3000 +163 23 26 Signal Red 3001 +163 26 26 Carmine Red 3002 +138 18 20 Ruby Red 3003 +105 15 20 Purple Red 3004 + 79 18 26 Wine Red 3005 + 46 18 26 Black Red 3007 + 94 33 33 Oxide Red 3009 +120 20 23 Brown Red 3011 +204 130 115 Beige Red 3012 +150 31 28 Tomato Red 3013 +217 102 117 Antique Pink 3014 +232 156 181 Light Pink 3015 +166 36 38 Coral Red 3016 +209 54 84 Rose 3017 +207 41 66 Strawberry Red 3018 +199 23 18 Traffic Red 3020 +217 89 79 Salmon Pink 3022 +252 10 28 Luminous Red 3024 +252 20 20 Luminous Bright Red 3026 +181 18 51 Raspberry Red 3027 +166 28 46 Orient Red 3031 +130 64 128 Red Lilac 4001 +143 38 64 Red Violet 4002 +201 56 140 Heather Violet 4003 + 92 8 43 Claret Violet 4004 + 99 61 156 Blue Lilac 4005 +145 15 102 Traffic Purple 4006 + 56 10 46 Purple Violet 4007 +125 31 122 Signal Violet 4008 +158 115 148 Pastel Violet 4009 +191 23 115 Telemagenta 4010 + 23 51 107 Violet Blue 5000 + 10 51 84 Green Blue 5001 + 0 15 117 Ultramarine Blue 5002 + 0 23 69 Sapphire Blue 5003 + 3 13 31 Black Blue 5004 + 0 46 122 Signal Blue 5005 + 38 79 135 Brillant Blue 5007 + 26 41 56 Gray Blue 5008 + 23 69 112 Azure Blue 5009 + 0 43 112 Gentian Blue 5010 + 3 20 46 Steel Blue 5011 + 41 115 184 Light Blue 5012 + 0 18 69 Cobalt Blue 5013 + 77 105 153 Pigeon Blue 5014 + 23 97 171 Sky Blue 5015 + 0 59 128 Traffic Blue 5017 + 56 148 130 Turquoise Blue 5018 + 10 66 120 Capri Blue 5019 + 5 51 51 Ocean Blue 5020 + 26 122 99 Water Blue 5021 + 0 8 79 Night Blue 5022 + 46 82 143 Distant Blue 5023 + 87 140 181 Pastel Blue 5024 + 51 120 84 Patina Green 6000 + 38 102 41 Emerald Green 6001 + 38 87 33 Leaf Green 6002 + 61 69 46 Olive Green 6003 + 13 59 46 Blue Green 6004 + 10 56 31 Moss Green 6005 + 41 43 36 Grey Olive 6006 + 28 38 23 Bottle Green 6007 + 33 33 26 Brown Green 6008 + 23 41 28 Fir Green 6009 + 54 105 38 Grass Green 6010 + 94 125 79 Reseda Green 6011 + 31 46 43 Black Green 6012 +117 115 79 Reed Green 6013 + 51 48 38 Yellow Olive 6014 + 41 43 38 Black Olive 6015 + 15 112 51 Turquoise Green 6016 + 64 130 54 Yellow Green 6017 + 79 168 51 May Green 6018 +191 227 186 Pastel Green 6019 + 38 56 41 Chrome Green 6020 +133 166 122 Pale Green 6021 + 43 38 28 Olive Drab 6022 + 36 145 64 Traffic Green 6024 + 74 110 51 Fern Green 6025 + 10 92 51 Opal Green 6026 +125 204 189 Light Green 6027 + 38 74 51 Pine Green 6028 + 18 120 38 Mint Green 6029 + 41 138 64 Signal Green 6032 + 66 140 120 Mint Turquoise 6033 +125 189 181 Pastel Turquoise 6034 +115 133 145 Squirrel Grey 7000 +135 148 166 Silver Grey 7001 +122 117 97 Olive Grey 7002 +112 112 97 Moss Grey 7003 +156 156 166 Signal Grey 7004 + 97 105 105 Mouse Grey 7005 +107 97 87 Beige Grey 7006 +105 84 56 Khaki Grey 7008 + 77 82 74 Green Grey 7009 + 74 79 74 Tarpaulin Grey 7010 + 64 74 84 Iron Grey 7011 + 74 84 89 Basalt Grey 7012 + 71 66 56 Brown Grey 7013 + 61 66 82 Slate Grey 7015 + 38 46 56 Anthracite Grey 7016 + 26 33 41 Black Grey 7021 + 61 61 59 Umbra Grey 7022 +122 125 117 Concrete Grey 7023 + 48 56 69 Graphite Grey 7024 + 38 51 56 Granite Grey 7026 +145 143 135 Stone Grey 7030 + 77 92 107 Blue Grey 7031 +189 186 171 Pebble Grey 7032 +122 130 117 Cement Grey 7033 +143 135 112 Yellow Grey 7034 +212 217 219 Light Grey 7035 +158 150 156 Platinum Grey 7036 +122 125 128 Dusty Grey 7037 +186 189 186 Agate Grey 7038 + 97 94 89 Quartz Grey 7039 +158 163 176 Window Grey 7040 +143 150 153 Verkehrsgrau A 7042 + 64 69 69 Verkehrsgrau B 7043 +194 191 184 Silk Grey 7044 +143 148 158 Telegrau 1 7045 +120 130 140 Telegrau 2 7046 +217 214 219 Telegrau 4 7047 +125 92 56 Green Brown 8000 +145 82 46 Ocher Brown 8001 +110 59 48 Signal Brown 8002 +115 59 36 Clay Brown 8003 +133 56 43 Copper Brown 8004 + 94 51 31 Fawn Brown 8007 + 99 61 36 Olive Brown 8008 + 71 38 28 Nut Brown 8011 + 84 31 31 Red Brown 8012 + 56 38 28 Sepia Brown 8014 + 77 31 28 Chestnut Brown 8015 + 61 31 28 Mahogany Brown 8016 + 46 28 28 Chocolate Brown 8017 + 43 38 41 Grey Brown 8019 + 13 8 13 Black Brown 8022 +156 69 41 Orange Brown 8023 +110 64 48 Beige Brown 8024 +102 74 61 Pale Brown 8025 + 64 46 33 Terra Brown 8028 +255 252 240 Cream 9001 +240 237 230 Grey White 9002 +255 255 255 Signal White 9003 + 28 28 33 Signal Black 9004 + 3 5 10 Jet Black 9005 +166 171 181 White Aluminium 9006 +125 122 120 Grey Aluminium 9007 +250 255 255 Pure White 9010 + 13 18 26 Graphite Black 9011 +252 255 255 Traffic White 9016 + 20 23 28 Traffic Black 9017 +219 227 222 Papyrus White 9018 diff --git a/inkstitch/palettes/InkStitch Radiant Rayon.gpl b/inkstitch/palettes/InkStitch Radiant Rayon.gpl new file mode 100644 index 0000000..428a9d1 --- /dev/null +++ b/inkstitch/palettes/InkStitch Radiant Rayon.gpl @@ -0,0 +1,106 @@ +GIMP Palette +Name: Ink/Stitch: Radiant Rayon +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black P101 +255 255 255 White P102 +255 241 215 Off White P110 +242 251 215 Sand P115 +237 227 184 Lt Beige P120 +198 174 157 Beige P121 +196 187 157 SandStone P122 +183 172 134 Beachcomber P123 +214 194 158 Dusky Goldenrod P125 +191 172 106 Twilight Harvest P126 +120 96 63 Brown P127 +226 197 126 Sienna P130 +185 138 68 Sienna Rose P131 +163 104 20 Sienna Brass P135 + 94 52 51 Burnished Eggplant P143 + 72 38 38 Spanish Roast P145 +248 244 211 Pearled Gold P195 +242 236 182 Golden Sand P196 +247 244 201 Pearled bronze P200 +253 236 168 Pale Gold P201 +251 242 89 Buttercup P205 +249 233 38 Bright gold P206 +230 196 77 Goldenrod P207 +226 179 14 Brass P210 +248 194 114 Brass Rose P211 +217 166 3 Dusky Brass P212 +218 99 12 Cayenne P215 +220 121 11 Cinnamon P220 +190 168 12 Antique Bronze P224 +190 154 12 Antique Gold P225 +158 129 10 Pickled Olive P226 +205 243 167 Cool Mint P300 +235 101 168 Fresh Mint P305 +115 190 12 Vivid Mint P306 +194 218 112 Grey Moss P307 + 96 115 30 Deep Moss P308 + 80 149 38 New Pine P310 + 97 91 26 Dusky Spruce P312 + 93 96 26 Dusky Pine P313 + 50 66 17 Black Pine P314 +196 210 87 Spring Fern P315 +156 139 41 Olive P316 + 35 120 35 Deep Olive P320 + 98 104 26 Golden Pine P325 +225 249 204 Frosted Wintergreen P400 + 86 203 128 Deep Wintergreen P405 + 51 89 9 Christmas Fir P407 +209 250 230 Morning Cyan P408 +134 194 233 Dusky Cyan P409 + 52 139 113 Mountain Lake P410 + 38 111 102 Lake Shadows P411 + 48 129 104 Lake Forest P415 + 22 75 69 Midnight Lake P416 +225 247 244 Winter Morning P420 +208 240 253 Pearled Coneflower P421 +203 213 221 winter Haze P422 +117 120 134 Russina Blue P423 +104 107 119 Charcoal Blue P424 +172 211 223 Summer morning P425 + 48 105 122 Harbor P426 +131 153 186 Cornflower P427 + 92 151 194 Dusky Harbor P428 + 39 65 92 Harbor Twilight P429 + 46 65 114 Royal Blue P430 + 69 81 101 Suskty Navy P431 + 63 60 96 Deep Navy P435 +253 232 236 Frosted Rose P500 +250 190 191 Rose P501 +252 216 216 Pearled Rose P505 +247 155 197 Tea Rose P506 +241 139 221 Vivid Rose P507 +230 159 155 Salmon Rose P510 +177 37 151 Dusty Fuschia P515 +193 13 113 Light Rose P520 +213 0 0 Paprika Red P525 +155 0 0 Cherrywood Red P526 +126 10 65 Dusty Burgundy P530 +111 9 57 Burgandy P531 +188 14 97 Pearld Burgandy P535 + 86 7 65 Syrah P540 +252 228 173 Blonde P600 +254 218 188 Platinum Rose P605 +253 201 166 Dusty Salmon P606 +250 183 150 Pearled Salmon P607 +248 162 120 Salmon P610 +255 128 128 Vivid Salmon P612 +244 187 196 Light Mauve P613 +184 161 169 Light Lilac P695 +141 117 143 Antique Lilac P696 +155 136 139 Silver Lilac P697 +207 154 179 Lilac P700 +150 102 168 Twilight Lilac P701 +125 94 168 Lupine P702 + 99 60 104 Royal Eggplant P704 + 91 67 124 Twilight Lupine P705 +220 220 219 Platinum P800 +217 232 215 Quartz P801 +198 187 185 Titanium P802 +187 187 187 Blue Titanium P803 +156 156 146 Anitque Platinum P805 +133 133 120 Hematite P810 + 87 80 79 Stone P815 diff --git a/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl b/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl new file mode 100644 index 0000000..4899053 --- /dev/null +++ b/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl @@ -0,0 +1,456 @@ +GIMP Palette +Name: Ink/Stitch: Robison-Anton Polyester +Columns: 4 +# RGB Value Color Name Number +255 240 248 Pink Cascade 9026 +255 244 248 Light Pink 5543 +255 208 232 Pink 5523 +255 192 224 Dusty Rose 5675 +255 216 232 Petal Pink 7701 +255 216 216 Pink Joy 9030 +255 204 208 Pink Sham 9078 +255 224 224 Ginger Jar 9080 +255 236 232 Winter Almond 9069 +232 200 200 Grape 5572 +255 216 208 Wild Ginseng 9045 +208 168 168 Salmon 5599 +255 200 176 Heather Mist 9070 +208 156 160 Toasted Champagne 9063 +184 108 104 K. A. Bronze 5780 +255 148 192 Fairy Tale Pink 9015 +248 188 240 Pink Pompas 9025 +255 132 152 Mauven Maud 9164 +168 84 88 Comfort Pink 9077 +255 192 200 Mountain Rose 5795 +255 156 208 Rose Cerise 5544 +255 120 184 Carnation 5537 +255 188 176 Dancing Salmon 9073 +255 168 168 Shrimp 5546 +168 84 88 Scalloped Coral 9065 +255 100 104 Bitteroot 7709 +128 0 0 Burgundy 5549 +120 0 64 Warm Wine 5796 +104 0 48 Russet 5552 +104 0 48 Wine 5525 + 96 12 48 Salvia Plum 9055 + 72 0 40 Maroon 5676 + 72 0 40 Intense Maroon 5887 + 48 0 24 Royal Crest 9162 +240 116 136 Cabernet 5794 +208 80 120 Passion Rose 5899 +200 56 120 HOt Pink 5560 +136 32 64 Perfect Ruby 5797 +136 0 72 Cherry Stone 5804 +176 20 72 Ruby Glint 5561 +232 72 184 Horizon Pink 9168 +255 100 104 Begonia 5528 +224 100 152 Wild Romance 9007 +184 0 96 Azalea 7712 +192 12 96 Rose Pink 5806 +176 0 80 Pink Bleeding Heart 9012 +208 0 104 Strawberry 5732 +168 0 0 Devil Road 7706 +168 0 48 Cherry Punch 5717 +184 12 0 Candy Apple Red 5807 +168 0 88 Red Coral Bell 9013 +120 12 0 Hollyhock Red 9006 +120 12 0 Toasty Red 9002 +192 16 24 Wild Fire 5567 +184 20 0 Red 5678 +216 12 0 Jockey Red 5581 +192 0 0 Radiant Red 5566 +192 0 0 Red Berry 5718 +255 0 0 Very Red 5719 +232 0 0 Foxy Red 5563 +216 12 0 Lipstick 5533 +216 20 24 Miami Artillery 9170 +152 12 0 Scarlet 5519 +152 12 0 Deep Scarlet 5811 +120 12 16 Cranberry 5570 +120 0 0 Carolina Red 5568 +255 236 232 Bisque 5677 +255 204 208 Flesh Pink 5553 +255 188 176 Flamingo 5558 +255 132 136 Melon 5594 +255 148 112 Melonade 7812 +255 116 48 Oriental Poppies 9058 +224 72 0 Honeysuckle 7713 +168 56 0 Orange Glory 9056 +224 244 255 Out Of The Blue 9029 +208 232 240 Blue Joy 9032 +208 232 255 Ice Blue 5600 +208 240 240 Cameron Blue 9089 +184 232 255 Sun Blue 5569 +168 208 255 Rockport Blue 5836 +192 212 255 Pastal Blue 5682 +168 212 255 Heron Blue 5825 +152 232 255 Sky Blue 5539 +184 220 255 Baby Blue 5506 +176 176 255 Cristy Blue 5683 +136 196 248 Lake Blue 5604 + 0 156 232 Blue Splendor 9039 + 0 116 168 Ultra Blue 5733 + 0 84 168 Tropic Blue 5734 + 0 88 176 Oriental Blue 5601 + 0 72 144 Blue Moon 9081 + 0 80 160 Copen 5545 + 0 80 160 China Blue 5823 + 0 112 152 Slate Blue 5575 + 0 68 104 Ash 5641 + 0 68 104 Favorite Deep Blue 9075 + 56 112 160 Wonder Blue 5877 + 0 140 200 Mid Windsor 5820 + 0 104 208 California Blue 5689 + 0 88 184 Cerulean 5801 + 0 68 136 Baltic Blue 5741 + 48 100 184 Dolphine Blue 5829 + 0 52 112 Blue 5520 + 0 24 136 Jay Blue 5684 + 0 0 128 Imperial Blue 5602 + 0 0 40 Fleet Blue 5750 + 0 8 88 Blue Ribbon 5739 + 0 8 80 Blue Ink 5740 + 0 0 40 Light Navy 5603 + 0 8 80 PN Navy 5824 + 0 16 88 Light Midnight 5686 + 0 0 56 Navy 5515 + 0 0 40 Midnight Navy 5687 + 0 76 152 Saphire 5580 + 0 0 128 Blue Suede 5738 + 24 20 128 Fire Blue 5736 + 0 12 128 Royal 5510 + 0 52 120 Jamie Blue 5685 + 0 24 136 Empire Blue 5737 + 0 0 112 Nikko Blue 9022 + 0 44 88 Chow Blue 9171 + 0 0 152 Purple Twist 5729 +232 236 255 Paris Blue 5583 +168 168 255 Amanda Lavender 9048 +216 172 255 Sterling 5706 +136 132 192 Lucky Lavender 9064 +192 120 255 Tulip 5586 +144 152 200 Tulip Lavender 9167 + 72 68 136 Mauve 5587 + 80 0 152 Dark Melody 9031 + 88 0 176 Livid Lavender 9166 + 96 0 192 Purple Chariot 9049 + 64 0 104 Purple Maze 5728 + 88 0 168 Vanessa Purple 9057 + 72 0 136 Deep Purple 5803 + 56 16 104 Purple Accent 5731 + 72 0 144 Regal Purple 9021 + 64 0 64 May Nights 9053 + 96 0 96 Dark Purple 5681 + 88 0 104 Mod Purple 9071 + 96 48 96 Purple 5554 + 88 0 168 Iris 5588 +168 72 255 Cindy Purple 9088 +128 0 128 Popular Purple 9019 +208 120 255 Poker Primrose 9011 +136 12 136 Plum 5592 +255 216 255 Arden Lavender 9067 +192 128 255 Russian Saga 9016 +192 132 232 Pansy Purple 9098 +200 128 200 Dwarf Lilac 9009 +255 204 232 Violet 5585 +255 204 232 Liatris Lavender 9004 +255 244 255 Siberian Iris 9041 +255 220 240 Fantasia Pink 9044 +255 204 224 Le Reve Pink 9040 +255 204 224 Exclusive Pink 9074 +255 168 255 Pink Sherbet 9036 +255 176 216 Pink Splendor 9037 +255 128 192 Wild Pink 5559 +136 0 136 New Berry 5800 +176 0 176 Rich Pink 9097 +168 0 80 Passion 5591 +104 0 104 Raspberry Ice 9017 +112 20 56 Purple Ice 9027 + 80 0 40 Aubergine 9046 +184 255 255 Pillow Blue 9059 + 96 164 216 Misty 5608 +120 196 224 Bambino Blue 9079 + 48 188 168 Blue Fringe 9054 + 0 148 152 Marine Aqua 5607 + 0 152 224 Blue Wisteria 9052 + 16 176 192 Surf Blue 5819 + 0 156 160 Angela Blue 9060 + 0 88 88 Mallard Blue 5821 + 48 84 88 Peacock 5810 + 0 132 144 Mountainview 9105 + 0 152 144 Southampton 9143 + 0 84 72 Paradise Green 9104 + 0 84 71 Perpetual Teal 9062 + 0 104 104 Venus Blue 9100 +224 255 255 Light Blue 5522 +240 255 248 Shallow Green 9101 +208 255 232 Sprite 5613 +192 255 224 Nautical Teal 9076 +144 255 255 Alaska Sky 9138 +192 255 223 Herbal Blue 9103 +152 255 200 Mint Julep 5610 + 0 184 176 Sea Glass 9141 + 32 152 120 Turquoise 5504 + 48 148 136 Mystic Teal 5743 + 0 140 144 Teal 5609 + 0 184 184 J. Turquoise 5792 + 56 136 104 Oceanic Green 5746 + 32 156 136 Blue Appeal 9139 + 0 140 112 Tempest Turq 9102 +128 255 192 Breath Of Spring 9140 + 0 156 112 M. D. Green 5745 + 0 172 120 Dark Teal 5809 + 0 144 72 Pine Green 5691 + 32 104 80 Sea Water 9173 + 0 160 120 Inner Sanctum 9142 + 40 68 32 Blue Spruce 5849 + 0 80 0 Newport 5850 + 88 140 88 Endicott Bay 9145 + 48 84 40 Green Bay 5755 +104 192 168 Moss 5578 +208 212 168 Palm Leaf 5541 +112 116 56 Willow 5521 +136 136 80 Kiwi Green 9107 + 80 120 64 Olive 5502 + 72 72 48 Water Lilly 5854 + 72 72 48 Dress Green 5884 + 56 88 48 Harbor Green 5692 + 56 76 48 Ivy 5852 + 48 60 24 Special Green 5805 + 40 60 40 Dark Army Green 5853 + 0 52 40 D. H. Green 7711 + 56 76 24 Alpine Green 9151 + 40 68 32 Field Green 5760 + 0 52 0 Green Sail 5759 + 48 48 24 Teal Appeal 9146 +200 255 248 Pale Green 5618 + 0 224 224 Sea Mist 5693 +128 252 200 Green Pearl 5752 +144 208 144 Seafoam 5611 +176 220 192 Tealeaf 9106 + 0 128 64 Isle Green 5612 + 0 184 0 Cone Forest 9144 + 0 120 24 Jade 5813 + 40 136 88 Peppermint 5690 + 24 100 0 Green Forest 5748 + 0 88 40 Fern Green 5749 + 0 120 64 Green Forest 5751 + 0 68 0 Evergreen 5615 + 0 68 0 Evergreen 5615 + 0 112 0 Green Petal 5758 + 80 116 56 Holly 5623 + 40 112 64 Deep Green 5584 + 72 140 56 Green 5509 + 0 132 0 Irish Green 5812 + 40 116 56 Dark Green 5508 + 0 148 40 Conner Green 9092 + 0 147 40 Veggie Green 9091 + 56 176 64 Light Kelly 7710 + 48 188 56 Kelly 5540 + 0 208 0 Emerald 5514 +224 255 224 Pastel Green 5855 +184 255 224 Mint 5538 +184 255 184 Slightly Green 9149 +168 255 168 Green Oak 5619 + 0 188 96 Nile 5511 +144 208 152 Glendale 9153 + 96 140 48 Peapod 5757 +144 212 104 Pastoral Green 5621 +120 188 128 Envy Green 9108 +120 184 104 Rolling Meadow 9148 +160 188 88 Eventide Green 9147 + 80 144 64 Spruce 5579 + 96 140 48 Peapod 5757 + 0 168 0 Ming 5622 + 0 244 0 Erin Green 5620 +184 180 104 Limerick 9121 +168 168 0 Tamarack 5530 +200 204 0 Foliage Green 5842 +255 255 136 Meilee Green 9118 +255 255 136 Daiqueri Ice 9120 +192 196 56 Finch 9035 +216 172 96 Black Eyed Susie 5861 +192 176 80 Cloth Of Gold 9005 +192 176 80 Cheviot Gold 9124 +168 172 0 Golder Slipper 9084 +168 132 56 Autumn Green 5843 +104 96 48 Allegheny 9119 +136 136 72 Cone 9154 +104 104 16 Palmetto 5529 +176 176 0 Mosstone 9150 + 96 120 32 Meadow 5526 +104 104 16 Boneaire Green 9152 +112 120 56 Olive Drab 5617 + 0 52 40 Beau Geste 9122 + 0 53 40 Castlewalk Green 9155 +248 232 134 Green Ice 9018 +255 255 152 Coronation Gold 9014 +255 255 104 Lemon 5625 +255 254 150 Celery 5616 +255 255 120 Lemon Fluff 9003 +255 255 56 Daffodil 5626 +255 252 30 Sunflower 5762 +255 252 24 Golden Stargazor 9051 +255 252 31 Moonbeam 5860 +255 252 0 Ombre Gold 9001 +255 255 64 Canary 5535 +255 236 0 Manila 5766 +255 240 40 Goldenrod 5542 +255 220 24 Warm Sunshine 9172 +240 176 0 Pollen Gold 5856 +240 192 0 Day Lilly 9010 +255 232 88 Star Gold 5708 +255 208 32 Cornsilk 5695 +240 224 0 Scholastic 5765 +255 188 136 Pooh 9109 +255 192 48 Brite Yellow 5696 +255 164 80 Nectar 5764 +255 184 16 Merit Gold 5763 +240 208 32 Marigold 5516 +255 168 80 Mango 5694 +255 156 0 Sun Gold 5512 +120 12 16 Cranberry 5570 +255 164 120 Yellow Mist 5709 +232 176 40 Yellow 5513 +200 148 40 Golden Chair 9050 +216 188 120 Mustard 5631 +152 116 32 Copper 5595 +255 84 80 Grilled Orange 9072 +232 76 0 Orangeade 5767 +224 0 0 Paprika 5536 +255 52 48 Vibrant Orange 9066 +255 92 88 Indian Summer 9023 +184 0 0 Saffron 5629 +183 0 0 Scarlet Flame 9020 +154 0 0 Auburn 5772 +152 0 0 Terra Cotta 5634 +136 68 0 Dark Rust 5505 +255 140 88 Summer Splendor 9061 +255 144 32 Complex Orange 9068 +255 188 160 Tawny 5556 +255 220 200 Shangri La 9047 +208 104 32 Rust 5589 +232 128 80 Deviled Orange 9038 +255 92 24 Orange 5518 +255 108 40 Golden Poppy 5630 +224 112 0 Sunburst 9008 +255 108 0 Dark Texas Orange 5769 +255 200 128 Visor Gold 5698 +216 192 96 Ashley Gold 5701 +224 192 128 Topaz 5700 +208 140 88 Honey 5547 +152 104 0 Almond 5779 +200 116 32 Toast 5531 +120 60 0 Hazel 5781 +104 52 0 Date 5590 + 88 44 48 Chocolate 5527 + 96 48 24 Sienna 5702 +255 255 150 Wheat 5761 +248 232 136 Maize 5564 +255 252 112 Glow 5534 +160 160 80 Pistachio 5550 +160 160 79 Tommy Tan 9123 +160 156 80 Golden Tan 5870 +160 156 0 Ginger 5633 +208 204 0 Shimmering Gold 5711 +208 203 0 Old Gold 5501 +104 108 24 Temple Gold 9165 +192 132 48 Terry Tan 9131 +192 156 72 Sweet Dreams 9130 +224 204 144 Primedor 9132 +216 188 96 Rice Paper 9125 +208 188 80 Penny 5632 +232 212 152 Candy Tan 9094 +232 212 136 Taupe 5598 +200 196 136 Rattan 5774 +152 148 72 French Toast 9086 +112 112 56 Beige 5524 +104 108 48 Bronze 5815 +120 100 40 Sand Dune 5777 +240 216 144 Bali 9136 +232 208 144 Tan 5573 +255 252 240 Ivory 5635 +248 236 200 Seashell 5776 +248 240 200 Ecru 5532 +240 196 160 Coast Point 9160 +255 204 152 Opaline 5773 + 96 48 0 Cocoa Mulch 5788 + 96 72 40 Light Cocoa 5778 +120 100 40 Lucrene 9133 +232 208 152 New Gold 5699 +255 232 208 Foundation 9034 +255 176 104 Bamboo 5638 +248 232 184 Gold 5503 +168 140 56 Wicker 5789 +255 208 160 Amber Beige 5636 + 48 52 0 Sonesta Brown 9156 + 88 44 0 Brownstone 9042 + 80 40 0 Coffee Bean 5639 + 80 39 0 Brown 5551 + 48 48 0 Espresso 5637 + 0 32 0 Mahogany 5864 + 88 88 48 Cajun Mist 9137 + 48 48 0 Dark Brown 5672 + 80 80 80 Happy Trail 9087 +151 158 150 Carbondale 9128 +164 176 168 Decorator Tan 9135 +208 204 208 Basket Beige 9126 +128 140 128 Turkish Tan 9134 + 72 76 40 Mars Green 9129 + 48 60 48 Grey Wool 9158 + 32 32 32 Smokey 5787 +104 100 88 Vassar Chic 9111 + 72 72 72 Black Chrome 5841 + 64 68 72 Aged Charcoal 5865 +104 100 104 Metal 5707 +136 136 136 Twilight 5517 +152 152 152 Cinder 5704 +112 116 112 Bellaire Grey 9110 +120 116 120 Silvery Gray 5784 +112 108 112 Delano Grey 9112 + 80 72 72 Coal Hill 9163 +120 108 112 Storm Gray 5786 +152 156 152 Fairview Grey 9114 +208 212 208 Cloud 5783 +192 200 192 Melville 9113 +120 120 120 GS Grey 5802 +112 112 112 Grey Flannel 9117 + 64 64 64 Charcoal 5565 +184 184 184 Skylight 5782 +216 216 216 Saturn Gray 5785 +255 254 255 Chrome 5839 +208 220 208 Storm Gail 9090 +184 192 184 Otter Grey 9115 +208 208 216 Teardrop Grey 9116 +255 255 255 Oyster 5703 +240 240 240 Raindrop 9095 +255 252 255 Hi Ho Silver 9082 +232 228 232 Titanium 9083 +192 192 200 Gray 5507 +184 192 0 TH Gold 5906 +216 220 216 Pearl Grey 5640 +104 108 112 Dover Grey 5705 +255 236 232 Winter Almond 9069 +160 156 168 Steel Gray 5574 +104 104 112 Granite 9099 + 80 72 80 Ducky Mauve 5722 +144 128 128 Satin Wine 5614 + 0 0 0 Black 5596 +245 245 245 Eggshell 5643 +238 238 238 Ice Ballet 9028 +255 255 224 Beige Delight 9024 +255 255 255 Natural White 5642 +248 248 248 Snow White 5597 +208 204 0 Shimmering Gold 5711 +224 0 112 Cheeky Pink 9161 +255 52 56 Neon Red 5712 +240 0 0 Hot Cha Cha 9159 +255 88 24 Neon Orange 5710 +255 164 72 Singh Mist 9157 +232 188 24 Havana Yellow 9127 +255 255 0 Stunning Yellow 9085 +232 232 0 Neon Yellow 5713 + 96 144 40 Neon Green 5814 + 0 72 0 TH Green 5907 + 88 0 0 TH Burgundy 5908 + 0 0 64 TH Navy 5909 diff --git a/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl b/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl new file mode 100644 index 0000000..d2db91e --- /dev/null +++ b/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl @@ -0,0 +1,423 @@ +GIMP Palette +Name: Ink/Stitch: Robison-Anton Rayon +Columns: 4 +# RGB Value Color Name Number +239 204 206 Light Pink 2243 +252 191 201 Pink 2223 +239 198 211 Pink Bazaar 2599 +249 178 183 Pink Mist 2373 +249 175 173 Emily Pink 2374 +252 155 178 Rose 2293 +252 140 153 Rose Cerise 2244 +242 175 193 Carnation 2237 +229 86 109 Shrimp 2246 +244 71 107 Bashful Pink 2248 +229 86 109 Begonia 2228 +249 132 142 Azalea 2412 +242 104 119 Dusty Rose 2375 +216 137 155 Rose Tint 2591 +140 38 51 Burgundy 2249 +124 33 40 TH Burgundy 2608 +122 38 56 Russet 2252 +117 38 61 Pro Firebrand 2622 +119 45 53 Wine 2225 + 89 51 68 Intense Maroon 2587 + 79 33 58 Dark Maroon 2376 +147 22 56 Cabernet 2494 +249 178 183 Mountain Rose 2495 +102 30 43 Warm Wine 2496 +229 86 109 Primrose 2491 +142 35 68 Perfect Ruby 2497 +109 33 63 Brushed Burgundy 2498 +142 35 68 Passion Rose 2499 +173 0 117 New Berry 2500 +252 201 198 Petal Pink 2501 +244 191 209 Memphis Belle 2502 +247 191 191 Desert Bloom 2503 +206 0 124 Wild Pink 2259 +237 114 170 Floral Pink 2415 +211 107 158 Hot Pink 2260 +214 2 112 Crimson 2416 +226 40 130 Ruby Glint 2261 +170 0 79 Cherrystone 2504 +170 0 79 Cherry Punch 2417 +234 15 107 Cherry Blossom 2262 +175 30 45 Red Berry 2418 +191 10 48 Jockey Red 2281 +191 10 48 Very Red 2419 +191 10 48 Red 2378 +206 17 38 Foxy Red 2263 +214 40 40 Tuxedo Red 2420 +191 10 48 Lipstick 2233 +196 30 58 Scarlet 2219 +196 30 58 Radiant Red 2266 +163 38 56 Wildfire 2267 +140 38 51 Carolina Red 2268 +117 38 61 Red Jubilee 2421 +153 33 53 Cranberry 2270 +163 38 56 Antique Red 2505 +196 30 58 Devil Red 2506 +175 0 61 Candy Apple Red 2507 +216 28 63 Rosewood 2508 +252 94 114 Bitteroot 2509 +242 196 175 Bisque 2377 +244 204 170 Flesh 2413 +249 186 170 Flesh Pink 2253 +247 191 191 Opal Mist 2255 +249 191 158 Tawny 2256 +249 198 170 Peach 2257 +249 142 109 Melon 2294 +249 165 140 Flamingo 2258 +249 137 114 Coral 2414 +244 63 79 Persimmon 2277 +249 198 170 Peach Blossom 2510 +249 186 170 Illusion 2511 +249 137 114 Melonade 2512 +226 61 40 Honeysuckle 2513 + 0 140 130 Brite Jade 2514 + 0 178 160 Bluestone 2515 + 71 214 193 Aqua Pearl 2516 +135 221 209 Seafrost 2517 + 0 135 137 J. Turquoise 2492 + 45 198 214 Indian Ocean Blue 2518 + 0 165 219 Surf Blue 2519 + 0 163 221 Mid Windsor 2520 + 0 63 84 Deep Windsor 2589 + 0 45 71 Pro Dark Blue 2620 + 0 109 117 Mallard Blue 2521 +155 196 226 Sky Blue 2239 +175 188 219 Lake Blue 2304 + 91 119 204 Pro Lusty Blue 2614 +109 135 168 Slate Blue 2275 +153 214 221 Blue Frost 2305 + 40 196 216 Periwinkle 2306 + 0 173 198 Aquamarine 2307 + 0 160 196 California Blue 2389 + 0 142 214 Baltic Blue 2441 + 0 84 160 Solar Blue 2442 + 0 142 214 Pacific Blue 2388 + 0 163 221 Boo Boo Blue 2730 + 0 112 158 Pro Band Blue 2737 + 0 122 165 Pro Peacock 2740 +201 232 221 Light Blue 2222 + 30 28 119 Royal 2210 + 0 43 127 Blue Suede 2438 + 51 86 135 Imperial Blue 2302 +175 188 219 Bridgeport Blue 2522 + 51 86 135 China Blue 2523 + 38 84 124 Pro Imperial 2612 +119 150 178 Country Blue 2524 +193 201 221 Heron Blue 2525 +119 150 178 Pro Saxon 2624 +102 137 204 Bright Blue 2526 + 89 96 168 Soldier Blue 2527 + 0 81 186 Pro Brilliance 2619 +102 137 204 Atlantis Blue 2528 + 58 117 196 Dolphin Blue 2529 +117 170 219 Caribbean Blue 2530 +196 216 226 Dana Blue 2531 +196 216 226 Cadet Blue 2532 + 96 175 221 Ozone 2533 + 0 61 107 Salem Blue 2534 + 15 43 91 Blue Ribbon 2439 + 25 33 104 Pro Navy 2625 + 43 38 91 Blue Ink 2440 + 0 38 84 Pro Midnight 2613 + 0 38 73 Pro College Blue 2647 + 53 63 91 Light Midnight 2386 + 53 38 79 Fleet Blue 2450 + 17 33 81 Light Navy 2303 + 20 33 61 Flag Blue 2603 + 0 38 84 TH Navy 2609 + 20 33 61 Navy 2215 + 20 33 61 Midnight Navy 2387 +198 209 214 Pastel Blue 2382 +193 201 221 Blue Hint 2598 +181 209 232 Ice Blue 2300 +209 206 221 Paris Blue 2283 +153 186 221 Baby Blue 2206 +175 188 219 Sun Blue 2269 +165 186 224 Cristy Blue 2383 +117 178 221 Ultra Blue 2433 +117 170 219 Tropic Blue 2434 +102 137 204 Blue Horizon 2435 +127 140 191 Oriental Blue 2301 +109 135 168 Copen 2245 + 91 119 204 Jay Blue 2384 + 45 51 142 Blue 2220 + 45 51 142 Sapphire 2280 + 0 51 127 Pro Royal 2627 + 0 56 147 Fire Blue 2436 + 45 51 142 Jammie Blue 2385 + 63 40 147 Empire Blue 2437 + 58 86 79 Enchanted Sea 2535 +132 153 165 Pro Twinkle 2617 +155 170 191 Rockport Blue 2536 + 94 153 170 Wonder Blue 2577 +173 175 170 Traditional Gray 2540 +191 186 175 Steel 2537 +186 183 175 Pro Pearl 2741 +196 193 186 Pro Cool Gray 2733 +204 193 178 Stainless Steel 2538 +209 204 191 Chrome 2539 +173 175 170 Pro Night Sky 2618 +140 137 132 Gull 2731 +104 102 99 Mineral 2729 + 68 61 56 Black Chrome 2541 +221 198 196 Heather 2271 +211 183 163 Grape 2272 +181 147 155 Satin Wine 2314 +142 104 119 Ducky Mauve 2422 +252 191 201 Pale Orchid 2423 +229 191 198 Orchid 2379 +239 198 211 Lavender 2276 +237 196 221 Violet 2285 +181 140 178 Cachet 2424 +201 173 216 Tulip 2286 +226 158 214 Mid Lilac 2588 + 81 38 84 Port Wine 2600 + 81 45 68 Pro Maroon 2616 +142 71 173 Laurie Lilac 2425 +175 114 193 Iris 2288 +155 79 150 Raspberry 2426 +102 17 109 Mulberry 2380 + 99 48 94 Plum Wine 2490 + 30 28 119 Purple Twist 2429 + 51 40 117 Violet Blue 2427 + 53 0 109 Purple Maze 2428 + 43 17 102 Pro Brite Star 2736 + 56 25 122 Pro Violet 2742 + 53 0 109 Pro Purple 2628 +142 71 173 Purple 2254 + 91 2 122 Purple Shadow 2430 + 76 20 94 Dark Purple 2381 +137 119 186 Mauve 2287 + 68 35 94 Purple Accent 2431 +170 0 102 Hot Peony 2590 +206 0 124 Passion 2291 +170 0 79 Strawberry 2432 +158 35 135 Plum 2292 + 94 153 170 Misty 2308 + 96 145 145 Mystic Teal 2443 + 96 145 145 Teal 2309 + 0 63 84 Dark Teal 2444 +147 221 219 Mint Julep 2310 +127 214 219 Turquoise 2204 + 0 114 114 M. D. Green 2445 +112 206 155 Seafoam 2311 +112 206 155 Isle Green 2312 + 53 196 175 Peppermint 2390 + 0 109 117 Oceanic Green 2446 + 0 107 119 Pro Teal 2621 + 0 102 99 Garden Green 2447 + 0 109 102 Pro Green 2735 + 0 140 130 Pine Green 2391 + 0 130 114 Greenstone 2448 + 0 102 99 Fern Green 2449 + 0 109 102 Pro Hunter 2615 +188 193 178 Palm Leaf 2241 +198 214 160 Flite Green 2282 +158 170 153 Willow 2221 +178 216 216 Sprite 2313 +122 168 145 Moss 2278 +122 168 145 Wintergreen 2594 + 0 96 96 Greenforest 2451 + 0 96 86 Pro Forest 2743 + 79 109 94 Harbor Green 2392 + 2 73 48 Evergreen 2315 + 0 68 56 Pro Dark Green 2734 + 43 76 63 Lizzy Lime 2631 + 40 45 38 D. H. Green 2411 +242 234 188 Celery 2316 +204 198 147 Pistachio 2250 + 94 102 58 Olive Drab 2317 +119 145 130 Olive 2202 +201 232 221 Pale Green 2318 +147 221 219 Green Pearl 2452 +147 221 219 Sea Mist 2393 +181 232 191 Mint 2238 +170 221 109 Spruce 2279 +160 219 142 Nile 2211 +181 204 142 Green Oak 2319 +140 214 0 Erin Green 2320 + 86 170 28 Pro Erin 2738 + 51 158 53 Emerald 2214 + 0 122 61 Dark Emerald 2453 + 0 122 61 Light Kelly 2410 + 0 122 61 Kelly 2240 + 0 135 81 Dark Green 2208 + 0 107 63 Fleece Green 2454 + 0 104 84 TH Green 2607 + 30 181 58 Harvest Green 2578 + 0 158 73 Vibrant Green 2579 + 0 158 73 Green Grass 2580 + 0 107 63 Deep Green 2284 + 0 107 84 Green Bay 2455 + 0 124 102 Jungle Green 2597 +163 175 7 Peapod 2456 +127 186 0 Pastoral Green 2321 +127 186 0 Green Dust 2457 +127 186 0 Ming 2322 + 86 142 20 Meadow 2226 +147 153 5 Tamarack 2230 + 86 99 20 Palmetto 2229 + 2 73 48 Green Petal 2458 + 84 119 48 Sage 2595 + 63 73 38 Hedge 2601 + 58 119 40 Green 2209 + 25 56 51 Green Sail 2459 + 33 91 51 Holly 2323 + 38 81 66 Field Green 2460 + 63 73 38 Dress Green 2584 +153 132 10 Foliage Green 2542 +163 130 5 Autumn Green 2543 +137 119 25 Desert Cactus 2544 +112 112 20 Cypress 2545 +132 130 5 Crescent Moon 2546 +226 229 132 Pebblestone 2547 +153 142 7 Sun Shadow 2548 + 0 73 79 Blue Spruce 2549 + 79 109 94 Newport 2550 +119 145 130 Spring Garden 2551 + 84 104 86 Water Lilly 2554 + 12 48 38 Ivy 2552 + 35 58 45 Dark Army Green 2553 + 33 61 48 Army Green 2728 +201 214 163 Pastel Green 2555 +224 170 15 Pollen Gold 2556 +244 226 135 Pale Yellow 2557 +255 198 30 Buttercup 2558 +247 232 170 Tusk 2559 +249 221 22 Moonbeam 2560 +198 160 12 Black Eyed Susie 2561 +163 127 20 Bullion 2562 +247 232 170 Chinese Yellow 2324 +247 232 170 Maize 2264 +234 221 150 Wheat 2461 +249 224 140 Pro Maize 2732 +255 216 127 Glow 2234 +252 216 86 Star Gold 2408 +252 163 17 Mango 2394 +252 163 17 Yellow Mist 2409 +252 163 17 Yellow 2213 +249 221 22 Sunflower 2462 +244 237 71 Lemon 2325 +249 232 20 Daffodil 2326 +252 181 20 Merit Gold 2463 +255 204 73 Cornsilk 2395 +255 198 30 Nectar 2464 +252 191 73 Scholastic 2465 +252 224 22 Canary 2235 +255 198 30 Pro Gold 2626 +252 209 22 Manila 2466 +252 209 22 Goldenrod 2242 +255 204 73 Brite Yellow 2396 +249 155 12 Honeydew 2327 +247 127 0 Pumpkin 2328 +247 73 2 Orangeade 2467 +247 73 2 Sunkist 2397 +249 86 2 Paprika 2236 +249 63 38 Saffron 2329 +249 86 2 Tex Orange 2468 +249 107 7 Orange 2218 +249 99 2 Dark Tex Orange 2469 +165 63 15 Old Dark Tex Orange 2581 +252 135 68 Golden Poppy 2330 +188 79 7 Rust 2289 +175 117 5 Copper 2295 +193 142 96 Light Bronze 2493 +252 206 135 Visor Gold 2398 +255 204 73 Goldenlite 2605 +252 186 94 Honey 2247 +255 204 73 Marigold 2216 +224 170 15 Mustard 2331 +224 170 15 Sun Gold 2212 +224 170 15 Karat 2470 +242 191 73 Penny 2332 +252 206 135 New Gold 2399 +226 214 181 Pro Beige 2630 +198 160 12 Marine Gold 2596 +163 127 20 Ginger 2333 +198 160 12 Shimmering Gold 2471 +191 145 12 Old Gold 2201 +234 178 178 Salmon 2299 +193 56 40 Dark Rust 2205 +160 48 51 Terra Cotta 2334 +175 30 45 Pro Red 2623 +175 30 45 Auburn 2472 +255 240 220 Bone 2582 +255 240 220 Ivory 2335 +247 211 181 Opaline 2473 +237 211 188 Ecru 2232 +170 117 63 Wicker 2489 +211 168 124 Tan 2273 +237 211 181 Cottage Beige 2593 +193 168 117 Rattan 2474 +226 191 155 Gold 2203 +211 168 124 Mocha Cream 2475 +191 145 12 Topaz 2400 +209 142 84 Ashley Gold 2401 +216 181 150 Amber Beige 2336 +214 204 175 Seashell 2476 +255 255 216 Light Maize 2604 +170 117 63 Beige 2224 +107 71 20 Sand Dune 2477 +209 191 145 Taupe 2298 +192 124 120 Pro Brown 2610 +135 96 40 Chocolate 2227 + 96 48 0 Pro Walnut 2629 +117 84 38 Light Cocoa 2478 +178 130 96 Cocoa Mulch 2488 + 89 61 43 Brown 2251 + 89 61 43 Dark Brown 2372 + 63 48 43 Espresso 2337 +193 142 96 Bamboo 2338 +175 117 5 Almond 2479 +186 117 48 Toast 2231 +117 84 38 Sienna 2402 +178 107 112 KA Bronze 2480 +255 136 136 Pro Cinnamon 2611 +155 79 25 Date 2290 +155 79 25 Hazel 2481 + 91 45 40 Coffee Bean 2339 + 89 61 43 Dogwood 2563 + 63 48 43 Mahogany 2564 + 61 48 40 Best Brown 2566 + 99 58 17 Mushroom 2567 +193 168 117 Perfect Tan 2568 +122 91 17 Earthen Tan 2569 +193 168 117 Golden Tan 2570 +242 191 73 14 kt. Gold 2586 +242 206 104 TH Gold 2606 +216 140 2 24 kt. Gold 2602 +193 181 165 Platinum 2571 +153 137 124 Pro Gray 2739 +173 160 122 Grayrod 2572 +173 160 122 Pewter 2573 +248 248 248 Aspen White 2574 +102 89 76 Dark Taupe 2575 + 73 53 51 Egyptian Brown 2576 +255 255 245 Oyster 2403 +221 198 196 Gray 2207 +219 211 211 Pearl Gray 2340 +216 204 209 Steel Gray 2274 +204 193 198 Skylight 2482 +175 170 163 Cloud 2483 +173 175 170 Silver Steel 2592 +145 150 147 Banner Gray 2585 +140 137 132 Silvery Gray 2484 +204 193 198 Cinder 2404 +219 211 211 Saturn Gray 2485 +204 193 198 Dover Gray 2405 +178 168 181 Storm Gray 2486 +168 147 173 Sterling 2406 +102 109 112 Metal 2407 +104 102 99 Twilight 2217 + 68 61 56 Aged Charcoal 2565 +119 119 114 Charcoal 2265 + 53 56 66 Smokey 2487 + 58 73 114 Ash 2341 + 28 38 48 Black 2296 +250 250 255 Snow White 2297 +255 255 235 Natural White 2342 +255 255 235 Eggshell 2343 diff --git a/inkstitch/palettes/InkStitch Royal Polyester.gpl b/inkstitch/palettes/InkStitch Royal Polyester.gpl new file mode 100644 index 0000000..efc142d --- /dev/null +++ b/inkstitch/palettes/InkStitch Royal Polyester.gpl @@ -0,0 +1,477 @@ +GIMP Palette +Name: Ink/Stitch: Royal Polyester +Columns: 4 +# RGB Value Color Name Number +222 78 52 Orange P046 +243 242 248 Silver Blue WHITE + 31 26 28 Midnight Blue BLACK +255 255 255 Snow White P001 +250 248 223 Pale Sea Foam P002 +248 245 204 Ecru P003 +248 241 150 Mustard P004 +255 242 68 Lemon P005 +251 248 107 Pale Yellow P006 +255 230 77 Mid Gold P007 +239 213 54 Sunburst P008 +255 207 62 Yellow P009 +241 229 171 Tan P010 +238 189 96 Golden Cream P011 +242 152 56 Gold / Orange P012 +247 171 119 Nutmeg Medium Light P013 +255 160 47 Orange P014 +201 126 35 Pollen Gold P015 +200 184 89 Ginger P016 +242 202 89 Primrose Yellow P017 +221 174 44 Light Orange P018 +234 216 228 Pale Pink P019 +235 201 218 Palest Pink P020 +242 190 213 Memphis Belle P021 +239 176 207 Pale Pink P022 +243 160 188 Salmon Pink P023 +215 90 122 Cranberry medium P024 +230 60 107 Pink P025 +230 60 108 Pink P025 +228 40 98 Med. Rose P026 +228 40 99 Med. Rose P026 +209 107 157 Hot Pink P027 +204 63 116 Pink Rapture P028 +230 219 223 Light Orange / Red P029 +239 189 180 Peach Skin P030 +235 190 211 Light Pink P031 +231 152 158 Sea Pink P032 +239 147 158 Carmine Rose Medium Light P033 +207 98 119 Hot Red P034 +199 107 118 Med Plum P035 +199 107 119 Med Plum P035 +192 77 74 Orange P036 +236 202 193 Demure P037 +231 205 208 Light Pink P038 +241 179 164 Soft Coral P039 +244 179 159 Blossom P040 +228 122 96 Medium Orange P041 +235 135 75 Gold P042 +234 128 70 Gold P043 +239 132 78 Gold P044 +223 74 50 Light Bronze P045 +210 24 35 Foxy Red P047 +196 66 52 Rococco Red P048 +210 26 26 Scarlet Red P049 +210 26 27 Scarlet Red P049 +184 67 75 Geranium P050 +235 125 126 Confetti P051 +205 56 58 Dark Punch P052 +180 59 64 Dusky Rose P053 +166 39 46 Red Berry P054 +230 244 255 White P055 +189 216 243 Ice Blue P056 +169 202 255 Medium Blue P057 +122 159 230 Medium Blue P058 +105 190 245 River Mist P059 +200 209 248 Pastal Blue P060 +109 143 232 Medium Blue P061 +139 176 247 Medium Blue P062 +105 142 230 Bright Blue P063 + 25 58 173 Royal Blue P064 + 26 81 198 Smurf Blue P065 + 31 52 145 Dark Blue P066 + 95 111 170 Violet P067 + 32 44 92 Denim P068 + 17 24 105 Imperial Blue P069 + 31 37 61 Darkest Navy Blue P070 + 47 88 90 Peacock P071 + 31 65 75 Deep Windsor P072 +234 201 248 Lilac P073 +206 123 215 Lt. Purple P074 +224 160 234 Hyacinth P075 +201 107 203 Purple P076 +152 74 194 Mulberry P077 +172 109 179 Iris P078 +172 109 178 Iris P078 + 74 7 104 Royal Purple P079 + 66 13 121 Purple Maze P080 +144 65 192 Amethyst P081 +102 30 155 Dark Purple P082 + 73 16 145 Regal Purple P083 + 51 12 119 Purple Maze P084 +122 129 210 Violet P085 + 59 30 114 Purple Maze P086 + 87 81 151 Med. Purple P087 +102 35 132 Purple Twist P088 + 93 65 106 Bright Plum P089 + 48 40 91 Dark Navy P090 +208 245 38 Fluorescent Yellow P091 +192 242 231 Sky Blue P092 +154 227 234 Aqua P093 +192 237 255 Sun Blue P094 + 90 170 233 Medium Blue P095 + 50 142 217 Sapphire P096 + 26 111 202 Dark Blue P097 + 23 58 62 Rolled Steel P098 +147 226 255 Sky Blue P099 +123 217 253 Electric Bleu Light P100 + 28 167 188 Dark Turquoise Blue P101 + 0 120 154 Dark Turquoise Blue P102 + 67 185 171 Turquoise P103 +168 235 202 Bright Mint P104 + 79 191 175 Aquamarine P105 + 13 119 109 Teal Green Dark P106 + 24 111 92 Green Forest P107 + 30 134 135 Surf Bleu Medium P108 +225 248 204 Loden Green Very Light P109 +177 233 204 Mint P110 +145 217 131 Light Jade P111 +137 206 141 Seafoam P112 +130 202 136 Spring Bouquet P113 +101 189 102 Green Gables P114 + 36 123 68 Jade P115 + 33 132 78 Bangkok Green P116 + 22 77 58 Evergreen P117 + 70 171 127 Green P118 +216 244 131 Pale Yellow P119 +204 241 76 Fluo Yellow / Green P120 +138 187 44 Med Olive Green P121 +201 191 94 Ginger P122 + 90 160 46 Green / Yellow P123 +105 189 93 Limedrop P124 + 92 168 59 Pear P125 + 62 126 52 Medium Green P126 +230 205 165 Wheat P127 +233 201 176 Cream Tan P129 +182 144 121 Roebuck P130 +237 187 136 Peach P131 +225 185 136 Sheepskin P132 +164 153 125 Pale Green / Yellow P133 +148 117 86 Raw Umber P134 +157 145 123 Taupe P135 +173 146 119 Almondine P136 +225 147 111 Sand Stone Medium P137 +218 149 94 Sunkissed P138 +127 84 50 Dark Red Orange P139 +170 101 72 Brown P140 +152 118 72 Pale Brown P141 +158 132 99 Sienna P142 +155 112 78 Brown P143 +142 102 53 Medium Orange / Brown P144 +196 170 173 Burnished Lilac P145 +196 170 172 Burnished Lilac P145 +222 173 179 Medium Pink P146 +222 173 178 Medium Pink P146 +184 126 167 Regal Orchid P147 +184 126 166 Regal Orchid P147 +182 93 123 Dark Pink P148 +182 93 124 Dark Pink P148 +170 83 102 Amber Red P149 +170 83 103 Amber Red P149 +253 166 217 Medium Pink P150 +253 166 216 Medium Pink P150 + 99 0 28 Red P151 + 99 0 29 Red P151 +143 36 82 Raspberry P152 +188 22 104 Dark Pink P152 +140 24 89 Burgundy P153 +111 20 99 Violet Very Dark P153 +135 16 72 Cranberry P154 +135 16 73 Cranberry P154 +127 32 38 TH Burgundy P155 +127 32 39 TH Burgundy P155 +101 21 32 Brown P156 +101 21 33 Brown P156 +181 40 30 Red P157 +157 75 61 Dark Red / Orange P158 +157 75 62 Dark Red / Orange P158 + 87 36 33 Henna P159 + 87 36 34 Henna P159 +102 46 33 Tan P160 +102 46 34 Tan P160 +114 66 46 Dark Brown P161 +114 66 47 Dark Brown P161 +107 59 55 Sepia P162 +107 59 56 Sepia P162 +242 250 237 Pale Yellow-Green P163 +180 173 181 Storm Gray P164 +210 202 215 Pale Grey / Pink P165 +206 183 191 Light Pink P166 +206 183 190 Light Pink P166 +168 167 173 Pewter P167 +139 163 139 Sea Green P168 +167 226 180 Brook Green P169 +142 151 132 Seagrass P170 +154 230 220 Mint Julep P171 +120 118 67 Medium Green / Yellow P172 + 44 72 21 Blue Spruce P173 +153 142 146 Silver Rose P174 +155 154 123 Grey Khaki P175 +122 124 149 Purple Dusk P176 +123 122 128 Cool Grey P177 + 40 36 27 Black P178 +250 244 246 White P181 +245 238 220 Ecru Very Light P182 +241 223 177 Lemonade P183 +244 232 210 Nude Gold P184 +220 184 148 Pale Peach P185 +161 134 81 Fall Leaf P186 +196 149 45 Old Gold P187 +255 173 39 Manila P188 +240 148 63 Marigold P189 +235 136 69 Apricot P190 +230 120 57 Coral Rose P191 +243 175 198 Carnatio P192 +237 184 212 Sugar Pink P193 +215 48 78 Teaberry P194 +224 191 238 Light Tulip P195 +118 36 58 Red Jubilee P196 +131 62 65 Brown P196 +141 163 246 Medium Blue P197 +129 167 232 Medium Blue P198 +102 140 205 Med. Periwinkle P199 + 20 60 173 Royal Blue P200 + 20 53 168 Blue Ink P201 + 27 54 145 Dark Blue P202 + 17 16 58 Navy Blue P203 + 39 39 75 Blueberry Blue P204 +192 250 252 Pillow Blue P205 +148 143 113 Medium Green / Grey P206 + 11 94 66 Dark Green P207 + 27 116 86 Green Forest P208 + 3 91 103 Dark Green / Yellow P209 +237 233 224 Lily White P210 +194 180 169 Light Brown P211 +195 185 183 Lilac Gray P212 +115 104 108 Charcoal P213 +139 122 128 Gray Ridge P214 +128 118 116 Suede P215 + 84 87 102 Gull P216 +253 175 39 Manila P219 +164 150 77 Golden Tan P221 +153 91 18 Mocha Dark P224 +240 152 176 Medium Pink P227 +172 79 132 Dahlia Mauve P229 +185 59 96 Dark Pink P230 +188 22 105 Dk. Rose P232 +140 24 90 Burgundy P232 +246 177 122 Peach P233 +220 114 114 Shell Pink P234 +226 208 188 Light Orange P239 +205 110 178 Medium Pink P239 +205 110 177 Medium Pink P239 + 70 27 36 Dark Oak P241 + 70 27 37 Dark Oak P241 + 88 51 58 Dark Sepia P242 + 88 51 59 Intense Maroon P242 +186 44 43 Dark Rust P243 +186 44 44 Orange P243 +102 5 22 Brown P244 +102 5 23 Brown P244 + 81 1 12 Dark Chocolate P246 + 81 1 13 Dark Chocolate P246 +111 133 216 Jay Blue P247 + 77 103 200 Royal Blue P248 + 81 100 203 Marine Blue P249 +254 139 170 Azalea P250 + 53 105 207 Dolphin Blue P253 + 37 77 190 Jamie Blue P254 + 31 50 127 Royal Blue P255 + 42 54 102 Navy Blue P256 +192 128 224 Pansy Purple P260 +177 102 205 Amethyst P261 +139 59 192 Amethyst P262 +110 113 190 Violet P263 +186 200 175 Palm Leaf P265 +158 238 227 Aqua P266 +125 208 248 Chicory P270 + 41 131 194 Sapphire P271 +187 239 173 Pale Green P272 + 39 160 155 Nile Blue P274 +100 205 201 Light Blue / Green P275 + 93 198 194 Aquamarine P276 + 57 178 173 Grizzly Turquoise P277 + 63 184 211 Aquarius P278 + 20 139 120 Green / Blue P279 +130 151 118 Yellow Green / Medium P282 + 75 111 50 Dark Leaf Green P284 +105 183 82 Apple Green P285 + 38 145 125 Jade P287 +113 142 122 Cloudy Jade P288 + 23 125 112 Jade Green P289 + 15 68 60 Shaded Spruce P290 + 0 53 45 Beau Geste P291 + 17 79 58 Dark Green P292 + 44 56 46 Pine Dark P293 + 74 87 41 Green / Yellow P294 + 62 72 48 Swamp Gator P295 + 53 57 30 Dark Forest P296 + 47 58 28 Special Green P297 + 45 42 23 Teal Appeal P298 +242 233 194 Sheer Ivory P299 +212 204 158 Hay P300 +187 186 155 Tidal Foam P301 +197 163 117 Flax P302 +144 123 94 Doe P303 +157 119 100 Medium Brown P304 +205 94 41 Rust P305 +205 94 42 Rust P305 +170 97 63 Autumn Glaze P306 +104 57 31 Mocha P307 +104 57 32 Mocha P307 + 90 58 59 Mahogany P308 + 90 58 60 Mahogany P308 + 83 50 35 Dark Brown P310 + 83 50 36 Dark Brown P310 +122 34 58 Russet P311 +236 247 243 Slate Bleu Light P311 +230 221 214 Turtledove P312 +169 181 171 Traditional Gray P314 +185 178 186 Pale Sterling Grey P316 +181 181 181 Light Grey / Green P317 +154 15 161 Purple P318 +155 144 148 Silver Rose P319 +135 152 146 Limestone P320 +103 91 101 Plum Kitten P321 +140 128 138 Penguin Grey P322 +105 96 115 Cadet P323 + 34 56 116 Dark Blue P325 +246 190 141 Glow P326 + 47 168 163 Grizzly Turquoise P327 +205 56 59 Dark Punch P328 +186 47 88 Wildfire P329 + 64 92 41 Dark Green P330 +122 34 59 Russet P331 + 62 65 80 Dark Grey / Blue P4324 +250 244 245 White P7003 +186 186 186 Winter Sage P7011 +233 215 195 Peach Cloud P7017 +219 95 43 Medium Orange P7021 +245 244 213 Eggshell P7022 +255 173 40 Manila P7024 +240 155 26 Golden Rod P7025 +230 192 127 Bamboo P7026 +133 159 218 Powder Blue P7028 +104 12 27 Brown P7035 +131 62 66 Brown P7036 +130 62 65 Brown P7036 +213 37 22 Red P7037 +213 37 23 Red P7037 +144 18 19 Cranberry P7038 +144 18 20 Aurora Red P7038 +193 15 13 Carmine P7039 +193 15 14 Carmine P7039 +159 142 148 Light Brown P7040 + 12 14 35 Charcoal P7044 +189 239 186 Lt. Teal P7047 +135 178 70 Medium Green / Yellow P7049 + 65 38 46 Dark Purple P7050 + 54 149 81 Light Green P7051 + 55 127 103 Dark Blue / Green P7052 +240 211 195 Crystal Pink P7053 +235 201 155 Deep Ecru P7055 +129 86 33 Taupe P7056 +142 89 58 Dark Brown P7057 +142 89 59 Dark Brown P7057 +194 182 160 Sand P7060 +232 124 51 Amberglow P7065 +238 188 101 Golden Cream P7070 +178 197 239 Pale Blue P7075 + 25 58 172 Royal Blue P7076 +225 84 41 Orange P7078 +231 213 193 Peach Cloud P7082 +233 216 190 Seedpearl P7084 +148 219 205 Pale Aqua Green P7089 + 65 173 147 Isle Green P7090 + 35 150 153 Tender Teal P7091 + 0 36 3 Mahogany P7103 +248 96 157 Rose P7109 +248 96 156 Rose P7109 + 95 25 158 Dark Purple P7112 +178 175 192 Sleet Grey P7118 +236 197 216 Violet P7121 +255 200 61 Bright Yellow P7125 +174 113 66 Wicker P7126 +193 161 136 Iced Mocha P7128 +100 72 50 Clayrust P7129 +100 72 51 Clayrust P7129 +184 231 241 Palest Aqua P7132 +109 137 221 Medium Blue P7133 + 28 77 196 Smurf Blue P7134 +233 140 36 Goldenrod P7137 + 98 109 199 Violet P7143 +112 65 55 Fox P7145 +112 65 56 Fox P7145 +235 55 32 Fluorescent Orange P7146 +235 55 33 Fluorescent Orange P7146 +202 17 22 Wild Fire P7147 +202 17 23 Wild Fire P7147 +238 220 200 White Smoke P7149 +126 63 32 Brown P7158 +126 63 33 Dark Brown P7158 +254 183 77 Mimosa P7159 + 39 46 127 Dark Royal Blue P7166 + 35 47 133 Royal Blue P7167 +247 169 1 Orange Mist P7172 + 89 110 177 Violet P7175 + 36 95 185 Magic Blue P7177 +151 6 19 Dark Red P7181 +151 6 20 Dark Red P7181 +155 47 63 Perfect Ruby P7182 +155 47 64 Perfect Ruby P7182 + 1 76 72 Dark Green P7185 +177 12 26 Red Jubilee P7186 +177 12 27 Red Jubilee P7186 +111 20 100 Violet Very Dark P7188 +134 16 72 Cranberry P7188 +151 124 71 Pale Brown P7191 +197 55 19 Firecracker P7221 +197 55 20 Firecracker P7221 +225 134 19 Tan P7225 +239 157 107 Pale Orange P7226 + 77 14 103 Dark Purple P7233 +237 66 118 Azalea P7234 +237 66 119 Azalea P7234 + 36 37 31 Carbon Black P7241 + 19 40 107 Dk. Royal Blue P7242 + 37 39 60 Dark Navy P7243 + 75 183 157 Turquoise P7246 + 23 108 69 Festive Green P7250 +208 117 64 Topaz Medium P7253 +245 136 69 Golden Poppy P7278 +158 13 30 Aurora Red P7281 +158 13 31 Aurora Red P7281 + 9 50 52 Prussian Blue P7290 + 11 83 95 Dark Teal P7291 + 33 115 162 Teal P7295 + 1 126 190 Colonial Blue P7297 +190 133 227 Pansy Purple P7311 +234 166 163 Flesh Pink P7317 + 75 27 127 Purple Accent P7322 +186 157 115 Tan P7338 +150 77 70 Dark Red / Orange P7341 +150 77 71 Dark Red / Orange P7341 + 68 26 92 Purple Accent P7343 +157 169 191 Rockport Blue P7360 + 72 136 62 Northern Pine P7369 + 17 70 42 Deep Forest Green P7370 + 37 69 126 Imperial Blue P7376 +131 27 52 Maroon P7384 +131 27 53 Maroon P7384 +106 26 37 Warm Wine P7385 +106 26 38 Warm Wine P7385 +105 60 81 Dark Purple P7386 +105 60 82 Medium Purple P7386 +114 17 60 Purple Ice P7389 +114 17 61 Purple Ice P7389 + 30 57 48 Spruce P7397 +243 243 243 White P7802 + 39 161 146 Tender Teal P801 + 23 129 115 Surf Bleu Medium P802 +106 107 101 Cloudburst P803 + 97 93 84 Black Chrome P804 + 71 23 159 Bright Sky P805 + 93 21 67 French Raspberry Red P806 +253 250 47 Yellow P807 +245 255 152 Coronation Gold P808 +118 253 65 Bright Green P809 +255 121 34 Soleil P810 +255 67 63 Fluo Pink P811 +255 61 137 Wine P812 +218 73 90 Raspberry P813 +218 73 91 Raspberry P813 + 23 50 41 Ivy P814 diff --git a/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl b/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl new file mode 100644 index 0000000..375e588 --- /dev/null +++ b/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl @@ -0,0 +1,498 @@ +GIMP Palette +Name: Ink/Stitch: Royal Viscose Rayon +Columns: 4 +# RGB Value Color Name Number +225 67 81 Medium Red / Orange C056 +229 77 125 Azalea C436 +212 4 72 Strawberry C505 +162 37 56 Wildfire C320 +236 207 199 Palest Peach C041 +229 77 125 Azalea C377 +220 129 140 Medium Pink C496 +213 97 110 Rapture Rose C086 +144 36 68 Perfect Ruby C058 +162 37 56 Wildfire C701 +148 66 101 Medium Purple C530 +162 37 56 Wildfire C349 +218 138 155 Rose Tint C495 +218 138 155 Rose Tint C050 +239 152 164 Medium Pink C702 +236 207 199 Palest Peach C403 +232 136 144 Light Orange C450 +229 86 109 Shrimp C488 +212 4 72 Strawberry C560 +183 57 68 Dusky Rose C703 +241 104 119 Dusty Rose C052 +242 199 196 Pink Mist C046 +241 185 192 Orchid Pink C048 +244 200 202 Crystal Pink C704 +241 185 192 Orchid Pink C319 +241 173 178 Pale Pink C049 +239 152 164 Medium Pink C382 +215 42 41 Tuxedo Red C487 +225 67 81 Medium Red / Orange C053 +209 45 51 Spanish Red C705 +225 67 81 Medium Red / Orange C054 +232 136 144 Light Orange C051 +242 199 196 Pink Mist C044 +227 189 183 Lotus C042 +242 167 171 Pale Pink C406 +213 97 110 Rapture Rose C507 +155 49 28 Red Bittersweet C706 +125 32 30 Burgundy C220 +126 45 36 Burgundy C076 +124 33 41 Burgundy C707 +177 39 38 Red Berry C708 +193 57 40 Dark Rust C219 +193 57 40 Dark Rust C373 +241 104 119 Dusty Rose C223 +240 182 160 Blossom C222 +229 198 171 Pale Peach C508 +229 198 171 Pale Peach C709 +241 104 119 Dusty Rose C408 +144 71 75 Dark Brown C529 +140 37 50 Burgundy C710 +126 45 36 Burgundy C548 + 92 38 37 Dark Sepia C711 + 92 38 37 Dark Sepia C712 +109 52 44 Dark Brown C490 +126 45 36 Burgundy C077 +232 192 187 Pale Orange C021 +232 192 187 Pale Orange C506 +188 95 30 Hazel C407 +148 51 18 Red Bittersweet C713 +148 51 18 Red Bittersweet C547 +232 136 144 Light Orange C714 +240 182 160 Blossom C322 +234 170 123 Bamboo C025 +210 69 20 Tropical Orange C715 +216 30 4 Orange / Red C413 +234 170 123 Bamboo C284 +211 168 125 Tan C024 +241 197 176 Bisque C383 +222 79 4 Orange C510 +216 30 4 Orange / Red C037 +210 69 20 Tropical Orange C040 +210 69 20 Tropical Orange C343 +222 79 4 Orange C033 +232 117 19 Golden Poppy C031 +237 160 80 Pale Gold C026 +232 117 19 Golden Poppy C716 +222 79 4 Orange C032 +216 30 4 Orange / Red C717 +226 62 40 Honeysuckle C038 +193 57 40 Dark Rust C718 +216 30 4 Orange / Red C719 +222 79 4 Orange C509 +232 117 19 Golden Poppy C359 +237 160 80 Pale Gold C405 +242 132 17 Golden Poppy C720 +245 197 160 Opaline C437 +231 179 131 Gold C721 +161 78 19 Date C553 +167 63 16 Old Dark Tex Orange C531 +232 117 19 Golden Poppy C030 +242 132 17 Golden Poppy C027 +232 117 19 Golden Poppy C029 +252 127 64 Golden Poppy C722 +245 197 160 Opaline C066 +245 197 160 Opaline C401 +209 93 6 Dark Orange C723 +167 63 16 Old Dark Tex Orange C724 +167 63 16 Old Dark Tex Orange C291 +193 57 40 Dark Rust C725 +133 53 19 Bark C075 +141 89 50 Light Cocoa C726 +144 71 75 Dark Brown C532 + 72 35 18 Dark Oak C294 + 72 35 18 Dark Oak C079 + 72 35 18 Dark Oak C727 +110 51 33 Dark Brown C728 +132 63 16 Chocolate C729 +188 95 30 Hazel C353 +161 78 19 Date C479 +171 117 64 Wicker C325 +171 117 64 Wicker C069 +187 117 49 Toast C067 +143 75 4 Orange / Brown C730 +161 78 19 Date C731 +157 106 6 Ginger C419 +116 64 10 Chocolate C073 + 97 52 19 Mushroom C480 + 72 35 18 Dark Oak C078 +108 49 32 Tan C498 + 82 42 37 Dark Brown C080 +171 117 64 Wicker C528 +179 131 96 Fawn C206 +194 168 117 Rattan C732 +216 180 150 Amber Beige C538 +193 144 97 Light Bronze C205 +134 96 40 Chocolate C072 +171 117 64 Wicker C070 +245 197 160 Opaline C426 +216 180 150 Amber Beige C063 +210 190 145 Taupe C289 +194 168 117 Rattan C552 +154 98 7 Orange / Brown C432 +216 180 150 Amber Beige C202 +179 131 96 Fawn C733 +164 127 21 Bullion C417 +171 117 64 Wicker C071 +211 168 125 Tan C065 +179 131 96 Fawn C734 +187 117 49 Toast C068 +187 117 49 Toast C735 +192 146 12 Old Gold C736 +208 143 85 Ashley Gold C214 +192 146 12 Old Gold C542 +192 146 12 Old Gold C737 +199 147 10 Old Gold C738 +237 160 80 Pale Gold C249 +204 122 2 Almond C216 +240 179 47 Yellow Poppy C215 +240 179 47 Yellow Poppy C018 +208 143 85 Ashley Gold C020 +243 208 62 Gold Goblet C739 +246 204 170 Flesh C016 +211 168 125 Tan C740 +205 196 126 Cocoon C017 +243 206 105 Yellow Gold C503 +243 208 62 Gold Goblet C329 +216 181 17 Pollen Gold C741 +235 177 16 Gold C742 +243 208 62 Gold Goblet C013 +235 177 16 Gold C439 +243 208 62 Gold Goblet C012 +255 203 73 Cornsilk C501 +243 208 62 Gold Goblet C743 +241 191 74 Penny C011 +234 223 151 Wheat C015 +234 223 151 Wheat C502 +221 205 106 Pale Yellow C210 +210 190 145 Taupe C744 +251 224 112 Snapdragon C010 +243 206 105 Yellow Gold C009 +230 220 186 Cocoa Mulch C745 +227 219 116 Canary Yellow C007 +234 223 151 Wheat C317 +232 222 32 Yellow C316 +232 222 32 Yellow C008 +245 228 135 Pale Yellow C006 +221 205 106 Pale Yellow C212 +181 155 13 Old Gold C211 +192 146 12 Old Gold C504 +162 131 5 Autumn Green C746 +228 220 170 Light Yellow / Orange C004 +235 229 151 Wheat C005 +221 205 106 Pale Yellow C209 +221 205 106 Pale Yellow C525 +151 140 41 Medium Yellow / Green C421 +106 113 43 Palmetto C489 + 72 35 18 Dark Oak C470 + 72 35 18 Dark Oak C471 + 72 35 18 Dark Oak C472 + 92 71 36 Dark Olive Green C411 + 74 70 19 Khaki C176 + 96 76 18 Sand Dune C177 + 96 76 18 Sand Dune C466 +135 117 49 Dark Green / Yellow C172 +113 111 21 Cypress C459 + 98 94 17 Palmetto C174 + 84 119 49 Sage C526 + 64 74 38 Hedge C747 + 64 74 38 Hedge C748 + 64 74 38 Hedge C180 +112 149 2 Meadow Green C425 +182 172 89 Pale Green / Yellow C166 +206 215 75 Dark Green C165 +206 215 75 Dark Green C524 +181 204 142 Green Oak C429 +171 186 10 Peapod C167 +206 215 75 Dark Green C638 +170 221 110 Spruce C374 +221 213 155 Maize Silk C163 +234 223 151 Wheat C424 +181 204 142 Green Oak C749 + 96 144 59 Spruce C750 + 87 99 20 Palmetto C751 +112 149 2 Meadow Green C460 +217 223 180 Lime Cream C551 +217 223 180 Lime Cream C162 +181 204 142 Green Oak C358 + 62 144 50 Kelly C752 + 96 144 59 Spruce C152 + 96 144 59 Spruce C324 +216 214 184 Cream C453 +199 214 161 Flite Green C148 +247 127 0 Pumpkin C151 + 8 110 84 Green Bay C753 +181 204 142 Green Oak C420 +199 214 161 Flite Green C168 +176 191 174 Sea Foam C754 +212 210 170 Light Green / Yellow C161 +181 204 142 Green Oak C428 +162 194 174 Jade Gray C147 + 0 124 88 Irish Green C155 + 79 110 94 Harbor Green C288 + 8 110 84 Green Bay C545 + 0 124 88 Irish Green C154 +122 169 145 Moss C523 +155 219 194 Pale Aqua C145 +128 188 171 Dusty Jade Green C352 + 8 110 84 Green Bay C156 + 8 110 84 Green Bay C463 + 34 83 65 Field Green C159 + 83 72 45 Dark Olive Green C465 + 35 70 54 Mitchell Green C755 + 64 64 57 Black Chrome C561 + 68 62 55 Black Chrome C464 +184 207 188 Celadon C144 +198 214 197 Dawn Blue C142 +209 228 212 Blue Glass C141 +159 170 153 Willow C169 +142 139 122 Pale Grey C486 +159 170 153 Willow C170 +159 170 153 Willow C416 +115 132 113 Willow C462 + 68 62 55 Black Chrome C469 +106 95 80 Dark Grey C120 +188 220 203 Pale Green C337 +209 228 212 Blue Glass C143 +146 162 153 Jadeite C438 +121 119 116 Charcoal C756 + 74 76 73 Dark Grey C757 + 73 53 50 Egyptian Brown C468 +184 207 188 Celadon C146 + 0 134 115 Isle Green C285 + 31 123 109 Jade Green C476 + 31 123 109 Jade Green C158 + 79 110 94 Harbor Green C758 + 79 110 94 Harbor Green C449 + 98 146 146 Teal C461 +127 200 179 Pale Green C475 +188 220 203 Pale Green C550 + 93 134 114 Trooper C759 + 98 146 146 Teal C760 + 98 146 146 Teal C313 + 0 161 185 Marine Aqua C456 +141 205 212 Pale Turquoise C454 + 98 146 146 Teal C455 + 0 127 152 Dark Aqua Green C761 + 98 146 146 Teal C457 + 97 125 141 Pale Green / Blue C485 + 39 105 109 Deep Atlantic C762 + 70 78 82 Midnight C119 + 94 130 163 Slate Blue C423 + 98 146 146 Teal C458 +152 215 223 Blue Frost C102 +204 227 222 Soothing Sea C101 + 84 183 200 Capri C104 +101 147 189 Pale Purple C107 + 0 139 178 Blue / Green C522 + 0 122 167 Pretty Blue C447 + 0 139 178 Blue / Green C106 + 0 139 178 Blue / Green C764 +141 205 212 Pale Turquoise C103 +184 205 219 Misty Fog C109 +175 188 192 Celestial Blue C339 +120 150 178 Country Blue C765 + 94 130 163 Slate Blue C766 + 63 97 117 Medium Green / Blue C767 + 97 125 141 Pale Green / Blue C443 + 70 78 82 Midnight C521 + 70 78 82 Midnight C513 +101 147 189 Pale Purple C446 +118 179 223 Ultra Blue C110 +101 147 189 Pale Purple C111 + 0 132 202 Blue / Green C112 + 0 115 198 Medium Blue C113 + 0 113 159 Dark Turquoise Blue C768 + 93 120 203 Jay Blue C769 + 52 86 134 Imperial Blue C132 + 52 40 117 Violet Blue C323 + 47 52 142 Blue C536 + 52 86 134 Imperial Blue C133 + 94 130 163 Slate Blue C114 +155 162 184 Purple Cloud C275 +118 179 223 Ultra Blue C378 +173 178 194 Pale Grey C124 +173 178 194 Pale Grey C770 +198 208 214 Pastel Blue C121 +209 206 200 Light Green C123 +155 170 192 Rockport Blue C771 + 52 86 134 Imperial Blue C772 + 52 40 117 Violet Blue C773 + 47 52 142 Blue C265 + 47 52 142 Blue C134 + 89 97 169 Soldier Blue C131 +155 162 184 Purple Cloud C283 +155 170 192 Rockport Blue C280 +128 139 192 Oriental Blue C129 + 94 130 163 Slate Blue C549 + 52 40 117 Violet Blue C444 + 59 75 115 Ash C512 +155 162 184 Purple Cloud C128 +155 162 184 Purple Cloud C511 +155 170 192 Rockport Blue C125 + 94 130 163 Slate Blue C130 + 73 53 50 Egyptian Brown C334 + 73 53 50 Egyptian Brown C138 + 63 97 117 Medium Green / Blue C484 + 70 78 82 Midnight C546 + 60 52 43 Best Brown C314 + 60 52 43 Best Brown C774 + 0 115 198 Medium Blue C775 + 47 52 142 Blue C776 + 47 52 142 Blue C777 + 37 85 126 Lake Blue C778 + 59 75 115 Ash C779 +173 178 194 Pale Grey C539 +110 134 169 Slate Blue C441 + 52 86 134 Imperial Blue C442 + 52 40 117 Violet Blue C136 + 44 38 92 Blue Ink C135 + 52 40 117 Violet Blue C244 + 52 40 117 Violet Blue C355 + 59 75 115 Ash C137 + 72 43 88 Blackberry C780 +173 178 194 Pale Grey C236 +103 75 118 Jazz Purple C534 + 64 49 44 Espresso C139 + 73 53 50 Egyptian Brown C264 + 73 53 50 Egyptian Brown C140 + 64 49 44 Espresso C781 + 44 32 71 Dark Purple C520 + 73 53 50 Egyptian Brown C336 + 89 52 68 Intense Maroon C782 +103 75 118 Jazz Purple C448 +141 131 154 Dusk C783 +141 131 154 Dusk C518 + 98 86 121 Dark Grey / Blue C445 +138 119 185 Mauve C410 + 74 60 99 Cassis C099 + 44 38 92 Blue Ink C100 +103 75 118 Jazz Purple C784 + 52 40 117 Violet Blue C785 + 52 40 117 Violet Blue C535 + 72 43 88 Blackberry C350 + 74 60 99 Cassis C094 +103 75 118 Jazz Purple C452 +212 183 203 Winsome Orchid C330 +141 131 154 Dusk C467 +138 119 185 Mauve C090 + 44 38 92 Blue Ink C517 +169 147 173 Sterling C451 +180 140 178 Cachet C422 +148 107 128 Very Grape C409 + 72 43 88 Blackberry C515 + 72 43 88 Blackberry C516 + 74 60 99 Cassis C096 +148 107 128 Very Grape C088 +198 164 193 Lavandula C084 +211 157 177 Pale Pink C514 +203 194 200 Skylight C081 +204 175 183 Rose Beige C085 +166 108 109 Heather Rose C087 + 89 52 68 Intense Maroon C519 +229 198 171 Pale Peach C061 +189 165 159 Light Brown C226 +132 73 74 Dark Brown C415 +178 107 111 K. A. Bronze C433 +109 52 44 Dark Brown C402 +108 49 32 Tan C060 + 73 53 50 Egyptian Brown C786 + 72 40 54 Plum C440 + 68 30 27 Dark Oak C497 +189 165 159 Light Brown C225 +211 192 184 Stainless Steel C186 +211 192 184 Stainless Steel C483 +193 182 165 Platinum C185 +221 204 165 Sea Mist C203 +225 204 185 Whisper Pink C201 +211 183 162 Grape C204 +176 137 113 Tawny Birch C477 + 92 71 36 Dark Olive Green C270 +126 81 61 Dark Brown C207 +164 151 136 Goat C427 +211 183 162 Grape C787 +229 198 171 Pale Peach C788 +216 180 150 Amber Beige C789 +154 113 92 Orange / Brown C541 + 59 52 33 Best Brown C554 + 72 35 18 Dark Oak C277 + 59 52 33 Best Brown C790 +238 211 181 Cottage Beige C791 +229 198 171 Pale Peach C792 +211 183 162 Grape C062 +211 183 162 Grape C431 +181 145 125 Roebuck C527 +154 113 92 Orange / Brown C478 +196 153 119 Light Red / Orange C430 +211 168 125 Tan C064 +242 200 141 Apricot Cream C793 +227 191 155 Gold C491 +230 220 186 Cocoa Mulch C328 +188 173 118 Silver Fern C473 +196 184 150 Gravel C474 +155 159 116 Arcadian Green C171 +166 163 157 Pale Grey C232 +129 115 100 Medium Green / Yellow C276 + 73 53 50 Egyptian Brown C199 + 60 52 43 Best Brown C269 + 41 41 32 D. H. Green C357 + 43 44 42 Dark Grey C794 +151 149 142 GS Gray C555 +164 151 136 Goat C435 +146 150 148 Banner Gray C556 +230 220 205 Turtledove C481 +206 210 199 Dawn Blue C360 +197 193 185 Saturn Gray C482 +193 182 165 Platinum C362 +151 149 142 GS Gray C267 +104 103 100 Twilight C271 +103 88 77 Dark Taupe C195 +233 226 215 Palest Ivory C315 +230 220 205 Turtledove C181 +223 217 206 White Sand C182 +187 183 175 Skylight C354 +212 206 197 Pearl Gray C183 +203 194 200 Skylight C540 +209 206 200 Light Green C184 +153 137 125 Light Brown C537 +140 111 108 Twilight Mauve C434 +126 110 99 Medium Green / Yellow C342 +234 226 183 Cocoa Mulch C003 +233 226 215 Palest Ivory C795 +200 195 178 Moonstruck C331 +166 163 157 Pale Grey C189 +140 111 108 Twilight Mauve C494 +140 111 108 Twilight Mauve C557 +153 137 125 Light Brown C190 +129 115 100 Medium Green / Yellow C192 +126 110 99 Medium Green / Yellow C193 +153 137 125 Light Brown C492 +164 151 136 Goat C796 +233 226 215 Palest Ivory C376 +233 226 215 Palest Ivory C001 +233 226 215 Palest Ivory C282 +153 137 125 Light Brown C187 +141 127 113 Fungi C418 +126 110 99 Medium Green / Yellow C191 +153 137 125 Light Brown C194 + 68 62 55 Black Chrome C196 +103 88 77 Dark Taupe C273 +174 175 171 Traditional Gray C797 +166 163 157 Pale Grey C798 +187 183 175 Skylight C327 + 73 53 50 Egyptian Brown C197 + 60 48 41 Best Brown C278 +103 88 77 Dark Taupe C412 +121 119 116 Charcoal C235 + 98 86 121 Dark Grey / Blue C544 +209 206 200 Light Green C799 +187 183 175 Skylight C533 +166 163 157 Pale Grey C234 + 89 63 62 Dark Brown C414 + 64 49 44 Espresso C558 + 62 49 35 Best Brown C200 +115 162 172 Country Blue C763 diff --git a/inkstitch/palettes/InkStitch Sigma.gpl b/inkstitch/palettes/InkStitch Sigma.gpl new file mode 100644 index 0000000..0c95201 --- /dev/null +++ b/inkstitch/palettes/InkStitch Sigma.gpl @@ -0,0 +1,154 @@ +GIMP Palette +Name: Ink/Stitch: Sigma +Columns: 4 +# RGB Value Color Name Number +255 255 255 White ST10 + 0 0 0 Black ST20 +237 255 80 Light Neon Green ST21 +150 232 69 Neon Green ST32 +255 231 86 Light Neon Orange ST33 +255 120 36 Med Neon Orange ST43 +242 141 166 Neon Pink ST46 +199 12 87 Neon Orange Pink ST47 +226 45 42 Silver ST101 +184 184 184 Silver Diamond ST102 +136 145 134 Lava Stone ST112 +115 127 127 Medium Grey ST115 + 86 94 90 Dark Platinum ST116 + 81 82 80 Charcoal ST117 +120 118 104 Badger Grey ST118 +237 87 47 Pumpkin Orange ST135 + 46 165 156 Turquoise ST138 + 57 98 118 Dark Wedgewood ST142 +155 59 64 Cardinal Red ST213 +108 62 71 Maroon ST216 +186 110 77 Rust ST253 +187 61 46 Medium Rust ST255 +249 223 207 Natural Pink ST301 +251 222 214 Baby Pink ST303 +247 205 213 Piggy Pink ST304 +242 175 180 Sweet Pink ST305 +232 65 140 Blushing Pink ST307 +231 127 157 Pink ST309 +240 111 140 Rose Pink ST313 + 0 131 64 Green ST317 +223 153 182 Shocking Pink ST321 +130 0 82 Ruby ST325 +177 65 95 Garnet ST333 +195 148 174 Light Purple ST345 +168 110 145 Medium Purple ST347 +105 65 105 Dark Grape ST348 +230 207 213 Pastel Light Pink ST376 +168 190 215 Light Baby Blue ST379 +160 191 215 Crystal Blue ST380 +144 166 198 Very Light Lavender ST381 +143 175 198 Cornflower ST382 +177 184 211 Lavender ST383 + 65 108 155 Denim ST385 +125 119 175 Light Violet ST386 +250 218 244 Misty Rose ST387 +102 64 144 Grape ST390 +234 240 249 Lt. Weathered Blue ST402 +166 216 246 Baby Blue ST403 +123 156 176 Med Baby Blue ST404 +100 141 199 Med Pastel Blue ST406 + 61 106 161 Blue Raspberry ST409 + 45 68 145 Med Royal Blue ST413 + 20 61 122 Ocean Blue ST414 + 17 50 99 Med Navy ST415 + 14 31 56 Dark Navy ST423 + 14 31 56 Bright Sunshine ST432 + 0 145 165 Teal ST443 + 0 91 99 Deep Teal ST448 + 0 71 77 Dark Teal ST449 +229 177 92 Old Gold ST466 +213 191 155 Cream ST501 +255 208 133 Pale Salmon ST503 +246 176 142 Med Peach ST505 +179 232 81 Pink Salmon ST506 +241 162 54 Dark Peach ST508 +110 67 55 Dark Brown ST513 +216 73 62 Pale Red ST527 +105 118 152 Heron Blue ST541 +253 232 150 Pale Yellow ST601 +237 229 93 Pastel Yellow ST602 +223 162 0 Golden Puppy ST609 +253 232 150 Buttercup ST612 +206 178 76 Treasure Gold ST616 +173 149 62 Old Gold ST619 +254 249 234 Pale Apricot ST627 +189 149 101 Tan ST628 +253 247 108 Mellow Yellow ST632 +237 239 5 Lemon ST633 +248 195 0 Amber ST646 +231 120 23 Mandarina ST649 +230 101 53 Orange ST650 +198 150 50 Golden Rod ST652 +152 153 109 Light Olive ST653 +201 131 0 Bright Gold ST654 + 0 123 141 Blue-Green ST688 + 0 77 61 Forrest Green ST695 + 0 126 186 Midnight Blue ST697 +207 0 64 Med Red ST700 + 40 67 140 Med Blue ST809 +208 180 120 Sweet Apricot ST812 +229 190 108 Skin ST818 + 68 146 132 Jade ST825 +207 207 207 Light Silver ST829 +220 135 94 Papaya Whip ST831 +180 112 93 Cooper ST832 +155 92 75 Light Pecan ST833 +169 49 33 Burnt Rust ST838 +177 139 0 Vegas Gold ST842 +134 70 46 Med Brown ST857 + 97 65 37 Med Russett ST859 +178 92 49 Med Copper ST864 +128 106 97 Dark Driftwood ST873 + 99 72 49 Birch ST878 + 26 12 6 Dark Chocolate ST891 +150 213 200 Sky Blue 2 ST903 +180 220 216 Aquamarine ST904 +175 125 62 Golden Brown ST905 + 0 163 160 Sea Blue ST906 + 0 64 93 Deep Sea ST913 +201 227 197 Pastel Mint ST947 + 85 175 120 True Green ST949 +133 131 37 Med Olive ST951 + 97 96 28 Olive ST955 +112 145 136 Light Jade ST961 +190 220 140 Smith Apple ST984 +190 230 120 Light Lime ST985 +118 200 80 Grass Green ST988 + 70 110 100 Deep Teal ST448 + 53 105 54 Med Forrest Green ST992 + 75 72 132 Deep Violet S1031 +237 237 210 Light Natural S1140 +243 216 168 Wheat S1145 +200 190 150 Desert Sand S1148 + 36 58 125 Egyptian Blue S1163 +134 190 78 Gecko S1183 +142 64 68 Burgandy S1241 +137 52 128 Med Orchid S1323 +140 109 170 Med Purple S1324 +182 163 108 Very Old Gold S1552 + 46 159 118 Light Spruce S1615 +152 193 115 Paris Green S1619 +205 205 205 Timberwolf S1707 + 42 55 126 Bright Blue S2031 + 0 108 165 Turquoise Blue S2093 +131 68 85 Dark Wine S2250 +208 164 79 Beige S2518 +237 146 6 Gold S2519 +237 239 5 Med Orange S3001 +192 122 70 Dark Salmon S3014 +180 60 60 Fire Red S3015 +145 95 70 Saddle Brown S3142 +255 197 0 Yellow Sun S4117 +166 138 104 Deep Taupe S4371 + 0 164 217 Sky Blue S4419 + 11 127 133 Wild Peacock S4627 + 0 45 31 Millard Green S4735 + 17 38 60 Dark Blue S5552 +145 185 226 Powder Blue S5554 + 66 150 72 Froggy Green S5557 +135 140 140 Stone Grey S8010 diff --git a/inkstitch/palettes/InkStitch Simthread Polyester.gpl b/inkstitch/palettes/InkStitch Simthread Polyester.gpl new file mode 100644 index 0000000..aae11d3 --- /dev/null +++ b/inkstitch/palettes/InkStitch Simthread Polyester.gpl @@ -0,0 +1,111 @@ +GIMP Palette +Name: Ink/Stitch: Simthread Polyester +Columns: 4 +# RGB Value Color Name Number + 0 8 11 Jet Black S001 +227 226 232 Powder Blue Tint S002 +244 240 219 Ecru Very Light S003 +238 233 195 Sheer Ivory S004 +225 188 143 Pink Sand S005 +186 148 129 Pale Tan S006 +172 165 173 Stone Grey S007 +168 163 157 Pale Grey S008 +182 142 117 Roebuck S009 +152 124 102 Woodsmoke S010 + 76 66 77 Midnight S011 +195 119 187 Purple S012 +204 87 44 Rust S013 +111 38 19 Cranberry S014 + 92 52 44 Cherrywood S015 + 43 18 50 Dark Purple / Navy S016 + 28 26 27 Midnight Blue S017 +240 236 188 Celery S018 +255 227 162 Linen S019 +232 230 121 Medium Yellow S020 +255 233 131 Cream Yellow S021 +222 194 0 Liberty Gold S022 +255 208 30 Cornsilk S023 +230 160 24 Gold / Orange S024 +242 128 24 Soleil S025 +244 123 68 Orange Spice medium S026 +221 121 33 Inca Gold S027 +230 17 9 Red S028 +255 55 27 Paprika S029 +171 19 18 Scarlet S030 +163 122 2 Autumn Green S031 +173 107 33 Tan Brown S032 +103 70 3 Hazel S033 +148 236 97 Lt. Green S034 + 81 213 6 Fluorescent Green S035 + 43 184 0 Emerald S036 +128 187 97 Springtime green S037 + 28 93 0 Green Forest S038 + 18 163 0 Meadow S039 + 30 70 44 Dark Green S040 + 2 64 0 Evergreen S041 + 13 37 37 Olive Green S042 +194 233 90 Sharp Green S043 + 72 58 23 Sienna S044 + 73 69 8 Khaki S045 + 41 73 23 Blue Spruce S046 +184 248 196 Slightly Green S047 +103 206 71 Green S048 + 54 224 92 Green S049 + 19 144 24 Meadow S050 + 0 123 0 Dark Green S051 +137 240 247 Powder Blue S052 + 37 152 209 Medium Ocean Blue S053 + 26 150 114 Turquoise S054 + 17 134 126 Green / Blue S055 + 26 147 93 Emerald Green S056 + 5 41 15 Dark Green S057 +167 207 215 Crystal Blue S058 +150 199 255 Lake Blue S059 +144 171 238 Medium Blue S060 + 42 60 136 Dark Royal Blue S061 + 27 37 108 Dk. Royal Blue S062 + 91 192 246 Sky Blue S063 + 0 109 207 California Blue S064 + 48 93 238 Dolphin Blue S065 + 28 98 220 Dark Blue S066 + 6 38 141 Brilliant Blue S067 + 0 11 228 Ultra Marine S068 + 24 42 140 Dark Blue S069 + 0 0 146 Dark Purple S070 +238 205 232 Light Pink S071 +232 100 209 Medium Pink S072 +205 114 253 Poker Primrose S073 +189 30 236 Amethyst S074 +162 2 248 Light Denim S075 +239 73 159 Tropicana S076 +119 15 236 Purple S077 +149 6 182 Jacaranda S078 +227 7 45 Maroon S079 +142 3 42 Dark Red S080 + 94 11 101 Violet Very Dark S081 + 72 1 95 Royal Purple S082 +131 6 106 Dark Fuschia S083 + 24 0 71 Midnight Navy S084 +242 177 135 Light Brass S085 +238 177 184 Orchid Pink S086 +239 133 181 Pink Petunia S087 +209 99 185 Lavender S088 +228 58 151 Garden Rose S089 +255 79 133 Begonia S090 +206 57 187 Violet S091 +154 97 238 Jacaranda S092 + 98 58 207 Violet Blue S093 +112 93 157 Corsican Blue S094 +121 41 254 Cindy Purple S095 + 96 35 252 Sky Blue S096 + 83 20 248 Sapphire S097 + 54 3 192 Marine Blue S098 + 16 0 185 Bright Blue S099 +108 66 145 Purple S100 +196 182 217 Pale Lilac S101 +206 236 224 Light Blue S102 +200 196 231 Geisha S103 +124 136 186 Oriental Blue S104 +100 115 144 Silver Blue S105 + 62 69 113 Ash S106 + 43 50 42 Night Sky S107 diff --git a/inkstitch/palettes/InkStitch Simthread Rayon.gpl b/inkstitch/palettes/InkStitch Simthread Rayon.gpl new file mode 100644 index 0000000..ec166d5 --- /dev/null +++ b/inkstitch/palettes/InkStitch Simthread Rayon.gpl @@ -0,0 +1,388 @@ +GIMP Palette +Name: Ink/Stitch: Simthread Rayon +Columns: 4 +# RGB Value Color Name Number +254 254 254 Snow White S1001 +255 254 252 White S1002 +254 253 252 Lamp Light S1003 + 16 16 18 Charcoal S1004 +251 241 247 Blush S1005 +251 217 240 Fantasia Pink S1006 +249 193 236 Pale Pink S1007 +247 165 224 Orchid Pink S1008 +248 236 235 Light Pink S1009 +251 236 226 Wineberry Very Light S1010 +250 231 233 Carnation Ultra Light S1011 +248 136 210 Floral Pink S1012 +248 134 208 Floral Pink S1013 +248 75 173 Pink S1014 +248 95 192 Passion S1015 +210 9 105 Strawberry S1016 +245 47 167 Crimson S1017 +245 21 98 Rose Red S1018 +221 4 80 Salmon Dark S1019 +249 178 203 Pink S1020 +248 120 160 Bubblegum Pink S1021 +247 21 51 Cardinal Red S1022 +251 13 38 Cardinal Red S1023 +251 4 27 Luminous Red S1024 +245 4 27 Scarlet S1025 +209 12 57 Rosewood S1026 +216 12 45 Foxy Red S1027 +221 14 70 Cerise S1028 +252 253 245 Eggshell S1029 +253 251 241 Natural White S1030 +252 250 247 White S1031 +250 98 76 Coral S1032 +250 229 207 Beige S1033 +250 229 209 Barely Pink S1034 +250 161 128 Peach Pink S1035 +248 188 84 Mimosa S1036 +251 142 25 Honeydew S1037 +250 122 15 Soleil S1038 +248 107 34 Orange S1039 +249 124 55 Medium Orange S1040 +251 26 18 Luminous Orange S1041 +254 254 245 Eggshell S1042 +253 253 236 Ivory White S1043 +252 251 212 Light Maize S1044 +252 250 229 Cream S1045 +250 240 143 Easter Dress S1046 +249 231 52 Canary Yellow S1047 +252 231 39 Canary Yellow S1048 +253 231 39 Straw S1049 +252 251 132 Medium Yellow S1050 +252 250 96 Lemon Yellow S1051 +249 251 57 Lime S1052 +254 254 240 Light Beige S1053 +253 251 175 Cream Brown S1054 +251 252 134 Meilee Green S1055 +252 253 112 Lemon Fluff S1056 +250 251 125 Medium Yellow S1057 +251 251 74 Lime S1058 +250 222 60 Sun S1059 +252 213 55 Yellow S1060 +250 197 44 Sunset S1061 +233 250 231 Silver Grey S1062 +136 235 169 Mint S1063 + 9 199 182 Peppermint S1064 + 6 163 163 Teel S1065 +128 238 241 clWhite S1066 +106 243 247 clWhite S1067 +212 250 248 PALE Aqua S1068 +125 245 247 Alaska Sky S1069 + 4 202 206 Lilac Silk S1070 + 6 179 176 Ocean Blue S1071 +234 251 250 Misty Mint S1072 +200 248 234 Pale Turquoise S1073 + 71 221 180 Light teal Green S1074 + 7 125 90 Irish Green S1075 +195 238 144 Green Dust S1076 +102 214 100 DK Mint S1077 + 51 184 50 Kelly S1078 +213 244 150 Dark Olive Green S1079 +168 240 154 Light Green S1080 + 53 190 68 Harvest Green S1081 + 7 63 71 Swamp Green S1082 + 6 181 88 Bright Mint Green S1083 +191 223 139 Lettuce Green S1084 +182 213 91 Spring Fern S1085 +143 185 79 Lime S1086 +139 167 75 Medium Green / Yellow S1087 +231 234 163 Young Wheat S1088 +150 163 81 Pistachio S1089 +138 180 168 Jade Medium Light S1090 + 48 78 71 Dark Green / Blue S1091 + 37 71 221 Smurf Blue S1092 +192 218 236 Ice Blue S1093 +169 214 241 Baby Blue S1094 +111 181 231 Reef Blue S1095 + 19 107 229 Dolphin Blue S1096 +189 218 245 Ice Blue S1097 +145 200 237 Pale Blue S1098 + 94 142 221 Light Blue Aster S1099 + 71 129 219 Azure S1100 +189 226 248 Cadet Blue S1101 +155 183 239 Pale Blue S1102 +139 184 234 Sky Blue S1103 + 76 123 237 Electric Bleu Medium S1104 + 45 60 181 Royal Blue S1105 + 42 76 206 Smurf Blue S1106 + 23 39 179 Dark Smurf Blue S1107 + 28 33 173 DK Bright Blue S1108 + 29 36 125 Dark Ink S1109 + 17 24 63 Navy S1110 + 18 22 51 Midnight Blue S1111 +105 141 199 Med. Periwinkle S1112 +109 207 225 Basic Turquoise S1113 +211 229 238 Med. Pastel Blue S1114 +126 169 228 Medium Blue S1115 + 80 113 172 Delft Blue dark S1116 + 49 95 173 Magic Blue S1117 +117 207 213 Turquoise S1118 + 22 183 203 Bright Aqua S1119 + 7 147 169 Dark Aqua Green S1120 + 64 164 192 Horizon Blue S1121 + 12 95 146 Blue Aster S1122 +166 239 247 Venice Blue S1123 + 80 227 240 Capri S1124 + 20 208 241 Turquoise S1125 +116 206 217 Turquoise S1126 + 19 235 246 Medium Turquoise S1127 +233 221 246 PLST Orchid S1128 +217 205 246 LT Lilac S1129 +104 48 173 Violet Blue S1130 + 76 28 103 Purple Accent S1131 + 72 33 157 Bright Sky S1132 + 49 27 124 Dark Royal Blue S1133 +242 173 225 Azalea Pink S1134 +186 91 192 Amethyst S1135 +154 65 163 Plum S1136 +243 231 249 White S1137 +233 169 230 Pink S1138 +197 142 216 Medium Tulip S1139 +118 48 146 Deep Purple S1140 +112 30 141 Violet S1141 +242 107 211 clWhite S1142 +230 60 186 Crimson S1143 +224 31 154 Ruby Glint S1144 +124 49 170 Medium Purple S1145 +246 213 246 Arden Lavender S1146 +248 168 237 Orchid Pink S1147 +215 76 193 Deep Mauve S1148 +180 60 161 Tulip S1149 +223 163 220 Pink S1150 +254 241 235 Shell S1151 +254 250 240 Natural White S1152 +253 254 248 Iced Silver S1153 +249 254 200 Flite Green S1154 +249 213 135 Blond S1155 +242 246 211 Grass Green 4 S1156 +255 219 138 Glow S1157 +255 246 208 Cream S1158 +238 209 167 Ivory S1159 +176 175 121 Sage Green S1160 +255 245 222 Light Cream S1161 +254 228 183 Shrimp Pink S1162 +249 209 156 Impala S1163 +251 226 166 Blonde S1164 +242 165 90 Pale Gold S1165 +250 236 202 Pale Gold S1166 +243 153 81 Sunflower S1167 +223 162 76 Gold S1168 +255 253 245 Eggshell S1169 +255 252 210 Citrus Very Light S1170 +247 247 175 Light Lemon S1171 +237 236 215 Ecru S1172 +201 147 109 Dk. Ecru S1173 +242 161 80 Pale Gold S1174 +137 74 51 Dirty Penny S1175 +255 246 185 Pale Yellow S1176 +255 251 196 Pastel Yellow S1177 +245 225 112 Yellow Cream S1178 +234 174 42 Yellow S1179 +255 234 74 Hawaiian Sunrise S1180 +253 231 130 clWhite S1181 +248 249 139 Meilee Green S1182 +253 249 164 Pineapple S1183 +250 229 86 Soft Yellow S1184 +251 242 51 Yellow S1185 +240 230 221 Palest Ivory S1186 +242 237 233 Natural White S1187 +250 247 254 Silver Blue S1188 +219 193 181 Peach Whip S1189 +134 100 93 Medium Brown S1190 +254 246 250 Blush S1191 +209 217 215 Illusion Blue S1192 +184 183 188 Pale Sterling Grey S1193 +228 193 183 Pale Orange S1194 +237 227 174 PaleYellow S1195 +177 165 86 Khaki Green / Medium S1196 +231 179 93 Golden Cream S1197 +141 77 51 Dirty Penny S1198 +171 82 35 Light Cinnamon S1199 +217 103 68 Dark Coral S1200 +222 83 63 Orange S1201 +222 172 113 Sierra Light S1202 +252 252 255 Sea Bleu Very Light S1203 +247 248 232 Off White S1204 +253 253 245 Eggshell S1205 +163 142 146 Light Brown S1206 +182 179 146 Old Lace S1207 +245 246 238 Palest Ivory S1208 +184 185 173 Skylight S1209 +148 135 158 Ocean Bleu S1210 + 27 213 187 Turquoise S1211 +243 248 84 Daffodil S1212 +143 157 54 MD Lime S1213 + 21 44 124 Provence S1214 + 32 33 41 Mysterioso S1215 +251 65 188 Deep Pink S1216 +150 10 36 Baked Cherry S1217 +249 15 115 Fuschia S1218 +138 24 103 Traffic Purple S1219 +251 251 199 Pale Lemon S1220 +202 218 160 Flite Green S1221 +124 186 145 Mint Green S1222 + 90 149 87 Holly Green S1223 + 32 179 150 Bluestone S1224 + 12 165 82 Light Kelly S1225 + 5 150 103 Shamrock S1226 + 71 121 227 Azure S1227 + 79 88 200 Marine Blue S1228 + 65 109 228 Dolphin Blue S1229 + 36 25 120 Purple Twist S1230 +252 241 251 Siberian Iris S1231 +224 230 246 Violet Tint White S1232 +187 172 245 Cristy Blue S1233 +249 11 94 Dark Pink S1234 +235 250 95 Green Gold S1235 + 6 216 181 DKST Blue Gray S1236 + 25 123 94 Jade S1237 + 49 82 79 Enchanted Sea S1238 +229 229 124 clWhite S1239 +190 170 81 Golden Olive Light S1240 + 12 196 243 Peacock S1241 + 16 129 225 Medium Royal Blue S1242 +132 100 227 Marine Blue S1243 +186 133 209 Heather S1244 +119 82 175 Medium Bleuberry S1245 +111 61 175 Blue Lilac S1246 +250 255 216 Jonquil Very Light S1247 +252 247 150 Gold S1248 +247 232 113 Harvest Gold S1249 +255 242 255 Siberian Iris S1250 +252 107 184 Floral Pink S1251 +251 33 123 Hot Pink S1252 +255 227 252 White S1253 +255 51 182 Deep Pink S1254 +243 10 76 Blossem Pink Dark S1255 +255 6 115 Fuschia S1256 + 9 207 245 Turquoise S1257 + 10 229 244 Medium Turquoise S1258 +252 212 128 Glow S1259 +247 158 24 Tangerine medium S1260 +254 249 225 Ivory White S1261 +245 246 75 Lemon S1262 +167 202 254 LT Bright Blue S1263 + 30 124 250 Bright Blue S1264 + 26 33 208 clWhite S1265 + 24 75 123 Royal Blue S1266 + 70 82 149 Purple S1267 + 30 30 54 Dark Purple S1268 +235 187 201 Shell S1269 +245 170 205 Pale Pink S1270 +232 166 204 Medium Pink S1271 +232 120 173 Floral Pink S1272 +228 122 162 Floral Pink S1273 +243 83 93 Fluo Pink S1274 +189 47 62 Burgundy S1275 +203 62 132 Dark Pink S1276 +200 70 115 Pink Rapture S1277 +203 39 96 Fuchsia S1278 +151 29 65 Brandy S1279 +140 25 61 Perfect Ruby S1280 +170 42 108 Dark Pink S1281 +191 80 63 Emberglow S1282 +168 75 69 Terra Cotta S1283 +189 23 85 Dark Pink S1284 +154 68 95 Burgundy S1285 +153 38 105 Dark Red S1286 +134 58 97 Medium Purple S1287 +143 43 71 Cabernet S1288 +120 21 36 Cherokee Red S1289 +111 24 20 Brown Red S1290 +225 160 120 Bamboo S1291 +176 140 114 Tawny Birch S1292 +192 126 104 Canyon Clay S1293 +123 54 40 Dark Brown S1294 + 96 36 46 Deep Claret S1295 +105 54 37 Ginger Bread S1296 +123 64 50 Mushroom S1297 +121 39 48 Red Rust S1298 +124 64 36 Dark Brown S1299 +112 65 28 Light Copper Brown S1300 + 92 57 25 Fudge S1301 + 86 54 31 Taupe Very Dark S1302 + 98 53 25 Redwood S1303 +105 59 43 Dark Brown S1304 + 87 35 24 Fudge Dark S1305 + 98 42 33 Tan S1306 + 76 43 27 Chocolate S1307 + 58 44 43 Deep Mahogany S1308 + 72 43 37 Dark Brown S1309 +212 224 239 Pale Baby Blue S1310 +196 213 231 Cadet Blue S1311 +141 160 178 Lt. Smokey Blue S1312 + 57 83 118 Dark Blue S1313 + 34 68 93 Dragon Fly S1314 + 56 72 108 Ash S1315 + 65 82 114 Dusty Navy S1316 + 77 90 112 True Blue S1317 + 67 80 108 Ash S1318 + 96 36 47 Deep Claret S1319 +105 54 38 Ginger Bread S1320 +121 112 117 Storm Gray S1321 +119 107 117 Purple Sage S1322 + 83 79 94 Graystone S1323 + 64 45 51 Shark S1324 + 58 45 45 Deep Mahogany S1325 +233 206 235 Light Pink S1326 +219 181 209 Delicate Mauve S1327 +226 154 215 Mid Lilac S1328 +205 113 185 Medium Pink S1329 +136 107 187 Mauve S1330 +154 90 201 Amethyst S1331 +176 70 175 DK Orchid S1332 +120 9 85 Dark Purple S1333 +164 147 202 Violet Tulip S1334 + 76 39 117 Purple Accent S1335 + 89 24 77 Sugar Beet S1336 + 88 12 74 Sugar Beet S1337 +214 250 77 Fluo Yellow / Green S1338 +186 252 25 Olive Green Light S1339 + 81 255 131 Green S1340 + 11 188 38 Kelly S1341 +194 208 191 Light Green S1342 +128 128 103 Aloe S1343 +144 115 99 Coconut S1344 +181 192 123 Nile S1345 +126 142 43 Swamp Green S1346 +118 135 39 Seagrass S1347 + 96 126 49 Avocado Green medium S1348 + 86 91 28 Dark Green / Yellow S1349 + 68 68 32 Avocado S1350 + 46 91 53 Olive Green S1351 + 3 90 200 Colonial Blue S1352 + 31 52 185 Dark Smurf Blue S1353 +249 232 186 Almond Oil S1354 +252 238 19 Yellow S1355 +182 175 191 Thistle S1356 +249 211 241 Pale Pink S1357 +246 144 192 Medium Pink S1358 +246 88 157 Rose S1359 +192 8 5 Red Berry S1360 +151 1 5 Terra Cotta S1361 +188 53 18 Firecracker S1362 +157 142 151 Light Brown S1363 + 81 255 130 Green S1364 +141 115 114 Twilight Mauve S1365 + 86 96 108 Grey S1366 + 54 51 61 Coal Black S1367 +163 111 233 Jacaranda S1368 + 92 43 106 Dark Purple S1369 + 6 25 134 Empire Blue S1370 +184 21 35 Foxy Red S1371 +195 108 177 Medium Pink S1372 +198 135 166 Smoky Grape S1373 +127 44 76 Wine S1374 +143 162 40 MD Lime S1375 +243 224 165 Glow S1376 +144 120 67 Pale Brown S1377 +242 202 161 Coast Point S1378 + 87 36 32 Henna S1379 +182 116 73 Raw Sienna S1380 +226 199 70 Mimosa S1381 +179 178 192 Grey S1382 + 11 191 243 Turquoise Medium Bright S1383 +251 246 189 Mellow Yellow S1384 diff --git a/inkstitch/palettes/InkStitch Sulky Polyester.gpl b/inkstitch/palettes/InkStitch Sulky Polyester.gpl new file mode 100644 index 0000000..10ebb5f --- /dev/null +++ b/inkstitch/palettes/InkStitch Sulky Polyester.gpl @@ -0,0 +1,911 @@ +GIMP Palette +Name: Ink/Stitch: Sulky Polyester +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 100 +255 255 254 White 1000 +249 249 255 Bright White 1001 + 27 27 31 Black Stallion 1001 +249 249 244 Soft White 1002 + 0 0 0 Black 1005 +218 8 21 Foxy Red 101 +183 169 172 Steel Gray 1011 +225 175 154 Med. Peach 1015 +236 150 140 Pastel Coral 1016 +239 223 189 Pastel Peach 1017 +236 160 130 Peach 1019 +212 16 44 Foxy Red 102 +240 130 120 Dark Peach 1020 +235 102 2 Maple 1021 +255 247 213 Cream 1022 +255 230 105 Yellow 1023 +255 184 0 Goldenrod 1024 +215 128 0 Mine Gold 1025 +190 195 225 Baby Blue 1028 +160 195 235 Med. Blue 1029 +165 20 14 Warm Red 103 +166 162 198 Periwinkle 1030 +223 190 200 Med. Orchid 1031 +230 140 235 Med. Purple 1032 +216 100 150 Dk. Orchid 1033 +198 50 60 Burgundy 1034 +121 0 0 Dk. Burgundy 1035 +122 0 0 Tawny Brown 1036 +249 0 0 Lt. Red 1037 +235 0 0 Christmas Red 1039 +244 52 8 Vermilion 104 +135 115 117 Med. Dk. Khaki 1040 +140 127 131 Med. Dk. Gray 1041 + 50 30 80 Bright Navy Blue 1042 + 25 5 37 Dk. Navy 1043 + 29 6 47 Midnight Blue 1044 +195 239 191 Lt. Teal 1045 + 46 131 89 Teal 1046 +166 194 132 Mint Green 1047 + 66 160 33 Grass Green 1049 +243 8 8 Red 105 + 30 100 25 Christmas Green 1051 +238 190 174 Med. Dk. Ecru 1054 +235 188 128 Tawny Tan 1055 +175 91 0 Med. Tawny Tan 1056 +100 39 2 Chocolate 1057 +102 53 0 Dark brown 1058 + 83 6 1 Dk. Tawny Brown 1059 +153 50 69 Burgundy 106 +255 247 185 Pale Yellow 1061 +240 248 236 Pale Yellow-Green 1063 +230 180 170 Pale Peach 1064 +255 145 0 Orange Yellow 1065 +255 241 128 Primrose 1066 +255 255 133 Lemon Yellow 1067 +243 219 217 Pink Tint 1068 +230 4 9 Carmine 107 +246 206 105 Gold 1070 +249 249 234 Off White 1071 +214 213 232 Pale Powder Blue 1074 + 90 90 139 Royal Blue 1076 +190 205 200 Jade Tint 1077 +255 102 0 Orange 1078 + 23 85 35 Emerald Green 1079 +220 130 160 Orchid 1080 +240 110 120 Brick 1081 +247 227 187 Ecru 1082 +255 193 0 Spark Gold 1083 +226 207 199 Silver 1085 +249 249 224 Pale Sea Foam 1086 + 22 98 95 Deep Peacock 1090 + 38 191 202 Med. Turquoise 1094 + 16 209 189 Turquoise 1095 + 15 105 120 Dk. Turquoise 1096 +194 211 125 Lt. Grass Green 1100 + 9 133 49 True Green 1101 + 2 20 15 Dk. Khaki 1103 +165 175 104 Pastel Yellow-Green 1104 +250 164 164 Lt. Mauve 1108 +220 100 150 Hot Pink 1109 +252 203 223 Pastel Orchid 1111 + 70 1 110 Royal Purple 1112 +240 200 180 Pastel Mauve 1113 +240 185 185 Lt. Pink 1115 +245 169 160 Mauve 1117 +180 110 117 Dk. Mauve 1119 + 39 94 46 Green Gables 112 +240 214 210 Pale Pink 1120 +250 185 203 Pink 1121 +130 40 142 Purple 1122 +255 236 0 Manila 1124 +220 140 23 Tan 1126 +250 236 198 Med. Ecru 1127 +195 148 113 Dk. Ecru 1128 +106 31 6 Brown 1129 + 45 106 36 Green 113 + 85 22 2 Dark Brown 1130 + 73 0 2 Cloister Brown 1131 + 80 125 170 Peacock Blue 1134 +255 240 114 Pastel Yellow 1135 +255 190 0 Yellow Orange 1137 +144 180 69 Medium Green / Yellow 114 + 74 88 112 True Blue 1143 +180 225 235 Powder Blue 1145 +235 0 1 True Red 1147 +255 189 189 Lt. Coral 1148 +232 200 156 Deep Ecru 1149 + 56 114 38 Green 115 +226 226 235 Powder Blue Tint 1151 +250 153 153 Coral 1154 + 99 99 39 Lt. Army Green 1156 +186 69 0 Dk. Maple 1158 +211 157 0 Temple Gold 1159 + 92 139 38 Peapod 116 + 16 57 74 Deep Teal 1162 +223 229 235 Lt. Sky Blue 1165 +142 126 126 Med. Steel Gray 1166 +255 210 38 Maize Yellow 1167 +245 116 10 True Orange 1168 +156 0 0 Bayberry Red 1169 + 79 172 91 Medium Green 117 +151 95 47 Lt. Brown 1170 + 8 24 14 Weathered Blue 1171 +110 120 140 Med. Weathered Blue 1172 + 89 89 29 Med. Army Green 1173 + 13 41 4 Dk. Pine Green 1174 + 21 45 4 Dk. Avocado 1175 + 81 83 8 Med. Dk. Avocado 1176 +137 152 18 Avocado 1177 +143 98 61 Dk. Taupe 1179 + 59 105 32 Dark Green 118 +165 137 115 Med. Taupe 1180 +203 0 0 Rust 1181 + 2 1 20 Blue Black 1182 + 50 6 20 Black Cherry 1183 +255 102 1 Orange 1184 +252 190 5 Golden Yellow 1185 + 91 0 0 Sable Brown 1186 +255 229 0 Mimosa Yellow 1187 +255 0 75 Deep Red 1188 + 75 18 45 Dk. Chestnut 1189 + 51 94 25 Dark Green 119 +160 70 86 Med. Burgundy 1190 +189 30 96 Dk. Rose 1191 +210 30 130 Fuchsia 1192 +230 175 210 Lavender 1193 +210 116 215 Lt. Purple 1194 + 55 1 80 Dk. Purple 1195 +150 195 225 Blue 1196 + 34 15 52 Med. Navy 1197 + 60 80 117 Dusty Navy 1198 + 42 20 63 Admiral Navy Blue 1199 + 81 181 138 Emerald Green 120 + 20 11 45 Med. Dk. Navy 1200 +100 139 190 Med. Powder Blue 1201 + 24 43 86 Deep Turquoise 1202 +174 184 195 Lt. Weathered Blue 1203 +168 200 188 Pastel Jade 1204 +110 144 165 Med. Jade 1205 + 30 110 111 Dark Jade 1206 +128 163 136 Sea Foam Green 1207 + 12 61 3 Mallard Green 1208 +189 209 99 Lt. Avocado 1209 + 39 59 0 Dk. Army Green 1210 +149 164 144 Lt. Khaki 1211 + 99 99 45 Khaki 1212 +185 160 150 Taupe 1213 +100 40 40 Med. Chestnut 1214 + 80 10 30 Blackberry 1215 +172 28 1 Med. Maple 1216 +151 31 1 Chestnut 1217 +223 223 203 Silver Gray 1218 +152 136 140 Gray 1219 + 9 25 73 Navy Blue 122 +118 89 96 Charcoal Gray 1220 +209 219 255 Lt. Baby Blue 1222 +220 224 241 Baby Blue Tint 1223 +240 160 185 Bright Pink 1224 +250 203 203 Pastel Pink 1225 + 87 54 158 Dk. Periwinkle 1226 +175 137 1 Gold Green 1227 +150 170 139 Drab Green 1228 +224 219 219 Lt. Putty 1229 + 11 65 51 Dk. Teal 1230 +229 50 106 Med. Rose 1231 + 25 50 7 Classic Green 1232 + 13 34 16 Ocean Teal 1233 + 60 27 31 Almost Black 1234 +120 50 152 Deep Purple 1235 +234 228 228 Lt. Silver 1236 +188 61 44 Deep Mauve 1237 +255 131 0 Orange Sunrise 1238 +255 171 87 Apricot 1239 + 14 6 61 Midnight Navy 124 +116 88 108 Smokey Grey 1240 + 93 52 70 Intense Maroon 1241 + 84 58 141 Nassau Blue 1242 +224 198 59 Mimosa 1243 +202 169 2 Royal Gold 1244 +178 142 0 Shimmering Gold 1245 +255 0 0 Blaze Medium 1246 +102 0 0 Mahogany 1247 +210 230 240 Med. Pastel Blue 1248 + 98 170 220 Cornflower Blue 1249 + 73 129 124 Teel 125 + 39 92 112 Duck Wing Blue 1250 + 48 111 117 Bright Turquoise 1251 + 9 161 168 Bright Peacock 1252 + 27 76 164 Dk. Sapphire 1253 +230 185 245 Dusty Lavender 1254 +190 25 130 Deep Orchid 1255 +235 130 150 Sweet Pink 1256 +230 0 65 Deep Coral 1257 +240 196 160 Coast Point 1258 +226 130 100 Salmon Peach 1259 +146 171 186 Lt. Smokey Blue 126 +221 171 0 Dusky Brass 1260 +255 227 0 Empire Yellow 1261 +169 136 3 Gold Green 1262 +179 0 0 Red Jubilee 1263 +106 0 0 Cognac 1264 +155 107 44 Burnt Toast 1265 +156 109 69 Toast 1266 +134 76 49 Mink Brown 1267 +239 239 229 Light Gray Khaki 1268 +172 135 131 Light Purple 1269 + 26 22 102 Imperial Blue 127 +183 183 175 Dk. Gray Khaki 1270 + 60 79 49 Evergreen 1271 + 74 74 25 Hedge Green 1272 + 54 54 31 Dark Forest 1273 + 92 154 26 Nile Green 1274 +224 230 200 Sea Mist 1275 +112 119 15 Pistachio 1276 + 2 118 2 Ivy Green 1277 + 0 175 56 Bright Green 1278 +147 209 108 Willow Green 1279 + 97 114 136 Dark Steel Blue 128 + 70 183 116 Dk. Willow Green 1280 + 3 103 70 Dark Green 1281 +146 149 3 Tamarack 1282 + 72 61 89 Slate Gray 1283 + 70 110 120 Dk. Winter Sky 1284 + 19 79 69 Dk. Sage Green 1285 + 52 50 19 Dk. French Green 1286 + 65 85 69 French Green 1287 + 15 165 111 Aqua 1288 +220 235 240 Ice Blue 1289 +189 208 221 Bleuberry Medium Light 129 + 22 85 165 Bright Blue 1290 +114 116 131 Winter Sky 1291 +209 220 250 Heron Blue 1292 + 68 35 93 Deep Nassau Blue 1293 + 65 32 68 Deep Slate Gray 1294 +130 135 140 Sterling 1295 +210 170 240 Hyacinth 1296 +115 90 100 Lt. Plum 1297 +100 70 100 Dk. Plum 1298 + 65 20 70 Purple Shadow 1299 +204 232 237 Pale Blue 130 +126 30 70 Plum 1300 + 50 0 70 Deep Eggplant 1301 +110 10 150 Eggplant 1302 +250 95 127 Dusty Rose 1303 +180 115 100 Dewberry 1304 +174 198 187 Sage Green 1305 +126 108 124 Gun Metal Gray 1306 +219 100 120 Petal Pink 1307 +154 44 80 Rose Wine Very Dark 1308 +120 35 70 Magenta 1309 +188 54 90 Atom Red 1310 +150 26 50 Mulberry 1311 +132 0 0 Wine 1312 +252 143 12 Bittersweet 1313 +240 110 12 Pumpkin Orange 1314 +235 102 6 Maple 1315 +255 0 1 Blaze Dark 1317 +239 0 0 Hot Cha Cha 1319 +199 126 35 Pollen Gold 1320 +203 203 189 Gray Khaki 1321 +129 137 1 Chartreuse 1322 + 71 2 0 Dark Chocolate 1323 + 70 1 0 Dark Chocolate 1324 +248 245 241 Whisper Gray 1325 +238 227 225 Oyster 1326 +213 199 195 Dk. Whisper Gray 1327 +192 178 183 Nickel Gray 1328 +171 160 168 Dk. Nickel Gray 1329 +238 137 11 Merit Gold 133 +137 112 125 Lavender 1330 +237 246 212 Pale Green 1331 +134 129 5 Deep Chartreuse 1332 +243 182 0 Sunflower Gold 1333 +167 138 5 Autumn Green 1334 +246 224 61 Buttercup 134 +246 236 123 Daffodil 135 +254 255 255 Paper White 1351 + 40 40 40 Black 1352 +245 182 59 Yellow Gold 136 +185 180 145 Loden Green Medium Light 1366 +255 180 0 Goldenrod 1367 +246 245 186 Mellow Yellow 137 +195 185 150 Gravel 1389 +230 25 25 Red 1393 + 89 82 52 Dark Green / Grey 140 +185 25 25 Ruby 1401 +139 144 93 Medium Olive Green 142 +172 172 123 Sage Green 143 +225 225 225 Silver Gray 1465 +178 189 56 Fresh Green 147 +141 244 211 Blue Topaz 148 +148 199 150 Hemlock 149 + 52 150 105 Green Peacock 1503 +193 203 185 Putty 1508 +131 187 146 Mint Green 151 +122 179 29 Lime Green 1510 +238 80 120 Deep Rose 1511 + 0 122 103 Wild Peacock 1513 +255 130 180 Pink Mist 1515 + 1 79 58 Coachman Green 1517 +214 241 238 Light Blue 152 +235 136 128 Peach Bloosom 153 +205 5 77 Lt. Rose 1533 + 52 125 203 Sapphire 1534 + 35 35 139 Team Blue 1535 + 8 23 5 Midnight Teal 1536 +246 83 43 Tangerine 154 +255 214 199 Pinkish Beige 1543 +156 100 132 Hot Pink 1545 +205 168 104 Tan 1549 +108 142 135 Cilantro 1550 +128 176 174 Mystic 1551 +108 124 113 Teal 1552 +140 116 140 Antique Lilac 1554 +240 90 115 Dusky Pink 1558 +230 211 170 Palest Yellow 156 +104 224 248 Turquoise 1560 +125 120 199 Violet 1561 +180 174 140 Winter Pear 157 +199 191 160 Wood Ash 159 + 25 30 45 Black 1598 + 15 60 15 Mallard Green 1609 +209 186 131 Cocoon 161 +194 208 112 Pale Meadow Green 162 +222 129 111 Rose Wine Medium 169 +170 175 180 Traditional Gray 1711 + 0 200 0 Harvest Green 1718 +140 205 175 Pale Green 1720 +160 145 130 Taupe 1721 + 15 15 125 Royal 1728 +250 210 170 Impala 1800 +250 220 150 Golden Haze 1801 +255 200 150 Opaline 1802 +255 155 110 Light Orange 1803 + 55 90 115 Wedgewood Blue 1804 + 40 80 90 Dark Bottle Green 1805 +160 185 195 Pale Blue 1806 +180 150 130 Fawn 1807 +210 175 155 Toasted Almond 1808 +160 125 130 Amethyst Dark 1809 +100 53 98 Plum Wine 181 +100 80 85 Peppercorn 1810 + 60 40 55 Deep Purple 1811 +110 45 90 Dark Purple 1812 +110 45 65 Dark Maroon 1813 +175 75 105 Dusty Rose 1814 +145 180 50 Bright Olive Green 1815 +215 245 140 Pale Yellow 1816 +170 175 20 Peapod 1817 +200 245 140 Brilliant Lime 1818 +195 145 60 Bright Gold 1819 +195 140 115 Dk. Ecru 1820 +250 200 150 Beach Sand 1821 +150 90 55 Light Cocoa 1822 +150 90 40 Medium Brown 1823 +210 195 175 Nude Gold 1824 + 95 150 25 Meadow Green 1825 +170 130 10 Bullion 1826 +255 100 60 Dark Mango 1827 +255 230 170 Blonde 1828 +240 235 165 PaleYellow 1829 +180 115 150 Rose Dust 1830 +145 225 45 Fluorescent Green 1831 +225 145 25 Goldenrod 1832 +210 95 0 Orange 1833 +175 170 5 Green / Gold 1834 +110 130 5 Meadow Green 1835 + 60 75 5 Green 1836 +155 115 90 Orange / Brown 1837 +180 155 125 Natural 1838 +240 200 135 Apricot Cream 1839 + 88 23 115 Royal Purple 199 +202 109 109 Cherry 200 +252 181 173 Petal Peach 208 +243 220 200 Pink Champagne 209 +245 200 184 Pastel Mauve 211 +246 172 149 Salmon 214 +246 216 177 Nude 221 +214 221 89 Pale Yellow 231 + 52 80 13 Green 235 + 74 79 13 Dark Olive 236 + 59 57 30 Best Brown 237 + 88 35 46 Maroon 240 +116 82 115 Crushed Grape 243 +108 110 95 Florentine 244 +146 163 162 Quarry 246 +199 218 111 Grey Moss 259 +244 151 151 Shrimp 262 +253 217 225 Delicate Mauve 278 +134 80 156 Mulberry 279 +200 187 189 Titanium 280 +165 119 51 Brown 281 +105 90 39 Dark Green / Yellow 285 +142 57 30 Bark Dark 292 + 76 49 35 Dark Brown 293 +100 65 38 Brown 294 + 67 70 22 Green 295 +165 123 63 Shimmering Gold 298 +115 78 42 Chipmunk 299 + 32 39 33 Carbon Black 300 + 88 87 31 Med. Army Green 302 +226 195 137 Sand Stone Medium Light 303 +227 219 194 White Asparagus 304 +245 179 29 Light Orange 304 + 66 108 26 Palmetto 305 +124 133 49 Medium Green / Yellow 306 +179 230 169 Spring Frost 307 +111 140 80 Grass Green 308 +172 187 145 Laurel Green 309 + 74 92 101 Dark Grey / Blue 310 +250 183 175 Flesh Pink 311 +140 87 57 Dark Brown 312 +239 238 150 Light Sulphur 3120 +241 197 132 Peach 3122 +250 240 125 Light Yellow 3125 +249 209 23 Manila 3129 +187 149 117 Champagne 313 +183 148 118 Umber 314 +245 239 211 Afterglow 315 +171 197 206 Pale Blue 316 +246 215 8 Canary-BRT 317 +192 117 29 Copper 3170 +132 125 70 Moss 318 +230 192 106 Golden Honey 319 +255 195 195 Carnation Medium 3209 + 80 144 125 Winter Green 321 +255 160 120 Yellow Mist 3212 +255 100 90 Coral 3213 +255 90 125 Dusty Rose 3214 +220 115 125 Tea Rose 3215 +171 97 113 Rose Wine 322 +250 128 110 Blush Medium 3223 +227 54 91 Coral / Dark 3224 +186 173 130 Beachcomber 323 +208 124 67 Topaz Medium 324 +210 160 165 Toasted Champagne 3240 +117 96 101 Black Plum 3241 + 85 10 60 Syrah 3245 +184 33 27 Ruby 325 +120 50 75 Wine 3250 + 95 10 20 Brown 3259 +250 228 209 Chickory Light 326 + 82 10 33 Blackberry 3261 +166 176 255 Medium Blue 3263 +111 102 119 Cadet 3264 + 81 69 93 Midnight Grey 3266 +255 238 222 Light Coral 327 +217 232 248 Pale Baby Bleu 328 +239 242 241 White 329 + 10 4 51 Deep Arctic Sky 330 +200 235 252 Ice Blue 3305 +137 145 162 Medium Purple 3306 +131 139 131 Dark Silver 3307 +183 232 209 Mint 3309 +255 254 203 Pale Lemon 331 +150 198 242 Pale Blue 3313 + 80 202 203 Spearmint 3318 + 47 158 159 Baltic 3319 +185 184 163 Agate Gray 332 + 33 181 140 Dark Aqua 3320 + 69 83 69 Dark Grey / Green 3322 + 22 95 102 Deep Peacock 3323 + 33 85 144 Turkish Sea 3324 + 79 90 79 Granite 3327 + 67 163 212 Light Blue 3328 + 58 79 79 Dk. Steel 3329 +252 255 220 Jonquil Very Light 333 + 14 72 99 Stellar Blue 3331 + 14 52 99 Dark Blue 3336 + 3 30 63 Navy Blue 3339 +255 187 179 Salmon Pink 334 + 12 28 48 Dark Blue Grey 3346 + 98 79 36 Dark Olive Green 335 + 3 36 46 Ivy 3351 +165 110 104 Heather Rose 336 + 96 73 37 Light Cocoa 337 + 90 102 117 Dark Steel Blue 338 +112 112 95 Palm Leaf 339 +168 172 160 Stone Grey 340 +255 255 240 Light Beige 3400 +245 235 190 Transparent Yellow 3401 +232 222 175 Light Yellow / Orange 3402 +232 194 133 Sahara Sun 3403 +246 226 181 Wheat 3404 +244 217 162 Pale Yellow 3405 +245 229 188 Ecru 3406 +173 156 98 Warm Gray 3407 + 64 60 43 Black Avocado Green 341 +212 164 88 Golden Lights 3411 +171 126 81 Gold 3412 +139 80 37 Brown 3418 +138 140 121 Pale Grey 342 + 99 102 75 Olive Branch 3420 + 97 87 58 Olive Drab 3421 +167 136 43 Medium Ginger 3422 +175 100 25 Tan Brown 3423 +185 75 25 Brick Dark 3424 +167 105 33 Inca Gold 3431 +135 75 21 Cinnamon 3432 +129 58 15 Chocolate 3433 +160 40 15 Red Bittersweet 3434 + 88 50 13 Mocha Brown / Very Dark 3435 +111 94 39 Pharaoh Gold 344 + 64 34 4 Dark Brown 3445 + 50 5 10 Dark Chocolate 3455 +173 146 88 Medium Yellow 346 +224 154 146 Coral 347 +113 134 161 Medium Blue 348 +106 128 139 Smoke Blue 350 + 42 82 22 Blue Spruce 351 +178 236 130 Lime 3510 +105 255 158 Seafrost 3511 +186 181 128 Beechnut 3514 +177 213 141 Green Oak 3515 +186 225 124 Lime 3516 +118 113 60 Earth 3517 + 85 96 50 Pale Green 3518 +127 255 65 Bright Green 3519 +155 55 42 Indian Paintbrush 352 +138 192 47 Med Olive Green 3521 + 17 190 62 Harvest Green 3522 + 68 126 53 Medium Green 3524 + 51 130 93 Mint Green Dark 3525 + 64 63 98 Deep Cobalt 353 + 86 105 25 Palmetto 3532 + 25 93 99 Deep Peacock 3535 + 6 70 34 Dark Green 3538 + 67 83 68 French Green 354 +180 164 55 Medium Green / Yellow 3546 + 55 70 10 Laurel Green Dark 3560 + 65 113 117 Dk. Winter Sky 3600 + 54 68 68 Dk. Night Blue 3601 + 58 73 79 Midnight 3602 +211 203 177 Birch 3613 +141 159 141 Slate Grey 3615 +104 85 61 Dark Olive Green 3617 +128 128 128 Silver 3625 + 76 78 82 Light Charcoal 3630 + 62 68 62 Charcoal 3635 +195 5 100 Dark Grenandine 3844 +254 232 49 Straw 3853 +241 154 133 Peach 3860 +115 20 30 Brown 3863 +110 140 151 Country Blue 3884 +174 41 41 Christmas Red 3900 +207 125 166 Rose Pink 3935 +175 194 46 Lime 3970 +180 185 165 Khaki Beige 501 +239 200 16 Cornsilk 502 + 12 8 45 Deep Arctic Sky 505 +249 230 202 Flesh 508 +253 243 218 Light Cream 520 +178 108 41 Tiger Eye 521 +231 144 2 Autumn Gold 523 + 34 3 39 Dk. Navy 524 + 52 72 30 English Green 525 + 17 54 117 Cobalt Blue 526 +120 20 60 Purple Ice 534 +125 38 42 Burgundy 535 + 17 20 8 Forest Green 538 +255 255 0 Gold / Yellow 542 +225 0 0 Lipstick 561 +255 180 53 Spice 562 +243 160 1 Butterfly Gold 567 +230 109 0 Cinnamon 568 + 22 95 40 Garden Green 569 + 55 140 55 Bright Green 570 + 8 142 108 Deep Aqua 571 + 16 10 124 Blue Ribbon 572 + 53 105 61 Mint Julep 580 +150 60 70 Deep Rose 607 +149 149 139 GS Gray 610 +244 244 248 Silver Blue 61001 +245 238 242 White 61002 + 32 4 22 Dk. Navy 61005 +150 150 149 Dark Grey 61011 +253 205 203 Salmon Pink 61015 +239 202 174 Bisque 61017 +255 150 134 Coral Reef 61019 +255 117 112 Carmine Rose Light 61020 +203 59 28 Firecracker 61021 +245 243 213 Eggshell 61022 +255 222 5 Canary 61023 +255 174 0 Canary Yellow Medium 61024 +212 117 0 Almond 61025 +129 131 204 Violet 61028 +106 128 220 Jay Blue 61029 +164 181 234 Pale Blue 61030 +214 179 205 Winsome Orchid 61031 +151 77 180 Mulberry 61032 +179 44 146 Dusty Fuschia 61033 +167 43 74 Rose Red 61034 +103 17 25 Brown 61035 +139 54 52 Garnet medium 61036 +232 2 0 Foxy Red 61037 +202 0 5 Red Riding Hood 61039 +106 94 94 Pewter Grey / Dark 61040 +117 114 114 Dark Grey 61041 + 34 18 107 Purple 61042 + 56 38 60 Dark Maroon 61043 + 85 25 69 French Raspberry Red 61044 +139 203 203 Tropical Wave 61045 +109 143 143 Medium Blue / Grey 61046 +191 207 161 Reed 61047 +107 161 104 Kelly 61049 + 42 108 49 Dark Green 61051 +232 187 159 Evening Sand 61054 +233 175 110 Apricot Nectar 61055 +208 116 68 Topaz Medium 61056 +117 34 18 Bark 61057 +103 40 29 Tan 61058 +100 68 63 Mahogony 61059 +255 234 166 Jonquil Light 61061 +240 249 233 Pale Yellow-Green 61063 +255 213 236 Petal Pink 61064 +255 139 0 Citrus Dark 61065 +255 238 164 Cream Brown 61066 +255 247 127 Straw Light 61067 +245 233 233 Light Pink 61068 +232 174 84 Toast 61070 +239 233 220 Light Peach 61071 +213 223 254 Bright White 61074 + 41 35 121 Dark Ink 61076 +196 207 206 Slate Bleu 61077 +255 114 0 Orange Slice 61078 + 35 117 83 Green Forest 61079 +208 118 193 Purple 61080 +207 93 97 Dusty Rose / Very Dark 61081 +248 228 201 Aspen White 61082 +255 201 79 Butternut 61083 +219 204 195 Crystal Gray 61085 +255 255 237 Ivory White 61086 + 27 120 149 Teal 61090 + 64 170 222 Medium blue 61094 + 49 170 209 Surf Blue 61095 + 7 87 135 Fire Blue 61096 +187 215 169 Mint 61100 + 53 136 75 Dark Green 61101 + 55 30 24 Dark Brown 61103 +204 211 148 Light Khaki Green 61104 +255 149 195 Fairy Tale Pink 61108 +241 46 132 Ruby Glint 61109 +250 200 219 Memphis Belle 61111 + 63 14 106 Purple Accent 61112 +255 228 232 Oyster 61113 +255 205 218 Mauve Pink 61115 +255 188 202 Beauty Rose Light 61117 +218 88 125 Cranberry medium 61119 +252 237 238 Carnation Ultra Light 61120 +243 168 213 Rose Quartz 61121 +102 13 99 Violet Very Dark 61122 +255 197 0 Sunflower 61124 +230 133 54 Sun Orange 61126 +230 202 170 Pale Peach 61127 +157 101 78 Copper Brown 61128 +118 28 29 Wine 61129 +110 42 38 Red Wine 61130 + 83 66 70 Dark Brown 61131 + 95 144 187 Medium Blue 61134 +255 218 108 Snapdragon 61135 +255 180 6 Manila 61137 + 57 64 142 Flag Blue 61143 +136 172 221 Periwinkle 61145 +196 0 6 Red Berry 61147 +255 154 178 Rose 61148 +215 164 126 Tan 61149 +214 229 232 Sapphire Medium Light 61151 +255 123 160 Medium Pink 61154 + 90 90 10 Palmetto 61156 +145 45 16 Red Bittersweet 61158 +203 179 0 Royal Gold 61159 + 41 38 54 Dark Grey 61162 +190 205 221 Blue Hint 61165 +104 97 96 Medium Grey / Green 61166 +255 217 120 Glow 61167 +255 131 29 Soleil 61168 +128 18 21 Cherokee Red 61169 +128 63 42 Light Cocoa 61170 + 82 51 85 Dark Purple 61171 +103 94 125 Lilac Mist 61172 +128 98 75 Natural Brown 61173 + 27 79 11 Green 61174 + 97 96 63 Olive Drab 61175 +102 100 33 Lt. Army Green 61176 +174 178 86 Marsh 61177 +145 95 101 Cognac 61179 +145 102 95 Cognac 61180 +194 35 20 Bright Red 61181 + 44 12 78 Dark Purple / Navy 61183 +255 73 5 Sunkist 61184 +255 163 0 Bright Orange 61185 +255 214 0 Straw Very Dark 61187 + 66 8 97 Royal Purple 61189 +159 35 71 Brandy 61190 +213 4 118 Dark Rose 61191 +188 6 104 Dark Grenandine 61192 +172 128 186 Grape 61193 +145 74 180 Laurie Lilac 61194 + 67 20 103 Dark Purple 61195 + 88 103 203 Marine Blue 61196 + 71 26 95 Purple Accent 61197 + 86 60 125 Dark Violet 61198 + 42 22 88 Violet Blue 61200 +173 184 211 Ice Blue 61203 + 65 93 115 Medium Green / Blue 61206 + 50 87 74 Enchanted Sea 61208 +209 193 132 Medium Tan 61209 +147 126 105 Dark Beige 61211 +125 110 90 Medium Green / Yellow 61212 +114 64 74 Dark Purple 61214 +192 182 179 Mercury 61218 +103 97 96 Medium Grey / Green 61219 + 77 64 68 Dark Grey 61220 +141 178 240 Medium Blue 61222 +255 138 192 Carnation Medium Light 61224 +255 210 241 Light Pink 61225 + 49 103 114 Harbor 61230 +255 14 111 Fuschia 61231 + 52 13 107 Purple Accent 61235 +226 216 225 Light Orange / Red 61236 +101 180 227 Ozone 61249 + 0 134 198 Blue / Green 61252 + 0 87 162 Solar Blue 61253 +170 5 148 Purple 61255 +255 201 167 Dusty Salmon 61258 +254 125 110 Blush Medium 61259 +244 244 247 Eggshell 61350 +243 244 248 Silver Blue 61351 + 35 40 0 Dark Green 61352 + 81 94 99 Bleu Mist Dark 61353 + 61 58 56 Black 61354 + 97 98 109 Dark Grey / Blue 61355 +124 125 138 Medium Blue 61356 +172 168 170 Stone Grey 61357 + 97 77 73 Warm Earth 61358 +219 190 0 Liberty Gold 61359 +113 66 0 Hazel 61360 +130 106 0 Olive Green Very Dark 61361 + 93 80 39 Dark Olive Green 61362 + 88 74 63 Dark Brown 61363 +170 115 0 Ginger 61364 +243 208 0 Canary-BRT 61365 +159 148 120 Taupe 61366 +242 146 0 Medium Orange 61367 +219 121 0 Gold / Orange 61368 +253 196 40 Sunset 61369 +102 62 55 Sepia 61370 + 89 60 21 Mocha Brown / Very Dark 61371 +192 155 93 Medium Beige 61372 +255 140 0 Citrus Dark 61373 +173 107 0 Orange / Brown 61374 +190 120 33 Copper 61375 +211 150 95 Sunkissed 61376 +123 67 39 Brown 61377 +220 209 186 Whisper Pink 61378 +137 123 96 Espresso 61379 +116 94 90 Medium Brown 61380 +182 59 0 Bright Rust 61381 +143 97 54 Unaka Sand 61382 +159 74 0 Rosewood Dark 61383 +107 51 0 Date 61384 + 86 34 27 Fudge Dark 61385 + 94 32 34 Cranberry 61386 +245 194 158 Opaline 61387 +127 78 77 Roan Rouge 61388 +192 157 121 Tawny Medium 61389 +172 0 0 Blood Red 61390 +149 58 10 Bright Rust 61391 +233 0 0 Foxy Red 61392 +215 0 0 Paprika Red 61393 +220 150 149 Sea Pink 61394 +183 0 0 Scarlet Flame 61395 +255 115 141 Magenta Medium 61396 + 71 46 39 Friar Brown 61397 +195 0 0 Radiant Red 61398 +145 0 0 Terra Cotta 61399 +139 30 1 Chestnut 614 +124 0 0 Tawny Brown 61400 +132 0 1 Wine 61401 +110 33 0 Brown 61402 +214 110 0 Gold / Orange 61403 +236 0 94 Carnation Dark 61404 +122 19 34 Cherokee Red 61405 +156 27 55 Cranberry 61406 +122 44 54 Pale Maroon 61407 +244 206 233 Pale Pink 61408 +164 0 66 Burgundy 61409 +237 103 162 Fresh Mint 61410 +106 0 162 Aubergine 61411 +103 8 54 Evening Brandy 61412 +123 49 78 Wine 61413 +104 54 122 Bright Mulberry 61414 + 54 60 102 Dark Navy Blue 61415 + 43 39 144 Team Blue 61416 + 64 42 128 Dark Royal Blue 61417 +119 89 126 Crushed Grape 61418 + 64 31 61 Deep Slate Gray 61419 + 59 39 74 Fleet Blue 61420 + 61 36 64 Deep Slate Gray 61421 + 56 27 58 Dark Purple / Navy 61422 + 79 30 58 Dark Maroon 61423 + 34 64 153 Fire Blue 61424 + 0 81 179 Ocean Blue 61425 + 0 56 139 Blue 61426 + 15 58 101 Dark Blue 61427 + 0 113 175 Tropical Blue 61428 + 0 120 211 China Blue 61429 + 0 157 218 Country Blue 61430 +105 151 193 Pale Purple 61431 + 66 87 121 Dark Blue 61432 +116 188 215 Pale blue 61433 +162 167 188 LightPurple 61434 + 0 95 163 Dark Blue 61435 + 68 66 91 Slate Gray 61436 + 0 132 182 Peacock 61437 + 35 46 86 Mazarine Blue 61438 + 45 33 40 Black 61439 + 95 195 205 Sky 61440 + 30 50 70 Blue Velvet 61441 + 0 113 143 Blue / Green 61442 + 0 128 159 Blue / Green 61443 + 10 61 96 Dark Blue 61444 + 60 70 102 Deep Cobalt 61445 +101 180 183 Blue Turquoise 61446 + 0 99 99 Spruce 61447 + 0 100 86 Green Forest 61448 + 29 34 42 Black 61449 + 55 35 28 Dark Brown 61450 + 0 95 71 Frosty Spruce 61451 + 90 150 73 Clear Green 61452 +138 194 119 Medium Green 61453 + 45 57 34 Bronze Green 61454 + 70 40 31 Dark Brown 61455 +251 213 0 Moonbeam 61456 +229 0 0 Foxy Red 61457 +151 0 6 Terra Cotta 61458 +149 206 238 Pale Blue 61459 + 23 60 134 Blue Twirl 61460 + 36 36 54 Seal 61461 +197 175 152 Sea Shell 61462 +115 63 3 Hazel 61463 +200 196 196 Bleu Mist 61464 +158 157 172 Steel Gray 61465 + 54 93 178 Medium Blue 61466 + 28 62 157 Royal Blue 61467 + 0 112 192 Cerulean 61468 + 0 102 48 Green 61469 +140 115 90 Doeskin 61470 +100 104 126 Heron 61471 +200 173 123 Flax 61472 + 86 44 26 Arabian Spice 61473 +177 179 168 Pigeon 61474 +149 142 145 GS Gray 61475 +232 217 187 Seedpearl 61476 +224 184 154 Honey Butter 61477 + 34 126 114 Jade Green 61503 +163 131 115 Med. Taupe 61508 +146 212 92 Lime 61510 +255 48 130 Cyclamen Pink 61511 + 24 124 154 Dark Aqua Green 61513 + 62 101 106 Dark Blue / Green 61517 +202 8 79 Lt. Rose 61533 + 16 27 147 Blue 61535 + 48 33 34 Black Wine 61536 +126 0 0 Purple 61594 +233 189 150 Dusty Peach 619 +216 254 40 Fluorescent Yellow 61901 +144 255 0 Erin Green 61904 +255 241 0 Gold / Yellow 61905 +255 111 150 Pink 61909 +255 0 130 Hot Pink 61910 +255 0 68 Deep Red 61913 +255 158 6 Honeydew 61914 +255 72 0 Sunkist 61953 +205 57 0 Sunset 621 +248 212 138 Blond 622 +119 113 19 Moss Green 630 + 28 111 81 Med. Aqua 640 + 38 35 69 Arctic Sky 643 +105 55 60 Sepia 670 +255 110 0 Orange Slice 677 +185 165 100 Pale Green / Yellow 688 +145 235 195 Pale Mint Green 817 +220 210 175 Cocoa Mulch 836 + 70 135 180 Pale Purple 861 +235 210 120 Popcorn 868 diff --git a/inkstitch/palettes/InkStitch Sulky Rayon.gpl b/inkstitch/palettes/InkStitch Sulky Rayon.gpl new file mode 100644 index 0000000..a30e11d --- /dev/null +++ b/inkstitch/palettes/InkStitch Sulky Rayon.gpl @@ -0,0 +1,284 @@ +GIMP Palette +Name: Ink/Stitch: Sulky Rayon +Columns: 4 +# RGB Value Color Name Number +249 249 255 Bright White 1001 +249 249 244 Soft White 1002 +249 249 234 Off White 1071 +249 249 224 Pale Sea Foam 1086 +223 223 203 Silver Gray 1218 +203 203 189 Gray Khaki 1321 +183 183 175 Dk. Gray Khaki 1270 +239 239 229 Light Gray Khaki 1268 +224 219 219 Lt. Putty 1229 +193 203 185 Putty 1508 +149 164 144 Lt. Khaki 1211 +150 170 139 Drab Green 1228 + 99 99 39 Lt. Army Green 1156 + 89 89 29 Med. Army Green 1173 + 39 59 0 Dk. Army Green 1210 +189 209 99 Lt. Avocado 1209 +119 113 19 Moss Green 630 + 99 99 45 Khaki 1212 + 74 74 25 Hedge Green 1272 + 54 54 31 Dark Forest 1273 + 60 79 49 Evergreen 1271 +240 248 236 Pale Yellow-Green 1063 +237 246 212 Pale Green 1331 +194 211 125 Lt. Grass Green 1100 +166 194 132 Mint Green 1047 +112 119 15 Pistachio 1276 +122 179 29 Lime Green 1510 + 92 154 26 Nile Green 1274 + 66 160 33 Grass Green 1049 + 2 118 2 Ivy Green 1277 +147 209 108 Willow Green 1279 + 70 183 116 Dk. Willow Green 1280 + 9 133 49 True Green 1101 + 0 175 56 Bright Green 1278 + 30 100 25 Christmas Green 1051 + 25 50 7 Classic Green 1232 + 22 95 40 Garden Green 569 + 23 85 35 Emerald Green 1079 + 12 61 3 Mallard Green 1208 + 46 131 89 Teal 1046 + 52 72 30 English Green 525 + 17 20 8 Forest Green 538 + 11 65 51 Dk. Teal 1230 +165 175 104 Pastel Yellow-Green 1104 +137 152 18 Avocado 1177 +129 137 1 Chartreuse 1322 +134 129 5 Deep Chartreuse 1332 + 81 83 8 Med. Dk. Avocado 1176 + 21 45 4 Dk. Avocado 1175 + 13 41 4 Dk. Pine Green 1174 +190 205 200 Jade Tint 1077 +224 230 200 Sea Mist 1275 +128 163 136 Sea Foam Green 1207 + 65 85 69 French Green 1287 + 2 20 15 Dk. Khaki 1103 + 53 105 61 Mint Julep 580 + 52 50 19 Dk. French Green 1286 +195 239 191 Lt. Teal 1045 + 15 165 111 Aqua 1288 + 28 111 81 Med. Aqua 640 + 8 142 108 Deep Aqua 571 + 52 150 105 Green Peacock 1503 + 1 79 58 Coachman Green 1517 +226 226 235 Powder Blue Tint 1151 +168 200 188 Pastel Jade 1204 +110 144 165 Med. Jade 1205 +174 198 187 Sage Green 1305 + 19 79 69 Dk. Sage Green 1285 + 16 57 74 Deep Teal 1162 + 13 34 16 Ocean Teal 1233 + 8 24 14 Weathered Blue 1171 + 8 23 5 Midnight Teal 1536 + 0 122 103 Wild Peacock 1513 + 22 98 95 Deep Peacock 1090 + 30 110 111 Dark Jade 1206 + 15 105 120 Dk. Turquoise 1096 + 48 111 117 Bright Turquoise 1251 + 39 92 112 Duck Wing Blue 1250 + 16 209 189 Turquoise 1095 + 38 191 202 Med. Turquoise 1094 + 9 161 168 Bright Peacock 1252 + 52 125 203 Sapphire 1534 + 27 76 164 Dk. Sapphire 1253 + 24 43 86 Deep Turquoise 1202 +166 162 198 Periwinkle 1030 + 87 54 158 Dk. Periwinkle 1226 + 84 58 141 Nassau Blue 1242 + 68 35 93 Deep Nassau Blue 1293 + 50 30 80 Bright Navy Blue 1042 + 42 20 63 Admiral Navy Blue 1199 + 34 15 52 Med. Navy 1197 + 20 11 45 Med. Dk. Navy 1200 + 90 90 139 Royal Blue 1076 + 17 54 117 Cobalt Blue 526 + 35 35 139 Team Blue 1535 + 16 10 124 Blue Ribbon 572 + 74 88 112 True Blue 1143 + 60 80 117 Dusty Navy 1198 + 38 35 69 Arctic Sky 643 + 12 8 45 Deep Arctic Sky 505 + 72 61 89 Slate Gray 1283 + 65 32 68 Deep Slate Gray 1294 + 29 6 47 Midnight Blue 1044 + 25 5 37 Dk. Navy 1043 + 2 1 20 Blue Black 1182 +220 224 241 Baby Blue Tint 1223 +214 213 232 Pale Powder Blue 1074 +114 116 131 Winter Sky 1291 +174 184 195 Lt. Weathered Blue 1203 +110 120 140 Med. Weathered Blue 1172 +209 219 255 Lt. Baby Blue 1222 +100 139 190 Med. Powder Blue 1201 + 98 170 220 Cornflower Blue 1249 + 80 125 170 Peacock Blue 1134 +220 235 240 Ice Blue 1289 +210 230 240 Med. Pastel Blue 1248 +180 225 235 Powder Blue 1145 + 70 110 120 Dk. Winter Sky 1284 +209 220 250 Heron Blue 1292 +190 195 225 Baby Blue 1028 +160 195 235 Med. Blue 1029 +150 195 225 Blue 1196 +120 50 152 Deep Purple 1235 + 70 1 110 Royal Purple 1112 + 50 0 70 Deep Eggplant 1301 +110 10 150 Eggplant 1302 +223 229 235 Lt. Sky Blue 1165 +130 135 140 Sterling 1295 +100 70 100 Dk. Plum 1298 +115 90 100 Lt. Plum 1297 +230 175 210 Lavender 1193 +223 190 200 Med. Orchid 1031 +220 130 160 Orchid 1080 +216 100 150 Dk. Orchid 1033 +126 30 70 Plum 1300 + 75 18 45 Dk. Chestnut 1189 +100 40 40 Med. Chestnut 1214 + 80 10 30 Blackberry 1215 + 50 6 20 Black Cherry 1183 +210 30 130 Fuchsia 1192 +190 25 130 Deep Orchid 1255 +230 140 235 Med. Purple 1032 +210 116 215 Lt. Purple 1194 +130 40 142 Purple 1122 + 65 20 70 Purple Shadow 1299 +210 170 240 Hyacinth 1296 +230 185 245 Dusty Lavender 1254 + 55 1 80 Dk. Purple 1195 +243 219 217 Pink Tint 1068 +240 200 180 Pastel Mauve 1113 +240 214 210 Pale Pink 1120 +230 180 170 Pale Peach 1064 +225 175 154 Med. Peach 1015 +236 150 140 Pastel Coral 1016 +240 130 120 Dark Peach 1020 +226 130 100 Salmon Peach 1259 +236 160 130 Peach 1019 +239 223 189 Pastel Peach 1017 +240 196 160 Coral Reef 1258 +233 189 150 Dusty Peach 619 +219 100 120 Petal Pink 1307 +180 110 117 Dk. Mauve 1119 +160 70 86 Med. Burgundy 1190 +120 35 70 Magenta 1309 +198 50 60 Burgundy 1034 +150 26 50 Mulberry 1311 +252 203 223 Pastel Orchid 1111 +250 185 203 Pink 1121 +250 203 203 Pastel Pink 1225 +240 185 185 Lt. Pink 1115 +250 164 164 Lt. Mauve 1108 +240 160 185 Bright Pink 1224 +235 130 150 Sweet Pink 1256 +220 100 150 Hot Pink 1109 +189 30 96 Dk. Rose 1191 +238 80 120 Deep Rose 1511 +229 50 106 Med. Rose 1231 +205 5 77 Lt. Rose 1533 +255 0 75 Red Geranium 1188 +230 0 65 Deep Coral 1257 +255 189 189 Lt. Coral 1148 +250 153 153 Coral 1154 +240 110 120 Brick 1081 +188 61 44 Deep Mauve 1237 +245 169 160 Mauve 1117 +180 115 100 Dewberry 1304 +185 160 150 Taupe 1213 +248 245 241 Whisper Gray 1325 +213 199 195 Dk. Whisper Gray 1327 +234 228 228 Lt. Silver 1236 +192 178 183 Nickel Gray 1328 +183 169 172 Steel Gray 1011 +152 136 140 Gray 1219 +135 115 117 Med. Dk. Khaki 1040 +140 127 131 Med. Dk. Gray 1041 +142 126 126 Med. Steel Gray 1166 +118 89 96 Charcoal Gray 1220 +171 160 168 Dk. Nickel Gray 1329 +126 108 124 Gun Metal Gray 1306 +116 88 108 Smokey Grey 1240 + 60 27 31 Almost Black 1234 + 38 6 5 Black 1005 +175 137 1 Gold Green 1227 +255 247 213 Cream 1022 +255 255 133 Lemon Yellow 1067 +255 247 185 Pale Yellow 1061 +255 241 128 Primrose 1066 +255 240 114 Pastel Yellow 1135 +255 210 38 Maize Yellow 1167 +246 206 105 Gold 1070 +255 230 105 Yellow 1023 +255 229 0 Mimosa Yellow 1187 +255 236 0 Sun Yellow 1124 +252 190 5 Golden Yellow 1185 +239 200 16 Cornsilk 502 +255 193 0 Spark Gold 1083 +243 182 0 Sunflower Gold 1333 +255 184 0 Goldenrod 1024 +255 190 0 Yellow Orange 1137 +211 157 0 Temple Gold 1159 +255 180 53 Spice 562 +252 143 12 Bittersweet 1313 +231 144 2 Autumn Gold 523 +220 140 23 Tan 1126 +175 91 0 Med. Tawny Tan 1056 +122 0 0 Tawny Brown 1058 +102 0 0 Mahogany 1247 +230 109 0 Cinnamon 568 +186 69 0 Dk. Maple 1158 +255 171 87 Apricot 1239 +235 102 2 Maple 1021 +205 57 0 Sunset 621 +172 28 1 Med. Maple 1216 +151 31 1 Chestnut 1217 +106 0 0 Cognac 1264 +238 190 174 Med. Dk. Ecru 1054 + 91 0 0 Sable Brown 1186 +243 160 1 Butterfly Gold 567 +215 128 0 Mine Gold 1025 +255 145 0 Orange Yellow 1065 +255 131 0 Orange Sunrise 1238 +245 116 10 True Orange 1168 +255 102 0 Tangerine 1078 +255 102 1 Orange Red 1184 +203 0 0 Rust 1181 +249 0 0 Lt. Red 1037 +235 0 0 Christmas Red 1147 +225 0 0 Lipstick 561 +235 0 1 True Red 1039 +179 0 0 Red Jubilee 1263 +156 0 0 Bayberry Red 1169 +121 0 0 Dk. Burgundy 1035 +132 0 0 Wine 1312 +247 227 187 Ecru 1082 +250 236 198 Med. Ecru 1127 +235 188 128 Tawny Tan 1055 +232 200 156 Deep Ecru 1149 +195 148 113 Dk. Ecru 1128 +156 109 69 Toast 1266 +151 95 47 Lt. Brown 1170 +155 107 44 Burnt Toast 1265 + 85 22 2 Dark Brown 1130 +134 76 49 Mink Brown 1267 +106 31 6 Brown 1129 + 83 6 1 Dk. Tawny Brown 1059 + 73 0 2 Cloister Brown 1131 +143 98 61 Dk. Taupe 1179 +226 207 199 Silver 1085 +165 137 115 Med. Taupe 1180 +237 156 181 Rosebud 1515 +252 212 176 Peach Fluff 1543 +135 105 107 Purple Accent 1545 +199 171 125 Flax 1549 +138 138 135 Desert Cactus 1550 + 56 140 140 Ocean Aqua 1551 +143 145 140 Dk. Desert Cactus 1552 +117 105 120 Purple Passion 1554 +224 130 117 Tea Rose 1558 + 84 186 196 Marine Aqua 1560 +143 138 176 Deep Hyacinth 1561 diff --git a/inkstitch/palettes/InkStitch Swist Rayon.gpl b/inkstitch/palettes/InkStitch Swist Rayon.gpl new file mode 100644 index 0000000..2e6a90e --- /dev/null +++ b/inkstitch/palettes/InkStitch Swist Rayon.gpl @@ -0,0 +1,231 @@ +GIMP Palette +Name: Ink/Stitch: Swist Rayon +Columns: 4 +# RGB Value Color Name Number +237 235 227 Blanc de Blanc 1618B +224 214 204 White Sand 1618C +224 219 212 Vapor 1620 +227 219 196 White Asparagus 1701 +222 214 166 Garden Glade 1703 +222 224 138 Charlock 1705 +214 201 69 Sulphur Yellow 1706 +235 212 64 Maize 1700 +240 196 79 Mimosa 1708 +247 186 84 Amber Yellow 1693 +227 204 145 Straw 2559 +252 171 71 Marigold 1710 +252 161 23 Radiant Yellow 1712 +219 199 94 Cream Gold 2563 +224 227 163 Young Wheat 2564 +227 204 128 Dusky Citron 2405 +237 209 194 Peach Blush 1661 +224 194 186 Lotus 1663 +237 186 176 Powder Pink 1665 +250 214 196 Creole Pink 1667 +255 194 148 Prairie Sunset 1669 +250 173 148 Salmon 1676 +247 148 122 Peach Pink 1677 +232 112 74 Flamingo 1678 +235 110 48 Mandarin Orange 1681 +230 112 61 Coral Rose 1683 +232 107 82 Emberglow 1685 +245 112 64 Firecracker 2288 +214 92 84 Spiced Coral 2289 +189 87 71 Burnt Sienna 2290 +230 204 201 Pale Lilac 1623 +237 186 204 Sweet Lilac 1625 +250 171 186 Prism Pink 1626 +237 140 166 Aurora Pink 1637 +219 107 158 Phlox Pink 1642 +204 79 110 Pink Flambe 1645 +245 163 166 Peony 1648 +232 135 130 Peach Bloosom 1650 +224 102 97 Porcelain Rose 1652 +214 92 84 Spiced Coral 1654 +199 77 89 Claret Red 1655 +189 71 87 Raspberry Wine 1656 +143 71 84 Dry Rose 1657 +150 74 64 Barn Red 2407 +133 74 69 Pompeii 2173 +184 71 77 Chrysanthemum 2015 +168 77 87 Holly Berry 2016 +222 181 199 Pink Lavender 1880 +217 158 194 Orchid 1881 +189 110 150 Spring Crocus 1882 +189 110 150 Spring Crocus 1883 +212 184 194 winsome Orchid 1874 +196 163 199 Viola 1875 +181 138 179 African Violet 1876 +156 115 163 Hyacinth 1877 +158 133 184 Bouganville 2298 +130 110 171 Dahlia Purple 2299 +112 87 110 Grayish Purple 2300 +135 102 120 Grapeade 2303 +209 212 214 Illusion Blue 1831 +186 201 209 Baby Blue 1832 +156 168 181 Blue Fog 1833 +115 138 179 Allure 1834 +110 122 153 Colony Blue 1835 +117 128 150 Infinity 1836 +201 201 212 Arctic Ice 1790 +150 173 209 Placid Blue 1792 +102 117 171 Wedgewood 1794 + 97 97 163 Violet Storm 1795 + 97 97 163 Violet Storm 1820 + 87 89 135 Purple Mountain 1821 +105 97 135 Twilight Purple 1822 +107 102 125 Heron 1823 +102 92 92 Plum Kitten 1824 + 89 110 138 Coronet Blue 1830 + 99 99 99 Castlerock 2010 +201 209 207 Ice Flow 2456 +196 217 214 Pastel Blue 2457 +173 214 209 Blue Light 2458 +173 214 209 Blue Light 2459 +148 199 214 Moderate Blue 2460 + 38 128 156 Bluejay 2464 + 97 120 163 Blue Yonder 2465 +201 209 207 Ice Flow 1837 +191 204 199 Misty Blue 1838 +158 194 196 Canal Blue 1839 +135 184 181 Aqua Haze 1840 + 89 158 163 Porcelain 1841 + 64 128 128 Green-Blue Slate 1842 + 64 125 143 Larkspur 1843 + 74 99 120 Copen Blue 1844 +161 201 196 Eggshell Blue 1730 + 71 181 166 Turquoise 2368 + 82 173 156 Waterfall 1732 + 0 140 140 Navigate 1733 + 43 156 135 Sea Green 1734 +181 214 173 Pastel Green 1715 +166 217 168 Green Ash 1716 +143 191 135 Brilliant Green 1720 +120 212 158 Spring Bud 1722 + 97 189 153 Spearmint 1723 + 79 153 122 Winter Green 1724 +196 227 204 Misty Jade 1735 +135 191 161 Neptune Green 1737 + 84 133 97 Deep Grass Green 1739 + 89 125 97 Comfrey 1740 +204 204 168 Aloe Wash 1741 +191 209 161 Reed 1742 +196 219 150 Butterfly 2369 +181 209 130 Sap Green 1743 +161 196 120 Jade Lime 1744 +117 176 99 Grass Green 1745 +107 156 77 Foliage 1746 + 77 135 84 Medium Green 1753 + 77 135 84 Medium Green 1754 + 89 125 97 Comfrey 2530 + 84 110 79 Vineyard Green 2531 +102 107 84 DeepLichen Green 2532 +186 201 156 Seedling 1762 +158 171 102 Sweet Pea 1764 +122 133 102 Oil Green 1766 +107 107 69 Deep Olive 2088 +194 201 194 Sky Grey 1785 +143 156 150 Silver Blue 1787 +105 107 107 Steel Gray 1789 +189 186 130 Beechnut 2261 +179 181 120 Willow Green 2330 +135 140 92 Cedar 2329 +122 110 74 Gothic Olive 2328 +130 128 97 Aloe 2327 +102 107 84 DeepLichen Green 2326 +110 99 102 Shark 2324 +222 207 194 Crystal Gray 1896 +222 214 194 Bone White 1921 +209 186 158 Ecru Drab 1923 +176 143 112 Praline 1925 +191 158 115 Tan 1906 +222 209 184 Sandshell 1908 +191 186 153 Tidal Foam 1910 +166 143 115 Chanterelle 1912 +230 201 163 Wheat 1914 +204 171 128 Sand 1915 +204 143 105 Sandstone 1916 +204 143 105 Sandstone 1918 +168 122 97 Mocha Mousse 1920 +161 115 79 Lion 1932 +179 135 97 Indian Tan 2122 +199 122 74 Caramel 2123 +184 115 77 Raw Sienna 2124 +186 107 69 Autumn Leaf 2426 +173 92 74 Redwood 2427 +158 97 97 Copper Brown 2428 +219 168 117 Clay 1943 +181 135 92 Biscuit 1945 +168 115 84 Pecan Brown 1946 +173 130 102 Cafe 'Au Lait 1936 +140 97 97 Cognac 1937 +148 107 74 Thrush 1938 +150 115 92 Raw Umber 1939 +138 112 112 Twilight Mauve 1940 +120 94 87 Deep Taupe 2415 +105 84 82 Peppercorn 2414 + 99 87 74 Chocolate Chip 2215 +184 173 166 Ashes Of Roses 1957 +171 163 161 Gull Gray 1958 +153 138 135 Zinc 1959 +115 110 107 Charcoal Gray 1960 +120 107 97 Iron 1961 +194 194 194 Vapor Blue 2499 +171 173 168 Puritan Gray 2500 +143 156 150 Silver Blue 2501 +140 138 135 Wild Dove 2502 +138 133 133 Frost Gray 2503 +128 128 122 Moon Mist 2505 +179 173 166 Dove 1992 +163 161 153 Drizzle 1993 +145 135 133 Medium Gray 1995 + 97 97 97 Pewter 1997 +105 105 107 Stell Gray 1998 +112 107 94 Bungee Cord 1621 +237 235 227 Blanc de Blanc 2620 +227 219 196 White Asparagus 2818 +214 201 69 Sulphur Yellow 2832 +232 191 23 Lemon 2776 +209 181 79 Bamboo 2859 +224 181 79 Yolk Yellow 2785 +230 112 61 Coral Rose 2687 +214 94 84 Deep Sea Coral 2700 +184 71 77 Chrysanthemum 2706 +176 74 69 Baked Apple 2712 +158 71 59 Red Earth 3630 +143 94 77 Russet 2736 +232 204 201 Light Lilac 2623 +214 150 171 Moonlite Mauve 2626 +184 92 97 Baroque Rose 2646 +217 161 153 Bridal Rose 2663 +196 163 199 Lavandula 3286 +143 115 166 Paisley Purple 3224 +115 92 99 Black Plum 3296 +209 212 214 Illusion Blue 3087 +145 189 209 Sky Blue 3049 + 84 125 179 Regatta 3055 + 61 92 135 Delft 3105 + 74 79 99 Blue Indigo 3108 + 79 79 79 Dark Shadow 3116 + 89 163 179 Bright Blue 3077 +102 128 148 Blue Heaven 3045 +179 217 158 Pistachio Green 2903 +117 176 99 Grass Green 3036 + 51 158 92 Kelly Green 2944 + 79 112 79 Elm Green 2917 +125 145 66 Peridot 3005 + 99 107 79 Loden Green 3007 +117 115 89 Dusky Green 3579 +222 207 186 Whisper Pink 3323 +214 199 171 Wood Ash 3329 +186 166 94 PaleGreen-Yellow 3337 +194 171 133 Candied Ginger 3343 +150 125 102 Woodsmoke 3381 +143 99 74 Carob Brown 3426 +120 94 87 Deep Taupe 3438 +168 115 84 Pecan Brown 3369 +158 92 59 Sierra 3402 +184 173 166 Ashes Of Roses 3469 +166 163 171 Dapple Gray 3501 +110 99 102 Shark 3509 +105 84 82 Peppercorn 2621 diff --git a/inkstitch/palettes/InkStitch Tristar Polyester.gpl b/inkstitch/palettes/InkStitch Tristar Polyester.gpl new file mode 100644 index 0000000..f3a9f64 --- /dev/null +++ b/inkstitch/palettes/InkStitch Tristar Polyester.gpl @@ -0,0 +1,302 @@ +GIMP Palette +Name: Ink/Stitch: Tristar Polyester +Columns: 4 +# RGB Value Color Name Number +245 20 232 Cloud Dancer 1451 +242 237 222 Marshmallow NAT +242 235 173 Wax Yellow 2029 +222 224 138 Charlock 2030 +247 224 125 Sunshine 2160 +245 237 128 Limelight 2280 +245 224 59 Buttercup 1858 +232 219 82 Aurora 2314 +245 224 59 Buttercup 2058 +237 204 82 Primrose Yellow 2193 +245 224 122 Lemon Drop 2051 +247 201 102 Sunset Gold 1491 +227 191 56 Super Lemon 2008 +232 191 23 Lemon 2297 +224 171 28 Golden Rod 2033 +235 173 69 Beeswax 2049 +240 189 33 Freesia 2158 +240 219 168 Double Cream 3244 +250 217 153 Golden Haze 2032 +242 224 156 Mellow Yeloow 2159 +252 171 71 Marigold 2219 +245 181 38 Citrus 1859 +242 212 214 Cradle Pink 2106 +245 163 166 Peony 9099 +227 153 161 Sea Pink 2103 +250 173 148 Salmon 2057 +250 173 148 Salmon 2084 +235 179 140 Grain 2211 +240 171 130 Coral Sands 2125 +219 158 84 Golden Nugget 2116 +252 143 79 Tangerine 2044 +227 135 84 Dusty Orange 10050 +227 135 84 Dusty Orange 2195 +252 143 79 Tangerine 2052 +237 133 48 Sun Orange 2037 +237 148 48 Apricot 2294 +252 171 71 Marigold 2291 +245 168 102 Pumpkin 10040 +237 173 112 Apricot Nectar 3227 +242 191 148 Caramel Cream 3238 +250 201 161 Almond Cream 2299 +250 199 138 Sunburst 1857 +240 217 199 Pink Champagne 2130 +235 199 184 Pale Dogwood 2213 +242 209 191 Pearlblush 2081 +247 191 173 Peach Melba 7129 +240 204 181 Bisque 2161 +227 186 163 Evening Sand 2162 +224 176 145 Pink Sand 2164 +209 128 110 Terra Cotta 2123 +232 112 74 Flamingo 1853 +227 99 56 Tigerlily 10058 +199 79 56 Paprika 2215 +214 94 84 Deep Sea Coral 1850 +214 94 84 Deep Sea Coral 2165 +186 79 79 Cranberry 2149 +199 59 59 Rococco Red 1851 +186 87 61 Chili 2007 +184 71 77 Chrysanthemum 2150 +176 74 69 Baked Apple 10024 +176 74 69 Baked Apple 3066 +158 71 59 Red Earth 2066 +179 84 79 Mineral Red 2054 +158 84 74 Marsala 2009 +168 79 79 Garnet Rose 2209 +173 92 74 Redwood 3255 +179 99 89 Dusty Cedar 2171 +138 84 71 Mahogany 2172 +117 64 64 Oxblood Red 10032 +133 74 69 Pompeii 9078 +237 207 199 Pinkish Gray 2001 +237 186 176 Powder Pink 2002 +224 194 186 Lotus 3209 +247 181 186 Candy Pink 2079 +245 163 166 Peony 2117 +237 181 199 Lilac Sachet 2003 +250 171 186 Prism Pink 10044 +230 143 168 Rosebloom 2104 +227 153 161 Sea Pink 2100 +227 115 115 Tea Rose 2090 +242 143 120 Burnt Coral 2151 +227 135 130 Strawberry Ice 2071 +204 148 148 Blush 2110 +222 120 153 Wild Orchid 10048 +227 115 130 Confetti 2304 +209 120 140 Chatea Rose 2005 +163 89 92 Mauvewood 1852 +227 115 115 Tea Rose 2006 +217 69 92 Raspberry 2026 +194 74 112 Lilac Rose 2087 +186 66 94 Carmine 10047 +156 64 84 Sangria 8792 +143 77 94 Violet Quartz 1873 +117 64 64 Oxblood Red 1882 +107 77 82 Plum Wine 2170 +107 77 82 Plum Wine 10043 +247 191 194 Orchid Pink 10052 +181 138 143 Lilas 2012 +130 79 107 Amethyst 2223 +128 71 89 Damson 1875 +130 79 107 Amethyst 2185 +163 64 107 Baton Rouge 2109 +171 89 122 Dahlia Mauve 2256 +201 135 171 Crocus 2811 +196 163 199 Lavandula 2091 +158 133 184 Bouganville 2277 +156 115 163 Hyacinth 9014 +125 84 125 Crushed Grape 2184 + 97 71 97 Loganberry 2183 +125 84 102 Berry Conserve 8830 +112 87 110 Grayish Purple 2803 +102 77 117 Imperial Palace 2108 +110 97 148 Corsican Blue 2105 +171 143 181 Viola 2166 +158 133 184 Bouganville 2252 +191 176 204 Pastel Lilac 2312 +143 130 148 Dusk 2013 +191 176 186 Lavender Frost 2086 +143 138 176 Persian Violet 2167 +148 156 201 Easter Egg 2218 +135 143 194 Jacaranda 1872 +143 145 176 Purple Impression 2118 +163 158 191 Sweet Lavender 8820 +115 138 179 Allure 2146 +143 156 191 Lavender Lustre 3147 +171 181 204 Kentucky Blue 3272 +163 184 209 Powder Blue 2293 +173 186 207 Cashmere Blue 2055 +163 184 209 Powder Blue 1839 +122 153 184 Dusk Blue 2134 +105 135 179 Silver Lake Blue 2133 + 94 117 158 Riviera 2231 + 69 112 163 Bluebell 1840 + 82 102 148 Dutch Blue 9020 + 77 99 138 Federal Blue 2142 + 61 92 135 Delft 2021 + 64 71 128 Deep Ultramarine 9802 + 89 79 140 Liberty 1841 + 84 71 110 Deep Wisteria 3102 + 64 66 97 Deep Cobalt 10057 + 79 84 102 Nightshadow Blue 2141 + 82 77 92 Graystone 2121 + 82 77 92 Graystone 3056 + 82 79 84 Nine Iron 1871 + 79 79 79 Dark Shadow 1185 + 82 77 92 Graystone 9056 + 79 84 102 Nightshadow Blue 2227 +107 102 125 Heron 9826 + 79 84 102 Nightshadow Blue 2127 + 84 99 120 China Blue 3344 + 92 97 128 Velvet Morning 1407 +143 145 176 Purple Impression 2126 +112 120 133 Flint Stone 10045 + 99 99 99 Castlerock 2023 + 92 105 107 Gobelin Blue 2323 + 69 107 122 Bluesteel 2061 + 77 128 163 Cendre Blue 2419 + 36 130 171 Swedish Blue 10046 + 79 138 194 Azure Blue 2259 + 79 138 194 Azure Blue 1868 +145 189 209 Sky Blue 3250 +201 209 207 Ice Flow 1977 +176 191 201 Winter Sky 2015 +186 201 209 Baby Blue 2207 +122 161 171 Cameo Blue 2065 +143 176 191 Forget-Me-Not 2145 + 64 135 163 Blue Moon 2072 + 64 135 163 Blue Moon 2272 + 99 168 191 Blue Mist 2018 + 87 163 199 Norse Blue 2242 +122 173 179 Marine Blue 2092 + 74 158 153 Lagoon 2175 + 64 158 130 Marine Green 1861 + 56 140 140 Bay Leaf 2206 + 97 138 153 Dull Blue 2154 + 82 171 135 Gumdrop Green 10022 +173 214 209 Blue Light 2307 +171 204 217 Crystal Blue 2266 +161 201 196 Eggshell Blue 2048 +173 207 212 Blue Glow 2237 +199 222 209 Opal Blue 2148 +179 191 156 Celadon Green 2070 +201 209 189 Almost Aqua 2177 +196 217 214 Pastel Blue 2290 +173 207 212 Blue Glow 2309 +166 217 168 Green Ash 2262 +158 191 138 Arcadian Green 2078 + 84 153 105 Light Elm Green 10049 + 84 168 89 Vibrant Green 2250 +112 181 128 Absinthe Green 2124 + 61 163 117 Ming Green 1863 +135 128 71 Green Moss 10053 +148 168 79 Dark Citron 3303 +179 204 97 Green Glow 3120 +163 201 92 BrightLime Green 2226 +135 191 161 Neptune Green 10021 + 56 138 94 Leprechaun 1864 + 61 122 105 Bottle Green 2075 + 61 122 105 Bottle Green 2275 + 64 112 74 Fairway 3028 + 64 112 74 Fairway 2228 + 87 99 74 Bronze Green 9817 + 79 99 87 Duck Green 10030 + 66 99 87 Smoke Pine 1837 + 79 79 74 Green Black 1838 +158 171 102 Sweet Pea 3180 +201 184 150 Pale Khaki 10051 +189 186 143 Bog 2025 +168 158 133 Tuffet 2224 +102 115 102 Laurel Wreath 1899 +105 102 79 Burnt Olive 3318 +130 128 97 Aloe 10034 +171 156 66 Golden Olive 2111 +105 94 66 Military Olive 1865 + 97 84 69 Teak 10031 +148 128 82 Antique Bronze 2990 +179 158 140 Light Taupe 2114 +194 171 133 Candied Ginger 2120 +199 176 138 Warm Sand 2077 +199 171 125 Latte 2203 +186 156 130 Warm Taupe 2080 +191 168 140 Sesame 2205 +153 143 117 Dune 1886 +186 158 130 Nouget 2039 +214 194 166 Shifting Sand 2289 +240 212 179 Dawn 2053 +230 201 163 Wheat 2238 +166 143 107 Tannin 2221 +153 135 99 Kelp 2180 +181 156 112 Lark 2344 +222 184 128 New Wheat 2083 +181 176 71 Cress Green 2186 +186 166 94 PaleGreen-Yellow 2319 +194 168 107 Fall Leaf 2128 +222 184 128 New Wheat 1897 +163 120 77 Almond 2042 +194 143 92 Butterum 3273 +212 163 64 Mineral Yellow 2849 +209 140 69 Nugget 2035 +184 115 77 Raw Sienna 1879 +194 97 61 Mecca Orange 2036 +176 92 59 Autumn Glaze 1856 +158 84 74 Marsala 2274 +138 84 71 Mahogany 1883 +138 87 69 Rustic Brown 2311 +158 97 77 Copper Brown 2062 +138 97 71 Rawhide 2306 +217 191 148 Beige 10081 +235 179 140 Grain 2302 +245 214 181 Nude 2265 +224 179 130 Desert Mist 10023 +189 140 94 Sandstorm 2073 +181 135 92 Biscuit 2041 +148 107 74 Thrush 3275 +150 115 92 Raw Umber 2043 +107 79 61 Cocoa Brown 2244 +102 89 77 Canteen 1881 +122 94 82 Acorn 2144 +143 99 74 Carob Brown 2074 +133 112 77 Ermine 2395 +181 156 112 Lark 3198 +166 143 107 Tannin 0853 +191 158 115 Tan 10042 +199 163 130 Sirocco 2298 +217 181 153 Toasted Almond 3040 +209 168 140 Maple Sugar 10041 +242 217 189 Vanilla Cream 8880 +235 219 199 White Smoke 2113 +227 217 196 Birch 2194 +199 189 168 Pelican 2187 +179 166 153 String 2255 +179 173 166 Dove 2085 +194 194 194 Vapor Blue 2806 +204 194 176 Pumice Stone 2096 +171 173 166 Blue Gray 2045 +194 194 194 Vapor Blue 2076 +204 199 191 Wind Chime 2253 +184 173 166 Ashes of Roses 2317 +148 135 120 Moon Rock 2316 +143 130 125 Cinder 2301 +143 130 115 Fungi 2064 +153 158 150 Wrought Iron 2251 +145 153 143 Slate Gray 2260 +120 135 135 Lead 2249 +117 138 148 Cadet Gray 2022 +112 120 133 Flint Stone 2135 +173 186 186 Cloud Blue 2137 +153 158 184 Purple Cloud 2248 +145 135 133 Medium Gray 2155 +150 140 148 Silver Rose 2156 +171 163 161 Gull Gray 2046 +140 138 135 Wild Dove 2350 +138 133 133 Frost Gray 2047 +115 110 107 Charcoal Gray 2082 + 97 92 89 Dark Gull Gray 8832 + 89 84 87 Rabbit 8846 + 99 99 99 Castlerock 2254 + 84 84 66 Olive Night 9100 diff --git a/inkstitch/palettes/InkStitch Tristar Rayon.gpl b/inkstitch/palettes/InkStitch Tristar Rayon.gpl new file mode 100644 index 0000000..1b0954b --- /dev/null +++ b/inkstitch/palettes/InkStitch Tristar Rayon.gpl @@ -0,0 +1,410 @@ +GIMP Palette +Name: Ink/Stitch: Tristar Rayon +Columns: 4 +# RGB Value Color Name Number +245 217 209 Whisper Pink 124 +240 222 212 Light Pink 109 +237 194 201 Lady Pink 112 +230 204 201 Blush 110 +240 194 199 Petal Pink 111 +242 212 214 Soft Pink 125 +227 153 161 Rose 113 +250 171 186 Wild Pink 121 +237 140 166 Petunia 102 +222 120 153 Hot Pink 116 +209 120 140 Carnation 118 +204 99 135 Ruby 114 +186 66 94 Fuchsia 104 +204 99 135 Passion 123 +173 107 117 Berry 115 +173 107 117 New Berry 126 +237 209 194 Floral Pink 127 +227 179 176 Coral Pink 318 +232 186 179 Warm Pink 108 +227 173 181 Dusty Rose 106 +227 153 161 Rost Tint 119 +209 135 133 Cabernet 107 +173 107 117 Passion Rose 128 +158 97 102 Marsh Rose 129 +153 99 112 Perfect Ruby 122 +148 110 112 Carnival Burgundy 131 +245 163 166 Cerise 101 +252 158 156 Easter Pink 117 +237 133 148 Azalea 105 +227 115 130 Flamingo Pink 132 +204 99 135 Punch 205 +204 99 112 Blossom 204 +209 107 112 Cherry 213 +199 77 89 Fire Red 214 +204 99 112 Hot Red 215 +166 105 97 Red Maroon 216 +232 135 130 Japonica 217 +227 115 115 Egyptian Pink 220 +209 120 140 Festive Pink 218 +204 99 112 Spectrum Red 219 +179 84 79 Scarlet 209 +186 97 92 Regal 201 +199 77 89 Foxy 200 +214 94 84 Tuxedo Red 960 +181 89 94 Candy Apple 210 +168 79 79 Apple 206 +181 92 66 Fury 297 +189 87 71 Red 203 +186 79 79 Wild Fire 208 +189 87 71 Copper Glow 221 +176 102 79 Fire Clay 222 +191 122 107 Carmine 305 +209 128 110 Dark Melon 314 +219 150 130 Melon 313 +235 173 148 Papaya 316 +227 153 135 Peach 312 +232 181 150 Tawny 315 +217 181 153 Opal 734 +222 207 186 Flesh 103 +237 186 176 Fantasy Pink 317 +222 166 150 Pink 100 +217 161 153 Rosy Flesh 319 +245 176 163 Blushing Pink 320 +227 186 163 Charade 321 +232 186 179 Light Peach 311 +237 209 194 Bisque 310 +217 161 153 Salmon 120 +237 186 176 Damask Rose 322 +204 148 148 Misty Rose 323 +166 105 97 Cranberry 211 +140 89 94 Black Rose 212 +143 94 77 Burgundy 300 +148 110 112 Sherry 324 +140 102 84 Wine 302 +125 92 89 Maroon 301 +120 94 87 Dark Maroon 303 +115 92 99 Intense Maroon 325 +117 105 120 Port Wine 412 +140 112 125 Velvet Maroon 423 +150 122 153 Rich Plum 424 +140 112 125 Mulberry 409 +140 112 125 Lavender 401 +184 125 143 Plum 425 +186 143 166 Dark Violet 402 +212 181 189 Violet Mist 411 +240 194 199 Violet 404 +214 196 191 Orchid 410 +173 153 161 Satin Wine 426 +186 163 150 Clove Dust 427 +196 186 186 Tanberry 428 +191 176 186 Mistic Lilac 429 +168 161 184 Tulip 406 +143 130 148 Lilac 405 +171 143 181 Iris Patel 430 +143 115 166 Purple 403 +138 117 150 Chianti 431 +140 112 125 Dark Purple 413 +135 97 120 Hyachinthe 408 +105 97 135 Asian Grape 414 +143 130 148 Mauve 407 +135 125 153 Tuscany Blue 432 +117 105 120 Deep Blue 433 +110 99 102 Blue Violet 415 +117 105 120 Blue Ink 528 +112 97 143 Purple Twist 416 +135 125 153 Purple Mist 417 +143 156 184 Copen 526 +173 186 207 Pearl Blue 502 +171 181 204 Cotton Candy 420 +189 194 209 Satin Blue 521 +201 209 207 Ice Blue 534 +186 201 209 Pastel Blue 535 +168 191 209 Sky Blue 523 +135 153 201 April Blue 525 +125 143 163 Delft 513 +143 156 184 Tropicana 576 +115 138 179 Atlantic 575 +120 150 204 Bright Blue 505 +102 117 171 Jay Blue 506 +125 125 176 Postal Blue 507 +179 189 196 French Blue 536 +143 156 184 Lake Blue 419 +112 120 133 Antarctic Blue 418 +143 145 176 Pool Blue 503 +125 125 163 Calico 518 +120 128 150 Imperial Blue 537 +112 120 133 Bristol 538 +156 166 163 Stormy Blue 541 +117 128 150 Dusty Blue 527 +115 110 107 Cool Blue 421 +196 217 214 Baby Blue 522 +171 212 217 Tahiti 539 +148 199 214 Tropical Sky 540 +148 199 214 Mint Julep 570 + 87 163 199 Light Aqua 516 + 87 163 199 Aqua 571 + 87 163 199 Mediterranean 578 +105 135 179 California Blue 572 + 79 138 194 Pacific 573 +122 153 184 Pottery Blue 579 + 94 117 158 Solar 574 +115 138 179 Solar 524 +115 107 153 Sapphire 508 +112 97 143 Titanic Blue 509 +115 107 153 Royal 501 +110 97 148 Blue Suede 504 +105 107 120 Sailor 529 +107 102 125 Eclipse 530 +110 99 102 Fleet Blue 515 +110 99 117 Light Midnight 422 +115 110 107 Light Navy 531 +125 110 94 Cosmic Navy 542 +120 94 87 Navy 532 +120 105 82 Old Navy 533 + 99 87 74 Midnight Blue 514 +105 107 120 Smokey Navy 543 +143 176 191 Misty 577 +112 120 133 Napoleon 580 +117 138 148 Country Blue 605 +105 107 107 Dark Teal 615 +120 107 97 Calico Teal 581 +138 158 161 Winter Blue 512 +115 130 128 Deep Ocean 511 +107 107 97 Florentine 582 +120 163 171 Surf Blue 583 +107 158 171 Unicorn 584 +102 130 140 Marine Blue 585 +135 156 161 Teal 614 +120 153 148 Turqoise 601 +150 194 186 Sea Mist 611 +163 219 199 Green Oyster 607 +125 171 171 Mystic 613 +125 171 171 Light Turquoise 612 +122 161 171 Blue Canyon 586 +102 130 130 Oceanic 602 +156 181 179 Sprite 587 +201 227 207 Frost Blue 588 +171 207 181 Sea Breeze 618 +133 194 171 Pastel Aqua 617 +107 181 176 Jade 600 +112 173 176 Green Flash 590 + 97 156 145 Billiard Green 589 +194 230 207 Sunlit Sea 591 +133 184 163 Peppermint 606 + 82 150 143 Peacock 608 +102 150 130 Pine 629 +110 150 135 Aspen 592 +102 140 135 Cilantro 593 +128 145 125 Field Green 594 +133 150 135 Fern 595 +125 120 102 Stone Green 596 +115 130 128 Spruce 597 +128 128 122 Ever Green 622 + 74 125 112 Garden Green 646 +102 130 130 Dark Emerald 654 +120 163 140 Isle Green 648 +133 184 163 Sea Green 628 +148 163 150 Moss 630 +133 150 135 Weed 631 +145 153 143 Secret Garden 660 +107 112 107 Ivy 661 +125 120 102 Newport 610 +105 107 107 Forest 616 + 99 99 102 Winter Green 609 +117 115 89 Hunter Green 634 +112 107 94 Cape Green 683 +122 133 102 Harbor Green 637 +138 128 89 Petal Green 638 +191 212 171 Mint 627 +161 196 153 Spring Green 626 +158 191 138 Nile 655 +120 176 125 Easter Green 656 +112 181 128 Sap 657 +135 171 77 Glitter Green 658 +143 173 92 Ming 620 +161 196 120 Erin Green 625 +171 194 115 Pastoral Green 650 +122 150 107 Envy 662 +179 191 130 Snowpea 663 +158 176 140 Peel Green 664 +179 179 130 Spring Burst 665 +209 204 168 Frost Green 672 +181 186 143 Bright Green 671 +102 120 102 Green 621 +102 107 84 Holly 635 +128 135 89 Barbado 686 +125 156 112 Merry Green 667 +120 171 105 Green Grass 624 +125 145 94 Light Green 652 +105 158 102 Kelly 623 +105 140 99 Green Pepper 604 + 99 158 130 Grass Harper 653 +112 143 112 Emerald 603 +130 156 125 Freemont 668 +224 222 125 Neon Green 745 +186 184 115 Sun Green 643 +194 173 107 Celery 673 +161 150 110 Foliage Green 644 +138 138 97 Palmetto 642 +140 135 115 Citronette 746 +179 181 168 Palm Leaf 639 +145 143 128 Willow Creek 640 +143 143 120 Olive Drab 641 +212 219 173 Pastel Green 674 +181 186 143 Monteray 681 +166 184 166 Carousel Green 747 +161 153 117 Cove Green 670 +148 148 122 Pear Green 659 +140 153 140 Village Green 690 +135 143 125 Boffin Green 684 +125 120 102 Olive 636 +128 140 133 Lunar Green 685 +107 107 97 Terrace 698 +130 128 97 Essex 687 +115 110 107 Hedge 688 +133 120 102 Congo Green 689 +140 135 115 Cypress 676 +125 117 92 Desert Cactus 645 +153 135 99 Fall Green 677 +204 171 128 Root Gold 694 +194 168 107 Old Gold 716 +194 168 107 Ginger 715 +214 181 107 Rustic Gold 693 +214 181 107 Centennial Gold 738 +209 179 89 Yellow Gold 692 +201 153 89 Yellow Ochre 702 +204 153 89 Nectarine 783 +209 156 71 Brass Gold 782 +204 153 89 Gold 721 +227 204 145 Vanishing Yellow 712 +232 217 191 Wheat 739 +222 209 166 Vanilla Cream 740 +240 227 184 Butter 726 +212 219 173 Creamy Yellow 717 +217 222 148 Lemon 701 +214 201 92 Daffodil 718 +214 201 69 Canary 700 +240 219 105 Moonlight 695 +227 204 128 Corn Silk 741 +240 196 79 Star Gold 697 +240 196 79 Mums 705 +224 181 79 Goldenrod 706 +245 189 74 Wild Flower 727 +247 186 84 Apricot 742 +227 115 115 Glazed Carrot 743 +235 120 92 Popsicle 709 +227 135 84 Sunset 724 +209 130 102 Orange 710 +209 135 87 Sunkist 728 +222 140 92 Golden Poppy 725 +235 153 92 Honeydew 708 +252 143 79 Marigold 707 +219 158 84 Excel Gold 703 +247 176 94 Yellow Mist 744 +235 176 77 Mango 704 +237 186 97 Tangerine 714 +222 173 89 Mustard 720 +250 199 138 Banana 713 +240 209 173 Provincial Tan 770 +237 214 163 Apple Wood 771 +224 179 130 Moon Dance 772 +214 189 145 Antic Penny 691 +222 184 128 Cane 773 +242 194 140 Squash 774 +237 173 112 Toast 808 +237 173 112 Honey 719 +201 135 94 Rust 803 +176 102 79 Red Wood 775 +168 115 84 Bright Sienna 776 +168 107 89 Roanoke Brown 777 +209 189 122 Moon Rock 781 +222 184 128 Glitter Gold 780 +214 189 145 Riviera Sand 779 +201 184 150 Congo Tan 825 +209 186 145 Maize 678 +214 189 145 Cameo 711 +204 171 128 Ashley Gold 784 +199 171 125 Light Topaz 729 +222 184 128 Topoz 730 +235 214 181 Champagne 647 +224 201 168 Bone 750 +227 194 150 Rice Puff 785 +217 181 153 Tropic Tan 786 +209 168 140 Bamboo 810 +199 176 138 Tan 806 +191 168 140 Amber beige 731 +176 143 112 Wicker 805 +181 138 105 Cinnamon 811 +153 110 102 Hazel 818 +184 135 102 Date 787 +173 133 102 Light Brown 802 +145 115 97 Brown 800 +158 128 97 Sienna 816 +184 135 102 Cocoa Bean 821 +153 122 99 Dandy Brown 822 +148 115 79 Coffee 801 +214 163 133 Camel 820 +194 143 92 Almond 819 +189 150 102 Tobacco 823 +181 138 105 Oak Heart 824 +199 176 150 Sea Shell 733 +199 176 150 Taupe 812 +179 150 125 Beige 679 +181 163 133 Rattan 804 +191 168 140 Columbian Tan 752 +179 158 145 Mountain Tan 753 +153 138 115 Pepper Beige 754 +153 135 99 Dark Beige 732 +209 186 145 Pistachio 675 +168 158 133 Oyster 831 +148 135 107 Twilight Gray 832 +158 135 110 Sand 817 +171 145 125 Teakwood 833 +148 120 110 Boulder Brown 834 +145 115 97 Coconut 813 +148 120 110 Mushroom 835 +166 143 115 Earth Brown 925 +140 122 92 Espresso 815 +125 105 77 Hickory 923 +153 140 120 Pipe Gray 941 +166 156 138 Gladstone 940 +186 171 148 Grayrod 929 +214 194 166 Platinum 826 +209 199 184 Pearl 751 +222 201 181 Ivory 809 +224 214 204 Silk 830 +214 194 166 Natural 838 +212 184 166 Ecru 735 +179 145 125 Spice Beige 837 +138 112 112 Java 827 +135 105 107 Mocha 304 +138 112 112 Mohogany 814 +156 130 130 Dogwood 828 +133 120 102 Dark Brown 829 +199 189 173 Morning Gray 916 +204 199 191 Dove 917 +196 186 186 Velvet Gray 918 +196 186 186 Steel 906 +171 163 161 Storm Gray 919 +143 130 148 Ducky Mauve 737 +153 138 135 Canyon Mauve 921 +194 194 194 Fog 926 +199 199 194 Chrome 920 +204 199 191 Pearl Grey 901 +194 194 194 Oxford 915 +168 158 153 Iron 907 +156 158 153 Moody Gray 927 +150 140 148 Silver 903 +196 186 186 Granite 908 +150 140 148 Dark Silver 914 +153 138 135 Black Pearl 909 +214 196 191 Porcelain 905 +204 199 191 Soft Silver 913 +179 181 176 Gray 904 +179 173 166 Cloud 912 +171 173 166 True Gray 902 +179 181 176 Titanium 942 +135 120 130 Metal 943 +138 130 122 Glacier Gray 928 +135 120 130 Charcoal 911 +133 120 102 Dark Shadow 922 +120 107 97 Black 910 +224 219 212 White 930 +237 232 222 Natural White 931 +235 219 209 Egg Shell 899 +227 219 196 Creme 900 diff --git a/inkstitch/palettes/InkStitch Viking Palette.gpl b/inkstitch/palettes/InkStitch Viking Palette.gpl new file mode 100644 index 0000000..f25af56 --- /dev/null +++ b/inkstitch/palettes/InkStitch Viking Palette.gpl @@ -0,0 +1,33 @@ +GIMP Palette +Name: Ink/Stitch: Viking Palette +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 1 + 0 0 255 Blue 2 + 0 255 0 Light Green 3 +255 0 0 Red 4 +255 0 255 Purple 5 +255 255 0 Yellow 6 +132 130 132 Gray 7 + 0 130 255 Light Blue 8 + 0 255 132 Green 9 +255 130 0 Orange 10 +255 162 181 Pink 11 +198 65 0 Brown 12 +255 255 255 White 13 + 0 0 132 Dark Blue 14 + 0 130 0 Dark Green 15 +165 0 0 Dark Red 16 +255 121 123 Light Red 17 +132 0 132 Dark Purple 18 +255 130 255 Light Purple 19 +198 195 0 Dark Yellow 20 +255 255 165 Light Yellow 21 + 66 65 66 Dark Gray 22 +198 195 198 Light Gray 23 +231 65 0 Dark Orange 24 +255 174 66 Light Orange 25 +255 89 123 Dark Pink 26 +255 211 214 Light Pink 27 +132 32 0 Dark Brown 28 +231 97 33 Light Brown 29 diff --git a/inkstitch/palettes/InkStitch Vyapar Rayon.gpl b/inkstitch/palettes/InkStitch Vyapar Rayon.gpl new file mode 100644 index 0000000..4a846ca --- /dev/null +++ b/inkstitch/palettes/InkStitch Vyapar Rayon.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: Vyapar Rayon +Columns: 4 +# RGB Value Color Name Number +245 238 126 Medium Yellow V11022 +246 237 72 Lemon V11023 +249 231 21 Daffodil V11180 +130 118 16 Desert Cactus V11157 +249 223 22 Moonbeam V11083 +250 215 22 Canary V11068 +216 181 17 Pollen Gold V11359 +251 227 77 Lemon V11135 +251 225 77 Star Gold V11124 +251 225 77 Star Gold V11224 +252 208 22 Manila V11125 +252 208 22 Manila V11069 +199 161 14 Black Eyed Susie V11159 +251 228 128 Sunshine V11067 +253 218 87 Star Gold V11171 +254 200 31 Buttercup V11172 +254 200 31 Buttercup V11024 +224 170 15 Pollen Gold V11025 +224 170 15 Pollen Gold V11225 +162 131 5 Autumn Green V11191 +245 228 135 Pale Yellow V11066 +254 217 128 Glow V11026 +254 217 128 Glow V11270 +252 164 18 Mango V11065 +243 206 105 Yellow Gold V11070 +253 173 87 Chamois V11155 +247 127 0 Pumpkin V11278 +244 219 172 Cream V11055 +249 200 172 Peach V11053 +249 200 172 Peach V11017 +252 158 113 Cadmium Orange V11152 +250 186 171 Flesh Pink V11018 +250 186 171 Flesh Pink V11019 +247 74 3 Sunkist V11378 +250 176 174 Emily Pink V11016 +250 176 174 Emily Pink V11317 +251 129 128 Shell Pink V11107 +193 57 40 Dark Rust V11221 +193 57 40 Dark Rust V11179 +126 45 36 Burgundy V11174 +251 191 195 Orchid Pink V11116 +251 191 195 Orchid Pink V11014 +207 19 38 Foxy Red V11147 +176 30 45 Red Berry V11181 +255 162 178 Dusty Rose V11108 +230 6 58 Cerise V11154 +120 45 54 Wine V11384 +120 45 54 Wine V11385 +244 201 201 Crystal Pink V11120 +239 152 164 Medium Pink V11148 +140 37 50 Burgundy V11182 +255 160 190 Petal Pink V11321 +254 120 168 Wild Pink V11309 +203 3 86 Dark Pink V11234 +166 4 69 Burgundy V11034 +226 41 130 Ruby Glint V11109 +226 41 130 Ruby Glint V11110 +172 1 80 Cherrystone V11383 +148 1 67 Cranberry V11183 +109 32 65 Brushed Burgundy V11389 +171 0 101 Hot Peony V11310 +231 128 201 Medium Pink V11080 +236 197 221 Violet V11232 + 85 35 70 Medium Purple V11388 + 85 35 70 Medium Purple V11320 + 79 34 113 Purple Accent V11112 + 70 36 90 Purple Accent V11313 + 44 19 102 Dark Purple / Navy V11322 +180 210 231 Ice Blue V11074 +154 187 223 Baby Blue V11075 + 0 43 127 Blue Suede V11167 +118 170 220 Caribbean Blue V11028 + 58 117 196 Dolphin Blue V11133 + 58 117 196 Dolphin Blue V11029 + 0 56 168 Fire Blue V11134 +196 218 226 Cadet Blue V11092 +196 218 226 Cadet Blue V11027 + 0 82 186 Ocean Blue V11177 + 0 56 106 Salem Blue V11376 + 0 78 110 Peacock V11296 + 0 64 83 Deep Windsor V11161 + 0 122 167 Pretty Blue V11096 + 42 197 218 Periwinkle V11094 + 0 174 200 Aquamarine V11095 + 0 152 180 Dark Blue / Green V11295 + 0 131 155 Dark Aqua Green V11091 + 0 106 119 Mallard Blue V11291 + 0 74 79 Blue Spruce V11290 +202 232 223 Light Blue V11292 + 0 115 116 M. D. Green V11293 + 87 202 194 Aquamarine V11088 + 0 179 170 M. D. Green V11246 + 0 179 170 M. D. Green V11090 + 0 109 102 Imperial Aqua V11185 + 0 109 102 Imperial Aqua V11052 + 0 89 82 Green V11371 +187 234 214 Bleached Aqua V11097 +123 210 182 Pale Green V11046 + 0 123 95 Jade V11280 +180 226 192 Mint V11047 +111 206 156 Seafoam V11245 + 0 134 81 Dark Green V11250 +153 229 178 Pale Aqua V11302 + 0 157 75 Vibrant Green V11251 + 0 123 62 Kelly V11051 + 0 123 62 Kelly V11079 + 34 91 52 Holly V11103 + 31 181 59 Harvest Green V11249 + 52 159 54 Emerald V11101 + 52 159 54 Emerald V11050 + 62 144 50 Kelly V11369 +170 221 110 Spruce V11049 + 87 143 21 Meadow V11170 +187 232 96 Sharp Green V11248 +187 232 96 Sharp Green V11168 +127 187 0 Green Dust V11048 +147 154 6 Tamarack V11140 +176 168 10 Green / Gold V11350 +142 139 122 Pale Grey V11062 +119 116 100 Medium Green / Yellow V11063 +223 219 210 Vapor V11010 +174 175 171 Traditional Gray V11011 +146 150 148 Banner Gray V11118 +103 109 111 Metal V11041 + 49 56 59 Black V11241 + 89 63 62 Dark Brown V11259 + 89 63 62 Dark Brown V11336 + 73 53 50 Egyptian Brown V11059 + 73 53 50 Egyptian Brown V11129 + 64 49 44 Espresso V11130 +215 204 175 Seashell V11138 +234 223 151 Wheat V11260 + 92 71 36 Dark Olive Green V11329 +117 85 38 Light Cocoa V11144 +210 190 145 Taupe V11128 +221 204 165 Sea Mist V11084 + 97 52 19 Mushroom V11058 + 97 52 19 Mushroom V11158 + 89 60 43 Brown V11145 +176 137 113 Tawny Birch V11054 +225 204 185 Whisper Pink V11142 +155 49 28 Red Bittersweet V11038 +241 197 176 Bisque V11114 + 92 38 37 Dark Sepia V11036 +146 52 56 Dark Orange / Red V11238 +242 199 196 Pink Mist V11113 +102 31 43 Warm Wine V11374 +102 31 43 Warm Wine V11035 + 54 64 92 Light Midnight V11362 + 54 64 92 Light Midnight V11365 +155 162 184 Purple Cloud V11363 +101 147 189 Pale Purple V11375 + 0 65 83 Deep Windsor V11162 + 94 152 172 Wonder Blue V11160 + 35 70 54 Mitchell Green V11395 + 37 103 89 Green Forest V11391 + 74 89 41 Green / Yellow V11394 +201 215 163 Pastel Green V11100 +201 215 163 Pastel Green V11099 +217 223 180 Lime Cream V11104 +135 137 6 Crescent Moon V11106 +135 137 6 Crescent Moon V11340 +227 229 133 Pebblestone V11150 +151 140 41 Medium Yellow / Green V11190 + 84 183 200 Capri V11289 +106 201 220 Basic Turquoise V11089 + 0 139 178 Blue / Green V11294 +210 216 217 Illusion Blue V11153 +198 208 214 Pastel Blue V11012 +120 150 178 Country Blue V11360 + 37 85 126 Lake Blue V11364 +110 134 169 Slate Blue V11175 + 52 86 134 Imperial Blue V11042 + 47 52 142 Blue V11076 +127 101 138 Light Grape V11387 + 72 43 88 Blackberry V11233 +234 172 197 Carnatio V11031 +212 107 157 Hot Pink V11319 +234 203 207 Light Pink V11111 +183 114 144 Rose Dust V11235 +178 107 111 K. A. Bronze V11341 +178 107 111 K. A. Bronze V11119 +248 210 205 Crystal Pink V11115 +247 192 190 Desert Bloom V11015 +244 210 176 Alesan V11127 +187 117 49 Toast V11253 +193 144 97 Light Bronze V11126 +171 117 64 Wicker V11056 +163 145 106 Olive Drab V11338 +174 147 110 Beige V11344 +248 231 171 Tusk V11123 +250 224 139 Wheat V11061 +253 180 21 Merit Gold V11137 +164 127 21 Bullion V11192 +204 122 2 Almond V11173 +254 183 120 Buff Orange V11226 +251 108 7 Orange V11178 +250 166 140 Flamingo V11254 +250 166 140 Flamingo V11020 +250 87 3 Paprika V11078 +167 63 16 Old Dark Tex Orange V11021 +251 178 183 Pink Mist V11315 +240 44 45 Scarlet V11307 +215 42 41 Tuxedo Red V11037 +177 39 38 Red Berry V11039 +252 191 201 Pink V11121 +244 84 126 Begonia V11117 +225 7 71 Cerise V11354 +194 4 55 Wildfire V11184 +194 4 55 Wildfire V11081 +168 12 54 Atom Red V11281 +149 23 55 Cabernet V11381 +134 0 93 Dark Red V11188 +170 116 192 Iris V11032 + 93 3 123 Purple Shadow V11122 +102 19 109 Mulberry V11334 +102 19 109 Mulberry V11033 +180 145 210 Pale Purple V11311 + 70 35 95 Purple Accent V11312 +175 189 220 Lake Blue V11030 + 93 120 203 Jay Blue V11143 +103 87 189 Violet V11330 +103 87 189 Violet V11335 + 30 29 120 Royal V11166 + 52 40 117 Violet Blue V11366 + 44 38 92 Blue Ink V11242 + 44 38 92 Blue Ink V11343 + 21 32 61 Navy V11044 + 17 32 81 Light Navy V11243 +147 199 225 Pale Blue V11132 + 0 144 215 Baltic Blue V11176 + 0 144 215 Baltic Blue V11297 + 46 200 213 Indian Ocean Blue V11093 +134 223 210 Seafrost V11045 + 71 215 195 Aqua Pearl V11299 + 0 175 153 Bluestone V11380 + 0 141 131 Brite Jade V11298 + 0 152 135 Peppermint V11279 + 0 74 63 Dark Green V11304 + 0 80 66 Dark Green V11390 + 0 68 55 Evergreen V11397 + 0 201 147 Bluestone V11301 + 0 178 123 Peppermint V11247 + 3 74 49 Evergreen V11370 +179 131 96 Fawn V11057 +236 212 188 Ecru V11149 +132 73 74 Dark Brown V11358 +189 135 135 Light Pink V11141 + 78 32 58 Dark Maroon V11382 + 72 40 54 Plum V11386 + 72 40 54 Plum V11236 + 39 105 109 Deep Atlantic V11252 +141 176 174 Pale Blue V11227 + 79 110 94 Harbor Green V11392 + 36 59 46 Dark Army Green V11303 + 85 105 86 Water Lilly V11396 + 64 74 38 Hedge V11393 + 66 72 23 Green V11357 +140 145 79 Medium Green / Yellow V11156 +155 159 116 Arcadian Green V11306 +178 172 113 Silver Fern V11105 +213 207 163 Light Green / Yellow V11305 +240 237 228 Natural White V11071 +240 237 228 Natural White V11003 +245 242 227 Bright White V11002 +245 240 227 Bright White V11001 +249 231 214 Ivory V11082 +253 221 214 Rosewater V11013 +224 242 229 Billowing Sail V11073 +126 187 37 Medium Green V11169 + 28 39 48 Black V11043 + 28 39 48 Black V11000 + 54 52 58 Black V11244 + 91 91 89 Dark Grey V11131 + 91 91 89 Dark Grey V11318 +233 226 215 Palest Ivory V11086 +121 119 116 Charcoal V11240 +104 103 100 Twilight V11239 +223 217 206 White Sand V11085 +212 206 197 Pearl Gray V11087 +140 138 133 Silvery Gray V11040 +208 0 87 Dark Pink V11187 +209 25 86 Red V11186 +194 181 166 Platinum V11060 +181 168 153 String V11136 +243 66 45 Saffron V11146 +252 225 22 Canary V11223 +250 230 16 Daffodil V11064 diff --git a/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl b/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl new file mode 100644 index 0000000..0430d4a --- /dev/null +++ b/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl @@ -0,0 +1,174 @@ +GIMP Palette +Name: Ink/Stitch: Wonderfil Polyester +Columns: 4 +# RGB Value Color Name Number +255 215 221 Light Silky Pink 1007 +228 108 88 Salmon Pink 1012 +158 2 57 Dark Cherry 1017 +255 232 218 Light Flesh 1020 +254 89 184 Flesh 1021 +241 223 208 Barely Pink 1022 +231 204 188 Soft Demure 1023 +237 204 192 Demure 1025 +241 221 242 Satin Wine 1026 +255 188 221 Soft Mauve 1028 +255 177 218 Light Mauve 1029 +218 128 161 Medium Plum 1030 +203 0 69 Deep Passion 1031 +255 139 61 Medium Orange 1033 +239 110 24 Dark Orange 1034 +214 94 85 Rust Pink 1035 +182 1 86 Medium Fuschia 1038 +134 1 0 Dark Fuschia 1039 +247 121 189 Wild Pink 1051 +254 155 149 Curry Gold 1052 +245 136 38 Orange 1072 +255 84 0 Deep Orange 1074 +206 1 79 Wild Fuschia 1077 +129 29 66 Plush Velvet 1078 +237 189 232 Light Tulip 1081 +182 133 179 Dark Tulip 1083 +255 185 248 Bright Tulip 1084 +203 80 175 Deep Mauve 1085 +192 5 102 Dark Grenandine 1086 +222 79 140 Light Grenandine 1087 +193 41 41 Poppy Red 1088 +211 62 87 Coral Red 1089 +246 52 52 Satin Red 1091 +148 15 90 Burgundy 1094 +158 17 99 Deep Burgundy 1095 +138 43 117 Bright Mulberry 1096 +157 69 180 Mulberry 1097 +114 34 107 Dark Mulberry 1098 +101 30 65 Dark Plum 1099 +198 228 239 Ice Blue 2101 +165 18 212 Light Denim 2102 +163 208 239 Seashell Blue 2104 +139 192 219 Dark Seashell Blue 2106 +114 209 203 Lake Blue 2107 +124 200 235 Seashell Blue 2109 + 60 155 191 Dark Seashell Blue 2110 +102 104 188 Twilight Blue 2111 + 0 115 196 Royal Blue 2112 + 74 1 183 Dark Royal Blue 2114 + 36 67 113 Navy Blue 2117 + 26 47 79 Midnight Navy 2118 + 76 27 175 Bright Sky 2132 + 0 122 255 Bright Blue 2133 + 31 114 188 Dark Blue 2134 + 1 35 82 Bright Royal Blue 2155 + 20 201 207 Lilac Silk 2160 +212 178 234 Grape 2162 +204 170 214 Light Tulip 2164 +187 99 200 Amethyst 2165 +112 167 213 Blue Jazz 2166 + 0 171 34 French Blue 2168 + 3 139 217 Bright Blueberry 2170 + 2 142 159 Imperial Blue 2171 + 99 119 134 Dark Steel Blue 2172 + 0 122 136 Dark Imperial Blue 2175 + 10 0 136 Navy Blue 2177 + 0 131 222 Medium Royal Blue 2191 + 25 199 159 Butterfly Orange 3233 +211 165 3 Dark Gold 3238 +255 198 0 Sunset 3257 +213 139 59 Bright Gold 3259 +255 248 163 Light Lemon 3260 +248 238 98 Bright Lemon 3261 +255 232 80 Hawaiian Sunrise 3262 +247 200 56 Bright Pineapple 3265 +237 213 55 Sunburst 3266 +255 214 79 Warm Yellow 3267 +212 195 170 Silver Sand 3268 +219 200 165 Tan 3270 +220 190 156 Medium Tan 3272 +232 205 157 Dark Tan 3273 +234 212 151 Light Gold 3274 +211 177 105 Gold 3275 +250 200 0 Canary Yellow 3276 +243 166 1 Orange Mist 3278 +202 136 65 Sheer Ginger 3279 +213 158 122 Hazlenut 4284 +176 87 14 Light Copper Brown 4290 +181 103 11 Rich Spice 4308 +222 120 10 Copper 4309 +181 62 3 Bright Rust 4314 +214 195 173 Nude Gold 4321 +189 162 136 Iced Mocha 4323 +176 142 112 Brown Toast 4324 +169 136 114 Cinnamon 4325 +147 131 105 Sage Green 4326 +157 142 135 Smoke Grey 4327 +146 121 124 Lasting Cocoa 4328 +169 102 47 Coffee Shine 4330 +164 88 41 Toffee 4332 +166 63 7 Dark Copper Brown 4333 +183 59 73 Develish Pink 4334 +149 23 80 Wild Plum 4336 +149 77 23 Light Teddy Bear 4338 +105 61 28 Mocha 4339 +216 119 48 Golden Rust 4348 +177 119 51 Burnished Gold 4351 +191 91 22 Dark Rust 4352 +209 174 75 Brass 4360 +165 139 60 Olive 4368 +100 6 54 Evening Brandy 4375 +104 72 66 Teddy Bear Brown 4378 +230 221 203 Silk 5382 +211 208 156 Wheat Gold 5383 +190 178 150 Spun Gold 5384 +202 195 185 Grey Whisper 5387 +214 217 210 Pearl Grey 5389 +175 184 167 Steel Grey 5390 +167 184 181 Silver Cloud 5391 + 74 90 109 Silver Haze 5393 +101 97 123 Lilac Mist 5394 +106 120 134 Pewter 5395 +129 129 131 Polished Pewter 5396 + 62 76 94 Grey Pewter 5399 +127 119 114 Suede 5411 +177 169 177 Sterling 5421 +179 177 149 Gold Digger 5423 + 90 92 125 Blue Violet 5431 +216 212 198 Steel 5440 +217 220 222 Cinder Grey 5441 +154 148 135 Froster Silver 5452 +119 90 77 Chocolate Brown 5453 + 78 75 93 Midnight Grey 5458 +181 171 154 Oyster Beige 5464 +103 167 166 Magic Blue 5476 +206 239 118 California Lemon 6480 +194 200 104 Burnt Lime 6482 +165 230 95 California Lime 6483 +206 226 185 Mint Green 6485 +210 209 156 Oyster Shell 6486 +145 208 24 Bright Green 6487 + 0 166 93 Kelly Green 6489 +102 176 88 Lime Green 6492 + 7 196 189 Turquoise 6493 + 54 144 141 Exotic Green 6494 + 16 172 144 Bright Aqua 6495 +108 110 77 Leaf 6496 + 15 88 60 Dark Evergreen 6499 + 86 153 32 Medium Lime Green 6508 + 0 116 84 Forest Green 6514 + 8 119 123 Teal Blue 6516 + 47 181 179 Pacific Blue 6543 +108 134 54 Dark Palmetto Green 6558 +120 209 141 Ice Green 6573 +255 255 255 White 6580 + 0 0 0 Black 6581 +247 241 219 Frosty White 6582 +184 221 181 Soft Mint Green 6584 +203 214 174 Light Celery 6585 + 0 173 179 Bright Pacific Blue 6587 + 25 153 158 Dark Pacific Blue 6588 +124 166 109 Light Oak 6589 +118 187 134 Medium Mint Green 6590 +134 139 80 Medium Palmetto 6591 + 0 130 95 Green Dazzle 6593 + 20 129 69 Dark Mint Green 6594 +113 136 59 Swamp Green 6596 +210 220 222 Soft Steel Blue 6597 +119 174 168 Steel Blue 6598 + 88 154 135 Exotic Green 6599 diff --git a/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl b/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl new file mode 100644 index 0000000..28e8200 --- /dev/null +++ b/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl @@ -0,0 +1,346 @@ +GIMP Palette +Name: Ink/Stitch: Wonderfil Rayon +Columns: 4 +# RGB Value Color Name Number +248 232 232 Light Pink 1101 +248 219 223 Soft Pink 1102 +253 160 171 Strawberry Cream 1103 +254 134 161 Pink Mist 1104 +238 103 136 Med Rose 1105 +220 65 97 Pansy Pink 1106 +218 144 146 Dusty Rose 1107 +184 87 94 Dark Rose 1108 +164 74 84 Bright Rose 1109 +148 56 67 Deep Rose 1110 +255 194 199 Soft Fuschia 1111 +211 142 161 Light Fuschia 1112 +151 251 189 Ice Pink 1113 +234 49 116 Hot Pink 1114 +218 80 132 Wild Pink 1115 +179 39 131 Deep Pink 1116 +159 7 96 Dark Fuschia 1117 +230 180 201 Soft Mauve 1118 +229 151 199 Light Mauve 1119 +197 106 147 Med Mauve 1120 +207 102 164 Deep Mauve 1121 +161 26 128 Deep Passion 1122 +128 1 88 Light Burgundy 1123 +110 0 69 Dark Burgundy 1124 +239 232 220 Light Peach 1125 +253 208 179 Opal Mist 1126 +250 159 141 Flesh Pink 1127 +219 94 100 Bashful Pink 1128 +184 89 64 Rust Pink 1129 +246 62 92 Watermelon 1130 +219 178 165 Soft Mocha 1131 +209 143 146 Med Mocha 1132 +197 118 121 Deep Mocha 1133 +255 204 176 Pink Snow 1134 +249 161 121 Sugar Plum 1135 +247 135 105 Charmed Peach 1136 +255 133 100 Light Tangerine 1137 +254 132 78 Soft Tangerine 1138 +255 122 57 Medium Tangerine 1139 +241 103 15 Dark Tangerine 1140 +251 68 12 Deep Tangerine 1141 +253 207 185 Light Coral 1142 +241 179 166 Soft Coral 1143 +155 129 129 Bright Coral 1144 +224 98 64 Dark Coral 1145 +197 37 16 Bright Red 1146 +194 17 42 Satin Red 1147 +192 2 60 Deep Red 1148 +110 20 55 Plush Velvet 1149 + 79 17 38 Evening Brandy 1150 +241 207 208 Silky Pink 1151 +240 169 184 Cotton Candy 1152 +250 187 178 Angora Rayon 1153 +249 121 128 Pink Currant 1154 +246 119 144 Carnation Pink 1155 +226 160 178 Soft Plum 1156 +198 108 130 Med Plum 1157 +108 2 64 Dark Plum 1158 +216 19 19 Foxy Red 1159 +212 7 26 Poppy Red 1160 +254 229 228 Crystal Pink 1161 +255 203 203 Pink Crystal 1162 +253 178 185 Rose Wine 1163 +254 119 126 Light Punch 1164 +213 83 83 Medium Punch 1165 +203 57 57 Dark Punch 1166 +168 16 29 Christmas Red 1167 +181 5 88 Wild Fuschia 1168 +210 28 25 Scarlet Red 1169 +198 23 40 Sangria 1170 +139 6 28 Divine Wine 1171 +213 99 123 Barely Rose 1172 +253 247 240 Pearl 1173 +252 230 216 Milky Way 1174 +247 179 146 Apricot 1175 +250 157 101 Light Orange 1176 +250 123 52 Medium Orange 1177 +236 64 8 Deep Orange 1178 +221 2 2 Dark Orange 1179 +216 0 107 Fuschia 1180 +236 149 163 Classic Wine 1181 +184 9 42 Calypso Red 1182 +194 82 102 Berry Red 1183 +193 8 43 Midnight Red 1184 +253 254 226 Cream Silk 2101 +254 239 178 Snow Pearl 2102 +255 204 124 Light Yellow 2103 +253 190 91 Medium Yellow 2104 +255 176 63 Golden Honey 2105 +255 154 56 Honeydew 2106 +255 140 56 Mango 2107 +255 121 41 Pumpkin 2108 +244 241 200 Vanilla 2109 +252 249 179 Light Lemon 2110 +252 248 164 Pineapple 2111 +252 238 94 Sunburst 2112 +255 227 129 Medium Lemon 2113 +248 202 78 Dark Lemon 2114 +246 186 64 Deep Lemon 2115 +247 234 74 Hawaiian Sunrise 2116 +255 218 44 Canary Yellow 2117 +255 196 38 Sunset 2118 +201 172 70 Light Gold 2119 +207 178 75 Medium Gold 2120 +202 146 37 Dark Gold 2121 +207 140 61 Burnished Gold 2122 +203 128 62 Dark Burnished Gold 2123 +176 149 54 Light Ginger 2124 +167 138 48 Medium Ginger 2125 +167 130 50 Dark Ginger 2126 +234 169 82 Light Copper 2127 +190 119 34 Copper 2128 +253 250 217 Pure Pearl 2129 +254 250 200 Soft Butter 2130 +252 240 159 Light Butter 2131 +255 224 101 Medium Butter 2132 +254 202 62 Bright Yellow 2133 +253 193 30 Deep Yellow 2134 +255 177 9 Dark Yellow 2135 +247 246 227 Peach and Cream 2136 +255 252 222 Antique Linen 2137 +252 233 205 Flesh 2138 +255 225 174 Sheer Sunlight 2139 +252 201 128 Medium Peach 2140 +245 161 54 Dark Peach 2141 +245 156 51 Orange Sorbet 2142 +238 248 250 Soft Blue 3101 +215 221 223 Light Blue 3102 +165 191 194 Medium Blue 3103 +167 203 229 Seashell Blue 3104 +132 165 202 Chambray 3105 +151 175 201 Light Denim 3106 + 78 95 138 Medium Denim 3107 +112 138 199 Paris Blue 3108 + 69 100 151 Indigo Blue 3109 +104 136 177 Blue Jazz 3110 + 45 70 124 Dark Denim 3111 +158 176 176 Soft Steel Blue 3112 +154 189 189 Snow Blue 3113 +118 136 124 Medium Steel Blue 3114 +103 120 136 Stirling Blue 3115 + 89 105 121 Dark Steel Blue 3116 + 73 99 94 Metal Blue 3117 +111 118 182 Light Royal Blue 3118 + 52 59 147 Medium Royal Blue 3119 + 52 30 126 Dark Royal Blue 3120 +136 120 191 Light Periwinkle 3121 + 94 93 125 Dark Periwinkle 3122 + 65 82 136 Royal Blue 3123 + 25 12 86 Navy Blue 3124 + 18 8 65 Midnight Navy 3125 +103 178 199 Soft Ocean Blue 3126 + 83 181 211 Light Ocean Blue 3127 + 38 149 196 Medium Ocean Blue 3128 + 1 110 166 Bright Ocean Blue 3129 +148 219 217 Light Frost 3130 +101 206 221 Medium Frost 3131 + 6 138 181 Aquamarine 3132 +115 156 161 Light Lake Blue 3133 + 82 146 164 Lake Blue 3134 + 36 96 128 Imperial Blue 3135 + 34 95 120 Dark Imperial Blue 3136 +241 246 240 Pale Blue 3137 +227 240 227 Light Sky Blue 3138 +202 239 226 Sky Blue 3139 +182 243 242 Light Pacific Blue 3140 + 93 207 219 Pacific Blue 3141 + 99 184 197 Dark Pacific Blue 3142 + 3 133 176 Bright Pacific Blue 3143 +224 231 232 Ice Blue 3144 +194 206 212 Medium Ice Blue 3145 +176 197 217 Dark Ice Blue 3146 +127 151 167 Slate Blue 3147 + 85 100 133 Medium Slate Blue 3148 + 78 102 139 Dark Slate Blue 3149 + 29 30 25 Midnight Blue 3150 +202 198 130 Light Pistachio 4101 +156 156 2 Medium Pistachio 4102 +143 137 7 Dark Pistachio 4103 +249 255 248 Pale Celery 4104 +238 252 226 Light Celery 4105 +212 240 190 Pale Oak Green 4106 +205 249 184 Light Oak Green 4107 +165 221 120 Pale Emerald 4108 + 55 193 48 Bright Emerald 4109 +112 207 60 Medium Emerald 4110 + 77 114 65 Pale Kelly Green 4111 + 59 171 94 Kelly Green 4112 + 55 89 28 Dark Kelly Green 4113 +179 187 147 Moss Green 4114 + 94 109 48 Dark Palmetto Green 4115 +137 148 67 Palmetto Green 4116 +106 112 48 Medium Palmetto Green 4117 + 97 91 45 Alligator Green 4118 + 81 90 29 Lilypad Green 4119 +204 197 83 Spring Green 4120 +150 137 53 Brass 4121 +134 131 46 Bronze 4122 +149 181 50 Bright Olive Green 4123 + 94 129 39 Medium Olive Green 4124 + 54 101 41 Dark Olive Green 4125 +182 218 164 Soft Mint Green 4126 +181 227 189 Light Mint Green 4127 +150 202 152 Medium Mint Green 4128 + 14 180 92 Bright Mint Green 4129 + 27 76 51 Dark Mint Green 4130 + 36 100 48 Soft Evergreen 4131 + 96 131 77 Medium Evergreen 4132 + 77 130 97 Evergreen 4133 + 31 60 38 Dark Evergreen 4134 +200 255 244 Light Aqua 4135 +167 226 217 Soft Aqua 4136 +109 212 196 Medium Aqua 4137 + 33 173 155 Aqua 4138 + 24 172 139 Dark Aqua 4139 + 6 137 120 Bright Aqua 4140 + 6 113 120 Turquoise 4141 +230 245 243 Misty Mint 4142 +199 225 222 Baby Blue 4143 +170 195 189 Exotic Green 4144 +196 216 116 Pale Meadow Green 4145 +140 167 62 Meadow Green 4146 +152 175 86 Bright Moss 4147 +134 134 48 Dark Moss 4148 +174 190 86 Pale Green Oak 4149 +195 220 130 Green Oak 4150 +163 204 72 Dark Green Oak 4151 +134 197 88 Bright Green Oak 4152 + 82 165 71 Medium Lime 4153 + 14 150 57 Lime Green 4154 + 78 115 61 Swamp Green 4155 + 47 89 42 Safari Green 4156 + 48 81 53 Dark Green 4157 + 53 88 62 Deep Green 4158 +253 246 240 Candleglow 5101 +255 230 241 Orchid 5102 +203 170 191 Satin Wine 5103 +210 185 219 Soft Tulip 5104 +223 189 236 Light Tulip 5105 +186 140 199 Medium Tulip 5106 +163 134 177 Dark Tulip 5107 +116 87 150 Bright Tulip 5108 +132 85 143 Mulberry 5109 +104 40 118 Bright Mulberry 5110 +126 81 116 Amethyst 5111 + 94 40 116 Dark Purple 5112 +222 217 247 Pale Grape 5113 +144 139 171 Light Grape 5114 +159 140 172 Grape 5115 + 85 134 121 Bright Grape 5116 + 79 38 61 Dark Amethyst 5117 +126 98 182 Light Mauve 5118 + 48 52 91 Dark Mauve 5119 +102 66 110 Bright Plum 5120 +224 210 200 Grey 6101 +232 235 238 Pearl Grey 6102 +202 199 212 Cinder Grey 6103 +195 205 193 Pebble Grey 6104 +170 170 158 Stone Grey 6105 +149 141 126 Smoke Grey 6106 +100 105 94 Charcoal 6107 +181 180 184 Pale Sterling Grey 6108 +116 114 127 Sterling Grey 6109 +161 157 150 Twilight Grey 6110 + 76 73 91 Dark Twilight Grey 6111 + 47 45 36 Midnight Metal 6112 + 22 25 42 Midnight Blue 6113 +244 237 209 Cream Wheat 6114 +209 202 163 Spun Gold 6115 +157 157 121 Grey Khaki 6116 +114 114 64 Earth 6117 +240 224 170 Tan 6118 +209 188 131 Medium Tan 6119 +161 143 66 Dark Tan 6120 + 79 82 28 Dark Khaki 6121 +248 247 240 Pure Diamond 6122 +249 229 210 Barely Pink 6123 +243 233 199 Sheer Ivory 6124 +234 211 191 Soft Demure 6125 +221 168 148 Demure 6126 +220 186 128 Butterscotch 6127 +117 86 37 Caramel 6128 +253 245 229 Frosty White 6129 +253 255 250 Iced Silver 6130 +255 248 243 White Silk 6131 +227 214 191 Siver Sand 6132 +241 203 154 Skin Light 6133 +194 180 150 Taupe 6134 +136 120 79 Sage Green 6135 +242 223 186 Sheer Beige 7101 +245 231 206 Nude Gold 7102 +213 192 173 Iced Mocha 7103 +220 181 196 Golden Sand 7104 +195 158 80 Brown Sugar 7105 +180 150 107 Brown Toast 7106 +127 100 68 Cinnamon 7107 +154 113 42 Cedar 7108 +143 98 33 Coffee 7109 +108 75 39 Mocha 7110 + 94 58 19 Toffee 7111 + 80 40 10 Blackberry 7112 +255 219 183 Peach Tulip 7113 +255 152 165 Butterfly Orange 7114 +224 145 97 Light Rust 7115 +202 118 43 Golden Rust 7116 +162 83 30 Dark Rust 7117 +154 62 6 Bright Rust 7118 +246 222 222 Pale Salmon 7119 +186 147 134 Salmon 7120 +154 103 100 Dark Salmon 7121 +113 61 19 Light Copper Brown 7122 +103 40 15 Dark Copper Brown 7123 + 48 34 28 Coffee Bean 7124 + 24 17 14 Espresso 7125 +248 255 249 Silver Tinsel 7126 +235 250 233 Silver Grey 7127 +214 228 213 Granite 7128 +162 178 161 Steel Glaze 7129 +134 142 134 Dark Silver 7130 + 93 91 65 Parsley 7131 + 72 76 73 Grey Suede 7132 +149 140 149 Natural Plum 7133 + 90 76 82 Natural Burgundy 7134 + 48 41 77 Sapphire 7135 + 33 44 71 Blue Velvet 7136 +221 191 155 Soft Beige 7137 +199 152 91 Medium Beige 7138 +237 192 111 Golden Honey 7139 +208 161 78 Medium Honey 7140 +128 123 129 Light Blue Grey 7141 +103 118 133 Medium Blue Grey 7142 + 8 29 56 Dark Blue Grey 7143 + 99 118 144 Silver Blue 7144 + 29 97 189 Smurf Blue 7145 + 21 47 182 Dark Smurf Blue 7146 + 0 49 86 Dark Blue Aqua 7147 + 17 29 66 Midnight Navy 7148 +255 255 255 White 8101 +242 235 222 Soft White 8102 +246 241 230 Off White 8103 +251 247 241 Antique White 8104 + 0 0 0 Black 9000 diff --git a/inkstitch/symbols/inkstitch.svg b/inkstitch/symbols/inkstitch.svg new file mode 100644 index 0000000..4a67ae1 --- /dev/null +++ b/inkstitch/symbols/inkstitch.svg @@ -0,0 +1,418 @@ + + + + + + + + Ink/Stitch Commands + + + Fill stitch ending point + + + + + Trim the thread after sewing this object. + + + + + Fill stitch starting point + + + + + Stop the machine after sewing this object (for applique, etc) + + + + + + Ignore object when generating stitch plan + + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + Jump destination for Stop commands (a.k.a. "Frame Out position"). + + + + + + Origin for exported embroidery files + + + + + + + + Satin Column cut point + + + + + + Satin column starting point + + + + + + Satin column ending point + + + + + + + + + image/svg+xml + + + + + + + Create symbols carefully! They must be centered about the origin before being converted to a symbol. + + + + + + + + + + + + diff --git a/inkstitch_auto_satin.inx b/inkstitch_auto_satin.inx new file mode 100644 index 0000000..5f29b58 --- /dev/null +++ b/inkstitch_auto_satin.inx @@ -0,0 +1,21 @@ + + + Automatisch geführte Satinkolumnen + org.inkstitch.auto_satin.de_DE + inkstitch.py + inkex.py + true + false + auto_satin + + all + + + + + + + + diff --git a/inkstitch_convert_to_satin.inx b/inkstitch_convert_to_satin.inx new file mode 100644 index 0000000..4669ee7 --- /dev/null +++ b/inkstitch_convert_to_satin.inx @@ -0,0 +1,19 @@ + + + Konvertierung Linie zu Satinstich + org.inkstitch.convert_to_satin.de_DE + inkstitch.py + inkex.py + convert_to_satin + + all + + + + + + + + diff --git a/inkstitch_cut_satin.inx b/inkstitch_cut_satin.inx new file mode 100644 index 0000000..46e319c --- /dev/null +++ b/inkstitch_cut_satin.inx @@ -0,0 +1,19 @@ + + + Satinkolumne schneiden + org.inkstitch.cut_satin.de_DE + inkstitch.py + inkex.py + cut_satin + + all + + + + + + + + diff --git a/inkstitch_embroider.inx b/inkstitch_embroider.inx new file mode 100644 index 0000000..2ffebaf --- /dev/null +++ b/inkstitch_embroider.inx @@ -0,0 +1,46 @@ + + + Sticken + org.inkstitch.embroider.de_DE + inkstitch.py + inkex.py + 3.0 + true + + + <_option value="pec">Brother Stickformat (PEC) + + <_option value="pes">Brother Stickformat (PES) + + <_option value="exp">Melco Stickformat (EXP) + + <_option value="dst">Tajima Stickformat (DST) + + <_option value="jef">Janome Stickformat (JEF) + + <_option value="vp3">Pfaff Stickformat (VP3) + + <_option value="u01">Barudan Stickformat (U01) + + <_option value="txt">G-Code Format (TXT) + + + <_option value="svg">Skalierbare Vektorgrafik (SVG) [DEBUG] + + <_option value="csv">Durch Komma getrennte Werte (CSV) [DEBUG] + + <_option value="pmv">Brother Stichformat (PMV) [DEBUG] + + + + embroider + + all + + + + + + diff --git a/inkstitch_flip.inx b/inkstitch_flip.inx new file mode 100644 index 0000000..08dc8b2 --- /dev/null +++ b/inkstitch_flip.inx @@ -0,0 +1,19 @@ + + + Konturen der Satinkolumne umkehren + org.inkstitch.flip_satins.de_DE + inkstitch.py + inkex.py + flip + + all + + + + + + + + diff --git a/inkstitch_global_commands.inx b/inkstitch_global_commands.inx new file mode 100644 index 0000000..d08d6b2 --- /dev/null +++ b/inkstitch_global_commands.inx @@ -0,0 +1,26 @@ + + + Befehle hinzufügen + org.inkstitch.global_commands.de_DE + inkstitch.py + inkex.py + Diese Befehle wirken sich auf das gesamte Stickdesign aus. + + false + + false + + global_commands + + all + + + + + + + + + diff --git a/inkstitch_input_100.inx b/inkstitch_input_100.inx new file mode 100644 index 0000000..0161fc2 --- /dev/null +++ b/inkstitch_input_100.inx @@ -0,0 +1,17 @@ + + + 100 file input + org.inkstitch.input.100.de_DE + inkstitch.py + inkex.py + + .100 + application/x-embroidery-100 + <_filetypename>Ink/Stitch: Toyota Stickformat (.100) + <_filetypetooltip>Konvertierung der 100 Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_10O.inx b/inkstitch_input_10O.inx new file mode 100644 index 0000000..6da5c4f --- /dev/null +++ b/inkstitch_input_10O.inx @@ -0,0 +1,17 @@ + + + 10O file input + org.inkstitch.input.10o.de_DE + inkstitch.py + inkex.py + + .10o + application/x-embroidery-10o + <_filetypename>Ink/Stitch: Toyota Stickformat (.10o) + <_filetypetooltip>Konvertierung der 10O Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_BRO.inx b/inkstitch_input_BRO.inx new file mode 100644 index 0000000..3c71b24 --- /dev/null +++ b/inkstitch_input_BRO.inx @@ -0,0 +1,17 @@ + + + BRO file input + org.inkstitch.input.bro.de_DE + inkstitch.py + inkex.py + + .bro + application/x-embroidery-bro + <_filetypename>Ink/Stitch: Bits & Volts Stickformat (.bro) + <_filetypetooltip>Konvertierung der BRO Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_DAT.inx b/inkstitch_input_DAT.inx new file mode 100644 index 0000000..d21b842 --- /dev/null +++ b/inkstitch_input_DAT.inx @@ -0,0 +1,17 @@ + + + DAT file input + org.inkstitch.input.dat.de_DE + inkstitch.py + inkex.py + + .dat + application/x-embroidery-dat + <_filetypename>Ink/Stitch: Sunstar Stickformat (.dat) + <_filetypetooltip>Konvertierung der DAT Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_DSB.inx b/inkstitch_input_DSB.inx new file mode 100644 index 0000000..ee91631 --- /dev/null +++ b/inkstitch_input_DSB.inx @@ -0,0 +1,17 @@ + + + DSB file input + org.inkstitch.input.dsb.de_DE + inkstitch.py + inkex.py + + .dsb + application/x-embroidery-dsb + <_filetypename>Ink/Stitch: Tajima (Barudan) Stickformat (.dsb) + <_filetypetooltip>Konvertierung der DSB Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_DST.inx b/inkstitch_input_DST.inx new file mode 100644 index 0000000..40cdee7 --- /dev/null +++ b/inkstitch_input_DST.inx @@ -0,0 +1,17 @@ + + + DST file input + org.inkstitch.input.dst.de_DE + inkstitch.py + inkex.py + + .dst + application/x-embroidery-dst + <_filetypename>Ink/Stitch: Tajima Stickformat (.dst) + <_filetypetooltip>Konvertierung der DST Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_DSZ.inx b/inkstitch_input_DSZ.inx new file mode 100644 index 0000000..acc6832 --- /dev/null +++ b/inkstitch_input_DSZ.inx @@ -0,0 +1,17 @@ + + + DSZ file input + org.inkstitch.input.dsz.de_DE + inkstitch.py + inkex.py + + .dsz + application/x-embroidery-dsz + <_filetypename>Ink/Stitch: ZSK USA Stickformat (.dsz) + <_filetypetooltip>Konvertierung der DSZ Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_EMD.inx b/inkstitch_input_EMD.inx new file mode 100644 index 0000000..21edbd6 --- /dev/null +++ b/inkstitch_input_EMD.inx @@ -0,0 +1,17 @@ + + + EMD file input + org.inkstitch.input.emd.de_DE + inkstitch.py + inkex.py + + .emd + application/x-embroidery-emd + <_filetypename>Ink/Stitch: Elna Stickformat (.emd) + <_filetypetooltip>Konvertierung der EMD Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_EXP.inx b/inkstitch_input_EXP.inx new file mode 100644 index 0000000..1a985be --- /dev/null +++ b/inkstitch_input_EXP.inx @@ -0,0 +1,17 @@ + + + EXP file input + org.inkstitch.input.exp.de_DE + inkstitch.py + inkex.py + + .exp + application/x-embroidery-exp + <_filetypename>Ink/Stitch: Melco Stickformat (.exp) + <_filetypetooltip>Konvertierung der EXP Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_EXY.inx b/inkstitch_input_EXY.inx new file mode 100644 index 0000000..0708005 --- /dev/null +++ b/inkstitch_input_EXY.inx @@ -0,0 +1,17 @@ + + + EXY file input + org.inkstitch.input.exy.de_DE + inkstitch.py + inkex.py + + .exy + application/x-embroidery-exy + <_filetypename>Ink/Stitch: Eltac Stickformat (.exy) + <_filetypetooltip>Konvertierung der EXY Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_FXY.inx b/inkstitch_input_FXY.inx new file mode 100644 index 0000000..816b497 --- /dev/null +++ b/inkstitch_input_FXY.inx @@ -0,0 +1,17 @@ + + + FXY file input + org.inkstitch.input.fxy.de_DE + inkstitch.py + inkex.py + + .fxy + application/x-embroidery-fxy + <_filetypename>Ink/Stitch: Fortron Stickformat (.fxy) + <_filetypetooltip>Konvertierung der FXY Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_GT.inx b/inkstitch_input_GT.inx new file mode 100644 index 0000000..31974d6 --- /dev/null +++ b/inkstitch_input_GT.inx @@ -0,0 +1,17 @@ + + + GT file input + org.inkstitch.input.gt.de_DE + inkstitch.py + inkex.py + + .gt + application/x-embroidery-gt + <_filetypename>Ink/Stitch: Gold Thread Stickformat (.gt) + <_filetypetooltip>Konvertierung der GT Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_INB.inx b/inkstitch_input_INB.inx new file mode 100644 index 0000000..75f6e0c --- /dev/null +++ b/inkstitch_input_INB.inx @@ -0,0 +1,17 @@ + + + INB file input + org.inkstitch.input.inb.de_DE + inkstitch.py + inkex.py + + .inb + application/x-embroidery-inb + <_filetypename>Ink/Stitch: Imbro Stickformat (.inb) + <_filetypetooltip>Konvertierung der INB Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_JEF.inx b/inkstitch_input_JEF.inx new file mode 100644 index 0000000..8164240 --- /dev/null +++ b/inkstitch_input_JEF.inx @@ -0,0 +1,17 @@ + + + JEF file input + org.inkstitch.input.jef.de_DE + inkstitch.py + inkex.py + + .jef + application/x-embroidery-jef + <_filetypename>Ink/Stitch: Janome Stickformat (.jef) + <_filetypetooltip>Konvertierung der JEF Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_JPX.inx b/inkstitch_input_JPX.inx new file mode 100644 index 0000000..8e3a469 --- /dev/null +++ b/inkstitch_input_JPX.inx @@ -0,0 +1,17 @@ + + + JPX file input + org.inkstitch.input.jpx.de_DE + inkstitch.py + inkex.py + + .jpx + application/x-embroidery-jpx + <_filetypename>Ink/Stitch: Janome Stickformat (.jpx) + <_filetypetooltip>Konvertierung der JPX Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_KSM.inx b/inkstitch_input_KSM.inx new file mode 100644 index 0000000..2b29eb5 --- /dev/null +++ b/inkstitch_input_KSM.inx @@ -0,0 +1,17 @@ + + + KSM file input + org.inkstitch.input.ksm.de_DE + inkstitch.py + inkex.py + + .ksm + application/x-embroidery-ksm + <_filetypename>Ink/Stitch: Pfaff Stickformat (.ksm) + <_filetypetooltip>Konvertierung der KSM Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_MAX.inx b/inkstitch_input_MAX.inx new file mode 100644 index 0000000..60e1859 --- /dev/null +++ b/inkstitch_input_MAX.inx @@ -0,0 +1,17 @@ + + + MAX file input + org.inkstitch.input.max.de_DE + inkstitch.py + inkex.py + + .max + application/x-embroidery-max + <_filetypename>Ink/Stitch: Pfaff Stickformat (.max) + <_filetypetooltip>Konvertierung der MAX Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_MIT.inx b/inkstitch_input_MIT.inx new file mode 100644 index 0000000..99cfa79 --- /dev/null +++ b/inkstitch_input_MIT.inx @@ -0,0 +1,17 @@ + + + MIT file input + org.inkstitch.input.mit.de_DE + inkstitch.py + inkex.py + + .mit + application/x-embroidery-mit + <_filetypename>Ink/Stitch: Mitsubishi Stickformat (.mit) + <_filetypetooltip>Konvertierung der MIT Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_NEW.inx b/inkstitch_input_NEW.inx new file mode 100644 index 0000000..ed2de5c --- /dev/null +++ b/inkstitch_input_NEW.inx @@ -0,0 +1,17 @@ + + + NEW file input + org.inkstitch.input.new.de_DE + inkstitch.py + inkex.py + + .new + application/x-embroidery-new + <_filetypename>Ink/Stitch: Ameco Stickformat (.new) + <_filetypetooltip>Konvertierung der NEW Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PCD.inx b/inkstitch_input_PCD.inx new file mode 100644 index 0000000..6b12deb --- /dev/null +++ b/inkstitch_input_PCD.inx @@ -0,0 +1,17 @@ + + + PCD file input + org.inkstitch.input.pcd.de_DE + inkstitch.py + inkex.py + + .pcd + application/x-embroidery-pcd + <_filetypename>Ink/Stitch: Pfaff Stickformat (.pcd) + <_filetypetooltip>Konvertierung der PCD Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PCM.inx b/inkstitch_input_PCM.inx new file mode 100644 index 0000000..3d818e3 --- /dev/null +++ b/inkstitch_input_PCM.inx @@ -0,0 +1,17 @@ + + + PCM file input + org.inkstitch.input.pcm.de_DE + inkstitch.py + inkex.py + + .pcm + application/x-embroidery-pcm + <_filetypename>Ink/Stitch: Pfaff Stickformat (.pcm) + <_filetypetooltip>Konvertierung der PCM Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PCQ.inx b/inkstitch_input_PCQ.inx new file mode 100644 index 0000000..0a4b402 --- /dev/null +++ b/inkstitch_input_PCQ.inx @@ -0,0 +1,17 @@ + + + PCQ file input + org.inkstitch.input.pcq.de_DE + inkstitch.py + inkex.py + + .pcq + application/x-embroidery-pcq + <_filetypename>Ink/Stitch: Pfaff Stickformat (.pcq) + <_filetypetooltip>Konvertierung der PCQ Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PCS.inx b/inkstitch_input_PCS.inx new file mode 100644 index 0000000..f6bb05d --- /dev/null +++ b/inkstitch_input_PCS.inx @@ -0,0 +1,17 @@ + + + PCS file input + org.inkstitch.input.pcs.de_DE + inkstitch.py + inkex.py + + .pcs + application/x-embroidery-pcs + <_filetypename>Ink/Stitch: Pfaff Stickformat (.pcs) + <_filetypetooltip>Konvertierung der PCS Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PEC.inx b/inkstitch_input_PEC.inx new file mode 100644 index 0000000..d42f2e5 --- /dev/null +++ b/inkstitch_input_PEC.inx @@ -0,0 +1,17 @@ + + + PEC file input + org.inkstitch.input.pec.de_DE + inkstitch.py + inkex.py + + .pec + application/x-embroidery-pec + <_filetypename>Ink/Stitch: Brother Stickformat (.pec) + <_filetypetooltip>Konvertierung der PEC Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PES.inx b/inkstitch_input_PES.inx new file mode 100644 index 0000000..af85289 --- /dev/null +++ b/inkstitch_input_PES.inx @@ -0,0 +1,17 @@ + + + PES file input + org.inkstitch.input.pes.de_DE + inkstitch.py + inkex.py + + .pes + application/x-embroidery-pes + <_filetypename>Ink/Stitch: Brother Stickformat (.pes) + <_filetypetooltip>Konvertierung der PES Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PHB.inx b/inkstitch_input_PHB.inx new file mode 100644 index 0000000..f81011d --- /dev/null +++ b/inkstitch_input_PHB.inx @@ -0,0 +1,17 @@ + + + PHB file input + org.inkstitch.input.phb.de_DE + inkstitch.py + inkex.py + + .phb + application/x-embroidery-phb + <_filetypename>Ink/Stitch: Brother Stickformat (.phb) + <_filetypetooltip>Konvertierung der PHB Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_PHC.inx b/inkstitch_input_PHC.inx new file mode 100644 index 0000000..a700685 --- /dev/null +++ b/inkstitch_input_PHC.inx @@ -0,0 +1,17 @@ + + + PHC file input + org.inkstitch.input.phc.de_DE + inkstitch.py + inkex.py + + .phc + application/x-embroidery-phc + <_filetypename>Ink/Stitch: Brother Stickformat (.phc) + <_filetypetooltip>Konvertierung der PHC Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_SEW.inx b/inkstitch_input_SEW.inx new file mode 100644 index 0000000..8bd0933 --- /dev/null +++ b/inkstitch_input_SEW.inx @@ -0,0 +1,17 @@ + + + SEW file input + org.inkstitch.input.sew.de_DE + inkstitch.py + inkex.py + + .sew + application/x-embroidery-sew + <_filetypename>Ink/Stitch: Janome Stickformat (.sew) + <_filetypetooltip>Konvertierung der SEW Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_SHV.inx b/inkstitch_input_SHV.inx new file mode 100644 index 0000000..c943f6b --- /dev/null +++ b/inkstitch_input_SHV.inx @@ -0,0 +1,17 @@ + + + SHV file input + org.inkstitch.input.shv.de_DE + inkstitch.py + inkex.py + + .shv + application/x-embroidery-shv + <_filetypename>Ink/Stitch: Husqvarna Viking Stickformat (.shv) + <_filetypetooltip>Konvertierung der SHV Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_STC.inx b/inkstitch_input_STC.inx new file mode 100644 index 0000000..044a181 --- /dev/null +++ b/inkstitch_input_STC.inx @@ -0,0 +1,17 @@ + + + STC file input + org.inkstitch.input.stc.de_DE + inkstitch.py + inkex.py + + .stc + application/x-embroidery-stc + <_filetypename>Ink/Stitch: Gunold Stickformat (.stc) + <_filetypetooltip>Konvertierung der STC Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_STX.inx b/inkstitch_input_STX.inx new file mode 100644 index 0000000..6514e79 --- /dev/null +++ b/inkstitch_input_STX.inx @@ -0,0 +1,17 @@ + + + STX file input + org.inkstitch.input.stx.de_DE + inkstitch.py + inkex.py + + .stx + application/x-embroidery-stx + <_filetypename>Ink/Stitch: Data Stitch Stickformat (.stx) + <_filetypetooltip>Konvertierung der STX Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_TAP.inx b/inkstitch_input_TAP.inx new file mode 100644 index 0000000..bf07fdb --- /dev/null +++ b/inkstitch_input_TAP.inx @@ -0,0 +1,17 @@ + + + TAP file input + org.inkstitch.input.tap.de_DE + inkstitch.py + inkex.py + + .tap + application/x-embroidery-tap + <_filetypename>Ink/Stitch: Happy Stickformat (.tap) + <_filetypetooltip>Konvertierung der TAP Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_TBF.inx b/inkstitch_input_TBF.inx new file mode 100644 index 0000000..6782ac6 --- /dev/null +++ b/inkstitch_input_TBF.inx @@ -0,0 +1,17 @@ + + + TBF file input + org.inkstitch.input.tbf.de_DE + inkstitch.py + inkex.py + + .tbf + application/x-embroidery-tbf + <_filetypename>Ink/Stitch: Tajima Stickformat (.tbf) + <_filetypetooltip>Konvertierung der TBF Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_U01.inx b/inkstitch_input_U01.inx new file mode 100644 index 0000000..09c4b80 --- /dev/null +++ b/inkstitch_input_U01.inx @@ -0,0 +1,17 @@ + + + U01 file input + org.inkstitch.input.u01.de_DE + inkstitch.py + inkex.py + + .u01 + application/x-embroidery-u01 + <_filetypename>Ink/Stitch: Barudan Stickformat (.u01) + <_filetypetooltip>Konvertierung der U01 Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_VP3.inx b/inkstitch_input_VP3.inx new file mode 100644 index 0000000..e18a261 --- /dev/null +++ b/inkstitch_input_VP3.inx @@ -0,0 +1,17 @@ + + + VP3 file input + org.inkstitch.input.vp3.de_DE + inkstitch.py + inkex.py + + .vp3 + application/x-embroidery-vp3 + <_filetypename>Ink/Stitch: Pfaff Stickformat (.vp3) + <_filetypetooltip>Konvertierung der VP3 Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_XXX.inx b/inkstitch_input_XXX.inx new file mode 100644 index 0000000..4cd9a6d --- /dev/null +++ b/inkstitch_input_XXX.inx @@ -0,0 +1,17 @@ + + + XXX file input + org.inkstitch.input.xxx.de_DE + inkstitch.py + inkex.py + + .xxx + application/x-embroidery-xxx + <_filetypename>Ink/Stitch: Singer Stickformat (.xxx) + <_filetypetooltip>Konvertierung der XXX Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_input_ZXY.inx b/inkstitch_input_ZXY.inx new file mode 100644 index 0000000..a989d14 --- /dev/null +++ b/inkstitch_input_ZXY.inx @@ -0,0 +1,17 @@ + + + ZXY file input + org.inkstitch.input.zxy.de_DE + inkstitch.py + inkex.py + + .zxy + application/x-embroidery-zxy + <_filetypename>Ink/Stitch: ZSK TC Stickformat (.zxy) + <_filetypetooltip>Konvertierung der ZXY Datei in Ink/Stitch manuelle Stichpfade + + input + + diff --git a/inkstitch_install.inx b/inkstitch_install.inx new file mode 100644 index 0000000..234da0e --- /dev/null +++ b/inkstitch_install.inx @@ -0,0 +1,17 @@ + + + Installiere Erweiterungen für Inkscape + org.inkstitch.install.de_DE + inkstitch.py + inkex.py + install + + all + + + + + + diff --git a/inkstitch_layer_commands.inx b/inkstitch_layer_commands.inx new file mode 100644 index 0000000..abbfd71 --- /dev/null +++ b/inkstitch_layer_commands.inx @@ -0,0 +1,23 @@ + + + Ebenenbefehle hinzufügen + org.inkstitch.layer_commands.de_DE + inkstitch.py + inkex.py + Befehle werden zur aktuell ausgewählten Ebene hinzugefügt. + + false + + layer_commands + + all + + + + + + + + diff --git a/inkstitch_lettering.inx b/inkstitch_lettering.inx new file mode 100644 index 0000000..3052365 --- /dev/null +++ b/inkstitch_lettering.inx @@ -0,0 +1,17 @@ + + + Beschriftung + org.inkstitch.lettering.de_DE + inkstitch.py + inkex.py + lettering + + all + + + + + + diff --git a/inkstitch_object_commands.inx b/inkstitch_object_commands.inx new file mode 100644 index 0000000..cbe5948 --- /dev/null +++ b/inkstitch_object_commands.inx @@ -0,0 +1,36 @@ + + + Befehle mit gewählten Objekten verknüpfen + org.inkstitch.commands.de_DE + inkstitch.py + inkex.py + + false + + false + + false + + false + + false + + false + + false + + false + + object_commands + + all + + + + + + + + diff --git a/inkstitch_output_DST.inx b/inkstitch_output_DST.inx new file mode 100644 index 0000000..0309e34 --- /dev/null +++ b/inkstitch_output_DST.inx @@ -0,0 +1,21 @@ + + + DST file output + org.inkstitch.output.dst.de_DE + inkstitch.py + inkex.py + + .dst + application/x-embroidery-dst + <_filetypename>Ink/Stitch: Tajima Stickformat (.dst) + <_filetypetooltip>Speichern des Designs ins DST Format mit Ink/Stitch + true + + output + dst + + + + diff --git a/inkstitch_output_EXP.inx b/inkstitch_output_EXP.inx new file mode 100644 index 0000000..3e1d8c4 --- /dev/null +++ b/inkstitch_output_EXP.inx @@ -0,0 +1,21 @@ + + + EXP file output + org.inkstitch.output.exp.de_DE + inkstitch.py + inkex.py + + .exp + application/x-embroidery-exp + <_filetypename>Ink/Stitch: Melco Stickformat (.exp) + <_filetypetooltip>Speichern des Designs ins EXP Format mit Ink/Stitch + true + + output + exp + + + + diff --git a/inkstitch_output_JEF.inx b/inkstitch_output_JEF.inx new file mode 100644 index 0000000..c9d38dd --- /dev/null +++ b/inkstitch_output_JEF.inx @@ -0,0 +1,21 @@ + + + JEF file output + org.inkstitch.output.jef.de_DE + inkstitch.py + inkex.py + + .jef + application/x-embroidery-jef + <_filetypename>Ink/Stitch: Janome Stickformat (.jef) + <_filetypetooltip>Speichern des Designs ins JEF Format mit Ink/Stitch + true + + output + jef + + + + diff --git a/inkstitch_output_PEC.inx b/inkstitch_output_PEC.inx new file mode 100644 index 0000000..aa62d1b --- /dev/null +++ b/inkstitch_output_PEC.inx @@ -0,0 +1,21 @@ + + + PEC file output + org.inkstitch.output.pec.de_DE + inkstitch.py + inkex.py + + .pec + application/x-embroidery-pec + <_filetypename>Ink/Stitch: Brother Stickformat (.pec) + <_filetypetooltip>Speichern des Designs ins PEC Format mit Ink/Stitch + true + + output + pec + + + + diff --git a/inkstitch_output_PES.inx b/inkstitch_output_PES.inx new file mode 100644 index 0000000..f78dec1 --- /dev/null +++ b/inkstitch_output_PES.inx @@ -0,0 +1,21 @@ + + + PES file output + org.inkstitch.output.pes.de_DE + inkstitch.py + inkex.py + + .pes + application/x-embroidery-pes + <_filetypename>Ink/Stitch: Brother Stickformat (.pes) + <_filetypetooltip>Speichern des Designs ins PES Format mit Ink/Stitch + true + + output + pes + + + + diff --git a/inkstitch_output_TXT.inx b/inkstitch_output_TXT.inx new file mode 100644 index 0000000..8ee69ed --- /dev/null +++ b/inkstitch_output_TXT.inx @@ -0,0 +1,31 @@ + + + TXT file output + org.inkstitch.output.txt.de_DE + inkstitch.py + inkex.py + + .txt + application/x-embroidery-txt + <_filetypename>Ink/Stitch: G-Code Format (.txt) + <_filetypetooltip>Speichern des Designs ins TXT Format mit Ink/Stitch + true + + output + txt + + + false + true + 0.0 + false + false + 5.0 + -1 + -1 + -1 + -1 + + diff --git a/inkstitch_output_U01.inx b/inkstitch_output_U01.inx new file mode 100644 index 0000000..f9d6028 --- /dev/null +++ b/inkstitch_output_U01.inx @@ -0,0 +1,21 @@ + + + U01 file output + org.inkstitch.output.u01.de_DE + inkstitch.py + inkex.py + + .u01 + application/x-embroidery-u01 + <_filetypename>Ink/Stitch: Barudan Stickformat (.u01) + <_filetypetooltip>Speichern des Designs ins U01 Format mit Ink/Stitch + true + + output + u01 + + + + diff --git a/inkstitch_output_VP3.inx b/inkstitch_output_VP3.inx new file mode 100644 index 0000000..ea1338b --- /dev/null +++ b/inkstitch_output_VP3.inx @@ -0,0 +1,21 @@ + + + VP3 file output + org.inkstitch.output.vp3.de_DE + inkstitch.py + inkex.py + + .vp3 + application/x-embroidery-vp3 + <_filetypename>Ink/Stitch: Pfaff Stickformat (.vp3) + <_filetypetooltip>Speichern des Designs ins VP3 Format mit Ink/Stitch + true + + output + vp3 + + + + diff --git a/inkstitch_params.inx b/inkstitch_params.inx new file mode 100644 index 0000000..ec11b96 --- /dev/null +++ b/inkstitch_params.inx @@ -0,0 +1,17 @@ + + + Parameter + org.inkstitch.params.de_DE + inkstitch.py + inkex.py + params + + all + + + + + + diff --git a/inkstitch_print.inx b/inkstitch_print.inx new file mode 100644 index 0000000..1cfb48f --- /dev/null +++ b/inkstitch_print.inx @@ -0,0 +1,17 @@ + + + Drucken / Realistische Vorschau + org.inkstitch.print.de_DE + inkstitch.py + inkex.py + print + + all + + + + + + diff --git a/inkstitch_simulate.inx b/inkstitch_simulate.inx new file mode 100644 index 0000000..60feb0d --- /dev/null +++ b/inkstitch_simulate.inx @@ -0,0 +1,17 @@ + + + Simulation + org.inkstitch.simulate.de_DE + inkstitch.py + inkex.py + simulate + + all + + + + + + diff --git a/inkstitch_troubleshoot.inx b/inkstitch_troubleshoot.inx new file mode 100644 index 0000000..a664e6d --- /dev/null +++ b/inkstitch_troubleshoot.inx @@ -0,0 +1,18 @@ + + + Troubleshoot Objects + org.inkstitch.troubleshoot.de_DE + inkstitch.py + inkex.py + troubleshoot + + all + + + + + + + diff --git a/inkstitch_zip.inx b/inkstitch_zip.inx new file mode 100644 index 0000000..7a6284d --- /dev/null +++ b/inkstitch_zip.inx @@ -0,0 +1,35 @@ + + + embroidery ZIP file output + org.inkstitch.output.zip.de_DE + inkstitch.py + inkex.py + + .zip + application/zip + <_filetypename>Ink/Stitch: Export von mehreren Formaten (.zip) + <_filetypetooltip>Erstellen einer ZIP-Datei mit mehreren Stickformaten die Ink/Stitch unterstützt + true + + + false + + false + + false + + false + + false + + false + + false + + false + + zip + + diff --git a/scales/05-19.scl b/scales/05-19.scl new file mode 100644 index 0000000..c97bf64 --- /dev/null +++ b/scales/05-19.scl @@ -0,0 +1,10 @@ +! 05-19.scl +! +5 out of 19-tET + 5 +! + 252.63158 + 505.26316 + 757.89474 + 1010.52632 + 2/1 diff --git a/scales/05-22.scl b/scales/05-22.scl new file mode 100644 index 0000000..67a0c47 --- /dev/null +++ b/scales/05-22.scl @@ -0,0 +1,10 @@ +! 05-22.scl +! +Pentatonic "generator" of 09-22.scl + 5 +! + 272.72727 + 545.45455 + 709.09091 + 981.81818 + 2/1 diff --git a/scales/05-24.scl b/scales/05-24.scl new file mode 100644 index 0000000..71289c8 --- /dev/null +++ b/scales/05-24.scl @@ -0,0 +1,10 @@ +! 05-24.scl +! +5 out of 24-tET, symmetrical + 5 +! + 100.00000 + 550.00000 + 650.00000 + 1100.00000 + 2/1 diff --git a/scales/06-41.scl b/scales/06-41.scl new file mode 100644 index 0000000..97c8ce3 --- /dev/null +++ b/scales/06-41.scl @@ -0,0 +1,11 @@ +! 06-41.scl +! +Hexatonic scale in 41-tET, Magic-6 + 6 +! + 321.95122 + 380.48780 + 702.43902 + 760.97561 + 1141.46341 + 2/1 diff --git a/scales/07-19.scl b/scales/07-19.scl new file mode 100644 index 0000000..cf5f6c5 --- /dev/null +++ b/scales/07-19.scl @@ -0,0 +1,12 @@ +! 07-19.scl +! +Nineteen-tone equal major + 7 +! + 189.47368 + 378.94737 + 505.26316 + 694.73684 + 884.21053 + 1073.68421 + 2/1 diff --git a/scales/07-31.scl b/scales/07-31.scl new file mode 100644 index 0000000..248ad5c --- /dev/null +++ b/scales/07-31.scl @@ -0,0 +1,12 @@ +! 07-31.scl +! +Strange diatonic-like strictly proper scale + 7 +! + 116.12903 + 387.09677 + 425.80645 + 696.77419 + 812.90323 + 1006.45161 + 2/1 diff --git a/scales/07-37.scl b/scales/07-37.scl new file mode 100644 index 0000000..bb54e71 --- /dev/null +++ b/scales/07-37.scl @@ -0,0 +1,12 @@ +! 07-37.scl +! +Miller's Porcupine-7 + 7 +! + 162.16216 + 324.32432 + 486.48649 + 648.64865 + 810.81081 + 972.97297 + 2/1 diff --git a/scales/08-11.scl b/scales/08-11.scl new file mode 100644 index 0000000..bf6f1d8 --- /dev/null +++ b/scales/08-11.scl @@ -0,0 +1,13 @@ +! 08-11.scl +! +8 out of 11-tET + 8 +! + 218.18182 + 327.27273 + 436.36364 + 654.54545 + 763.63636 + 872.72727 + 1090.90909 + 2/1 diff --git a/scales/08-13.scl b/scales/08-13.scl new file mode 100644 index 0000000..98a592f --- /dev/null +++ b/scales/08-13.scl @@ -0,0 +1,13 @@ +! 08-13.scl +! +8 out of 13-tET + 8 +! + 92.30769 + 276.92308 + 461.53846 + 553.84615 + 738.46154 + 830.76923 + 1015.38462 + 2/1 diff --git a/scales/08-19.scl b/scales/08-19.scl new file mode 100644 index 0000000..aa99d66 --- /dev/null +++ b/scales/08-19.scl @@ -0,0 +1,13 @@ +! 08-19.scl +! +8 out of 19-tET, Mandelbaum + 8 +! + 126.31579 + 315.78947 + 442.10526 + 568.42105 + 757.89474 + 884.21053 + 1010.52632 + 2/1 diff --git a/scales/08-37.scl b/scales/08-37.scl new file mode 100644 index 0000000..a037517 --- /dev/null +++ b/scales/08-37.scl @@ -0,0 +1,13 @@ +! 08-37.scl +! +Miller's Porcupine-8 + 8 +! + 162.16216 + 324.32432 + 486.48649 + 648.64865 + 810.81081 + 972.97297 + 1135.13514 + 2/1 diff --git a/scales/09-15.scl b/scales/09-15.scl new file mode 100644 index 0000000..c28ac37 --- /dev/null +++ b/scales/09-15.scl @@ -0,0 +1,14 @@ +! 09-15.scl +! +Charyan scale of Andal, Boudewijn Rempt (1999), 1/1=A + 9 +! + 160.00000 + 320.00000 + 400.00000 + 560.00000 + 720.00000 + 800.00000 + 960.00000 + 1120.00000 + 2/1 diff --git a/scales/09-19.scl b/scales/09-19.scl new file mode 100644 index 0000000..bb8f1fc --- /dev/null +++ b/scales/09-19.scl @@ -0,0 +1,14 @@ +! 09-19.scl +! +9 out of 19-tET, Mandelbaum. Negri[9] + 9 +! + 126.31579 + 252.63158 + 442.10526 + 568.42105 + 694.73684 + 821.05263 + 947.36842 + 1073.68421 + 2/1 diff --git a/scales/09-19a.scl b/scales/09-19a.scl new file mode 100644 index 0000000..bbe52bc --- /dev/null +++ b/scales/09-19a.scl @@ -0,0 +1,14 @@ +! 09-19a.scl +! +Second strictly proper 9 out of 19 scale + 9 +! + 126.31579 + 315.78947 + 378.94737 + 568.42105 + 694.73684 + 821.05263 + 947.36842 + 1073.68421 + 2/1 diff --git a/scales/09-22.scl b/scales/09-22.scl new file mode 100644 index 0000000..5d1d024 --- /dev/null +++ b/scales/09-22.scl @@ -0,0 +1,14 @@ +! 09-22.scl +! +Trivalent scale in 22-tET, TL 05-12-2000 + 9 +! + 109.09091 + 272.72727 + 381.81818 + 545.45455 + 709.09091 + 818.18182 + 981.81818 + 1036.36364 + 2/1 diff --git a/scales/09-23.scl b/scales/09-23.scl new file mode 100644 index 0000000..e963b93 --- /dev/null +++ b/scales/09-23.scl @@ -0,0 +1,14 @@ +! 09-23.scl +! +9 out of 23-tET, Dan Stearns + 9 +! + 156.52174 + 260.86957 + 417.39130 + 521.73913 + 678.26087 + 782.60870 + 939.13043 + 1043.47826 + 2/1 diff --git a/scales/09-29.scl b/scales/09-29.scl new file mode 100644 index 0000000..43aa392 --- /dev/null +++ b/scales/09-29.scl @@ -0,0 +1,14 @@ +! 09-29.scl +! +Cycle of g=124.138 in 29-tET (Negri temperament) + 9 +! + 124.13793 + 248.27586 + 372.41379 + 496.55172 + 620.68966 + 744.82759 + 868.96552 + 993.10345 + 2/1 diff --git a/scales/10-13-58.scl b/scales/10-13-58.scl new file mode 100644 index 0000000..a251924 --- /dev/null +++ b/scales/10-13-58.scl @@ -0,0 +1,15 @@ +! 10-13-58.scl +! +Single chain pseudo-MOS of major and neutral thirds in 58-tET + 10 +! + 186.20690 + 289.65517 + 393.10345 + 537.93103 + 641.37931 + 744.82759 + 931.03448 + 1034.48276 + 1096.55172 + 2/1 diff --git a/scales/10-13.scl b/scales/10-13.scl new file mode 100644 index 0000000..a1b5c3c --- /dev/null +++ b/scales/10-13.scl @@ -0,0 +1,15 @@ +! 10-13.scl +! +10 out of 13-tET MOS, Carl Lumma, TL 21-12-1999 + 10 +! + 184.61538 + 276.92308 + 369.23077 + 553.84615 + 646.15385 + 738.46154 + 923.07692 + 1015.38462 + 1107.69231 + 2/1 diff --git a/scales/10-19.scl b/scales/10-19.scl new file mode 100644 index 0000000..5df5761 --- /dev/null +++ b/scales/10-19.scl @@ -0,0 +1,15 @@ +! 10-19.scl +! +10 out of 19-tET, Mandelbaum. Negri[10] + 10 +! + 126.31579 + 252.63158 + 315.78947 + 442.10526 + 568.42105 + 694.73684 + 821.05263 + 947.36842 + 1073.68421 + 2/1 diff --git a/scales/10-29.scl b/scales/10-29.scl new file mode 100644 index 0000000..413be94 --- /dev/null +++ b/scales/10-29.scl @@ -0,0 +1,15 @@ +! 10-29.scl +! +10 out of 29-tET, chain of 124.138 cents intervals, Keenan + 10 +! + 124.13793 + 248.27586 + 372.41379 + 455.17241 + 579.31034 + 703.44828 + 827.58621 + 951.72414 + 1075.86207 + 2/1 diff --git a/scales/11-18.scl b/scales/11-18.scl new file mode 100644 index 0000000..52cdffb --- /dev/null +++ b/scales/11-18.scl @@ -0,0 +1,16 @@ +! 11-18.scl +! +11 out of 18-tET, g=333.33, TL 27-09-2009 + 11 +! + 133.33333 + 200.00000 + 333.33333 + 466.66667 + 533.33333 + 666.66667 + 800.00000 + 866.66667 + 1000.00000 + 1133.33333 + 2/1 diff --git a/scales/11-19-gould.scl b/scales/11-19-gould.scl new file mode 100644 index 0000000..4cac4f6 --- /dev/null +++ b/scales/11-19-gould.scl @@ -0,0 +1,16 @@ +! 11-19-gould.scl +! +11 out of 19-tET, Mark Gould (2002) + 11 +! + 126.31579 + 252.63158 + 315.78947 + 442.10526 + 568.42105 + 694.73684 + 757.89474 + 884.21053 + 1010.52632 + 1136.84211 + 2/1 diff --git a/scales/11-19-krantz.scl b/scales/11-19-krantz.scl new file mode 100644 index 0000000..0d9efce --- /dev/null +++ b/scales/11-19-krantz.scl @@ -0,0 +1,16 @@ +! 11-19-krantz.scl +! +11 out of 19-tET, Richard Krantz + 11 +! + 126.31579 + 252.63158 + 378.94737 + 505.26316 + 631.57895 + 694.73684 + 821.05263 + 884.21053 + 1010.52632 + 1136.84211 + 2/1 diff --git a/scales/11-19-mclaren.scl b/scales/11-19-mclaren.scl new file mode 100644 index 0000000..b6e3beb --- /dev/null +++ b/scales/11-19-mclaren.scl @@ -0,0 +1,16 @@ +! 11-19-mclaren.scl +! +11 out of 19-tET, Brian McLaren. Asc: 311313313 Desc: 313131313 + 11 +! + 189.47368 + 252.63158 + 315.78947 + 505.26316 + 568.42105 + 631.57895 + 694.73684 + 757.89474 + 947.36842 + 1010.52632 + 2/1 diff --git a/scales/11-23.scl b/scales/11-23.scl new file mode 100644 index 0000000..e458bd0 --- /dev/null +++ b/scales/11-23.scl @@ -0,0 +1,16 @@ +! 11-23.scl +! +11 out of 23-tET, Dan Stearns + 11 +! + 104.34783 + 208.69565 + 313.04348 + 417.39130 + 521.73913 + 678.26087 + 782.60870 + 886.95652 + 991.30435 + 1095.65217 + 2/1 diff --git a/scales/11-31.scl b/scales/11-31.scl new file mode 100644 index 0000000..c4a050a --- /dev/null +++ b/scales/11-31.scl @@ -0,0 +1,16 @@ +! 11-31.scl +! +Jon Wild, 11 out of 31-tET, g=7/6, TL 9-9-1999 + 11 +! + 116.12903 + 232.25806 + 387.09677 + 503.22581 + 541.93548 + 658.06452 + 774.19355 + 929.03226 + 1045.16129 + 1161.29032 + 2/1 diff --git a/scales/11-34.scl b/scales/11-34.scl new file mode 100644 index 0000000..8304ec2 --- /dev/null +++ b/scales/11-34.scl @@ -0,0 +1,16 @@ +! 11-34.scl +! +Erv Wilson, 11 out of 34-tET, chain of minor thirds + 11 +! + 70.58824 + 247.05882 + 317.64706 + 494.11765 + 564.70588 + 635.29412 + 811.76471 + 882.35294 + 952.94118 + 1129.41176 + 2/1 diff --git a/scales/11-37.scl b/scales/11-37.scl new file mode 100644 index 0000000..f7eeb75 --- /dev/null +++ b/scales/11-37.scl @@ -0,0 +1,16 @@ +! 11-37.scl +! +Jake Freivald, 11 out of 37-tET, g=11/8, TL 22-08-2012 + 11 +! + 162.16216 + 259.45946 + 356.75676 + 454.05405 + 551.35135 + 713.51351 + 810.81081 + 908.10811 + 1005.40541 + 1102.70270 + 2/1 diff --git a/scales/11-limit-only.scl b/scales/11-limit-only.scl new file mode 100644 index 0000000..3e6c712 --- /dev/null +++ b/scales/11-limit-only.scl @@ -0,0 +1,16 @@ +! 11-limit-only.scl +! +11-limit-only + 11 +! + 12/11 + 11/10 + 11/9 + 14/11 + 11/8 + 16/11 + 11/7 + 18/11 + 20/11 + 11/6 + 2/1 diff --git a/scales/12-17.scl b/scales/12-17.scl new file mode 100644 index 0000000..ce5f8a4 --- /dev/null +++ b/scales/12-17.scl @@ -0,0 +1,17 @@ +! 12-17.scl +! +12 out of 17-tET, chain of fifths + 12 +! + 70.58824 + 141.17647 + 282.35294 + 352.94118 + 494.11765 + 564.70588 + 635.29412 + 776.47059 + 847.05882 + 988.23529 + 1058.82353 + 2/1 diff --git a/scales/12-19.scl b/scales/12-19.scl new file mode 100644 index 0000000..aa601e1 --- /dev/null +++ b/scales/12-19.scl @@ -0,0 +1,17 @@ +! 12-19.scl +! +12 out of 19-tET scale from Mandelbaum's dissertation + 12 +! + 63.15789 + 189.47368 + 252.63158 + 378.94737 + 505.26316 + 568.42105 + 694.73684 + 757.89474 + 884.21053 + 947.36842 + 1073.68421 + 2/1 diff --git a/scales/12-22.scl b/scales/12-22.scl new file mode 100644 index 0000000..de6f1be --- /dev/null +++ b/scales/12-22.scl @@ -0,0 +1,17 @@ +! 12-22.scl +! +12 out of 22-tET, chain of fifths + 12 +! + 163.63636 + 218.18182 + 381.81818 + 436.36364 + 490.90909 + 654.54545 + 709.09091 + 872.72727 + 927.27273 + 1090.90909 + 1145.45455 + 2/1 diff --git a/scales/12-22h.scl b/scales/12-22h.scl new file mode 100644 index 0000000..20e087b --- /dev/null +++ b/scales/12-22h.scl @@ -0,0 +1,17 @@ +! 12-22h.scl +! +Hexachordal 12-tone scale in 22-tET + 12 +! + 109.09091 + 218.18182 + 327.27273 + 436.36364 + 490.90909 + 600.00000 + 709.09091 + 818.18182 + 927.27273 + 1036.36364 + 1145.45455 + 2/1 diff --git a/scales/12-27.scl b/scales/12-27.scl new file mode 100644 index 0000000..b9f69ba --- /dev/null +++ b/scales/12-27.scl @@ -0,0 +1,17 @@ +! 12-27.scl +! +12 out of 27, Herman Miller's Galticeran scale + 12 +! + 133.33333 + 222.22222 + 311.11111 + 400.00000 + 533.33333 + 622.22222 + 711.11111 + 800.00000 + 933.33333 + 1022.22222 + 1111.11111 + 2/1 diff --git a/scales/12-31.scl b/scales/12-31.scl new file mode 100644 index 0000000..ef9556c --- /dev/null +++ b/scales/12-31.scl @@ -0,0 +1,17 @@ +! 12-31.scl +! +12 out of 31-tET, meantone Eb-G# + 12 +! + 77.41935 + 193.54839 + 309.67742 + 387.09677 + 503.22581 + 580.64516 + 696.77419 + 774.19355 + 890.32258 + 1006.45161 + 1083.87097 + 2/1 diff --git a/scales/12-31_11.scl b/scales/12-31_11.scl new file mode 100644 index 0000000..87689a2 --- /dev/null +++ b/scales/12-31_11.scl @@ -0,0 +1,17 @@ +! 12-31_11.scl +! +11-limit 12 out of 31-tET, George Secor + 12 +! + 38.70968 + 193.54839 + 270.96774 + 387.09677 + 464.51613 + 541.93548 + 696.77419 + 774.19355 + 890.32258 + 967.74194 + 1083.87097 + 2/1 diff --git a/scales/12-43.scl b/scales/12-43.scl new file mode 100644 index 0000000..56cb2fb --- /dev/null +++ b/scales/12-43.scl @@ -0,0 +1,17 @@ +! 12-43.scl +! +12 out of 43-tET (1/5-comma meantone) + 12 +! + 83.72093 + 195.34884 + 306.97674 + 390.69767 + 502.32558 + 586.04651 + 697.67442 + 781.39535 + 893.02326 + 1004.65116 + 1088.37209 + 2/1 diff --git a/scales/12-46.scl b/scales/12-46.scl new file mode 100644 index 0000000..b0566c0 --- /dev/null +++ b/scales/12-46.scl @@ -0,0 +1,17 @@ +! 12-46.scl +! +12 out of 46-tET, diaschismic + 12 +! + 104.34783 + 208.69565 + 286.95652 + 391.30435 + 495.65217 + 600.00000 + 704.34783 + 808.69565 + 886.95652 + 991.30435 + 1095.65217 + 2/1 diff --git a/scales/12-46p.scl b/scales/12-46p.scl new file mode 100644 index 0000000..33133b3 --- /dev/null +++ b/scales/12-46p.scl @@ -0,0 +1,17 @@ +! 12-46p.scl +! +686/675 comma pump scale in 46-tET + 12 +! + 130.43478 + 260.86957 + 391.30435 + 443.47826 + 521.73913 + 573.91304 + 704.34783 + 834.78261 + 965.21739 + 1069.56522 + 1095.65217 + 2/1 diff --git a/scales/12-50.scl b/scales/12-50.scl new file mode 100644 index 0000000..114ff79 --- /dev/null +++ b/scales/12-50.scl @@ -0,0 +1,17 @@ +! 12-50.scl +! +12 out of 50-tET, meantone Eb-G# + 12 +! + 72.00000 + 192.00000 + 312.00000 + 384.00000 + 504.00000 + 576.00000 + 696.00000 + 768.00000 + 888.00000 + 1008.00000 + 1080.00000 + 2/1 diff --git a/scales/12-79mos159et.scl b/scales/12-79mos159et.scl new file mode 100644 index 0000000..fb164b8 --- /dev/null +++ b/scales/12-79mos159et.scl @@ -0,0 +1,17 @@ +! 12-79mos159et.scl +! +12-tones out of 79 MOS 159ET, Splendid Beat Rates Based on Simple Frequencies version, C=262hz + 12 +! + 91.68918 + 197.53525 + 302.37506 + 392.90890 + 4/3 + 589.34246 + 3/2 + 792.07675 + 897.52405 + 1003.09655 + 1093.54687 + 2/1 diff --git a/scales/12-tet.scl b/scales/12-tet.scl new file mode 100644 index 0000000..2b69a42 --- /dev/null +++ b/scales/12-tet.scl @@ -0,0 +1,15 @@ +12 tet + 12 +! + 100.0 + 200.0 + 300.0 + 400.0 + 500.0 + 600.0 + 700.0 + 800.0 + 900.0 + 1000.0 + 1100.0 + 1200.0 \ No newline at end of file diff --git a/scales/12-yarman24a.scl b/scales/12-yarman24a.scl new file mode 100644 index 0000000..9ccb2ab --- /dev/null +++ b/scales/12-yarman24a.scl @@ -0,0 +1,17 @@ +! 12-yarman24a.scl +! +12-tones out of Yarman24a, circulating in the style of Rameau's Modified Meantone Temperament + 12 +! + 84.36000 + 192.18000 + 292.18000 + 5/4 + 4/3 + 584.07906 + 696.09000 + 788.27000 + 888.27000 + 16/9 + 15/8 + 2/1 diff --git a/scales/12-yarman24b.scl b/scales/12-yarman24b.scl new file mode 100644 index 0000000..5214df2 --- /dev/null +++ b/scales/12-yarman24b.scl @@ -0,0 +1,17 @@ +! 12-yarman24b.scl +! +12-tones out of Yarman24b, circulating in the style of Rameau's Modified Meantone Temperament + 12 +! + 84.36000 + 192.18000 + 292.18000 + 5/4 + 4/3 + 584.35871 + 696.09000 + 788.27000 + 888.27000 + 16/9 + 15/8 + 2/1 diff --git a/scales/12-yarman24c.scl b/scales/12-yarman24c.scl new file mode 100644 index 0000000..ce1a3c2 --- /dev/null +++ b/scales/12-yarman24c.scl @@ -0,0 +1,17 @@ +! 12-yarman24c.scl +! +12-tones out of Yarman24c, circulating in the style of Rameau's Modified Meantone Temperament + 12 +! + 85.05893 + 191.77076 + 292.41297 + 156/125 + 4/3 + 581.38190 + 695.88538 + 788.73595 + 887.65614 + 16/9 + 234/125 + 2/1 diff --git a/scales/12-yarman24d.scl b/scales/12-yarman24d.scl new file mode 100644 index 0000000..88efa79 --- /dev/null +++ b/scales/12-yarman24d.scl @@ -0,0 +1,17 @@ +! 12-yarman24d.scl +! +12-tones out of Yarman24d, circulating in the style of Rameau's Modified Meantone Temperament + 12 +! + 83.32982 + 190.84857 + 291.83661 + 381.69714 + 4/3 + 579.07643 + 695.42429 + 787.58321 + 886.27286 + 16/9 + 1083.65214 + 2/1 diff --git a/scales/13-19.scl b/scales/13-19.scl new file mode 100644 index 0000000..4c34a61 --- /dev/null +++ b/scales/13-19.scl @@ -0,0 +1,18 @@ +! 13-19.scl +! +13 out of 19-tET, Mandelbaum + 13 +! + 126.31579 + 189.47368 + 315.78947 + 378.94737 + 505.26316 + 568.42105 + 694.73684 + 757.89474 + 884.21053 + 947.36842 + 1073.68421 + 1136.84211 + 2/1 diff --git a/scales/13-22.scl b/scales/13-22.scl new file mode 100644 index 0000000..fe11077 --- /dev/null +++ b/scales/13-22.scl @@ -0,0 +1,18 @@ +! 13-22.scl +! +13 out of 22-tET, generator = 5 + 13 +! + 109.09091 + 218.18182 + 327.27273 + 381.81818 + 490.90909 + 600.00000 + 654.54545 + 763.63636 + 872.72727 + 927.27273 + 1036.36364 + 1145.45455 + 2/1 diff --git a/scales/13-30t.scl b/scales/13-30t.scl new file mode 100644 index 0000000..11f9c4a --- /dev/null +++ b/scales/13-30t.scl @@ -0,0 +1,18 @@ +! 13-30t.scl +! +Tritave with 13/10 generator, 91/90 tempered out + 13 +! + 126.79700 + 253.59400 + 443.78950 + 570.58650 + 697.38350 + 887.57900 + 1014.37600 + 1141.17300 + 1331.36850 + 1458.16550 + 1584.96250 + 1775.15800 + 3/1 diff --git a/scales/13-31.scl b/scales/13-31.scl new file mode 100644 index 0000000..c3b10fb --- /dev/null +++ b/scales/13-31.scl @@ -0,0 +1,18 @@ +! 13-31.scl +! +13 out of 31-tET Hemiwrschmidt[13] + 13 +! + 154.83871 + 193.54839 + 348.38710 + 387.09677 + 541.93548 + 580.64516 + 735.48387 + 774.19355 + 929.03226 + 967.74194 + 1122.58065 + 1161.29032 + 2/1 diff --git a/scales/14-19.scl b/scales/14-19.scl new file mode 100644 index 0000000..b000711 --- /dev/null +++ b/scales/14-19.scl @@ -0,0 +1,19 @@ +! 14-19.scl +! +14 out of 19-tET, Mandelbaum + 14 +! + 63.15789 + 189.47368 + 252.63158 + 315.78947 + 442.10526 + 505.26316 + 568.42105 + 694.73684 + 757.89474 + 821.05263 + 947.36842 + 1010.52632 + 1136.84211 + 2/1 diff --git a/scales/14-26.scl b/scales/14-26.scl new file mode 100644 index 0000000..a27786c --- /dev/null +++ b/scales/14-26.scl @@ -0,0 +1,19 @@ +! 14-26.scl +! +Two interlaced diatonic in 26-tET, tetrachordal. Paul Erlich (1996) + 14 +! + 92.30769 + 184.61538 + 276.92308 + 369.23077 + 461.53846 + 507.69231 + 600.00000 + 692.30769 + 784.61538 + 876.92308 + 969.23077 + 1061.53846 + 1153.84615 + 2/1 diff --git a/scales/14-26a.scl b/scales/14-26a.scl new file mode 100644 index 0000000..8af880a --- /dev/null +++ b/scales/14-26a.scl @@ -0,0 +1,19 @@ +! 14-26a.scl +! +Two interlaced diatonic in 26-tET, maximally even. Paul Erlich (1996) + 14 +! + 92.30769 + 184.61538 + 276.92308 + 369.23077 + 461.53846 + 553.84615 + 600.00000 + 692.30769 + 784.61538 + 876.92308 + 969.23077 + 1061.53846 + 1153.84615 + 2/1 diff --git a/scales/15-37.scl b/scales/15-37.scl new file mode 100644 index 0000000..81f2ced --- /dev/null +++ b/scales/15-37.scl @@ -0,0 +1,20 @@ +! 15-37.scl +! +Miller's Porcupine-15 + 15 +! + 97.29730 + 162.16216 + 259.45946 + 324.32432 + 421.62162 + 486.48649 + 583.78378 + 648.64865 + 745.94595 + 810.81081 + 908.10811 + 972.97297 + 1070.27027 + 1135.13514 + 2/1 diff --git a/scales/15-46.scl b/scales/15-46.scl new file mode 100644 index 0000000..3cabf1e --- /dev/null +++ b/scales/15-46.scl @@ -0,0 +1,19 @@ +! 15-46.scl +Valentine[15] in 46-et tuning +15 +! +78.260870 +156.521739 +234.782609 +313.043478 +391.304348 +469.565217 +547.826087 +626.086957 +704.347826 +782.608696 +886.956522 +965.217391 +1043.478261 +1121.739130 +2/1 diff --git a/scales/16-139.scl b/scales/16-139.scl new file mode 100644 index 0000000..70defaa --- /dev/null +++ b/scales/16-139.scl @@ -0,0 +1,21 @@ +! 16-139.scl +! +g=9 steps of 139-tET. Gene Ward Smith "Quartaminorthirds" 7-limit temperament + 16 +! + 77.69784 + 155.39568 + 233.09353 + 310.79137 + 388.48921 + 466.18705 + 543.88489 + 621.58273 + 699.28058 + 776.97842 + 854.67626 + 932.37410 + 1010.07194 + 1087.76978 + 1165.46763 + 2/1 diff --git a/scales/16-145.scl b/scales/16-145.scl new file mode 100644 index 0000000..23893d7 --- /dev/null +++ b/scales/16-145.scl @@ -0,0 +1,21 @@ +! 16-145.scl +! +Magic[16] in 145-tET + 16 +! + 148.96552 + 206.89655 + 264.82759 + 322.75862 + 380.68966 + 438.62069 + 587.58621 + 645.51724 + 703.44828 + 761.37931 + 819.31034 + 968.27586 + 1026.20690 + 1084.13793 + 1142.06897 + 2/1 diff --git a/scales/16-31.scl b/scales/16-31.scl new file mode 100644 index 0000000..36315b0 --- /dev/null +++ b/scales/16-31.scl @@ -0,0 +1,21 @@ +! 16-31.scl +! +Armodue semi-equalizzato + 16 +! + 77.41935 + 154.83871 + 232.25806 + 309.67742 + 387.09677 + 464.51613 + 541.93548 + 619.35484 + 696.77419 + 774.19355 + 851.61290 + 929.03226 + 967.74194 + 1045.16129 + 1122.58065 + 2/1 diff --git a/scales/17-31.scl b/scales/17-31.scl new file mode 100644 index 0000000..9f933dd --- /dev/null +++ b/scales/17-31.scl @@ -0,0 +1,22 @@ +! 17-31.scl +! +17 out of 31, with split C#/Db, D#/Eb, F#/Gb, G#/Ab and A#/Bb + 17 +! + 77.41935 + 116.12903 + 193.54839 + 270.96774 + 309.67742 + 387.09677 + 503.22581 + 580.64516 + 619.35484 + 696.77419 + 774.19355 + 812.90323 + 890.32258 + 967.74194 + 1006.45161 + 1083.87097 + 2/1 diff --git a/scales/17-53.scl b/scales/17-53.scl new file mode 100644 index 0000000..a643e61 --- /dev/null +++ b/scales/17-53.scl @@ -0,0 +1,22 @@ +! 17-53.scl +! +17 out of 53-tET, Arabic Pythagorean scale, Safiyuddn Al-Urmaw (Safi al-Din) + 17 +! + 90.56604 + 181.13208 + 203.77358 + 294.33962 + 384.90566 + 407.54717 + 498.11321 + 588.67925 + 679.24528 + 701.88679 + 792.45283 + 883.01887 + 905.66038 + 996.22642 + 1086.79245 + 1177.35849 + 2/1 diff --git a/scales/19-31.scl b/scales/19-31.scl new file mode 100644 index 0000000..84622a5 --- /dev/null +++ b/scales/19-31.scl @@ -0,0 +1,24 @@ +! 19-31.scl +! +19 out of 31-tET, meantone Gb-B# + 19 +! + 77.41935 + 116.12903 + 193.54839 + 270.96774 + 309.67742 + 387.09677 + 464.51613 + 503.22581 + 580.64516 + 619.35484 + 696.77419 + 774.19355 + 812.90323 + 890.32258 + 967.74194 + 1006.45161 + 1083.87097 + 1161.29032 + 2/1 diff --git a/scales/19-31ji.scl b/scales/19-31ji.scl new file mode 100644 index 0000000..e3777be --- /dev/null +++ b/scales/19-31ji.scl @@ -0,0 +1,24 @@ +! 19-31ji.scl +! +A septimal interpretation of 19 out of 31 tones, after Wilson, XH7+8 + 19 +! + 25/24 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 16/9 + 15/8 + 27/14 + 2/1 diff --git a/scales/19-36.scl b/scales/19-36.scl new file mode 100644 index 0000000..bbf94f1 --- /dev/null +++ b/scales/19-36.scl @@ -0,0 +1,24 @@ +! 19-36.scl +! +19 out of 36-tET, Tomasz Liese, Tuning List, 1997 + 19 +! + 66.66667 + 133.33333 + 200.00000 + 266.66667 + 333.33333 + 400.00000 + 466.66667 + 500.00000 + 566.66667 + 633.33333 + 700.00000 + 766.66667 + 833.33333 + 900.00000 + 966.66667 + 1033.33333 + 1100.00000 + 1133.33333 + 2/1 diff --git a/scales/19-50.scl b/scales/19-50.scl new file mode 100644 index 0000000..faf2886 --- /dev/null +++ b/scales/19-50.scl @@ -0,0 +1,24 @@ +! 19-50.scl +! +19 out of 50-tET, meantone Gb-B# + 19 +! + 72.00000 + 120.00000 + 192.00000 + 264.00000 + 312.00000 + 384.00000 + 456.00000 + 504.00000 + 576.00000 + 624.00000 + 696.00000 + 768.00000 + 816.00000 + 888.00000 + 960.00000 + 1008.00000 + 1080.00000 + 1152.00000 + 2/1 diff --git a/scales/19-53.scl b/scales/19-53.scl new file mode 100644 index 0000000..5acf1b7 --- /dev/null +++ b/scales/19-53.scl @@ -0,0 +1,24 @@ +! 19-53.scl +! +19 out of 53-tET, Larry H. Hanson (1978) + 19 +! + 67.92453 + 135.84906 + 203.77358 + 249.05660 + 316.98113 + 384.90566 + 452.83019 + 498.11321 + 566.03774 + 633.96226 + 701.88679 + 769.81132 + 815.09434 + 883.01887 + 950.94340 + 1018.86792 + 1086.79245 + 1132.07547 + 2/1 diff --git a/scales/19-55.scl b/scales/19-55.scl new file mode 100644 index 0000000..6b81f22 --- /dev/null +++ b/scales/19-55.scl @@ -0,0 +1,24 @@ +! 19-55.scl +! +19 out of 55-tET, meantone Gb-B# + 19 +! + 87.27273 + 109.09091 + 196.36364 + 283.63636 + 305.45455 + 392.72727 + 480.00000 + 501.81818 + 589.09091 + 610.90909 + 698.18182 + 785.45455 + 807.27273 + 894.54545 + 981.81818 + 1003.63636 + 1090.90909 + 1178.18182 + 2/1 diff --git a/scales/19-any.scl b/scales/19-any.scl new file mode 100644 index 0000000..d89f2eb --- /dev/null +++ b/scales/19-any.scl @@ -0,0 +1,24 @@ +! 19-any.scl +! +Two out of 1/7 1/5 1/3 1 3 5 7 CPS + 19 +! + 16/15 + 35/32 + 8/7 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 8/5 + 5/3 + 12/7 + 7/4 + 64/35 + 15/8 + 2/1 diff --git a/scales/20-31.scl b/scales/20-31.scl new file mode 100644 index 0000000..4c86239 --- /dev/null +++ b/scales/20-31.scl @@ -0,0 +1,25 @@ +! 20-31.scl +! +20 out of 31-tET + 20 +! + 77.41935 + 116.12903 + 193.54839 + 270.96774 + 309.67742 + 387.09677 + 425.80645 + 503.22581 + 580.64516 + 619.35484 + 696.77419 + 735.48387 + 774.19355 + 851.61290 + 890.32258 + 967.74194 + 1006.45161 + 1083.87097 + 1161.29032 + 2/1 diff --git a/scales/20-55.scl b/scales/20-55.scl new file mode 100644 index 0000000..08c37f1 --- /dev/null +++ b/scales/20-55.scl @@ -0,0 +1,25 @@ +! 20-55.scl +! +20 out of 55-tET, J. Chesnut: Mozart's teaching of intonation, JAMS 30/2 (1977) + 20 +! + 87.27273 + 109.09091 + 196.36364 + 218.18182 + 283.63636 + 305.45455 + 392.72727 + 414.54545 + 501.81818 + 589.09091 + 610.90909 + 698.18182 + 785.45455 + 807.27273 + 894.54545 + 916.36364 + 981.81818 + 1003.63636 + 1090.90909 + 2/1 diff --git a/scales/21-any.scl b/scales/21-any.scl new file mode 100644 index 0000000..0c9adfb --- /dev/null +++ b/scales/21-any.scl @@ -0,0 +1,26 @@ +! 21-any.scl +! +2)7 1.3.5.7.9.11.13 21-any, 1.3 tonic + 21 +! + 33/32 + 13/12 + 9/8 + 55/48 + 7/6 + 39/32 + 5/4 + 21/16 + 65/48 + 11/8 + 35/24 + 143/96 + 3/2 + 77/48 + 13/8 + 5/3 + 7/4 + 11/6 + 15/8 + 91/48 + 2/1 diff --git a/scales/22-41.scl b/scales/22-41.scl new file mode 100644 index 0000000..9fc12a5 --- /dev/null +++ b/scales/22-41.scl @@ -0,0 +1,27 @@ +! 22-41.scl +! +22 out of 41 by Stephen Soderberg, TL 17-11-98 + 22 +! + 58.53659 + 117.07317 + 175.60976 + 234.14634 + 292.68293 + 351.21951 + 380.48780 + 439.02439 + 497.56098 + 556.09756 + 614.63415 + 673.17073 + 731.70732 + 760.97561 + 819.51220 + 878.04878 + 936.58537 + 995.12195 + 1053.65854 + 1112.19512 + 1170.73171 + 2/1 diff --git a/scales/22-46.scl b/scales/22-46.scl new file mode 100644 index 0000000..d5ad9f7 --- /dev/null +++ b/scales/22-46.scl @@ -0,0 +1,27 @@ +! 22-46.scl +! +22 shrutis out of 46-tET by Graham Breed + 22 +! + 78.26087 + 104.34783 + 182.60870 + 208.69565 + 286.95652 + 313.04348 + 391.30435 + 417.39130 + 495.65217 + 521.73913 + 600.00000 + 626.08696 + 704.34783 + 782.60870 + 808.69565 + 886.95652 + 913.04348 + 991.30435 + 1017.39130 + 1095.65217 + 1121.73913 + 2/1 diff --git a/scales/22-53.scl b/scales/22-53.scl new file mode 100644 index 0000000..d8ae996 --- /dev/null +++ b/scales/22-53.scl @@ -0,0 +1,27 @@ +! 22-53.scl +! +22 shrutis out of 53-tET + 22 +! + 90.56604 + 113.20755 + 181.13208 + 203.77358 + 294.33962 + 316.98113 + 384.90566 + 407.54717 + 498.11321 + 520.75472 + 588.67925 + 611.32075 + 701.88679 + 792.45283 + 815.09434 + 883.01887 + 905.66038 + 996.22642 + 1018.86792 + 1086.79245 + 1109.43396 + 2/1 diff --git a/scales/24-41.scl b/scales/24-41.scl new file mode 100644 index 0000000..5e0949e --- /dev/null +++ b/scales/24-41.scl @@ -0,0 +1,29 @@ +! 24-41.scl +! +24 out of 41-tET, g=neutral third, 22 neutral triads, Op de Coul (2001), Hemififths-24 + 24 +! + 29.26829 + 87.80488 + 146.34146 + 175.60976 + 234.14634 + 292.68293 + 351.21951 + 380.48780 + 439.02439 + 497.56098 + 526.82927 + 585.36585 + 643.90244 + 702.43902 + 731.70732 + 790.24390 + 848.78049 + 878.04878 + 936.58537 + 995.12195 + 1053.65854 + 1082.92683 + 1141.46341 + 2/1 diff --git a/scales/24-60.scl b/scales/24-60.scl new file mode 100644 index 0000000..1d85edf --- /dev/null +++ b/scales/24-60.scl @@ -0,0 +1,29 @@ +! 24-60.scl +! +12 and 15-tET mixed. Novaro (1951) + 24 +! + 80.00000 + 100.00000 + 160.00000 + 200.00000 + 240.00000 + 300.00000 + 320.00000 + 400.00000 + 480.00000 + 500.00000 + 560.00000 + 600.00000 + 640.00000 + 700.00000 + 720.00000 + 800.00000 + 880.00000 + 900.00000 + 960.00000 + 1000.00000 + 1040.00000 + 1100.00000 + 1120.00000 + 2/1 diff --git a/scales/24-80.scl b/scales/24-80.scl new file mode 100644 index 0000000..4617c23 --- /dev/null +++ b/scales/24-80.scl @@ -0,0 +1,29 @@ +! 24-80.scl +! +Regular 705-cent temperament, 24 of 80-tET + 24 +! + 60.00000 + 135.00000 + 195.00000 + 210.00000 + 270.00000 + 285.00000 + 345.00000 + 420.00000 + 480.00000 + 495.00000 + 555.00000 + 630.00000 + 690.00000 + 705.00000 + 765.00000 + 840.00000 + 900.00000 + 915.00000 + 975.00000 + 990.00000 + 1050.00000 + 1125.00000 + 1185.00000 + 2/1 diff --git a/scales/24-94.scl b/scales/24-94.scl new file mode 100644 index 0000000..2dac028 --- /dev/null +++ b/scales/24-94.scl @@ -0,0 +1,29 @@ +! 24-94.scl +! +24 tone schismic temperament in 94-tET, Gene Ward Smith (2002) + 24 +! + 25.53191 + 89.36170 + 114.89362 + 178.72340 + 204.25532 + 293.61702 + 319.14894 + 382.97872 + 408.51064 + 497.87234 + 523.40426 + 587.23404 + 612.76596 + 676.59574 + 702.12766 + 791.48936 + 817.02128 + 880.85106 + 906.38298 + 995.74468 + 1021.27660 + 1085.10638 + 1110.63830 + 2/1 diff --git a/scales/28-any.scl b/scales/28-any.scl new file mode 100644 index 0000000..68f1938 --- /dev/null +++ b/scales/28-any.scl @@ -0,0 +1,31 @@ +! 28-any.scl +! +6)8 1.3.5.7.9.11.13.15 28-any, only 26 tones + 26 +! + 65/64 + 15/14 + 13/12 + 195/176 + 65/56 + 13/11 + 39/32 + 5/4 + 195/154 + 13/10 + 65/48 + 15/11 + 39/28 + 13/9 + 65/44 + 3/2 + 65/42 + 13/8 + 5/3 + 195/112 + 39/22 + 65/36 + 13/7 + 15/8 + 65/33 + 2/1 diff --git a/scales/30-29-min3.scl b/scales/30-29-min3.scl new file mode 100644 index 0000000..3943732 --- /dev/null +++ b/scales/30-29-min3.scl @@ -0,0 +1,14 @@ +! 30-29-min3.scl +! +30/29 x 29/28 x 28/27 plus 6/5 + 9 +! + 30/29 + 15/14 + 10/9 + 4/3 + 3/2 + 45/29 + 45/28 + 5/3 + 2/1 diff --git a/scales/31-171.scl b/scales/31-171.scl new file mode 100644 index 0000000..3fdb6a8 --- /dev/null +++ b/scales/31-171.scl @@ -0,0 +1,36 @@ +! 31-171.scl +! +Tertiaseptal-31 in 171-tET, g=11\171 + 31 +! + 42.10526 + 77.19298 + 119.29825 + 154.38596 + 196.49123 + 231.57895 + 273.68421 + 308.77193 + 350.87719 + 385.96491 + 428.07018 + 463.15789 + 505.26316 + 540.35088 + 582.45614 + 617.54386 + 659.64912 + 701.75439 + 736.84211 + 778.94737 + 814.03509 + 856.14035 + 891.22807 + 933.33333 + 968.42105 + 1010.52632 + 1045.61404 + 1087.71930 + 1122.80702 + 1164.91228 + 2/1 diff --git a/scales/53-commas.scl b/scales/53-commas.scl new file mode 100644 index 0000000..52576a4 --- /dev/null +++ b/scales/53-commas.scl @@ -0,0 +1,58 @@ +! 53-commas.scl +! +so-called 1/9 comma division of Turkish Music by equal division of 9/8 into 9 equal string lengths + 53 +! + 73/72 + 37/36 + 25/24 + 19/18 + 77/72 + 13/12 + 79/72 + 10/9 + 9/8 + 73/64 + 37/32 + 75/64 + 19/16 + 77/64 + 39/32 + 79/64 + 5/4 + 81/64 + 985/768 + 499/384 + 337/256 + 4/3 + 73/54 + 37/27 + 25/18 + 38/27 + 77/54 + 13/9 + 79/54 + 40/27 + 3/2 + 73/48 + 37/24 + 25/16 + 19/12 + 77/48 + 13/8 + 79/48 + 5/3 + 27/16 + 219/128 + 111/64 + 225/128 + 57/32 + 231/128 + 117/64 + 237/128 + 15/8 + 243/128 + 985/512 + 499/256 + 1011/512 + 2/1 diff --git a/scales/56-any.scl b/scales/56-any.scl new file mode 100644 index 0000000..7169d9d --- /dev/null +++ b/scales/56-any.scl @@ -0,0 +1,53 @@ +! 56-any.scl +! +3)8 1.3.5.7.9.11.13.15 56-any, 1.3.5 tonic, only 48 notes + 48 +! + 65/64 + 33/32 + 1001/960 + 21/20 + 13/12 + 35/32 + 11/10 + 143/128 + 9/8 + 91/80 + 7/6 + 143/120 + 77/64 + 39/32 + 99/80 + 5/4 + 77/60 + 13/10 + 21/16 + 429/320 + 11/8 + 7/5 + 45/32 + 91/64 + 231/160 + 117/80 + 143/96 + 3/2 + 91/60 + 99/64 + 63/40 + 77/48 + 13/8 + 33/20 + 27/16 + 273/160 + 55/32 + 7/4 + 143/80 + 9/5 + 117/64 + 11/6 + 15/8 + 91/48 + 77/40 + 39/20 + 63/32 + 2/1 diff --git a/scales/67-135.scl b/scales/67-135.scl new file mode 100644 index 0000000..527d4f2 --- /dev/null +++ b/scales/67-135.scl @@ -0,0 +1,72 @@ +! 67-135.scl +! +67 out of 135-tET by Ozan Yarman, g=17.7777 + 67 +! + 17.77778 + 35.55556 + 53.33333 + 71.11111 + 88.88889 + 106.66667 + 124.44444 + 142.22222 + 160.00000 + 177.77778 + 195.55556 + 213.33333 + 231.11111 + 248.88889 + 266.66667 + 284.44444 + 302.22222 + 320.00000 + 337.77778 + 355.55556 + 373.33333 + 391.11111 + 408.88889 + 426.66667 + 444.44444 + 462.22222 + 480.00000 + 497.77778 + 515.55556 + 533.33333 + 551.11111 + 568.88889 + 586.66667 + 604.44444 + 622.22222 + 640.00000 + 657.77778 + 675.55556 + 702.22222 + 720.00000 + 737.77778 + 755.55556 + 773.33333 + 791.11111 + 808.88889 + 826.66667 + 844.44444 + 862.22222 + 880.00000 + 897.77778 + 915.55556 + 933.33333 + 951.11111 + 968.88889 + 986.66667 + 1004.44444 + 1022.22222 + 1040.00000 + 1057.77778 + 1075.55556 + 1093.33333 + 1111.11111 + 1128.88889 + 1146.66667 + 1164.44444 + 1182.22222 + 2/1 diff --git a/scales/70-any.scl b/scales/70-any.scl new file mode 100644 index 0000000..3168c43 --- /dev/null +++ b/scales/70-any.scl @@ -0,0 +1,75 @@ +! 70-any.scl +! +4)8 1.3.5.7.11.13.17.19 70-any, tonic 1.3.5.7 + 70 +! + 323/320 + 2717/2688 + 143/140 + 247/240 + 3553/3360 + 17/16 + 13/12 + 2431/2240 + 209/192 + 4199/3840 + 11/10 + 247/224 + 187/168 + 221/192 + 323/280 + 187/160 + 19/16 + 143/120 + 2717/2240 + 17/14 + 209/168 + 4199/3360 + 2431/1920 + 143/112 + 247/192 + 13/10 + 209/160 + 221/168 + 3553/2688 + 187/140 + 323/240 + 19/14 + 11/8 + 221/160 + 2717/1920 + 17/12 + 323/224 + 2431/1680 + 247/168 + 143/96 + 209/140 + 247/160 + 187/120 + 4199/2688 + 11/7 + 221/140 + 19/12 + 3553/2240 + 2717/1680 + 13/8 + 187/112 + 323/192 + 17/10 + 143/84 + 46189/26880 + 209/120 + 247/140 + 143/80 + 2431/1344 + 11/6 + 221/120 + 3553/1920 + 13/7 + 209/112 + 4199/2240 + 19/10 + 323/168 + 187/96 + 221/112 + 2/1 diff --git a/scales/79-159.scl b/scales/79-159.scl new file mode 100644 index 0000000..b36cf97 --- /dev/null +++ b/scales/79-159.scl @@ -0,0 +1,84 @@ +! 79-159.scl +! +79 out of 159-tET MOS by Ozan Yarman, 79-tone Tuning & Theory For Turkish Maqam Music + 79 +! + 15.09434 + 30.18868 + 45.28302 + 60.37736 + 75.47170 + 90.56604 + 105.66038 + 120.75472 + 135.84906 + 150.94340 + 166.03774 + 181.13208 + 196.22642 + 211.32075 + 226.41509 + 241.50943 + 256.60377 + 271.69811 + 286.79245 + 301.88679 + 316.98113 + 332.07547 + 347.16981 + 362.26415 + 377.35849 + 392.45283 + 407.54717 + 422.64151 + 437.73585 + 452.83019 + 467.92453 + 483.01887 + 498.11321 + 513.20755 + 528.30189 + 543.39623 + 558.49057 + 573.58491 + 588.67925 + 603.77358 + 618.86792 + 633.96226 + 649.05660 + 664.15094 + 679.24528 + 701.88679 + 716.98113 + 732.07547 + 747.16981 + 762.26415 + 777.35849 + 792.45283 + 807.54717 + 822.64151 + 837.73585 + 852.83019 + 867.92453 + 883.01887 + 898.11321 + 913.20755 + 928.30189 + 943.39623 + 958.49057 + 973.58491 + 988.67925 + 1003.77358 + 1018.86792 + 1033.96226 + 1049.05660 + 1064.15094 + 1079.24528 + 1094.33962 + 1109.43396 + 1124.52830 + 1139.62264 + 1154.71698 + 1169.81132 + 1184.90566 + 2/1 diff --git a/scales/79-159_arel-ezgi-uzdilek.scl b/scales/79-159_arel-ezgi-uzdilek.scl new file mode 100644 index 0000000..a093a2a --- /dev/null +++ b/scales/79-159_arel-ezgi-uzdilek.scl @@ -0,0 +1,29 @@ +! 79-159_arel-ezgi-uzdilek.scl +! +Arel-Ezgi-Uzdilek style of 11 fifths up, 12 down from tone of origin in 79 MOS 159-tET + 24 +! + 90.56604 + 120.75472 + 181.13208 + 211.32075 + 301.88679 + 316.98113 + 377.35849 + 407.54717 + 498.11321 + 513.20755 + 588.67925 + 618.86792 + 679.24528 + 701.88679 + 792.45283 + 822.64151 + 883.01887 + 913.20755 + 1003.77358 + 1018.86792 + 1079.24528 + 1109.43396 + 1169.81132 + 2/1 diff --git a/scales/79-159_equidistant5ths.scl b/scales/79-159_equidistant5ths.scl new file mode 100644 index 0000000..124049f --- /dev/null +++ b/scales/79-159_equidistant5ths.scl @@ -0,0 +1,84 @@ +! 79-159_equidistant5ths.scl +! +79 MOS 159-tET equi-distant fifths from pure 3:2 version. + 79 +! + 15.09581 + 30.19161 + 45.28742 + 60.38323 + 75.47903 + 90.57484 + 105.67065 + 120.76645 + 135.86226 + 150.95806 + 166.05387 + 181.14968 + 196.24548 + 211.34129 + 226.43710 + 241.53290 + 256.62871 + 271.72452 + 286.82032 + 301.91613 + 317.01194 + 332.10774 + 347.20355 + 362.29936 + 377.39516 + 392.49097 + 407.58677 + 422.68258 + 437.77839 + 452.87419 + 467.97000 + 483.06581 + 498.16161 + 513.25742 + 528.35323 + 543.44903 + 558.54484 + 573.64065 + 588.73645 + 603.83226 + 618.92807 + 634.02387 + 649.11968 + 664.21548 + 679.31129 + 701.83839 + 716.93419 + 732.03000 + 747.12581 + 762.22161 + 777.31742 + 792.41323 + 807.50903 + 822.60484 + 837.70064 + 852.79645 + 867.89226 + 882.98806 + 898.08387 + 913.17968 + 928.27548 + 943.37129 + 958.46710 + 973.56290 + 988.65871 + 1003.75452 + 1018.85032 + 1033.94613 + 1049.04194 + 1064.13774 + 1079.23355 + 1094.32935 + 1109.42516 + 1124.52097 + 1139.61677 + 1154.71258 + 1169.80839 + 1184.90419 + 2/1 diff --git a/scales/79-159_splendidbeating.scl b/scales/79-159_splendidbeating.scl new file mode 100644 index 0000000..175319f --- /dev/null +++ b/scales/79-159_splendidbeating.scl @@ -0,0 +1,84 @@ +! 79-159_splendidbeating.scl +! +79 MOS 159-tET Splendid Beat Rates Based on Simple Frequencies, C=262 hz + 79 +! + 16.44109 + 31.10575 + 45.64723 + 60.06759 + 75.95058 + 91.68918 + 105.73262 + 121.20398 + 136.53831 + 151.73800 + 166.80541 + 181.74281 + 197.53525 + 211.23644 + 227.24628 + 243.10943 + 257.40541 + 272.99584 + 287.04814 + 302.37506 + 317.56748 + 332.62774 + 347.55811 + 362.36082 + 378.36618 + 392.90890 + 408.63558 + 422.92728 + 438.38483 + 453.70558 + 468.89194 + 483.94625 + 498.04500 + 513.66773 + 529.55633 + 544.09442 + 559.70746 + 573.99558 + 589.34246 + 604.55448 + 619.63400 + 634.58331 + 649.40463 + 665.22542 + 679.78781 + 701.95500 + 716.21295 + 732.51983 + 747.60223 + 762.55438 + 777.37849 + 792.07675 + 806.65126 + 822.13185 + 837.47524 + 852.68383 + 867.75999 + 882.70598 + 897.52405 + 913.19144 + 927.75194 + 944.10715 + 958.41101 + 973.53932 + 988.53656 + 1003.09655 + 1019.06406 + 1033.67371 + 1049.06256 + 1064.31582 + 1078.55010 + 1093.54687 + 1109.28547 + 1124.01947 + 1139.48469 + 1153.96496 + 1169.16614 + 1184.23500 + 2/1 diff --git a/scales/79-159beats.scl b/scales/79-159beats.scl new file mode 100644 index 0000000..e82a215 --- /dev/null +++ b/scales/79-159beats.scl @@ -0,0 +1,84 @@ +! 79-159beats.scl +! +79 MOS 159tET Splendid Beat Rates Based on Simple Frequencies, C=262 hz + 79 +! + 16.44109 + 31.10575 + 45.64723 + 60.06759 + 75.95058 + 91.68918 + 105.73262 + 121.20398 + 136.53831 + 151.73800 + 166.80541 + 181.74281 + 196.55243 + 211.23644 + 227.24628 + 241.67332 + 257.40541 + 271.58431 + 287.04814 + 302.37506 + 317.56748 + 332.62774 + 347.55811 + 362.36082 + 378.36618 + 392.90890 + 408.63558 + 422.92728 + 438.38483 + 453.70558 + 468.89194 + 483.94625 + 4/3 + 513.66773 + 528.33930 + 544.09442 + 558.51145 + 573.99558 + 589.34246 + 603.38906 + 619.63400 + 634.58331 + 649.40463 + 665.22542 + 679.78781 + 3/2 + 717.30486 + 732.51983 + 747.60223 + 762.55438 + 777.37849 + 792.07675 + 807.68762 + 822.13185 + 837.47524 + 852.68383 + 867.75999 + 882.70598 + 897.52405 + 913.19144 + 927.75194 + 944.10715 + 959.36042 + 973.53932 + 988.53656 + 1003.50782 + 1019.06406 + 1033.67371 + 1049.06256 + 1064.31582 + 1079.43587 + 1093.54687 + 1109.28547 + 1124.01947 + 1139.48469 + 1153.96496 + 1169.16614 + 1184.23500 + 2/1 diff --git a/scales/79-159first.scl b/scales/79-159first.scl new file mode 100644 index 0000000..0599f2f --- /dev/null +++ b/scales/79-159first.scl @@ -0,0 +1,84 @@ +! 79-159first.scl +! +79 MOS 159-tET original pure fourths version + 79 +! + 15.09227 + 30.18455 + 45.27682 + 60.36909 + 75.46136 + 90.55364 + 105.64591 + 120.73819 + 135.83046 + 150.92273 + 166.01500 + 181.10728 + 196.19955 + 211.29182 + 226.38409 + 241.47637 + 256.56864 + 271.66091 + 286.75319 + 301.84546 + 316.93773 + 332.03000 + 347.12228 + 362.21455 + 377.30682 + 392.39909 + 407.49137 + 422.58364 + 437.67591 + 452.76818 + 467.86046 + 482.95273 + 498.04500 + 513.13728 + 528.22955 + 543.32182 + 558.41409 + 573.50637 + 588.59864 + 603.69091 + 618.78318 + 633.87546 + 648.96773 + 664.06000 + 679.15228 + 701.95500 + 717.04728 + 732.13955 + 747.23182 + 762.32410 + 777.41637 + 792.50864 + 807.60091 + 822.69319 + 837.78546 + 852.87773 + 867.97000 + 883.06228 + 898.15455 + 913.24682 + 928.33910 + 943.43137 + 958.52364 + 973.61591 + 988.70819 + 1003.80046 + 1018.89273 + 1033.98500 + 1049.07728 + 1064.16955 + 1079.26182 + 1094.35409 + 1109.44637 + 1124.53864 + 1139.63091 + 1154.72319 + 1169.81546 + 1184.90773 + 2/1 diff --git a/scales/79-159ji.scl b/scales/79-159ji.scl new file mode 100644 index 0000000..c3e1770 --- /dev/null +++ b/scales/79-159ji.scl @@ -0,0 +1,84 @@ +! 79-159ji.scl +! +79 MOS 159-tET Just Intonation Ratios + 79 +! + 115/114 + 57/56 + 39/38 + 29/28 + 47/45 + 59/56 + 17/16 + 89/83 + 53/49 + 12/11 + 11/10 + 141/127 + 28/25 + 61/54 + 49/43 + 23/20 + 29/25 + 55/47 + 59/50 + 25/21 + 6/5 + 63/52 + 11/9 + 53/43 + 46/37 + 69/55 + 62/49 + 60/47 + 94/73 + 113/87 + 38/29 + 37/28 + 4/3 + 39/29 + 19/14 + 26/19 + 29/21 + 39/28 + 52/37 + 17/12 + 10/7 + 62/43 + 16/11 + 22/15 + 37/25 + 3/2 + 56/37 + 29/19 + 77/50 + 73/47 + 47/30 + 49/31 + 51/32 + 37/23 + 73/45 + 18/11 + 71/43 + 5/3 + 42/25 + 39/23 + 53/31 + 50/29 + 40/23 + 86/49 + 23/13 + 25/14 + 9/5 + 20/11 + 11/6 + 37/20 + 69/37 + 32/17 + 93/49 + 67/35 + 56/29 + 37/19 + 57/29 + 113/57 + 2/1 diff --git a/scales/80-159.scl b/scales/80-159.scl new file mode 100644 index 0000000..5a5d1ae --- /dev/null +++ b/scales/80-159.scl @@ -0,0 +1,85 @@ +! 80-159.scl +! +80 out of 159-tET MOS by Ozan Yarman, 79-tone Tuning & Theory For Turkish Maqam Music + 80 +! + 15.09434 + 30.18868 + 45.28302 + 60.37736 + 75.47170 + 90.56604 + 105.66038 + 120.75472 + 135.84906 + 150.94340 + 166.03774 + 181.13208 + 196.22642 + 211.32075 + 226.41509 + 241.50943 + 256.60377 + 271.69811 + 286.79245 + 301.88679 + 316.98113 + 332.07547 + 347.16981 + 362.26415 + 377.35849 + 392.45283 + 407.54717 + 422.64151 + 437.73585 + 452.83019 + 467.92453 + 483.01887 + 498.11321 + 513.20755 + 528.30189 + 543.39623 + 558.49057 + 573.58491 + 588.67925 + 603.77358 + 618.86792 + 633.96226 + 649.05660 + 664.15094 + 679.24528 + 694.33962 + 701.88679 + 716.98113 + 732.07547 + 747.16981 + 762.26415 + 777.35849 + 792.45283 + 807.54717 + 822.64151 + 837.73585 + 852.83019 + 867.92453 + 883.01887 + 898.11321 + 913.20755 + 928.30189 + 943.39623 + 958.49057 + 973.58491 + 988.67925 + 1003.77358 + 1018.86792 + 1033.96226 + 1049.05660 + 1064.15094 + 1079.24528 + 1094.33962 + 1109.43396 + 1124.52830 + 1139.62264 + 1154.71698 + 1169.81132 + 1184.90566 + 2/1 diff --git a/scales/80-159_splendidbeating.scl b/scales/80-159_splendidbeating.scl new file mode 100644 index 0000000..a3b629a --- /dev/null +++ b/scales/80-159_splendidbeating.scl @@ -0,0 +1,85 @@ +! 80-159_splendidbeating.scl +! +80 MOS 159-tET Splendid Beat Rates Based on Simple Frequencies, C=262 hz + 80 +! + 16.44109 + 31.10575 + 45.64723 + 60.06759 + 75.95058 + 91.68918 + 105.73262 + 121.20398 + 136.53831 + 151.73800 + 166.80541 + 181.74281 + 197.53525 + 211.23644 + 227.24628 + 243.10943 + 257.40541 + 272.99584 + 287.04814 + 302.37506 + 317.56748 + 332.62774 + 347.55811 + 362.36082 + 378.36618 + 392.90890 + 408.63558 + 422.92728 + 438.38483 + 453.70558 + 468.89194 + 483.94625 + 498.04500 + 513.66773 + 529.55633 + 544.09442 + 559.70746 + 573.99558 + 589.34246 + 604.55448 + 619.63400 + 634.58331 + 649.40463 + 665.22542 + 679.78781 + 694.59743 + 701.95500 + 716.21295 + 732.51983 + 747.60223 + 762.55438 + 777.37849 + 792.07675 + 806.65126 + 822.13185 + 837.47524 + 852.68383 + 867.75999 + 882.70598 + 897.52405 + 913.19144 + 927.75194 + 944.10715 + 958.41101 + 973.53932 + 988.53656 + 1003.09655 + 1019.06406 + 1033.67371 + 1049.06256 + 1064.31582 + 1078.55010 + 1093.54687 + 1109.28547 + 1124.01947 + 1139.48469 + 1153.96496 + 1169.16614 + 1184.23500 + 2/1 diff --git a/scales/80-159beats.scl b/scales/80-159beats.scl new file mode 100644 index 0000000..83d6015 --- /dev/null +++ b/scales/80-159beats.scl @@ -0,0 +1,85 @@ +! 80-159beats.scl +! +80 MOS 159tET Splendid Beat Rates Based on Simple Frequencies, C=262 hz + 80 +! + 16.44109 + 31.10575 + 45.64723 + 60.06759 + 75.95058 + 91.68918 + 105.73262 + 121.20398 + 136.53831 + 151.73800 + 166.80541 + 181.74281 + 196.55243 + 211.23644 + 227.24628 + 241.67332 + 257.40541 + 271.58431 + 287.04814 + 302.37506 + 317.56748 + 332.62774 + 347.55811 + 362.36082 + 378.36618 + 392.90890 + 408.63558 + 422.92728 + 438.38483 + 453.70558 + 468.89194 + 483.94625 + 4/3 + 513.66773 + 528.33930 + 544.09442 + 558.51145 + 573.99558 + 589.34246 + 603.38906 + 619.63400 + 634.58331 + 649.40463 + 665.22542 + 679.78781 + 694.59743 + 3/2 + 717.30486 + 732.51983 + 747.60223 + 762.55438 + 777.37849 + 792.07675 + 807.68762 + 822.13185 + 837.47524 + 852.68383 + 867.75999 + 882.70598 + 897.52405 + 913.19144 + 927.75194 + 944.10715 + 959.36042 + 973.53932 + 988.53656 + 1003.50782 + 1019.06406 + 1033.67371 + 1049.06256 + 1064.31582 + 1079.43587 + 1093.54687 + 1109.28547 + 1124.01947 + 1139.48469 + 1153.96496 + 1169.16614 + 1184.23500 + 2/1 diff --git a/scales/abell1.scl b/scales/abell1.scl new file mode 100644 index 0000000..448db5e --- /dev/null +++ b/scales/abell1.scl @@ -0,0 +1,17 @@ +! abell1.scl +! +Ross Abell's French Baroque Meantone 1, a'=520 Hz + 12 +! + 78.00000 + 194.00000 + 271.00000 + 387.00000 + 464.00000 + 581.00000 + 697.00000 + 775.00000 + 891.00000 + 968.00000 + 1084.00000 + 2/1 diff --git a/scales/abell2.scl b/scales/abell2.scl new file mode 100644 index 0000000..48ade82 --- /dev/null +++ b/scales/abell2.scl @@ -0,0 +1,17 @@ +! abell2.scl +! +Ross Abell's French Baroque Meantone 2, a'=520 Hz + 12 +! + 92.00000 + 206.00000 + 287.00000 + 402.00000 + 494.00000 + 596.00000 + 704.00000 + 789.00000 + 906.00000 + 989.00000 + 1099.00000 + 2/1 diff --git a/scales/abell3.scl b/scales/abell3.scl new file mode 100644 index 0000000..884826f --- /dev/null +++ b/scales/abell3.scl @@ -0,0 +1,17 @@ +! abell3.scl +! +Ross Abell's French Baroque Meantone 3, a'=520 Hz + 12 +! + 92.00204 + 199.00342 + 283.00016 + 398.00006 + 504.00133 + 594.00297 + 702.00169 + 787.35879 + 901.00170 + 985.00273 + 1096.00182 + 2/1 diff --git a/scales/abell4.scl b/scales/abell4.scl new file mode 100644 index 0000000..7b99c81 --- /dev/null +++ b/scales/abell4.scl @@ -0,0 +1,17 @@ +! abell4.scl +! +Ross Abell's French Baroque Meantone 4, a'=520 Hz + 12 +! + 86.00000 + 196.00000 + 284.00000 + 392.00000 + 484.00000 + 588.00000 + 698.00000 + 784.00000 + 894.00000 + 984.00000 + 1090.00000 + 2/1 diff --git a/scales/abell5.scl b/scales/abell5.scl new file mode 100644 index 0000000..13edf30 --- /dev/null +++ b/scales/abell5.scl @@ -0,0 +1,17 @@ +! abell5.scl +! +Ross Abell's French Baroque Meantone 5, a'=520 Hz + 12 +! + 105.00000 + 213.00000 + 303.00000 + 408.00000 + 501.00000 + 606.00000 + 716.00000 + 804.00000 + 909.00000 + 1002.00000 + 1107.00000 + 2/1 diff --git a/scales/abell6.scl b/scales/abell6.scl new file mode 100644 index 0000000..776e52f --- /dev/null +++ b/scales/abell6.scl @@ -0,0 +1,17 @@ +! abell6.scl +! +Ross Abell's French Baroque Meantone 6, a'=520 Hz + 12 +! + 99.00000 + 198.00000 + 303.00000 + 402.00000 + 501.00000 + 600.00000 + 699.00000 + 798.00000 + 903.00000 + 1002.00000 + 1101.00000 + 2/1 diff --git a/scales/abell7.scl b/scales/abell7.scl new file mode 100644 index 0000000..f088fbe --- /dev/null +++ b/scales/abell7.scl @@ -0,0 +1,17 @@ +! abell7.scl +! +Ross Abell's French Baroque Meantone 7, a'=520 Hz + 12 +! + 102.00000 + 204.00000 + 294.00000 + 396.00000 + 498.00000 + 600.00000 + 702.00000 + 804.00000 + 894.00000 + 996.00000 + 1098.00000 + 2/1 diff --git a/scales/abell8.scl b/scales/abell8.scl new file mode 100644 index 0000000..cf61acb --- /dev/null +++ b/scales/abell8.scl @@ -0,0 +1,17 @@ +! abell8.scl +! +Ross Abell's French Baroque Meantone 8, a'=520 Hz + 12 +! + 104.00000 + 206.00000 + 302.00000 + 400.00000 + 504.00000 + 606.00000 + 702.00000 + 800.00000 + 904.00000 + 1006.00000 + 1102.00000 + 2/1 diff --git a/scales/abell9.scl b/scales/abell9.scl new file mode 100644 index 0000000..6a6c390 --- /dev/null +++ b/scales/abell9.scl @@ -0,0 +1,17 @@ +! abell9.scl +! +Ross Abell's French Baroque Meantone 9, a'=520 Hz + 12 +! + 93.00000 + 198.00000 + 292.00000 + 403.00000 + 497.00000 + 596.00000 + 700.00000 + 789.00000 + 900.00000 + 994.00000 + 1100.00000 + 2/1 diff --git a/scales/ad-dik.scl b/scales/ad-dik.scl new file mode 100644 index 0000000..e46b11b --- /dev/null +++ b/scales/ad-dik.scl @@ -0,0 +1,29 @@ +! ad-dik.scl +! +Amin Ad-Dik, 24-tone Egyptian tuning, d'Erlanger vol.5, p. 42 + 24 +! + 1053/1024 + 256/243 + 12/11 + 9/8 + 147/128 + 32/27 + 27/22 + 5/4 + 9/7 + 4/3 + 48/35 + 1024/729 + 81/56 + 3/2 + 49/32 + 128/81 + 18/11 + 27/16 + 26/15 + 9/5 + 11/6 + 15/8 + 35/18 + 2/1 diff --git a/scales/aeolic.scl b/scales/aeolic.scl new file mode 100644 index 0000000..f7cf501 --- /dev/null +++ b/scales/aeolic.scl @@ -0,0 +1,12 @@ +! aeolic.scl +! +Ancient Greek Aeolic, also tritriadic scale of the 54:64:81 triad + 7 +! + 9/8 + 32/27 + 4/3 + 3/2 + 128/81 + 16/9 + 2/1 diff --git a/scales/aeu-41 ratios.scl b/scales/aeu-41 ratios.scl new file mode 100644 index 0000000..2f50827 --- /dev/null +++ b/scales/aeu-41 ratios.scl @@ -0,0 +1,46 @@ +! aeu-41 ratios.scl +! +AEU extended to quasi-cyclic 41-tones in simple ratios + 41 +! + 67/66 + 27/26 + 59/56 + 63/59 + 38/35 + 71/64 + 9/8 + 8/7 + 111/95 + 32/27 + 125/104 + 16/13 + 146/117 + 81/64 + 9/7 + 46/35 + 4/3 + 23/17 + 18/13 + 59/42 + 131/92 + 68/47 + 71/48 + 3/2 + 32/21 + 81/52 + 128/81 + 109/68 + 85/52 + 198/119 + 27/16 + 12/7 + 163/93 + 16/9 + 119/66 + 24/13 + 88/47 + 112/59 + 27/14 + 69/35 + 2/1 diff --git a/scales/aeu-41.scl b/scales/aeu-41.scl new file mode 100644 index 0000000..e129bab --- /dev/null +++ b/scales/aeu-41.scl @@ -0,0 +1,46 @@ +! aeu-41.scl +! +AEU extended to 41-quasi equal tones by Ozan Yarman + 41 +! + 531441/524288 + 27/26 + 256/243 + 2187/2048 + 1162261467/1073741824 + 65536/59049 + 9/8 + 4782969/4194304 + 243/208 + 32/27 + 19683/16384 + 16/13 + 8192/6561 + 81/64 + 43046721/33554432 + 2097152/1594323 + 4/3 + 177147/131072 + 18/13 + 1024/729 + 729/512 + 387420489/268435456 + 262144/177147 + 3/2 + 1594323/1048576 + 81/52 + 128/81 + 6561/4096 + 111/68 + 32768/19683 + 27/16 + 14348907/8388608 + 8388608/4782969 + 16/9 + 59049/32768 + 24/13 + 4096/2187 + 243/128 + 129140163/67108864 + 1048576/531441 + 2/1 diff --git a/scales/agricola.scl b/scales/agricola.scl new file mode 100644 index 0000000..409ee56 --- /dev/null +++ b/scales/agricola.scl @@ -0,0 +1,17 @@ +! agricola.scl +! +Agricola's Monochord, Rudimenta musices (1539) + 12 +! + 135/128 + 9/8 + 1215/1024 + 81/64 + 4/3 + 45/32 + 3/2 + 405/256 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/agricola_p.scl b/scales/agricola_p.scl new file mode 100644 index 0000000..396f3a2 --- /dev/null +++ b/scales/agricola_p.scl @@ -0,0 +1,17 @@ +! agricola_p.scl +! +Agricola's Pythagorean-type Monochord, Musica instrumentalis deudsch (1545) + 12 +! + 109.77500 + 9/8 + 313.68501 + 81/64 + 4/3 + 607.82000 + 3/2 + 811.73001 + 27/16 + 1015.64001 + 243/128 + 2/1 diff --git a/scales/akea46_13.scl b/scales/akea46_13.scl new file mode 100644 index 0000000..256d784 --- /dev/null +++ b/scales/akea46_13.scl @@ -0,0 +1,101 @@ +! akea46_13.scl +Tridecimal Akea[46] hobbit minimax tuning. Commas 325/324, 352/351, 385/384 +46 +! +26.52580 +53.05160 +67.35084 +111.95263 +138.47843 +152.77767 +179.30347 +205.82927 +232.35507 +264.73030 +291.25610 +317.78190 +344.30770 +358.60694 +385.13274 +411.65854 +438.18434 +470.55956 +497.08537 +523.61117 +550.13697 +564.43621 +590.96201 +635.56379 +649.86303 +676.38883 +702.91463 +729.44044 +755.96624 +788.34146 +814.86726 +841.39306 +855.69230 +882.21810 +908.74390 +935.26970 +967.64493 +994.17073 +1020.69653 +1047.22233 +1061.52157 +1088.04737 +1114.57317 +1146.94840 +1173.47420 +2/1 +! +! ! preakea46.scl +! Akea[46] transversal +! 46 +! ! +! 55/54 +! 33/32 +! 25/24 +! 16/15 +! 13/12 +! 12/11 +! 10/9 +! 9/8 +! 8/7 +! 7/6 +! 13/11 +! 6/5 +! 11/9 +! 16/13 +! 5/4 +! 80/63 +! 9/7 +! 21/16 +! 4/3 +! 27/20 +! 11/8 +! 18/13 +! 45/32 +! 13/9 +! 16/11 +! 40/27 +! 3/2 +! 32/21 +! 54/35 +! 52/33 +! 8/5 +! 13/8 +! 18/11 +! 5/3 +! 22/13 +! 12/7 +! 7/4 +! 16/9 +! 9/5 +! 11/6 +! 24/13 +! 15/8 +! 40/21 +! 35/18 +! 65/33 +! 2/1 diff --git a/scales/al-din.scl b/scales/al-din.scl new file mode 100644 index 0000000..c33abf4 --- /dev/null +++ b/scales/al-din.scl @@ -0,0 +1,40 @@ +! al-din.scl +! +Safi al-Din's complete lute tuning on 5 strings 4/3 apart + 35 +! + 256/243 + 65536/59049 + 9/8 + 32/27 + 8192/6561 + 81/64 + 4/3 + 1024/729 + 262144/177147 + 3/2 + 128/81 + 32768/19683 + 27/16 + 16/9 + 4096/2187 + 1048576/531441 + 2/1 + 512/243 + 131072/59049 + 9/4 + 64/27 + 16384/6561 + 4194304/1594323 + 8/3 + 2048/729 + 524288/177147 + 3/1 + 256/81 + 65536/19683 + 16777216/4782969 + 32/9 + 8192/2187 + 2097152/531441 + 4/1 + 1024/243 diff --git a/scales/al-din_19.scl b/scales/al-din_19.scl new file mode 100644 index 0000000..a22b8fa --- /dev/null +++ b/scales/al-din_19.scl @@ -0,0 +1,24 @@ +! al-din_19.scl +! +Pythagorean Arabic scale by Safi al-Din + 19 +! + 256/243 + 65536/59049 + 9/8 + 32/27 + 8192/6561 + 81/64 + 2097152/1594323 + 4/3 + 1024/729 + 262144/177147 + 3/2 + 128/81 + 32768/19683 + 27/16 + 8388608/4782969 + 16/9 + 4096/2187 + 1048576/531441 + 2/1 diff --git a/scales/al-farabi.scl b/scales/al-farabi.scl new file mode 100644 index 0000000..0101c8d --- /dev/null +++ b/scales/al-farabi.scl @@ -0,0 +1,12 @@ +! al-farabi.scl +! +Al-Farabi Syn Chrom + 7 +! + 16/15 + 8/7 + 4/3 + 3/2 + 8/5 + 12/7 + 2/1 diff --git a/scales/al-farabi_19.scl b/scales/al-farabi_19.scl new file mode 100644 index 0000000..cc08952 --- /dev/null +++ b/scales/al-farabi_19.scl @@ -0,0 +1,24 @@ +! al-farabi_19.scl +! +Arabic scale by Al Farabi + 19 +! + 256/243 + 12/11 + 9/8 + 32/27 + 8192/6561 + 81/64 + 2816/2187 + 4/3 + 1024/729 + 16/11 + 3/2 + 128/81 + 32768/19683 + 27/16 + 891/512 + 16/9 + 4096/2187 + 64/33 + 2/1 diff --git a/scales/al-farabi_22.scl b/scales/al-farabi_22.scl new file mode 100644 index 0000000..b465765 --- /dev/null +++ b/scales/al-farabi_22.scl @@ -0,0 +1,27 @@ +! al-farabi_22.scl +! +Al-Farabi 22 note ud scale + 22 +! + 256/243 + 18/17 + 12/11 + 9/8 + 32/27 + 27/22 + 8192/6561 + 81/64 + 4/3 + 1024/729 + 24/17 + 16/11 + 3/2 + 128/81 + 18/11 + 32768/19683 + 27/16 + 16/9 + 4096/2187 + 32/17 + 64/33 + 2/1 diff --git a/scales/al-farabi_9.scl b/scales/al-farabi_9.scl new file mode 100644 index 0000000..305eddf --- /dev/null +++ b/scales/al-farabi_9.scl @@ -0,0 +1,14 @@ +! al-farabi_9.scl +! +Al-Farabi 9 note ud scale + 9 +! + 9/8 + 27/22 + 81/64 + 4/3 + 3/2 + 18/11 + 27/16 + 16/9 + 2/1 diff --git a/scales/al-farabi_blue.scl b/scales/al-farabi_blue.scl new file mode 100644 index 0000000..6c108c0 --- /dev/null +++ b/scales/al-farabi_blue.scl @@ -0,0 +1,12 @@ +! al-farabi_blue.scl +! +Another tuning from Al Farabi, c700 AD + 7 +! + 9/8 + 45/32 + 131/90 + 3/2 + 15/8 + 31/16 + 2/1 diff --git a/scales/al-farabi_chrom.scl b/scales/al-farabi_chrom.scl new file mode 100644 index 0000000..6f0600b --- /dev/null +++ b/scales/al-farabi_chrom.scl @@ -0,0 +1,12 @@ +! al-farabi_chrom.scl +! +Al Farabi's Chromatic c700 AD + 7 +! + 9/8 + 27/20 + 729/512 + 3/2 + 9/5 + 19/10 + 2/1 diff --git a/scales/al-farabi_chrom2.scl b/scales/al-farabi_chrom2.scl new file mode 100644 index 0000000..16491f3 --- /dev/null +++ b/scales/al-farabi_chrom2.scl @@ -0,0 +1,12 @@ +! al-farabi_chrom2.scl +! +Al-Farabi's Chromatic permuted + 7 +! + 16/15 + 56/45 + 4/3 + 3/2 + 8/5 + 28/15 + 2/1 diff --git a/scales/al-farabi_diat.scl b/scales/al-farabi_diat.scl new file mode 100644 index 0000000..f2609a3 --- /dev/null +++ b/scales/al-farabi_diat.scl @@ -0,0 +1,12 @@ +! al-farabi_diat.scl +! +Al-Farabi's Diatonic + 7 +! + 8/7 + 64/49 + 4/3 + 3/2 + 12/7 + 96/49 + 2/1 diff --git a/scales/al-farabi_diat2.scl b/scales/al-farabi_diat2.scl new file mode 100644 index 0000000..661758a --- /dev/null +++ b/scales/al-farabi_diat2.scl @@ -0,0 +1,12 @@ +! AL-FARABI_DIAT2.scl +! +Old Phrygian, permuted form of Al-Farabi's reduplicated 10/9 diatonic genus, same as ptolemy_diat.scl + 7 +! + 10/9 + 6/5 + 4/3 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/al-farabi_div.scl b/scales/al-farabi_div.scl new file mode 100644 index 0000000..17a6e14 --- /dev/null +++ b/scales/al-farabi_div.scl @@ -0,0 +1,15 @@ +! al-farabi_div.scl +! +Al Farabi's 10 intervals for the division of the tetrachord + 10 +! + 256/243 + 18/17 + 162/149 + 54/49 + 9/8 + 32/27 + 81/68 + 27/22 + 81/64 + 4/3 diff --git a/scales/al-farabi_div2.scl b/scales/al-farabi_div2.scl new file mode 100644 index 0000000..08daef2 --- /dev/null +++ b/scales/al-farabi_div2.scl @@ -0,0 +1,17 @@ +! al-farabi_div2.scl +! +Al-Farabi's tetrachord division, incl. extra 2187/2048 & 19683/16384 + 12 +! + 256/243 + 18/17 + 2187/2048 + 162/149 + 54/49 + 9/8 + 32/27 + 81/68 + 19683/16384 + 27/22 + 81/64 + 4/3 diff --git a/scales/al-farabi_divo.scl b/scales/al-farabi_divo.scl new file mode 100644 index 0000000..6c833e4 --- /dev/null +++ b/scales/al-farabi_divo.scl @@ -0,0 +1,29 @@ +! al-farabi_divo.scl +! +Al Farabi's theoretical octave division with identical tetrachords, 10th c. + 24 +! + 256/243 + 18/17 + 162/149 + 54/49 + 9/8 + 32/27 + 81/68 + 27/22 + 81/64 + 4/3 + 1024/729 + 24/17 + 216/149 + 3/2 + 128/81 + 27/17 + 243/149 + 81/49 + 27/16 + 16/9 + 243/136 + 81/44 + 243/128 + 2/1 diff --git a/scales/al-farabi_dor.scl b/scales/al-farabi_dor.scl new file mode 100644 index 0000000..953b617 --- /dev/null +++ b/scales/al-farabi_dor.scl @@ -0,0 +1,12 @@ +! AL-FARABI_dor.scl +! +Dorian mode of Al-Farabi's 10/9 Diatonic + 7 +! + 27/25 + 6/5 + 4/3 + 3/2 + 81/50 + 9/5 + 2/1 diff --git a/scales/al-farabi_dor2.scl b/scales/al-farabi_dor2.scl new file mode 100644 index 0000000..c6a8daf --- /dev/null +++ b/scales/al-farabi_dor2.scl @@ -0,0 +1,12 @@ +! AL-FARABI_DOR2.scl +! +Dorian mode of Al-Farabi's Diatonic + 7 +! + 49/48 + 7/6 + 4/3 + 3/2 + 49/32 + 7/4 + 2/1 diff --git a/scales/al-farabi_g1.scl b/scales/al-farabi_g1.scl new file mode 100644 index 0000000..0b16e07 --- /dev/null +++ b/scales/al-farabi_g1.scl @@ -0,0 +1,12 @@ +! al-farabi_g1.scl +! +Al-Farabi's Greek genus conjunctum medium, Land + 7 +! + 9/8 + 81/64 + 45/32 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/al-farabi_g10.scl b/scales/al-farabi_g10.scl new file mode 100644 index 0000000..6a1ed57 --- /dev/null +++ b/scales/al-farabi_g10.scl @@ -0,0 +1,12 @@ +! al-farabi_g10.scl +! +Al-Farabi's Greek genus chromaticum forte + 7 +! + 9/8 + 21/16 + 45/32 + 3/2 + 7/4 + 15/8 + 2/1 diff --git a/scales/al-farabi_g11.scl b/scales/al-farabi_g11.scl new file mode 100644 index 0000000..a24c435 --- /dev/null +++ b/scales/al-farabi_g11.scl @@ -0,0 +1,12 @@ +! al-farabi_g11.scl +! +Al-Farabi's Greek genus chromaticum mollissimum + 7 +! + 9/8 + 27/20 + 729/512 + 3/2 + 9/5 + 243/128 + 2/1 diff --git a/scales/al-farabi_g12.scl b/scales/al-farabi_g12.scl new file mode 100644 index 0000000..e0de6db --- /dev/null +++ b/scales/al-farabi_g12.scl @@ -0,0 +1,12 @@ +! al-farabi_g12.scl +! +Al-Farabi's Greek genus mollissimum ordinantium + 7 +! + 9/8 + 45/32 + 93/64 + 3/2 + 15/8 + 31/16 + 2/1 diff --git a/scales/al-farabi_g3.scl b/scales/al-farabi_g3.scl new file mode 100644 index 0000000..a46a595 --- /dev/null +++ b/scales/al-farabi_g3.scl @@ -0,0 +1,12 @@ +! al-farabi_g3.scl +! +Al-Farabi's Greek genus conjunctum primum + 7 +! + 9/8 + 9/7 + 81/56 + 3/2 + 12/7 + 27/14 + 2/1 diff --git a/scales/al-farabi_g4.scl b/scales/al-farabi_g4.scl new file mode 100644 index 0000000..bb27d45 --- /dev/null +++ b/scales/al-farabi_g4.scl @@ -0,0 +1,12 @@ +! al-farabi_g4.scl +! +Al-Farabi's Greek genus forte duplicatum primum + 7 +! + 9/8 + 9/7 + 72/49 + 3/2 + 12/7 + 96/49 + 2/1 diff --git a/scales/al-farabi_g5.scl b/scales/al-farabi_g5.scl new file mode 100644 index 0000000..1ec2746 --- /dev/null +++ b/scales/al-farabi_g5.scl @@ -0,0 +1,12 @@ +! al-farabi_g5.scl +! +Al-Farabi's Greek genus conjunctum tertium, or forte aequatum + 7 +! + 9/8 + 5/4 + 11/8 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/al-farabi_g6.scl b/scales/al-farabi_g6.scl new file mode 100644 index 0000000..eca7336 --- /dev/null +++ b/scales/al-farabi_g6.scl @@ -0,0 +1,12 @@ +! al-farabi_g6.scl +! +Al-Farabi's Greek genus forte disjunctum primum + 7 +! + 9/8 + 9/7 + 10/7 + 3/2 + 12/7 + 40/21 + 2/1 diff --git a/scales/al-farabi_g7.scl b/scales/al-farabi_g7.scl new file mode 100644 index 0000000..7d580ce --- /dev/null +++ b/scales/al-farabi_g7.scl @@ -0,0 +1,12 @@ +! al-farabi_g7.scl +! +Al-Farabi's Greek genus non continuum acre + 7 +! + 9/8 + 21/16 + 63/44 + 3/2 + 7/4 + 21/11 + 2/1 diff --git a/scales/al-farabi_g8.scl b/scales/al-farabi_g8.scl new file mode 100644 index 0000000..da92938 --- /dev/null +++ b/scales/al-farabi_g8.scl @@ -0,0 +1,12 @@ +! al-farabi_g8.scl +! +Al-Farabi's Greek genus non continuum mediocre + 7 +! + 9/8 + 27/20 + 81/56 + 3/2 + 9/5 + 27/14 + 2/1 diff --git a/scales/al-farabi_g9.scl b/scales/al-farabi_g9.scl new file mode 100644 index 0000000..598202b --- /dev/null +++ b/scales/al-farabi_g9.scl @@ -0,0 +1,12 @@ +! al-farabi_g9.scl +! +Al-Farabi's Greek genus non continuum laxum + 7 +! + 9/8 + 45/32 + 22/15 + 3/2 + 15/8 + 88/45 + 2/1 diff --git a/scales/al-hwarizmi.scl b/scales/al-hwarizmi.scl new file mode 100644 index 0000000..4ba59e5 --- /dev/null +++ b/scales/al-hwarizmi.scl @@ -0,0 +1,11 @@ +! Al-Hwarizmi.scl +! +Al-Hwarizmi's tetrachord division + 6 +! + 9/8 + 81/70 + 81/68 + 27/22 + 81/64 + 4/3 diff --git a/scales/al-kindi.scl b/scales/al-kindi.scl new file mode 100644 index 0000000..e0f8439 --- /dev/null +++ b/scales/al-kindi.scl @@ -0,0 +1,11 @@ +! al-kindi.scl +! +Al-Kindi's tetrachord division + 6 +! + 256/243 + 2187/2048 + 9/8 + 32/27 + 81/64 + 4/3 diff --git a/scales/al-kindi2.scl b/scales/al-kindi2.scl new file mode 100644 index 0000000..e38d4c3 --- /dev/null +++ b/scales/al-kindi2.scl @@ -0,0 +1,19 @@ +! al-kindi2.scl +! +Arabic mode by al-Kindi + 14 +! + 256/243 + 9/8 + 32/27 + 8192/6561 + 81/64 + 4/3 + 1024/729 + 3/2 + 128/81 + 32768/19683 + 27/16 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/al-mausili.scl b/scales/al-mausili.scl new file mode 100644 index 0000000..7078acb --- /dev/null +++ b/scales/al-mausili.scl @@ -0,0 +1,16 @@ +! al-mausili.scl +! +Arabic mode by Ishaq al-Mausili, ? - 850 AD + 11 +! + 256/243 + 9/8 + 32/27 + 81/64 + 4/3 + 1024/729 + 3/2 + 128/81 + 27/16 + 16/9 + 2/1 diff --git a/scales/alembert.scl b/scales/alembert.scl new file mode 100644 index 0000000..283afd1 --- /dev/null +++ b/scales/alembert.scl @@ -0,0 +1,17 @@ +! alembert.scl +! +Jean-Le Rond d'Alembert modified meantone (1752) + 12 +! + 78.14893 + 193.15686 + 281.57050 + 386.31372 + 493.85684 + 580.87053 + 696.57843 + 775.42734 + 889.73529 + 987.71367 + 1083.59212 + 2/1 diff --git a/scales/alembert2.scl b/scales/alembert2.scl new file mode 100644 index 0000000..de24ac5 --- /dev/null +++ b/scales/alembert2.scl @@ -0,0 +1,17 @@ +! alembert2.scl +! +d'Alembert (?) + 12 +! + 86.31371 + 193.57843 + 289.73625 + 5/4 + 496.57875 + 586.31371 + 697.00000 + 786.31371 + 890.15686 + 993.15750 + 1086.31371 + 2/1 diff --git a/scales/alves.scl b/scales/alves.scl new file mode 100644 index 0000000..9e2f892 --- /dev/null +++ b/scales/alves.scl @@ -0,0 +1,18 @@ +! alves.scl +! +Bill Alves, tuning for "Instantaneous Motion", 1/1 vol. 6/3 + 13 +! + 49/48 + 9/8 + 7/6 + 5/4 + 9/7 + 4/3 + 11/8 + 3/2 + 13/8 + 12/7 + 7/4 + 27/14 + 2/1 diff --git a/scales/alves_12.scl b/scales/alves_12.scl new file mode 100644 index 0000000..0f2671e --- /dev/null +++ b/scales/alves_12.scl @@ -0,0 +1,17 @@ +! alves_12.scl +! +Bill Alves, tuning for "Metalloid", TL 12-12-2007 + 12 +! + 49/48 + 9/8 + 7/6 + 9/7 + 21/16 + 49/36 + 3/2 + 49/32 + 12/7 + 7/4 + 27/14 + 2/1 diff --git a/scales/alves_22.scl b/scales/alves_22.scl new file mode 100644 index 0000000..b459def --- /dev/null +++ b/scales/alves_22.scl @@ -0,0 +1,27 @@ +! alves_22.scl +! +11-limit rational interpretation of 22-tET, Bill Alves, TL 9-1-98 + 22 +! + 33/32 + 16/15 + 11/10 + 25/22 + 7/6 + 40/33 + 5/4 + 9/7 + 4/3 + 11/8 + 99/70 + 16/11 + 3/2 + 14/9 + 8/5 + 33/20 + 12/7 + 44/25 + 20/11 + 15/8 + 64/33 + 2/1 diff --git a/scales/amity.scl b/scales/amity.scl new file mode 100644 index 0000000..8f80922 --- /dev/null +++ b/scales/amity.scl @@ -0,0 +1,44 @@ +! amity.scl +! +Amity temperament, g=339.508826, 5-limit + 39 +! + 23.43822 + 87.72065 + 111.15887 + 134.59709 + 158.03530 + 181.47352 + 204.91174 + 269.19417 + 292.63239 + 316.07061 + 339.50883 + 362.94704 + 386.38526 + 450.66769 + 474.10591 + 497.54413 + 520.98235 + 544.42057 + 608.70300 + 632.14122 + 655.57943 + 679.01765 + 702.45587 + 725.89409 + 790.17652 + 813.61474 + 837.05296 + 860.49117 + 883.92939 + 948.21182 + 971.65004 + 995.08826 + 1018.52648 + 1041.96470 + 1065.40291 + 1129.68535 + 1153.12356 + 1176.56178 + 2/1 diff --git a/scales/amity53pure.scl b/scales/amity53pure.scl new file mode 100644 index 0000000..d789dc8 --- /dev/null +++ b/scales/amity53pure.scl @@ -0,0 +1,58 @@ +! amity53pure.scl +! +Amity[53] in pure-fifths tuning + 53 +! + 22.73700 + 45.47400 + 68.21100 + 256/243 + 112.96200 + 135.69900 + 158.43600 + 181.17300 + 9/8 + 226.64700 + 249.38400 + 271.39800 + 32/27 + 316.87200 + 339.60900 + 362.34600 + 385.08300 + 81/64 + 429.83400 + 452.57100 + 475.30800 + 4/3 + 520.78200 + 543.51900 + 566.25600 + 588.99300 + 611.00700 + 633.74400 + 656.48100 + 679.21800 + 3/2 + 724.69200 + 747.42900 + 770.16600 + 128/81 + 814.91700 + 837.65400 + 860.39100 + 883.12800 + 27/16 + 928.60200 + 950.61600 + 973.35300 + 16/9 + 1018.82700 + 1041.56400 + 1064.30100 + 1087.03800 + 243/128 + 1131.78900 + 1154.52600 + 1177.26300 + 2/1 diff --git a/scales/ammerbach.scl b/scales/ammerbach.scl new file mode 100644 index 0000000..c053f3c --- /dev/null +++ b/scales/ammerbach.scl @@ -0,0 +1,17 @@ +! ammerbach.scl +! +Elias Mikolaus Ammerbach (1571), from Ratte: Temperierungspraktiken im sddeutschen Orgelbau p. 412 + 12 +! + 86.31499 + 198.04500 + 302.93250 + 392.18000 + 4/3 + 590.22500 + 3/2 + 784.35999 + 894.13500 + 999.02250 + 1092.18000 + 2/1 diff --git a/scales/ammerbach1.scl b/scales/ammerbach1.scl new file mode 100644 index 0000000..d416540 --- /dev/null +++ b/scales/ammerbach1.scl @@ -0,0 +1,17 @@ +! ammerbach1.scl +! +Elias Mikolaus Ammerbach (1571, 1583) interpretation 1, Ratte, 1991 + 12 +! + 89.68501 + 197.91000 + 300.13500 + 395.82000 + 4/3 + 593.73001 + 3/2 + 791.64001 + 893.86500 + 1002.09000 + 1097.77500 + 2/1 diff --git a/scales/ammerbach2.scl b/scales/ammerbach2.scl new file mode 100644 index 0000000..212299a --- /dev/null +++ b/scales/ammerbach2.scl @@ -0,0 +1,17 @@ +! ammerbach2.scl +! +Elias Mikolaus Ammerbach (1571, 1583) interpretation 2, Ratte, 1991 + 12 +! + 85.68501 + 197.91000 + 303.13500 + 391.82000 + 4/3 + 589.73001 + 3/2 + 783.64001 + 893.86500 + 999.09000 + 1091.77500 + 2/1 diff --git a/scales/angklung.scl b/scales/angklung.scl new file mode 100644 index 0000000..3868a22 --- /dev/null +++ b/scales/angklung.scl @@ -0,0 +1,13 @@ +! angklung.scl +! +Scale of an anklung set from Tasikmalaya. 1/1=174 Hz + 8 +! + 206.12000 + 382.32900 + 610.00900 + 823.60700 + 1234.47800 + 1406.12000 + 1633.42500 + 1841.20400 diff --git a/scales/ankara.scl b/scales/ankara.scl new file mode 100644 index 0000000..87d4005 --- /dev/null +++ b/scales/ankara.scl @@ -0,0 +1,39 @@ +! ankara.scl +! +Ankara Turkish State Radio Tanbur Frets + 34 +! + 1053/1000 + 533/500 + 1079/1000 + 273/250 + 111/100 + 281/250 + 589/500 + 239/200 + 1211/1000 + 123/100 + 156/125 + 158/125 + 1333/1000 + 677/500 + 1373/1000 + 1393/1000 + 7/5 + 1421/1000 + 721/500 + 3/2 + 317/200 + 201/125 + 407/250 + 1653/1000 + 167/100 + 211/125 + 1777/1000 + 1801/1000 + 1827/1000 + 1853/1000 + 47/25 + 951/500 + 1931/1000 + 2/1 diff --git a/scales/appunn.scl b/scales/appunn.scl new file mode 100644 index 0000000..c02ad7e --- /dev/null +++ b/scales/appunn.scl @@ -0,0 +1,41 @@ +! appunn.scl +! +Probable tuning of A. Appunn's 36-tone harmonium w. 3 manuals 80/81 apart (1887) + 36 +! + 25/24 + 135/128 + 2187/2048 + 800/729 + 10/9 + 9/8 + 204800/177147 + 2560/2187 + 32/27 + 100/81 + 5/4 + 81/64 + 25600/19683 + 320/243 + 4/3 + 25/18 + 45/32 + 729/512 + 3200/2187 + 40/27 + 3/2 + 25/16 + 405/256 + 6561/4096 + 400/243 + 5/3 + 27/16 + 102400/59049 + 1280/729 + 16/9 + 50/27 + 15/8 + 243/128 + 12800/6561 + 160/81 + 2/1 diff --git a/scales/arabic_bastanikar_on_b.scl b/scales/arabic_bastanikar_on_b.scl new file mode 100644 index 0000000..dcb4ffc --- /dev/null +++ b/scales/arabic_bastanikar_on_b.scl @@ -0,0 +1,17 @@ +! arabic_bastanikar_on_b.scl +! +Arabic Bastanikar with perde iraq on B by Dr. Ozan Yarman + 12 +! + 825/784 + 55/49 + 40/33 + 49/40 + 147/110 + 45/32 + 3/2 + 165/98 + 19/11 + 25/14 + 147/80 + 441/220 diff --git a/scales/arabic_bayati_and_bayati-shuri_on_d.scl b/scales/arabic_bayati_and_bayati-shuri_on_d.scl new file mode 100644 index 0000000..85b7b9e --- /dev/null +++ b/scales/arabic_bayati_and_bayati-shuri_on_d.scl @@ -0,0 +1,16 @@ +! arabic_bayati_and_bayati-shuri_on_d.scl +! +Arabic Bayati and Bayati-Shuri (Karjighar) with perde dugah on D by Dr. Oz. + 11 +! + 55/49 + 11/9 + 49/40 + 147/110 + 77/48 + 3/2 + 25/14 + 165/98 + 11/6 + 90/49 + 441/220 diff --git a/scales/arabic_bayati_and_ushshaq-misri_on_d.scl b/scales/arabic_bayati_and_ushshaq-misri_on_d.scl new file mode 100644 index 0000000..b9f11d9 --- /dev/null +++ b/scales/arabic_bayati_and_ushshaq-misri_on_d.scl @@ -0,0 +1,16 @@ +! arabic_bayati_and_ushshaq-misri_on_d.scl +! +Arabic Bayati and Ushshaq Misri with perde dugah on D by Dr. Oz. + 11 +! + 11/9 + 55/49 + 49/40 + 63/50 + 147/110 + 3/2 + 25/14 + 165/98 + 11/6 + 90/49 + 441/220 diff --git a/scales/arabic_huzam_on_e.scl b/scales/arabic_huzam_on_e.scl new file mode 100644 index 0000000..fed1dd9 --- /dev/null +++ b/scales/arabic_huzam_on_e.scl @@ -0,0 +1,17 @@ +! arabic_huzam_on_e.scl +! +Arabic Huzam with perde segah on E by Dr. Oz. + 12 +! + 63/55 + 55/49 + 25/21 + 49/40 + 147/110 + 25/18 + 3/2 + 49/30 + 165/98 + 98/55 + 121/64 + 441/220 diff --git a/scales/arabic_rast_on_c.scl b/scales/arabic_rast_on_c.scl new file mode 100644 index 0000000..bae7278 --- /dev/null +++ b/scales/arabic_rast_on_c.scl @@ -0,0 +1,13 @@ +! arabic_rast_on_c.scl +! +Arabic Rast with perde rast on C by Dr. Ozan Yarman + 8 +! + 55/49 + 27/22 + 147/110 + 3/2 + 165/98 + 25/14 + 81/44 + 441/220 diff --git a/scales/arabic_saba-zamzama_on_d.scl b/scales/arabic_saba-zamzama_on_d.scl new file mode 100644 index 0000000..db1637e --- /dev/null +++ b/scales/arabic_saba-zamzama_on_d.scl @@ -0,0 +1,16 @@ +! arabic_saba-zamzama_on_d.scl +! +Arabic Saba-Zamzama with perde dugah on D by Dr. Oz. + 11 +! + 825/784 + 55/49 + 40/33 + 63/50 + 147/110 + 45/32 + 3/2 + 165/98 + 25/14 + 147/80 + 441/220 diff --git a/scales/arabic_saba_on_d.scl b/scales/arabic_saba_on_d.scl new file mode 100644 index 0000000..d2ad15f --- /dev/null +++ b/scales/arabic_saba_on_d.scl @@ -0,0 +1,16 @@ +! arabic_saba_on_d.scl +! +Arabic Saba with perde dugah on D by Dr. Oz. + 11 +! + 825/784 + 55/49 + 49/40 + 63/50 + 147/110 + 45/32 + 3/2 + 165/98 + 25/14 + 147/80 + 441/220 diff --git a/scales/arabic_segah-mustaar_on_e.scl b/scales/arabic_segah-mustaar_on_e.scl new file mode 100644 index 0000000..1751b05 --- /dev/null +++ b/scales/arabic_segah-mustaar_on_e.scl @@ -0,0 +1,17 @@ +! arabic_segah-mustaar_on_e.scl +! +Arabic Segah and Mustaar with perde segah on E by Dr. Oz. + 12 +! + 63/55 + 55/49 + 25/21 + 49/40 + 147/110 + 25/18 + 3/2 + 49/30 + 165/98 + 98/55 + 147/80 + 441/220 diff --git a/scales/arabic_zanjaran_on_c.scl b/scales/arabic_zanjaran_on_c.scl new file mode 100644 index 0000000..cae0b1c --- /dev/null +++ b/scales/arabic_zanjaran_on_c.scl @@ -0,0 +1,12 @@ +! arabic_zanjaran_on_c.scl +! +Arabic Zanjaran with perde rast on C by Dr. Oz. + 7 +! + 27/25 + 63/50 + 147/110 + 3/2 + 165/98 + 25/14 + 441/220 diff --git a/scales/arch_chrom.scl b/scales/arch_chrom.scl new file mode 100644 index 0000000..f81e757 --- /dev/null +++ b/scales/arch_chrom.scl @@ -0,0 +1,12 @@ +! arch_chrom.scl +! +Archytas' Chromatic + 7 +! + 28/27 + 9/8 + 4/3 + 3/2 + 14/9 + 27/16 + 2/1 diff --git a/scales/arch_chromc2.scl b/scales/arch_chromc2.scl new file mode 100644 index 0000000..2a62f86 --- /dev/null +++ b/scales/arch_chromc2.scl @@ -0,0 +1,19 @@ +! ARCH_CHROMc2.scl +! +Product set of 2 of Archytas' Chromatic + 14 +! + 28/27 + 9/8 + 7/6 + 81/64 + 21/16 + 4/3 + 112/81 + 3/2 + 14/9 + 392/243 + 27/16 + 7/4 + 243/128 + 2/1 diff --git a/scales/arch_dor.scl b/scales/arch_dor.scl new file mode 100644 index 0000000..32914e7 --- /dev/null +++ b/scales/arch_dor.scl @@ -0,0 +1,13 @@ +! arch_dor.scl +! +Dorian mode of Archytas' Chromatic with added 16/9 + 8 +! + 28/27 + 9/8 + 4/3 + 3/2 + 14/9 + 16/9 + 27/16 + 2/1 diff --git a/scales/arch_enh.scl b/scales/arch_enh.scl new file mode 100644 index 0000000..ee52186 --- /dev/null +++ b/scales/arch_enh.scl @@ -0,0 +1,12 @@ +! arch_enh.scl +! +Archytas' Enharmonic + 7 +! + 28/27 + 16/15 + 4/3 + 3/2 + 14/9 + 8/5 + 2/1 diff --git a/scales/arch_enh2.scl b/scales/arch_enh2.scl new file mode 100644 index 0000000..c7e01db --- /dev/null +++ b/scales/arch_enh2.scl @@ -0,0 +1,13 @@ +! arch_enh2.scl +! +Archytas' Enharmonic with added 16/9 + 8 +! + 28/27 + 16/15 + 4/3 + 3/2 + 14/9 + 16/9 + 8/5 + 2/1 diff --git a/scales/arch_enh3.scl b/scales/arch_enh3.scl new file mode 100644 index 0000000..d116f43 --- /dev/null +++ b/scales/arch_enh3.scl @@ -0,0 +1,12 @@ +! arch_enh3.scl +! +Complex 9 of p. 113 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 9/7 + 4/3 + 48/35 + 12/7 + 2/1 diff --git a/scales/arch_enhp.scl b/scales/arch_enhp.scl new file mode 100644 index 0000000..44d3150 --- /dev/null +++ b/scales/arch_enhp.scl @@ -0,0 +1,12 @@ +! arch_enhp.scl +! +Permutation of Archytas' Enharmonic with 36/35 first + 7 +! + 36/35 + 16/15 + 4/3 + 3/2 + 54/35 + 8/5 + 2/1 diff --git a/scales/arch_enht.scl b/scales/arch_enht.scl new file mode 100644 index 0000000..a227ec5 --- /dev/null +++ b/scales/arch_enht.scl @@ -0,0 +1,12 @@ +! arch_enht.scl +! +Complex 6 of p. 113 based on Archytas's Enharmonic + 7 +! + 36/35 + 28/27 + 16/15 + 9/7 + 4/3 + 27/14 + 2/1 diff --git a/scales/arch_enht2.scl b/scales/arch_enht2.scl new file mode 100644 index 0000000..1f3c5da --- /dev/null +++ b/scales/arch_enht2.scl @@ -0,0 +1,12 @@ +! ARCH_ENHt2.scl +! +Complex 5 of p. 113 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 5/4 + 4/3 + 15/8 + 35/18 + 2/1 diff --git a/scales/arch_enht3.scl b/scales/arch_enht3.scl new file mode 100644 index 0000000..43e8eac --- /dev/null +++ b/scales/arch_enht3.scl @@ -0,0 +1,12 @@ +! ARCH_ENHT3.scl +! +Complex 1 of p. 113 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 784/729 + 448/405 + 4/3 + 112/81 + 2/1 diff --git a/scales/arch_enht4.scl b/scales/arch_enht4.scl new file mode 100644 index 0000000..bfbf21c --- /dev/null +++ b/scales/arch_enht4.scl @@ -0,0 +1,12 @@ +! arch_enht4.scl +! +Complex 8 of p. 113 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 5/4 + 35/27 + 4/3 + 5/3 + 2/1 diff --git a/scales/arch_enht5.scl b/scales/arch_enht5.scl new file mode 100644 index 0000000..2f6a322 --- /dev/null +++ b/scales/arch_enht5.scl @@ -0,0 +1,12 @@ +! ARCH_ENHT5.scl +! +Complex 10 of p. 113 based on Archytas's Enharmonic + 7 +! + 245/243 + 28/27 + 16/15 + 35/27 + 4/3 + 35/18 + 2/1 diff --git a/scales/arch_enht6.scl b/scales/arch_enht6.scl new file mode 100644 index 0000000..97d9483 --- /dev/null +++ b/scales/arch_enht6.scl @@ -0,0 +1,12 @@ +! arch_enht6.scl +! +Complex 2 of p. 113 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 448/405 + 256/225 + 4/3 + 64/45 + 2/1 diff --git a/scales/arch_enht7.scl b/scales/arch_enht7.scl new file mode 100644 index 0000000..65d21e1 --- /dev/null +++ b/scales/arch_enht7.scl @@ -0,0 +1,12 @@ +! arch_enht7.scl +! +Complex 11 of p. 113 based on Archytas's Enharmonic + 7 +! + 36/35 + 28/27 + 16/15 + 192/175 + 4/3 + 48/35 + 2/1 diff --git a/scales/arch_mult.scl b/scales/arch_mult.scl new file mode 100644 index 0000000..a774b25 --- /dev/null +++ b/scales/arch_mult.scl @@ -0,0 +1,17 @@ +! arch_mult.scl +! +Multiple Archytas + 12 +! + 28/27 + 16/15 + 5/4 + 9/7 + 4/3 + 112/81 + 3/2 + 14/9 + 8/5 + 15/8 + 27/14 + 2/1 diff --git a/scales/arch_ptol.scl b/scales/arch_ptol.scl new file mode 100644 index 0000000..461e9be --- /dev/null +++ b/scales/arch_ptol.scl @@ -0,0 +1,17 @@ +! arch_ptol.scl +! +Archytas/Ptolemy Hybrid 1 + 12 +! + 28/27 + 16/15 + 10/9 + 32/27 + 4/3 + 112/81 + 3/2 + 14/9 + 8/5 + 5/3 + 16/9 + 2/1 diff --git a/scales/arch_ptol2.scl b/scales/arch_ptol2.scl new file mode 100644 index 0000000..e83561e --- /dev/null +++ b/scales/arch_ptol2.scl @@ -0,0 +1,17 @@ +! arch_ptol2.scl +! +Archytas/Ptolemy Hybrid 2 + 12 +! + 28/27 + 16/15 + 9/8 + 6/5 + 4/3 + 112/81 + 3/2 + 14/9 + 8/5 + 27/16 + 9/5 + 2/1 diff --git a/scales/arch_sept.scl b/scales/arch_sept.scl new file mode 100644 index 0000000..c787d97 --- /dev/null +++ b/scales/arch_sept.scl @@ -0,0 +1,17 @@ +! arch_sept.scl +! +Archytas Septimal + 12 +! + 28/27 + 16/15 + 9/8 + 32/27 + 4/3 + 112/81 + 3/2 + 14/9 + 8/5 + 27/16 + 16/9 + 2/1 diff --git a/scales/archytas12.scl b/scales/archytas12.scl new file mode 100644 index 0000000..e837c9a --- /dev/null +++ b/scales/archytas12.scl @@ -0,0 +1,33 @@ +! archytas12.scl +Archytas[12] (64/63) hobbit, 9-limit minimax +12 +! +98.09924 +217.54205 +315.64129 +393.12974 +491.22898 +610.67178 +708.77102 +806.87026 +926.31307 +982.45795 +1101.90076 +2/1 +! +! ! prearchytas12.scl +! Archytas[12] transversal = syndia2 +! 12 +! ! +! 16/15 +! 9/8 +! 6/5 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 27/16 +! 16/9 +! 15/8 +! 2/1 diff --git a/scales/archytas12sync.scl b/scales/archytas12sync.scl new file mode 100644 index 0000000..cecf358 --- /dev/null +++ b/scales/archytas12sync.scl @@ -0,0 +1,34 @@ +! archytas12sync.scl +Archytas[12] (64/63) hobbit, sync beating +! 3+x, 5+x, 7+x, x smaller root of 2x^3 + 19x^2 + 60x - 1 +12 +! +96.45889 +222.99262 +319.45150 +392.04481 +488.50369 +615.03742 +711.49631 +807.95519 +934.48892 +977.00738 +1103.54111 +2/1 +! +! ! prearchytas12.scl +! Archytas[12] transversal = syndia2 +! 12 +! ! +! 16/15 +! 9/8 +! 6/5 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 27/16 +! 16/9 +! 15/8 +! 2/1 diff --git a/scales/archytas7.scl b/scales/archytas7.scl new file mode 100644 index 0000000..a99def6 --- /dev/null +++ b/scales/archytas7.scl @@ -0,0 +1,21 @@ +! archytas7.scl +Archytas (64/63) hobbit in POTE tuning +7 +! +218.64253 +393.37465 +490.67874 +709.32126 +806.62535 +981.35747 +2/1 +! +!! prearchytas7.scl +! Archytas[7] 5-limit transversal = hexany21a ! 7 !! +! 9/8 +! 5/4 +! 4/3 +! 3/2 +! 8/5 +! 16/9 +! 2/1 diff --git a/scales/ares12.scl b/scales/ares12.scl new file mode 100644 index 0000000..a60539b --- /dev/null +++ b/scales/ares12.scl @@ -0,0 +1,33 @@ +! ares12.scl +Ares[12] (64/63&100/99) hobbit, POTE tuning +12 +! +98.86242 +172.07703 +318.23612 +391.45073 +490.31315 +563.52776 +709.68685 +808.54927 +881.76388 +1027.92297 +1101.13758 +2/1 +! +! preares12.scl +! Ares[12] 5-limit transversal = ariel2.scl +! 12 +! +! 16/15 +! 10/9 +! 6/5 +! 5/4 +! 4/3 +! 25/18 +! 3/2 +! 8/5 +! 5/3 +! 9/5 +! 15/8 +! 2/1 diff --git a/scales/ares12opt.scl b/scales/ares12opt.scl new file mode 100644 index 0000000..2641b8d --- /dev/null +++ b/scales/ares12opt.scl @@ -0,0 +1,16 @@ +! ares12opt.scl +Lesfip scale derived from Ares[12], 13 cents, 11-limit +12 +! +98.47604 +165.71169 +321.40156 +392.10465 +485.69654 +551.05641 +711.71088 +809.46455 +871.65772 +1030.05511 +1099.72190 +2/1 diff --git a/scales/ariel1.scl b/scales/ariel1.scl new file mode 100644 index 0000000..97e2fe8 --- /dev/null +++ b/scales/ariel1.scl @@ -0,0 +1,17 @@ +! ariel1.scl +! +Ariel 1 + 12 +! + 27/25 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/ariel2.scl b/scales/ariel2.scl new file mode 100644 index 0000000..2854a67 --- /dev/null +++ b/scales/ariel2.scl @@ -0,0 +1,17 @@ +! ariel2.scl +! +Ariel 2 + 12 +! + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/ariel3.scl b/scales/ariel3.scl new file mode 100644 index 0000000..eb16582 --- /dev/null +++ b/scales/ariel3.scl @@ -0,0 +1,17 @@ +! ariel3.scl +! +Ariel's 12-tone JI scale + 12 +! + 16/15 + 10/9 + 32/27 + 100/81 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 16/9 + 50/27 + 2/1 diff --git a/scales/ariel_19.scl b/scales/ariel_19.scl new file mode 100644 index 0000000..a8ff882 --- /dev/null +++ b/scales/ariel_19.scl @@ -0,0 +1,24 @@ +! ariel_19.scl +! +Ariel's 19-tone scale + 19 +! + 25/24 + 16/15 + 10/9 + 125/108 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 216/125 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/ariel_31.scl b/scales/ariel_31.scl new file mode 100644 index 0000000..99fde27 --- /dev/null +++ b/scales/ariel_31.scl @@ -0,0 +1,36 @@ +! ariel_31.scl +! +Ariel's 31-tone system + 31 +! + 128/125 + 25/24 + 16/15 + 625/576 + 9/8 + 144/125 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 36/25 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 1024/625 + 5/3 + 128/75 + 125/72 + 16/9 + 1152/625 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/arist_archenh.scl b/scales/arist_archenh.scl new file mode 100644 index 0000000..797f271 --- /dev/null +++ b/scales/arist_archenh.scl @@ -0,0 +1,12 @@ +! arist_archenh.scl +! +PsAristo Arch. Enharmonic, 4 + 3 + 23 parts, similar to Archytas' enharmonic + 7 +! + 66.66667 + 116.66667 + 500.00000 + 700.00000 + 766.66667 + 816.66667 + 2/1 diff --git a/scales/arist_chrom.scl b/scales/arist_chrom.scl new file mode 100644 index 0000000..82fa23f --- /dev/null +++ b/scales/arist_chrom.scl @@ -0,0 +1,12 @@ +! arist_chrom.scl +! +Dorian, Neo-Chromatic,6+18+6 parts = Athanasopoulos' Byzant.liturg. 2nd chromatic + 7 +! + 100.00000 + 400.00000 + 500.00000 + 700.00000 + 800.00000 + 1100.00000 + 2/1 diff --git a/scales/arist_chrom2.scl b/scales/arist_chrom2.scl new file mode 100644 index 0000000..903ee3d --- /dev/null +++ b/scales/arist_chrom2.scl @@ -0,0 +1,12 @@ +! arist_chrom2.scl +! +Dorian Mode, a 1:2 Chromatic, 8 + 18 + 4 parts + 7 +! + 133.33333 + 433.33333 + 500.00000 + 700.00000 + 833.33333 + 1133.33333 + 2/1 diff --git a/scales/arist_chrom3.scl b/scales/arist_chrom3.scl new file mode 100644 index 0000000..4a8464c --- /dev/null +++ b/scales/arist_chrom3.scl @@ -0,0 +1,12 @@ +! arist_chrom3.scl +! +PsAristo 3 Chromatic, 7 + 7 + 16 parts + 7 +! + 445/416 + 230/201 + 295/221 + 442/295 + 928/579 + 1159/676 + 2/1 diff --git a/scales/arist_chrom4.scl b/scales/arist_chrom4.scl new file mode 100644 index 0000000..1bfae57 --- /dev/null +++ b/scales/arist_chrom4.scl @@ -0,0 +1,12 @@ +! arist_chrom4.scl +! +PsAristo Chromatic, 5.5 + 5.5 + 19 parts + 7 +! + 91.66667 + 183.33333 + 500.00000 + 700.00000 + 791.66667 + 883.33333 + 2/1 diff --git a/scales/arist_chromenh.scl b/scales/arist_chromenh.scl new file mode 100644 index 0000000..72ba8a0 --- /dev/null +++ b/scales/arist_chromenh.scl @@ -0,0 +1,12 @@ +! arist_chromenh.scl +! +Aristoxenos' Chromatic/Enharmonic, 3 + 9 + 18 parts + 7 +! + 50.00000 + 200.00000 + 500.00000 + 700.00000 + 750.00000 + 900.00000 + 2/1 diff --git a/scales/arist_chrominv.scl b/scales/arist_chrominv.scl new file mode 100644 index 0000000..9fabb53 --- /dev/null +++ b/scales/arist_chrominv.scl @@ -0,0 +1,12 @@ +! ARIST_CHROMINV.scl +! +Aristoxenos' Inverted Chromatic, Dorian mode, 18 + 6 + 6 parts + 7 +! + 300.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 1000.000 cents + 1100.000 cents + 2/1 diff --git a/scales/arist_chromrej.scl b/scales/arist_chromrej.scl new file mode 100644 index 0000000..1067d8d --- /dev/null +++ b/scales/arist_chromrej.scl @@ -0,0 +1,12 @@ +! arist_chromrej.scl +! +Aristoxenos Rejected Chromatic, 6 + 3 + 21 parts + 7 +! + 100.000 cents + 150.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 850.000 cents + 2/1 diff --git a/scales/arist_chromunm.scl b/scales/arist_chromunm.scl new file mode 100644 index 0000000..5d2138e --- /dev/null +++ b/scales/arist_chromunm.scl @@ -0,0 +1,12 @@ +! arist_chromunm.scl +! +Unmelodic Chromatic, genus of Aristoxenos, Dorian Mode, 4.5 + 3.5 + 22 parts + 7 +! + 75.00000 + 133.33333 + 500.00000 + 700.00000 + 775.00000 + 833.33333 + 2/1 diff --git a/scales/arist_diat.scl b/scales/arist_diat.scl new file mode 100644 index 0000000..de5f0dc --- /dev/null +++ b/scales/arist_diat.scl @@ -0,0 +1,12 @@ +! arist_diat.scl +! +Phrygian octave species on E, 12 + 6 + 12 parts + 7 +! + 200.00000 + 300.00000 + 500.00000 + 700.00000 + 900.00000 + 1000.00000 + 2/1 diff --git a/scales/arist_diat2.scl b/scales/arist_diat2.scl new file mode 100644 index 0000000..707ed73 --- /dev/null +++ b/scales/arist_diat2.scl @@ -0,0 +1,12 @@ +! arist_diat2.scl +! +PsAristo 2 Diatonic, 7 + 11 + 12 parts + 7 +! + 116.66667 + 300.00000 + 500.00000 + 700.00000 + 816.66667 + 1000.00000 + 2/1 diff --git a/scales/arist_diat3.scl b/scales/arist_diat3.scl new file mode 100644 index 0000000..6534992 --- /dev/null +++ b/scales/arist_diat3.scl @@ -0,0 +1,12 @@ +! arist_diat3.scl +! +PsAristo Diat 3, 9.5 + 9.5 + 11 parts + 7 +! + 158.33333 + 316.66667 + 500.00000 + 700.00000 + 858.33333 + 1016.66667 + 2/1 diff --git a/scales/arist_diat4.scl b/scales/arist_diat4.scl new file mode 100644 index 0000000..5163a16 --- /dev/null +++ b/scales/arist_diat4.scl @@ -0,0 +1,12 @@ +! arist_diat4.scl +! +PsAristo Diatonic, 8 + 8 + 14 parts + 7 +! + 133.33333 + 266.66667 + 500.00000 + 700.00000 + 833.33333 + 966.66667 + 2/1 diff --git a/scales/arist_diatdor.scl b/scales/arist_diatdor.scl new file mode 100644 index 0000000..f3edbb8 --- /dev/null +++ b/scales/arist_diatdor.scl @@ -0,0 +1,12 @@ +! arist_diatdor.scl +! +PsAristo Redup. Diatonic, 14 + 2 + 14 parts + 7 +! + 233.33333 + 266.66667 + 500.00000 + 700.00000 + 933.33333 + 966.66667 + 2/1 diff --git a/scales/arist_diatinv.scl b/scales/arist_diatinv.scl new file mode 100644 index 0000000..e8ef2a5 --- /dev/null +++ b/scales/arist_diatinv.scl @@ -0,0 +1,12 @@ +! arist_diatinv.scl +! +Lydian octave species on E, major mode, 12 + 12 + 6 parts + 7 +! + 200.000 + 400.000 + 500.000 + 700.000 + 900.000 + 1100.000 + 2/1 diff --git a/scales/arist_diatred.scl b/scales/arist_diatred.scl new file mode 100644 index 0000000..2714f36 --- /dev/null +++ b/scales/arist_diatred.scl @@ -0,0 +1,12 @@ +! arist_diatred.scl +! +Aristo Redup. Diatonic, Dorian Mode, 14 + 14 + 2 parts + 7 +! + 233.33333 + 466.66667 + 500.00000 + 700.00000 + 933.33333 + 1166.66667 + 2/1 diff --git a/scales/arist_diatred2.scl b/scales/arist_diatred2.scl new file mode 100644 index 0000000..c163d95 --- /dev/null +++ b/scales/arist_diatred2.scl @@ -0,0 +1,12 @@ +! arist_diatred2.scl +! +PsAristo 2 Redup. Diatonic 2, 4 + 13 + 13 parts + 7 +! + 66.66667 + 283.33333 + 500.00000 + 700.00000 + 766.66667 + 983.33333 + 2/1 diff --git a/scales/arist_diatred3.scl b/scales/arist_diatred3.scl new file mode 100644 index 0000000..01a6c34 --- /dev/null +++ b/scales/arist_diatred3.scl @@ -0,0 +1,12 @@ +! arist_diatred3.scl +! +PsAristo 3 Redup. Diatonic, 8 + 11 + 11 parts + 7 +! + 133.33333 + 316.66667 + 500.00000 + 700.00000 + 833.33333 + 1016.66667 + 2/1 diff --git a/scales/arist_enh.scl b/scales/arist_enh.scl new file mode 100644 index 0000000..b8f5da0 --- /dev/null +++ b/scales/arist_enh.scl @@ -0,0 +1,12 @@ +! arist_enh.scl +! +Aristoxenos' Enharmonion, Dorian mode + 7 +! + 50.00000 + 100.00000 + 500.00000 + 700.00000 + 750.00000 + 800.00000 + 2/1 diff --git a/scales/arist_enh2.scl b/scales/arist_enh2.scl new file mode 100644 index 0000000..30a410a --- /dev/null +++ b/scales/arist_enh2.scl @@ -0,0 +1,12 @@ +! arist_enh2.scl +! +PsAristo 2 Enharmonic, 3.5 + 3.5 + 23 parts + 7 +! + 58.33300 + 116.66700 + 500.00000 + 700.00000 + 758.33300 + 816.66700 + 2/1 diff --git a/scales/arist_enh3.scl b/scales/arist_enh3.scl new file mode 100644 index 0000000..d3a374a --- /dev/null +++ b/scales/arist_enh3.scl @@ -0,0 +1,12 @@ +! arist_enh3.scl +! +PsAristo Enharmonic, 2.5 + 2.5 + 25 parts + 7 +! + 41.66700 + 83.33300 + 500.00000 + 700.00000 + 741.66700 + 783.33300 + 2/1 diff --git a/scales/arist_hemchrom.scl b/scales/arist_hemchrom.scl new file mode 100644 index 0000000..9e6441a --- /dev/null +++ b/scales/arist_hemchrom.scl @@ -0,0 +1,12 @@ +! arist_hemchrom.scl +! +Aristoxenos's Chromatic Hemiolion, Dorian Mode + 7 +! + 75.00000 + 150.00000 + 500.00000 + 700.00000 + 775.00000 + 850.00000 + 2/1 diff --git a/scales/arist_hemchrom2.scl b/scales/arist_hemchrom2.scl new file mode 100644 index 0000000..8b17512 --- /dev/null +++ b/scales/arist_hemchrom2.scl @@ -0,0 +1,12 @@ +! arist_hemchrom2.scl +! +PsAristo C/H Chromatic, 4.5 + 7.5 + 18 parts + 7 +! + 75.00000 + 200.00000 + 500.00000 + 700.00000 + 775.00000 + 900.00000 + 2/1 diff --git a/scales/arist_hemchrom3.scl b/scales/arist_hemchrom3.scl new file mode 100644 index 0000000..0dbbe4c --- /dev/null +++ b/scales/arist_hemchrom3.scl @@ -0,0 +1,12 @@ +! ARIST_HEMCHROM3.scl +! +Dorian mode of Aristoxenos' Hemiolic Chromatic according to Ptolemy's interpret + 7 +! + 80/77 + 40/37 + 4/3 + 3/2 + 120/77 + 60/37 + 2/1 diff --git a/scales/arist_hypenh2.scl b/scales/arist_hypenh2.scl new file mode 100644 index 0000000..5a24285 --- /dev/null +++ b/scales/arist_hypenh2.scl @@ -0,0 +1,12 @@ +! arist_hypenh2.scl +! +PsAristo 2nd Hyperenharmonic, 37.5 + 37.5 + 425 cents + 7 +! + 37.500 cents + 75.000 cents + 500.000 cents + 700.000 cents + 737.500 cents + 775.000 cents + 2/1 diff --git a/scales/arist_hypenh3.scl b/scales/arist_hypenh3.scl new file mode 100644 index 0000000..a3464a9 --- /dev/null +++ b/scales/arist_hypenh3.scl @@ -0,0 +1,12 @@ +! arist_hypenh3.scl +! +PsAristo 3 Hyperenharmonic, 1.5 + 1.5 + 27 parts + 7 +! + 25.000 cents + 50.000 cents + 500.000 cents + 700.000 cents + 725.000 cents + 750.000 cents + 2/1 diff --git a/scales/arist_hypenh4.scl b/scales/arist_hypenh4.scl new file mode 100644 index 0000000..a20d96f --- /dev/null +++ b/scales/arist_hypenh4.scl @@ -0,0 +1,12 @@ +! arist_hypenh4.scl +! +PsAristo 4 Hyperenharmonic, 2 + 2 + 26 parts + 7 +! + 33.333 cents + 66.667 cents + 500.000 cents + 700.000 cents + 733.333 cents + 766.667 cents + 2/1 diff --git a/scales/arist_hypenh5.scl b/scales/arist_hypenh5.scl new file mode 100644 index 0000000..6b5a537 --- /dev/null +++ b/scales/arist_hypenh5.scl @@ -0,0 +1,12 @@ +! ARIST_HYPENH5.scl +! +PsAristo Hyperenharmonic, 23 + 23 + 454 cents + 7 +! + 23.000 cents + 46.000 cents + 500.000 cents + 700.000 cents + 723.000 cents + 746.000 cents + 2/1 diff --git a/scales/arist_intdiat.scl b/scales/arist_intdiat.scl new file mode 100644 index 0000000..1d7674f --- /dev/null +++ b/scales/arist_intdiat.scl @@ -0,0 +1,12 @@ +! arist_intdiat.scl +! +Dorian mode of Aristoxenos's Intense Diatonic according to Ptolemy + 7 +! + 20/19 + 20/17 + 4/3 + 3/2 + 30/19 + 30/17 + 2/1 diff --git a/scales/arist_penh2.scl b/scales/arist_penh2.scl new file mode 100644 index 0000000..f5c66b2 --- /dev/null +++ b/scales/arist_penh2.scl @@ -0,0 +1,12 @@ +! arist_penh2.scl +! +Permuted Aristoxenos's Enharmonion, 3 + 24 + 3 parts + 7 +! + 50.00000 + 450.00000 + 500.00000 + 700.00000 + 750.00000 + 1150.00000 + 2/1 diff --git a/scales/arist_penh3.scl b/scales/arist_penh3.scl new file mode 100644 index 0000000..066cf40 --- /dev/null +++ b/scales/arist_penh3.scl @@ -0,0 +1,12 @@ +! arist_penh3.scl +! +Permuted Aristoxenos's Enharmonion, 24 + 3 + 3 parts + 7 +! + 400.000 cents + 450.000 cents + 500.000 cents + 700.000 cents + 1100.000 cents + 1150.000 cents + 2/1 diff --git a/scales/arist_pschrom2.scl b/scales/arist_pschrom2.scl new file mode 100644 index 0000000..581fd71 --- /dev/null +++ b/scales/arist_pschrom2.scl @@ -0,0 +1,12 @@ +! arist_pschrom2.scl +! +PsAristo 2 Chromatic, 6.5 + 6.5 + 17 parts + 7 +! + 108.33333 + 216.66667 + 500.00000 + 700.00000 + 808.33333 + 916.66667 + 2/1 diff --git a/scales/arist_softchrom.scl b/scales/arist_softchrom.scl new file mode 100644 index 0000000..1e7fc63 --- /dev/null +++ b/scales/arist_softchrom.scl @@ -0,0 +1,12 @@ +! arist_softchrom.scl +! +Aristoxenos's Chromatic Malakon, Dorian Mode + 7 +! + 66.66667 + 133.33333 + 500.00000 + 700.00000 + 766.66667 + 833.33333 + 2/1 diff --git a/scales/arist_softchrom2.scl b/scales/arist_softchrom2.scl new file mode 100644 index 0000000..2f56501 --- /dev/null +++ b/scales/arist_softchrom2.scl @@ -0,0 +1,12 @@ +! ARIST_SOFTCHROM2.scl +! +Aristoxenos' Soft Chromatic, 6 + 16.5 + 9.5 parts + 7 +! + 100.000 cents + 375.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 1075.000 cents + 2/1 diff --git a/scales/arist_softchrom3.scl b/scales/arist_softchrom3.scl new file mode 100644 index 0000000..6580cbf --- /dev/null +++ b/scales/arist_softchrom3.scl @@ -0,0 +1,12 @@ +! arist_SOFTCHROM3.scl +! +Aristoxenos's Chromatic Malakon, 9.5 + 16.5 + 6 parts + 7 +! + 125.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 825.000 cents + 1100.000 cents + 2/1 diff --git a/scales/arist_softchrom4.scl b/scales/arist_softchrom4.scl new file mode 100644 index 0000000..7c08275 --- /dev/null +++ b/scales/arist_softchrom4.scl @@ -0,0 +1,12 @@ +! ARIST_SOFTCHROM4.scl +! +PsAristo S. Chromatic, 6 + 7.5 + 16.5 parts + 7 +! + 100.000 cents + 225.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 925.000 cents + 2/1 diff --git a/scales/arist_softchrom5.scl b/scales/arist_softchrom5.scl new file mode 100644 index 0000000..23c8163 --- /dev/null +++ b/scales/arist_softchrom5.scl @@ -0,0 +1,12 @@ +! ARIST_SOFTCHROM5.scl +! +Dorian mode of Aristoxenos' Soft Chromatic according to Ptolemy's interpretati + 7 +! + 30/29 + 15/14 + 4/3 + 3/2 + 45/29 + 45/28 + 2/1 diff --git a/scales/arist_softdiat.scl b/scales/arist_softdiat.scl new file mode 100644 index 0000000..898d196 --- /dev/null +++ b/scales/arist_softdiat.scl @@ -0,0 +1,12 @@ +! arist_softdiat.scl +! +Aristoxenos's Diatonon Malakon, Dorian Mode + 7 +! + 100.00000 + 250.00000 + 500.00000 + 700.00000 + 800.00000 + 950.00000 + 2/1 diff --git a/scales/arist_softdiat2.scl b/scales/arist_softdiat2.scl new file mode 100644 index 0000000..9ea28d0 --- /dev/null +++ b/scales/arist_softdiat2.scl @@ -0,0 +1,12 @@ +! arist_softdiat2.scl +! +Dorian Mode, 6 + 15 + 9 parts + 7 +! + 100.00000 + 350.00000 + 500.00000 + 700.00000 + 800.00000 + 1050.00000 + 2/1 diff --git a/scales/arist_softdiat3.scl b/scales/arist_softdiat3.scl new file mode 100644 index 0000000..8282d99 --- /dev/null +++ b/scales/arist_softdiat3.scl @@ -0,0 +1,12 @@ +! arist_softdiat3.scl +! +Dorian Mode, 9 + 15 + 6 parts + 7 +! + 150.00000 + 400.00000 + 500.00000 + 700.00000 + 850.00000 + 1000.00000 + 2/1 diff --git a/scales/arist_softdiat4.scl b/scales/arist_softdiat4.scl new file mode 100644 index 0000000..f3ce9c7 --- /dev/null +++ b/scales/arist_softdiat4.scl @@ -0,0 +1,12 @@ +! arist_softdiat4.scl +! +Dorian Mode, 9 + 6 + 15 parts + 7 +! + 150.00000 + 250.00000 + 500.00000 + 700.00000 + 850.00000 + 950.00000 + 2/1 diff --git a/scales/arist_softdiat5.scl b/scales/arist_softdiat5.scl new file mode 100644 index 0000000..29e9251 --- /dev/null +++ b/scales/arist_softdiat5.scl @@ -0,0 +1,12 @@ +! arist_softdiat5.scl +! +Dorian Mode, 15 + 6 + 9 parts + 7 +! + 250.00000 + 350.00000 + 500.00000 + 700.00000 + 950.00000 + 1050.00000 + 2/1 diff --git a/scales/arist_softdiat6.scl b/scales/arist_softdiat6.scl new file mode 100644 index 0000000..50bf216 --- /dev/null +++ b/scales/arist_softdiat6.scl @@ -0,0 +1,12 @@ +! arist_softdiat6.scl +! +Dorian Mode, 15 + 9 + 6 parts + 7 +! + 250.00000 + 400.00000 + 500.00000 + 700.00000 + 950.00000 + 1100.00000 + 2/1 diff --git a/scales/arist_softdiat7.scl b/scales/arist_softdiat7.scl new file mode 100644 index 0000000..fa0c826 --- /dev/null +++ b/scales/arist_softdiat7.scl @@ -0,0 +1,12 @@ +! ARIST_SOFTDIAT7.scl +! +Dorian mode of Aristoxenos's Soft Diatonic according to Ptolemy + 7 +! + 20/19 + 8/7 + 4/3 + 3/2 + 30/19 + 12/7 + 2/1 diff --git a/scales/arist_synchrom.scl b/scales/arist_synchrom.scl new file mode 100644 index 0000000..4046cc7 --- /dev/null +++ b/scales/arist_synchrom.scl @@ -0,0 +1,12 @@ +! arist_synchrom.scl +! +Aristoxenos's Chromatic Syntonon, Dorian Mode + 7 +! + 100.00000 + 200.00000 + 500.00000 + 700.00000 + 800.00000 + 900.00000 + 2/1 diff --git a/scales/arist_syndiat.scl b/scales/arist_syndiat.scl new file mode 100644 index 0000000..82aa18e --- /dev/null +++ b/scales/arist_syndiat.scl @@ -0,0 +1,12 @@ +! arist_syndiat.scl +! +Aristoxenos's Diatonon Syntonon, Dorian Mode + 7 +! + 100.00000 + 300.00000 + 500.00000 + 700.00000 + 800.00000 + 1000.00000 + 2/1 diff --git a/scales/arist_unchrom.scl b/scales/arist_unchrom.scl new file mode 100644 index 0000000..1a97a7c --- /dev/null +++ b/scales/arist_unchrom.scl @@ -0,0 +1,12 @@ +! arist_unchrom.scl +! +Aristoxenos's Unnamed Chromatic, Dorian Mode, 4 + 8 + 18 parts + 7 +! + 66.66667 + 200.00000 + 500.00000 + 700.00000 + 766.66667 + 900.00000 + 2/1 diff --git a/scales/arist_unchrom2.scl b/scales/arist_unchrom2.scl new file mode 100644 index 0000000..82cac31 --- /dev/null +++ b/scales/arist_unchrom2.scl @@ -0,0 +1,12 @@ +! arist_unchrom2.scl +! +Dorian Mode, a 1:2 Chromatic, 8 + 4 + 18 parts + 7 +! + 133.33333 + 200.00000 + 500.00000 + 700.00000 + 833.33333 + 900.00000 + 2/1 diff --git a/scales/arist_unchrom3.scl b/scales/arist_unchrom3.scl new file mode 100644 index 0000000..a5c33d6 --- /dev/null +++ b/scales/arist_unchrom3.scl @@ -0,0 +1,12 @@ +! arist_unchrom3.scl +! +Dorian Mode, a 1:2 Chromatic, 18 + 4 + 8 parts + 7 +! + 300.00000 + 366.66667 + 500.00000 + 700.00000 + 1000.00000 + 1066.66667 + 2/1 diff --git a/scales/arist_unchrom4.scl b/scales/arist_unchrom4.scl new file mode 100644 index 0000000..b745c2e --- /dev/null +++ b/scales/arist_unchrom4.scl @@ -0,0 +1,12 @@ +! arist_unchrom4.scl +! +Dorian Mode, a 1:2 Chromatic, 18 + 8 + 4 parts + 7 +! + 300.00000 + 433.33333 + 500.00000 + 700.00000 + 1000.00000 + 1133.33333 + 2/1 diff --git a/scales/arnautoff_21.scl b/scales/arnautoff_21.scl new file mode 100644 index 0000000..82b5982 --- /dev/null +++ b/scales/arnautoff_21.scl @@ -0,0 +1,26 @@ +! arnautoff_21.scl +! +Philip Arnautoff, transposed Archytas enharmonic (2005), 1/1 vol 12/1 + 21 +! + 28/27 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 112/81 + 45/32 + 64/45 + 81/56 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 16/9 + 15/8 + 27/14 + 2/1 diff --git a/scales/aron-neidhardt.scl b/scales/aron-neidhardt.scl new file mode 100644 index 0000000..2a57bea --- /dev/null +++ b/scales/aron-neidhardt.scl @@ -0,0 +1,17 @@ +! aron-neidhardt.scl +! +Aron-Neidhardt equal beating well temperament + 12 +! + 256/243 + 193.32804 + 32/27 + 386.35659 + 4/3 + 1024/729 + 697.46266 + 128/81 + 889.89223 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/art_nam.scl b/scales/art_nam.scl new file mode 100644 index 0000000..e007edb --- /dev/null +++ b/scales/art_nam.scl @@ -0,0 +1,14 @@ +! art_nam.scl +! +Artificial Nam System + 9 +! + 11/10 + 17/14 + 36/29 + 4/3 + 27/20 + 3/2 + 33/20 + 38/21 + 2/1 diff --git a/scales/artusi.scl b/scales/artusi.scl new file mode 100644 index 0000000..66c63d6 --- /dev/null +++ b/scales/artusi.scl @@ -0,0 +1,17 @@ +! artusi.scl +! +Clavichord tuning of Giovanni Maria Artusi (1603). 1/4-comma with mean semitones + 12 +! + 96.57800 + 193.15700 + 289.73500 + 5/4 + 503.42200 + 600.00000 + 696.57800 + 793.15700 + 889.73500 + 986.31400 + 1082.89200 + 2/1 diff --git a/scales/artusi2.scl b/scales/artusi2.scl new file mode 100644 index 0000000..eeb4ec4 --- /dev/null +++ b/scales/artusi2.scl @@ -0,0 +1,17 @@ +! artusi2.scl +! +Artusi's tuning no. 2. 1/6-comma meantone with mean semitones + 12 +! + 98.37050 + 196.74100 + 295.11150 + 393.48200 + 501.62900 + 600.00000 + 698.37100 + 796.74150 + 895.11200 + 993.48250 + 1091.85300 + 2/1 diff --git a/scales/artusi3.scl b/scales/artusi3.scl new file mode 100644 index 0000000..106231e --- /dev/null +++ b/scales/artusi3.scl @@ -0,0 +1,17 @@ +! artusi3.scl +! +Artusi's tuning no. 3 + 12 +! + 77.00770 + 10/9 + 298.00613 + 403.40214 + 508.79814 + 585.80585 + 691.20186 + 768.20956 + 873.60557 + 989.20799 + 1094.60399 + 2/1 diff --git a/scales/astro.scl b/scales/astro.scl new file mode 100644 index 0000000..f266653 --- /dev/null +++ b/scales/astro.scl @@ -0,0 +1,123 @@ +! astro.scl +! +Astro temperament, g=132.194511, 5-limit + 118 +! + 10.24940 + 20.49880 + 30.74820 + 39.94990 + 50.19930 + 60.44870 + 70.69811 + 80.94751 + 91.19691 + 101.44631 + 111.69571 + 121.94511 + 132.19451 + 142.44391 + 152.69331 + 162.94271 + 172.14441 + 182.39381 + 192.64322 + 202.89262 + 213.14202 + 223.39142 + 233.64082 + 243.89022 + 254.13962 + 264.38902 + 274.63842 + 284.88782 + 295.13722 + 304.33892 + 314.58833 + 324.83773 + 335.08713 + 345.33653 + 355.58593 + 365.83533 + 376.08473 + 386.33413 + 396.58353 + 406.83293 + 417.08233 + 427.33174 + 436.53344 + 446.78284 + 457.03224 + 467.28164 + 477.53104 + 487.78044 + 498.02984 + 508.27924 + 518.52864 + 528.77804 + 539.02744 + 549.27685 + 559.52625 + 568.72795 + 578.97735 + 589.22675 + 599.47615 + 609.72555 + 619.97495 + 630.22435 + 640.47375 + 650.72315 + 660.97256 + 671.22196 + 681.47136 + 691.72076 + 701.97016 + 711.17186 + 721.42126 + 731.67066 + 741.92006 + 752.16946 + 762.41886 + 772.66826 + 782.91767 + 793.16707 + 803.41647 + 813.66587 + 823.91527 + 834.16467 + 843.36637 + 853.61577 + 863.86517 + 874.11457 + 884.36397 + 894.61337 + 904.86278 + 915.11218 + 925.36158 + 935.61098 + 945.86038 + 956.10978 + 966.35918 + 975.56088 + 985.81028 + 996.05968 + 1006.30908 + 1016.55848 + 1026.80789 + 1037.05729 + 1047.30669 + 1057.55609 + 1067.80549 + 1078.05489 + 1088.30429 + 1098.55369 + 1107.75539 + 1118.00479 + 1128.25419 + 1138.50359 + 1148.75300 + 1159.00240 + 1169.25180 + 1179.50120 + 1189.75060 + 2/1 diff --git a/scales/athan_chrom.scl b/scales/athan_chrom.scl new file mode 100644 index 0000000..45bf902 --- /dev/null +++ b/scales/athan_chrom.scl @@ -0,0 +1,12 @@ +! athan_chrom.scl +! +Athanasopoulos's Byzantine Liturgical mode Chromatic + 7 +! + 150.00000 + 400.00000 + 500.00000 + 700.00000 + 850.00000 + 1100.00000 + 2/1 diff --git a/scales/atomschis.scl b/scales/atomschis.scl new file mode 100644 index 0000000..3e3dfff --- /dev/null +++ b/scales/atomschis.scl @@ -0,0 +1,16 @@ +! atomschis.scl +Atom Schisma Scale +12 +! +156348578434374084375/147573952589676412928 +134217728/119574225 +1307544150375/1099511627776 +18014398509481984/14297995284350625 +10935/8192 +1709671705179880612640625/1208925819614629174706176 +16384/10935 +14297995284350625/9007199254740992 +2199023255552/1307544150375 +119574225/67108864 +295147905179352825856/156348578434374084375 +2/1 diff --git a/scales/augdommean.scl b/scales/augdommean.scl new file mode 100644 index 0000000..f56ed86 --- /dev/null +++ b/scales/augdommean.scl @@ -0,0 +1,19 @@ +! augdommean.scl +! +August-dominant-meantone Fokker block +! august: -3 to 6; dominant: -6 to 5; meantone: -1 to 10 +! 28/27 in place of 21/20 in Centaur +12 +! +28/27 +9/8 +7/6 +5/4 +4/3 +7/5 +3/2 +14/9 +5/3 +7/4 +15/8 +2/1 diff --git a/scales/augene15br1.scl b/scales/augene15br1.scl new file mode 100644 index 0000000..fbb22d3 --- /dev/null +++ b/scales/augene15br1.scl @@ -0,0 +1,20 @@ +! augene15br1.scl +Augene[15] with a brat of 1 +15 +! +93.470871322074944904 +186.94174264414988983 +213.05825735585011027 +306.52912867792505515 +400.00000000000000000 +493.47087132207494484 +586.94174264414988984 +613.05825735585011039 +706.52912867792505511 +800.00000000000000000 +893.47087132207494492 +986.94174264414988972 +1013.0582573558501103 +1106.5291286779250552 +2/1 +! period=2^(1/3), generator=(2/5) 2^(1/3) + 1 diff --git a/scales/augteta.scl b/scales/augteta.scl new file mode 100644 index 0000000..8686bfb --- /dev/null +++ b/scales/augteta.scl @@ -0,0 +1,13 @@ +! augteta.scl +! +Linear Division of the 11/8, duplicated on the 16/11 + 8 +! + 44/41 + 22/19 + 44/35 + 11/8 + 16/11 + 64/41 + 32/19 + 64/35 diff --git a/scales/augteta2.scl b/scales/augteta2.scl new file mode 100644 index 0000000..1ce3b11 --- /dev/null +++ b/scales/augteta2.scl @@ -0,0 +1,13 @@ +! AUGTETA2.scl +! +Linear Division of the 7/5, duplicated on the 10/7 + 8 +! + 14/13 + 7/6 + 14/11 + 7/5 + 10/7 + 20/13 + 5/3 + 20/11 diff --git a/scales/augtetb.scl b/scales/augtetb.scl new file mode 100644 index 0000000..7765f79 --- /dev/null +++ b/scales/augtetb.scl @@ -0,0 +1,13 @@ +! augtetb.scl +! +Harmonic mean division of 11/8 + 8 +! + 88/85 + 44/41 + 22/19 + 11/8 + 16/11 + 96/85 + 64/41 + 32/19 diff --git a/scales/augtetc.scl b/scales/augtetc.scl new file mode 100644 index 0000000..f4d07f1 --- /dev/null +++ b/scales/augtetc.scl @@ -0,0 +1,13 @@ +! augtetc.scl +! +11/10 C.I. + 8 +! + 15/14 + 15/13 + 5/4 + 11/8 + 16/11 + 120/77 + 240/143 + 20/11 diff --git a/scales/augtetd.scl b/scales/augtetd.scl new file mode 100644 index 0000000..e4c82bc --- /dev/null +++ b/scales/augtetd.scl @@ -0,0 +1,13 @@ +! augtetd.scl +! +11/9 C.I. + 8 +! + 27/26 + 27/25 + 9/8 + 11/8 + 16/11 + 216/143 + 432/275 + 18/11 diff --git a/scales/augtete.scl b/scales/augtete.scl new file mode 100644 index 0000000..6598a42 --- /dev/null +++ b/scales/augtete.scl @@ -0,0 +1,13 @@ +! augtete.scl +! +5/4 C.I. + 8 +! + 33/32 + 33/31 + 11/10 + 11/8 + 16/11 + 3/2 + 48/31 + 8/5 diff --git a/scales/augtetf.scl b/scales/augtetf.scl new file mode 100644 index 0000000..f2099a9 --- /dev/null +++ b/scales/augtetf.scl @@ -0,0 +1,13 @@ +! augtetf.scl +! +5/4 C.I. again + 8 +! + 99/98 + 33/32 + 11/10 + 11/8 + 16/11 + 72/49 + 3/2 + 8/5 diff --git a/scales/augtetg.scl b/scales/augtetg.scl new file mode 100644 index 0000000..4eea2a4 --- /dev/null +++ b/scales/augtetg.scl @@ -0,0 +1,13 @@ +! augtetg.scl +! +9/8 C.I. + 8 +! + 33/31 + 33/29 + 11/9 + 11/8 + 16/11 + 48/31 + 48/29 + 16/9 diff --git a/scales/augteth.scl b/scales/augteth.scl new file mode 100644 index 0000000..cdf4629 --- /dev/null +++ b/scales/augteth.scl @@ -0,0 +1,13 @@ +! augteth.scl +! +9/8 C.I. A gapped version of this scale is called AugTetI + 8 +! + 33/31 + 11/10 + 11/9 + 11/8 + 16/11 + 48/31 + 8/5 + 16/9 diff --git a/scales/augtetj.scl b/scales/augtetj.scl new file mode 100644 index 0000000..43c5cb6 --- /dev/null +++ b/scales/augtetj.scl @@ -0,0 +1,11 @@ +! augtetj.scl +! +9/8 C.I. comprised of 11:10:9:8 subharmonic series on 1 and 8:9:10:11 on 16/11 + 6 +! + 11/10 + 11/9 + 11/8 + 16/11 + 18/11 + 20/11 diff --git a/scales/augtetk.scl b/scales/augtetk.scl new file mode 100644 index 0000000..b06016f --- /dev/null +++ b/scales/augtetk.scl @@ -0,0 +1,11 @@ +! augtetk.scl +! +9/8 C.I. This is the converse form of AugTetJ + 6 +! + 9/8 + 5/4 + 11/8 + 16/11 + 8/5 + 16/9 diff --git a/scales/augtetl.scl b/scales/augtetl.scl new file mode 100644 index 0000000..8e757ad --- /dev/null +++ b/scales/augtetl.scl @@ -0,0 +1,11 @@ +! augtetl.scl +! +9/8 C.I. This is the harmonic form of AugTetI + 6 +! + 9/8 + 5/4 + 11/8 + 16/11 + 18/11 + 20/11 diff --git a/scales/avg_bac.scl b/scales/avg_bac.scl new file mode 100644 index 0000000..c9bbf87 --- /dev/null +++ b/scales/avg_bac.scl @@ -0,0 +1,12 @@ +! avg_bac.scl +! +Average Bac System + 7 +! + 10/9 + 20/17 + 4/3 + 3/2 + 5/3 + 30/17 + 2/1 diff --git a/scales/avicenna.scl b/scales/avicenna.scl new file mode 100644 index 0000000..297c7e3 --- /dev/null +++ b/scales/avicenna.scl @@ -0,0 +1,12 @@ +! avicenna.scl +! +Soft diatonic of Avicenna (Ibn Sina) + 7 +! + 10/9 + 8/7 + 4/3 + 3/2 + 5/3 + 12/7 + 2/1 diff --git a/scales/avicenna_17.scl b/scales/avicenna_17.scl new file mode 100644 index 0000000..f377024 --- /dev/null +++ b/scales/avicenna_17.scl @@ -0,0 +1,22 @@ +! avicenna_17.scl +! +Tuning by Avicenna (Ibn Sina), Ahmed Mahmud Hifni, Cairo, 1977 + 17 +! + 273/256 + 13/12 + 9/8 + 32/27 + 39/32 + 81/64 + 4/3 + 91/64 + 13/9 + 3/2 + 128/81 + 13/8 + 27/16 + 16/9 + 91/48 + 52/27 + 2/1 diff --git a/scales/avicenna_19.scl b/scales/avicenna_19.scl new file mode 100644 index 0000000..7ccd805 --- /dev/null +++ b/scales/avicenna_19.scl @@ -0,0 +1,24 @@ +! avicenna_19.scl +! +Arabic scale by Ibn Sina + 19 +! + 256/243 + 1024/945 + 9/8 + 32/27 + 8192/6561 + 81/64 + 4/3 + 48/35 + 729/512 + 4096/2835 + 3/2 + 128/81 + 512/315 + 27/16 + 16/9 + 64/35 + 243/128 + 129140163/67108864 + 2/1 diff --git a/scales/avicenna_chrom.scl b/scales/avicenna_chrom.scl new file mode 100644 index 0000000..f00ca0f --- /dev/null +++ b/scales/avicenna_chrom.scl @@ -0,0 +1,12 @@ +! AVICENNA_chrom.scl +! +Dorian mode a chromatic genus of Avicenna + 7 +! + 36/35 + 8/7 + 4/3 + 3/2 + 54/35 + 12/7 + 2/1 diff --git a/scales/avicenna_chrom2.scl b/scales/avicenna_chrom2.scl new file mode 100644 index 0000000..d5f3de9 --- /dev/null +++ b/scales/avicenna_chrom2.scl @@ -0,0 +1,12 @@ +! avicenna_chrom2.scl +! +Dorian Mode, a 1:2 Chromatic, 4 + 18 + 8 parts + 7 +! + 66.66667 + 366.66667 + 500.00000 + 700.00000 + 766.66667 + 1066.66667 + 2/1 diff --git a/scales/avicenna_chrom3.scl b/scales/avicenna_chrom3.scl new file mode 100644 index 0000000..86dd72b --- /dev/null +++ b/scales/avicenna_chrom3.scl @@ -0,0 +1,12 @@ +! AVICENNA_CHROM3.scl +! +Avicenna's Chromatic permuted + 7 +! + 10/9 + 35/27 + 4/3 + 3/2 + 5/3 + 35/18 + 2/1 diff --git a/scales/avicenna_diat.scl b/scales/avicenna_diat.scl new file mode 100644 index 0000000..10a74fc --- /dev/null +++ b/scales/avicenna_diat.scl @@ -0,0 +1,12 @@ +! AVICENNA_diat.scl +! +Dorian mode a soft diatonic genus of Avicenna + 7 +! + 14/13 + 7/6 + 4/3 + 3/2 + 21/13 + 7/4 + 2/1 diff --git a/scales/avicenna_diff.scl b/scales/avicenna_diff.scl new file mode 100644 index 0000000..fd6fcce --- /dev/null +++ b/scales/avicenna_diff.scl @@ -0,0 +1,17 @@ +! avicenna_diff.scl +! +Difference tones of Avicenna's Soft diatonic reduced by 2/1 + 12 +! + 33/32 + 35/32 + 9/8 + 19/16 + 21/16 + 45/32 + 3/2 + 49/32 + 27/16 + 7/4 + 63/32 + 2/1 diff --git a/scales/avicenna_enh.scl b/scales/avicenna_enh.scl new file mode 100644 index 0000000..bda1e86 --- /dev/null +++ b/scales/avicenna_enh.scl @@ -0,0 +1,12 @@ +! AVICENNA_enh.scl +! +Dorian mode of Avicenna's (Ibn Sina) Enharmonic genus + 7 +! + 40/39 + 16/15 + 4/3 + 3/2 + 20/13 + 8/5 + 2/1 diff --git a/scales/awad.scl b/scales/awad.scl new file mode 100644 index 0000000..716f3bc --- /dev/null +++ b/scales/awad.scl @@ -0,0 +1,29 @@ +! awad.scl +! +d'Erlanger vol.5, p. 37, after Mans.ur 'Awad + 24 +! + 40/39 + 20/19 + 40/37 + 10/9 + 8/7 + 20/17 + 40/33 + 5/4 + 40/31 + 4/3 + 48/35 + 24/17 + 16/11 + 3/2 + 20/13 + 30/19 + 60/37 + 5/3 + 12/7 + 30/17 + 20/11 + 15/8 + 60/31 + 2/1 diff --git a/scales/awraamoff.scl b/scales/awraamoff.scl new file mode 100644 index 0000000..acfb089 --- /dev/null +++ b/scales/awraamoff.scl @@ -0,0 +1,17 @@ +! awraamoff.scl +! +Awraamoff Septimal Just (1920) + 12 +! + 9/8 + 8/7 + 6/5 + 5/4 + 21/16 + 4/3 + 3/2 + 8/5 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/ayers_19.scl b/scales/ayers_19.scl new file mode 100644 index 0000000..adf691e --- /dev/null +++ b/scales/ayers_19.scl @@ -0,0 +1,24 @@ +! ayers_19.scl +! +Lydia Ayers, NINETEEN, for 19 for the 90's CD. Repeats at 37/19 (or 2/1) + 19 +! + 37/36 + 37/35 + 37/34 + 37/33 + 37/32 + 37/31 + 37/30 + 37/29 + 37/28 + 37/27 + 37/26 + 37/25 + 37/24 + 37/23 + 37/22 + 37/21 + 37/20 + 37/19 + 2/1 diff --git a/scales/ayers_37.scl b/scales/ayers_37.scl new file mode 100644 index 0000000..a3590c4 --- /dev/null +++ b/scales/ayers_37.scl @@ -0,0 +1,41 @@ +! ayers_37.scl +! +Lydia Ayers, algorithmic composition, subharmonics 1-37 + 36 +! + 37/36 + 37/35 + 37/34 + 37/33 + 37/32 + 37/31 + 37/30 + 37/29 + 37/28 + 37/27 + 37/26 + 37/25 + 37/24 + 37/23 + 37/22 + 37/21 + 37/20 + 37/19 + 37/18 + 37/17 + 37/16 + 37/15 + 37/14 + 37/13 + 37/12 + 37/11 + 37/10 + 37/9 + 37/8 + 37/7 + 37/6 + 37/5 + 37/4 + 37/3 + 37/2 + 37/1 diff --git a/scales/ayers_me.scl b/scales/ayers_me.scl new file mode 100644 index 0000000..8d80937 --- /dev/null +++ b/scales/ayers_me.scl @@ -0,0 +1,14 @@ +! ayers_me.scl +! +Lydia Ayers, Merapi (1996), Slendro 0 2 4 5 7 9, Pelog 0 1 3 6 8 9 + 9 +! + 15/14 + 8/7 + 33/28 + 9/7 + 3/2 + 45/28 + 12/7 + 27/14 + 2/1 diff --git a/scales/b10_13.scl b/scales/b10_13.scl new file mode 100644 index 0000000..fd2e48a --- /dev/null +++ b/scales/b10_13.scl @@ -0,0 +1,15 @@ +! b10_13.scl +! +10-tET approximation with minimal order 13 beats + 10 +! + 14/13 + 8/7 + 16/13 + 4/3 + 17/12 + 3/2 + 13/8 + 7/4 + 13/7 + 2/1 diff --git a/scales/b12_17.scl b/scales/b12_17.scl new file mode 100644 index 0000000..c47f623 --- /dev/null +++ b/scales/b12_17.scl @@ -0,0 +1,17 @@ +! b12_17.scl +! +12-tET approximation with minimal order 17 beats + 12 +! + 18/17 + 9/8 + 19/16 + 5/4 + 4/3 + 17/12 + 3/2 + 27/17 + 5/3 + 16/9 + 17/9 + 2/1 diff --git a/scales/b14_19.scl b/scales/b14_19.scl new file mode 100644 index 0000000..f96644b --- /dev/null +++ b/scales/b14_19.scl @@ -0,0 +1,19 @@ +! b14_19.scl +! +14-tET approximation with minimal order 19 beats + 14 +! + 20/19 + 21/19 + 7/6 + 11/9 + 9/7 + 4/3 + 17/12 + 3/2 + 25/16 + 23/14 + 31/18 + 29/16 + 19/10 + 2/1 diff --git a/scales/b15_21.scl b/scales/b15_21.scl new file mode 100644 index 0000000..a5b4599 --- /dev/null +++ b/scales/b15_21.scl @@ -0,0 +1,20 @@ +! b15_21.scl +! +15-tET approximation with minimal order 21 beats + 15 +! + 22/21 + 11/10 + 23/20 + 6/5 + 5/4 + 4/3 + 29/21 + 13/9 + 3/2 + 27/17 + 5/3 + 7/4 + 31/17 + 21/11 + 2/1 diff --git a/scales/b8_11.scl b/scales/b8_11.scl new file mode 100644 index 0000000..01276e0 --- /dev/null +++ b/scales/b8_11.scl @@ -0,0 +1,13 @@ +! b8_11.scl +! +8-tET approximation with minimal order 11 beats + 8 +! + 12/11 + 6/5 + 13/10 + 7/5 + 17/11 + 5/3 + 11/6 + 2/1 diff --git a/scales/badings1.scl b/scales/badings1.scl new file mode 100644 index 0000000..7bf350e --- /dev/null +++ b/scales/badings1.scl @@ -0,0 +1,14 @@ +! badings1.scl +! +Henk Badings, harmonic scale, Lydomixolydisch + 9 +! + 9/8 + 5/4 + 11/8 + 3/2 + 13/8 + 7/4 + 2/1 + 9/4 + 5/2 diff --git a/scales/badings2.scl b/scales/badings2.scl new file mode 100644 index 0000000..63d23a3 --- /dev/null +++ b/scales/badings2.scl @@ -0,0 +1,14 @@ +! badings2.scl +! +Henk Badings, subharmonic scale, Dorophrygisch + 9 +! + 10/9 + 5/4 + 10/7 + 20/13 + 5/3 + 20/11 + 2/1 + 20/9 + 5/2 diff --git a/scales/bagpipe1.scl b/scales/bagpipe1.scl new file mode 100644 index 0000000..0c19fca --- /dev/null +++ b/scales/bagpipe1.scl @@ -0,0 +1,17 @@ +! bagpipe1.scl +! +Bulgarian bagpipe tuning + 12 +! + 66.00000 + 202.00000 + 316.00000 + 399.00000 + 509.00000 + 640.00000 + 706.00000 + 803.00000 + 910.00000 + 1011.00000 + 1092.00000 + 2/1 diff --git a/scales/bagpipe2.scl b/scales/bagpipe2.scl new file mode 100644 index 0000000..191fea5 --- /dev/null +++ b/scales/bagpipe2.scl @@ -0,0 +1,14 @@ +! bagpipe2.scl +! +Highland Bagpipe, from Acustica4: 231 (1954) J.M.A Lenihan and S. McNeill + 9 +! + 8/9 + 1/1 + 9/8 + 5/4 + 27/20 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/bagpipe3.scl b/scales/bagpipe3.scl new file mode 100644 index 0000000..fef34bd --- /dev/null +++ b/scales/bagpipe3.scl @@ -0,0 +1,14 @@ +! bagpipe3.scl +! +Highland Bagpipe, Allan Chatto, 1991. From Australian Pipe Band College + 9 +! + 9/10 + 1/1 + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/bagpipe4.scl b/scales/bagpipe4.scl new file mode 100644 index 0000000..1a7e2be --- /dev/null +++ b/scales/bagpipe4.scl @@ -0,0 +1,14 @@ +! bagpipe4.scl +! +Highland Bagpipe, Ewan Macpherson in 'NZ Pipeband', Winter 1998 + 9 +! + 7/8 + 1/1 + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 1190.00000 diff --git a/scales/bailey_well.scl b/scales/bailey_well.scl new file mode 100644 index 0000000..da2077b --- /dev/null +++ b/scales/bailey_well.scl @@ -0,0 +1,17 @@ +! bailey_well.scl +! +Paul Bailey's proportional beating modern temperament (1993) + 12 +! + 92.16501 + 195.19000 + 296.05501 + 391.68000 + 499.94501 + 590.17001 + 698.69500 + 794.06001 + 893.78500 + 997.95001 + 1093.67500 + 2/1 diff --git a/scales/bailey_well2.scl b/scales/bailey_well2.scl new file mode 100644 index 0000000..6bb4c1e --- /dev/null +++ b/scales/bailey_well2.scl @@ -0,0 +1,17 @@ +! bailey_well2.scl +! +Paul Bailey's modern well temperament (2002) + 12 +! + 92.51501 + 195.69000 + 296.45501 + 392.18000 + 500.44501 + 590.57001 + 699.99500 + 794.46001 + 894.28500 + 998.45001 + 1094.17500 + 2/1 diff --git a/scales/bailey_well3.scl b/scales/bailey_well3.scl new file mode 100644 index 0000000..68fb441 --- /dev/null +++ b/scales/bailey_well3.scl @@ -0,0 +1,17 @@ +! bailey_well3.scl +! +Paul Bailey's equal beating well temperament + 12 +! + 256/243 + 12224/10935 + 32/27 + 13696/10935 + 4/3 + 1024/729 + 16348/10935 + 128/81 + 18304/10935 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/balafon.scl b/scales/balafon.scl new file mode 100644 index 0000000..e63a238 --- /dev/null +++ b/scales/balafon.scl @@ -0,0 +1,12 @@ +! balafon.scl +! +Observed balafon tuning from Patna, Helmholtz/Ellis p. 518, nr.81 + 7 +! + 187.00000 + 356.00000 + 526.00000 + 672.00000 + 856.00000 + 985.00000 + 1222.00000 diff --git a/scales/balafon2.scl b/scales/balafon2.scl new file mode 100644 index 0000000..ff6e9b4 --- /dev/null +++ b/scales/balafon2.scl @@ -0,0 +1,12 @@ +! balafon2.scl +! +Observed balafon tuning from West-Africa, Helmholtz/Ellis p. 518, nr.86 + 7 +! + 152.00000 + 287.00000 + 533.00000 + 724.00000 + 890.00000 + 1039.00000 + 2/1 diff --git a/scales/balafon3.scl b/scales/balafon3.scl new file mode 100644 index 0000000..27a9569 --- /dev/null +++ b/scales/balafon3.scl @@ -0,0 +1,12 @@ +! balafon3.scl +! +Pitt-River's balafon tuning from West-Africa, Helmholtz/Ellis p. 518, nr.87 + 7 +! + 195.00000 + 289.00000 + 513.00000 + 686.00000 + 796.00000 + 1008.00000 + 1209.00000 diff --git a/scales/balafon4.scl b/scales/balafon4.scl new file mode 100644 index 0000000..1287f53 --- /dev/null +++ b/scales/balafon4.scl @@ -0,0 +1,12 @@ +! balafon4.scl +! +Mandinka balafon scale from Gambia + 7 +! + 151.00000 + 345.00000 + 526.00000 + 660.00000 + 861.00000 + 1025.00000 + 1141.00000 diff --git a/scales/balafon5.scl b/scales/balafon5.scl new file mode 100644 index 0000000..9450923 --- /dev/null +++ b/scales/balafon5.scl @@ -0,0 +1,12 @@ +! balafon5.scl +! +An observed balafon tuning from Singapore, Helmholtz/Ellis p. 518, nr.82 + 7 +! + 169.00000 + 350.00000 + 543.00000 + 709.00000 + 894.00000 + 1040.00000 + 1205.00000 diff --git a/scales/balafon6.scl b/scales/balafon6.scl new file mode 100644 index 0000000..f6021a0 --- /dev/null +++ b/scales/balafon6.scl @@ -0,0 +1,12 @@ +! balafon6.scl +! +Observed balafon tuning from Burma, Helmholtz/Ellis p. 518, nr.84 + 7 +! + 114.00000 + 350.00000 + 550.00000 + 687.00000 + 838.00000 + 1032.00000 + 1196.00000 diff --git a/scales/balafon7.scl b/scales/balafon7.scl new file mode 100644 index 0000000..da6072d --- /dev/null +++ b/scales/balafon7.scl @@ -0,0 +1,10 @@ +! balafon7.scl +! +Observed South Pacific pentatonic balafon tuning, Helmholtz/Ellis p. 518, nr.93 + 5 +! + 202.00000 + 370.00000 + 685.00000 + 903.00000 + 2/1 diff --git a/scales/bamboo.scl b/scales/bamboo.scl new file mode 100644 index 0000000..252888d --- /dev/null +++ b/scales/bamboo.scl @@ -0,0 +1,28 @@ +! bamboo.scl +! +Pythagorean scale with fifth average from Chinese bamboo tubes + 23 +! + 48.00000 + 102.00000 + 156.00000 + 204.00000 + 258.00000 + 312.00000 + 366.00000 + 414.00000 + 468.00000 + 522.00000 + 570.00000 + 624.00000 + 678.00000 + 726.00000 + 780.00000 + 834.00000 + 882.00000 + 936.00000 + 990.00000 + 1044.00000 + 1092.00000 + 1146.00000 + 2/1 diff --git a/scales/banchieri.scl b/scales/banchieri.scl new file mode 100644 index 0000000..ab1d7f3 --- /dev/null +++ b/scales/banchieri.scl @@ -0,0 +1,17 @@ +! banchieri.scl +! +Adriano Banchieri, in L'Organo suonarino (1605) + 12 +! + 135/128 + 9/8 + 6/5 + 81/64 + 4/3 + 45/32 + 3/2 + 405/256 + 27/16 + 9/5 + 243/128 + 2/1 diff --git a/scales/bapere.scl b/scales/bapere.scl new file mode 100644 index 0000000..58573ec --- /dev/null +++ b/scales/bapere.scl @@ -0,0 +1,10 @@ +! bapere.scl +! +African, Bapere Horns Aerophone, made of reed, one note each + 5 +! + 599.00000 + 813.00000 + 1011.00000 + 1217.00000 + 1510.00000 diff --git a/scales/barbour_chrom1.scl b/scales/barbour_chrom1.scl new file mode 100644 index 0000000..804579d --- /dev/null +++ b/scales/barbour_chrom1.scl @@ -0,0 +1,12 @@ +! BARBOUR_chrom1.scl +! +Barbour's #1 Chromatic + 7 +! + 55/54 + 10/9 + 4/3 + 3/2 + 55/36 + 5/3 + 2/1 diff --git a/scales/barbour_chrom2.scl b/scales/barbour_chrom2.scl new file mode 100644 index 0000000..0958607 --- /dev/null +++ b/scales/barbour_chrom2.scl @@ -0,0 +1,12 @@ +! barbour_chrom2.scl +! +Barbour's #2 Chromatic + 7 +! + 40/39 + 10/9 + 4/3 + 3/2 + 20/13 + 5/3 + 2/1 diff --git a/scales/barbour_chrom3.scl b/scales/barbour_chrom3.scl new file mode 100644 index 0000000..104cafe --- /dev/null +++ b/scales/barbour_chrom3.scl @@ -0,0 +1,12 @@ +! barbour_chrom3.scl +! +Barbour's #3 Chromatic + 7 +! + 64/63 + 8/7 + 4/3 + 3/2 + 32/21 + 12/7 + 2/1 diff --git a/scales/barbour_chrom3p.scl b/scales/barbour_chrom3p.scl new file mode 100644 index 0000000..51ebc90 --- /dev/null +++ b/scales/barbour_chrom3p.scl @@ -0,0 +1,12 @@ +! BARBOUR_CHROM3p.scl +! +permuted Barbour's #3 Chromatic + 7 +! + 9/8 + 8/7 + 4/3 + 3/2 + 27/16 + 12/7 + 2/1 diff --git a/scales/barbour_chrom3p2.scl b/scales/barbour_chrom3p2.scl new file mode 100644 index 0000000..29fa29e --- /dev/null +++ b/scales/barbour_chrom3p2.scl @@ -0,0 +1,12 @@ +! BARBOUR_CHROM3P2.scl +! +permuted Barbour's #3 Chromatic + 7 +! + 7/6 + 32/27 + 4/3 + 3/2 + 7/4 + 16/9 + 2/1 diff --git a/scales/barbour_chrom4.scl b/scales/barbour_chrom4.scl new file mode 100644 index 0000000..de8ff29 --- /dev/null +++ b/scales/barbour_chrom4.scl @@ -0,0 +1,12 @@ +! barbour_chrom4.scl +! +Barbour's #4 Chromatic + 7 +! + 81/80 + 9/8 + 4/3 + 3/2 + 243/160 + 27/16 + 2/1 diff --git a/scales/barbour_chrom4p.scl b/scales/barbour_chrom4p.scl new file mode 100644 index 0000000..a730838 --- /dev/null +++ b/scales/barbour_chrom4p.scl @@ -0,0 +1,12 @@ +! BARBOUR_CHROM4p.scl +! +permuted Barbour's #4 Chromatic + 7 +! + 10/9 + 9/8 + 4/3 + 3/2 + 5/3 + 27/16 + 2/1 diff --git a/scales/barbour_chrom4p2.scl b/scales/barbour_chrom4p2.scl new file mode 100644 index 0000000..d29492f --- /dev/null +++ b/scales/barbour_chrom4p2.scl @@ -0,0 +1,12 @@ +! BARBOUR_CHROM4P2.scl +! +permuted Barbour's #4 Chromatic + 7 +! + 32/27 + 6/5 + 4/3 + 3/2 + 16/9 + 9/5 + 2/1 diff --git a/scales/barca.scl b/scales/barca.scl new file mode 100644 index 0000000..cddf99f --- /dev/null +++ b/scales/barca.scl @@ -0,0 +1,17 @@ +! barca.scl +! +Barca + 12 +! + 92.18000 + 197.39333 + 296.09000 + 393.48333 + 4/3 + 590.22500 + 698.04500 + 794.13500 + 895.43833 + 16/9 + 1091.52833 + 2/1 diff --git a/scales/barca_a.scl b/scales/barca_a.scl new file mode 100644 index 0000000..ec96984 --- /dev/null +++ b/scales/barca_a.scl @@ -0,0 +1,17 @@ +! barca_a.scl +! +Barca A + 12 +! + 92.18000 + 200.00000 + 296.09000 + 397.39333 + 4/3 + 593.48333 + 3/2 + 794.13500 + 899.34833 + 998.04500 + 1095.43833 + 2/1 diff --git a/scales/barkechli.scl b/scales/barkechli.scl new file mode 100644 index 0000000..d19800d --- /dev/null +++ b/scales/barkechli.scl @@ -0,0 +1,32 @@ +! barkechli.scl +! +Mehdi Barkechli, 27-tone pyth. Arabic scale + 27 +! + 531441/524288 + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 4782969/4194304 + 32/27 + 19683/16384 + 8192/6561 + 81/64 + 4/3 + 177147/131072 + 1024/729 + 729/512 + 262144/177147 + 3/2 + 1594323/1048576 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 16/9 + 59049/32768 + 4096/2187 + 243/128 + 1048576/531441 + 2/1 diff --git a/scales/barlow_13.scl b/scales/barlow_13.scl new file mode 100644 index 0000000..57c19b3 --- /dev/null +++ b/scales/barlow_13.scl @@ -0,0 +1,18 @@ +! barlow_13.scl +! +7-limit rational 13-equal, Barlow, On the Quantification of Harmony and Metre + 13 +! + 135/128 + 9/8 + 7/6 + 5/4 + 21/16 + 48/35 + 81/56 + 243/160 + 8/5 + 12/7 + 9/5 + 243/128 + 2/1 diff --git a/scales/barlow_17.scl b/scales/barlow_17.scl new file mode 100644 index 0000000..ddbd746 --- /dev/null +++ b/scales/barlow_17.scl @@ -0,0 +1,22 @@ +! Barlow_17.scl +! +11-limit rational 17-equal, Barlow, On the Quantification of Harmony and Metre + 17 +! + 25/24 + 27/25 + 9/8 + 32/27 + 11/9 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 18/11 + 27/16 + 16/9 + 50/27 + 48/25 + 2/1 diff --git a/scales/barnes.scl b/scales/barnes.scl new file mode 100644 index 0000000..6e1a6dc --- /dev/null +++ b/scales/barnes.scl @@ -0,0 +1,17 @@ +! barnes.scl +! +John Barnes' temperament (1977) made after analysis of Wohltemperierte Klavier, 1/6 P + 12 +! + 94.13500 + 196.09000 + 298.04500 + 392.18000 + 501.95500 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/barnes2.scl b/scales/barnes2.scl new file mode 100644 index 0000000..c5615f8 --- /dev/null +++ b/scales/barnes2.scl @@ -0,0 +1,17 @@ +! barnes2.scl +! +John Barnes' temperament (1971), 1/8 P + 12 +! + 96.09000 + 198.04500 + 297.06750 + 396.09000 + 500.97750 + 594.13500 + 699.02250 + 798.04500 + 897.06750 + 999.02250 + 1095.11250 + 2/1 diff --git a/scales/barton.scl b/scales/barton.scl new file mode 100644 index 0000000..e61a7a8 --- /dev/null +++ b/scales/barton.scl @@ -0,0 +1,17 @@ +! barton.scl +! +Jacob Barton, tetratetradic scale on 6:7:9:11 + 12 +! + 77/72 + 12/11 + 9/8 + 7/6 + 14/11 + 11/8 + 3/2 + 18/11 + 121/72 + 7/4 + 11/6 + 2/1 diff --git a/scales/barton2.scl b/scales/barton2.scl new file mode 100644 index 0000000..091c80a --- /dev/null +++ b/scales/barton2.scl @@ -0,0 +1,16 @@ +! barton2.scl +! +Jacob Barton, mode of 88CET, TL 17-01-2007 + 11 +! + 176.00000 + 264.00000 + 440.00000 + 528.00000 + 616.00000 + 792.00000 + 880.00000 + 1056.00000 + 1144.00000 + 1320.00000 + 1408.00000 diff --git a/scales/beardsley_8.scl b/scales/beardsley_8.scl new file mode 100644 index 0000000..3982455 --- /dev/null +++ b/scales/beardsley_8.scl @@ -0,0 +1,13 @@ +! beardsley_8.scl +! +David Beardsley's scale used in "Sonic Bloom" (1999) + 8 +! + 9/8 + 7/6 + 9/7 + 11/8 + 3/2 + 13/8 + 7/4 + 2/1 diff --git a/scales/bedos.scl b/scales/bedos.scl new file mode 100644 index 0000000..f0719ab --- /dev/null +++ b/scales/bedos.scl @@ -0,0 +1,17 @@ +! bedos.scl +! +Temperament of Dom Franois Bdos de Celles (1770), after M. Tessmer + 12 +! + 74.97368 + 191.00623 + 311.34003 + 5/4 + 502.34626 + 577.31994 + 697.65374 + 25/16 + 888.65997 + 1008.99377 + 1083.96746 + 2/1 diff --git a/scales/belet.scl b/scales/belet.scl new file mode 100644 index 0000000..cd134cb --- /dev/null +++ b/scales/belet.scl @@ -0,0 +1,18 @@ +! belet.scl +! +Belet, Brian 1992 Proceedings of the ICMC pp.158-161. + 13 +! + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 11/8 + 3/2 + 8/5 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/bell_mt_partials.scl b/scales/bell_mt_partials.scl new file mode 100644 index 0000000..68db83f --- /dev/null +++ b/scales/bell_mt_partials.scl @@ -0,0 +1,14 @@ +! bell_mt_partials.scl +! +Partials of major third bell. 1/1=523.5677 Hz, Andr Lehr, 2006. 9=hum note + 9 +! + 398.84731 + 698.85161 + 961.92407 + 1198.84247 + 1321.95084 + 1653.88234 + 1898.84245 + 2470.16884 +-1200.42429 diff --git a/scales/bellingwolde.scl b/scales/bellingwolde.scl new file mode 100644 index 0000000..5d39830 --- /dev/null +++ b/scales/bellingwolde.scl @@ -0,0 +1,17 @@ +! bellingwolde.scl +! +Current 1/6-P. comma mod.mean of Freytag organ in Bellingwolde. Ortgies,2002 + 12 +! + 256/243 + 196.09000 + 301.95500 + 392.18000 + 501.95500 + 1024/729 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1090.22500 + 2/1 diff --git a/scales/bellingwolde_org.scl b/scales/bellingwolde_org.scl new file mode 100644 index 0000000..01603eb --- /dev/null +++ b/scales/bellingwolde_org.scl @@ -0,0 +1,17 @@ +! bellingwolde_org.scl +! +Original tuning of the Freytag organ in Bellingwolde + 12 +! + 256/243 + 196.09000 + 301.95500 + 392.18000 + 501.95500 + 1024/729 + 3/2 + 796.09000 + 894.13500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/belobog31.scl b/scales/belobog31.scl new file mode 100644 index 0000000..0bd3cf2 --- /dev/null +++ b/scales/belobog31.scl @@ -0,0 +1,72 @@ +! belobog31.scl +Belobog[31] hobbit in 626-tET, commas 3136/3125, 441/440 +31 +! +38.33866 +82.42812 +111.18211 +164.85623 +193.61022 +231.94888 +276.03834 +304.79233 +343.13099 +387.22045 +425.55911 +469.64856 +498.40256 +536.74121 +580.83067 +619.16933 +663.25879 +701.59744 +730.35144 +774.44089 +812.77955 +856.86901 +895.20767 +923.96166 +968.05112 +1006.38978 +1035.14377 +1088.81789 +1117.57188 +1161.66134 +2/1 +! +!! prebelobog31.scl +!! +! Belobog[31] transversal +! 31 +!! +! 45/44 +! 21/20 +! 16/15 +! 11/10 +! 28/25 +! 8/7 +! 88/75 +! 25/21 +! 128/105 +! 5/4 +! 32/25 +! 21/16 +! 4/3 +! 15/11 +! 7/5 +! 10/7 +! 22/15 +! 3/2 +! 32/21 +! 25/16 +! 8/5 +! 105/64 +! 42/25 +! 128/75 +! 7/4 +! 25/14 +! 20/11 +! 15/8 +! 21/11 +! 49/25 +! 2/1 diff --git a/scales/bemetzrieder2.scl b/scales/bemetzrieder2.scl new file mode 100644 index 0000000..27ebe44 --- /dev/null +++ b/scales/bemetzrieder2.scl @@ -0,0 +1,17 @@ +! bemetzrieder2.scl +! +Anton Bemetzrieder temperament nr. 2 (1808), is Vallotti in F# + 12 +! + 105.86500 + 9/8 + 301.95500 + 81/64 + 4/3 + 607.82000 + 3/2 + 803.91000 + 27/16 + 1000.00000 + 243/128 + 2/1 diff --git a/scales/bendeler-b.scl b/scales/bendeler-b.scl new file mode 100644 index 0000000..75490ef --- /dev/null +++ b/scales/bendeler-b.scl @@ -0,0 +1,17 @@ +! bendeler-b.scl +! +Die Brche nach Bendeler, Jerzy Erdmann: Ein Rechenmodell fr historische Mensurationsmethoden, p. 342 + 12 +! + 256/243 + 32768/29403 + 32/27 + 4096/3267 + 4/3 + 1024/729 + 65536/43923 + 128/81 + 16384/9801 + 16/9 + 2048/1089 + 2/1 diff --git a/scales/bendeler.scl b/scales/bendeler.scl new file mode 100644 index 0000000..d6a32d5 --- /dev/null +++ b/scales/bendeler.scl @@ -0,0 +1,17 @@ +! bendeler.scl +! +J. Ph. Bendeler well temperament + 12 +! + 256/243 + 194.63000 + 32/27 + 392.45000 + 4/3 + 1024/729 + 3/2 + 128/81 + 890.49500 + 16/9 + 1094.40500 + 2/1 diff --git a/scales/bendeler1.scl b/scales/bendeler1.scl new file mode 100644 index 0000000..e0d92e6 --- /dev/null +++ b/scales/bendeler1.scl @@ -0,0 +1,17 @@ +! bendeler1.scl +! +Bendeler I temperament (c.1690), three 1/3P comma tempered fifths + 12 +! + 256/243 + 188.26999 + 32/27 + 392.18000 + 4/3 + 1024/729 + 694.13500 + 128/81 + 890.22500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/bendeler2.scl b/scales/bendeler2.scl new file mode 100644 index 0000000..56bcaa2 --- /dev/null +++ b/scales/bendeler2.scl @@ -0,0 +1,17 @@ +! bendeler2.scl +! +Bendeler II temperament (c.1690), three 1/3P comma tempered fifths + 12 +! + 256/243 + 196.09000 + 32/27 + 392.18000 + 4/3 + 596.09000 + 694.13500 + 128/81 + 890.22500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/bendeler3.scl b/scales/bendeler3.scl new file mode 100644 index 0000000..0a3bd16 --- /dev/null +++ b/scales/bendeler3.scl @@ -0,0 +1,17 @@ +! bendeler3.scl +! +Bendeler III temperament (c.1690), four 1/4P tempered fifths + 12 +! + 96.09000 + 192.18000 + 32/27 + 396.09000 + 4/3 + 594.13500 + 696.09000 + 798.04500 + 894.13500 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/bermudo-v.scl b/scales/bermudo-v.scl new file mode 100644 index 0000000..dcbbac1 --- /dev/null +++ b/scales/bermudo-v.scl @@ -0,0 +1,17 @@ +! bermudo-v.scl +! +Bermudo's vihuela temperament, 3 1/6P, 1 1/2P comma + 12 +! + 492075/463684 + 540/481 + 32/27 + 1215/964 + 4/3 + 164025/115921 + 3/2 + 1476225/927368 + 810/481 + 16/9 + 3645/1928 + 2/1 diff --git a/scales/bermudo.scl b/scales/bermudo.scl new file mode 100644 index 0000000..dd6eec8 --- /dev/null +++ b/scales/bermudo.scl @@ -0,0 +1,17 @@ +! bermudo.scl +! +Temperament of Fr. Juan Bermudo (1555) + 12 +! + 100.10289 + 200.20579 + 32/27 + 400.41158 + 4/3 + 598.14789 + 3/2 + 802.05790 + 902.16079 + 16/9 + 1102.36658 + 2/1 diff --git a/scales/bermudo2.scl b/scales/bermudo2.scl new file mode 100644 index 0000000..b25092a --- /dev/null +++ b/scales/bermudo2.scl @@ -0,0 +1,17 @@ +! bermudo2.scl +! +Temperament of Fr. Juan Bermudo, interpr. of Franz Josef Ratte: Die Temperatur der Clavierinstrumente, p. 227 + 12 +! + 100.00000 + 200.00000 + 32/27 + 400.00000 + 4/3 + 598.04500 + 3/2 + 801.95500 + 901.95500 + 16/9 + 1101.95500 + 2/1 diff --git a/scales/betacub.scl b/scales/betacub.scl new file mode 100644 index 0000000..078b69f --- /dev/null +++ b/scales/betacub.scl @@ -0,0 +1,50 @@ +! betacub.scl +inverted 3x3x3 9-limit quintad cube beta (5120/5103) synch tempered +46 +! +49.729878 +85.285706 +110.150645 +120.600012 +135.015584 +170.329890 +181.020779 +205.885718 +230.750657 +255.615596 +266.306484 +316.036363 +351.350669 +386.906496 +436.636374 +472.192202 +497.057141 +521.922080 +546.787019 +582.342847 +617.657153 +632.072725 +667.387031 +702.942859 +727.807798 +752.672737 +763.363626 +788.228565 +813.093504 +823.542871 +883.963637 +898.379209 +908.828577 +933.693516 +969.249343 +994.114282 +1004.563649 +1018.979221 +1043.844161 +1079.399988 +1089.849355 +1114.714294 +1129.129866 +1139.579233 +1164.444172 +2/1 diff --git a/scales/bethisy.scl b/scales/bethisy.scl new file mode 100644 index 0000000..e074b2c --- /dev/null +++ b/scales/bethisy.scl @@ -0,0 +1,17 @@ +! bethisy.scl +! +Bethisy temperament ordinaire, see Pierre-Yves Asselin: Musique et temperament + 12 +! + 86.80400 + 193.15700 + 288.75800 + 5/4 + 496.25300 + 586.80400 + 696.57800 + 786.80300 + 889.73500 + 992.50600 + 1086.31400 + 2/1 diff --git a/scales/biezen.scl b/scales/biezen.scl new file mode 100644 index 0000000..0876996 --- /dev/null +++ b/scales/biezen.scl @@ -0,0 +1,17 @@ +! biezen.scl +! +Jan van Biezen modified meantone (1974) + 12 +! + 86.80214 + 193.15686 + 299.51157 + 5/4 + 503.42157 + 584.84714 + 696.57843 + 788.75714 + 889.73529 + 1001.46657 + 15/8 + 2/1 diff --git a/scales/biezen2.scl b/scales/biezen2.scl new file mode 100644 index 0000000..ab0ba75 --- /dev/null +++ b/scales/biezen2.scl @@ -0,0 +1,17 @@ +! biezen2.scl +! +Jan van Biezen 2, also Siracusa (early 17th cent.), modified 1/4 comma MT + 12 +! + 86.80374 + 193.15750 + 32/27 + 386.31499 + 4/3 + 584.84874 + 696.57875 + 788.75875 + 889.73625 + 16/9 + 1082.89374 + 2/1 diff --git a/scales/biezen3.scl b/scales/biezen3.scl new file mode 100644 index 0000000..f1972de --- /dev/null +++ b/scales/biezen3.scl @@ -0,0 +1,17 @@ +! biezen3.scl +! +Jan van Biezen 3 (2004) (also called Van Biezen I) + 12 +! + 256/243 + 196.09000 + 298.04500 + 392.18000 + 501.95500 + 1024/729 + 698.04500 + 128/81 + 894.13500 + 1000.00000 + 1090.22500 + 2/1 diff --git a/scales/biezen_chaumont.scl b/scales/biezen_chaumont.scl new file mode 100644 index 0000000..22fdac2 --- /dev/null +++ b/scales/biezen_chaumont.scl @@ -0,0 +1,17 @@ +! biezen_chaumont.scl +! +Jan van Biezen, after Chaumont, 1/8 Pyth. comma. Lochem, Hervormde Gudulakerk (1978) + 12 +! + 99.02250 + 198.04500 + 302.93250 + 396.09000 + 500.97750 + 600.00000 + 699.02250 + 798.04500 + 897.06750 + 1001.95500 + 1095.11250 + 2/1 diff --git a/scales/biggulp-bunya.scl b/scales/biggulp-bunya.scl new file mode 100644 index 0000000..9f66f4e --- /dev/null +++ b/scales/biggulp-bunya.scl @@ -0,0 +1,18 @@ +! biggulp-bunya.scl +! +Biggulp tempered in POTE-tuned 13-limit bunya +! generators: 0, 4, 8, 9, 10, 12, 13, 14, 18, 22, 26, 30 + 12 +! + 62.40123 + 207.08642 + 269.48764 + 382.97222 + 476.57406 + 558.85802 + 703.54321 + 765.94444 + 910.62962 + 973.03085 + 1086.51543 + 2/1 diff --git a/scales/biggulp.scl b/scales/biggulp.scl new file mode 100644 index 0000000..8ca7997 --- /dev/null +++ b/scales/biggulp.scl @@ -0,0 +1,17 @@ +! biggulp.scl +! +Big Gulp + 12 +! + 33/32 + 9/8 + 7/6 + 5/4 + 21/16 + 11/8 + 3/2 + 99/64 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/bigler12.scl b/scales/bigler12.scl new file mode 100644 index 0000000..6c75b8f --- /dev/null +++ b/scales/bigler12.scl @@ -0,0 +1,17 @@ +! bigler12.scl +! +Kurt Bigler, JI organ tuning, TL 28-3-2004 + 12 +! + 25/24 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 25/16 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/bihex-top.scl b/scales/bihex-top.scl new file mode 100644 index 0000000..b20fcca --- /dev/null +++ b/scales/bihex-top.scl @@ -0,0 +1,16 @@ +! bihex-top.scl +Bihexany in octoid TOP tuning +12 +! +101.318325 +267.590529 +385.147324 +417.624264 +535.181059 +701.453263 +802.771588 +883.963938 +969.043793 +1033.997672 +1119.077527 +1200.269877 diff --git a/scales/bihex540.scl b/scales/bihex540.scl new file mode 100644 index 0000000..f8fcaa1 --- /dev/null +++ b/scales/bihex540.scl @@ -0,0 +1,16 @@ +! bihex540.scl +Bihexany in 540/539 tempering +12 +! +101.621102 +267.824229 +386.256798 +417.215888 +535.648458 +701.851584 +803.472686 +884.228421 +969.675813 +1033.620081 +1119.067472 +1199.823207 diff --git a/scales/bihexany-octoid.scl b/scales/bihexany-octoid.scl new file mode 100644 index 0000000..74f824a --- /dev/null +++ b/scales/bihexany-octoid.scl @@ -0,0 +1,16 @@ +! bihexany-octoid.scl +Octoid tempering of bihexany, 600-equal +12 +! +102.000000 +268.000000 +386.000000 +418.000000 +536.000000 +702.000000 +804.000000 +884.000000 +970.000000 +1034.000000 +1120.000000 +2/1 diff --git a/scales/bihexany.scl b/scales/bihexany.scl new file mode 100644 index 0000000..29092d9 --- /dev/null +++ b/scales/bihexany.scl @@ -0,0 +1,16 @@ +! bihexany.scl +Hole around [0, 1/2, 1/2, 1/2] +12 +! +35/33 +7/6 +5/4 +14/11 +15/11 +3/2 +35/22 +5/3 +7/4 +20/11 +21/11 +2 diff --git a/scales/billeter.scl b/scales/billeter.scl new file mode 100644 index 0000000..682dae9 --- /dev/null +++ b/scales/billeter.scl @@ -0,0 +1,17 @@ +! billeter.scl +! +Organ well temperament of Otto Bernhard Billeter + 12 +! + 93.15750 + 198.04500 + 297.06750 + 392.18000 + 500.97750 + 591.20250 + 699.02250 + 795.11250 + 895.11250 + 999.02250 + 1092.18000 + 2/1 diff --git a/scales/billeter2.scl b/scales/billeter2.scl new file mode 100644 index 0000000..927df55 --- /dev/null +++ b/scales/billeter2.scl @@ -0,0 +1,17 @@ +! billeter2.scl +! +Bernhard Billeter's Bach temperament (1977/79), 1/12 and 7/24 Pyth. comma + 12 +! + 92.18000 + 200.00000 + 296.09000 + 390.22500 + 500.00000 + 590.22500 + 700.00000 + 794.13500 + 895.11250 + 998.04500 + 1090.22500 + 2/1 diff --git a/scales/blackbeat15.scl b/scales/blackbeat15.scl new file mode 100644 index 0000000..bcb7048 --- /dev/null +++ b/scales/blackbeat15.scl @@ -0,0 +1,20 @@ +! blackbeat15.scl +Blackwood[15] with brats of -1 +! generator g is unique real root of 9g^5+20g^4+80g^3-128 = 0 +15 +! +82.836732 +157.163268 +240.000000 +322.836732 +397.163268 +480.000000 +562.836732 +637.163268 +720.000000 +802.836732 +877.163268 +960.000000 +1042.836732 +1117.163268 +2/1 diff --git a/scales/blackchrome2.scl b/scales/blackchrome2.scl new file mode 100644 index 0000000..080943e --- /dev/null +++ b/scales/blackchrome2.scl @@ -0,0 +1,15 @@ +! blackchrome2.scl +! +Second 25/24&256/245 scale + 10 +! + 16/15 + 9/8 + 6/5 + 4/3 + 27/20 + 3/2 + 8/5 + 16/9 + 9/5 + 2/1 diff --git a/scales/blackj_gws.scl b/scales/blackj_gws.scl new file mode 100644 index 0000000..a1de2df --- /dev/null +++ b/scales/blackj_gws.scl @@ -0,0 +1,26 @@ +! blackj_gws.scl +! +Detempered Blackjack in 1/4 kleismic marvel tuning + 21 +! + 37.62469 + 115.58705 + 153.21174 + 8/7 + 268.79879 + 346.76114 + 384.38583 + 468.85303 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 731.14697 + 815.61417 + 853.23886 + 931.20121 + 7/4 + 1046.78826 + 1084.41295 + 1162.37531 + 2/1 diff --git a/scales/blackjack.scl b/scales/blackjack.scl new file mode 100644 index 0000000..67ebea7 --- /dev/null +++ b/scales/blackjack.scl @@ -0,0 +1,26 @@ +! blackjack.scl +! +21 note MOS of "MIRACLE" temperament, Erlich & Keenan, miracle1.scl,TL 2-5-2001 + 21 +! G + 83.33333 ! G#v + 116.66667 ! Ab^ + 200.00000 ! A + 233.33333 ! A> + 316.66667 ! Bb^ + 350.00000 ! B[ + 383.33333 ! Bv + 466.66667 ! C< + 500.00000 ! C + 583.33333 ! C#v + 616.66667 ! Db^ + 700.00000 ! D + 733.33333 ! D> + 816.66667 ! Eb^ + 850.00000 ! E[ + 933.33333 ! E> + 966.66667 ! F< + 1050.00000 ! F] + 1083.33333 ! F#v + 1166.66667 ! G< + 2/1 ! G diff --git a/scales/blackjack_r.scl b/scales/blackjack_r.scl new file mode 100644 index 0000000..04781c7 --- /dev/null +++ b/scales/blackjack_r.scl @@ -0,0 +1,26 @@ +! blackjack_r.scl +! +Rational "Wilson/Grady"-style version, Paul Erlich, TL 28-11-2001 + 21 +! + 21/20 + 15/14 + 9/8 + 8/7 + 6/5 + 11/9 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 8/5 + 18/11 + 12/7 + 7/4 + 11/6 + 15/8 + 63/32 + 2/1 diff --git a/scales/blackjack_r2.scl b/scales/blackjack_r2.scl new file mode 100644 index 0000000..744c995 --- /dev/null +++ b/scales/blackjack_r2.scl @@ -0,0 +1,26 @@ +! blackjack_r2.scl +! +Another rational Blackjack maximising 1:3:7:9:11, Paul Erlich, TL 5-12-2001 + 21 +! + 49/48 + 77/72 + 12/11 + 8/7 + 7/6 + 27/22 + 96/77 + 21/16 + 4/3 + 108/77 + 63/44 + 3/2 + 49/32 + 77/48 + 18/11 + 12/7 + 7/4 + 11/6 + 144/77 + 21/11 + 2/1 diff --git a/scales/blackjack_r3.scl b/scales/blackjack_r3.scl new file mode 100644 index 0000000..3f12b0b --- /dev/null +++ b/scales/blackjack_r3.scl @@ -0,0 +1,26 @@ +! blackjack_r3.scl +! +7-Limit rational Blackjack, Dave Keenan, TL 5-12-2001 + 21 +! + 21/20 + 16/15 + 28/25 + 8/7 + 6/5 + 49/40 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 8/5 + 49/30 + 12/7 + 7/4 + 147/80 + 28/15 + 49/25 + 2/1 diff --git a/scales/blackjackg.scl b/scales/blackjackg.scl new file mode 100644 index 0000000..4ca2d71 --- /dev/null +++ b/scales/blackjackg.scl @@ -0,0 +1,26 @@ +! blackjackg.scl +! +Blackjack on G-D + 21 +! +83.33300 +116.66700 +200.00000 +233.33300 +316.66700 +350.00000 +433.33300 +466.66700 +550.00000 +583.33300 +666.66700 +700.00000 +783.33300 +816.66700 +900.00000 +933.33300 +1016.66700 +1050.00000 +1083.33300 +1166.66700 +2/1 diff --git a/scales/blackjb.scl b/scales/blackjb.scl new file mode 100644 index 0000000..c71435c --- /dev/null +++ b/scales/blackjb.scl @@ -0,0 +1,25 @@ +! blackjb.scl +marvel (1,1) tuning of pipedum_21b +21 +! +34.142571 +116.519709 +150.662280 +233.039418 +267.181988 +349.559126 +383.701697 +466.739177 +500.221406 +583.258885 +616.741115 +699.778594 +733.260823 +816.298303 +850.440874 +932.818012 +966.960582 +1049.337720 +1083.480291 +1116.962521 +2/1 diff --git a/scales/blackwood.scl b/scales/blackwood.scl new file mode 100644 index 0000000..aca788c --- /dev/null +++ b/scales/blackwood.scl @@ -0,0 +1,30 @@ +! blackwood.scl +! +Blackwood temperament, g=84.663787, p=240, 5-limit + 25 +! + 70.67243 + 141.34485 + 155.33621 + 226.00864 + 240.00000 + 310.67243 + 381.34485 + 395.33621 + 466.00864 + 480.00000 + 550.67243 + 621.34485 + 635.33621 + 706.00864 + 720.00000 + 790.67243 + 861.34485 + 875.33621 + 946.00864 + 960.00000 + 1030.67243 + 1101.34485 + 1115.33621 + 1186.00864 + 1200.00000 diff --git a/scales/blackwood_6.scl b/scales/blackwood_6.scl new file mode 100644 index 0000000..83d42b1 --- /dev/null +++ b/scales/blackwood_6.scl @@ -0,0 +1,11 @@ +! blackwood_6.scl +! +Easley Blackwood, whole tone scale, arrangement of 4:5:7:9:11:13, 1/1=G, p.114 + 6 +! + 9/8 + 5/4 + 11/8 + 13/8 + 7/4 + 2/1 diff --git a/scales/blackwood_9.scl b/scales/blackwood_9.scl new file mode 100644 index 0000000..db89d8f --- /dev/null +++ b/scales/blackwood_9.scl @@ -0,0 +1,14 @@ +! blackwood_9.scl +! +Blackwood, scale with pure triads on I II III IV VI and dom.7th on V. page 83 + 9 +! + 10/9 + 9/8 + 5/4 + 21/16 + 4/3 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/blasquinten.scl b/scales/blasquinten.scl new file mode 100644 index 0000000..a98b293 --- /dev/null +++ b/scales/blasquinten.scl @@ -0,0 +1,28 @@ +! blasquinten.scl +! +Blasquintenzirkel. 23 fifths in 2 oct. C. Sachs, Vergleichende Musikwiss. p. 28 + 23 +! + 156.00000 + 312.00000 + 468.00000 + 624.00000 + 678.00000 + 780.00000 + 834.00000 + 936.00000 + 990.00000 + 1092.00000 + 1146.00000 + 1248.00000 + 1302.00000 + 1404.00000 + 1458.00000 + 1560.00000 + 1614.00000 + 1716.00000 + 1770.00000 + 1926.00000 + 2082.00000 + 2238.00000 + 2394.00000 diff --git a/scales/blueji-cataclysmic.scl b/scales/blueji-cataclysmic.scl new file mode 100644 index 0000000..28aa7bc --- /dev/null +++ b/scales/blueji-cataclysmic.scl @@ -0,0 +1,18 @@ +! blueji-cataclysmic.scl +! +Blueji tempered in 13-limit POTE-tuned cataclysmic +! generators: -11, -6, -5, -1, 0, 1, 5, 6, 7, 11, 12, 17 + 12 +! + 112.60347 + 204.43258 + 317.03605 + 385.18024 + 497.78371 + 589.61282 + 702.21629 + 814.81976 + 882.96395 + 1019.25234 + 1087.39653 + 2/1 diff --git a/scales/bluesrag.scl b/scales/bluesrag.scl new file mode 100644 index 0000000..28478a3 --- /dev/null +++ b/scales/bluesrag.scl @@ -0,0 +1,17 @@ +! bluesrag.scl +! +Ragismic tempered bluesji in 8419-tET + 12 +! + 133.41252 + 182.30194 + 386.26915 + 449.12697 + 498.01639 + 653.09419 + 680.31833 + 835.39613 + 884.28554 + 947.14337 + 1151.11058 + 2/1 diff --git a/scales/bobro_phi.scl b/scales/bobro_phi.scl new file mode 100644 index 0000000..21f0026 --- /dev/null +++ b/scales/bobro_phi.scl @@ -0,0 +1,13 @@ +! bobro_phi.scl +! +Cameron Bobro's phi scale, TL 06-05-2009 + 8 +! + 366.90970 + 466.18100 + 560.06656 + 733.81941 + 833.09030 + 982.55396 + 1068.86470 + 2/1 diff --git a/scales/bobro_phi2.scl b/scales/bobro_phi2.scl new file mode 100644 index 0000000..7c69cc5 --- /dev/null +++ b/scales/bobro_phi2.scl @@ -0,0 +1,11 @@ +! bobro_phi2.scl +! +Cameron Bobro, first 5 golden cuts of Phi, TL 09-05-2009 + 6 +! + 93.88597 + 149.46366 + 235.77441 + 366.90970 + 560.06656 + 833.09030 diff --git a/scales/bobrova.scl b/scales/bobrova.scl new file mode 100644 index 0000000..4edcf59 --- /dev/null +++ b/scales/bobrova.scl @@ -0,0 +1,17 @@ +! bobrova.scl +! +Bobrova Cheerful 12 WT based on *19 EDL + 12 +! + 19/18 + 19/17 + 19/16 + 361/288 + 4/3 + 361/256 + 323/216 + 19/12 + 57/34 + 57/32 + 361/192 + 2/1 diff --git a/scales/boeth_chrom.scl b/scales/boeth_chrom.scl new file mode 100644 index 0000000..f149252 --- /dev/null +++ b/scales/boeth_chrom.scl @@ -0,0 +1,12 @@ +! boeth_chrom.scl +! +Boethius's Chromatic. The CI is 19/16 + 7 +! + 256/243 + 64/57 + 4/3 + 3/2 + 128/81 + 32/19 + 2/1 diff --git a/scales/boeth_enh.scl b/scales/boeth_enh.scl new file mode 100644 index 0000000..34a1c51 --- /dev/null +++ b/scales/boeth_enh.scl @@ -0,0 +1,13 @@ +! boeth_enh.scl +! +Boethius's Enharmonic, with a CI of 81/64 and added 16/9 + 8 +! + 512/499 + 256/243 + 4/3 + 3/2 + 768/499 + 16/9 + 128/81 + 2/1 diff --git a/scales/bohlen-eg.scl b/scales/bohlen-eg.scl new file mode 100644 index 0000000..7a8de8a --- /dev/null +++ b/scales/bohlen-eg.scl @@ -0,0 +1,18 @@ +! bohlen-eg.scl +! +Bohlen-Pierce with two tones altered by minor BP diesis, slightly more equal + 13 +! + 49/45 + 25/21 + 9/7 + 7/5 + 75/49 + 5/3 + 9/5 + 49/25 + 15/7 + 7/3 + 63/25 + 135/49 + 3/1 diff --git a/scales/bohlen-p.scl b/scales/bohlen-p.scl new file mode 100644 index 0000000..188c9a1 --- /dev/null +++ b/scales/bohlen-p.scl @@ -0,0 +1,18 @@ +! bohlen-p.scl +! +See Bohlen, H. 13-Tonstufen in der Duodezime, Acustica 39: 76-86 (1978) + 13 +! + 27/25 + 25/21 + 9/7 + 7/5 + 75/49 + 5/3 + 9/5 + 49/25 + 15/7 + 7/3 + 63/25 + 25/9 + 3/1 diff --git a/scales/bohlen-p_9.scl b/scales/bohlen-p_9.scl new file mode 100644 index 0000000..a511ad5 --- /dev/null +++ b/scales/bohlen-p_9.scl @@ -0,0 +1,14 @@ +! BOHLEN-P_9.scl +! +Bohlen-Pierce subscale by J.R. Pierce with 3:5:7 triads + 9 +! + 146.30423 + 438.91269 + 585.21692 + 877.82539 + 1024.12962 + 1316.73808 + 1463.04231 + 1755.65077 + 3/1 diff --git a/scales/bohlen-p_9a.scl b/scales/bohlen-p_9a.scl new file mode 100644 index 0000000..43f767d --- /dev/null +++ b/scales/bohlen-p_9a.scl @@ -0,0 +1,14 @@ +! bohlen-p_9a.scl +! +Pierce's 9 of 3\13, see Mathews et al., J. Acoust. Soc. Am. 84, 1214-1222 + 9 +! + 49/45 + 9/7 + 7/5 + 81/49 + 9/5 + 15/7 + 7/3 + 135/49 + 3/1 diff --git a/scales/bohlen-p_eb.scl b/scales/bohlen-p_eb.scl new file mode 100644 index 0000000..69349ea --- /dev/null +++ b/scales/bohlen-p_eb.scl @@ -0,0 +1,18 @@ +! BOHLEN-P_EB.scl +! +Bohlen-Pierce scale with equal beating 5/3 and 7/3 + 13 +! + 152.07683 + 296.64928 + 441.22173 + 585.79418 + 737.87101 + 882.44346 + 1027.01591 + 1171.58837 + 1323.66519 + 1468.23765 + 1612.81010 + 1757.38255 + 3/1 diff --git a/scales/bohlen-p_ebt.scl b/scales/bohlen-p_ebt.scl new file mode 100644 index 0000000..cef1d9c --- /dev/null +++ b/scales/bohlen-p_ebt.scl @@ -0,0 +1,18 @@ +! bohlen-p_ebt.scl +! +Bohlen-Pierce scale with equal beating 7/3 tenth + 13 +! + 145.30508 + 291.92921 + 439.77583 + 584.70367 + 730.97784 + 878.50029 + 1023.13607 + 1169.13919 + 1316.41049 + 1460.81993 + 1606.61294 + 1753.68948 + 3/1 diff --git a/scales/bohlen-p_ebt2.scl b/scales/bohlen-p_ebt2.scl new file mode 100644 index 0000000..6dfbe71 --- /dev/null +++ b/scales/bohlen-p_ebt2.scl @@ -0,0 +1,18 @@ +! bohlen-p_ebt2.scl +! +Bohlen-Pierce scale with equal beating 7/5 tritone + 13 +! + 145.69063 + 292.08731 + 439.13583 + 586.78567 + 732.13177 + 878.21021 + 1024.96498 + 1172.34389 + 1317.44491 + 1463.29687 + 1609.84255 + 1757.02855 + 3/1 diff --git a/scales/bohlen-p_et.scl b/scales/bohlen-p_et.scl new file mode 100644 index 0000000..822b685 --- /dev/null +++ b/scales/bohlen-p_et.scl @@ -0,0 +1,18 @@ +! bohlen-p_et.scl +! +13-tone equal division of 3/1. Bohlen-Pierce equal approximation + 13 +! + 146.30423 + 292.60846 + 438.91269 + 585.21692 + 731.52115 + 877.82539 + 1024.12962 + 1170.43385 + 1316.73808 + 1463.04231 + 1609.34654 + 1755.65077 + 3/1 diff --git a/scales/bohlen-p_ring.scl b/scales/bohlen-p_ring.scl new file mode 100644 index 0000000..0325057 --- /dev/null +++ b/scales/bohlen-p_ring.scl @@ -0,0 +1,18 @@ +! bohlen-p_ring.scl +! +Todd Harrop, symmetrical ring of Bohlen-Pierce enharmonics using 4 major and 8 minor dieses (2012) + 13 +! +49/45 +147/125 +35/27 +243/175 +189/125 +81/49 +49/27 +125/63 +175/81 +81/35 +125/49 +135/49 +3/1 diff --git a/scales/bohlen-p_sup.scl b/scales/bohlen-p_sup.scl new file mode 100644 index 0000000..e3989b0 --- /dev/null +++ b/scales/bohlen-p_sup.scl @@ -0,0 +1,18 @@ +! bohlen-p_sup.scl +! +Superparticular Bohlen-Pierce scale + 13 +! + 10/9 + 25/21 + 325/252 + 325/231 + 4225/2772 + 4225/2541 + 16900/9317 + 2600/1331 + 260/121 + 280/121 + 28/11 + 30/11 + 3/1 diff --git a/scales/bohlen47.scl b/scales/bohlen47.scl new file mode 100644 index 0000000..babbdbc --- /dev/null +++ b/scales/bohlen47.scl @@ -0,0 +1,26 @@ +! bohlen47.scl +! +Heinz Bohlen, mode of 4\47 (1998), www.huygens-fokker.org/bpsite/pythagorean.html + 21 +! + 102.12766 + 255.31915 + 357.44681 + 459.57447 + 510.63830 + 612.76596 + 714.89362 + 817.02128 + 970.21277 + 1072.34043 + 1327.65957 + 1429.78723 + 1582.97872 + 1685.10638 + 1787.23404 + 1889.36170 + 1940.42553 + 2042.55319 + 2144.68085 + 2297.87234 + 4/1 diff --git a/scales/bohlen47r.scl b/scales/bohlen47r.scl new file mode 100644 index 0000000..1ed3316 --- /dev/null +++ b/scales/bohlen47r.scl @@ -0,0 +1,28 @@ +! bohlen47r.scl +! +Rational version, with alt.9 64/49 and alt.38 40/13 + 23 +! + 52/49 + 196/169 + 16/13 + 13/10 + 64/49 + 35/26 + 10/7 + 98/65 + 8/5 + 7/4 + 13/7 + 28/13 + 16/7 + 5/2 + 130/49 + 14/5 + 104/35 + 49/16 + 40/13 + 13/4 + 169/49 + 49/13 + 4/1 diff --git a/scales/bohlen5.scl b/scales/bohlen5.scl new file mode 100644 index 0000000..3b2c266 --- /dev/null +++ b/scales/bohlen5.scl @@ -0,0 +1,18 @@ +! bohlen5.scl +! +5-limit version of Bohlen-Pierce + 13 +! + 27/25 + 6/5 + 162/125 + 25/18 + 972/625 + 5/3 + 9/5 + 625/324 + 54/25 + 125/54 + 5/2 + 25/9 + 3/1 diff --git a/scales/bohlen_11.scl b/scales/bohlen_11.scl new file mode 100644 index 0000000..653408e --- /dev/null +++ b/scales/bohlen_11.scl @@ -0,0 +1,16 @@ +! bohlen_11.scl +! +11-tone scale by Bohlen, generated from the 1/1 3/2 5/2 triad + 11 +! + 10/9 + 6/5 + 4/3 + 3/2 + 5/3 + 9/5 + 2/1 + 9/4 + 5/2 + 27/10 + 3/1 diff --git a/scales/bohlen_12.scl b/scales/bohlen_12.scl new file mode 100644 index 0000000..6f2d852 --- /dev/null +++ b/scales/bohlen_12.scl @@ -0,0 +1,17 @@ +! bohlen_12.scl +! +12-tone scale by Bohlen generated from the 4:7:10 triad, Acustica 39/2, 1978 + 12 +! + 11/10 + 6/5 + 30/23 + 10/7 + 11/7 + 7/4 + 21/11 + 21/10 + 23/10 + 5/2 + 11/4 + 3/1 diff --git a/scales/bohlen_8.scl b/scales/bohlen_8.scl new file mode 100644 index 0000000..b6b7eba --- /dev/null +++ b/scales/bohlen_8.scl @@ -0,0 +1,13 @@ +! bohlen_8.scl +! +See Bohlen, H. 13-Tonstufen in der Duodezime, Acustica 39: 76-86 (1978) + 8 +! + 10/9 + 6/5 + 9/7 + 7/5 + 14/9 + 5/3 + 9/5 + 2/1 diff --git a/scales/bohlen_arcturus.scl b/scales/bohlen_arcturus.scl new file mode 100644 index 0000000..7e53a3a --- /dev/null +++ b/scales/bohlen_arcturus.scl @@ -0,0 +1,12 @@ +! bohlen_arcturus.scl +! +Paul Erlich, Arcturus-7, TOP tuning (15625/15309 tempered) + 7 +! + 145.18162 + 734.21217 + 879.39379 + 1024.57540 + 1169.75702 + 1758.78757 + 1903.96919 diff --git a/scales/bohlen_canopus.scl b/scales/bohlen_canopus.scl new file mode 100644 index 0000000..37fee0d --- /dev/null +++ b/scales/bohlen_canopus.scl @@ -0,0 +1,12 @@ +! bohlen_canopus.scl +! +Paul Erlich, Canopus-7, TOP tuning (16875/16807 tempered) + 7 +! + 150.19306 + 583.78912 + 733.98218 + 1167.57824 + 1317.77131 + 1751.36736 + 1901.56043 diff --git a/scales/bohlen_coh.scl b/scales/bohlen_coh.scl new file mode 100644 index 0000000..0c6acf2 --- /dev/null +++ b/scales/bohlen_coh.scl @@ -0,0 +1,18 @@ +! bohlen_coh.scl +! +Differentially coherent Bohlen-Pierce, interval=2 + 13 +! + 140.70435 + 293.44906 + 434.26326 + 586.82503 + 727.82007 + 879.96401 + 1021.37276 + 1172.94424 + 1314.91823 + 1464.79932 + 1608.44866 + 1756.91884 + 3/1 diff --git a/scales/bohlen_coh2.scl b/scales/bohlen_coh2.scl new file mode 100644 index 0000000..5f4fadc --- /dev/null +++ b/scales/bohlen_coh2.scl @@ -0,0 +1,18 @@ +! bohlen_coh2.scl +! +Differentially coherent Bohlen-Pierce, interval=1,2, subharmonic=25 + 13 +! + 27/25 + 6/5 + 32/25 + 36/25 + 38/25 + 42/25 + 9/5 + 49/25 + 54/25 + 59/25 + 63/25 + 69/25 + 3/1 diff --git a/scales/bohlen_coh3.scl b/scales/bohlen_coh3.scl new file mode 100644 index 0000000..9ca55d1 --- /dev/null +++ b/scales/bohlen_coh3.scl @@ -0,0 +1,18 @@ +! bohlen_coh3.scl +! +Differentially coherent Bohlen-Pierce, interval=1, subharmonic=75 + 13 +! + 27/25 + 6/5 + 97/75 + 104/75 + 39/25 + 42/25 + 9/5 + 148/75 + 54/25 + 7/3 + 63/25 + 69/25 + 3/1 diff --git a/scales/bohlen_d_ji.scl b/scales/bohlen_d_ji.scl new file mode 100644 index 0000000..cbb1800 --- /dev/null +++ b/scales/bohlen_d_ji.scl @@ -0,0 +1,14 @@ +! BOHLEN_D_JI.scl +! +Bohlen's delta scale, just version. "Dur" form, "moll" is inversion. + 9 +! + 25/21 + 9/7 + 75/49 + 5/3 + 9/5 + 15/7 + 7/3 + 25/9 + 3/1 diff --git a/scales/bohlen_delta.scl b/scales/bohlen_delta.scl new file mode 100644 index 0000000..31d87e7 --- /dev/null +++ b/scales/bohlen_delta.scl @@ -0,0 +1,14 @@ +! bohlen_delta.scl +! +Bohlen's delta scale, a mode B-P, see Acustica 39: 76-86 (1978) + 9 +! + 292.60846 + 438.91269 + 731.52115 + 877.82539 + 1024.12962 + 1316.73808 + 1463.04231 + 1755.65077 + 3/1 diff --git a/scales/bohlen_diat_top.scl b/scales/bohlen_diat_top.scl new file mode 100644 index 0000000..30b2ebf --- /dev/null +++ b/scales/bohlen_diat_top.scl @@ -0,0 +1,14 @@ +! bohlen_diat_top.scl +! +BP Diatonic, TOP tuning (245/243 tempered) + 9 +! + 141.64621 + 440.43170 + 582.07790 + 880.86339 + 1022.50960 + 1321.29509 + 1462.94130 + 1761.72679 + 1903.37300 diff --git a/scales/bohlen_enh.scl b/scales/bohlen_enh.scl new file mode 100644 index 0000000..8176945 --- /dev/null +++ b/scales/bohlen_enh.scl @@ -0,0 +1,54 @@ +! bohlen_enh.scl +! +Bohlen-Pierce scale, all enharmonic tones + 49 +! + 27/25 + 49/45 + 375/343 + 625/567 + 729/625 + 147/125 + 405/343 + 25/21 + 3969/3125 + 2401/1875 + 9/7 + 35/27 + 243/175 + 7/5 + 3375/2401 + 625/441 + 189/125 + 343/225 + 75/49 + 125/81 + 5103/3125 + 1029/625 + 81/49 + 5/3 + 9/5 + 49/27 + 625/343 + 3125/1701 + 243/125 + 49/25 + 675/343 + 125/63 + 1323/625 + 2401/1125 + 15/7 + 175/81 + 81/35 + 7/3 + 5625/2401 + 3125/1323 + 63/25 + 343/135 + 125/49 + 625/243 + 1701/625 + 343/125 + 135/49 + 25/9 + 3/1 diff --git a/scales/bohlen_eq.scl b/scales/bohlen_eq.scl new file mode 100644 index 0000000..dc43078 --- /dev/null +++ b/scales/bohlen_eq.scl @@ -0,0 +1,18 @@ +! bohlen_eq.scl +! +Most equal selection from all enharmonic Bohlen-Pierce tones + 13 +! + 49/45 + 405/343 + 9/7 + 7/5 + 343/225 + 5/3 + 9/5 + 675/343 + 15/7 + 7/3 + 343/135 + 135/49 + 3/1 diff --git a/scales/bohlen_g_ji.scl b/scales/bohlen_g_ji.scl new file mode 100644 index 0000000..f8b06f9 --- /dev/null +++ b/scales/bohlen_g_ji.scl @@ -0,0 +1,14 @@ +! BOHLEN_G_JI.scl +! +Bohlen's gamma scale, just version + 9 +! + 27/25 + 9/7 + 7/5 + 5/3 + 9/5 + 49/25 + 7/3 + 25/9 + 3/1 diff --git a/scales/bohlen_gamma.scl b/scales/bohlen_gamma.scl new file mode 100644 index 0000000..711c491 --- /dev/null +++ b/scales/bohlen_gamma.scl @@ -0,0 +1,14 @@ +! bohlen_gamma.scl +! +Bohlen's gamma scale, a mode of the Bohlen-Pierce scale + 9 +! + 146.30423 + 438.91269 + 585.21692 + 877.82539 + 1024.12962 + 1170.43385 + 1463.04231 + 1755.65077 + 3/1 diff --git a/scales/bohlen_h_ji.scl b/scales/bohlen_h_ji.scl new file mode 100644 index 0000000..60cd1df --- /dev/null +++ b/scales/bohlen_h_ji.scl @@ -0,0 +1,14 @@ +! bohlen_h_ji.scl +! +Bohlen's harmonic scale, just version + 9 +! + 27/25 + 9/7 + 7/5 + 5/3 + 9/5 + 15/7 + 7/3 + 63/25 + 3/1 diff --git a/scales/bohlen_harm.scl b/scales/bohlen_harm.scl new file mode 100644 index 0000000..97bd51d --- /dev/null +++ b/scales/bohlen_harm.scl @@ -0,0 +1,14 @@ +! bohlen_harm.scl +! +Bohlen's harmonic scale, inverse of lambda + 9 +! + 146.30423 + 438.91269 + 585.21692 + 877.82539 + 1024.12962 + 1316.73808 + 1463.04231 + 1609.34654 + 3/1 diff --git a/scales/bohlen_l_ji.scl b/scales/bohlen_l_ji.scl new file mode 100644 index 0000000..bb4893f --- /dev/null +++ b/scales/bohlen_l_ji.scl @@ -0,0 +1,14 @@ +! bohlen_l_ji.scl +! +Bohlen's lambda scale, just version + 9 +! + 25/21 + 9/7 + 7/5 + 5/3 + 9/5 + 15/7 + 7/3 + 25/9 + 3/1 diff --git a/scales/bohlen_lambda.scl b/scales/bohlen_lambda.scl new file mode 100644 index 0000000..47dfea6 --- /dev/null +++ b/scales/bohlen_lambda.scl @@ -0,0 +1,14 @@ +! bohlen_lambda.scl +! +Bohlen's lambda scale, a mode of the Bohlen-Pierce scale + 9 +! + 292.60846 + 438.91269 + 585.21692 + 877.82539 + 1024.12962 + 1316.73808 + 1463.04231 + 1755.65077 + 3/1 diff --git a/scales/bohlen_lambda_pyth.scl b/scales/bohlen_lambda_pyth.scl new file mode 100644 index 0000000..37bc7c3 --- /dev/null +++ b/scales/bohlen_lambda_pyth.scl @@ -0,0 +1,14 @@ +! bohlen_lambda_pyth.scl +! +Dave Benson's BP-Pythagorean scale, lambda mode of bohlen_pyth.scl + 9 +! + 19683/16807 + 9/7 + 343/243 + 81/49 + 49/27 + 729/343 + 7/3 + 6561/2401 + 3/1 diff --git a/scales/bohlen_mean.scl b/scales/bohlen_mean.scl new file mode 100644 index 0000000..f454acb --- /dev/null +++ b/scales/bohlen_mean.scl @@ -0,0 +1,18 @@ +! bohlen_mean.scl +! +1/3 minor BP diesis (245/243) tempered 7/3 meantone scale + 13 +! + 142.69792 + 41553/35000 + 439.81427 + 7/5 + 75/49 + 879.62854 + 1022.32646 + 49/25 + 15/7 + 1462.14073 + 1604.83865 + 1759.25708 + 3/1 diff --git a/scales/bohlen_pent_top.scl b/scales/bohlen_pent_top.scl new file mode 100644 index 0000000..1f35221 --- /dev/null +++ b/scales/bohlen_pent_top.scl @@ -0,0 +1,10 @@ +! bohlen_pent_top.scl +! +BP Pentatonic, TOP tuning (245/243 tempered) + 5 +! + 440.43170 + 880.86339 + 1321.29509 + 1761.72679 + 1903.37300 diff --git a/scales/bohlen_pyth.scl b/scales/bohlen_pyth.scl new file mode 100644 index 0000000..abb74ac --- /dev/null +++ b/scales/bohlen_pyth.scl @@ -0,0 +1,18 @@ +! bohlen_pyth.scl +! +Cycle of 13 7/3 BP tenths + 13 +! + 2401/2187 + 19683/16807 + 9/7 + 343/243 + 177147/117649 + 81/49 + 49/27 + 117649/59049 + 729/343 + 7/3 + 16807/6561 + 6561/2401 + 3/1 diff --git a/scales/bohlen_sirius.scl b/scales/bohlen_sirius.scl new file mode 100644 index 0000000..7f916a0 --- /dev/null +++ b/scales/bohlen_sirius.scl @@ -0,0 +1,12 @@ +! bohlen_sirius.scl +! +Paul Erlich, Sirius-7, TOP tuning (3125/3087 tempered) + 7 +! + 293.59737 + 587.19473 + 880.79210 + 1022.60982 + 1316.20719 + 1609.80455 + 1903.40192 diff --git a/scales/bohlen_t.scl b/scales/bohlen_t.scl new file mode 100644 index 0000000..db1e5ba --- /dev/null +++ b/scales/bohlen_t.scl @@ -0,0 +1,13 @@ +! bohlen_t.scl +! +Bohlen, scale based on the twelfth + 8 +! + 300.00000 + 500.00000 + 700.00000 + 900.00000 + 1200.00000 + 1400.00000 + 1600.00000 + 1900.00000 diff --git a/scales/bohlen_t_ji.scl b/scales/bohlen_t_ji.scl new file mode 100644 index 0000000..4bedeee --- /dev/null +++ b/scales/bohlen_t_ji.scl @@ -0,0 +1,13 @@ +! bohlen_t_ji.scl +! +Bohlen, scale based on twelfth, just version + 8 +! + 6/5 + 4/3 + 3/2 + 5/3 + 2/1 + 9/4 + 5/2 + 3/1 diff --git a/scales/bolivia.scl b/scales/bolivia.scl new file mode 100644 index 0000000..a038ef8 --- /dev/null +++ b/scales/bolivia.scl @@ -0,0 +1,12 @@ +! bolivia.scl +! +Observed scale from pan-pipe from La Paz. 1/1=171 Hz + 7 +! + 326.00000 + 742.00000 + 1046.00000 + 1382.00000 + 1739.00000 + 2108.00000 + 2394.00000 diff --git a/scales/boomsliter.scl b/scales/boomsliter.scl new file mode 100644 index 0000000..b6d498a --- /dev/null +++ b/scales/boomsliter.scl @@ -0,0 +1,17 @@ +! boomsliter.scl +! +Boomsliter & Creel basic set of their referential tuning. [1 3 5 7 9] x u[1 3 5] cross set + 12 +! + 9/8 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 2/1 diff --git a/scales/boop19.scl b/scales/boop19.scl new file mode 100644 index 0000000..e0f85e3 --- /dev/null +++ b/scales/boop19.scl @@ -0,0 +1,23 @@ +! boop19.scl +19 note detempered sensi MOS boop (245/243) scale, rms tuning +19 +! +54.196169 +122.781755 +176.977924 +263.949327 +318.145497 +386.731082 +440.927252 +495.123421 +582.094824 +617.905176 +704.876579 +759.072748 +813.268918 +881.854503 +936.050673 +1023.022076 +1077.218245 +1145.803831 +2/1 diff --git a/scales/bossart-muri.scl b/scales/bossart-muri.scl new file mode 100644 index 0000000..78bd012 --- /dev/null +++ b/scales/bossart-muri.scl @@ -0,0 +1,17 @@ +! bossart-muri.scl +! +Victor Ferdinand Bossart's Modified meantone (1743/44), organ in Klosterkirche Muri + 12 +! + 80.44999 + 195.11250 + 305.86500 + 388.26999 + 501.95500 + 582.40499 + 699.02250 + 779.47249 + 891.20250 + 1000.97750 + 1085.33749 + 2/1 diff --git a/scales/bossart1.scl b/scales/bossart1.scl new file mode 100644 index 0000000..1d780be --- /dev/null +++ b/scales/bossart1.scl @@ -0,0 +1,17 @@ +! bossart1.scl +! +Victor Ferdinand Bossart (erste Anweisung) organ temperament (1740?) + 12 +! + 256/243 + 198.04500 + 308.79750 + 390.22500 + 503.91000 + 1024/729 + 699.02250 + 794.13500 + 894.13500 + 1007.82000 + 1089.24750 + 2/1 diff --git a/scales/bossart2.scl b/scales/bossart2.scl new file mode 100644 index 0000000..b5b6de1 --- /dev/null +++ b/scales/bossart2.scl @@ -0,0 +1,17 @@ +! bossart2.scl +! +Victor Ferdinand Bossart (zweite Anweisung) organ temperament (1740?) + 12 +! + 94.13500 + 195.11250 + 308.79750 + 394.13500 + 503.91000 + 592.18000 + 699.02250 + 796.09000 + 894.13500 + 1004.88750 + 1096.09000 + 2/1 diff --git a/scales/bossart3.scl b/scales/bossart3.scl new file mode 100644 index 0000000..c33497a --- /dev/null +++ b/scales/bossart3.scl @@ -0,0 +1,17 @@ +! bossart3.scl +! +Victor Ferdinand Bossart (dritte Anweisung) organ temperament (1740?) + 12 +! + 93.15750 + 198.04500 + 305.86500 + 390.22500 + 503.91000 + 591.20250 + 699.02250 + 797.06750 + 894.13500 + 1004.88750 + 1089.24750 + 2/1 diff --git a/scales/boulliau.scl b/scales/boulliau.scl new file mode 100644 index 0000000..0869d61 --- /dev/null +++ b/scales/boulliau.scl @@ -0,0 +1,17 @@ +! boulliau.scl +! +Monsieur Boulliau's irregular temp. (1373), reported by Mersenne in 1636 + 12 +! + 18/17 + 9/8 + 81/68 + 81/64 + 4/3 + 24/17 + 3/2 + 27/17 + 27/16 + 16/9 + 32/17 + 2/1 diff --git a/scales/bourdelle1.scl b/scales/bourdelle1.scl new file mode 100644 index 0000000..345cab9 --- /dev/null +++ b/scales/bourdelle1.scl @@ -0,0 +1,93 @@ +! bourdelle1.scl +! +Compromis Cordier, piano tuning by Jean-Pierre Chainais + 88 +! +100.1046295 +200.209 +300.314 +400.419 +500.523 +600.628 +700.732 +800.837 +900.942 +1001.046 +1101.151 +1201.256 +1301.360 +1401.465 +1501.569 +1601.674 +1701.779 +1801.883 +1901.988 +2002.093 +2102.197 +2202.302 +2302.406 +2402.511 +2502.616 +2602.720 +2702.825 +2802.930 +2903.034 +3003.139 +3103.244 +3203.348 +3303.453 +3403.557 +3503.662 +3603.767 +3703.871 +3803.976 +3904.081 +4004.185 +4104.290 +4204.394 +4304.499 +4404.604 +4504.708 +4604.813 +4704.918 +4805.022 +4905.127 +5005.239 +5105.358 +5205.484 +5305.618 +5405.759 +5505.907 +5606.063 +5706.226 +5806.396 +5906.573 +6006.758 +6106.950 +6207.149 +6307.356 +6407.570 +6507.791 +6608.019 +6708.255 +6808.498 +6908.748 +7009.005 +7109.270 +7209.542 +7309.821 +7410.108 +7510.402 +7610.703 +7711.011 +7811.327 +7911.650 +8011.980 +8112.318 +8212.662 +8313.014 +8413.374 +8513.740 +8614.114 +8714.495 +8814.884 diff --git a/scales/bpg55557777.scl b/scales/bpg55557777.scl new file mode 100644 index 0000000..de327c1 --- /dev/null +++ b/scales/bpg55557777.scl @@ -0,0 +1,30 @@ +! bpg55557777.scl +! +Bohlen-Pierce extended to [55557777] + 25 +! + 245/243 + 27/25 + 49/45 + 25/21 + 9/7 + 35/27 + 243/175 + 7/5 + 75/49 + 81/49 + 5/3 + 1225/729 + 2187/1225 + 9/5 + 49/27 + 49/25 + 15/7 + 175/81 + 81/35 + 7/3 + 63/25 + 135/49 + 25/9 + 729/245 + 3/1 diff --git a/scales/bps_temp17.scl b/scales/bps_temp17.scl new file mode 100644 index 0000000..54c1c5f --- /dev/null +++ b/scales/bps_temp17.scl @@ -0,0 +1,22 @@ +! bps_temp17.scl +! +Bohlen-Pierce-Stearn temperament. Highest 7-limit error 8.4 cents, 2001 + 17 +! + 47.93500 + 179.49000 + 311.04500 + 442.60000 + 490.53500 + 622.09000 + 753.64500 + 885.20000 + 933.13500 + 1064.69000 + 1196.24500 + 1327.80000 + 1375.73500 + 1507.29000 + 1638.84500 + 1770.40000 + 3/1 diff --git a/scales/brac.scl b/scales/brac.scl new file mode 100644 index 0000000..5af427d --- /dev/null +++ b/scales/brac.scl @@ -0,0 +1,17 @@ +! brac.scl +! +Circulating temperament with simple beat ratios: 4 3/2 4 3/2 2 2 177/176 4 3/2 2 3/2 2 + 12 +! + 56640/53701 + 60008/53701 + 63720/53701 + 67264/53701 + 71685/53701 + 75056/53701 + 80276/53701 + 84960/53701 + 89920/53701 + 95580/53701 + 100544/53701 + 2/1 diff --git a/scales/breed-blues1.scl b/scales/breed-blues1.scl new file mode 100644 index 0000000..5d4518b --- /dev/null +++ b/scales/breed-blues1.scl @@ -0,0 +1,12 @@ +! breed-blues1.scl +! +Graham Breed's blues scale in 22-tET + 7 +! + 218.18182 + 381.81818 + 436.36364 + 709.09091 + 872.72727 + 927.27273 + 2/1 diff --git a/scales/breed-blues2.scl b/scales/breed-blues2.scl new file mode 100644 index 0000000..701a5a4 --- /dev/null +++ b/scales/breed-blues2.scl @@ -0,0 +1,13 @@ +! breed-blues2.scl +! +Graham Breed's blues scale in 29-tET + 8 +! + 206.89655 + 248.27586 + 372.41379 + 455.17241 + 703.44828 + 868.96552 + 951.72414 + 2/1 diff --git a/scales/breed-bluesji.scl b/scales/breed-bluesji.scl new file mode 100644 index 0000000..ec4627f --- /dev/null +++ b/scales/breed-bluesji.scl @@ -0,0 +1,17 @@ +! breed-bluesji.scl +! +7-limit JI version of Graham Breed's Blues scale + 12 +! + 27/25 + 10/9 + 5/4 + 35/27 + 4/3 + 35/24 + 40/27 + 81/50 + 5/3 + 140/81 + 35/18 + 2/1 diff --git a/scales/breed-dias13.scl b/scales/breed-dias13.scl new file mode 100644 index 0000000..3cbeb73 --- /dev/null +++ b/scales/breed-dias13.scl @@ -0,0 +1,51 @@ +! breed-dias13.scl +! +13-limit Diaschismic temperament, g=103.897, oct=1/2, 13-limit + 46 +! + 23.38056 + 46.76112 + 70.14168 + 103.89676 + 127.27732 + 150.65788 + 174.03844 + 207.79352 + 8/7 + 254.55464 + 277.93520 + 311.69028 + 335.07084 + 358.45140 + 381.83196 + 415.58704 + 438.96760 + 64/49 + 485.72872 + 519.48380 + 542.86436 + 566.24492 + 600.00000 + 623.38056 + 646.76112 + 670.14168 + 703.89676 + 727.27732 + 750.65788 + 774.03844 + 807.79352 + 831.17408 + 854.55464 + 877.93520 + 911.69028 + 935.07084 + 958.45140 + 981.83196 + 1015.58704 + 1038.96760 + 1062.34816 + 1085.72872 + 1119.48380 + 1142.86436 + 1166.24492 + 2/1 diff --git a/scales/breed-ht.scl b/scales/breed-ht.scl new file mode 100644 index 0000000..c815835 --- /dev/null +++ b/scales/breed-ht.scl @@ -0,0 +1,24 @@ +! breed-ht.scl +! +Hemithird temperament, g=193.202, 5-limit + 19 +! + 111.62852 + 152.41536 + 193.20219 + 304.83072 + 345.61755 + 386.40439 + 498.03291 + 538.81975 + 579.60658 + 691.23510 + 732.02194 + 772.80878 + 884.43730 + 925.22413 + 966.01097 + 1077.63949 + 1118.42633 + 1159.21316 + 2/1 diff --git a/scales/breed-kleismic.scl b/scales/breed-kleismic.scl new file mode 100644 index 0000000..0df45e1 --- /dev/null +++ b/scales/breed-kleismic.scl @@ -0,0 +1,12 @@ +! breed-kleismic.scl +! +Kleismic temperament, g=317.080, 5-limit + 7 +! + 68.31870 + 317.07968 + 385.39838 + 634.15935 + 702.47805 + 951.23903 + 2/1 diff --git a/scales/breed-magic.scl b/scales/breed-magic.scl new file mode 100644 index 0000000..c4eacf9 --- /dev/null +++ b/scales/breed-magic.scl @@ -0,0 +1,18 @@ +! breed-magic.scl +! +Graham Breed's Magic temperament, g=380.384, 9-limit, close to 41-tET + 13 +! + 203.83722 + 262.68605 + 321.53489 + 380.38372 + 584.22094 + 643.06978 + 701.91861 + 760.76744 + 964.60466 + 1023.45350 + 1082.30233 + 1141.15117 + 2/1 diff --git a/scales/breed-magic5.scl b/scales/breed-magic5.scl new file mode 100644 index 0000000..c61edb3 --- /dev/null +++ b/scales/breed-magic5.scl @@ -0,0 +1,24 @@ +! breed-magic5.scl +! +Magic temperament, g=379.967949, 5-limit + 19 +! + 79.48718 + 139.58334 + 199.67949 + 259.77564 + 319.87180 + 379.96795 + 459.45513 + 519.55129 + 579.64744 + 639.74359 + 699.83975 + 759.93590 + 839.42308 + 899.51924 + 959.61539 + 1019.71154 + 1079.80769 + 1139.90385 + 2/1 diff --git a/scales/breed-mystery.scl b/scales/breed-mystery.scl new file mode 100644 index 0000000..1b95d8f --- /dev/null +++ b/scales/breed-mystery.scl @@ -0,0 +1,63 @@ +! breed-mystery.scl +! +Mystery temperament, g=15.563, oct=1/29, 15-limit + 58 +! + 15.56278 + 41.37931 + 56.94209 + 82.75862 + 98.32140 + 124.13793 + 139.70071 + 165.51724 + 181.08002 + 206.89655 + 222.45933 + 248.27586 + 263.83864 + 289.65517 + 305.21795 + 331.03448 + 346.59726 + 372.41379 + 387.97657 + 413.79310 + 429.35588 + 455.17241 + 470.73519 + 496.55172 + 512.11450 + 537.93103 + 553.49381 + 579.31034 + 594.87312 + 620.68966 + 636.25243 + 662.06897 + 677.63174 + 703.44828 + 719.01105 + 744.82759 + 760.39036 + 786.20690 + 801.76967 + 827.58621 + 843.14898 + 868.96552 + 884.52829 + 910.34483 + 925.90760 + 951.72414 + 967.28692 + 993.10345 + 1008.66623 + 1034.48276 + 1050.04554 + 1075.86207 + 1091.42485 + 1117.24138 + 1132.80416 + 1158.62069 + 1174.18347 + 2/1 diff --git a/scales/breed.scl b/scales/breed.scl new file mode 100644 index 0000000..73ad042 --- /dev/null +++ b/scales/breed.scl @@ -0,0 +1,17 @@ +! breed.scl +! +Graham Breed's fourth based 12-tone keyboard scale. Tuning List 23-10-97 + 12 +! + 531441/524288 + 46.92002 + 2187/2048 + 1162261467/1073741824 + 9/8 + 4782969/4194304 + 32/27 + 19683/16384 + 341.05502 + 81/64 + 43046721/33554432 + 4/3 diff --git a/scales/breed11.scl b/scales/breed11.scl new file mode 100644 index 0000000..760ac87 --- /dev/null +++ b/scales/breed11.scl @@ -0,0 +1,32 @@ +! breed11.scl +Breed[11] hobbit in 2749-tET +11 +! +119.60713 +231.35686 +350.96399 +386.32230 +582.32084 +617.67916 +813.67770 +849.03601 +968.64314 +1080.39287 +2/1 +! +!! prebreed11.scl +!! +! Prebreed[11] {2, 5, 7} transversal +! 11 +!! +! 343/320 +! 8/7 +! 49/40 +! 5/4 +! 7/5 +! 10/7 +! 8/5 +! 80/49 +! 7/4 +! 640/343 +! 2/1 diff --git a/scales/breed7-3.scl b/scales/breed7-3.scl new file mode 100644 index 0000000..e811871 --- /dev/null +++ b/scales/breed7-3.scl @@ -0,0 +1,15 @@ +! breed7-3.scl +! +Graham Breed's 7 + 3 scale in 24-tET + 10 +! + 150.00000 + 200.00000 + 350.00000 + 500.00000 + 650.00000 + 700.00000 + 850.00000 + 1000.00000 + 1050.00000 + 2/1 diff --git a/scales/breedball3.scl b/scales/breedball3.scl new file mode 100644 index 0000000..b903ae3 --- /dev/null +++ b/scales/breedball3.scl @@ -0,0 +1,17 @@ +! breedball3.scl +! +Third Breed ball around 49/40-7/4 + 12 +! + 49/48 + 21/20 + 15/14 + 49/40 + 5/4 + 7/5 + 10/7 + 3/2 + 49/32 + 12/7 + 7/4 + 2/1 diff --git a/scales/breedball4.scl b/scales/breedball4.scl new file mode 100644 index 0000000..754b325 --- /dev/null +++ b/scales/breedball4.scl @@ -0,0 +1,19 @@ +! breedball4.scl +! +Fourth Breed ball around 49/40-7/4 + 14 +! + 49/48 + 21/20 + 15/14 + 6/5 + 49/40 + 5/4 + 7/5 + 10/7 + 3/2 + 49/32 + 12/7 + 7/4 + 25/14 + 2/1 diff --git a/scales/breedpump.scl b/scales/breedpump.scl new file mode 100644 index 0000000..e28e57d --- /dev/null +++ b/scales/breedpump.scl @@ -0,0 +1,21 @@ +! breedpump.scl +! +Comma pump in breed (2401/2400 planar) [[1, 1, -2]->[1, 1, -1]->[0, 1, -1]->[0, 0, -1]->[0, 0, 0]->[0, -1, 0],[0, -1, 1]->[0, -2, 1]->[-1, -2, 1] + 16 +! + 50/49 + 16807/16000 + 343/320 + 400/343 + 20000/16807 + 49/40 + 5/4 + 7/5 + 10/7 + 2401/1600 + 49/32 + 80/49 + 4000/2401 + 7/4 + 25/14 + 2/1 diff --git a/scales/breedt2.scl b/scales/breedt2.scl new file mode 100644 index 0000000..0e9c769 --- /dev/null +++ b/scales/breedt2.scl @@ -0,0 +1,17 @@ +! breedt2.scl +! +Graham Breed's 1/5 P temperament, TL 10-06-99 + 12 +! + 94.91700 + 199.21800 + 298.82700 + 393.74400 + 502.73700 + 592.96200 + 3/2 + 796.87200 + 896.48100 + 1000.78200 + 1095.69900 + 2/1 diff --git a/scales/breedt3.scl b/scales/breedt3.scl new file mode 100644 index 0000000..44958d6 --- /dev/null +++ b/scales/breedt3.scl @@ -0,0 +1,17 @@ +! breedt3.scl +! +Graham Breed's other 1/4 P temperament, TL 10-06-99 + 12 +! + 96.09000 + 198.04500 + 300.00000 + 396.09000 + 503.91000 + 594.13500 + 3/2 + 798.04500 + 894.13500 + 1001.95500 + 1092.18000 + 2/1 diff --git a/scales/breetet2.scl b/scales/breetet2.scl new file mode 100644 index 0000000..7e4eb35 --- /dev/null +++ b/scales/breetet2.scl @@ -0,0 +1,17 @@ +! breetet2.scl +doubled Breed tetrad +13 +! +49/48 +25/24 +7/6 +49/40 +5/4 +4/3 +10/7 +35/24 +3/2 +49/30 +5/3 +7/4 +2/1 diff --git a/scales/breetet3.scl b/scales/breetet3.scl new file mode 100644 index 0000000..81c0285 --- /dev/null +++ b/scales/breetet3.scl @@ -0,0 +1,29 @@ +! breetet3.scl +tripled Breed tetrad +25 +! +49/48 +25/24 +15/14 +35/32 +9/8 +7/6 +49/40 +5/4 +245/192 +125/96 +21/16 +4/3 +10/7 +35/24 +3/2 +49/32 +25/16 +49/30 +5/3 +7/4 +25/14 +175/96 +90/49 +15/8 +2/1 diff --git a/scales/breeza.scl b/scales/breeza.scl new file mode 100644 index 0000000..37d4666 --- /dev/null +++ b/scales/breeza.scl @@ -0,0 +1,31 @@ +! breeza.scl +A 40353607/40000000 & 40960000/40353607 Fokker block with 11 otonal and 10 utonal tetrads +27 +! +50/49 +16807/16000 +128000/117649 +6400000/5764801 +8/7 +400/343 +2401/2000 +49/40 +5/4 +64/49 +3200/2401 +160000/117649 +7/5 +10/7 +117649/80000 +2401/1600 +1280000/823543 +8/5 +80/49 +4000/2401 +343/200 +7/4 +5764801/3200000 +640/343 +32000/16807 +49/25 +2/1 diff --git a/scales/breezb.scl b/scales/breezb.scl new file mode 100644 index 0000000..d8022ee --- /dev/null +++ b/scales/breezb.scl @@ -0,0 +1,31 @@ +! breezb.scl +Alternative block to breeza 40353607/40000000 & 40960000/40353607 +27 +! +50/49 +16807/16000 +128000/117649 +28/25 +8/7 +400/343 +2401/2000 +49/40 +5/4 +64/49 +3200/2401 +160000/117649 +7/5 +10/7 +117649/80000 +2401/1600 +1280000/823543 +8/5 +80/49 +4000/2401 +343/200 +7/4 +5764801/3200000 +640/343 +32000/16807 +49/25 +2/1 diff --git a/scales/bremmer.scl b/scales/bremmer.scl new file mode 100644 index 0000000..e900de1 --- /dev/null +++ b/scales/bremmer.scl @@ -0,0 +1,17 @@ +! bremmer.scl +! +Bill Bremmer's Shining Brow (1998) + 12 +! + 95.52500 + 197.49000 + 299.01500 + 395.03999 + 500.00500 + 595.02999 + 699.49500 + 798.52000 + 897.48500 + 998.51000 + 1095.53499 + 2/1 diff --git a/scales/bremmer_ebvt1.scl b/scales/bremmer_ebvt1.scl new file mode 100644 index 0000000..446c429 --- /dev/null +++ b/scales/bremmer_ebvt1.scl @@ -0,0 +1,17 @@ +! bremmer_ebvt1.scl +! +Bill Bremmer EBVT I temperament (2011) + 12 +! + 94.87252 + 197.05899 + 297.80000 + 394.21889 + 4/3 + 592.91752 + 699.31190 + 796.82704 + 896.20299 + 999.10000 + 1096.17389 + 2/1 diff --git a/scales/bremmer_ebvt2.scl b/scales/bremmer_ebvt2.scl new file mode 100644 index 0000000..abb8cfe --- /dev/null +++ b/scales/bremmer_ebvt2.scl @@ -0,0 +1,17 @@ +! bremmer_ebvt2.scl +! +Bill Bremmer EBVT II temperament (2011) + 12 +! + 94.87252 + 197.05899 + 297.80000 + 395.79561 + 4/3 + 592.91752 + 699.31190 + 796.82704 + 896.20299 + 999.10000 + 1096.17389 + 2/1 diff --git a/scales/bremmer_ebvt3.scl b/scales/bremmer_ebvt3.scl new file mode 100644 index 0000000..a28f1e5 --- /dev/null +++ b/scales/bremmer_ebvt3.scl @@ -0,0 +1,17 @@ +! bremmer_ebvt3.scl +! +Bill Bremmer EBVT III temperament (2011) + 12 +! + 94.87252 + 197.05899 + 297.80000 + 395.79561 + 4/3 + 595.89736 + 699.31190 + 796.82704 + 896.20299 + 999.10000 + 1096.17389 + 2/1 diff --git a/scales/broadwood.scl b/scales/broadwood.scl new file mode 100644 index 0000000..c4715ac --- /dev/null +++ b/scales/broadwood.scl @@ -0,0 +1,17 @@ +! broadwood.scl +! +Broadwood's Best (Ellis tuner number 4), Victorian (1885) + 12 +! + 95.96501 + 197.99000 + 297.95501 + 392.98000 + 498.94501 + 594.97001 + 699.99500 + 796.96001 + 894.98500 + 998.95001 + 1093.97500 + 2/1 diff --git a/scales/broadwood2.scl b/scales/broadwood2.scl new file mode 100644 index 0000000..8a6f5f8 --- /dev/null +++ b/scales/broadwood2.scl @@ -0,0 +1,17 @@ +! broadwood2.scl +! +Broadwood's Usual (Ellis tuner number 2), Victorian (1885) + 12 +! + 94.96501 + 196.99000 + 296.95501 + 391.98000 + 498.94501 + 593.97001 + 699.99500 + 795.96001 + 893.98500 + 997.95001 + 1092.97500 + 2/1 diff --git a/scales/broadwood3.scl b/scales/broadwood3.scl new file mode 100644 index 0000000..ec5e8dc --- /dev/null +++ b/scales/broadwood3.scl @@ -0,0 +1,17 @@ +! broadwood3.scl +! +John Broadwoods 1832 unequal temperament compiled by A.Sparschuh, a=403.0443 + 12 +! + 633527/600000 + 2691301/2400000 + 1429123/1200000 + 75449/60000 + 1068389/800000 + 1692133/1200000 + 898549/600000 + 3795083/2400000 + 1343481/800000 + 535057/300000 + 1506547/800000 + 2/1 diff --git a/scales/broeckaert-pbp.scl b/scales/broeckaert-pbp.scl new file mode 100644 index 0000000..1c52c40 --- /dev/null +++ b/scales/broeckaert-pbp.scl @@ -0,0 +1,17 @@ +! broeckaert-pbp.scl +! +Johan Broeckaert-Devriendt, PBP temperament (2007). Equal PBP for C-E and G-B + 12 +! + 256/243 + 195.25271 + 32/27 + 386.87185 + 4/3 + 1024/729 + 699.44315 + 128/81 + 891.06228 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/brown.scl b/scales/brown.scl new file mode 100644 index 0000000..d2540df --- /dev/null +++ b/scales/brown.scl @@ -0,0 +1,50 @@ +! brown.scl +! +Tuning of Colin Brown's Voice Harmonium, Glasgow. Helmholtz/Ellis p. 470-473, genus [3333333333333355] + 45 +! + 25/24 + 256/243 + 135/128 + 2187/2048 + 800/729 + 10/9 + 18225/16384 + 9/8 + 2560/2187 + 75/64 + 32/27 + 1215/1024 + 100/81 + 5/4 + 81/64 + 320/243 + 675/512 + 4/3 + 10935/8192 + 25/18 + 1024/729 + 45/32 + 729/512 + 3200/2187 + 40/27 + 6075/4096 + 3/2 + 25/16 + 128/81 + 405/256 + 400/243 + 5/3 + 54675/32768 + 27/16 + 1280/729 + 225/128 + 16/9 + 3645/2048 + 50/27 + 4096/2187 + 15/8 + 243/128 + 160/81 + 2025/1024 + 2/1 diff --git a/scales/bruder-vier.scl b/scales/bruder-vier.scl new file mode 100644 index 0000000..d845dd5 --- /dev/null +++ b/scales/bruder-vier.scl @@ -0,0 +1,17 @@ +! bruder-vier.scl +! +Ignaz Bruder organ temperament (1829) according to P. Vier + 12 +! + 95.00000 + 200.00000 + 295.00000 + 389.00000 + 499.00000 + 593.50000 + 698.50000 + 796.00000 + 897.00000 + 998.00000 + 1092.00000 + 2/1 diff --git a/scales/bruder.scl b/scales/bruder.scl new file mode 100644 index 0000000..d81909d --- /dev/null +++ b/scales/bruder.scl @@ -0,0 +1,17 @@ +! bruder.scl +! +Ignaz Bruder organ temperament (1829), systematised by Ratte, p. 406 + 12 +! + 95.11250 + 202.93250 + 297.06750 + 391.20250 + 499.02250 + 593.64625 + 701.46625 + 796.09000 + 897.06750 + 998.04500 + 1092.18000 + 2/1 diff --git a/scales/bug-pelog.scl b/scales/bug-pelog.scl new file mode 100644 index 0000000..519d1cc --- /dev/null +++ b/scales/bug-pelog.scl @@ -0,0 +1,12 @@ +! bug-pelog.scl +! +Pelog-like subset of bug[9] and superpelog[9], g=260.256797 + 7 +! + 101.28399 + 260.25680 + 520.51359 + 679.48641 + 780.77039 + 939.74320 + 2/1 diff --git a/scales/burma3.scl b/scales/burma3.scl new file mode 100644 index 0000000..533f18f --- /dev/null +++ b/scales/burma3.scl @@ -0,0 +1,12 @@ +! burma3.scl +! +Burmese scale, von Hornbostel: ber ein akustisches Kriterium.., 1911, p.613. 1/1=336 Hz + 7 +! + 164.53576 + 336.12950 + 505.75652 + 688.16023 + 859.44844 + 1036.66952 + 2/1 diff --git a/scales/burt1.scl b/scales/burt1.scl new file mode 100644 index 0000000..0c1cac7 --- /dev/null +++ b/scales/burt1.scl @@ -0,0 +1,17 @@ +! burt1.scl +! +W. Burt's 13diatsub #1 + 12 +! + 26/25 + 13/12 + 26/23 + 13/11 + 13/10 + 26/19 + 13/9 + 27/17 + 13/8 + 26/15 + 13/7 + 2/1 diff --git a/scales/burt10.scl b/scales/burt10.scl new file mode 100644 index 0000000..c609d80 --- /dev/null +++ b/scales/burt10.scl @@ -0,0 +1,17 @@ +! burt10.scl +! +W. Burt's 19enhsub #10 + 12 +! + 76/75 + 38/37 + 76/73 + 19/18 + 19/14 + 38/27 + 19/13 + 152/103 + 76/51 + 152/101 + 38/25 + 2/1 diff --git a/scales/burt11.scl b/scales/burt11.scl new file mode 100644 index 0000000..e885a2c --- /dev/null +++ b/scales/burt11.scl @@ -0,0 +1,17 @@ +! burt11.scl +! +W. Burt's 19enhharm #11 + 12 +! + 25/19 + 101/76 + 51/38 + 103/76 + 26/19 + 27/19 + 28/19 + 36/19 + 73/38 + 37/19 + 75/38 + 2/1 diff --git a/scales/burt12.scl b/scales/burt12.scl new file mode 100644 index 0000000..e2f68c1 --- /dev/null +++ b/scales/burt12.scl @@ -0,0 +1,17 @@ +! burt12.scl +! +W. Burt's 19diatharm #12 + 12 +! + 22/19 + 23/19 + 24/19 + 25/19 + 26/19 + 27/19 + 28/19 + 32/19 + 34/19 + 36/19 + 37/19 + 2/1 diff --git a/scales/burt13.scl b/scales/burt13.scl new file mode 100644 index 0000000..bb244dd --- /dev/null +++ b/scales/burt13.scl @@ -0,0 +1,17 @@ +! burt13.scl +! +W. Burt's 23diatsub #13 + 12 +! + 23/22 + 23/21 + 46/41 + 23/20 + 23/18 + 23/17 + 23/16 + 23/15 + 23/14 + 46/27 + 23/13 + 2/1 diff --git a/scales/burt14.scl b/scales/burt14.scl new file mode 100644 index 0000000..fee86b8 --- /dev/null +++ b/scales/burt14.scl @@ -0,0 +1,17 @@ +! burt14.scl +! +W. Burt's 23enhsub #14 + 12 +! + 92/91 + 46/45 + 92/89 + 23/22 + 23/18 + 23/17 + 23/16 + 92/63 + 46/31 + 92/61 + 23/15 + 2/1 diff --git a/scales/burt15.scl b/scales/burt15.scl new file mode 100644 index 0000000..34ad9b2 --- /dev/null +++ b/scales/burt15.scl @@ -0,0 +1,17 @@ +! burt15.scl +! +W. Burt's 23enhharm #15 + 12 +! + 30/23 + 61/46 + 31/23 + 63/46 + 32/23 + 34/23 + 36/23 + 44/23 + 89/46 + 45/23 + 91/46 + 2/1 diff --git a/scales/burt16.scl b/scales/burt16.scl new file mode 100644 index 0000000..1ac11ae --- /dev/null +++ b/scales/burt16.scl @@ -0,0 +1,17 @@ +! burt16.scl +! +W. Burt's 23diatharm #16 + 12 +! + 26/23 + 27/23 + 28/23 + 30/23 + 32/23 + 34/23 + 36/23 + 40/23 + 41/23 + 42/23 + 44/23 + 2/1 diff --git a/scales/burt17.scl b/scales/burt17.scl new file mode 100644 index 0000000..e3afb7a --- /dev/null +++ b/scales/burt17.scl @@ -0,0 +1,41 @@ +! burt17.scl +! +W. Burt's "2 out of 3,5,11,17,31 dekany" CPS with 1/1=3/1. 1/1 vol. 10(1) '98 + 36 +! + 98549/98304 + 2057/2048 + 13175/12288 + 275/256 + 52855/49152 + 8959/8192 + 561/512 + 4805/4096 + 28985/24576 + 605/512 + 2635/2048 + 165/128 + 10571/8192 + 15895/12288 + 63767/49152 + 8525/6144 + 1445/1024 + 5797/4096 + 775/512 + 4675/3072 + 18755/12288 + 1581/1024 + 3179/2048 + 425/256 + 81685/49152 + 1705/1024 + 10285/6144 + 465/256 + 44795/24576 + 935/512 + 179707/98304 + 3751/2048 + 255/128 + 16337/8192 + 1023/512 + 2/1 diff --git a/scales/burt18.scl b/scales/burt18.scl new file mode 100644 index 0000000..4e906d7 --- /dev/null +++ b/scales/burt18.scl @@ -0,0 +1,41 @@ +! burt18.scl +! +W. Burt's "2 out of 1,3,5,7,11 dekany" CPS with 1/1=1/1. 1/1 vol. 10(1) '98 + 36 +! + 525/512 + 33/32 + 4235/4096 + 539/512 + 275/256 + 35/32 + 1155/1024 + 147/128 + 75/64 + 605/512 + 77/64 + 315/256 + 2541/2048 + 165/128 + 21/16 + 2695/2048 + 693/512 + 175/128 + 45/32 + 363/256 + 735/512 + 385/256 + 99/64 + 1617/1024 + 825/512 + 105/64 + 847/512 + 55/32 + 1815/1024 + 231/128 + 15/8 + 1925/1024 + 245/128 + 495/256 + 63/32 + 2/1 diff --git a/scales/burt19.scl b/scales/burt19.scl new file mode 100644 index 0000000..c6caaaa --- /dev/null +++ b/scales/burt19.scl @@ -0,0 +1,25 @@ +! burt19.scl +! +W. Burt's "2 out of 2,3,4,5,7 dekany" CPS with 1/1=1/1. 1/1 vol. 10(1) '98 + 20 +! + 525/512 + 35/32 + 9/8 + 147/128 + 75/64 + 315/256 + 5/4 + 21/16 + 175/128 + 45/32 + 735/512 + 3/2 + 49/32 + 25/16 + 105/64 + 7/4 + 15/8 + 245/128 + 63/32 + 2/1 diff --git a/scales/burt2.scl b/scales/burt2.scl new file mode 100644 index 0000000..dafce67 --- /dev/null +++ b/scales/burt2.scl @@ -0,0 +1,17 @@ +! burt2.scl +! +W. Burt's 13enhsub #2 + 12 +! +104/103 +52/51 +104/101 +26/25 +13/10 +104/79 +4/3 +104/77 +26/19 +52/33 +13/7 +2/1 diff --git a/scales/burt20.scl b/scales/burt20.scl new file mode 100644 index 0000000..01cc0d6 --- /dev/null +++ b/scales/burt20.scl @@ -0,0 +1,17 @@ +! burt20.scl +! +Warren Burt tuning for "Commas" (1993). 1/1=263 Hz, XH 16 + 12 +! + 36/35 + 16/15 + 2187/2048 + 9/8 + 729/640 + 512/405 + 6561/5120 + 45/32 + 36/25 + 63/40 + 8/5 + 2/1 diff --git a/scales/burt3.scl b/scales/burt3.scl new file mode 100644 index 0000000..63fb02f --- /dev/null +++ b/scales/burt3.scl @@ -0,0 +1,17 @@ +! burt3.scl +! +W. Burt's 13enhharm #3 + 12 +! + 14/13 + 33/26 + 19/13 + 77/52 + 3/2 + 79/52 + 20/13 + 25/13 + 101/52 + 51/26 + 103/52 + 2/1 diff --git a/scales/burt4.scl b/scales/burt4.scl new file mode 100644 index 0000000..8b5abf1 --- /dev/null +++ b/scales/burt4.scl @@ -0,0 +1,17 @@ +! burt4.scl +! +W. Burt's 13diatharm #4, see his post 3/30/94 in Tuning Digest #57 + 12 +! + 14/13 + 15/13 + 16/13 + 17/13 + 18/13 + 19/13 + 20/13 + 22/13 + 23/13 + 24/13 + 25/13 + 2/1 diff --git a/scales/burt5.scl b/scales/burt5.scl new file mode 100644 index 0000000..c316d40 --- /dev/null +++ b/scales/burt5.scl @@ -0,0 +1,17 @@ +! burt5.scl +! +W. Burt's 17diatsub #5 + 12 +! + 17/16 + 17/15 + 17/14 + 17/13 + 17/16 + 34/23 + 17/11 + 34/21 + 17/10 + 34/19 + 17/9 + 2/1 diff --git a/scales/burt6.scl b/scales/burt6.scl new file mode 100644 index 0000000..f2def55 --- /dev/null +++ b/scales/burt6.scl @@ -0,0 +1,17 @@ +! burt6.scl +! +W. Burt's 17enhsub #6 + 12 +! + 68/67 + 34/33 + 68/65 + 17/16 + 17/12 + 34/23 + 17/11 + 136/87 + 68/43 + 8/5 + 34/21 + 2/1 diff --git a/scales/burt7.scl b/scales/burt7.scl new file mode 100644 index 0000000..40b4fda --- /dev/null +++ b/scales/burt7.scl @@ -0,0 +1,17 @@ +! burt7.scl +! +W. Burt's 17enhharm #7 + 12 +! + 21/17 + 5/4 + 43/34 + 87/68 + 22/17 + 23/17 + 24/17 + 32/17 + 65/34 + 33/17 + 67/34 + 2/1 diff --git a/scales/burt8.scl b/scales/burt8.scl new file mode 100644 index 0000000..2573ffa --- /dev/null +++ b/scales/burt8.scl @@ -0,0 +1,17 @@ +! burt8.scl +! +W. Burt's 17diatharm #8, harmonics 16 to 32 + 12 +! + 18/17 + 19/17 + 20/17 + 21/17 + 22/17 + 23/17 + 24/17 + 26/17 + 28/17 + 30/17 + 32/17 + 2/1 diff --git a/scales/burt9.scl b/scales/burt9.scl new file mode 100644 index 0000000..8611ac5 --- /dev/null +++ b/scales/burt9.scl @@ -0,0 +1,17 @@ +! burt9.scl +! +W. Burt's 19diatsub #9 + 12 +! + 38/37 + 19/18 + 19/17 + 19/16 + 19/14 + 38/27 + 19/13 + 38/25 + 19/12 + 38/23 + 19/11 + 2/1 diff --git a/scales/burt_fibo.scl b/scales/burt_fibo.scl new file mode 100644 index 0000000..cffe3d3 --- /dev/null +++ b/scales/burt_fibo.scl @@ -0,0 +1,17 @@ +! burt_fibo.scl +! +Warren Burt, 3/2+5/3+8/5+etc. "Recurrent Sequences", 2002 + 12 +! + 17/16 + 9/8 + 305/256 + 5/4 + 21/16 + 89/64 + 377/256 + 3/2 + 13/8 + 55/32 + 233/128 + 2/1 diff --git a/scales/burt_fibo23.scl b/scales/burt_fibo23.scl new file mode 100644 index 0000000..c2b9cde --- /dev/null +++ b/scales/burt_fibo23.scl @@ -0,0 +1,28 @@ +! burt_fibo23.scl +! +Warren Burt, 23-tone Fibonacci scale. "Recurrent Sequences", 2002 + 23 +! + 4181/4096 + 17/16 + 17711/16384 + 9/8 + 75025/65536 + 305/256 + 5/4 + 323/256 + 21/16 + 5473/4096 + 89/64 + 1449/1024 + 377/256 + 3/2 + 1597/1024 + 13/8 + 6765/4096 + 55/32 + 28657/16384 + 233/128 + 121393/65536 + 987/512 + 2/1 diff --git a/scales/burt_forks.scl b/scales/burt_forks.scl new file mode 100644 index 0000000..4c6ed70 --- /dev/null +++ b/scales/burt_forks.scl @@ -0,0 +1,24 @@ +! burt_forks.scl +! +Warren Burt, 19-tone Forks. Interval 5(3): pp. 13+23, Winter 1986-87 + 19 +! + 28/27 + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 16/9 + 9/5 + 15/8 + 27/14 + 2/1 diff --git a/scales/burt_primes.scl b/scales/burt_primes.scl new file mode 100644 index 0000000..2acfba7 --- /dev/null +++ b/scales/burt_primes.scl @@ -0,0 +1,59 @@ +! burt_primes.scl +! +Warren Burt, primes until 251. "Some Numbers", Dec. 2002 + 54 +! + 131/128 + 67/64 + 17/16 + 137/128 + 139/128 + 71/64 + 73/64 + 37/32 + 149/128 + 151/128 + 19/16 + 157/128 + 79/64 + 5/4 + 163/128 + 41/32 + 83/64 + 167/128 + 43/32 + 173/128 + 11/8 + 89/64 + 179/128 + 181/128 + 23/16 + 47/32 + 191/128 + 3/2 + 193/128 + 97/64 + 197/128 + 199/128 + 101/64 + 103/64 + 13/8 + 211/128 + 53/32 + 107/64 + 109/64 + 223/128 + 7/4 + 113/64 + 227/128 + 229/128 + 29/16 + 233/128 + 59/32 + 239/128 + 241/128 + 61/32 + 31/16 + 251/128 + 127/64 + 2/1 diff --git a/scales/buselik pentachord 13-limit.scl b/scales/buselik pentachord 13-limit.scl new file mode 100644 index 0000000..300f041 --- /dev/null +++ b/scales/buselik pentachord 13-limit.scl @@ -0,0 +1,9 @@ +! buselik pentachord 13-limit.scl +! +Buselik pentachord 132:147:156:176:198 + 4 +! + 49/44 + 13/11 + 4/3 + 3/2 diff --git a/scales/buselik pentachord 19-limit.scl b/scales/buselik pentachord 19-limit.scl new file mode 100644 index 0000000..9b9ebe5 --- /dev/null +++ b/scales/buselik pentachord 19-limit.scl @@ -0,0 +1,9 @@ +! buselik pentachord 19-limit.scl +! +Buselik pentachord 48:54:57:64:72 + 4 +! + 9/8 + 19/16 + 4/3 + 3/2 diff --git a/scales/buselik tetrachord 13-limit.scl b/scales/buselik tetrachord 13-limit.scl new file mode 100644 index 0000000..4632088 --- /dev/null +++ b/scales/buselik tetrachord 13-limit.scl @@ -0,0 +1,8 @@ +! buselik tetrachord 13-limit.scl +! +Buselik tetrachord 132:147:156:176 + 3 +! + 49/44 + 13/11 + 4/3 diff --git a/scales/buselik tetrachord 19-limit.scl b/scales/buselik tetrachord 19-limit.scl new file mode 100644 index 0000000..2cd12de --- /dev/null +++ b/scales/buselik tetrachord 19-limit.scl @@ -0,0 +1,8 @@ +! buselik tetrachord 19-limit.scl +! +Buselik tetrachord 48:54:57:64 + 3 +! + 9/8 + 19/16 + 4/3 diff --git a/scales/bushmen.scl b/scales/bushmen.scl new file mode 100644 index 0000000..c47a5bb --- /dev/null +++ b/scales/bushmen.scl @@ -0,0 +1,9 @@ +! bushmen.scl +! +Observed scale of South-African bushmen, almost (4 notes) equal pentatonic + 4 +! + 489.00000 + 710.00000 + 954.00000 + 2/1 diff --git a/scales/buurman.scl b/scales/buurman.scl new file mode 100644 index 0000000..882725a --- /dev/null +++ b/scales/buurman.scl @@ -0,0 +1,17 @@ +! buurman.scl +! +Buurman temperament, 1/8-Pyth. comma, organ Doetinchem Gereformeerde Gemeentekerk + 12 +! + 93.15750 + 198.04500 + 297.06750 + 396.09000 + 500.97750 + 594.13500 + 699.02250 + 795.11250 + 897.06750 + 999.02250 + 1095.11250 + 2/1 diff --git a/scales/buzurg10decoid.scl b/scales/buzurg10decoid.scl new file mode 100644 index 0000000..5bc3c38 --- /dev/null +++ b/scales/buzurg10decoid.scl @@ -0,0 +1,15 @@ +! buzurg10decoid.scl +! +buzurg_al-erin10 in decoid temperament, POTE tuning + 10 +! + 128.91679 + 231.08321 + 360.00000 + 497.83359 + 626.75038 + 702.16641 + 831.08321 + 933.24962 + 1062.16641 + 2/1 diff --git a/scales/buzurg_al-erin10.scl b/scales/buzurg_al-erin10.scl new file mode 100644 index 0000000..9e80fff --- /dev/null +++ b/scales/buzurg_al-erin10.scl @@ -0,0 +1,15 @@ +! buzurg_al-erin10.scl +! +Decatonic with septimal Buzurg, Rastlike modes (cf. Secor, blarney.txt) + 10 +! + 14/13 + 8/7 + 16/13 + 4/3 + 56/39 + 3/2 + 21/13 + 12/7 + 24/13 + 2/1 diff --git a/scales/cairo.scl b/scales/cairo.scl new file mode 100644 index 0000000..1b1caf2 --- /dev/null +++ b/scales/cairo.scl @@ -0,0 +1,31 @@ +! cairo.scl +! +d'Erlanger vol.5, p. 42. Congress of Arabic Music, Cairo, 1932 + 26 +! + 625/607 + 5000/4739 + 400/367 + 1000/891 + 1250/1087 + 2000/1689 + 500/419 + 400/327 + 5000/3989 + 2500/1937 + 4/3 + 250/183 + 10000/7111 + 10000/6881 + 3/2 + 2500/1631 + 1000/631 + 1000/627 + 2500/1529 + 500/297 + 10000/5789 + 500/279 + 200/109 + 250/133 + 125/64 + 2/1 diff --git a/scales/cal46.scl b/scales/cal46.scl new file mode 100644 index 0000000..f0be48a --- /dev/null +++ b/scales/cal46.scl @@ -0,0 +1,51 @@ +! cal46.scl +! +Gene Ward Smith, 46 note scale for Caleb + 46 +! + 22.92510 + 56.25760 + 80.63690 + 104.06120 + 126.61710 + 160.40260 + 184.73570 + 208.17100 + 231.93080 + 263.21920 + 288.77110 + 311.22890 + 336.78080 + 368.06920 + 391.82900 + 415.26430 + 439.59740 + 473.38290 + 495.93880 + 519.36310 + 543.74240 + 577.07490 + 600.00000 + 622.92510 + 656.25760 + 680.63690 + 704.06120 + 726.61710 + 760.40260 + 784.73570 + 808.17100 + 831.93080 + 863.21920 + 888.77110 + 911.22890 + 936.78080 + 968.06920 + 991.82900 + 1015.26430 + 1039.59740 + 1073.38290 + 1095.93880 + 1119.36310 + 1143.74240 + 1177.07490 + 2/1 diff --git a/scales/canright.scl b/scales/canright.scl new file mode 100644 index 0000000..ef7c07d --- /dev/null +++ b/scales/canright.scl @@ -0,0 +1,14 @@ +! canright.scl +! +David Canright's piano tuning for "Fibonacci Suite" (2001). Also 84-tET version of 11-limit "Orwell" + 9 +! + 157.14286 + 271.42857 + 428.57143 + 542.85714 + 700.00000 + 814.28571 + 971.42857 + 1085.71429 + 2/1 diff --git a/scales/canton.scl b/scales/canton.scl new file mode 100644 index 0000000..3938846 --- /dev/null +++ b/scales/canton.scl @@ -0,0 +1,17 @@ +! canton.scl +! +Jake Freivald, a 2.3.11/7.13/7 subgroup scale + 12 +! + 14/13 + 9/8 + 13/11 + 14/11 + 4/3 + 39/28 + 3/2 + 11/7 + 22/13 + 16/9 + 13/7 + 2/1 diff --git a/scales/cantonpenta.scl b/scales/cantonpenta.scl new file mode 100644 index 0000000..17ede7f --- /dev/null +++ b/scales/cantonpenta.scl @@ -0,0 +1,16 @@ +! cantonpenta.scl +Canton scale in 13-limit pentacircle (351/350 and 364/363) temperament, 271-tET +12 +! +128.41328 +208.11808 +287.82288 +416.23616 +495.94096 +575.64576 +704.05904 +783.76384 +912.17712 +991.88192 +1071.58672 +2/1 diff --git a/scales/capurso.scl b/scales/capurso.scl new file mode 100644 index 0000000..c516db0 --- /dev/null +++ b/scales/capurso.scl @@ -0,0 +1,17 @@ +! capurso.scl +! +Equal temperament with equal beating 3/1 = 4/1 opposite (2009). Circular Harmonic System C.HA.S. + 12 +! + 100.03832 + 200.07664 + 300.11496 + 400.15327 + 500.19159 + 600.22991 + 700.26823 + 800.30655 + 900.34487 + 1000.38318 + 1100.42150 + 1200.45982 diff --git a/scales/carlos_alpha.scl b/scales/carlos_alpha.scl new file mode 100644 index 0000000..4de3b49 --- /dev/null +++ b/scales/carlos_alpha.scl @@ -0,0 +1,23 @@ +! carlos_alpha.scl +! +Wendy Carlos' Alpha scale with perfect fifth divided in nine + 18 +! + 78.00000 + 156.00000 + 234.00000 + 312.00000 + 390.00000 + 468.00000 + 546.00000 + 624.00000 + 702.00000 + 780.00000 + 858.00000 + 936.00000 + 1014.00000 + 1092.00000 + 1170.00000 + 1248.00000 + 1326.00000 + 1404.00000 diff --git a/scales/carlos_alpha2.scl b/scales/carlos_alpha2.scl new file mode 100644 index 0000000..91755b0 --- /dev/null +++ b/scales/carlos_alpha2.scl @@ -0,0 +1,41 @@ +! carlos_alpha2.scl +! +Wendy Carlos' Alpha prime scale with perfect fifth divided by eightteen + 36 +! + 39.00000 + 78.00000 + 117.00000 + 156.00000 + 195.00000 + 234.00000 + 273.00000 + 312.00000 + 351.00000 + 390.00000 + 429.00000 + 468.00000 + 507.00000 + 546.00000 + 585.00000 + 624.00000 + 663.00000 + 702.00000 + 741.00000 + 780.00000 + 819.00000 + 858.00000 + 897.00000 + 936.00000 + 975.00000 + 1014.00000 + 1053.00000 + 1092.00000 + 1131.00000 + 1170.00000 + 1209.00000 + 1248.00000 + 1287.00000 + 1326.00000 + 1365.00000 + 1404.00000 diff --git a/scales/carlos_beta.scl b/scales/carlos_beta.scl new file mode 100644 index 0000000..1412757 --- /dev/null +++ b/scales/carlos_beta.scl @@ -0,0 +1,27 @@ +! carlos_beta.scl +! +Wendy Carlos' Beta scale with perfect fifth divided by eleven + 22 +! + 63.80000 + 127.60000 + 191.40000 + 255.20000 + 319.00000 + 382.80000 + 446.60000 + 510.40000 + 574.20000 + 638.00000 + 701.80000 + 765.60000 + 829.40000 + 893.20000 + 957.00000 + 1020.80000 + 1084.60000 + 1148.40000 + 1212.20000 + 1276.00000 + 1339.80000 + 1403.60000 diff --git a/scales/carlos_beta2.scl b/scales/carlos_beta2.scl new file mode 100644 index 0000000..f26b8a2 --- /dev/null +++ b/scales/carlos_beta2.scl @@ -0,0 +1,49 @@ +! carlos_beta2.scl +! +Wendy Carlos' Beta prime scale with perfect fifth divided by twentytwo + 44 +! + 31.90000 + 63.80000 + 95.70000 + 127.60000 + 159.50000 + 191.40000 + 223.30000 + 255.20000 + 287.10000 + 319.00000 + 350.90000 + 382.80000 + 414.70000 + 446.60000 + 478.50000 + 510.40000 + 542.30000 + 574.20000 + 606.10000 + 638.00000 + 669.90000 + 701.80000 + 733.70000 + 765.60000 + 797.50000 + 829.40000 + 861.30000 + 893.20000 + 925.10000 + 957.00000 + 988.90000 + 1020.80000 + 1052.70000 + 1084.60000 + 1116.50000 + 1148.40000 + 1180.30000 + 1212.20000 + 1244.10000 + 1276.00000 + 1307.90000 + 1339.80000 + 1371.70000 + 1403.60000 diff --git a/scales/carlos_gamma.scl b/scales/carlos_gamma.scl new file mode 100644 index 0000000..0a6afd7 --- /dev/null +++ b/scales/carlos_gamma.scl @@ -0,0 +1,40 @@ +! carlos_Gamma.scl +! +Wendy Carlos' Gamma scale with third divided by eleven or fifth by twenty + 35 +! + 35.09900 + 70.19800 + 105.29700 + 140.39600 + 175.49500 + 210.59400 + 245.69300 + 280.79200 + 315.89100 + 350.99000 + 386.08900 + 421.18800 + 456.28700 + 491.38600 + 526.48500 + 561.58400 + 596.68300 + 631.78200 + 666.88100 + 701.98000 + 737.07900 + 772.17800 + 807.27700 + 842.37600 + 877.47500 + 912.57400 + 947.67300 + 982.77200 + 1017.87100 + 1052.97000 + 1088.06900 + 1123.16800 + 1158.26700 + 1193.36600 + 1228.46500 diff --git a/scales/carlos_harm.scl b/scales/carlos_harm.scl new file mode 100644 index 0000000..1f54d76 --- /dev/null +++ b/scales/carlos_harm.scl @@ -0,0 +1,17 @@ +! carlos_harm.scl +! +Carlos Harmonic & Ben Johnston's scale of 'Blues' from Suite f.micr.piano (1977) & David Beardsley's scale of 'Science Friction' + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 13/8 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/carlos_super.scl b/scales/carlos_super.scl new file mode 100644 index 0000000..77c3a14 --- /dev/null +++ b/scales/carlos_super.scl @@ -0,0 +1,17 @@ +! carlos_super.scl +! +Carlos Super Just + 12 +! + 17/16 + 9/8 + 6/5 + 5/4 + 4/3 + 11/8 + 3/2 + 13/8 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/carlson.scl b/scales/carlson.scl new file mode 100644 index 0000000..2d44eeb --- /dev/null +++ b/scales/carlson.scl @@ -0,0 +1,24 @@ +! carlson.scl +! +Brian Carlson's guitar scale (or 7 is 21/16 instead) fretted by Mark Rankin + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/cassandra1.scl b/scales/cassandra1.scl new file mode 100644 index 0000000..a8c3fa1 --- /dev/null +++ b/scales/cassandra1.scl @@ -0,0 +1,46 @@ +! cassandra1.scl +! +Cassandra temperament (Erv Wilson), 13-limit, g=497.866 + 41 +! + 25.60083 + 63.73216 + 89.33299 + 114.93381 + 140.53464 + 178.66598 + 204.26680 + 229.86763 + 267.99897 + 293.59979 + 319.20062 + 344.80144 + 382.93278 + 408.53361 + 434.13443 + 472.26577 + 497.86660 + 523.46742 + 549.06825 + 587.19959 + 612.80041 + 638.40124 + 676.53258 + 702.13340 + 727.73423 + 765.86557 + 791.46639 + 817.06722 + 842.66804 + 880.79938 + 906.40021 + 932.00103 + 970.13237 + 995.73320 + 1021.33402 + 1046.93485 + 1085.06619 + 1110.66701 + 1136.26784 + 1174.39917 + 2/1 diff --git a/scales/cassandra2.scl b/scales/cassandra2.scl new file mode 100644 index 0000000..d8a23ec --- /dev/null +++ b/scales/cassandra2.scl @@ -0,0 +1,46 @@ +! cassandra2.scl +! +Cassandra temperament, schismic variant, 13-limit, g=497.395 + 41 +! + 24.44514 + 55.70922 + 86.97330 + 111.41844 + 142.68252 + 173.94660 + 198.39174 + 229.65582 + 260.91990 + 292.18398 + 316.62912 + 347.89320 + 379.15728 + 403.60242 + 434.86650 + 466.13058 + 497.39466 + 521.83980 + 553.10388 + 584.36796 + 608.81310 + 640.07718 + 671.34126 + 702.60534 + 727.05048 + 758.31456 + 789.57864 + 814.02378 + 845.28786 + 876.55194 + 900.99708 + 932.26116 + 963.52524 + 994.78932 + 1019.23446 + 1050.49854 + 1081.76262 + 1106.20776 + 1137.47184 + 1168.73592 + 2/1 diff --git a/scales/catakleismic34.scl b/scales/catakleismic34.scl new file mode 100644 index 0000000..68fe2bc --- /dev/null +++ b/scales/catakleismic34.scl @@ -0,0 +1,39 @@ +! catakleismic34.scl +! +Catakleismic[34] 11-limit 3.5 cents lesfip optimized + 34 +! +16.49695 +66.29540 +84.05375 +134.00830 +150.79237 +199.33786 +249.33368 +266.98536 +316.80742 +333.19956 +383.02162 +400.67330 +450.66912 +499.21461 +515.99868 +565.95323 +583.71158 +633.51003 +650.00698 +700.38204 +717.29515 +766.76698 +816.00493 +832.67380 +882.78493 +899.92196 +950.08502 +967.22205 +1017.33318 +1034.00205 +1083.24000 +1132.71183 +1149.62494 +2/1 diff --git a/scales/catakleismic34semitransversal.scl b/scales/catakleismic34semitransversal.scl new file mode 100644 index 0000000..7f95386 --- /dev/null +++ b/scales/catakleismic34semitransversal.scl @@ -0,0 +1,22 @@ +! catakleismic34semitransversal.scl +! +17 note 2.3.7 semitransversal of Catakleismic[34] + 17 +! + 28/27 + 243/224 + 9/8 + 7/6 + 243/196 + 9/7 + 4/3 + 112/81 + 81/56 + 3/2 + 14/9 + 392/243 + 12/7 + 16/9 + 448/243 + 27/14 + 2/1 diff --git a/scales/catakleismic34trans.scl b/scales/catakleismic34trans.scl new file mode 100644 index 0000000..94e103f --- /dev/null +++ b/scales/catakleismic34trans.scl @@ -0,0 +1,39 @@ +! catakleismic34trans.scl +! +Catakleismic[34] 2.5.7 transversal + 34 +! + 128/125 + 401408/390625 + 48828125/44957696 + 15625/14336 + 125/112 + 28/25 + 3584/3125 + 11239424/9765625 + 1953125/1605632 + 15625/12544 + 5/4 + 32/25 + 100352/78125 + 12845056/9765625 + 78125/57344 + 625/448 + 7/5 + 896/625 + 114688/78125 + 9765625/6422528 + 78125/50176 + 25/16 + 8/5 + 25088/15625 + 3211264/1953125 + 9765625/5619712 + 3125/1792 + 25/14 + 224/125 + 28672/15625 + 89915392/48828125 + 390625/200704 + 125/64 + 2/1 diff --git a/scales/catler.scl b/scales/catler.scl new file mode 100644 index 0000000..04cb044 --- /dev/null +++ b/scales/catler.scl @@ -0,0 +1,29 @@ +! catler.scl +! +Catler 24-tone JI from "Over and Under the 13 Limit", 1/1 3(3) + 24 +! + 33/32 + 16/15 + 9/8 + 8/7 + 7/6 + 6/5 + 128/105 + 16/13 + 5/4 + 21/16 + 4/3 + 11/8 + 45/32 + 16/11 + 3/2 + 8/5 + 13/8 + 5/3 + 27/16 + 7/4 + 16/9 + 24/13 + 15/8 + 2/1 diff --git a/scales/cbrat19.scl b/scales/cbrat19.scl new file mode 100644 index 0000000..608fc7d --- /dev/null +++ b/scales/cbrat19.scl @@ -0,0 +1,25 @@ +! cbrat19.scl +Circulating 19-tone temperament with exact brats, G.W. Smith +! brats = -1 -1 -1 -1 -1 -1 -1 -1 0 3/7 390808/591947 1/2 1/2 1/2 1/2 1/4 0 0 -1 +! adapted from secor_19wt.scl +19 +! +3688037/3546660 +9545591/8866650 +197729/177333 +686317/591110 +6815759/5674656 +441637/354666 +1149379/886665 +395458/295555 +2468497/1773330 +1280918/886665 +264304/177333 +28241/18188 +1141103/709332 +493284/295555 +1026089/591110 +528608/295555 +329881/177333 +686317/354666 +2/1 diff --git a/scales/cdia22.scl b/scales/cdia22.scl new file mode 100644 index 0000000..133973b --- /dev/null +++ b/scales/cdia22.scl @@ -0,0 +1,27 @@ +! cdia22.scl +! +Circulating 22 note scale, two 11-tET cycles 5/4 apart, 11 pure major thirds + 22 +! + 59.04099 + 109.09091 + 168.13190 + 218.18182 + 277.22280 + 327.27273 + 5/4 + 436.36364 + 495.40462 + 545.45454 + 604.49553 + 654.54545 + 713.58644 + 763.63636 + 822.67735 + 872.72727 + 931.76826 + 981.81818 + 1040.85917 + 1090.90909 + 1149.95008 + 2/1 diff --git a/scales/ceb88f.scl b/scales/ceb88f.scl new file mode 100644 index 0000000..16f9ade --- /dev/null +++ b/scales/ceb88f.scl @@ -0,0 +1,18 @@ +! ceb88f.scl +! +88 cents steps with equal beating fifths + 13 +! + 88.21897 + 175.92057 + 264.44880 + 352.44257 + 439.93133 + 528.25538 + 616.05624 + 704.67971 + 792.76342 + 880.33719 + 968.74280 + 1056.62072 + 1144.00000 diff --git a/scales/ceb88s.scl b/scales/ceb88s.scl new file mode 100644 index 0000000..3d2e3c9 --- /dev/null +++ b/scales/ceb88s.scl @@ -0,0 +1,19 @@ +! ceb88s.scl +! +88 cents steps with equal beating sevenths + 14 +! + 88.05984 + 175.91216 + 264.14035 + 352.15228 + 439.95917 + 528.14400 + 616.11482 + 703.88273 + 792.03035 + 879.96589 + 967.70033 + 1055.81601 + 1143.72127 + 1232.00000 diff --git a/scales/ceb88t.scl b/scales/ceb88t.scl new file mode 100644 index 0000000..3470d02 --- /dev/null +++ b/scales/ceb88t.scl @@ -0,0 +1,19 @@ +! ceb88t.scl +! +88 cents steps with equal beating 7/6 thirds + 14 +! + 87.59652 + 175.92414 + 262.95957 + 350.74928 + 439.26203 + 526.47086 + 614.42684 + 703.09889 + 790.45689 + 878.55589 + 967.36495 + 1054.85122 + 1143.07317 + 1232.00000 diff --git a/scales/cet10.scl b/scales/cet10.scl new file mode 100644 index 0000000..dc6b12a --- /dev/null +++ b/scales/cet10.scl @@ -0,0 +1,123 @@ +! cet10.scl +! +20th root of 9/8, on Antonio Soler's tuning box, afinador or templante + 118 +! + 10.19550 + 20.39100 + 30.58650 + 40.78200 + 50.97750 + 61.17300 + 71.36850 + 81.56400 + 91.75950 + 101.95500 + 112.15050 + 122.34600 + 132.54150 + 142.73700 + 152.93250 + 163.12800 + 173.32350 + 183.51900 + 193.71450 + 9/8 + 214.10550 + 224.30100 + 234.49650 + 244.69200 + 254.88750 + 265.08300 + 275.27850 + 285.47400 + 295.66950 + 305.86500 + 316.06050 + 326.25600 + 336.45150 + 346.64700 + 356.84250 + 367.03800 + 377.23350 + 387.42900 + 397.62450 + 81/64 + 418.01550 + 428.21100 + 438.40650 + 448.60200 + 458.79750 + 468.99300 + 479.18850 + 489.38400 + 499.57950 + 509.77500 + 519.97050 + 530.16600 + 540.36150 + 550.55700 + 560.75250 + 570.94800 + 581.14350 + 591.33901 + 601.53451 + 729/512 + 621.92551 + 632.12101 + 642.31651 + 652.51201 + 662.70751 + 672.90301 + 683.09851 + 693.29401 + 703.48951 + 713.68501 + 723.88051 + 734.07601 + 744.27151 + 754.46701 + 764.66251 + 774.85801 + 785.05351 + 795.24901 + 805.44451 + 6561/4096 + 825.83551 + 836.03101 + 846.22651 + 856.42201 + 866.61751 + 876.81301 + 887.00851 + 897.20401 + 907.39951 + 917.59501 + 927.79051 + 937.98601 + 948.18151 + 958.37701 + 968.57251 + 978.76801 + 988.96351 + 999.15901 + 1009.35451 + 59049/32768 + 1029.74551 + 1039.94101 + 1050.13651 + 1060.33201 + 1070.52751 + 1080.72301 + 1090.91851 + 1101.11401 + 1111.30951 + 1121.50501 + 1131.70051 + 1141.89601 + 1152.09151 + 1162.28701 + 1172.48251 + 1182.67801 + 1192.87351 + 1203.06901 diff --git a/scales/cet100.scl b/scales/cet100.scl new file mode 100644 index 0000000..130c228 --- /dev/null +++ b/scales/cet100.scl @@ -0,0 +1,33 @@ +! cet100.scl +! +28th root of 5 + 28 +! + 99.51120 + 199.02241 + 298.53361 + 398.04482 + 497.55602 + 597.06722 + 696.57843 + 796.08963 + 895.60084 + 995.11204 + 1094.62324 + 1194.13445 + 1293.64565 + 1393.15686 + 1492.66806 + 1592.17927 + 1691.69047 + 1791.20167 + 1890.71288 + 1990.22408 + 2089.73529 + 2189.24649 + 2288.75769 + 2388.26890 + 2487.78010 + 2587.29131 + 2686.80251 + 5/1 diff --git a/scales/cet100a.scl b/scales/cet100a.scl new file mode 100644 index 0000000..d62cd59 --- /dev/null +++ b/scales/cet100a.scl @@ -0,0 +1,17 @@ +! cet100a.scl +! +12-tET 5-limit TOP tuning + 12 +! + 99.80617 + 199.61234 + 299.41852 + 399.22469 + 499.03086 + 598.83703 + 698.64321 + 798.44938 + 898.25555 + 998.06172 + 1097.86790 + 1197.67407 diff --git a/scales/cet100b.scl b/scales/cet100b.scl new file mode 100644 index 0000000..a085d2f --- /dev/null +++ b/scales/cet100b.scl @@ -0,0 +1,17 @@ +! cet100b.scl +! +12-tET 5-limit TOP-RMS tuning + 12 +! + 99.87003 + 199.74006 + 299.61009 + 399.48012 + 499.35014 + 599.22017 + 699.09020 + 798.96023 + 898.83026 + 998.70029 + 1098.57032 + 1198.44035 diff --git a/scales/cet105.scl b/scales/cet105.scl new file mode 100644 index 0000000..71573cb --- /dev/null +++ b/scales/cet105.scl @@ -0,0 +1,18 @@ +! cet105.scl +! +13th root of 11/5, has very good 6/5 and 13/8 + 13 +! + 105.00033 + 210.00065 + 315.00098 + 420.00130 + 525.00163 + 630.00195 + 735.00228 + 840.00260 + 945.00293 + 1050.00325 + 1155.00358 + 1260.00390 + 11/5 diff --git a/scales/cet105a.scl b/scales/cet105a.scl new file mode 100644 index 0000000..e2017b4 --- /dev/null +++ b/scales/cet105a.scl @@ -0,0 +1,23 @@ +! cet105a.scl +! +18th root of 3 + 18 +! + 105.66417 + 211.32833 + 316.99250 + 422.65667 + 528.32083 + 633.98500 + 739.64917 + 845.31333 + 950.97750 + 1056.64167 + 1162.30583 + 1267.97000 + 1373.63417 + 1479.29833 + 1584.96250 + 1690.62667 + 1796.29083 + 3/1 diff --git a/scales/cet108.scl b/scales/cet108.scl new file mode 100644 index 0000000..0e7360f --- /dev/null +++ b/scales/cet108.scl @@ -0,0 +1,16 @@ +! cet108.scl +! +4th root of 9/7, Chris Vaisvil + 11 +! + 108.77102 + 217.54205 + 326.31307 + 9/7 + 543.85512 + 652.62614 + 761.39717 + 81/49 + 978.93921 + 1087.71024 + 1196.48126 diff --git a/scales/cet11.scl b/scales/cet11.scl new file mode 100644 index 0000000..88e6162 --- /dev/null +++ b/scales/cet11.scl @@ -0,0 +1,117 @@ +! cet11.scl +! +36th root of 5/4, Mohajeri Shahin + 112 +! + 10.73094 + 21.46187 + 32.19281 + 42.92375 + 53.65468 + 64.38562 + 75.11656 + 85.84749 + 96.57843 + 107.30936 + 118.04030 + 128.77124 + 139.50217 + 150.23311 + 160.96405 + 171.69498 + 182.42592 + 193.15686 + 203.88779 + 214.61873 + 225.34967 + 236.08060 + 246.81154 + 257.54248 + 268.27341 + 279.00435 + 289.73529 + 300.46622 + 311.19716 + 321.92809 + 332.65903 + 343.38997 + 354.12090 + 364.85184 + 375.58278 + 5/4 + 397.04465 + 407.77559 + 418.50652 + 429.23746 + 439.96840 + 450.69933 + 461.43027 + 472.16121 + 482.89214 + 493.62308 + 504.35402 + 515.08495 + 525.81589 + 536.54682 + 547.27776 + 558.00870 + 568.73963 + 579.47057 + 590.20151 + 600.93244 + 611.66338 + 622.39432 + 633.12525 + 643.85619 + 654.58713 + 665.31806 + 676.04900 + 686.77994 + 697.51087 + 708.24181 + 718.97275 + 729.70368 + 740.43462 + 751.16555 + 761.89649 + 25/16 + 783.35836 + 794.08930 + 804.82024 + 815.55117 + 826.28211 + 837.01305 + 847.74398 + 858.47492 + 869.20586 + 879.93679 + 890.66773 + 901.39867 + 912.12960 + 922.86054 + 933.59148 + 944.32241 + 955.05335 + 965.78428 + 976.51522 + 987.24616 + 997.97709 + 1008.70803 + 1019.43897 + 1030.16990 + 1040.90084 + 1051.63178 + 1062.36271 + 1073.09365 + 1083.82459 + 1094.55552 + 1105.28646 + 1116.01740 + 1126.74833 + 1137.47927 + 1148.21021 + 125/64 + 1169.67208 + 1180.40301 + 1191.13395 + 1201.86489 diff --git a/scales/cet111.scl b/scales/cet111.scl new file mode 100644 index 0000000..323580f --- /dev/null +++ b/scales/cet111.scl @@ -0,0 +1,30 @@ +! cet111.scl +! +25th root of 5, Karlheinz Stockhausen in "Studie II" (1954) + 25 +! + 111.45255 + 222.90510 + 334.35765 + 445.81019 + 557.26274 + 668.71529 + 780.16784 + 891.62039 + 1003.07294 + 1114.52549 + 1225.97803 + 1337.43058 + 1448.88313 + 1560.33568 + 1671.78823 + 1783.24078 + 1894.69333 + 2006.14587 + 2117.59842 + 2229.05097 + 2340.50352 + 2451.95607 + 2563.40862 + 2674.86117 + 5/1 diff --git a/scales/cet111a.scl b/scales/cet111a.scl new file mode 100644 index 0000000..9b18761 --- /dev/null +++ b/scales/cet111a.scl @@ -0,0 +1,22 @@ +! cet111a.scl +! +17th root of 3. McLaren 'Microtonal Music', volume 1, track 8 + 17 +! + 111.87971 + 223.75941 + 335.63912 + 447.51882 + 559.39853 + 671.27824 + 783.15794 + 895.03765 + 1006.91735 + 1118.79706 + 1230.67677 + 1342.55647 + 1454.43618 + 1566.31588 + 1678.19559 + 1790.07529 + 3/1 diff --git a/scales/cet112.scl b/scales/cet112.scl new file mode 100644 index 0000000..dc1eb1e --- /dev/null +++ b/scales/cet112.scl @@ -0,0 +1,58 @@ +! cet112.scl +! +53rd root of 31. McLaren 'Microtonal Music', volume 4, track 16 + 53 +! + 112.17048 + 224.34096 + 336.51145 + 448.68193 + 560.85241 + 673.02289 + 785.19338 + 897.36386 + 1009.53434 + 1121.70482 + 1233.87531 + 1346.04579 + 1458.21627 + 1570.38675 + 1682.55724 + 1794.72772 + 1906.89820 + 2019.06868 + 2131.23917 + 2243.40965 + 2355.58013 + 2467.75061 + 2579.92110 + 2692.09158 + 2804.26206 + 2916.43254 + 3028.60303 + 3140.77351 + 3252.94399 + 3365.11447 + 3477.28496 + 3589.45544 + 3701.62592 + 3813.79640 + 3925.96689 + 4038.13737 + 4150.30785 + 4262.47833 + 4374.64882 + 4486.81930 + 4598.98978 + 4711.16026 + 4823.33075 + 4935.50123 + 5047.67171 + 5159.84219 + 5272.01268 + 5384.18316 + 5496.35364 + 5608.52412 + 5720.69461 + 5832.86509 + 31/1 diff --git a/scales/cet114.scl b/scales/cet114.scl new file mode 100644 index 0000000..74eb28e --- /dev/null +++ b/scales/cet114.scl @@ -0,0 +1,26 @@ +! cet114.scl +! +21st root of 4 + 21 +! + 114.28571 + 228.57143 + 342.85714 + 457.14286 + 571.42857 + 685.71429 + 800.00000 + 914.28571 + 1028.57143 + 1142.85714 + 1257.14286 + 1371.42857 + 1485.71429 + 1600.00000 + 1714.28571 + 1828.57143 + 1942.85714 + 2057.14286 + 2171.42857 + 2285.71429 + 4/1 diff --git a/scales/cet115.scl b/scales/cet115.scl new file mode 100644 index 0000000..53b7289 --- /dev/null +++ b/scales/cet115.scl @@ -0,0 +1,15 @@ +! cet115.scl +! +2nd root of 8/7. Werner Linden, Musiktheorie, 2003 no.1 midi 15.Eb=19.44544 Hz + 10 +! + 115.58705 + 8/7 + 346.76114 + 64/49 + 577.93523 + 512/343 + 809.10933 + 4096/2401 + 1040.28342 + 32768/16807 diff --git a/scales/cet116.scl b/scales/cet116.scl new file mode 100644 index 0000000..2a0b58e --- /dev/null +++ b/scales/cet116.scl @@ -0,0 +1,36 @@ +! cet116.scl +! +31st root of 8, Jake Freivald in "A Call in Summer" + 31 +! + 116.12903 + 232.25806 + 348.38710 + 464.51613 + 580.64516 + 696.77419 + 812.90323 + 929.03226 + 1045.16129 + 1161.29032 + 1277.41935 + 1393.54839 + 1509.67742 + 1625.80645 + 1741.93548 + 1858.06452 + 1974.19355 + 2090.32258 + 2206.45161 + 2322.58065 + 2438.70968 + 2554.83871 + 2670.96774 + 2787.09677 + 2903.22581 + 3019.35484 + 3135.48387 + 3251.61290 + 3367.74194 + 3483.87097 + 8/1 diff --git a/scales/cet117.scl b/scales/cet117.scl new file mode 100644 index 0000000..b7b9f99 --- /dev/null +++ b/scales/cet117.scl @@ -0,0 +1,41 @@ +! cet117.scl +! +72nd root of 128, step = generator of Miracle + 36 +! + 116.66667 + 233.33333 + 350.00000 + 466.66667 + 583.33333 + 700.00000 + 816.66667 + 933.33333 + 1050.00000 + 1166.66667 + 1283.33333 + 1400.00000 + 1516.66667 + 1633.33333 + 1750.00000 + 1866.66667 + 1983.33333 + 2100.00000 + 2216.66667 + 2333.33333 + 2450.00000 + 2566.66667 + 2683.33333 + 2800.00000 + 2916.66667 + 3033.33333 + 3150.00000 + 3266.66667 + 3383.33333 + 3500.00000 + 3616.66667 + 3733.33333 + 3850.00000 + 3966.66667 + 4083.33333 + 4200.00000 diff --git a/scales/cet117a.scl b/scales/cet117a.scl new file mode 100644 index 0000000..28f4a72 --- /dev/null +++ b/scales/cet117a.scl @@ -0,0 +1,16 @@ +! cet117a.scl +! +6th root of 3/2 + 11 +! + 116.99250 + 233.98500 + 350.97750 + 467.97000 + 584.96250 + 3/2 + 818.94750 + 935.94000 + 1052.93250 + 1169.92500 + 1286.91750 diff --git a/scales/cet118.scl b/scales/cet118.scl new file mode 100644 index 0000000..bc1fc29 --- /dev/null +++ b/scales/cet118.scl @@ -0,0 +1,21 @@ +! cet118.scl +! +16th root of 3. McLaren 'Microtonal Music', volume 1, track 7 + 16 +! + 118.87219 + 237.74438 + 356.61656 + 475.48875 + 594.36094 + 713.23313 + 832.10531 + 950.97750 + 1069.84969 + 1188.72188 + 1307.59406 + 1426.46625 + 1545.33844 + 1664.21063 + 1783.08281 + 3/1 diff --git a/scales/cet119.scl b/scales/cet119.scl new file mode 100644 index 0000000..a660c1b --- /dev/null +++ b/scales/cet119.scl @@ -0,0 +1,15 @@ +! cet119.scl +! +7th root of phi + 10 +! + 119.01290 + 238.02580 + 357.03870 + 476.05160 + 595.06450 + 714.07740 + 833.09030 + 952.10320 + 1071.11610 + 1190.12899 diff --git a/scales/cet125.scl b/scales/cet125.scl new file mode 100644 index 0000000..9691047 --- /dev/null +++ b/scales/cet125.scl @@ -0,0 +1,15 @@ +! cet125.scl +! +125 cents steps + 10 +! + 125.00000 + 250.00000 + 375.00000 + 500.00000 + 625.00000 + 750.00000 + 875.00000 + 1000.00000 + 1125.00000 + 1250.00000 diff --git a/scales/cet126.scl b/scales/cet126.scl new file mode 100644 index 0000000..98da003 --- /dev/null +++ b/scales/cet126.scl @@ -0,0 +1,20 @@ +! cet126.scl +! +15th root of 3. McLaren 'Microtonal Music', volume 1, track 6 + 15 +! + 126.79700 + 253.59400 + 380.39100 + 507.18800 + 633.98500 + 760.78200 + 887.57900 + 1014.37600 + 1141.17300 + 1267.97000 + 1394.76700 + 1521.56400 + 1648.36100 + 1775.15800 + 3/1 diff --git a/scales/cet126a.scl b/scales/cet126a.scl new file mode 100644 index 0000000..ad9d127 --- /dev/null +++ b/scales/cet126a.scl @@ -0,0 +1,24 @@ +! cet126a.scl +! +19th root of 4 + 19 +! + 126.31579 + 252.63158 + 378.94737 + 505.26316 + 631.57895 + 757.89474 + 884.21053 + 1010.52632 + 1136.84211 + 1263.15789 + 1389.47368 + 1515.78947 + 1642.10526 + 1768.42105 + 1894.73684 + 2021.05263 + 2147.36842 + 2273.68421 + 4/1 diff --git a/scales/cet133.scl b/scales/cet133.scl new file mode 100644 index 0000000..29c036f --- /dev/null +++ b/scales/cet133.scl @@ -0,0 +1,18 @@ +! cet133.scl +! +13th root of e + 13 +! + 133.17185 + 266.34370 + 399.51555 + 532.68740 + 665.85925 + 799.03110 + 932.20295 + 1065.37480 + 1198.54665 + 1331.71850 + 1464.89035 + 1598.06220 + 1731.23405 diff --git a/scales/cet139.scl b/scales/cet139.scl new file mode 100644 index 0000000..52ca946 --- /dev/null +++ b/scales/cet139.scl @@ -0,0 +1,25 @@ +! cet139.scl +! +20th root of 5, Hieronymus' tuning + 20 +! + 139.31569 + 278.63137 + 417.94706 + 557.26274 + 696.57843 + 835.89411 + 975.20980 + 1114.52549 + 1253.84117 + 1393.15686 + 1532.47254 + 1671.78823 + 1811.10391 + 1950.41960 + 2089.73529 + 2229.05097 + 2368.36666 + 2507.68234 + 2646.99803 + 5/1 diff --git a/scales/cet140.scl b/scales/cet140.scl new file mode 100644 index 0000000..13ffc2a --- /dev/null +++ b/scales/cet140.scl @@ -0,0 +1,29 @@ +! cet140.scl +! +24th root of 7 + 24 +! + 140.36775 + 280.73549 + 421.10324 + 561.47098 + 701.83873 + 842.20648 + 982.57422 + 1122.94197 + 1263.30971 + 1403.67746 + 1544.04521 + 1684.41295 + 1824.78070 + 1965.14845 + 2105.51619 + 2245.88394 + 2386.25168 + 2526.61943 + 2666.98718 + 2807.35492 + 2947.72267 + 3088.09041 + 3228.45816 + 7/1 diff --git a/scales/cet141.scl b/scales/cet141.scl new file mode 100644 index 0000000..531e4eb --- /dev/null +++ b/scales/cet141.scl @@ -0,0 +1,22 @@ +! cet141.scl +! +17th root of 4 + 17 +! + 141.17647 + 282.35294 + 423.52941 + 564.70588 + 705.88235 + 847.05882 + 988.23529 + 1129.41176 + 1270.58824 + 1411.76471 + 1552.94118 + 1694.11765 + 1835.29412 + 1976.47059 + 2117.64706 + 2258.82353 + 4/1 diff --git a/scales/cet148.scl b/scales/cet148.scl new file mode 100644 index 0000000..fc0e689 --- /dev/null +++ b/scales/cet148.scl @@ -0,0 +1,26 @@ +! cet148.scl +! +21th root of 6, Moreno's C-21 + 21 +! + 147.71214 + 295.42429 + 443.13643 + 590.84857 + 738.56071 + 886.27286 + 1033.98500 + 1181.69714 + 1329.40929 + 1477.12143 + 1624.83357 + 1772.54571 + 1920.25786 + 2067.97000 + 2215.68214 + 2363.39429 + 2511.10643 + 2658.81857 + 2806.53072 + 2954.24286 + 6/1 diff --git a/scales/cet152.scl b/scales/cet152.scl new file mode 100644 index 0000000..a4bab89 --- /dev/null +++ b/scales/cet152.scl @@ -0,0 +1,18 @@ +! cet152.scl +! +13th root of pi + 13 +! + 152.44600 + 304.89200 + 457.33700 + 609.78300 + 762.22900 + 914.67500 + 1067.12100 + 1219.56600 + 1372.01200 + 1524.45800 + 1676.90400 + 1829.35000 + 1981.79600 diff --git a/scales/cet158.scl b/scales/cet158.scl new file mode 100644 index 0000000..49fdecb --- /dev/null +++ b/scales/cet158.scl @@ -0,0 +1,17 @@ +! cet158.scl +! +12th root of 3, Moreno's A-12, see dissertation "Embedding Equal Pitch Spaces" + 12 +! + 158.49625 + 316.99250 + 475.48875 + 633.98500 + 792.48125 + 950.97750 + 1109.47375 + 1267.97000 + 1426.46625 + 1584.96250 + 1743.45875 + 3/1 diff --git a/scales/cet159.scl b/scales/cet159.scl new file mode 100644 index 0000000..d70a6d5 --- /dev/null +++ b/scales/cet159.scl @@ -0,0 +1,13 @@ +! cet159.scl +! +4e-th root of e. e-th root of e is highest x-th root of x + 8 +! + 159.22135 + 318.44271 + 477.66406 + 636.88541 + 796.10677 + 955.32812 + 1114.54948 + 1273.77083 diff --git a/scales/cet16.scl b/scales/cet16.scl new file mode 100644 index 0000000..499b547 --- /dev/null +++ b/scales/cet16.scl @@ -0,0 +1,77 @@ +! cet16.scl +! +30th root of 4/3, Aristoxenos + 72 +! + 16.60150 + 33.20300 + 49.80450 + 66.40600 + 83.00750 + 99.60900 + 116.21050 + 132.81200 + 149.41350 + 166.01500 + 182.61650 + 199.21800 + 215.81950 + 232.42100 + 249.02250 + 265.62400 + 282.22550 + 298.82700 + 315.42850 + 332.03000 + 348.63150 + 365.23300 + 381.83450 + 398.43600 + 415.03750 + 431.63900 + 448.24050 + 464.84200 + 481.44350 + 4/3 + 514.64650 + 531.24800 + 547.84950 + 564.45100 + 581.05250 + 597.65400 + 614.25550 + 630.85700 + 647.45850 + 664.06000 + 680.66150 + 697.26300 + 713.86450 + 730.46600 + 747.06750 + 763.66900 + 780.27050 + 796.87200 + 813.47350 + 830.07500 + 846.67650 + 863.27800 + 879.87950 + 896.48100 + 913.08250 + 929.68400 + 946.28550 + 962.88700 + 979.48850 + 16/9 + 1012.69150 + 1029.29300 + 1045.89450 + 1062.49600 + 1079.09750 + 1095.69900 + 1112.30050 + 1128.90200 + 1145.50350 + 1162.10500 + 1178.70650 + 1195.30800 diff --git a/scales/cet160.scl b/scales/cet160.scl new file mode 100644 index 0000000..47274f1 --- /dev/null +++ b/scales/cet160.scl @@ -0,0 +1,20 @@ +! cet160.scl +! +15th root of 4, Rudolf Escher in "The Long Christmas Dinner" (1960) + 15 +! + 160.00000 + 320.00000 + 480.00000 + 640.00000 + 800.00000 + 960.00000 + 1120.00000 + 1280.00000 + 1440.00000 + 1600.00000 + 1760.00000 + 1920.00000 + 2080.00000 + 2240.00000 + 4/1 diff --git a/scales/cet160a.scl b/scales/cet160a.scl new file mode 100644 index 0000000..62185ba --- /dev/null +++ b/scales/cet160a.scl @@ -0,0 +1,42 @@ +! cet160a.scl +! +37th root of 31. McLaren 'Microtonal Music', volume 2, track 7 + 37 +! + 160.67664 + 321.35327 + 482.02991 + 642.70655 + 803.38319 + 964.05982 + 1124.73646 + 1285.41310 + 1446.08973 + 1606.76637 + 1767.44301 + 1928.11965 + 2088.79628 + 2249.47292 + 2410.14956 + 2570.82619 + 2731.50283 + 2892.17947 + 3052.85610 + 3213.53274 + 3374.20938 + 3534.88602 + 3695.56265 + 3856.23929 + 4016.91593 + 4177.59256 + 4338.26920 + 4498.94584 + 4659.62248 + 4820.29911 + 4980.97575 + 5141.65239 + 5302.32902 + 5463.00566 + 5623.68230 + 5784.35894 + 31/1 diff --git a/scales/cet163.scl b/scales/cet163.scl new file mode 100644 index 0000000..6d749e1 --- /dev/null +++ b/scales/cet163.scl @@ -0,0 +1,14 @@ +! cet163.scl +! +9th root of 7/3. Jeff Scott in "Quiet Moonlight" (2001) + 9 +! + 162.98566 + 325.97131 + 488.95697 + 651.94262 + 814.92828 + 977.91394 + 1140.89959 + 1303.88525 + 7/3 diff --git a/scales/cet163a.scl b/scales/cet163a.scl new file mode 100644 index 0000000..00f183c --- /dev/null +++ b/scales/cet163a.scl @@ -0,0 +1,13 @@ +! cet163a.scl +! +5th root of 8/5 + 8 +! + 162.73726 + 325.47451 + 488.21177 + 650.94903 + 8/5 + 976.42354 + 1139.16080 + 1301.89806 diff --git a/scales/cet166.scl b/scales/cet166.scl new file mode 100644 index 0000000..31b73d7 --- /dev/null +++ b/scales/cet166.scl @@ -0,0 +1,8 @@ +! cet166.scl +! +3rd root of 4/3 + 3 +! + 166.01500 + 332.03000 + 4/3 diff --git a/scales/cet167.scl b/scales/cet167.scl new file mode 100644 index 0000000..784cfa1 --- /dev/null +++ b/scales/cet167.scl @@ -0,0 +1,12 @@ +! cet167.scl +! +5th root of phi + 7 +! + 166.61806 + 333.23612 + 499.85418 + 666.47224 + 833.09030 + 999.70836 + 1166.32641 diff --git a/scales/cet173.scl b/scales/cet173.scl new file mode 100644 index 0000000..5bfc40c --- /dev/null +++ b/scales/cet173.scl @@ -0,0 +1,16 @@ +! cet173.scl +! +11th root of 3, Moreno's A-11 + 11 +! + 172.90500 + 345.81000 + 518.71500 + 691.62000 + 864.52500 + 1037.43000 + 1210.33500 + 1383.24000 + 1556.14500 + 1729.05000 + 3/1 diff --git a/scales/cet175.scl b/scales/cet175.scl new file mode 100644 index 0000000..78ed201 --- /dev/null +++ b/scales/cet175.scl @@ -0,0 +1,12 @@ +! cet175.scl +! +175 cents steps (Georgian) + 7 +! + 175.00000 + 350.00000 + 525.00000 + 700.00000 + 875.00000 + 1050.00000 + 1225.00000 diff --git a/scales/cet175a.scl b/scales/cet175a.scl new file mode 100644 index 0000000..9e71af3 --- /dev/null +++ b/scales/cet175a.scl @@ -0,0 +1,12 @@ +! cet175a.scl +! +4th root of 3/2 + 7 +! + 175.48875 + 350.97750 + 526.46625 + 3/2 + 877.44375 + 1052.93250 + 1228.42125 diff --git a/scales/cet175b.scl b/scales/cet175b.scl new file mode 100644 index 0000000..bf6350c --- /dev/null +++ b/scales/cet175b.scl @@ -0,0 +1,33 @@ +! cet175b.scl +! +28th root of 7. McLaren 'Microtonal Music', volume 6, track 3 + 28 +! + 175.17698 + 350.35396 + 525.53094 + 700.70792 + 875.88489 + 1051.06187 + 1226.23885 + 1401.41583 + 1576.59281 + 1751.76979 + 1926.94677 + 2102.12375 + 2277.30073 + 2452.47770 + 2627.65468 + 2802.83166 + 2978.00864 + 3153.18562 + 3328.36260 + 3503.53958 + 3678.71656 + 3853.89354 + 4029.07051 + 4204.24749 + 4379.42447 + 4554.60145 + 4729.77843 + 17/1 diff --git a/scales/cet178.scl b/scales/cet178.scl new file mode 100644 index 0000000..e76e7ec --- /dev/null +++ b/scales/cet178.scl @@ -0,0 +1,32 @@ +! cet178.scl +! +27th root of 16 + 27 +! + 177.77778 + 355.55556 + 533.33333 + 711.11111 + 888.88889 + 1066.66667 + 1244.44444 + 1422.22222 + 1600.00000 + 1777.77778 + 1955.55556 + 2133.33333 + 2311.11111 + 2488.88889 + 2666.66667 + 2844.44444 + 3022.22222 + 3200.00000 + 3377.77778 + 3555.55556 + 3733.33333 + 3911.11111 + 4088.88889 + 4266.66667 + 4444.44444 + 4622.22222 + 16/1 diff --git a/scales/cet181.scl b/scales/cet181.scl new file mode 100644 index 0000000..9349c08 --- /dev/null +++ b/scales/cet181.scl @@ -0,0 +1,21 @@ +! cet181.scl +! +6.625 tET. The 16/3 is the so-called Kidjel Ratio promoted by Maurice Kidjel in 1958 + 16 +! + 181.12781 + 362.25562 + 543.38344 + 724.51125 + 905.63906 + 1086.76687 + 1267.89469 + 1449.02250 + 1630.15031 + 1811.27812 + 1992.40594 + 2173.53375 + 2354.66156 + 2535.78937 + 2716.91719 + 16/3 diff --git a/scales/cet182.scl b/scales/cet182.scl new file mode 100644 index 0000000..aea9314 --- /dev/null +++ b/scales/cet182.scl @@ -0,0 +1,22 @@ +! cet182.scl +! +17th root of 6, Moreno's C-17 + 17 +! + 182.46794 + 364.93588 + 547.40382 + 729.87176 + 912.33971 + 1094.80765 + 1277.27559 + 1459.74353 + 1642.21147 + 1824.67941 + 2007.14735 + 2189.61529 + 2372.08324 + 2554.55118 + 2737.01912 + 2919.48706 + 6/1 diff --git a/scales/cet195.scl b/scales/cet195.scl new file mode 100644 index 0000000..d4cfb14 --- /dev/null +++ b/scales/cet195.scl @@ -0,0 +1,12 @@ +! cet195.scl +! +7th root of 11/5 + 7 +! + 195.00060 + 390.00121 + 585.00181 + 780.00242 + 975.00302 + 1170.00362 + 11/5 diff --git a/scales/cet198.scl b/scales/cet198.scl new file mode 100644 index 0000000..3f10a13 --- /dev/null +++ b/scales/cet198.scl @@ -0,0 +1,15 @@ +! cet198.scl +! +10th root of pi + 10 +! + 198.17954 + 396.35907 + 594.53861 + 792.71814 + 990.89768 + 1189.07721 + 1387.25675 + 1585.43628 + 1783.61582 + 1981.79536 diff --git a/scales/cet21k.scl b/scales/cet21k.scl new file mode 100644 index 0000000..ddbfa3e --- /dev/null +++ b/scales/cet21k.scl @@ -0,0 +1,61 @@ +! cet21k.scl +! +scale of syntonic comma's, almost 56-tET + 56 +! + 81/80 + 6561/6400 + 531441/512000 + 43046721/40960000 + 107.53145 + 129.03774 + 150.54403 + 172.05032 + 193.55661 + 215.06290 + 236.56919 + 258.07548 + 279.58176 + 301.08805 + 322.59434 + 344.10063 + 365.60692 + 387.11321 + 408.61950 + 430.12579 + 451.63208 + 473.13837 + 494.64466 + 516.15095 + 537.65724 + 559.16353 + 580.66982 + 602.17611 + 623.68240 + 645.18869 + 666.69498 + 688.20127 + 709.70756 + 731.21385 + 752.72014 + 774.22643 + 795.73272 + 817.23900 + 838.74529 + 860.25158 + 881.75787 + 903.26416 + 924.77045 + 946.27674 + 967.78303 + 989.28932 + 1010.79561 + 1032.30190 + 1053.80819 + 1075.31448 + 1096.82077 + 1118.32706 + 1139.83335 + 1161.33964 + 1182.84593 + 1204.35222 diff --git a/scales/cet222.scl b/scales/cet222.scl new file mode 100644 index 0000000..082d25a --- /dev/null +++ b/scales/cet222.scl @@ -0,0 +1,19 @@ +! cet222.scl +! +14th root of 6, Moreno's C-14 + 14 +! + 221.56821 + 443.13643 + 664.70464 + 886.27286 + 1107.84107 + 1329.40929 + 1550.97750 + 1772.54571 + 1994.11393 + 2215.68214 + 2437.25036 + 2658.81857 + 2880.38679 + 6/1 diff --git a/scales/cet233.scl b/scales/cet233.scl new file mode 100644 index 0000000..693df1d --- /dev/null +++ b/scales/cet233.scl @@ -0,0 +1,26 @@ +! cet233.scl +! +21st root of 17, McLaren 'Microtonal Music', volume 2, track 15 + 21 +! + 233.56931 + 467.13861 + 700.70792 + 934.27722 + 1167.84653 + 1401.41583 + 1634.98514 + 1868.55444 + 2102.12375 + 2335.69305 + 2569.26236 + 2802.83166 + 3036.40097 + 3269.97027 + 3503.53958 + 3737.10888 + 3970.67819 + 4204.24749 + 4437.81680 + 4671.38610 + 17/1 diff --git a/scales/cet258.scl b/scales/cet258.scl new file mode 100644 index 0000000..e68bacb --- /dev/null +++ b/scales/cet258.scl @@ -0,0 +1,17 @@ +! cet258.scl +! +12th root of 6, Moreno's C-12 + 12 +! + 258.49625 + 516.99250 + 775.48875 + 1033.98500 + 1292.48125 + 1550.97750 + 1809.47375 + 2067.97000 + 2326.46625 + 2584.96250 + 2843.45875 + 6/1 diff --git a/scales/cet29.scl b/scales/cet29.scl new file mode 100644 index 0000000..cf570de --- /dev/null +++ b/scales/cet29.scl @@ -0,0 +1,100 @@ +! cet29.scl +! +95th root of 5 + 95 +! + 29.32962 + 58.65924 + 87.98885 + 117.31847 + 146.64809 + 175.97771 + 205.30733 + 234.63694 + 263.96656 + 293.29618 + 322.62580 + 351.95542 + 381.28503 + 410.61465 + 439.94427 + 469.27389 + 498.60351 + 527.93312 + 557.26274 + 586.59236 + 615.92198 + 645.25160 + 674.58121 + 703.91083 + 733.24045 + 762.57007 + 791.89969 + 821.22931 + 850.55892 + 879.88854 + 909.21816 + 938.54778 + 967.87740 + 997.20701 + 1026.53663 + 1055.86625 + 1085.19587 + 1114.52549 + 1143.85510 + 1173.18472 + 1202.51434 + 1231.84396 + 1261.17358 + 1290.50319 + 1319.83281 + 1349.16243 + 1378.49205 + 1407.82167 + 1437.15128 + 1466.48090 + 1495.81052 + 1525.14014 + 1554.46976 + 1583.79937 + 1613.12899 + 1642.45861 + 1671.78823 + 1701.11785 + 1730.44746 + 1759.77708 + 1789.10670 + 1818.43632 + 1847.76594 + 1877.09555 + 1906.42517 + 1935.75479 + 1965.08441 + 1994.41403 + 2023.74364 + 2053.07326 + 2082.40288 + 2111.73250 + 2141.06212 + 2170.39174 + 2199.72135 + 2229.05097 + 2258.38059 + 2287.71021 + 2317.03983 + 2346.36944 + 2375.69906 + 2405.02868 + 2434.35830 + 2463.68792 + 2493.01753 + 2522.34715 + 2551.67677 + 2581.00639 + 2610.33601 + 2639.66562 + 2668.99524 + 2698.32486 + 2727.65448 + 2756.98410 + 5/1 diff --git a/scales/cet33.scl b/scales/cet33.scl new file mode 100644 index 0000000..eaba6a7 --- /dev/null +++ b/scales/cet33.scl @@ -0,0 +1,30 @@ +! cet33.scl +! +25th root of phi, Walter OConnell (1993) + 25 +! + 33.32361 + 66.64722 + 99.97084 + 133.29445 + 166.61806 + 199.94167 + 233.26528 + 266.58889 + 299.91251 + 333.23612 + 366.55973 + 399.88334 + 433.20695 + 466.53057 + 499.85418 + 533.17779 + 566.50140 + 599.82501 + 633.14863 + 666.47224 + 699.79585 + 733.11946 + 766.44307 + 799.76668 + 833.09030 diff --git a/scales/cet35.scl b/scales/cet35.scl new file mode 100644 index 0000000..ba5dad3 --- /dev/null +++ b/scales/cet35.scl @@ -0,0 +1,50 @@ +! cet35.scl +! +45th root of 5/2, Caleb Morgan (2010) + 45 +! + 35.25142 + 70.50283 + 105.75425 + 141.00566 + 176.25708 + 211.50850 + 246.75991 + 282.01133 + 317.26274 + 352.51416 + 387.76557 + 423.01699 + 458.26841 + 493.51982 + 528.77124 + 564.02265 + 599.27407 + 634.52549 + 669.77690 + 705.02832 + 740.27973 + 775.53115 + 810.78256 + 846.03398 + 881.28540 + 916.53681 + 951.78823 + 987.03964 + 1022.29106 + 1057.54248 + 1092.79389 + 1128.04531 + 1163.29672 + 1198.54814 + 1233.79956 + 1269.05097 + 1304.30239 + 1339.55380 + 1374.80522 + 1410.05663 + 1445.30805 + 1480.55947 + 1515.81088 + 1551.06230 + 5/2 diff --git a/scales/cet39.scl b/scales/cet39.scl new file mode 100644 index 0000000..4bf1566 --- /dev/null +++ b/scales/cet39.scl @@ -0,0 +1,54 @@ +! cet39.scl +! +49th root of 3 + 49 +! + 38.81541 + 77.63082 + 116.44622 + 155.26163 + 194.07704 + 232.89245 + 271.70786 + 310.52327 + 349.33867 + 388.15408 + 426.96949 + 465.78490 + 504.60031 + 543.41571 + 582.23112 + 621.04653 + 659.86194 + 698.67735 + 737.49276 + 776.30816 + 815.12357 + 853.93898 + 892.75439 + 931.56980 + 970.38520 + 1009.20061 + 1048.01602 + 1086.83143 + 1125.64684 + 1164.46225 + 1203.27765 + 1242.09306 + 1280.90847 + 1319.72388 + 1358.53929 + 1397.35469 + 1436.17010 + 1474.98551 + 1513.80092 + 1552.61633 + 1591.43174 + 1630.24714 + 1669.06255 + 1707.87796 + 1746.69337 + 1785.50878 + 1824.32418 + 1863.13959 + 3/1 diff --git a/scales/cet39a.scl b/scales/cet39a.scl new file mode 100644 index 0000000..7bd302f --- /dev/null +++ b/scales/cet39a.scl @@ -0,0 +1,36 @@ +! cet39a.scl +! +31-tET 7-limit TOP-RMS tuning + 31 +! + 38.73640 + 77.47279 + 116.20919 + 154.94558 + 193.68198 + 232.41837 + 271.15477 + 309.89116 + 348.62756 + 387.36396 + 426.10035 + 464.83675 + 503.57314 + 542.30954 + 581.04593 + 619.78233 + 658.51872 + 697.25512 + 735.99152 + 774.72791 + 813.46431 + 852.20070 + 890.93710 + 929.67349 + 968.40989 + 1007.14628 + 1045.88268 + 1084.61908 + 1123.35547 + 1162.09187 + 1200.82826 diff --git a/scales/cet39b.scl b/scales/cet39b.scl new file mode 100644 index 0000000..5d39354 --- /dev/null +++ b/scales/cet39b.scl @@ -0,0 +1,36 @@ +! cet39b.scl +! +31-tET with l.s. 8/7, 5/4, 4/3, 3/2, 8/5, 7/4, 2/1; equal weights + 31 +! + 38.73000 + 77.46100 + 116.19100 + 154.92200 + 193.65200 + 232.38300 + 271.11300 + 309.84400 + 348.57400 + 387.30400 + 426.03500 + 464.76500 + 503.49600 + 542.22600 + 580.95700 + 619.68700 + 658.41700 + 697.14800 + 735.87800 + 774.60900 + 813.33900 + 852.07000 + 890.80000 + 929.53100 + 968.26100 + 1006.99100 + 1045.72200 + 1084.45200 + 1123.18300 + 1161.91300 + 1200.64400 diff --git a/scales/cet39c.scl b/scales/cet39c.scl new file mode 100644 index 0000000..21514b0 --- /dev/null +++ b/scales/cet39c.scl @@ -0,0 +1,36 @@ +! cet39c.scl +! +31-tET 11-limit TOP tuning + 31 +! + 38.75702 + 77.51403 + 116.27105 + 155.02807 + 193.78509 + 232.54210 + 271.29912 + 310.05614 + 348.81315 + 387.57017 + 426.32719 + 465.08421 + 503.84122 + 542.59824 + 581.35526 + 620.11227 + 658.86929 + 697.62631 + 736.38333 + 775.14034 + 813.89736 + 852.65438 + 891.41139 + 930.16841 + 968.92543 + 1007.68245 + 1046.43946 + 1085.19648 + 1123.95350 + 1162.71051 + 1201.46753 diff --git a/scales/cet39d.scl b/scales/cet39d.scl new file mode 100644 index 0000000..5a61c5c --- /dev/null +++ b/scales/cet39d.scl @@ -0,0 +1,36 @@ +! cet39d.scl +! +31-tET with l.s. 5/4, 3/2, 7/4 + 31 +! + 38.81690 + 77.63380 + 116.45070 + 155.26760 + 194.08450 + 232.90140 + 271.71830 + 310.53520 + 349.35210 + 388.16900 + 426.98590 + 465.80280 + 504.61970 + 543.43660 + 582.25350 + 621.07040 + 659.88730 + 698.70420 + 737.52110 + 776.33800 + 815.15490 + 853.97180 + 892.78870 + 931.60560 + 970.42250 + 1009.23940 + 1048.05630 + 1086.87320 + 1125.69010 + 1164.50700 + 1203.32390 diff --git a/scales/cet39e.scl b/scales/cet39e.scl new file mode 100644 index 0000000..365a9ad --- /dev/null +++ b/scales/cet39e.scl @@ -0,0 +1,20 @@ +! cet39e.scl +! +15th root of 7/5, X.J. Scott + 15 +! + 38.83415 + 77.66829 + 116.50244 + 155.33658 + 194.17073 + 233.00488 + 271.83902 + 310.67317 + 349.50732 + 388.34146 + 427.17561 + 466.00975 + 504.84390 + 543.67805 + 7/5 diff --git a/scales/cet39f.scl b/scales/cet39f.scl new file mode 100644 index 0000000..a8e382b --- /dev/null +++ b/scales/cet39f.scl @@ -0,0 +1,36 @@ +! cet39f.scl +! +10th root of 5/4 + 31 +! + 38.63137 + 77.26274 + 115.89411 + 154.52549 + 193.15686 + 231.78823 + 270.41960 + 309.05097 + 347.68234 + 5/4 + 424.94509 + 463.57646 + 502.20783 + 540.83920 + 579.47057 + 618.10194 + 656.73331 + 695.36468 + 733.99606 + 25/16 + 811.25880 + 849.89017 + 888.52154 + 927.15291 + 965.78428 + 1004.41566 + 1043.04703 + 1081.67840 + 1120.30977 + 125/64 + 1197.57251 diff --git a/scales/cet39g.scl b/scales/cet39g.scl new file mode 100644 index 0000000..caeba91 --- /dev/null +++ b/scales/cet39g.scl @@ -0,0 +1,36 @@ +! cet39g.scl +! +31-tET 11-limit TOP-RMS tuning + 31 +! + 38.74856 + 77.49712 + 116.24568 + 154.99423 + 193.74279 + 232.49135 + 271.23991 + 309.98847 + 348.73703 + 387.48559 + 426.23414 + 464.98270 + 503.73126 + 542.47982 + 581.22838 + 619.97694 + 658.72550 + 697.47405 + 736.22261 + 774.97117 + 813.71973 + 852.46829 + 891.21685 + 929.96541 + 968.71396 + 1007.46252 + 1046.21108 + 1084.95964 + 1123.70820 + 1162.45676 + 1201.20532 diff --git a/scales/cet43.scl b/scales/cet43.scl new file mode 100644 index 0000000..922ce0f --- /dev/null +++ b/scales/cet43.scl @@ -0,0 +1,33 @@ +! cet43.scl +! +9th root of 5/4, Samuel Pellman + 28 +! + 42.92375 + 85.84749 + 128.77124 + 171.69498 + 214.61873 + 257.54248 + 300.46622 + 343.38997 + 5/4 + 429.23746 + 472.16121 + 515.08495 + 558.00870 + 600.93244 + 643.85619 + 686.77994 + 729.70368 + 25/16 + 815.55117 + 858.47492 + 901.39867 + 944.32241 + 987.24616 + 1030.16990 + 1073.09365 + 1116.01740 + 125/64 + 1201.86489 diff --git a/scales/cet44.scl b/scales/cet44.scl new file mode 100644 index 0000000..fd4713a --- /dev/null +++ b/scales/cet44.scl @@ -0,0 +1,33 @@ +! cet44.scl +! +least maximum error of 10.0911 cents to a set of 11-limit consonances + 28 +! + 44.03239 + 88.06478 + 132.09717 + 176.12956 + 220.16195 + 264.19434 + 308.22673 + 352.25912 + 396.29151 + 440.32390 + 484.35629 + 528.38868 + 572.42107 + 616.45346 + 660.48585 + 704.51824 + 748.55063 + 792.58302 + 836.61541 + 880.64780 + 924.68019 + 968.71258 + 1012.74497 + 1056.77736 + 1100.80975 + 1144.84214 + 1188.87453 + 1232.90692 diff --git a/scales/cet44a.scl b/scales/cet44a.scl new file mode 100644 index 0000000..cadaa49 --- /dev/null +++ b/scales/cet44a.scl @@ -0,0 +1,96 @@ +! cet44a.scl +! +91th root of 10, Jim Kukula + 91 +! + 43.80565 + 87.61129 + 131.41694 + 175.22258 + 219.02823 + 262.83387 + 306.63952 + 350.44516 + 394.25081 + 438.05645 + 481.86210 + 525.66774 + 569.47339 + 613.27903 + 657.08468 + 700.89032 + 744.69597 + 788.50161 + 832.30726 + 876.11290 + 919.91855 + 963.72419 + 1007.52984 + 1051.33548 + 1095.14113 + 1138.94678 + 1182.75242 + 1226.55807 + 1270.36371 + 1314.16936 + 1357.97500 + 1401.78065 + 1445.58629 + 1489.39194 + 1533.19758 + 1577.00323 + 1620.80887 + 1664.61452 + 1708.42016 + 1752.22581 + 1796.03145 + 1839.83710 + 1883.64274 + 1927.44839 + 1971.25403 + 2015.05968 + 2058.86532 + 2102.67097 + 2146.47662 + 2190.28226 + 2234.08791 + 2277.89355 + 2321.69920 + 2365.50484 + 2409.31049 + 2453.11613 + 2496.92178 + 2540.72742 + 2584.53307 + 2628.33871 + 2672.14436 + 2715.95000 + 2759.75565 + 2803.56129 + 2847.36694 + 2891.17258 + 2934.97823 + 2978.78387 + 3022.58952 + 3066.39516 + 3110.20081 + 3154.00645 + 3197.81210 + 3241.61775 + 3285.42339 + 3329.22904 + 3373.03468 + 3416.84033 + 3460.64597 + 3504.45162 + 3548.25726 + 3592.06291 + 3635.86855 + 3679.67420 + 3723.47984 + 3767.28549 + 3811.09113 + 3854.89678 + 3898.70242 + 3942.50807 + 10/1 diff --git a/scales/cet44b.scl b/scales/cet44b.scl new file mode 100644 index 0000000..2b3e70a --- /dev/null +++ b/scales/cet44b.scl @@ -0,0 +1,21 @@ +! cet44b.scl +! +16th root of 3/2 + 16 +! + 43.87219 + 87.74438 + 131.61656 + 175.48875 + 219.36094 + 263.23313 + 307.10531 + 350.97750 + 394.84969 + 438.72188 + 482.59406 + 526.46625 + 570.33844 + 614.21063 + 658.08281 + 3/2 diff --git a/scales/cet45.scl b/scales/cet45.scl new file mode 100644 index 0000000..cdc78b0 --- /dev/null +++ b/scales/cet45.scl @@ -0,0 +1,16 @@ +! cet45.scl +! +11th root of 4/3 + 11 +! + 45.27682 + 90.55364 + 135.83045 + 181.10727 + 226.38409 + 271.66091 + 316.93773 + 362.21454 + 407.49136 + 452.76818 + 4/3 diff --git a/scales/cet45a.scl b/scales/cet45a.scl new file mode 100644 index 0000000..ae6351a --- /dev/null +++ b/scales/cet45a.scl @@ -0,0 +1,18 @@ +! cet45a.scl +! +13th root of 7/5, X.J. Scott + 13 +! + 44.80863 + 89.61726 + 134.42589 + 179.23452 + 224.04315 + 268.85178 + 313.66041 + 358.46904 + 403.27767 + 448.08630 + 492.89493 + 537.70356 + 7/5 diff --git a/scales/cet46.scl b/scales/cet46.scl new file mode 100644 index 0000000..ac7431d --- /dev/null +++ b/scales/cet46.scl @@ -0,0 +1,23 @@ +! cet46.scl +! +18th root of phi, Walter OConnell (1993) + 18 +! + 46.28279 + 92.56559 + 138.84838 + 185.13118 + 231.41397 + 277.69677 + 323.97956 + 370.26235 + 416.54515 + 462.82794 + 509.11074 + 555.39353 + 601.67633 + 647.95912 + 694.24191 + 740.52471 + 786.80750 + 833.09030 diff --git a/scales/cet49.scl b/scales/cet49.scl new file mode 100644 index 0000000..dee2637 --- /dev/null +++ b/scales/cet49.scl @@ -0,0 +1,44 @@ +! cet49.scl +! +39th root of 3, Triple Bohlen-Pierce, good 3.5.7.11.13 system + 39 +! + 48.76808 + 97.53615 + 146.30423 + 195.07231 + 243.84038 + 292.60846 + 341.37654 + 390.14462 + 438.91269 + 487.68077 + 536.44885 + 585.21692 + 633.98500 + 682.75308 + 731.52115 + 780.28923 + 829.05731 + 877.82539 + 926.59346 + 975.36154 + 1024.12962 + 1072.89769 + 1121.66577 + 1170.43385 + 1219.20192 + 1267.97000 + 1316.73808 + 1365.50615 + 1414.27423 + 1463.04231 + 1511.81039 + 1560.57846 + 1609.34654 + 1658.11462 + 1706.88269 + 1755.65077 + 1804.41885 + 1853.18692 + 3/1 diff --git a/scales/cet51.scl b/scales/cet51.scl new file mode 100644 index 0000000..dddbf93 --- /dev/null +++ b/scales/cet51.scl @@ -0,0 +1,52 @@ +! cet51.scl +! +47nd root of 4 + 47 +! + 51.06383 + 102.12766 + 153.19149 + 204.25532 + 255.31915 + 306.38298 + 357.44681 + 408.51064 + 459.57447 + 510.63830 + 561.70213 + 612.76596 + 663.82979 + 714.89362 + 765.95745 + 817.02128 + 868.08511 + 919.14894 + 970.21277 + 1021.27660 + 1072.34043 + 1123.40426 + 1174.46809 + 1225.53191 + 1276.59574 + 1327.65957 + 1378.72340 + 1429.78723 + 1480.85106 + 1531.91489 + 1582.97872 + 1634.04255 + 1685.10638 + 1736.17021 + 1787.23404 + 1838.29787 + 1889.36170 + 1940.42553 + 1991.48936 + 2042.55319 + 2093.61702 + 2144.68085 + 2195.74468 + 2246.80851 + 2297.87234 + 2348.93617 + 4/1 diff --git a/scales/cet53.scl b/scales/cet53.scl new file mode 100644 index 0000000..84c5d95 --- /dev/null +++ b/scales/cet53.scl @@ -0,0 +1,10 @@ +! cet53.scl +! +5th root of 7/6, X.J. Scott + 5 +! + 53.37418 + 106.74836 + 160.12254 + 213.49672 + 7/6 diff --git a/scales/cet54.scl b/scales/cet54.scl new file mode 100644 index 0000000..ae1c3ce --- /dev/null +++ b/scales/cet54.scl @@ -0,0 +1,67 @@ +! cet54.scl +! +62nd root of 7 + 62 +! + 54.33590 + 108.67180 + 163.00771 + 217.34361 + 271.67951 + 326.01541 + 380.35131 + 434.68721 + 489.02312 + 543.35902 + 597.69492 + 652.03082 + 706.36672 + 760.70262 + 815.03853 + 869.37443 + 923.71033 + 978.04623 + 1032.38213 + 1086.71803 + 1141.05394 + 1195.38984 + 1249.72574 + 1304.06164 + 1358.39754 + 1412.73344 + 1467.06935 + 1521.40525 + 1575.74115 + 1630.07705 + 1684.41295 + 1738.74885 + 1793.08476 + 1847.42066 + 1901.75656 + 1956.09246 + 2010.42836 + 2064.76427 + 2119.10017 + 2173.43607 + 2227.77197 + 2282.10787 + 2336.44377 + 2390.77968 + 2445.11558 + 2499.45148 + 2553.78738 + 2608.12328 + 2662.45918 + 2716.79509 + 2771.13099 + 2825.46689 + 2879.80279 + 2934.13869 + 2988.47459 + 3042.81050 + 3097.14640 + 3151.48230 + 3205.81820 + 3260.15410 + 3314.49000 + 7/1 diff --git a/scales/cet54a.scl b/scales/cet54a.scl new file mode 100644 index 0000000..0123178 --- /dev/null +++ b/scales/cet54a.scl @@ -0,0 +1,106 @@ +! cet54a.scl +! +101st root of 24 + 101 +! + 54.47480 + 108.94960 + 163.42441 + 217.89921 + 272.37401 + 326.84881 + 381.32361 + 435.79842 + 490.27322 + 544.74802 + 599.22282 + 653.69762 + 708.17243 + 762.64723 + 817.12203 + 871.59683 + 926.07163 + 980.54644 + 1035.02124 + 1089.49604 + 1143.97084 + 1198.44564 + 1252.92045 + 1307.39525 + 1361.87005 + 1416.34485 + 1470.81965 + 1525.29446 + 1579.76926 + 1634.24406 + 1688.71886 + 1743.19366 + 1797.66847 + 1852.14327 + 1906.61807 + 1961.09287 + 2015.56767 + 2070.04248 + 2124.51728 + 2178.99208 + 2233.46688 + 2287.94168 + 2342.41649 + 2396.89129 + 2451.36609 + 2505.84089 + 2560.31569 + 2614.79050 + 2669.26530 + 2723.74010 + 2778.21490 + 2832.68970 + 2887.16451 + 2941.63931 + 2996.11411 + 3050.58891 + 3105.06371 + 3159.53852 + 3214.01332 + 3268.48812 + 3322.96292 + 3377.43772 + 3431.91253 + 3486.38733 + 3540.86213 + 3595.33693 + 3649.81173 + 3704.28654 + 3758.76134 + 3813.23614 + 3867.71094 + 3922.18574 + 3976.66055 + 4031.13535 + 4085.61015 + 4140.08495 + 4194.55975 + 4249.03456 + 4303.50936 + 4357.98416 + 4412.45896 + 4466.93376 + 4521.40857 + 4575.88337 + 4630.35817 + 4684.83297 + 4739.30777 + 4793.78258 + 4848.25738 + 4902.73218 + 4957.20698 + 5011.68178 + 5066.15658 + 5120.63139 + 5175.10619 + 5229.58099 + 5284.05579 + 5338.53059 + 5393.00540 + 5447.48020 + 24/1 diff --git a/scales/cet54b.scl b/scales/cet54b.scl new file mode 100644 index 0000000..71d4f56 --- /dev/null +++ b/scales/cet54b.scl @@ -0,0 +1,40 @@ +! cet54b.scl +! +35th root of 3 or shrunk 22-tET + 35 +! + 54.34157 + 108.68314 + 163.02471 + 217.36629 + 271.70786 + 326.04943 + 380.39100 + 434.73257 + 489.07414 + 543.41571 + 597.75729 + 652.09886 + 706.44043 + 760.78200 + 815.12357 + 869.46514 + 923.80671 + 978.14829 + 1032.48986 + 1086.83143 + 1141.17300 + 1195.51457 + 1249.85614 + 1304.19771 + 1358.53929 + 1412.88086 + 1467.22243 + 1521.56400 + 1575.90557 + 1630.24714 + 1684.58872 + 1738.93029 + 1793.27186 + 1847.61343 + 3/1 diff --git a/scales/cet54c.scl b/scales/cet54c.scl new file mode 100644 index 0000000..4b09216 --- /dev/null +++ b/scales/cet54c.scl @@ -0,0 +1,27 @@ +! cet54c.scl +! +22-tET 11-limit TOP tuning + 22 +! + 54.48435 + 108.96869 + 163.45304 + 217.93738 + 272.42173 + 326.90607 + 381.39042 + 435.87476 + 490.35911 + 544.84345 + 599.32780 + 653.81214 + 708.29649 + 762.78083 + 817.26518 + 871.74953 + 926.23387 + 980.71822 + 1035.20256 + 1089.68691 + 1144.17125 + 1198.65560 diff --git a/scales/cet54d.scl b/scales/cet54d.scl new file mode 100644 index 0000000..00e6875 --- /dev/null +++ b/scales/cet54d.scl @@ -0,0 +1,27 @@ +! cet54d.scl +! +22-tET 11-limit TOP-RMS tuning + 22 +! + 54.49519 + 108.99038 + 163.48557 + 217.98075 + 272.47594 + 326.97113 + 381.46632 + 435.96151 + 490.45670 + 544.95189 + 599.44707 + 653.94226 + 708.43745 + 762.93264 + 817.42783 + 871.92302 + 926.41821 + 980.91339 + 1035.40858 + 1089.90377 + 1144.39896 + 1198.89415 diff --git a/scales/cet55.scl b/scales/cet55.scl new file mode 100644 index 0000000..ad4fbb9 --- /dev/null +++ b/scales/cet55.scl @@ -0,0 +1,56 @@ +! cet55.scl +! +51th root of 5 + 51 +! + 54.63360 + 109.26720 + 163.90081 + 218.53441 + 273.16801 + 327.80161 + 382.43522 + 437.06882 + 491.70242 + 546.33602 + 600.96962 + 655.60323 + 710.23683 + 764.87043 + 819.50403 + 874.13764 + 928.77124 + 983.40484 + 1038.03844 + 1092.67204 + 1147.30565 + 1201.93925 + 1256.57285 + 1311.20645 + 1365.84006 + 1420.47366 + 1475.10726 + 1529.74086 + 1584.37446 + 1639.00807 + 1693.64167 + 1748.27527 + 1802.90887 + 1857.54248 + 1912.17608 + 1966.80968 + 2021.44328 + 2076.07688 + 2130.71049 + 2185.34409 + 2239.97769 + 2294.61129 + 2349.24490 + 2403.87850 + 2458.51210 + 2513.14570 + 2567.77930 + 2622.41291 + 2677.04651 + 2731.68011 + 5/1 diff --git a/scales/cet55a.scl b/scales/cet55a.scl new file mode 100644 index 0000000..42b158f --- /dev/null +++ b/scales/cet55a.scl @@ -0,0 +1,14 @@ +! cet55a.scl +! +9th root of 4/3, 'Noleta' Scale + 9 +! + 55.33833 + 110.67667 + 166.01500 + 221.35333 + 276.69167 + 332.03000 + 387.36833 + 442.70667 + 4/3 diff --git a/scales/cet63.scl b/scales/cet63.scl new file mode 100644 index 0000000..77e14ca --- /dev/null +++ b/scales/cet63.scl @@ -0,0 +1,35 @@ +! cet63.scl +! +30th root of 3 or stretched 19-tET + 30 +! + 63.39850 + 126.79700 + 190.19550 + 253.59400 + 316.99250 + 380.39100 + 443.78950 + 507.18800 + 570.58650 + 633.98500 + 697.38350 + 760.78200 + 824.18050 + 887.57900 + 950.97750 + 1014.37600 + 1077.77450 + 1141.17300 + 1204.57150 + 1267.97000 + 1331.36850 + 1394.76700 + 1458.16550 + 1521.56400 + 1584.96250 + 1648.36100 + 1711.75950 + 1775.15800 + 1838.55650 + 3/1 diff --git a/scales/cet63a.scl b/scales/cet63a.scl new file mode 100644 index 0000000..a75bdef --- /dev/null +++ b/scales/cet63a.scl @@ -0,0 +1,49 @@ +! cet63a.scl +! +44th root of 5 + 44 +! + 63.32531 + 126.65062 + 189.97594 + 253.30125 + 316.62656 + 379.95187 + 443.27718 + 506.60249 + 569.92781 + 633.25312 + 696.57843 + 759.90374 + 823.22905 + 886.55436 + 949.87968 + 1013.20499 + 1076.53030 + 1139.85561 + 1203.18092 + 1266.50623 + 1329.83155 + 1393.15686 + 1456.48217 + 1519.80748 + 1583.13279 + 1646.45810 + 1709.78342 + 1773.10873 + 1836.43404 + 1899.75935 + 1963.08466 + 2026.40997 + 2089.73529 + 2153.06060 + 2216.38591 + 2279.71122 + 2343.03653 + 2406.36184 + 2469.68716 + 2533.01247 + 2596.33778 + 2659.66309 + 2722.98840 + 5/1 diff --git a/scales/cet63b.scl b/scales/cet63b.scl new file mode 100644 index 0000000..b9f36d3 --- /dev/null +++ b/scales/cet63b.scl @@ -0,0 +1,24 @@ +! cet63b.scl +! +19-tET 7-limit TOP tuning + 19 +! + 63.35968 + 126.71935 + 190.07903 + 253.43871 + 316.79839 + 380.15806 + 443.51774 + 506.87742 + 570.23709 + 633.59677 + 696.95645 + 760.31613 + 823.67580 + 887.03548 + 950.39516 + 1013.75483 + 1077.11451 + 1140.47419 + 1203.83387 diff --git a/scales/cet63c.scl b/scales/cet63c.scl new file mode 100644 index 0000000..4168b56 --- /dev/null +++ b/scales/cet63c.scl @@ -0,0 +1,24 @@ +! cet63c.scl +! +19-tET 7-limit TOP-RMS tuning + 19 +! + 63.06302 + 126.12605 + 189.18907 + 252.25209 + 315.31511 + 378.37814 + 441.44116 + 504.50418 + 567.56720 + 630.63023 + 693.69325 + 756.75627 + 819.81930 + 882.88232 + 945.94534 + 1009.00836 + 1072.07139 + 1135.13441 + 1198.19743 diff --git a/scales/cet65.scl b/scales/cet65.scl new file mode 100644 index 0000000..024f0c9 --- /dev/null +++ b/scales/cet65.scl @@ -0,0 +1,25 @@ +! cet65.scl +! +65cET by Andrew Heathwaite + 20 +! + 65.00000 + 130.00000 + 195.00000 + 260.00000 + 325.00000 + 390.00000 + 455.00000 + 520.00000 + 585.00000 + 650.00000 + 715.00000 + 780.00000 + 845.00000 + 910.00000 + 975.00000 + 1040.00000 + 1105.00000 + 1170.00000 + 1235.00000 + 1300.00000 diff --git a/scales/cet65a.scl b/scales/cet65a.scl new file mode 100644 index 0000000..0721eb0 --- /dev/null +++ b/scales/cet65a.scl @@ -0,0 +1,42 @@ +! cet65a.scl +! +37th root of 4 + 37 +! + 64.86486 + 129.72973 + 194.59459 + 259.45946 + 324.32432 + 389.18919 + 454.05405 + 518.91892 + 583.78378 + 648.64865 + 713.51351 + 778.37838 + 843.24324 + 908.10811 + 972.97297 + 1037.83784 + 1102.70270 + 1167.56757 + 1232.43243 + 1297.29730 + 1362.16216 + 1427.02703 + 1491.89189 + 1556.75676 + 1621.62162 + 1686.48649 + 1751.35135 + 1816.21622 + 1881.08108 + 1945.94595 + 2010.81081 + 2075.67568 + 2140.54054 + 2205.40541 + 2270.27027 + 2335.13514 + 4/1 diff --git a/scales/cet67.scl b/scales/cet67.scl new file mode 100644 index 0000000..d1f6418 --- /dev/null +++ b/scales/cet67.scl @@ -0,0 +1,19 @@ +! cet67.scl +! +14th root of 12/7, X.J. Scott + 14 +! + 66.65208 + 133.30416 + 199.95623 + 266.60831 + 333.26039 + 399.91247 + 466.56455 + 533.21663 + 599.86870 + 666.52078 + 733.17286 + 799.82494 + 866.47702 + 12/7 diff --git a/scales/cet68.scl b/scales/cet68.scl new file mode 100644 index 0000000..701b1bd --- /dev/null +++ b/scales/cet68.scl @@ -0,0 +1,23 @@ +! cet68.scl +! +3rd root of 9/8 + 18 +! + 67.97000 + 135.94000 + 9/8 + 271.88000 + 339.85000 + 81/64 + 475.79000 + 543.76000 + 729/512 + 679.70001 + 747.67001 + 6561/4096 + 883.61001 + 951.58001 + 59049/32768 + 1087.52001 + 1155.49001 + 531441/262144 diff --git a/scales/cet69.scl b/scales/cet69.scl new file mode 100644 index 0000000..b1e6a0b --- /dev/null +++ b/scales/cet69.scl @@ -0,0 +1,17 @@ +! cet69.scl +! +12th root of phi + 12 +! + 69.42419 + 138.84838 + 208.27257 + 277.69677 + 347.12096 + 416.54515 + 485.96934 + 555.39353 + 624.81772 + 694.24191 + 763.66610 + 833.09030 diff --git a/scales/cet7.scl b/scales/cet7.scl new file mode 100644 index 0000000..6a3db70 --- /dev/null +++ b/scales/cet7.scl @@ -0,0 +1,276 @@ +! cet7.scl +! +271th root of 3, Heinz Bohlen (1972) + 271 +! + 7.01828 + 14.03657 + 21.05485 + 28.07314 + 35.09142 + 42.10970 + 49.12799 + 56.14627 + 63.16456 + 70.18284 + 77.20113 + 84.21941 + 91.23769 + 98.25598 + 105.27426 + 112.29255 + 119.31083 + 126.32911 + 133.34740 + 140.36568 + 147.38397 + 154.40225 + 161.42054 + 168.43882 + 175.45710 + 182.47539 + 189.49367 + 196.51196 + 203.53024 + 210.54852 + 217.56681 + 224.58509 + 231.60338 + 238.62166 + 245.63994 + 252.65823 + 259.67651 + 266.69480 + 273.71308 + 280.73137 + 287.74965 + 294.76793 + 301.78622 + 308.80450 + 315.82279 + 322.84107 + 329.85935 + 336.87764 + 343.89592 + 350.91421 + 357.93249 + 364.95078 + 371.96906 + 378.98734 + 386.00563 + 393.02391 + 400.04220 + 407.06048 + 414.07876 + 421.09705 + 428.11533 + 435.13362 + 442.15190 + 449.17018 + 456.18847 + 463.20675 + 470.22504 + 477.24332 + 484.26161 + 491.27989 + 498.29817 + 505.31646 + 512.33474 + 519.35303 + 526.37131 + 533.38959 + 540.40788 + 547.42616 + 554.44445 + 561.46273 + 568.48102 + 575.49930 + 582.51758 + 589.53587 + 596.55415 + 603.57244 + 610.59072 + 617.60900 + 624.62729 + 631.64557 + 638.66386 + 645.68214 + 652.70042 + 659.71871 + 666.73699 + 673.75528 + 680.77356 + 687.79185 + 694.81013 + 701.82841 + 708.84670 + 715.86498 + 722.88327 + 729.90155 + 736.91983 + 743.93812 + 750.95640 + 757.97469 + 764.99297 + 772.01125 + 779.02954 + 786.04782 + 793.06611 + 800.08439 + 807.10268 + 814.12096 + 821.13924 + 828.15753 + 835.17581 + 842.19410 + 849.21238 + 856.23066 + 863.24895 + 870.26723 + 877.28552 + 884.30380 + 891.32209 + 898.34037 + 905.35865 + 912.37694 + 919.39522 + 926.41351 + 933.43179 + 940.45007 + 947.46836 + 954.48664 + 961.50493 + 968.52321 + 975.54149 + 982.55978 + 989.57806 + 996.59635 + 1003.61463 + 1010.63292 + 1017.65120 + 1024.66948 + 1031.68777 + 1038.70605 + 1045.72434 + 1052.74262 + 1059.76090 + 1066.77919 + 1073.79747 + 1080.81576 + 1087.83404 + 1094.85233 + 1101.87061 + 1108.88889 + 1115.90718 + 1122.92546 + 1129.94375 + 1136.96203 + 1143.98031 + 1150.99860 + 1158.01688 + 1165.03517 + 1172.05345 + 1179.07173 + 1186.09002 + 1193.10830 + 1200.12659 + 1207.14487 + 1214.16316 + 1221.18144 + 1228.19972 + 1235.21801 + 1242.23629 + 1249.25458 + 1256.27286 + 1263.29114 + 1270.30943 + 1277.32771 + 1284.34600 + 1291.36428 + 1298.38257 + 1305.40085 + 1312.41913 + 1319.43742 + 1326.45570 + 1333.47399 + 1340.49227 + 1347.51055 + 1354.52884 + 1361.54712 + 1368.56541 + 1375.58369 + 1382.60197 + 1389.62026 + 1396.63854 + 1403.65683 + 1410.67511 + 1417.69340 + 1424.71168 + 1431.72996 + 1438.74825 + 1445.76653 + 1452.78482 + 1459.80310 + 1466.82138 + 1473.83967 + 1480.85795 + 1487.87624 + 1494.89452 + 1501.91281 + 1508.93109 + 1515.94937 + 1522.96766 + 1529.98594 + 1537.00423 + 1544.02251 + 1551.04079 + 1558.05908 + 1565.07736 + 1572.09565 + 1579.11393 + 1586.13221 + 1593.15050 + 1600.16878 + 1607.18707 + 1614.20535 + 1621.22364 + 1628.24192 + 1635.26020 + 1642.27849 + 1649.29677 + 1656.31506 + 1663.33334 + 1670.35162 + 1677.36991 + 1684.38819 + 1691.40648 + 1698.42476 + 1705.44305 + 1712.46133 + 1719.47961 + 1726.49790 + 1733.51618 + 1740.53447 + 1747.55275 + 1754.57103 + 1761.58932 + 1768.60760 + 1775.62589 + 1782.64417 + 1789.66245 + 1796.68074 + 1803.69902 + 1810.71731 + 1817.73559 + 1824.75388 + 1831.77216 + 1838.79044 + 1845.80873 + 1852.82701 + 1859.84530 + 1866.86358 + 1873.88186 + 1880.90015 + 1887.91843 + 1894.93672 + 3/1 diff --git a/scales/cet70.scl b/scales/cet70.scl new file mode 100644 index 0000000..f563b0e --- /dev/null +++ b/scales/cet70.scl @@ -0,0 +1,32 @@ +! cet70.scl +! +27th root of 3 + 27 +! + 70.44278 + 140.88556 + 211.32833 + 281.77111 + 352.21389 + 422.65667 + 493.09944 + 563.54222 + 633.98500 + 704.42778 + 774.87056 + 845.31333 + 915.75611 + 986.19889 + 1056.64167 + 1127.08444 + 1197.52722 + 1267.97000 + 1338.41278 + 1408.85556 + 1479.29833 + 1549.74111 + 1620.18389 + 1690.62667 + 1761.06945 + 1831.51222 + 3/1 diff --git a/scales/cet71.scl b/scales/cet71.scl new file mode 100644 index 0000000..9121671 --- /dev/null +++ b/scales/cet71.scl @@ -0,0 +1,44 @@ +! cet71.scl +! +39th root of 5 + 39 +! + 71.44394 + 142.88788 + 214.33182 + 285.77577 + 357.21971 + 428.66365 + 500.10759 + 571.55153 + 642.99547 + 714.43941 + 785.88336 + 857.32730 + 928.77124 + 1000.21518 + 1071.65912 + 1143.10306 + 1214.54700 + 1285.99094 + 1357.43489 + 1428.87883 + 1500.32277 + 1571.76671 + 1643.21065 + 1714.65459 + 1786.09853 + 1857.54248 + 1928.98642 + 2000.43036 + 2071.87430 + 2143.31824 + 2214.76218 + 2286.20612 + 2357.65007 + 2429.09401 + 2500.53795 + 2571.98189 + 2643.42583 + 2714.86977 + 5/1 diff --git a/scales/cet73.scl b/scales/cet73.scl new file mode 100644 index 0000000..ba44922 --- /dev/null +++ b/scales/cet73.scl @@ -0,0 +1,38 @@ +! cet73.scl +! +33rd root of 4, Birgit Maus + 33 +! + 72.72727 + 145.45455 + 218.18182 + 290.90909 + 363.63636 + 436.36364 + 509.09091 + 581.81818 + 654.54545 + 727.27273 + 800.00000 + 872.72727 + 945.45455 + 1018.18182 + 1090.90909 + 1163.63636 + 1236.36364 + 1309.09091 + 1381.81818 + 1454.54545 + 1527.27273 + 1600.00000 + 1672.72727 + 1745.45455 + 1818.18182 + 1890.90909 + 1963.63636 + 2036.36364 + 2109.09091 + 2181.81818 + 2254.54545 + 2327.27273 + 4/1 diff --git a/scales/cet75.scl b/scales/cet75.scl new file mode 100644 index 0000000..eb7b901 --- /dev/null +++ b/scales/cet75.scl @@ -0,0 +1,21 @@ +! cet75.scl +! +16-tone ET, 7-limit TOP + 16 +! + 75.46561 + 150.93121 + 226.39682 + 301.86242 + 377.32803 + 452.79363 + 528.25924 + 603.72485 + 679.19045 + 754.65606 + 830.12166 + 905.58727 + 981.05287 + 1056.51848 + 1131.98409 + 1207.44969 diff --git a/scales/cet78.scl b/scales/cet78.scl new file mode 100644 index 0000000..841b568 --- /dev/null +++ b/scales/cet78.scl @@ -0,0 +1,14 @@ +! cet78.scl +! +9th root of 3/2 + 9 +! + 77.99500 + 155.99000 + 233.98500 + 311.98000 + 389.97500 + 467.97000 + 545.96500 + 623.96000 + 3/2 diff --git a/scales/cet79.scl b/scales/cet79.scl new file mode 100644 index 0000000..09de416 --- /dev/null +++ b/scales/cet79.scl @@ -0,0 +1,29 @@ +! cet79.scl +! +24th root of 3, James Heffernan (1906) + 24 +! + 79.24813 + 158.49625 + 237.74438 + 316.99250 + 396.24063 + 475.48875 + 554.73688 + 633.98500 + 713.23313 + 792.48125 + 871.72938 + 950.97750 + 1030.22563 + 1109.47375 + 1188.72188 + 1267.97000 + 1347.21813 + 1426.46625 + 1505.71438 + 1584.96250 + 1664.21063 + 1743.45875 + 1822.70688 + 3/1 diff --git a/scales/cet80.scl b/scales/cet80.scl new file mode 100644 index 0000000..8da1b58 --- /dev/null +++ b/scales/cet80.scl @@ -0,0 +1,40 @@ +! cet80.scl +! +35th root of 5 + 35 +! + 79.60896 + 159.21793 + 238.82689 + 318.43585 + 398.04482 + 477.65378 + 557.26274 + 636.87171 + 716.48067 + 796.08963 + 875.69860 + 955.30756 + 1034.91652 + 1114.52549 + 1194.13445 + 1273.74341 + 1353.35238 + 1432.96134 + 1512.57030 + 1592.17927 + 1671.78823 + 1751.39719 + 1831.00615 + 1910.61512 + 1990.22408 + 2069.83304 + 2149.44201 + 2229.05097 + 2308.65993 + 2388.26890 + 2467.87786 + 2547.48682 + 2627.09579 + 2706.70475 + 5/1 diff --git a/scales/cet84.scl b/scales/cet84.scl new file mode 100644 index 0000000..9bcf700 --- /dev/null +++ b/scales/cet84.scl @@ -0,0 +1,38 @@ +! cet84.scl +! +33rd root of 5 + 33 +! + 84.43375 + 168.86750 + 253.30125 + 337.73500 + 422.16874 + 506.60249 + 591.03624 + 675.46999 + 759.90374 + 844.33749 + 928.77124 + 1013.20499 + 1097.63874 + 1182.07248 + 1266.50623 + 1350.93998 + 1435.37373 + 1519.80748 + 1604.24123 + 1688.67498 + 1773.10873 + 1857.54248 + 1941.97622 + 2026.40997 + 2110.84372 + 2195.27747 + 2279.71122 + 2364.14497 + 2448.57872 + 2533.01247 + 2617.44622 + 2701.87996 + 5/1 diff --git a/scales/cet87.scl b/scales/cet87.scl new file mode 100644 index 0000000..4bfb46a --- /dev/null +++ b/scales/cet87.scl @@ -0,0 +1,20 @@ +! cet87.scl +! +Least-squares stretched ET to telephone dial tones. 1/1=697 Hz + 15 +! + 86.67933 + 173.35867 + 260.03800 + 346.71733 + 433.39667 + 520.07600 + 606.75533 + 693.43467 + 780.11400 + 866.79333 + 953.47267 + 1040.15200 + 1126.83133 + 1213.51067 + 1300.19000 diff --git a/scales/cet88.scl b/scales/cet88.scl new file mode 100644 index 0000000..45cd900 --- /dev/null +++ b/scales/cet88.scl @@ -0,0 +1,19 @@ +! cet88.scl +! +88.0 cents steps by Gary Morrison alias mr88cet + 14 +! + 88.00000 + 176.00000 + 264.00000 + 352.00000 + 440.00000 + 528.00000 + 616.00000 + 704.00000 + 792.00000 + 880.00000 + 968.00000 + 1056.00000 + 1144.00000 + 1232.00000 diff --git a/scales/cet88b.scl b/scales/cet88b.scl new file mode 100644 index 0000000..778d380 --- /dev/null +++ b/scales/cet88b.scl @@ -0,0 +1,19 @@ +! cet88b.scl +! +87.97446 cent steps. Least squares for 7/6, 11/9, 10/7, 3/2, 7/4 + 14 +! + 87.97446 + 175.94891 + 263.92337 + 351.89782 + 439.87228 + 527.84674 + 615.82119 + 703.79565 + 791.77010 + 879.74456 + 967.71902 + 1055.69347 + 1143.66793 + 1231.64238 diff --git a/scales/cet88b2.scl b/scales/cet88b2.scl new file mode 100644 index 0000000..6a856c0 --- /dev/null +++ b/scales/cet88b2.scl @@ -0,0 +1,19 @@ +! cet88b2.scl +! +87.75412 cent steps. Minimax for 7/6, 11/9, 10/7, 3/2, 7/4 + 14 +! + 87.75412 + 175.50824 + 263.26236 + 351.01648 + 438.77060 + 526.52472 + 614.27884 + 702.03296 + 789.78708 + 877.54120 + 965.29532 + 1053.04944 + 1140.80356 + 1228.55768 diff --git a/scales/cet88b3.scl b/scales/cet88b3.scl new file mode 100644 index 0000000..c9fda61 --- /dev/null +++ b/scales/cet88b3.scl @@ -0,0 +1,19 @@ +! cet88b3.scl +! +87.84635 cent steps. Minimax for 3, 5, 7, 8, 11 + 14 +! + 87.84635 + 175.69270 + 263.53905 + 351.38539 + 439.23174 + 527.07809 + 614.92444 + 702.77079 + 790.61714 + 878.46348 + 966.30983 + 1054.15618 + 1142.00253 + 1229.84888 diff --git a/scales/cet88b4.scl b/scales/cet88b4.scl new file mode 100644 index 0000000..643172d --- /dev/null +++ b/scales/cet88b4.scl @@ -0,0 +1,19 @@ +! cet88b4.scl +! +87.80488 cent steps. Least squares for 3, 5, 7, 8, 11 + 14 +! + 87.80488 + 175.60976 + 263.41463 + 351.21951 + 439.02439 + 526.82927 + 614.63415 + 702.43902 + 790.24390 + 878.04878 + 965.85366 + 1053.65854 + 1141.46341 + 1229.26829 diff --git a/scales/cet88c.scl b/scales/cet88c.scl new file mode 100644 index 0000000..0d1bbb4 --- /dev/null +++ b/scales/cet88c.scl @@ -0,0 +1,43 @@ +! cet88c.scl +! +38th root of 7, McLaren 'Microtonal Music', volume 3, track 7 + 38 +! + 88.65331 + 177.30663 + 265.95994 + 354.61325 + 443.26657 + 531.91988 + 620.57319 + 709.22651 + 797.87982 + 886.53313 + 975.18645 + 1063.83976 + 1152.49307 + 1241.14639 + 1329.79970 + 1418.45301 + 1507.10633 + 1595.75964 + 1684.41295 + 1773.06627 + 1861.71958 + 1950.37289 + 2039.02621 + 2127.67952 + 2216.33283 + 2304.98615 + 2393.63946 + 2482.29277 + 2570.94609 + 2659.59940 + 2748.25271 + 2836.90603 + 2925.55934 + 3014.21265 + 3102.86597 + 3191.51928 + 3280.17259 + 7/1 diff --git a/scales/cet88d.scl b/scales/cet88d.scl new file mode 100644 index 0000000..dc97fb2 --- /dev/null +++ b/scales/cet88d.scl @@ -0,0 +1,46 @@ +! cet88d.scl +! +41th root of 8 + 41 +! + 87.80488 + 175.60976 + 263.41463 + 351.21951 + 439.02439 + 526.82927 + 614.63415 + 702.43902 + 790.24390 + 878.04878 + 965.85366 + 1053.65854 + 1141.46341 + 1229.26829 + 1317.07317 + 1404.87805 + 1492.68293 + 1580.48780 + 1668.29268 + 1756.09756 + 1843.90244 + 1931.70732 + 2019.51220 + 2107.31707 + 2195.12195 + 2282.92683 + 2370.73171 + 2458.53659 + 2546.34146 + 2634.14634 + 2721.95122 + 2809.75610 + 2897.56098 + 2985.36585 + 3073.17073 + 3160.97561 + 3248.78049 + 3336.58537 + 3424.39024 + 3512.19512 + 8/1 diff --git a/scales/cet89.scl b/scales/cet89.scl new file mode 100644 index 0000000..97a57a0 --- /dev/null +++ b/scales/cet89.scl @@ -0,0 +1,36 @@ +! cet89.scl +! +31st root of 5, McLaren 'Microtonal Music', volume 2, track 22 + 31 +! + 89.88109 + 179.76218 + 269.64326 + 359.52435 + 449.40544 + 539.28653 + 629.16761 + 719.04870 + 808.92979 + 898.81088 + 988.69196 + 1078.57305 + 1168.45414 + 1258.33523 + 1348.21631 + 1438.09740 + 1527.97849 + 1617.85958 + 1707.74066 + 1797.62175 + 1887.50284 + 1977.38393 + 2067.26501 + 2157.14610 + 2247.02719 + 2336.90828 + 2426.78936 + 2516.67045 + 2606.55154 + 2696.43263 + 5/1 diff --git a/scales/cet90.scl b/scales/cet90.scl new file mode 100644 index 0000000..54c6fbb --- /dev/null +++ b/scales/cet90.scl @@ -0,0 +1,22 @@ +! cet90.scl +! +Scale with limma steps + 17 +! + 256/243 + 65536/59049 + 16777216/14348907 + 360.89998 + 451.12498 + 541.34997 + 631.57497 + 721.79997 + 812.02496 + 902.24996 + 992.47495 + 1082.69995 + 1172.92494 + 1263.14994 + 1353.37494 + 1443.59993 + 1533.82493 diff --git a/scales/cet93.scl b/scales/cet93.scl new file mode 100644 index 0000000..cccc84b --- /dev/null +++ b/scales/cet93.scl @@ -0,0 +1,14 @@ +! cet93.scl +! +Tuning used in John Chowning's Stria (1977), 9th root of Phi + 9 +! + 92.56559 + 185.13118 + 277.69677 + 370.26235 + 462.82794 + 555.39353 + 647.95912 + 740.52471 + 833.09030 diff --git a/scales/cet97.scl b/scales/cet97.scl new file mode 100644 index 0000000..b861c9e --- /dev/null +++ b/scales/cet97.scl @@ -0,0 +1,17 @@ +! cet97.scl +! +Manfred Stahnke, PARTCH HARP synth tuning. Minimax for 5/4 and 7/4, acceptable 11/4 + 12 +! + 96.79569 + 193.59138 + 290.38707 + 387.18276 + 483.97845 + 580.77414 + 677.56983 + 774.36551 + 871.16120 + 967.95689 + 1064.75258 + 1161.54827 diff --git a/scales/cet98.scl b/scales/cet98.scl new file mode 100644 index 0000000..8a9849f --- /dev/null +++ b/scales/cet98.scl @@ -0,0 +1,13 @@ +! cet98.scl +! +8th root of 11/7, X.J. Scott + 8 +! + 97.81150 + 195.62301 + 293.43451 + 391.24602 + 489.05752 + 586.86903 + 684.68053 + 11/7 diff --git a/scales/chahargah.scl b/scales/chahargah.scl new file mode 100644 index 0000000..90745d4 --- /dev/null +++ b/scales/chahargah.scl @@ -0,0 +1,17 @@ +! chahargah.scl +! +Chahargah in C + 12 +! + 100.00000 + 140.00000 + 300.00000 + 386.00000 + 498.00000 + 590.00000 + 702.00000 + 800.00000 + 840.00000 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/chahargah2.scl b/scales/chahargah2.scl new file mode 100644 index 0000000..0fe2950 --- /dev/null +++ b/scales/chahargah2.scl @@ -0,0 +1,12 @@ +! Chahargah2.scl +! +Dastgah Chahargah in C, Mohammad Reza Gharib + 7 +! + 140.00000 + 390.00000 + 498.00000 + 702.00000 + 840.00000 + 1100.00000 + 2/1 diff --git a/scales/chahargah3.scl b/scales/chahargah3.scl new file mode 100644 index 0000000..8726a5f --- /dev/null +++ b/scales/chahargah3.scl @@ -0,0 +1,12 @@ +! chahargah3.scl +! +Iranian Chahargah, Julien J. Weiss + 7 +! + 13/12 + 5/4 + 4/3 + 3/2 + 13/8 + 15/8 + 2/1 diff --git a/scales/chalmers.scl b/scales/chalmers.scl new file mode 100644 index 0000000..d6f1d0c --- /dev/null +++ b/scales/chalmers.scl @@ -0,0 +1,24 @@ +! chalmers.scl +! +Chalmers' 19-tone with more hexanies than Perrett's Tierce-Tone + 19 +! + 21/20 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 63/40 + 8/5 + 5/3 + 7/4 + 9/5 + 28/15 + 63/32 + 2/1 diff --git a/scales/chalmers_17.scl b/scales/chalmers_17.scl new file mode 100644 index 0000000..b63d87d --- /dev/null +++ b/scales/chalmers_17.scl @@ -0,0 +1,22 @@ +! CHALMERS_17.scl +! +7-limit figurative scale, Chalmers '96 Adnexed S&H decads + 17 +! + 36/35 + 35/32 + 9/8 + 6/5 + 5/4 + 9/7 + 21/16 + 36/25 + 72/49 + 3/2 + 49/32 + 25/16 + 12/7 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/chalmers_19.scl b/scales/chalmers_19.scl new file mode 100644 index 0000000..d155b4b --- /dev/null +++ b/scales/chalmers_19.scl @@ -0,0 +1,24 @@ +! chalmers_19.scl +! +7-limit figurative scale. Reversed S&H decads + 19 +! + 36/35 + 10/9 + 9/8 + 7/6 + 6/5 + 9/7 + 4/3 + 49/36 + 25/18 + 36/25 + 72/49 + 3/2 + 14/9 + 5/3 + 12/7 + 16/9 + 9/5 + 35/18 + 2/1 diff --git a/scales/chalmers_csurd.scl b/scales/chalmers_csurd.scl new file mode 100644 index 0000000..a4b62f4 --- /dev/null +++ b/scales/chalmers_csurd.scl @@ -0,0 +1,20 @@ +! chalmers_csurd.scl +! +Combined Surd Scale, combination of Surd and Inverted Surd, JHC, 26-6-97 + 15 +! + 75.90187 + 160.53817 + 256.34665 + 325.85509 + 366.90634 + 4/3 + 539.98536 + 660.01995 + 3/2 + 833.08148 + 874.14491 + 943.65335 + 1039.46183 + 1124.09813 + 2/1 diff --git a/scales/chalmers_isurd.scl b/scales/chalmers_isurd.scl new file mode 100644 index 0000000..4da99ce --- /dev/null +++ b/scales/chalmers_isurd.scl @@ -0,0 +1,13 @@ +! chalmers_isurd.scl +! +Inverted Surd Scale, of the form 4/(SQRT(N)+1, JHC, 26-6-97 + 8 +! + 75.90187 + 160.53817 + 256.34665 + 366.90634 + 4/3 + 660.01995 + 874.14491 + 2/1 diff --git a/scales/chalmers_ji1.scl b/scales/chalmers_ji1.scl new file mode 100644 index 0000000..caba07e --- /dev/null +++ b/scales/chalmers_ji1.scl @@ -0,0 +1,17 @@ +! chalmers_ji1.scl +! +Based loosely on Wronski's and similar JI scales, May 2, 1997. + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 57/32 + 15/8 + 2/1 diff --git a/scales/chalmers_ji2.scl b/scales/chalmers_ji2.scl new file mode 100644 index 0000000..3168977 --- /dev/null +++ b/scales/chalmers_ji2.scl @@ -0,0 +1,17 @@ +! chalmers_ji2.scl +! +Based loosely on Wronski's and similar JI scales, May 2, 1997. + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 4/3 + 17/12 + 3/2 + 51/32 + 27/16 + 57/32 + 15/8 + 2/1 diff --git a/scales/chalmers_ji3.scl b/scales/chalmers_ji3.scl new file mode 100644 index 0000000..2a9a685 --- /dev/null +++ b/scales/chalmers_ji3.scl @@ -0,0 +1,17 @@ +! chalmers_ji3.scl +! +15 16 17 18 19 20 21 on 1/1, 15-20 on 3/2, May 2, 1997. See other scales + 12 +! + 16/15 + 17/15 + 6/5 + 19/15 + 4/3 + 7/5 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 diff --git a/scales/chalmers_ji4.scl b/scales/chalmers_ji4.scl new file mode 100644 index 0000000..d8cdee3 --- /dev/null +++ b/scales/chalmers_ji4.scl @@ -0,0 +1,17 @@ +! chalmers_ji4.scl +! +15 16 17 18 19 20 on 1/1, same on 4/3, + 16/15 on 16/9 + 12 +! + 16/15 + 17/15 + 6/5 + 19/15 + 4/3 + 64/45 + 68/45 + 8/5 + 76/45 + 16/9 + 256/135 + 2/1 diff --git a/scales/chalmers_surd.scl b/scales/chalmers_surd.scl new file mode 100644 index 0000000..2cfa9b6 --- /dev/null +++ b/scales/chalmers_surd.scl @@ -0,0 +1,13 @@ +! chalmers_surd.scl +! +Surd Scale, Surds of the form (SQRT(N)+1)/2, JHC, 26-6-97 + 8 +! + 325.85509 + 539.98536 + 3/2 + 833.08148 + 943.65335 + 1039.46183 + 1124.09813 + 2/1 diff --git a/scales/chalmers_surd2.scl b/scales/chalmers_surd2.scl new file mode 100644 index 0000000..7841a12 --- /dev/null +++ b/scales/chalmers_surd2.scl @@ -0,0 +1,45 @@ +! chalmers_surd2.scl +! +Surd Scale, Surds of the form (SQRT(N)+1)/4 + 40 +! + 68.84785 + 131.88444 + 190.04384 + 244.04863 + 294.46971 + 341.76635 + 5/4 + 428.42236 + 468.35241 + 506.32393 + 542.52489 + 577.11709 + 610.24088 + 642.01879 + 672.55847 + 3/2 + 730.29280 + 757.64716 + 784.08555 + 809.66863 + 834.45119 + 858.48284 + 881.80870 + 904.46987 + 926.50396 + 947.94541 + 7/4 + 989.17461 + 1009.01845 + 1028.38235 + 1047.28941 + 1065.76109 + 1083.81735 + 1101.47681 + 1118.75684 + 1135.67369 + 1152.24258 + 1168.47780 + 1184.39273 + 2/1 diff --git a/scales/chalung.scl b/scales/chalung.scl new file mode 100644 index 0000000..11c9233 --- /dev/null +++ b/scales/chalung.scl @@ -0,0 +1,16 @@ +! chalung.scl +! +Tuning of chalung from Tasikmalaya, slendro-like. 1/1=185 Hz + 11 +! + 391.91944 + 562.34225 + 692.57160 + 1048.51200 + 1213.98043 + 1569.38679 + 1772.45659 + 1984.19266 + 2253.61137 + 2413.98043 + 2776.93031 diff --git a/scales/chan34.scl b/scales/chan34.scl new file mode 100644 index 0000000..6e02c4d --- /dev/null +++ b/scales/chan34.scl @@ -0,0 +1,38 @@ +! chan34.scl +34 note hanson based circulating scale with 15 pure major thirds and 18 -1 brats +34 +! +254754959781491/249729352508160 +30071722855/28903860244 +38421792648/36129825305 +6759548793775/6243233812704 +1081527807004/975505283235 +14412856352274025/12786142848417792 +576514254090961/499458705016320 +991798286653/843680244960 +960013575180847/799133928026112 +30614793048041/24972935250816 +5/4 +638254280871377/499458705016320 +150358614275/115615440976 +48114756568/36129825305 +1459280021371/1076419622880 +270381951751/195101056647 +60205443660021679/42620476161392640 +576514254090961/399566964013056 +30663265517723/20810779375680 +4800067875904235/3196535712104448 +21305517838327/13873852917120 +25/16 +8/5 +50840497270643/31216169063520 +12028689142/7225965061 +424031442260527/249729352508160 +1351909758755/780404226588 +1727914373344/975505283235 +2882571270454805/1598267856052224 +230425355849681/124864676254080 +24000339379521175/12786142848417792 +960013575180847/499458705016320 +412730869507/210920061240 +2/1 diff --git a/scales/chargah pentachord 7-limit.scl b/scales/chargah pentachord 7-limit.scl new file mode 100644 index 0000000..0e4ede0 --- /dev/null +++ b/scales/chargah pentachord 7-limit.scl @@ -0,0 +1,9 @@ +! chargah pentachord 7-limit.scl +! +Chargah pentachord 150:162:189:200:225 + 4 +! + 27/25 + 63/50 + 4/3 + 3/2 diff --git a/scales/chargah tetrachord 7-limit.scl b/scales/chargah tetrachord 7-limit.scl new file mode 100644 index 0000000..092a1d7 --- /dev/null +++ b/scales/chargah tetrachord 7-limit.scl @@ -0,0 +1,8 @@ +! chargah tetrachord 7-limit.scl +! +Chargah tetrachord 150:162:189:200 + 3 +! + 27/25 + 63/50 + 4/3 diff --git a/scales/chaumont.scl b/scales/chaumont.scl new file mode 100644 index 0000000..8d6b8a2 --- /dev/null +++ b/scales/chaumont.scl @@ -0,0 +1,17 @@ +! chaumont.scl +! +Lambert Chaumont organ temperament (1695), 1st interpretation + 12 +! + 76.04900 + 193.15686 + 290.90905 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 997.16531 + 1082.89214 + 2/1 diff --git a/scales/chaumont2.scl b/scales/chaumont2.scl new file mode 100644 index 0000000..f95a09c --- /dev/null +++ b/scales/chaumont2.scl @@ -0,0 +1,17 @@ +! chaumont2.scl +! +Lambert Chaumont organ temperament (1695), 2nd interpretation + 12 +! + 83.57620 + 195.30749 + 289.83374 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 781.22994 + 892.96123 + 16/9 + 15/8 + 2/1 diff --git a/scales/chimes.scl b/scales/chimes.scl new file mode 100644 index 0000000..91063d8 --- /dev/null +++ b/scales/chimes.scl @@ -0,0 +1,8 @@ +! chimes.scl +! +Heavenly Chimes + 3 +! + 32/29 + 1/2 + 16/29 diff --git a/scales/chimes_peck.scl b/scales/chimes_peck.scl new file mode 100644 index 0000000..53dda5f --- /dev/null +++ b/scales/chimes_peck.scl @@ -0,0 +1,13 @@ +! chimes_peck.scl +! +Kris Peck, 9-tone windchime tuning. TL 7-3-2001 + 8 +! + 5/4 + 3/2 + 7/4 + 9/4 + 11/4 + 13/4 + 15/4 + 4/1 diff --git a/scales/chin_12.scl b/scales/chin_12.scl new file mode 100644 index 0000000..4dd8da2 --- /dev/null +++ b/scales/chin_12.scl @@ -0,0 +1,17 @@ +! chin_12.scl +! +Chinese scale, 4th cent. + 12 +! + 99.20000 + 199.50000 + 296.70000 + 398.00000 + 492.90000 + 595.20000 + 699.00000 + 790.90000 + 896.10000 + 984.90000 + 1091.40000 + 2/1 diff --git a/scales/chin_5.scl b/scales/chin_5.scl new file mode 100644 index 0000000..2d53658 --- /dev/null +++ b/scales/chin_5.scl @@ -0,0 +1,10 @@ +! chin_5.scl +! +Chinese pentatonic from Zhou period + 5 +! + 9/8 + 4/3 + 3/2 + 27/16 + 2/1 diff --git a/scales/chin_60.scl b/scales/chin_60.scl new file mode 100644 index 0000000..e22a1cd --- /dev/null +++ b/scales/chin_60.scl @@ -0,0 +1,65 @@ +! chin_60.scl +! +Chinese scale of fifths (the 60 l) + 60 +! + 3.61505 + 531441/524288 + 46.92002 + 70.38003 + 93.84004 + 2187/2048 + 1162261467/1073741824 + 160.60503 + 184.06504 + 9/8 + 207.52505 + 4782969/4194304 + 250.83002 + 274.29003 + 297.75004 + 19683/16384 + 341.05502 + 364.51503 + 387.97504 + 81/64 + 411.43505 + 43046721/33554432 + 454.74002 + 478.20003 + 501.66005 + 177147/131072 + 544.96502 + 568.42503 + 591.88504 + 729/512 + 615.34505 + 387420489/268435456 + 658.65003 + 682.11004 + 3/2 + 705.57005 + 1594323/1048576 + 748.87502 + 772.33503 + 795.79504 + 6561/4096 + 839.10002 + 862.56003 + 886.02004 + 27/16 + 909.48005 + 14348907/8388608 + 952.78502 + 976.24503 + 999.70504 + 59049/32768 + 1043.01002 + 1066.47003 + 1089.93004 + 243/128 + 1113.39005 + 129140163/67108864 + 1156.69503 + 1180.15504 + 2/1 diff --git a/scales/chin_7.scl b/scales/chin_7.scl new file mode 100644 index 0000000..f98240b --- /dev/null +++ b/scales/chin_7.scl @@ -0,0 +1,12 @@ +! chin_7.scl +! +Chinese heptatonic scale and tritriadic of 64:81:96 triad + 7 +! + 9/8 + 81/64 + 4/3 + 3/2 + 27/16 + 243/128 + 2/1 diff --git a/scales/chin_bianzhong.scl b/scales/chin_bianzhong.scl new file mode 100644 index 0000000..26abfce --- /dev/null +++ b/scales/chin_bianzhong.scl @@ -0,0 +1,17 @@ +! chin_bianzhong.scl +! +Pitches of Bianzhong bells (Xinyang). 1/1=b, Liang Mingyue, 1975. + 12 +! + 104.00000 + 308.00000 + 624.00000 + 820.00000 + 1012.00000 + 1144.00000 + 1329.00000 + 1515.00000 + 1857.00000 + 2039.00000 + 2231.00000 + 2674.00000 diff --git a/scales/chin_bianzhong2a.scl b/scales/chin_bianzhong2a.scl new file mode 100644 index 0000000..9522074 --- /dev/null +++ b/scales/chin_bianzhong2a.scl @@ -0,0 +1,17 @@ +! chin_bianzhong2a.scl +! +A-tones (GU) of 13 Xinyang bells (Ma Cheng-Yuan) 1/1=d#=619 Hz + 12 +! + 147.00000 + 308.00000 + 612.00000 + 792.00000 + 931.00000 + 1092.00000 + 1326.00000 + 1581.00000 + 1693.00000 + 2068.00000 + 2252.00000 + 2598.00000 diff --git a/scales/chin_bianzhong2b.scl b/scales/chin_bianzhong2b.scl new file mode 100644 index 0000000..2d07e80 --- /dev/null +++ b/scales/chin_bianzhong2b.scl @@ -0,0 +1,17 @@ +! CHIN_BIANZHONG2B.scl +! +B-tones (SUI) of 13 Xinyang bells (Ma Cheng-Yuan) 1/1=b+=506.6 Hz + 12 +! + 114.98540 + 308.99317 + 624.99652 + 812.98131 + 1009.98545 + 1138.97957 + 1323.94786 + 1506.01750 + 1852.96980 + 2039.00232 + 2206.96993 + 2658.99308 diff --git a/scales/chin_bianzhong3.scl b/scales/chin_bianzhong3.scl new file mode 100644 index 0000000..5ceb8cc --- /dev/null +++ b/scales/chin_bianzhong3.scl @@ -0,0 +1,31 @@ +! chin_bianzhong3.scl +! +A and B-tones of 13 Xinyang bells (Ma Cheng-Yuan) abs. pitches wrt middle-C + 26 +! + 1150.00000 + 1262.00000 + 1460.00000 + 1491.00000 + 1638.00000 + 1776.00000 + 1799.00000 + 1962.00000 + 2103.00000 + 2160.00000 + 2283.00000 + 2290.00000 + 2422.00000 + 2474.00000 + 2583.00000 + 2656.00000 + 2817.00000 + 3004.00000 + 3072.00000 + 3184.00000 + 3188.00000 + 3357.00000 + 3559.00000 + 3743.00000 + 3810.00000 + 4089.00000 diff --git a/scales/chin_bronze.scl b/scales/chin_bronze.scl new file mode 100644 index 0000000..ead3b57 --- /dev/null +++ b/scales/chin_bronze.scl @@ -0,0 +1,12 @@ +! CHIN_BRONZE.scl +! +Scale found on ancient Chinese bronze instrument 3rd c.BC & "Scholar's Lute" + 7 +! + 8/7 + 6/5 + 5/4 + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/chin_chime.scl b/scales/chin_chime.scl new file mode 100644 index 0000000..fea8fd6 --- /dev/null +++ b/scales/chin_chime.scl @@ -0,0 +1,17 @@ +! chin_chime.scl +! +Pitches of 12 stone chimes, F. Kuttner, 1951, ROMA Toronto. %1=b4 + 12 +! +-88.00000 + 462.50000 + 702.50000 + 1282.50000 + 1572.50000 + 1739.00000 + 1903.50000 + 2119.00000 + 2113.50000 + 2308.50000 + 2396.00000 + 2810.00000 diff --git a/scales/chin_ching.scl b/scales/chin_ching.scl new file mode 100644 index 0000000..3055f59 --- /dev/null +++ b/scales/chin_ching.scl @@ -0,0 +1,17 @@ +! chin_ching.scl +! +Scale of Ching Fang, c.45 BC. Pyth.steps 0 1 2 3 4 5 47 48 49 50 51 52 53 + 12 +! + 93.84004 + 9/8 + 297.75004 + 81/64 + 501.66005 + 591.88504 + 3/2 + 795.79504 + 27/16 + 999.70504 + 243/128 + 1203.61505 diff --git a/scales/chin_di.scl b/scales/chin_di.scl new file mode 100644 index 0000000..cd86b2f --- /dev/null +++ b/scales/chin_di.scl @@ -0,0 +1,11 @@ +! chin_di.scl +! +Chinese di scale + 6 +! + 229.46929 + 329.97080 + 555.03167 + 777.52793 + 875.24684 + 1213.57835 diff --git a/scales/chin_di2.scl b/scales/chin_di2.scl new file mode 100644 index 0000000..563a701 --- /dev/null +++ b/scales/chin_di2.scl @@ -0,0 +1,12 @@ +! chin_di2.scl +! +Observed tuning from Chinese flute dizi, Helmholtz/Ellis p. 518, nr.103 + 7 +! + 178.00000 + 339.00000 + 448.00000 + 662.00000 + 888.00000 + 1103.00000 + 1196.00000 diff --git a/scales/chin_huang.scl b/scales/chin_huang.scl new file mode 100644 index 0000000..38be6ba --- /dev/null +++ b/scales/chin_huang.scl @@ -0,0 +1,11 @@ +! chin_huang.scl +! +Huang Zhong qin tuning + 6 +! + 81/64 + 3/2 + 27/16 + 2/1 + 9/4 + 81/32 diff --git a/scales/chin_liu-an.scl b/scales/chin_liu-an.scl new file mode 100644 index 0000000..b6a353c --- /dev/null +++ b/scales/chin_liu-an.scl @@ -0,0 +1,16 @@ +! chin_liu-an.scl +! +Scale of Liu An, in: "Huai Nan Tzu", c.122 BC, 1st known corr. to Pyth. scale + 11 +! + 81/76 + 9/8 + 81/68 + 81/64 + 27/20 + 27/19 + 3/2 + 27/17 + 27/16 + 9/5 + 27/14 diff --git a/scales/chin_lu.scl b/scales/chin_lu.scl new file mode 100644 index 0000000..7c4eef3 --- /dev/null +++ b/scales/chin_lu.scl @@ -0,0 +1,17 @@ +! chin_lu.scl +! +Chinese L scale by Huai Nan zi, Han era. Pre Amiot 1780, Kurt Reinhard + 12 +! + 18/17 + 9/8 + 6/5 + 54/43 + 4/3 + 27/19 + 3/2 + 27/17 + 27/16 + 9/5 + 36/19 + 2/1 diff --git a/scales/chin_lu2.scl b/scales/chin_lu2.scl new file mode 100644 index 0000000..e7a2d59 --- /dev/null +++ b/scales/chin_lu2.scl @@ -0,0 +1,17 @@ +! chin_lu2.scl +! +Chinese L (Lushi chunqiu, by Lu Buwei). Mingyue: Music of the billion, p.67 + 12 +! + 2187/2048 + 9/8 + 19683/16384 + 81/64 + 177147/131072 + 729/512 + 3/2 + 6561/4096 + 27/16 + 59049/32768 + 243/128 + 2/1 diff --git a/scales/chin_lu3.scl b/scales/chin_lu3.scl new file mode 100644 index 0000000..e2cb987 --- /dev/null +++ b/scales/chin_lu3.scl @@ -0,0 +1,17 @@ +! chin_lu3.scl +! +Chinese L scale by Ho Ch'ng-T'ien, reported in Sung Shu (500 AD) + 12 +! + 101.00000 + 200.00000 + 297.00000 + 398.00000 + 493.00000 + 596.00000 + 699.00000 + 791.00000 + 897.00000 + 985.00000 + 1092.00000 + 2/1 diff --git a/scales/chin_lu3a.scl b/scales/chin_lu3a.scl new file mode 100644 index 0000000..0eea028 --- /dev/null +++ b/scales/chin_lu3a.scl @@ -0,0 +1,17 @@ +! chin_lu3a.scl +! +Chinese L scale by Ho Ch'ng-T'ien, calc. basis is "big number" 177147 + 12 +! + 17714700/16727831 + 2952450/2631019 + 590490/497483 + 1476225/1173019 + 708588/533029 + 177147/125686 + 708588/473185 + 885735/560906 + 1771470/1055723 + 8857350/5014657 + 177147/94357 + 2/1 diff --git a/scales/chin_lu4.scl b/scales/chin_lu4.scl new file mode 100644 index 0000000..ca5466f --- /dev/null +++ b/scales/chin_lu4.scl @@ -0,0 +1,17 @@ +! chin_lu4.scl +! +Chinese L "749-Temperament" + 12 +! + 97.51604 + 561001/500000 + 296.80634 + 398.58059 + 496.09663 + 597.87089 + 749/500 + 797.16119 + 420189749/250000000 + 996.45149 + 1098.22574 + 2/1 diff --git a/scales/chin_lu5.scl b/scales/chin_lu5.scl new file mode 100644 index 0000000..77cd30e --- /dev/null +++ b/scales/chin_lu5.scl @@ -0,0 +1,17 @@ +! chin_lu5.scl +! +Chinese L scale by Ch'ien Lo-Chih, c.450 AD Pyth.steps 0 154 255 103 204 etc. + 12 +! + 101.07013 + 198.52522 + 301.36509 + 398.82018 + 499.89031 + 599.11513 + 700.18527 + 799.41009 + 900.48022 + 999.70504 + 1100.77518 + 1198.23000 diff --git a/scales/chin_lusheng.scl b/scales/chin_lusheng.scl new file mode 100644 index 0000000..5026d1f --- /dev/null +++ b/scales/chin_lusheng.scl @@ -0,0 +1,10 @@ +! chin_lusheng.scl +! +Observed tuning of a small Lusheng, 1/1=d, OdC '97 + 5 +! + 329.00000 + 498.00000 + 688.00000 + 1003.00000 + 1191.00000 diff --git a/scales/chin_pan.scl b/scales/chin_pan.scl new file mode 100644 index 0000000..ffe107b --- /dev/null +++ b/scales/chin_pan.scl @@ -0,0 +1,28 @@ +! chin_pan.scl +! +Pan Huai-su pure Pythagorean system, in: Sin-Yan Shen, 1991 + 23 +! + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 32/27 + 8192/6561 + 81/64 + 2097152/1594323 + 4/3 + 1024/729 + 729/512 + 262144/177147 + 3/2 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 8388608/4782969 + 16/9 + 4096/2187 + 243/128 + 1048576/531441 + 2/1 diff --git a/scales/chin_pipa.scl b/scales/chin_pipa.scl new file mode 100644 index 0000000..3c14f79 --- /dev/null +++ b/scales/chin_pipa.scl @@ -0,0 +1,10 @@ +! chin_pipa.scl +! +Observed tuning from Chinese balloon lute p'i-p'a, Helmholtz/Ellis p. 518, nr.109 + 5 +! + 145.00000 + 351.00000 + 647.00000 + 874.00000 + 1195.00000 diff --git a/scales/chin_sheng.scl b/scales/chin_sheng.scl new file mode 100644 index 0000000..042d030 --- /dev/null +++ b/scales/chin_sheng.scl @@ -0,0 +1,12 @@ +! chin_sheng.scl +! +Observed tuning from Chinese sheng or mouth organ, Helmholtz/Ellis p. 518, nr.105 + 7 +! + 210.00000 + 338.00000 + 498.00000 + 715.00000 + 908.00000 + 1040.00000 + 1199.00000 diff --git a/scales/chin_shierlu.scl b/scales/chin_shierlu.scl new file mode 100644 index 0000000..e02a625 --- /dev/null +++ b/scales/chin_shierlu.scl @@ -0,0 +1,21 @@ +! chin_shierlu.scl +! +Old Chinese L scale, from http://en.wikipedia.org/wiki/Shi_Er_L%C3%BC +12 +! +! *黄 钟(Hung Zhōng) +! that's 1/1 Yellow-bell=Fundamental-root +! +2187/2048 ! * 大吕 (D Lǚ) ..... 3^7/2^11 +9/8 ! * 太簇 (Ti C).... 3^2/2^3 +1968/1683 ! *夹钟(JiZhōng)41*3*2^4/17/11/3^2 41-limit +81/64 ! * 姑洗 (Gū Xiǎn) .... 3^4/2^5 +1771/1311 ! *中吕(ZhngLǚ) .. 23*11*7/23*19*3=77/57= +! =(4/3)*(77/76) ~almost an PC sharper above the JI: 4/3 +729/512 ! * 蕤宾 (Ru Bīn). 3^6/2^9=(9/8)^3 tritone +3/2 ! * 林钟 (Ln Zhōng)... 5th +6561/4096 ! * 夷则 (Y Z) ...... 3^8/2^12 +27/16 ! * 南吕 (Nn Lǚ) .... 3^3/2^4 +5905/3277 ! * 无射 (W Y)....1181*5/113/29 1181-limit +243/128 ! * 应钟 (Yng Zhōng) .. 3^5/2^7 +2/1 diff --git a/scales/chin_sientsu.scl b/scales/chin_sientsu.scl new file mode 100644 index 0000000..21e66f2 --- /dev/null +++ b/scales/chin_sientsu.scl @@ -0,0 +1,10 @@ +! chin_sientsu.scl +! +Observed tuning from Chinese tamboura sienzi, Helmholtz/Ellis p. 518, nr.108 + 5 +! + 189.00000 + 386.00000 + 702.00000 + 893.00000 + 2/1 diff --git a/scales/chin_sona.scl b/scales/chin_sona.scl new file mode 100644 index 0000000..04de87c --- /dev/null +++ b/scales/chin_sona.scl @@ -0,0 +1,12 @@ +! chin_sona.scl +! +Observed tuning from Chinese oboe (so-na), Helmholtz/Ellis p. 518, nr.104 + 7 +! + 145.00000 + 297.00000 + 440.00000 + 637.00000 + 813.00000 + 1014.00000 + 1216.00000 diff --git a/scales/chin_wang-po.scl b/scales/chin_wang-po.scl new file mode 100644 index 0000000..a01288f --- /dev/null +++ b/scales/chin_wang-po.scl @@ -0,0 +1,12 @@ +! chin_wang-po.scl +! +Scale of Wang Po, 958 AD. H. Pischner: Musik in China, Berlin, 1955, p.20 + 7 +! + 9/8 + 403.22751 + 609.26340 + 3/2 + 903.70231 + 1106.39699 + 1180.87015 diff --git a/scales/chin_yangqin.scl b/scales/chin_yangqin.scl new file mode 100644 index 0000000..72298b0 --- /dev/null +++ b/scales/chin_yangqin.scl @@ -0,0 +1,12 @@ +! chin_yangqin.scl +! +Observed tuning from Chinese dulcimer yangqin, Helmholtz/Ellis p. 518, nr.107 + 7 +! + 169.00000 + 274.00000 + 491.00000 + 661.00000 + 878.00000 + 996.00000 + 1198.00000 diff --git a/scales/chin_yunlo.scl b/scales/chin_yunlo.scl new file mode 100644 index 0000000..7caab5b --- /dev/null +++ b/scales/chin_yunlo.scl @@ -0,0 +1,12 @@ +! chin_yunlo.scl +! +Observed tuning from Chinese gong-chime (yn-lo), Helmholtz/Ellis p. 518, nr.106 + 7 +! + 169.00000 + 367.00000 + 586.00000 + 674.00000 + 775.00000 + 1062.00000 + 1208.00000 diff --git a/scales/choquel.scl b/scales/choquel.scl new file mode 100644 index 0000000..c011618 --- /dev/null +++ b/scales/choquel.scl @@ -0,0 +1,17 @@ +! choquel.scl +! +Choquel/Barbour/Marpurg? + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 20/11 + 15/8 + 2/1 diff --git a/scales/chordal.scl b/scales/chordal.scl new file mode 100644 index 0000000..7719147 --- /dev/null +++ b/scales/chordal.scl @@ -0,0 +1,45 @@ +! chordal.scl +! +Chordal Notes subharmonic and harmonic + 40 +! + 3/2 + 5/4 + 7/4 + 9/4 + 11/4 + 13/4 + 15/4 + 15/4 + 15/8 + 17/8 + 19/8 + 19/16 + 2/1 + 4/3 + 8/5 + 8/7 + 16/9 + 16/11 + 16/13 + 16/15 + 7/3 + 7/2 + 10/3 + 8/3 + 5/2 + 12/5 + 12/7 + 11/9 + 13/9 + 17/10 + 17/5 + 9/7 + 9/8 + 16/9 + 11/7 + 7/6 + 7/5 + 10/7 + 6/5 + 9/5 diff --git a/scales/chrom15.scl b/scales/chrom15.scl new file mode 100644 index 0000000..2bdbfeb --- /dev/null +++ b/scales/chrom15.scl @@ -0,0 +1,12 @@ +! CHROM15.scl +! +Tonos-15 Chromatic + 7 +! + 15/14 + 15/13 + 15/11 + 3/2 + 30/19 + 5/3 + 2/1 diff --git a/scales/chrom15_inv.scl b/scales/chrom15_inv.scl new file mode 100644 index 0000000..110f90a --- /dev/null +++ b/scales/chrom15_inv.scl @@ -0,0 +1,12 @@ +! chrom15_inv.scl +! +Inverted Chromatic Tonos-15 Harmonia + 7 +! + 6/5 + 19/15 + 4/3 + 22/15 + 26/15 + 28/15 + 2/1 diff --git a/scales/chrom15_inv2.scl b/scales/chrom15_inv2.scl new file mode 100644 index 0000000..39a2d65 --- /dev/null +++ b/scales/chrom15_inv2.scl @@ -0,0 +1,12 @@ +! CHROM15_INV2.scl +! +A harmonic form of the Chromatic Tonos-15 inverted + 7 +! + 16/15 + 17/15 + 4/3 + 22/15 + 23/15 + 8/5 + 2/1 diff --git a/scales/chrom17.scl b/scales/chrom17.scl new file mode 100644 index 0000000..96db235 --- /dev/null +++ b/scales/chrom17.scl @@ -0,0 +1,12 @@ +! chrom17.scl +! +Tonos-17 Chromatic + 7 +! + 17/16 + 17/15 + 17/12 + 17/11 + 34/21 + 17/10 + 2/1 diff --git a/scales/chrom17_con.scl b/scales/chrom17_con.scl new file mode 100644 index 0000000..980f4ee --- /dev/null +++ b/scales/chrom17_con.scl @@ -0,0 +1,12 @@ +! chrom17_con.scl +! +Conjunct Tonos-17 Chromatic + 7 +! + 17/16 + 17/15 + 17/12 + 34/23 + 17/11 + 17/9 + 2/1 diff --git a/scales/chrom19.scl b/scales/chrom19.scl new file mode 100644 index 0000000..a22275e --- /dev/null +++ b/scales/chrom19.scl @@ -0,0 +1,12 @@ +! chrom19.scl +! +Tonos-19 Chromatic + 7 +! + 19/18 + 19/17 + 19/14 + 19/13 + 38/25 + 19/12 + 2/1 diff --git a/scales/chrom19_con.scl b/scales/chrom19_con.scl new file mode 100644 index 0000000..8799cd1 --- /dev/null +++ b/scales/chrom19_con.scl @@ -0,0 +1,12 @@ +! chrom19_con.scl +! +Conjunct Tonos-19 Chromatic + 7 +! + 19/18 + 19/17 + 19/14 + 38/27 + 19/13 + 19/11 + 2/1 diff --git a/scales/chrom21.scl b/scales/chrom21.scl new file mode 100644 index 0000000..01eadd2 --- /dev/null +++ b/scales/chrom21.scl @@ -0,0 +1,12 @@ +! chrom21.scl +! +Tonos-21 Chromatic + 7 +! + 21/20 + 21/19 + 21/16 + 3/2 + 14/9 + 21/13 + 2/1 diff --git a/scales/chrom21_inv.scl b/scales/chrom21_inv.scl new file mode 100644 index 0000000..4276e96 --- /dev/null +++ b/scales/chrom21_inv.scl @@ -0,0 +1,12 @@ +! chrom21_inv.scl +! +Inverted Chromatic Tonos-21 Harmonia + 7 +! + 26/21 + 9/7 + 4/3 + 32/21 + 38/21 + 40/21 + 2/1 diff --git a/scales/chrom21_inv2.scl b/scales/chrom21_inv2.scl new file mode 100644 index 0000000..43f36b0 --- /dev/null +++ b/scales/chrom21_inv2.scl @@ -0,0 +1,12 @@ +! CHROM21_INV2.scl +! +Inverted harmonic form of the Chromatic Tonos-21 + 7 +! + 16/15 + 8/7 + 4/3 + 32/21 + 34/21 + 12/7 + 2/1 diff --git a/scales/chrom23.scl b/scales/chrom23.scl new file mode 100644 index 0000000..026c9fc --- /dev/null +++ b/scales/chrom23.scl @@ -0,0 +1,12 @@ +! chrom23.scl +! +Tonos-23 Chromatic + 7 +! + 23/22 + 23/21 + 23/18 + 23/16 + 23/15 + 23/14 + 2/1 diff --git a/scales/chrom23_con.scl b/scales/chrom23_con.scl new file mode 100644 index 0000000..fdf72b3 --- /dev/null +++ b/scales/chrom23_con.scl @@ -0,0 +1,12 @@ +! chrom23_con.scl +! +Conjunct Tonos-23 Chromatic + 7 +! + 23/22 + 23/21 + 23/18 + 23/17 + 23/16 + 23/13 + 2/1 diff --git a/scales/chrom25.scl b/scales/chrom25.scl new file mode 100644 index 0000000..41d0996 --- /dev/null +++ b/scales/chrom25.scl @@ -0,0 +1,12 @@ +! chrom25.scl +! +Tonos-25 Chromatic + 7 +! + 50/47 + 25/22 + 25/18 + 25/16 + 5/3 + 25/14 + 2/1 diff --git a/scales/chrom25_con.scl b/scales/chrom25_con.scl new file mode 100644 index 0000000..8cf2172 --- /dev/null +++ b/scales/chrom25_con.scl @@ -0,0 +1,12 @@ +! chrom25_con.scl +! +Conjunct Tonos-25 Chromatic + 7 +! + 50/47 + 25/22 + 25/18 + 25/17 + 25/16 + 25/13 + 2/1 diff --git a/scales/chrom27.scl b/scales/chrom27.scl new file mode 100644 index 0000000..0486a3c --- /dev/null +++ b/scales/chrom27.scl @@ -0,0 +1,12 @@ +! chrom27.scl +! +Tonos-27 Chromatic + 7 +! + 18/17 + 9/8 + 27/20 + 3/2 + 27/17 + 27/16 + 2/1 diff --git a/scales/chrom27_inv.scl b/scales/chrom27_inv.scl new file mode 100644 index 0000000..2edb1d6 --- /dev/null +++ b/scales/chrom27_inv.scl @@ -0,0 +1,12 @@ +! chrom27_inv.scl +! +Inverted Chromatic Tonos-27 Harmonia + 7 +! + 32/27 + 34/27 + 4/3 + 40/27 + 16/9 + 17/9 + 2/1 diff --git a/scales/chrom27_inv2.scl b/scales/chrom27_inv2.scl new file mode 100644 index 0000000..9701863 --- /dev/null +++ b/scales/chrom27_inv2.scl @@ -0,0 +1,12 @@ +! chrom27_inv2.scl +! +Inverted harmonic form of the Chromatic Tonos-27 + 7 +! + 28/27 + 29/27 + 4/3 + 40/27 + 14/9 + 5/3 + 2/1 diff --git a/scales/chrom29.scl b/scales/chrom29.scl new file mode 100644 index 0000000..1cfcd3e --- /dev/null +++ b/scales/chrom29.scl @@ -0,0 +1,12 @@ +! chrom29.scl +! +Tonos-29 Chromatic + 7 +! + 29/28 + 29/27 + 29/22 + 29/20 + 29/19 + 29/18 + 2/1 diff --git a/scales/chrom29_con.scl b/scales/chrom29_con.scl new file mode 100644 index 0000000..fd919cb --- /dev/null +++ b/scales/chrom29_con.scl @@ -0,0 +1,12 @@ +! chrom29_con.scl +! +Conjunct Tonos-29 Chromatic + 7 +! + 29/28 + 29/27 + 29/22 + 29/21 + 29/20 + 29/16 + 2/1 diff --git a/scales/chrom31.scl b/scales/chrom31.scl new file mode 100644 index 0000000..dd8f6f4 --- /dev/null +++ b/scales/chrom31.scl @@ -0,0 +1,13 @@ +! chrom31.scl +! +Tonos-31 Chromatic. Tone 24 alternates with 23 as MESE or A + 8 +! + 31/29 + 31/27 + 31/24 + 31/23 + 31/22 + 31/21 + 31/20 + 2/1 diff --git a/scales/chrom31_con.scl b/scales/chrom31_con.scl new file mode 100644 index 0000000..0abecb7 --- /dev/null +++ b/scales/chrom31_con.scl @@ -0,0 +1,13 @@ +! chrom31_con.scl +! +Conjunct Tonos-31 Chromatic + 8 +! + 31/29 + 31/27 + 31/24 + 31/23 + 31/22 + 31/21 + 31/18 + 2/1 diff --git a/scales/chrom33.scl b/scales/chrom33.scl new file mode 100644 index 0000000..ec61cbf --- /dev/null +++ b/scales/chrom33.scl @@ -0,0 +1,12 @@ +! chrom33.scl +! +Tonos-33 Chromatic. A variant is 66 63 60 48 + 7 +! + 33/31 + 33/29 + 11/8 + 3/2 + 11/7 + 33/20 + 2/1 diff --git a/scales/chrom33_con.scl b/scales/chrom33_con.scl new file mode 100644 index 0000000..338d44d --- /dev/null +++ b/scales/chrom33_con.scl @@ -0,0 +1,12 @@ +! chrom33_con.scl +! +Conjunct Tonos-33 Chromatic + 7 +! + 33/31 + 33/29 + 11/8 + 33/23 + 3/2 + 11/6 + 2/1 diff --git a/scales/chrom_new.scl b/scales/chrom_new.scl new file mode 100644 index 0000000..fa1951e --- /dev/null +++ b/scales/chrom_new.scl @@ -0,0 +1,12 @@ +! chrom_new.scl +! +New Chromatic genus 4.5 + 9 + 16.5 + 7 +! + 75.00000 + 225.00000 + 500.00000 + 700.00000 + 775.00000 + 925.00000 + 2/1 diff --git a/scales/chrom_new2.scl b/scales/chrom_new2.scl new file mode 100644 index 0000000..c9d0cc4 --- /dev/null +++ b/scales/chrom_new2.scl @@ -0,0 +1,12 @@ +! chrom_new2.scl +! +New Chromatic genus 14/3 + 28/3 + 16 parts + 7 +! + 77.77778 + 233.33333 + 500.00000 + 700.00000 + 777.77778 + 933.33333 + 2/1 diff --git a/scales/chrom_soft.scl b/scales/chrom_soft.scl new file mode 100644 index 0000000..389b730 --- /dev/null +++ b/scales/chrom_soft.scl @@ -0,0 +1,12 @@ +! chrom_soft.scl +! +100/81 Chromatic. This genus is a good approximation to the soft chromatic + 7 +! + 27/26 + 27/25 + 4/3 + 3/2 + 81/52 + 81/50 + 2/1 diff --git a/scales/chrom_soft2.scl b/scales/chrom_soft2.scl new file mode 100644 index 0000000..7a1afc7 --- /dev/null +++ b/scales/chrom_soft2.scl @@ -0,0 +1,12 @@ +! chrom_soft2.scl +! +1:2 Soft Chromatic + 7 +! + 44.44444 + 133.33333 + 500.00000 + 700.00000 + 744.44444 + 833.33333 + 2/1 diff --git a/scales/chrom_soft3.scl b/scales/chrom_soft3.scl new file mode 100644 index 0000000..d74f0cc --- /dev/null +++ b/scales/chrom_soft3.scl @@ -0,0 +1,12 @@ +! chrom_soft3.scl +! +Soft chromatic genus from Kathleen Schlesinger's modified Mixolydian Harmonia + 7 +! + 28/27 + 14/13 + 4/3 + 3/2 + 14/9 + 21/13 + 2/1 diff --git a/scales/chrys_diat-1st-ji.scl b/scales/chrys_diat-1st-ji.scl new file mode 100644 index 0000000..1aed073 --- /dev/null +++ b/scales/chrys_diat-1st-ji.scl @@ -0,0 +1,12 @@ +! chrys_diat-1st-ji.scl +! +Chrysanthos JI Diatonic and 1st Byzantine Liturgical mode + 7 +! + 12/11 + 32/27 + 4/3 + 3/2 + 18/11 + 16/9 + 2/1 diff --git a/scales/chrys_diatenh-var-ji.scl b/scales/chrys_diatenh-var-ji.scl new file mode 100644 index 0000000..b5c47fa --- /dev/null +++ b/scales/chrys_diatenh-var-ji.scl @@ -0,0 +1,12 @@ +! chrys_diatenh-var-ji.scl +! +JI interpretation of Chrysanthos Diatonic-Enharmonic Byzantine mode + 7 +! + 12/11 + 32/27 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/chrys_enhdiat-var-ji.scl b/scales/chrys_enhdiat-var-ji.scl new file mode 100644 index 0000000..c76b45f --- /dev/null +++ b/scales/chrys_enhdiat-var-ji.scl @@ -0,0 +1,12 @@ +! chrys_enhdiat-var-ji.scl +! +JI interpretation of Chrysanthos Enharmonic-Diatonic Byzantine Mode + 7 +! + 8/7 + 9/7 + 4/3 + 3/2 + 18/11 + 16/9 + 2/1 diff --git a/scales/cifariello.scl b/scales/cifariello.scl new file mode 100644 index 0000000..7583a37 --- /dev/null +++ b/scales/cifariello.scl @@ -0,0 +1,20 @@ +! cifariello.scl +! +F. Cifariello Ciardi, ICMC 86 Proc. 15-tone 5-limit tuning + 15 +! + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 36/25 + 3/2 + 8/5 + 5/3 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/circ5120.scl b/scales/circ5120.scl new file mode 100644 index 0000000..7d0b71b --- /dev/null +++ b/scales/circ5120.scl @@ -0,0 +1,18 @@ +! circ5120.scl +Circle of seven minor, six major, and one subminor thirds in 531-tET + 14 +! +24.858757 +205.649718 +230.508475 +316.384181 +411.299435 +522.033898 +616.949153 +702.824859 +727.683616 +908.474576 +933.333333 +1019.209040 +1114.124294 +2/1 diff --git a/scales/circb22.scl b/scales/circb22.scl new file mode 100644 index 0000000..83a4d24 --- /dev/null +++ b/scales/circb22.scl @@ -0,0 +1,26 @@ +! circb22.scl +circulating scale from pipedum_22c in 50/49 (-1,5) tuning; approximate pajara +22 +! +56.609169 +108.337097 +165.798940 +217.526867 +274.136036 +325.863964 +382.473133 +434.201060 +491.662903 +543.390831 +600.000000 +656.609169 +708.337097 +765.798940 +817.526867 +874.136036 +925.863964 +982.473133 +1034.201060 +1091.662903 +1143.390831 +2/1 diff --git a/scales/circle31.scl b/scales/circle31.scl new file mode 100644 index 0000000..05bb611 --- /dev/null +++ b/scales/circle31.scl @@ -0,0 +1,36 @@ +! circle31.scl +! +Approximate 31-tET with 18 5^(1/4) fifths, 12 (56/5)^(1/6) fifths, and a (4096/6125)*sqrt(5) + 31 +! + 39.04564 + 76.04900 + 117.10786 + 153.61881 + 193.15686 + 233.21637 + 269.20586 + 310.26471 + 347.78954 + 5/4 + 427.38710 + 462.36271 + 503.42157 + 541.96027 + 579.47057 + 620.52943 + 656.53344 + 696.57843 + 736.13100 + 25/16 + 8/5 + 850.70417 + 889.73529 + 930.30173 + 965.78428 + 1006.84314 + 1044.87491 + 1082.89214 + 1123.95100 + 1159.44808 + 2/1 diff --git a/scales/circos.scl b/scales/circos.scl new file mode 100644 index 0000000..faf9034 --- /dev/null +++ b/scales/circos.scl @@ -0,0 +1,16 @@ +! circos.scl +[1, 3] weight range weighted least squares circulating temperament +12 +! +89.617502 +195.633226 +300.984164 +391.528643 +501.698852 +587.325482 +697.824592 +796.007518 +893.677492 +1002.402613 +1088.884819 +2/1 diff --git a/scales/ckring9.scl b/scales/ckring9.scl new file mode 100644 index 0000000..fd32a9c --- /dev/null +++ b/scales/ckring9.scl @@ -0,0 +1,18 @@ +! ckring9.scl +! +Double-tie circular mirroring with common pivot of 3:5:7:9 + 13 +! + 10/9 + 7/6 + 6/5 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 5/3 + 12/7 + 9/5 + 2/1 diff --git a/scales/clampitt_phi.scl b/scales/clampitt_phi.scl new file mode 100644 index 0000000..ef1cd95 --- /dev/null +++ b/scales/clampitt_phi.scl @@ -0,0 +1,12 @@ +! clampitt_phi.scl +! +David Clampitt, phi+1 mod 3phi+2, from "Pairwise Well-Formed Scales", 1997 + 7 +! + 175.07764 + 350.15528 + 458.35921 + 633.43685 + 916.71842 + 1091.79607 + 2/1 diff --git a/scales/classr.scl b/scales/classr.scl new file mode 100644 index 0000000..feff29a --- /dev/null +++ b/scales/classr.scl @@ -0,0 +1,17 @@ +! classr.scl +! +Marvel projection to the 5-limit of class + 12 +! + 135/128 + 1125/1024 + 6/5 + 5/4 + 675/512 + 45/32 + 3/2 + 25/16 + 27/16 + 225/128 + 15/8 + 2/1 diff --git a/scales/cluster.scl b/scales/cluster.scl new file mode 100644 index 0000000..ccb033c --- /dev/null +++ b/scales/cluster.scl @@ -0,0 +1,23 @@ +! cluster.scl +! +13-tone 5-limit Tritriadic Cluster + 13 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 +!This set of notes is sufficient to play all 8 species of the Ellis Trichordals +!(ma.ma.ma. through mi.mi.mi.) of the 3 types, D->T, M->T, and D->M with 1/1 asa +!common tonic. By modal rotation, all 56 modes of each type are playable. The +!D->M contain 2 each of 6,7,and 8 tone scales; the other type only 7 tone scale. +!For further symmetry, add 25/18 to make 14 tones. diff --git a/scales/cluster6c.scl b/scales/cluster6c.scl new file mode 100644 index 0000000..7b15a43 --- /dev/null +++ b/scales/cluster6c.scl @@ -0,0 +1,11 @@ +! cluster6c.scl +! +Six-Tone Triadic Cluster 3:4:5 + 6 +! + 10/9 + 6/5 + 4/3 + 8/5 + 5/3 + 2/1 diff --git a/scales/cluster6d.scl b/scales/cluster6d.scl new file mode 100644 index 0000000..cca44d4 --- /dev/null +++ b/scales/cluster6d.scl @@ -0,0 +1,11 @@ +! cluster6d.scl +! +Six-Tone Triadic Cluster 3:5:4 + 6 +! + 10/9 + 5/4 + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/cluster6e.scl b/scales/cluster6e.scl new file mode 100644 index 0000000..9ab315b --- /dev/null +++ b/scales/cluster6e.scl @@ -0,0 +1,11 @@ +! CLUSTER6e.scl +! +Six-Tone Triadic Cluster 5:6:8 + 6 +! + 6/5 + 5/4 + 3/2 + 8/5 + 48/25 + 2/1 diff --git a/scales/cluster6f.scl b/scales/cluster6f.scl new file mode 100644 index 0000000..0e908d7 --- /dev/null +++ b/scales/cluster6f.scl @@ -0,0 +1,11 @@ +! CLUSTER6f.scl +! +Six-Tone Triadic Cluster 5:8:6 + 6 +! + 6/5 + 4/3 + 8/5 + 5/3 + 48/25 + 2/1 diff --git a/scales/cluster6g.scl b/scales/cluster6g.scl new file mode 100644 index 0000000..d8c9adc --- /dev/null +++ b/scales/cluster6g.scl @@ -0,0 +1,11 @@ +! cluster6g.scl +! +Six-Tone Triadic Cluster 4:5:7, genus [577] + 6 +! + 35/32 + 8/7 + 5/4 + 10/7 + 7/4 + 2/1 diff --git a/scales/cluster6i.scl b/scales/cluster6i.scl new file mode 100644 index 0000000..dbc1531 --- /dev/null +++ b/scales/cluster6i.scl @@ -0,0 +1,11 @@ +! CLUSTER6i.scl +! +Six-Tone Triadic Cluster 5:6:7 + 6 +! + 6/5 + 7/5 + 10/7 + 42/25 + 12/7 + 2/1 diff --git a/scales/cluster6j.scl b/scales/cluster6j.scl new file mode 100644 index 0000000..fc17bac --- /dev/null +++ b/scales/cluster6j.scl @@ -0,0 +1,11 @@ +! CLUSTER6j.scl +! +Six-Tone Triadic Cluster 5:7:6 + 6 +! + 7/6 + 6/5 + 7/5 + 5/3 + 42/25 + 2/1 diff --git a/scales/cluster8b.scl b/scales/cluster8b.scl new file mode 100644 index 0000000..42c6c65 --- /dev/null +++ b/scales/cluster8b.scl @@ -0,0 +1,13 @@ +! cluster8b.scl +! +Eight-Tone Triadic Cluster 4:6:5, genus [3555] + 8 +! + 75/64 + 6/5 + 5/4 + 3/2 + 25/16 + 8/5 + 15/8 + 2/1 diff --git a/scales/cluster8c.scl b/scales/cluster8c.scl new file mode 100644 index 0000000..2de926d --- /dev/null +++ b/scales/cluster8c.scl @@ -0,0 +1,13 @@ +! cluster8c.scl +! +Eight-Tone Triadic Cluster 3:4:5 + 8 +! + 10/9 + 6/5 + 4/3 + 25/18 + 8/5 + 5/3 + 50/27 + 2/1 diff --git a/scales/cluster8d.scl b/scales/cluster8d.scl new file mode 100644 index 0000000..e3d7af4 --- /dev/null +++ b/scales/cluster8d.scl @@ -0,0 +1,13 @@ +! cluster8d.scl +! +Eight-Tone Triadic Cluster 3:5:4 + 8 +! + 10/9 + 5/4 + 4/3 + 40/27 + 3/2 + 5/3 + 16/9 + 2/1 diff --git a/scales/cluster8e.scl b/scales/cluster8e.scl new file mode 100644 index 0000000..ee192c1 --- /dev/null +++ b/scales/cluster8e.scl @@ -0,0 +1,13 @@ +! cluster8e.scl +! +Eight-Tone Triadic Cluster 5:6:8 + 8 +! + 6/5 + 5/4 + 32/25 + 3/2 + 192/125 + 8/5 + 48/25 + 2/1 diff --git a/scales/cluster8f.scl b/scales/cluster8f.scl new file mode 100644 index 0000000..93c4393 --- /dev/null +++ b/scales/cluster8f.scl @@ -0,0 +1,13 @@ +! CLUSTER8f.scl +! +Eight-Tone Triadic Cluster 5:8:6 + 8 +! + 144/125 + 6/5 + 4/3 + 36/25 + 8/5 + 5/3 + 48/25 + 2/1 diff --git a/scales/cluster8h.scl b/scales/cluster8h.scl new file mode 100644 index 0000000..56307d8 --- /dev/null +++ b/scales/cluster8h.scl @@ -0,0 +1,13 @@ +! cluster8h.scl +! +Eight-Tone Triadic Cluster 4:7:5, genus [5557] + 8 +! + 35/32 + 5/4 + 175/128 + 7/5 + 25/16 + 8/5 + 7/4 + 2/1 diff --git a/scales/cluster8i.scl b/scales/cluster8i.scl new file mode 100644 index 0000000..47097d2 --- /dev/null +++ b/scales/cluster8i.scl @@ -0,0 +1,13 @@ +! CLUSTER8i.scl +! +Eight-Tone Triadic Cluster 5:6:7 + 8 +! + 147/125 + 6/5 + 7/5 + 10/7 + 42/25 + 12/7 + 49/25 + 2/1 diff --git a/scales/cluster8j.scl b/scales/cluster8j.scl new file mode 100644 index 0000000..a364b96 --- /dev/null +++ b/scales/cluster8j.scl @@ -0,0 +1,13 @@ +! CLUSTER8j.scl +! +Eight-Tone Triadic Cluster 5:7:6 + 8 +! + 126/125 + 7/6 + 6/5 + 7/5 + 36/25 + 5/3 + 42/25 + 2/1 diff --git a/scales/cohenf_11.scl b/scales/cohenf_11.scl new file mode 100644 index 0000000..74f2194 --- /dev/null +++ b/scales/cohenf_11.scl @@ -0,0 +1,16 @@ +! cohenf_11.scl +! +Flynn Cohen, 7-limit scale of "Rameau's nephew" (1996) + 11 +! + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 2/1 diff --git a/scales/coherent49.scl b/scales/coherent49.scl new file mode 100644 index 0000000..e9e1a63 --- /dev/null +++ b/scales/coherent49.scl @@ -0,0 +1,54 @@ +! coherent49.scl +! +Generator is the positive root of x^4 - x^2 - 1, Raph, Meta-Sidi, 72&121 temperament sqrtphi <30 35 38 39 ... | + 49 +! + 30.17385 + 49.63544 + 79.80930 + 99.27089 + 129.44474 + 148.90633 + 179.08019 + 198.54178 + 228.71563 + 248.17722 + 278.35108 + 297.81267 + 317.27426 + 347.44811 + 366.90970 + 397.08356 + 416.54515 + 446.71900 + 466.18059 + 496.35445 + 515.81604 + 545.98989 + 565.45148 + 595.62533 + 615.08693 + 645.26078 + 664.72237 + 694.89622 + 714.35782 + 733.81941 + 763.99326 + 783.45485 + 813.62870 + 833.09030 + 863.26415 + 882.72574 + 912.89959 + 932.36119 + 962.53504 + 981.99663 + 1012.17048 + 1031.63207 + 1061.80593 + 1081.26752 + 1111.44137 + 1130.90296 + 1150.36456 + 1180.53841 + 2/1 diff --git a/scales/coleman10.scl b/scales/coleman10.scl new file mode 100644 index 0000000..f41ecb9 --- /dev/null +++ b/scales/coleman10.scl @@ -0,0 +1,17 @@ +! coleman10.scl +! +Coleman 10 (2001) + 12 +! + 98.50000 + 198.50000 + 298.50000 + 397.00000 + 500.50000 + 597.50000 + 699.50000 + 798.50000 + 898.00000 + 999.50000 + 1096.50000 + 2/1 diff --git a/scales/coleman11.scl b/scales/coleman11.scl new file mode 100644 index 0000000..b3c1b40 --- /dev/null +++ b/scales/coleman11.scl @@ -0,0 +1,17 @@ +! C:\scalamake\src2\scl\coleman11.scl +! +Jim Coleman's XI piano temperament. TL 16 Mar 1999 + 12 +! + 97.00000 + 197.00000 + 297.00000 + 394.00000 + 501.00000 + 595.00000 + 699.00000 + 797.00000 + 896.00000 + 999.00000 + 1093.00000 + 2/1 diff --git a/scales/coleman16.scl b/scales/coleman16.scl new file mode 100644 index 0000000..883e080 --- /dev/null +++ b/scales/coleman16.scl @@ -0,0 +1,17 @@ +! coleman16.scl +! +Balanced 16 from Jim Coleman Sr. (2001) + 12 +! + 94.00000 + 196.00000 + 296.00000 + 392.00000 + 500.00000 + 592.00000 + 698.00000 + 795.00000 + 894.00000 + 998.00000 + 1092.00000 + 2/1 diff --git a/scales/coleman4.scl b/scales/coleman4.scl new file mode 100644 index 0000000..e032212 --- /dev/null +++ b/scales/coleman4.scl @@ -0,0 +1,17 @@ +! coleman4.scl +! +Coleman IV from Jim Coleman Sr. + 12 +! + 98.00000 + 198.00000 + 298.00000 + 396.00000 + 500.00000 + 598.00000 + 698.00000 + 798.00000 + 898.00000 + 998.00000 + 1096.00000 + 2/1 diff --git a/scales/coll7.scl b/scales/coll7.scl new file mode 100644 index 0000000..7a3d9d6 --- /dev/null +++ b/scales/coll7.scl @@ -0,0 +1,11 @@ +! coll7.scl +Seven note Collatz cycle scale, -17 starting point +7 +! +37/34 +41/34 +91/68 +25/17 +55/34 +61/34 +2/1 diff --git a/scales/collangettes.scl b/scales/collangettes.scl new file mode 100644 index 0000000..cace204 --- /dev/null +++ b/scales/collangettes.scl @@ -0,0 +1,29 @@ +! collangettes.scl +! +d'Erlanger vol.5, p. 23. Pre Maurice Collangettes, 24 tone Arabic system + 24 +! + 36/35 + 256/243 + 12/11 + 9/8 + 81/70 + 32/27 + 27/22 + 81/64 + 729/560 + 4/3 + 48/35 + 1024/729 + 16/11 + 3/2 + 54/35 + 128/81 + 18/11 + 27/16 + 243/140 + 16/9 + 64/35 + 243/128 + 64/33 + 2/1 diff --git a/scales/colonna1.scl b/scales/colonna1.scl new file mode 100644 index 0000000..a7f3198 --- /dev/null +++ b/scales/colonna1.scl @@ -0,0 +1,17 @@ +! colonna1.scl +! +Colonna's irregular Just Intonation no. 1 (1618) + 12 +! + 25/24 + 10/9 + 85/72 + 5/4 + 4/3 + 25/18 + 3/2 + 55/36 + 5/3 + 85/48 + 15/8 + 2/1 diff --git a/scales/colonna2.scl b/scales/colonna2.scl new file mode 100644 index 0000000..fc795dd --- /dev/null +++ b/scales/colonna2.scl @@ -0,0 +1,17 @@ +! colonna2.scl +! +Colonna's irregular Just Intonation no. 2 (1618) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 11/6 + 2/1 diff --git a/scales/compton48.scl b/scales/compton48.scl new file mode 100644 index 0000000..18d5fb2 --- /dev/null +++ b/scales/compton48.scl @@ -0,0 +1,53 @@ +! compton48.scl +! +Compton[48] 11-limit tweaked + 48 +! + 50.02948 + 66.62693 + 83.40254 + 100.00000 + 150.02948 + 166.62693 + 183.40254 + 200.00000 + 250.02948 + 266.62693 + 283.40254 + 300.00000 + 350.02948 + 366.62693 + 383.40254 + 400.00000 + 450.02948 + 466.62693 + 483.40254 + 500.00000 + 550.02948 + 566.62693 + 583.40254 + 600.00000 + 650.02948 + 666.62693 + 683.40254 + 700.00000 + 750.02948 + 766.62693 + 783.40254 + 800.00000 + 850.02948 + 866.62693 + 883.40254 + 900.00000 + 950.02948 + 966.62693 + 983.40254 + 1000.00000 + 1050.02948 + 1066.62693 + 1083.40254 + 1100.00000 + 1150.02948 + 1166.62693 + 1183.40254 + 2/1 diff --git a/scales/concertina.scl b/scales/concertina.scl new file mode 100644 index 0000000..2a7c142 --- /dev/null +++ b/scales/concertina.scl @@ -0,0 +1,19 @@ +! concertina.scl +! +English Concertina, Helmholtz/Ellis, p. 470 + 14 +! + 25/24 + 10/9 + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/cons11.scl b/scales/cons11.scl new file mode 100644 index 0000000..3b25b98 --- /dev/null +++ b/scales/cons11.scl @@ -0,0 +1,12 @@ +! cons11.scl +! +Set of intervals with num + den <= 11 not exceeding 2/1 + 7 +! + 6/5 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/cons12.scl b/scales/cons12.scl new file mode 100644 index 0000000..de73cc6 --- /dev/null +++ b/scales/cons12.scl @@ -0,0 +1,13 @@ +! cons12.scl +! +Set of intervals with num + den <= 12 not exceeding 2/1 + 8 +! + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/cons13.scl b/scales/cons13.scl new file mode 100644 index 0000000..98fc4bb --- /dev/null +++ b/scales/cons13.scl @@ -0,0 +1,15 @@ +! cons13.scl +! +Set of intervals with num + den <= 13 not exceeding 2/1 + 10 +! + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 2/1 diff --git a/scales/cons14.scl b/scales/cons14.scl new file mode 100644 index 0000000..3e35c87 --- /dev/null +++ b/scales/cons14.scl @@ -0,0 +1,16 @@ +! cons14.scl +! +Set of intervals with num + den <= 14 not exceeding 2/1 + 11 +! + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 2/1 diff --git a/scales/cons15.scl b/scales/cons15.scl new file mode 100644 index 0000000..aa13faf --- /dev/null +++ b/scales/cons15.scl @@ -0,0 +1,17 @@ +! cons15.scl +! +Set of intervals with num + den <= 15 not exceeding 2/1 + 12 +! + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 2/1 diff --git a/scales/cons16.scl b/scales/cons16.scl new file mode 100644 index 0000000..d7dbc54 --- /dev/null +++ b/scales/cons16.scl @@ -0,0 +1,18 @@ +! cons16.scl +! +Set of intervals with num + den <= 16 not exceeding 2/1 + 13 +! + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 2/1 diff --git a/scales/cons17.scl b/scales/cons17.scl new file mode 100644 index 0000000..1acabce --- /dev/null +++ b/scales/cons17.scl @@ -0,0 +1,21 @@ +! cons17.scl +! +Set of intervals with num + den <= 17 not exceeding 2/1 + 16 +! + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/cons18.scl b/scales/cons18.scl new file mode 100644 index 0000000..e04663b --- /dev/null +++ b/scales/cons18.scl @@ -0,0 +1,22 @@ +! cons18.scl +! +Set of intervals with num + den <= 18 not exceeding 2/1 + 17 +! + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 5/3 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/cons19.scl b/scales/cons19.scl new file mode 100644 index 0000000..c7d982a --- /dev/null +++ b/scales/cons19.scl @@ -0,0 +1,25 @@ +! cons19.scl +! +Set of intervals with num + den <= 19 not exceeding 2/1 + 20 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/cons20.scl b/scales/cons20.scl new file mode 100644 index 0000000..af31de2 --- /dev/null +++ b/scales/cons20.scl @@ -0,0 +1,27 @@ +! cons20.scl +! +Set of intervals with num + den <= 20 not exceeding 2/1 + 22 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 2/1 diff --git a/scales/cons21.scl b/scales/cons21.scl new file mode 100644 index 0000000..30d7003 --- /dev/null +++ b/scales/cons21.scl @@ -0,0 +1,29 @@ +! cons21.scl +! +Set of intervals with num + den <= 21 not exceeding 2/1 + 24 +! + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 2/1 diff --git a/scales/cons8.scl b/scales/cons8.scl new file mode 100644 index 0000000..4c4da49 --- /dev/null +++ b/scales/cons8.scl @@ -0,0 +1,9 @@ +! cons8.scl +! +Set of intervals with num + den <= 8 not exceeding 2/1 + 4 +! + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/cons9.scl b/scales/cons9.scl new file mode 100644 index 0000000..b3fbe32 --- /dev/null +++ b/scales/cons9.scl @@ -0,0 +1,10 @@ +! cons9.scl +! +Set of intervals with num + den <= 9 not exceeding 2/1 + 5 +! + 5/4 + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/cons_5.scl b/scales/cons_5.scl new file mode 100644 index 0000000..fead701 --- /dev/null +++ b/scales/cons_5.scl @@ -0,0 +1,12 @@ +! cons_5.scl +! +Set of consonant 5-limit intervals within the octave + 7 +! + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 9/5 diff --git a/scales/cons_7.scl b/scales/cons_7.scl new file mode 100644 index 0000000..21f8f21 --- /dev/null +++ b/scales/cons_7.scl @@ -0,0 +1,15 @@ +! cons_7.scl +! +Set of consonant 7-limit intervals of tetrad 4:5:6:7 and inverse + 10 +! + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 diff --git a/scales/cons_7a.scl b/scales/cons_7a.scl new file mode 100644 index 0000000..d79d039 --- /dev/null +++ b/scales/cons_7a.scl @@ -0,0 +1,16 @@ +! cons_7a.scl +! +Set of consonant 7-limit intervals, harmonic entropy minima + 11 +! + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 7/4 diff --git a/scales/cont_frac1.scl b/scales/cont_frac1.scl new file mode 100644 index 0000000..63c931a --- /dev/null +++ b/scales/cont_frac1.scl @@ -0,0 +1,19 @@ +! cont_frac1.scl +! +Continued fraction scale 1, see McLaren in Xenharmonikon 15, pp.33-38 + 14 +! + 17.586 cents + 35.324 cents + 144.501 cents + 170.140 cents + 262.822 cents + 393.347 cents + 466.181 cents + 591.807 cents + 692.773 cents + 770.284 cents + 818.652 cents + 932.366 cents + 1080.764 cents + 1115.066 cents diff --git a/scales/cont_frac2.scl b/scales/cont_frac2.scl new file mode 100644 index 0000000..0f9f676 --- /dev/null +++ b/scales/cont_frac2.scl @@ -0,0 +1,20 @@ +! cont_frac2.scl +! +Continued fraction scale 2, see McLaren in Xenharmonikon 15, pp.33-38 + 15 +! + 46.003 cents + 135.968 cents + 165.005 cents + 257.376 cents + 272.981 cents + 400.028 cents + 422.067 cents + 518.453 cents + 646.633 cents + 704.876 cents + 845.880 cents + 871.569 cents + 1024.875 cents + 1064.813 cents + 1187.312 cents diff --git a/scales/corner11.scl b/scales/corner11.scl new file mode 100644 index 0000000..ee592a2 --- /dev/null +++ b/scales/corner11.scl @@ -0,0 +1,20 @@ +! corner11.scl +! +Quadratic Corner 11-limit. Chalmers '96 + 15 +! + 33/32 + 35/32 + 9/8 + 77/64 + 5/4 + 21/16 + 11/8 + 3/2 + 49/32 + 25/16 + 55/32 + 7/4 + 15/8 + 121/64 + 2/1 diff --git a/scales/corner13.scl b/scales/corner13.scl new file mode 100644 index 0000000..1a4c1d7 --- /dev/null +++ b/scales/corner13.scl @@ -0,0 +1,26 @@ +! corner13.scl +! +Quadratic Corner 13-limit. Chalmers '96 + 21 +! + 65/64 + 33/32 + 35/32 + 143/128 + 9/8 + 77/64 + 39/32 + 5/4 + 21/16 + 169/128 + 11/8 + 91/64 + 3/2 + 49/32 + 25/16 + 13/8 + 55/32 + 7/4 + 15/8 + 121/64 + 2/1 diff --git a/scales/corner17.scl b/scales/corner17.scl new file mode 100644 index 0000000..a0822a2 --- /dev/null +++ b/scales/corner17.scl @@ -0,0 +1,33 @@ +! corner17.scl +! +Quadratic Corner 17-limit. + 28 +! + 65/64 + 33/32 + 17/16 + 35/32 + 143/128 + 9/8 + 289/256 + 77/64 + 39/32 + 5/4 + 21/16 + 169/128 + 85/64 + 11/8 + 91/64 + 187/128 + 3/2 + 49/32 + 25/16 + 51/32 + 13/8 + 55/32 + 221/128 + 7/4 + 119/64 + 15/8 + 121/64 + 2/1 diff --git a/scales/corner17a.scl b/scales/corner17a.scl new file mode 100644 index 0000000..37cc3b4 --- /dev/null +++ b/scales/corner17a.scl @@ -0,0 +1,47 @@ +! CORNER17a.scl +! +Quadratic Corner 17 odd limit. + 42 +! + 65/64 + 33/32 + 135/128 + 17/16 + 35/32 + 143/128 + 9/8 + 289/256 + 75/64 + 153/128 + 77/64 + 39/32 + 5/4 + 81/64 + 165/128 + 21/16 + 169/128 + 85/64 + 11/8 + 45/32 + 91/64 + 187/128 + 3/2 + 195/128 + 49/32 + 99/64 + 25/16 + 51/32 + 13/8 + 105/64 + 27/16 + 55/32 + 221/128 + 7/4 + 225/128 + 117/64 + 119/64 + 15/8 + 121/64 + 63/32 + 255/128 + 2/1 diff --git a/scales/corner7.scl b/scales/corner7.scl new file mode 100644 index 0000000..0399323 --- /dev/null +++ b/scales/corner7.scl @@ -0,0 +1,15 @@ +! corner7.scl +! +Quadratic corner 7-limit. Chalmers '96 + 10 +! + 35/32 + 9/8 + 5/4 + 21/16 + 3/2 + 49/32 + 25/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/corner9.scl b/scales/corner9.scl new file mode 100644 index 0000000..d4cc2d2 --- /dev/null +++ b/scales/corner9.scl @@ -0,0 +1,19 @@ +! corner9.scl +! +First 9 harmonics of 5th through 9th harmonics + 14 +! + 35/32 + 9/8 + 5/4 + 81/64 + 21/16 + 45/32 + 3/2 + 49/32 + 25/16 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/corners11.scl b/scales/corners11.scl new file mode 100644 index 0000000..b77508c --- /dev/null +++ b/scales/corners11.scl @@ -0,0 +1,34 @@ +! corners11.scl +! +Quadratic Corners 11-limit, John Chalmers (1996) + 29 +! + 33/32 + 128/121 + 16/15 + 35/32 + 9/8 + 8/7 + 64/55 + 77/64 + 5/4 + 32/25 + 64/49 + 21/16 + 4/3 + 11/8 + 16/11 + 3/2 + 32/21 + 49/32 + 25/16 + 8/5 + 128/77 + 55/32 + 7/4 + 16/9 + 64/35 + 15/8 + 121/64 + 64/33 + 2/1 diff --git a/scales/corners13.scl b/scales/corners13.scl new file mode 100644 index 0000000..30c54a5 --- /dev/null +++ b/scales/corners13.scl @@ -0,0 +1,46 @@ +! corners13.scl +! +Quadratic Corners 13-limit. Chalmers '96 + 41 +! + 65/64 + 33/32 + 128/121 + 16/15 + 35/32 + 143/128 + 9/8 + 8/7 + 64/55 + 77/64 + 39/32 + 16/13 + 5/4 + 32/25 + 64/49 + 21/16 + 169/128 + 4/3 + 11/8 + 128/91 + 91/64 + 16/11 + 3/2 + 256/169 + 32/21 + 49/32 + 25/16 + 8/5 + 13/8 + 64/39 + 128/77 + 55/32 + 7/4 + 16/9 + 256/143 + 64/35 + 15/8 + 121/64 + 64/33 + 128/65 + 2/1 diff --git a/scales/corners7.scl b/scales/corners7.scl new file mode 100644 index 0000000..500828f --- /dev/null +++ b/scales/corners7.scl @@ -0,0 +1,24 @@ +! corners7.scl +! +Quadratic Corners 7-limit. Chalmers '96 + 19 +! + 16/15 + 35/32 + 9/8 + 8/7 + 5/4 + 32/25 + 64/49 + 21/16 + 4/3 + 3/2 + 32/21 + 49/32 + 25/16 + 8/5 + 7/4 + 16/9 + 64/35 + 15/8 + 2/1 diff --git a/scales/corrette.scl b/scales/corrette.scl new file mode 100644 index 0000000..04f258f --- /dev/null +++ b/scales/corrette.scl @@ -0,0 +1,17 @@ +! corrette.scl +! +Corrette temperament, modified 1/4-comma meantone + 12 +! + 76.04900 + 193.15686 + 288.75843 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 783.38100 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/corrette2.scl b/scales/corrette2.scl new file mode 100644 index 0000000..0397382 --- /dev/null +++ b/scales/corrette2.scl @@ -0,0 +1,17 @@ +! corrette2.scl +! +Michel Corrette, modified meantone temperament (1753) + 12 +! + 72.62999 + 192.18000 + 296.09000 + 8192/6561 + 503.91000 + 576.53999 + 696.09000 + 776.53999 + 888.26999 + 1000.00000 + 1080.44999 + 2/1 diff --git a/scales/corrette3.scl b/scales/corrette3.scl new file mode 100644 index 0000000..f8e569a --- /dev/null +++ b/scales/corrette3.scl @@ -0,0 +1,17 @@ +! corrette3.scl +! +Corrette's monochord (1753), also Marpurg 4 and Yamaha Pure Minor + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/coul_12.scl b/scales/coul_12.scl new file mode 100644 index 0000000..0e23134 --- /dev/null +++ b/scales/coul_12.scl @@ -0,0 +1,17 @@ +! coul_12.scl +! +Scale 1 5/4 3/2 2 successively split largest intervals by smallest interval + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 125/96 + 25/18 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/coul_12a.scl b/scales/coul_12a.scl new file mode 100644 index 0000000..e60a2de --- /dev/null +++ b/scales/coul_12a.scl @@ -0,0 +1,17 @@ +! coul_12a.scl +! +Scale 1 6/5 3/2 2 successively split largest intervals by smallest interval + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 36/25 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/coul_12sup.scl b/scales/coul_12sup.scl new file mode 100644 index 0000000..ad0703c --- /dev/null +++ b/scales/coul_12sup.scl @@ -0,0 +1,17 @@ +! coul_12sup.scl +! +Superparticular approximation to Pythagorean scale. Op de Coul, 2003 + 12 +! + 15/14 + 9/8 + 19/16 + 19/15 + 4/3 + 10/7 + 3/2 + 45/28 + 27/16 + 57/32 + 19/10 + 2/1 diff --git a/scales/coul_13.scl b/scales/coul_13.scl new file mode 100644 index 0000000..afdd945 --- /dev/null +++ b/scales/coul_13.scl @@ -0,0 +1,18 @@ +! coul_13.scl +! +Symmetrical 13-tone 5-limit JI scale + 13 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 36/25 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/coul_17sup.scl b/scales/coul_17sup.scl new file mode 100644 index 0000000..f704e4f --- /dev/null +++ b/scales/coul_17sup.scl @@ -0,0 +1,22 @@ +! coul_17sup.scl +! +Superparticular approximation to Pythagorean 17-tone scale. Op de Coul, 2003 + 17 +! + 19/18 + 16/15 + 152/135 + 32/27 + 6/5 + 19/15 + 4/3 + 38/27 + 64/45 + 608/405 + 128/81 + 8/5 + 76/45 + 16/9 + 9/5 + 19/10 + 2/1 diff --git a/scales/coul_20.scl b/scales/coul_20.scl new file mode 100644 index 0000000..7f71ebd --- /dev/null +++ b/scales/coul_20.scl @@ -0,0 +1,25 @@ +! coul_20.scl +! +Tuning for a 3-row symmetrical keyboard, Op de Coul (1989) + 20 +! + 100.00000 + 131.28300 + 200.00000 + 268.71700 + 300.00000 + 400.00000 + 431.28300 + 500.00000 + 25/18 + 600.00000 + 700.00000 + 731.28300 + 800.00000 + 868.71700 + 900.00000 + 1000.00000 + 1031.28300 + 1100.00000 + 1168.71700 + 2/1 diff --git a/scales/coul_27.scl b/scales/coul_27.scl new file mode 100644 index 0000000..fc5c4f7 --- /dev/null +++ b/scales/coul_27.scl @@ -0,0 +1,32 @@ +! coul_27.scl +! +Symmetrical 27-tone 5-limit just system, 67108864/66430125 and 25/24 + 27 +! + 256/243 + 135/128 + 16/15 + 4096/3645 + 9/8 + 32/27 + 1215/1024 + 5/4 + 512/405 + 81/64 + 4/3 + 1024/729 + 45/32 + 64/45 + 729/512 + 3/2 + 128/81 + 405/256 + 8/5 + 2048/1215 + 27/16 + 16/9 + 3645/2048 + 15/8 + 256/135 + 243/128 + 2/1 diff --git a/scales/counterschismic.scl b/scales/counterschismic.scl new file mode 100644 index 0000000..28c3701 --- /dev/null +++ b/scales/counterschismic.scl @@ -0,0 +1,58 @@ +! counterschismic.scl +! +Counterschismic temperament, g=498.082318, 5-limit + 53 +! + 23.01218 + 46.02437 + 69.03655 + 90.41159 + 113.42377 + 136.43596 + 159.44814 + 182.46033 + 203.83536 + 226.84755 + 249.85973 + 272.87192 + 294.24695 + 317.25914 + 340.27132 + 363.28351 + 386.29569 + 407.67073 + 430.68291 + 453.69510 + 476.70728 + 498.08232 + 521.09450 + 544.10669 + 567.11887 + 588.49391 + 611.50609 + 634.51828 + 657.53046 + 680.54264 + 701.91768 + 724.92987 + 747.94205 + 770.95423 + 792.32927 + 815.34146 + 838.35364 + 861.36582 + 884.37801 + 905.75305 + 928.76523 + 951.77741 + 974.78960 + 996.16464 + 1019.17682 + 1042.18900 + 1065.20119 + 1086.57623 + 1109.58841 + 1132.60059 + 1155.61278 + 1178.62496 + 2/1 diff --git a/scales/couperin.scl b/scales/couperin.scl new file mode 100644 index 0000000..eb6ecda --- /dev/null +++ b/scales/couperin.scl @@ -0,0 +1,17 @@ +! couperin.scl +! +Couperin modified meantone + 12 +! + 76.04900 + 193.15686 + 289.73598 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 996.57878 + 1082.89214 + 2/1 diff --git a/scales/couperin_org.scl b/scales/couperin_org.scl new file mode 100644 index 0000000..52659fc --- /dev/null +++ b/scales/couperin_org.scl @@ -0,0 +1,17 @@ +! couperin_org.scl +! +F. Couperin organ temperament (1690), from C. di Veroli, 1985 + 12 +! + 76.04900 + 193.15686 + 297.10287 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 783.38057 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/cpak19a.scl b/scales/cpak19a.scl new file mode 100644 index 0000000..27f5ce4 --- /dev/null +++ b/scales/cpak19a.scl @@ -0,0 +1,24 @@ +! cpak19a.scl +! +First 19-epimorphic ordered tetrad pack scale, Gene Ward Smith, TL 23-10-2005 + 19 +! + 21/20 + 15/14 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 63/40 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 63/32 + 2/1 diff --git a/scales/cpak19b.scl b/scales/cpak19b.scl new file mode 100644 index 0000000..bba058c --- /dev/null +++ b/scales/cpak19b.scl @@ -0,0 +1,24 @@ +! cpak19b.scl +! +Second 19-epimorphic ordered tetrad pack scale, Gene Ward Smith, TL 23-10-2005 + 19 +! + 21/20 + 15/14 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 63/40 + 8/5 + 5/3 + 7/4 + 25/14 + 15/8 + 63/32 + 2/1 diff --git a/scales/cross13.scl b/scales/cross13.scl new file mode 100644 index 0000000..b0f0e8f --- /dev/null +++ b/scales/cross13.scl @@ -0,0 +1,24 @@ +! cross13.scl +! +13-limit harmonic/subharmonic cross + 19 +! + 14/13 + 12/11 + 10/9 + 8/7 + 7/6 + 16/13 + 14/11 + 9/7 + 7/5 + 10/7 + 14/9 + 11/7 + 13/8 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 2/1 diff --git a/scales/cross2.scl b/scales/cross2.scl new file mode 100644 index 0000000..c6fa0be --- /dev/null +++ b/scales/cross2.scl @@ -0,0 +1,14 @@ +! cross2.scl +! +John Pusey's double 5-7 cross reduced by 3/1 + 9 +! + 27/25 + 35/27 + 7/5 + 5/3 + 9/5 + 15/7 + 81/35 + 25/9 + 3/1 diff --git a/scales/cross2_5.scl b/scales/cross2_5.scl new file mode 100644 index 0000000..c5e82fa --- /dev/null +++ b/scales/cross2_5.scl @@ -0,0 +1,14 @@ +! cross2_5.scl +! +double 3-5 cross reduced by 2/1 + 9 +! + 16/15 + 9/8 + 6/5 + 4/3 + 3/2 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/cross2_7.scl b/scales/cross2_7.scl new file mode 100644 index 0000000..7bb492e --- /dev/null +++ b/scales/cross2_7.scl @@ -0,0 +1,18 @@ +! cross2_7.scl +! +longer 3-5-7 cross reduced by 2/1 + 13 +! + 9/8 + 8/7 + 5/4 + 32/25 + 64/49 + 4/3 + 3/2 + 49/32 + 25/16 + 8/5 + 7/4 + 16/9 + 2/1 diff --git a/scales/cross3.scl b/scales/cross3.scl new file mode 100644 index 0000000..fefdc21 --- /dev/null +++ b/scales/cross3.scl @@ -0,0 +1,18 @@ +! cross3.scl +! +John Pusey's triple 5-7 cross reduced by 3/1 + 13 +! + 27/25 + 25/21 + 9/7 + 243/175 + 125/81 + 5/3 + 9/5 + 243/125 + 175/81 + 7/3 + 63/25 + 25/9 + 3/1 diff --git a/scales/cross_7.scl b/scales/cross_7.scl new file mode 100644 index 0000000..f037e2a --- /dev/null +++ b/scales/cross_7.scl @@ -0,0 +1,12 @@ +! cross_7.scl +! +3-5-7 cross reduced by 2/1, quasi diatonic, similar to Zalzal's, Flynn Cohen + 7 +! + 8/7 + 5/4 + 4/3 + 3/2 + 8/5 + 7/4 + 2/1 diff --git a/scales/cross_72.scl b/scales/cross_72.scl new file mode 100644 index 0000000..5535a03 --- /dev/null +++ b/scales/cross_72.scl @@ -0,0 +1,18 @@ +! cross_72.scl +! +double 3-5-7 cross reduced by 2/1 + 13 +! + 16/15 + 9/8 + 7/6 + 6/5 + 21/16 + 4/3 + 3/2 + 32/21 + 5/3 + 12/7 + 16/9 + 15/8 + 2/1 diff --git a/scales/cross_7a.scl b/scales/cross_7a.scl new file mode 100644 index 0000000..0dc02da --- /dev/null +++ b/scales/cross_7a.scl @@ -0,0 +1,12 @@ +! cross_7a.scl +! +2-5-7 cross reduced by 3/1 + 7 +! + 9/7 + 3/2 + 5/3 + 9/5 + 2/1 + 7/3 + 3/1 diff --git a/scales/cruciform.scl b/scales/cruciform.scl new file mode 100644 index 0000000..a0d168f --- /dev/null +++ b/scales/cruciform.scl @@ -0,0 +1,17 @@ +! cruciform.scl +! +Cruciform Lattice + 12 +! + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/cube3.scl b/scales/cube3.scl new file mode 100644 index 0000000..17556c1 --- /dev/null +++ b/scales/cube3.scl @@ -0,0 +1,37 @@ +! cube3.scl +! +7-limit Cube[3] scale, Gene Ward Smith + 32 +! + 49/48 + 25/24 + 21/20 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 60/49 + 49/40 + 5/4 + 9/7 + 21/16 + 4/3 + 7/5 + 10/7 + 35/24 + 3/2 + 49/32 + 25/16 + 8/5 + 105/64 + 5/3 + 42/25 + 12/7 + 7/4 + 25/14 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/cube4.scl b/scales/cube4.scl new file mode 100644 index 0000000..882c096 --- /dev/null +++ b/scales/cube4.scl @@ -0,0 +1,68 @@ +! cube4.scl +! +7-limit Cube[4] scale, Gene Ward Smith + 63 +! + 50/49 + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 28/25 + 9/8 + 8/7 + 7/6 + 25/21 + 6/5 + 128/105 + 60/49 + 49/40 + 5/4 + 32/25 + 9/7 + 35/27 + 64/49 + 21/16 + 4/3 + 168/125 + 49/36 + 48/35 + 25/18 + 480/343 + 7/5 + 10/7 + 343/240 + 36/25 + 35/24 + 72/49 + 125/84 + 3/2 + 32/21 + 49/32 + 54/35 + 14/9 + 25/16 + 8/5 + 80/49 + 49/30 + 105/64 + 5/3 + 42/25 + 12/7 + 7/4 + 16/9 + 25/14 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 48/25 + 35/18 + 96/49 + 49/25 + 2/1 diff --git a/scales/cw12_11.scl b/scales/cw12_11.scl new file mode 100644 index 0000000..81365de --- /dev/null +++ b/scales/cw12_11.scl @@ -0,0 +1,17 @@ +! cw12_11.scl +! +CalkinWilf(<12 19 28 34 42|) + 12 +! + 12/11 + 8/7 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/cw19_11.scl b/scales/cw19_11.scl new file mode 100644 index 0000000..4103ffb --- /dev/null +++ b/scales/cw19_11.scl @@ -0,0 +1,24 @@ +! cw19_11.scl +! +CalkinWilf(<19 30 44 53 66|) + 19 +! + 35/33 + 12/11 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 11/6 + 40/21 + 2/1 diff --git a/scales/cw19_5.scl b/scales/cw19_5.scl new file mode 100644 index 0000000..140fca0 --- /dev/null +++ b/scales/cw19_5.scl @@ -0,0 +1,24 @@ +! cw19_5.scl +! +CalkinWilf(<19 30 44|) + 19 +! + 135/128 + 27/25 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/cw19_7.scl b/scales/cw19_7.scl new file mode 100644 index 0000000..0de3627 --- /dev/null +++ b/scales/cw19_7.scl @@ -0,0 +1,24 @@ +! cw19_7.scl +! +CalkinWilf(<19 30 44 53|) + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 40/21 + 2/1 diff --git a/scales/cycle19.scl b/scales/cycle19.scl new file mode 100644 index 0000000..eb90bff --- /dev/null +++ b/scales/cycle19.scl @@ -0,0 +1,25 @@ +! cycle19.scl +! +19-note lesfip scale, 9-limit, 10 cents tolerance +! major, minor, subminor, supermajor, barbados, and island triads; island tetrads + 19 +! +68.20867 +136.05163 +202.95562 +268.42817 +316.37773 +386.43387 +451.91444 +519.78797 +576.96741 +634.14686 +702.02039 +767.50096 +837.55710 +885.50666 +950.97921 +1017.88320 +1085.72616 +1153.93483 +2/1 diff --git a/scales/dan_seman.scl b/scales/dan_seman.scl new file mode 100644 index 0000000..de27845 --- /dev/null +++ b/scales/dan_seman.scl @@ -0,0 +1,17 @@ +! dan_seman.scl +! +Semantix-Semantic, 5-limit, common tones to Semantic-36 and Semantix-36 with different A + 12 +! + 27/25 + 9/8 + 243/200 + 100/81 + 4/3 + 25/18 + 3/2 + 81/50 + 400/243 + 729/400 + 50/27 + 2/1 diff --git a/scales/dan_semantic.scl b/scales/dan_semantic.scl new file mode 100644 index 0000000..def8988 --- /dev/null +++ b/scales/dan_semantic.scl @@ -0,0 +1,40 @@ +! dan_semantic.scl +! +The Semantic Scale, from Alain Danilou: "Smantique Musicale" (1967) + 35 +! + 25/24 + 256/243 + 16/15 + 10/9 + 9/8 + 256/225 + 75/64 + 32/27 + 6/5 + 100/81 + 5/4 + 81/64 + 675/512 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 40/27 + 3/2 + 243/160 + 25/16 + 128/81 + 8/5 + 400/243 + 5/3 + 27/16 + 225/128 + 16/9 + 9/5 + 50/27 + 15/8 + 243/128 + 160/81 + 2/1 diff --git a/scales/dan_semantix.scl b/scales/dan_semantix.scl new file mode 100644 index 0000000..51167b4 --- /dev/null +++ b/scales/dan_semantix.scl @@ -0,0 +1,41 @@ +! dan_semantix.scl +! +Jacques Dudon, Semantix-36, 27/25 generator + 36 +! + 49/48 + 25/24 + 200/189 + 27/25 + 54/49 + 9/8 + 8/7 + 7/6 + 25/21 + 243/200 + 100/81 + 63/50 + 9/7 + 21/16 + 4/3 + 49/36 + 25/18 + 567/400 + 36/25 + 72/49 + 3/2 + 49/32 + 14/9 + 100/63 + 81/50 + 81/49 + 42/25 + 12/7 + 7/4 + 25/14 + 49/27 + 50/27 + 189/100 + 27/14 + 96/49 + 2/1 diff --git a/scales/danielou5_53.scl b/scales/danielou5_53.scl new file mode 100644 index 0000000..32785fb --- /dev/null +++ b/scales/danielou5_53.scl @@ -0,0 +1,58 @@ +! DANIELOU5_53.scl +! +Danilou's Harmonic Division in 5-limit, symmetrized + 53 +! + 81/80 + 128/125 + 25/24 + 256/243 + 16/15 + 27/25 + 2048/1875 + 10/9 + 9/8 + 256/225 + 144/125 + 75/64 + 32/27 + 6/5 + 243/200 + 100/81 + 5/4 + 81/64 + 32/25 + 125/96 + 320/243 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 40/27 + 3/2 + 243/160 + 192/125 + 25/16 + 128/81 + 8/5 + 81/50 + 400/243 + 5/3 + 27/16 + 128/75 + 125/72 + 225/128 + 16/9 + 9/5 + 1875/1024 + 50/27 + 15/8 + 243/128 + 48/25 + 125/64 + 160/81 + 2/1 diff --git a/scales/danielou_53.scl b/scales/danielou_53.scl new file mode 100644 index 0000000..7851c89 --- /dev/null +++ b/scales/danielou_53.scl @@ -0,0 +1,58 @@ +! danielou_53.scl +! +Danilou's Harmonic Division of the Octave, see p. 153 + 53 +! + 81/80 + 46/45 + 25/24 + 256/243 + 16/15 + 27/25 + 11/10 + 10/9 + 9/8 + 256/225 + 15/13 + 75/64 + 32/27 + 6/5 + 128/105 + 100/81 + 5/4 + 81/64 + 32/25 + 125/96 + 320/243 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 40/27 + 3/2 + 243/160 + 192/125 + 25/16 + 128/81 + 8/5 + 81/50 + 400/243 + 5/3 + 27/16 + 128/75 + 125/72 + 225/128 + 16/9 + 9/5 + 11/6 + 50/27 + 15/8 + 243/128 + 48/25 + 125/64 + 160/81 + 2/1 diff --git a/scales/darreg.scl b/scales/darreg.scl new file mode 100644 index 0000000..5fdcab9 --- /dev/null +++ b/scales/darreg.scl @@ -0,0 +1,24 @@ +! darreg.scl +! +This set of 19 ratios in 5-limit JI is for his megalyra family + 19 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 9/5 + 15/8 + 2/1 diff --git a/scales/darreg_ennea.scl b/scales/darreg_ennea.scl new file mode 100644 index 0000000..a0491b8 --- /dev/null +++ b/scales/darreg_ennea.scl @@ -0,0 +1,14 @@ +! darreg_ennea.scl +! +Ivor Darreg's Mixed Enneatonic, a mixture of chromatic and enharmonic + 9 +! + 50.00000 + 100.00000 + 200.00000 + 500.00000 + 700.00000 + 750.00000 + 800.00000 + 900.00000 + 2/1 diff --git a/scales/darreg_genus.scl b/scales/darreg_genus.scl new file mode 100644 index 0000000..9fae010 --- /dev/null +++ b/scales/darreg_genus.scl @@ -0,0 +1,14 @@ +! darreg_genus.scl +! +Ivor Darreg's Mixed JI Genus (Archytas Enh, Ptolemy Soft Chrom, Didymos Chrom + 9 +! + 28/27 + 16/15 + 10/9 + 4/3 + 3/2 + 14/9 + 8/5 + 5/3 + 2/1 diff --git a/scales/darreg_genus2.scl b/scales/darreg_genus2.scl new file mode 100644 index 0000000..3d84a95 --- /dev/null +++ b/scales/darreg_genus2.scl @@ -0,0 +1,14 @@ +! DARREG_GENUS2.scl +! +Darreg's Mixed JI Genus 2 (Archytas Enharmonic and Chromatic Genera) + 9 +! + 28/27 + 16/15 + 9/8 + 4/3 + 3/2 + 14/9 + 8/5 + 27/16 + 2/1 diff --git a/scales/david11.scl b/scales/david11.scl new file mode 100644 index 0000000..186ea4b --- /dev/null +++ b/scales/david11.scl @@ -0,0 +1,27 @@ +! david11.scl +! +11-limit system from Gary David (1967) + 22 +! + 33/32 + 21/20 + 12/11 + 9/8 + 7/6 + 77/64 + 5/4 + 14/11 + 21/16 + 11/8 + 7/5 + 63/44 + 3/2 + 14/9 + 77/48 + 18/11 + 27/16 + 7/4 + 11/6 + 15/8 + 21/11 + 2/1 diff --git a/scales/david7.scl b/scales/david7.scl new file mode 100644 index 0000000..35ebb43 --- /dev/null +++ b/scales/david7.scl @@ -0,0 +1,17 @@ +! david7.scl +! +Gary David's Constant Structure (1967). A mode of Fokker's 7-limit scale + 12 +! + 16/15 + 9/8 + 6/5 + 9/7 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 9/5 + 28/15 + 2/1 diff --git a/scales/ddimlim1.scl b/scales/ddimlim1.scl new file mode 100644 index 0000000..008820a --- /dev/null +++ b/scales/ddimlim1.scl @@ -0,0 +1,19 @@ +! ddimlim1.scl +! +First 27/25&2048/1875 scale + 14 +! + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/de_caus.scl b/scales/de_caus.scl new file mode 100644 index 0000000..9e2b6bf --- /dev/null +++ b/scales/de_caus.scl @@ -0,0 +1,17 @@ +! de_caus.scl +! +De Caus (a mode of Ellis's duodene) (1615) + 12 +! + 25/24 + 10/9 + 75/64 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/dean_81primes.scl b/scales/dean_81primes.scl new file mode 100644 index 0000000..7a4f58b --- /dev/null +++ b/scales/dean_81primes.scl @@ -0,0 +1,85 @@ +! dean_81primes.scl +! +Roger Dean's 81 primes non-octave scale (2008) + 80 +! + 3/2 + 5/2 + 7/2 + 11/2 + 13/2 + 17/2 + 19/2 + 23/2 + 29/2 + 31/2 + 37/2 + 41/2 + 43/2 + 47/2 + 53/2 + 59/2 + 61/2 + 67/2 + 71/2 + 73/2 + 79/2 + 83/2 + 89/2 + 97/2 + 101/2 + 103/2 + 107/2 + 109/2 + 113/2 + 127/2 + 131/2 + 137/2 + 139/2 + 149/2 + 151/2 + 157/2 + 163/2 + 167/2 + 173/2 + 179/2 + 181/2 + 191/2 + 193/2 + 197/2 + 199/2 + 211/2 + 223/2 + 227/2 + 229/2 + 233/2 + 239/2 + 241/2 + 251/2 + 257/2 + 263/2 + 269/2 + 271/2 + 277/2 + 281/2 + 283/2 + 293/2 + 307/2 + 311/2 + 313/2 + 317/2 + 331/2 + 337/2 + 347/2 + 349/2 + 353/2 + 359/2 + 367/2 + 373/2 + 379/2 + 383/2 + 389/2 + 397/2 + 401/2 + 409/2 + 419/2 diff --git a/scales/dean_91primes.scl b/scales/dean_91primes.scl new file mode 100644 index 0000000..2c66a2a --- /dev/null +++ b/scales/dean_91primes.scl @@ -0,0 +1,95 @@ +! dean_91primes.scl +! +Roger Dean's 91 primes non-octave scale (2008) + 90 +! + 3/2 + 5/2 + 7/2 + 11/2 + 13/2 + 17/2 + 19/2 + 23/2 + 29/2 + 31/2 + 37/2 + 41/2 + 43/2 + 47/2 + 53/2 + 59/2 + 61/2 + 67/2 + 71/2 + 73/2 + 79/2 + 83/2 + 89/2 + 97/2 + 101/2 + 103/2 + 107/2 + 109/2 + 113/2 + 127/2 + 131/2 + 137/2 + 139/2 + 149/2 + 151/2 + 157/2 + 163/2 + 167/2 + 173/2 + 179/2 + 181/2 + 191/2 + 193/2 + 197/2 + 199/2 + 211/2 + 223/2 + 227/2 + 229/2 + 233/2 + 239/2 + 241/2 + 251/2 + 257/2 + 263/2 + 269/2 + 271/2 + 277/2 + 281/2 + 283/2 + 293/2 + 307/2 + 311/2 + 313/2 + 317/2 + 331/2 + 337/2 + 347/2 + 349/2 + 353/2 + 359/2 + 367/2 + 373/2 + 379/2 + 383/2 + 389/2 + 397/2 + 401/2 + 409/2 + 419/2 + 421/2 + 431/2 + 433/2 + 439/2 + 443/2 + 449/2 + 457/2 + 461/2 + 463/2 + 467/2 diff --git a/scales/degung-sejati.scl b/scales/degung-sejati.scl new file mode 100644 index 0000000..921f39e --- /dev/null +++ b/scales/degung-sejati.scl @@ -0,0 +1,10 @@ +! degung-sejati.scl +! +pelog degung sejati, Sunda + 5 +! + 424.00000 + 494.00000 + 706.00000 + 1130.00000 + 2/1 diff --git a/scales/degung1.scl b/scales/degung1.scl new file mode 100644 index 0000000..98e3d6c --- /dev/null +++ b/scales/degung1.scl @@ -0,0 +1,10 @@ +! degung1.scl +! +Gamelan Degung, Kabupaten Sukabumi. 1/1=363 Hz + 5 +! + 155.003 cents + 344.805 cents + 693.988 cents + 823.199 cents + 2/1 diff --git a/scales/degung2.scl b/scales/degung2.scl new file mode 100644 index 0000000..93e8041 --- /dev/null +++ b/scales/degung2.scl @@ -0,0 +1,10 @@ +! degung2.scl +! +Gamelan Degung, Kabupaten Bandung. 1/1=252 Hz + 5 +! + 96.854 cents + 380.809 cents + 692.771 cents + 799.892 cents + 2/1 diff --git a/scales/degung3.scl b/scales/degung3.scl new file mode 100644 index 0000000..f4e92ae --- /dev/null +++ b/scales/degung3.scl @@ -0,0 +1,10 @@ +! degung3.scl +! +Gamelan Degung, Kabupaten Sumedang. 1/1=388.5 Hz + 5 +! + 134.970 cents + 351.656 cents + 705.665 cents + 847.882 cents + 2/1 diff --git a/scales/degung4.scl b/scales/degung4.scl new file mode 100644 index 0000000..2bf4196 --- /dev/null +++ b/scales/degung4.scl @@ -0,0 +1,10 @@ +! degung4.scl +! +Gamelan Degung, Kasepuhan Cheribon. 1/1=250 Hz + 5 +! + 146.014 cents + 344.257 cents + 645.650 cents + 800.653 cents + 2/1 diff --git a/scales/degung5.scl b/scales/degung5.scl new file mode 100644 index 0000000..720865c --- /dev/null +++ b/scales/degung5.scl @@ -0,0 +1,10 @@ +! degung5.scl +! +Gamelan Degung, Kanoman Cheribon. 1/1=428 Hz + 5 +! + 143.544 cents + 337.081 cents + 685.699 cents + 861.558 cents + 2/1 diff --git a/scales/degung6.scl b/scales/degung6.scl new file mode 100644 index 0000000..6304ef1 --- /dev/null +++ b/scales/degung6.scl @@ -0,0 +1,10 @@ +! degung6.scl +! +Gamelan Degung, Kacherbonan Cheribon. 1/1=426 Hz + 5 +! + 75.542 cents + 228.123 cents + 644.104 cents + 773.602 cents + 2/1 diff --git a/scales/dekany-cs.scl b/scales/dekany-cs.scl new file mode 100644 index 0000000..1821c64 --- /dev/null +++ b/scales/dekany-cs.scl @@ -0,0 +1,17 @@ +! dekany-cs.scl +! +CPS ({1,3,7,9,11}, 2) union {77/72, 77/64}. Grady-Narushima + 12 +! + 33/32 + 77/72 + 9/8 + 7/6 + 77/64 + 21/16 + 11/8 + 3/2 + 77/48 + 7/4 + 11/6 + 2/1 diff --git a/scales/dekany.scl b/scales/dekany.scl new file mode 100644 index 0000000..a865b6e --- /dev/null +++ b/scales/dekany.scl @@ -0,0 +1,15 @@ +! dekany.scl +! +2)5 Dekany 1.3.5.7.11 (1.3 tonic) + 10 +! + 55/48 + 7/6 + 5/4 + 11/8 + 35/24 + 77/48 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/dekany2.scl b/scales/dekany2.scl new file mode 100644 index 0000000..206776b --- /dev/null +++ b/scales/dekany2.scl @@ -0,0 +1,15 @@ +! dekany2.scl +! +3)5 Dekany 1.3.5.7.9 (1.3.5.7.9 tonic) + 10 +! + 16/15 + 8/7 + 6/5 + 4/3 + 48/35 + 32/21 + 8/5 + 12/7 + 16/9 + 2/1 diff --git a/scales/dekany3.scl b/scales/dekany3.scl new file mode 100644 index 0000000..d79e2c6 --- /dev/null +++ b/scales/dekany3.scl @@ -0,0 +1,15 @@ +! dekany3.scl +! +2)5 Dekany 1.3.5.7.9 and 3)5 Dekany 1 1/3 1/5 1/7 1/9 + 10 +! + 9/8 + 7/6 + 5/4 + 21/16 + 35/24 + 3/2 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/dekany4.scl b/scales/dekany4.scl new file mode 100644 index 0000000..6ca9055 --- /dev/null +++ b/scales/dekany4.scl @@ -0,0 +1,15 @@ +! dekany4.scl +! +2)5 Dekany 1.7.13.19.29 (1.7 tonic) + 10 +! + 29/28 + 247/224 + 19/16 + 551/448 + 19/14 + 13/8 + 377/224 + 29/16 + 13/7 + 2/1 diff --git a/scales/dekany_laka205.scl b/scales/dekany_laka205.scl new file mode 100644 index 0000000..ebcea73 --- /dev/null +++ b/scales/dekany_laka205.scl @@ -0,0 +1,34 @@ +! dekany_laka205.scl +! +Dekany laka convex closure of the 2)5 Dekany 1.3.5.7.11 (1.3 tonic), 205-tET tuning + 29 +! + 29.26829 + 93.65854 + 117.07317 + 181.46341 + 204.87805 + 234.14634 + 269.26829 + 321.95122 + 386.34146 + 409.75610 + 474.14634 + 526.82927 + 550.24390 + 591.21951 + 614.63415 + 655.60976 + 679.02439 + 702.43902 + 731.70732 + 819.51220 + 883.90244 + 907.31707 + 971.70732 + 1024.39024 + 1047.80488 + 1088.78049 + 1112.19512 + 1176.58537 + 2/1 diff --git a/scales/dekany_union.scl b/scales/dekany_union.scl new file mode 100644 index 0000000..dc9a685 --- /dev/null +++ b/scales/dekany_union.scl @@ -0,0 +1,19 @@ +! dekany_union.scl +! +Union of 2)5 and 3)5 1.3.5.7.9 dekanies, or 3)6 1.3.5.5.7.9 + 14 +! + 21/20 + 9/8 + 7/6 + 5/4 + 21/16 + 7/5 + 35/24 + 3/2 + 63/40 + 5/3 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/dent-yn-rwt.scl b/scales/dent-yn-rwt.scl new file mode 100644 index 0000000..45d33b2 --- /dev/null +++ b/scales/dent-yn-rwt.scl @@ -0,0 +1,17 @@ +! dent-yn-rwt.scl +! +Tom Dent's Young-Neidhardt well-temperament (rationalized by G. Secor) +12 +! +560/531 ! C# +2643/2360 ! D +70/59 ! Eb +74/59 ! E +315/236 ! F +1329/944 ! F# +883/590 ! G +280/177 ! G# +890/531 ! A +105/59 ! A# +887/472 ! B +2/1 diff --git a/scales/dent.scl b/scales/dent.scl new file mode 100644 index 0000000..f874100 --- /dev/null +++ b/scales/dent.scl @@ -0,0 +1,17 @@ +! dent.scl +! +Tom Dent, well temperament with A=421 Hz. Integer Hz beat rates from A + 12 +! + 531/502 + 563/502 + 597/502 + 315/251 + 335/251 + 354/251 + 376/251 + 398/251 + 421/251 + 447/251 + 472/251 + 2/1 diff --git a/scales/dent2.scl b/scales/dent2.scl new file mode 100644 index 0000000..4caec48 --- /dev/null +++ b/scales/dent2.scl @@ -0,0 +1,17 @@ +! dent2.scl +! +Tom Dent, well-temperament, 2/32 and 5/32 comma, TL 3 & 5-09-2005 + 12 +! + 96.21115 + 197.18929 + 298.16743 + 394.37857 + 499.38914 + 595.60029 + 698.59464 + 796.82200 + 895.78393 + 998.77828 + 1094.98943 + 2/1 diff --git a/scales/dent3.scl b/scales/dent3.scl new file mode 100644 index 0000000..08d55d2 --- /dev/null +++ b/scales/dent3.scl @@ -0,0 +1,17 @@ +! dent3.scl +! +Tom Dent, Bach harpsichord "sine wave" temperament, TL 10-10-2005 + 12 +! + 95.00000 + 197.00000 + 299.00000 + 394.00000 + 500.00000 + 594.00000 + 699.00000 + 797.00000 + 895.00000 + 1000.00000 + 1094.00000 + 2/1 diff --git a/scales/dent4.scl b/scales/dent4.scl new file mode 100644 index 0000000..27015ab --- /dev/null +++ b/scales/dent4.scl @@ -0,0 +1,17 @@ +! dent4.scl +! +Tom Dent, modified meantone with appr. to 7/5, 13/11, 14/11, 19/15, 19/16. TL 30-01-2009 + 12 +! + 86.00000 + 195.00000 + 296.00000 + 389.00000 + 503.00000 + 584.00000 + 698.00000 + 791.00000 + 892.00000 + 1001.00000 + 1087.00000 + 2/1 diff --git a/scales/dent_19otti.scl b/scales/dent_19otti.scl new file mode 100644 index 0000000..da107ce --- /dev/null +++ b/scales/dent_19otti.scl @@ -0,0 +1,16 @@ +! dent_19otti.scl +Tom Dent's 19otti scale +12 +! +135/128 +573/512 +19/16 +2565/2048 +171/128 +45/32 +383/256 +2431/1536 +3429/2048 +57/32 +15/8 +2/1 diff --git a/scales/dent_berger.scl b/scales/dent_berger.scl new file mode 100644 index 0000000..e6cfdb2 --- /dev/null +++ b/scales/dent_berger.scl @@ -0,0 +1,17 @@ +! dent_berger.scl +! +Tom Dent's 19berger scale + 12 +! + 256/243 + 151/135 + 19/16 + 304/243 + 4864/3645 + 2215/1576 + 2423/1620 + 155648/98415 + 271/162 + 8417/4728 + 15/8 + 2/1 diff --git a/scales/dent_mean7.scl b/scales/dent_mean7.scl new file mode 100644 index 0000000..4eb8b2e --- /dev/null +++ b/scales/dent_mean7.scl @@ -0,0 +1,16 @@ +! dent_mean7.scl +Tom Dent's 7-limit irregular meantone +12 +! +1875/1792 +28/25 +1875/1568 +5/4 +75/56 +7/5 +3/2 +196/125 +375/224 +224/125 +15/8 +2/1 diff --git a/scales/deporcy.scl b/scales/deporcy.scl new file mode 100644 index 0000000..d5a14cf --- /dev/null +++ b/scales/deporcy.scl @@ -0,0 +1,20 @@ +! deporcy.scl +! +A 15-note chord-based detempering of 7-limit porcupine + 15 +! + 25/24 + 35/32 + 8/7 + 6/5 + 5/4 + 4/3 + 48/35 + 35/24 + 3/2 + 8/5 + 5/3 + 7/4 + 64/35 + 48/25 + 2/1 diff --git a/scales/diab17a.scl b/scales/diab17a.scl new file mode 100644 index 0000000..812c929 --- /dev/null +++ b/scales/diab17a.scl @@ -0,0 +1,21 @@ +! diab17a.scl +[25, 125, 175, 2401, 12005] breed diamond +17 +! +2560/2401 +343/320 +8/7 +400/343 +2401/2000 +5/4 +3200/2401 +7/5 +10/7 +2401/1600 +8/5 +4000/2401 +343/200 +7/4 +640/343 +2401/1280 +2/1 diff --git a/scales/diab19_612.scl b/scales/diab19_612.scl new file mode 100644 index 0000000..c1b915d --- /dev/null +++ b/scales/diab19_612.scl @@ -0,0 +1,24 @@ +! diab19_612.scl +! +diab19a in 612-tET + 19 +! + 35.29412 + 119.60784 + 231.37255 + 266.66667 + 315.68628 + 350.98039 + 386.27451 + 498.03922 + 582.35294 + 617.64706 + 701.96078 + 813.72549 + 849.01961 + 884.31372 + 933.33333 + 968.62745 + 1080.39216 + 1164.70588 + 2/1 diff --git a/scales/diab19_72.scl b/scales/diab19_72.scl new file mode 100644 index 0000000..ef6ceca --- /dev/null +++ b/scales/diab19_72.scl @@ -0,0 +1,24 @@ +! diab19_72.scl +! +diab19a in 72-tET + 19 +! + 33.33333 + 116.66667 + 233.33333 + 266.66667 + 316.66667 + 350.00000 + 383.33333 + 500.00000 + 583.33333 + 616.66667 + 700.00000 + 816.66667 + 850.00000 + 883.33333 + 933.33333 + 966.66667 + 1083.33333 + 1166.66667 + 2/1 diff --git a/scales/diab19a.scl b/scales/diab19a.scl new file mode 100644 index 0000000..0b585bd --- /dev/null +++ b/scales/diab19a.scl @@ -0,0 +1,24 @@ +! diab19a.scl +! +19-tone 7-limit JI scale + 19 +! + 50/49 + 15/14 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 80/49 + 5/3 + 12/7 + 7/4 + 28/15 + 49/25 + 2/1 diff --git a/scales/diablack.scl b/scales/diablack.scl new file mode 100644 index 0000000..d587e8d --- /dev/null +++ b/scales/diablack.scl @@ -0,0 +1,15 @@ +! diablack.scl +! +Unique 256/245&2048/2025 Fokker block + 10 +! + 16/15 + 9/8 + 6/5 + 81/64 + 64/45 + 3/2 + 8/5 + 27/16 + 9/5 + 2/1 diff --git a/scales/diabree.scl b/scales/diabree.scl new file mode 100644 index 0000000..07d0ec7 --- /dev/null +++ b/scales/diabree.scl @@ -0,0 +1,43 @@ +! diabree.scl +detempered convex closure of 11-limit diamond in {243/242, 441/440} temperament plane +39 +! +45/44 +21/20 +15/14 +12/11 +11/10 +10/9 +9/8 +8/7 +7/6 +6/5 +11/9 +5/4 +14/11 +9/7 +21/16 +4/3 +15/11 +11/8 +7/5 +10/7 +16/11 +22/15 +3/2 +32/21 +14/9 +11/7 +8/5 +18/11 +5/3 +12/7 +7/4 +16/9 +9/5 +20/11 +11/6 +28/15 +21/11 +49/25 +2/1 diff --git a/scales/diachrome1.scl b/scales/diachrome1.scl new file mode 100644 index 0000000..d8de9a9 --- /dev/null +++ b/scales/diachrome1.scl @@ -0,0 +1,15 @@ +! diachrome1.scl +! +First 25/24&2048/2025 scale + 10 +! + 16/15 + 9/8 + 6/5 + 32/25 + 45/32 + 3/2 + 8/5 + 27/16 + 9/5 + 2/1 diff --git a/scales/diaconv1029.scl b/scales/diaconv1029.scl new file mode 100644 index 0000000..fb773e0 --- /dev/null +++ b/scales/diaconv1029.scl @@ -0,0 +1,23 @@ +! diaconv1029.scl +convex closure of 7-limit diamond with respect to 1029/1024 +19 +! +21/20 +35/32 +8/7 +7/6 +6/5 +5/4 +21/16 +4/3 +7/5 +10/7 +3/2 +32/21 +8/5 +5/3 +12/7 +7/4 +64/35 +40/21 +2/1 diff --git a/scales/diaconv225.scl b/scales/diaconv225.scl new file mode 100644 index 0000000..fabe99a --- /dev/null +++ b/scales/diaconv225.scl @@ -0,0 +1,19 @@ +! diaconv225.scl +convex closure of 7-limit diamond with respect to 225/224 +15 +! +15/14 +8/7 +7/6 +6/5 +5/4 +4/3 +7/5 +10/7 +3/2 +8/5 +5/3 +12/7 +7/4 +15/8 +2/1 diff --git a/scales/diaconv2401.scl b/scales/diaconv2401.scl new file mode 100644 index 0000000..cdd07e7 --- /dev/null +++ b/scales/diaconv2401.scl @@ -0,0 +1,21 @@ +! diaconv2401.scl +convex closure of 7-limit diamond with respect to 2401/2400 +17 +! +49/48 +8/7 +7/6 +6/5 +49/40 +5/4 +4/3 +7/5 +10/7 +3/2 +8/5 +49/30 +5/3 +12/7 +7/4 +49/25 +2/1 diff --git a/scales/diaconv3136.scl b/scales/diaconv3136.scl new file mode 100644 index 0000000..a96adcb --- /dev/null +++ b/scales/diaconv3136.scl @@ -0,0 +1,27 @@ +! diaconv3136.scl +convex closure of 7-limit diamond with respect to 3136/3125 +23 +! +25/24 +15/14 +28/25 +8/7 +7/6 +6/5 +5/4 +32/25 +4/3 +75/56 +7/5 +10/7 +112/75 +3/2 +25/16 +8/5 +5/3 +12/7 +7/4 +25/14 +28/15 +48/25 +2/1 diff --git a/scales/diaconv4375.scl b/scales/diaconv4375.scl new file mode 100644 index 0000000..3f0b288 --- /dev/null +++ b/scales/diaconv4375.scl @@ -0,0 +1,29 @@ +! diaconv4375.scl +convex closure of 7-limit diamond with respect to 4375/4374 +25 +! +36/35 +27/25 +10/9 +8/7 +7/6 +6/5 +100/81 +5/4 +35/27 +4/3 +25/18 +7/5 +10/7 +36/25 +3/2 +54/35 +8/5 +81/50 +5/3 +12/7 +7/4 +9/5 +50/27 +35/18 +2/1 diff --git a/scales/diaconv5120.scl b/scales/diaconv5120.scl new file mode 100644 index 0000000..056d7ea --- /dev/null +++ b/scales/diaconv5120.scl @@ -0,0 +1,33 @@ +! diaconv5120.scl +convex closure of 7-limit diamond with respect to 5120/5103 +29 +! +64/63 +21/20 +10/9 +9/8 +8/7 +7/6 +32/27 +6/5 +5/4 +80/63 +21/16 +4/3 +27/20 +7/5 +10/7 +40/27 +3/2 +32/21 +63/40 +8/5 +5/3 +27/16 +12/7 +7/4 +16/9 +9/5 +40/21 +63/32 +2/1 diff --git a/scales/diaconv6144.scl b/scales/diaconv6144.scl new file mode 100644 index 0000000..decc250 --- /dev/null +++ b/scales/diaconv6144.scl @@ -0,0 +1,23 @@ +! diaconv6144.scl +convex closure of 7-limit diamond with respect to 6144/6125 +19 +! +35/32 +8/7 +7/6 +6/5 +5/4 +32/25 +4/3 +48/35 +7/5 +10/7 +35/24 +3/2 +25/16 +8/5 +5/3 +12/7 +7/4 +64/35 +2/1 diff --git a/scales/diacycle13.scl b/scales/diacycle13.scl new file mode 100644 index 0000000..5242af8 --- /dev/null +++ b/scales/diacycle13.scl @@ -0,0 +1,28 @@ +! diacycle13.scl +! +Diacycle on 20/13, 13/10; there are also nodes at 3/2, 4/3; 13/9, 18/13 + 23 +! + 40/39 + 20/19 + 40/37 + 10/9 + 8/7 + 20/17 + 40/33 + 5/4 + 40/31 + 4/3 + 40/29 + 10/7 + 40/27 + 20/13 + 30/19 + 60/37 + 5/3 + 12/7 + 30/17 + 20/11 + 15/8 + 60/31 + 2/1 diff --git a/scales/diaddim1.scl b/scales/diaddim1.scl new file mode 100644 index 0000000..560dcd2 --- /dev/null +++ b/scales/diaddim1.scl @@ -0,0 +1,19 @@ +! diaddim1.scl +! +First 2048/2025&2048/1875 scale + 14 +! + 135/128 + 9/8 + 6/5 + 32/25 + 675/512 + 512/375 + 45/32 + 3/2 + 8/5 + 128/75 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/dialim1.scl b/scales/dialim1.scl new file mode 100644 index 0000000..39b1849 --- /dev/null +++ b/scales/dialim1.scl @@ -0,0 +1,19 @@ +! dialim1.scl +! +First 27/25&2048/2025 scale + 14 +! + 16/15 + 9/8 + 6/5 + 32/25 + 4/3 + 27/20 + 45/32 + 3/2 + 8/5 + 27/16 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/diam19.scl b/scales/diam19.scl new file mode 100644 index 0000000..6bc2ab2 --- /dev/null +++ b/scales/diam19.scl @@ -0,0 +1,23 @@ +! diam19.scl +Optimized 13-limit from diamond9plus +19 +! +182.1261 +204.0654 +231.1980 +266.9967 +315.5588 +383.3099 +435.7345 +497.2228 +582.3425 +617.6575 +702.7772 +764.2655 +816.6901 +884.4412 +933.0033 +968.8020 +995.9346 +1017.8739 +2/1 diff --git a/scales/diamin7.scl b/scales/diamin7.scl new file mode 100644 index 0000000..fd54354 --- /dev/null +++ b/scales/diamin7.scl @@ -0,0 +1,22 @@ +! diamin7.scl +permutation epimorphic scale with 7-limit diamond, Hahn and TM reduced <18 29 42 50| +18 +! +16/15 +10/9 +7/6 +8/7 +6/5 +5/4 +4/3 +27/20 +7/5 +10/7 +3/2 +8/5 +5/3 +7/4 +12/7 +9/5 +15/8 +2/1 diff --git a/scales/diamin7_72.scl b/scales/diamin7_72.scl new file mode 100644 index 0000000..8be54d9 --- /dev/null +++ b/scales/diamin7_72.scl @@ -0,0 +1,22 @@ +! diamin7_72.scl +diamin7 in 72-tET + 18 +! +116.666667 +183.333333 +266.666667 +233.333333 +316.666667 +383.333333 +500.000000 +516.666667 +583.333333 +616.666667 +700.000000 +816.666667 +883.333333 +966.666667 +933.333333 +1016.666667 +1083.333333 +2/1 diff --git a/scales/diamin7marv.scl b/scales/diamin7marv.scl new file mode 100644 index 0000000..06603d6 --- /dev/null +++ b/scales/diamin7marv.scl @@ -0,0 +1,23 @@ +! diamin7marv.scl +! +1/4 kleismic tempered diamin7 + 18 +! + 115.58705 + 184.33159 + 268.79879 + 8/7 + 6/5 + 384.38583 + 499.97288 + 515.69553 + 584.44007 + 615.55993 + 700.02712 + 815.61417 + 5/3 + 7/4 + 931.20121 + 1015.66841 + 1084.41295 + 2/1 diff --git a/scales/diamisty.scl b/scales/diamisty.scl new file mode 100644 index 0000000..633737c --- /dev/null +++ b/scales/diamisty.scl @@ -0,0 +1,17 @@ +! diamisty.scl +! +Diamisty scale 2048/2025 and 67108864/66430125 + 12 +! + 135/128 + 9/8 + 1215/1024 + 512/405 + 4/3 + 64/45 + 3/2 + 405/256 + 54675/32768 + 32768/18225 + 256/135 + 2/1 diff --git a/scales/diamond11a.scl b/scales/diamond11a.scl new file mode 100644 index 0000000..9fe8163 --- /dev/null +++ b/scales/diamond11a.scl @@ -0,0 +1,36 @@ +! diamond11a.scl +! +11-limit Diamond (partch_29.scl) with added 16/15 & 15/8, Zoomoozophone tuning: 1/1 = 392 Hz + 31 +! + 16/15 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 2/1 diff --git a/scales/diamond11ak.scl b/scales/diamond11ak.scl new file mode 100644 index 0000000..56ae9d3 --- /dev/null +++ b/scales/diamond11ak.scl @@ -0,0 +1,36 @@ +! diamond11ak.scl +! +microtempered version of diamond11a, Dave Keenan TL 11-1-2000, 225/224&385/384 + 31 +! + 115.79629 + 151.99206 + 11/10 + 10/9 + 201.20000 + 231.60409 + 267.79591 + 316.99629 + 11/9 + 383.60371 + 419.78796 + 432.80410 + 499.40000 + 548.60794 + 584.79219 + 615.20781 + 651.39206 + 700.60000 + 767.19590 + 780.21204 + 816.39629 + 18/11 + 883.00371 + 932.20409 + 968.39591 + 998.80000 + 9/5 + 20/11 + 1048.00794 + 1084.20371 + 2/1 diff --git a/scales/diamond11map.scl b/scales/diamond11map.scl new file mode 100644 index 0000000..1bf2190 --- /dev/null +++ b/scales/diamond11map.scl @@ -0,0 +1,77 @@ +! diamond11map.scl +! +11-limit diamond on a 'centreless' map + 72 +! + 7/6 + 4/3 + 3/2 + 5/3 + 11/6 + 2/1 + 7/3 + 8/3 + 3/1 + 10/3 + 11/3 + 12/11 + 14/11 + 16/11 + 18/11 + 20/11 + 2/1 + 24/11 + 28/11 + 32/11 + 36/11 + 40/11 + 4/1 + 6/5 + 7/5 + 8/5 + 9/5 + 2/1 + 11/5 + 12/5 + 14/5 + 16/5 + 18/5 + 4/1 + 22/5 + 4/3 + 14/9 + 16/9 + 2/1 + 20/9 + 22/9 + 8/3 + 28/9 + 32/9 + 4/1 + 40/9 + 44/9 + 3/2 + 7/4 + 2/1 + 9/4 + 5/2 + 11/4 + 3/1 + 7/2 + 4/1 + 9/2 + 5/1 + 11/2 + 12/7 + 2/1 + 16/7 + 18/7 + 20/7 + 22/7 + 24/7 + 4/1 + 32/7 + 36/7 + 40/7 + 44/7 + 4/1 diff --git a/scales/diamond11strange.scl b/scales/diamond11strange.scl new file mode 100644 index 0000000..d9f411e --- /dev/null +++ b/scales/diamond11strange.scl @@ -0,0 +1,21 @@ +! diamond11strange.scl +! +Lesfip scale, 11-limit diamond, 10 cents tolerance + 16 +! + 116.94577 + 177.73850 + 266.17058 + 322.76186 + 381.86836 + 498.63344 + 557.73994 + 614.33123 + 702.76331 + 763.55603 + 880.50180 + 936.15732 + 996.30671 + 1084.19509 + 1144.34448 + 2/1 diff --git a/scales/diamond11tr.scl b/scales/diamond11tr.scl new file mode 100644 index 0000000..7330d50 --- /dev/null +++ b/scales/diamond11tr.scl @@ -0,0 +1,20 @@ +! diamond11tr.scl +! +11-limit triangular diamond lattice with 64/63 intervals removed + 15 +! + 9/8 + 7/6 + 6/5 + 5/4 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 8/5 + 5/3 + 12/7 + 16/9 + 2/1 diff --git a/scales/diamond15.scl b/scales/diamond15.scl new file mode 100644 index 0000000..e88f2fd --- /dev/null +++ b/scales/diamond15.scl @@ -0,0 +1,64 @@ +! diamond15.scl +! +15-limit diamond + 2nd ratios. See Novaro, 1927, Sistema Natural... + 59 +! + 33/32 + 16/15 + 15/14 + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 15/13 + 7/6 + 13/11 + 32/27 + 6/5 + 39/32 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 13/10 + 21/16 + 4/3 + 15/11 + 11/8 + 18/13 + 7/5 + 45/32 + 64/45 + 10/7 + 13/9 + 16/11 + 22/15 + 3/2 + 32/21 + 20/13 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 64/39 + 5/3 + 27/16 + 22/13 + 12/7 + 26/15 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 28/15 + 15/8 + 64/33 + 2/1 diff --git a/scales/diamond17.scl b/scales/diamond17.scl new file mode 100644 index 0000000..f40aee3 --- /dev/null +++ b/scales/diamond17.scl @@ -0,0 +1,48 @@ +! diamond17.scl +! +17-limit diamond + 43 +! + 17/16 + 14/13 + 13/12 + 12/11 + 11/10 + 8/7 + 7/6 + 20/17 + 13/11 + 6/5 + 17/14 + 16/13 + 5/4 + 14/11 + 22/17 + 13/10 + 17/13 + 4/3 + 11/8 + 7/5 + 24/17 + 17/12 + 10/7 + 16/11 + 3/2 + 26/17 + 20/13 + 17/11 + 11/7 + 8/5 + 13/8 + 28/17 + 5/3 + 22/13 + 17/10 + 12/7 + 7/4 + 20/11 + 11/6 + 24/13 + 13/7 + 32/17 + 2/1 diff --git a/scales/diamond17a.scl b/scales/diamond17a.scl new file mode 100644 index 0000000..589179b --- /dev/null +++ b/scales/diamond17a.scl @@ -0,0 +1,60 @@ +! diamond17a.scl +! +17-limit, +9 diamond + 55 +! + 18/17 + 17/16 + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 20/17 + 13/11 + 6/5 + 17/14 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 22/17 + 13/10 + 17/13 + 4/3 + 11/8 + 18/13 + 7/5 + 24/17 + 17/12 + 10/7 + 13/9 + 16/11 + 3/2 + 26/17 + 20/13 + 17/11 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 28/17 + 5/3 + 22/13 + 17/10 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 32/17 + 17/9 + 2/1 diff --git a/scales/diamond17b.scl b/scales/diamond17b.scl new file mode 100644 index 0000000..21ac013 --- /dev/null +++ b/scales/diamond17b.scl @@ -0,0 +1,70 @@ +! diamond17b.scl +! +17-limit, +9 +15 diamond, Denny Genovese, 3/2=384 Hz + 65 +! + 18/17 + 17/16 + 16/15 + 15/14 + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 17/15 + 8/7 + 15/13 + 7/6 + 20/17 + 13/11 + 6/5 + 17/14 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 22/17 + 13/10 + 17/13 + 4/3 + 15/11 + 11/8 + 18/13 + 7/5 + 24/17 + 17/12 + 10/7 + 13/9 + 16/11 + 22/15 + 3/2 + 26/17 + 20/13 + 17/11 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 28/17 + 5/3 + 22/13 + 17/10 + 12/7 + 26/15 + 7/4 + 30/17 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 28/15 + 15/8 + 32/17 + 17/9 + 2/1 diff --git a/scales/diamond19.scl b/scales/diamond19.scl new file mode 100644 index 0000000..752361f --- /dev/null +++ b/scales/diamond19.scl @@ -0,0 +1,62 @@ +! diamond19.scl +! +19-limit diamond + 57 +! + 20/19 + 17/16 + 14/13 + 13/12 + 12/11 + 11/10 + 19/17 + 8/7 + 22/19 + 7/6 + 20/17 + 13/11 + 19/16 + 6/5 + 17/14 + 16/13 + 5/4 + 24/19 + 14/11 + 22/17 + 13/10 + 17/13 + 4/3 + 19/14 + 26/19 + 11/8 + 7/5 + 24/17 + 17/12 + 10/7 + 16/11 + 19/13 + 28/19 + 3/2 + 26/17 + 20/13 + 17/11 + 11/7 + 19/12 + 8/5 + 13/8 + 28/17 + 5/3 + 32/19 + 22/13 + 17/10 + 12/7 + 19/11 + 7/4 + 34/19 + 20/11 + 11/6 + 24/13 + 13/7 + 32/17 + 19/10 + 2/1 diff --git a/scales/diamond27.scl b/scales/diamond27.scl new file mode 100644 index 0000000..97944d4 --- /dev/null +++ b/scales/diamond27.scl @@ -0,0 +1,18 @@ +! diamond27.scl +! +Diamond 21 23 25 27, Christopher Vaisvil + 13 +! + 27/25 + 25/23 + 23/21 + 27/23 + 25/21 + 9/7 + 14/9 + 42/25 + 46/27 + 42/23 + 46/25 + 50/27 + 2/1 diff --git a/scales/diamond7-13.scl b/scales/diamond7-13.scl new file mode 100644 index 0000000..fa80a57 --- /dev/null +++ b/scales/diamond7-13.scl @@ -0,0 +1,18 @@ +! diamond7-13.scl +! +7 9 11 13 diamond + 13 +! + 14/13 + 13/11 + 11/9 + 14/11 + 9/7 + 18/13 + 13/9 + 14/9 + 11/7 + 18/11 + 22/13 + 13/7 + 2/1 diff --git a/scales/diamond7.scl b/scales/diamond7.scl new file mode 100644 index 0000000..0b0476a --- /dev/null +++ b/scales/diamond7.scl @@ -0,0 +1,18 @@ +! diamond7.scl +! +7-limit diamond, also double-tie circular mirroring of 4:5:6:7 with common pivot + 13 +! + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 2/1 diff --git a/scales/diamond9.scl b/scales/diamond9.scl new file mode 100644 index 0000000..7735bb3 --- /dev/null +++ b/scales/diamond9.scl @@ -0,0 +1,24 @@ +! diamond9.scl +! +9-limit tonality diamond + 19 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 2/1 diff --git a/scales/diamond9block.scl b/scales/diamond9block.scl new file mode 100644 index 0000000..997a939 --- /dev/null +++ b/scales/diamond9block.scl @@ -0,0 +1,26 @@ +! diamond9block.scl +! +Weak Fokker block one note different from the 9-limit diamond +! <<3 -2 7 -10 2 22||: -9 to 9; <<1 -7 -4 -13 -9 11||: -9 to 9; <<4 10 3 6 -7 -22||: -8 to 10 +! Fokker block commas: 135/112, 126/125, 160/147 +19 +! +10/9 +9/8 +8/7 +7/6 +6/5 +5/4 +9/7 +4/3 +7/5 +10/7 +3/2 +14/9 +5/3 +12/7 +7/4 +16/9 +9/5 +27/14 +2/1 diff --git a/scales/diamond9keemic.scl b/scales/diamond9keemic.scl new file mode 100644 index 0000000..ff50696 --- /dev/null +++ b/scales/diamond9keemic.scl @@ -0,0 +1,46 @@ +! diamond9keemic.scl +Keemic (875/864) tempering of 9-limit diamond, POTE tuning +19 +! +176.72185 +203.74653 +235.78536 +262.34137 +321.40488 +380.46839 +439.53189 +498.12673 +583.74625 +616.25375 +701.87327 +760.46811 +819.53161 +878.59512 +937.65863 +964.21464 +996.25347 +1023.27815 +2/1 +! +! diamond9keemictrans.scl +! +!Keemic (875/864) transversal of the 9-limit diamond ! 19 !! +! 10/9 +! 9/8 +! 144/125 +! 125/108 +! 6/5 +! 5/4 +! 125/96 +! 4/3 +! 864/625 +! 625/432 +! 3/2 +! 192/125 +! 8/5 +! 5/3 +! 216/125 +! 125/72 +! 16/9 +! 9/5 +! 2/1 diff --git a/scales/diamond9plus.scl b/scales/diamond9plus.scl new file mode 100644 index 0000000..885e910 --- /dev/null +++ b/scales/diamond9plus.scl @@ -0,0 +1,25 @@ +! diamond9plus.scl +9-limit tonality diamond extended with two secors +21 +! +115.587 +10/9 +9/8 +8/7 +7/6 +6/5 +5/4 +9/7 +4/3 +7/5 +10/7 +3/2 +14/9 +8/5 +5/3 +12/7 +7/4 +16/9 +9/5 +1084.413 +2/1 diff --git a/scales/diamond_chess.scl b/scales/diamond_chess.scl new file mode 100644 index 0000000..08437dc --- /dev/null +++ b/scales/diamond_chess.scl @@ -0,0 +1,16 @@ +! diamond_chess.scl +! +9-limit chessboard pattern diamond. OdC + 11 +! + 8/7 + 6/5 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 5/3 + 7/4 + 2/1 diff --git a/scales/diamond_chess11.scl b/scales/diamond_chess11.scl new file mode 100644 index 0000000..173095d --- /dev/null +++ b/scales/diamond_chess11.scl @@ -0,0 +1,22 @@ +! DIAMOND_CHESS11.scl +! +11-limit chessboard pattern diamond. OdC + 17 +! + 11/10 + 8/7 + 6/5 + 11/9 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 18/11 + 5/3 + 7/4 + 20/11 + 2/1 diff --git a/scales/diamond_dup.scl b/scales/diamond_dup.scl new file mode 100644 index 0000000..035ed2b --- /dev/null +++ b/scales/diamond_dup.scl @@ -0,0 +1,25 @@ +! diamond_dup.scl +! +Two 7-limit diamonds 3/2 apart + 20 +! + 21/20 + 15/14 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/diamond_mod.scl b/scales/diamond_mod.scl new file mode 100644 index 0000000..5ada89f --- /dev/null +++ b/scales/diamond_mod.scl @@ -0,0 +1,18 @@ +! diamond_mod.scl +! +13-tone Octave Modular Diamond, based on Archytas's Enharmonic + 13 +! + 36/35 + 28/27 + 16/15 + 5/4 + 9/7 + 4/3 + 3/2 + 14/9 + 8/5 + 15/8 + 27/14 + 35/18 + 2/1 diff --git a/scales/diamond_tetr.scl b/scales/diamond_tetr.scl new file mode 100644 index 0000000..f496268 --- /dev/null +++ b/scales/diamond_tetr.scl @@ -0,0 +1,13 @@ +! diamond_tetr.scl +! +Tetrachord Modular Diamond based on Archytas's Enharmonic + 8 +! + 28/27 + 16/15 + 5/4 + 9/7 + 35/27 + 4/3 + 48/35 + 2/1 diff --git a/scales/diamondupblock.scl b/scales/diamondupblock.scl new file mode 100644 index 0000000..175c6e1 --- /dev/null +++ b/scales/diamondupblock.scl @@ -0,0 +1,29 @@ +! diamondupblock.scl +! +Weak Fokker block with val <20 31 46 59| +! <<1 6 9 7 11 3||: -9 to 10; <<3 -2 7 -10 2 22||: -9 to 10; <<4 4 -4 -3 -18 -21||: -8 to 8 +! Fokker block commas: 192/175, 200/189, 135/112 +! mutated from diamond_dup +! +20 +! +16/15 +10/9 +9/8 +8/7 +7/6 +6/5 +5/4 +21/16 +4/3 +7/5 +10/7 +3/2 +8/5 +5/3 +12/7 +7/4 +16/9 +9/5 +15/8 +2/1 diff --git a/scales/diaphonic_10.scl b/scales/diaphonic_10.scl new file mode 100644 index 0000000..c8545a1 --- /dev/null +++ b/scales/diaphonic_10.scl @@ -0,0 +1,15 @@ +! diaphonic_10.scl +! +10-tone Diaphonic Cycle + 10 +! + 18/17 + 9/8 + 6/5 + 9/7 + 18/13 + 3/2 + 8/5 + 12/7 + 24/13 + 2/1 diff --git a/scales/diaphonic_12.scl b/scales/diaphonic_12.scl new file mode 100644 index 0000000..92cb601 --- /dev/null +++ b/scales/diaphonic_12.scl @@ -0,0 +1,17 @@ +! diaphonic_12.scl +! +12-tone Diaphonic Cycle, conjunctive form on 3/2 and 4/3 + 12 +! + 21/20 + 21/19 + 7/6 + 21/17 + 21/16 + 7/5 + 3/2 + 30/19 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/diaphonic_12a.scl b/scales/diaphonic_12a.scl new file mode 100644 index 0000000..e6f8291 --- /dev/null +++ b/scales/diaphonic_12a.scl @@ -0,0 +1,17 @@ +! DIAPHONIC_12a.scl +! +2nd 12-tone Diaphonic Cycle, conjunctive form on 10/7 and 7/5 + 12 +! + 21/20 + 21/19 + 7/6 + 21/17 + 21/16 + 7/5 + 28/19 + 14/9 + 28/17 + 7/4 + 28/15 + 2/1 diff --git a/scales/diaphonic_7.scl b/scales/diaphonic_7.scl new file mode 100644 index 0000000..c8feaf2 --- /dev/null +++ b/scales/diaphonic_7.scl @@ -0,0 +1,12 @@ +! diaphonic_7.scl +! +7-tone Diaphonic Cycle, disjunctive form on 4/3 and 3/2 + 7 +! + 12/11 + 6/5 + 4/3 + 16/11 + 8/5 + 16/9 + 2/1 diff --git a/scales/diat13.scl b/scales/diat13.scl new file mode 100644 index 0000000..d162c2e --- /dev/null +++ b/scales/diat13.scl @@ -0,0 +1,12 @@ +! diat13.scl +! +This genus is from K.S's diatonic Hypodorian harmonia + 7 +! + 16/15 + 16/13 + 4/3 + 3/2 + 8/5 + 24/13 + 2/1 diff --git a/scales/diat15.scl b/scales/diat15.scl new file mode 100644 index 0000000..b603749 --- /dev/null +++ b/scales/diat15.scl @@ -0,0 +1,13 @@ +! diat15.scl +! +Tonos-15 Diatonic and its own trite synemmenon Bb + 8 +! + 15/13 + 5/4 + 15/11 + 10/7 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/diat15_inv.scl b/scales/diat15_inv.scl new file mode 100644 index 0000000..cb9c110 --- /dev/null +++ b/scales/diat15_inv.scl @@ -0,0 +1,13 @@ +! diat15_inv.scl +! +Inverted Tonos-15 Harmonia, a harmonic series from 15 from 30. + 8 +! + 16/15 + 6/5 + 4/3 + 7/5 + 22/15 + 8/5 + 26/15 + 2/1 diff --git a/scales/diat17.scl b/scales/diat17.scl new file mode 100644 index 0000000..9b9d216 --- /dev/null +++ b/scales/diat17.scl @@ -0,0 +1,13 @@ +! diat17.scl +! +Tonos-17 Diatonic and its own trite synemmenon Bb + 8 +! + 17/15 + 17/13 + 17/12 + 34/23 + 17/11 + 17/10 + 17/9 + 2/1 diff --git a/scales/diat19.scl b/scales/diat19.scl new file mode 100644 index 0000000..3578b08 --- /dev/null +++ b/scales/diat19.scl @@ -0,0 +1,13 @@ +! diat19.scl +! +Tonos-19 Diatonic and its own trite synemmenon Bb + 8 +! + 19/18 + 19/16 + 19/14 + 38/27 + 19/13 + 19/12 + 19/11 + 2/1 diff --git a/scales/diat21.scl b/scales/diat21.scl new file mode 100644 index 0000000..c716001 --- /dev/null +++ b/scales/diat21.scl @@ -0,0 +1,13 @@ +! diat21.scl +! +Tonos-21 Diatonic and its own trite synemmenon Bb + 8 +! + 21/19 + 7/6 + 21/16 + 7/5 + 3/2 + 21/13 + 7/4 + 2/1 diff --git a/scales/diat21_inv.scl b/scales/diat21_inv.scl new file mode 100644 index 0000000..76d960a --- /dev/null +++ b/scales/diat21_inv.scl @@ -0,0 +1,13 @@ +! diat21_inv.scl +! +Inverted Tonos-21 Harmonia, a harmonic series from 21 from 42. + 8 +! + 8/7 + 26/21 + 4/3 + 10/7 + 32/21 + 12/7 + 38/21 + 2/1 diff --git a/scales/diat23.scl b/scales/diat23.scl new file mode 100644 index 0000000..96ee72a --- /dev/null +++ b/scales/diat23.scl @@ -0,0 +1,13 @@ +! diat23.scl +! +Tonos-23 Diatonic and its own trite synemmenon Bb + 8 +! + 23/21 + 23/20 + 23/18 + 23/17 + 23/16 + 23/14 + 23/13 + 2/1 diff --git a/scales/diat25.scl b/scales/diat25.scl new file mode 100644 index 0000000..d2c0461 --- /dev/null +++ b/scales/diat25.scl @@ -0,0 +1,13 @@ +! diat25.scl +! +Tonos-25 Diatonic and its own trite synemmenon Bb + 8 +! + 25/22 + 5/4 + 25/18 + 25/17 + 25/16 + 25/14 + 25/13 + 2/1 diff --git a/scales/diat27.scl b/scales/diat27.scl new file mode 100644 index 0000000..e06161d --- /dev/null +++ b/scales/diat27.scl @@ -0,0 +1,13 @@ +! diat27.scl +! +Tonos-27 Diatonic and its own trite synemmenon Bb + 8 +! + 9/8 + 9/7 + 27/20 + 27/19 + 3/2 + 27/16 + 27/14 + 2/1 diff --git a/scales/diat27_inv.scl b/scales/diat27_inv.scl new file mode 100644 index 0000000..ded4c31 --- /dev/null +++ b/scales/diat27_inv.scl @@ -0,0 +1,13 @@ +! diat27_inv.scl +! +Inverted Tonos-27 Harmonia, a harmonic series from 27 from 54 + 8 +! + 28/27 + 32/27 + 4/3 + 13/9 + 40/27 + 14/9 + 16/9 + 2/1 diff --git a/scales/diat29.scl b/scales/diat29.scl new file mode 100644 index 0000000..cd8fb87 --- /dev/null +++ b/scales/diat29.scl @@ -0,0 +1,13 @@ +! diat29.scl +! +Tonos-29 Diatonic and its own trite synemmenon Bb + 8 +! + 29/26 + 29/24 + 29/22 + 29/21 + 29/20 + 29/18 + 29/16 + 2/1 diff --git a/scales/diat31.scl b/scales/diat31.scl new file mode 100644 index 0000000..d9534a5 --- /dev/null +++ b/scales/diat31.scl @@ -0,0 +1,13 @@ +! diat31.scl +! +Tonos-31 Diatonic. The disjunctive and conjunctive diatonic forms are the same + 8 +! + 31/28 + 31/26 + 31/24 + 31/23 + 31/22 + 31/20 + 31/18 + 2/1 diff --git a/scales/diat33.scl b/scales/diat33.scl new file mode 100644 index 0000000..2a109fb --- /dev/null +++ b/scales/diat33.scl @@ -0,0 +1,13 @@ +! diat33.scl +! +Tonos-33 Diatonic. The conjunctive form is 23 (Bb instead of B) 20 18 33/2 + 8 +! + 11/10 + 11/9 + 11/8 + 33/23 + 3/2 + 33/20 + 11/6 + 2/1 diff --git a/scales/diat_chrom.scl b/scales/diat_chrom.scl new file mode 100644 index 0000000..ae5ad39 --- /dev/null +++ b/scales/diat_chrom.scl @@ -0,0 +1,12 @@ +! diat_chrom.scl +! +Diatonic- Chromatic, on the border between the chromatic and diatonic genera + 7 +! + 15/14 + 15/13 + 4/3 + 3/2 + 45/28 + 45/26 + 2/1 diff --git a/scales/diat_dies2.scl b/scales/diat_dies2.scl new file mode 100644 index 0000000..789c091 --- /dev/null +++ b/scales/diat_dies2.scl @@ -0,0 +1,12 @@ +! diat_dies2.scl +! +Dorian Diatonic, 2 part Diesis + 7 +! + 33.33333 + 300.00000 + 500.00000 + 700.00000 + 733.33333 + 1000.00000 + 2/1 diff --git a/scales/diat_dies5.scl b/scales/diat_dies5.scl new file mode 100644 index 0000000..6180989 --- /dev/null +++ b/scales/diat_dies5.scl @@ -0,0 +1,12 @@ +! diat_dies5.scl +! +Dorian Diatonic, 5 part Diesis + 7 +! + 83.33333 + 300.00000 + 500.00000 + 700.00000 + 783.33333 + 1000.00000 + 2/1 diff --git a/scales/diat_enh.scl b/scales/diat_enh.scl new file mode 100644 index 0000000..6bff51b --- /dev/null +++ b/scales/diat_enh.scl @@ -0,0 +1,12 @@ +! diat_enh.scl +! +Diat. + Enharm. Diesis, Dorian Mode + 7 +! + 50.00000 + 300.00000 + 500.00000 + 700.00000 + 750.00000 + 1000.00000 + 2/1 diff --git a/scales/diat_enh2.scl b/scales/diat_enh2.scl new file mode 100644 index 0000000..d91b00b --- /dev/null +++ b/scales/diat_enh2.scl @@ -0,0 +1,12 @@ +! diat_enh2.scl +! +Diat. + Enharm. Diesis, Dorian Mode 3 + 12 + 15 parts + 7 +! + 50.00000 + 250.00000 + 500.00000 + 700.00000 + 750.00000 + 950.00000 + 2/1 diff --git a/scales/diat_enh3.scl b/scales/diat_enh3.scl new file mode 100644 index 0000000..264a18e --- /dev/null +++ b/scales/diat_enh3.scl @@ -0,0 +1,12 @@ +! diat_enh3.scl +! +Diat. + Enharm. Diesis, Dorian Mode, 15 + 3 + 12 parts + 7 +! + 250.00000 + 300.00000 + 500.00000 + 700.00000 + 950.00000 + 1000.00000 + 2/1 diff --git a/scales/diat_enh4.scl b/scales/diat_enh4.scl new file mode 100644 index 0000000..2b92108 --- /dev/null +++ b/scales/diat_enh4.scl @@ -0,0 +1,12 @@ +! diat_enh4.scl +! +Diat. + Enharm. Diesis, Dorian Mode, 15 + 12 + 3 parts + 7 +! + 250.00000 + 450.00000 + 500.00000 + 700.00000 + 950.00000 + 1150.00000 + 2/1 diff --git a/scales/diat_enh5.scl b/scales/diat_enh5.scl new file mode 100644 index 0000000..bf97d08 --- /dev/null +++ b/scales/diat_enh5.scl @@ -0,0 +1,12 @@ +! diat_enh5.scl +! +Dorian Mode, 12 + 15 + 3 parts + 7 +! + 200.00000 + 450.00000 + 500.00000 + 700.00000 + 900.00000 + 1150.00000 + 2/1 diff --git a/scales/diat_enh6.scl b/scales/diat_enh6.scl new file mode 100644 index 0000000..d6c2e0f --- /dev/null +++ b/scales/diat_enh6.scl @@ -0,0 +1,12 @@ +! diat_enh6.scl +! +Dorian Mode, 12 + 3 + 15 parts + 7 +! + 200.00000 + 250.00000 + 500.00000 + 700.00000 + 900.00000 + 950.00000 + 2/1 diff --git a/scales/diat_eq.scl b/scales/diat_eq.scl new file mode 100644 index 0000000..cd3482e --- /dev/null +++ b/scales/diat_eq.scl @@ -0,0 +1,12 @@ +! diat_eq.scl +! +Equal Diatonic, Islamic form, similar to 11/10 x 11/10 x 400/363 + 7 +! + 166.66667 + 333.33333 + 500.00000 + 700.00000 + 866.66667 + 1033.33333 + 2/1 diff --git a/scales/diat_eq2.scl b/scales/diat_eq2.scl new file mode 100644 index 0000000..b1acc80 --- /dev/null +++ b/scales/diat_eq2.scl @@ -0,0 +1,12 @@ +! diat_eq2.scl +! +Equal Diatonic, 11/10 x 400/363 x 11/10 + 7 +! + 11/10 + 40/33 + 4/3 + 3/2 + 33/20 + 20/11 + 2/1 diff --git a/scales/diat_hemchrom.scl b/scales/diat_hemchrom.scl new file mode 100644 index 0000000..321b9b8 --- /dev/null +++ b/scales/diat_hemchrom.scl @@ -0,0 +1,12 @@ +! diat_hemchrom.scl +! +Diat. + Hem. Chrom. Diesis, Another genus of Aristoxenos, Dorian Mode + 7 +! + 75.00000 + 300.00000 + 500.00000 + 700.00000 + 775.00000 + 1000.00000 + 2/1 diff --git a/scales/diat_smal.scl b/scales/diat_smal.scl new file mode 100644 index 0000000..a5301ed --- /dev/null +++ b/scales/diat_smal.scl @@ -0,0 +1,12 @@ +! diat_smal.scl +! +"Smallest number" diatonic scale + 7 +! + 8/7 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/diat_sofchrom.scl b/scales/diat_sofchrom.scl new file mode 100644 index 0000000..ba2c67d --- /dev/null +++ b/scales/diat_sofchrom.scl @@ -0,0 +1,12 @@ +! diat_sofchrom.scl +! +Diat. + Soft Chrom. Diesis, Another genus of Aristoxenos, Dorian Mode + 7 +! + 66.66667 + 300.00000 + 500.00000 + 700.00000 + 766.66667 + 1000.00000 + 2/1 diff --git a/scales/diat_soft.scl b/scales/diat_soft.scl new file mode 100644 index 0000000..4dc255e --- /dev/null +++ b/scales/diat_soft.scl @@ -0,0 +1,12 @@ +! diat_soft.scl +! +Soft Diatonic genus 5 + 10 + 15 parts + 7 +! + 83.33333 + 250.00000 + 500.00000 + 700.00000 + 783.33333 + 950.00000 + 2/1 diff --git a/scales/diat_soft2.scl b/scales/diat_soft2.scl new file mode 100644 index 0000000..2ed40b5 --- /dev/null +++ b/scales/diat_soft2.scl @@ -0,0 +1,12 @@ +! diat_soft2.scl +! +Soft Diatonic genus with equally divided Pyknon; Dorian Mode + 7 +! + 125.00000 + 250.00000 + 500.00000 + 700.00000 + 825.00000 + 950.00000 + 2/1 diff --git a/scales/diat_soft3.scl b/scales/diat_soft3.scl new file mode 100644 index 0000000..888eea8 --- /dev/null +++ b/scales/diat_soft3.scl @@ -0,0 +1,12 @@ +! diat_soft3.scl +! +New Soft Diatonic genus with equally divided Pyknon; Dorian Mode; 1:1 pyknon + 7 +! + 125.00000 + 375.00000 + 500.00000 + 700.00000 + 825.00000 + 1075.00000 + 2/1 diff --git a/scales/diat_soft4.scl b/scales/diat_soft4.scl new file mode 100644 index 0000000..508d001 --- /dev/null +++ b/scales/diat_soft4.scl @@ -0,0 +1,12 @@ +! diat_soft4.scl +! +New Soft Diatonic genus with equally divided Pyknon; Dorian Mode; 1:1 pyknon + 7 +! + 250.00000 + 375.00000 + 500.00000 + 700.00000 + 950.00000 + 1075.00000 + 2/1 diff --git a/scales/didy_chrom.scl b/scales/didy_chrom.scl new file mode 100644 index 0000000..0255a88 --- /dev/null +++ b/scales/didy_chrom.scl @@ -0,0 +1,12 @@ +! didy_chrom.scl +! +Didymus Chromatic + 7 +! + 16/15 + 10/9 + 4/3 + 3/2 + 8/5 + 5/3 + 2/1 diff --git a/scales/didy_chrom1.scl b/scales/didy_chrom1.scl new file mode 100644 index 0000000..4fce56d --- /dev/null +++ b/scales/didy_chrom1.scl @@ -0,0 +1,12 @@ +! didy_chrom1.scl +! +Permuted Didymus Chromatic + 7 +! + 16/15 + 32/25 + 4/3 + 3/2 + 8/5 + 48/25 + 2/1 diff --git a/scales/didy_chrom2.scl b/scales/didy_chrom2.scl new file mode 100644 index 0000000..138bec6 --- /dev/null +++ b/scales/didy_chrom2.scl @@ -0,0 +1,12 @@ +! DIDY_CHROM2.scl +! +Didymos's Chromatic, 6/5 x 25/24 x 16/15 + 7 +! + 6/5 + 5/4 + 4/3 + 3/2 + 9/5 + 15/8 + 2/1 diff --git a/scales/didy_chrom3.scl b/scales/didy_chrom3.scl new file mode 100644 index 0000000..ea23679 --- /dev/null +++ b/scales/didy_chrom3.scl @@ -0,0 +1,12 @@ +! DIDY_CHROM3.scl +! +Didymos's Chromatic, 25/24 x 16/15 x 6/5 + 7 +! + 25/24 + 10/9 + 4/3 + 3/2 + 25/16 + 5/3 + 2/1 diff --git a/scales/didy_diat.scl b/scales/didy_diat.scl new file mode 100644 index 0000000..5c9141b --- /dev/null +++ b/scales/didy_diat.scl @@ -0,0 +1,12 @@ +! didy_diat.scl +! +Didymus Diatonic + 7 +! + 16/15 + 32/27 + 4/3 + 3/2 + 8/5 + 16/9 + 2/1 diff --git a/scales/didy_enh.scl b/scales/didy_enh.scl new file mode 100644 index 0000000..f3d78f5 --- /dev/null +++ b/scales/didy_enh.scl @@ -0,0 +1,12 @@ +! didy_enh.scl +! +Dorian mode of Didymos's Enharmonic + 7 +! + 32/31 + 16/15 + 4/3 + 3/2 + 48/31 + 8/5 + 2/1 diff --git a/scales/didy_enh2.scl b/scales/didy_enh2.scl new file mode 100644 index 0000000..1e301cf --- /dev/null +++ b/scales/didy_enh2.scl @@ -0,0 +1,12 @@ +! didy_enh2.scl +! +Permuted Didymus Enharmonic + 7 +! + 256/243 + 16/15 + 4/3 + 3/2 + 128/81 + 8/5 + 2/1 diff --git a/scales/didymus19sync.scl b/scales/didymus19sync.scl new file mode 100644 index 0000000..0716654 --- /dev/null +++ b/scales/didymus19sync.scl @@ -0,0 +1,47 @@ +! didymus19sync.scl +Didymus[19] hobbit (81/80) in synchronized tuning ! 3-2x, 5-x, 7-2x, where x is the smaller root of 16x^4 - 96x^3 + 216x^2 - 200x + 1 +19 +! +41.37646 +119.28478 +192.28609 +233.66254 +311.57087 +384.57217 +462.48050 +503.85696 +545.23341 +654.76659 +696.14304 +737.51950 +815.42783 +888.42913 +966.33746 +1007.71391 +1080.71522 +1158.62354 +2/1 +! +!! predidymus19.scl +! Didymus[19] {2, 3, 7} transversal +! 19 +!! +! 64/63 +! 256/243 +! 9/8 +! 8/7 +! 32/27 +! 81/64 +! 21/16 +! 4/3 +! 256/189 +! 189/128 +! 3/2 +! 32/21 +! 128/81 +! 27/16 +! 7/4 +! 16/9 +! 243/128 +! 63/32 +! 2/1 diff --git a/scales/diesic-m.scl b/scales/diesic-m.scl new file mode 100644 index 0000000..8c297e0 --- /dev/null +++ b/scales/diesic-m.scl @@ -0,0 +1,12 @@ +! diesic-m.scl +! +Minimal Diesic temperament, g=176.021, 5-limit + 7 +! + 176.02067 + 352.04134 + 528.06201 + 704.08268 + 880.10335 + 1056.12402 + 2/1 diff --git a/scales/diesic-t.scl b/scales/diesic-t.scl new file mode 100644 index 0000000..dd756d5 --- /dev/null +++ b/scales/diesic-t.scl @@ -0,0 +1,24 @@ +! diesic-t.scl +! +Tiny Diesic temperament, g=443.017, 5-limit + 19 +! + 73.18474 + 129.05038 + 202.23513 + 258.10077 + 331.28551 + 387.15115 + 443.01679 + 516.20154 + 572.06718 + 645.25192 + 701.11756 + 774.30230 + 830.16795 + 886.03359 + 959.21833 + 1015.08397 + 1088.26871 + 1144.13436 + 2/1 diff --git a/scales/diff19-9-4.scl b/scales/diff19-9-4.scl new file mode 100644 index 0000000..cee2f59 --- /dev/null +++ b/scales/diff19-9-4.scl @@ -0,0 +1,15 @@ +! diff19-9-4.scl +! +Scale derived from (19,9,4) Type Q cyclic difference set, 19-tET +10 +! + 63.15789 + 252.63158 + 315.78947 + 378.94737 + 442.10526 + 568.42105 + 694.73684 + 1010.52632 + 1073.68421 + 2/1 diff --git a/scales/diff31-h8.scl b/scales/diff31-h8.scl new file mode 100644 index 0000000..4375544 --- /dev/null +++ b/scales/diff31-h8.scl @@ -0,0 +1,21 @@ +! diff31-h8.scl +! +(31, 15, 7) type H8 cyclic difference set, 31-tET + 16 +! + 38.70968 + 77.41935 + 116.12903 + 154.83871 + 232.25806 + 309.67742 + 464.51613 + 580.64516 + 619.35484 + 658.06452 + 890.32258 + 929.03226 + 1045.16129 + 1122.58065 + 1161.29032 + 2/1 diff --git a/scales/diff31-q.scl b/scales/diff31-q.scl new file mode 100644 index 0000000..7660753 --- /dev/null +++ b/scales/diff31-q.scl @@ -0,0 +1,21 @@ +! diff31-q.scl +! +(31, 15, 7) type Q cyclic difference set, 31-tET + 16 +! + 38.70968 + 77.41935 + 154.83871 + 193.54839 + 270.96774 + 309.67742 + 348.38710 + 387.09677 + 541.93548 + 619.35484 + 696.77419 + 735.48387 + 774.19355 + 967.74194 + 1083.87097 + 2/1 diff --git a/scales/diff31_72.scl b/scales/diff31_72.scl new file mode 100644 index 0000000..71ee014 --- /dev/null +++ b/scales/diff31_72.scl @@ -0,0 +1,36 @@ +! diff31_72.scl +! +Diff31, 11/9, 4/3, 7/5, 3/2, 7/4, 9/5 difference diamond, tempered to 72-tET + 31 +! + 50.00000 + 83.33333 + 116.66667 + 150.00000 + 200.00000 + 233.33333 + 266.66667 + 316.66667 + 350.00000 + 383.33333 + 433.33333 + 466.66667 + 516.66667 + 533.33333 + 583.33333 + 616.66667 + 666.66667 + 683.33333 + 733.33333 + 766.66667 + 816.66667 + 850.00000 + 883.33333 + 933.33333 + 966.66667 + 1000.00000 + 1050.00000 + 1083.33333 + 1116.66667 + 1150.00000 + 2/1 diff --git a/scales/diminished.scl b/scales/diminished.scl new file mode 100644 index 0000000..2190dfe --- /dev/null +++ b/scales/diminished.scl @@ -0,0 +1,25 @@ +! diminished.scl +! +Diminished temperament, g=94.134357 period=300.0, 7-limit + 20 +! + 76.53743 + 94.13436 + 188.26871 + 282.40307 + 300.00000 + 376.53743 + 394.13436 + 488.26871 + 582.40307 + 600.00000 + 676.53743 + 694.13436 + 788.26871 + 882.40307 + 900.00000 + 976.53743 + 994.13436 + 1088.26871 + 1182.40307 + 2/1 diff --git a/scales/dimteta.scl b/scales/dimteta.scl new file mode 100644 index 0000000..1b6ce8e --- /dev/null +++ b/scales/dimteta.scl @@ -0,0 +1,12 @@ +! dimteta.scl +! +A heptatonic form on the 9/7 + 7 +! + 27/25 + 27/23 + 9/7 + 14/9 + 42/25 + 42/23 + 2/1 diff --git a/scales/dimtetb.scl b/scales/dimtetb.scl new file mode 100644 index 0000000..70ba7ff --- /dev/null +++ b/scales/dimtetb.scl @@ -0,0 +1,10 @@ +! dimtetb.scl +! +A pentatonic form on the 9/7 + 5 +! + 9/8 + 9/7 + 14/9 + 7/4 + 2/1 diff --git a/scales/dint.scl b/scales/dint.scl new file mode 100644 index 0000000..8f25270 --- /dev/null +++ b/scales/dint.scl @@ -0,0 +1,45 @@ +! dint.scl +Breed reduction of 43 note scale of all tetrads sharing interval with 7-limit diamond +41 +! +49/48 +36/35 +25/24 +21/20 +16/15 +15/14 +35/32 +10/9 +28/25 +8/7 +7/6 +25/21 +6/5 +49/40 +5/4 +9/7 +21/16 +4/3 +48/35 +7/5 +10/7 +35/24 +3/2 +32/21 +14/9 +8/5 +49/30 +5/3 +42/25 +12/7 +7/4 +25/14 +9/5 +64/35 +28/15 +15/8 +40/21 +48/25 +35/18 +49/25 +2/1 diff --git a/scales/div_fifth1.scl b/scales/div_fifth1.scl new file mode 100644 index 0000000..418b7e7 --- /dev/null +++ b/scales/div_fifth1.scl @@ -0,0 +1,10 @@ +! div_fifth1.scl +! +Divided Fifth #1, From Schlesinger, see Chapter 8, p. 160 + 5 +! + 24/23 + 12/11 + 4/3 + 3/2 + 2/1 diff --git a/scales/div_fifth2.scl b/scales/div_fifth2.scl new file mode 100644 index 0000000..fca2ec9 --- /dev/null +++ b/scales/div_fifth2.scl @@ -0,0 +1,10 @@ +! div_fifth2.scl +! +Divided Fifth #2, From Schlesinger, see Chapter 8, p. 160 + 5 +! + 16/15 + 8/7 + 4/3 + 3/2 + 2/1 diff --git a/scales/div_fifth3.scl b/scales/div_fifth3.scl new file mode 100644 index 0000000..2cd4e14 --- /dev/null +++ b/scales/div_fifth3.scl @@ -0,0 +1,10 @@ +! div_fifth3.scl +! +Divided Fifth #3, From Schlesinger, see Chapter 8, p. 160 + 5 +! + 28/27 + 7/6 + 4/3 + 3/2 + 2/1 diff --git a/scales/div_fifth4.scl b/scales/div_fifth4.scl new file mode 100644 index 0000000..e9abbd1 --- /dev/null +++ b/scales/div_fifth4.scl @@ -0,0 +1,10 @@ +! div_fifth4.scl +! +Divided Fifth #4, From Schlesinger, see Chapter 8, p. 160 + 5 +! + 21/20 + 7/6 + 21/16 + 3/2 + 2/1 diff --git a/scales/div_fifth5.scl b/scales/div_fifth5.scl new file mode 100644 index 0000000..80f7505 --- /dev/null +++ b/scales/div_fifth5.scl @@ -0,0 +1,10 @@ +! div_fifth5.scl +! +Divided Fifth #5, From Schlesinger, see Chapter 8, p. 160 + 5 +! + 11/10 + 11/9 + 11/8 + 11/7 + 2/1 diff --git a/scales/divine9.scl b/scales/divine9.scl new file mode 100644 index 0000000..e120c2e --- /dev/null +++ b/scales/divine9.scl @@ -0,0 +1,17 @@ +! divine9.scl +! +Gert Kramers Divine 9 tuning, 5-limit with one 7-limit interval (2011), 1/1=253.125 Hz + 12 +! + 16/15 + 9/8 + 6/5 + 15625/12288 + 27/20 + 64/45 + 3/2 + 8/5 + 27/16 + 9/5 + 4375/2304 + 2/1 diff --git a/scales/dkring1.scl b/scales/dkring1.scl new file mode 100644 index 0000000..b9e0d8c --- /dev/null +++ b/scales/dkring1.scl @@ -0,0 +1,17 @@ +! dkring1.scl +! +Double-tie circular mirroring of 4:5:6:7 + 12 +! + 21/20 + 7/6 + 6/5 + 49/40 + 5/4 + 7/5 + 3/2 + 42/25 + 12/7 + 7/4 + 9/5 + 2/1 diff --git a/scales/dkring2.scl b/scales/dkring2.scl new file mode 100644 index 0000000..77587bb --- /dev/null +++ b/scales/dkring2.scl @@ -0,0 +1,17 @@ +! dkring2.scl +! +Double-tie circular mirroring of 3:5:7:9 + 12 +! + 21/20 + 7/6 + 63/50 + 9/7 + 27/20 + 7/5 + 3/2 + 14/9 + 49/30 + 5/3 + 9/5 + 2/1 diff --git a/scales/dkring3.scl b/scales/dkring3.scl new file mode 100644 index 0000000..d077ca3 --- /dev/null +++ b/scales/dkring3.scl @@ -0,0 +1,17 @@ +! dkring3.scl +! +Double-tie circular mirroring of 6:7:8:9 + 12 +! + 9/8 + 8/7 + 7/6 + 9/7 + 4/3 + 72/49 + 3/2 + 32/21 + 12/7 + 16/9 + 27/14 + 2/1 diff --git a/scales/dkring4.scl b/scales/dkring4.scl new file mode 100644 index 0000000..36b25fb --- /dev/null +++ b/scales/dkring4.scl @@ -0,0 +1,17 @@ +! dkring4.scl +! +Double-tie circular mirroring of 7:8:9:10 + 12 +! + 10/9 + 9/8 + 8/7 + 5/4 + 9/7 + 45/32 + 10/7 + 81/56 + 45/28 + 25/14 + 9/5 + 2/1 diff --git a/scales/dodeceny.scl b/scales/dodeceny.scl new file mode 100644 index 0000000..1ddcc17 --- /dev/null +++ b/scales/dodeceny.scl @@ -0,0 +1,17 @@ +! dodeceny.scl +! +Degenerate eikosany 3)6 from 1.3.5.9.15.45 tonic 1.3.15 + 12 +! + 135/128 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/domdimpajinjschis.scl b/scales/domdimpajinjschis.scl new file mode 100644 index 0000000..4a4ecab --- /dev/null +++ b/scales/domdimpajinjschis.scl @@ -0,0 +1,18 @@ +! domdimpajinjschis.scl +! +Dominant-diminished-pajara-injera-schism wakalix +! dominant: -7 to 4; diminished: -4, 0, 4; pajara: -2 to 8; injera: -8 to 2; schism: -1 to 10 +12 +! +21/20 +8/7 +6/5 +9/7 +4/3 +7/5 +3/2 +8/5 +12/7 +9/5 +28/15 +2/1 diff --git a/scales/donar46.scl b/scales/donar46.scl new file mode 100644 index 0000000..81a4a7d --- /dev/null +++ b/scales/donar46.scl @@ -0,0 +1,101 @@ +! donar46.scl +Donar[46] hobbit in 3390-tET, commas 4375/4374, 3025/3024 and 4225/4224 +46 +! +26.54867 +48.84956 +75.39823 +106.90265 +133.45133 +160.00000 +182.30088 +208.84956 +235.39823 +257.69912 +284.24779 +315.75221 +342.30088 +364.60177 +391.15044 +417.69912 +444.24779 +466.54867 +493.09735 +524.60177 +551.15044 +573.45133 +600.00000 +626.54867 +648.84956 +675.39823 +706.90265 +733.45133 +760.00000 +782.30088 +808.84956 +835.39823 +857.69912 +884.24779 +915.75221 +942.30088 +964.60177 +991.15044 +1017.69912 +1044.24779 +1066.54867 +1093.09735 +1124.60177 +1151.15044 +1173.45133 +2/1 +! +! !predonar46.scl +! Donar[46] transversal +! 46 +! ! +! 65/64 +! 36/35 +! 448/429 +! 117/110 +! 27/25 +! 385/351 +! 10/9 +! 44/39 +! 55/48 +! 4480/3861 +! 33/28 +! 6/5 +! 1568/1287 +! 100/81 +! 440/351 +! 14/11 +! 84/65 +! 55/42 +! 121/91 +! 65/48 +! 11/8 +! 1792/1287 +! 99/70 +! 1287/896 +! 16/11 +! 65/44 +! 176/117 +! 55/36 +! 121/78 +! 11/7 +! 351/220 +! 81/50 +! 64/39 +! 5/3 +! 56/33 +! 112/65 +! 96/55 +! 484/273 +! 9/5 +! 784/429 +! 50/27 +! 220/117 +! 429/224 +! 35/18 +! 65/33 +! 2/1 diff --git a/scales/dorian_chrom.scl b/scales/dorian_chrom.scl new file mode 100644 index 0000000..823e1f1 --- /dev/null +++ b/scales/dorian_chrom.scl @@ -0,0 +1,29 @@ +! dorian_chrom.scl +! +Dorian Chromatic Tonos + 24 +! + 16/15 + 8/7 + 32/27 + 64/53 + 16/13 + 4/3 + 16/11 + 32/21 + 64/41 + 8/5 + 16/9 + 2/1 + 32/15 + 16/7 + 64/27 + 128/53 + 32/13 + 8/3 + 32/11 + 64/21 + 128/41 + 16/5 + 32/9 + 4/1 diff --git a/scales/dorian_chrom2.scl b/scales/dorian_chrom2.scl new file mode 100644 index 0000000..11f7479 --- /dev/null +++ b/scales/dorian_chrom2.scl @@ -0,0 +1,12 @@ +! dorian_chrom2.scl +! +Schlesinger's Dorian Harmonia in the chromatic genus + 7 +! + 22/21 + 11/10 + 11/8 + 11/7 + 44/27 + 22/13 + 2/1 diff --git a/scales/dorian_chrominv.scl b/scales/dorian_chrominv.scl new file mode 100644 index 0000000..ace4ab6 --- /dev/null +++ b/scales/dorian_chrominv.scl @@ -0,0 +1,12 @@ +! dorian_chrominv.scl +! +A harmonic form of Schlesinger's Chromatic Dorian inverted + 7 +! + 24/23 + 12/11 + 14/11 + 16/11 + 17/11 + 18/11 + 2/1 diff --git a/scales/dorian_diat.scl b/scales/dorian_diat.scl new file mode 100644 index 0000000..3e73a4b --- /dev/null +++ b/scales/dorian_diat.scl @@ -0,0 +1,29 @@ +! dorian_diat.scl +! +Dorian Diatonic Tonos + 24 +! + 16/15 + 8/7 + 16/13 + 32/25 + 4/3 + 32/23 + 16/11 + 8/5 + 32/19 + 16/9 + 32/17 + 2/1 + 32/15 + 16/7 + 32/13 + 64/25 + 8/3 + 64/23 + 32/11 + 16/5 + 64/19 + 32/9 + 64/17 + 4/1 diff --git a/scales/dorian_diat2.scl b/scales/dorian_diat2.scl new file mode 100644 index 0000000..5b772ea --- /dev/null +++ b/scales/dorian_diat2.scl @@ -0,0 +1,13 @@ +! dorian_diat2.scl +! +Schlesinger's Dorian Harmonia, a subharmonic series through 13 from 22 + 8 +! + 11/10 + 11/9 + 11/8 + 22/15 + 11/7 + 22/13 + 11/6 + 2/1 diff --git a/scales/dorian_diat2inv.scl b/scales/dorian_diat2inv.scl new file mode 100644 index 0000000..bd027f2 --- /dev/null +++ b/scales/dorian_diat2inv.scl @@ -0,0 +1,13 @@ +! DORIAN_DIAT2INV.scl +! +Inverted Schlesinger's Dorian Harmonia, a harmonic series from 11 from 22 + 8 +! + 12/11 + 13/11 + 14/11 + 15/11 + 16/11 + 18/11 + 20/11 + 2/1 diff --git a/scales/dorian_diatcon.scl b/scales/dorian_diatcon.scl new file mode 100644 index 0000000..551b964 --- /dev/null +++ b/scales/dorian_diatcon.scl @@ -0,0 +1,12 @@ +! dorian_diatcon.scl +! +A Dorian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 11/10 + 11/9 + 11/8 + 22/15 + 11/7 + 11/6 + 2/1 diff --git a/scales/dorian_diatred11.scl b/scales/dorian_diatred11.scl new file mode 100644 index 0000000..44a86cd --- /dev/null +++ b/scales/dorian_diatred11.scl @@ -0,0 +1,12 @@ +! dorian_diatred11.scl +! +Dorian mode of a diatonic genus with reduplicated 11/10 + 7 +! + 11/10 + 121/100 + 4/3 + 3/2 + 33/20 + 363/200 + 2/1 diff --git a/scales/dorian_enh.scl b/scales/dorian_enh.scl new file mode 100644 index 0000000..3be5739 --- /dev/null +++ b/scales/dorian_enh.scl @@ -0,0 +1,29 @@ +! dorian_enh.scl +! +Dorian Enharmonic Tonos + 24 +! + 16/15 + 8/7 + 64/55 + 128/109 + 32/27 + 4/3 + 16/11 + 64/43 + 128/85 + 32/21 + 16/9 + 2/1 + 32/15 + 16/7 + 128/55 + 256/109 + 64/27 + 8/3 + 32/11 + 128/43 + 256/85 + 64/21 + 32/9 + 4/1 diff --git a/scales/dorian_enh2.scl b/scales/dorian_enh2.scl new file mode 100644 index 0000000..a8f55d1 --- /dev/null +++ b/scales/dorian_enh2.scl @@ -0,0 +1,12 @@ +! dorian_enh2.scl +! +Schlesinger's Dorian Harmonia in the enharmonic genus + 7 +! + 44/43 + 22/21 + 11/8 + 11/7 + 44/27 + 22/13 + 2/1 diff --git a/scales/dorian_enhinv.scl b/scales/dorian_enhinv.scl new file mode 100644 index 0000000..788700e --- /dev/null +++ b/scales/dorian_enhinv.scl @@ -0,0 +1,12 @@ +! DORIAN_ENHinv.scl +! +A harmonic form of Schlesinger's Dorian enharmonic inverted + 7 +! + 48/47 + 24/23 + 14/11 + 16/11 + 3/2 + 17/11 + 2/1 diff --git a/scales/dorian_pent.scl b/scales/dorian_pent.scl new file mode 100644 index 0000000..5dce574 --- /dev/null +++ b/scales/dorian_pent.scl @@ -0,0 +1,12 @@ +! DORIAN_PENT.scl +! +Schlesinger's Dorian Harmonia in the pentachromatic genus + 7 +! + 55/53 + 11/10 + 11/8 + 11/7 + 55/34 + 22/13 + 2/1 diff --git a/scales/dorian_pis.scl b/scales/dorian_pis.scl new file mode 100644 index 0000000..18df3f2 --- /dev/null +++ b/scales/dorian_pis.scl @@ -0,0 +1,20 @@ +! dorian_pis.scl +! +Diatonic Perfect Immutable System in the Dorian Tonos, a non-rep. 16 tone gamut + 15 +! + 8/7 + 16/13 + 4/3 + 16/11 + 8/5 + 16/9 + 2/1 + 32/15 + 16/7 + 32/13 + 8/3 + 32/11 + 16/5 + 32/9 + 4/1 diff --git a/scales/dorian_schl.scl b/scales/dorian_schl.scl new file mode 100644 index 0000000..f1de9fb --- /dev/null +++ b/scales/dorian_schl.scl @@ -0,0 +1,17 @@ +! dorian_schl.scl +! +Schlesinger's Dorian Piano Tuning (Sub 22) + 12 +! + 22/21 + 11/10 + 22/19 + 11/9 + 22/17 + 11/8 + 22/15 + 11/7 + 22/13 + 44/25 + 11/6 + 2/1 diff --git a/scales/dorian_tri1.scl b/scales/dorian_tri1.scl new file mode 100644 index 0000000..08c3398 --- /dev/null +++ b/scales/dorian_tri1.scl @@ -0,0 +1,12 @@ +! dorian_tri1.scl +! +Schlesinger's Dorian Harmonia in the first trichromatic genus + 7 +! + 33/32 + 33/31 + 11/8 + 11/7 + 66/41 + 33/20 + 2/1 diff --git a/scales/dorian_tri2.scl b/scales/dorian_tri2.scl new file mode 100644 index 0000000..758c19a --- /dev/null +++ b/scales/dorian_tri2.scl @@ -0,0 +1,12 @@ +! dorian_tri2.scl +! +Schlesinger's Dorian Harmonia in the second trichromatic genus + 7 +! + 33/32 + 11/10 + 11/8 + 11/7 + 66/41 + 22/13 + 2/1 diff --git a/scales/doty_14.scl b/scales/doty_14.scl new file mode 100644 index 0000000..6fc7f8f --- /dev/null +++ b/scales/doty_14.scl @@ -0,0 +1,19 @@ +! doty_14.scl +! +David Doty and Dale Soules, 7-limit just tuning of Other Musics American gamelan + 14 +! + 15/14 + 9/8 + 7/6 + 5/4 + 9/7 + 4/3 + 7/5 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 27/14 + 2/1 diff --git a/scales/doublediadie.scl b/scales/doublediadie.scl new file mode 100644 index 0000000..3972923 --- /dev/null +++ b/scales/doublediadie.scl @@ -0,0 +1,27 @@ +! doublediadie.scl +13-limit 8 cents tolerance +23 +! +33.74084 +117.02639 +200.31193 +234.05278 +267.01514 +349.85431 +383.90973 +466.95579 +500.29239 +550.41659 +584.09479 +616.67632 +700.35457 +733.69820 +817.37646 +849.95798 +883.63619 +933.76038 +967.09699 +1050.14305 +1084.19847 +1167.03764 +2/1 diff --git a/scales/douwes.scl b/scales/douwes.scl new file mode 100644 index 0000000..70e0608 --- /dev/null +++ b/scales/douwes.scl @@ -0,0 +1,17 @@ +! douwes.scl +! +Claas Douwes recommendation of 24/23 and 15/14 steps for clavichord (1699) + 12 +! + 24/23 + 180/161 + 1350/1127 + 386.24692 + 505.68973 + 579.37039 + 698.81319 + 772.49385 + 1127/675 + 161/90 + 28/15 + 2/1 diff --git a/scales/dow_high.scl b/scales/dow_high.scl new file mode 100644 index 0000000..2ba63e4 --- /dev/null +++ b/scales/dow_high.scl @@ -0,0 +1,19 @@ +! dow_high.scl +! +Highest octave of Dowlands lute tuning, strings 5,6. 1/1=G (1610) + 14 +! + 18/17 + 33/31 + 9/8 + 33/28 + 297/248 + 264/211 + 81/64 + 297/224 + 4/3 + 24/17 + 3/2 + 99/62 + 27/16 + 99/56 diff --git a/scales/dow_lmh.scl b/scales/dow_lmh.scl new file mode 100644 index 0000000..eb801cd --- /dev/null +++ b/scales/dow_lmh.scl @@ -0,0 +1,60 @@ +! dow_lmh.scl +! +All three octaves of Dowland's lute tuning + 55 +! + 33/31 + 9/8 + 33/28 + 264/211 + 4/3 + 24/17 + 44/31 + 3/2 + 11/7 + 99/62 + 352/211 + 27/16 + 99/56 + 16/9 + 32/17 + 176/93 + 2/1 + 44/21 + 66/31 + 1408/633 + 9/4 + 33/14 + 64/27 + 297/124 + 128/51 + 81/32 + 297/112 + 8/3 + 594/211 + 88/31 + 3/1 + 22/7 + 54/17 + 99/31 + 27/8 + 99/28 + 891/248 + 792/211 + 243/64 + 891/224 + 4/1 + 72/17 + 132/31 + 9/2 + 33/7 + 297/62 + 1056/211 + 81/16 + 297/56 + 16/3 + 96/17 + 6/1 + 198/31 + 27/4 + 99/14 diff --git a/scales/dow_low.scl b/scales/dow_low.scl new file mode 100644 index 0000000..b83d87d --- /dev/null +++ b/scales/dow_low.scl @@ -0,0 +1,22 @@ +! dow_low.scl +! +Lowest octave of Dowlands lute tuning, strings 1,2,3. 1/1=G. (1610) + 17 +! + 33/31 + 9/8 + 33/28 + 264/211 + 4/3 + 24/17 + 44/31 + 3/2 + 11/7 + 99/62 + 352/211 + 27/16 + 99/56 + 16/9 + 32/17 + 176/93 + 2/1 diff --git a/scales/dow_middle.scl b/scales/dow_middle.scl new file mode 100644 index 0000000..47bb335 --- /dev/null +++ b/scales/dow_middle.scl @@ -0,0 +1,29 @@ +! dow_middle.scl +! +Middle octave of Dowlands lute tuning, strings 3,4,5. 1/1=G (1610) + 24 +! + 22/21 + 33/31 + 704/633 + 9/8 + 33/28 + 32/27 + 297/248 + 64/51 + 81/64 + 297/224 + 4/3 + 297/211 + 44/31 + 3/2 + 11/7 + 27/17 + 99/62 + 27/16 + 99/56 + 891/496 + 396/211 + 243/128 + 891/448 + 2/1 diff --git a/scales/dowland_12.scl b/scales/dowland_12.scl new file mode 100644 index 0000000..e1ec87d --- /dev/null +++ b/scales/dowland_12.scl @@ -0,0 +1,17 @@ +! dowland_12.scl +! +subset of Dowland's lute tuning, lowest octave + 12 +! + 33/31 + 9/8 + 33/28 + 264/211 + 4/3 + 24/17 + 3/2 + 99/62 + 27/16 + 99/56 + 32/17 + 2/1 diff --git a/scales/druri.scl b/scales/druri.scl new file mode 100644 index 0000000..d137d42 --- /dev/null +++ b/scales/druri.scl @@ -0,0 +1,9 @@ +! druri.scl +! +Scale of druri dana of Siwoli, south Nias, Jaap Kunst + 4 +! + 153.00000 + 386.00000 + 539.00000 + 2/1 diff --git a/scales/dudon_12_of_19-ht.scl b/scales/dudon_12_of_19-ht.scl new file mode 100644 index 0000000..f2bc99e --- /dev/null +++ b/scales/dudon_12_of_19-ht.scl @@ -0,0 +1,19 @@ +! dudon_12_of_19-ht.scl +! +12 of 19-tones harmonic temperament, from 27 to 35 + 12 +! + 187/180 + 67/60 + 6/5 + 56/45 + 241/180 + 25/18 + 269/180 + 14/9 + 5/3 + 161/90 + 28/15 + 2/1 +! black keys end up with a hybrid slendro 108 125 140 161 187 +! Dudon 1987 diff --git a/scales/dudon_19-l_rocky_hwt.scl b/scales/dudon_19-l_rocky_hwt.scl new file mode 100644 index 0000000..1d7a6f0 --- /dev/null +++ b/scales/dudon_19-l_rocky_hwt.scl @@ -0,0 +1,19 @@ +! dudon_19-l_rocky_hwt.scl +! +19-limit well-temperament, C to B achieving eq-b of bluesy DEG-type chords (2005) + 12 +! + 256/243 ! C# + 272/243 ! D + 32/27 ! Eb + 304/243 ! E + 4/3 ! F + 1024/729 ! F# + 364/243 ! G + 128/81 ! G# + 1216/729 ! A + 16/9 ! Bb + 4096/2187 ! B + 2/1 +! three occurrences of Eair eq-b recurrent sequence 2x^3 - 3 = x^2 +! 3C - 2G = 3A - 5C, etc. (and complements) all in synchronous-beating diff --git a/scales/dudon_3-limit_with429.scl b/scales/dudon_3-limit_with429.scl new file mode 100644 index 0000000..1e866be --- /dev/null +++ b/scales/dudon_3-limit_with429.scl @@ -0,0 +1,18 @@ +! dudon_3-limit_with429.scl +! +cycle of 10 pure fourths (4/3) from D ending in 429/256 + 12 +! + 256/243 + 9/8 + 32/27 + 8192/6561 + 4/3 + 1024/729 + 3/2 + 128/81 + 429/256 + 16/9 + 4096/2187 + 2/1 +! 12 out of Dudon24 diff --git a/scales/dudon_a.scl b/scales/dudon_a.scl new file mode 100644 index 0000000..d9dd14b --- /dev/null +++ b/scales/dudon_a.scl @@ -0,0 +1,13 @@ +! dudon_a.scl +! +Dudon Tetrachord A + 7 +! + 59/54 + 11/9 + 4/3 + 3/2 + 59/36 + 11/6 + 2/1 +! From Jacques Dudon, an Islamic or "Mohajira" type diff --git a/scales/dudon_afshari.scl b/scales/dudon_afshari.scl new file mode 100644 index 0000000..6ee894c --- /dev/null +++ b/scales/dudon_afshari.scl @@ -0,0 +1,17 @@ +! dudon_afshari.scl +! +Avaz-e-Afshari -c JI interpretation + 12 +! + 13/12 + 9/8 + 39/32 + 11/9 + 4/3 + 97/72 + 3/2 + 105/64 + 119/72 + 16/9 + 57/32 + 2/1 diff --git a/scales/dudon_aka.scl b/scales/dudon_aka.scl new file mode 100644 index 0000000..771ae09 --- /dev/null +++ b/scales/dudon_aka.scl @@ -0,0 +1,20 @@ +! dudon_aka.scl +! +Cylf-scale (Baka sequence- pentatonic Slendro plus pure fifths) + 12 +! + 112/111 + 212/185 + 128/111 + 244/185 + 736/555 + 4/3 + 56/37 + 846/555 + 64/37 + 976/555 + 368/185 + 2/1 +! Slendra and Baka -c recurrent sequences, x^5 = x^4 + 1/4 and 6x^2 - 6x = 1 +! original scale : 106 122 140 160 185 +! Fleurs de Lumiere, Dudon 1990 diff --git a/scales/dudon_aksand.scl b/scales/dudon_aksand.scl new file mode 100644 index 0000000..3fafec0 --- /dev/null +++ b/scales/dudon_aksand.scl @@ -0,0 +1,17 @@ +! dudon_aksand.scl +! +Fractal Aksaka - c sequence (x^2 - x = 1/4), 16:20:24:29:35, plus 163 + 12 +! + 2/1 + 29/24 + 29/12 + 4/3 + 8/3 + 35/24 + 35/12 + 5/3 + 10/3 + 163/96 + 163/48 + 2/1 diff --git a/scales/dudon_aluna.scl b/scales/dudon_aluna.scl new file mode 100644 index 0000000..c52427b --- /dev/null +++ b/scales/dudon_aluna.scl @@ -0,0 +1,17 @@ +! dudon_aluna.scl +! +Chromatic scale based on F25, with turkish 31/25 segahs and many different thirds + 12 +! + 107/100 + 28/25 + 239/200 + 31/25 + 267/200 + 71/50 + 3/2 + 8/5 + 167/100 + 89/50 + 93/50 + 2/1 diff --git a/scales/dudon_amlak.scl b/scales/dudon_amlak.scl new file mode 100644 index 0000000..7048879 --- /dev/null +++ b/scales/dudon_amlak.scl @@ -0,0 +1,18 @@ +! dudon_amlak.scl +! +Amlak recurrent sequence (x^2 = x + 1/3), as a matrix for Ethiopian scales + 12 +! + 1/1 + 45/38 + 19/16 + 91/76 + 107/76 + 27/19 + 455/304 + 3/2 + 30/19 + 575/304 + 36/19 + 2/1 +! Dudon 1989 diff --git a/scales/dudon_appalachian.scl b/scales/dudon_appalachian.scl new file mode 100644 index 0000000..291f1f0 --- /dev/null +++ b/scales/dudon_appalachian.scl @@ -0,0 +1,20 @@ +! dudon_appalachian.scl +! +Synchronous beating quasi-1/4 syntonic comma meantone temperament + 12 +! + 4025/3852 + 3230/2889 + 128/107 + 5/4 + 1288/963 + 8075/5778 + 160/107 + 25/16 + 1610/963 + 5168/2889 + 200/107 + 2/1 +! recurrent series : 864 1292 1932 2889 4320... +! Mezzo fractal sequence x^3 = (3/4)x^2 + 5/3 (x = 1.495352392466 or 696.5826088 c.) +! Dudon 2006 diff --git a/scales/dudon_are-are_tapping.scl b/scales/dudon_are-are_tapping.scl new file mode 100644 index 0000000..ac007d0 --- /dev/null +++ b/scales/dudon_are-are_tapping.scl @@ -0,0 +1,17 @@ +! dudon_are-are_tapping.scl +! +'Are'are tapping bamboo tubes as collected by Hugo Zemp in 1977, JI interpretation + 12 +! + 2/1 + 51/44 + 51/22 + 29/22 + 29/11 + 65/44 + 65/22 + 13/8 + 13/4 + 20/11 + 40/11 + 2/1 diff --git a/scales/dudon_are-are_women1.scl b/scales/dudon_are-are_women1.scl new file mode 100644 index 0000000..6069ef3 --- /dev/null +++ b/scales/dudon_are-are_women1.scl @@ -0,0 +1,17 @@ +! dudon_are-are_women1.scl +! +'Are'are women songs as collected by Hugo Zemp in 1977, JI interpretation (2009) + 12 +! + 29/26 + 107/96 + 79/64 + 119/96 + 4/3 + 43/32 + 287/192 + 3/2 + 5/3 + 355/192 + 89/48 + 2/1 diff --git a/scales/dudon_are-are_women2.scl b/scales/dudon_are-are_women2.scl new file mode 100644 index 0000000..777eb90 --- /dev/null +++ b/scales/dudon_are-are_women2.scl @@ -0,0 +1,17 @@ +! dudon_are-are_women2.scl +! +'Are'are women songs as collected by Hugo Zemp in 1977, JI interpretation (Dudon 2009) + 12 +! + 10/9 + 161/144 + 89/72 + 179/144 + 4/3 + 385/288 + 3/2 + 119/72 + 5/3 + 89/48 + 67/36 + 2/1 diff --git a/scales/dudon_armadillo.scl b/scales/dudon_armadillo.scl new file mode 100644 index 0000000..098aee8 --- /dev/null +++ b/scales/dudon_armadillo.scl @@ -0,0 +1,22 @@ +! dudon_armadillo.scl +! +Triple equal-beating sequence from C to B, optimal major chords on white keys + 12 +! + 8361/7936 + 555/496 + 75249/63488 + 621/496 + 84655/63488 + 2787/1984 + 371/248 + 25083/15872 + 3321/1984 + 112873/63488 + 929/496 + 2/1 +! 5 skisni fifths C-G-D-A-E-B, then 3/2 or quasi pure fifths from B to C +! 2 x^4 = x^3 + 4 +! Skisni triple equal-beating and -c quasi-1/5 Pyth.c meantone sequence, Dudon 2006 : +! 4E - 5C = 3G - 2C = (3/8)E - (5/4)G, 4B - 5G = 6D - 2G = (3/8)B - (5/2)D +! proportional fifths beatings from C : 8 12 18 27 40 diff --git a/scales/dudon_atlantis.scl b/scales/dudon_atlantis.scl new file mode 100644 index 0000000..e815a56 --- /dev/null +++ b/scales/dudon_atlantis.scl @@ -0,0 +1,17 @@ +! dudon_atlantis.scl +! +Triple equal-beating of minor triads + septimal sevenths meantone sequence + 12 +! + 327/314 + 1403/1256 + 188/157 + 12547/10048 + 210/157 + 3497/2512 + 469/314 + 1955/1256 + 4191/2512 + 281/157 + 37399/20096 + 2/1 diff --git a/scales/dudon_aulos.scl b/scales/dudon_aulos.scl new file mode 100644 index 0000000..3f25760 --- /dev/null +++ b/scales/dudon_aulos.scl @@ -0,0 +1,19 @@ +! dudon_aulos.scl +! +Double clarinet -c version of Ptolemy's Diatonon Homalon + 12 +! + 12/11 + 35/32 + 6/5 + 53/44 + 4/3 + 1/1 + 3/2 + 1/1 + 18/11 + 9/5 + 317/176 + 2/1 +! additional tones have their differentials coherent with a drone in C +! Dudon 2009 diff --git a/scales/dudon_b.scl b/scales/dudon_b.scl new file mode 100644 index 0000000..149ef81 --- /dev/null +++ b/scales/dudon_b.scl @@ -0,0 +1,13 @@ +! dudon_b.scl +! +Dudon Tetrachord B + 7 +! + 13/12 + 59/48 + 4/3 + 3/2 + 13/8 + 59/32 + 2/1 +! From Jacques Dudon, another Islamic or Mohajira tetrachord. diff --git a/scales/dudon_baka.scl b/scales/dudon_baka.scl new file mode 100644 index 0000000..e6bedfa --- /dev/null +++ b/scales/dudon_baka.scl @@ -0,0 +1,19 @@ +! dudon_baka.scl +! +Baka typical semifourth pentatonic, can also be accepted as a circular Slendro + 12 +! + 8/7 + 668/581 + 768/581 + 768/581 + 110/83 + 880/581 + 880/581 + 144/83 + 144/83 + 1152/581 + 1160/581 + 2/1 +! Slendra and Baka -c recurrent sequences, x^5 = x^4 + 1/4 and 6x^2 - 6x = 1 +! Fleurs de Lumiere and BB Gamelan, Dudon 1990 diff --git a/scales/dudon_bala_ribbon.scl b/scales/dudon_bala_ribbon.scl new file mode 100644 index 0000000..459bc08 --- /dev/null +++ b/scales/dudon_bala_ribbon.scl @@ -0,0 +1,22 @@ +! dudon_bala_ribbon.scl +! +Parizekmic scale based on a double Bala sequence + 12 +! + 25/24 + 9/8 + 6/5 + 13/10 + 4/3 + 83/60 + 3/2 + 8/5 + 26/15 + 9/5 + 39/20 + 2/1 +! Interleaved Bala -c recurrent sequences, x^8 - 2 = x = 1.1544230572469 or 248.6064241458 cents (5-29-251 notes MOS) +! first sequence [117 135 156 180 208 240 (277) 320 369 ... +! second sequence transposed by 4 - x^3 (~32/13) on black keys : +! [108 125 144 166 192... (125 = C#) +! Dudon 2011 diff --git a/scales/dudon_bala_ribbon19.scl b/scales/dudon_bala_ribbon19.scl new file mode 100644 index 0000000..70776ff --- /dev/null +++ b/scales/dudon_bala_ribbon19.scl @@ -0,0 +1,29 @@ +! dudon_bala_ribbon19.scl +! +Parizekmic scale based on a double Bala sequence + 19 +! + 203/192 + 13/12 + 9/8 + 443/384 + 39/32 + 5/4 + 125/96 + 4/3 + 45/32 + 277/192 + 3/2 + 203/128 + 13/8 + 5/3 + 83/48 + 117/64 + 15/8 + 125/64 + 2/1 +! Interleaved Bala -c recurrent sequences, x^8 - 2 = x = 1.1544230572469 or 248.6064241458 cents (5-29-251 notes MOS) +! first sequence [609 702 812 936 1080 1248 1440 1664 1920 2216 2560] +! second sequence transposed by 1 - (x^3)/4 (~32/13) : +! [375 432 500 576 664 768 886 1024] +! Dudon 2011, after Petr Parizek TL 77917 Jul 8, 2008 diff --git a/scales/dudon_bala_ribbon24.scl b/scales/dudon_bala_ribbon24.scl new file mode 100644 index 0000000..2dc9bdf --- /dev/null +++ b/scales/dudon_bala_ribbon24.scl @@ -0,0 +1,34 @@ +! dudon_bala_ribbon24.scl +! +Parizekmic scale based on a double Bala sequence + 24 +! + 197/192 + 203/192 + 13/12 + 9/8 + 443/384 + 227/192 + 39/32 + 5/4 + 125/96 + 4/3 + 131/96 + 45/32 + 277/192 + 3/2 + 197/128 + 203/128 + 13/8 + 5/3 + 83/48 + 341/192 + 117/64 + 15/8 + 125/64 + 2/1 +! Interleaved Bala -c recurrent sequences, x^8 - 2 = x = 1.1544230572469 or 248.6064241458 cents (5-29-251 notes MOS) +! first sequence [609 702 812 936 1080 1248 1440 1664 1920 2216 2560] +! second sequence transposed by 1 - (x^3)/4 (~32/13) : +! [375 432 500 576 664 768 886 1024 1182 1364 1576 1816 2096] +! Dudon 2011, after Petr Parizek TL 77917 Jul 8, 2008 diff --git a/scales/dudon_balafon_semifo.scl b/scales/dudon_balafon_semifo.scl new file mode 100644 index 0000000..3f4ba11 --- /dev/null +++ b/scales/dudon_balafon_semifo.scl @@ -0,0 +1,18 @@ +! dudon_balafon_semifo.scl +! +Burkinabe typical semifourth pentatonic balafon feast scale + 12 +! + 135/104 + 26/23 + 104/69 + 207/160 + 13/10 + 45/26 + 104/69 + 2/1 + 69/40 + 26/15 + 52/23 + 2/1 +! harmonic temperament out of primes 3, 5, 13, 23, Dudon 1987 diff --git a/scales/dudon_balasept-above.scl b/scales/dudon_balasept-above.scl new file mode 100644 index 0000000..d17b8dc --- /dev/null +++ b/scales/dudon_balasept-above.scl @@ -0,0 +1,22 @@ +! dudon_balasept-above.scl +! +5.7.13.15 tuning based on a single Balasept sequence + 12 +! + 517/480 + 277/240 + 597/480 + 13/10 + 4/3 + 689/480 + 3/2 + 53/32 + 26/15 + 28/15 + 39/20 + 2/1 +! Balasept -c recurrent sequence, x^15 = 4x + 4 +! x = 1,15440763765962 or 248.58329996 cents (5 then 29 notes MOS) +! first segment [117 (135) 156 180 208 240 277 320 ... +! second and higher segment on black keys : +! [448 517 597 689 795 ... (517 = C#) diff --git a/scales/dudon_balasept-under.scl b/scales/dudon_balasept-under.scl new file mode 100644 index 0000000..d48e435 --- /dev/null +++ b/scales/dudon_balasept-under.scl @@ -0,0 +1,22 @@ +! dudon_balasept-under.scl +! +5.7.13.15.21 tuning based on a single Balasept sequence + 12 +! + 21/20 + 277/240 + 97/80 + 13/10 + 4/3 + 7/5 + 3/2 + 97/60 + 26/15 + 28/15 + 39/20 + 2/1 +! Balasept -c recurrent sequence, x^15 = 4x + 4 +! x = 1,15440763765962 or 248.58329996 cents (5 then 29 notes MOS) +! first segment [117 (135) 156 180 208 240 277 320 ... +! second and higher segment on black keys : +! [252 291 336 388 448 ... (252 = C#) diff --git a/scales/dudon_bali-balaeb_14.scl b/scales/dudon_bali-balaeb_14.scl new file mode 100644 index 0000000..a3ba31f --- /dev/null +++ b/scales/dudon_bali-balaeb_14.scl @@ -0,0 +1,22 @@ +! dudon_bali-balaeb_14.scl +! +Bali-Bala[14] (676/675 tempering), equal-beating version +14 +! +43.261584366 +205.3907325072 +248.6523168732 +291.9139012392 +454.0430493804 +497.3046337464 +659.4337818876 +702.6953662536 +745.9569506196 +908.0860987608 +951.3476831268 +994.6092674928 +1156.738415634 +2/1 +! Eq-Bala triple equal-beating recurrent sequence, 4^3 = x + 5 +! triple equal-beating of 15/13, 20/13, and the 4/3 in between +! Dudon 2010 diff --git a/scales/dudon_bambara.scl b/scales/dudon_bambara.scl new file mode 100644 index 0000000..64b9ec6 --- /dev/null +++ b/scales/dudon_bambara.scl @@ -0,0 +1,20 @@ +! dudon_bambara.scl +! +Typical pentatonic balafon ceremonial tuning from Mali or Burkina Faso + 12 +! + 1/1 + 1448/1273 + 1448/1273 + 1688/1273 + 1688/1273 + 1688/1273 + 1920/1273 + 1920/1273 + 2184/1273 + 2184/1273 + 2/1 + 2/1 +! Mounos -c sequence x^3 - 2 = x/4, middle A-M-N slendro, Dudon 2004 +! differential coherence of minor thirds : F - D = G/8, ^C - A = D/4 +! extended fifths (711,4963 c.) and tones (roughly 256/225 or 223 c.) diff --git a/scales/dudon_bayati_in_d.scl b/scales/dudon_bayati_in_d.scl new file mode 100644 index 0000000..8ff7d7d --- /dev/null +++ b/scales/dudon_bayati_in_d.scl @@ -0,0 +1,19 @@ +! dudon_bayati_in_d.scl +! +Bayati (or Husayni) maqam in D + 12 +! + 256/255 + 96/85 + 104/85 + 21/17 + 114/85 + 23/17 + 128/85 + 513/340 + 144/85 + 156/85 + 469/255 + 2/1 +! as modeled by Dudon, 2001 +! starts as Bayati usual pitch, in D diff --git a/scales/dudon_baziguzuk.scl b/scales/dudon_baziguzuk.scl new file mode 100644 index 0000000..46e7fa3 --- /dev/null +++ b/scales/dudon_baziguzuk.scl @@ -0,0 +1,18 @@ +! dudon_baziguzuk.scl +! +8 9 11 12 13 defective Mohajira (Dudon 1985) + 12 +! +1/1 +13/12 +4/3 +13/12 +4/3 +11/6 +3/2 +11/6 +4/3 +11/6 +3/2 +2/1 +! quartertones pentatonic scale with very low numbers diff --git a/scales/dudon_bhairav.scl b/scales/dudon_bhairav.scl new file mode 100644 index 0000000..fbd0b93 --- /dev/null +++ b/scales/dudon_bhairav.scl @@ -0,0 +1,17 @@ +! dudon_bhairav.scl +! +Bhairav thaat raga, based on 17th harmonic + 12 +! + 17/16 + 16/15 + 5/4 + 301/240 + 4/3 + 1/1 + 3/2 + 51/32 + 307/192 + 179/96 + 15/8 + 2/1 diff --git a/scales/dudon_bhairavi.scl b/scales/dudon_bhairavi.scl new file mode 100644 index 0000000..ddc2eee --- /dev/null +++ b/scales/dudon_bhairavi.scl @@ -0,0 +1,17 @@ +! dudon_bhairavi.scl +! +Bhairavi thaat raga, by Dudon (2004) + 12 +! + 17/16 + 19/17 + 19/16 + 304/255 + 4/3 + 17/12 + 3/2 + 19/12 + 1216/765 + 57/32 + 152/85 + 2/1 diff --git a/scales/dudon_bhatiyar.scl b/scales/dudon_bhatiyar.scl new file mode 100644 index 0000000..f172b3c --- /dev/null +++ b/scales/dudon_bhatiyar.scl @@ -0,0 +1,17 @@ +! dudon_bhatiyar.scl +! +Early morning North indian raga, a modelisation based on Amlak 57 + 12 +! + 20/19 + 271/256 + 5/4 + 24/19 + 4/3 + 80/57 + 3/2 + 57/34 + 32/19 + 107/57 + 36/19 + 2/1 diff --git a/scales/dudon_bhavapriya.scl b/scales/dudon_bhavapriya.scl new file mode 100644 index 0000000..3588194 --- /dev/null +++ b/scales/dudon_bhavapriya.scl @@ -0,0 +1,19 @@ +! dudon_bhavapriya.scl +! +Bhavapriya (South indian, prati madhyama mela # 44) or Bhavani (North indian) + 12 +! + 17/16 + 273/256 + 19/16 + 307/256 + 45/32 + 361/256 + 3/2 + 51/32 + 205/128 + 16/9 + 57/32 + 2/1 +! also Ragas Vagadhisvari (# 34) from Gb and Naganandini (#30) from Ab +! Modeled by Dudon 2004 diff --git a/scales/dudon_brazil.scl b/scales/dudon_brazil.scl new file mode 100644 index 0000000..c14f1fc --- /dev/null +++ b/scales/dudon_brazil.scl @@ -0,0 +1,23 @@ +! dudon_brazil.scl +! +Triple equal-beating 1/5 syntonic comma meantone, limited to 8 tones +! with extra consonant thirds (505, 675), fifth (405) & subtonic (10155) +! (suggested chords : Amin7-9, Amin6-9, Dmin7-9, Em7-9, Bdim7th) + 12 +! + 405/404 + 1809/1616 + 5/4 + 64801/51712 + 135/101 + 2321289/1654784 + 1209/808 + 10155/6464 + 10827/6464 + 6045/3232 + 387843/206848 + 2/1 +! +! Deolia sequence x^4 = (3/4)x^3 + 5/2, triple eq-b of minor chords, Dudon 2006 +! 8E - 10C = 6A - 8E = 3A - 5C (etc.) +! with improved -c dim7th diff --git a/scales/dudon_burma.scl b/scales/dudon_burma.scl new file mode 100644 index 0000000..0adf259 --- /dev/null +++ b/scales/dudon_burma.scl @@ -0,0 +1,19 @@ +! dudon_burma.scl +! +Burmese typical diatonic scale, compatible with modes Pule, Thanyu, Autpyin + 12 +! + 1216/1161 + 48/43 + 464/387 + 1448/1161 + 518/387 + 536/387 + 1735/1161 + 1792/1161 + 1936/1161 + 2080/1161 + 80/43 + 2/1 +! Cascade recurrent sequence, 32x^2 - 64 = x^5 (average fifth of 695.31005796 c.) +! E = 8(G - F) etc., differential coherence of 2nds, Dudon 2004 diff --git a/scales/dudon_buzurg.scl b/scales/dudon_buzurg.scl new file mode 100644 index 0000000..01c11b6 --- /dev/null +++ b/scales/dudon_buzurg.scl @@ -0,0 +1,17 @@ +! dudon_buzurg.scl +! +Decaphonic system inspired by medieval Persian mode Buzurg (Safi al-Din), Dudon 1997 + 12 +! + 14/13 + 13/12 + 8/7 + 26/21 + 55/42 + 39/28 + 3/2 + 21/13 + 13/8 + 12/7 + 13/7 + 2/1 diff --git a/scales/dudon_byzantine.scl b/scales/dudon_byzantine.scl new file mode 100644 index 0000000..fe76390 --- /dev/null +++ b/scales/dudon_byzantine.scl @@ -0,0 +1,18 @@ +! dudon_byzantine.scl +! +Byzantine scale, JI interpretation and -c extrapolation of turkish Hijaz in C + 12 +! + 69/64 + 13/12 + 239/192 + 5/4 + 85/64 + 4/3 + 3/2 + 155/96 + 13/8 + 85/48 + 16/9 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_c1.scl b/scales/dudon_c1.scl new file mode 100644 index 0000000..a9b3f75 --- /dev/null +++ b/scales/dudon_c1.scl @@ -0,0 +1,12 @@ +! dudon_c1.scl +! +Differentially coherent scale in interval class 1 + 7 +! + 19/16 + 5/4 + 81/64 + 3/2 + 101/64 + 15/8 + 2/1 diff --git a/scales/dudon_c12.scl b/scales/dudon_c12.scl new file mode 100644 index 0000000..20aa01b --- /dev/null +++ b/scales/dudon_c12.scl @@ -0,0 +1,12 @@ +! dudon_c12.scl +! +Differentially coherent scale in interval class 1 and 2 + 7 +! + 37/32 + 5/4 + 21/16 + 3/2 + 13/8 + 29/16 + 2/1 diff --git a/scales/dudon_chandrakaus.scl b/scales/dudon_chandrakaus.scl new file mode 100644 index 0000000..89b2657 --- /dev/null +++ b/scales/dudon_chandrakaus.scl @@ -0,0 +1,21 @@ +! dudon_chandrakaus.scl +! +Chandrakaus from Bb on black keys plus other version from D on white keys +12 +! + 1/1 + 19/18 + 10/9 + 91/72 + 91/72 + 95/72 + 101/72 + 113/72 + 19/12 + 5/3 + 5/3 + 2/1 +! Chandrak -c recurrent sequence 5x - x^2 = 1, Dudon 2003 +! Any minor third of a Chandrak sequence, ex.115/96 in 5:24:115... generates a +! -c Chandrakaus pentatonic scale out of 4, x, 8(x-4) -1, 8(x-4), 2(x-1) +! Dudon 2003 diff --git a/scales/dudon_chiffonie.scl b/scales/dudon_chiffonie.scl new file mode 100644 index 0000000..7ea4078 --- /dev/null +++ b/scales/dudon_chiffonie.scl @@ -0,0 +1,18 @@ +! dudon_chiffonie.scl +! +Hurdy-Gurdy variation on fractal Gazelle (Rebab tuning) + 12 +! + 1/1 + 161/144 + 11/9 + 5/4 + 43/32 + 65/48 + 3/2 + 865/576 + 5/3 + 131/72 + 29/16 + 2/1 +! with 45 (end of series) and 9 instead of the black sheep diff --git a/scales/dudon_chromatic_subh.scl b/scales/dudon_chromatic_subh.scl new file mode 100644 index 0000000..7b1dda8 --- /dev/null +++ b/scales/dudon_chromatic_subh.scl @@ -0,0 +1,18 @@ +! dudon_chromatic_subh.scl +! +Chromatic subharmonic scale using smallest possible numbers + 12 +! + 16/15 + 17/15 + 6/5 + 19/15 + 4/3 + 43/30 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 +! Dudon 1984 diff --git a/scales/dudon_coherent_shrutis.scl b/scales/dudon_coherent_shrutis.scl new file mode 100644 index 0000000..42240fe --- /dev/null +++ b/scales/dudon_coherent_shrutis.scl @@ -0,0 +1,19 @@ +! dudon_coherent_shrutis.scl +! +12 of the 22 shrutis (cycle of fifths from A to D), differentially coherent with C or 2C + 12 +! + 19/18 + 9/8 + 19/16 + 5/4 + 4/3 + 45/32 + 3/2 + 19/12 + 5/3 + 16/9 + 15/8 + 2/1 +! allow coherent rendition of many ragas from diatonic families +! Dudon 1996 diff --git a/scales/dudon_cometslendro1.scl b/scales/dudon_cometslendro1.scl new file mode 100644 index 0000000..e300b79 --- /dev/null +++ b/scales/dudon_cometslendro1.scl @@ -0,0 +1,20 @@ +! dudon_cometslendro1.scl +! +Five septimal tone comets (quasi auto-coherent intervals) in one octave + 12 +! + 280/279 + 320/279 + 427/372 + 322/279 + 491/372 + 370/279 + 47/31 + 424/279 + 323/186 + 485/279 + 488/279 + 2/1 +! +! -c based on 280/279 (279 - 244 = 35) +! difference tones : 106 122 140 160-161 185 diff --git a/scales/dudon_cometslendro2.scl b/scales/dudon_cometslendro2.scl new file mode 100644 index 0000000..1efca40 --- /dev/null +++ b/scales/dudon_cometslendro2.scl @@ -0,0 +1,20 @@ +! dudon_cometslendro2.scl +! +Five septimal tone comets (quasi auto-coherent intervals) in one octave + 12 +! + 4117/3600 + 517/450 + 473/360 + 95/72 + 33/25 + 679/450 + 10913/7200 + 26/15 + 1567/900 + 448/225 + 448/225 + 2/1 +! +! -c based on 225/224 (1792 - 1567 = 225, maximally 5-edo) +! difference tones : 900 1034 1188 1360-1364 1567 diff --git a/scales/dudon_comptine.scl b/scales/dudon_comptine.scl new file mode 100644 index 0000000..c67975f --- /dev/null +++ b/scales/dudon_comptine.scl @@ -0,0 +1,21 @@ +! dudon_comptine.scl +! +1/4 pyth. comma meantone sequence between C and E, completed by 8 pure fifths + 12 +! + 256/243 + 21995/19683 + 32/27 + 8192/6561 + 4/3 + 1024/729 + 9808/6561 + 128/81 + 10960/6561 + 16/9 + 4096/2187 + 2/1 +! Quasi well-temperament (except for C:E a schisma below 5/4) +! Comptine recurrent sequence x^3 = (3/5)x^2 + 2, x = 1.494929263, Dudon 2006 +! Equal-beating properties : 3A - 5C = 3D - 2A, 6E - 5G = 4B - 5G = 3A - 4E +! (eq-b Werckmeister III is acheived by raising E to 2740/2187 and B to 1370/729) diff --git a/scales/dudon_comptine_h3.scl b/scales/dudon_comptine_h3.scl new file mode 100644 index 0000000..91cf6e1 --- /dev/null +++ b/scales/dudon_comptine_h3.scl @@ -0,0 +1,21 @@ +! dudon_comptine_h3.scl +! +1/4 pyth. comma meantone sequence between G and B, completed by 8 pure fifths + 12 +! + 2225/2112 + 592/528 + 20025/16896 + 1323/1056 + 4/3 + 29667/21120 + 3/2 + 6675/4224 + 885/528 + 60075/33792 + 9889/5280 + 2/1 +! Quasi well-temperament (except for G : B a schisma below 5/4) +! C : G pure facilitates the tuning of open-tuning instruments. +! Comptine recurrent sequence x^3 = (3/5)x^2 + 2, x = 1.494929263, Dudon 2006 +! Equal-beating properties : 6E - 5G = 3A - 4E, 6B - 10D = 8F# - 10D = 6E - 4B diff --git a/scales/dudon_country_blues.scl b/scales/dudon_country_blues.scl new file mode 100644 index 0000000..6ae44d0 --- /dev/null +++ b/scales/dudon_country_blues.scl @@ -0,0 +1,19 @@ +! dudon_country_blues.scl +! +Differentially-coherent 12 tones country blues scale + 12 +! + 101/96 + 9/8 + 29/24 + 5/4 + 4/3 + 67/48 + 3/2 + 19/12 + 5/3 + 43/24 + 15/8 + 2/1 +! 20 - 15 = 29 - 24 = 32 - 27 = 45 - 40 = 48 - 43 = 72 - 67 = 5, etc. +! Dudon 2001 diff --git a/scales/dudon_countrysongs.scl b/scales/dudon_countrysongs.scl new file mode 100644 index 0000000..c0ca2b9 --- /dev/null +++ b/scales/dudon_countrysongs.scl @@ -0,0 +1,19 @@ +! dudon_countrysongs.scl +! +CDEG chords and all transpositions equal-beating meantone sequence + 12 +! + 7413/7072 + 495/442 + 264/221 + 4429/3536 + 591/442 + 9925/7072 + 1323/884 + 11097/7072 + 2961/1768 + 395/221 + 6633/3536 + 2/1 +! Hummy recurrent sequence x^4 - 5 = x(3 - 2x), Dudon 2006 +! 4E - 5C = 6G - 8D etc., in all possible fifths transpositions from Eb diff --git a/scales/dudon_crying_commas.scl b/scales/dudon_crying_commas.scl new file mode 100644 index 0000000..7679680 --- /dev/null +++ b/scales/dudon_crying_commas.scl @@ -0,0 +1,18 @@ +! dudon_crying_commas.scl +! +Pentatonic differentiallly-coherent scale with crying commas +! Dudon 2007 + 12 +! + 9/8 + 217/192 + 437/384 + 55/48 + 4/3 + 3/2 + 3/2 + 5/3 + 323/192 + 163/96 + 55/32 + 2/1 diff --git a/scales/dudon_darbari.scl b/scales/dudon_darbari.scl new file mode 100644 index 0000000..26d0bfa --- /dev/null +++ b/scales/dudon_darbari.scl @@ -0,0 +1,19 @@ +! dudon_darbari.scl +! +Darbari Kanada (midnight raga) + 12 +! + 1/1 + 9/8 + 19/16 + 115/96 + 4/3 + 9/8 + 3/2 + 19/12 + 115/72 + 57/32 + 115/64 + 2/1 +! gamakas suggested here with 115/114 commas +! (JI interpretation by J.Dudon) diff --git a/scales/dudon_diat.scl b/scales/dudon_diat.scl new file mode 100644 index 0000000..3cd5cf9 --- /dev/null +++ b/scales/dudon_diat.scl @@ -0,0 +1,13 @@ +! dudon_diat.scl +! +Dudon Neutral Diatonic + 7 +! + 9/8 + 27/22 + 59/44 + 3/2 + 18/11 + 81/44 + 2/1 +! Obtained by taking mediants of each term of the major and minor modes diff --git a/scales/dudon_diatess.scl b/scales/dudon_diatess.scl new file mode 100644 index 0000000..a61e88e --- /dev/null +++ b/scales/dudon_diatess.scl @@ -0,0 +1,19 @@ +! dudon_diatess.scl +! +Sequence of 11 Diatess fifths from Eb (75) + 12 +! + 16549/15984 + 1114/999 + 400/333 + 4969/3996 + 446/333 + 1385/999 + 1492/999 + 8237/5328 + 1109/666 + 1792/999 + 1855/999 + 2/1 +! All relevant minor thirds (9) are differentially-coherent (4x - x^4 = 1) +! Diatess recurrent sequence, x^4 = 4x - 1, Dudon 1992 diff --git a/scales/dudon_didymus.scl b/scales/dudon_didymus.scl new file mode 100644 index 0000000..e5df6c4 --- /dev/null +++ b/scales/dudon_didymus.scl @@ -0,0 +1,18 @@ +! dudon_didymus.scl +! +Greek-genre scale rich in commas + 12 +! + 21/20 + 9/8 + 6/5 + 56/45 + 7/5 + 45/32 + 3/2 + 8/5 + 5/3 + 9/5 + 28/15 + 2/1 +! Dudon 2005 diff --git a/scales/dudon_egyptian_rast.scl b/scales/dudon_egyptian_rast.scl new file mode 100644 index 0000000..8e6dacf --- /dev/null +++ b/scales/dudon_egyptian_rast.scl @@ -0,0 +1,18 @@ +! dudon_egyptian_rast.scl +! +Egyptian style Rast -c modelisation + 12 +! + 107/96 + 9/8 + 11/9 + 59/48 + 4/3 + 1/1 + 3/2 + 5/3 + 121/72 + 11/6 + 133/72 + 2/1 +! Dudon 1990 diff --git a/scales/dudon_evan_thai.scl b/scales/dudon_evan_thai.scl new file mode 100644 index 0000000..cdd2d72 --- /dev/null +++ b/scales/dudon_evan_thai.scl @@ -0,0 +1,20 @@ +! dudon_evan_thai.scl +Evan differentially-coherent double Thai heptaphone + 12 +! + 14107/14080 + 243/220 + 6235/5632 + 537/440 + 74/55 + 2373/1760 + 327/220 + 5243/3520 + 289/176 + 23171/14080 + 3193/1760 + 2/1 +! Evan recurrent sequence 2x^5 = 16 - x +! (592 -537 = 55 etc.) x = 1.4864447215647 +! the black keys follow a second spiral cycle x^7 / 16, or 3.67 c. higher +! Dudon 2009 diff --git a/scales/dudon_flamenca.scl b/scales/dudon_flamenca.scl new file mode 100644 index 0000000..53ecf83 --- /dev/null +++ b/scales/dudon_flamenca.scl @@ -0,0 +1,17 @@ +! dudon_flamenca.scl +! +Flamenco chromatic scale around the 17th harmonic, in A (= guitar), Dudon 2005 + 12 +! + 160/153 + 512/459 + 32/27 + 64/51 + 4/3 + 1216/867 + 76/51 + 80/51 + 256/153 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/dudon_fong.scl b/scales/dudon_fong.scl new file mode 100644 index 0000000..7c15dd2 --- /dev/null +++ b/scales/dudon_fong.scl @@ -0,0 +1,17 @@ +! dudon_fong.scl +! +Differentially-coherent Thai scale, with double seventh note + 12 +! + 97/88 + 97/88 + 107/88 + 107/88 + 59/44 + 65/44 + 1041/704 + 287/176 + 18/11 + 633/352 + 639/352 + 2/1 diff --git a/scales/dudon_gayakapriya.scl b/scales/dudon_gayakapriya.scl new file mode 100644 index 0000000..d882af1 --- /dev/null +++ b/scales/dudon_gayakapriya.scl @@ -0,0 +1,17 @@ +! dudon_gayakapriya.scl +! +South indian raga with Ethiopian flavors, interpreted through a 19-limit Amlak sequence + 12 +! + 1/1 + 9/8 + 19/16 + 115/96 + 5/4 + 3/2 + 3/2 + 19/12 + 51/32 + 15/8 + 361/192 + 2/1 diff --git a/scales/dudon_gnawa-pelog.scl b/scales/dudon_gnawa-pelog.scl new file mode 100644 index 0000000..1aaaf89 --- /dev/null +++ b/scales/dudon_gnawa-pelog.scl @@ -0,0 +1,19 @@ +! dudon_gnawa-pelog.scl +! +Differentially-coherent model of a Gnawa scale, with Pelog variations + 12 +! + 141/140 + 39/35 + 157/140 + 191/140 + 48/35 + 48/35 + 52/35 + 52/35 + 3/2 + 64/35 + 64/35 + 2/1 +! White keys play the Pelog, black keys play the Gnawa scale +! Dudon 1991 diff --git a/scales/dudon_golden_h7eb.scl b/scales/dudon_golden_h7eb.scl new file mode 100644 index 0000000..fa5c1a8 --- /dev/null +++ b/scales/dudon_golden_h7eb.scl @@ -0,0 +1,22 @@ +! dudon_golden_h7eb.scl +! +12 of 19/31/50 etc... Golden meantone harmonic 7-c and eq-b version + 12 +! + 44603/42752 + 2987/2672 + 200/167 + 3337/2672 + 447/334 + 29839/21376 + 999/668 + 33339/21376 + 4465/2672 + 299/167 + 2495/1336 + 2/1 +! Kornerup Golden meantone harmonic 7-c and eq-b (and Woolhouse-close) version +! Tara recurrent sequence x^4 = x + 7/2 (approx. 696,143 c.) Dudon 2004 +! differential coherence of h. 7 in all major triads : 8E - 7C = G/4, 8B - 7G = D/2, etc. +! equal-beating property (of all C G ^C ^E -type chords) : +! 3 - 2x = 10 - 2x^4 (3C - 2G = 5^C - 4^E, 3G - 2^D = 5^G - 4^B, etc.) diff --git a/scales/dudon_gulu-nem.scl b/scales/dudon_gulu-nem.scl new file mode 100644 index 0000000..31fdd9d --- /dev/null +++ b/scales/dudon_gulu-nem.scl @@ -0,0 +1,19 @@ +! dudon_gulu-nem.scl +! +5 tones Pelog from a sequence of very low "Gulu-nem" fifths (about 5/9 of an octave) + 12 +! + 1/1 + 1393/1284 + 1393/1284 + 2015/1712 + 2015/1712 + 2015/1712 + 473/321 + 473/321 + 4105/2568 + 4105/2568 + 4105/2568 + 2/1 +! Differentially-coherent recurrent sequence, x^3 - 2x = 1/4, Dudon 2007 +! generator is a "Gulu-nem" extremely low fifth of 670.5060969 c. diff --git a/scales/dudon_harm_minor.scl b/scales/dudon_harm_minor.scl new file mode 100644 index 0000000..aa22eb0 --- /dev/null +++ b/scales/dudon_harm_minor.scl @@ -0,0 +1,17 @@ +! dudon_harm_minor.scl +! +So-called "harmonic" minor scale, also raga Kiravani, one of Dudon's versions + 12 +! + 143/128 + 9/8 + 19/16 + 6/5 + 4/3 + 429/320 + 3/2 + 8/5 + 57/32 + 9/5 + 301/160 + 2/1 diff --git a/scales/dudon_harry.scl b/scales/dudon_harry.scl new file mode 100644 index 0000000..6bc44d8 --- /dev/null +++ b/scales/dudon_harry.scl @@ -0,0 +1,19 @@ +! dudon_harry.scl +! +Hommage to Harry Partch, 20th century just intonation pioneer (1901-1974) + 12 +! + 10/9 + 9/8 + 8/7 + 7/6 + 21/16 + 4/3 + 40/27 + 3/2 + 32/21 + 14/9 + 7/4 + 2/1 +! interpretation in Harry partch's 43 tones system of the scale used in one of my pieces +! for the Semantic Danielou, "Passage secret" (Jacques Dudon 2007) diff --git a/scales/dudon_hawaiian.scl b/scales/dudon_hawaiian.scl new file mode 100644 index 0000000..ce505e2 --- /dev/null +++ b/scales/dudon_hawaiian.scl @@ -0,0 +1,19 @@ +! dudon_hawaiian.scl +! +Equal-beating lapsteel-style Major 6th chords (C:E:G:A:C:E) meantone sequence + 12 +! + 1418440/1360773 + 168926/151197 + 60354/50399 + 566204/453591 + 67431/50399 + 1897784/1360773 + 75338/50399 + 2120315/1360773 + 84172/50399 + 90219/50399 + 846376/453591 + 2/1 +! 16 - 3x^3 = 4x Ray -c recurrent sequence, Dudon 2005 +! equal beating 3A - 5C = 3C - 2G of all Maj 6th chords and complements diff --git a/scales/dudon_hijazira.scl b/scales/dudon_hijazira.scl new file mode 100644 index 0000000..5b5b43e --- /dev/null +++ b/scales/dudon_hijazira.scl @@ -0,0 +1,12 @@ +! dudon_hijazira.scl +! +Hijazira = Hijaz-Mohajira + 7 +! + 13/12 + 5/4 + 4/3 + 3/2 + 13/8 + 11/6 + 2/1 diff --git a/scales/dudon_hiroyoshi.scl b/scales/dudon_hiroyoshi.scl new file mode 100644 index 0000000..5ae8b98 --- /dev/null +++ b/scales/dudon_hiroyoshi.scl @@ -0,0 +1,19 @@ +! dudon_hiroyoshi.scl +! +Japanese koto most famous mode, also Ethiopian minor scale, etc. + 12 +! + 107/152 + 3/4 + 5/4 + 143/114 + 45/32 + 429/304 + 3/2 + 1/1 + 5/4 + 15/8 + 143/76 + 2/1 +! Hiroyoshi tonic is E +! Kumoyoshi tonic is B (see other versions of this scale) diff --git a/scales/dudon_homayun.scl b/scales/dudon_homayun.scl new file mode 100644 index 0000000..fdfc0e8 --- /dev/null +++ b/scales/dudon_homayun.scl @@ -0,0 +1,19 @@ +! dudon_homayun.scl +! +Homayun in G + 12 +! + 1/1 + 9/8 + 9/8 + 39/32 + 85/64 + 85/64 + 3/2 + 3/2 + 13/8 + 13/8 + 119/64 + 2/1 +! +! 117/64 into 119/64 modified Mohajira (Dudon 1985) diff --git a/scales/dudon_hoomi.scl b/scales/dudon_hoomi.scl new file mode 100644 index 0000000..ae59145 --- /dev/null +++ b/scales/dudon_hoomi.scl @@ -0,0 +1,19 @@ +! dudon_hoomi.scl +! +Hoomi singing scale in F/F# (on black keys), or in C or G, CFGAC^equal-beating sequence + 12 +! + 1/1 + 857/766 + 857/766 + 480/383 + 512/383 + 512/383 + 573/383 + 573/383 + 1283/766 + 1283/766 + 718/383 + 2/1 +! Hummy recurrent sequence x^4 - 5 = x(3 - 2x), Dudon 2006 +! 4A - 5F = 6C^ - 8G, 4E - 5C = 6G - 8D, 4B - 5G = 6D^ - 8A diff --git a/scales/dudon_ifbis.scl b/scales/dudon_ifbis.scl new file mode 100644 index 0000000..af72cd7 --- /dev/null +++ b/scales/dudon_ifbis.scl @@ -0,0 +1,17 @@ +! dudon_ifbis.scl +! +Ifbis -c recurrent sequence: x^5 - x^3 = 1 (not traditional) + 12 +! + 61/56 + 8/7 + 17/14 + 9/7 + 75/56 + 10/7 + 3/2 + 11/7 + 93/56 + 7/4 + 13/7 + 2/1 diff --git a/scales/dudon_iph-arax.scl b/scales/dudon_iph-arax.scl new file mode 100644 index 0000000..56550b0 --- /dev/null +++ b/scales/dudon_iph-arax.scl @@ -0,0 +1,11 @@ +! dudon_iph-arax.scl +! +Iph-Arax heptatone + 6 +! + 93.88582 + 366.90974 + 466.18060 + 560.06655 + 833.09030 + 926.97633 diff --git a/scales/dudon_isrep.scl b/scales/dudon_isrep.scl new file mode 100644 index 0000000..950a634 --- /dev/null +++ b/scales/dudon_isrep.scl @@ -0,0 +1,18 @@ +! dudon_isrep.scl +! +Fractal Isrep -c recurrent sequence, x^2 = 8x - 8 from F=64 + 12 +! + 2/1 + 75/64 + 75/32 + 1/1 + 11/8 + 11/4 + 3/2 + 3/1 + 13/8 + 13/4 + 75/64 + 2/1 +! Extension of a diminished seventh chord, TL 15/11/2009 by Jacques Dudon diff --git a/scales/dudon_jamlak.scl b/scales/dudon_jamlak.scl new file mode 100644 index 0000000..ebcfd29 --- /dev/null +++ b/scales/dudon_jamlak.scl @@ -0,0 +1,18 @@ +! dudon_jamlak.scl +! +Cycle of fifths developped around a 19-limit Amlak sequence + 12 +! + 321/320 + 9/8 + 381/320 + 101/80 + 107/80 + 57/40 + 3/2 + 127/80 + 539/320 + 571/320 + 19/10 + 2/1 +! Dudon 1989 diff --git a/scales/dudon_jazz.scl b/scales/dudon_jazz.scl new file mode 100644 index 0000000..6b642ae --- /dev/null +++ b/scales/dudon_jazz.scl @@ -0,0 +1,18 @@ +! dudon_jazz.scl +! +Jazz in 7 tones + 12 +! + 1/1 + 301/256 + 19/16 + 4/3 + 171/128 + 361/256 + 767/512 + 3/2 + 5/3 + 455/256 + 57/32 + 2/1 +! -c diff --git a/scales/dudon_jobim.scl b/scales/dudon_jobim.scl new file mode 100644 index 0000000..0395678 --- /dev/null +++ b/scales/dudon_jobim.scl @@ -0,0 +1,20 @@ +! dudon_jobim.scl +! +Triple equal-beating 1/5 syntonic comma meantone, full 12 tones scale + 12 +! + 13893147/13238272 + 1809/1616 + 246989/206848 + 64801/51712 + 135/101 + 2321289/1654784 + 1209/808 + 10155/6464 + 10827/6464 + 184251/103424 + 387843/206848 + 2/1 +! +! Deolia sequence x^4 = (3/4)x^3 + 5/2, triple eq-b of all minor chords, Dudon 2006 +! 8E - 10C = 6A - 8E = 3A - 5C (etc.) diff --git a/scales/dudon_jog.scl b/scales/dudon_jog.scl new file mode 100644 index 0000000..008dd9d --- /dev/null +++ b/scales/dudon_jog.scl @@ -0,0 +1,17 @@ +! dudon_jog.scl +! +Jog with (ascent only) additional 15/8 + 12 +! + 1/1 + 19/16 + 6/5 + 5/4 + 4/3 + 43/32 + 3/2 + 3/2 + 16/9 + 43/24 + 15/8 + 2/1 diff --git a/scales/dudon_joged-bumbung.scl b/scales/dudon_joged-bumbung.scl new file mode 100644 index 0000000..80c95d0 --- /dev/null +++ b/scales/dudon_joged-bumbung.scl @@ -0,0 +1,21 @@ +! dudon_joged-bumbung.scl +! +Typical Balinese grantang and tingklik (bamboo xylophones) slendro tuning + 12 +! + 1/1 + 1448/1273 + 8/7 + 1688/1273 + 1688/1273 + 4/3 + 3/2 + 1920/1273 + 12/7 + 2184/1273 + 2/1 + 2/1 +! Mounos -c sequence x^3 - 2 = x/4, quasi-septimal central A-M-N slendro +! differential coherence of minor thirds : F - D = G/8, ^C - A = D/4 +! with added regular fifths and septimal tones (8/7) +! Dudon 2004 diff --git a/scales/dudon_kalyana.scl b/scales/dudon_kalyana.scl new file mode 100644 index 0000000..449a5ec --- /dev/null +++ b/scales/dudon_kalyana.scl @@ -0,0 +1,17 @@ +! dudon_kalyana.scl +! +Kalyana thaat raga, harmonics 3-5-17-19-43 version by Dudon 2004 + 12 +! + 19/17 +172/153 + 5/4 + 64/51 + 45/32 + 24/17 + 3/2 + 256/153 + 57/34 + 15/8 + 32/17 + 2/1 diff --git a/scales/dudon_kanakangi.scl b/scales/dudon_kanakangi.scl new file mode 100644 index 0000000..f35304f --- /dev/null +++ b/scales/dudon_kanakangi.scl @@ -0,0 +1,18 @@ +! dudon_kanakangi.scl +! +Raga Kanakangi (Karnatic music, suddha madhyama mela # 1) + 12 +! + 17/16 + 9/8 + 9/8 + 4/3 + 4/3 + 3/2 + 3/2 + 19/12 + 5/3 + 5/3 + 2/1 + 2/1 +! also Kamavardhani (# 51) from C# diff --git a/scales/dudon_kellner_eb.scl b/scales/dudon_kellner_eb.scl new file mode 100644 index 0000000..7d1e872 --- /dev/null +++ b/scales/dudon_kellner_eb.scl @@ -0,0 +1,20 @@ +! dudon_kellner_eb.scl +! +JI version of Anton Kellner 1/5 Pyth.c well-temperament, based on Skisni algorithm + 12 +! + 256/243 + 272/243 + 32/27 + 2738/2187 + 4/3 + 1024/729 + 3272/2187 + 128/81 + 3664/2187 + 16/9 + 1369/729 + 2/1 +! 2 x^4 = x^3 + 4, 4E - 5C = 3G - 2C = (3/8)E - (5/4)G +! -c and triple equal-beating Skisni recurrent sequence, Dudon 2006 +! (double skisni occurrences attained by changing B to 4096/2187 - see also Skisni_hwt) diff --git a/scales/dudon_kidarvani.scl b/scales/dudon_kidarvani.scl new file mode 100644 index 0000000..7df6e6d --- /dev/null +++ b/scales/dudon_kidarvani.scl @@ -0,0 +1,15 @@ +! dudon_kidarvani.scl +! +Kidarvani, combination tuning of ragas Kirvani and Darbari + 10 +! + 9/8 + 19/16 + 6/5 + 4/3 + 3/2 + 8/5 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/dudon_kirvanti.scl b/scales/dudon_kirvanti.scl new file mode 100644 index 0000000..f48cfdd --- /dev/null +++ b/scales/dudon_kirvanti.scl @@ -0,0 +1,18 @@ +! dudon_kirvanti.scl +! +Raga Kirvanti (known also as Hungarian Gypsy scale) + 12 +! + 1/1 + 9/8 + 19/16 + 6/5 + 64/45 + 57/40 + 3/2 + 51/32 + 8/5 + 15/8 + 303/160 + 2/1 +! Dudon 2007 diff --git a/scales/dudon_kora-chimere.scl b/scales/dudon_kora-chimere.scl new file mode 100644 index 0000000..738108d --- /dev/null +++ b/scales/dudon_kora-chimere.scl @@ -0,0 +1,19 @@ +! dudon_kora-chimere.scl +! +Kora diatonic, slightly neutral + 12 +! + 635/382 + 425/382 + 2/1 + 945/764 + 256/191 + 945/382 + 285/191 + 512/191 + 635/382 + 1415/764 + 570/191 + 2/1 +! equal-beating based on Chimere algorithm : x^3 = 10 - 3x^2 +! Dudon 2007 diff --git a/scales/dudon_kora_snd.scl b/scales/dudon_kora_snd.scl new file mode 100644 index 0000000..9136800 --- /dev/null +++ b/scales/dudon_kora_snd.scl @@ -0,0 +1,19 @@ +! dudon_kora_snd.scl +! +Kora tuning in the Mandinka semi-neutral diatonic style + 12 +! + 129/104 + 29/26 + 35/26 + 129/104 + 35/26 + 43/26 + 3/2 + 24/13 + 345/208 + 2/1 + 24/13 + 2/1 +! quasi -c scale from C = 13 (white keys) : +! 26 29 129 35 39 43-345 48 52 (Dudon 1991) diff --git a/scales/dudon_kumoyoshi_19-l.scl b/scales/dudon_kumoyoshi_19-l.scl new file mode 100644 index 0000000..f2910aa --- /dev/null +++ b/scales/dudon_kumoyoshi_19-l.scl @@ -0,0 +1,19 @@ +! dudon_kumoyoshi_19-l.scl +! +Japanese famous mode, -c 17+19th harmonics interpretation + 12 +! + 3/2 + 19/18 + 17/16 + 1/1 + 4/3 + 17/8 + 3/2 + 2/1 + 19/12 + 51/32 + 1/1 + 2/1 +! (288 304-306 384 432 456-459 576) +! Dudon 1985 diff --git a/scales/dudon_lakota.scl b/scales/dudon_lakota.scl new file mode 100644 index 0000000..1571fe6 --- /dev/null +++ b/scales/dudon_lakota.scl @@ -0,0 +1,17 @@ +! dudon_lakota.scl +! +Comma variations add to the richness of differential tones + 12 +! + 1/1 + 19/16 + 6/5 + 29/24 + 4/3 + 107/80 + 3/2 + 1/1 + 5/3 + 57/32 + 9/5 + 2/1 diff --git a/scales/dudon_liane.scl b/scales/dudon_liane.scl new file mode 100644 index 0000000..649c343 --- /dev/null +++ b/scales/dudon_liane.scl @@ -0,0 +1,18 @@ +! dudon_liane.scl +! +Class 1 differentially coherent interleaved intervals, hexatonic scale + 12 +! + 6273/6272 + 55/49 + 9/8 + 121/98 + 969/784 + 10/7 + 561/392 + 11/7 + 11/7 + 89/49 + 51/28 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_lucie.scl b/scales/dudon_lucie.scl new file mode 100644 index 0000000..bd2c9b0 --- /dev/null +++ b/scales/dudon_lucie.scl @@ -0,0 +1,19 @@ +! dudon_lucie.scl +! +Sequence of 11 fractal Lucie fifths (exactly 695,5023126 c.) from Eb + 12 +! + 1477/1424 + 1789/1602 + 320/267 + 111/89 + 1072/801 + 1489/1068 + 133/89 + 2229/1424 + 297/178 + 4304/2403 + 663/356 + 2/1 +! Lucie recurrent sequence x^4 = 15 - 3x^3, Dudon 2006 +! All minor triads are equal-beating : 3x^3 - 10 = 5 - x^4 diff --git a/scales/dudon_madhuvanti.scl b/scales/dudon_madhuvanti.scl new file mode 100644 index 0000000..a6470ea --- /dev/null +++ b/scales/dudon_madhuvanti.scl @@ -0,0 +1,18 @@ +! dudon_madhuvanti.scl +! +Madhuvanti (also called Ambika), late evening raga + 12 +! + 1/1 + 9/8 + 19/16 + 6/5 + 45/32 + 91/64 + 3/2 + 429/256 + 27/16 + 15/8 + 483/256 + 2/1 +! Dudon 2004 diff --git a/scales/dudon_mahur.scl b/scales/dudon_mahur.scl new file mode 100644 index 0000000..5cc2906 --- /dev/null +++ b/scales/dudon_mahur.scl @@ -0,0 +1,18 @@ +! dudon_mahur.scl +! +Persian Dastgah Mahur + 12 +! + 143/128 + 9/8 + 5/4 + 1287/1024 + 4/3 + 171/128 + 3/2 + 5/3 + 429/256 + 57/32 + 15/8 + 2/1 +! JI interpretation (Dudon) diff --git a/scales/dudon_mandinka.scl b/scales/dudon_mandinka.scl new file mode 100644 index 0000000..83b13b9 --- /dev/null +++ b/scales/dudon_mandinka.scl @@ -0,0 +1,20 @@ +! dudon_mandinka.scl +! +Guinean Balafon circular tuning, neutral diatonic -c interpretation + 12 +! + 1/1 + 581/524 + 581/524 + 161/131 + 176/131 + 176/131 + 195/131 + 195/131 + 865/524 + 865/524 + 240/131 + 2/1 +! Gazelle -c recurrent sequence x^5 = 8x^4 - 32 , Dudon 2009 +! differential coherence of major thirds and semitones +! series (octave-reduced) 11 131 195 581 865 161 15 diff --git a/scales/dudon_marovany.scl b/scales/dudon_marovany.scl new file mode 100644 index 0000000..b0d775e --- /dev/null +++ b/scales/dudon_marovany.scl @@ -0,0 +1,22 @@ +! dudon_marovany.scl +! +Typical Malagasy scale, neutral diatonic, multiways -c and eq-b + 12 +! + 783/704 + 3141/2816 + 2/1 + 871/704 + 59/44 + 871/352 + 525/352 + 1053/704 + 73/44 + 10393/5632 + 5197/2816 + 2/1 +! fractal series based on -c Vali algorithm 64 - 8x^5 = x^4 +! Meenshku x^4 = 6x -4 +! Pierdangle 64x^2 = 15(x + 8) +! and Kazdep eq-b 9x2 - 20 = 3 - 2x +! Dudon 2009 diff --git a/scales/dudon_marva.scl b/scales/dudon_marva.scl new file mode 100644 index 0000000..57a5929 --- /dev/null +++ b/scales/dudon_marva.scl @@ -0,0 +1,17 @@ +! dudon_marva.scl +! +Raga Marva, differential-coherent version, modelized by Jacques Dudon + 12 +! + 20/19 + 17/16 + 5/4 + 24/19 + 1/1 + 45/32 + 27/19 + 5/3 + 32/19 + 15/8 + 36/19 + 2/1 diff --git a/scales/dudon_meancaline.scl b/scales/dudon_meancaline.scl new file mode 100644 index 0000000..a88fad0 --- /dev/null +++ b/scales/dudon_meancaline.scl @@ -0,0 +1,20 @@ +! dudon_meancaline.scl +! +12 of 19-tones quasi-equal HT with coherent semifourths on black keys + 12 +! + 1420/1371 + 7648/6855 + 8224/6855 + 2844/2285 + 9178/6855 + 3168/2285 + 2048/1371 + 10606/6855 + 3808/2285 + 4096/2285 + 12736/6855 + 2/1 +! differential coherence of semifourths : +! F#- Eb = G, C# - Bb = D, G# - F = A +! Meancaline sequence x^9 - 32 = x^4 Dudon 2009 diff --git a/scales/dudon_melkis.scl b/scales/dudon_melkis.scl new file mode 100644 index 0000000..1357be0 --- /dev/null +++ b/scales/dudon_melkis.scl @@ -0,0 +1,19 @@ +! dudon_melkis.scl +! +Sequence of 11 Melkis fourths (499.11472 c.) from D + 12 +! + 30739/29088 + 3064/2727 + 3238/2727 + 36499/29088 + 539/404 + 15379/10908 + 4088/2727 + 160/101 + 584345/349056 + 1618/909 + 10259/5454 + 2/1 +! Melkis recurrent sequence x^4 - 2x = 1/2 (-c of minor thirds) +! Dudon 1992 diff --git a/scales/dudon_melkis_3f.scl b/scales/dudon_melkis_3f.scl new file mode 100644 index 0000000..ccb8639 --- /dev/null +++ b/scales/dudon_melkis_3f.scl @@ -0,0 +1,19 @@ +! dudon_melkis_3f.scl +! +Sequence of 6 Melkis fourths from G, then 3 pure fourths between C# and E + 12 +! + 540/511 + 573/511 + 2427/2044 + 640/511 + 2727/2044 + 720/511 + 766/511 + 1619/1022 + 856/511 + 2079/1168 + 960/511 + 2/1 +! Melkis recurrent sequence x^4 = 2x + 1/2 (-c of minor thirds) +! Dudon 1992 diff --git a/scales/dudon_meso-iph12.scl b/scales/dudon_meso-iph12.scl new file mode 100644 index 0000000..dcbf250 --- /dev/null +++ b/scales/dudon_meso-iph12.scl @@ -0,0 +1,21 @@ +! dudon_meso-iph12.scl +! +Partial Meso-Iph fifth transposition of two Iph fractal series (2010) + 12 +! + 3008/2783 + 3072/2783 + 3184/2783 + 3440/2783 + 3712/2783 + 3936/2783 + 4168/2783 + 4608/2783 + 4864/2783 + 4960/2783 + 224/121 + 2/1 +! Iph -c recurrent sequence, x^3 = 8x - 8 +! completed by Meso-Iph meantone fifth of (Phi^6 /8)^1/2 +! simulated between Phi-series Phi 96 (96 : 155 ... 1720 : 2783) +! and 8*P : 18 : 29 : 47 : 76 : 123 : 199 : 322 : 521 diff --git a/scales/dudon_meso-iph7.scl b/scales/dudon_meso-iph7.scl new file mode 100644 index 0000000..ca986a2 --- /dev/null +++ b/scales/dudon_meso-iph7.scl @@ -0,0 +1,15 @@ +! dudon_meso-iph7.scl +! +Neutral diatonic variation based on two Iph fractal series + 7 +! + 3072/2783 + 3440/2783 + 3712/2783 + 4168/2783 + 4608/2783 + 224/121 + 2/1 +! Iph -c recurrent sequence, x^3 = 8x - 8 +! completed by Meso-Iph meantone fifth of (Phi^6 /8)^1/2 +! simulated between Phi-series Phi 96 and 8*P diff --git a/scales/dudon_michemine.scl b/scales/dudon_michemine.scl new file mode 100644 index 0000000..c5b9eb9 --- /dev/null +++ b/scales/dudon_michemine.scl @@ -0,0 +1,20 @@ +! dudon_michemine.scl +! +Triple equal-beating of all minor triads meantone sequence + 12 +! + 333711/321536 + 1403/1256 + 188/157 + 12547/10048 + 210/157 + 112283/80384 + 469/314 + 1006387/643072 + 4191/2512 + 281/157 + 37399/20096 + 2/1 +! Sequence of 11 Michemine fifths (average of 695.8095676 c.) from Eb +! Triple equal-beating of all minor triads : 3x^3 - 10 = (3/2)x^3 - x^4 = 10 - 2x^4 +! Dudon 2006 diff --git a/scales/dudon_moha_baya.scl b/scales/dudon_moha_baya.scl new file mode 100644 index 0000000..9a4a4a7 --- /dev/null +++ b/scales/dudon_moha_baya.scl @@ -0,0 +1,12 @@ +! dudon_moha_baya.scl +! +Mohajira + Bayati (Dudon) 3 + 4 + 3 Mohajira and 3 + 3 + 4 Bayati tetrachords + 7 +! + 150.00000 + 350.00000 + 500.00000 + 700.00000 + 850.00000 + 1000.00000 + 2/1 diff --git a/scales/dudon_mohajira.scl b/scales/dudon_mohajira.scl new file mode 100644 index 0000000..e09cfaf --- /dev/null +++ b/scales/dudon_mohajira.scl @@ -0,0 +1,12 @@ +! dudon_mohajira.scl +! +Dudon's Mohajira, neutral diatonic. g^5-g^4=1/2 + 7 +! + 153.26216 + 348.91261 + 502.17478 + 697.82522 + 851.08739 + 1046.73784 + 2/1 diff --git a/scales/dudon_mohajira_r.scl b/scales/dudon_mohajira_r.scl new file mode 100644 index 0000000..819eebe --- /dev/null +++ b/scales/dudon_mohajira_r.scl @@ -0,0 +1,12 @@ +! dudon_mohajira_r.scl +! +Jacques Dudon, JI Mohajira, Lumires audibles + 7 +! + 13/12 + 59/48 + 4/3 + 3/2 + 13/8 + 11/6 + 2/1 diff --git a/scales/dudon_mougi.scl b/scales/dudon_mougi.scl new file mode 100644 index 0000000..c603321 --- /dev/null +++ b/scales/dudon_mougi.scl @@ -0,0 +1,18 @@ +! dudon_mougi.scl +! +Tsigan-style raga, based on the 19/16 minor third -c properties + 12 +! + 9/8 + 361/320 + 19/16 + 115/96 + 361/256 + 57/40 + 3/2 + 57/32 + 115/64 + 361/192 + 19/10 + 2/1 +! Dudon 1969 diff --git a/scales/dudon_mounos.scl b/scales/dudon_mounos.scl new file mode 100644 index 0000000..00c18df --- /dev/null +++ b/scales/dudon_mounos.scl @@ -0,0 +1,21 @@ +! dudon_mounos.scl +! +Mounos extended fifths -c sequence, quasi-septimal minor diatonic scale + 12 +! + 9/8 + 1647/1448 + 211/181 + 4/3 + 240/181 + 3/2 + 273/181 + 27/16 + 9937/5792 + 1273/724 + 16/9 + 2/1 +! Mounos -c sequence x^3 - 2 = x/4, Dudon 2004 +! differential coherence of minor thirds : D# - C = F/8 etc. (4 occurrences) +! extended fifths (711,4963 c.) and tones (roughly 256/225 or 223 c.) +! -c attempt for some common persian low and plaintive minor thirds diff --git a/scales/dudon_nan-kouan.scl b/scales/dudon_nan-kouan.scl new file mode 100644 index 0000000..db7a600 --- /dev/null +++ b/scales/dudon_nan-kouan.scl @@ -0,0 +1,17 @@ +! dudon_nan-kouan.scl +! +Nan-Kouan (medieval chinese ballade) scale interpretation + 12 +! + 19/17 + 172/153 + 5/4 + 321/256 + 64/51 + 11/8 + 3/2 + 107/64 + 256/153 + 57/34 + 11/6 + 2/1 diff --git a/scales/dudon_napolitan.scl b/scales/dudon_napolitan.scl new file mode 100644 index 0000000..6bf8654 --- /dev/null +++ b/scales/dudon_napolitan.scl @@ -0,0 +1,18 @@ +! dudon_napolitan.scl +! +Napolitan scale, class-1 differential coherence ; whole tone scale by omitting C + 12 +! + 17/16 + 205/192 + 455/384 + 19/16 + 4/3 + 171/128 + 3/2 + 3/2 + 5/3 + 15/8 + 241/128 + 2/1 +! Dudon 2001 diff --git a/scales/dudon_natte.scl b/scales/dudon_natte.scl new file mode 100644 index 0000000..e54c59e --- /dev/null +++ b/scales/dudon_natte.scl @@ -0,0 +1,21 @@ +! dudon_natte.scl +! +Sequence of 7 consecutive tones of a Natte series from 28 to 151 + 12 +! + 86/57 + 65/57 + 98/57 + 74/57 + 151/114 + 2/1 + 86/57 + 65/57 + 98/57 + 74/57 + 112/57 + 2/1 +! White keys play the seven tones (with two commas 148:151 and 56:57), +! Black keys play only plain pentatonic 43 : 49 : 57 : 65 : 74 +! Natte fractal sequence (Dudon), known also as "Meta-Slendro" (Wilson) +! x^3 = x + 1, or x^5 = x^4 + 1, x = 1.3247179572447 diff --git a/scales/dudon_nung-phan1.scl b/scales/dudon_nung-phan1.scl new file mode 100644 index 0000000..3823a36 --- /dev/null +++ b/scales/dudon_nung-phan1.scl @@ -0,0 +1,18 @@ +! dudon_nung-phan1.scl +! +7 tones from a sequence of Nung-Phan very low fifths (in theory 679.5604542 c.) + 12 +! + 2/1 + 57/52 + 57/26 + 125/104 + 275/208 + 275/104 + 77/52 + 77/26 + 13/8 + 13/4 + 185/104 + 2/1 +! Nung-Phan recurrent sequence x^4 = 10x - 10, Dudon 2009 diff --git a/scales/dudon_nung-phan2.scl b/scales/dudon_nung-phan2.scl new file mode 100644 index 0000000..aa06392 --- /dev/null +++ b/scales/dudon_nung-phan2.scl @@ -0,0 +1,18 @@ +! dudon_nung-phan2.scl +! +7 tones from a Nung-Phan sequence (very low fifths, in theory 679.5604542 c.) + 12 +! + 3/2 + 169/150 + 5/3 + 37/30 + 27/20 + 2/1 + 3/2 + 169/75 + 5/3 + 37/15 + 11/6 + 2/1 +! Nung-Phan recurrent sequence x^4 = 10x - 10, Dudon 2009 diff --git a/scales/dudon_okna_hwt.scl b/scales/dudon_okna_hwt.scl new file mode 100644 index 0000000..ac01f29 --- /dev/null +++ b/scales/dudon_okna_hwt.scl @@ -0,0 +1,19 @@ +! dudon_okna_hwt.scl +! +Harmonic well-temperament for mongolian lute + 12 +! +135/128 +1149/1024 +19/16 +321/256 +171/128 +45/32 +3/2 +405/256 +429/256 +7293/4096 +15/8 +2/1 +! C:G kept pure (3/2) facilitates the open tuning of the instrument +! Harmonic temperaments, Synthese Orient-Occident, Dudon 2005 diff --git a/scales/dudon_over-under_ht.scl b/scales/dudon_over-under_ht.scl new file mode 100644 index 0000000..a3a83e7 --- /dev/null +++ b/scales/dudon_over-under_ht.scl @@ -0,0 +1,20 @@ +! dudon_over-under_ht.scl +! +Cycle of fifths, one half above 3/2, the other below (meantone) +! white keys play the meantone part, black keys add interesting chromatisms +! suggested tonics : A, G#m, C#m , C, F7 + 12 +! + 33/32 + 215/192 + 75/64 + 239/192 + 4/3 + 131/96 + 287/192 + 149/96 + 5/3 + 85/48 + 179/96 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_pelog_35.scl b/scales/dudon_pelog_35.scl new file mode 100644 index 0000000..09e160e --- /dev/null +++ b/scales/dudon_pelog_35.scl @@ -0,0 +1,18 @@ +! dudon_pelog_35.scl +! +JI -c Pelog with 5, 13, 35 and complements + 12 +! + 256/349 + 384/349 + 280/349 + 512/349 + 1/1 + 350/349 + 416/349 + 385/349 + 512/349 + 416/349 + 560/349 + 2/1 +! Dudon 2001 diff --git a/scales/dudon_pelog_59.scl b/scales/dudon_pelog_59.scl new file mode 100644 index 0000000..eeb602a --- /dev/null +++ b/scales/dudon_pelog_59.scl @@ -0,0 +1,18 @@ +! dudon_pelog_59.scl +! +JI -c Pelog with 5, 11, 59 and complements + 12 +! + 321/256 + 11/8 + 5/4 + 645/512 + 11/8 + 3/2 + 385/256 + 119/64 + 255/128 + 59/32 + 119/64 + 2/1 +! Dudon 2001 diff --git a/scales/dudon_pelog_ambi.scl b/scales/dudon_pelog_ambi.scl new file mode 100644 index 0000000..07c0290 --- /dev/null +++ b/scales/dudon_pelog_ambi.scl @@ -0,0 +1,21 @@ +! dudon_pelog_ambi.scl +! +Differential-coherent 5 notes Pelog, ambiguous tonic between C & E + 12 +! + 575/384 + 43/32 + 59/48 + 119/96 + 4/3 + 43/32 + 575/384 + 469/384 + 1/1 + 11/6 + 59/32 + 2/1 +! +! differentials generated = 11 3 59 1-129 9 and octaves +! can be heard as well as a classical anhemipentatonic from note E (= 59) +! Dudon 2006 diff --git a/scales/dudon_phi13.scl b/scales/dudon_phi13.scl new file mode 100644 index 0000000..17c57c3 --- /dev/null +++ b/scales/dudon_phi13.scl @@ -0,0 +1,18 @@ +! dudon_phi13.scl +! +Division of phi giving close approximations to ratios with Fibonacci denominators + 13 +! + 93.88597 + 149.46359 + 235.77436 + 317.98569 + 366.90970 + 443.25400 + 488.80753 + 560.06655 + 628.50809 + 669.49310 + 733.81941 + 795.84097 + 833.09030 diff --git a/scales/dudon_phidiama.scl b/scales/dudon_phidiama.scl new file mode 100644 index 0000000..f420193 --- /dev/null +++ b/scales/dudon_phidiama.scl @@ -0,0 +1,13 @@ +! dudon_phidiama.scl +! +Two Phidiama series, used in "Appel", x^2=3x-1 + 8 +! + 9/8 + 55/48 + 21/16 + 4/3 + 3/2 + 55/32 + 7/4 + 2/1 diff --git a/scales/dudon_piphat.scl b/scales/dudon_piphat.scl new file mode 100644 index 0000000..f8839f7 --- /dev/null +++ b/scales/dudon_piphat.scl @@ -0,0 +1,17 @@ +! dudon_piphat.scl +! +Gazelle-Naggar -c series + comma 953-960, major mode + 12 +! + 1/1 + 953/865 + 192/173 + 1048/865 + 1052/865 + 1029/692 + 1288/865 + 1288/865 + 1408/865 + 1408/865 + 1408/865 + 2/1 diff --git a/scales/dudon_piphat_min.scl b/scales/dudon_piphat_min.scl new file mode 100644 index 0000000..b8f9e9f --- /dev/null +++ b/scales/dudon_piphat_min.scl @@ -0,0 +1,19 @@ +! dudon_piphat_min.scl +! +Gazelle-Naggar -c series + comma 953-960, minor mode +! + 12 +! + 1/1 + 176/161 + 176/161 + 176/161 + 865/644 + 865/644 + 953/644 + 240/161 + 262/161 + 263/161 + 264/161 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_purvi.scl b/scales/dudon_purvi.scl new file mode 100644 index 0000000..4271128 --- /dev/null +++ b/scales/dudon_purvi.scl @@ -0,0 +1,18 @@ +! dudon_purvi.scl +! +Purvi Thaat Raga + 12 +! + 101/96 + 19/18 + 5/4 + 121/96 + 45/32 + 17/12 + 3/2 + 101/64 + 19/12 + 15/8 + 91/48 + 2/1 +! Dudon 2004 diff --git a/scales/dudon_quechua.scl b/scales/dudon_quechua.scl new file mode 100644 index 0000000..f8de444 --- /dev/null +++ b/scales/dudon_quechua.scl @@ -0,0 +1,18 @@ +! dudon_quechua.scl +! +Gazelle-Naggar -c series + comma 953-960, F.11 mode + 12 +! + 1/1 + 1/1 + 865/704 + 865/704 + 953/704 + 15/11 + 131/88 + 263/176 + 3/2 + 161/88 + 161/88 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_raph.scl b/scales/dudon_raph.scl new file mode 100644 index 0000000..3f4c50d --- /dev/null +++ b/scales/dudon_raph.scl @@ -0,0 +1,20 @@ +! dudon_raph.scl +! +Raph recurrent sequence, series Phi17 & Phi93 + 12 +! + 31/30 + 191/180 + 131/120 + 19/15 + 59/45 + 27/20 + 25/18 + 73/45 + 5/3 + 103/60 + 53/30 + 2/1 +! x^4 - x^2 = 1, generator x = sqrt of Phi = 1.2720196495 +! series here 45 57 73 93 118 150 191 243 309 393 500 636 +! (Iph -c : 393 - 318 = 75 ; 309 - 250 = 59, etc.) diff --git a/scales/dudon_rast-iph39.scl b/scales/dudon_rast-iph39.scl new file mode 100644 index 0000000..3afc566 --- /dev/null +++ b/scales/dudon_rast-iph39.scl @@ -0,0 +1,16 @@ +! dudon_rast-iph39.scl +! +Neutral diatonic composed of Rast and Iph tetrachords, based on F and 3F series +7 +! +233/208 +16/13 +4/3 +233/156 +64/39 +24/13 +2/1 +! Iph -c recurrent sequence, x^3 = 8x - 8 +! completed by its 3rd harmonic transposition +! F series 8 : 13 ... 144 : 233 +! 3F series 24 : 39 ... 699 diff --git a/scales/dudon_rast-iph63.scl b/scales/dudon_rast-iph63.scl new file mode 100644 index 0000000..880bf74 --- /dev/null +++ b/scales/dudon_rast-iph63.scl @@ -0,0 +1,16 @@ +! dudon_rast-iph63.scl +! +Neutral diatonic composed of Rast and Iph tetrachords, based on F and 3F series +7 +! +377/336 +26/21 +4/3 +377/252 +104/63 +233/126 +2/1 +! Iph -c recurrent sequence, x^3 = 8x - 8 +! completed by its 3rd harmonic transposition +! F series 13 : 21 ... 233 : 377 +! 3F series 39 : 63 ... 1131 diff --git a/scales/dudon_rast-mohajira.scl b/scales/dudon_rast-mohajira.scl new file mode 100644 index 0000000..7c7f557 --- /dev/null +++ b/scales/dudon_rast-mohajira.scl @@ -0,0 +1,18 @@ +! dudon_rast-mohajira.scl +! +Rast + Mohajira -c quartertones set +12 +! +107/96 +9/8 +11/9 +59/48 +4/3 +11/8 +3/2 +5/3 +27/16 +11/6 +59/32 +2/1 +! Dudon 1990 diff --git a/scales/dudon_rast_matrix.scl b/scales/dudon_rast_matrix.scl new file mode 100644 index 0000000..d683810 --- /dev/null +++ b/scales/dudon_rast_matrix.scl @@ -0,0 +1,18 @@ +! dudon_rast_matrix.scl +! +Wusta-Zalzal Arijaom sequence with Rast on white keys and other maqamat + 12 +! + 171/157 + 176/157 + 192/157 + 387/314 + 419/314 + 216/157 + 236/157 + 258/157 + 264/157 + 1129/628 + 288/157 + 2/1 +! Arijaom sequence x^3 = 6 - x (class 3 -c) Dudon 1990 diff --git a/scales/dudon_rebab.scl b/scales/dudon_rebab.scl new file mode 100644 index 0000000..6f47ee6 --- /dev/null +++ b/scales/dudon_rebab.scl @@ -0,0 +1,17 @@ +! dudon_rebab.scl +! +Gazelle, x^5 = 8x^4 - 32, -c series + comma 953-960, Dudon 2009 + 12 +! + 1/1 + 1048/953 + 1052/953 + 5145/3812 + 1288/953 + 1288/953 + 1408/953 + 1419/953 + 1420/953 + 1730/953 + 1730/953 + 2/1 diff --git a/scales/dudon_s-n-buzurg.scl b/scales/dudon_s-n-buzurg.scl new file mode 100644 index 0000000..7dc583b --- /dev/null +++ b/scales/dudon_s-n-buzurg.scl @@ -0,0 +1,19 @@ +! dudon_s-n-buzurg.scl +! +Decaphonic system inspired by medieval Persian mode Buzurg (Safi al-Din) + 12 +! + 14/13 + 13/12 + 8/7 + 26/21 + 55/42 + 39/28 + 3/2 + 21/13 + 13/8 + 12/7 + 13/7 + 2/1 +! Estrangetes et Arabesques, Dudon 1997 +! also h.13-related superposition of slendros S and N (7-limit Slendro Mutations, Dudon 1994) diff --git a/scales/dudon_saba-c.scl b/scales/dudon_saba-c.scl new file mode 100644 index 0000000..c185665 --- /dev/null +++ b/scales/dudon_saba-c.scl @@ -0,0 +1,18 @@ +! dudon_saba-c.scl +! +Differentially coherent version of Maqam Saba + 12 +! + 259/240 + 87/80 + 19/16 + 6/5 + 19/15 + 179/120 + 3/2 + 8/5 + 129/80 + 71/40 + 9/5 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_sapaan.scl b/scales/dudon_sapaan.scl new file mode 100644 index 0000000..dea90dc --- /dev/null +++ b/scales/dudon_sapaan.scl @@ -0,0 +1,19 @@ +! dudon_sapaan.scl +! +7 tones from a sequence of Sapaan very low fifths (in theory 680.015678 c.) + 12 +! + 1/1 + 337/300 + 337/300 + 277/225 + 304/225 + 304/225 + 1333/900 + 1333/900 + 374/225 + 374/225 + 82/45 + 2/1 +! Sapaan differentially-coherent recurrent sequence, 4x^4 - 16 = x^3, Dudon 2009 +! series used here (octave reduced) : 1011 187 277 205 19 225 1333 diff --git a/scales/dudon_saqqara.scl b/scales/dudon_saqqara.scl new file mode 100644 index 0000000..e37e7c3 --- /dev/null +++ b/scales/dudon_saqqara.scl @@ -0,0 +1,19 @@ +! dudon_saqqara.scl +! +Scale of a ney flute (n 69815) from ancient Egypt found in Saqqara +! according to a study done by Pr. Fathi Saleh, Cairo University 1997 +! Just intonation modelisation by Jacques Dudon + 12 +! + 212/211 + 475/422 + 259/211 + 260/211 + 571/422 + 318/211 + 320/211 + 342/211 + 344/211 + 382/211 + 384/211 + 2/1 diff --git a/scales/dudon_satara.scl b/scales/dudon_satara.scl new file mode 100644 index 0000000..d48f004 --- /dev/null +++ b/scales/dudon_satara.scl @@ -0,0 +1,17 @@ +! dudon_satara.scl +! +Rajasthani double flute drone-c tuning amusement + 12 +! + 3/4 + 9/8 + 3/4 + 5/4 + 43/32 + 3/4 + 3/2 + 3/4 + 27/16 + 3/4 + 15/8 + 2/1 diff --git a/scales/dudon_saung_gauk.scl b/scales/dudon_saung_gauk.scl new file mode 100644 index 0000000..6adaa2b --- /dev/null +++ b/scales/dudon_saung_gauk.scl @@ -0,0 +1,19 @@ +! dudon_saung_gauk.scl +! +Typical diatonic heptaphone played on the saung gauk (burmese harp) + 12 +! + 1/1 + 3463/3114 + 3463/3114 + 623881/504468 + 232/173 + 232/173 + 258/173 + 258/173 + 23240/14013 + 23240/14013 + 232600/126117 + 2/1 +! Cazdep recurrent equal-beating sequence 9x^2 - 20 = 3 - 2x +! Dudon 2007 diff --git a/scales/dudon_segah.scl b/scales/dudon_segah.scl new file mode 100644 index 0000000..c6f486c --- /dev/null +++ b/scales/dudon_segah.scl @@ -0,0 +1,19 @@ +! dudon_segah.scl +! +Dastgah Segah, JI interpretation + 12 +! + 285/256 + 9/8 + 38/31 + 157/128 + 4/3 + 343/256 + 3/2 + 13/8 + 157/96 + 56/31 + 29/16 + 2/1 +! JI differentially coherent interpretation (Dudon) +! centered on the Segah (neutral third interval) diff --git a/scales/dudon_segah_subh.scl b/scales/dudon_segah_subh.scl new file mode 100644 index 0000000..51e0aba --- /dev/null +++ b/scales/dudon_segah_subh.scl @@ -0,0 +1,18 @@ +! dudon_segah_subh.scl +! +Inversed Dudon Neutral Diatonic (mediants of major and minor) + 12 +! + 1/1 + 66/59 + 11/9 + 11/9 + 4/3 + 4/3 + 3/2 + 3/2 + 44/27 + 11/6 + 11/6 + 2/1 +! (= subharmonic series from 132 to 66) diff --git a/scales/dudon_septimal_2.scl b/scales/dudon_septimal_2.scl new file mode 100644 index 0000000..40ae46d --- /dev/null +++ b/scales/dudon_septimal_2.scl @@ -0,0 +1,17 @@ +! dudon_septimal_2.scl +! +Slendro formed by five 8/7 separated by two commas, Dudon (2009) + 12 +! + 264/233 + 266/233 + 304/233 + 304/233 + 308/233 + 352/233 + 352/233 + 400/233 + 402/233 + 460/233 + 464/233 + 2/1 diff --git a/scales/dudon_septimal_3.scl b/scales/dudon_septimal_3.scl new file mode 100644 index 0000000..a396ab4 --- /dev/null +++ b/scales/dudon_septimal_3.scl @@ -0,0 +1,17 @@ +! dudon_septimal_3.scl +! +Five 8/7 or close approximations separated by three commas, Dudon (2009) + 12 +! + 413/361 + 416/361 + 472/361 + 472/361 + 476/361 + 544/361 + 549/361 + 624/361 + 33/19 + 712/361 + 716/361 + 2/1 diff --git a/scales/dudon_shaku.scl b/scales/dudon_shaku.scl new file mode 100644 index 0000000..b47ca3a --- /dev/null +++ b/scales/dudon_shaku.scl @@ -0,0 +1,18 @@ +! dudon_shaku.scl +! +Japanese Shakuhachi scale, -c interpretation + 12 +! + 1/1 + 2431/2304 + 19/18 + 17/16 + 85/64 + 4/3 + 2303/1536 + 3/2 + 127/72 + 113/64 + 16/9 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_shri_rag.scl b/scales/dudon_shri_rag.scl new file mode 100644 index 0000000..8e1309e --- /dev/null +++ b/scales/dudon_shri_rag.scl @@ -0,0 +1,18 @@ +! dudon_shri_rag.scl +! +Sunset indian raga (Purvi Thaat), as modeled from a 19-limit Amlak sequence + 12 +! + 20/19 + 161/152 + 191/152 + 24/19 + 107/76 + 27/19 + 3/2 + 30/19 + 19/12 + 575/304 + 36/19 + 2/1 +! Dudon 2002 diff --git a/scales/dudon_shur.scl b/scales/dudon_shur.scl new file mode 100644 index 0000000..fc48791 --- /dev/null +++ b/scales/dudon_shur.scl @@ -0,0 +1,18 @@ +! dudon_shur.scl +! +Shur Dastgah -c version, modelisation by Dudon (1990) + 12 +! + 13/12 + 59/54 + 32/27 + 65/54 + 4/3 + 1/1 + 3/2 + 13/8 + 44/27 + 16/9 + 97/54 + 2/1 +! The Shur tonic is C diff --git a/scales/dudon_siam_97.scl b/scales/dudon_siam_97.scl new file mode 100644 index 0000000..037f098 --- /dev/null +++ b/scales/dudon_siam_97.scl @@ -0,0 +1,18 @@ +! dudon_siam_97.scl +! +Black keys = 5 quasi-edo ; White keys = 7 quasi-edo (Dudon 1997) + 12 +! + 49/48 + 53/48 + 169/144 + 39/32 + 3101/2304 + 97/72 + 107/72 + 223/144 + 105/64 + 16/9 + 29/16 + 2/1 +! one common note in F / F# diff --git a/scales/dudon_simdek.scl b/scales/dudon_simdek.scl new file mode 100644 index 0000000..03ee8da --- /dev/null +++ b/scales/dudon_simdek.scl @@ -0,0 +1,19 @@ +! dudon_simdek.scl +! +Heptatonic scale from a sequence of Simdek very low fifths (in theory 676,48557456 c.) + 12 +! + 769/621 + 704/621 + 280/207 + 769/621 + 280/207 + 1040/621 + 34/23 + 1136/621 + 1040/621 + 2/1 + 1136/621 + 2/1 +! Simdek differential-coherent recurrent sequence 8x^2 - 16 = x, Dudon 2007 +! probably near the limit between Thai heptaphone and Indonesian Pelog diff --git a/scales/dudon_sireine_f.scl b/scales/dudon_sireine_f.scl new file mode 100644 index 0000000..9fdf3b8 --- /dev/null +++ b/scales/dudon_sireine_f.scl @@ -0,0 +1,20 @@ +! dudon_sireine_f.scl +! +Sequence of 11 Sireine fifths (exactly 691.2348426 c.) from F + 12 +! + 10503/10304 + 1431/1288 + 23157/20608 + 3179/2576 + 216/161 + 63/46 + 240/161 + 7807/5152 + 2133/1288 + 34191/20608 + 4737/2576 + 2/1 +! Sireine recurrent sequence x^4 = 3x^3 - 5 +! Triple equal-beating on all minor triads : 10 - 3x^3 = 5 - x^4 = 3x^3 - 2x^4 +! Dudon 2006 diff --git a/scales/dudon_skisni.scl b/scales/dudon_skisni.scl new file mode 100644 index 0000000..28ee631 --- /dev/null +++ b/scales/dudon_skisni.scl @@ -0,0 +1,21 @@ +! dudon_skisni.scl +! +Triple equal-beating sequence of 11 quasi-1/5 Pythagorean comma meantone fifths + 12 +! + 3480/3321 + 3716/3321 + 3968/3321 + 4158/3321 +4440/3321 + 9305/6642 + 4968/3321 + 5206/3321 + 5559/3321 + 5936/3321 + 6220/3321 + 2/1 +! 2 x^4 = x^3 + 4 +! -c and eq-b Skisni meantone recurrent sequence, Dudon 2006 +! triple equal-beating of all possible major triads : 4E - 5C = 3G - 2C = (3/8)E - (5/4)G etc. +! proportional fifths beatings from Eb = 16 24 36 27 40 60 90 136 200 300 448 diff --git a/scales/dudon_skisni_hwt.scl b/scales/dudon_skisni_hwt.scl new file mode 100644 index 0000000..ed89589 --- /dev/null +++ b/scales/dudon_skisni_hwt.scl @@ -0,0 +1,22 @@ +! dudon_skisni_hwt.scl +! +Triple equal-beating sequence from C to B, optimal major chords on white keys + 12 +! + 256/243 + 573/512 + 32/27 + 641/512 + 4/3 + 1024/729 + 383/256 + 128/81 + 857/512 + 16/9 + 959/512 + 2/1 +! 2 x^4 = x^3 + 4 +! Skisni triple equal-beating and -c quasi-1/5 Pyth.c meantone sequence, Dudon 2006 : +! 4E - 5C = 3G - 2C = (3/8)E - (5/4)G, 4B - 5G = 6D - 2G = (3/8)B - (5/2)D +! fifths beatings from C : 2 3 5 7 10 +! (other version of Kellner 1/5 Pyth.c.wt by changing 959/512 to 1923/1024) diff --git a/scales/dudon_slendra.scl b/scales/dudon_slendra.scl new file mode 100644 index 0000000..a6e3a40 --- /dev/null +++ b/scales/dudon_slendra.scl @@ -0,0 +1,20 @@ +! dudon_slendra.scl +! +Cylf-scale (Baka pentatonic Slendro plus pure fifths) + 12 +! + 112/111 + 212/185 + 644/555 + 244/185 + 736/555 + 4/3 + 56/37 + 846/555 + 322/185 + 976/555 + 368/185 + 2/1 +! Slendra and Baka -c recurrent sequences, x^5 = x^4 + 1/4 and 6x^2 - 6x = 1 +! original scale : 106 122 140 161 185 +! Fleurs de Lumiere, Dudon 1990 diff --git a/scales/dudon_slendro_m-mean.scl b/scales/dudon_slendro_m-mean.scl new file mode 100644 index 0000000..2b02950 --- /dev/null +++ b/scales/dudon_slendro_m-mean.scl @@ -0,0 +1,19 @@ +! dudon_slendro_m-mean.scl +! +Wilson meantone from Bb to F# extended in a Slendro M on black keys + 12 +! + 2689/2576 + 359/322 + 55/46 + 803/644 + 215/161 + 32/23 + 481/322 + 36/23 + 537/322 + 288/161 + 1199/644 + 2/1 +! Erv Wilson Meta-meantone, x^4 = 2x + 2 +! Slendro_M -c version = 385 7 63 9 2689 (> 63 7 9 385), Dudon 1992 diff --git a/scales/dudon_slendro_matrix.scl b/scales/dudon_slendro_matrix.scl new file mode 100644 index 0000000..54c41ad --- /dev/null +++ b/scales/dudon_slendro_matrix.scl @@ -0,0 +1,19 @@ +! dudon_slendro_matrix.scl +! +Ten tones for many 7-limit slendros from Lou Harrison, of the five types N, M, A, S, J + 12 +! + 1/1 + 8/7 + 8/7 + 64/49 + 21/16 + 4/3 + 3/2 + 32/21 + 12/7 + 256/147 + 7/4 + 2/1 +! +! described in "Seven-Limit Slendro Mutations", Jacques Dudon 1/1 8:2 Jan 1994 diff --git a/scales/dudon_smallest_numbers.scl b/scales/dudon_smallest_numbers.scl new file mode 100644 index 0000000..375238b --- /dev/null +++ b/scales/dudon_smallest_numbers.scl @@ -0,0 +1,18 @@ +! dudon_smallest_numbers.scl +! +Chromatic scale achieved with smallest possible numbers + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 43/32 + 45/32 + 3/2 + 51/32 + 27/16 + 57/32 + 15/8 + 2/1 +! Dudon 1984 diff --git a/scales/dudon_soria.scl b/scales/dudon_soria.scl new file mode 100644 index 0000000..c9fd8c8 --- /dev/null +++ b/scales/dudon_soria.scl @@ -0,0 +1,23 @@ +! dudon_soria.scl +! +12 from a 17-notes cycle, equal-beating extended fifths (705.5685 c.) sequence + 12 +! + 481/445 + 4011/3560 + 2067/1780 + 1133/890 + 9503/7120 + 128/89 + 533/356 + 723/445 + 754/445 + 1233/712 + 1703/890 + 2/1 +! Airos recurrent sequence x^3 = 13 - 8x, Dudon 2008 +! Eq-b of fourths, and septimal minor thirds with harmonic 7ths : +! 8(4 - 3x) = 3x^3 - 7 = (32x^3 - 56x)/13 +! Airos fourths of 494.4315 c. (approx. 640/481), +! cycle here starting from the neutral sixth (A-koron = 723/445) +! -c with the 13th harmonic : (13 * 890) - 9503 = 2067, etc. diff --git a/scales/dudon_soria12.scl b/scales/dudon_soria12.scl new file mode 100644 index 0000000..e49180a --- /dev/null +++ b/scales/dudon_soria12.scl @@ -0,0 +1,23 @@ +! dudon_soria12.scl +! +12 from a 17-notes cycle, equal-beating extended fifths (705.5685 c.) sequence + 12 +! + 959/886 + 15995/14176 + 8345/7088 + 2259/1772 + 37727/28352 + 638/443 + 5319/3544 + 2883/1772 + 1503/886 + 12443/7088 + 6791/3544 + 2/1 +! Airos recurrent sequence x^3 = 13 - 8x, Dudon 2008 +! Eq-b of fourths, and septimal minor thirds with harmonic 7ths : +! 8(4 - 3x) = 3x^3 - 7 = (32x^3 - 56x)/13 +! Airos fourths of 494.4315 c. (approx. 1276/959), +! cycle here starting from the neutral sixth (A koron = 2883/1772) +! -c with the 13th harmonic : (13 * 2883) - (32 * 959) = 6791, etc. diff --git a/scales/dudon_sumer.scl b/scales/dudon_sumer.scl new file mode 100644 index 0000000..511d346 --- /dev/null +++ b/scales/dudon_sumer.scl @@ -0,0 +1,19 @@ +! dudon_sumer.scl +! +Neutral diatonic soft Rast scale with Ishku -c variations + 12 +! + 79/72 + 10/9 + 11/9 + 89/72 + 4/3 + 49/36 + 3/2 + 119/72 + 5/3 + 131/72 + 11/6 + 2/1 +! Ishku -c recurrent sequence, 8x2 - 8x = 1 +! Dudon 1991 diff --git a/scales/dudon_synch12.scl b/scales/dudon_synch12.scl new file mode 100644 index 0000000..d14cc03 --- /dev/null +++ b/scales/dudon_synch12.scl @@ -0,0 +1,19 @@ +! dudon_synch12.scl +! +Synchronous-beating alternative to 12-tET, cycle of fourths beats from C:F = 1 2 1 1 2 4 3 6 8 8 8 32 + 12 +! + 373/352 + 395/352 + 419/352 + 887/704 + 235/176 + 249/176 + 527/352 + 559/352 + 37/22 + 157/88 + 1329/704 + 2/1 +! +! 704 746 790 838 887 940 996 1054 1118 1184 1256 1329 \ No newline at end of file diff --git a/scales/dudon_tango.scl b/scales/dudon_tango.scl new file mode 100644 index 0000000..ca8e75b --- /dev/null +++ b/scales/dudon_tango.scl @@ -0,0 +1,20 @@ +! dudon_tango.scl +! +Fractal Melkis lowest numbers HWT fifths sequence, from D + 12 +! + 203/192 + 9/8 + 19/16 + 241/192 + 4/3 + 361/256 + 3/2 + 19/12 + 643/384 + 57/32 + 361/192 + 2/1 +! Melkis recurrent sequence x^4 = 2x + 1/2 (-c of 9 minor thirds) +! recommanded diatonic major = in C +! Dudon 1992 diff --git a/scales/dudon_thai.scl b/scales/dudon_thai.scl new file mode 100644 index 0000000..750e6ba --- /dev/null +++ b/scales/dudon_thai.scl @@ -0,0 +1,12 @@ +! dudon_thai.scl +! +Dudon, coherent Thai heptatonic scale, 1/1 vol. 11/2, 2003 + 7 +! + 11266/10225 + 12414/10225 + 13696/10225 + 60417/40900 + 16656/10225 + 18368/10225 + 2/1 diff --git a/scales/dudon_thai2.scl b/scales/dudon_thai2.scl new file mode 100644 index 0000000..18294f3 --- /dev/null +++ b/scales/dudon_thai2.scl @@ -0,0 +1,12 @@ +! dudon_thai2.scl +! +Slightly better version, 3.685 cents deviation + 7 +! + 120/109 + 131/109 + 1157/872 + 1277/872 + 176/109 + 12675/6976 + 2/1 diff --git a/scales/dudon_thai3.scl b/scales/dudon_thai3.scl new file mode 100644 index 0000000..13e884b --- /dev/null +++ b/scales/dudon_thai3.scl @@ -0,0 +1,12 @@ +! dudon_thai3.scl +! +Dudon, Thai scale with two 704/703 = 2.46 c. deviations and simpler numbers + 7 +! + 107/96 + 59/48 + 65/48 + 193/128 + 319/192 + 703/384 + 2/1 diff --git a/scales/dudon_tibet.scl b/scales/dudon_tibet.scl new file mode 100644 index 0000000..4024a2f --- /dev/null +++ b/scales/dudon_tibet.scl @@ -0,0 +1,18 @@ +! dudon_tibet.scl +! +Differentially coherent minor pentatonic + 12 +! + 1/1 + 38/31 + 157/128 + 4/3 + 166/124 + 167/124 + 3/2 + 3/2 + 3/2 + 56/31 + 29/16 + 2/1 +! Dudon 2009 diff --git a/scales/dudon_tielenka.scl b/scales/dudon_tielenka.scl new file mode 100644 index 0000000..ba3c258 --- /dev/null +++ b/scales/dudon_tielenka.scl @@ -0,0 +1,17 @@ +! dudon_tielenka.scl +! +Tielenka (Romanian harmonic flute) scale JI imitation, Dudon (2009) + 12 +! + 1/1 + 162/143 + 1341/1144 + 5/4 + 2/1 + 18/13 + 3/2 + 18/11 + 7/4 + 252/143 + 270/143 + 2/1 diff --git a/scales/dudon_timbila.scl b/scales/dudon_timbila.scl new file mode 100644 index 0000000..174b541 --- /dev/null +++ b/scales/dudon_timbila.scl @@ -0,0 +1,19 @@ +! dudon_timbila.scl +! +Bala tuning whole tone intervals -c heptaphone + 12 +! + 1/1 + 107/97 + 107/97 + 118/97 + 130/97 + 1041/776 + 287/194 + 144/97 + 639/388 + 639/388 + 176/97 + 2/1 +! based on Fong fractal algorithm : x^3 - x^2 = 1/8 +! Dudon 1991 diff --git a/scales/dudon_tit_fleur.scl b/scales/dudon_tit_fleur.scl new file mode 100644 index 0000000..8dbb52b --- /dev/null +++ b/scales/dudon_tit_fleur.scl @@ -0,0 +1,20 @@ +! dudon_tit_fleur.scl +! +Differentially coherent semi-neutral diatonic, small numbers + 12 +! + 43/39 + 29/26 + 16/13 + 129/104 + 4/3 + 58/39 + 3/2 + 64/39 + 43/26 + 11/6 + 24/13 + 2/1 +! +! 78 86-87 96-96.75 104 116-117 128-129 143-144 156 +! Dudon 1985 diff --git a/scales/dudon_todi.scl b/scales/dudon_todi.scl new file mode 100644 index 0000000..2e56d47 --- /dev/null +++ b/scales/dudon_todi.scl @@ -0,0 +1,18 @@ +! dudon_todi.scl +! +Morning Thaat raga (with G = Todi ; without G = Gujari Todi) +! -c modeling by Dudon 2005 + 12 +! + 20/19 + 161/152 + 45/38 + 19/16 + 215/152 + 27/19 + 3/2 + 30/19 + 1935/1216 + 2297/1216 + 36/19 + 2/1 diff --git a/scales/dudon_tsaharuk24.scl b/scales/dudon_tsaharuk24.scl new file mode 100644 index 0000000..5968680 --- /dev/null +++ b/scales/dudon_tsaharuk24.scl @@ -0,0 +1,29 @@ +! dudon_tsaharuk24.scl +! +Rational version of Tsaharuk linear temperament +24 +! +28/27 +59/56 +35/32 +9/8 +7/6 +32/27 +59/48 +5/4 +35/27 +4/3 +112/81 +59/42 +35/24 +3/2 +14/9 +128/81 +59/36 +27/16 +7/4 +16/9 +59/32 +15/8 +35/18 +2/1 diff --git a/scales/dudon_valiha.scl b/scales/dudon_valiha.scl new file mode 100644 index 0000000..3a08595 --- /dev/null +++ b/scales/dudon_valiha.scl @@ -0,0 +1,20 @@ +! dudon_valiha.scl +! +Typical Malagasy scale, neutral diatonic, equal-beating on minor triads + 12 +! + 1/1 + 1431/1288 + 1431/1288 + 3179/2576 + 216/161 + 216/161 + 240/161 + 240/161 + 2133/1288 + 34191/20608 + 4737/2576 + 2/1 +! Sequence of 6 Sireine fifths (average 691.2348426 c.) from F +! Sireine recurrent sequence x^4 = 3x^3 - 5 Dudon 2006 +! Triple equal-beating on all minor triads : 10 - 3x^3 = 5 - x^4 = 3x^3 - 2x^4 diff --git a/scales/dudon_werckmeister3_eb.scl b/scales/dudon_werckmeister3_eb.scl new file mode 100644 index 0000000..a833563 --- /dev/null +++ b/scales/dudon_werckmeister3_eb.scl @@ -0,0 +1,21 @@ +! dudon_werckmeister3_eb.scl +! +Harmonic equal-beating version of the famous well-temperament (2006) + 12 +! + 256/243 + 21995/19683 + 32/27 + 2740/2187 + 4/3 + 1024/729 + 9808/6561 + 128/81 + 10960/6561 + 16/9 + 1370/729 + 2/1 +! achieved with Comptine recurrent sequence x^3 = (3/5)x^2 + 2 +! (x = 1.494929263 or 696.09266484 c.), Dudon 2006 +! triple equal-beating property : 3A - 5C = 4E - 5C = 3D - 2A +! (and actually a pertinent verification when tuning WIII by ear) diff --git a/scales/dudon_x-slen_31.scl b/scales/dudon_x-slen_31.scl new file mode 100644 index 0000000..960c07b --- /dev/null +++ b/scales/dudon_x-slen_31.scl @@ -0,0 +1,36 @@ +! dudon_x-slen_31.scl +! +X-slen fractal temperament, sequence of 420 to 1600 + 31 +! + 41/40 + 1171/1120 + 15/14 + 153/140 + 251/224 + 8/7 + 41/35 + 1339/1120 + 49/40 + 5/4 + 41/32 + 209/160 + 75/56 + 153/112 + 7/5 + 10/7 + 41/28 + 3/2 + 857/560 + 439/280 + 8/5 + 459/280 + 937/560 + 12/7 + 7/4 + 251/140 + 64/35 + 15/8 + 153/80 + 549/280 + 2/1 diff --git a/scales/dudon_zinith.scl b/scales/dudon_zinith.scl new file mode 100644 index 0000000..7174f31 --- /dev/null +++ b/scales/dudon_zinith.scl @@ -0,0 +1,25 @@ +! dudon_zinith.scl +! +Dudon's "Zinith" generator, (sqrt(3)+1)/2, TL 30-03-2009 + 20 +! + 59.83059 + 120.03765 + 179.86823 + 239.69882 + 299.90588 + 359.73647 + 419.94353 + 479.77411 + 539.98118 + 599.81176 + 660.01882 + 719.84941 + 780.05647 + 839.88706 + 899.71764 + 959.92470 + 1019.75529 + 1079.96235 + 1139.79294 + 2/1 diff --git a/scales/dudon_ziraat.scl b/scales/dudon_ziraat.scl new file mode 100644 index 0000000..10be2a5 --- /dev/null +++ b/scales/dudon_ziraat.scl @@ -0,0 +1,15 @@ +! dudon_ziraat.scl +! +Dudon's "Zira'at" generator, sqrt(3)+2, TL 30-03-2009 + 10 +! + 119.66117 + 239.69882 + 359.73647 + 479.77411 + 599.81176 + 719.84941 + 839.88706 + 959.92470 + 1079.96235 + 2/1 diff --git a/scales/dudon_zurna.scl b/scales/dudon_zurna.scl new file mode 100644 index 0000000..046e499 --- /dev/null +++ b/scales/dudon_zurna.scl @@ -0,0 +1,17 @@ +! dudon_zurna.scl +! +Quartertone scale with tonic transposition on a turkish segah of 159/128 + 12 +! + 3/2 + 172/159 + 128/159 + 64/53 + 66/53 + 70/53 + 238/159 + 256/159 + 86/53 + 278/159 + 280/159 + 2/1 diff --git a/scales/duncan.scl b/scales/duncan.scl new file mode 100644 index 0000000..d11c608 --- /dev/null +++ b/scales/duncan.scl @@ -0,0 +1,17 @@ +! duncan.scl +! +Dudley Duncan's Superparticular Scale + 12 +! + 17/16 + 9/8 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/duoden12.scl b/scales/duoden12.scl new file mode 100644 index 0000000..3a02d0b --- /dev/null +++ b/scales/duoden12.scl @@ -0,0 +1,17 @@ +! duoden12.scl +! +Almost equal 12-tone subset of Duodenarium + 12 +! + 135/128 + 9/8 + 1215/1024 + 512/405 + 4/3 + 64/45 + 3/2 + 405/256 + 2048/1215 + 3645/2048 + 256/135 + 2/1 diff --git a/scales/duodenarium.scl b/scales/duodenarium.scl new file mode 100644 index 0000000..07856e4 --- /dev/null +++ b/scales/duodenarium.scl @@ -0,0 +1,122 @@ +! duodenarium.scl +! +Ellis's Duodenarium : genus [3^12 5^8] + 117 +! + 2048/2025 + 81/80 + 128/125 + 250/243 + 16875/16384 + 648/625 + 25/24 + 273375/262144 + 256/243 + 135/128 + 16/15 + 2187/2048 + 32768/30375 + 27/25 + 625/576 + 2048/1875 + 2187/2000 + 1125/1024 + 10/9 + 18225/16384 + 9/8 + 256/225 + 729/640 + 144/125 + 125/108 + 151875/131072 + 729/625 + 75/64 + 32/27 + 1215/1024 + 6/5 + 4096/3375 + 243/200 + 625/512 + 768/625 + 100/81 + 10125/8192 + 5/4 + 512/405 + 81/64 + 32/25 + 625/486 + 65536/50625 + 162/125 + 125/96 + 1366875/1048576 + 320/243 + 675/512 + 4/3 + 10935/8192 + 8192/6075 + 27/20 + 512/375 + 2187/1600 + 5625/4096 + 864/625 + 25/18 + 91125/65536 + 45/32 + 64/45 + 729/512 + 36/25 + 625/432 + 8192/5625 + 729/500 + 375/256 + 40/27 + 6075/4096 + 3/2 + 1024/675 + 243/160 + 192/125 + 125/81 + 50625/32768 + 972/625 + 25/16 + 128/81 + 405/256 + 8/5 + 16384/10125 + 81/50 + 625/384 + 1024/625 + 400/243 + 3375/2048 + 5/3 + 54675/32768 + 2048/1215 + 27/16 + 128/75 + 2187/1280 + 262144/151875 + 216/125 + 125/72 + 455625/262144 + 2187/1250 + 225/128 + 16/9 + 3645/2048 + 9/5 + 2048/1125 + 729/400 + 1875/1024 + 1152/625 + 50/27 + 30375/16384 + 15/8 + 256/135 + 243/128 + 48/25 + 625/324 + 32768/16875 + 243/125 + 125/64 + 160/81 + 2025/1024 + 2/1 diff --git a/scales/duodene.scl b/scales/duodene.scl new file mode 100644 index 0000000..157ec96 --- /dev/null +++ b/scales/duodene.scl @@ -0,0 +1,17 @@ +! duodene.scl +! +Ellis's Duodene : genus [33355] + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/duodene14-18-21.scl b/scales/duodene14-18-21.scl new file mode 100644 index 0000000..c513a57 --- /dev/null +++ b/scales/duodene14-18-21.scl @@ -0,0 +1,17 @@ +! duodene14-18-21.scl +! +14-18-21 Duodene + 12 +! + 28/27 + 9/8 + 7/6 + 9/7 + 4/3 + 81/56 + 3/2 + 14/9 + 12/7 + 7/4 + 27/14 + 2/1 diff --git a/scales/duodene3-11_9.scl b/scales/duodene3-11_9.scl new file mode 100644 index 0000000..944f879 --- /dev/null +++ b/scales/duodene3-11_9.scl @@ -0,0 +1,17 @@ +! duodene3-11_9.scl +! +3-11/9 Duodene + 12 +! + 12/11 + 9/8 + 11/9 + 27/22 + 4/3 + 11/8 + 3/2 + 44/27 + 18/11 + 11/6 + 81/44 + 2/1 diff --git a/scales/duodene6-7-9.scl b/scales/duodene6-7-9.scl new file mode 100644 index 0000000..eaccb84 --- /dev/null +++ b/scales/duodene6-7-9.scl @@ -0,0 +1,17 @@ +! DUODENE6-7-9.scl +! +6-7-9 Duodene + 12 +! + 9/8 + 8/7 + 7/6 + 9/7 + 21/16 + 4/3 + 3/2 + 14/9 + 12/7 + 7/4 + 27/14 + 2/1 diff --git a/scales/duodene_double.scl b/scales/duodene_double.scl new file mode 100644 index 0000000..385ec23 --- /dev/null +++ b/scales/duodene_double.scl @@ -0,0 +1,29 @@ +! duodene_double.scl +! +Ellis's Duodene union 11/9 times the duodene in 240-tET + 24 +! + 35.00000 + 115.00000 + 165.00000 + 200.00000 + 235.00000 + 315.00000 + 350.00000 + 385.00000 + 465.00000 + 500.00000 + 550.00000 + 585.00000 + 665.00000 + 700.00000 + 735.00000 + 815.00000 + 850.00000 + 885.00000 + 935.00000 + 1015.00000 + 1050.00000 + 1085.00000 + 1165.00000 + 2/1 diff --git a/scales/duodene_min.scl b/scales/duodene_min.scl new file mode 100644 index 0000000..b7819d9 --- /dev/null +++ b/scales/duodene_min.scl @@ -0,0 +1,17 @@ +! duodene_min.scl +! +Minor Duodene + 12 +! + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 27/20 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/duodene_r-45.scl b/scales/duodene_r-45.scl new file mode 100644 index 0000000..18840be --- /dev/null +++ b/scales/duodene_r-45.scl @@ -0,0 +1,17 @@ +! duodene_r-45.scl +! +Ellis's Duodene rotated -45 degrees + 12 +! + 16/15 + 9/8 + 6/5 + 32/25 + 27/20 + 36/25 + 192/125 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/duodene_r45.scl b/scales/duodene_r45.scl new file mode 100644 index 0000000..51aaf6d --- /dev/null +++ b/scales/duodene_r45.scl @@ -0,0 +1,17 @@ +! duodene_r45.scl +! +Ellis's Duodene rotated 45 degrees + 12 +! + 135/128 + 16/15 + 9/8 + 6/5 + 32/25 + 375/256 + 25/16 + 5/3 + 225/128 + 16/9 + 15/8 + 2/1 diff --git a/scales/duodene_skew.scl b/scales/duodene_skew.scl new file mode 100644 index 0000000..515470f --- /dev/null +++ b/scales/duodene_skew.scl @@ -0,0 +1,17 @@ +! duodene_skew.scl +! +Rotated 6/5x3/2 duodene + 12 +! + 27/25 + 10/9 + 6/5 + 5/4 + 4/3 + 36/25 + 3/2 + 8/5 + 5/3 + 9/5 + 48/25 + 2/1 diff --git a/scales/duodene_t.scl b/scales/duodene_t.scl new file mode 100644 index 0000000..eaef4f1 --- /dev/null +++ b/scales/duodene_t.scl @@ -0,0 +1,17 @@ +! duodene_t.scl +! +Duodene with equal tempered fifths + 12 +! + 113.68629 + 200.00000 + 313.68629 + 5/4 + 500.00000 + 586.31371 + 700.00000 + 8/5 + 886.31371 + 1013.68629 + 1086.31371 + 2/1 diff --git a/scales/duodene_w.scl b/scales/duodene_w.scl new file mode 100644 index 0000000..1388af6 --- /dev/null +++ b/scales/duodene_w.scl @@ -0,0 +1,17 @@ +! duodene_w.scl +! +Ellis duodene well-tuned to fifth=(7168/11)^(1/16) third=(11/7)^(1/2), G.W. Smith + 12 +! + 107.65973 + 202.18850 + 309.84823 + 391.24602 + 498.90575 + 593.43451 + 701.09425 + 808.75398 + 890.15177 + 1010.94248 + 1092.34027 + 2/1 diff --git a/scales/duohex.scl b/scales/duohex.scl new file mode 100644 index 0000000..ad04044 --- /dev/null +++ b/scales/duohex.scl @@ -0,0 +1,17 @@ +! duohex.scl +! +Scale with two hexanies, inverse mode of hahn_7.scl + 12 +! + 15/14 + 9/8 + 6/5 + 5/4 + 9/7 + 10/7 + 3/2 + 45/28 + 12/7 + 9/5 + 15/8 + 2/1 diff --git a/scales/dwarf11marv.scl b/scales/dwarf11marv.scl new file mode 100644 index 0000000..23c79c3 --- /dev/null +++ b/scales/dwarf11marv.scl @@ -0,0 +1,17 @@ +! dwarf11marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf(<11 17 26|) +11 +! +115.587047 +315.641287 +384.385833 +499.972880 +515.695527 +700.027120 +815.614167 +884.358713 +1015.668407 +1084.412953 +2/1 +! two tetrads/pentads representible by +! [[0, 0, 1], [0, 0, 2]] diff --git a/scales/dwarf12_11.scl b/scales/dwarf12_11.scl new file mode 100644 index 0000000..b6cceb2 --- /dev/null +++ b/scales/dwarf12_11.scl @@ -0,0 +1,17 @@ +! dwarf12_11.scl +! +Dwarf(<12 19 28 34 42|) two otonal hexads + 12 +! + 16/15 + 11/10 + 6/5 + 5/4 + 4/3 + 7/5 + 22/15 + 8/5 + 5/3 + 9/5 + 28/15 + 2/1 diff --git a/scales/dwarf12_7.scl b/scales/dwarf12_7.scl new file mode 100644 index 0000000..b0138d1 --- /dev/null +++ b/scales/dwarf12_7.scl @@ -0,0 +1,16 @@ +! dwarf12_7.scl +Dwarf(<12 19 28 34|) five major triads, four minor triads two otonal pentads +12 +! +16/15 +9/8 +6/5 +5/4 +4/3 +7/5 +3/2 +8/5 +5/3 +9/5 +28/15 +2/1 diff --git a/scales/dwarf12marv.scl b/scales/dwarf12marv.scl new file mode 100644 index 0000000..baa3b9d --- /dev/null +++ b/scales/dwarf12marv.scl @@ -0,0 +1,18 @@ +! dwarf12marv.scl +Marvelous dwarf: 1/4 kleismic tempered duodene +12 +! +131.309694 +200.054240 +315.641287 +431.228334 +515.695527 +631.282574 +700.027120 +815.614167 +900.081360 +1015.668407 +1131.255454 +2/1 +! four tetrads/pentads representible by +! [[-1, 1, 2], [-1, 2, 2], [-1, 1, 1], [-2, 1, -1]] diff --git a/scales/dwarf13marv.scl b/scales/dwarf13marv.scl new file mode 100644 index 0000000..5a1738f --- /dev/null +++ b/scales/dwarf13marv.scl @@ -0,0 +1,19 @@ +! dwarf13marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf(<13 20 30|) +13 +! +200.054240 +268.798786 +315.641287 +384.385833 +431.228334 +631.282574 +700.027120 +768.771666 +815.614167 +1015.668407 +1084.412953 +1131.255454 +2/1 +! two tetrads/pentads representible by +! [[-1, 1, 2], [-1, 1, 2]] diff --git a/scales/dwarf14block.scl b/scales/dwarf14block.scl new file mode 100644 index 0000000..0c35e2d --- /dev/null +++ b/scales/dwarf14block.scl @@ -0,0 +1,20 @@ +! dwarf14block.scl +! +Weak Fokker block tweaked from Dwarf(<14 23 36 40|) +! <<1 4 6 4 7 4||: -6 to 7; <<3 -2 4 -11 -2 16||: -5 to 8; <<5 6 2 -3 -11 -12||: -8 to 5 +14 +! +8/7 +7/6 +6/5 +4/3 +7/5 +3/2 +14/9 +8/5 +49/30 +5/3 +12/7 +7/4 +9/5 +2/1 diff --git a/scales/dwarf14marv.scl b/scales/dwarf14marv.scl new file mode 100644 index 0000000..eba1ec5 --- /dev/null +++ b/scales/dwarf14marv.scl @@ -0,0 +1,20 @@ +! dwarf14marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf(<14 22 33}) +14 +! +200.054240 +315.641287 +384.385833 +431.228334 +584.440073 +631.282574 +700.027120 +768.771666 +815.614167 +1015.668407 +1084.412953 +1131.255454 +1153.157499 +2/1 +! four tetrad/pentads representible by +! [[0, 1, 2], [-1, 1, 2], [-1, 0, -1], [-1, 1, 1]] diff --git a/scales/dwarf15marv.scl b/scales/dwarf15marv.scl new file mode 100644 index 0000000..aa289b8 --- /dev/null +++ b/scales/dwarf15marv.scl @@ -0,0 +1,21 @@ +! dwarf15marv.scl +Marvelous dwarf: 1/4 kleismic dwarf(<15 24 35|) subset rosatimarv +15 +! +115.587047 +184.331593 +200.054240 +315.641287 +384.385833 +499.972880 +584.440073 +615.559927 +700.027120 +815.614167 +884.358713 +999.945760 +1015.668407 +1084.412953 +2/1 +! six tetrads/pentads representible by +! [[-1, 0, -1], [0, -1, 0], [0, -1, 1], [0, 0, 1], [0, 0, 2], [0, 1, 2]] diff --git a/scales/dwarf16marv.scl b/scales/dwarf16marv.scl new file mode 100644 index 0000000..cb1470c --- /dev/null +++ b/scales/dwarf16marv.scl @@ -0,0 +1,22 @@ +! dwarf16marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf(<16 25 37|) +16 +! +15.722647 +68.744546 +115.587047 +184.331593 +315.641287 +384.385833 +499.972880 +515.695527 +568.717426 +615.559927 +768.771666 +815.614167 +884.358713 +999.945760 +1015.668407 +2/1 +! four tetrads/pentads representible by +! [[0, -1, 1], [1, -1, 1], [0, -1, 0], [1, -1, 2]] diff --git a/scales/dwarf17marv.scl b/scales/dwarf17marv.scl new file mode 100644 index 0000000..86abb99 --- /dev/null +++ b/scales/dwarf17marv.scl @@ -0,0 +1,22 @@ +! dwarf17marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf(<17 27 40|) +17 +! +68.744546 +115.587047 +184.331593 +268.798786 +315.641287 +384.385833 +499.972880 +568.717426 +615.559927 +700.027120 +768.771666 +815.614167 +884.358713 +953.103259 +999.945760 +1084.412953 +2/1 +! eight tetrads/pentads, representible by [[0, -1, 0], [0, -1, 1], ! [1, -1, 1], [1, -1, 2], [0, 0, 2], [0, -1, -2], [0, 0, 1], [0, -1, -1]] diff --git a/scales/dwarf17marveq.scl b/scales/dwarf17marveq.scl new file mode 100644 index 0000000..ea86db8 --- /dev/null +++ b/scales/dwarf17marveq.scl @@ -0,0 +1,23 @@ +! dwarf17marveq.scl +! +Semimarvelous dwarf: equal beating dwarf(<17 27 40|) + 17 +! +70.247930173690388400 +115.13195688812420070 +185.37988706181458910 +269.90670087373119520 +314.79072758816500750 +385.03865776185539590 +500.17061464997959660 +570.41854482366998500 +615.30257153810379730 +699.82938535002040340 +770.07731552371079180 +814.96134223814460410 +885.20927241183499250 +955.45720258552538090 +1000.3412292999591932 +1084.8680431118757993 +2/1 +! eight tetrads/pentads, representible by [[0, -1, 0], [0, -1, 1], ! [1, -1, 1], [1, -1, 2], [0, 0, 2], [0, -1, -2], [0, 0, 1], [0, -1, -1]] diff --git a/scales/dwarf18marv.scl b/scales/dwarf18marv.scl new file mode 100644 index 0000000..aafd2b2 --- /dev/null +++ b/scales/dwarf18marv.scl @@ -0,0 +1,23 @@ +! dwarf18marv.scl +Marvelous dwarf: 1/4 kleismic dwarf(<18 29 42|) +18 +! +15.722647 +115.587047 +131.309694 +200.054240 +315.641287 +400.108480 +431.228334 +499.972880 +515.695527 +631.282574 +700.027120 +815.614167 +831.336814 +900.081360 +931.201214 +1015.668407 +1131.255454 +2/1 +! eight tetrads/pentads representible by [[-1, 1, 2], [-1, 1, 1], ! [-2, 1, -1], [-1, 2, 2], [-1, 0, 0], [-2, 2, -1], [-1, 0, 1], [-2, 2, 0]] diff --git a/scales/dwarf19_43.scl b/scales/dwarf19_43.scl new file mode 100644 index 0000000..a5d6c5b --- /dev/null +++ b/scales/dwarf19_43.scl @@ -0,0 +1,24 @@ +! dwarf19_43.scl +! +Dwarf scale for 43-limit patent val of 19-tET + 19 +! + 33/32 + 17/16 + 9/8 + 37/32 + 19/16 + 5/4 + 21/16 + 43/32 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/dwarf19marv.scl b/scales/dwarf19marv.scl new file mode 100644 index 0000000..b54df4c --- /dev/null +++ b/scales/dwarf19marv.scl @@ -0,0 +1,24 @@ +! dwarf19marv.scl +! +Marvelous dwarf: 1/4 kleismic dwarf(<19 30 44|) = inverse wilson1 + 19 +! + 68.74455 + 115.58705 + 200.05424 + 268.79879 + 6/5 + 384.38583 + 431.22833 + 499.97288 + 584.44007 + 36/25 + 700.02712 + 768.77167 + 815.61417 + 5/3 + 931.20121 + 1015.66841 + 1084.41295 + 1131.25545 + 2/1 diff --git a/scales/dwarf20marv.scl b/scales/dwarf20marv.scl new file mode 100644 index 0000000..1393682 --- /dev/null +++ b/scales/dwarf20marv.scl @@ -0,0 +1,25 @@ +! dwarf20marv.scl +Marvelous dwarf: 1/4 kleismic dwarf(<20 32 47|) = genus(3^4 5^3) +20 +! +68.744546 +184.331593 +253.076139 +299.918640 +368.663186 +384.385833 +453.130379 +499.972880 +568.717426 +684.304473 +753.049019 +768.771666 +799.891520 +884.358713 +953.103259 +999.945760 +1068.690306 +1153.157499 +1184.277353 +2/1 +! twelve tetrads/pentads representible by [[1, -1, 1], [2, -1, 2], [2, -2, 1], ! [1, -2, -1], [1, -2, 0], [2, -3, 0], [2, -3, 1], [1, -2, 1], [1, -3, 0], ! [1, -3, -1], [2, -2, 2], [1, -1, 2]] diff --git a/scales/dwarf21marv.scl b/scales/dwarf21marv.scl new file mode 100644 index 0000000..a46df37 --- /dev/null +++ b/scales/dwarf21marv.scl @@ -0,0 +1,26 @@ +! dwarf21marv.scl +Marvelous dwarf: 1/4 kleismic dwarf(<21 33 49|) +21 +! +68.744546 +184.331593 +200.054240 +268.798786 +299.918640 +368.663186 +384.385833 +499.972880 +568.717426 +584.440073 +684.304473 +700.027120 +768.771666 +799.891520 +884.358713 +968.825906 +999.945760 +1068.690306 +1084.412953 +1184.277353 +2/1 +! ten tetrads/pentads representible by [[0, 0, -1], [1, -2, 0], [1, -2, 1], [1, -1, 1], ! [0, -1, -1], [0, 0, 0],[0, -1, -2], [1, -3, 0], [1, -3, -1], [1, -1, 2]] diff --git a/scales/dwarf22marv.scl b/scales/dwarf22marv.scl new file mode 100644 index 0000000..65c1782 --- /dev/null +++ b/scales/dwarf22marv.scl @@ -0,0 +1,28 @@ +! dwarf22marv.scl +Semimarvelous dwarf: 1/4 kleismic dwarf22_5 and dwarf22_7 +22 +! +68.744546 +115.587047 +131.309694 +200.054240 +268.798786 +315.641287 +384.385833 +431.228334 +499.972880 +515.695527 +584.440073 +631.282574 +700.027120 +768.771666 +815.614167 +884.358713 +931.201214 +968.825906 +1015.668407 +1084.412953 +1131.255454 +2/1 +! twelve tetrads/pentads; can be represented by +! [[-1, 0, -1], [-1, 0, 0], [-1, 0, 1], [0, -1, -2], ! [0, -1, -1], [0, 0, -1], [0, 0, 0], [-1, 1, 1], ! [-1, 1, 2], [0, 0, 1], [0, 0, 2], [0, 1, 2]] diff --git a/scales/dwarf25marv.scl b/scales/dwarf25marv.scl new file mode 100644 index 0000000..4fa18de --- /dev/null +++ b/scales/dwarf25marv.scl @@ -0,0 +1,30 @@ +! dwarf25marv.scl +! +Marvelous dwarf: 1/4 kleismic dwarf(<25 40 58|) = genus(3^4 5^4) + 25 +! + 68.74455 + 115.58705 + 184.33159 + 253.07614 + 268.79879 + 299.91864 + 315.64129 + 384.38583 + 453.13038 + 499.97288 + 568.71743 + 615.55993 + 653.18462 + 684.30447 + 700.02712 + 768.77167 + 815.61417 + 884.35871 + 953.10326 + 999.94576 + 1068.69031 + 1084.41295 + 1115.53281 + 1153.15750 + 2/1 diff --git a/scales/dwarf271_bp.scl b/scales/dwarf271_bp.scl new file mode 100644 index 0000000..d8e870a --- /dev/null +++ b/scales/dwarf271_bp.scl @@ -0,0 +1,276 @@ +! dwarf271_bp.scl +! +Tritave dwarf(<171 271 397 480|) + 271 +! + 1600000/1594323 + 245/243 + 179200/177147 + 20000/19683 + 43904000/43046721 + 2240/2187 + 250/243 + 548800/531441 + 28/27 + 20480/19683 + 6860/6561 + 5017600/4782969 + 256/243 + 62500/59049 + 62720/59049 + 7000/6561 + 5120000/4782969 + 784/729 + 573440/531441 + 64000/59049 + 15625000/14348907 + 7168/6561 + 800/729 + 1756160/1594323 + 196000/177147 + 10/9 + 21952/19683 + 2450/2187 + 1792000/1594323 + 200000/177147 + 200704/177147 + 22400/19683 + 2500/2187 + 5488000/4782969 + 280/243 + 204800/177147 + 68600/59049 + 50176000/43046721 + 2560/2187 + 625000/531441 + 627200/531441 + 32/27 + 51200000/43046721 + 7840/6561 + 875/729 + 640000/531441 + 98/81 + 71680/59049 + 8000/6561 + 1953125/1594323 + 896/729 + 100/81 + 219520/177147 + 24500/19683 + 8192/6561 + 2744/2187 + 2007040/1594323 + 224000/177147 + 25000/19683 + 25088/19683 + 2800/2187 + 2048000/1594323 + 686000/531441 + 35/27 + 25600/19683 + 8575/6561 + 6272000/4782969 + 320/243 + 78125/59049 + 78400/59049 + 4/3 + 6400000/4782969 + 980/729 + 716800/531441 + 80000/59049 + 19531250/14348907 + 8960/6561 + 1000/729 + 2195200/1594323 + 112/81 + 81920/59049 + 27440/19683 + 20070400/14348907 + 1024/729 + 343/243 + 250880/177147 + 28000/19683 + 3125/2187 + 3136/2187 + 350/243 + 256000/177147 + 85750/59049 + 28672/19683 + 3200/2187 + 781250/531441 + 784000/531441 + 40/27 + 87808/59049 + 9800/6561 + 7168000/4782969 + 800000/531441 + 802816/531441 + 89600/59049 + 10000/6561 + 21952000/14348907 + 1120/729 + 125/81 + 274400/177147 + 14/9 + 10240/6561 + 3430/2187 + 2508800/1594323 + 128/81 + 31250/19683 + 31360/19683 + 3500/2187 + 2560000/1594323 + 392/243 + 286720/177147 + 32000/19683 + 7812500/4782969 + 3584/2187 + 400/243 + 878080/531441 + 98000/59049 + 5/3 + 10976/6561 + 1225/729 + 896000/531441 + 100000/59049 + 100352/59049 + 11200/6561 + 1250/729 + 2744000/1594323 + 140/81 + 102400/59049 + 34300/19683 + 25088000/14348907 + 1280/729 + 312500/177147 + 313600/177147 + 16/9 + 25600000/14348907 + 3920/2187 + 2867200/1594323 + 320000/177147 + 49/27 + 35840/19683 + 4000/2187 + 8780800/4782969 + 448/243 + 50/27 + 109760/59049 + 12250/6561 + 4096/2187 + 1372/729 + 1003520/531441 + 112000/59049 + 12500/6561 + 12544/6561 + 1400/729 + 1024000/531441 + 343000/177147 + 114688/59049 + 12800/6561 + 3125000/1594323 + 3136000/1594323 + 160/81 + 351232/177147 + 39200/19683 + 2/1 + 3200000/1594323 + 490/243 + 358400/177147 + 40000/19683 + 9765625/4782969 + 4480/2187 + 500/243 + 1097600/531441 + 56/27 + 40960/19683 + 13720/6561 + 10035200/4782969 + 512/243 + 125000/59049 + 125440/59049 + 14000/6561 + 10240000/4782969 + 1568/729 + 175/81 + 128000/59049 + 42875/19683 + 14336/6561 + 1600/729 + 390625/177147 + 392000/177147 + 20/9 + 43904/19683 + 4900/2187 + 3584000/1594323 + 400000/177147 + 401408/177147 + 44800/19683 + 5000/2187 + 10976000/4782969 + 560/243 + 409600/177147 + 137200/59049 + 7/3 + 5120/2187 + 1715/729 + 1254400/531441 + 64/27 + 15625/6561 + 15680/6561 + 1750/729 + 1280000/531441 + 196/81 + 143360/59049 + 16000/6561 + 3906250/1594323 + 1792/729 + 200/81 + 439040/177147 + 49000/19683 + 16384/6561 + 5488/2187 + 4014080/1594323 + 448000/177147 + 50000/19683 + 50176/19683 + 5600/2187 + 625/243 + 1372000/531441 + 70/27 + 51200/19683 + 17150/6561 + 12544000/4782969 + 640/243 + 156250/59049 + 156800/59049 + 8/3 + 12800000/4782969 + 1960/729 + 1433600/531441 + 160000/59049 + 39062500/14348907 + 17920/6561 + 2000/729 + 4390400/1594323 + 224/81 + 25/9 + 54880/19683 + 6125/2187 + 2048/729 + 686/243 + 501760/177147 + 56000/19683 + 6250/2187 + 6272/2187 + 700/243 + 512000/177147 + 171500/59049 + 57344/19683 + 6400/2187 + 1562500/531441 + 1568000/531441 + 80/27 + 175616/59049 + 19600/6561 + 3/1 diff --git a/scales/dwarf27_7tempered.scl b/scales/dwarf27_7tempered.scl new file mode 100644 index 0000000..95d7c6d --- /dev/null +++ b/scales/dwarf27_7tempered.scl @@ -0,0 +1,32 @@ +! dwarf27_7tempered.scl +! +Irregularly tempered dwarf(<27 43 63 76|) + 27 +! + 8.50411 + 44.05819 + 94.02735 + 155.44995 + 204.62445 + 239.75461 + 275.21962 + 300.57603 + 386.44020 + 410.42948 + 471.11121 + 506.30767 + 541.94592 + 591.15701 + 616.87618 + 702.25982 + 737.66181 + 772.99566 + 797.33536 + 857.59196 + 907.39146 + 969.00623 + 977.50974 + 1003.78401 + 1088.74607 + 1113.63615 + 2/1 diff --git a/scales/dwarf31_11.scl b/scales/dwarf31_11.scl new file mode 100644 index 0000000..1cc9ebb --- /dev/null +++ b/scales/dwarf31_11.scl @@ -0,0 +1,36 @@ +! dwarf31_11.scl +! +Dwarf(<31 49 72 87 107|) + 31 +! + 36/35 + 22/21 + 16/15 + 11/10 + 9/8 + 8/7 + 7/6 + 6/5 + 128/105 + 44/35 + 9/7 + 55/42 + 4/3 + 48/35 + 7/5 + 10/7 + 22/15 + 3/2 + 32/21 + 11/7 + 8/5 + 49/30 + 176/105 + 12/7 + 7/4 + 9/5 + 64/35 + 28/15 + 40/21 + 55/28 + 2/1 diff --git a/scales/dyadic53tone9div.scl b/scales/dyadic53tone9div.scl new file mode 100644 index 0000000..47000a1 --- /dev/null +++ b/scales/dyadic53tone9div.scl @@ -0,0 +1,58 @@ +! dyadic53tone9div.scl +! +from Philolaos tone-9-division 8:9=72:73:74:75:76:77:78:79:80:81 +53 +! +1039/1024 ! C\_ 519.5 +1053/1024 ! C__ 526.5 +2133/2048 ! C/_ 533.25 +135/128 ! _ C// 540 +547/512 ! _ Db\ +1109/1024 ! Db_ 554.5 +4495/4096 ! C#_ 561.675 +569/512 ! _ C#/ 568.5 +9/8 ! _ D\\ 72 +73/64 ! D\_ 73 +37/32 ! D__ 74 +75/64 ! D/_ 75 +19/16 ! D// 76 +77/64 ! Eb\ 77 +39/32 ! Eb_ 78 +79/64 ! D#_ 79 +5/4 ! _ D#/ 80 +81/64 ! E\\ 81 +657/512 ! E\ +333/256 ! E +675/512 ! E/ +683/512 ! E// = F\\ +693/512 ! F\ +351/256 ! F +711/512 ! F/ +45/32 ! _ F// +729/512 ! Gb\ 3^6 +2957/2048!Gb +2997/2048!F# +759/512 ! F#/ +3/2 ! _ _ G\\ +779/512 ! G\ +1579/1024!G +25/16 ! _ G/ +405/256 ! G// +821/512 ! Ab\ +13/8 +3371/2048 +1707/1024 +27/16 +219/128 +111/64 +225/128 +1823/1024 +231/128 +117/64 +237/128 +15/8 +243/128 +495/256 +999/512 +253/128 +2/1 diff --git a/scales/efg333.scl b/scales/efg333.scl new file mode 100644 index 0000000..d9b4a17 --- /dev/null +++ b/scales/efg333.scl @@ -0,0 +1,9 @@ +! efg333.scl +! +Genus primum [333] + 4 +! + 9/8 + 4/3 + 3/2 + 2/1 diff --git a/scales/efg333333333337.scl b/scales/efg333333333337.scl new file mode 100644 index 0000000..6f22e47 --- /dev/null +++ b/scales/efg333333333337.scl @@ -0,0 +1,29 @@ +! efg333333333337.scl +! +Genus [333333333337] + 24 +! + 137781/131072 + 2187/2048 + 567/512 + 9/8 + 1240029/1048576 + 19683/16384 + 5103/4096 + 81/64 + 21/16 + 177147/131072 + 45927/32768 + 729/512 + 189/128 + 3/2 + 413343/262144 + 6561/4096 + 1701/1024 + 27/16 + 7/4 + 59049/32768 + 15309/8192 + 243/128 + 63/32 + 2/1 diff --git a/scales/efg333333355.scl b/scales/efg333333355.scl new file mode 100644 index 0000000..1279989 --- /dev/null +++ b/scales/efg333333355.scl @@ -0,0 +1,29 @@ +! efg333333355.scl +! +Genus [333333355] + 24 +! + 81/80 + 135/128 + 16/15 + 10/9 + 9/8 + 1215/1024 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 3/2 + 243/160 + 405/256 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/efg33335.scl b/scales/efg33335.scl new file mode 100644 index 0000000..3799c4d --- /dev/null +++ b/scales/efg33335.scl @@ -0,0 +1,15 @@ +! efg33335.scl +! +Genus [33335] + 10 +! + 135/128 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/efg3333555.scl b/scales/efg3333555.scl new file mode 100644 index 0000000..0b3457f --- /dev/null +++ b/scales/efg3333555.scl @@ -0,0 +1,25 @@ +! efg3333555.scl +! +Genus [3333555] + 20 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/efg33335555.scl b/scales/efg33335555.scl new file mode 100644 index 0000000..edaf80e --- /dev/null +++ b/scales/efg33335555.scl @@ -0,0 +1,30 @@ +! efg33335555.scl +! +Genus bis-ultra-chromaticum [33335555] + 25 +! + 25/24 + 16/15 + 10/9 + 9/8 + 256/225 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 45/32 + 64/45 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 225/128 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/efg333355577.scl b/scales/efg333355577.scl new file mode 100644 index 0000000..f2f3860 --- /dev/null +++ b/scales/efg333355577.scl @@ -0,0 +1,65 @@ +! efg333355577.scl +! +Genus [333355577] + 60 +! + 49/48 + 525/512 + 25/24 + 21/20 + 1225/1152 + 16/15 + 2205/2048 + 49/45 + 35/32 + 10/9 + 9/8 + 147/128 + 7/6 + 75/64 + 1225/1024 + 6/5 + 175/144 + 49/40 + 315/256 + 56/45 + 5/4 + 245/192 + 21/16 + 4/3 + 11025/8192 + 49/36 + 175/128 + 441/320 + 25/18 + 7/5 + 45/32 + 64/45 + 735/512 + 35/24 + 3/2 + 49/32 + 1575/1024 + 14/9 + 25/16 + 63/40 + 1225/768 + 8/5 + 49/30 + 105/64 + 5/3 + 245/144 + 441/256 + 7/4 + 225/128 + 16/9 + 3675/2048 + 9/5 + 175/96 + 147/80 + 28/15 + 15/8 + 245/128 + 35/18 + 63/32 + 2/1 diff --git a/scales/efg33337.scl b/scales/efg33337.scl new file mode 100644 index 0000000..0d5b790 --- /dev/null +++ b/scales/efg33337.scl @@ -0,0 +1,15 @@ +! efg33337.scl +! +Genus [33337] + 10 +! + 9/8 + 7/6 + 21/16 + 4/3 + 189/128 + 3/2 + 27/16 + 7/4 + 63/32 + 2/1 diff --git a/scales/efg3335.scl b/scales/efg3335.scl new file mode 100644 index 0000000..217db24 --- /dev/null +++ b/scales/efg3335.scl @@ -0,0 +1,13 @@ +! efg3335.scl +! +Genus diatonicum veterum correctum [3335] + 8 +! + 10/9 + 5/4 + 4/3 + 3/2 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/efg33355.scl b/scales/efg33355.scl new file mode 100644 index 0000000..71a0366 --- /dev/null +++ b/scales/efg33355.scl @@ -0,0 +1,17 @@ +! efg33355.scl +! +Genus diatonico-chromaticum hodiernum correctum [33355] + 12 +! + 25/24 + 10/9 + 32/27 + 5/4 + 4/3 + 25/18 + 40/27 + 25/16 + 5/3 + 16/9 + 50/27 + 2/1 diff --git a/scales/efg333555.scl b/scales/efg333555.scl new file mode 100644 index 0000000..0d00f75 --- /dev/null +++ b/scales/efg333555.scl @@ -0,0 +1,21 @@ +! efg333555.scl +! +Genus diatonico-hyperchromaticum [333555] + 16 +! + 25/24 + 16/15 + 10/9 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/efg33355555.scl b/scales/efg33355555.scl new file mode 100644 index 0000000..75fc910 --- /dev/null +++ b/scales/efg33355555.scl @@ -0,0 +1,29 @@ +! efg33355555.scl +! +Genus [33355555] + 24 +! + 25/24 + 16/15 + 1125/1024 + 9/8 + 75/64 + 6/5 + 625/512 + 5/4 + 125/96 + 4/3 + 5625/4096 + 45/32 + 375/256 + 3/2 + 25/16 + 8/5 + 625/384 + 5/3 + 225/128 + 9/5 + 1875/1024 + 15/8 + 125/64 + 2/1 diff --git a/scales/efg333555777.scl b/scales/efg333555777.scl new file mode 100644 index 0000000..b4cbac7 --- /dev/null +++ b/scales/efg333555777.scl @@ -0,0 +1,69 @@ +! efg333555777.scl +! +Genus [333555777] + 64 +! + 225/224 + 49/48 + 525/512 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 2205/2048 + 35/32 + 9/8 + 8/7 + 147/128 + 7/6 + 75/64 + 25/21 + 1225/1024 + 6/5 + 128/105 + 49/40 + 315/256 + 5/4 + 245/192 + 9/7 + 21/16 + 4/3 + 75/56 + 11025/8192 + 175/128 + 48/35 + 441/320 + 7/5 + 45/32 + 10/7 + 735/512 + 35/24 + 3/2 + 32/21 + 49/32 + 1575/1024 + 25/16 + 63/40 + 1225/768 + 8/5 + 45/28 + 49/30 + 105/64 + 5/3 + 12/7 + 441/256 + 7/4 + 225/128 + 25/14 + 3675/2048 + 9/5 + 175/96 + 64/35 + 147/80 + 28/15 + 15/8 + 40/21 + 245/128 + 63/32 + 2/1 diff --git a/scales/efg333557.scl b/scales/efg333557.scl new file mode 100644 index 0000000..2849836 --- /dev/null +++ b/scales/efg333557.scl @@ -0,0 +1,29 @@ +! efg333557.scl +! +Genus diatonico-enharmonicum [333557] + 24 +! + 64/63 + 16/15 + 15/14 + 10/9 + 8/7 + 6/5 + 128/105 + 5/4 + 80/63 + 4/3 + 48/35 + 64/45 + 10/7 + 3/2 + 32/21 + 8/5 + 512/315 + 5/3 + 12/7 + 16/9 + 64/35 + 15/8 + 40/21 + 2/1 diff --git a/scales/efg33357.scl b/scales/efg33357.scl new file mode 100644 index 0000000..b94640e --- /dev/null +++ b/scales/efg33357.scl @@ -0,0 +1,21 @@ +! efg33357.scl +! +Genus diatonico-enharmonicum [33357] + 16 +! + 21/20 + 16/15 + 7/6 + 6/5 + 56/45 + 21/16 + 4/3 + 7/5 + 64/45 + 3/2 + 14/9 + 8/5 + 7/4 + 16/9 + 28/15 + 2/1 diff --git a/scales/efg3335711.scl b/scales/efg3335711.scl new file mode 100644 index 0000000..ca0fca2 --- /dev/null +++ b/scales/efg3335711.scl @@ -0,0 +1,37 @@ +! efg3335711.scl +! +Genus [3 3 3 5 7 11], expanded hexany 1 3 5 7 9 11 + 32 +! + 2079/2048 + 33/32 + 135/128 + 35/32 + 9/8 + 1155/1024 + 297/256 + 77/64 + 315/256 + 5/4 + 10395/8192 + 165/128 + 21/16 + 693/512 + 11/8 + 45/32 + 1485/1024 + 189/128 + 3/2 + 385/256 + 99/64 + 105/64 + 27/16 + 3465/2048 + 55/32 + 7/4 + 231/128 + 945/512 + 15/8 + 495/256 + 63/32 + 2/1 diff --git a/scales/efg333577.scl b/scales/efg333577.scl new file mode 100644 index 0000000..29f5c5d --- /dev/null +++ b/scales/efg333577.scl @@ -0,0 +1,29 @@ +! efg333577.scl +! +Genus [333577] + 24 +! + 49/48 + 2205/2048 + 35/32 + 9/8 + 147/128 + 7/6 + 315/256 + 5/4 + 245/192 + 21/16 + 4/3 + 45/32 + 735/512 + 35/24 + 3/2 + 49/32 + 105/64 + 5/3 + 441/256 + 7/4 + 15/8 + 245/128 + 63/32 + 2/1 diff --git a/scales/efg3337.scl b/scales/efg3337.scl new file mode 100644 index 0000000..108bb51 --- /dev/null +++ b/scales/efg3337.scl @@ -0,0 +1,13 @@ +! efg3337.scl +! +Genus [3337] + 8 +! + 9/8 + 7/6 + 21/16 + 4/3 + 3/2 + 7/4 + 63/32 + 2/1 diff --git a/scales/efg33377.scl b/scales/efg33377.scl new file mode 100644 index 0000000..e625f6d --- /dev/null +++ b/scales/efg33377.scl @@ -0,0 +1,17 @@ +! efg33377.scl +! +Genus [33377] Bi-enharmonicum simplex + 12 +! + 9/8 + 8/7 + 7/6 + 9/7 + 21/16 + 4/3 + 3/2 + 32/21 + 12/7 + 7/4 + 63/32 + 2/1 diff --git a/scales/efg335.scl b/scales/efg335.scl new file mode 100644 index 0000000..9041066 --- /dev/null +++ b/scales/efg335.scl @@ -0,0 +1,11 @@ +! efg335.scl +! +Genus secundum [335] + 6 +! + 5/4 + 4/3 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/efg3355.scl b/scales/efg3355.scl new file mode 100644 index 0000000..04965cc --- /dev/null +++ b/scales/efg3355.scl @@ -0,0 +1,14 @@ +! efg3355.scl +! +Genus chromaticum veterum correctum [3355] + 9 +! + 16/15 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/efg33555.scl b/scales/efg33555.scl new file mode 100644 index 0000000..6f88c2a --- /dev/null +++ b/scales/efg33555.scl @@ -0,0 +1,17 @@ +! efg33555.scl +! +Genus bichromaticum [33555] + 12 +! + 9/8 + 75/64 + 6/5 + 5/4 + 45/32 + 3/2 + 25/16 + 8/5 + 225/128 + 9/5 + 15/8 + 2/1 diff --git a/scales/efg335555577.scl b/scales/efg335555577.scl new file mode 100644 index 0000000..3e52052 --- /dev/null +++ b/scales/efg335555577.scl @@ -0,0 +1,50 @@ +! efg335555577.scl +! +Genus [335555577] + 45 +! + 49/48 + 525/512 + 25/24 + 21/20 + 16/15 + 35/32 + 28/25 + 147/128 + 7/6 + 75/64 + 1225/1024 + 6/5 + 49/40 + 5/4 + 245/192 + 32/25 + 98/75 + 21/16 + 4/3 + 175/128 + 7/5 + 735/512 + 35/24 + 147/100 + 112/75 + 3/2 + 49/32 + 25/16 + 1225/768 + 8/5 + 49/30 + 105/64 + 5/3 + 42/25 + 128/75 + 7/4 + 3675/2048 + 175/96 + 147/80 + 28/15 + 15/8 + 245/128 + 48/25 + 49/25 + 2/1 diff --git a/scales/efg33557.scl b/scales/efg33557.scl new file mode 100644 index 0000000..5faf367 --- /dev/null +++ b/scales/efg33557.scl @@ -0,0 +1,23 @@ +! efg33557.scl +! +Genus chromatico-enharmonicum [33557] + 18 +! + 21/20 + 16/15 + 35/32 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 8/5 + 105/64 + 5/3 + 7/4 + 28/15 + 15/8 + 2/1 diff --git a/scales/efg335577.scl b/scales/efg335577.scl new file mode 100644 index 0000000..476a786 --- /dev/null +++ b/scales/efg335577.scl @@ -0,0 +1,32 @@ +! efg335577.scl +! +Genus chromaticum septimis triplex [335577] + 27 +! + 21/20 + 16/15 + 15/14 + 35/32 + 8/7 + 7/6 + 6/5 + 128/105 + 5/4 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 64/35 + 28/15 + 15/8 + 40/21 + 2/1 diff --git a/scales/efg3357.scl b/scales/efg3357.scl new file mode 100644 index 0000000..bd533db --- /dev/null +++ b/scales/efg3357.scl @@ -0,0 +1,17 @@ +! efg3357.scl +! +Genus enharmonicum vocale [3357] + 12 +! + 35/32 + 7/6 + 5/4 + 21/16 + 4/3 + 35/24 + 3/2 + 105/64 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/efg33577.scl b/scales/efg33577.scl new file mode 100644 index 0000000..c649bec --- /dev/null +++ b/scales/efg33577.scl @@ -0,0 +1,23 @@ +! efg33577.scl +! +Genus [33577] + 18 +! + 15/14 + 35/32 + 8/7 + 7/6 + 5/4 + 21/16 + 4/3 + 10/7 + 35/24 + 3/2 + 32/21 + 105/64 + 5/3 + 12/7 + 7/4 + 15/8 + 40/21 + 2/1 diff --git a/scales/efg337.scl b/scales/efg337.scl new file mode 100644 index 0000000..aeef2f7 --- /dev/null +++ b/scales/efg337.scl @@ -0,0 +1,11 @@ +! efg337.scl +! +Genus quintum [337] + 6 +! + 9/8 + 21/16 + 3/2 + 7/4 + 63/32 + 2/1 diff --git a/scales/efg3377.scl b/scales/efg3377.scl new file mode 100644 index 0000000..10fadcd --- /dev/null +++ b/scales/efg3377.scl @@ -0,0 +1,14 @@ +! efg3377.scl +! +Genus [3377] + 9 +! + 8/7 + 7/6 + 21/16 + 4/3 + 3/2 + 32/21 + 12/7 + 7/4 + 2/1 diff --git a/scales/efg33777.scl b/scales/efg33777.scl new file mode 100644 index 0000000..fd81cfc --- /dev/null +++ b/scales/efg33777.scl @@ -0,0 +1,17 @@ +! efg33777.scl +! +Genus [33777] + 12 +! + 49/48 + 8/7 + 147/128 + 7/6 + 21/16 + 4/3 + 3/2 + 32/21 + 49/32 + 12/7 + 7/4 + 2/1 diff --git a/scales/efg33777a.scl b/scales/efg33777a.scl new file mode 100644 index 0000000..8345317 --- /dev/null +++ b/scales/efg33777a.scl @@ -0,0 +1,15 @@ +! efg33777a.scl +! +Genus [33777] with 1029/1024 discarded which vanishes in 31-tET + 10 +! + 49/48 + 8/7 + 7/6 + 21/16 + 4/3 + 3/2 + 32/21 + 12/7 + 7/4 + 2/1 diff --git a/scales/efg355.scl b/scales/efg355.scl new file mode 100644 index 0000000..3e673e4 --- /dev/null +++ b/scales/efg355.scl @@ -0,0 +1,11 @@ +! efg355.scl +! +Genus tertium [355] + 6 +! + 6/5 + 5/4 + 3/2 + 8/5 + 15/8 + 2/1 diff --git a/scales/efg3555.scl b/scales/efg3555.scl new file mode 100644 index 0000000..7b561af --- /dev/null +++ b/scales/efg3555.scl @@ -0,0 +1,13 @@ +! efg3555.scl +! +Genus enharmonicum veterum correctum [3555] + 8 +! + 75/64 + 5/4 + 375/256 + 3/2 + 25/16 + 15/8 + 125/64 + 2/1 diff --git a/scales/efg35555.scl b/scales/efg35555.scl new file mode 100644 index 0000000..1219fe8 --- /dev/null +++ b/scales/efg35555.scl @@ -0,0 +1,15 @@ +! efg35555.scl +! +Genus [35555] + 10 +! + 75/64 + 6/5 + 5/4 + 32/25 + 3/2 + 25/16 + 8/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/efg35557.scl b/scales/efg35557.scl new file mode 100644 index 0000000..37db9fd --- /dev/null +++ b/scales/efg35557.scl @@ -0,0 +1,21 @@ +! efg35557.scl +! +Genus [35557] + 16 +! + 525/512 + 21/20 + 35/32 + 75/64 + 6/5 + 5/4 + 21/16 + 175/128 + 7/5 + 3/2 + 25/16 + 8/5 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/efg3557.scl b/scales/efg3557.scl new file mode 100644 index 0000000..9ae7dcb --- /dev/null +++ b/scales/efg3557.scl @@ -0,0 +1,17 @@ +! efg3557.scl +! +Genus enharmonicum instrumentale [3557] + 12 +! + 21/20 + 35/32 + 6/5 + 5/4 + 21/16 + 7/5 + 3/2 + 8/5 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/efg35577.scl b/scales/efg35577.scl new file mode 100644 index 0000000..87d08f3 --- /dev/null +++ b/scales/efg35577.scl @@ -0,0 +1,23 @@ +! efg35577.scl +! +Genus [35577] + 18 +! + 21/20 + 15/14 + 35/32 + 8/7 + 6/5 + 5/4 + 21/16 + 48/35 + 7/5 + 10/7 + 3/2 + 8/5 + 105/64 + 12/7 + 7/4 + 64/35 + 15/8 + 2/1 diff --git a/scales/efg357.scl b/scales/efg357.scl new file mode 100644 index 0000000..774314d --- /dev/null +++ b/scales/efg357.scl @@ -0,0 +1,13 @@ +! efg357.scl +! +Genus sextum [357] & 7-limit Octony, see ch.6 p.118 + 8 +! + 35/32 + 5/4 + 21/16 + 3/2 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/efg35711.scl b/scales/efg35711.scl new file mode 100644 index 0000000..b7217b3 --- /dev/null +++ b/scales/efg35711.scl @@ -0,0 +1,21 @@ +! EFG35711.scl +! +Genus [3 5 7 11] + 16 +! + 33/32 + 35/32 + 1155/1024 + 77/64 + 5/4 + 165/128 + 21/16 + 11/8 + 3/2 + 385/256 + 105/64 + 55/32 + 7/4 + 231/128 + 15/8 + 2/1 diff --git a/scales/efg3571113.scl b/scales/efg3571113.scl new file mode 100644 index 0000000..5641a71 --- /dev/null +++ b/scales/efg3571113.scl @@ -0,0 +1,37 @@ +! efg3571113.scl +! +Genus [3 5 7 11 13] + 32 +! + 65/64 + 33/32 + 2145/2048 + 273/256 + 35/32 + 143/128 + 1155/1024 + 77/64 + 39/32 + 5005/4096 + 5/4 + 165/128 + 21/16 + 1365/1024 + 11/8 + 715/512 + 91/64 + 3003/2048 + 3/2 + 385/256 + 195/128 + 13/8 + 105/64 + 429/256 + 55/32 + 7/4 + 455/256 + 231/128 + 15015/8192 + 15/8 + 1001/512 + 2/1 diff --git a/scales/efg3577.scl b/scales/efg3577.scl new file mode 100644 index 0000000..0a27cf9 --- /dev/null +++ b/scales/efg3577.scl @@ -0,0 +1,17 @@ +! efg3577.scl +! +Genus [3577] + 12 +! + 15/14 + 35/32 + 8/7 + 5/4 + 21/16 + 10/7 + 3/2 + 105/64 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/efg35777.scl b/scales/efg35777.scl new file mode 100644 index 0000000..3b78b1f --- /dev/null +++ b/scales/efg35777.scl @@ -0,0 +1,21 @@ +! efg35777.scl +! +Genus [35777] + 16 +! + 15/14 + 35/32 + 8/7 + 147/128 + 5/4 + 21/16 + 10/7 + 735/512 + 3/2 + 49/32 + 105/64 + 12/7 + 7/4 + 15/8 + 245/128 + 2/1 diff --git a/scales/efg35777a.scl b/scales/efg35777a.scl new file mode 100644 index 0000000..8ebb683 --- /dev/null +++ b/scales/efg35777a.scl @@ -0,0 +1,19 @@ +! efg35777a.scl +! +Genus [35777] with comma discarded which disappears in 31-tET + 14 +! + 15/14 + 35/32 + 8/7 + 5/4 + 21/16 + 10/7 + 3/2 + 49/32 + 105/64 + 12/7 + 7/4 + 15/8 + 245/128 + 2/1 diff --git a/scales/efg377.scl b/scales/efg377.scl new file mode 100644 index 0000000..1614cf9 --- /dev/null +++ b/scales/efg377.scl @@ -0,0 +1,11 @@ +! efg377.scl +! +Genus octavum [377] + 6 +! + 147/128 + 21/16 + 3/2 + 49/32 + 7/4 + 2/1 diff --git a/scales/efg3777.scl b/scales/efg3777.scl new file mode 100644 index 0000000..d646770 --- /dev/null +++ b/scales/efg3777.scl @@ -0,0 +1,13 @@ +! efg3777.scl +! +Genus [3777] + 8 +! + 1029/1024 + 147/128 + 21/16 + 343/256 + 3/2 + 49/32 + 7/4 + 2/1 diff --git a/scales/efg37777.scl b/scales/efg37777.scl new file mode 100644 index 0000000..d4d94dd --- /dev/null +++ b/scales/efg37777.scl @@ -0,0 +1,15 @@ +! efg37777.scl +! +Genus [37777] + 10 +! + 1029/1024 + 8/7 + 147/128 + 21/16 + 343/256 + 3/2 + 49/32 + 12/7 + 7/4 + 2/1 diff --git a/scales/efg37777a.scl b/scales/efg37777a.scl new file mode 100644 index 0000000..de1d813 --- /dev/null +++ b/scales/efg37777a.scl @@ -0,0 +1,13 @@ +! efg37777a.scl +! +Genus [37777] with comma discarded that disappears in 31-tET + 8 +! + 8/7 + 21/16 + 343/256 + 3/2 + 49/32 + 12/7 + 7/4 + 2/1 diff --git a/scales/efg555.scl b/scales/efg555.scl new file mode 100644 index 0000000..ba28497 --- /dev/null +++ b/scales/efg555.scl @@ -0,0 +1,9 @@ +! efg555.scl +! +Genus quartum [555] + 4 +! + 5/4 + 25/16 + 125/64 + 2/1 diff --git a/scales/efg55557.scl b/scales/efg55557.scl new file mode 100644 index 0000000..f2df2a7 --- /dev/null +++ b/scales/efg55557.scl @@ -0,0 +1,15 @@ +! efg55557.scl +! +Genus [55557] + 10 +! + 35/32 + 5/4 + 175/128 + 7/5 + 25/16 + 8/5 + 875/512 + 7/4 + 125/64 + 2/1 diff --git a/scales/efg5557.scl b/scales/efg5557.scl new file mode 100644 index 0000000..b881954 --- /dev/null +++ b/scales/efg5557.scl @@ -0,0 +1,13 @@ +! efg5557.scl +! +Genus [5557] + 8 +! + 35/32 + 5/4 + 175/128 + 25/16 + 875/512 + 7/4 + 125/64 + 2/1 diff --git a/scales/efg55577.scl b/scales/efg55577.scl new file mode 100644 index 0000000..678d955 --- /dev/null +++ b/scales/efg55577.scl @@ -0,0 +1,17 @@ +! efg55577.scl +! +Genus [55577] + 12 +! + 35/32 + 125/112 + 8/7 + 5/4 + 175/128 + 10/7 + 25/16 + 875/512 + 7/4 + 25/14 + 125/64 + 2/1 diff --git a/scales/efg557.scl b/scales/efg557.scl new file mode 100644 index 0000000..c5a4a35 --- /dev/null +++ b/scales/efg557.scl @@ -0,0 +1,11 @@ +! efg557.scl +! +Genus septimum [557] + 6 +! + 35/32 + 5/4 + 7/5 + 8/5 + 7/4 + 2/1 diff --git a/scales/efg5577.scl b/scales/efg5577.scl new file mode 100644 index 0000000..c7afcff --- /dev/null +++ b/scales/efg5577.scl @@ -0,0 +1,14 @@ +! efg5577.scl +! +Genus [5577] + 9 +! + 28/25 + 49/40 + 32/25 + 7/5 + 49/32 + 8/5 + 7/4 + 49/25 + 2/1 diff --git a/scales/efg55777.scl b/scales/efg55777.scl new file mode 100644 index 0000000..90dbf42 --- /dev/null +++ b/scales/efg55777.scl @@ -0,0 +1,17 @@ +! efg55777.scl +! +Genus [55777] + 12 +! + 35/32 + 8/7 + 49/40 + 5/4 + 7/5 + 10/7 + 49/32 + 8/5 + 7/4 + 64/35 + 245/128 + 2/1 diff --git a/scales/efg577.scl b/scales/efg577.scl new file mode 100644 index 0000000..8e2977f --- /dev/null +++ b/scales/efg577.scl @@ -0,0 +1,11 @@ +! efg577.scl +! +Genus nonum [577] + 6 +! + 35/32 + 5/4 + 49/32 + 7/4 + 245/128 + 2/1 diff --git a/scales/efg5777.scl b/scales/efg5777.scl new file mode 100644 index 0000000..a6b4727 --- /dev/null +++ b/scales/efg5777.scl @@ -0,0 +1,13 @@ +! efg5777.scl +! +Genus [5777] + 8 +! + 35/32 + 8/7 + 5/4 + 10/7 + 49/32 + 7/4 + 245/128 + 2/1 diff --git a/scales/efg57777.scl b/scales/efg57777.scl new file mode 100644 index 0000000..4a5f9ca --- /dev/null +++ b/scales/efg57777.scl @@ -0,0 +1,15 @@ +! efg57777.scl +! +Genus [57777] + 10 +! + 35/32 + 8/7 + 5/4 + 343/256 + 10/7 + 49/32 + 1715/1024 + 7/4 + 245/128 + 2/1 diff --git a/scales/efg777.scl b/scales/efg777.scl new file mode 100644 index 0000000..f81ad48 --- /dev/null +++ b/scales/efg777.scl @@ -0,0 +1,9 @@ +! efg777.scl +! +Genus decimum [777] + 4 +! + 343/256 + 49/32 + 7/4 + 2/1 diff --git a/scales/efg77777.scl b/scales/efg77777.scl new file mode 100644 index 0000000..1742b5a --- /dev/null +++ b/scales/efg77777.scl @@ -0,0 +1,11 @@ +! efg77777.scl +! +Genus [77777] + 6 +! + 8/7 + 64/49 + 343/256 + 49/32 + 7/4 + 2/1 diff --git a/scales/efghalf357777.scl b/scales/efghalf357777.scl new file mode 100644 index 0000000..f24aa46 --- /dev/null +++ b/scales/efghalf357777.scl @@ -0,0 +1,15 @@ +! efghalf357777.scl +! +Half genus [357777] + 10 +! + 15/14 + 8/7 + 60/49 + 64/49 + 735/512 + 49/32 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/egads.scl b/scales/egads.scl new file mode 100644 index 0000000..15cabde --- /dev/null +++ b/scales/egads.scl @@ -0,0 +1,446 @@ +! egads.scl +! +Egads temperament, g=315.647874, 5-limit + 441 +! + 2.69039 + 5.38079 + 8.78362 + 11.47401 + 14.16440 + 16.85480 + 19.54519 + 22.23559 + 24.92598 + 27.61637 + 30.30677 + 32.99716 + 35.68756 + 38.37795 + 41.06834 + 43.75874 + 46.44913 + 49.13953 + 51.82992 + 54.52031 + 57.21071 + 59.90110 + 62.59150 + 65.28189 + 67.97228 + 71.37511 + 74.06551 + 76.75590 + 79.44629 + 82.13669 + 84.82708 + 87.51748 + 90.20787 + 92.89826 + 95.58866 + 98.27905 + 100.96945 + 103.65984 + 106.35023 + 109.04063 + 111.73102 + 114.42142 + 117.11181 + 119.80220 + 122.49260 + 125.18299 + 127.87339 + 130.56378 + 133.25417 + 136.65700 + 139.34740 + 142.03779 + 144.72818 + 147.41858 + 150.10897 + 152.79937 + 155.48976 + 158.18015 + 160.87055 + 163.56094 + 166.25134 + 168.94173 + 171.63212 + 174.32252 + 177.01291 + 179.70331 + 182.39370 + 185.08409 + 187.77449 + 190.46488 + 193.15528 + 195.84567 + 199.24850 + 201.93889 + 204.62929 + 207.31968 + 210.01007 + 212.70047 + 215.39086 + 218.08126 + 220.77165 + 223.46204 + 226.15244 + 228.84283 + 231.53323 + 234.22362 + 236.91401 + 239.60441 + 242.29480 + 244.98520 + 247.67559 + 250.36598 + 253.05638 + 255.74677 + 258.43717 + 261.83999 + 264.53039 + 267.22078 + 269.91118 + 272.60157 + 275.29196 + 277.98236 + 280.67275 + 283.36315 + 286.05354 + 288.74393 + 291.43433 + 294.12472 + 296.81512 + 299.50551 + 302.19590 + 304.88630 + 307.57669 + 310.26709 + 312.95748 + 315.64787 + 318.33827 + 321.02866 + 324.43149 + 327.12188 + 329.81228 + 332.50267 + 335.19307 + 337.88346 + 340.57385 + 343.26425 + 345.95464 + 348.64504 + 351.33543 + 354.02582 + 356.71622 + 359.40661 + 362.09701 + 364.78740 + 367.47779 + 370.16819 + 372.85858 + 375.54898 + 378.23937 + 380.92976 + 383.62016 + 386.31055 + 389.71338 + 392.40377 + 395.09417 + 397.78456 + 400.47496 + 403.16535 + 405.85574 + 408.54614 + 411.23653 + 413.92693 + 416.61732 + 419.30771 + 421.99811 + 424.68850 + 427.37890 + 430.06929 + 432.75968 + 435.45008 + 438.14047 + 440.83087 + 443.52126 + 446.21165 + 448.90205 + 452.30488 + 454.99527 + 457.68566 + 460.37606 + 463.06645 + 465.75685 + 468.44724 + 471.13763 + 473.82803 + 476.51842 + 479.20882 + 481.89921 + 484.58960 + 487.28000 + 489.97039 + 492.66079 + 495.35118 + 498.04157 + 500.73197 + 503.42236 + 506.11276 + 508.80315 + 511.49354 + 514.89637 + 517.58677 + 520.27716 + 522.96755 + 525.65795 + 528.34834 + 531.03874 + 533.72913 + 536.41952 + 539.10992 + 541.80031 + 544.49071 + 547.18110 + 549.87149 + 552.56189 + 555.25228 + 557.94268 + 560.63307 + 563.32346 + 566.01386 + 568.70425 + 571.39465 + 574.08504 + 577.48787 + 580.17826 + 582.86866 + 585.55905 + 588.24944 + 590.93984 + 593.63023 + 596.32063 + 599.01102 + 601.70141 + 604.39181 + 607.08220 + 609.77260 + 612.46299 + 615.15338 + 617.84378 + 620.53417 + 623.22457 + 625.91496 + 628.60535 + 631.29575 + 633.98614 + 636.67654 + 640.07936 + 642.76976 + 645.46015 + 648.15055 + 650.84094 + 653.53133 + 656.22173 + 658.91212 + 661.60252 + 664.29291 + 666.98330 + 669.67370 + 672.36409 + 675.05449 + 677.74488 + 680.43527 + 683.12567 + 685.81606 + 688.50646 + 691.19685 + 693.88724 + 696.57764 + 699.26803 + 701.95843 + 705.36125 + 708.05165 + 710.74204 + 713.43244 + 716.12283 + 718.81322 + 721.50362 + 724.19401 + 726.88441 + 729.57480 + 732.26519 + 734.95559 + 737.64598 + 740.33638 + 743.02677 + 745.71716 + 748.40756 + 751.09795 + 753.78835 + 756.47874 + 759.16913 + 761.85953 + 764.54992 + 767.95275 + 770.64314 + 773.33354 + 776.02393 + 778.71433 + 781.40472 + 784.09511 + 786.78551 + 789.47590 + 792.16630 + 794.85669 + 797.54708 + 800.23748 + 802.92787 + 805.61827 + 808.30866 + 810.99905 + 813.68945 + 816.37984 + 819.07024 + 821.76063 + 824.45102 + 827.14142 + 830.54425 + 833.23464 + 835.92503 + 838.61543 + 841.30582 + 843.99622 + 846.68661 + 849.37700 + 852.06740 + 854.75779 + 857.44819 + 860.13858 + 862.82897 + 865.51937 + 868.20976 + 870.90016 + 873.59055 + 876.28094 + 878.97134 + 881.66173 + 884.35213 + 887.04252 + 889.73291 + 893.13574 + 895.82614 + 898.51653 + 901.20692 + 903.89732 + 906.58771 + 909.27811 + 911.96850 + 914.65889 + 917.34929 + 920.03968 + 922.73008 + 925.42047 + 928.11086 + 930.80126 + 933.49165 + 936.18205 + 938.87244 + 941.56283 + 944.25323 + 946.94362 + 949.63402 + 952.32441 + 955.72724 + 958.41763 + 961.10803 + 963.79842 + 966.48881 + 969.17921 + 971.86960 + 974.56000 + 977.25039 + 979.94078 + 982.63118 + 985.32157 + 988.01197 + 990.70236 + 993.39275 + 996.08315 + 998.77354 + 1001.46394 + 1004.15433 + 1006.84472 + 1009.53512 + 1012.22551 + 1014.91591 + 1017.60630 + 1021.00913 + 1023.69952 + 1026.38992 + 1029.08031 + 1031.77070 + 1034.46110 + 1037.15149 + 1039.84189 + 1042.53228 + 1045.22267 + 1047.91307 + 1050.60346 + 1053.29386 + 1055.98425 + 1058.67464 + 1061.36504 + 1064.05543 + 1066.74583 + 1069.43622 + 1072.12661 + 1074.81701 + 1077.50740 + 1080.19780 + 1083.60062 + 1086.29102 + 1088.98141 + 1091.67181 + 1094.36220 + 1097.05259 + 1099.74299 + 1102.43338 + 1105.12378 + 1107.81417 + 1110.50456 + 1113.19496 + 1115.88535 + 1118.57575 + 1121.26614 + 1123.95653 + 1126.64693 + 1129.33732 + 1132.02772 + 1134.71811 + 1137.40850 + 1140.09890 + 1142.78929 + 1146.19212 + 1148.88251 + 1151.57291 + 1154.26330 + 1156.95370 + 1159.64409 + 1162.33448 + 1165.02488 + 1167.71527 + 1170.40567 + 1173.09606 + 1175.78645 + 1178.47685 + 1181.16724 + 1183.85764 + 1186.54803 + 1189.23842 + 1191.92882 + 1194.61921 + 1197.30961 + 2/1 diff --git a/scales/eikobag.scl b/scales/eikobag.scl new file mode 100644 index 0000000..3a55ed0 --- /dev/null +++ b/scales/eikobag.scl @@ -0,0 +1,17 @@ +! eikobag.scl +! +3)6 1.3.3.5.7.9 combination product bag + 12 +! + 21/20 + 7/6 + 6/5 + 4/3 + 7/5 + 3/2 + 14/9 + 8/5 + 7/4 + 9/5 + 28/15 + 2/1 diff --git a/scales/eikohole1.scl b/scales/eikohole1.scl new file mode 100644 index 0000000..1bc85e2 --- /dev/null +++ b/scales/eikohole1.scl @@ -0,0 +1,11 @@ +! eikohole1.scl +! +First eikohole ball <6 9 13 17 20|-epimorphic + 6 +! + 35/33 + 7/6 + 14/11 + 5/3 + 20/11 + 2/1 diff --git a/scales/eikohole2.scl b/scales/eikohole2.scl new file mode 100644 index 0000000..d8e1cd5 --- /dev/null +++ b/scales/eikohole2.scl @@ -0,0 +1,23 @@ +! eikohole2.scl +! +Second eikohole ball + 18 +! + 56/55 + 21/20 + 12/11 + 63/55 + 6/5 + 14/11 + 4/3 + 7/5 + 16/11 + 3/2 + 84/55 + 8/5 + 18/11 + 56/33 + 9/5 + 28/15 + 21/11 + 2/1 diff --git a/scales/eikohole4.scl b/scales/eikohole4.scl new file mode 100644 index 0000000..28f9457 --- /dev/null +++ b/scales/eikohole4.scl @@ -0,0 +1,29 @@ +! eikohole4.scl +! +Fourth eikohole ball + 24 +! + 21/20 + 77/72 + 11/10 + 7/6 + 6/5 + 11/9 + 77/60 + 4/3 + 11/8 + 7/5 + 77/54 + 22/15 + 3/2 + 14/9 + 8/5 + 77/48 + 33/20 + 77/45 + 7/4 + 9/5 + 11/6 + 28/15 + 77/40 + 2/1 diff --git a/scales/eikohole5.scl b/scales/eikohole5.scl new file mode 100644 index 0000000..2ef9c61 --- /dev/null +++ b/scales/eikohole5.scl @@ -0,0 +1,47 @@ +! eikohole5.scl +! +Fifth eikohole ball + 42 +! + 56/55 + 21/20 + 16/15 + 12/11 + 11/10 + 9/8 + 112/99 + 63/55 + 7/6 + 6/5 + 27/22 + 56/45 + 14/11 + 72/55 + 4/3 + 27/20 + 224/165 + 168/121 + 7/5 + 63/44 + 16/11 + 3/2 + 84/55 + 14/9 + 63/40 + 8/5 + 18/11 + 42/25 + 56/33 + 12/7 + 189/110 + 96/55 + 7/4 + 16/9 + 98/55 + 9/5 + 20/11 + 28/15 + 21/11 + 64/33 + 108/55 + 2/1 diff --git a/scales/eikohole6.scl b/scales/eikohole6.scl new file mode 100644 index 0000000..430dbf0 --- /dev/null +++ b/scales/eikohole6.scl @@ -0,0 +1,59 @@ +! eikohole6.scl +! +Sixth eikohole ball + 54 +! + 56/55 + 126/121 + 21/20 + 16/15 + 12/11 + 11/10 + 28/25 + 9/8 + 112/99 + 8/7 + 63/55 + 7/6 + 196/165 + 6/5 + 40/33 + 27/22 + 56/45 + 63/50 + 14/11 + 9/7 + 72/55 + 4/3 + 147/110 + 27/20 + 224/165 + 15/11 + 168/121 + 7/5 + 63/44 + 16/11 + 22/15 + 3/2 + 84/55 + 14/9 + 63/40 + 8/5 + 18/11 + 33/20 + 42/25 + 56/33 + 12/7 + 189/110 + 96/55 + 7/4 + 16/9 + 98/55 + 9/5 + 20/11 + 224/121 + 28/15 + 21/11 + 64/33 + 108/55 + 2/1 diff --git a/scales/eikosany.scl b/scales/eikosany.scl new file mode 100644 index 0000000..057b993 --- /dev/null +++ b/scales/eikosany.scl @@ -0,0 +1,25 @@ +! Eikosany.scl +! +3)6 1.3.5.7.9.11 Eikosany (1.3.5 tonic) + 20 +! + 33/32 + 21/20 + 11/10 + 9/8 + 7/6 + 99/80 + 77/60 + 21/16 + 11/8 + 7/5 + 231/160 + 3/2 + 63/40 + 77/48 + 33/20 + 7/4 + 9/5 + 11/6 + 77/40 + 2/1 diff --git a/scales/eikosanyplusop.scl b/scales/eikosanyplusop.scl new file mode 100644 index 0000000..288700c --- /dev/null +++ b/scales/eikosanyplusop.scl @@ -0,0 +1,25 @@ +! eikosanyplusop.scl +Eikosanyplus 11-limit 5 cents optimized +21 +! +50.2289 +151.1434 +201.3723 +233.5938 +316.8132 +383.4821 +435.2874 +467.2527 +548.9774 +585.1985 +649.8394 +700.6861 +751.5329 +816.1738 +852.3949 +934.1196 +966.0849 +1017.8902 +1084.5591 +1167.7785 +2/1 diff --git a/scales/eikoseven.scl b/scales/eikoseven.scl new file mode 100644 index 0000000..55dd096 --- /dev/null +++ b/scales/eikoseven.scl @@ -0,0 +1,24 @@ +! eikoseven.scl +Seven-limit version of 385/384-tempered Eikosany +20 +! +36/35 +21/20 +192/175 +9/8 +7/6 +216/175 +32/25 +21/16 +48/35 +7/5 +36/25 +3/2 +63/40 +8/5 +288/175 +7/4 +9/5 +64/35 +48/25 +2 diff --git a/scales/ekring1.scl b/scales/ekring1.scl new file mode 100644 index 0000000..f605c80 --- /dev/null +++ b/scales/ekring1.scl @@ -0,0 +1,17 @@ +! ekring1.scl +! +Single-tie circular mirroring of 3:4:5 + 12 +! + 9/8 + 6/5 + 5/4 + 27/20 + 45/32 + 36/25 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/ekring2.scl b/scales/ekring2.scl new file mode 100644 index 0000000..8719d5c --- /dev/null +++ b/scales/ekring2.scl @@ -0,0 +1,17 @@ +! ekring2.scl +! +Single-tie circular mirroring of 6:7:8 + 12 +! + 9/8 + 8/7 + 7/6 + 9/7 + 21/16 + 72/49 + 49/32 + 12/7 + 7/4 + 27/14 + 63/32 + 2/1 diff --git a/scales/ekring3.scl b/scales/ekring3.scl new file mode 100644 index 0000000..82e6f2c --- /dev/null +++ b/scales/ekring3.scl @@ -0,0 +1,17 @@ +! ekring3.scl +! +Single-tie circular mirroring of 4:5:7 + 12 +! + 50/49 + 8/7 + 400/343 + 5/4 + 125/98 + 64/49 + 25/16 + 8/5 + 80/49 + 7/4 + 25/14 + 2/1 diff --git a/scales/ekring4.scl b/scales/ekring4.scl new file mode 100644 index 0000000..9241097 --- /dev/null +++ b/scales/ekring4.scl @@ -0,0 +1,17 @@ +! ekring4.scl +! +Single-tie circular mirroring of 4:5:6 + 12 +! + 16/15 + 6/5 + 32/25 + 4/3 + 36/25 + 3/2 + 192/125 + 5/3 + 128/75 + 16/9 + 48/25 + 2/1 diff --git a/scales/ekring5.scl b/scales/ekring5.scl new file mode 100644 index 0000000..bfa90fe --- /dev/null +++ b/scales/ekring5.scl @@ -0,0 +1,17 @@ +! ekring5.scl +! +Single-tie circular mirroring of 3:5:7 + 12 +! + 126/125 + 36/35 + 7/6 + 216/175 + 7/5 + 10/7 + 36/25 + 72/49 + 42/25 + 12/7 + 49/25 + 2/1 diff --git a/scales/ekring5bp.scl b/scales/ekring5bp.scl new file mode 100644 index 0000000..b91f0d5 --- /dev/null +++ b/scales/ekring5bp.scl @@ -0,0 +1,17 @@ +! ekring5bp.scl +! +Single-tie BP circular mirroring of 3:5:7 + 12 +! + 27/25 + 9/7 + 243/175 + 7/5 + 189/125 + 81/49 + 49/25 + 15/7 + 81/35 + 7/3 + 63/25 + 3/1 diff --git a/scales/ekring6.scl b/scales/ekring6.scl new file mode 100644 index 0000000..0ef476a --- /dev/null +++ b/scales/ekring6.scl @@ -0,0 +1,17 @@ +! ekring6.scl +! +Single-tie circular mirroring of 6:7:9 + 12 +! + 54/49 + 8/7 + 9/7 + 4/3 + 72/49 + 3/2 + 14/9 + 81/49 + 16/9 + 648/343 + 96/49 + 2/1 diff --git a/scales/ekring7.scl b/scales/ekring7.scl new file mode 100644 index 0000000..e23d2f0 --- /dev/null +++ b/scales/ekring7.scl @@ -0,0 +1,17 @@ +! ekring7.scl +! +Single-tie circular mirroring of 5:7:9 + 12 +! + 50/49 + 10/9 + 500/441 + 100/81 + 9/7 + 450/343 + 14/9 + 100/63 + 81/49 + 9/5 + 90/49 + 2/1 diff --git a/scales/ekring7bp.scl b/scales/ekring7bp.scl new file mode 100644 index 0000000..a44ad01 --- /dev/null +++ b/scales/ekring7bp.scl @@ -0,0 +1,17 @@ +! ekring7bp.scl +! +Single-tie BP circular mirroring of 5:7:9 + 12 +! + 25/21 + 9/7 + 75/49 + 81/49 + 5/3 + 9/5 + 675/343 + 7/3 + 125/49 + 135/49 + 25/9 + 3/1 diff --git a/scales/elf87.scl b/scales/elf87.scl new file mode 100644 index 0000000..d89e02a --- /dev/null +++ b/scales/elf87.scl @@ -0,0 +1,91 @@ +! elf87.scl +Elf[87], a strictly proper MOS of elf, the 224&311 temperament +87 +! +15.434084 +27.009646 +42.443730 +54.019293 +69.453376 +81.028939 +96.463023 +111.897106 +123.472669 +138.906752 +150.482315 +165.916399 +177.491961 +192.926045 +208.360129 +219.935691 +235.369775 +246.945338 +262.379421 +273.954984 +289.389068 +304.823151 +316.398714 +331.832797 +343.408360 +358.842444 +374.276527 +385.852090 +401.286174 +412.861736 +428.295820 +439.871383 +455.305466 +470.739550 +482.315113 +497.749196 +509.324759 +524.758842 +536.334405 +551.768489 +567.202572 +578.778135 +594.212219 +605.787781 +621.221865 +632.797428 +648.231511 +663.665595 +675.241158 +690.675241 +702.250804 +717.684887 +729.260450 +744.694534 +760.128617 +771.704180 +787.138264 +798.713826 +814.147910 +825.723473 +841.157556 +856.591640 +868.167203 +883.601286 +895.176849 +910.610932 +926.045016 +937.620579 +953.054662 +964.630225 +980.064309 +991.639871 +1007.073955 +1022.508039 +1034.083601 +1049.517685 +1061.093248 +1076.527331 +1088.102894 +1103.536977 +1118.971061 +1130.546624 +1145.980707 +1157.556270 +1172.990354 +1184.565916 +2/1 diff --git a/scales/elfkeenanismic12.scl b/scales/elfkeenanismic12.scl new file mode 100644 index 0000000..dda39a1 --- /dev/null +++ b/scales/elfkeenanismic12.scl @@ -0,0 +1,17 @@ +! elfkeenanismic12.scl +! +Keenanismic tempered [12/11, 8/7, 6/5, 5/4, 4/3, 11/8, 3/2, 8/5, 5/3, 7/4, 11/6, 2], 284et tuning + 12 +! + 152.11268 + 232.39437 + 316.90141 + 384.50704 + 498.59155 + 549.29577 + 701.40845 + 815.49296 + 883.09859 + 967.60563 + 1047.88732 + 2/1 diff --git a/scales/elfkeenanismic7.scl b/scales/elfkeenanismic7.scl new file mode 100644 index 0000000..433df52 --- /dev/null +++ b/scales/elfkeenanismic7.scl @@ -0,0 +1,12 @@ +! elfkeenanismic7.scl +! +Keenanismic tempered [8/7, 5/4, 4/3, 3/2, 8/5, 7/4, 2] = cross_7, 284et tuning + 7 +! + 232.39437 + 384.50704 + 498.59155 + 701.40845 + 815.49296 + 967.60563 + 2/1 diff --git a/scales/elfleapday12f.scl b/scales/elfleapday12f.scl new file mode 100644 index 0000000..82c5eb7 --- /dev/null +++ b/scales/elfleapday12f.scl @@ -0,0 +1,17 @@ +! elfleapday12f.scl +! +Leapday tempering of [21/20, 9/8, 13/11, 14/11, 4/3, 7/5, 3/2, 11/7, 22/13, 16/9, 21/11, 2], in 46-tET, 13 limit 12f elf + 12 +! + 78.26087 + 208.69565 + 286.95652 + 417.39130 + 495.65217 + 573.91304 + 704.34783 + 782.60870 + 913.04348 + 991.30435 + 1121.73913 + 2/1 diff --git a/scales/elfmiracle12.scl b/scales/elfmiracle12.scl new file mode 100644 index 0000000..09d47d6 --- /dev/null +++ b/scales/elfmiracle12.scl @@ -0,0 +1,18 @@ +! elfmiracle12.scl +! +Miracle tempered [15/14, 8/7, 7/6, 11/9, 21/16, 7/5, 32/21, 18/11, 12/7, 7/4, 15/8, 2], 72et tuning, 11-limit patent val elf +! generators -8, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 8 + 12 +! +116.66667 +233.33333 +266.66667 +350.00000 +466.66667 +583.33333 +733.33333 +850.00000 +933.33333 +966.66667 +1083.33333 +2/1 diff --git a/scales/elfmyna7.scl b/scales/elfmyna7.scl new file mode 100644 index 0000000..55d958f --- /dev/null +++ b/scales/elfmyna7.scl @@ -0,0 +1,13 @@ +! elfmyna7.scl +! +Myna tempered [8/7, 6/5, 7/5, 10/7, 5/3, 7/4, 2] in 58et tuning, 13-limit patent val elf +! generators -7, -2, -1, 0, 1, 2, 7 + 7 +! +227.58621 +310.34483 +579.31034 +620.68966 +889.65517 +972.41379 +2/1 diff --git a/scales/ellis.scl b/scales/ellis.scl new file mode 100644 index 0000000..ba22d68 --- /dev/null +++ b/scales/ellis.scl @@ -0,0 +1,17 @@ +! ellis.scl +! +Alexander John Ellis' imitation equal temperament (1875) + 12 +! + 99.48477 + 199.49288 + 299.22463 + 399.46708 + 499.41938 + 599.87102 + 699.74785 + 799.35595 + 899.48110 + 999.32300 + 1099.66996 + 2/1 diff --git a/scales/ellis_24.scl b/scales/ellis_24.scl new file mode 100644 index 0000000..2d63e1b --- /dev/null +++ b/scales/ellis_24.scl @@ -0,0 +1,29 @@ +! ellis_24.scl +! +Ellis, from p.421 of Helmholtz, 24 tones of JI for 1 manual harmonium + 24 +! + 81/80 + 25/24 + 135/128 + 9/8 + 729/640 + 75/64 + 1215/1024 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 729/512 + 3/2 + 243/160 + 25/16 + 405/256 + 5/3 + 27/16 + 225/128 + 3645/2048 + 15/8 + 243/128 + 2/1 diff --git a/scales/ellis_eb.scl b/scales/ellis_eb.scl new file mode 100644 index 0000000..959f659 --- /dev/null +++ b/scales/ellis_eb.scl @@ -0,0 +1,17 @@ +! ellis_eb.scl +! +Ellis' new equal beating temperament for pianofortes (1885) + 12 +! + 100.20762 + 199.93511 + 300.36652 + 400.30420 + 499.94415 + 600.12513 + 699.74785 + 800.07968 + 899.92383 + 1000.46612 + 1100.50792 + 2/1 diff --git a/scales/ellis_harm.scl b/scales/ellis_harm.scl new file mode 100644 index 0000000..4f663f2 --- /dev/null +++ b/scales/ellis_harm.scl @@ -0,0 +1,17 @@ +! ellis_harm.scl +! +Ellis's Just Harmonium + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 27/20 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/ellis_mteb.scl b/scales/ellis_mteb.scl new file mode 100644 index 0000000..3041dbf --- /dev/null +++ b/scales/ellis_mteb.scl @@ -0,0 +1,17 @@ +! ellis_mteb.scl +! +Ellis' equal beating meantone tuning (1885) + 12 +! + 75.70000 + 192.20000 + 310.70000 + 385.80000 + 504.75363 + 580.20000 + 696.26231 + 772.60000 + 889.10000 + 1007.81330 + 1083.40000 + 2/1 diff --git a/scales/ellis_r.scl b/scales/ellis_r.scl new file mode 100644 index 0000000..cb89644 --- /dev/null +++ b/scales/ellis_r.scl @@ -0,0 +1,17 @@ +! ellis_r.scl +! +Ellis' rational approximation of equal temperament + 12 +! + 89/84 + 449/400 + 44/37 + 63/50 + 303/227 + 140/99 + 433/289 + 100/63 + 37/22 + 98/55 + 168/89 + 2/1 diff --git a/scales/enh14.scl b/scales/enh14.scl new file mode 100644 index 0000000..6977920 --- /dev/null +++ b/scales/enh14.scl @@ -0,0 +1,12 @@ +! enh14.scl +! +14/11 Enharmonic + 7 +! + 44/43 + 22/21 + 4/3 + 3/2 + 66/43 + 11/7 + 2/1 diff --git a/scales/enh15.scl b/scales/enh15.scl new file mode 100644 index 0000000..819893e --- /dev/null +++ b/scales/enh15.scl @@ -0,0 +1,12 @@ +! enh15.scl +! +Tonos-15 Enharmonic + 7 +! + 30/29 + 15/14 + 15/11 + 3/2 + 20/13 + 30/19 + 2/1 diff --git a/scales/enh15_inv.scl b/scales/enh15_inv.scl new file mode 100644 index 0000000..8222086 --- /dev/null +++ b/scales/enh15_inv.scl @@ -0,0 +1,12 @@ +! enh15_inv.scl +! +Inverted Enharmonic Tonos-15 Harmonia + 7 +! + 19/15 + 13/10 + 4/3 + 22/15 + 28/15 + 29/15 + 2/1 diff --git a/scales/enh15_inv2.scl b/scales/enh15_inv2.scl new file mode 100644 index 0000000..88ff06a --- /dev/null +++ b/scales/enh15_inv2.scl @@ -0,0 +1,12 @@ +! ENH15_INV2.scl +! +Inverted harmonic form of the enharmonic Tonos-15 + 7 +! + 31/30 + 16/15 + 4/3 + 22/15 + 3/2 + 23/15 + 2/1 diff --git a/scales/enh17.scl b/scales/enh17.scl new file mode 100644 index 0000000..c6a0556 --- /dev/null +++ b/scales/enh17.scl @@ -0,0 +1,12 @@ +! enh17.scl +! +Tonos-17 Enharmonic + 7 +! + 34/33 + 17/16 + 17/12 + 17/11 + 68/43 + 34/21 + 2/1 diff --git a/scales/enh17_con.scl b/scales/enh17_con.scl new file mode 100644 index 0000000..46dccb4 --- /dev/null +++ b/scales/enh17_con.scl @@ -0,0 +1,12 @@ +! enh17_con.scl +! +Conjunct Tonos-17 Enharmonic + 7 +! + 34/33 + 17/16 + 17/12 + 68/47 + 34/23 + 17/9 + 2/1 diff --git a/scales/enh19.scl b/scales/enh19.scl new file mode 100644 index 0000000..994bd04 --- /dev/null +++ b/scales/enh19.scl @@ -0,0 +1,12 @@ +! enh19.scl +! +Tonos-19 Enharmonic + 7 +! + 38/37 + 19/18 + 19/14 + 19/13 + 76/51 + 38/25 + 2/1 diff --git a/scales/enh19_con.scl b/scales/enh19_con.scl new file mode 100644 index 0000000..87cea88 --- /dev/null +++ b/scales/enh19_con.scl @@ -0,0 +1,12 @@ +! enh19_con.scl +! +Conjunct Tonos-19 Enharmonic + 7 +! + 38/37 + 19/18 + 19/14 + 76/55 + 38/27 + 19/11 + 2/1 diff --git a/scales/enh2.scl b/scales/enh2.scl new file mode 100644 index 0000000..f3d5c66 --- /dev/null +++ b/scales/enh2.scl @@ -0,0 +1,12 @@ +! enh2.scl +! +1:2 Enharmonic. New genus 2 + 4 + 24 parts + 7 +! + 33.33333 + 100.00000 + 500.00000 + 700.00000 + 733.33333 + 800.00000 + 2/1 diff --git a/scales/enh21.scl b/scales/enh21.scl new file mode 100644 index 0000000..0f28677 --- /dev/null +++ b/scales/enh21.scl @@ -0,0 +1,12 @@ +! enh21.scl +! +Tonos-21 Enharmonic + 7 +! + 42/41 + 21/20 + 21/16 + 3/2 + 84/55 + 14/9 + 2/1 diff --git a/scales/enh21_inv.scl b/scales/enh21_inv.scl new file mode 100644 index 0000000..14f617f --- /dev/null +++ b/scales/enh21_inv.scl @@ -0,0 +1,12 @@ +! enh21_inv.scl +! +Inverted Enharmonic Tonos-21 Harmonia + 7 +! + 9/7 + 55/42 + 4/3 + 32/21 + 40/21 + 41/21 + 2/1 diff --git a/scales/enh21_inv2.scl b/scales/enh21_inv2.scl new file mode 100644 index 0000000..b3e29a3 --- /dev/null +++ b/scales/enh21_inv2.scl @@ -0,0 +1,12 @@ +! enh21_inv2.scl +! +Inverted harmonic form of the enharmonic Tonos-21 + 7 +! + 32/31 + 16/15 + 4/3 + 32/21 + 11/7 + 34/21 + 2/1 diff --git a/scales/enh23.scl b/scales/enh23.scl new file mode 100644 index 0000000..98f7bed --- /dev/null +++ b/scales/enh23.scl @@ -0,0 +1,12 @@ +! enh23.scl +! +Tonos-23 Enharmonic + 7 +! + 46/45 + 23/22 + 23/18 + 23/16 + 46/31 + 23/15 + 2/1 diff --git a/scales/enh23_con.scl b/scales/enh23_con.scl new file mode 100644 index 0000000..87a4606 --- /dev/null +++ b/scales/enh23_con.scl @@ -0,0 +1,12 @@ +! enh23_con.scl +! +Conjunct Tonos-23 Enharmonic + 7 +! + 46/45 + 23/22 + 23/18 + 46/35 + 23/17 + 23/13 + 2/1 diff --git a/scales/enh25.scl b/scales/enh25.scl new file mode 100644 index 0000000..2cfe7f8 --- /dev/null +++ b/scales/enh25.scl @@ -0,0 +1,12 @@ +! enh25.scl +! +Tonos-25 Enharmonic + 7 +! + 100/97 + 50/47 + 25/18 + 25/16 + 50/31 + 5/3 + 2/1 diff --git a/scales/enh25_con.scl b/scales/enh25_con.scl new file mode 100644 index 0000000..9a65596 --- /dev/null +++ b/scales/enh25_con.scl @@ -0,0 +1,12 @@ +! enh25_con.scl +! +Conjunct Tonos-25 Enharmonic + 7 +! + 100/97 + 50/47 + 25/18 + 10/7 + 25/17 + 25/13 + 2/1 diff --git a/scales/enh27.scl b/scales/enh27.scl new file mode 100644 index 0000000..fc3a45e --- /dev/null +++ b/scales/enh27.scl @@ -0,0 +1,12 @@ +! enh27.scl +! +Tonos-27 Enharmonic + 7 +! + 36/35 + 18/17 + 27/20 + 3/2 + 54/35 + 27/17 + 2/1 diff --git a/scales/enh27_inv.scl b/scales/enh27_inv.scl new file mode 100644 index 0000000..5ac9d65 --- /dev/null +++ b/scales/enh27_inv.scl @@ -0,0 +1,12 @@ +! enh27_inv.scl +! +Inverted Enharmonic Tonos-27 Harmonia + 7 +! + 34/27 + 35/27 + 4/3 + 40/27 + 17/9 + 35/18 + 2/1 diff --git a/scales/enh27_inv2.scl b/scales/enh27_inv2.scl new file mode 100644 index 0000000..cb97f15 --- /dev/null +++ b/scales/enh27_inv2.scl @@ -0,0 +1,12 @@ +! enh27_inv2.scl +! +Inverted harmonic form of the enharmonic Tonos-27 + 7 +! + 56/55 + 28/27 + 4/3 + 40/27 + 41/27 + 14/9 + 2/1 diff --git a/scales/enh29.scl b/scales/enh29.scl new file mode 100644 index 0000000..3576194 --- /dev/null +++ b/scales/enh29.scl @@ -0,0 +1,12 @@ +! enh29.scl +! +Tonos-29 Enharmonic + 7 +! + 58/57 + 29/28 + 29/22 + 29/20 + 58/39 + 29/19 + 2/1 diff --git a/scales/enh29_con.scl b/scales/enh29_con.scl new file mode 100644 index 0000000..7a39ad9 --- /dev/null +++ b/scales/enh29_con.scl @@ -0,0 +1,12 @@ +! enh29_con.scl +! +Conjunct Tonos-29 Enharmonic + 7 +! + 58/57 + 29/28 + 29/22 + 58/43 + 29/21 + 29/16 + 2/1 diff --git a/scales/enh31.scl b/scales/enh31.scl new file mode 100644 index 0000000..be8a87a --- /dev/null +++ b/scales/enh31.scl @@ -0,0 +1,13 @@ +! enh31.scl +! +Tonos-31 Enharmonic. Tone 24 alternates with 23 as MESE or A + 8 +! + 31/30 + 31/29 + 31/24 + 31/23 + 31/22 + 62/43 + 31/21 + 2/1 diff --git a/scales/enh31_con.scl b/scales/enh31_con.scl new file mode 100644 index 0000000..5811b7c --- /dev/null +++ b/scales/enh31_con.scl @@ -0,0 +1,13 @@ +! enh31_con.scl +! +Conjunct Tonos-31 Enharmonic + 8 +! + 31/30 + 31/29 + 31/24 + 31/23 + 62/45 + 31/22 + 31/18 + 2/1 diff --git a/scales/enh33.scl b/scales/enh33.scl new file mode 100644 index 0000000..ab527de --- /dev/null +++ b/scales/enh33.scl @@ -0,0 +1,12 @@ +! enh33.scl +! +Tonos-33 Enharmonic + 7 +! + 33/32 + 33/31 + 11/8 + 3/2 + 66/43 + 11/7 + 2/1 diff --git a/scales/enh33_con.scl b/scales/enh33_con.scl new file mode 100644 index 0000000..83c9924 --- /dev/null +++ b/scales/enh33_con.scl @@ -0,0 +1,12 @@ +! enh33_con.scl +! +Conjunct Tonos-33 Enharmonic + 7 +! + 33/32 + 33/31 + 11/8 + 66/47 + 33/23 + 11/6 + 2/1 diff --git a/scales/enh_invcon.scl b/scales/enh_invcon.scl new file mode 100644 index 0000000..f7b7409 --- /dev/null +++ b/scales/enh_invcon.scl @@ -0,0 +1,12 @@ +! enh_invcon.scl +! +Inverted Enharmonic Conjunct Phrygian Harmonia + 7 +! + 13/12 + 17/12 + 35/24 + 3/2 + 23/12 + 47/24 + 2/1 diff --git a/scales/enh_mod.scl b/scales/enh_mod.scl new file mode 100644 index 0000000..d459eaf --- /dev/null +++ b/scales/enh_mod.scl @@ -0,0 +1,12 @@ +! enh_mod.scl +! +Enharmonic After Wilson's Purvi Modulations, See page 111 + 7 +! + 9/8 + 7/6 + 4/3 + 3/2 + 14/9 + 8/5 + 2/1 diff --git a/scales/enh_perm.scl b/scales/enh_perm.scl new file mode 100644 index 0000000..0cf2572 --- /dev/null +++ b/scales/enh_perm.scl @@ -0,0 +1,12 @@ +! enh_perm.scl +! +Permuted Enharmonic, After Wilson's Marwa Permutations, See page 110. + 7 +! + 28/27 + 16/15 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/enlil19_13.scl b/scales/enlil19_13.scl new file mode 100644 index 0000000..73846a8 --- /dev/null +++ b/scales/enlil19_13.scl @@ -0,0 +1,47 @@ +! enlil19_13.scl +Enlil[19] hobbit 13 limit minimax, commas 15625/15552, 385/384 and 325/324 +19 +! +68.28318 +152.64336 +180.50443 +248.78761 +317.07080 +385.35398 +469.71415 +497.57523 +565.85841 +634.14159 +702.42477 +730.28585 +814.64602 +882.92920 +951.21239 +1019.49557 +1047.35664 +1131.71682 +2/1 +! +! !preenlil19.scl +! Enlil[19] transversal +! 19 +! ! +! 25/24 +! 12/11 +! 10/9 +! 52/45 +! 6/5 +! 5/4 +! 21/16 +! 4/3 +! 18/13 +! 13/9 +! 3/2 +! 32/21 +! 8/5 +! 5/3 +! 26/15 +! 9/5 +! 11/6 +! 25/13 +! 2/1 diff --git a/scales/ennea45.scl b/scales/ennea45.scl new file mode 100644 index 0000000..6f97bc5 --- /dev/null +++ b/scales/ennea45.scl @@ -0,0 +1,50 @@ +! ennea45.scl +! +Ennealimmal-45, in a 7-limit least-squares tuning, g=48.999, G.W. Smith + 45 +! + 35.33500 + 48.99920 + 84.33420 + 97.99830 + 133.33330 + 168.66840 + 182.33250 + 217.66750 + 231.33160 + 266.66670 + 302.00170 + 315.66580 + 351.00080 + 364.66500 + 400.00000 + 435.33500 + 448.99920 + 484.33420 + 497.99830 + 533.33330 + 568.66840 + 582.33250 + 617.66750 + 631.33160 + 666.66670 + 702.00170 + 715.66580 + 751.00080 + 764.66500 + 800.00000 + 835.33500 + 848.99920 + 884.33420 + 897.99830 + 933.33330 + 968.66840 + 982.33250 + 1017.66750 + 1031.33160 + 1066.66670 + 1102.00170 + 1115.66580 + 1151.00080 + 1164.66500 + 2/1 diff --git a/scales/ennea45ji.scl b/scales/ennea45ji.scl new file mode 100644 index 0000000..6eaaf99 --- /dev/null +++ b/scales/ennea45ji.scl @@ -0,0 +1,50 @@ +! ennea45ji.scl +! +Detempered Ennealimma[45], Hahn reduced + 45 +! + 49/48 + 36/35 + 21/20 + 200/189 + 27/25 + 54/49 + 10/9 + 245/216 + 8/7 + 7/6 + 25/21 + 6/5 + 49/40 + 216/175 + 63/50 + 9/7 + 35/27 + 250/189 + 4/3 + 49/36 + 25/18 + 7/5 + 10/7 + 36/25 + 72/49 + 3/2 + 189/125 + 54/35 + 14/9 + 100/63 + 175/108 + 49/30 + 5/3 + 42/25 + 12/7 + 7/4 + 432/245 + 9/5 + 49/27 + 50/27 + 189/100 + 40/21 + 35/18 + 49/25 + 2/1 diff --git a/scales/ennea72.scl b/scales/ennea72.scl new file mode 100644 index 0000000..2b08f9d --- /dev/null +++ b/scales/ennea72.scl @@ -0,0 +1,76 @@ +! ennea72.scl +Ennealimmal-72 in 612-tET tuning (strictly proper) +72 +! +13.725490 +35.294118 +49.019608 +62.745098 +84.313725 +98.039216 +119.607843 +133.333333 +147.058824 +168.627451 +182.352941 +196.078431 +217.647059 +231.372549 +252.941176 +266.666667 +280.392157 +301.960784 +315.686275 +329.411765 +350.980392 +364.705882 +386.274510 +400.000000 +413.725490 +435.294118 +449.019608 +462.745098 +484.313725 +498.039216 +519.607843 +533.333333 +547.058824 +568.627451 +582.352941 +596.078431 +617.647059 +631.372549 +652.941176 +666.666667 +680.392157 +701.960784 +715.686275 +729.411765 +750.980392 +764.705882 +786.274510 +800.000000 +813.725490 +835.294118 +849.019608 +862.745098 +884.313725 +898.039216 +919.607843 +933.333333 +947.058824 +968.627451 +982.352941 +996.078431 +1017.647059 +1031.372549 +1052.941176 +1066.666667 +1080.392157 +1101.960784 +1115.686275 +1129.411765 +1150.980392 +1164.705882 +1186.274510 +2/1 diff --git a/scales/ennea72synch.scl b/scales/ennea72synch.scl new file mode 100644 index 0000000..e2ebf8d --- /dev/null +++ b/scales/ennea72synch.scl @@ -0,0 +1,77 @@ +! ennea72synch.scl +! +Poptimal synchonized beating ennealimmal tuning, TM 10-10-2005 + 72 +! + 13.65437 + 27.30874 + 48.99590 + 62.65027 + 76.30464 + 97.99180 + 111.64617 + 133.33333 + 146.98770 + 160.64207 + 182.32923 + 195.98360 + 209.63797 + 231.32513 + 244.97950 + 266.66667 + 280.32103 + 293.97540 + 315.66257 + 329.31694 + 342.97130 + 364.65847 + 378.31284 + 400.00000 + 413.65437 + 427.30874 + 448.99590 + 462.65027 + 476.30464 + 497.99180 + 511.64617 + 533.33333 + 546.98770 + 560.64207 + 582.32923 + 595.98360 + 609.63797 + 631.32513 + 644.97950 + 666.66666 + 680.32103 + 693.97540 + 715.66257 + 729.31693 + 742.97130 + 764.65847 + 778.31283 + 800.00000 + 813.65437 + 827.30874 + 848.99590 + 862.65027 + 876.30464 + 897.99180 + 911.64617 + 933.33333 + 946.98770 + 960.64207 + 982.32923 + 995.98360 + 1009.63797 + 1031.32513 + 1044.97950 + 1066.66666 + 1080.32103 + 1093.97540 + 1115.66256 + 1129.31693 + 1142.97130 + 1164.65847 + 1178.31283 + 2/1 diff --git a/scales/enneadecal57.scl b/scales/enneadecal57.scl new file mode 100644 index 0000000..5907d5f --- /dev/null +++ b/scales/enneadecal57.scl @@ -0,0 +1,62 @@ +! enneadecal57.scl +! +Enneadecal[57] (152&171) in 171-et tuning + 57 +! + 7.01754 + 14.03509 + 63.15790 + 70.17544 + 77.19298 + 126.31579 + 133.33333 + 140.35088 + 189.47368 + 196.49123 + 203.50877 + 252.63158 + 259.64912 + 266.66667 + 315.78947 + 322.80702 + 329.82456 + 378.94737 + 385.96491 + 392.98246 + 442.10526 + 449.12281 + 456.14035 + 505.26316 + 512.28070 + 519.29825 + 568.42105 + 575.43860 + 582.45614 + 631.57895 + 638.59649 + 645.61403 + 694.73684 + 701.75439 + 708.77193 + 757.89474 + 764.91228 + 771.92983 + 821.05263 + 828.07017 + 835.08772 + 884.21053 + 891.22807 + 898.24561 + 947.36842 + 954.38597 + 961.40351 + 1010.52632 + 1017.54386 + 1024.56140 + 1073.68421 + 1080.70175 + 1087.71930 + 1136.84210 + 1143.85965 + 1150.87719 + 2/1 diff --git a/scales/epimore_enh.scl b/scales/epimore_enh.scl new file mode 100644 index 0000000..9d7e11b --- /dev/null +++ b/scales/epimore_enh.scl @@ -0,0 +1,12 @@ +! epimore_enh.scl +! +New Epimoric Enharmonic, Dorian mode of the 4th new Enharmonic on Hofmann's list + 7 +! + 76/75 + 16/15 + 4/3 + 3/2 + 38/25 + 8/5 + 2/1 diff --git a/scales/eratos_chrom.scl b/scales/eratos_chrom.scl new file mode 100644 index 0000000..a9b9ba9 --- /dev/null +++ b/scales/eratos_chrom.scl @@ -0,0 +1,12 @@ +! eratos_chrom.scl +! +Dorian mode of Eratosthenes's Chromatic. same as Ptol. Intense Chromatic + 7 +! + 20/19 + 10/9 + 4/3 + 3/2 + 30/19 + 5/3 + 2/1 diff --git a/scales/eratos_diat.scl b/scales/eratos_diat.scl new file mode 100644 index 0000000..01ba413 --- /dev/null +++ b/scales/eratos_diat.scl @@ -0,0 +1,12 @@ +! eratos_diat.scl +! +Dorian mode of Eratosthenes's Diatonic, Pythagorean. 7-tone Kurdi + 7 +! + 256/243 + 32/27 + 4/3 + 3/2 + 128/81 + 16/9 + 2/1 diff --git a/scales/eratos_enh.scl b/scales/eratos_enh.scl new file mode 100644 index 0000000..21e1250 --- /dev/null +++ b/scales/eratos_enh.scl @@ -0,0 +1,12 @@ +! eratos_enh.scl +! +Dorian mode of Eratosthenes's Enharmonic + 7 +! + 40/39 + 20/19 + 4/3 + 3/2 + 20/13 + 30/19 + 2/1 diff --git a/scales/erlangen.scl b/scales/erlangen.scl new file mode 100644 index 0000000..4db68f6 --- /dev/null +++ b/scales/erlangen.scl @@ -0,0 +1,17 @@ +! erlangen.scl +! +Anonymus: Pro clavichordiis faciendis, Erlangen 15th century + 12 +! + 256/243 + 4096/3645 + 32/27 + 5/4 + 4/3 + 1024/729 + 3/2 + 128/81 + 2048/1215 + 16/9 + 15/8 + 2/1 diff --git a/scales/erlangen2.scl b/scales/erlangen2.scl new file mode 100644 index 0000000..0f2bf98 --- /dev/null +++ b/scales/erlangen2.scl @@ -0,0 +1,17 @@ +! erlangen2.scl +! +Revised Erlangen + 12 +! + 135/128 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/erlich1.scl b/scales/erlich1.scl new file mode 100644 index 0000000..2ea3188 --- /dev/null +++ b/scales/erlich1.scl @@ -0,0 +1,15 @@ +! erlich1.scl +! +Asymmetrical Major decatonic mode of 22-tET, Paul Erlich + 10 +! + 109.091 cents + 218.182 cents + 381.818 cents + 490.909 cents + 600.000 cents + 709.091 cents + 872.727 cents + 981.818 cents + 1090.909 cents + 2/1 diff --git a/scales/erlich10.scl b/scales/erlich10.scl new file mode 100644 index 0000000..ae99334 --- /dev/null +++ b/scales/erlich10.scl @@ -0,0 +1,15 @@ +! erlich10.scl +! +Canonical JI interpretation of the Pentachordal decatonic mode of 22-tET + 10 +! + 21/20 + 8/7 + 6/5 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 9/5 + 2/1 diff --git a/scales/erlich10a.scl b/scales/erlich10a.scl new file mode 100644 index 0000000..77c07af --- /dev/null +++ b/scales/erlich10a.scl @@ -0,0 +1,14 @@ +! erlich10a.scl +erlich10 in 50/49 (-1,5) tuning; approximate pajara +10 +! +108.337097 +217.526867 +325.863964 +491.662903 +600.000000 +708.337097 +817.526867 +925.863964 +1034.201060 +2/1 diff --git a/scales/erlich10coh.scl b/scales/erlich10coh.scl new file mode 100644 index 0000000..86a1047 --- /dev/null +++ b/scales/erlich10coh.scl @@ -0,0 +1,15 @@ +! erlich10coh.scl +! +Differential coherent version of erlich10 with subharmonic 40 + 10 +! + 21/20 + 23/20 + 6/5 + 53/40 + 7/5 + 3/2 + 8/5 + 69/40 + 9/5 + 2/1 diff --git a/scales/erlich10s1.scl b/scales/erlich10s1.scl new file mode 100644 index 0000000..f96a315 --- /dev/null +++ b/scales/erlich10s1.scl @@ -0,0 +1,15 @@ +! erlich10s1.scl +! +Superparticular version of erlich10 using 50/49 decatonic comma + 10 +! + 15/14 + 8/7 + 6/5 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 9/5 + 2/1 diff --git a/scales/erlich10s2.scl b/scales/erlich10s2.scl new file mode 100644 index 0000000..4bd76ef --- /dev/null +++ b/scales/erlich10s2.scl @@ -0,0 +1,15 @@ +! erlich10s2.scl +! +Other superparticular version of erlich10 using 50/49 decatonic comma + 10 +! + 21/20 + 28/25 + 6/5 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 9/5 + 2/1 diff --git a/scales/erlich11.scl b/scales/erlich11.scl new file mode 100644 index 0000000..e5a96d4 --- /dev/null +++ b/scales/erlich11.scl @@ -0,0 +1,15 @@ +! erlich11.scl +! +Canonical JI interpretation of the Symmetrical decatonic mode of 22-tET + 10 +! + 15/14 + 7/6 + 5/4 + 4/3 + 10/7 + 3/2 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/erlich11s1.scl b/scales/erlich11s1.scl new file mode 100644 index 0000000..6ac54d4 --- /dev/null +++ b/scales/erlich11s1.scl @@ -0,0 +1,15 @@ +! erlich11s1.scl +! +Superparticular version of erlich11 using 50/49 decatonic comma + 10 +! + 21/20 + 7/6 + 5/4 + 4/3 + 10/7 + 3/2 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/erlich11s2.scl b/scales/erlich11s2.scl new file mode 100644 index 0000000..d75622f --- /dev/null +++ b/scales/erlich11s2.scl @@ -0,0 +1,15 @@ +! erlich11s2.scl +! +Other superparticular version of erlich11 using 50/49 decatonic comma + 10 +! + 15/14 + 7/6 + 25/21 + 4/3 + 10/7 + 3/2 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/erlich12.scl b/scales/erlich12.scl new file mode 100644 index 0000000..38f7238 --- /dev/null +++ b/scales/erlich12.scl @@ -0,0 +1,23 @@ +! erlich12.scl +! +Two 9-tET scales 3/2 shifted, Paul Erlich, TL 5-12-2001 + 18 +! + 35.28833 + 133.33333 + 168.62167 + 266.66667 + 301.95500 + 400.00000 + 435.28833 + 533.33333 + 568.62167 + 666.66667 + 3/2 + 800.00000 + 835.28833 + 933.33333 + 968.62167 + 1066.66667 + 1101.95500 + 2/1 diff --git a/scales/erlich2.scl b/scales/erlich2.scl new file mode 100644 index 0000000..428dfb3 --- /dev/null +++ b/scales/erlich2.scl @@ -0,0 +1,15 @@ +! erlich2.scl +! +Asymmetrical Minor decatonic mode of 22-tET, Paul Erlich + 10 +! + 109.091 cents + 218.182 cents + 327.273 cents + 490.909 cents + 600.000 cents + 709.091 cents + 818.182 cents + 927.273 cents + 1036.364 cents + 2/1 diff --git a/scales/erlich3.scl b/scales/erlich3.scl new file mode 100644 index 0000000..4b0e0a0 --- /dev/null +++ b/scales/erlich3.scl @@ -0,0 +1,15 @@ +! erlich3.scl +! +Symmetrical Major decatonic mode of 22-tET, Paul Erlich + 10 +! + 109.091 cents + 218.182 cents + 381.818 cents + 490.909 cents + 600.000 cents + 709.091 cents + 818.182 cents + 981.818 cents + 1090.909 cents + 2/1 diff --git a/scales/erlich4.scl b/scales/erlich4.scl new file mode 100644 index 0000000..21eb04b --- /dev/null +++ b/scales/erlich4.scl @@ -0,0 +1,15 @@ +! erlich4.scl +! +Symmetrical Minor decatonic mode of 22-tET, Paul Erlich + 10 +! + 109.091 cents + 218.182 cents + 327.273 cents + 490.909 cents + 600.000 cents + 709.091 cents + 818.182 cents + 927.273 cents + 1090.909 cents + 2/1 diff --git a/scales/erlich5.scl b/scales/erlich5.scl new file mode 100644 index 0000000..7954f41 --- /dev/null +++ b/scales/erlich5.scl @@ -0,0 +1,27 @@ +! erlich5.scl +! +Unequal 22-note compromise between decatonic & Indian srutis, Paul Erlich + 22 +! + 50.25000 + 105.75000 + 161.25000 + 211.50000 + 272.25000 + 322.50000 + 383.25000 + 428.25000 + 494.25000 + 539.25000 + 594.75000 + 650.25000 + 705.75000 + 761.25000 + 816.75000 + 872.25000 + 917.25000 + 983.25000 + 1028.25000 + 1089.00000 + 1139.25000 + 2/1 diff --git a/scales/erlich6.scl b/scales/erlich6.scl new file mode 100644 index 0000000..734c766 --- /dev/null +++ b/scales/erlich6.scl @@ -0,0 +1,27 @@ +! erlich6.scl +! +Scale of consonant tones against 1/1-3/2 drone. TL 23-9-1998 + 22 +! + 21/20 + 15/14 + 12/11 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/erlich7.scl b/scales/erlich7.scl new file mode 100644 index 0000000..8374210 --- /dev/null +++ b/scales/erlich7.scl @@ -0,0 +1,31 @@ +! erlich7.scl +! +Meantone-like circle of sinuoidally varying fifths, TL 08-12-99 + 26 +! + 71.40000 + 105.00000 + 128.90000 + 193.00000 + 257.10000 + 281.00000 + 314.60000 + 386.00000 + 438.60000 + 458.00000 + 504.10000 + 577.10000 + 616.80000 + 637.70000 + 696.40000 + 764.80000 + 793.00000 + 821.20000 + 889.60000 + 948.30000 + 969.20000 + 1008.90000 + 1081.90000 + 1128.00000 + 1147.40000 + 2/1 diff --git a/scales/erlich8.scl b/scales/erlich8.scl new file mode 100644 index 0000000..8b1d773 --- /dev/null +++ b/scales/erlich8.scl @@ -0,0 +1,29 @@ +! erlich8.scl +! +Two 12-tET scales 15 cents shifted, Paul Erlich + 24 +! + 15.00000 + 100.00000 + 115.00000 + 200.00000 + 215.00000 + 300.00000 + 315.00000 + 400.00000 + 415.00000 + 500.00000 + 515.00000 + 600.00000 + 615.00000 + 700.00000 + 715.00000 + 800.00000 + 815.00000 + 900.00000 + 915.00000 + 1000.00000 + 1015.00000 + 1100.00000 + 1115.00000 + 2/1 diff --git a/scales/erlich9.scl b/scales/erlich9.scl new file mode 100644 index 0000000..5fd2b0b --- /dev/null +++ b/scales/erlich9.scl @@ -0,0 +1,15 @@ +! erlich9.scl +! +Just scale by Paul Erlich (2002) + 10 +! + 33/32 + 9/8 + 5/4 + 21/16 + 11/8 + 3/2 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/erlich_bpf.scl b/scales/erlich_bpf.scl new file mode 100644 index 0000000..14ff522 --- /dev/null +++ b/scales/erlich_bpf.scl @@ -0,0 +1,44 @@ +! erlich_bpf.scl +! +Erlich's 39-tone Triple Bohlen-Pierce scale + 39 +! + 65/63 + 35/33 + 27/25 + 55/49 + 15/13 + 25/21 + 11/9 + 49/39 + 9/7 + 65/49 + 15/11 + 7/5 + 13/9 + 49/33 + 75/49 + 11/7 + 21/13 + 5/3 + 77/45 + 135/77 + 9/5 + 13/7 + 21/11 + 49/25 + 99/49 + 27/13 + 15/7 + 11/5 + 147/65 + 7/3 + 117/49 + 27/11 + 63/25 + 13/5 + 147/55 + 25/9 + 99/35 + 189/65 + 3/1 diff --git a/scales/erlich_bpp.scl b/scales/erlich_bpp.scl new file mode 100644 index 0000000..be84c00 --- /dev/null +++ b/scales/erlich_bpp.scl @@ -0,0 +1,44 @@ +! erlich_bpp.scl +! +Periodicity block for erlich_bpf, 1625/1617 1331/1323 275/273 245/243 + 39 +! + 77/75 + 35/33 + 27/25 + 55/49 + 63/55 + 25/21 + 11/9 + 1701/1375 + 9/7 + 33/25 + 15/11 + 7/5 + 275/189 + 81/55 + 75/49 + 11/7 + 441/275 + 5/3 + 77/45 + 135/77 + 9/5 + 275/147 + 21/11 + 49/25 + 99/49 + 567/275 + 15/7 + 11/5 + 25/11 + 7/3 + 825/343 + 27/11 + 63/25 + 55/21 + 147/55 + 135/49 + 99/35 + 225/77 + 3/1 diff --git a/scales/erlich_bpp2.scl b/scales/erlich_bpp2.scl new file mode 100644 index 0000000..44d33e7 --- /dev/null +++ b/scales/erlich_bpp2.scl @@ -0,0 +1,44 @@ +! erlich_bpp2.scl +! +Improved shape for erlich_bpp + 39 +! + 77/75 + 35/33 + 27/25 + 91/81 + 63/55 + 25/21 + 11/9 + 81/65 + 9/7 + 33/25 + 15/11 + 7/5 + 13/9 + 81/55 + 75/49 + 11/7 + 21/13 + 5/3 + 77/45 + 135/77 + 9/5 + 13/7 + 21/11 + 49/25 + 99/49 + 27/13 + 15/7 + 11/5 + 25/11 + 7/3 + 65/27 + 27/11 + 63/25 + 55/21 + 243/91 + 25/9 + 99/35 + 225/77 + 3/1 diff --git a/scales/erlich_bppe.scl b/scales/erlich_bppe.scl new file mode 100644 index 0000000..d2a2ec6 --- /dev/null +++ b/scales/erlich_bppe.scl @@ -0,0 +1,44 @@ +! erlich_bppe.scl +! +LS optimal 3:5:7:11:13 tempering, virtually equal, g=780.2702 cents + 39 +! + 48.35012 + 97.44116 + 145.79129 + 194.88233 + 243.23245 + 292.32349 + 340.67362 + 389.76466 + 438.85570 + 487.20582 + 536.29686 + 584.64699 + 633.73803 + 682.08815 + 731.17919 + 780.27023 + 828.62036 + 877.71140 + 926.06152 + 975.15256 + 1023.50269 + 1072.59373 + 1120.94385 + 1170.03489 + 1219.12593 + 1267.47606 + 1316.56710 + 1364.91722 + 1414.00826 + 1462.35839 + 1511.44943 + 1560.54047 + 1608.89059 + 1657.98163 + 1706.33176 + 1755.42280 + 1803.77292 + 1852.86396 + 3/1 diff --git a/scales/erlich_bppm.scl b/scales/erlich_bppm.scl new file mode 100644 index 0000000..e73a911 --- /dev/null +++ b/scales/erlich_bppm.scl @@ -0,0 +1,44 @@ +! ERLICH_BPPM.scl +! +MM optimal 3:5:7:11:13 tempering, g=780.352 cents + 39 +! + 50.14837 + 97.84986 + 147.99823 + 195.69972 + 245.84809 + 293.54957 + 343.69795 + 391.39943 + 439.10091 + 489.24929 + 536.95077 + 587.09915 + 634.80063 + 684.94900 + 732.65049 + 780.35197 + 830.50035 + 878.20183 + 928.35020 + 976.05169 + 1026.20006 + 1073.90154 + 1124.04992 + 1171.75140 + 1219.45289 + 1269.60126 + 1317.30274 + 1367.45112 + 1415.15260 + 1465.30098 + 1513.00246 + 1560.70394 + 1610.85232 + 1658.55380 + 1708.70217 + 1756.40366 + 1806.55203 + 1854.25352 + 3/1 diff --git a/scales/escapade.scl b/scales/escapade.scl new file mode 100644 index 0000000..249951c --- /dev/null +++ b/scales/escapade.scl @@ -0,0 +1,27 @@ +! escapade.scl +! +Escapade temperament, g=55.275493, 5-limit + 22 +! + 55.27549 + 110.55099 + 165.82648 + 221.10197 + 276.37746 + 331.65296 + 386.92845 + 442.20394 + 497.47944 + 552.75493 + 608.03042 + 663.30592 + 702.52056 + 757.79606 + 813.07155 + 868.34704 + 923.62254 + 978.89803 + 1034.17352 + 1089.44901 + 1144.72451 + 2/1 diff --git a/scales/escot.scl b/scales/escot.scl new file mode 100644 index 0000000..1ceb4d6 --- /dev/null +++ b/scales/escot.scl @@ -0,0 +1,17 @@ +! escot.scl +! +Nicolas Escot, Arcane 17 temperament + 12 +! + 17/16 + 9/8 + 81/68 + 81/64 + 729/544 + 729/512 + 3/2 + 51/32 + 27/16 + 243/136 + 243/128 + 2/1 diff --git a/scales/et-mix24.scl b/scales/et-mix24.scl new file mode 100644 index 0000000..0caf650 --- /dev/null +++ b/scales/et-mix24.scl @@ -0,0 +1,185 @@ +! et-mix24.scl +! +Mix of all equal temperaments from 1-24 (= 13-24) + 180 +! + 50.00000 + 52.17391 + 54.54545 + 57.14286 + 60.00000 + 63.15789 + 66.66667 + 70.58824 + 75.00000 + 80.00000 + 85.71429 + 92.30769 + 100.00000 + 104.34783 + 109.09091 + 114.28571 + 120.00000 + 126.31579 + 133.33333 + 141.17647 + 150.00000 + 156.52174 + 160.00000 + 163.63636 + 171.42857 + 180.00000 + 184.61538 + 189.47368 + 200.00000 + 208.69565 + 211.76471 + 218.18182 + 225.00000 + 228.57143 + 240.00000 + 250.00000 + 252.63158 + 257.14286 + 260.86957 + 266.66667 + 272.72727 + 276.92308 + 282.35294 + 285.71429 + 300.00000 + 313.04348 + 315.78947 + 320.00000 + 327.27273 + 333.33333 + 342.85714 + 350.00000 + 352.94118 + 360.00000 + 365.21739 + 369.23077 + 375.00000 + 378.94737 + 381.81818 + 400.00000 + 417.39130 + 420.00000 + 423.52941 + 428.57143 + 436.36364 + 442.10526 + 450.00000 + 457.14286 + 461.53846 + 466.66667 + 469.56522 + 480.00000 + 490.90909 + 494.11765 + 500.00000 + 505.26316 + 514.28571 + 521.73913 + 525.00000 + 533.33333 + 540.00000 + 545.45455 + 550.00000 + 553.84615 + 560.00000 + 564.70588 + 568.42105 + 571.42857 + 573.91304 + 600.00000 + 626.08696 + 628.57143 + 631.57895 + 635.29412 + 640.00000 + 646.15385 + 650.00000 + 654.54545 + 660.00000 + 666.66667 + 675.00000 + 678.26087 + 685.71429 + 694.73684 + 700.00000 + 705.88235 + 709.09091 + 720.00000 + 730.43478 + 733.33333 + 738.46154 + 742.85714 + 750.00000 + 757.89474 + 763.63636 + 771.42857 + 776.47059 + 780.00000 + 782.60870 + 800.00000 + 818.18182 + 821.05263 + 825.00000 + 830.76923 + 834.78261 + 840.00000 + 847.05882 + 850.00000 + 857.14286 + 866.66667 + 872.72727 + 880.00000 + 884.21053 + 886.95652 + 900.00000 + 914.28571 + 917.64706 + 923.07692 + 927.27273 + 933.33333 + 939.13043 + 942.85714 + 947.36842 + 950.00000 + 960.00000 + 971.42857 + 975.00000 + 981.81818 + 988.23529 + 991.30435 + 1000.00000 + 1010.52632 + 1015.38462 + 1020.00000 + 1028.57143 + 1036.36364 + 1040.00000 + 1043.47826 + 1050.00000 + 1058.82353 + 1066.66667 + 1073.68421 + 1080.00000 + 1085.71429 + 1090.90909 + 1095.65217 + 1100.00000 + 1107.69231 + 1114.28571 + 1120.00000 + 1125.00000 + 1129.41176 + 1133.33333 + 1136.84211 + 1140.00000 + 1142.85714 + 1145.45455 + 1147.82609 + 1150.00000 + 2/1 diff --git a/scales/et-mix6.scl b/scales/et-mix6.scl new file mode 100644 index 0000000..4c3bfcc --- /dev/null +++ b/scales/et-mix6.scl @@ -0,0 +1,17 @@ +! et-mix6.scl +! +Mix of equal temperaments from 1-6 (= 4-6) + 12 +! + 200.00000 + 240.00000 + 300.00000 + 400.00000 + 480.00000 + 600.00000 + 720.00000 + 800.00000 + 900.00000 + 960.00000 + 1000.00000 + 2/1 diff --git a/scales/etdays.scl b/scales/etdays.scl new file mode 100644 index 0000000..e944b29 --- /dev/null +++ b/scales/etdays.scl @@ -0,0 +1,371 @@ +! etdays.scl +! +365.24218967th root of 2, average number of days per year + 366 +! + 3.28549 + 6.57098 + 9.85647 + 13.14196 + 16.42746 + 19.71295 + 22.99844 + 26.28393 + 29.56942 + 32.85491 + 36.14040 + 39.42589 + 42.71139 + 45.99688 + 49.28237 + 52.56786 + 55.85335 + 59.13884 + 62.42433 + 65.70982 + 68.99532 + 72.28081 + 75.56630 + 78.85179 + 82.13728 + 85.42277 + 88.70826 + 91.99375 + 95.27924 + 98.56474 + 101.85023 + 105.13572 + 108.42121 + 111.70670 + 114.99219 + 118.27768 + 121.56317 + 124.84867 + 128.13416 + 131.41965 + 134.70514 + 137.99063 + 141.27612 + 144.56161 + 147.84710 + 151.13260 + 154.41809 + 157.70358 + 160.98907 + 164.27456 + 167.56005 + 170.84554 + 174.13103 + 177.41652 + 180.70202 + 183.98751 + 187.27300 + 190.55849 + 193.84398 + 197.12947 + 200.41496 + 203.70045 + 206.98595 + 210.27144 + 213.55693 + 216.84242 + 220.12791 + 223.41340 + 226.69889 + 229.98438 + 233.26988 + 236.55537 + 239.84086 + 243.12635 + 246.41184 + 249.69733 + 252.98282 + 256.26831 + 259.55380 + 262.83930 + 266.12479 + 269.41028 + 272.69577 + 275.98126 + 279.26675 + 282.55224 + 285.83773 + 289.12323 + 292.40872 + 295.69421 + 298.97970 + 302.26519 + 305.55068 + 308.83617 + 312.12166 + 315.40716 + 318.69265 + 321.97814 + 325.26363 + 328.54912 + 331.83461 + 335.12010 + 338.40559 + 341.69108 + 344.97658 + 348.26207 + 351.54756 + 354.83305 + 358.11854 + 361.40403 + 364.68952 + 367.97501 + 371.26051 + 374.54600 + 377.83149 + 381.11698 + 384.40247 + 387.68796 + 390.97345 + 394.25894 + 397.54444 + 400.82993 + 404.11542 + 407.40091 + 410.68640 + 413.97189 + 417.25738 + 420.54287 + 423.82836 + 427.11386 + 430.39935 + 433.68484 + 436.97033 + 440.25582 + 443.54131 + 446.82680 + 450.11229 + 453.39779 + 456.68328 + 459.96877 + 463.25426 + 466.53975 + 469.82524 + 473.11073 + 476.39622 + 479.68172 + 482.96721 + 486.25270 + 489.53819 + 492.82368 + 496.10917 + 499.39466 + 502.68015 + 505.96564 + 509.25114 + 512.53663 + 515.82212 + 519.10761 + 522.39310 + 525.67859 + 528.96408 + 532.24957 + 535.53507 + 538.82056 + 542.10605 + 545.39154 + 548.67703 + 551.96252 + 555.24801 + 558.53350 + 561.81900 + 565.10449 + 568.38998 + 571.67547 + 574.96096 + 578.24645 + 581.53194 + 584.81743 + 588.10292 + 591.38842 + 594.67391 + 597.95940 + 601.24489 + 604.53038 + 607.81587 + 611.10136 + 614.38685 + 617.67235 + 620.95784 + 624.24333 + 627.52882 + 630.81431 + 634.09980 + 637.38529 + 640.67078 + 643.95628 + 647.24177 + 650.52726 + 653.81275 + 657.09824 + 660.38373 + 663.66922 + 666.95471 + 670.24020 + 673.52570 + 676.81119 + 680.09668 + 683.38217 + 686.66766 + 689.95315 + 693.23864 + 696.52413 + 699.80963 + 703.09512 + 706.38061 + 709.66610 + 712.95159 + 716.23708 + 719.52257 + 722.80806 + 726.09356 + 729.37905 + 732.66454 + 735.95003 + 739.23552 + 742.52101 + 745.80650 + 749.09199 + 752.37748 + 755.66298 + 758.94847 + 762.23396 + 765.51945 + 768.80494 + 772.09043 + 775.37592 + 778.66141 + 781.94691 + 785.23240 + 788.51789 + 791.80338 + 795.08887 + 798.37436 + 801.65985 + 804.94534 + 808.23084 + 811.51633 + 814.80182 + 818.08731 + 821.37280 + 824.65829 + 827.94378 + 831.22927 + 834.51476 + 837.80026 + 841.08575 + 844.37124 + 847.65673 + 850.94222 + 854.22771 + 857.51320 + 860.79869 + 864.08419 + 867.36968 + 870.65517 + 873.94066 + 877.22615 + 880.51164 + 883.79713 + 887.08262 + 890.36812 + 893.65361 + 896.93910 + 900.22459 + 903.51008 + 906.79557 + 910.08106 + 913.36655 + 916.65204 + 919.93754 + 923.22303 + 926.50852 + 929.79401 + 933.07950 + 936.36499 + 939.65048 + 942.93597 + 946.22147 + 949.50696 + 952.79245 + 956.07794 + 959.36343 + 962.64892 + 965.93441 + 969.21990 + 972.50540 + 975.79089 + 979.07638 + 982.36187 + 985.64736 + 988.93285 + 992.21834 + 995.50383 + 998.78932 + 1002.07482 + 1005.36031 + 1008.64580 + 1011.93129 + 1015.21678 + 1018.50227 + 1021.78776 + 1025.07325 + 1028.35875 + 1031.64424 + 1034.92973 + 1038.21522 + 1041.50071 + 1044.78620 + 1048.07169 + 1051.35718 + 1054.64268 + 1057.92817 + 1061.21366 + 1064.49915 + 1067.78464 + 1071.07013 + 1074.35562 + 1077.64111 + 1080.92660 + 1084.21210 + 1087.49759 + 1090.78308 + 1094.06857 + 1097.35406 + 1100.63955 + 1103.92504 + 1107.21053 + 1110.49603 + 1113.78152 + 1117.06701 + 1120.35250 + 1123.63799 + 1126.92348 + 1130.20897 + 1133.49446 + 1136.77996 + 1140.06545 + 1143.35094 + 1146.63643 + 1149.92192 + 1153.20741 + 1156.49290 + 1159.77839 + 1163.06388 + 1166.34938 + 1169.63487 + 1172.92036 + 1176.20585 + 1179.49134 + 1182.77683 + 1186.06232 + 1189.34781 + 1192.63331 + 1195.91880 + 1199.20429 + 1202.48978 diff --git a/scales/euler.scl b/scales/euler.scl new file mode 100644 index 0000000..d1b3bc6 --- /dev/null +++ b/scales/euler.scl @@ -0,0 +1,17 @@ +! euler.scl +! +Euler's Monochord (a mode of Ellis's duodene) (1739), genus [33355] + 12 +! + 25/24 + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 225/128 + 15/8 + 2/1 diff --git a/scales/euler20.scl b/scales/euler20.scl new file mode 100644 index 0000000..fb025af --- /dev/null +++ b/scales/euler20.scl @@ -0,0 +1,25 @@ +! euler20.scl +! +Genus [3333555] tempered by 225/224-planar + 20 +! + 83.67670 + 152.13946 + 199.68304 + 268.14580 + 351.82250 + 384.15214 + 399.36609 + 467.82884 + 583.83518 + 652.29794 + 699.84152 + 768.30428 + 783.51823 + 851.98098 + 899.52456 + 967.98732 + 1083.99366 + 1152.45642 + 1167.67037 + 2/1 diff --git a/scales/euler24.scl b/scales/euler24.scl new file mode 100644 index 0000000..ca1c285 --- /dev/null +++ b/scales/euler24.scl @@ -0,0 +1,29 @@ +! euler24.scl +! +Genus [33333555] tempered by 225/224-planar + 24 +! + 83.67670 + 152.13946 + 199.68304 + 268.14580 + 283.35975 + 351.82250 + 384.15214 + 399.36609 + 467.82884 + 583.83518 + 652.29794 + 667.51189 + 699.84152 + 768.30428 + 783.51823 + 851.98098 + 899.52456 + 967.98732 + 1051.66402 + 1083.99366 + 1099.20761 + 1152.45642 + 1167.67037 + 2/1 diff --git a/scales/euler_diat.scl b/scales/euler_diat.scl new file mode 100644 index 0000000..a8c43b2 --- /dev/null +++ b/scales/euler_diat.scl @@ -0,0 +1,13 @@ +! euler_diat.scl +! +Euler's genus diatonicum veterum correctum, 8-tone triadic cluster 4:5:6, genus [3335] + 8 +! + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/euler_enh.scl b/scales/euler_enh.scl new file mode 100644 index 0000000..5ee3d80 --- /dev/null +++ b/scales/euler_enh.scl @@ -0,0 +1,12 @@ +! euler_enh.scl +! +Euler's Old Enharmonic, From Tentamen Novae Theoriae Musicae + 7 +! + 128/125 + 256/243 + 4/3 + 3/2 + 192/125 + 128/81 + 2/1 diff --git a/scales/euler_gm.scl b/scales/euler_gm.scl new file mode 100644 index 0000000..7a770ce --- /dev/null +++ b/scales/euler_gm.scl @@ -0,0 +1,13 @@ +! euler_gm.scl +! +Euler's Genus Musicum, Octony based on Archytas's Enharmonic + 8 +! + 28/27 + 16/15 + 448/405 + 4/3 + 112/81 + 64/45 + 1792/1215 + 2/1 diff --git a/scales/even12a.scl b/scales/even12a.scl new file mode 100644 index 0000000..90b67aa --- /dev/null +++ b/scales/even12a.scl @@ -0,0 +1,16 @@ +! even12a.scl +first maximally even {15/14,16/15,21/20,25/24} scale +12 +! +21/20 +35/32 +7/6 +5/4 +21/16 +45/32 +3/2 +25/16 +105/64 +7/4 +15/8 +2/1 diff --git a/scales/even12b.scl b/scales/even12b.scl new file mode 100644 index 0000000..c41b7d4 --- /dev/null +++ b/scales/even12b.scl @@ -0,0 +1,16 @@ +! even12b.scl +second maximally even {15/14,16/15,21/20,25/24} scale +12 +! +21/20 +28/25 +6/5 +5/4 +4/3 +7/5 +3/2 +63/40 +42/25 +7/4 +15/8 +2/1 diff --git a/scales/exptriad2.scl b/scales/exptriad2.scl new file mode 100644 index 0000000..cdf78eb --- /dev/null +++ b/scales/exptriad2.scl @@ -0,0 +1,12 @@ +! exptriad2.scl +! +Two times expanded major triad + 7 +! + 75/64 + 5/4 + 45/32 + 3/2 + 225/128 + 15/8 + 2/1 diff --git a/scales/exptriad3.scl b/scales/exptriad3.scl new file mode 100644 index 0000000..eae6f7d --- /dev/null +++ b/scales/exptriad3.scl @@ -0,0 +1,35 @@ +! exptriad3.scl +! +Three times expanded major triad + 30 +! + 16875/16384 + 135/128 + 16/15 + 1125/1024 + 9/8 + 256/225 + 151875/131072 + 75/64 + 6/5 + 10125/8192 + 5/4 + 675/512 + 4/3 + 5625/4096 + 45/32 + 64/45 + 759375/524288 + 375/256 + 3/2 + 50625/32768 + 25/16 + 8/5 + 3375/2048 + 5/3 + 128/75 + 225/128 + 15/8 + 253125/131072 + 2025/1024 + 2/1 diff --git a/scales/farey12_101.scl b/scales/farey12_101.scl new file mode 100644 index 0000000..eb0eaea --- /dev/null +++ b/scales/farey12_101.scl @@ -0,0 +1,17 @@ +! farey12_101.scl +! +Common denominator=101 Farey approximation to 12-tET + 12 +! + 107/101 + 113/101 + 120/101 + 127/101 + 135/101 + 143/101 + 151/101 + 160/101 + 169/101 + 180/101 + 191/101 + 2/1 diff --git a/scales/farey12_116.scl b/scales/farey12_116.scl new file mode 100644 index 0000000..04ef954 --- /dev/null +++ b/scales/farey12_116.scl @@ -0,0 +1,17 @@ +! farey12_116.scl +! +Common denominator=116 Farey approximation to 12-tET, well-temperament + 12 +! + 123/116 + 65/58 + 69/58 + 73/58 + 155/116 + 41/29 + 3/2 + 46/29 + 195/116 + 207/116 + 219/116 + 2/1 diff --git a/scales/farey12_65.scl b/scales/farey12_65.scl new file mode 100644 index 0000000..9d72dae --- /dev/null +++ b/scales/farey12_65.scl @@ -0,0 +1,17 @@ +! farey12_65.scl +! +Common denominator=65 Farey approximation to 12-tET + 12 +! + 69/65 + 73/65 + 77/65 + 82/65 + 87/65 + 92/65 + 97/65 + 103/65 + 109/65 + 116/65 + 123/65 + 2/1 diff --git a/scales/farey12_80.scl b/scales/farey12_80.scl new file mode 100644 index 0000000..da40aad --- /dev/null +++ b/scales/farey12_80.scl @@ -0,0 +1,17 @@ +! farey12_80.scl +! +Common denominator=80 Farey approximation to 12-tET + 12 +! + 17/16 + 9/8 + 19/16 + 101/80 + 107/80 + 113/80 + 3/2 + 127/80 + 27/16 + 143/80 + 151/80 + 2/1 diff --git a/scales/farey3.scl b/scales/farey3.scl new file mode 100644 index 0000000..5c3daa7 --- /dev/null +++ b/scales/farey3.scl @@ -0,0 +1,10 @@ +! farey3.scl +! +Farey fractions between 0 and 1 until 3rd level, normalised by 2/1 + 5 +! + 6/5 + 4/3 + 3/2 + 8/5 + 2/1 diff --git a/scales/farey4.scl b/scales/farey4.scl new file mode 100644 index 0000000..bc45902 --- /dev/null +++ b/scales/farey4.scl @@ -0,0 +1,14 @@ +! farey4.scl +! +Farey fractions between 0 and 1 until 4th level, normalised by 2/1 + 9 +! + 8/7 + 6/5 + 5/4 + 4/3 + 10/7 + 3/2 + 8/5 + 12/7 + 2/1 diff --git a/scales/farey5.scl b/scales/farey5.scl new file mode 100644 index 0000000..8c1e0f4 --- /dev/null +++ b/scales/farey5.scl @@ -0,0 +1,25 @@ +! farey5.scl +! +Farey fractions between 0 and 1 until 5th level, normalised by 2/1 + 20 +! + 12/11 + 10/9 + 8/7 + 7/6 + 6/5 + 16/13 + 5/4 + 14/11 + 4/3 + 7/5 + 10/7 + 16/11 + 3/2 + 20/13 + 14/9 + 8/5 + 5/3 + 12/7 + 16/9 + 2/1 diff --git a/scales/farnsworth.scl b/scales/farnsworth.scl new file mode 100644 index 0000000..5520798 --- /dev/null +++ b/scales/farnsworth.scl @@ -0,0 +1,12 @@ +! farnsworth.scl +! +Farnsworth's scale + 7 +! + 9/8 + 5/4 + 21/16 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/fibo_10.scl b/scales/fibo_10.scl new file mode 100644 index 0000000..31951de --- /dev/null +++ b/scales/fibo_10.scl @@ -0,0 +1,15 @@ +! fibo_10.scl +! +First 13 Fibonacci numbers reduced by 2/1 + 10 +! + 17/16 + 9/8 + 5/4 + 21/16 + 89/64 + 3/2 + 13/8 + 55/32 + 233/128 + 2/1 diff --git a/scales/fibo_9.scl b/scales/fibo_9.scl new file mode 100644 index 0000000..5610b8e --- /dev/null +++ b/scales/fibo_9.scl @@ -0,0 +1,13 @@ +! fibo_9.scl +! +First 9 Fibonacci terms reduced by 2/1, B. McLaren, XH 13, 1991 + 8 +! + 17/16 + 5/4 + 21/16 + 89/64 + 3/2 + 13/8 + 55/32 + 2/1 diff --git a/scales/finnamore.scl b/scales/finnamore.scl new file mode 100644 index 0000000..9d1d4ab --- /dev/null +++ b/scales/finnamore.scl @@ -0,0 +1,13 @@ +! finnamore.scl +! +David J. Finnamore, tetrachordal scale, 17/16x19/17x64/57, TL 9-5-97 + 8 +! + 17/16 + 19/16 + 4/3 + 3/2 + 51/32 + 7/4 + 57/32 + 2/1 diff --git a/scales/finnamore53.scl b/scales/finnamore53.scl new file mode 100644 index 0000000..6fd6924 --- /dev/null +++ b/scales/finnamore53.scl @@ -0,0 +1,21 @@ +! finnamore53.scl +! +David J. Finnamore, 53-limit tuning for "Crawlspace" (1998) + 16 +! + 35/32 + 19/16 + 5/4 + 21/16 + 11/8 + 45/32 + 23/16 + 3/2 + 25/16 + 51/32 + 13/8 + 53/32 + 27/16 + 7/4 + 29/16 + 2/1 diff --git a/scales/finnamore_11.scl b/scales/finnamore_11.scl new file mode 100644 index 0000000..1c1cc72 --- /dev/null +++ b/scales/finnamore_11.scl @@ -0,0 +1,19 @@ +! finnamore_11.scl +! +David J. Finnamore, 11-limit scale, TL 3-9-98 + 14 +! + 11/10 + 9/8 + 7/6 + 99/80 + 81/64 + 21/16 + 4/3 + 3/2 + 33/20 + 27/16 + 7/4 + 297/160 + 63/32 + 2/1 diff --git a/scales/finnamore_7.scl b/scales/finnamore_7.scl new file mode 100644 index 0000000..210bcb6 --- /dev/null +++ b/scales/finnamore_7.scl @@ -0,0 +1,17 @@ +! finnamore_7.scl +! +David J. Finnamore, TL 1 Sept '98. 7-tone Pyth. with 9/8 div. in 21/20 &15/14 + 12 +! + 21/20 + 9/8 + 189/160 + 81/64 + 4/3 + 7/5 + 3/2 + 63/40 + 27/16 + 567/320 + 243/128 + 2/1 diff --git a/scales/finnamore_7a.scl b/scales/finnamore_7a.scl new file mode 100644 index 0000000..986618a --- /dev/null +++ b/scales/finnamore_7a.scl @@ -0,0 +1,17 @@ +! finnamore_7a.scl +! +David J. Finnamore, TL 1 Sept '98. 7-tone Pyth. with 9/8 div. in 15/14 &21/20 + 12 +! + 15/14 + 9/8 + 135/112 + 81/64 + 4/3 + 10/7 + 3/2 + 45/28 + 27/16 + 405/224 + 243/128 + 2/1 diff --git a/scales/finnamore_jc.scl b/scales/finnamore_jc.scl new file mode 100644 index 0000000..b539342 --- /dev/null +++ b/scales/finnamore_jc.scl @@ -0,0 +1,12 @@ +! finnamore_jc.scl +! +Chalmers' modification of finnamore.scl, 19/18 x 9/8 x 64/57, TL 9-5-97 + 7 +! + 19/18 + 19/16 + 4/3 + 3/2 + 19/12 + 57/32 + 2/1 diff --git a/scales/fisher.scl b/scales/fisher.scl new file mode 100644 index 0000000..ab3ac2d --- /dev/null +++ b/scales/fisher.scl @@ -0,0 +1,17 @@ +! fisher.scl +! +Alexander Metcalf Fisher's modified meantone temperament (1818) + 12 +! + 76.04900 + 193.15686 + 297.48515 + 5/4 + 502.42827 + 579.47058 + 696.57843 + 780.06791 + 889.73529 + 1004.85654 + 1082.89215 + 2/1 diff --git a/scales/fj-10tet.scl b/scales/fj-10tet.scl new file mode 100644 index 0000000..ea268ed --- /dev/null +++ b/scales/fj-10tet.scl @@ -0,0 +1,15 @@ +! fj-10tet.scl +! +Franck Jedrzejewski continued fractions approx. of 10-tet + 10 +! +15/14 +85/74 +16/13 +95/72 +99/70 +97/64 +13/8 +47/27 +28/15 +2/1 diff --git a/scales/fj-12tet.scl b/scales/fj-12tet.scl new file mode 100644 index 0000000..cf763a2 --- /dev/null +++ b/scales/fj-12tet.scl @@ -0,0 +1,17 @@ +! fj-12tet.scl +! +Franck Jedrzejewski continued fractions approx. of 12-tet + 12 +! +89/84 +55/49 +44/37 +63/50 +4/3 +99/70 +442/295 +27/17 +37/22 +98/55 +15/8 +2/1 diff --git a/scales/fj-13tet.scl b/scales/fj-13tet.scl new file mode 100644 index 0000000..41e9ab7 --- /dev/null +++ b/scales/fj-13tet.scl @@ -0,0 +1,18 @@ +! fj-13tet.scl +! +Franck Jedrzejewski continued fractions approx. of 13-tet + 13 +! +77/73 +89/80 +88/75 +26/21 +47/36 +84/61 +61/42 +72/47 +21/13 +75/44 +7/44 +55/29 +2 diff --git a/scales/fj-14tet.scl b/scales/fj-14tet.scl new file mode 100644 index 0000000..02f6246 --- /dev/null +++ b/scales/fj-14tet.scl @@ -0,0 +1,19 @@ +! fj-14tet.scl +! +Franck Jedrzejewski continued fractions approx. of 14-tet + 14 +! +62/59 +53/48 +29/25 +39/32 +73/57 +35/26 +99/70 +52/35 +89/57 +64/39 +50/29 +96/53 +59/31 +2/1 diff --git a/scales/fj-15tet.scl b/scales/fj-15tet.scl new file mode 100644 index 0000000..af4e97a --- /dev/null +++ b/scales/fj-15tet.scl @@ -0,0 +1,20 @@ +! fj-15tet.scl +! +Franck Jedrzejewski continued fractions approx. of 15-tet + 15 +! +22/21 +34/31 +85/74 +77/64 +63/50 +95/72 +76/55 +55/38 +97/64 +27/17 +3/2 +47/27 +31/17 +21/11 +2/1 diff --git a/scales/fj-16tet.scl b/scales/fj-16tet.scl new file mode 100644 index 0000000..212261d --- /dev/null +++ b/scales/fj-16tet.scl @@ -0,0 +1,21 @@ +! fj-16tet.scl +! +Franck Jedrzejewski continued fractions approx. of 16-tet + 16 +! +47/45 +12/11 +41/36 +44/37 +77/62 +83/64 +65/48 +99/70 +96/65 +91/59 +29/18 +37/22 +72/41 +11/6 +90/47 +2/1 diff --git a/scales/fj-17tet.scl b/scales/fj-17tet.scl new file mode 100644 index 0000000..28587b6 --- /dev/null +++ b/scales/fj-17tet.scl @@ -0,0 +1,22 @@ +! fj-17tet.scl +! +Franck Jedrzejewski continued fractions approx. of 17-tet + 17 +! +25/24 +51/47 +26/23 +93/79 +38/31 +23/18 +145/109 +97/70 +10/7 +3/2 +83/53 +31/19 +17/10 +23/13 +59/32 +48/25 +2/1 diff --git a/scales/fj-18tet.scl b/scales/fj-18tet.scl new file mode 100644 index 0000000..92671e2 --- /dev/null +++ b/scales/fj-18tet.scl @@ -0,0 +1,23 @@ +! fj-18tet.scl +! +Franck Jedrzejewski continued fractions approx. of 18-tet + 18 +! +53/51 +27/25 +55/49 +7/6 +40/33 +63/50 +55/42 +83/61 +99/70 +97/66 +84/55 +27/17 +33/20 +12/7 +98/55 +50/27 +25/13 +2/1 diff --git a/scales/fj-19tet.scl b/scales/fj-19tet.scl new file mode 100644 index 0000000..94b1fe3 --- /dev/null +++ b/scales/fj-19tet.scl @@ -0,0 +1,24 @@ +! fj-19tet.scl +! +Franck Jedrzejewski continued fractions approx. of 19-tet + 19 +! +28/27 +71/66 +29/26 +81/70 +6/5 +61/49 +71/55 +79/59 +25/18 +36/25 +118/79 +79/51 +45/28 +5/3 +19/11 +95/53 +13/7 +27/14 +2/1 diff --git a/scales/fj-20tet.scl b/scales/fj-20tet.scl new file mode 100644 index 0000000..e9d275c --- /dev/null +++ b/scales/fj-20tet.scl @@ -0,0 +1,25 @@ +! fj-20tet.scl +! +Franck Jedrzejewski continued fractions approx. of 20-tet + 20 +! +88/85 +15/14 +81/73 +85/74 +44/37 +16/13 +65/51 +95/72 +56/41 +99/70 +41/28 +97/64 +91/58 +13/8 +37/22 +47/27 +9/5 +28/15 +85/44 +2/1 diff --git a/scales/fj-21tet.scl b/scales/fj-21tet.scl new file mode 100644 index 0000000..c526a24 --- /dev/null +++ b/scales/fj-21tet.scl @@ -0,0 +1,26 @@ +! fj-21tet.scl +! +Franck Jedrzejewski continued fractions approx. of 21-tet + 21 +! +31/30 +47/44 +53/48 +97/85 +46/39 +39/32 +63/50 +56/43 +35/26 +32/23 +23/16 +52/35 +43/28 +27/17 +64/39 +39/23 +7/4 +96/53 +88/47 +89/46 +2/1 diff --git a/scales/fj-22tet.scl b/scales/fj-22tet.scl new file mode 100644 index 0000000..4a8453e --- /dev/null +++ b/scales/fj-22tet.scl @@ -0,0 +1,27 @@ +! fj-22tet.scl +! +Franck Jedrzejewski continued fractions approx. of 22-tet + 22 +! +32/31 +49/46 +122/111 +76/67 +48/41 +29/24 +96/77 +9/7 +81/61 +37/27 +99/70 +54/37 +3/2 +3/2 +77/48 +48/29 +41/24 +67/38 +20/11 +77/41 +31/16 +2/1 diff --git a/scales/fj-23tet.scl b/scales/fj-23tet.scl new file mode 100644 index 0000000..5d902e3 --- /dev/null +++ b/scales/fj-23tet.scl @@ -0,0 +1,28 @@ +! fj-23tet.scl +! +Franck Jedrzejewski continued fractions approx. of 23-tet + 23 +! +34/33 +17/16 +81/74 +44/39 +50/43 +133/111 +21/17 +14/11 +80/61 +73/54 +39/28 +56/39 +37/25 +61/40 +11/7 +34/21 +5/3 +43/25 +39/22 +95/52 +32/17 +33/17 +2/1 diff --git a/scales/fj-24tet.scl b/scales/fj-24tet.scl new file mode 100644 index 0000000..9a4f9f2 --- /dev/null +++ b/scales/fj-24tet.scl @@ -0,0 +1,29 @@ +! fj-24tet.scl +! +Franck Jedrzejewski continued fractions approx. of 24-tet + 24 +! +35/34 +89/84 +12/11 +55/49 +52/45 +44/37 +71/58 +63/50 +83/64 +4/3 +4/3 +99/70 +16/11 +442/295 +91/59 +27/17 +67/41 +37/22 +45/26 +98/55 +11/6 +15/8 +68/35 +2/1 diff --git a/scales/fj-26tet.scl b/scales/fj-26tet.scl new file mode 100644 index 0000000..c09b02d --- /dev/null +++ b/scales/fj-26tet.scl @@ -0,0 +1,31 @@ +! fj-26tet.scl +! +Franck Jedrzejewski continued fractions approx. of 26-tet + 26 +! +38/37 +77/73 +13/12 +89/80 +8/7 +88/75 +47/39 +26/21 +75/59 +47/36 +59/44 +84/61 +99/70 +61/42 +88/59 +72/47 +11/7 +21/13 +78/47 +75/44 +7/4 +7/4 +24/13 +55/29 +37/19 +2/1 diff --git a/scales/fj-30tet.scl b/scales/fj-30tet.scl new file mode 100644 index 0000000..ccf5506 --- /dev/null +++ b/scales/fj-30tet.scl @@ -0,0 +1,35 @@ +! fj-30tet.scl +! +Franck Jedrzejewski continued fractions approx. of 30-tet + 30 +! +44/43 +22/21 +15/14 +34/31 +55/49 +85/74 +67/57 +77/64 +16/13 +63/50 +49/38 +95/72 +27/20 +76/55 +99/70 +55/38 +40/27 +97/64 +76/49 +27/17 +13/8 +3/2 +17/10 +47/27 +98/55 +31/17 +28/15 +21/11 +43/22 +2/1 diff --git a/scales/fj-31tet.scl b/scales/fj-31tet.scl new file mode 100644 index 0000000..52138e2 --- /dev/null +++ b/scales/fj-31tet.scl @@ -0,0 +1,36 @@ +! fj-31tet.scl +! +Franck Jedrzejewski continued fractions approx. of 31-tet + 31 +! +45/44 +23/22 +77/72 +35/32 +85/76 +8/7 +69/59 +55/46 +11/9 +5/4 +78/61 +17/13 +111/83 +93/68 +7/5 +10/7 +19/13 +166/111 +26/17 +61/39 +8/5 +18/11 +97/58 +65/38 +7/4 +93/52 +64/35 +43/23 +44/23 +88/45 +2/1 diff --git a/scales/fj-36tet.scl b/scales/fj-36tet.scl new file mode 100644 index 0000000..cdaada6 --- /dev/null +++ b/scales/fj-36tet.scl @@ -0,0 +1,41 @@ +! fj-36tet.scl +! +Franck Jedrzejewski continued fractions approx. of 36-tet + 36 +! +52/51 +53/51 +89/84 +27/25 +98/89 +55/49 +8/7 +7/6 +44/37 +40/33 +21/17 +63/50 +5/4 +55/42 +4/3 +83/61 +43/31 +99/70 +62/43 +97/66 +442/295 +84/55 +14/9 +27/17 +89/55 +33/20 +37/22 +12/7 +5/3 +98/55 +89/49 +50/27 +15/8 +25/13 +51/26 +2/1 diff --git a/scales/fj-41tet.scl b/scales/fj-41tet.scl new file mode 100644 index 0000000..a0fc841 --- /dev/null +++ b/scales/fj-41tet.scl @@ -0,0 +1,46 @@ +! fj-41tet.scl +! +Franck Jedrzejewski continued fractions approx. of 41-tet + 41 +! +60/59 +30/29 +81/77 +46/43 +37/34 +83/75 +9/8 +87/76 +85/73 +45/38 +53/44 +49/40 +76/61 +19/15 +67/52 +38/29 +4/3 +61/45 +91/66 +7/5 +87/61 +29/20 +90/61 +3/2 +29/19 +45/29 +30/19 +61/38 +80/49 +93/56 +76/45 +67/39 +5/3 +16/9 +47/26 +68/37 +43/23 +19/10 +29/15 +59/30 +2/1 diff --git a/scales/fj-42tet.scl b/scales/fj-42tet.scl new file mode 100644 index 0000000..1b91fa7 --- /dev/null +++ b/scales/fj-42tet.scl @@ -0,0 +1,47 @@ +! fj-42tet.scl +! +Franck Jedrzejewski continued fractions approx. of 42-tet + 42 +! +61/60 +31/30 +62/59 +47/44 +38/35 +53/48 +55/49 +97/85 +29/25 +46/39 +253/211 +39/32 +57/46 +63/50 +73/57 +56/43 +94/71 +35/26 +26/19 +32/23 +99/70 +23/16 +19/13 +52/35 +71/47 +43/28 +89/57 +27/17 +71/44 +64/39 +5/3 +39/23 +50/29 +7/4 +98/55 +96/53 +35/19 +88/47 +59/31 +89/46 +61/31 +2/1 diff --git a/scales/fj-43tet.scl b/scales/fj-43tet.scl new file mode 100644 index 0000000..2005929 --- /dev/null +++ b/scales/fj-43tet.scl @@ -0,0 +1,48 @@ +! fj-43tet.scl +! +Franck Jedrzejewski continued fractions approx. of 43-tet + 43 +! +63/62 +63/61 +21/20 +16/15 +13/12 +76/69 +75/67 +33/29 +37/32 +47/40 +80/67 +91/75 +37/30 +99/79 +14/11 +22/17 +25/19 +4/3 +72/53 +98/71 +94/67 +67/47 +71/49 +53/36 +199/133 +73/48 +17/11 +3/2 +75/47 +60/37 +89/54 +67/40 +80/47 +64/37 +58/33 +25/14 +69/38 +24/13 +15/8 +40/21 +31/16 +61/31 +2/1 diff --git a/scales/fj-53tet.scl b/scales/fj-53tet.scl new file mode 100644 index 0000000..0edac36 --- /dev/null +++ b/scales/fj-53tet.scl @@ -0,0 +1,58 @@ +! fj-53tet.scl +! +Franck Jedrzejewski continued fractions approx. of 53-tet + 53 +! +77/76 +39/38 +26/25 +98/93 +79/74 +53/49 +80/73 +151/136 +9/8 +49/43 +97/84 +62/53 +32/27 +6/5 +73/60 +53/43 +306/245 +62/49 +50/39 +9/7 +25/19 +4/3 +77/57 +26/19 +43/31 +59/42 +37/26 +75/52 +19/13 +37/25 +3/2 +38/25 +97/63 +39/25 +49/31 +8/5 +73/45 +23/14 +5/3 +27/16 +53/31 +97/56 +93/53 +16/9 +9/5 +73/40 +98/53 +13/7 +93/49 +25/13 +76/39 +75/38 +2/1 diff --git a/scales/fj-54tet.scl b/scales/fj-54tet.scl new file mode 100644 index 0000000..17697d5 --- /dev/null +++ b/scales/fj-54tet.scl @@ -0,0 +1,59 @@ +! fj-54tet.scl +! +Franck Jedrzejewski continued fractions approx. of 54-tet + 54 +! +78/77 +79/77 +53/51 +20/19 +16/15 +27/25 +35/32 +41/37 +55/49 +83/73 +38/33 +7/6 +13/11 +79/66 +40/33 +70/57 +51/41 +63/50 +97/76 +53/41 +55/42 +61/46 +43/32 +83/61 +51/37 +74/53 +99/70 +53/37 +74/51 +97/66 +67/45 +95/63 +84/55 +82/53 +47/30 +27/17 +82/51 +57/35 +33/20 +5/3 +22/13 +12/7 +33/19 +95/54 +98/55 +74/41 +64/35 +50/27 +15/8 +19/10 +25/13 +39/20 +77/39 +2/1 diff --git a/scales/fj-55tet.scl b/scales/fj-55tet.scl new file mode 100644 index 0000000..9c16016 --- /dev/null +++ b/scales/fj-55tet.scl @@ -0,0 +1,60 @@ +! fj-55tet.scl +! +Franck Jedrzejewski continued fractions approx. of 55-tet + 55 +! +80/79 +40/39 +27/26 +61/58 +49/46 +55/51 +71/65 +73/66 +28/25 +76/67 +85/74 +57/49 +86/73 +68/57 +29/24 +11/9 +83/67 +69/55 +47/37 +9/7 +43/33 +95/72 +4/3 +23/17 +37/27 +68/49 +52/37 +37/26 +49/34 +54/37 +34/23 +229/153 +97/64 +66/43 +143/92 +85/54 +51/32 +8/5 +85/52 +48/29 +57/34 +73/43 +98/57 +47/27 +67/38 +25/14 +47/26 +130/71 +89/48 +77/41 +97/51 +52/27 +39/20 +79/40 +2/1 diff --git a/scales/fj-5tet.scl b/scales/fj-5tet.scl new file mode 100644 index 0000000..b2ee34d --- /dev/null +++ b/scales/fj-5tet.scl @@ -0,0 +1,10 @@ +! fj-5tet.scl +! +Franck Jedrzejewski continued fractions approx. of 5-tet + 5 +! +85/74 +95/72 +97/64 +47/27 +2/1 diff --git a/scales/fj-60tet.scl b/scales/fj-60tet.scl new file mode 100644 index 0000000..d8b9eaa --- /dev/null +++ b/scales/fj-60tet.scl @@ -0,0 +1,65 @@ +! fj-60tet.scl +! +Franck Jedrzejewski continued fractions approx. of 60-tet + 60 +! +87/86 +44/43 +88/85 +22/21 +89/84 +15/14 +90/83 +34/31 +81/73 +55/49 +67/59 +85/74 +43/37 +67/57 +44/37 +77/64 +28/23 +16/13 +66/53 +63/50 +65/51 +49/38 +30/23 +95/72 +4/3 +27/20 +56/41 +76/55 +137/98 +99/70 +93/65 +55/38 +41/28 +40/27 +442/295 +97/64 +23/15 +76/49 +91/58 +27/17 +53/33 +13/8 +23/14 +128/77 +37/22 +17/10 +74/43 +47/27 +37/21 +98/55 +9/5 +31/17 +83/45 +28/15 +15/8 +21/11 +85/44 +43/22 +87/44 +2/1 diff --git a/scales/fj-66tet.scl b/scales/fj-66tet.scl new file mode 100644 index 0000000..26a9b8f --- /dev/null +++ b/scales/fj-66tet.scl @@ -0,0 +1,71 @@ +! fj-66tet.scl +! +Franck Jedrzejewski continued fractions approx. of 66-tet + 66 +! +96/95 +48/47 +32/31 +73/70 +39/37 +49/46 +127/118 +62/57 +122/111 +10/9 +55/49 +76/67 +47/41 +22/19 +48/41 +97/82 +55/46 +29/24 +94/77 +95/77 +96/77 +63/50 +14/11 +9/7 +13/10 +46/35 +81/61 +51/38 +80/59 +37/27 +18/13 +7/5 +99/70 +10/7 +13/9 +54/37 +59/40 +79/53 +3/2 +35/23 +20/13 +143/92 +11/7 +27/17 +77/48 +47/29 +77/47 +48/29 +87/52 +71/42 +41/24 +19/11 +82/47 +67/38 +98/55 +9/5 +20/11 +57/31 +13/7 +77/41 +74/39 +23/12 +31/16 +47/24 +95/48 +2/1 diff --git a/scales/fj-72tet.scl b/scales/fj-72tet.scl new file mode 100644 index 0000000..5484e31 --- /dev/null +++ b/scales/fj-72tet.scl @@ -0,0 +1,77 @@ +! fj-72tet.scl +! +Franck Jedrzejewski continued fractions approx. of 72-tet + 72 +! +104/103 +52/51 +35/34 +53/51 +85/81 +89/84 +46/43 +27/25 +12/11 +98/89 +10/9 +55/49 +17/15 +8/7 +52/45 +7/6 +53/45 +44/37 +6/5 +40/33 +71/58 +21/17 +141/113 +63/50 +14/11 +140/109 +83/64 +55/42 +78/59 +4/3 +31/23 +83/61 +158/115 +43/31 +7/5 +99/70 +10/7 +62/43 +16/11 +97/66 +46/31 +442/295 +59/39 +84/55 +91/59 +14/9 +11/7 +27/17 +8/5 +89/55 +67/41 +33/20 +558/335 +37/22 +90/53 +12/7 +45/26 +194/111 +30/17 +98/55 +9/5 +89/49 +11/6 +50/27 +43/23 +15/8 +61/32 +25/13 +68/35 +51/26 +103/52 +2/1 diff --git a/scales/fj-78tet.scl b/scales/fj-78tet.scl new file mode 100644 index 0000000..ae37334 --- /dev/null +++ b/scales/fj-78tet.scl @@ -0,0 +1,83 @@ +! fj-78tet.scl +! +Franck Jedrzejewski continued fractions approx. of 78-tet + 78 +! +113/112 +57/56 +38/37 +86/83 +23/22 +77/73 +83/78 +73/68 +13/12 +47/43 +43/39 +89/80 +55/49 +94/83 +8/7 +83/72 +57/49 +88/75 +45/38 +43/36 +47/39 +45/37 +92/75 +26/21 +251/201 +63/50 +75/59 +59/46 +22/17 +47/36 +54/41 +97/73 +59/44 +23/17 +15/11 +84/61 +25/18 +7/5 +99/70 +117/82 +36/25 +61/42 +85/58 +34/23 +88/59 +3/2 +41/27 +72/47 +17/11 +92/59 +11/7 +27/17 +8/5 +21/13 +75/46 +51/31 +78/47 +72/43 +49/29 +75/44 +43/25 +85/49 +7/4 +83/47 +98/55 +151/84 +78/43 +86/47 +24/13 +95/51 +47/25 +55/29 +44/23 +83/43 +37/19 +55/28 +111/56 +2/1 diff --git a/scales/fj-7tet.scl b/scales/fj-7tet.scl new file mode 100644 index 0000000..b0958bf --- /dev/null +++ b/scales/fj-7tet.scl @@ -0,0 +1,12 @@ +! fj-7tet.scl +! +Franck Jedrzejewski continued fractions approx. of 7-tet + 7 +! +53/48 +39/32 +35/26 +52/35 +64/39 +96/53 +2/1 diff --git a/scales/fj-84tet.scl b/scales/fj-84tet.scl new file mode 100644 index 0000000..9f72ec5 --- /dev/null +++ b/scales/fj-84tet.scl @@ -0,0 +1,89 @@ +! fj-84tet.scl +! +Franck Jedrzejewski continued fractions approx. of 84-tet + 84 +! +121/120 +61/60 +41/40 +31/30 +99/95 +62/59 +89/84 +47/44 +14/13 +38/35 +23/21 +53/48 +59/53 +55/49 +43/38 +97/85 +84/73 +29/25 +62/53 +46/39 +44/37 +253/211 +81/67 +39/32 +59/48 +57/46 +5/4 +63/50 +47/37 +73/57 +31/24 +56/43 +21/16 +94/71 +4/3 +35/26 +19/14 +26/19 +40/29 +32/23 +7/5 +99/70 +77/54 +23/16 +29/20 +19/13 +28/19 +52/35 +442/295 +71/47 +99/65 +43/28 +48/31 +89/57 +74/47 +27/17 +8/5 +71/44 +96/59 +64/39 +43/26 +5/3 +37/22 +39/23 +53/31 +50/29 +73/42 +7/4 +76/43 +98/55 +97/54 +96/53 +42/23 +35/19 +13/7 +88/47 +15/8 +59/31 +71/37 +89/46 +80/41 +61/31 +119/60 +2/1 diff --git a/scales/fj-8tet.scl b/scales/fj-8tet.scl new file mode 100644 index 0000000..6e050d7 --- /dev/null +++ b/scales/fj-8tet.scl @@ -0,0 +1,13 @@ +! fj-8tet.scl +! +Franck Jedrzejewski continued fractions approx. of 8-tet + 8 +! +12/11 +44/37 +83/64 +99/70 +91/59 +37/22 +11/6 +2/1 diff --git a/scales/fj-90tet.scl b/scales/fj-90tet.scl new file mode 100644 index 0000000..9769c1e --- /dev/null +++ b/scales/fj-90tet.scl @@ -0,0 +1,95 @@ +! fj-90tet.scl +! +Franck Jedrzejewski continued fractions approx. of 90-tet + 90 +! +130/129 +65/64 +44/43 +33/32 +53/51 +22/21 +19/18 +67/63 +15/14 +27/25 +37/34 +34/31 +21/19 +88/79 +55/49 +69/61 +57/50 +85/74 +22/19 +7/6 +67/57 +77/65 +37/31 +77/64 +40/33 +11/9 +16/13 +67/54 +5/4 +63/50 +33/26 +87/68 +49/38 +13/10 +55/42 +95/72 +121/91 +67/50 +27/20 +83/61 +48/35 +76/55 +39/28 +80/57 +99/70 +57/40 +56/39 +55/38 +35/24 +97/66 +40/27 +100/67 +3/2 +97/64 +84/55 +20/13 +76/49 +25/16 +63/40 +27/17 +8/5 +79/49 +13/8 +18/11 +33/20 +128/77 +62/37 +27/16 +17/10 +12/7 +19/11 +47/27 +93/53 +122/69 +98/55 +79/44 +38/21 +31/17 +68/37 +50/27 +28/15 +47/25 +36/19 +21/11 +25/13 +64/33 +43/22 +65/33 +129/65 +2/1 diff --git a/scales/fj-96tet.scl b/scales/fj-96tet.scl new file mode 100644 index 0000000..2d3f152 --- /dev/null +++ b/scales/fj-96tet.scl @@ -0,0 +1,101 @@ +! fj-96tet.scl +! +Franck Jedrzejewski continued fractions approx. of 96-tet + 96 +! +138/137 +70/69 +47/46 +35/34 +28/27 +47/45 +61/58 +89/84 +16/15 +43/40 +131/121 +12/11 +67/61 +52/47 +39/35 +55/49 +26/23 +41/36 +39/34 +52/45 +64/55 +34/29 +98/83 +44/37 +109/91 +76/63 +96/79 +71/58 +90/73 +77/62 +5/4 +63/50 +33/26 +23/18 +94/73 +83/64 +64/49 +25/19 +53/40 +4/3 +39/29 +65/48 +15/11 +158/115 +18/13 +46/33 +73/52 +99/70 +47/33 +33/23 +13/9 +16/11 +22/15 +96/65 +61/41 +442/295 +83/55 +38/25 +49/32 +91/59 +73/47 +97/62 +52/33 +27/17 +291/182 +29/18 +73/45 +67/41 +79/48 +63/38 +5/3 +37/22 +83/49 +29/17 +55/32 +45/26 +68/39 +72/41 +23/13 +98/55 +70/39 +47/26 +71/39 +11/6 +24/13 +80/43 +15/8 +168/89 +19/10 +90/47 +27/14 +68/35 +92/47 +69/35 +137/69 +2/1 diff --git a/scales/fj-9tet.scl b/scales/fj-9tet.scl new file mode 100644 index 0000000..848d741 --- /dev/null +++ b/scales/fj-9tet.scl @@ -0,0 +1,14 @@ +! fj-9tet.scl +! +Franck Jedrzejewski continued fractions approx. of 9-tet + 9 +! +27/25 +7/6 +63/50 +83/61 +97/66 +27/17 +12/7 +50/27 +2/1 diff --git a/scales/flavel.scl b/scales/flavel.scl new file mode 100644 index 0000000..bdc9798 --- /dev/null +++ b/scales/flavel.scl @@ -0,0 +1,17 @@ +! flavel.scl +! +Bill Flavel's just tuning, mode of Ellis's Just Harmonium. Tuning List 06-05-98 + 12 +! + 25/24 + 10/9 + 9/8 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/fogliano.scl b/scales/fogliano.scl new file mode 100644 index 0000000..f4f9e7a --- /dev/null +++ b/scales/fogliano.scl @@ -0,0 +1,19 @@ +! fogliano.scl +! +Fogliano's Monochord with D-/D and Bb-/Bb + 14 +! + 25/24 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/fogliano1.scl b/scales/fogliano1.scl new file mode 100644 index 0000000..8a7610f --- /dev/null +++ b/scales/fogliano1.scl @@ -0,0 +1,17 @@ +! fogliano1.scl +! +Fogliano's Monochord no.1, Musica theorica (1529). Fokker block 81/80 128/125 + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/fogliano2.scl b/scales/fogliano2.scl new file mode 100644 index 0000000..722ed18 --- /dev/null +++ b/scales/fogliano2.scl @@ -0,0 +1,17 @@ +! fogliano2.scl +! +Fogliano's Monochord no.2 + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/fokker-h.scl b/scales/fokker-h.scl new file mode 100644 index 0000000..e2af064 --- /dev/null +++ b/scales/fokker-h.scl @@ -0,0 +1,24 @@ +! fokker-h.scl +! +Fokker-H 5-limit per.bl. synt.comma&small diesis, KNAW B71, 1968 + 19 +! + 25/24 + 16/15 + 10/9 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/fokker-ht.scl b/scales/fokker-ht.scl new file mode 100644 index 0000000..08e61d8 --- /dev/null +++ b/scales/fokker-ht.scl @@ -0,0 +1,24 @@ +! fokker-ht.scl +! +Tempered version of Fokker-H per.bl. with better 6 tetrads, OdC + 19 +! + 69.30466 + 115.48142 + 183.57143 + 269.36988 + 315.48232 + 384.38240 + 431.05761 + 499.97378 + 568.70373 + 631.29627 + 700.02622 + 768.94239 + 815.61760 + 884.51768 + 930.63012 + 1016.42857 + 1084.51858 + 1130.69534 + 2/1 diff --git a/scales/fokker-k.scl b/scales/fokker-k.scl new file mode 100644 index 0000000..9c4a4f6 --- /dev/null +++ b/scales/fokker-k.scl @@ -0,0 +1,24 @@ +! fokker-k.scl +! +Fokker-K 5-limit per.bl. of 225/224 & 81/80 & 10976/10935, KNAW B71, 1968 + 19 +! + 25/24 + 27/25 + 10/9 + 125/108 + 6/5 + 5/4 + 162/125 + 4/3 + 25/18 + 36/25 + 3/2 + 125/81 + 8/5 + 5/3 + 216/125 + 9/5 + 50/27 + 48/25 + 2/1 diff --git a/scales/fokker-l.scl b/scales/fokker-l.scl new file mode 100644 index 0000000..012d850 --- /dev/null +++ b/scales/fokker-l.scl @@ -0,0 +1,24 @@ +! Fokker-L.scl +! +Fokker-L 7-limit periodicity block 10976/10935 & 225/224 & 15625/15552, 1969 + 19 +! + 28/27 + 175/162 + 125/112 + 144/125 + 6/5 + 56/45 + 35/27 + 75/56 + 25/18 + 36/25 + 112/75 + 54/35 + 45/28 + 5/3 + 125/72 + 224/125 + 324/175 + 27/14 + 2/1 diff --git a/scales/fokker-lt.scl b/scales/fokker-lt.scl new file mode 100644 index 0000000..d94c335 --- /dev/null +++ b/scales/fokker-lt.scl @@ -0,0 +1,24 @@ +! fokker-lt.scl +! +Tempered version of Fokker-L per.bl. with more triads + 19 +! + 67.78818 + 133.37074 + 188.80751 + 249.65319 + 315.36950 + 383.07905 + 451.53821 + 503.52651 + 567.66084 + 632.33916 + 696.47350 + 748.46179 + 816.92095 + 884.63050 + 950.34681 + 1011.19249 + 1066.62926 + 1132.21182 + 2/1 diff --git a/scales/fokker-m.scl b/scales/fokker-m.scl new file mode 100644 index 0000000..79808fd --- /dev/null +++ b/scales/fokker-m.scl @@ -0,0 +1,36 @@ +! fokker-m.scl +! +Fokker-M 7-limit periodicity block 81/80 & 225/224 & 1029/1024, KNAW B72, 1969 + 31 +! + 64/63 + 21/20 + 16/15 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 128/105 + 5/4 + 9/7 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 14/9 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 16/9 + 64/35 + 15/8 + 40/21 + 63/32 + 2/1 diff --git a/scales/fokker-n.scl b/scales/fokker-n.scl new file mode 100644 index 0000000..5789ae0 --- /dev/null +++ b/scales/fokker-n.scl @@ -0,0 +1,36 @@ +! fokker-n.scl +! +Fokker-N 7-limit periodicity block 81/80 & 2100875/2097152 & 1029/1024, 1969 + 31 +! + 64/63 + 256/245 + 16384/15435 + 35/32 + 10/9 + 8/7 + 512/441 + 6/5 + 128/105 + 5145/4096 + 245/192 + 21/16 + 4/3 + 48/35 + 1024/735 + 735/512 + 35/24 + 3/2 + 32/21 + 384/245 + 8192/5145 + 105/64 + 5/3 + 441/256 + 7/4 + 9/5 + 64/35 + 15435/8192 + 245/128 + 63/32 + 2/1 diff --git a/scales/fokker-n2.scl b/scales/fokker-n2.scl new file mode 100644 index 0000000..e458c73 --- /dev/null +++ b/scales/fokker-n2.scl @@ -0,0 +1,36 @@ +! fokker-n2.scl +! +Fokker-N different block shape + 31 +! + 64/63 + 25/24 + 16/15 + 35/32 + 10/9 + 8/7 + 7/6 + 6/5 + 128/105 + 5/4 + 32/25 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 25/16 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 9/5 + 64/35 + 15/8 + 48/25 + 63/32 + 2/1 diff --git a/scales/fokker-p.scl b/scales/fokker-p.scl new file mode 100644 index 0000000..7ffd1f7 --- /dev/null +++ b/scales/fokker-p.scl @@ -0,0 +1,36 @@ +! fokker-p.scl +! +Fokker-P 7-limit periodicity block 65625/65536 & 6144/6125 & 2401/2400, 1969 + 31 +! + 128/125 + 256/245 + 15/14 + 35/32 + 10/9 + 8/7 + 1024/875 + 1225/1024 + 60/49 + 5/4 + 32/25 + 98/75 + 75/56 + 175/128 + 7/5 + 10/7 + 256/175 + 112/75 + 75/49 + 25/16 + 8/5 + 49/30 + 2048/1225 + 875/512 + 7/4 + 9/5 + 64/35 + 28/15 + 245/128 + 125/64 + 2/1 diff --git a/scales/fokker-q.scl b/scales/fokker-q.scl new file mode 100644 index 0000000..e64c043 --- /dev/null +++ b/scales/fokker-q.scl @@ -0,0 +1,58 @@ +! fokker-q.scl +! +Fokker-Q 7-limit per.bl. 225/224 & 4000/3969 & 6144/6125, KNAW B72, 1969 + 53 +! + 64/63 + 36/35 + 25/24 + 21/20 + 16/15 + 160/147 + 35/32 + 10/9 + 9/8 + 8/7 + 144/125 + 7/6 + 25/21 + 6/5 + 128/105 + 315/256 + 5/4 + 80/63 + 32/25 + 125/96 + 21/16 + 4/3 + 27/20 + 48/35 + 25/18 + 7/5 + 10/7 + 36/25 + 35/24 + 40/27 + 3/2 + 32/21 + 192/125 + 25/16 + 63/40 + 8/5 + 512/315 + 105/64 + 5/3 + 42/25 + 12/7 + 125/72 + 7/4 + 16/9 + 9/5 + 64/35 + 147/80 + 15/8 + 40/21 + 48/25 + 35/18 + 63/32 + 2/1 diff --git a/scales/fokker-r.scl b/scales/fokker-r.scl new file mode 100644 index 0000000..ea18b04 --- /dev/null +++ b/scales/fokker-r.scl @@ -0,0 +1,58 @@ +! fokker-r.scl +! +Fokker-R 7-limit per.bl. 4375/4374 & 65625/65536 & 6144/6125, 1969 + 53 +! + 875/864 + 525/512 + 25/24 + 4608/4375 + 16/15 + 175/162 + 192/175 + 10/9 + 9/8 + 875/768 + 4725/4096 + 1024/875 + 32/27 + 6/5 + 175/144 + 216/175 + 5/4 + 4375/3456 + 32/25 + 2048/1575 + 1152/875 + 4/3 + 27/20 + 175/128 + 25/18 + 45/32 + 64/45 + 36/25 + 256/175 + 40/27 + 3/2 + 875/576 + 1575/1024 + 25/16 + 6912/4375 + 8/5 + 175/108 + 288/175 + 5/3 + 27/16 + 875/512 + 8192/4725 + 1536/875 + 16/9 + 9/5 + 175/96 + 324/175 + 15/8 + 4375/2304 + 48/25 + 1024/525 + 1728/875 + 2/1 diff --git a/scales/fokker-s.scl b/scales/fokker-s.scl new file mode 100644 index 0000000..7f2118b --- /dev/null +++ b/scales/fokker-s.scl @@ -0,0 +1,58 @@ +! fokker-s.scl +! +Fokker-S 7-limit per.bl. 4375/4374 & 323/322 & 64827/65536, 1969 + 53 +! + 64/63 + 36/35 + 256/245 + 8575/8192 + 1225/1152 + 27/25 + 35/32 + 10/9 + 6912/6125 + 8/7 + 512/441 + 42875/36864 + 189/160 + 6/5 + 175/144 + 216/175 + 1536/1225 + 80/63 + 245/192 + 1323/1024 + 21/16 + 4/3 + 27/20 + 48/35 + 1024/735 + 800/567 + 567/400 + 735/512 + 35/24 + 40/27 + 3/2 + 32/21 + 2048/1323 + 384/245 + 63/40 + 1225/768 + 175/108 + 288/175 + 5/3 + 320/189 + 73728/42875 + 441/256 + 7/4 + 6125/3456 + 9/5 + 64/35 + 50/27 + 2304/1225 + 16384/8575 + 245/128 + 35/18 + 63/32 + 2/1 diff --git a/scales/fokker_12.scl b/scales/fokker_12.scl new file mode 100644 index 0000000..396429c --- /dev/null +++ b/scales/fokker_12.scl @@ -0,0 +1,17 @@ +! fokker_12.scl +! +Fokker's 7-limit 12-tone just scale + 12 +! + 15/14 + 9/8 + 7/6 + 5/4 + 4/3 + 45/32 + 3/2 + 45/28 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/fokker_12a.scl b/scales/fokker_12a.scl new file mode 100644 index 0000000..7084001 --- /dev/null +++ b/scales/fokker_12a.scl @@ -0,0 +1,17 @@ +! fokker_12a.scl +! +Fokker's 7-limit periodicity block of 2048/2025 & 3969/4000 & 225/224 + 12 +! + 21/20 + 28/25 + 189/160 + 5/4 + 4/3 + 45/32 + 112/75 + 63/40 + 42/25 + 16/9 + 15/8 + 2/1 diff --git a/scales/fokker_12b.scl b/scales/fokker_12b.scl new file mode 100644 index 0000000..a7366db --- /dev/null +++ b/scales/fokker_12b.scl @@ -0,0 +1,17 @@ +! fokker_12b.scl +! +Fokker's 7-limit semitone scale KNAW B72, 1969 + 12 +! + 135/128 + 28/25 + 189/160 + 80/63 + 4/3 + 45/32 + 3/2 + 63/40 + 42/25 + 25/14 + 256/135 + 2/1 diff --git a/scales/fokker_12c.scl b/scales/fokker_12c.scl new file mode 100644 index 0000000..e688809 --- /dev/null +++ b/scales/fokker_12c.scl @@ -0,0 +1,17 @@ +! fokker_12c.scl +! +Fokker's 7-limit complementary semitone scale, KNAW B72, 1969 + 12 +! + 135/128 + 28/25 + 25/21 + 80/63 + 4/3 + 64/45 + 3/2 + 63/40 + 320/189 + 25/14 + 256/135 + 2/1 diff --git a/scales/fokker_12m.scl b/scales/fokker_12m.scl new file mode 100644 index 0000000..315a9c7 --- /dev/null +++ b/scales/fokker_12m.scl @@ -0,0 +1,17 @@ +! fokker_12m.scl +! +Fokker's 12-tone 31-tET mode, has 3 4:5:6:7 tetrads + 3 inv. + 12 +! + 116.12903 + 193.54839 + 270.96774 + 387.09677 + 503.22581 + 580.64516 + 696.77419 + 812.90323 + 890.32258 + 967.74194 + 1083.87097 + 2/1 diff --git a/scales/fokker_12t.scl b/scales/fokker_12t.scl new file mode 100644 index 0000000..63c686d --- /dev/null +++ b/scales/fokker_12t.scl @@ -0,0 +1,17 @@ +! fokker_12t.scl +! +Tempered version of fokker_12.scl with egalised 225/224, see also lumma.scl + 12 +! + 114.61072 + 199.23744 + 268.08492 + 384.35188 + 499.28244 + 584.20487 + 699.21999 + 815.58633 + 884.32517 + 968.96547 + 1083.57434 + 2/1 diff --git a/scales/fokker_12t2.scl b/scales/fokker_12t2.scl new file mode 100644 index 0000000..5a74da2 --- /dev/null +++ b/scales/fokker_12t2.scl @@ -0,0 +1,17 @@ +! fokker_12t2.scl +! +Another tempered version of fokker_12.scl with egalised 225/224 + 12 +! + 114.60324 + 199.20699 + 268.10105 + 384.35373 + 499.38740 + 584.17762 + 699.21129 + 815.46396 + 5/3 + 968.96178 + 1083.56502 + 2/1 diff --git a/scales/fokker_22.scl b/scales/fokker_22.scl new file mode 100644 index 0000000..0d689c4 --- /dev/null +++ b/scales/fokker_22.scl @@ -0,0 +1,27 @@ +! fokker_22.scl +! +Fokker's 22-tone periodicity block of 2048/2025 & 3125/3072. KNAW B71, 1968 + 22 +! + 25/24 + 16/15 + 1125/1024 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 27/20 + 45/32 + 375/256 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 225/128 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/fokker_22a.scl b/scales/fokker_22a.scl new file mode 100644 index 0000000..0afcd8a --- /dev/null +++ b/scales/fokker_22a.scl @@ -0,0 +1,27 @@ +! fokker_22a.scl +! +Fokker's 22-tone periodicity block of 2048/2025 & 2109375/2097152 = semicomma + 22 +! + 16875/16384 + 16/15 + 1125/1024 + 256/225 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 512/375 + 45/32 + 375/256 + 3/2 + 25/16 + 8/5 + 3375/2048 + 128/75 + 225/128 + 2048/1125 + 15/8 + 48/25 + 2/1 diff --git a/scales/fokker_31.scl b/scales/fokker_31.scl new file mode 100644 index 0000000..335f7ad --- /dev/null +++ b/scales/fokker_31.scl @@ -0,0 +1,36 @@ +! fokker_31.scl +! +Fokker's 31-tone just system + 31 +! + 64/63 + 135/128 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 135/112 + 315/256 + 5/4 + 9/7 + 21/16 + 4/3 + 175/128 + 45/32 + 10/7 + 35/24 + 3/2 + 32/21 + 14/9 + 45/28 + 105/64 + 5/3 + 12/7 + 7/4 + 16/9 + 945/512 + 15/8 + 40/21 + 63/32 + 2/1 diff --git a/scales/fokker_31a.scl b/scales/fokker_31a.scl new file mode 100644 index 0000000..54adb63 --- /dev/null +++ b/scales/fokker_31a.scl @@ -0,0 +1,36 @@ +! fokker_31a.scl +! +Fokker's 31-tone first alternate septimal tuning + 31 +! + 36/35 + 25/24 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 25/21 + 315/256 + 5/4 + 9/7 + 21/16 + 4/3 + 175/128 + 45/32 + 10/7 + 35/24 + 3/2 + 32/21 + 63/40 + 45/28 + 105/64 + 5/3 + 12/7 + 7/4 + 9/5 + 175/96 + 15/8 + 40/21 + 63/32 + 2/1 diff --git a/scales/fokker_31b.scl b/scales/fokker_31b.scl new file mode 100644 index 0000000..7506d60 --- /dev/null +++ b/scales/fokker_31b.scl @@ -0,0 +1,36 @@ +! fokker_31b.scl +! +Fokker's 31-tone second alternate septimal tuning + 31 +! + 49/48 + 21/20 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 315/256 + 5/4 + 9/7 + 21/16 + 4/3 + 175/128 + 45/32 + 10/7 + 35/24 + 3/2 + 32/21 + 25/16 + 45/28 + 105/64 + 5/3 + 12/7 + 7/4 + 25/14 + 90/49 + 15/8 + 40/21 + 63/32 + 2/1 diff --git a/scales/fokker_31c.scl b/scales/fokker_31c.scl new file mode 100644 index 0000000..ab9dc42 --- /dev/null +++ b/scales/fokker_31c.scl @@ -0,0 +1,36 @@ +! fokker_31c.scl +! +Fokker's 31-tone periodicity block of 81/80 & 2109375/2097152 = semicomma + 31 +! + 16875/16384 + 25/24 + 16/15 + 1125/1024 + 9/8 + 256/225 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 675/512 + 4/3 + 5625/4096 + 45/32 + 64/45 + 375/256 + 3/2 + 1024/675 + 25/16 + 8/5 + 3375/2048 + 5/3 + 128/75 + 225/128 + 16/9 + 1875/1024 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/fokker_31d.scl b/scales/fokker_31d.scl new file mode 100644 index 0000000..51b5239 --- /dev/null +++ b/scales/fokker_31d.scl @@ -0,0 +1,36 @@ +! fokker_31d.scl +! +Fokker's 31-tone periodicity block of 81/80 & Wrschmidt's comma + 31 +! + 3125/3072 + 25/24 + 16/15 + 1125/1024 + 9/8 + 9375/8192 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 5625/4096 + 45/32 + 36/25 + 375/256 + 3/2 + 3125/2048 + 25/16 + 8/5 + 625/384 + 5/3 + 15625/9216 + 225/128 + 9/5 + 1875/1024 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/fokker_31d2.scl b/scales/fokker_31d2.scl new file mode 100644 index 0000000..ba284f0 --- /dev/null +++ b/scales/fokker_31d2.scl @@ -0,0 +1,36 @@ +! fokker_31d2.scl +! +Reduced version of fokker_31d by Prooijen expressibility + 31 +! + 128/125 + 25/24 + 16/15 + 625/576 + 10/9 + 144/125 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 36/25 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 625/384 + 5/3 + 128/75 + 125/72 + 16/9 + 1152/625 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/fokker_41.scl b/scales/fokker_41.scl new file mode 100644 index 0000000..f2bc793 --- /dev/null +++ b/scales/fokker_41.scl @@ -0,0 +1,46 @@ +! fokker_41.scl +! +Fokker's 7-limit supracomma per.bl. 10976/10935 & 225/224 & 496125/262144 + 41 +! + 81/80 + 28/27 + 21/20 + 15/14 + 243/224 + 10/9 + 9/8 + 225/196 + 7/6 + 25/21 + 6/5 + 896/729 + 56/45 + 63/50 + 9/7 + 98/75 + 4/3 + 27/20 + 112/81 + 7/5 + 10/7 + 81/56 + 40/27 + 3/2 + 75/49 + 14/9 + 100/63 + 45/28 + 729/448 + 5/3 + 42/25 + 12/7 + 392/225 + 16/9 + 9/5 + 448/243 + 28/15 + 40/21 + 27/14 + 160/81 + 2/1 diff --git a/scales/fokker_41a.scl b/scales/fokker_41a.scl new file mode 100644 index 0000000..529cbd5 --- /dev/null +++ b/scales/fokker_41a.scl @@ -0,0 +1,46 @@ +! fokker_41a.scl +! +Fokker's 41-tone periodicity block of schisma & 34171875/33554432 + 41 +! + 2048/2025 + 273375/262144 + 135/128 + 16/15 + 1125/1024 + 18225/16384 + 9/8 + 256/225 + 75/64 + 1215/1024 + 6/5 + 10125/8192 + 5/4 + 81/64 + 32/25 + 675/512 + 4/3 + 27/20 + 91125/65536 + 45/32 + 64/45 + 131072/91125 + 6075/4096 + 3/2 + 1024/675 + 25/16 + 405/256 + 8/5 + 3375/2048 + 5/3 + 27/16 + 128/75 + 225/128 + 16/9 + 9/5 + 30375/16384 + 15/8 + 256/135 + 48/25 + 2025/1024 + 2/1 diff --git a/scales/fokker_41b.scl b/scales/fokker_41b.scl new file mode 100644 index 0000000..6d09d5f --- /dev/null +++ b/scales/fokker_41b.scl @@ -0,0 +1,46 @@ +! fokker_41b.scl +! +Fokker's 41-tone periodicity block of schisma & 3125/3072 + 41 +! + 81/80 + 25/24 + 135/128 + 16/15 + 1125/1024 + 10/9 + 9/8 + 256/225 + 75/64 + 1215/1024 + 6/5 + 10125/8192 + 5/4 + 81/64 + 125/96 + 675/512 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 375/256 + 6075/4096 + 3/2 + 243/160 + 25/16 + 405/256 + 8/5 + 3375/2048 + 5/3 + 27/16 + 125/72 + 225/128 + 16/9 + 9/5 + 30375/16384 + 15/8 + 243/128 + 125/64 + 2025/1024 + 2/1 diff --git a/scales/fokker_53.scl b/scales/fokker_53.scl new file mode 100644 index 0000000..f0f0c93 --- /dev/null +++ b/scales/fokker_53.scl @@ -0,0 +1,58 @@ +! fokker_53.scl +! +Fokker's 53-tone system, degree 37 has alternatives + 53 +! + 126/125 + 525/512 + 25/24 + 21/20 + 16/15 + 27/25 + 35/32 + 10/9 + 9/8 + 8/7 + 147/128 + 7/6 + 189/160 + 6/5 + 243/200 + 315/256 + 5/4 + 63/50 + 32/25 + 125/96 + 21/16 + 4/3 + 27/20 + 175/128 + 441/320 + 7/5 + 10/7 + 36/25 + 35/24 + 189/128 + 3/2 + 32/21 + 49/32 + 384/245 + 63/40 + 8/5 + 81/50 + 105/64 + 5/3 + 42/25 + 12/7 + 441/256 + 7/4 + 16/9 + 9/5 + 175/96 + 147/80 + 15/8 + 40/21 + 48/25 + 35/18 + 63/32 + 2/1 diff --git a/scales/fokker_53a.scl b/scales/fokker_53a.scl new file mode 100644 index 0000000..98213f4 --- /dev/null +++ b/scales/fokker_53a.scl @@ -0,0 +1,58 @@ +! fokker_53a.scl +! +Fokker's 53-tone periodicity block of schisma & kleisma + 53 +! + 81/80 + 16875/16384 + 25/24 + 135/128 + 2187/2048 + 625/576 + 1125/1024 + 10/9 + 9/8 + 729/640 + 125/108 + 75/64 + 1215/1024 + 6/5 + 625/512 + 10125/8192 + 5/4 + 81/64 + 32/25 + 125/96 + 675/512 + 4/3 + 27/20 + 5625/4096 + 25/18 + 45/32 + 729/512 + 625/432 + 375/256 + 6075/4096 + 3/2 + 243/160 + 125/81 + 25/16 + 405/256 + 8/5 + 625/384 + 3375/2048 + 5/3 + 27/16 + 2187/1280 + 125/72 + 225/128 + 3645/2048 + 9/5 + 1875/1024 + 50/27 + 15/8 + 243/128 + 625/324 + 125/64 + 2025/1024 + 2/1 diff --git a/scales/fokker_53b.scl b/scales/fokker_53b.scl new file mode 100644 index 0000000..1338782 --- /dev/null +++ b/scales/fokker_53b.scl @@ -0,0 +1,58 @@ +! fokker_53b.scl +! +Fokker's 53-tone periodicity block of schisma & 2109375/2097152 + 53 +! + 2048/2025 + 128/125 + 25/24 + 135/128 + 16/15 + 27/25 + 1125/1024 + 10/9 + 9/8 + 256/225 + 144/125 + 75/64 + 32/27 + 6/5 + 4096/3375 + 10125/8192 + 5/4 + 81/64 + 32/25 + 125/96 + 675/512 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 6075/4096 + 3/2 + 1024/675 + 192/125 + 25/16 + 405/256 + 8/5 + 16384/10125 + 3375/2048 + 5/3 + 27/16 + 128/75 + 262144/151875 + 225/128 + 16/9 + 9/5 + 2048/1125 + 30375/16384 + 15/8 + 256/135 + 48/25 + 125/64 + 2025/1024 + 2/1 diff --git a/scales/fokker_av.scl b/scales/fokker_av.scl new file mode 100644 index 0000000..6932e51 --- /dev/null +++ b/scales/fokker_av.scl @@ -0,0 +1,36 @@ +! fokker_av.scl +! +Fokker's suggestion for a shrinked octave by averaging approximations + 31 +! + 38.65161 + 77.30323 + 115.95484 + 154.60645 + 193.25806 + 231.90968 + 270.56129 + 309.21290 + 347.86452 + 386.51613 + 425.16774 + 463.81935 + 502.47097 + 541.12258 + 579.77419 + 618.42581 + 657.07742 + 695.72903 + 734.38065 + 773.03226 + 811.68387 + 850.33548 + 888.98710 + 927.63871 + 966.29032 + 1004.94194 + 1043.59355 + 1082.24516 + 1120.89677 + 1159.54839 + 1198.20000 diff --git a/scales/fokker_bosch.scl b/scales/fokker_bosch.scl new file mode 100644 index 0000000..a96be63 --- /dev/null +++ b/scales/fokker_bosch.scl @@ -0,0 +1,14 @@ +! fokker_bosch.scl +! +Scale of "Naar Den Bosch toe", genus diatonicum cum septimis. 1/1=D + 9 +! + 9/8 + 5/4 + 21/16 + 4/3 + 3/2 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/fokker_sr.scl b/scales/fokker_sr.scl new file mode 100644 index 0000000..1decf6e --- /dev/null +++ b/scales/fokker_sr.scl @@ -0,0 +1,27 @@ +! fokker_sr.scl +! +Fokker's 7-limit sruti scale, KNAW B72, 1969 + 22 +! + 36/35 + 16/15 + 192/175 + 245/216 + 7/6 + 135/112 + 56/45 + 9/7 + 896/675 + 48/35 + 45/32 + 35/24 + 3/2 + 14/9 + 8/5 + 224/135 + 128/75 + 432/245 + 49/27 + 15/8 + 784/405 + 2/1 diff --git a/scales/fokker_sr2.scl b/scales/fokker_sr2.scl new file mode 100644 index 0000000..b4ca2c3 --- /dev/null +++ b/scales/fokker_sr2.scl @@ -0,0 +1,27 @@ +! fokker_sr2.scl +! +Fokker's complementary 7-limit sruti scale, KNAW B72, 1969 + 22 +! + 405/392 + 16/15 + 54/49 + 245/216 + 75/64 + 135/112 + 5/4 + 9/7 + 4/3 + 48/35 + 64/45 + 35/24 + 675/448 + 14/9 + 45/28 + 224/135 + 12/7 + 432/245 + 175/96 + 15/8 + 35/18 + 2/1 diff --git a/scales/fokker_sra.scl b/scales/fokker_sra.scl new file mode 100644 index 0000000..eb52be5 --- /dev/null +++ b/scales/fokker_sra.scl @@ -0,0 +1,27 @@ +! fokker_sra.scl +! +Two-step approximation 9-13 to Fokker's 7-limit sruti scale + 22 +! + 53.06891 + 109.74715 + 162.81606 + 215.88498 + 268.95389 + 322.02280 + 378.70104 + 435.37928 + 488.44819 + 541.51710 + 594.58602 + 651.26425 + 704.33317 + 761.01140 + 817.68964 + 874.36787 + 927.43679 + 980.50570 + 1033.57461 + 1086.64353 + 1143.32176 + 2/1 diff --git a/scales/fokker_uv.scl b/scales/fokker_uv.scl new file mode 100644 index 0000000..ac398f8 --- /dev/null +++ b/scales/fokker_uv.scl @@ -0,0 +1,75 @@ +! fokker_uv.scl +! +Table of Unison Vectors, Microsons and Minisons, from article KNAW, 1969 + 70 +! + 4375/4374 + 2401/2400 + 420175/419904 + 2460375/2458624 + 32805/32768 + 65625/65536 + 2100875/2097152 + 102760448/102515625 + 6144/6125 + 3136/3125 + 10976/10935 + 225/224 + 15625/15552 + 321489/320000 + 1029/1024 + 2109375/2097152 + 2097152/2083725 + 1728/1715 + 4000/3969 + 126/125 + 245/243 + 413343/409600 + 33075/32768 + 65536/64827 + 110592/109375 + 2048/2025 + 2430/2401 + 81/80 + 875/864 + 531441/524288 + 1063125/1048576 + 34034175/33554432 + 4194304/4134375 + 2097152/2066715 + 31104/30625 + 64/63 + 686/675 + 3125/3072 + 300125/294912 + 131072/128625 + 327680/321489 + 100352/98415 + 50/49 + 49/48 + 234375/229376 + 535815/524288 + 1071875/1048576 + 12288/12005 + 128/125 + 2240/2187 + 5625/5488 + 525/512 + 16807/16384 + 786432/765625 + 131072/127575 + 36/35 + 12005/11664 + 540225/524288 + 16128/15625 + 6272/6075 + 405/392 + 1323/1280 + 42875/41472 + 648/625 + 28/27 + 25/24 + 21/20 + 135/128 + 3584/3375 + 625/588 diff --git a/scales/foote.scl b/scales/foote.scl new file mode 100644 index 0000000..8170227 --- /dev/null +++ b/scales/foote.scl @@ -0,0 +1,17 @@ +! foote.scl +! +Ed Foote, piano temperament. TL 9 Jun 1999, almost equal to Coleman + 12 +! + 97.00000 + 197.00000 + 297.00000 + 394.00000 + 501.00000 + 595.00000 + 699.00000 + 797.00000 + 896.00000 + 999.00000 + 1094.00000 + 2/1 diff --git a/scales/foote2.scl b/scales/foote2.scl new file mode 100644 index 0000000..a01ab10 --- /dev/null +++ b/scales/foote2.scl @@ -0,0 +1,17 @@ +! foote2.scl +! +Ed Footes temperament with 1/6, 1/8 and 1/12 Pyth comma fractions + 12 +! + 98.04500 + 197.06750 + 298.04500 + 394.13500 + 501.95500 + 596.09000 + 699.02250 + 798.04500 + 896.09000 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/forster.scl b/scales/forster.scl new file mode 100644 index 0000000..0441257 --- /dev/null +++ b/scales/forster.scl @@ -0,0 +1,37 @@ +! forster.scl +! +Cris Forster's Chrysalis tuning, XH 7+8 + 32 +! + 16/15 + 13/12 + 11/10 + 8/7 + 13/11 + 11/9 + 5/4 + 9/7 + 13/10 + 21/16 + 27/20 + 11/8 + 7/5 + 10/7 + 13/9 + 16/11 + 40/27 + 3/2 + 32/21 + 20/13 + 14/9 + 8/5 + 18/11 + 27/16 + 22/13 + 12/7 + 7/4 + 16/9 + 24/13 + 15/8 + 64/33 + 2/1 diff --git a/scales/fortuna11.scl b/scales/fortuna11.scl new file mode 100644 index 0000000..db79660 --- /dev/null +++ b/scales/fortuna11.scl @@ -0,0 +1,17 @@ +! fortuna11.scl +! +11-limit scale from Clem Fortuna + 12 +! + 21/20 + 8/7 + 7/6 + 14/11 + 21/16 + 10/7 + 32/21 + 11/7 + 12/7 + 7/4 + 40/21 + 2/1 diff --git a/scales/fortuna_a1.scl b/scales/fortuna_a1.scl new file mode 100644 index 0000000..e3a8cbf --- /dev/null +++ b/scales/fortuna_a1.scl @@ -0,0 +1,17 @@ +! fortuna_a1.scl +! +Clem Fortuna, Arabic mode of 24-tET, try C or G major, superset of Basandida, trivalent + 12 +! + 100.00000 + 200.00000 + 300.00000 + 350.00000 + 500.00000 + 600.00000 + 700.00000 + 800.00000 + 900.00000 + 1000.00000 + 1050.00000 + 2/1 diff --git a/scales/fortuna_a2.scl b/scales/fortuna_a2.scl new file mode 100644 index 0000000..be208d4 --- /dev/null +++ b/scales/fortuna_a2.scl @@ -0,0 +1,17 @@ +! fortuna_a2.scl +! +Clem Fortuna, Arabic mode of 24-tET, try C or F minor + 12 +! + 100.00000 + 150.00000 + 300.00000 + 400.00000 + 500.00000 + 600.00000 + 700.00000 + 18/11 + 900.00000 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/fortuna_bag.scl b/scales/fortuna_bag.scl new file mode 100644 index 0000000..1c66757 --- /dev/null +++ b/scales/fortuna_bag.scl @@ -0,0 +1,17 @@ +! fortuna_bag.scl +! +Bagpipe tuning from Fortuna, try key of G with F natural + 12 +! + 117/115 + 146/131 + 196/169 + 89/73 + 141/106 + 81/59 + 150/101 + 125/82 + 139/84 + 205/116 + 11/6 + 2/1 diff --git a/scales/fortuna_eth.scl b/scales/fortuna_eth.scl new file mode 100644 index 0000000..6416838 --- /dev/null +++ b/scales/fortuna_eth.scl @@ -0,0 +1,17 @@ +! fortuna_eth.scl +! +Ethiopian Tunings from Fortuna + 12 +! + 15/14 + 32/29 + 97/83 + 26/21 + 41/31 + 55/39 + 53/36 + 19/12 + 21/13 + 70/39 + 37/20 + 2/1 diff --git a/scales/fortuna_sheng.scl b/scales/fortuna_sheng.scl new file mode 100644 index 0000000..2b48185 --- /dev/null +++ b/scales/fortuna_sheng.scl @@ -0,0 +1,17 @@ +! fortuna_sheng.scl +! +Sheng scale on naturals starting on d, from Fortuna + 12 +! + 141/134 + 34/31 + 55/46 + 71/58 + 4/3 + 80/57 + 117/80 + 107/67 + 63/38 + 59/33 + 63/34 + 2/1 diff --git a/scales/fortune.scl b/scales/fortune.scl new file mode 100644 index 0000000..791d0d0 --- /dev/null +++ b/scales/fortune.scl @@ -0,0 +1,617 @@ +! fortune.scl +! +Fortune temperament, g=221.567865, 5-limit + 612 +! + 1.91122 + 3.82245 + 5.73367 + 7.64490 + 9.55612 + 11.46735 + 13.37857 + 15.28980 + 17.66764 + 19.57887 + 21.49009 + 23.40132 + 25.31254 + 27.22377 + 29.13499 + 31.04622 + 32.95744 + 34.86867 + 37.24651 + 39.15774 + 41.06896 + 42.98019 + 44.89141 + 46.80264 + 48.71386 + 50.62509 + 52.53631 + 54.91416 + 56.82538 + 58.73661 + 60.64783 + 62.55906 + 64.47028 + 66.38151 + 68.29273 + 70.20396 + 72.58180 + 74.49303 + 76.40425 + 78.31548 + 80.22670 + 82.13793 + 84.04915 + 85.96038 + 87.87160 + 89.78283 + 92.16068 + 94.07190 + 95.98312 + 97.89435 + 99.80557 + 101.71680 + 103.62802 + 105.53925 + 107.45047 + 109.82832 + 111.73954 + 113.65077 + 115.56199 + 117.47322 + 119.38444 + 121.29567 + 123.20689 + 125.11812 + 127.02934 + 129.40719 + 131.31841 + 133.22964 + 135.14086 + 137.05209 + 138.96331 + 140.87454 + 142.78576 + 144.69699 + 147.07484 + 148.98606 + 150.89728 + 152.80851 + 154.71973 + 156.63096 + 158.54218 + 160.45341 + 162.36463 + 164.27586 + 166.65370 + 168.56493 + 170.47615 + 172.38738 + 174.29860 + 176.20983 + 178.12105 + 180.03228 + 181.94350 + 184.32135 + 186.23257 + 188.14380 + 190.05502 + 191.96625 + 193.87747 + 195.78870 + 197.69992 + 199.61115 + 201.98899 + 203.90022 + 205.81144 + 207.72267 + 209.63389 + 211.54512 + 213.45634 + 215.36757 + 217.27879 + 219.19002 + 221.56786 + 223.47909 + 225.39031 + 227.30154 + 229.21276 + 231.12399 + 233.03521 + 234.94644 + 236.85766 + 239.23551 + 241.14673 + 243.05796 + 144/125 + 246.88041 + 248.79163 + 250.70286 + 252.61408 + 254.52531 + 256.43653 + 258.81438 + 260.72560 + 262.63683 + 264.54805 + 266.45928 + 268.37050 + 270.28173 + 272.19295 + 274.10418 + 276.48203 + 278.39325 + 280.30447 + 282.21570 + 284.12692 + 286.03815 + 287.94937 + 289.86060 + 291.77182 + 294.14967 + 296.06089 + 297.97212 + 299.88334 + 301.79457 + 303.70579 + 305.61702 + 307.52824 + 309.43947 + 311.35069 + 313.72854 + 6/5 + 317.55099 + 319.46221 + 321.37344 + 323.28466 + 325.19589 + 327.10711 + 329.01834 + 331.39618 + 333.30741 + 335.21863 + 337.12986 + 339.04108 + 340.95231 + 342.86353 + 344.77476 + 346.68598 + 348.59721 + 350.97505 + 352.88628 + 354.79750 + 356.70873 + 358.61995 + 360.53118 + 362.44240 + 364.35363 + 366.26485 + 368.64270 + 370.55392 + 372.46515 + 374.37637 + 376.28760 + 378.19882 + 380.11005 + 382.02127 + 383.93250 + 386.31034 + 388.22157 + 390.13279 + 392.04402 + 393.95524 + 395.86647 + 397.77769 + 399.68892 + 401.60014 + 403.51137 + 405.88922 + 407.80044 + 409.71166 + 411.62289 + 413.53411 + 415.44534 + 417.35656 + 419.26779 + 421.17901 + 423.55686 + 425.46808 + 427.37931 + 429.29053 + 431.20176 + 433.11298 + 435.02421 + 436.93543 + 438.84666 + 440.75788 + 443.13573 + 445.04695 + 446.95818 + 448.86940 + 450.78063 + 452.69185 + 454.60308 + 456.51430 + 458.42553 + 460.80338 + 462.71460 + 464.62582 + 466.53705 + 468.44827 + 470.35950 + 472.27072 + 474.18195 + 476.09317 + 478.00440 + 480.38224 + 482.29347 + 484.20469 + 486.11592 + 488.02714 + 489.93837 + 491.84959 + 493.76082 + 495.67204 + 498.04989 + 499.96111 + 501.87234 + 503.78356 + 505.69479 + 507.60601 + 509.51724 + 511.42846 + 513.33969 + 515.71753 + 517.62876 + 519.53998 + 521.45121 + 523.36243 + 525.27366 + 527.18488 + 529.09611 + 531.00733 + 532.91856 + 535.29640 + 537.20763 + 539.11885 + 541.03008 + 542.94130 + 544.85253 + 546.76375 + 548.67498 + 550.58620 + 552.96405 + 554.87527 + 556.78650 + 558.69772 + 560.60895 + 562.52017 + 564.43140 + 566.34262 + 568.25385 + 570.16507 + 572.54292 + 574.45414 + 576.36537 + 578.27659 + 580.18782 + 582.09904 + 584.01027 + 585.92149 + 587.83272 + 590.21057 + 592.12179 + 594.03301 + 595.94424 + 597.85546 + 599.76669 + 601.67791 + 603.58914 + 605.50036 + 607.87821 + 609.78943 + 611.70066 + 613.61188 + 615.52311 + 617.43433 + 619.34556 + 621.25678 + 623.16801 + 625.07923 + 627.45708 + 629.36830 + 631.27953 + 633.19075 + 635.10198 + 637.01320 + 638.92443 + 640.83565 + 642.74688 + 645.12472 + 647.03595 + 648.94717 + 650.85840 + 652.76962 + 654.68085 + 656.59207 + 658.50330 + 660.41452 + 662.32575 + 664.70359 + 666.61482 + 668.52604 + 670.43727 + 672.34849 + 674.25972 + 676.17094 + 678.08217 + 679.99339 + 682.37124 + 684.28246 + 686.19369 + 688.10491 + 690.01614 + 691.92736 + 693.83859 + 695.74981 + 697.66104 + 699.57226 + 701.95011 + 703.86133 + 705.77256 + 707.68378 + 709.59501 + 711.50623 + 713.41746 + 715.32868 + 717.23991 + 719.61776 + 721.52898 + 723.44020 + 725.35143 + 727.26265 + 729.17388 + 731.08510 + 732.99633 + 734.90755 + 737.28540 + 739.19662 + 741.10785 + 743.01907 + 744.93030 + 746.84152 + 748.75275 + 750.66397 + 752.57520 + 754.48642 + 756.86427 + 758.77549 + 760.68672 + 762.59794 + 764.50917 + 766.42039 + 768.33162 + 770.24284 + 772.15407 + 774.53191 + 776.44314 + 778.35436 + 780.26559 + 782.17681 + 784.08804 + 785.99926 + 787.91049 + 789.82171 + 791.73294 + 794.11078 + 796.02201 + 797.93323 + 799.84446 + 801.75568 + 803.66691 + 805.57813 + 807.48936 + 809.40058 + 811.77843 + 813.68965 + 815.60088 + 817.51210 + 819.42333 + 821.33455 + 823.24578 + 825.15700 + 827.06823 + 829.44607 + 831.35730 + 833.26852 + 835.17975 + 837.09097 + 839.00220 + 840.91342 + 842.82465 + 844.73587 + 846.64710 + 849.02495 + 850.93617 + 852.84739 + 854.75862 + 856.66984 + 858.58107 + 860.49229 + 862.40352 + 864.31474 + 866.69259 + 868.60381 + 870.51504 + 872.42626 + 874.33749 + 876.24871 + 878.15994 + 880.07116 + 881.98239 + 883.89361 + 886.27146 + 888.18268 + 890.09391 + 892.00513 + 893.91636 + 895.82758 + 897.73881 + 899.65003 + 901.56126 + 903.93911 + 905.85033 + 907.76155 + 909.67278 + 911.58400 + 913.49523 + 915.40645 + 917.31768 + 919.22890 + 921.14013 + 923.51797 + 925.42920 + 927.34042 + 929.25165 + 931.16287 + 933.07410 + 934.98532 + 936.89655 + 938.80777 + 941.18562 + 943.09684 + 945.00807 + 946.91929 + 948.83052 + 950.74174 + 952.65297 + 954.56419 + 956.47542 + 958.85326 + 960.76449 + 962.67571 + 964.58694 + 966.49816 + 968.40939 + 970.32061 + 972.23184 + 974.14306 + 976.05429 + 978.43214 + 980.34336 + 982.25458 + 984.16581 + 986.07703 + 987.98826 + 989.89948 + 991.81071 + 993.72193 + 996.09978 + 998.01100 + 999.92223 + 1001.83345 + 1003.74468 + 1005.65590 + 1007.56713 + 1009.47835 + 1011.38958 + 1013.30080 + 1015.67865 + 1017.58987 + 1019.50110 + 1021.41232 + 1023.32355 + 1025.23477 + 1027.14600 + 1029.05722 + 1030.96845 + 1033.34630 + 1035.25752 + 1037.16874 + 1039.07997 + 1040.99119 + 1042.90242 + 1044.81364 + 1046.72487 + 1048.63609 + 1051.01394 + 1052.92516 + 1054.83639 + 1056.74761 + 1058.65884 + 1060.57006 + 1062.48129 + 1064.39251 + 1066.30374 + 1068.21496 + 1070.59281 + 1072.50403 + 1074.41526 + 1076.32648 + 1078.23771 + 1080.14893 + 1082.06016 + 1083.97138 + 1085.88261 + 1088.26046 + 1090.17168 + 1092.08290 + 1093.99413 + 1095.90535 + 1097.81658 + 1099.72780 + 1101.63903 + 1103.55025 + 1105.46148 + 1107.83932 + 1109.75055 + 1111.66177 + 1113.57300 + 1115.48422 + 1117.39545 + 1119.30667 + 1121.21790 + 1123.12912 + 1125.50697 + 1127.41819 + 1129.32942 + 1131.24064 + 1133.15187 + 1135.06309 + 1136.97432 + 1138.88554 + 1140.79677 + 1142.70799 + 1145.08584 + 1146.99706 + 1148.90829 + 1150.81951 + 1152.73074 + 1154.64196 + 1156.55319 + 1158.46441 + 1160.37564 + 1162.75349 + 1164.66471 + 1166.57593 + 1168.48716 + 1170.39838 + 1172.30961 + 1174.22083 + 1176.13206 + 1178.04328 + 1180.42113 + 1182.33235 + 1184.24358 + 1186.15480 + 1188.06603 + 1189.97725 + 1191.88848 + 1193.79970 + 1195.71093 + 1197.62215 + 2/1 diff --git a/scales/francis_924-1.scl b/scales/francis_924-1.scl new file mode 100644 index 0000000..246e4fa --- /dev/null +++ b/scales/francis_924-1.scl @@ -0,0 +1,17 @@ +! francis_924-1.scl +! +J. Charles Francis, Bach temperament for BWV 924 version 1 (2005) + 12 +! + 92.18000 + 9/8 + 296.09000 + 400.65167 + 500.00000 + 590.22500 + 3/2 + 794.13500 + 27/16 + 998.04500 + 1095.43833 + 2/1 diff --git a/scales/francis_924-2.scl b/scales/francis_924-2.scl new file mode 100644 index 0000000..401d593 --- /dev/null +++ b/scales/francis_924-2.scl @@ -0,0 +1,17 @@ +! francis_924-2.scl +! +J. Charles Francis, Bach temperament for BWV 924 version 2 (2005) + 12 +! + 92.18000 + 9/8 + 296.09000 + 400.65167 + 500.00000 + 590.22500 + 3/2 + 801.30333 + 27/16 + 998.04500 + 1095.43833 + 2/1 diff --git a/scales/francis_924-3.scl b/scales/francis_924-3.scl new file mode 100644 index 0000000..cde8cdd --- /dev/null +++ b/scales/francis_924-3.scl @@ -0,0 +1,17 @@ +! francis_924-3.scl +! +J. Charles Francis, Bach temperament for BWV 924 version 3 (2005) + 12 +! + 99.34833 + 9/8 + 303.25833 + 400.65167 + 507.16834 + 597.39333 + 3/2 + 801.30333 + 27/16 + 1005.21334 + 1095.43833 + 2/1 diff --git a/scales/francis_924-4.scl b/scales/francis_924-4.scl new file mode 100644 index 0000000..a346c11 --- /dev/null +++ b/scales/francis_924-4.scl @@ -0,0 +1,17 @@ +! francis_924-4.scl +! +J. Charles Francis, Bach temperament for BWV 924 version 4 (2005) + 12 +! + 99.34833 + 9/8 + 303.25833 + 400.65167 + 507.16834 + 597.39333 + 3/2 + 808.47167 + 27/16 + 1005.21334 + 1095.43833 + 2/1 diff --git a/scales/francis_r12-14p.scl b/scales/francis_r12-14p.scl new file mode 100644 index 0000000..19cc680 --- /dev/null +++ b/scales/francis_r12-14p.scl @@ -0,0 +1,17 @@ +! francis_r12-14p.scl +! +Bach WTC theoretical temperament, 1/14 Pyth. comma, Cornet-ton, same Maunder III + 12 +! + 100.27929 + 197.20714 + 300.83786 + 394.41428 + 501.39643 + 598.32428 + 698.60357 + 800.55857 + 895.81071 + 1001.11714 + 1096.36928 + 2/1 diff --git a/scales/francis_r12-2.scl b/scales/francis_r12-2.scl new file mode 100644 index 0000000..22efeee --- /dev/null +++ b/scales/francis_r12-2.scl @@ -0,0 +1,17 @@ +! francis_r12-2.scl +! +J. Charles Francis, Bach WTC temperament R12-2, fifths beat ratios 0, 1, 2. C=279.331 Cornet-ton + 12 +! + 100.62819 + 197.00984 + 301.28636 + 394.76319 + 501.14108 + 598.67319 + 697.81820 + 800.63282 + 895.27348 + 1001.50455 + 1096.71819 + 2/1 diff --git a/scales/francis_r2-1.scl b/scales/francis_r2-1.scl new file mode 100644 index 0000000..b783f42 --- /dev/null +++ b/scales/francis_r2-1.scl @@ -0,0 +1,17 @@ +! francis_r2-1.scl +! +J. Charles Francis, Bach WTC temperament R2-1, fifths beat ratios 0, 1, 2. C=249.072 Cammerton + 12 +! + 95.21360 + 198.49541 + 299.12360 + 395.50525 + 499.78177 + 593.25860 + 699.63654 + 797.16860 + 896.31362 + 999.12823 + 1093.76889 + 2/1 diff --git a/scales/francis_r2-14p.scl b/scales/francis_r2-14p.scl new file mode 100644 index 0000000..49f9395 --- /dev/null +++ b/scales/francis_r2-14p.scl @@ -0,0 +1,17 @@ +! francis_r2-14p.scl +! +Bach WTC theoretical temperament, 1/14 Pyth. comma, Cammerton + 12 +! + 95.25214 + 198.88286 + 299.16214 + 396.09000 + 499.72071 + 593.29714 + 700.27929 + 797.20714 + 897.48643 + 999.44143 + 1094.69357 + 2/1 diff --git a/scales/francis_seal.scl b/scales/francis_seal.scl new file mode 100644 index 0000000..de5105e --- /dev/null +++ b/scales/francis_seal.scl @@ -0,0 +1,17 @@ +! francis_seal.scl +! +J. Charles Francis, Bach tuning interpretion as beats/sec. from seal + 12 +! + 91.96620 + 196.15000 + 295.87600 + 391.05000 + 499.78600 + 590.01100 + 697.30300 + 793.92100 + 891.87200 + 997.83100 + 1089.29000 + 2/1 diff --git a/scales/francis_suppig.scl b/scales/francis_suppig.scl new file mode 100644 index 0000000..efe0f8d --- /dev/null +++ b/scales/francis_suppig.scl @@ -0,0 +1,17 @@ +! francis_suppig.scl +! +J. Charles Francis, Suppig Calculus musicus, 5ths beat ratios 0, 1, 2. + 12 +! + 94.70000 + 196.90000 + 297.30000 + 394.50000 + 501.20000 + 592.80000 + 697.70000 + 796.70000 + 895.00000 + 999.30000 + 1093.10000 + 2/1 diff --git a/scales/freiberg.scl b/scales/freiberg.scl new file mode 100644 index 0000000..b08ef56 --- /dev/null +++ b/scales/freiberg.scl @@ -0,0 +1,17 @@ +! freiberg.scl +! +Temperament of G. Silbermann organ (1735), St. Petri in Freiberg (1985), a=476.3 + 12 +! + 256/243 + 196.09000 + 298.04500 + 394.13500 + 500.00000 + 590.22500 + 698.04500 + 790.22500 + 896.09000 + 1000.00000 + 1092.18000 + 2/1 diff --git a/scales/freivald11.scl b/scales/freivald11.scl new file mode 100644 index 0000000..ea9fc66 --- /dev/null +++ b/scales/freivald11.scl @@ -0,0 +1,22 @@ +! freivald11.scl +! +Jake Freivald, scale derived mostly from elevens (2011) + 17 +! + 33/32 + 12/11 + 25/22 + 33/28 + 11/9 + 14/11 + 4/3 + 7/5 + 16/11 + 3/2 + 11/7 + 18/11 + 56/33 + 16/9 + 11/6 + 21/11 + 2/1 diff --git a/scales/freivald_lucky.scl b/scales/freivald_lucky.scl new file mode 100644 index 0000000..e8a500e --- /dev/null +++ b/scales/freivald_lucky.scl @@ -0,0 +1,14 @@ +! freivald_lucky.scl +! +Jake Freivald, Lucky sevens and elevens, two chords 3/2 apart, superparticular +9 +! +12/11 +13/11 +14/11 +7/5 +3/2 +18/11 +39/22 +21/11 +2/1 diff --git a/scales/freivald_sub.scl b/scales/freivald_sub.scl new file mode 100644 index 0000000..4914a5b --- /dev/null +++ b/scales/freivald_sub.scl @@ -0,0 +1,17 @@ +! freivald_sub.scl +! +Jake Freivald, just scale in 5.11.31 subgroup. TL 30-5-2011 + 12 +! + 125/121 + 33275/29791 + 34375/29791 + 31/25 + 155/121 + 1331/961 + 1375/961 + 961/625 + 961/605 + 1331/775 + 55/31 + 29791/15625 diff --git a/scales/freivald_sup.scl b/scales/freivald_sup.scl new file mode 100644 index 0000000..6fb0503 --- /dev/null +++ b/scales/freivald_sup.scl @@ -0,0 +1,22 @@ +! freivald_sup.scl +! +Jake Freivald, 4/3 divided into 7 superparticulars, repeated at 3/2, and the 4/3-3/2 divide split into 25/24, 26/25, 27/26 +17 +! +22/21 +23/21 +8/7 +25/21 +26/21 +9/7 +4/3 +25/18 +13/9 +3/2 +11/7 +23/14 +12/7 +25/14 +13/7 +27/14 +2/1 diff --git a/scales/fribourg.scl b/scales/fribourg.scl new file mode 100644 index 0000000..d32fb95 --- /dev/null +++ b/scales/fribourg.scl @@ -0,0 +1,17 @@ +! fribourg.scl +! +Manderscheidt organ in Fribourg (1640) + 12 +! + 91.20250 + 195.11250 + 306.84250 + 387.29249 + 500.97750 + 589.24750 + 698.04500 + 781.42749 + 892.18000 + 1004.88750 + 1087.29249 + 2/1 diff --git a/scales/fusc4.scl b/scales/fusc4.scl new file mode 100644 index 0000000..9c207a9 --- /dev/null +++ b/scales/fusc4.scl @@ -0,0 +1,20 @@ +! fusc4.scl +! +All rationals with fusc value <= 4 + 15 +! + 16/15 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 15/8 + 2/1 diff --git a/scales/fusc5.scl b/scales/fusc5.scl new file mode 100644 index 0000000..3fc94b0 --- /dev/null +++ b/scales/fusc5.scl @@ -0,0 +1,28 @@ +! fusc5.scl +! +All rationals with fusc value <= 5 + 23 +! + 17/16 + 16/15 + 9/8 + 8/7 + 7/6 + 6/5 + 16/13 + 5/4 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 16/9 + 15/8 + 32/17 + 2/1 diff --git a/scales/fusc6.scl b/scales/fusc6.scl new file mode 100644 index 0000000..c9ae5e9 --- /dev/null +++ b/scales/fusc6.scl @@ -0,0 +1,40 @@ +! fusc6.scl +! +All rationals with fusc value <= 6 + 35 +! + 17/16 + 16/15 + 15/14 + 13/12 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 16/13 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 24/17 + 17/12 + 10/7 + 16/11 + 3/2 + 14/9 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 24/13 + 28/15 + 15/8 + 32/17 + 2/1 diff --git a/scales/galilei.scl b/scales/galilei.scl new file mode 100644 index 0000000..577f4c8 --- /dev/null +++ b/scales/galilei.scl @@ -0,0 +1,17 @@ +! galilei.scl +! +Vincenzo Galilei's approximation + 12 +! + 103.00000 + 198.00000 + 301.00000 + 396.00000 + 495.00000 + 594.00000 + 693.00000 + 792.00000 + 891.00000 + 990.00000 + 1089.00000 + 2/1 diff --git a/scales/gamelan_udan.scl b/scales/gamelan_udan.scl new file mode 100644 index 0000000..48a027f --- /dev/null +++ b/scales/gamelan_udan.scl @@ -0,0 +1,17 @@ +! gamelan_udan.scl +! +Gamelan Udan Mas (approx) s6,p6,p7,s1,p1,s2,p2,p3,s3,p4,s5,p5 + 12 +! + 1/1 + 10/9 + 7/6 + 32/25 + 47/35 + 32/23 + 3/2 + 20/13 + 16/9 + 16/9 + 23/12 + 2/1 diff --git a/scales/ganassi.scl b/scales/ganassi.scl new file mode 100644 index 0000000..027bf25 --- /dev/null +++ b/scales/ganassi.scl @@ -0,0 +1,17 @@ +! ganassi.scl +! +Sylvestro Ganassi's temperament (1543) + 12 +! + 20/19 + 10/9 + 20/17 + 5/4 + 4/3 + 24/17 + 3/2 + 30/19 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/gann_custer.scl b/scales/gann_custer.scl new file mode 100644 index 0000000..0f4ba5d --- /dev/null +++ b/scales/gann_custer.scl @@ -0,0 +1,36 @@ +! gann_custer.scl +! +Kyle Gann, scale from Custer's Ghost to Sitting Bull, 1/1=G + 31 +! + 33/32 + 21/20 + 16/15 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 16/11 + 3/2 + 14/9 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 15/8 + 64/33 + 2/1 diff --git a/scales/gann_frac.scl b/scales/gann_frac.scl new file mode 100644 index 0000000..ce518a8 --- /dev/null +++ b/scales/gann_frac.scl @@ -0,0 +1,21 @@ +! gann_frac.scl +! +Kyle Gann, scale from Fractured Paradise, 1/1=B + 16 +! + 81/80 + 9/8 + 7/6 + 189/160 + 6/5 + 4/3 + 27/20 + 7/5 + 3/2 + 243/160 + 63/40 + 8/5 + 81/50 + 7/4 + 9/5 + 2/1 diff --git a/scales/gann_ghost.scl b/scales/gann_ghost.scl new file mode 100644 index 0000000..acfcb8a --- /dev/null +++ b/scales/gann_ghost.scl @@ -0,0 +1,13 @@ +! gann_ghost.scl +! +Kyle Gann, scale from Ghost Town, 1/1=E + 8 +! + 9/8 + 7/6 + 21/16 + 4/3 + 3/2 + 14/9 + 7/4 + 2/1 diff --git a/scales/gann_new_aunts.scl b/scales/gann_new_aunts.scl new file mode 100644 index 0000000..20c32a2 --- /dev/null +++ b/scales/gann_new_aunts.scl @@ -0,0 +1,32 @@ +! gann_new_aunts.scl +! +Kyle Gann, scale from New Aunts (2008), 1/1=A + 27 +! + 33/32 + 11/10 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 81/64 + 9/7 + 35/27 + 4/3 + 11/8 + 45/32 + 81/56 + 35/24 + 3/2 + 14/9 + 8/5 + 45/28 + 5/3 + 27/16 + 7/4 + 15/8 + 27/14 + 35/18 + 63/32 + 2/1 diff --git a/scales/gann_super.scl b/scales/gann_super.scl new file mode 100644 index 0000000..580d220 --- /dev/null +++ b/scales/gann_super.scl @@ -0,0 +1,27 @@ +! gann_super.scl +! +Kyle Gann, scale from Superparticular Woman (1992), 1/1=G + 22 +! + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 2/1 diff --git a/scales/gann_things.scl b/scales/gann_things.scl new file mode 100644 index 0000000..bd44728 --- /dev/null +++ b/scales/gann_things.scl @@ -0,0 +1,29 @@ +! gann_things.scl +! +Kyle Gann, scale from How Miraculous Things Happen, 1/1=A + 24 +! + 55/54 + 25/24 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 21/16 + 4/3 + 10/7 + 40/27 + 3/2 + 14/9 + 25/16 + 5/3 + 12/7 + 16/9 + 15/8 + 40/21 + 35/18 + 2/1 diff --git a/scales/gann_wolfe.scl b/scales/gann_wolfe.scl new file mode 100644 index 0000000..8adb4ca --- /dev/null +++ b/scales/gann_wolfe.scl @@ -0,0 +1,584 @@ +! gann_wolfe.scl +! +Kyle Gann from Anatomy of an Octave, edited by Kristina Wolfe, 2015 +579 +! +32805/32768 +126/125 +121/120 +100/99 +99/98 +81/80 +531441/524288 +65/64 +64/63 +63/62 +58/57 +57/56 +56/55 +55/54 +52/51 +51/50 +50/49 +49/48 +46/45 +45/44 +128/125 +525/512 +40/39 +39/38 +77/75 +36/35 +250/243 +35/34 +34/33 +33/32 +32/31 +125/121 +31/30 +30/29 +29/28 +57/55 +28/27 +80/77 +27/26 +26/25 +51/49 +126/121 +25/24 +24/23 +117/112 +23/22 +67/64 +22/21 +21/20 +81/77 +20/19 +256/243 +58/55 +135/128 +96/91 +19/18 +55/52 +128/121 +18/17 +25/12 +89/84 +35/33 +52/49 +86/81 +17/16 +33/31 +49/46 +16/15 +31/29 +77/72 +15/14 +29/27 +14/13 +69/64 +55/51 +27/25 +121/112 +13/12 +64/59 +38/35 +63/58 +88/81 +25/23 +62/57 +135/124 +49/45 +12/11 +59/54 +35/32 +23/21 +57/52 +34/31 +800/729 +56/51 +11/10 +54/49 +32/29 +21/19 +31/28 +567/512 +51/46 +71/64 +10/9 +49/44 +39/35 +29/26 +125/112 +48/43 +19/17 +160/143 +28/25 +121/108 +55/49 +13/6 +64/57 +9/8 +62/55 +44/39 +35/31 +26/23 +112/99 +17/15 +25/22 +58/51 +256/225 +33/29 +729/640 +57/50 +73/64 +8/7 +63/55 +55/48 +39/34 +225/196 +31/27 +147/128 +169/147 +23/20 +2187/1900 +38/33 +144/125 +121/105 +15/13 +52/45 +37/32 +81/70 +125/108 +22/19 +51/44 +196/169 +29/25 +36/31 +93/80 +57/49 +64/55 +7/6 +90/77 +75/64 +34/29 +88/75 +27/23 +20/17 +33/28 +46/39 +13/11 +58/49 +45/38 +32/27 +19/16 +9/4 +25/21 +31/26 +105/88 +55/46 +6/5 +77/64 +35/29 +29/24 +75/62 +98/81 +121/100 +23/19 +63/52 +40/33 +17/14 +243/200 +62/51 +28/23 +39/32 +128/105 +8000/6561 +11/9 +60/49 +49/40 +38/31 +27/22 +16/13 +79/64 +100/81 +121/98 +21/17 +99/80 +26/21 +57/46 +31/25 +36/29 +56/45 +96/77 +8192/6561 +5/4 +64/51 +49/39 +44/35 +39/31 +34/27 +7/3 +63/50 +121/96 +29/23 +125/99 +24/19 +512/405 +62/49 +81/64 +19/15 +33/26 +80/63 +14/11 +51/40 +125/98 +23/18 +32/25 +41/32 +50/39 +77/60 +9/7 +58/45 +49/38 +40/31 +31/24 +1323/1024 +128/99 +22/17 +57/44 +162/125 +35/27 +83/64 +100/77 +13/10 +125/96 +30/23 +64/49 +98/75 +17/13 +72/55 +55/42 +38/29 +21/16 +46/35 +25/19 +320/243 +29/22 +675/512 +33/25 +45/34 +85/64 +4/3 +29/12 +75/56 +51/38 +43/32 +121/90 +39/29 +35/26 +66/49 +31/23 +27/20 +23/17 +42/31 +19/14 +110/81 +87/64 +34/25 +49/36 +15/11 +512/375 +26/19 +63/46 +48/35 +1000/729 +11/8 +62/45 +40/29 +29/21 +112/81 +18/13 +25/18 +89/64 +32/23 +39/28 +46/33 +88/63 +7/5 +108/77 +1024/729 +45/32 +38/27 +31/22 +55/39 +24/17 +577/408 +99/70 +17/12 +44/31 +125/88 +27/19 +91/64 +64/45 +729/512 +57/40 +77/54 +10/7 +63/44 +33/23 +56/39 +23/16 +36/25 +121/84 +49/34 +13/9 +81/56 +55/38 +42/29 +29/20 +45/31 +93/64 +16/11 +51/35 +729/500 +35/24 +19/13 +375/256 +22/15 +47/32 +72/49 +25/17 +81/55 +28/19 +31/21 +189/128 +34/23 +40/27 +46/31 +95/64 +49/33 +52/35 +58/39 +125/84 +112/75 +121/81 +31/12 +3/2 +121/80 +50/33 +97/64 +1024/675 +44/29 +243/160 +38/25 +35/23 +32/21 +29/19 +84/55 +55/36 +26/17 +75/49 +49/32 +23/15 +192/125 +20/13 +77/50 +54/35 +125/81 +17/11 +99/64 +48/31 +31/20 +45/29 +14/9 +120/77 +39/25 +25/16 +36/23 +11/7 +63/40 +52/33 +101/64 +30/19 +128/81 +49/31 +405/256 +19/12 +46/29 +100/63 +8/3 +27/17 +62/39 +35/22 +51/32 +8/5 +6561/4096 +77/48 +45/28 +103/64 +29/18 +50/31 +121/75 +21/13 +55/34 +34/21 +81/50 +125/77 +13/8 +57/35 +44/27 +31/19 +80/49 +49/30 +18/11 +105/64 +64/39 +23/14 +51/31 +400/243 +28/17 +33/20 +38/23 +81/49 +48/29 +53/32 +58/35 +63/38 +128/77 +107/64 +5/3 +57/34 +52/31 +42/25 +121/72 +11/4 +32/19 +27/16 +49/29 +22/13 +39/23 +56/33 +17/10 +109/64 +46/27 +75/44 +29/17 +128/75 +77/45 +12/7 +55/32 +31/18 +441/256 +50/29 +19/11 +216/125 +121/70 +45/26 +26/15 +111/64 +125/72 +33/19 +40/23 +54/31 +96/55 +110/63 +7/4 +58/33 +225/128 +51/29 +44/25 +30/17 +113/64 +99/56 +23/13 +62/35 +39/22 +55/31 +16/9 +57/32 +17/6 +98/55 +25/14 +34/19 +52/29 +88/49 +115/64 +9/5 +56/31 +38/21 +29/16 +49/27 +20/11 +51/28 +729/400 +31/17 +42/23 +117/64 +64/35 +4000/2187 +11/6 +90/49 +57/31 +46/25 +81/44 +35/19 +59/32 +24/13 +50/27 +63/34 +13/7 +119/64 +54/29 +28/15 +58/31 +15/8 +62/33 +32/17 +49/26 +66/35 +35/12 +17/9 +121/64 +125/66 +36/19 +256/135 +55/29 +243/128 +19/10 +40/21 +61/32 +21/11 +44/23 +23/12 +48/25 +121/63 +123/64 +25/13 +77/40 +52/27 +27/14 +56/29 +29/15 +60/31 +31/16 +64/33 +33/17 +243/125 +35/18 +39/20 +125/64 +88/45 +45/23 +96/49 +49/25 +51/26 +108/55 +55/28 +57/29 +63/32 +160/81 +99/50 +125/63 +127/64 +2/1 diff --git a/scales/garcia.scl b/scales/garcia.scl new file mode 100644 index 0000000..4b6fcfe --- /dev/null +++ b/scales/garcia.scl @@ -0,0 +1,34 @@ +! garcia.scl +! +Linear 29-tone scale by Jos L. Garcia (1988) 15/13-52/45 alternating + 29 +! + 40/39 + 27/26 + 16/15 + 128/117 + 9/8 + 15/13 + 32/27 + 6/5 + 16/13 + 81/64 + 135/104 + 4/3 + 160/117 + 18/13 + 64/45 + 512/351 + 3/2 + 20/13 + 81/52 + 8/5 + 64/39 + 27/16 + 45/26 + 16/9 + 9/5 + 24/13 + 256/135 + 405/208 + 2/1 diff --git a/scales/garibaldi24opt.scl b/scales/garibaldi24opt.scl new file mode 100644 index 0000000..6c8cb49 --- /dev/null +++ b/scales/garibaldi24opt.scl @@ -0,0 +1,28 @@ +! garibaldi24opt.scl +13-limit lesfip optimization, 5 cent tolerance + 24 +! +64.4815 +90.9590 +180.7956 +204.3728 +269.9424 +293.5196 +383.3563 +409.8338 +474.3152 +497.3269 +562.3192 +588.7007 +678.9717 +702.1072 +766.8945 +792.8508 +881.4644 +907.4207 +972.2080 +995.3435 +1085.6145 +1111.9961 +1176.9884 +2/1 diff --git a/scales/genggong.scl b/scales/genggong.scl new file mode 100644 index 0000000..54de0f4 --- /dev/null +++ b/scales/genggong.scl @@ -0,0 +1,10 @@ +! genggong.scl +! +Genggong polos scale, harmonics 5-9 + 5 +! + 6/5 + 7/5 + 8/5 + 9/5 + 2/1 diff --git a/scales/genovese_12.scl b/scales/genovese_12.scl new file mode 100644 index 0000000..f2df65d --- /dev/null +++ b/scales/genovese_12.scl @@ -0,0 +1,17 @@ +! genovese_12.scl +! +Denny Genovese's superposition of harmonics 8-16 and subharmonics 6-12 + 12 +! + 12/11 + 9/8 + 6/5 + 5/4 + 4/3 + 11/8 + 3/2 + 13/8 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/genovese_38.scl b/scales/genovese_38.scl new file mode 100644 index 0000000..8254825 --- /dev/null +++ b/scales/genovese_38.scl @@ -0,0 +1,43 @@ +! genovese_38.scl +! +Denny Genovese's 38-note scale, harm. 1..16 x subh. 1..12 + 38 +! + 15/14 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 13/9 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 13/7 + 15/8 + 2/1 diff --git a/scales/gf1-2.scl b/scales/gf1-2.scl new file mode 100644 index 0000000..9e16999 --- /dev/null +++ b/scales/gf1-2.scl @@ -0,0 +1,21 @@ +! gf1-2.scl +! +16-note scale with all possible quadruplets of 50 & 100 c. Galois Field GF(2) + 16 +! + 50.00000 + 100.00000 + 150.00000 + 200.00000 + 300.00000 + 350.00000 + 450.00000 + 500.00000 + 550.00000 + 650.00000 + 750.00000 + 800.00000 + 900.00000 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/gf2-3.scl b/scales/gf2-3.scl new file mode 100644 index 0000000..05be273 --- /dev/null +++ b/scales/gf2-3.scl @@ -0,0 +1,21 @@ +! gf2-3.scl +! +16-note scale with all possible quadruplets of 60 & 90 c. Galois Field GF(2) + 16 +! + 60.00000 + 120.00000 + 180.00000 + 240.00000 + 330.00000 + 390.00000 + 480.00000 + 540.00000 + 600.00000 + 690.00000 + 780.00000 + 840.00000 + 930.00000 + 1020.00000 + 1110.00000 + 2/1 diff --git a/scales/gibelius.scl b/scales/gibelius.scl new file mode 100644 index 0000000..133df59 --- /dev/null +++ b/scales/gibelius.scl @@ -0,0 +1,19 @@ +! gibelius.scl +! +Otto Gibelius, Propositiones Mathematico-musicae, 1666, p.35 + 14 +! + 25/24 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/gilson7.scl b/scales/gilson7.scl new file mode 100644 index 0000000..ced33ce --- /dev/null +++ b/scales/gilson7.scl @@ -0,0 +1,14 @@ +! gilson7.scl +! +Gilson septimal + 9 +! + 8/7 + 6/5 + 5/4 + 10/7 + 3/2 + 25/16 + 25/14 + 15/8 + 2/1 diff --git a/scales/gilson7a.scl b/scales/gilson7a.scl new file mode 100644 index 0000000..ca967ce --- /dev/null +++ b/scales/gilson7a.scl @@ -0,0 +1,14 @@ +! gilson7a.scl +! +Gilson septimal 2 + 9 +! + 15/14 + 8/7 + 6/5 + 9/7 + 10/7 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/gizmo14-ji_transversal.scl b/scales/gizmo14-ji_transversal.scl new file mode 100644 index 0000000..f098301 --- /dev/null +++ b/scales/gizmo14-ji_transversal.scl @@ -0,0 +1,19 @@ +! gizmo14-ji_transversal.scl +! +Possible JI transversal of gizmo14.scl or gizmo14-pote.scl + 14 +! + 91/88 + 9/8 + 11/9 + 14/11 + 21/16 + 11/8 + 3/2 + 14/9 + 13/8 + 22/13 + 7/4 + 11/6 + 63/32 + 2/1 diff --git a/scales/gizmo14-pote.scl b/scales/gizmo14-pote.scl new file mode 100644 index 0000000..da93c25 --- /dev/null +++ b/scales/gizmo14-pote.scl @@ -0,0 +1,19 @@ +! gizmo14-pote.scl +! +Gizmo in Parapyth POTE, three ~4:6:7:9:11:13 hexads on 1/1, 9/8, 3/2 + 14 +! + 58.33900 + 207.71200 + 346.77100 + 415.42400 + 473.76300 + 554.48300 + 703.85600 + 762.19500 + 842.91500 + 911.56800 + 969.90700 + 1050.62700 + 1177.61900 + 2/1 diff --git a/scales/gizmo14.scl b/scales/gizmo14.scl new file mode 100644 index 0000000..5e77886 --- /dev/null +++ b/scales/gizmo14.scl @@ -0,0 +1,19 @@ +! gizmo14.scl +! +Parapyth set, three ~4:6:7:9:11:13 hexads on 1/1, 9/8, 3/2 (MET-24 version) + 14 +! + 57.42187 + 207.42187 + 346.28906 + 414.84375 + 472.26562 + 553.71094 + 703.71094 + 761.13281 + 842.57812 + 911.13281 + 968.55469 + 1050.00000 + 1175.97656 + 2/1 diff --git a/scales/glamma.scl b/scales/glamma.scl new file mode 100644 index 0000000..5a96845 --- /dev/null +++ b/scales/glamma.scl @@ -0,0 +1,17 @@ +! glamma.scl +! +Glamma, 7-limit JI, <12 19 27 34|-epimorphic + 12 +! + 25/24 + 35/32 + 8/7 + 6/5 + 5/4 + 10/7 + 35/24 + 3/2 + 5/3 + 12/7 + 7/4 + 2/1 diff --git a/scales/gluck.scl b/scales/gluck.scl new file mode 100644 index 0000000..ff7271c --- /dev/null +++ b/scales/gluck.scl @@ -0,0 +1,17 @@ +! gluck.scl +! +Thomas Glck Bach temperament + 12 +! + 99.02250 + 198.04500 + 299.02250 + 396.09000 + 500.97750 + 598.04500 + 699.02250 + 799.02250 + 897.06750 + 999.02250 + 1097.06750 + 2/1 diff --git a/scales/goebel.scl b/scales/goebel.scl new file mode 100644 index 0000000..eb2a125 --- /dev/null +++ b/scales/goebel.scl @@ -0,0 +1,17 @@ +! goebel.scl +! +Joseph Goebel (1967) + 12 +! + 100.27800 + 200.37700 + 300.29700 + 400.28700 + 500.02900 + 600.19500 + 700.18900 + 800.15000 + 900.16900 + 1000.11800 + 1100.05200 + 2/1 diff --git a/scales/golden_5.scl b/scales/golden_5.scl new file mode 100644 index 0000000..a1dc85b --- /dev/null +++ b/scales/golden_5.scl @@ -0,0 +1,10 @@ +! GOLDEN_5.scl +! +Golden pentatonic + 5 +! + 5/4 + 21/16 + 3/2 + 13/8 + 2/1 diff --git a/scales/gorgo-6.scl b/scales/gorgo-6.scl new file mode 100644 index 0000000..dd5ba5a --- /dev/null +++ b/scales/gorgo-6.scl @@ -0,0 +1,11 @@ +! gorgo-6.scl +! +Gorgo-6, 6/5 and 4/3 minimax, Op de Coul (2002) + 6 +! + 66.91878 + 293.53502 + 520.15127 + 746.76751 + 973.38376 + 2/1 diff --git a/scales/gorgo-pelog.scl b/scales/gorgo-pelog.scl new file mode 100644 index 0000000..5f3e1bf --- /dev/null +++ b/scales/gorgo-pelog.scl @@ -0,0 +1,12 @@ +! gorgo-pelog.scl +! +Pelog-like subset of gorgo[9] + 7 +! + 64.82352 + 293.02282 + 521.22213 + 684.59791 + 749.42143 + 977.62074 + 1205.82004 diff --git a/scales/gradus10.scl b/scales/gradus10.scl new file mode 100644 index 0000000..826a065 --- /dev/null +++ b/scales/gradus10.scl @@ -0,0 +1,32 @@ +! gradus10.scl +! +Intervals > 1 with Gradus = 10 + 27 +! + 10/9 + 8/7 + 7/6 + 15/8 + 27/8 + 32/9 + 18/5 + 14/3 + 24/5 + 32/5 + 21/2 + 25/2 + 40/3 + 45/2 + 81/2 + 42/1 + 128/3 + 50/1 + 56/1 + 90/1 + 120/1 + 160/1 + 162/1 + 216/1 + 288/1 + 384/1 + 512/1 diff --git a/scales/gradus10m.scl b/scales/gradus10m.scl new file mode 100644 index 0000000..403c7bc --- /dev/null +++ b/scales/gradus10m.scl @@ -0,0 +1,97 @@ +! gradus10m.scl +! +Intervals > 1 with Gradus <= 10 + 92 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 7/4 + 16/9 + 9/5 + 15/8 + 2/1 + 9/4 + 7/3 + 12/5 + 5/2 + 8/3 + 3/1 + 16/5 + 10/3 + 27/8 + 7/2 + 32/9 + 18/5 + 15/4 + 4/1 + 9/2 + 14/3 + 24/5 + 5/1 + 16/3 + 6/1 + 32/5 + 20/3 + 27/4 + 7/1 + 15/2 + 8/1 + 9/1 + 10/1 + 21/2 + 32/3 + 12/1 + 25/2 + 40/3 + 27/2 + 14/1 + 15/1 + 16/1 + 18/1 + 20/1 + 21/1 + 64/3 + 45/2 + 24/1 + 25/1 + 27/1 + 28/1 + 30/1 + 32/1 + 36/1 + 40/1 + 81/2 + 42/1 + 128/3 + 45/1 + 48/1 + 50/1 + 54/1 + 56/1 + 60/1 + 64/1 + 72/1 + 80/1 + 81/1 + 90/1 + 96/1 + 108/1 + 120/1 + 128/1 + 144/1 + 160/1 + 162/1 + 192/1 + 216/1 + 256/1 + 288/1 + 384/1 + 512/1 diff --git a/scales/gradus3.scl b/scales/gradus3.scl new file mode 100644 index 0000000..97581d9 --- /dev/null +++ b/scales/gradus3.scl @@ -0,0 +1,7 @@ +! gradus3.scl +! +Intervals > 1 with Gradus = 3 + 2 +! + 3/1 + 4/1 diff --git a/scales/gradus4.scl b/scales/gradus4.scl new file mode 100644 index 0000000..6d149c2 --- /dev/null +++ b/scales/gradus4.scl @@ -0,0 +1,8 @@ +! gradus4.scl +! +Intervals > 1 with Gradus = 4 + 3 +! + 3/2 + 6/1 + 8/1 diff --git a/scales/gradus5.scl b/scales/gradus5.scl new file mode 100644 index 0000000..e353002 --- /dev/null +++ b/scales/gradus5.scl @@ -0,0 +1,10 @@ +! gradus5.scl +! +Intervals > 1 with Gradus = 5 + 5 +! + 4/3 + 5/1 + 9/1 + 12/1 + 16/1 diff --git a/scales/gradus6.scl b/scales/gradus6.scl new file mode 100644 index 0000000..ebe17c9 --- /dev/null +++ b/scales/gradus6.scl @@ -0,0 +1,12 @@ +! gradus6.scl +! +Intervals > 1 with Gradus = 6 + 7 +! + 5/2 + 8/3 + 9/2 + 10/1 + 18/1 + 24/1 + 32/1 diff --git a/scales/gradus7.scl b/scales/gradus7.scl new file mode 100644 index 0000000..02e8158 --- /dev/null +++ b/scales/gradus7.scl @@ -0,0 +1,16 @@ +! gradus7.scl +! +Intervals > 1 with Gradus = 7 + 11 +! + 5/4 + 5/3 + 9/4 + 16/3 + 7/1 + 15/1 + 20/1 + 27/1 + 36/1 + 48/1 + 64/1 diff --git a/scales/gradus8.scl b/scales/gradus8.scl new file mode 100644 index 0000000..13374de --- /dev/null +++ b/scales/gradus8.scl @@ -0,0 +1,20 @@ +! gradus8.scl +! +Intervals > 1 with Gradus = 8 + 15 +! + 9/8 + 6/5 + 8/5 + 10/3 + 7/2 + 15/2 + 32/3 + 27/2 + 14/1 + 30/1 + 40/1 + 54/1 + 72/1 + 96/1 + 128/1 diff --git a/scales/gradus9.scl b/scales/gradus9.scl new file mode 100644 index 0000000..f378910 --- /dev/null +++ b/scales/gradus9.scl @@ -0,0 +1,26 @@ +! gradus9.scl +! +Intervals > 1 with Gradus = 9 + 21 +! + 7/4 + 16/9 + 9/5 + 7/3 + 12/5 + 16/5 + 15/4 + 20/3 + 27/4 + 21/1 + 64/3 + 25/1 + 28/1 + 45/1 + 60/1 + 80/1 + 81/1 + 108/1 + 144/1 + 192/1 + 256/1 diff --git a/scales/grady11.scl b/scales/grady11.scl new file mode 100644 index 0000000..a36eb91 --- /dev/null +++ b/scales/grady11.scl @@ -0,0 +1,17 @@ +! grady11.scl +! +Kraig Grady's dual [5 7 9 11] hexany scale + 12 +! + 35/33 + 10/9 + 7/6 + 14/11 + 15/11 + 81/56 + 3/2 + 45/28 + 135/77 + 81/44 + 27/14 + 2/1 diff --git a/scales/grady_14.scl b/scales/grady_14.scl new file mode 100644 index 0000000..2d40ea3 --- /dev/null +++ b/scales/grady_14.scl @@ -0,0 +1,19 @@ +! grady_14.scl +! +Kraig Grady, letter to Lou Harrison, published in 1/1 7 (1) 1991 p 5. + 14 +! + 21/20 + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 7/5 + 3/2 + 63/40 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/grady_centaur.scl b/scales/grady_centaur.scl new file mode 100644 index 0000000..1760ca3 --- /dev/null +++ b/scales/grady_centaur.scl @@ -0,0 +1,17 @@ +! grady_centaur.scl +! +Kraig Grady's 7-limit Centaur scale (1987), Xenharmonikon 16 + 12 +! + 21/20 + 9/8 + 7/6 + 5/4 + 4/3 + 7/5 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/grady_centaur17.scl b/scales/grady_centaur17.scl new file mode 100644 index 0000000..e4b6969 --- /dev/null +++ b/scales/grady_centaur17.scl @@ -0,0 +1,22 @@ +! grady_centaur17.scl +! +17-tone extension of Centaur, Kraig Grady & Terumi Narushima (2012) + 17 +! + 21/20 + 15/14 + 9/8 + 7/6 + 49/40 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 49/30 + 5/3 + 7/4 + 147/80 + 15/8 + 2/1 diff --git a/scales/grady_centaur19.scl b/scales/grady_centaur19.scl new file mode 100644 index 0000000..42abb1f --- /dev/null +++ b/scales/grady_centaur19.scl @@ -0,0 +1,24 @@ +! grady_centaur19.scl +! +19-tone extension of Centaur, Kraig Grady & Terumi Narushima (2012). Optional 10/9, 63/40, 16/9, 35/18 + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 63/32 + 2/1 diff --git a/scales/grammateus.scl b/scales/grammateus.scl new file mode 100644 index 0000000..4e120f9 --- /dev/null +++ b/scales/grammateus.scl @@ -0,0 +1,17 @@ +! grammateus.scl +! +H. Grammateus (Heinrich Schreiber) (1518). B-F# and Bb-F 1/2 P. Also Marpurg nr.6 and Baron von Wiese and Maria Renold + 12 +! + 101.95500 + 9/8 + 305.86500 + 81/64 + 4/3 + 600.00000 + 3/2 + 803.91000 + 27/16 + 1007.82000 + 243/128 + 2/1 diff --git a/scales/graupner.scl b/scales/graupner.scl new file mode 100644 index 0000000..fdd5466 --- /dev/null +++ b/scales/graupner.scl @@ -0,0 +1,17 @@ +! graupner.scl +! +Johann Gottlieb Graupner's temperament (1819) + 12 +! + 99.38085 + 199.56283 + 299.18649 + 399.59949 + 499.43999 + 600.05924 + 700.09326 + 799.57803 + 899.85889 + 999.57536 + 1100.07666 + 2/1 diff --git a/scales/groenewald.scl b/scales/groenewald.scl new file mode 100644 index 0000000..2409caa --- /dev/null +++ b/scales/groenewald.scl @@ -0,0 +1,17 @@ +! groenewald.scl +! +Jrgen Grnewald, new meantone temperament (2001) + 12 +! + 101.95500 + 193.15686 + 304.88814 + 396.09000 + 4/3 + 600.00000 + 3/2 + 803.91000 + 895.11186 + 1006.84314 + 1098.04500 + 2/1 diff --git a/scales/groenewald_21.scl b/scales/groenewald_21.scl new file mode 100644 index 0000000..516c8d5 --- /dev/null +++ b/scales/groenewald_21.scl @@ -0,0 +1,26 @@ +! groenewald_21.scl +! +Jrgen Grnewald, just tuning (2000) + 21 +! + 135/128 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 512/405 + 4/3 + 45/32 + 64/45 + 3/2 + 405/256 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 256/135 + 2/1 diff --git a/scales/groenewald_bach.scl b/scales/groenewald_bach.scl new file mode 100644 index 0000000..25e64fa --- /dev/null +++ b/scales/groenewald_bach.scl @@ -0,0 +1,17 @@ +! groenewald_bach.scl +! +Jrgen Grnewald, simplified Bach temperament, Ars Organi vol.57 no.1, March 2009, p.39 + 12 +! + 256/243 + 189.25008 + 32/27 + 386.60605 + 4/3 + 1024/729 + 693.17509 + 128/81 + 887.27506 + 16/9 + 1086.80812 + 2/1 diff --git a/scales/groven.scl b/scales/groven.scl new file mode 100644 index 0000000..f84f779 --- /dev/null +++ b/scales/groven.scl @@ -0,0 +1,41 @@ +! groven.scl +! +Eivind Groven's 36-tone scale with 1/8-schisma temp. fifths and 5/4 (1948) + 36 +! + 20.52943 + 70.91664 + 91.44607 + 111.97550 + 182.89214 + 203.42157 + 223.95100 + 274.33821 + 294.86764 + 315.39707 + 5/4 + 406.84314 + 32/25 + 477.75979 + 498.28921 + 518.81864 + 569.20586 + 589.73529 + 610.26471 + 681.18136 + 701.71079 + 722.24021 + 25/16 + 793.15686 + 8/5 + 884.60293 + 905.13236 + 925.66179 + 976.04900 + 996.57843 + 1017.10786 + 1067.49507 + 1088.02450 + 1108.55393 + 1179.47057 + 2/1 diff --git a/scales/groven_ji.scl b/scales/groven_ji.scl new file mode 100644 index 0000000..e9272c3 --- /dev/null +++ b/scales/groven_ji.scl @@ -0,0 +1,41 @@ +! groven_ji.scl +! +Untempered version of Groven's 36-tone scale + 36 +! + 81/80 + 25/24 + 135/128 + 16/15 + 10/9 + 9/8 + 256/225 + 75/64 + 32/27 + 6/5 + 5/4 + 81/64 + 32/25 + 675/512 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 40/27 + 3/2 + 1024/675 + 25/16 + 405/256 + 8/5 + 5/3 + 27/16 + 128/75 + 225/128 + 16/9 + 9/5 + 50/27 + 15/8 + 256/135 + 2025/1024 + 2/1 diff --git a/scales/guanyin22.scl b/scales/guanyin22.scl new file mode 100644 index 0000000..09473c3 --- /dev/null +++ b/scales/guanyin22.scl @@ -0,0 +1,27 @@ +! guanyin22.scl +! +Guanyin[22] {176/175, 540/539} hobbit in 111-tET + 22 +! + 43.24324 + 108.10811 + 162.16216 + 227.02703 + 270.27027 + 313.51351 + 389.18919 + 432.43243 + 497.29730 + 540.54054 + 583.78378 + 659.45946 + 702.70270 + 767.56757 + 810.81081 + 886.48649 + 929.72973 + 972.97297 + 1037.83784 + 1091.89189 + 1156.75676 + 2/1 diff --git a/scales/guiron77.scl b/scales/guiron77.scl new file mode 100644 index 0000000..8062a64 --- /dev/null +++ b/scales/guiron77.scl @@ -0,0 +1,81 @@ +! guiron77.scl +Guiron[77] (118&159 temperament) in 159-et +77 +! +22.641509 +30.188679 +52.830189 +60.377358 +83.018868 +90.566038 +113.207547 +120.754717 +143.396226 +150.943396 +173.584906 +181.132075 +203.773585 +211.320755 +233.962264 +256.603774 +264.150943 +286.792453 +294.339623 +316.981132 +324.528302 +347.169811 +354.716981 +377.358491 +384.905660 +407.547170 +415.094340 +437.735849 +445.283019 +467.924528 +490.566038 +498.113208 +520.754717 +528.301887 +550.943396 +558.490566 +581.132075 +588.679245 +611.320755 +618.867925 +641.509434 +649.056604 +671.698113 +679.245283 +701.886792 +709.433962 +732.075472 +754.716981 +762.264151 +784.905660 +792.452830 +815.094340 +822.641509 +845.283019 +852.830189 +875.471698 +883.018868 +905.660377 +913.207547 +935.849057 +943.396226 +966.037736 +988.679245 +996.226415 +1018.867925 +1026.415094 +1049.056604 +1056.603774 +1079.245283 +1086.792453 +1109.433962 +1116.981132 +1139.622642 +1147.169811 +1169.811321 +1177.358491 +2/1 diff --git a/scales/gunkali.scl b/scales/gunkali.scl new file mode 100644 index 0000000..90048df --- /dev/null +++ b/scales/gunkali.scl @@ -0,0 +1,12 @@ +! gunkali.scl +! +Indian mode Gunkali, see Danilou: Intr. to the Stud. of Mus. Scales, p.175 + 7 +! + 135/128 + 27/25 + 4/3 + 3/2 + 25/16 + 8/5 + 2/1 diff --git a/scales/gyaling.scl b/scales/gyaling.scl new file mode 100644 index 0000000..d5da952 --- /dev/null +++ b/scales/gyaling.scl @@ -0,0 +1,11 @@ +! gyaling.scl +! +Tibetan Buddhist Gyaling tones measured from CD "The Diamond Path", Ligon 2002 + 6 +! + 139.00000 + 280.00000 + 450.00000 + 493.00000 + 707.00000 + 884.00000 diff --git a/scales/h10_27.scl b/scales/h10_27.scl new file mode 100644 index 0000000..2a88fd1 --- /dev/null +++ b/scales/h10_27.scl @@ -0,0 +1,15 @@ +! h10_27.scl +! +10-tET harmonic approximation, fundamental=27 + 10 +! + 29/27 + 31/27 + 11/9 + 4/3 + 38/27 + 41/27 + 44/27 + 47/27 + 50/27 + 2/1 diff --git a/scales/h12_24.scl b/scales/h12_24.scl new file mode 100644 index 0000000..78398c0 --- /dev/null +++ b/scales/h12_24.scl @@ -0,0 +1,17 @@ +! h12_24.scl +! +12-tET harmonic approximation, fundamental=24 + 12 +! + 25/24 + 9/8 + 29/24 + 5/4 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 43/24 + 15/8 + 2/1 diff --git a/scales/h14_27.scl b/scales/h14_27.scl new file mode 100644 index 0000000..49c730c --- /dev/null +++ b/scales/h14_27.scl @@ -0,0 +1,19 @@ +! h14_27.scl +! +14-tET harmonic approximation, fundamental=27 + 14 +! + 28/27 + 10/9 + 31/27 + 11/9 + 35/27 + 4/3 + 38/27 + 40/27 + 14/9 + 44/27 + 47/27 + 49/27 + 17/9 + 2/1 diff --git a/scales/h15_24.scl b/scales/h15_24.scl new file mode 100644 index 0000000..ad7701f --- /dev/null +++ b/scales/h15_24.scl @@ -0,0 +1,20 @@ +! h15_24.scl +! +15-tET harmonic approximation, fundamental=24 + 15 +! + 25/24 + 13/12 + 7/6 + 29/24 + 5/4 + 4/3 + 11/8 + 35/24 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 23/12 + 2/1 diff --git a/scales/h17_32.scl b/scales/h17_32.scl new file mode 100644 index 0000000..223124c --- /dev/null +++ b/scales/h17_32.scl @@ -0,0 +1,22 @@ +! h17_32.scl +! +17-tET harmonic approximation, fundamental=32 + 17 +! + 33/32 + 35/32 + 9/8 + 19/16 + 39/32 + 41/32 + 43/32 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 57/32 + 59/32 + 61/32 + 2/1 diff --git a/scales/hahn9.scl b/scales/hahn9.scl new file mode 100644 index 0000000..2808005 --- /dev/null +++ b/scales/hahn9.scl @@ -0,0 +1,14 @@ +! hahn9.scl +! +Paul Hahn's just version of 9 out of 31 scale, TL 6-8-98 + 9 +! + 35/32 + 6/5 + 5/4 + 7/5 + 3/2 + 8/5 + 7/4 + 15/8 + 2/1 diff --git a/scales/hahn_7.scl b/scales/hahn_7.scl new file mode 100644 index 0000000..1e126b7 --- /dev/null +++ b/scales/hahn_7.scl @@ -0,0 +1,17 @@ +! hahn_7.scl +! +Paul Hahn's scale with 32 consonant 7-limit dyads. TL '99, see also smithgw_hahn12.scl + 12 +! + 21/20 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 28/15 + 2/1 diff --git a/scales/hahn_g.scl b/scales/hahn_g.scl new file mode 100644 index 0000000..7181ad5 --- /dev/null +++ b/scales/hahn_g.scl @@ -0,0 +1,17 @@ +! hahn_g.scl +! +Paul Hahn, fourth of sqrt(2)-1 octave "recursive" meantone (1999) + 12 +! + 120.60608 + 205.88745 + 291.16882 + 411.77490 + 497.05627 + 617.66235 + 702.94373 + 823.54980 + 908.83118 + 994.11255 + 1114.71863 + 2/1 diff --git a/scales/hahnmaxr.scl b/scales/hahnmaxr.scl new file mode 100644 index 0000000..e588415 --- /dev/null +++ b/scales/hahnmaxr.scl @@ -0,0 +1,17 @@ +! hahnmaxr.scl +! +Paul Hahn's hahn_7.scl marvel projected to the 5-limit + 12 +! + 135/128 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 225/128 + 15/8 + 2/1 diff --git a/scales/hamilton.scl b/scales/hamilton.scl new file mode 100644 index 0000000..13980b4 --- /dev/null +++ b/scales/hamilton.scl @@ -0,0 +1,17 @@ +! hamilton.scl +! +Elsie Hamilton's gamut, from article The Modes of Ancient Greek Music (1953) + 12 +! + 22/21 + 11/10 + 22/19 + 11/9 + 22/17 + 11/8 + 22/15 + 11/7 + 44/27 + 22/13 + 11/6 + 2/1 diff --git a/scales/hamilton_jc.scl b/scales/hamilton_jc.scl new file mode 100644 index 0000000..9629376 --- /dev/null +++ b/scales/hamilton_jc.scl @@ -0,0 +1,17 @@ +! hamilton_jc.scl +! +Chalmers' permutation of Hamilton's gamut. Diatonic notes on white + 12 +! + 22/21 + 11/10 + 22/19 + 11/9 + 11/8 + 22/17 + 11/7 + 22/15 + 22/13 + 44/27 + 11/6 + 2/1 diff --git a/scales/hamilton_jc2.scl b/scales/hamilton_jc2.scl new file mode 100644 index 0000000..5ec5555 --- /dev/null +++ b/scales/hamilton_jc2.scl @@ -0,0 +1,17 @@ +! hamilton_jc2.scl +! +EH gamut, diatonic notes on white and drops 17 for 25. JC Dorian Harmonia on C. Schlesinger's Solar scale + 12 +! + 22/21 + 11/10 + 22/19 + 11/9 + 11/8 + 22/15 + 11/7 + 44/27 + 22/13 + 44/25 + 11/6 + 2/1 diff --git a/scales/hammond.scl b/scales/hammond.scl new file mode 100644 index 0000000..a2109ea --- /dev/null +++ b/scales/hammond.scl @@ -0,0 +1,18 @@ +! hammond.scl +! +Hammond organ pitch wheel ratios, 1/1=320 Hz. Do "del 0" to get 12-tone scale + 13 +! + 71/82 + 67/73 + 35/36 + 69/67 + 12/11 + 37/32 + 49/40 + 48/37 + 11/8 + 67/46 + 54/35 + 85/52 + 71/41 diff --git a/scales/hammond12.scl b/scales/hammond12.scl new file mode 100644 index 0000000..84f73c0 --- /dev/null +++ b/scales/hammond12.scl @@ -0,0 +1,17 @@ +! hammond12.scl +! +Hammond organ scale, 1/1=277.0731707 Hz, A=440, see hammond.scl for the ratios + 12 +! + 5494/5183 + 1435/1278 + 5658/4757 + 984/781 + 1517/1136 + 2009/1420 + 3936/2627 + 451/284 + 2747/1633 + 4428/2485 + 3485/1846 + 2/1 diff --git a/scales/handblue.scl b/scales/handblue.scl new file mode 100644 index 0000000..c15e37f --- /dev/null +++ b/scales/handblue.scl @@ -0,0 +1,17 @@ +! handblue.scl +! +"Handy Blues" of Pitch Palette, 7-limit + 12 +! + 16/15 + 9/8 + 7/6 + 5/4 + 4/3 + 7/5 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/handel.scl b/scales/handel.scl new file mode 100644 index 0000000..7218292 --- /dev/null +++ b/scales/handel.scl @@ -0,0 +1,17 @@ +! handel.scl +! +Well temperament according to Georg Friedrich Hndel's rules (c. 1780) + 12 +! + 93.04020 + 195.46440 + 296.95020 + 395.62080 + 498.98340 + 592.96200 + 697.26300 + 794.99520 + 895.54260 + 997.96680 + 1094.76060 + 2/1 diff --git a/scales/handel2.scl b/scales/handel2.scl new file mode 100644 index 0000000..f9c2134 --- /dev/null +++ b/scales/handel2.scl @@ -0,0 +1,17 @@ +! handel2.scl +! +Another "Hndel" temperament, C. di Veroli + 12 +! + 99.71167 + 199.92333 + 299.62167 + 399.83333 + 499.53167 + 599.75666 + 699.45500 + 799.66667 + 899.87833 + 999.57667 + 1100.30166 + 2/1 diff --git a/scales/hanson_19.scl b/scales/hanson_19.scl new file mode 100644 index 0000000..68dc602 --- /dev/null +++ b/scales/hanson_19.scl @@ -0,0 +1,24 @@ +! hanson_19.scl +! +JI version of Hanson's 19 out of 53-tET scale + 19 +! + 25/24 + 27/25 + 9/8 + 125/108 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/harm-doreninv1.scl b/scales/harm-doreninv1.scl new file mode 100644 index 0000000..30d9a1a --- /dev/null +++ b/scales/harm-doreninv1.scl @@ -0,0 +1,12 @@ +! harm-doreninv1.scl +! +1st Inverted Schlesinger's Enharmonic Dorian Harmonia + 7 +! + 27/22 + 5/4 + 14/11 + 16/11 + 21/11 + 43/22 + 2/1 diff --git a/scales/harm-dorinv1.scl b/scales/harm-dorinv1.scl new file mode 100644 index 0000000..2627ce3 --- /dev/null +++ b/scales/harm-dorinv1.scl @@ -0,0 +1,12 @@ +! harm-dorinv1.scl +! +1st Inverted Schlesinger's Chromatic Dorian Harmonia + 7 +! + 13/11 + 27/22 + 14/11 + 16/11 + 20/11 + 21/11 + 2/1 diff --git a/scales/harm-lydchrinv1.scl b/scales/harm-lydchrinv1.scl new file mode 100644 index 0000000..47a4512 --- /dev/null +++ b/scales/harm-lydchrinv1.scl @@ -0,0 +1,12 @@ +! harm-lydchrinv1.scl +! +1st Inverted Schlesinger's Chromatic Lydian Harmonia + 7 +! + 16/13 + 17/13 + 18/13 + 20/13 + 24/13 + 25/13 + 2/1 diff --git a/scales/harm-lydeninv1.scl b/scales/harm-lydeninv1.scl new file mode 100644 index 0000000..7fae4a7 --- /dev/null +++ b/scales/harm-lydeninv1.scl @@ -0,0 +1,12 @@ +! harm-lydeninv1.scl +! +1st Inverted Schlesinger's Enharmonic Lydian Harmonia + 7 +! + 17/13 + 35/26 + 18/13 + 20/13 + 25/13 + 51/26 + 2/1 diff --git a/scales/harm-mixochrinv1.scl b/scales/harm-mixochrinv1.scl new file mode 100644 index 0000000..05acfd5 --- /dev/null +++ b/scales/harm-mixochrinv1.scl @@ -0,0 +1,12 @@ +! harm-mixochrinv1.scl +! +1st Inverted Schlesinger's Chromatic Mixolydian Harmonia + 7 +! + 9/7 + 19/14 + 10/7 + 11/7 + 13/7 + 27/14 + 2/1 diff --git a/scales/harm-mixoeninv1.scl b/scales/harm-mixoeninv1.scl new file mode 100644 index 0000000..c15384a --- /dev/null +++ b/scales/harm-mixoeninv1.scl @@ -0,0 +1,12 @@ +! HARM-MIXOeninv1.scl +! +1st Inverted Schlesinger's Enharmonic Mixolydian Harmonia + 7 +! + 19/14 + 39/28 + 10/7 + 11/7 + 27/14 + 55/28 + 2/1 diff --git a/scales/harm10.scl b/scales/harm10.scl new file mode 100644 index 0000000..647489d --- /dev/null +++ b/scales/harm10.scl @@ -0,0 +1,15 @@ +! harm10.scl +! +Harmonics 10 to 20 + 10 +! + 11/10 + 6/5 + 13/10 + 7/5 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 diff --git a/scales/harm12.scl b/scales/harm12.scl new file mode 100644 index 0000000..bf09e75 --- /dev/null +++ b/scales/harm12.scl @@ -0,0 +1,17 @@ +! harm12.scl +! +Harmonics 12 to 24 + 12 +! + 13/12 + 7/6 + 5/4 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 23/12 + 2/1 diff --git a/scales/harm12_2.scl b/scales/harm12_2.scl new file mode 100644 index 0000000..93bdc83 --- /dev/null +++ b/scales/harm12_2.scl @@ -0,0 +1,17 @@ +! harm12_2.scl +! +Harmonics 12 to 24, mode 9 + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/harm12s.scl b/scales/harm12s.scl new file mode 100644 index 0000000..d65749d --- /dev/null +++ b/scales/harm12s.scl @@ -0,0 +1,16 @@ +! harm12s.scl +! +Harmonics 1 to 12 and subharmonics mixed + 11 +! + 9/8 + 8/7 + 5/4 + 4/3 + 11/8 + 16/11 + 3/2 + 8/5 + 7/4 + 16/9 + 2/1 diff --git a/scales/harm14.scl b/scales/harm14.scl new file mode 100644 index 0000000..ebc918d --- /dev/null +++ b/scales/harm14.scl @@ -0,0 +1,19 @@ +! harm14.scl +! +Harmonics 14 to 28, Tessaradecatonic Harmonium, Jos Pereira de Sampaio (1903) + 14 +! + 15/14 + 8/7 + 17/14 + 9/7 + 19/14 + 10/7 + 3/2 + 11/7 + 23/14 + 12/7 + 25/14 + 13/7 + 27/14 + 2/1 diff --git a/scales/harm15.scl b/scales/harm15.scl new file mode 100644 index 0000000..fc8fa8f --- /dev/null +++ b/scales/harm15.scl @@ -0,0 +1,20 @@ +! harm15.scl +! +Harmonics 15 to 30 + 15 +! + 16/15 + 17/15 + 6/5 + 19/15 + 4/3 + 7/5 + 22/15 + 23/15 + 8/5 + 5/3 + 26/15 + 9/5 + 28/15 + 29/15 + 2/1 diff --git a/scales/harm15a.scl b/scales/harm15a.scl new file mode 100644 index 0000000..bb5c90e --- /dev/null +++ b/scales/harm15a.scl @@ -0,0 +1,17 @@ +! harm15a.scl +! +Twelve out of harmonics 15 to 30 + 12 +! + 16/15 + 17/15 + 6/5 + 19/15 + 4/3 + 7/5 + 22/15 + 8/5 + 5/3 + 26/15 + 28/15 + 2/1 diff --git a/scales/harm16.scl b/scales/harm16.scl new file mode 100644 index 0000000..e3fe9d5 --- /dev/null +++ b/scales/harm16.scl @@ -0,0 +1,21 @@ +! harm16.scl +! +Harmonics 16 to 32, Tom Stone's Guitar Scale + 16 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/harm19.scl b/scales/harm19.scl new file mode 100644 index 0000000..e890844 --- /dev/null +++ b/scales/harm19.scl @@ -0,0 +1,24 @@ +! harm19.scl +! +Harmonics 19 to 38, odd harmonics until 37 + 19 +! + 33/32 + 17/16 + 35/32 + 9/8 + 37/32 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/harm1c-hypod.scl b/scales/harm1c-hypod.scl new file mode 100644 index 0000000..211f486 --- /dev/null +++ b/scales/harm1c-hypod.scl @@ -0,0 +1,13 @@ +! harm1c-hypod.scl +! +HarmC-Hypodorian + 8 +! + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 7/4 + 15/8 + 2/1 diff --git a/scales/harm1c-hypol.scl b/scales/harm1c-hypol.scl new file mode 100644 index 0000000..618a8df --- /dev/null +++ b/scales/harm1c-hypol.scl @@ -0,0 +1,13 @@ +! harm1c-hypol.scl +! +HarmC-Hypolydian + 8 +! + 21/20 + 11/10 + 13/10 + 7/5 + 3/2 + 8/5 + 17/10 + 2/1 diff --git a/scales/harm1c-lydian.scl b/scales/harm1c-lydian.scl new file mode 100644 index 0000000..68dec05 --- /dev/null +++ b/scales/harm1c-lydian.scl @@ -0,0 +1,13 @@ +! Harm1C-Lydian.scl +! +Harm1C-Lydian + 8 +! + 27/26 + 14/13 + 18/13 + 19/13 + 20/13 + 21/13 + 22/13 + 2/1 diff --git a/scales/harm1c-mix.scl b/scales/harm1c-mix.scl new file mode 100644 index 0000000..925da5b --- /dev/null +++ b/scales/harm1c-mix.scl @@ -0,0 +1,12 @@ +! Harm1C-Mix.scl +! +Harm1C-Con Mixolydian + 7 +! + 8/7 + 10/7 + 3/2 + 11/7 + 13/7 + 27/14 + 2/1 diff --git a/scales/harm1c-mixolydian.scl b/scales/harm1c-mixolydian.scl new file mode 100644 index 0000000..f7b5773 --- /dev/null +++ b/scales/harm1c-mixolydian.scl @@ -0,0 +1,12 @@ +! Harm1C-Mixolydian.scl +! +Harm1C-Mixolydian + 7 +! + 15/14 + 8/7 + 10/7 + 11/7 + 23/14 + 12/7 + 2/1 diff --git a/scales/harm20.scl b/scales/harm20.scl new file mode 100644 index 0000000..bed53d3 --- /dev/null +++ b/scales/harm20.scl @@ -0,0 +1,17 @@ +! harm20.scl +! +Harmonics 20 to 40 + 12 +! + 21/20 + 11/10 + 6/5 + 5/4 + 13/10 + 7/5 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 diff --git a/scales/harm24.scl b/scales/harm24.scl new file mode 100644 index 0000000..8c8b512 --- /dev/null +++ b/scales/harm24.scl @@ -0,0 +1,17 @@ +! harm24.scl +! +Harmonics 24 to 48 + 12 +! + 13/12 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 13/8 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/harm30.scl b/scales/harm30.scl new file mode 100644 index 0000000..4d250b4 --- /dev/null +++ b/scales/harm30.scl @@ -0,0 +1,35 @@ +! harm30.scl +! +Harmonics 30 to 60 + 30 +! + 31/30 + 16/15 + 11/10 + 17/15 + 7/6 + 6/5 + 37/30 + 19/15 + 13/10 + 4/3 + 41/30 + 7/5 + 43/30 + 22/15 + 3/2 + 23/15 + 47/30 + 8/5 + 49/30 + 5/3 + 17/10 + 26/15 + 53/30 + 9/5 + 11/6 + 28/15 + 19/10 + 29/15 + 59/30 + 2/1 diff --git a/scales/harm32.scl b/scales/harm32.scl new file mode 100644 index 0000000..fd14711 --- /dev/null +++ b/scales/harm32.scl @@ -0,0 +1,37 @@ +! harm32.scl +! +Harmonics 32 to 64 + 32 +! + 33/32 + 17/16 + 35/32 + 9/8 + 37/32 + 19/16 + 39/32 + 5/4 + 41/32 + 21/16 + 43/32 + 11/8 + 45/32 + 23/16 + 47/32 + 3/2 + 49/32 + 25/16 + 51/32 + 13/8 + 53/32 + 27/16 + 55/32 + 7/4 + 57/32 + 29/16 + 59/32 + 15/8 + 61/32 + 31/16 + 63/32 + 2/1 diff --git a/scales/harm6.scl b/scales/harm6.scl new file mode 100644 index 0000000..aa37ac1 --- /dev/null +++ b/scales/harm6.scl @@ -0,0 +1,11 @@ +! harm6.scl +! +Harmonics 6 to 12 + 6 +! + 9/8 + 5/4 + 11/8 + 3/2 + 7/4 + 2/1 diff --git a/scales/harm7lim.scl b/scales/harm7lim.scl new file mode 100644 index 0000000..26909c9 --- /dev/null +++ b/scales/harm7lim.scl @@ -0,0 +1,52 @@ +! harm7lim.scl +! +7-limit harmonics + 47 +! + 2/1 + 3/1 + 4/1 + 5/1 + 6/1 + 7/1 + 8/1 + 9/1 + 10/1 + 12/1 + 14/1 + 15/1 + 16/1 + 18/1 + 20/1 + 21/1 + 22/1 + 24/1 + 25/1 + 28/1 + 30/1 + 32/1 + 35/1 + 36/1 + 40/1 + 42/1 + 45/1 + 48/1 + 49/1 + 50/1 + 56/1 + 60/1 + 63/1 + 64/1 + 70/1 + 72/1 + 75/1 + 80/1 + 81/1 + 84/1 + 90/1 + 96/1 + 98/1 + 100/1 + 105/1 + 112/1 + 120/1 diff --git a/scales/harm8.scl b/scales/harm8.scl new file mode 100644 index 0000000..c670f58 --- /dev/null +++ b/scales/harm8.scl @@ -0,0 +1,13 @@ +! harm8.scl +! +Harmonics 8 to 16 + 8 +! + 9/8 + 5/4 + 11/8 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/harm9.scl b/scales/harm9.scl new file mode 100644 index 0000000..aa5bf46 --- /dev/null +++ b/scales/harm9.scl @@ -0,0 +1,14 @@ +! harm9.scl +! +Harmonics 9 to 18 + 9 +! + 17/16 + 9/8 + 5/4 + 11/8 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/harm_bastard.scl b/scales/harm_bastard.scl new file mode 100644 index 0000000..f8451f9 --- /dev/null +++ b/scales/harm_bastard.scl @@ -0,0 +1,12 @@ +! harm_bastard.scl +! +Schlesinger's "Bastard" Hypodorian Harmonia & inverse 1)7 from 1.3.5.7.9.11.13 + 7 +! + 8/7 + 16/13 + 4/3 + 16/11 + 8/5 + 16/9 + 2/1 diff --git a/scales/harm_bastinv.scl b/scales/harm_bastinv.scl new file mode 100644 index 0000000..972cdec --- /dev/null +++ b/scales/harm_bastinv.scl @@ -0,0 +1,12 @@ +! harm_bastinv.scl +! +Inverse Schlesinger's "Bastard" Hypodorian Harmonia & 1)7 from 1.3.5.7.9.11.13 + 7 +! + 9/8 + 5/4 + 11/8 + 3/2 + 13/8 + 7/4 + 2/1 diff --git a/scales/harm_darreg.scl b/scales/harm_darreg.scl new file mode 100644 index 0000000..45600b8 --- /dev/null +++ b/scales/harm_darreg.scl @@ -0,0 +1,29 @@ +! harm_darreg.scl +! +Darreg Harmonics 4-15 + 24 +! + 4/1 + 5/1 + 6/1 + 7/1 + 8/1 + 9/1 + 10/1 + 11/1 + 12/1 + 13/1 + 14/1 + 15/1 + 16/1 + 20/1 + 24/1 + 28/1 + 32/1 + 36/1 + 40/1 + 44/1 + 48/1 + 52/1 + 56/1 + 60/1 diff --git a/scales/harm_mean.scl b/scales/harm_mean.scl new file mode 100644 index 0000000..02cb80f --- /dev/null +++ b/scales/harm_mean.scl @@ -0,0 +1,14 @@ +! harm_mean.scl +! +Harm. mean 9-tonic, 8/7 is HM of 1/1 and 4/3, etc. + 9 +! + 32/31 + 16/15 + 8/7 + 4/3 + 3/2 + 48/31 + 8/5 + 12/7 + 2/1 diff --git a/scales/harm_pehrson.scl b/scales/harm_pehrson.scl new file mode 100644 index 0000000..6a38bd5 --- /dev/null +++ b/scales/harm_pehrson.scl @@ -0,0 +1,24 @@ +! harm_pehrson.scl +! +Harm. 1/4-11/4 and subh. 4/1-4/11. Joseph Pehrson (1999) + 19 +! + 1/4 + 4/11 + 2/5 + 4/9 + 1/2 + 4/7 + 2/3 + 3/4 + 4/5 + 1/1 + 5/4 + 4/3 + 3/2 + 7/4 + 2/1 + 9/4 + 5/2 + 11/4 + 4/1 diff --git a/scales/harm_perkis.scl b/scales/harm_perkis.scl new file mode 100644 index 0000000..015e1e2 --- /dev/null +++ b/scales/harm_perkis.scl @@ -0,0 +1,17 @@ +! harm_perkis.scl +! +Harmonics 60 to 30 (Perkis) + 12 +! + 15/14 + 10/9 + 6/5 + 5/4 + 4/3 + 10/7 + 3/2 + 30/19 + 5/3 + 12/7 + 15/8 + 2/1 diff --git a/scales/harmc-hypop.scl b/scales/harmc-hypop.scl new file mode 100644 index 0000000..be896a3 --- /dev/null +++ b/scales/harmc-hypop.scl @@ -0,0 +1,14 @@ +! harmc-hypop.scl +! +HarmC-Hypophrygian + 9 +! + 11/9 + 23/18 + 4/3 + 25/18 + 13/9 + 14/9 + 16/9 + 17/9 + 2/1 diff --git a/scales/harmd-15.scl b/scales/harmd-15.scl new file mode 100644 index 0000000..992953e --- /dev/null +++ b/scales/harmd-15.scl @@ -0,0 +1,12 @@ +! harmd-15.scl +! +HarmD-15-Harmonia + 7 +! + 16/15 + 6/5 + 4/3 + 22/15 + 8/5 + 26/15 + 2/1 diff --git a/scales/harmd-conmix.scl b/scales/harmd-conmix.scl new file mode 100644 index 0000000..e8d0553 --- /dev/null +++ b/scales/harmd-conmix.scl @@ -0,0 +1,12 @@ +! harmd-conmix.scl +! +HarmD-ConMixolydian + 7 +! + 8/7 + 9/7 + 3/2 + 11/7 + 12/7 + 13/7 + 2/1 diff --git a/scales/harmd-hypop.scl b/scales/harmd-hypop.scl new file mode 100644 index 0000000..51e8a63 --- /dev/null +++ b/scales/harmd-hypop.scl @@ -0,0 +1,14 @@ +! HarmD-Hypop.scl +! +HarmD-Hypophrygian + 9 +! + 10/9 + 11/9 + 4/3 + 25/18 + 13/9 + 14/9 + 5/3 + 16/9 + 2/1 diff --git a/scales/harmd-lyd.scl b/scales/harmd-lyd.scl new file mode 100644 index 0000000..0c78032 --- /dev/null +++ b/scales/harmd-lyd.scl @@ -0,0 +1,14 @@ +! harmd-lyd.scl +! +HarmD-Lydian + 9 +! + 14/13 + 15/13 + 16/13 + 18/13 + 19/13 + 20/13 + 22/13 + 24/13 + 2/1 diff --git a/scales/harmd-mix.scl b/scales/harmd-mix.scl new file mode 100644 index 0000000..b91c475 --- /dev/null +++ b/scales/harmd-mix.scl @@ -0,0 +1,12 @@ +! harmd-mix.scl +! +HarmD-Mixolydian. Harmonics 7-14 + 7 +! + 8/7 + 9/7 + 10/7 + 11/7 + 12/7 + 13/7 + 2/1 diff --git a/scales/harmd-phr.scl b/scales/harmd-phr.scl new file mode 100644 index 0000000..108ccf2 --- /dev/null +++ b/scales/harmd-phr.scl @@ -0,0 +1,17 @@ +! harmd-phr.scl +! +HarmD-Phryg (with 5 extra tones) + 12 +! + 25/24 + 13/12 + 9/8 + 7/6 + 4/3 + 5/4 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/harme-hypod.scl b/scales/harme-hypod.scl new file mode 100644 index 0000000..6712930 --- /dev/null +++ b/scales/harme-hypod.scl @@ -0,0 +1,13 @@ +! harme-hypod.scl +! +HarmE-Hypodorian + 8 +! + 21/16 + 43/32 + 11/8 + 23/16 + 3/2 + 15/8 + 31/16 + 2/1 diff --git a/scales/harme-hypol.scl b/scales/harme-hypol.scl new file mode 100644 index 0000000..5a05b60 --- /dev/null +++ b/scales/harme-hypol.scl @@ -0,0 +1,13 @@ +! harme-hypol.scl +! +HarmE-Hypolydian + 8 +! + 43/40 + 21/20 + 13/10 + 7/5 + 3/2 + 31/20 + 8/5 + 2/1 diff --git a/scales/harme-hypop.scl b/scales/harme-hypop.scl new file mode 100644 index 0000000..b6bad4d --- /dev/null +++ b/scales/harme-hypop.scl @@ -0,0 +1,14 @@ +! harme-hypop.scl +! +HarmE-Hypophrygian + 9 +! + 23/18 + 47/36 + 4/3 + 25/18 + 13/9 + 14/9 + 17/9 + 35/18 + 2/1 diff --git a/scales/harmf10.scl b/scales/harmf10.scl new file mode 100644 index 0000000..e20cda3 --- /dev/null +++ b/scales/harmf10.scl @@ -0,0 +1,18 @@ +! harmf10.scl +! +6/7/8/9/10 harmonics + 13 +! + 35/32 + 9/8 + 5/4 + 81/64 + 21/16 + 45/32 + 3/2 + 49/32 + 25/16 + 27/16 + 7/4 + 63/32 + 2/1 diff --git a/scales/harmf12.scl b/scales/harmf12.scl new file mode 100644 index 0000000..6ac5bfb --- /dev/null +++ b/scales/harmf12.scl @@ -0,0 +1,25 @@ +! harmf12.scl +! +First 12 harmonics of 6th through 12th harmonics. Also Arnold Dreyblatt's tuning system + 20 +! + 33/32 + 35/32 + 9/8 + 77/64 + 5/4 + 81/64 + 21/16 + 11/8 + 45/32 + 3/2 + 49/32 + 99/64 + 25/16 + 27/16 + 55/32 + 7/4 + 15/8 + 121/64 + 63/32 + 2/1 diff --git a/scales/harmf16.scl b/scales/harmf16.scl new file mode 100644 index 0000000..355678f --- /dev/null +++ b/scales/harmf16.scl @@ -0,0 +1,35 @@ +! harmf16.scl +! +First 16 harmonics and subharmonics + 30 +! + 2/1 + 3/1 + 4/1 + 5/1 + 6/1 + 7/1 + 8/1 + 9/1 + 10/1 + 11/1 + 12/1 + 13/1 + 14/1 + 15/1 + 16/1 + 8/1 + 16/3 + 4/1 + 16/5 + 8/3 + 16/7 + 2/1 + 16/9 + 8/5 + 16/11 + 4/3 + 16/13 + 8/7 + 16/15 + 1/1 diff --git a/scales/harmf30.scl b/scales/harmf30.scl new file mode 100644 index 0000000..84f1aae --- /dev/null +++ b/scales/harmf30.scl @@ -0,0 +1,64 @@ +! harmf30.scl +! +First 30 harmonics and subharmonics + 59 +! + 16/15 + 32/29 + 8/7 + 32/27 + 16/13 + 32/25 + 4/3 + 32/23 + 32/21 + 8/5 + 32/19 + 16/9 + 32/17 + 2/1 + 32/15 + 16/7 + 32/13 + 8/3 + 32/11 + 16/5 + 32/9 + 4/1 + 32/7 + 16/3 + 32/5 + 8/1 + 32/3 + 16/1 + 32/1 + 33/1 + 34/1 + 35/1 + 36/1 + 37/1 + 38/1 + 39/1 + 40/1 + 41/1 + 42/1 + 43/1 + 44/1 + 45/1 + 46/1 + 47/1 + 48/1 + 49/1 + 50/1 + 51/1 + 52/1 + 53/1 + 54/1 + 55/1 + 56/1 + 57/1 + 58/1 + 59/1 + 60/1 + 61/1 + 62/1 diff --git a/scales/harmf9.scl b/scales/harmf9.scl new file mode 100644 index 0000000..401d5db --- /dev/null +++ b/scales/harmf9.scl @@ -0,0 +1,15 @@ +! harmf9.scl +! +6/7/8/9 harmonics, First 9 overtones of 5th through 9th harmonics + 10 +! + 9/8 + 7/6 + 5/4 + 4/3 + 49/36 + 3/2 + 14/9 + 7/4 + 16/9 + 2/1 diff --git a/scales/harmjc-15.scl b/scales/harmjc-15.scl new file mode 100644 index 0000000..5be9ae6 --- /dev/null +++ b/scales/harmjc-15.scl @@ -0,0 +1,17 @@ +! harmjc-15.scl +! +Rationalized JC Sub-15 Harmonia on C. MD=15, No planetary assignment. + 12 +! + 15/14 + 15/13 + 6/5 + 5/4 + 15/11 + 10/7 + 3/2 + 30/19 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/harmjc-17-2.scl b/scales/harmjc-17-2.scl new file mode 100644 index 0000000..5adc633 --- /dev/null +++ b/scales/harmjc-17-2.scl @@ -0,0 +1,17 @@ +! harmjc-17-2.scl +! +Rationalized JC Sub-17 Harmonia on C. MD=17, No planetary assignment. + 12 +! + 17/16 + 17/15 + 17/14 + 17/13 + 17/12 + 34/23 + 17/11 + 34/21 + 17/10 + 34/19 + 17/9 + 2/1 diff --git a/scales/harmjc-17.scl b/scales/harmjc-17.scl new file mode 100644 index 0000000..cd3c305 --- /dev/null +++ b/scales/harmjc-17.scl @@ -0,0 +1,17 @@ +! harmjc-17.scl +! +Rationalized JC Sub-17 Harmonia on C. MD=17, No planetary assignment. + 12 +! + 34/33 + 17/16 + 17/15 + 17/14 + 17/13 + 34/25 + 17/12 + 34/23 + 17/11 + 34/21 + 17/10 + 2/1 diff --git a/scales/harmjc-19-2.scl b/scales/harmjc-19-2.scl new file mode 100644 index 0000000..7c9e90c --- /dev/null +++ b/scales/harmjc-19-2.scl @@ -0,0 +1,17 @@ +! harmjc-19-2.scl +! +Rationalized JC Sub-19 Harmonia on C. MD=19, No planetary assignment. + 12 +! + 19/18 + 19/17 + 19/16 + 19/15 + 19/14 + 38/27 + 19/13 + 38/25 + 19/12 + 38/23 + 19/11 + 2/1 diff --git a/scales/harmjc-19.scl b/scales/harmjc-19.scl new file mode 100644 index 0000000..ff94a6c --- /dev/null +++ b/scales/harmjc-19.scl @@ -0,0 +1,17 @@ +! harmjc-19.scl +! +Rationalized JC Sub-19 Harmonia on C. MD=19, No planetary assignment. + 12 +! + 19/18 + 19/17 + 19/16 + 19/15 + 19/14 + 19/13 + 19/12 + 38/23 + 19/11 + 38/21 + 19/10 + 2/1 diff --git a/scales/harmjc-21.scl b/scales/harmjc-21.scl new file mode 100644 index 0000000..be40644 --- /dev/null +++ b/scales/harmjc-21.scl @@ -0,0 +1,17 @@ +! harmjc-21.scl +! +Rationalized JC Sub-21 Harmonia on C. MD=21, No planetary assignment. + 12 +! + 42/41 + 21/20 + 21/19 + 7/6 + 21/16 + 7/5 + 3/2 + 14/9 + 21/13 + 42/25 + 7/4 + 2/1 diff --git a/scales/harmjc-23-2.scl b/scales/harmjc-23-2.scl new file mode 100644 index 0000000..6f967c2 --- /dev/null +++ b/scales/harmjc-23-2.scl @@ -0,0 +1,17 @@ +! harmjc-23-2.scl +! +Rationalized JC Sub-23 Harmonia on C. MD=23, No planetary assignment. + 12 +! + 23/22 + 23/21 + 23/20 + 23/19 + 23/18 + 23/17 + 23/16 + 23/15 + 23/14 + 23/13 + 23/12 + 2/1 diff --git a/scales/harmjc-23.scl b/scales/harmjc-23.scl new file mode 100644 index 0000000..77b1cbf --- /dev/null +++ b/scales/harmjc-23.scl @@ -0,0 +1,17 @@ +! harmjc-23.scl +! +Rationalized JC Sub-23 Harmonia on C. MD=23, No planetary assignment. + 12 +! + 23/22 + 23/20 + 23/19 + 23/18 + 23/16 + 23/15 + 23/14 + 46/27 + 23/13 + 46/25 + 23/12 + 2/1 diff --git a/scales/harmjc-25.scl b/scales/harmjc-25.scl new file mode 100644 index 0000000..4c0550c --- /dev/null +++ b/scales/harmjc-25.scl @@ -0,0 +1,17 @@ +! harmjc-25.scl +! +Rationalized JC Sub-25 Harmonia on C. MD=25, No planetary assignment. + 12 +! + 25/24 + 25/22 + 25/21 + 5/4 + 25/18 + 25/17 + 25/16 + 5/3 + 25/14 + 50/27 + 25/13 + 2/1 diff --git a/scales/harmjc-27.scl b/scales/harmjc-27.scl new file mode 100644 index 0000000..0c06fa3 --- /dev/null +++ b/scales/harmjc-27.scl @@ -0,0 +1,17 @@ +! harmjc-27.scl +! +Rationalized JC Sub-27 Harmonia on C. MD=27, No planetary assignment. + 12 +! + 27/26 + 9/8 + 27/23 + 27/22 + 27/20 + 27/19 + 3/2 + 27/17 + 27/16 + 9/5 + 27/14 + 2/1 diff --git a/scales/harmjc-hypod16.scl b/scales/harmjc-hypod16.scl new file mode 100644 index 0000000..9c70757 --- /dev/null +++ b/scales/harmjc-hypod16.scl @@ -0,0 +1,17 @@ +! harmjc-hypod16.scl +! +Rationalized JC Hypodorian Harmonia on C. Saturn Scale on C, MD=16. (Steiner) + 12 +! + 16/15 + 8/7 + 32/27 + 16/13 + 4/3 + 32/23 + 16/11 + 32/21 + 8/5 + 32/19 + 16/9 + 2/1 diff --git a/scales/harmjc-hypol20.scl b/scales/harmjc-hypol20.scl new file mode 100644 index 0000000..e0216b4 --- /dev/null +++ b/scales/harmjc-hypol20.scl @@ -0,0 +1,17 @@ +! harmjc-hypol20.scl +! +Rationalized JC Hypolydian Harmonia on C. Mars scale on C., MD=20 + 12 +! + 20/19 + 10/9 + 20/17 + 5/4 + 4/3 + 10/7 + 20/13 + 8/5 + 5/3 + 40/23 + 11/5 + 2/1 diff --git a/scales/harmjc-hypop18.scl b/scales/harmjc-hypop18.scl new file mode 100644 index 0000000..4f944bf --- /dev/null +++ b/scales/harmjc-hypop18.scl @@ -0,0 +1,17 @@ +! harmjc-hypop18.scl +! +Rationalized JC Hypophrygian Harmonia on C. Jupiter scale on C, MD =18 + 12 +! + 18/17 + 9/8 + 6/5 + 9/7 + 18/13 + 36/25 + 3/2 + 36/23 + 18/11 + 12/7 + 9/5 + 2/1 diff --git a/scales/harmjc-lydian13.scl b/scales/harmjc-lydian13.scl new file mode 100644 index 0000000..7aff3ce --- /dev/null +++ b/scales/harmjc-lydian13.scl @@ -0,0 +1,17 @@ +! harmjc-lydian13.scl +! +Rationalized JC Lydian Harmonia on Schlesinger's Mercury scale on C, MD = 26 or 13 + 12 +! + 26/25 + 13/12 + 26/23 + 13/11 + 13/10 + 26/19 + 13/9 + 26/17 + 13/8 + 26/15 + 13/7 + 2/1 diff --git a/scales/harmjc-mix14.scl b/scales/harmjc-mix14.scl new file mode 100644 index 0000000..d3fcfb7 --- /dev/null +++ b/scales/harmjc-mix14.scl @@ -0,0 +1,17 @@ +! harmjc-mix14.scl +! +Rationalized JC Mixolydian Harmonia on Schlesinger's Moon Scale on C, MD = 14 + 12 +! + 28/27 + 14/13 + 28/25 + 7/6 + 14/11 + 4/3 + 7/5 + 28/19 + 14/9 + 28/17 + 7/4 + 2/1 diff --git a/scales/harmjc-phryg12.scl b/scales/harmjc-phryg12.scl new file mode 100644 index 0000000..f241999 --- /dev/null +++ b/scales/harmjc-phryg12.scl @@ -0,0 +1,17 @@ +! harmjc-phryg12.scl +! +Rationalized JC Phrygian Harmonia on Schlesinger's Venus scale on C, MD = 24 or 12 + 12 +! + 24/23 + 12/11 + 8/7 + 6/5 + 4/3 + 24/17 + 3/2 + 8/5 + 12/7 + 16/9 + 24/13 + 2/1 diff --git a/scales/harmonical.scl b/scales/harmonical.scl new file mode 100644 index 0000000..2ee4bc5 --- /dev/null +++ b/scales/harmonical.scl @@ -0,0 +1,17 @@ +! harmonical.scl +! +See pp 17 and 466-468 Helmholtz. lower 4 oct. Instr. designed & tuned by Ellis + 12 +! + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/harmonical_up.scl b/scales/harmonical_up.scl new file mode 100644 index 0000000..4982350 --- /dev/null +++ b/scales/harmonical_up.scl @@ -0,0 +1,17 @@ +! harmonical_up.scl +! +Upper 2 octaves of Ellis's Harmonical + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 11/8 + 7/4 + 3/2 + 25/16 + 13/8 + 29/16 + 15/8 + 2/1 diff --git a/scales/harmsub16.scl b/scales/harmsub16.scl new file mode 100644 index 0000000..eeb9d3d --- /dev/null +++ b/scales/harmsub16.scl @@ -0,0 +1,17 @@ +! harmsub16.scl +! +16 harmonics on 1/1 and 16 subharmonics on 15/8 + 12 +! + 15/14 + 9/8 + 15/13 + 5/4 + 15/11 + 11/8 + 3/2 + 13/8 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/harrison_15.scl b/scales/harrison_15.scl new file mode 100644 index 0000000..e74f217 --- /dev/null +++ b/scales/harrison_15.scl @@ -0,0 +1,20 @@ +! harrison_15.scl +! +15-tone scale found in Music Primer, Lou Harrison + 15 +! + 21/20 + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 7/5 + 3/2 + 14/9 + 63/40 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/harrison_16.scl b/scales/harrison_16.scl new file mode 100644 index 0000000..07d0394 --- /dev/null +++ b/scales/harrison_16.scl @@ -0,0 +1,21 @@ +! harrison_16.scl +! +Lou Harrison 16-tone superparticular "Ptolemy Duple", an aluminium bars instrument + 16 +! + 16/15 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 17/12 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/harrison_5.scl b/scales/harrison_5.scl new file mode 100644 index 0000000..2509482 --- /dev/null +++ b/scales/harrison_5.scl @@ -0,0 +1,10 @@ +! HARRISON_5.scl +! +From Lou Harrison, a pelog style pentatonic + 5 +! + 16/15 + 6/5 + 3/2 + 8/5 + 2/1 diff --git a/scales/harrison_5_1.scl b/scales/harrison_5_1.scl new file mode 100644 index 0000000..164996e --- /dev/null +++ b/scales/harrison_5_1.scl @@ -0,0 +1,10 @@ +! HARRISON_5_1.scl +! +From Lou Harrison, a pelog style pentatonic + 5 +! + 12/11 + 6/5 + 3/2 + 8/5 + 2/1 diff --git a/scales/harrison_5_3.scl b/scales/harrison_5_3.scl new file mode 100644 index 0000000..946b7c4 --- /dev/null +++ b/scales/harrison_5_3.scl @@ -0,0 +1,10 @@ +! HARRISON_5_3.scl +! +From Lou Harrison, a pelog style pentatonic + 5 +! + 28/27 + 4/3 + 3/2 + 14/9 + 2/1 diff --git a/scales/harrison_5_4.scl b/scales/harrison_5_4.scl new file mode 100644 index 0000000..a9813ea --- /dev/null +++ b/scales/harrison_5_4.scl @@ -0,0 +1,10 @@ +! HARRISON_5_4.scl +! +From Lou Harrison, a pelog style pentatonic + 5 +! + 16/15 + 6/5 + 3/2 + 15/8 + 2/1 diff --git a/scales/harrison_8.scl b/scales/harrison_8.scl new file mode 100644 index 0000000..0b6b42e --- /dev/null +++ b/scales/harrison_8.scl @@ -0,0 +1,13 @@ +! harrison_8.scl +! +Lou Harrison 8-tone tuning for "Serenade for Guitar" + 8 +! + 16/15 + 6/5 + 5/4 + 45/32 + 3/2 + 5/3 + 16/9 + 2/1 diff --git a/scales/harrison_bill.scl b/scales/harrison_bill.scl new file mode 100644 index 0000000..ae09229 --- /dev/null +++ b/scales/harrison_bill.scl @@ -0,0 +1,11 @@ +! harrison_bill.scl +! +Lou Harrison, "Music for Bill and Me" (1966) for guitar + 6 +! + 9/8 + 5/4 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/harrison_cinna.scl b/scales/harrison_cinna.scl new file mode 100644 index 0000000..3edf5b0 --- /dev/null +++ b/scales/harrison_cinna.scl @@ -0,0 +1,17 @@ +! harrison_cinna.scl +! +Lou Harrison, "Incidental Music for Corneille's Cinna" (1955-56) 1/1=C + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 21/16 + 45/32 + 3/2 + 8/5 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/harrison_diat.scl b/scales/harrison_diat.scl new file mode 100644 index 0000000..dc0a2db --- /dev/null +++ b/scales/harrison_diat.scl @@ -0,0 +1,12 @@ +! HARRISON_DIAT.scl +! +From Lou Harrison, a soft diatonic + 7 +! + 21/20 + 6/5 + 4/3 + 3/2 + 63/40 + 9/5 + 2/1 diff --git a/scales/harrison_handel.scl b/scales/harrison_handel.scl new file mode 100644 index 0000000..d56be3e --- /dev/null +++ b/scales/harrison_handel.scl @@ -0,0 +1,12 @@ +! harrison_handel.scl +! +Lou Harrison, "In Honor of the Divine Mr. Handel" (1978-2002) for guitar + 7 +! + 35/32 + 5/4 + 21/16 + 49/32 + 105/64 + 7/4 + 2/1 diff --git a/scales/harrison_kyai.scl b/scales/harrison_kyai.scl new file mode 100644 index 0000000..629a3ac --- /dev/null +++ b/scales/harrison_kyai.scl @@ -0,0 +1,12 @@ +! harrison_kyai.scl +! +Lou Harrisons Kyai Udan Arum, pelog just gamelan tuning + 7 +! + 16/15 + 7/6 + 4/3 + 22/15 + 47/30 + 9/5 + 2/1 diff --git a/scales/harrison_mid.scl b/scales/harrison_mid.scl new file mode 100644 index 0000000..f98a7d9 --- /dev/null +++ b/scales/harrison_mid.scl @@ -0,0 +1,12 @@ +! harrison_mid.scl +! +Lou Harrison mid mode + 7 +! + 9/8 + 6/5 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/harrison_mid2.scl b/scales/harrison_mid2.scl new file mode 100644 index 0000000..fd86643 --- /dev/null +++ b/scales/harrison_mid2.scl @@ -0,0 +1,12 @@ +! harrison_mid2.scl +! +Lou Harrison mid mode 2 + 7 +! + 9/8 + 6/5 + 4/3 + 3/2 + 12/7 + 9/5 + 2/1 diff --git a/scales/harrison_min.scl b/scales/harrison_min.scl new file mode 100644 index 0000000..0bdf1e0 --- /dev/null +++ b/scales/harrison_min.scl @@ -0,0 +1,10 @@ +! harrison_min.scl +! +Lou Harrison, symmetrical pentatonic with minor thirds. Per. block 16/15, 27/25 + 5 +! + 6/5 + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/harrison_mix1.scl b/scales/harrison_mix1.scl new file mode 100644 index 0000000..d4bcd02 --- /dev/null +++ b/scales/harrison_mix1.scl @@ -0,0 +1,10 @@ +! HARRISON_MIX1.scl +! +A "mixed type" pentatonic, Lou Harrison + 5 +! + 12/11 + 6/5 + 3/2 + 13/8 + 2/1 diff --git a/scales/harrison_mix2.scl b/scales/harrison_mix2.scl new file mode 100644 index 0000000..bb3633c --- /dev/null +++ b/scales/harrison_mix2.scl @@ -0,0 +1,10 @@ +! HARRISON_MIX2.scl +! +A "mixed type" pentatonic, Lou Harrison + 5 +! + 6/5 + 4/3 + 3/2 + 15/8 + 2/1 diff --git a/scales/harrison_mix3.scl b/scales/harrison_mix3.scl new file mode 100644 index 0000000..afbe977 --- /dev/null +++ b/scales/harrison_mix3.scl @@ -0,0 +1,10 @@ +! HARRISON_MIX3.scl +! +A "mixed type" pentatonic, Lou Harrison + 5 +! + 6/5 + 9/7 + 3/2 + 8/5 + 2/1 diff --git a/scales/harrison_mix4.scl b/scales/harrison_mix4.scl new file mode 100644 index 0000000..1d16e1b --- /dev/null +++ b/scales/harrison_mix4.scl @@ -0,0 +1,10 @@ +! HARRISON_MIX4.scl +! +A "mixed type" pentatonic, Lou Harrison + 5 +! + 15/14 + 5/4 + 3/2 + 12/7 + 2/1 diff --git a/scales/harrison_slye.scl b/scales/harrison_slye.scl new file mode 100644 index 0000000..7de9317 --- /dev/null +++ b/scales/harrison_slye.scl @@ -0,0 +1,17 @@ +! harrison_slye.scl +! +11-limit scale by Lou Harrison and Bill Slye for National Reso-Phonic Just Intonation Guitar + 12 +! + 28/27 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 14/9 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/harrison_songs.scl b/scales/harrison_songs.scl new file mode 100644 index 0000000..11df283 --- /dev/null +++ b/scales/harrison_songs.scl @@ -0,0 +1,17 @@ +! harrison_songs.scl +! +Shared gamut of "Four Strict Songs" (1951-55), each pentatonic + 12 +! + 28/27 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 14/9 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/harrisonj.scl b/scales/harrisonj.scl new file mode 100644 index 0000000..8844b89 --- /dev/null +++ b/scales/harrisonj.scl @@ -0,0 +1,17 @@ +! harrisonj.scl +! +John Harrison's temperament (1775), almost 3/10-comma. Third = 1200/pi + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 763.94373 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/harrisonm_rev.scl b/scales/harrisonm_rev.scl new file mode 100644 index 0000000..ab04c43 --- /dev/null +++ b/scales/harrisonm_rev.scl @@ -0,0 +1,17 @@ +! harrisonm_rev.scl +! +Michael Harrison, piano tuning for "Revelation" (2001), 1/1=F + 12 +! + 63/64 + 9/8 + 567/512 + 81/64 + 21/16 + 729/512 + 3/2 + 189/128 + 27/16 + 7/4 + 243/128 + 2/1 diff --git a/scales/harry58.scl b/scales/harry58.scl new file mode 100644 index 0000000..6265818 --- /dev/null +++ b/scales/harry58.scl @@ -0,0 +1,62 @@ +! harry58.scl +Harry[58] 11-limit least squares optimized + 58 +! +30.8796 +48.2704 +66.0033 +83.4055 +114.0944 +131.4967 +149.2296 +166.6204 +197.5000 +214.6587 +232.2926 +249.9761 +280.6630 +297.9611 +315.5137 +333.1120 +363.8916 +381.1737 +398.7500 +416.3263 +433.6084 +464.3880 +481.9863 +499.5389 +516.8370 +547.5239 +565.2074 +582.8413 +600.0000 +630.8796 +648.2704 +666.0033 +683.4055 +714.0944 +731.4967 +749.2296 +766.6204 +797.5000 +814.6587 +832.2926 +849.9761 +880.6630 +897.9611 +915.5137 +933.1120 +963.8916 +981.1737 +998.7500 +1016.3263 +1033.6084 +1064.3880 +1081.9863 +1099.5389 +1116.8370 +1147.5239 +1165.2074 +1182.8413 +2/1 diff --git a/scales/haverstick13.scl b/scales/haverstick13.scl new file mode 100644 index 0000000..0a1f1b8 --- /dev/null +++ b/scales/haverstick13.scl @@ -0,0 +1,18 @@ +! haverstick13.scl +! +Neil Haverstick, scale in 34-tET, MMM 21-5-2006 + 13 +! + 141.17647 !13/12 + 247.05882 !15/13 + 282.35294 !13/11 + 352.94118 !16/13 + 458.82353 !13/10 + 564.70588 !18/13 + 635.29412 !13/9 + 741.17647 !20/13 + 847.05882 !13/8 + 917.64706 !22/13 + 1058.82353 !24/13 + 1129.41176 !25/13 + 2/1 diff --git a/scales/haverstick21.scl b/scales/haverstick21.scl new file mode 100644 index 0000000..7e8a97e --- /dev/null +++ b/scales/haverstick21.scl @@ -0,0 +1,26 @@ +! haverstick21.scl +! +Neil Haverstick, just guitar tuning, TL 19-07-2007 + 21 +! + 25/24 + 17/16 + 10/9 + 9/8 + 19/16 + 6/5 + 5/4 + 21/16 + 4/3 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 5/3 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/hawkes.scl b/scales/hawkes.scl new file mode 100644 index 0000000..1b7d9e0 --- /dev/null +++ b/scales/hawkes.scl @@ -0,0 +1,17 @@ +! hawkes.scl +! +William Hawkes' modified 1/5-comma meantone (1807) + 12 +! + 83.57620 + 195.30749 + 295.11186 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 785.53120 + 892.96123 + 1004.69252 + 15/8 + 2/1 diff --git a/scales/hawkes2.scl b/scales/hawkes2.scl new file mode 100644 index 0000000..805c837 --- /dev/null +++ b/scales/hawkes2.scl @@ -0,0 +1,17 @@ +! hawkes2.scl +! +Meantone with fifth tempered 1/6 of 53-tET step by William Hawkes (1808) + 12 +! + 87.26991 + 196.36283 + 305.45575 + 392.72566 + 501.81858 + 589.08850 + 698.18142 + 785.45133 + 894.54425 + 1003.63717 + 1090.90708 + 2/1 diff --git a/scales/hawkes3.scl b/scales/hawkes3.scl new file mode 100644 index 0000000..c4c7ba3 --- /dev/null +++ b/scales/hawkes3.scl @@ -0,0 +1,17 @@ +! hawkes3.scl +! +William Hawkes' modified 1/5-comma meantone (1811) + 12 +! + 83.57620 + 195.30749 + 302.73751 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 785.53120 + 892.96123 + 1004.69251 + 15/8 + 2/1 diff --git a/scales/helmholtz.scl b/scales/helmholtz.scl new file mode 100644 index 0000000..58c6882 --- /dev/null +++ b/scales/helmholtz.scl @@ -0,0 +1,12 @@ +! helmholtz.scl +! +Helmholtz's Chromatic scale and Gipsy major from Slovakia + 7 +! + 16/15 + 5/4 + 4/3 + 3/2 + 8/5 + 15/8 + 2/1 diff --git a/scales/helmholtz_24.scl b/scales/helmholtz_24.scl new file mode 100644 index 0000000..a74c1e8 --- /dev/null +++ b/scales/helmholtz_24.scl @@ -0,0 +1,29 @@ +! helmholtz_24.scl +! +Simplified Helmholtz 24 + 24 +! + 135/128 + 16/15 + 10/9 + 9/8 + 75/64 + 32/27 + 5/4 + 81/64 + 675/512 + 4/3 + 45/32 + 729/512 + 6075/4096 + 3/2 + 25/16 + 405/256 + 5/3 + 27/16 + 225/128 + 3645/2048 + 15/8 + 243/128 + 2025/1024 + 2/1 diff --git a/scales/helmholtz_decad.scl b/scales/helmholtz_decad.scl new file mode 100644 index 0000000..d438873 --- /dev/null +++ b/scales/helmholtz_decad.scl @@ -0,0 +1,14 @@ +! helmholtz_decad.scl +! +Helmholtz Harmonic Decad, major pentatonic modes mixed + 9 +! + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 9/5 + 2/1 diff --git a/scales/helmholtz_pure.scl b/scales/helmholtz_pure.scl new file mode 100644 index 0000000..30a3613 --- /dev/null +++ b/scales/helmholtz_pure.scl @@ -0,0 +1,29 @@ +! helmholtz_pure.scl +! +Helmholtz's two-keyboard harmonium tuning untempered + 24 +! + 135/128 + 16/15 + 10/9 + 9/8 + 75/64 + 32/27 + 5/4 + 512/405 + 675/512 + 4/3 + 45/32 + 64/45 + 40/27 + 3/2 + 25/16 + 128/81 + 5/3 + 27/16 + 225/128 + 16/9 + 15/8 + 256/135 + 160/81 + 2/1 diff --git a/scales/helmholtz_temp.scl b/scales/helmholtz_temp.scl new file mode 100644 index 0000000..66659f2 --- /dev/null +++ b/scales/helmholtz_temp.scl @@ -0,0 +1,29 @@ +! helmholtz_temp.scl +! +Helmholtz's two-keyboard harmonium tuning + 24 +! + 91.446 cents + 111.976 cents + 182.892 cents + 203.422 cents + 274.338 cents + 294.868 cents + 5/4 + 406.843 cents + 477.760 cents + 498.289 cents + 589.735 cents + 610.265 cents + 681.181 cents + 701.711 cents + 25/16 + 793.157 cents + 884.603 cents + 905.132 cents + 976.049 cents + 996.578 cents + 1088.025 cents + 1108.554 cents + 1179.471 cents + 2/1 diff --git a/scales/hem_chrom.scl b/scales/hem_chrom.scl new file mode 100644 index 0000000..8f523e7 --- /dev/null +++ b/scales/hem_chrom.scl @@ -0,0 +1,12 @@ +! hem_chrom.scl +! +Hemiolic Chromatic genus has the strong or 1:2 division of the 12/11 pyknon + 7 +! + 34/33 + 12/11 + 4/3 + 3/2 + 17/11 + 18/11 + 2/1 diff --git a/scales/hem_chrom11.scl b/scales/hem_chrom11.scl new file mode 100644 index 0000000..d72d3cc --- /dev/null +++ b/scales/hem_chrom11.scl @@ -0,0 +1,12 @@ +! hem_chrom11.scl +! +11'al Hemiolic Chromatic genus with a CI of 11/9, Winnington-Ingram + 7 +! + 24/23 + 12/11 + 4/3 + 3/2 + 36/23 + 18/11 + 2/1 diff --git a/scales/hem_chrom13.scl b/scales/hem_chrom13.scl new file mode 100644 index 0000000..2634735 --- /dev/null +++ b/scales/hem_chrom13.scl @@ -0,0 +1,12 @@ +! HEM_CHROM13.scl +! +13'al Hemiolic Chromatic or neutral-third genus has a CI of 16/13 + 7 +! + 26/25 + 13/12 + 4/3 + 3/2 + 39/25 + 13/8 + 2/1 diff --git a/scales/hem_chrom2.scl b/scales/hem_chrom2.scl new file mode 100644 index 0000000..5cfda0b --- /dev/null +++ b/scales/hem_chrom2.scl @@ -0,0 +1,12 @@ +! hem_chrom2.scl +! +1:2 Hemiolic Chromatic genus 3 + 6 + 21 parts + 7 +! + 50.00000 + 150.00000 + 500.00000 + 700.00000 + 750.00000 + 850.00000 + 2/1 diff --git a/scales/hemienn82.scl b/scales/hemienn82.scl new file mode 100644 index 0000000..f119a43 --- /dev/null +++ b/scales/hemienn82.scl @@ -0,0 +1,76 @@ +! hemienn82.scl +Hemiennealimmal-72 in 612-tET tuning (strictly proper) +72 +! +17.647059 +31.372549 +49.019608 +66.666667 +84.313725 +98.039216 +115.686275 +133.333333 +150.980392 +164.705882 +182.352941 +200.000000 +217.647059 +231.372549 +249.019608 +266.666667 +284.313725 +298.039216 +315.686275 +333.333333 +350.980392 +364.705882 +382.352941 +400.000000 +417.647059 +431.372549 +449.019608 +466.666667 +484.313725 +498.039216 +515.686275 +533.333333 +550.980392 +564.705882 +582.352941 +600.000000 +617.647059 +631.372549 +649.019608 +666.666667 +684.313725 +698.039216 +715.686275 +733.333333 +750.980392 +764.705882 +782.352941 +800.000000 +817.647059 +831.372549 +849.019608 +866.666667 +884.313725 +898.039216 +915.686275 +933.333333 +950.980392 +964.705882 +982.352941 +1000.000000 +1017.647059 +1031.372549 +1049.019608 +1066.666667 +1084.313725 +1098.039216 +1115.686275 +1133.333333 +1150.980392 +1164.705882 +1182.352941 +2/1 diff --git a/scales/hemifamcyc.scl b/scales/hemifamcyc.scl new file mode 100644 index 0000000..6c7f7fd --- /dev/null +++ b/scales/hemifamcyc.scl @@ -0,0 +1,19 @@ +! hemifamcyc.scl +Hemifamity cycle of thirds scale, nearest to proper +14 +! +85.875706 +180.790960 +291.525424 +386.440678 +402.259887 +497.175141 +607.909605 +702.824859 +788.700565 +883.615819 +969.491525 +994.350282 +1105.084746 +2/1 +! [38 80 129 171 178 220 269 311 349 391 429 440 489 531] diff --git a/scales/hemifamity27.scl b/scales/hemifamity27.scl new file mode 100644 index 0000000..4d254f7 --- /dev/null +++ b/scales/hemifamity27.scl @@ -0,0 +1,32 @@ +! hemifamity27.scl +! +(3/2)^9 * (10/9)^3 hemifamity tempered +27 +! +24.81614 +110.21232 +180.72536 +205.92493 +230.32672 +291.35517 +316.19234 +386.89900 +411.35967 +472.47399 +496.93387 +522.04780 +592.41413 +607.58587 +677.95220 +703.06613 +727.52601 +788.64033 +813.10100 +883.80766 +908.64483 +969.67328 +994.07507 +1019.27464 +1089.78768 +1175.18386 +2/1 diff --git a/scales/hemimute31.scl b/scales/hemimute31.scl new file mode 100644 index 0000000..6710e0f --- /dev/null +++ b/scales/hemimute31.scl @@ -0,0 +1,35 @@ +! hemimute31.scl +Mutant Hemithirds[31] +31 +! +29.7436 +71.4685 +113.3844 +151.5273 +193.1158 +223.0172 +265.4205 +306.7177 +346.0883 +386.5111 +417.2549 +459.1556 +498.7210 +538.2865 +580.1872 +610.9310 +651.3538 +690.7244 +732.0216 +774.4249 +804.3263 +845.9148 +884.0577 +925.9736 +967.6985 +997.4421 +1035.9848 +1077.6340 +1119.8081 +1161.4573 +2/1 diff --git a/scales/hemiwuer24.scl b/scales/hemiwuer24.scl new file mode 100644 index 0000000..978e0e8 --- /dev/null +++ b/scales/hemiwuer24.scl @@ -0,0 +1,29 @@ +! hemiwuer24.scl +! +Hemiwrschmidt[24] in 229-tET tuning. + 24 +! + 83.842795 + 120.524017 + 157.205240 + 193.886463 + 277.729258 + 314.410480 + 351.091703 + 387.772926 + 508.296943 + 544.978166 + 581.659389 + 618.340611 + 702.183406 + 738.864629 + 775.545852 + 812.227074 + 896.069869 + 932.751092 + 969.432314 + 1006.113537 + 1089.956332 + 1126.637555 + 1163.318777 + 2/1 diff --git a/scales/hen12.scl b/scales/hen12.scl new file mode 100644 index 0000000..7cb5ac2 --- /dev/null +++ b/scales/hen12.scl @@ -0,0 +1,17 @@ +! hen12.scl +! +Adjusted Hahn12 + 12 +! + 15/14 + 8/7 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/hen22.scl b/scales/hen22.scl new file mode 100644 index 0000000..add595a --- /dev/null +++ b/scales/hen22.scl @@ -0,0 +1,27 @@ +! hen22.scl +! +Adjusted Hahn22 + 22 +! + 25/24 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 25/18 + 7/5 + 35/24 + 3/2 + 100/63 + 8/5 + 5/3 + 12/7 + 7/4 + 50/27 + 15/8 + 35/18 + 2/1 diff --git a/scales/hept_diamond.scl b/scales/hept_diamond.scl new file mode 100644 index 0000000..10f8931 --- /dev/null +++ b/scales/hept_diamond.scl @@ -0,0 +1,30 @@ +! hept_diamond.scl +! +Inverted-Prime Heptatonic Diamond based on Archytas's Enharmonic + 25 +! + 36/35 + 28/27 + 16/15 + 9/8 + 7/6 + 6/5 + 98/81 + 56/45 + 5/4 + 32/25 + 9/7 + 4/3 + 3/2 + 14/9 + 25/16 + 8/5 + 45/28 + 81/49 + 5/3 + 12/7 + 16/9 + 15/8 + 27/14 + 35/18 + 2/1 diff --git a/scales/hept_diamondi.scl b/scales/hept_diamondi.scl new file mode 100644 index 0000000..e7fd394 --- /dev/null +++ b/scales/hept_diamondi.scl @@ -0,0 +1,30 @@ +! hept_diamondi.scl +! +Prime-Inverted Heptatonic Diamond based on Archytas's Enharmonic + 25 +! + 36/35 + 28/27 + 16/15 + 784/729 + 448/405 + 9/8 + 256/225 + 5/4 + 9/7 + 4/3 + 112/81 + 45/32 + 64/45 + 81/56 + 3/2 + 14/9 + 8/5 + 225/128 + 16/9 + 405/224 + 729/392 + 15/8 + 27/14 + 35/18 + 2/1 diff --git a/scales/hept_diamondp.scl b/scales/hept_diamondp.scl new file mode 100644 index 0000000..70bbd4c --- /dev/null +++ b/scales/hept_diamondp.scl @@ -0,0 +1,32 @@ +! HEPT_DIAMONDp.scl +! +Heptatonic Diamond based on Archytas's Enharmonic, 27 tones + 27 +! + 36/35 + 28/27 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 35/27 + 4/3 + 48/35 + 112/81 + 45/32 + 64/45 + 81/56 + 35/24 + 3/2 + 54/35 + 14/9 + 8/5 + 5/3 + 12/7 + 16/9 + 15/8 + 27/14 + 35/18 + 2/1 diff --git a/scales/herf_istrian.scl b/scales/herf_istrian.scl new file mode 100644 index 0000000..f8b4933 --- /dev/null +++ b/scales/herf_istrian.scl @@ -0,0 +1,15 @@ +! herf_istrian.scl +! +Franz Richter Herf, Istrian scale used in "Welle der Nacht" op. 2 + 10 +! + 67/64 + 17/16 + 9/8 + 37/32 + 39/32 + 83/64 + 11/8 + 57/32 + 121/64 + 2/1 diff --git a/scales/heun.scl b/scales/heun.scl new file mode 100644 index 0000000..f625450 --- /dev/null +++ b/scales/heun.scl @@ -0,0 +1,17 @@ +! heun.scl +! +Well temperament for organ of Jan Heun (1805), 12 out of 55-tET (1/6-comma meantone) + 12 +! + 87.27273 + 196.36364 + 305.45455 + 392.72727 + 501.81818 + 589.09091 + 698.18182 + 785.45455 + 894.54545 + 1003.63636 + 1090.90909 + 2/1 diff --git a/scales/hexagonal13.scl b/scales/hexagonal13.scl new file mode 100644 index 0000000..06460fb --- /dev/null +++ b/scales/hexagonal13.scl @@ -0,0 +1,18 @@ +! hexagonal13.scl +! +Star hexagonal 13-tone scale + 13 +! + 25/24 + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/hexagonal37.scl b/scales/hexagonal37.scl new file mode 100644 index 0000000..97d511c --- /dev/null +++ b/scales/hexagonal37.scl @@ -0,0 +1,42 @@ +! hexagonal37.scl +! +Star hexagonal 37-tone scale + 37 +! + 25/24 + 16/15 + 27/25 + 625/576 + 10/9 + 9/8 + 256/225 + 144/125 + 75/64 + 6/5 + 100/81 + 5/4 + 32/25 + 125/96 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 36/25 + 40/27 + 3/2 + 192/125 + 25/16 + 8/5 + 81/50 + 5/3 + 128/75 + 125/72 + 225/128 + 16/9 + 9/5 + 1152/625 + 50/27 + 15/8 + 48/25 + 2/1 diff --git a/scales/hexany1.scl b/scales/hexany1.scl new file mode 100644 index 0000000..414e34f --- /dev/null +++ b/scales/hexany1.scl @@ -0,0 +1,11 @@ +! hexany1.scl +! +Two out of 1 3 5 7 hexany on 1.3 + 6 +! + 7/6 + 5/4 + 35/24 + 5/3 + 7/4 + 2/1 diff --git a/scales/hexany10.scl b/scales/hexany10.scl new file mode 100644 index 0000000..0798f60 --- /dev/null +++ b/scales/hexany10.scl @@ -0,0 +1,11 @@ +! hexany10.scl +! +1.3.5.9 Hexany and Lou Harrison's Joyous 6. Second key is Harrison's Solemn 6 (1962) + 6 +! + 9/8 + 5/4 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/hexany11.scl b/scales/hexany11.scl new file mode 100644 index 0000000..bc80ceb --- /dev/null +++ b/scales/hexany11.scl @@ -0,0 +1,11 @@ +! hexany11.scl +! +1.3.7.9 Hexany on 1.3 + 6 +! + 9/8 + 7/6 + 21/16 + 3/2 + 7/4 + 2/1 diff --git a/scales/hexany12.scl b/scales/hexany12.scl new file mode 100644 index 0000000..4eb83e7 --- /dev/null +++ b/scales/hexany12.scl @@ -0,0 +1,11 @@ +! hexany12.scl +! +3.5.7.9 Hexany on 3.9 + 6 +! + 10/9 + 7/6 + 35/27 + 14/9 + 5/3 + 2/1 diff --git a/scales/hexany13.scl b/scales/hexany13.scl new file mode 100644 index 0000000..11a1b02 --- /dev/null +++ b/scales/hexany13.scl @@ -0,0 +1,11 @@ +! hexany13.scl +! +1.3.5.11 Hexany on 1.11 + 6 +! + 12/11 + 5/4 + 15/11 + 3/2 + 20/11 + 2/1 diff --git a/scales/hexany14.scl b/scales/hexany14.scl new file mode 100644 index 0000000..ef26fe4 --- /dev/null +++ b/scales/hexany14.scl @@ -0,0 +1,11 @@ +! hexany14.scl +! +5.11.13.15 Hexany (5.15), used in The Giving, by Stephen J. Taylor + 6 +! + 11/10 + 13/10 + 22/15 + 26/15 + 143/75 + 2/1 diff --git a/scales/hexany15.scl b/scales/hexany15.scl new file mode 100644 index 0000000..44a0f44 --- /dev/null +++ b/scales/hexany15.scl @@ -0,0 +1,10 @@ +! hexany15.scl +! +1.3.5.15 2)4 hexany (1.15 tonic) degenerate, symmetrical pentatonic + 5 +! + 5/4 + 4/3 + 3/2 + 8/5 + 2/1 diff --git a/scales/hexany16.scl b/scales/hexany16.scl new file mode 100644 index 0000000..5011b7b --- /dev/null +++ b/scales/hexany16.scl @@ -0,0 +1,10 @@ +! hexany16.scl +! +1.3.9.27 Hexany, a degenerate pentatonic form + 5 +! + 9/8 + 4/3 + 3/2 + 16/9 + 2/1 diff --git a/scales/hexany17.scl b/scales/hexany17.scl new file mode 100644 index 0000000..6ee95c0 --- /dev/null +++ b/scales/hexany17.scl @@ -0,0 +1,10 @@ +! hexany17.scl +! +1.5.25.125 Hexany, a degenerate pentatonic form + 5 +! + 5/4 + 32/25 + 25/16 + 8/5 + 2/1 diff --git a/scales/hexany18.scl b/scales/hexany18.scl new file mode 100644 index 0000000..daddb63 --- /dev/null +++ b/scales/hexany18.scl @@ -0,0 +1,10 @@ +! hexany18.scl +! +1.7.49.343 Hexany, a degenerate pentatonic form + 5 +! + 8/7 + 64/49 + 49/32 + 7/4 + 2/1 diff --git a/scales/hexany19.scl b/scales/hexany19.scl new file mode 100644 index 0000000..f7b3a0f --- /dev/null +++ b/scales/hexany19.scl @@ -0,0 +1,10 @@ +! hexany19.scl +! +1.5.7.35 Hexany, a degenerate pentatonic form + 5 +! + 8/7 + 5/4 + 8/5 + 7/4 + 2/1 diff --git a/scales/hexany2.scl b/scales/hexany2.scl new file mode 100644 index 0000000..47dc738 --- /dev/null +++ b/scales/hexany2.scl @@ -0,0 +1,17 @@ +! hexany2.scl +! +Hexany Cluster 2 + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 15/8 + 2 diff --git a/scales/hexany20.scl b/scales/hexany20.scl new file mode 100644 index 0000000..11ebb07 --- /dev/null +++ b/scales/hexany20.scl @@ -0,0 +1,11 @@ +! hexany20.scl +! +3.5.7.105 Hexany + 6 +! + 16/15 + 7/6 + 32/21 + 5/3 + 16/9 + 2/1 diff --git a/scales/hexany21.scl b/scales/hexany21.scl new file mode 100644 index 0000000..da9cfe8 --- /dev/null +++ b/scales/hexany21.scl @@ -0,0 +1,11 @@ +! hexany21.scl +! +3.5.9.135 Hexany + 6 +! + 16/15 + 32/27 + 3/2 + 5/3 + 16/9 + 2/1 diff --git a/scales/hexany21a.scl b/scales/hexany21a.scl new file mode 100644 index 0000000..69b23a1 --- /dev/null +++ b/scales/hexany21a.scl @@ -0,0 +1,12 @@ +! hexany21a.scl +! +3.5.9.135 Hexany + 4/3. Is Didymos Diatonic tetrachord on 1/1 and inv. on 3/2 + 7 +! + 16/15 + 32/27 + 4/3 + 3/2 + 5/3 + 16/9 + 2/1 diff --git a/scales/hexany22.scl b/scales/hexany22.scl new file mode 100644 index 0000000..6341405 --- /dev/null +++ b/scales/hexany22.scl @@ -0,0 +1,10 @@ +! hexany22.scl +! +1.11.121.1331 Hexany, a degenerate pentatonic form + 5 +! + 128/121 + 11/8 + 16/11 + 121/64 + 2/1 diff --git a/scales/hexany23.scl b/scales/hexany23.scl new file mode 100644 index 0000000..c237b1f --- /dev/null +++ b/scales/hexany23.scl @@ -0,0 +1,10 @@ +! hexany23.scl +! +1.3.11.33 Hexany, degenerate pentatonic form + 5 +! + 4/3 + 11/8 + 16/11 + 3/2 + 2/1 diff --git a/scales/hexany24.scl b/scales/hexany24.scl new file mode 100644 index 0000000..388d695 --- /dev/null +++ b/scales/hexany24.scl @@ -0,0 +1,10 @@ +! hexany24.scl +! +1.5.11.55 Hexany, a degenerate pentatonic form + 5 +! + 5/4 + 11/8 + 16/11 + 8/5 + 2/1 diff --git a/scales/hexany25.scl b/scales/hexany25.scl new file mode 100644 index 0000000..b98d943 --- /dev/null +++ b/scales/hexany25.scl @@ -0,0 +1,10 @@ +! hexany25.scl +! +1.7.11.77 Hexany, a degenerate pentatonic form + 5 +! + 8/7 + 11/8 + 16/11 + 7/4 + 2/1 diff --git a/scales/hexany26.scl b/scales/hexany26.scl new file mode 100644 index 0000000..5a53882 --- /dev/null +++ b/scales/hexany26.scl @@ -0,0 +1,10 @@ +! hexany26.scl +! +1.9.11.99 Hexany, a degenerate pentatonic form + 5 +! + 9/8 + 11/8 + 16/11 + 16/9 + 2/1 diff --git a/scales/hexany3.scl b/scales/hexany3.scl new file mode 100644 index 0000000..f925677 --- /dev/null +++ b/scales/hexany3.scl @@ -0,0 +1,17 @@ +! hexany3.scl +! +Hexany Cluster 3 + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 48/25 + 2 diff --git a/scales/hexany4.scl b/scales/hexany4.scl new file mode 100644 index 0000000..2978a9a --- /dev/null +++ b/scales/hexany4.scl @@ -0,0 +1,17 @@ +! hexany4.scl +! +Hexany Cluster 4 + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 36/25 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/hexany49.scl b/scales/hexany49.scl new file mode 100644 index 0000000..08b26c4 --- /dev/null +++ b/scales/hexany49.scl @@ -0,0 +1,11 @@ +! hexany49.scl +! +1.3.21.49 2)4 hexany (1.21 tonic) + 6 +! + 8/7 + 7/6 + 3/2 + 49/32 + 7/4 + 2/1 diff --git a/scales/hexany5.scl b/scales/hexany5.scl new file mode 100644 index 0000000..686393d --- /dev/null +++ b/scales/hexany5.scl @@ -0,0 +1,17 @@ +! hexany5.scl +! +Hexany Cluster 5 + 12 +! + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 48/25 + 2 diff --git a/scales/hexany6.scl b/scales/hexany6.scl new file mode 100644 index 0000000..c830df9 --- /dev/null +++ b/scales/hexany6.scl @@ -0,0 +1,17 @@ +! hexany6.scl +! +Hexany Cluster 6, periodicity block 125/108 and 135/128 + 12 +! + 25/24 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/hexany7.scl b/scales/hexany7.scl new file mode 100644 index 0000000..25b981a --- /dev/null +++ b/scales/hexany7.scl @@ -0,0 +1,17 @@ +! hexany7.scl +! +Hexany Cluster 7 + 12 +! + 25/24 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/hexany8.scl b/scales/hexany8.scl new file mode 100644 index 0000000..d26ac40 --- /dev/null +++ b/scales/hexany8.scl @@ -0,0 +1,17 @@ +! Hexany8.scl +! +Hexany Cluster 8 + 12 +! + 25/24 + 6/5 + 5/4 + 125/96 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 48/25 + 2 diff --git a/scales/hexany_cl.scl b/scales/hexany_cl.scl new file mode 100644 index 0000000..e7f63cc --- /dev/null +++ b/scales/hexany_cl.scl @@ -0,0 +1,17 @@ +! hexany_cl.scl +! +Hexany Cluster 1 + 12 +! + 9/8 + 144/125 + 6/5 + 5/4 + 4/3 + 27/20 + 36/25 + 3/2 + 8/5 + 9/5 + 48/25 + 2/1 diff --git a/scales/hexany_cl2.scl b/scales/hexany_cl2.scl new file mode 100644 index 0000000..8e775b1 --- /dev/null +++ b/scales/hexany_cl2.scl @@ -0,0 +1,16 @@ +! hexany_cl2.scl +! +Composed of 1.3.5.45, 1.3.5.75, 1.3.5.9, and 1.3.5.25 hexanies + 11 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/hexany_tetr.scl b/scales/hexany_tetr.scl new file mode 100644 index 0000000..f89d5a6 --- /dev/null +++ b/scales/hexany_tetr.scl @@ -0,0 +1,11 @@ +! hexany_tetr.scl +! +Complex 12 of p. 115, a hexany based on Archytas's Enharmonic + 6 +! + 36/35 + 16/15 + 9/7 + 4/3 + 48/35 + 2/1 diff --git a/scales/hexany_trans.scl b/scales/hexany_trans.scl new file mode 100644 index 0000000..c51b096 --- /dev/null +++ b/scales/hexany_trans.scl @@ -0,0 +1,11 @@ +! hexany_trans.scl +! +Complex 1 of p. 115, a hexany based on Archytas's Enharmonic + 6 +! + 28/27 + 16/15 + 35/27 + 4/3 + 112/81 + 2/1 diff --git a/scales/hexany_trans2.scl b/scales/hexany_trans2.scl new file mode 100644 index 0000000..fd7d531 --- /dev/null +++ b/scales/hexany_trans2.scl @@ -0,0 +1,11 @@ +! HEXANY_TRANS2.scl +! +Complex 2 of p. 115, a hexany based on Archytas's Enharmonic + 6 +! + 28/27 + 16/15 + 4/3 + 48/35 + 64/45 + 2/1 diff --git a/scales/hexany_trans3.scl b/scales/hexany_trans3.scl new file mode 100644 index 0000000..a7e704b --- /dev/null +++ b/scales/hexany_trans3.scl @@ -0,0 +1,11 @@ +! HEXANY_TRANS3.scl +! +Complex 9 of p. 115, a hexany based on Archytas's Enharmonic + 6 +! + 28/27 + 16/15 + 5/4 + 9/7 + 4/3 + 2/1 diff --git a/scales/hexany_u2.scl b/scales/hexany_u2.scl new file mode 100644 index 0000000..e21b348 --- /dev/null +++ b/scales/hexany_u2.scl @@ -0,0 +1,30 @@ +! hexany_u2.scl +! +Hexany union = genus [335577] minus two corners + 25 +! + 21/20 + 16/15 + 15/14 + 35/32 + 8/7 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 8/5 + 5/3 + 12/7 + 7/4 + 64/35 + 28/15 + 15/8 + 40/21 + 2/1 diff --git a/scales/hexany_union.scl b/scales/hexany_union.scl new file mode 100644 index 0000000..6c1d07d --- /dev/null +++ b/scales/hexany_union.scl @@ -0,0 +1,24 @@ +! hexany_union.scl +! +The union of all of the pitches of the 1.3.5.7 hexany on each tone as 1/1 + 19 +! + 21/20 + 15/14 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 28/15 + 40/21 + 2/1 diff --git a/scales/hexany_urot.scl b/scales/hexany_urot.scl new file mode 100644 index 0000000..084e946 --- /dev/null +++ b/scales/hexany_urot.scl @@ -0,0 +1,29 @@ +! hexany_urot.scl +! +Aggregate rotations of 1.3.5.7 hexany, 1.3 = 1/1 + 24 +! + 49/48 + 15/14 + 35/32 + 10/9 + 8/7 + 7/6 + 5/4 + 245/192 + 21/16 + 4/3 + 49/36 + 10/7 + 35/24 + 3/2 + 49/32 + 14/9 + 5/3 + 245/144 + 12/7 + 7/4 + 15/8 + 40/21 + 35/18 + 2/1 diff --git a/scales/hexanys.scl b/scales/hexanys.scl new file mode 100644 index 0000000..2c2a4cc --- /dev/null +++ b/scales/hexanys.scl @@ -0,0 +1,17 @@ +! hexanys.scl +! +Hexanys 1 3 5 7 9 + 12 +! + 35/32 + 9/8 + 5/4 + 21/16 + 45/32 + 3/2 + 105/64 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/hexanys2.scl b/scales/hexanys2.scl new file mode 100644 index 0000000..ee1b85e --- /dev/null +++ b/scales/hexanys2.scl @@ -0,0 +1,17 @@ +! hexanys2.scl +! +Hexanys 1 3 7 11 13 + 12 +! + 77/64 + 13/8 + 7/4 + 33/32 + 91/64 + 3/2 + 231/128 + 39/32 + 11/8 + 21/16 + 143/128 + 2/1 diff --git a/scales/hexlesfip22.scl b/scales/hexlesfip22.scl new file mode 100644 index 0000000..caba31e --- /dev/null +++ b/scales/hexlesfip22.scl @@ -0,0 +1,55 @@ +! hexlesfip22.scl +! +15-limit, 10 cent lesfip; no consonances smaller than 12/11 + 22 +! +67.41223 +114.48561 +180.70061 +202.39331 +271.28742 +317.69466 +383.58017 +430.21027 +498.97723 +564.73749 +586.63832 +634.05267 +701.39382 +769.17317 +816.03021 +882.40327 +904.36815 +997.57100 +1018.96163 +1085.57540 +1131.59971 +2/1 +! +!! hexlesfip22seed.scl +!! +! Scale square of 5-limit diamond plus {27/16, 45/32, 75/64} +! 22 +!! +! 25/24 +! 16/15 +! 10/9 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 25/18 +! 45/32 +! 36/25 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 27/16 +! 16/9 +! 9/5 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/hexy.scl b/scales/hexy.scl new file mode 100644 index 0000000..549f054 --- /dev/null +++ b/scales/hexy.scl @@ -0,0 +1,16 @@ +! hexy.scl +Maximized 9-limit harmony containing a hexany +12 +! +21/20 +9/8 +7/6 +5/4 +4/3 +7/5 +3/2 +8/5 +5/3 +7/4 +28/15 +2/1 diff --git a/scales/hi19marv.scl b/scales/hi19marv.scl new file mode 100644 index 0000000..ce45b3f --- /dev/null +++ b/scales/hi19marv.scl @@ -0,0 +1,24 @@ +! hi19marv.scl +! +inverted smithgw_hahn19 in 1/4 kleismic tempering + 19 +! + 46.84250 + 115.58705 + 184.33159 + 8/7 + 6/5 + 384.38583 + 431.22833 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 768.77167 + 815.61417 + 5/3 + 931.20121 + 999.94576 + 1084.41295 + 40/21 + 2/1 diff --git a/scales/higgs.scl b/scales/higgs.scl new file mode 100644 index 0000000..7d549c1 --- /dev/null +++ b/scales/higgs.scl @@ -0,0 +1,12 @@ +! higgs.scl +! +From Greg Higgs announcement of the formation of an Internet Tuning list + 7 +! + 3/2 + 8/5 + 21/13 + 34/21 + 13/8 + 5/3 + 2/1 diff --git a/scales/highschool1-rodan.scl b/scales/highschool1-rodan.scl new file mode 100644 index 0000000..2a3867b --- /dev/null +++ b/scales/highschool1-rodan.scl @@ -0,0 +1,18 @@ +! highschool1-rodan.scl +! +12highschool1 tempered in 13-limit POTE-tuned rodan +! generators: -18, -17, -15, -14, -3, -1, 0, 3, 6, 14, 17, 20 + 12 +! + 82.76793 + 206.89283 + 317.25007 + 386.19634 + 496.55359 + 579.32152 + 703.44641 + 813.80366 + 882.74993 + 965.51786 + 1089.64275 + 2/1 diff --git a/scales/highschool2-miracle.scl b/scales/highschool2-miracle.scl new file mode 100644 index 0000000..a7807d6 --- /dev/null +++ b/scales/highschool2-miracle.scl @@ -0,0 +1,18 @@ +! highschool2-miracle.scl +! +12highschool2 tempered in 11-limit POTE-tuned miracle +! generators: -13, -7, -6, -5, -2, -1, 0, 1, 6, 7, 12, 13 + 12 +! + 116.63274 + 199.59291 + 316.22566 + 383.57080 + 500.20354 + 616.83629 + 699.79646 + 816.42920 + 883.77434 + 966.73451 + 1083.36726 + 2/1 diff --git a/scales/hijaz pentachord 13-limit a.scl b/scales/hijaz pentachord 13-limit a.scl new file mode 100644 index 0000000..e6ae2e7 --- /dev/null +++ b/scales/hijaz pentachord 13-limit a.scl @@ -0,0 +1,9 @@ +! hijaz pentachord 13-limit a.scl +! +Hijaz pentachord 12:13:15:16:18 + 4 +! + 13/12 + 5/4 + 4/3 + 3/2 diff --git a/scales/hijaz pentachord 13-limit b.scl b/scales/hijaz pentachord 13-limit b.scl new file mode 100644 index 0000000..47a9322 --- /dev/null +++ b/scales/hijaz pentachord 13-limit b.scl @@ -0,0 +1,9 @@ +! hijaz pentachord 13-limit b.scl +! +Hijaz pentachord 78:84:96:104:117 + 4 +! + 14/13 + 16/13 + 4/3 + 3/2 diff --git a/scales/hijaz pentachord 67-limit.scl b/scales/hijaz pentachord 67-limit.scl new file mode 100644 index 0000000..f3e3cde --- /dev/null +++ b/scales/hijaz pentachord 67-limit.scl @@ -0,0 +1,9 @@ +! hijaz pentachord 67-limit.scl +! +Hijaz pentachord 54:58:67:72:81 + 4 +! + 29/27 + 67/54 + 4/3 + 3/2 diff --git a/scales/hijaz pentachord 7-limit.scl b/scales/hijaz pentachord 7-limit.scl new file mode 100644 index 0000000..2c71579 --- /dev/null +++ b/scales/hijaz pentachord 7-limit.scl @@ -0,0 +1,9 @@ +! hijaz pentachord 7-limit.scl +! +Hijaz pentachord 90:96:112:120:135 + 4 +! + 16/15 + 56/45 + 4/3 + 3/2 diff --git a/scales/hijaz tetrachord 11-limit.scl b/scales/hijaz tetrachord 11-limit.scl new file mode 100644 index 0000000..7844e1a --- /dev/null +++ b/scales/hijaz tetrachord 11-limit.scl @@ -0,0 +1,8 @@ +! hijaz tetrachord 11-limit.scl +! +Hijaz tetrachord 33:36:42:44 + 3 +! + 12/11 + 14/11 + 4/3 diff --git a/scales/hijaz tetrachord 13-limit a.scl b/scales/hijaz tetrachord 13-limit a.scl new file mode 100644 index 0000000..0fac17c --- /dev/null +++ b/scales/hijaz tetrachord 13-limit a.scl @@ -0,0 +1,8 @@ +! hijaz tetrachord 13-limit a.scl +! +Hijaz tetrachord 12:13:15:16 + 3 +! + 13/12 + 5/4 + 4/3 diff --git a/scales/hijaz tetrachord 13-limit b.scl b/scales/hijaz tetrachord 13-limit b.scl new file mode 100644 index 0000000..9eee73a --- /dev/null +++ b/scales/hijaz tetrachord 13-limit b.scl @@ -0,0 +1,8 @@ +! hijaz tetrachord 13-limit b.scl +! +Hijaz tetrachord 39:42:48:52 + 3 +! + 14/13 + 16/13 + 4/3 diff --git a/scales/hijaz tetrachord 67-limit.scl b/scales/hijaz tetrachord 67-limit.scl new file mode 100644 index 0000000..3ec517f --- /dev/null +++ b/scales/hijaz tetrachord 67-limit.scl @@ -0,0 +1,8 @@ +! hijaz tetrachord 67-limit.scl +! +Hijaz tetrachord 54:58:67:72 + 3 +! + 29/27 + 67/54 + 4/3 diff --git a/scales/hijaz tetrachord 7-limit.scl b/scales/hijaz tetrachord 7-limit.scl new file mode 100644 index 0000000..1d81a95 --- /dev/null +++ b/scales/hijaz tetrachord 7-limit.scl @@ -0,0 +1,8 @@ +! hijaz tetrachord 7-limit.scl +! +Hijaz tetrachord 45:48:56:60 + 3 +! + 16/15 + 56/45 + 4/3 diff --git a/scales/hinsz_gr.scl b/scales/hinsz_gr.scl new file mode 100644 index 0000000..35a7259 --- /dev/null +++ b/scales/hinsz_gr.scl @@ -0,0 +1,17 @@ +! Hinsz_gr.scl +! +Reconstructed Hinsz temperament, organ Pelstergasthuiskerk Groningen. Ortgies,2002 + 12 +! + 84.35999 + 192.18000 + 32/27 + 8192/6561 + 4/3 + 582.40499 + 696.09000 + 786.31499 + 888.26999 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/hipkins.scl b/scales/hipkins.scl new file mode 100644 index 0000000..4072f39 --- /dev/null +++ b/scales/hipkins.scl @@ -0,0 +1,12 @@ +! hipkins.scl +! +Hipkins' Chromatic + 7 +! + 256/243 + 8/7 + 4/3 + 3/2 + 128/81 + 12/7 + 2/1 diff --git a/scales/hirajoshi.scl b/scales/hirajoshi.scl new file mode 100644 index 0000000..64440e0 --- /dev/null +++ b/scales/hirajoshi.scl @@ -0,0 +1,10 @@ +! hirajoshi.scl +! +Observed Japanese pentatonic koto scale. Helmholtz/Ellis p.519, nr.112 + 5 +! + 185.00000 + 337.00000 + 683.00000 + 790.00000 + 2/1 diff --git a/scales/hirajoshi2.scl b/scales/hirajoshi2.scl new file mode 100644 index 0000000..31f428a --- /dev/null +++ b/scales/hirajoshi2.scl @@ -0,0 +1,10 @@ +! hirajoshi2.scl +! +Japanese pentatonic koto scale, theoretical. Helmholz/Ellis p.519, nr.110 + 5 +! + 9/8 + 6/5 + 3/2 + 8/5 + 2/1 diff --git a/scales/hirajoshi3.scl b/scales/hirajoshi3.scl new file mode 100644 index 0000000..5fdcb95 --- /dev/null +++ b/scales/hirajoshi3.scl @@ -0,0 +1,10 @@ +! hirajoshi3.scl +! +Observed Japanese pentatonic koto scale. Helmholtz/Ellis p.519, nr.111 + 5 +! + 193.00000 + 357.00000 + 719.00000 + 801.00000 + 1199.00000 diff --git a/scales/hirashima.scl b/scales/hirashima.scl new file mode 100644 index 0000000..d7c09ed --- /dev/null +++ b/scales/hirashima.scl @@ -0,0 +1,17 @@ +! hirashima.scl +! +Tatsushi Hirashima, temperament of chapel organ of Kobe Shoin Women's Univ. + 12 +! + 100.97814 + 193.15686 + 304.88814 + 5/4 + 503.42157 + 599.02314 + 696.57843 + 802.93314 + 889.73528 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/hjelmblues.scl b/scales/hjelmblues.scl new file mode 100644 index 0000000..b0d8637 --- /dev/null +++ b/scales/hjelmblues.scl @@ -0,0 +1,11 @@ +! hjelmblues.scl +! +Paul Hjelmstad's "blues" scale, TL 27-05-2005 + 6 +! + 7/6 + 4/3 + 49/36 + 3/2 + 7/4 + 2/1 diff --git a/scales/hjelmboogie.scl b/scales/hjelmboogie.scl new file mode 100644 index 0000000..63cd8c5 --- /dev/null +++ b/scales/hjelmboogie.scl @@ -0,0 +1,15 @@ +! hjelmboogie.scl +! +Paul Hjelmstad's "Boogie Woogie" scale, TL 20-3-2006 + 10 +! + 9/8 + 5/4 + 21/16 + 45/32 + 3/2 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/hjelmconv.scl b/scales/hjelmconv.scl new file mode 100644 index 0000000..2cb6a13 --- /dev/null +++ b/scales/hjelmconv.scl @@ -0,0 +1,15 @@ +! hjelmconv.scl +! +Convex closure in breed plane of hjelmboogie.scl + 10 +! + 7/6 + 49/40 + 4/3 + 49/36 + 10/7 + 3/2 + 49/30 + 7/4 + 40/21 + 2/1 diff --git a/scales/ho_mai_nhi.scl b/scales/ho_mai_nhi.scl new file mode 100644 index 0000000..7f4f217 --- /dev/null +++ b/scales/ho_mai_nhi.scl @@ -0,0 +1,10 @@ +! HO_MAI_NHI.scl +! +Ho Mai Nhi (Nam Hue) dan tranh scale, Vietnam + 5 +! + 11/10 + 4/3 + 3/2 + 33/20 + 2/1 diff --git a/scales/hochgartz.scl b/scales/hochgartz.scl new file mode 100644 index 0000000..3c7c1bd --- /dev/null +++ b/scales/hochgartz.scl @@ -0,0 +1,17 @@ +! hochgartz.scl +! +Michael Hochgartz, modified 1/5-comma meantone temperament + 12 +! + 83.57620 + 195.30749 + 292.96123 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 788.26871 + 892.96123 + 997.65374 + 15/8 + 2/1 diff --git a/scales/hofmann1.scl b/scales/hofmann1.scl new file mode 100644 index 0000000..3c09a5a --- /dev/null +++ b/scales/hofmann1.scl @@ -0,0 +1,12 @@ +! hofmann1.scl +! +Hofmann's Enharmonic #1, Dorian mode + 7 +! + 256/255 + 16/15 + 4/3 + 3/2 + 128/85 + 8/5 + 2/1 diff --git a/scales/hofmann2.scl b/scales/hofmann2.scl new file mode 100644 index 0000000..e00c160 --- /dev/null +++ b/scales/hofmann2.scl @@ -0,0 +1,12 @@ +! hofmann2.scl +! +Hofmann's Enharmonic #2, Dorian mode + 7 +! + 136/135 + 16/15 + 4/3 + 3/2 + 68/45 + 8/5 + 2/1 diff --git a/scales/hofmann_chrom.scl b/scales/hofmann_chrom.scl new file mode 100644 index 0000000..01e4082 --- /dev/null +++ b/scales/hofmann_chrom.scl @@ -0,0 +1,12 @@ +! hofmann_chrom.scl +! +Hofmann's Chromatic + 7 +! + 100/99 + 10/9 + 4/3 + 3/2 + 50/33 + 5/3 + 2/1 diff --git a/scales/holder.scl b/scales/holder.scl new file mode 100644 index 0000000..1b3680c --- /dev/null +++ b/scales/holder.scl @@ -0,0 +1,17 @@ +! holder.scl +! +William Holder's equal beating meantone temperament (1694). 3/2 beats 2.8 Hz + 12 +! + 81.47300 + 193.58600 + 307.40100 + 388.26700 + 502.67100 + 583.93200 + 695.76800 + 777.52600 + 890.00900 + 1004.17700 + 1085.27900 + 2/1 diff --git a/scales/holder2.scl b/scales/holder2.scl new file mode 100644 index 0000000..4e0c643 --- /dev/null +++ b/scales/holder2.scl @@ -0,0 +1,17 @@ +! holder2.scl +! +Holder's irregular e.b. temperament with improved Eb and G# + 12 +! + 81.473 cents + 193.586 cents + 307.401 cents + 388.267 cents + 502.671 cents + 583.932 cents + 695.768 cents + 780.479 cents + 890.009 cents + 1004.813 cents + 1085.279 cents + 2/1 diff --git a/scales/honkyoku.scl b/scales/honkyoku.scl new file mode 100644 index 0000000..cf8ee6d --- /dev/null +++ b/scales/honkyoku.scl @@ -0,0 +1,14 @@ +! honkyoku.scl +! +Honkyoku tuning for shakuhachi + 9 +! + 75.00000 + 400.00000 + 500.00000 + 575.00000 + 700.00000 + 775.00000 + 1000.00000 + 1075.00000 + 2/1 diff --git a/scales/horwell22.scl b/scales/horwell22.scl new file mode 100644 index 0000000..f255588 --- /dev/null +++ b/scales/horwell22.scl @@ -0,0 +1,53 @@ +! horwell22.scl +Horwell[22] hobbit in 995-tET tuning +22 +! +42.21106 +112.16080 +154.37186 +231.55779 +273.76884 +343.71859 +385.92965 +428.14070 +498.09045 +540.30151 +610.25126 +659.69849 +701.90955 +771.85930 +814.07035 +884.02010 +926.23116 +975.67839 +1045.62814 +1087.83920 +1157.78894 +2/1 +! +! ! prehorwell22.scl +! Horwell 5-limit transversal +! 22 +! ! +! 128/125 +! 16/15 +! 2048/1875 +! 9375/8192 +! 75/64 +! 625/512 +! 5/4 +! 32/25 +! 4/3 +! 512/375 +! 64/45 +! 375/256 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 225/128 +! 1875/1024 +! 15/8 +! 125/64 +! 2/1 diff --git a/scales/hulen_33.scl b/scales/hulen_33.scl new file mode 100644 index 0000000..f38d3d2 --- /dev/null +++ b/scales/hulen_33.scl @@ -0,0 +1,38 @@ +! hulen_33.scl +! +Peter Hulen's ratiotonic temperament, E = 1/1 + 33 +! + 65/64 + 33/32 + 135/128 + 35/32 + 143/128 + 9/8 + 75/64 + 77/64 + 39/32 + 5/4 + 81/64 + 165/128 + 21/16 + 169/128 + 11/8 + 45/32 + 91/64 + 3/2 + 195/128 + 49/32 + 99/64 + 25/16 + 13/8 + 105/64 + 27/16 + 55/32 + 7/4 + 225/128 + 117/64 + 15/8 + 121/64 + 63/32 + 2/1 diff --git a/scales/hummel.scl b/scales/hummel.scl new file mode 100644 index 0000000..9b401de --- /dev/null +++ b/scales/hummel.scl @@ -0,0 +1,17 @@ +! hummel.scl +! +Johann Nepomuk Hummel's quasi-equal temperament (1829) + 12 +! + 99.92334 + 199.30420 + 299.48618 + 399.10984 + 499.52284 + 599.36333 + 699.98259 + 800.01661 + 899.50138 + 999.78224 + 1099.49871 + 2/1 diff --git a/scales/hummel2.scl b/scales/hummel2.scl new file mode 100644 index 0000000..32d0fcb --- /dev/null +++ b/scales/hummel2.scl @@ -0,0 +1,17 @@ +! hummel2.scl +! +Johann Nepomuk Hummel's temperament according to the second bearing plan, also John Marsh's quasi-equal temperament (1840) + 12 +! + 100.28085 + 199.99733 + 300.49862 + 400.42196 + 499.80282 + 599.98479 + 699.60846 + 800.02146 + 899.86195 + 1000.48121 + 1100.51523 + 2/1 diff --git a/scales/huseyni pentachord 13-limit.scl b/scales/huseyni pentachord 13-limit.scl new file mode 100644 index 0000000..d0fb43e --- /dev/null +++ b/scales/huseyni pentachord 13-limit.scl @@ -0,0 +1,9 @@ +! huseyni pentachord 13-limit.scl +! +Huseyni pentachord 66:72:78:88:99 + 4 +! + 12/11 + 13/11 + 4/3 + 3/2 diff --git a/scales/huseyni pentachord 19-limit.scl b/scales/huseyni pentachord 19-limit.scl new file mode 100644 index 0000000..1f4e217 --- /dev/null +++ b/scales/huseyni pentachord 19-limit.scl @@ -0,0 +1,9 @@ +! huseyni pentachord 19-limit.scl +! +Huseyni pentachord 96:105:114:128:144 + 4 +! + 35/32 + 19/16 + 4/3 + 3/2 diff --git a/scales/huseyni pentachord 23-limit.scl b/scales/huseyni pentachord 23-limit.scl new file mode 100644 index 0000000..b9793d5 --- /dev/null +++ b/scales/huseyni pentachord 23-limit.scl @@ -0,0 +1,9 @@ +! huseyni pentachord 23-limit.scl +! +Huseyni pentachord 42:46:50:56:63 + 4 +! + 23/21 + 25/21 + 4/3 + 3/2 diff --git a/scales/huseyni pentachord 71-limit.scl b/scales/huseyni pentachord 71-limit.scl new file mode 100644 index 0000000..87c4c87 --- /dev/null +++ b/scales/huseyni pentachord 71-limit.scl @@ -0,0 +1,9 @@ +! huseyni pentachord 71-limit.scl +! +Huseyni pentachord 60:66:71:80:90 + 4 +! + 11/10 + 71/60 + 4/3 + 3/2 diff --git a/scales/husmann.scl b/scales/husmann.scl new file mode 100644 index 0000000..fff6a38 --- /dev/null +++ b/scales/husmann.scl @@ -0,0 +1,11 @@ +! husmann.scl +! +Tetrachord division according to Husmann + 6 +! + 256/243 + 9/8 + 32/27 + 19683/16384 + 81/64 + 4/3 diff --git a/scales/huzzam pentachord 61-limit.scl b/scales/huzzam pentachord 61-limit.scl new file mode 100644 index 0000000..4a3abcb --- /dev/null +++ b/scales/huzzam pentachord 61-limit.scl @@ -0,0 +1,9 @@ +! huzzam pentachord 61-limit.scl +! +Huzzam pentachord 114:122:138:150:171 + 4 +! + 61/57 + 23/19 + 25/19 + 3/2 diff --git a/scales/huzzam pentachord 79-limit.scl b/scales/huzzam pentachord 79-limit.scl new file mode 100644 index 0000000..5872642 --- /dev/null +++ b/scales/huzzam pentachord 79-limit.scl @@ -0,0 +1,9 @@ +! huzzam pentachord 79-limit.scl +! +Huzzam pentachord 60:64:72:79:90 + 4 +! + 16/15 + 6/5 + 79/60 + 3/2 diff --git a/scales/huzzam.scl b/scales/huzzam.scl new file mode 100644 index 0000000..ba8acc8 --- /dev/null +++ b/scales/huzzam.scl @@ -0,0 +1,12 @@ +! huzzam.scl +! +Arab Huzzam on C, Julien J. Weiss + 7 +! + 9/8 + 16/13 + 4/3 + 3/2 + 8/5 + 15/8 + 2/1 diff --git a/scales/hyper_enh.scl b/scales/hyper_enh.scl new file mode 100644 index 0000000..ebc1f3b --- /dev/null +++ b/scales/hyper_enh.scl @@ -0,0 +1,12 @@ +! hyper_enh.scl +! +13/10 HyperEnharmonic. This genus is at the limit of usable tunings + 7 +! + 80/79 + 40/39 + 4/3 + 3/2 + 120/79 + 20/13 + 2/1 diff --git a/scales/hyper_enh2.scl b/scales/hyper_enh2.scl new file mode 100644 index 0000000..88a09d5 --- /dev/null +++ b/scales/hyper_enh2.scl @@ -0,0 +1,12 @@ +! hyper_enh2.scl +! +Hyperenharmonic genus from Kathleen Schlesinger's enharmonic Phrygian Harmonia + 7 +! + 48/47 + 24/23 + 4/3 + 3/2 + 72/47 + 36/23 + 2/1 diff --git a/scales/hypo_chrom.scl b/scales/hypo_chrom.scl new file mode 100644 index 0000000..3df9f0c --- /dev/null +++ b/scales/hypo_chrom.scl @@ -0,0 +1,17 @@ +! hypo_chrom.scl +! +Hypolydian Chromatic Tonos + 12 +! + 20/19 + 40/37 + 10/9 + 4/3 + 10/7 + 40/27 + 20/13 + 8/5 + 80/49 + 5/3 + 40/23 + 2/1 diff --git a/scales/hypo_diat.scl b/scales/hypo_diat.scl new file mode 100644 index 0000000..bc0a04c --- /dev/null +++ b/scales/hypo_diat.scl @@ -0,0 +1,17 @@ +! hypo_diat.scl +! +Hypolydian Diatonic Tonos + 12 +! + 10/9 + 20/17 + 5/4 + 4/3 + 10/7 + 40/27 + 20/13 + 5/3 + 40/23 + 20/11 + 40/21 + 2/1 diff --git a/scales/hypo_enh.scl b/scales/hypo_enh.scl new file mode 100644 index 0000000..5d259fe --- /dev/null +++ b/scales/hypo_enh.scl @@ -0,0 +1,17 @@ +! hypo_enh.scl +! +Hypolydian Enharmonic Tonos + 12 +! + 40/39 + 80/77 + 20/19 + 4/3 + 10/7 + 40/27 + 20/13 + 80/51 + 160/101 + 8/5 + 16/9 + 2/1 diff --git a/scales/hypod_chrom.scl b/scales/hypod_chrom.scl new file mode 100644 index 0000000..ce85040 --- /dev/null +++ b/scales/hypod_chrom.scl @@ -0,0 +1,17 @@ +! hypod_chrom.scl +! +Hypodorian Chromatic Tonos + 12 +! + 16/15 + 32/29 + 8/7 + 16/13 + 4/3 + 32/23 + 16/11 + 32/21 + 64/41 + 8/5 + 16/9 + 2/1 diff --git a/scales/hypod_chrom2.scl b/scales/hypod_chrom2.scl new file mode 100644 index 0000000..72bcd57 --- /dev/null +++ b/scales/hypod_chrom2.scl @@ -0,0 +1,12 @@ +! hypod_chrom2.scl +! +Schlesinger's Chromatic Hypodorian Harmonia + 7 +! + 16/15 + 8/7 + 4/3 + 16/11 + 32/21 + 8/5 + 2/1 diff --git a/scales/hypod_chrom2inv.scl b/scales/hypod_chrom2inv.scl new file mode 100644 index 0000000..f3c9302 --- /dev/null +++ b/scales/hypod_chrom2inv.scl @@ -0,0 +1,12 @@ +! HYPOD_CHROM2INV.scl +! +Inverted Schlesinger's Chromatic Hypodorian Harmonia + 7 +! + 5/4 + 21/16 + 11/8 + 3/2 + 7/4 + 15/8 + 2/1 diff --git a/scales/hypod_chromenh.scl b/scales/hypod_chromenh.scl new file mode 100644 index 0000000..79a7711 --- /dev/null +++ b/scales/hypod_chromenh.scl @@ -0,0 +1,12 @@ +! hypod_chromenh.scl +! +Schlesinger's Hypodorian Harmonia in a mixed chromatic-enharmonic genus + 7 +! + 32/31 + 16/15 + 4/3 + 16/11 + 32/21 + 8/5 + 2/1 diff --git a/scales/hypod_chrominv.scl b/scales/hypod_chrominv.scl new file mode 100644 index 0000000..069ddff --- /dev/null +++ b/scales/hypod_chrominv.scl @@ -0,0 +1,12 @@ +! hypod_chrominv.scl +! +A harmonic form of Kathleen Schlesinger's Chromatic Hypodorian Inverted + 7 +! + 17/16 + 9/8 + 11/8 + 3/2 + 25/16 + 13/8 + 2/1 diff --git a/scales/hypod_diat.scl b/scales/hypod_diat.scl new file mode 100644 index 0000000..4b68e2c --- /dev/null +++ b/scales/hypod_diat.scl @@ -0,0 +1,17 @@ +! hypod_diat.scl +! +Hypodorian Diatonic Tonos + 12 +! + 16/15 + 8/7 + 16/13 + 32/25 + 4/3 + 32/23 + 16/11 + 8/5 + 32/19 + 16/9 + 32/17 + 2/1 diff --git a/scales/hypod_diat2.scl b/scales/hypod_diat2.scl new file mode 100644 index 0000000..a37fde9 --- /dev/null +++ b/scales/hypod_diat2.scl @@ -0,0 +1,13 @@ +! hypod_diat2.scl +! +Schlesinger's Hypodorian Harmonia, a subharmonic series through 13 from 16 + 8 +! + 16/15 + 16/13 + 4/3 + 32/23 + 16/11 + 8/5 + 16/9 + 2/1 diff --git a/scales/hypod_diatcon.scl b/scales/hypod_diatcon.scl new file mode 100644 index 0000000..fc31f26 --- /dev/null +++ b/scales/hypod_diatcon.scl @@ -0,0 +1,12 @@ +! hypod_diatcon.scl +! +A Hypodorian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 16/15 + 16/13 + 4/3 + 32/23 + 8/5 + 16/9 + 2/1 diff --git a/scales/hypod_diatinv.scl b/scales/hypod_diatinv.scl new file mode 100644 index 0000000..6fb98fc --- /dev/null +++ b/scales/hypod_diatinv.scl @@ -0,0 +1,14 @@ +! hypod_diatinv.scl +! +Inverted Schlesinger's Hypodorian Harmonia, a harmonic series from 8 from 16 + 9 +! + 9/8 + 5/4 + 11/8 + 23/16 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/hypod_enh.scl b/scales/hypod_enh.scl new file mode 100644 index 0000000..4c857b2 --- /dev/null +++ b/scales/hypod_enh.scl @@ -0,0 +1,17 @@ +! hypod_enh.scl +! +Hypodorian Enharmonic Tonos + 12 +! + 32/31 + 64/61 + 16/15 + 32/27 + 4/3 + 32/23 + 16/11 + 64/43 + 128/85 + 32/21 + 64/37 + 2/1 diff --git a/scales/hypod_enhinv.scl b/scales/hypod_enhinv.scl new file mode 100644 index 0000000..7431e1c --- /dev/null +++ b/scales/hypod_enhinv.scl @@ -0,0 +1,12 @@ +! HYPOD_enhinv.scl +! +Inverted Schlesinger's Enharmonic Hypodorian Harmonia + 7 +! + 21/16 + 43/32 + 11/8 + 3/2 + 15/8 + 31/16 + 2/1 diff --git a/scales/hypod_enhinv2.scl b/scales/hypod_enhinv2.scl new file mode 100644 index 0000000..4c040fc --- /dev/null +++ b/scales/hypod_enhinv2.scl @@ -0,0 +1,12 @@ +! HYPOD_ENHINV2.scl +! +A harmonic form of Schlesinger's Hypodorian enharmonic inverted + 7 +! + 33/32 + 17/16 + 11/8 + 3/2 + 49/32 + 25/16 + 2/1 diff --git a/scales/hypodorian_pis.scl b/scales/hypodorian_pis.scl new file mode 100644 index 0000000..026d3f3 --- /dev/null +++ b/scales/hypodorian_pis.scl @@ -0,0 +1,20 @@ +! hypodorian_pis.scl +! +Diatonic Perfect Immutable System in the Hypodorian Tonos + 15 +! + 12/11 + 6/5 + 4/3 + 3/2 + 8/5 + 24/13 + 2/1 + 48/23 + 24/11 + 12/5 + 8/3 + 3/1 + 24/7 + 48/13 + 4/1 diff --git a/scales/hypol_chrom.scl b/scales/hypol_chrom.scl new file mode 100644 index 0000000..042a29a --- /dev/null +++ b/scales/hypol_chrom.scl @@ -0,0 +1,13 @@ +! hypol_chrom.scl +! +Schlesinger's Hypolydian Harmonia in the chromatic genus + 8 +! + 20/19 + 10/9 + 4/3 + 10/7 + 20/13 + 8/5 + 5/3 + 2/1 diff --git a/scales/hypol_chrominv.scl b/scales/hypol_chrominv.scl new file mode 100644 index 0000000..c7ec5e9 --- /dev/null +++ b/scales/hypol_chrominv.scl @@ -0,0 +1,13 @@ +! hypol_chrominv.scl +! +Inverted Schlesinger's Chromatic Hypolydian Harmonia + 8 +! + 6/5 + 5/4 + 13/10 + 7/5 + 3/2 + 9/5 + 19/10 + 2/1 diff --git a/scales/hypol_chrominv2.scl b/scales/hypol_chrominv2.scl new file mode 100644 index 0000000..1d8be15 --- /dev/null +++ b/scales/hypol_chrominv2.scl @@ -0,0 +1,12 @@ +! HYPOL_CHROMINV2.scl +! +harmonic form of Schlesinger's Chromatic Hypolydian inverted + 7 +! + 21/20 + 11/10 + 13/10 + 7/5 + 3/2 + 8/5 + 2/1 diff --git a/scales/hypol_chrominv3.scl b/scales/hypol_chrominv3.scl new file mode 100644 index 0000000..da91eed --- /dev/null +++ b/scales/hypol_chrominv3.scl @@ -0,0 +1,12 @@ +! hypol_chrominv3.scl +! +A harmonic form of Schlesinger's Chromatic Hypolydian inverted + 7 +! + 21/20 + 11/10 + 13/10 + 3/2 + 8/5 + 17/10 + 2/1 diff --git a/scales/hypol_diat.scl b/scales/hypol_diat.scl new file mode 100644 index 0000000..59b1da5 --- /dev/null +++ b/scales/hypol_diat.scl @@ -0,0 +1,13 @@ +! hypol_diat.scl +! +Schlesinger's Hypolydian Harmonia, a subharmonic series through 13 from 20 + 8 +! + 10/9 + 5/4 + 4/3 + 10/7 + 20/13 + 5/3 + 20/11 + 2/1 diff --git a/scales/hypol_diatcon.scl b/scales/hypol_diatcon.scl new file mode 100644 index 0000000..c540abc --- /dev/null +++ b/scales/hypol_diatcon.scl @@ -0,0 +1,12 @@ +! hypol_diatcon.scl +! +A Hypolydian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 10/9 + 5/4 + 4/3 + 20/13 + 5/3 + 20/11 + 2/1 diff --git a/scales/hypol_diatinv.scl b/scales/hypol_diatinv.scl new file mode 100644 index 0000000..91248d9 --- /dev/null +++ b/scales/hypol_diatinv.scl @@ -0,0 +1,13 @@ +! hypol_diatinv.scl +! +Inverted Schlesinger's Hypolydian Harmonia, a harmonic series from 10 from 20 + 8 +! + 11/10 + 6/5 + 13/10 + 7/5 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/hypol_enh.scl b/scales/hypol_enh.scl new file mode 100644 index 0000000..f44071b --- /dev/null +++ b/scales/hypol_enh.scl @@ -0,0 +1,13 @@ +! hypol_enh.scl +! +Schlesinger's Hypolydian Harmonia in the enharmonic genus + 8 +! + 40/39 + 20/19 + 4/3 + 10/7 + 20/13 + 8/5 + 5/3 + 2/1 diff --git a/scales/hypol_enhinv.scl b/scales/hypol_enhinv.scl new file mode 100644 index 0000000..9ed0730 --- /dev/null +++ b/scales/hypol_enhinv.scl @@ -0,0 +1,13 @@ +! hypol_enhinv.scl +! +Inverted Schlesinger's Enharmonic Hypolydian Harmonia + 8 +! + 5/4 + 51/40 + 13/10 + 7/5 + 3/2 + 19/10 + 39/20 + 2/1 diff --git a/scales/hypol_enhinv2.scl b/scales/hypol_enhinv2.scl new file mode 100644 index 0000000..33b61c0 --- /dev/null +++ b/scales/hypol_enhinv2.scl @@ -0,0 +1,12 @@ +! HYPOL_ENHINV2.scl +! +A harmonic form of Schlesinger's Hypolydian enharmonic inverted + 7 +! + 41/40 + 21/20 + 13/10 + 7/5 + 29/20 + 3/2 + 2/1 diff --git a/scales/hypol_enhinv3.scl b/scales/hypol_enhinv3.scl new file mode 100644 index 0000000..709908c --- /dev/null +++ b/scales/hypol_enhinv3.scl @@ -0,0 +1,12 @@ +! hypol_enhinv3.scl +! +A harmonic form of Schlesinger's Hypolydian enharmonic inverted + 7 +! + 41/40 + 21/20 + 13/10 + 3/2 + 31/20 + 8/5 + 2/1 diff --git a/scales/hypol_pent.scl b/scales/hypol_pent.scl new file mode 100644 index 0000000..e237794 --- /dev/null +++ b/scales/hypol_pent.scl @@ -0,0 +1,13 @@ +! hypol_pent.scl +! +Schlesinger's Hypolydian Harmonia in the pentachromatic genus + 8 +! + 25/24 + 10/9 + 4/3 + 10/7 + 20/13 + 100/63 + 5/3 + 2/1 diff --git a/scales/hypol_tri.scl b/scales/hypol_tri.scl new file mode 100644 index 0000000..3ce1c95 --- /dev/null +++ b/scales/hypol_tri.scl @@ -0,0 +1,13 @@ +! hypol_tri.scl +! +Schlesinger's Hypolydian Harmonia in the first trichromatic genus + 8 +! + 30/29 + 15/14 + 4/3 + 10/7 + 20/13 + 30/19 + 60/37 + 2/1 diff --git a/scales/hypol_tri2.scl b/scales/hypol_tri2.scl new file mode 100644 index 0000000..35aa4f3 --- /dev/null +++ b/scales/hypol_tri2.scl @@ -0,0 +1,13 @@ +! hypol_tri2.scl +! +Schlesinger's Hypolydian Harmonia in the second trichromatic genus + 8 +! + 30/29 + 10/9 + 4/3 + 10/7 + 20/13 + 30/19 + 5/3 + 8/1 diff --git a/scales/hypolydian_pis.scl b/scales/hypolydian_pis.scl new file mode 100644 index 0000000..3f84d4e --- /dev/null +++ b/scales/hypolydian_pis.scl @@ -0,0 +1,20 @@ +! hypolydian_pis.scl +! +The Diatonic Perfect Immutable System in the Hypolydian Tonos + 15 +! + 14/13 + 7/6 + 14/11 + 7/5 + 14/9 + 7/4 + 28/15 + 2/1 + 28/13 + 7/3 + 28/11 + 14/5 + 28/9 + 7/2 + 4/1 diff --git a/scales/hypop_chrom.scl b/scales/hypop_chrom.scl new file mode 100644 index 0000000..5c071ca --- /dev/null +++ b/scales/hypop_chrom.scl @@ -0,0 +1,17 @@ +! hypop_chrom.scl +! +Hypophrygian Chromatic Tonos + 12 +! + 18/17 + 12/11 + 9/8 + 9/7 + 18/13 + 36/25 + 3/2 + 36/23 + 8/5 + 18/11 + 9/5 + 2/1 diff --git a/scales/hypop_chromenh.scl b/scales/hypop_chromenh.scl new file mode 100644 index 0000000..2b331ec --- /dev/null +++ b/scales/hypop_chromenh.scl @@ -0,0 +1,12 @@ +! hypop_chromenh.scl +! +Schlesinger's Hypophrygian Harmonia in a mixed chromatic-enharmonic genus + 7 +! + 36/35 + 18/17 + 18/13 + 3/2 + 36/23 + 18/11 + 2/1 diff --git a/scales/hypop_chrominv.scl b/scales/hypop_chrominv.scl new file mode 100644 index 0000000..2671a9f --- /dev/null +++ b/scales/hypop_chrominv.scl @@ -0,0 +1,12 @@ +! hypop_chrominv.scl +! +Inverted Schlesinger's Chromatic Hypophrygian Harmonia + 7 +! + 11/9 + 23/18 + 4/3 + 13/9 + 16/9 + 17/9 + 2/1 diff --git a/scales/hypop_chrominv2.scl b/scales/hypop_chrominv2.scl new file mode 100644 index 0000000..7be2527 --- /dev/null +++ b/scales/hypop_chrominv2.scl @@ -0,0 +1,12 @@ +! HYPOP_CHROMINV2.scl +! +A harmonic form of Schlesinger's Chromatic Hypophrygian inverted + 7 +! + 19/18 + 10/9 + 4/3 + 13/9 + 14/9 + 5/3 + 2/1 diff --git a/scales/hypop_diat.scl b/scales/hypop_diat.scl new file mode 100644 index 0000000..607da2a --- /dev/null +++ b/scales/hypop_diat.scl @@ -0,0 +1,17 @@ +! hypop_diat.scl +! +Hypophrygian Diatonic Tonos + 12 +! + 9/8 + 36/31 + 6/5 + 9/7 + 18/13 + 36/25 + 3/2 + 18/11 + 12/7 + 9/5 + 36/19 + 2/1 diff --git a/scales/hypop_diat2.scl b/scales/hypop_diat2.scl new file mode 100644 index 0000000..82c13b8 --- /dev/null +++ b/scales/hypop_diat2.scl @@ -0,0 +1,13 @@ +! hypop_diat2.scl +! +Schlesinger's Hypophrygian Harmonia + 8 +! + 9/8 + 6/5 + 18/13 + 36/25 + 3/2 + 18/11 + 9/5 + 2/1 diff --git a/scales/hypop_diat2inv.scl b/scales/hypop_diat2inv.scl new file mode 100644 index 0000000..ada9241 --- /dev/null +++ b/scales/hypop_diat2inv.scl @@ -0,0 +1,13 @@ +! HYPOP_DIAT2INV.scl +! +Inverted Schlesinger's Hypophrygian Harmonia, a harmonic series from 9 from 18 + 8 +! + 10/9 + 11/9 + 4/3 + 25/18 + 13/9 + 5/3 + 16/9 + 2/1 diff --git a/scales/hypop_diatcon.scl b/scales/hypop_diatcon.scl new file mode 100644 index 0000000..2d5568e --- /dev/null +++ b/scales/hypop_diatcon.scl @@ -0,0 +1,12 @@ +! hypop_diatcon.scl +! +A Hypophrygian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 9/8 + 6/5 + 18/13 + 36/25 + 18/11 + 9/5 + 2/1 diff --git a/scales/hypop_enh.scl b/scales/hypop_enh.scl new file mode 100644 index 0000000..8dea164 --- /dev/null +++ b/scales/hypop_enh.scl @@ -0,0 +1,17 @@ +! hypop_enh.scl +! +Hypophrygian Enharmonic Tonos + 12 +! + 36/35 + 24/23 + 18/17 + 6/5 + 18/13 + 36/25 + 3/2 + 72/47 + 48/31 + 36/23 + 9/5 + 2/1 diff --git a/scales/hypop_enhinv.scl b/scales/hypop_enhinv.scl new file mode 100644 index 0000000..78537fc --- /dev/null +++ b/scales/hypop_enhinv.scl @@ -0,0 +1,12 @@ +! hypop_enhinv.scl +! +Inverted Schlesinger's Enharmonic Hypophrygian Harmonia + 7 +! + 23/18 + 47/36 + 4/3 + 13/9 + 17/9 + 35/18 + 2/1 diff --git a/scales/hypop_enhinv2.scl b/scales/hypop_enhinv2.scl new file mode 100644 index 0000000..fd2c0cf --- /dev/null +++ b/scales/hypop_enhinv2.scl @@ -0,0 +1,12 @@ +! HYPOP_ENHINV2.scl +! +A harmonic form of Schlesinger's Hypophrygian enharmonic inverted + 7 +! + 37/36 + 19/18 + 4/3 + 13/9 + 3/2 + 14/9 + 2/1 diff --git a/scales/hypophryg_pis.scl b/scales/hypophryg_pis.scl new file mode 100644 index 0000000..7fdb8e8 --- /dev/null +++ b/scales/hypophryg_pis.scl @@ -0,0 +1,20 @@ +! hypophryg_pis.scl +! +The Diatonic Perfect Immutable System in the Hypophrygian Tonos + 15 +! + 13/12 + 13/11 + 13/10 + 13/9 + 13/8 + 26/15 + 2/1 + 52/25 + 13/6 + 26/11 + 13/5 + 26/9 + 13/4 + 26/7 + 4/1 diff --git a/scales/iivv17.scl b/scales/iivv17.scl new file mode 100644 index 0000000..d9dec87 --- /dev/null +++ b/scales/iivv17.scl @@ -0,0 +1,26 @@ +! iivv17.scl +! +17-limit IIVV + 21 +! + 33/32 + 17/16 + 13/12 + 9/8 + 7/6 + 39/32 + 5/4 + 21/16 + 4/3 + 11/8 + 45/32 + 17/12 + 3/2 + 51/32 + 13/8 + 5/3 + 27/16 + 7/4 + 11/6 + 15/8 + 2/1 diff --git a/scales/ikosany.scl b/scales/ikosany.scl new file mode 100644 index 0000000..5f6c447 --- /dev/null +++ b/scales/ikosany.scl @@ -0,0 +1,35 @@ +! ikosany.scl +Convex closure of Eikosany in 385/384-tempering, 140-tET tuning +31 +! +51.428571 +60.000000 +77.142857 +111.428571 +137.142857 +257.142857 +265.714286 +291.428571 +317.142857 +342.857143 +368.571429 +377.142857 +462.857143 +497.142857 +522.857143 +557.142857 +574.285714 +582.857143 +634.285714 +702.857143 +754.285714 +762.857143 +814.285714 +840.000000 +874.285714 +960.000000 +994.285714 +1020.000000 +1071.428571 +1080.000000 +2/1 diff --git a/scales/ikosany7.scl b/scales/ikosany7.scl new file mode 100644 index 0000000..db8c889 --- /dev/null +++ b/scales/ikosany7.scl @@ -0,0 +1,36 @@ +! ikosany7.scl +! +Seven-limit tuning of ikosany.scl + 31 +! + 36/35 + 28/27 + 729/700 + 16/15 + 27/25 + 81/70 + 7/6 + 32/27 + 6/5 + 243/200 + 216/175 + 56/45 + 729/560 + 4/3 + 27/20 + 112/81 + 243/175 + 7/5 + 36/25 + 3/2 + 54/35 + 14/9 + 8/5 + 81/50 + 224/135 + 243/140 + 16/9 + 9/5 + 324/175 + 28/15 + 2/1 diff --git a/scales/indian-ayyar.scl b/scales/indian-ayyar.scl new file mode 100644 index 0000000..c4974c5 --- /dev/null +++ b/scales/indian-ayyar.scl @@ -0,0 +1,27 @@ +! indian-ayyar.scl +! +Carnatic sruti system, C.Subrahmanya Ayyar, 1976. alt:21/20 25/16 63/40 40/21 + 22 +! + 25/24 + 16/15 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 7/4 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/indian-dk.scl b/scales/indian-dk.scl new file mode 100644 index 0000000..3fd827f --- /dev/null +++ b/scales/indian-dk.scl @@ -0,0 +1,14 @@ +! indian-dk.scl +! +Raga Darbari Kanada + 9 +! + 9/8 + 7/6 + 6/5 + 4/3 + 3/2 + 14/9 + 8/5 + 16/9 + 2/1 diff --git a/scales/indian-ellis.scl b/scales/indian-ellis.scl new file mode 100644 index 0000000..9c03192 --- /dev/null +++ b/scales/indian-ellis.scl @@ -0,0 +1,27 @@ +! indian-ellis.scl +! +Ellis's Indian Chromatic, theoretical #74 of App.XX, p.517 of Helmholtz + 22 +! + 36/35 + 18/17 + 12/11 + 9/8 + 36/31 + 6/5 + 36/29 + 9/7 + 4/3 + 26/19 + 52/37 + 13/9 + 52/35 + 26/17 + 52/33 + 13/8 + 52/31 + 26/15 + 52/29 + 13/7 + 52/27 + 2/1 diff --git a/scales/indian-hahn.scl b/scales/indian-hahn.scl new file mode 100644 index 0000000..a0d7732 --- /dev/null +++ b/scales/indian-hahn.scl @@ -0,0 +1,27 @@ +! indian-hahn.scl +! +Indian shrutis Paul Hahn proposal + 22 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 27/20 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/indian-hrdaya1.scl b/scales/indian-hrdaya1.scl new file mode 100644 index 0000000..0a01a09 --- /dev/null +++ b/scales/indian-hrdaya1.scl @@ -0,0 +1,17 @@ +! indian-hrdaya1.scl +! +From Hrdayakautaka of Hrdaya Narayana (17th c) Bhatkande's interpretation + 12 +! + 27/25 + 9/8 + 6/5 + 54/43 + 4/3 + 162/113 + 3/2 + 18/11 + 27/16 + 9/5 + 81/43 + 2/1 diff --git a/scales/indian-hrdaya2.scl b/scales/indian-hrdaya2.scl new file mode 100644 index 0000000..4af93c8 --- /dev/null +++ b/scales/indian-hrdaya2.scl @@ -0,0 +1,17 @@ +! indian-hrdaya2.scl +! +From Hrdayakautaka of Hrdaya Narayana (17th c) Levy's interpretation + 12 +! + 27/25 + 9/8 + 6/5 + 24/19 + 4/3 + 36/25 + 3/2 + 18/11 + 12/7 + 9/5 + 36/19 + 2/1 diff --git a/scales/indian-invrot.scl b/scales/indian-invrot.scl new file mode 100644 index 0000000..61a9ac0 --- /dev/null +++ b/scales/indian-invrot.scl @@ -0,0 +1,17 @@ +! indian-invrot.scl +! +Inverted and rotated North Indian gamut + 12 +! + 128/125 + 16/15 + 6/5 + 5/4 + 32/25 + 4/3 + 3/2 + 8/5 + 128/75 + 15/8 + 48/25 + 2/1 diff --git a/scales/indian-magrama.scl b/scales/indian-magrama.scl new file mode 100644 index 0000000..bb7852d --- /dev/null +++ b/scales/indian-magrama.scl @@ -0,0 +1,12 @@ +! indian-magrama.scl +! +Indian mode Ma-grama (Sa Ri Ga Ma Pa Dha Ni Sa) + 7 +! + 9/8 + 5/4 + 45/32 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/indian-mystical22.scl b/scales/indian-mystical22.scl new file mode 100644 index 0000000..81b00be --- /dev/null +++ b/scales/indian-mystical22.scl @@ -0,0 +1,28 @@ +! indian-mystical22.scl +! +Srinivasan Nambirajan, 11-limit shruti scale + 23 +! + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/indian-newbengali.scl b/scales/indian-newbengali.scl new file mode 100644 index 0000000..7e09862 --- /dev/null +++ b/scales/indian-newbengali.scl @@ -0,0 +1,27 @@ +! indian-newbengali.scl +! +Modern Bengali scale,S.M. Tagore: The mus. scales of the Hindus,Calcutta 1884 + 22 +! + 49.00000 + 99.00000 + 151.00000 + 9/8 + 259.00000 + 6/5 + 374.00000 + 435.00000 + 4/3 + 543.00000 + 45/32 + 637.00000 + 685.00000 + 736.00000 + 787.00000 + 841.00000 + 896.00000 + 952.00000 + 1011.00000 + 1070.00000 + 1135.00000 + 2/1 diff --git a/scales/indian-old2ellis.scl b/scales/indian-old2ellis.scl new file mode 100644 index 0000000..9c02fd5 --- /dev/null +++ b/scales/indian-old2ellis.scl @@ -0,0 +1,27 @@ +! indian-old2ellis.scl +! +Ellis Old Indian Chrom2, Helmholtz, p. 517. This is a 4 cent appr. to #73 + 22 +! + 32/31 + 17/16 + 12/11 + 9/8 + 7/6 + 29/24 + 5/4 + 31/24 + 4/3 + 11/8 + 17/12 + 16/11 + 3/2 + 17/11 + 27/17 + 18/11 + 27/16 + 7/4 + 29/16 + 15/8 + 29/15 + 2/1 diff --git a/scales/indian-oldellis.scl b/scales/indian-oldellis.scl new file mode 100644 index 0000000..54c4e2e --- /dev/null +++ b/scales/indian-oldellis.scl @@ -0,0 +1,27 @@ +! indian-oldellis.scl +! +Ellis Old Indian Chromatic, Helmholtz, p. 517. This is a 0.5 cent appr. to #73 + 22 +! + 51.00000 + 35/33 + 153.00000 + 9/8 + 264.66700 + 325.33300 + 5/4 + 442.00000 + 4/3 + 549.00000 + 600.00000 + 651.00000 + 3/2 + 753.00000 + 35/22 + 855.00000 + 27/16 + 966.66700 + 1027.33300 + 15/8 + 1144.00000 + 2/1 diff --git a/scales/indian-raja.scl b/scales/indian-raja.scl new file mode 100644 index 0000000..0fcbcdc --- /dev/null +++ b/scales/indian-raja.scl @@ -0,0 +1,11 @@ +! INDIAN-raja.scl +! +A folk scale from Rajasthan, India + 6 +! + 9/8 + 5/4 + 4/3 + 3/2 + 15/8 + 2/1 diff --git a/scales/indian-sagrama.scl b/scales/indian-sagrama.scl new file mode 100644 index 0000000..8cded08 --- /dev/null +++ b/scales/indian-sagrama.scl @@ -0,0 +1,12 @@ +! INDIAN-SAGRAMA.scl +! +Indian mode Sa-grama (Sa Ri Ga Ma Pa Dha Ni Sa), inverse of Didymus' diatonic + 7 +! + 9/8 + 5/4 + 4/3 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/indian-srutiharm.scl b/scales/indian-srutiharm.scl new file mode 100644 index 0000000..f9ea0cc --- /dev/null +++ b/scales/indian-srutiharm.scl @@ -0,0 +1,27 @@ +! indian-srutiharm.scl +! +B. Chaitanya Deva's sruti harmonium and S. Ramanathan's sruti vina, 1973. B.C. Deva, The Music of India, 1981, p. 109-110 + 22 +! + 86.57974 + 110.54184 + 191.88995 + 203.20525 + 296.51143 + 312.46762 + 390.11445 + 415.24165 + 512.25493 + 526.34918 + 599.63988 + 621.92119 + 708.28493 + 798.55929 + 826.32309 + 891.95186 + 907.03896 + 1005.57624 + 1026.73211 + 1098.80578 + 1118.85891 + 2/1 diff --git a/scales/indian-srutivina.scl b/scales/indian-srutivina.scl new file mode 100644 index 0000000..38b1d52 --- /dev/null +++ b/scales/indian-srutivina.scl @@ -0,0 +1,27 @@ +! INDIAN-SRUTIVINA.scl +! +Raja S.M. Tagore's sruti vina, measured by Ellis and Hipkins, 1886. 1/1=241.2 + 22 +! + 45.338 cents + 111.193 cents + 169.436 cents + 222.630 cents + 267.486 cents + 316.000 cents + 389.182 cents + 436.121 cents + 505.565 cents + 544.256 cents + 583.127 cents + 640.588 cents + 712.450 cents + 749.156 cents + 806.854 cents + 855.262 cents + 916.783 cents + 953.997 cents + 1012.565 cents + 1076.939 cents + 1136.401 cents + 1219.981 cents diff --git a/scales/indian-vina.scl b/scales/indian-vina.scl new file mode 100644 index 0000000..875caa0 --- /dev/null +++ b/scales/indian-vina.scl @@ -0,0 +1,17 @@ +! indian-vina.scl +! +Observed South Indian tuning of a vina, Ellis + 12 +! + 97.00000 + 195.00000 + 312.00000 + 397.00000 + 515.00000 + 596.00000 + 692.00000 + 782.00000 + 883.00000 + 997.00000 + 1092.00000 + 1207.00000 diff --git a/scales/indian-vina2.scl b/scales/indian-vina2.scl new file mode 100644 index 0000000..8627771 --- /dev/null +++ b/scales/indian-vina2.scl @@ -0,0 +1,29 @@ +! indian-vina2.scl +! +Observed tuning of old vina in Tanjore Palace, Ellis and Hipkins. 1/1=210.7 Hz + 24 +! + 99.00000 + 195.00000 + 288.00000 + 382.00000 + 478.00000 + 571.00000 + 675.00000 + 774.00000 + 869.00000 + 959.00000 + 1054.00000 + 1148.00000 + 1254.00000 + 1353.00000 + 1444.00000 + 1543.00000 + 1650.00000 + 1741.00000 + 1838.00000 + 1934.00000 + 2032.00000 + 2121.00000 + 2220.00000 + 2324.00000 diff --git a/scales/indian-vina3.scl b/scales/indian-vina3.scl new file mode 100644 index 0000000..be2045b --- /dev/null +++ b/scales/indian-vina3.scl @@ -0,0 +1,17 @@ +! indian-vina3.scl +! +Tuning of K.S. Subramanian's vina (1983) + 12 +! + 256/243 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 128/81 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/indian.scl b/scales/indian.scl new file mode 100644 index 0000000..01593d8 --- /dev/null +++ b/scales/indian.scl @@ -0,0 +1,27 @@ +! indian.scl +! +Indian shruti scale + 22 +! + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 729/512 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/indian2.scl b/scales/indian2.scl new file mode 100644 index 0000000..53a7b2e --- /dev/null +++ b/scales/indian2.scl @@ -0,0 +1,27 @@ +! indian2.scl +! +Indian shruti scale with tritone 64/45 schisma lower (Mr.Devarajan, Madurai) + 22 +! + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/indian2_sm.scl b/scales/indian2_sm.scl new file mode 100644 index 0000000..6355f6b --- /dev/null +++ b/scales/indian2_sm.scl @@ -0,0 +1,27 @@ +! indian2_sm.scl +! +Shruti/Mathieu's Magic Mode scale in 289-equal (schismic) temperament + 22 +! + 91.34948 + 112.11073 + 182.69896 + 203.46021 + 294.80969 + 315.57093 + 386.15917 + 406.92042 + 498.26990 + 519.03114 + 589.61938 + 610.38062 + 701.73010 + 793.07958 + 813.84083 + 884.42907 + 905.19031 + 996.53979 + 1017.30104 + 1087.88927 + 1108.65052 + 2/1 diff --git a/scales/indian3.scl b/scales/indian3.scl new file mode 100644 index 0000000..3a645e7 --- /dev/null +++ b/scales/indian3.scl @@ -0,0 +1,27 @@ +! indian3.scl +! +Indian shruti scale with 32/31 and 31/16 and tritone schisma lower + 22 +! + 32/31 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 31/16 + 2/1 diff --git a/scales/indian4.scl b/scales/indian4.scl new file mode 100644 index 0000000..ff98a72 --- /dev/null +++ b/scales/indian4.scl @@ -0,0 +1,27 @@ +! indian4.scl +! +Indian shruti scale according to Firoze Framjee: Text book of Indian music + 22 +! + 135/128 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 512/405 + 4/3 + 45/32 + 64/45 + 40/27 + 3/2 + 405/256 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 256/135 + 2/1 diff --git a/scales/indian5.scl b/scales/indian5.scl new file mode 100644 index 0000000..38d47b3 --- /dev/null +++ b/scales/indian5.scl @@ -0,0 +1,28 @@ +! indian5.scl +! +23 Shrutis, Amit Mitra, 1/1 no. 12:2, Table C. + 23 +! + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 40/27 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/indian6.scl b/scales/indian6.scl new file mode 100644 index 0000000..4219e3a --- /dev/null +++ b/scales/indian6.scl @@ -0,0 +1,82 @@ +! indian6.scl +! +Shrutis calculated by generation method, Amit Mitra, 1/1 no. 12:2, Table B. + 77 +! + 81/80 + 128/125 + 250/243 + 648/625 + 25/24 + 256/243 + 135/128 + 16/15 + 27/25 + 625/576 + 10/9 + 9/8 + 256/225 + 144/125 + 125/108 + 75/64 + 32/27 + 6/5 + 243/200 + 625/512 + 768/625 + 100/81 + 5/4 + 512/405 + 81/64 + 32/25 + 625/486 + 162/125 + 125/96 + 320/243 + 675/512 + 4/3 + 27/20 + 512/375 + 864/625 + 25/18 + 45/32 + 64/45 + 729/512 + 36/25 + 625/432 + 729/500 + 375/256 + 40/27 + 3/2 + 243/160 + 192/125 + 125/81 + 972/625 + 25/16 + 128/81 + 405/256 + 8/5 + 81/50 + 625/384 + 1024/625 + 400/243 + 5/3 + 27/16 + 128/75 + 216/125 + 125/72 + 225/128 + 16/9 + 9/5 + 729/400 + 1152/625 + 50/27 + 15/8 + 256/135 + 243/128 + 48/25 + 625/324 + 243/125 + 125/64 + 160/81 + 2/1 diff --git a/scales/indian_12.scl b/scales/indian_12.scl new file mode 100644 index 0000000..0ce504f --- /dev/null +++ b/scales/indian_12.scl @@ -0,0 +1,17 @@ +! INDIAN_12.scl +! +North Indian Gamut, modern Hindustani gamut out of 22 or more shrutis + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/indian_12c.scl b/scales/indian_12c.scl new file mode 100644 index 0000000..e93f5dc --- /dev/null +++ b/scales/indian_12c.scl @@ -0,0 +1,17 @@ +! indian_12c.scl +! +Carnatic gamut. Kuppuswami: Carnatic music and the Tamils, p. v + 12 +! + 18/17 + 9/8 + 6/5 + 54/43 + 4/3 + 24/17 + 3/2 + 27/17 + 27/16 + 9/5 + 81/43 + 2/1 diff --git a/scales/indian_a.scl b/scales/indian_a.scl new file mode 100644 index 0000000..047a906 --- /dev/null +++ b/scales/indian_a.scl @@ -0,0 +1,12 @@ +! indian_a.scl +! +One observed indian mode + 7 +! + 183.00000 + 342.00000 + 533.00000 + 685.00000 + 871.00000 + 1074.00000 + 2/1 diff --git a/scales/indian_b.scl b/scales/indian_b.scl new file mode 100644 index 0000000..273fe93 --- /dev/null +++ b/scales/indian_b.scl @@ -0,0 +1,12 @@ +! indian_b.scl +! +Observed Indian mode + 7 +! + 183.00000 + 271.00000 + 534.00000 + 686.00000 + 872.00000 + 983.00000 + 2/1 diff --git a/scales/indian_c.scl b/scales/indian_c.scl new file mode 100644 index 0000000..bcb8619 --- /dev/null +++ b/scales/indian_c.scl @@ -0,0 +1,12 @@ +! indian_c.scl +! +Observed Indian mode + 7 +! + 111.00000 + 314.00000 + 534.00000 + 686.00000 + 828.00000 + 1017.00000 + 2/1 diff --git a/scales/indian_d.scl b/scales/indian_d.scl new file mode 100644 index 0000000..f9caf37 --- /dev/null +++ b/scales/indian_d.scl @@ -0,0 +1,12 @@ +! indian_d.scl +! +Indian D (Ellis, correct) + 7 +! + 174.00000 + 350.00000 + 477.00000 + 697.00000 + 908.00000 + 1070.00000 + 2/1 diff --git a/scales/indian_e.scl b/scales/indian_e.scl new file mode 100644 index 0000000..3aa3d17 --- /dev/null +++ b/scales/indian_e.scl @@ -0,0 +1,12 @@ +! indian_e.scl +! +Observed Indian mode + 7 +! + 90.00000 + 366.00000 + 493.00000 + 707.00000 + 781.00000 + 1080.00000 + 2/1 diff --git a/scales/indian_g.scl b/scales/indian_g.scl new file mode 100644 index 0000000..d252903 --- /dev/null +++ b/scales/indian_g.scl @@ -0,0 +1,27 @@ +! indian_g.scl +! +Shruti/Mathieu's Magic Mode scale in 94-tET (Schismic, Garibaldi) temperament + 22 +! + 89.36170 + 114.89362 + 178.72340 + 204.25532 + 293.61702 + 319.14894 + 382.97872 + 408.51064 + 497.87234 + 523.40426 + 587.23404 + 612.76596 + 702.12766 + 791.48936 + 817.02128 + 880.85106 + 906.38298 + 995.74468 + 1021.27660 + 1085.10638 + 1110.63830 + 2/1 diff --git a/scales/indian_rat.scl b/scales/indian_rat.scl new file mode 100644 index 0000000..1a19092 --- /dev/null +++ b/scales/indian_rat.scl @@ -0,0 +1,27 @@ +! indian_rat.scl +! +Indian Raga, From Fortuna, after Helmholtz, ratios by JC + 22 +! + 34/33 + 35/33 + 12/11 + 9/8 + 22/19 + 35/29 + 5/4 + 40/31 + 4/3 + 11/8 + 17/12 + 16/11 + 3/2 + 17/11 + 35/22 + 59/36 + 27/16 + 7/4 + 38/21 + 15/8 + 60/31 + 2/1 diff --git a/scales/indian_rot.scl b/scales/indian_rot.scl new file mode 100644 index 0000000..314cc4c --- /dev/null +++ b/scales/indian_rot.scl @@ -0,0 +1,17 @@ +! indian_rot.scl +! +Rotated North Indian Gamut + 12 +! + 25/24 + 16/15 + 75/64 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 125/64 + 2/1 diff --git a/scales/indra31.scl b/scales/indra31.scl new file mode 100644 index 0000000..6367f19 --- /dev/null +++ b/scales/indra31.scl @@ -0,0 +1,71 @@ +! indra31.scl +Indra[31] (540/539, 1375/1372) hobbit in 296-tET +31 +! +32.43243 +85.13514 +117.56757 +150.00000 +198.64865 +235.13514 +267.56757 +316.21622 +348.64865 +381.08108 +433.78378 +466.21622 +498.64865 +551.35135 +583.78378 +616.21622 +648.64865 +701.35135 +733.78378 +766.21622 +818.91892 +851.35135 +883.78378 +932.43243 +964.86486 +1001.35135 +1050.00000 +1082.43243 +1114.86486 +1167.56757 +2/1 +! +! ! preindra31.scl +! Indra[31] transversal +! 31 +! ! +! 50/49 +! 21/20 +! 15/14 +! 12/11 +! 28/25 +! 63/55 +! 7/6 +! 6/5 +! 11/9 +! 56/45 +! 9/7 +! 72/55 +! 4/3 +! 11/8 +! 7/5 +! 10/7 +! 16/11 +! 3/2 +! 55/36 +! 14/9 +! 45/28 +! 18/11 +! 5/3 +! 12/7 +! 96/55 +! 25/14 +! 11/6 +! 28/15 +! 1152/605 +! 49/25 +! 2/1 diff --git a/scales/interbartolo1.scl b/scales/interbartolo1.scl new file mode 100644 index 0000000..b69cb5c --- /dev/null +++ b/scales/interbartolo1.scl @@ -0,0 +1,17 @@ +! interbartolo1.scl +! +Graziano Interbartolo & Paolo Venturino Bach temperament nr.1 (2006) + 12 +! + 135/128 + 193.15686 + 298.37062 + 5/4 + 503.42157 + 45/32 + 696.57843 + 795.27467 + 889.73529 + 1001.46657 + 15/8 + 2/1 diff --git a/scales/interbartolo2.scl b/scales/interbartolo2.scl new file mode 100644 index 0000000..2605397 --- /dev/null +++ b/scales/interbartolo2.scl @@ -0,0 +1,17 @@ +! interbartolo2.scl +! +Graziano Interbartolo & Paolo Venturino Bach temperament nr.2 (2006) + 12 +! + 256/243 + 192.18000 + 298.04500 + 8192/6561 + 503.91000 + 1024/729 + 696.09000 + 794.13500 + 888.26999 + 1001.95500 + 4096/2187 + 2/1 diff --git a/scales/interbartolo3.scl b/scales/interbartolo3.scl new file mode 100644 index 0000000..0f12263 --- /dev/null +++ b/scales/interbartolo3.scl @@ -0,0 +1,17 @@ +! interbartolo3.scl +! +Graziano Interbartolo & Paolo Venturino Bach temperament nr.3 (2006) + 12 +! + 256/243 + 193.15686 + 297.71938 + 5/4 + 503.42157 + 45/32 + 696.57843 + 793.97219 + 889.73529 + 1001.46657 + 15/8 + 2/1 diff --git a/scales/ionic.scl b/scales/ionic.scl new file mode 100644 index 0000000..cb67754 --- /dev/null +++ b/scales/ionic.scl @@ -0,0 +1,12 @@ +! ionic.scl +! +Ancient greek Ionic + 7 +! + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 9/5 + 2 diff --git a/scales/iran_diat.scl b/scales/iran_diat.scl new file mode 100644 index 0000000..2cc9fa7 --- /dev/null +++ b/scales/iran_diat.scl @@ -0,0 +1,12 @@ +! iran_diat.scl +! +Iranian Diatonic from Dariush Anooshfar, Safi-a-ddin Armavi's scale from 125 ET + 7 +! + 220.80000 + 441.60000 + 489.60000 + 710.40000 + 931.20000 + 979.20000 + 2/1 diff --git a/scales/iranian pentachord 7-limit.scl b/scales/iranian pentachord 7-limit.scl new file mode 100644 index 0000000..f7dfc29 --- /dev/null +++ b/scales/iranian pentachord 7-limit.scl @@ -0,0 +1,14 @@ +! iranian pentachord 7-limit.scl +! +Iranian pentachord 42:45:48:56:63 + 9 +! + 64/63 + 9/8 + 6/5 + 9/7 + 3/2 + 27/16 + 9/5 + 27/14 + 2/1 diff --git a/scales/iraq.scl b/scales/iraq.scl new file mode 100644 index 0000000..cd061ba --- /dev/null +++ b/scales/iraq.scl @@ -0,0 +1,13 @@ +! iraq.scl +! +Iraq 8-tone scale, Ellis + 8 +! + 394/355 + 8192/6561 + 4/3 + 623/421 + 591/355 + 16/9 + 513/260 + 2/1 diff --git a/scales/irrational.scl b/scales/irrational.scl new file mode 100644 index 0000000..e53e1b8 --- /dev/null +++ b/scales/irrational.scl @@ -0,0 +1,24 @@ +! irrational.scl +! +Irrational scale: generator is Phi, period is Pi + 19 +! + 88.10678 + 201.86077 + 315.61476 + 403.72154 + 517.47553 + 605.58231 + 719.33630 + 833.09030 + 921.19708 + 1034.95107 + 1148.70506 + 1236.81184 + 1350.56583 + 1464.31982 + 1552.42660 + 1666.18059 + 1754.28737 + 1868.04136 + 1981.79536 diff --git a/scales/isfahan_5.scl b/scales/isfahan_5.scl new file mode 100644 index 0000000..a4edaf7 --- /dev/null +++ b/scales/isfahan_5.scl @@ -0,0 +1,10 @@ +! isfahan_5.scl +! +Isfahan (IG #2, DF #8), from Rouanet + 5 +! + 13/12 + 7/6 + 5/4 + 4/3 + 2/1 diff --git a/scales/islamic.scl b/scales/islamic.scl new file mode 100644 index 0000000..de0fc09 --- /dev/null +++ b/scales/islamic.scl @@ -0,0 +1,10 @@ +! islamic.scl +! +Islamic Genus (DF#7), from Rouanet + 5 +! + 13/12 + 7/6 + 91/72 + 4/3 + 2/1 diff --git a/scales/italian.scl b/scales/italian.scl new file mode 100644 index 0000000..5fd485e --- /dev/null +++ b/scales/italian.scl @@ -0,0 +1,17 @@ +! italian.scl +! +Italian organ temperament, G.C. Klop (1974), 1/12 P.comma, also d'Alembert/Rousseau (1752/67) + 12 +! + 84.35999 + 192.18000 + 288.26999 + 8192/6561 + 496.09000 + 584.35999 + 696.09000 + 784.35999 + 888.26999 + 992.18000 + 1084.35999 + 2/1 diff --git a/scales/iter1.scl b/scales/iter1.scl new file mode 100644 index 0000000..fc94b09 --- /dev/null +++ b/scales/iter1.scl @@ -0,0 +1,11 @@ +! iter1.scl +! +McLaren style, IE= 2.414214, PD=5, SD=0 + 6 +! + 94/93 + 39/38 + 214/201 + 57/49 + 85/59 + 1525.86396 diff --git a/scales/iter10.scl b/scales/iter10.scl new file mode 100644 index 0000000..beedce8 --- /dev/null +++ b/scales/iter10.scl @@ -0,0 +1,22 @@ +! iter10.scl +! +Iterated 5/2 scale, IE=5/2, PD=4, SD=3 + 17 +! + 359/339 + 194/173 + 91/80 + 607/526 + 19/16 + 127/101 + 339/262 + 241/181 + 141/100 + 117/74 + 72/43 + 211/119 + 167/84 + 178/87 + 40/19 + 136/61 + 5/2 diff --git a/scales/iter11.scl b/scales/iter11.scl new file mode 100644 index 0000000..4b8d2e8 --- /dev/null +++ b/scales/iter11.scl @@ -0,0 +1,15 @@ +! iter11.scl +! +Binary 5/3 Scale #2 + 10 +! + 110.54484 + 221.08968 + 276.36210 + 331.63452 + 442.17936 + 552.72420 + 663.26903 + 718.54145 + 773.81387 + 5/3 diff --git a/scales/iter12.scl b/scales/iter12.scl new file mode 100644 index 0000000..7982b43 --- /dev/null +++ b/scales/iter12.scl @@ -0,0 +1,14 @@ +! iter12.scl +! +Binary 5/3 Scale #4 + 9 +! + 221.08968 + 276.36210 + 331.63452 + 442.17936 + 552.72420 + 663.26903 + 718.54145 + 773.81387 + 5/3 diff --git a/scales/iter13.scl b/scales/iter13.scl new file mode 100644 index 0000000..05bfb5e --- /dev/null +++ b/scales/iter13.scl @@ -0,0 +1,10 @@ +! iter13.scl +! +Binary 5/3 Scale #6 + 5 +! + 221.08968 + 442.17936 + 663.26903 + 773.81387 + 5/3 diff --git a/scales/iter14.scl b/scales/iter14.scl new file mode 100644 index 0000000..76b23b2 --- /dev/null +++ b/scales/iter14.scl @@ -0,0 +1,16 @@ +! iter14.scl +! +Binary Divided 3/1 Scale #2 + 11 +! + 118.87219 + 237.74438 + 475.48875 + 594.36094 + 713.23313 + 950.97750 + 1188.72188 + 1426.46625 + 1545.33844 + 1664.21063 + 3/1 diff --git a/scales/iter15.scl b/scales/iter15.scl new file mode 100644 index 0000000..5e53a79 --- /dev/null +++ b/scales/iter15.scl @@ -0,0 +1,15 @@ +! iter15.scl +! +Binary Division Scale + 10 +! + 150.00000 + 300.00000 + 375.00000 + 450.00000 + 600.00000 + 750.00000 + 900.00000 + 975.00000 + 1050.00000 + 2/1 diff --git a/scales/iter16.scl b/scales/iter16.scl new file mode 100644 index 0000000..3ef5f71 --- /dev/null +++ b/scales/iter16.scl @@ -0,0 +1,16 @@ +! iter16.scl +! +Binary Division Scale 4+2 + 11 +! + 75.00000 + 150.00000 + 300.00000 + 375.00000 + 450.00000 + 600.00000 + 750.00000 + 900.00000 + 975.00000 + 1050.00000 + 2/1 diff --git a/scales/iter17.scl b/scales/iter17.scl new file mode 100644 index 0000000..d9d9381 --- /dev/null +++ b/scales/iter17.scl @@ -0,0 +1,22 @@ +! iter17.scl +! +Binary E Scale #2 + 17 +! + 108.20213 + 216.40426 + 243.45479 + 270.50532 + 324.60638 + 432.80851 + 486.90958 + 541.01064 + 649.21277 + 865.61702 + 973.81915 + 1082.02128 + 1298.42554 + 1352.52660 + 1406.62766 + 1514.82979 + 1731.23405 diff --git a/scales/iter18.scl b/scales/iter18.scl new file mode 100644 index 0000000..6d5e2f5 --- /dev/null +++ b/scales/iter18.scl @@ -0,0 +1,15 @@ +! iter18.scl +! +Binary E Scale #4 + 10 +! + 216.40426 + 432.80851 + 541.01064 + 649.21277 + 865.61702 + 1082.02128 + 1298.42554 + 1406.62766 + 1514.82979 + 1731.23405 diff --git a/scales/iter19.scl b/scales/iter19.scl new file mode 100644 index 0000000..8a3baf5 --- /dev/null +++ b/scales/iter19.scl @@ -0,0 +1,21 @@ +! iter19.scl +! +Binary Kidjel Ratio scale #2, IE=16/3 + 16 +! + 362.25562 + 407.53758 + 452.81953 + 543.38344 + 724.51125 + 815.07516 + 905.63906 + 1086.76687 + 1449.02250 + 1630.15031 + 1811.27812 + 2173.53375 + 2264.09766 + 2354.66156 + 2535.78937 + 16/3 diff --git a/scales/iter2.scl b/scales/iter2.scl new file mode 100644 index 0000000..526f32f --- /dev/null +++ b/scales/iter2.scl @@ -0,0 +1,13 @@ +! iter2.scl +! +Iterated 1 + SQR(2) Scale, IE=2.414214, PD=5, SD=1 + 8 +! + 94/93 + 39/38 + 214/201 + 57/49 + 85/59 + 157/88 + 91/45 + 169/70 diff --git a/scales/iter20.scl b/scales/iter20.scl new file mode 100644 index 0000000..7d69371 --- /dev/null +++ b/scales/iter20.scl @@ -0,0 +1,16 @@ +! iter20.scl +! +Binary PHI Scale #2 + 11 +! + 52.06814 + 104.13629 + 208.27258 + 260.34072 + 312.40886 + 416.54515 + 520.68144 + 624.81773 + 676.88587 + 728.95401 + 833.09030 diff --git a/scales/iter21.scl b/scales/iter21.scl new file mode 100644 index 0000000..14f5cef --- /dev/null +++ b/scales/iter21.scl @@ -0,0 +1,17 @@ +! iter21.scl +! +Binary PHI Scale 5+2 #2 + 12 +! + 26.03407 + 52.06814 + 104.13629 + 208.27258 + 260.34072 + 312.40886 + 416.54515 + 520.68144 + 624.81773 + 676.88587 + 728.95401 + 833.09030 diff --git a/scales/iter22.scl b/scales/iter22.scl new file mode 100644 index 0000000..3117726 --- /dev/null +++ b/scales/iter22.scl @@ -0,0 +1,21 @@ +! iter22.scl +! +Binary PI Scale #2 + 16 +! + 247.72442 + 278.68997 + 309.65552 + 371.58663 + 495.44884 + 557.37994 + 619.31105 + 743.17326 + 990.89768 + 1114.75989 + 1238.62210 + 1486.34652 + 1548.27762 + 1610.20873 + 1734.07094 + 1981.79536 diff --git a/scales/iter23.scl b/scales/iter23.scl new file mode 100644 index 0000000..2364ca0 --- /dev/null +++ b/scales/iter23.scl @@ -0,0 +1,21 @@ +! iter23.scl +! +Binary SQR(3) Scale #2 + 16 +! + 118.87219 + 133.73121 + 148.59023 + 178.30828 + 237.74437 + 267.46242 + 297.18047 + 356.61656 + 475.48875 + 534.92484 + 594.36094 + 713.23312 + 742.95117 + 772.66922 + 832.10531 + 950.97750 diff --git a/scales/iter24.scl b/scales/iter24.scl new file mode 100644 index 0000000..153db88 --- /dev/null +++ b/scales/iter24.scl @@ -0,0 +1,21 @@ +! iter24.scl +! +Binary SQR(5) Scale #2 + 16 +! + 174.14461 + 195.91268 + 217.68076 + 261.21691 + 348.28921 + 391.82537 + 435.36152 + 522.43382 + 696.57843 + 783.65073 + 870.72304 + 1044.86764 + 1088.40379 + 1131.93995 + 1219.01225 + 1393.15686 diff --git a/scales/iter25.scl b/scales/iter25.scl new file mode 100644 index 0000000..75aaec5 --- /dev/null +++ b/scales/iter25.scl @@ -0,0 +1,21 @@ +! iter25.scl +! +Binary SQR(7) Scale #2 + 16 +! + 210.55162 + 236.87057 + 263.18952 + 315.82743 + 421.10324 + 473.74114 + 526.37905 + 631.65486 + 842.20648 + 947.48229 + 1052.75810 + 1263.30971 + 1315.94762 + 1368.58552 + 1473.86133 + 1684.41295 diff --git a/scales/iter26.scl b/scales/iter26.scl new file mode 100644 index 0000000..e39bfcc --- /dev/null +++ b/scales/iter26.scl @@ -0,0 +1,22 @@ +! iter26.scl +! +E Scale + 17 +! + 54/53 + 41/39 + 19/18 + 50/47 + 51/47 + 63/55 + 22/19 + 13/11 + 91/73 + 13/9 + 76/51 + 74/47 + 31/17 + 80/43 + 25/13 + 19/9 + 87/32 diff --git a/scales/iter27.scl b/scales/iter27.scl new file mode 100644 index 0000000..6ebdac1 --- /dev/null +++ b/scales/iter27.scl @@ -0,0 +1,21 @@ +! iter27.scl +! +Iterated Kidjel Ratio Scale, IE=16/3, PD=3, SD=3 + 16 +! + 91/90 + 89/88 + 79/78 + 101/99 + 35/33 + 426/401 + 61/57 + 89/80 + 219/160 + 424/307 + 201/140 + 136/77 + 137/77 + 101/55 + 113/52 + 16/3 diff --git a/scales/iter28.scl b/scales/iter28.scl new file mode 100644 index 0000000..53360d5 --- /dev/null +++ b/scales/iter28.scl @@ -0,0 +1,10 @@ +! iter28.scl +! +McLaren 3-Division Scale + 5 +! + 74/73 + 226/217 + 87/77 + 75/52 + 3/1 diff --git a/scales/iter29.scl b/scales/iter29.scl new file mode 100644 index 0000000..162b333 --- /dev/null +++ b/scales/iter29.scl @@ -0,0 +1,12 @@ +! iter29.scl +! +Iterated Binary Division of the Octave, IE=2, PD=6, SD=0 + 7 +! + 93/92 + 140/137 + 118/113 + 217/199 + 44/37 + 99/70 + 2/1 diff --git a/scales/iter3.scl b/scales/iter3.scl new file mode 100644 index 0000000..549105a --- /dev/null +++ b/scales/iter3.scl @@ -0,0 +1,15 @@ +! iter3.scl +! +Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=3, SD=2 + 10 +! + 126/113 + 137/114 + 152/121 + 79/61 + 664/487 + 169/115 + 82/53 + 193/121 + 158/97 + 27/16 diff --git a/scales/iter30.scl b/scales/iter30.scl new file mode 100644 index 0000000..9726d6d --- /dev/null +++ b/scales/iter30.scl @@ -0,0 +1,11 @@ +! iter30.scl +! +Iterated E-scale, IE= 2.71828, PD=5, SD=0 + 6 +! + 148/147 + 55/54 + 103/98 + 79/69 + 536/371 + 193/71 diff --git a/scales/iter31.scl b/scales/iter31.scl new file mode 100644 index 0000000..bbeb5d9 --- /dev/null +++ b/scales/iter31.scl @@ -0,0 +1,9 @@ +! iter31.scl +! +Iterated Kidjel Ratio Scale, IE=16/3, PD=3, SD=0 + 4 +! + 91/90 + 35/33 + 219/160 + 16/3 diff --git a/scales/iter32.scl b/scales/iter32.scl new file mode 100644 index 0000000..87e7e90 --- /dev/null +++ b/scales/iter32.scl @@ -0,0 +1,14 @@ +! iter32.scl +! +Iterated PHI scale, IE= 1.61803339, PD=8, SD=0 + 9 +! + 98/97 + 61/60 + 151/147 + 165/158 + 59/55 + 149/133 + 131/109 + 206/153 + 144/89 diff --git a/scales/iter33.scl b/scales/iter33.scl new file mode 100644 index 0000000..d7688ff --- /dev/null +++ b/scales/iter33.scl @@ -0,0 +1,10 @@ +! iter33.scl +! +Iterated PI Scale, IE= 3.14159, PD=4, SD=0 + 5 +! + 86/85 + 138/133 + 137/122 + 131/91 + 311/99 diff --git a/scales/iter34.scl b/scales/iter34.scl new file mode 100644 index 0000000..e690f4b --- /dev/null +++ b/scales/iter34.scl @@ -0,0 +1,14 @@ +! iter34.scl +! +Iterated SQR(3) scale, IE= 1.73205, PD=8, SD=0 + 9 +! + 147/146 + 86/85 + 149/146 + 202/195 + 135/127 + 279/251 + 239/199 + 92/67 + 97/56 diff --git a/scales/iter35.scl b/scales/iter35.scl new file mode 100644 index 0000000..c021e25 --- /dev/null +++ b/scales/iter35.scl @@ -0,0 +1,12 @@ +! iter35.scl +! +Iterated SQR(5) scale, IE= 2.23607, PD=6, SD=0 + 7 +! + 155/154 + 70/69 + 158/153 + 72/67 + 74/63 + 225/157 + 161/72 diff --git a/scales/iter36.scl b/scales/iter36.scl new file mode 100644 index 0000000..5ad4067 --- /dev/null +++ b/scales/iter36.scl @@ -0,0 +1,11 @@ +! iter36.scl +! +Iterated SQR(7) scale, IE= 2.64575, PD=5, SD=0 + 6 +! + 133/132 + 51/50 + 176/167 + 131/114 + 13/9 + 127/48 diff --git a/scales/iter37.scl b/scales/iter37.scl new file mode 100644 index 0000000..3cdcbe9 --- /dev/null +++ b/scales/iter37.scl @@ -0,0 +1,15 @@ +! iter37.scl +! +Iterated 3/2 scale, IE=3/2, PD=3, SD=2 + 10 +! + 207.98700 + 311.98000 + 381.30900 + 415.97300 + 467.97000 + 571.96300 + 623.96000 + 658.62400 + 675.95700 + 3/2 diff --git a/scales/iter4.scl b/scales/iter4.scl new file mode 100644 index 0000000..62182e9 --- /dev/null +++ b/scales/iter4.scl @@ -0,0 +1,22 @@ +! iter4.scl +! +Iterated 5/2 scale, IE=5/2, PD=4, SD=3 + 17 +! + 216/211 + 123/116 + 209/196 + 57/53 + 67/61 + 22/19 + 128/109 + 343/286 + 110/87 + 88/61 + 133/89 + 115/73 + 142/79 + 123/67 + 307/162 + 201/98 + 5/2 diff --git a/scales/iter5.scl b/scales/iter5.scl new file mode 100644 index 0000000..7aff165 --- /dev/null +++ b/scales/iter5.scl @@ -0,0 +1,15 @@ +! iter5.scl +! +Iterated 5/3 scale, analog of Hexachord, IE=5/3, PD=3, SD=2 + 10 +! + 67/60 + 125/104 + 103/82 + 141/109 + 125/92 + 136/93 + 235/153 + 242/153 + 221/137 + 5/3 diff --git a/scales/iter6.scl b/scales/iter6.scl new file mode 100644 index 0000000..3f411b0 --- /dev/null +++ b/scales/iter6.scl @@ -0,0 +1,16 @@ +! iter6.scl +! +Iterated binary 1+SQR(2) scale, IE= 2.414214, G=2, PD=4, SD=2 + 11 +! + 56/53 + 115/103 + 91/73 + 54/41 + 135/97 + 101/65 + 85/49 + 153/79 + 88/43 + 253/117 + 169/70 diff --git a/scales/iter7.scl b/scales/iter7.scl new file mode 100644 index 0000000..b7342e9 --- /dev/null +++ b/scales/iter7.scl @@ -0,0 +1,15 @@ +! iter7.scl +! +Iterated 27/16 scale, analog of Hexachord, IE=27/16, PD=3, SD=2 + 10 +! + 79/74 + 106/93 + 179/152 + 174/143 + 126/97 + 147/106 + 114/77 + 205/134 + 49/31 + 27/16 diff --git a/scales/iter8.scl b/scales/iter8.scl new file mode 100644 index 0000000..1255c91 --- /dev/null +++ b/scales/iter8.scl @@ -0,0 +1,14 @@ +! iter8.scl +! +Iterated 27/16 scale, analog of Hexachord, IE=27/16, PD=2, SD=2 + 9 +! + 106/93 + 179/152 + 174/143 + 126/97 + 147/106 + 114/77 + 205/134 + 49/31 + 27/16 diff --git a/scales/iter9.scl b/scales/iter9.scl new file mode 100644 index 0000000..d41da56 --- /dev/null +++ b/scales/iter9.scl @@ -0,0 +1,10 @@ +! iter9.scl +! +Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=2, SD=12 + 5 +! + 106/93 + 126/97 + 114/77 + 49/31 + 27/16 diff --git a/scales/ives.scl b/scales/ives.scl new file mode 100644 index 0000000..b68f7e1 --- /dev/null +++ b/scales/ives.scl @@ -0,0 +1,12 @@ +! ives.scl +! +Charles Ives' stretched major scale, "Scrapbook" pp. 108-110 + 7 +! + 250.00000 + 500.00000 + 625.00000 + 875.00000 + 1125.00000 + 1375.00000 + 1500.00000 diff --git a/scales/ives2a.scl b/scales/ives2a.scl new file mode 100644 index 0000000..702a1dd --- /dev/null +++ b/scales/ives2a.scl @@ -0,0 +1,12 @@ +! ives2a.scl +! +Speculation by Joe Monzo for Ives' other stretched scale + 7 +! + 258.33333 + 516.66667 + 645.83333 + 904.16667 + 1162.50000 + 1420.83333 + 1550.00000 diff --git a/scales/ives2b.scl b/scales/ives2b.scl new file mode 100644 index 0000000..aa540fd --- /dev/null +++ b/scales/ives2b.scl @@ -0,0 +1,12 @@ +! ives2b.scl +! +Alt. speculation by Joe Monzo for Ives' other stretched scale + 7 +! + 241.66667 + 483.33333 + 604.16667 + 845.83333 + 1087.50000 + 1329.16667 + 1450.00000 diff --git a/scales/janke1.scl b/scales/janke1.scl new file mode 100644 index 0000000..bbd69e6 --- /dev/null +++ b/scales/janke1.scl @@ -0,0 +1,17 @@ +! janke1.scl +! +Reiner Janke, Temperatur I (1998) + 12 +! + 95.00000 + 198.00000 + 297.00000 + 396.00000 + 499.00000 + 594.00000 + 699.00000 + 796.00000 + 897.00000 + 998.00000 + 1095.00000 + 2/1 diff --git a/scales/janke2.scl b/scales/janke2.scl new file mode 100644 index 0000000..fcc583a --- /dev/null +++ b/scales/janke2.scl @@ -0,0 +1,17 @@ +! janke2.scl +! +Reiner Janke, Temperatur II + 12 +! + 95.00000 + 196.00000 + 297.00000 + 394.00000 + 499.00000 + 594.00000 + 698.00000 + 796.00000 + 895.00000 + 998.00000 + 1093.00000 + 2/1 diff --git a/scales/janke3.scl b/scales/janke3.scl new file mode 100644 index 0000000..088638e --- /dev/null +++ b/scales/janke3.scl @@ -0,0 +1,17 @@ +! janke3.scl +! +Reiner Janke, Temperatur III + 12 +! + 94.00000 + 196.00000 + 296.00000 + 393.00000 + 499.00000 + 593.00000 + 698.00000 + 795.00000 + 894.00000 + 998.00000 + 1092.00000 + 2/1 diff --git a/scales/janke4.scl b/scales/janke4.scl new file mode 100644 index 0000000..1f11f14 --- /dev/null +++ b/scales/janke4.scl @@ -0,0 +1,17 @@ +! janke4.scl +! +Reiner Janke, Temperatur IV + 12 +! + 92.00000 + 196.00000 + 298.00000 + 392.00000 + 500.00000 + 591.00000 + 698.00000 + 794.00000 + 894.00000 + 999.00000 + 1091.00000 + 2/1 diff --git a/scales/janke5.scl b/scales/janke5.scl new file mode 100644 index 0000000..dbc19ef --- /dev/null +++ b/scales/janke5.scl @@ -0,0 +1,17 @@ +! janke5.scl +! +Reiner Janke, Temperatur V + 12 +! + 90.00000 + 196.00000 + 294.00000 + 392.00000 + 498.00000 + 588.00000 + 698.00000 + 792.00000 + 894.00000 + 996.00000 + 1090.00000 + 2/1 diff --git a/scales/janke6.scl b/scales/janke6.scl new file mode 100644 index 0000000..5cf9a59 --- /dev/null +++ b/scales/janke6.scl @@ -0,0 +1,17 @@ +! janke6.scl +! +Reiner Janke, Temperatur VI + 12 +! + 91.00000 + 196.00000 + 297.00000 + 392.00000 + 501.00000 + 589.00000 + 698.00000 + 794.00000 + 894.00000 + 999.00000 + 1090.00000 + 2/1 diff --git a/scales/janke7.scl b/scales/janke7.scl new file mode 100644 index 0000000..22c8d2e --- /dev/null +++ b/scales/janke7.scl @@ -0,0 +1,17 @@ +! janke7.scl +! +Reiner Janke, Temperatur VII + 12 +! + 89.00000 + 195.00000 + 300.00000 + 391.00000 + 502.00000 + 586.00000 + 698.00000 + 793.00000 + 893.00000 + 1004.00000 + 1089.00000 + 2/1 diff --git a/scales/jemblung1.scl b/scales/jemblung1.scl new file mode 100644 index 0000000..b52f68c --- /dev/null +++ b/scales/jemblung1.scl @@ -0,0 +1,10 @@ +! jemblung1.scl +! +Scale of bamboo gamelan jemblung from Kalijering, slendro-like. 1/1=590 Hz + 5 +! + 230.44036 + 442.89125 + 684.25910 + 947.73875 + 2/1 diff --git a/scales/jemblung2.scl b/scales/jemblung2.scl new file mode 100644 index 0000000..b7d6fd3 --- /dev/null +++ b/scales/jemblung2.scl @@ -0,0 +1,10 @@ +! jemblung2.scl +! +Bamboo gamelan jemblung at Royal Batavia Society. 1/1=504 Hz + 5 +! + 237.17491 + 528.68711 + 697.36895 + 945.11000 + 2/1 diff --git a/scales/ji_10coh.scl b/scales/ji_10coh.scl new file mode 100644 index 0000000..914795f --- /dev/null +++ b/scales/ji_10coh.scl @@ -0,0 +1,15 @@ +! ji_10coh.scl +! +Differentially coherent 10-tone scale with subharmonic 48 + 10 +! + 13/12 + 55/48 + 5/4 + 4/3 + 17/12 + 3/2 + 5/3 + 7/4 + 89/48 + 2/1 diff --git a/scales/ji_10coh2.scl b/scales/ji_10coh2.scl new file mode 100644 index 0000000..5459ece --- /dev/null +++ b/scales/ji_10coh2.scl @@ -0,0 +1,15 @@ +! ji_10coh2.scl +! +Other diff. coherent 10-tone scale with subharmonic 30 + 10 +! + 7/6 + 6/5 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 11/6 + 2/1 diff --git a/scales/ji_10i4.scl b/scales/ji_10i4.scl new file mode 100644 index 0000000..e7a04b5 --- /dev/null +++ b/scales/ji_10i4.scl @@ -0,0 +1,15 @@ +! ji_10i4.scl +! +7-limit scale with mean variety four + 10 +! + 16/15 + 8/7 + 128/105 + 4/3 + 10/7 + 32/21 + 8/5 + 128/75 + 64/35 + 2/1 diff --git a/scales/ji_11.scl b/scales/ji_11.scl new file mode 100644 index 0000000..fe5e627 --- /dev/null +++ b/scales/ji_11.scl @@ -0,0 +1,16 @@ +! ji_11.scl +! +3 and 7 prime rational interpretation of 11-tET. OdC 2000 + 11 +! + 343/324 + 9/8 + 98/81 + 9/7 + 49/36 + 72/49 + 14/9 + 81/49 + 16/9 + 648/343 + 2/1 diff --git a/scales/ji_12.scl b/scales/ji_12.scl new file mode 100644 index 0000000..754494f --- /dev/null +++ b/scales/ji_12.scl @@ -0,0 +1,17 @@ +! ji_12.scl +! +Basic JI with 7-limit tritone. Robert Rich: Geometry + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/ji_12a.scl b/scales/ji_12a.scl new file mode 100644 index 0000000..a5a5e90 --- /dev/null +++ b/scales/ji_12a.scl @@ -0,0 +1,17 @@ +! ji_12a.scl +! +7-limit 12-tone scale + 12 +! + 16/15 + 9/8 + 7/6 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/ji_12b.scl b/scales/ji_12b.scl new file mode 100644 index 0000000..d5cafd8 --- /dev/null +++ b/scales/ji_12b.scl @@ -0,0 +1,17 @@ +! ji_12b.scl +! +alternate 7-limit 12-tone scale + 12 +! + 25/24 + 10/9 + 7/6 + 5/4 + 21/16 + 7/5 + 3/2 + 8/5 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/ji_12coh.scl b/scales/ji_12coh.scl new file mode 100644 index 0000000..7b02915 --- /dev/null +++ b/scales/ji_12coh.scl @@ -0,0 +1,17 @@ +! ji_12coh.scl +! +Differentially coherent 12-tone scale with subharmonic 60 + 12 +! + 16/15 + 67/60 + 6/5 + 19/15 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 53/30 + 28/15 + 2/1 diff --git a/scales/ji_13.scl b/scales/ji_13.scl new file mode 100644 index 0000000..fe22eff --- /dev/null +++ b/scales/ji_13.scl @@ -0,0 +1,18 @@ +! ji_13.scl +! +5-limit 12-tone symmetrical scale with two tritones + 13 +! + 16/15 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 64/45 + 3/2 + 8/5 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/ji_15coh.scl b/scales/ji_15coh.scl new file mode 100644 index 0000000..7489551 --- /dev/null +++ b/scales/ji_15coh.scl @@ -0,0 +1,20 @@ +! ji_15coh.scl +! +Differentially coherent 15-tone scale with subharmonic 88 + 15 +! + 93/88 + 12/11 + 101/88 + 53/44 + 14/11 + 29/22 + 61/44 + 16/11 + 67/44 + 35/22 + 73/44 + 7/4 + 20/11 + 21/11 + 2/1 diff --git a/scales/ji_16.scl b/scales/ji_16.scl new file mode 100644 index 0000000..55166de --- /dev/null +++ b/scales/ji_16.scl @@ -0,0 +1,21 @@ +! ji_16.scl +! +Mike Battaglia 5-limit 16-tone scale + 16 +! + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/ji_17.scl b/scales/ji_17.scl new file mode 100644 index 0000000..6c73255 --- /dev/null +++ b/scales/ji_17.scl @@ -0,0 +1,22 @@ +! ji_17.scl +! +3 and 7 prime rational interpretation of 17-tET. OdC + 17 +! + 28/27 + 243/224 + 9/8 + 32/27 + 896/729 + 9/7 + 4/3 + 112/81 + 81/56 + 3/2 + 14/9 + 729/448 + 27/16 + 16/9 + 448/243 + 27/14 + 2/1 diff --git a/scales/ji_17a.scl b/scales/ji_17a.scl new file mode 100644 index 0000000..5eb8b78 --- /dev/null +++ b/scales/ji_17a.scl @@ -0,0 +1,22 @@ +! ji_17A.scl +! +3, 5 and 11 prime rational interpretation of 17-tET, OdC + 17 +! + 25/24 + 27/25 + 9/8 + 32/27 + 27/22 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 44/27 + 27/16 + 16/9 + 50/27 + 48/25 + 2/1 diff --git a/scales/ji_17b.scl b/scales/ji_17b.scl new file mode 100644 index 0000000..2fd915c --- /dev/null +++ b/scales/ji_17b.scl @@ -0,0 +1,22 @@ +! ji_17b.scl +! +Alt. 3, 5 and 11 prime rational interpretation of 17-tET, OdC + 17 +! + 25/24 + 12/11 + 9/8 + 32/27 + 11/9 + 32/25 + 4/3 + 11/8 + 16/11 + 3/2 + 25/16 + 18/11 + 27/16 + 16/9 + 11/6 + 48/25 + 2/1 diff --git a/scales/ji_18.scl b/scales/ji_18.scl new file mode 100644 index 0000000..48b0bc7 --- /dev/null +++ b/scales/ji_18.scl @@ -0,0 +1,23 @@ +! ji_18.scl +! +11-limit approximation of 18-tET + 18 +! + 80/77 + 27/25 + 55/49 + 7/6 + 40/33 + 63/50 + 55/42 + 49/36 + 99/70 + 72/49 + 55/36 + 100/63 + 33/20 + 12/7 + 98/55 + 50/27 + 77/40 + 2/1 diff --git a/scales/ji_19.scl b/scales/ji_19.scl new file mode 100644 index 0000000..17ef75a --- /dev/null +++ b/scales/ji_19.scl @@ -0,0 +1,24 @@ +! ji_19.scl +! +5-limit 19-tone scale + 19 +! + 25/24 + 135/128 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 27/20 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 9/5 + 15/8 + 2/1 diff --git a/scales/ji_20.scl b/scales/ji_20.scl new file mode 100644 index 0000000..73e377a --- /dev/null +++ b/scales/ji_20.scl @@ -0,0 +1,25 @@ +! ji_20.scl +! +3 and 7 prime rational interpretation of 20-tET. OdC + 20 +! + 28/27 + 2187/2048 + 54/49 + 8/7 + 32/27 + 896/729 + 81/64 + 4/3 + 49/36 + 729/512 + 72/49 + 3/2 + 128/81 + 729/448 + 27/16 + 7/4 + 49/27 + 4096/2187 + 27/14 + 2/1 diff --git a/scales/ji_21.scl b/scales/ji_21.scl new file mode 100644 index 0000000..edc89bc --- /dev/null +++ b/scales/ji_21.scl @@ -0,0 +1,26 @@ +! ji_21.scl +! +7-limit 21-tone just scale, Op de Coul, 2001 + 21 +! + 28/27 + 16/15 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 27/14 + 2/1 diff --git a/scales/ji_22.scl b/scales/ji_22.scl new file mode 100644 index 0000000..b8eb7d7 --- /dev/null +++ b/scales/ji_22.scl @@ -0,0 +1,27 @@ +! ji_22.scl +! +5-limit 22-tone scale (Zarlino?) + 22 +! + 25/24 + 16/15 + 27/25 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 125/96 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 9/5 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/ji_29.scl b/scales/ji_29.scl new file mode 100644 index 0000000..37f82f8 --- /dev/null +++ b/scales/ji_29.scl @@ -0,0 +1,34 @@ +! ji_29.scl +! +3,5,11-prime rational interpretation of 29-tET, OdC + 29 +! + 128/125 + 256/243 + 27/25 + 11/10 + 9/8 + 144/125 + 32/27 + 40/33 + 99/80 + 81/64 + 125/96 + 4/3 + 15/11 + 45/32 + 64/45 + 22/15 + 3/2 + 192/125 + 128/81 + 160/99 + 33/20 + 27/16 + 125/72 + 16/9 + 20/11 + 50/27 + 243/128 + 125/64 + 2/1 diff --git a/scales/ji_30.scl b/scales/ji_30.scl new file mode 100644 index 0000000..e8a9a3b --- /dev/null +++ b/scales/ji_30.scl @@ -0,0 +1,35 @@ +! ji_30.scl +! +11-limit rational interpretation of 30-tET + 30 +! + 45/44 + 21/20 + 15/14 + 35/32 + 9/8 + 55/48 + 33/28 + 6/5 + 315/256 + 63/50 + 9/7 + 675/512 + 27/20 + 2048/1485 + 99/70 + 1485/1024 + 40/27 + 1024/675 + 14/9 + 100/63 + 512/315 + 5/3 + 56/33 + 96/55 + 16/9 + 64/35 + 28/15 + 40/21 + 88/45 + 2/1 diff --git a/scales/ji_31.scl b/scales/ji_31.scl new file mode 100644 index 0000000..cd22c78 --- /dev/null +++ b/scales/ji_31.scl @@ -0,0 +1,36 @@ +! ji_31.scl +! +A just 7-limit 31-tone scale + 31 +! + 128/125 + 25/24 + 16/15 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 128/105 + 5/4 + 32/25 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 25/16 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 16/9 + 64/35 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/ji_5coh.scl b/scales/ji_5coh.scl new file mode 100644 index 0000000..995cdaa --- /dev/null +++ b/scales/ji_5coh.scl @@ -0,0 +1,10 @@ +! ji_5coh.scl +! +Differential fully coherent pentatonic scale + 5 +! + 7/6 + 4/3 + 35/24 + 41/24 + 2/1 diff --git a/scales/ji_7.scl b/scales/ji_7.scl new file mode 100644 index 0000000..b059cd2 --- /dev/null +++ b/scales/ji_7.scl @@ -0,0 +1,12 @@ +! ji_7.scl +! +7-limit rational interpretation of 7-tET. OdC + 7 +! + 10/9 + 128/105 + 4/3 + 3/2 + 105/64 + 9/5 + 2/1 diff --git a/scales/ji_7a.scl b/scales/ji_7a.scl new file mode 100644 index 0000000..094c155 --- /dev/null +++ b/scales/ji_7a.scl @@ -0,0 +1,12 @@ +! ji_7a.scl +! +Superparticular approximation to 7-tET. Op de Coul, 1998 + 7 +! + 11/10 + 11/9 + 4/3 + 3/2 + 18/11 + 9/5 + 2/1 diff --git a/scales/ji_8coh.scl b/scales/ji_8coh.scl new file mode 100644 index 0000000..03333fb --- /dev/null +++ b/scales/ji_8coh.scl @@ -0,0 +1,13 @@ +! ji_8coh.scl +! +Differentially coherent 8-tone scale with subharmonic 40 + 8 +! + 43/40 + 6/5 + 51/40 + 7/5 + 31/20 + 67/40 + 73/40 + 2/1 diff --git a/scales/ji_9coh.scl b/scales/ji_9coh.scl new file mode 100644 index 0000000..3e0c54b --- /dev/null +++ b/scales/ji_9coh.scl @@ -0,0 +1,14 @@ +! ji_9coh.scl +! +Differentially coherent 9-tone scale with subharmonic 30 + 9 +! + 16/15 + 7/6 + 19/15 + 41/30 + 22/15 + 8/5 + 26/15 + 28/15 + 2/1 diff --git a/scales/jioct12.scl b/scales/jioct12.scl new file mode 100644 index 0000000..2713d40 --- /dev/null +++ b/scales/jioct12.scl @@ -0,0 +1,17 @@ +! jioct12.scl +! +12-tone JI version of Messiaen's octatonic scale, Erlich & Parzek + 12 +! + 25/24 + 27/25 + 125/108 + 6/5 + 5/4 + 25/18 + 36/25 + 3/2 + 5/3 + 125/72 + 9/5 + 2/1 diff --git a/scales/jira1.scl b/scales/jira1.scl new file mode 100644 index 0000000..edc69f9 --- /dev/null +++ b/scales/jira1.scl @@ -0,0 +1,17 @@ +! jira1.scl +! +Martin Jira, closed temperament (2000) + 12 +! + 94.13500 + 196.09000 + 296.09000 + 392.18000 + 4/3 + 594.13500 + 698.04500 + 794.13500 + 894.13500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/jira2.scl b/scales/jira2.scl new file mode 100644 index 0000000..0970625 --- /dev/null +++ b/scales/jira2.scl @@ -0,0 +1,17 @@ +! jira2.scl +! +Martin Jira, open temperament (2000) + 12 +! + 88.26999 + 196.09000 + 32/27 + 392.18000 + 4/3 + 592.18000 + 698.04500 + 790.22500 + 894.13500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/jobin-bach.scl b/scales/jobin-bach.scl new file mode 100644 index 0000000..05c7b47 --- /dev/null +++ b/scales/jobin-bach.scl @@ -0,0 +1,17 @@ +! jobin-bach.scl +! +Emile Jobin, WTC temperament after Bach's signet + 12 +! + 86.80214 + 193.15686 + 292.42357 + 5/4 + 4/3 + 584.84714 + 696.57843 + 788.75714 + 889.73529 + 994.37857 + 1082.89214 + 2/1 diff --git a/scales/johnson-secor_rwt.scl b/scales/johnson-secor_rwt.scl new file mode 100644 index 0000000..aa409ae --- /dev/null +++ b/scales/johnson-secor_rwt.scl @@ -0,0 +1,17 @@ +! johnson-secor_rwt.scl +! +Johnson/Secor proportional-beating well-temperament with five 24/19s. + 12 +! + 19/18 + 3629/3240 + 32/27 + 361/288 + 4/3 + 38/27 + 431/288 + 19/12 + 2413/1440 + 16/9 + 152/81 + 2/1 diff --git a/scales/johnson_44.scl b/scales/johnson_44.scl new file mode 100644 index 0000000..3e4b519 --- /dev/null +++ b/scales/johnson_44.scl @@ -0,0 +1,49 @@ +! johnson_44.scl +! +Aaron Johnson, 44-tET approximation + 44 +! + 64/63 + 4096/3969 + 262144/250047 + 16777216/15752961 + 1073741824/992436543 + 163.58455 + 190.84864 + 218.11273 + 245.37683 + 272.64092 + 300.28497 + 327.54906 + 354.81315 + 382.07725 + 409.34134 + 436.60543 + 463.86952 + 491.13361 + 518.39770 + 545.66180 + 572.92589 + 600.18998 + 627.45407 + 654.71816 + 681.98226 + 709.24635 + 736.51044 + 763.77453 + 791.03862 + 818.30271 + 845.56681 + 872.83090 + 900.09499 + 927.35908 + 954.62317 + 981.88727 + 1009.15136 + 1036.41545 + 992436543/536870912 + 15752961/8388608 + 250047/131072 + 3969/2048 + 63/32 + 2/1 diff --git a/scales/johnson_7.scl b/scales/johnson_7.scl new file mode 100644 index 0000000..b37acb9 --- /dev/null +++ b/scales/johnson_7.scl @@ -0,0 +1,12 @@ +! johnson_7.scl +! +Aaron Johnson, 7-tET approximation + 7 +! + 1157625/1048576 + 342.56773 + 11025/8192 + 685.47311 + 105/64 + 121550625/67108864 + 2/1 diff --git a/scales/johnson_eb.scl b/scales/johnson_eb.scl new file mode 100644 index 0000000..a624949 --- /dev/null +++ b/scales/johnson_eb.scl @@ -0,0 +1,17 @@ +! johnson_eb.scl +! +Aaron Johnson, "1/4-comma tempered" equal beating C-G-D-A-E plus just thirds + 12 +! + 71/68 + 19/17 + 508/425 + 5/4 + 568/425 + 95/68 + 127/85 + 25/16 + 142/85 + 152/85 + 127/68 + 2/1 diff --git a/scales/johnson_ratwell.scl b/scales/johnson_ratwell.scl new file mode 100644 index 0000000..1adce7d --- /dev/null +++ b/scales/johnson_ratwell.scl @@ -0,0 +1,17 @@ +! johnson_ratwell.scl +! +Aaron Johnson, rational well-temperament with five 24/19's + 12 +! + 19/18 + 103/92 + 32/27 + 361/288 + 4/3 + 38/27 + 208/139 + 19/12 + 129/77 + 16/9 + 152/81 + 2/1 diff --git a/scales/johnson_temp.scl b/scales/johnson_temp.scl new file mode 100644 index 0000000..276de70 --- /dev/null +++ b/scales/johnson_temp.scl @@ -0,0 +1,17 @@ +! johnson_temp.scl +! +Aaron Johnson, temperament with just 5/4, 24/19 and 19/15 + 12 +! + 89.64491 + 193.15750 + 293.06616 + 5/4 + 497.68872 + 588.53494 + 696.57875 + 30/19 + 889.73625 + 995.37744 + 1087.42497 + 2/1 diff --git a/scales/johnston.scl b/scales/johnston.scl new file mode 100644 index 0000000..54a459a --- /dev/null +++ b/scales/johnston.scl @@ -0,0 +1,17 @@ +! johnston.scl +! +Ben Johnston's combined otonal-utonal scale + 12 +! + 135/128 + 9/8 + 135/112 + 5/4 + 11/8 + 45/32 + 3/2 + 135/88 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/johnston_21.scl b/scales/johnston_21.scl new file mode 100644 index 0000000..c9fad3b --- /dev/null +++ b/scales/johnston_21.scl @@ -0,0 +1,26 @@ +! JOHNSTON_21.scl +! +Johnston 21-note just enharmonic scale + 21 +! + 25/24 + 27/25 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 125/96 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 9/5 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/johnston_22.scl b/scales/johnston_22.scl new file mode 100644 index 0000000..5481ae4 --- /dev/null +++ b/scales/johnston_22.scl @@ -0,0 +1,27 @@ +! johnston_22.scl +! +Johnston 22-note scale from end of string quartet nr. 4 + 22 +! + 28/27 + 16/15 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 27/20 + 45/32 + 81/56 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 27/14 + 2/1 diff --git a/scales/johnston_25.scl b/scales/johnston_25.scl new file mode 100644 index 0000000..1b842b8 --- /dev/null +++ b/scales/johnston_25.scl @@ -0,0 +1,30 @@ +! johnston_25.scl +! +Johnston 25-note just enharmonic scale + 25 +! + 25/24 + 135/128 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 81/64 + 32/25 + 4/3 + 27/20 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/johnston_6-qt.scl b/scales/johnston_6-qt.scl new file mode 100644 index 0000000..bba19dd --- /dev/null +++ b/scales/johnston_6-qt.scl @@ -0,0 +1,66 @@ +! johnston_6-qt.scl +! +11-limit complete system from Ben Johnston's "6th Quartet" + 61 +! + 225/224 + 55/54 + 45/44 + 28/27 + 25/24 + 35/33 + 15/14 + 88/81 + 10/9 + 9/8 + 25/22 + 55/48 + 225/196 + 7/6 + 75/64 + 32/27 + 25/21 + 98/81 + 40/33 + 11/9 + 100/81 + 5/4 + 225/176 + 35/27 + 55/42 + 4/3 + 75/56 + 110/81 + 15/11 + 112/81 + 25/18 + 45/32 + 10/7 + 35/24 + 225/154 + 40/27 + 121/81 + 3/2 + 50/33 + 55/36 + 14/9 + 25/16 + 128/81 + 45/28 + 44/27 + 5/3 + 75/44 + 140/81 + 225/128 + 16/9 + 25/14 + 20/11 + 11/6 + 50/27 + 225/121 + 15/8 + 77/81 + 40/21 + 35/18 + 160/81 + 2/1 diff --git a/scales/johnston_6-qt_row.scl b/scales/johnston_6-qt_row.scl new file mode 100644 index 0000000..951bf4f --- /dev/null +++ b/scales/johnston_6-qt_row.scl @@ -0,0 +1,17 @@ +! johnston_6-qt_row.scl +! +11-limit 'prime row' from Ben Johnston's "6th Quartet" + 12 +! + 25/24 + 10/9 + 75/64 + 5/4 + 75/56 + 25/18 + 55/36 + 25/16 + 5/3 + 75/44 + 15/8 + 35/18 diff --git a/scales/johnston_81.scl b/scales/johnston_81.scl new file mode 100644 index 0000000..68fc595 --- /dev/null +++ b/scales/johnston_81.scl @@ -0,0 +1,86 @@ +! johnston_81.scl +! +Johnston 81-note 5-limit scale of Sonata for Microtonal Piano + 81 +! + 81/80 + 128/125 + 250/243 + 648/625 + 25/24 + 256/243 + 135/128 + 16/15 + 2187/2048 + 27/25 + 2187/2000 + 800/729 + 1125/1024 + 10/9 + 9/8 + 729/640 + 144/125 + 125/108 + 729/625 + 75/64 + 32/27 + 1215/1024 + 6/5 + 243/200 + 625/512 + 100/81 + 5/4 + 81/64 + 32/25 + 162/125 + 125/96 + 320/243 + 4/3 + 27/20 + 512/375 + 2187/1600 + 864/625 + 25/18 + 1024/729 + 45/32 + 64/45 + 729/512 + 36/25 + 729/500 + 375/256 + 40/27 + 3/2 + 243/160 + 192/125 + 125/81 + 972/625 + 25/16 + 128/81 + 405/256 + 8/5 + 81/50 + 625/384 + 6561/4000 + 400/243 + 5/3 + 27/16 + 128/75 + 2187/1280 + 1250/729 + 216/125 + 125/72 + 1280/729 + 225/128 + 16/9 + 3645/2048 + 9/5 + 729/400 + 1875/1024 + 50/27 + 15/8 + 243/128 + 48/25 + 243/125 + 125/64 + 160/81 + 2/1 diff --git a/scales/jonsson1.scl b/scales/jonsson1.scl new file mode 100644 index 0000000..73c76c7 --- /dev/null +++ b/scales/jonsson1.scl @@ -0,0 +1,17 @@ +! jonsson1.scl +! +Magnus Jonsson [1 3 5 7] x [1 3 5 9] cross set (2005) + 12 +! + 35/32 + 9/8 + 5/4 + 21/16 + 45/32 + 3/2 + 25/16 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/jonsson2.scl b/scales/jonsson2.scl new file mode 100644 index 0000000..151c022 --- /dev/null +++ b/scales/jonsson2.scl @@ -0,0 +1,17 @@ +! jonsson2.scl +! +Magnus Jonsson [1 3 5] x [1 3 5 7 11] cross set (2005) + 12 +! + 33/32 + 35/32 + 9/8 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 55/32 + 7/4 + 15/8 + 2/1 diff --git a/scales/jorgensen.scl b/scales/jorgensen.scl new file mode 100644 index 0000000..1fe75f2 --- /dev/null +++ b/scales/jorgensen.scl @@ -0,0 +1,17 @@ +! jorgensen.scl +! +Jorgensen's 5&7 temperament, mix of 7-tET and 5-tET shifted 120 cents + 12 +! + 51.42857 + 171.42857 + 291.42857 + 342.85714 + 514.28571 + 531.42857 + 685.71429 + 771.42857 + 857.14286 + 1011.42857 + 1028.57143 + 2/1 diff --git a/scales/jousse.scl b/scales/jousse.scl new file mode 100644 index 0000000..b62cbe5 --- /dev/null +++ b/scales/jousse.scl @@ -0,0 +1,17 @@ +! jousse.scl +! +Temperament of Jean Jousse (1832) + 12 +! + 98.24626 + 196.99609 + 302.15626 + 394.73713 + 500.26147 + 596.29125 + 698.99527 + 800.20126 + 896.30994 + 1001.62588 + 1094.33625 + 2/1 diff --git a/scales/jousse2.scl b/scales/jousse2.scl new file mode 100644 index 0000000..00531ae --- /dev/null +++ b/scales/jousse2.scl @@ -0,0 +1,17 @@ +! jousse2.scl +! +Jean Jousse's quasi-equal piano temperament, also Becket and Co. plan (1840) + 12 +! + 100.18198 + 199.80564 + 300.21864 + 400.05913 + 500.67839 + 600.71241 + 700.19718 + 800.47804 + 900.19451 + 1000.69580 + 1100.61914 + 2/1 diff --git a/scales/jove41.scl b/scales/jove41.scl new file mode 100644 index 0000000..38a2e8c --- /dev/null +++ b/scales/jove41.scl @@ -0,0 +1,91 @@ +! jove41.scl +Jove[41] 17-limit hobbit in 243-tET, commas 243/242, 441/440, 364/363, 595/594 +41 +! +34.56790 +64.19753 +83.95062 +118.51852 +148.14815 +182.71605 +202.46914 +232.09877 +266.66667 +286.41975 +316.04938 +350.61728 +380.24691 +414.81481 +434.56790 +469.13580 +498.76543 +533.33333 +553.08642 +582.71605 +617.28395 +646.91358 +666.66667 +701.23457 +730.86420 +765.43210 +785.18519 +819.75309 +849.38272 +883.95062 +913.58025 +933.33333 +967.90123 +997.53086 +1017.28395 +1051.85185 +1081.48148 +1116.04938 +1135.80247 +1165.43210 +2/1 +! +! ! prejove41.scl +! Jove[41] transversal +! 41 +! ! +! 45/44 +! 21/20 +! 28/27 +! 15/14 +! 12/11 +! 9/8 +! 10/9 +! 8/7 +! 33/28 +! 7/6 +! 6/5 +! 11/9 +! 56/45 +! 9/7 +! 14/11 +! 21/16 +! 4/3 +! 11/8 +! 15/11 +! 7/5 +! 10/7 +! 22/15 +! 16/11 +! 3/2 +! 32/21 +! 11/7 +! 14/9 +! 45/28 +! 18/11 +! 5/3 +! 12/7 +! 56/33 +! 7/4 +! 9/5 +! 16/9 +! 11/6 +! 28/15 +! 27/14 +! 21/11 +! 49/25 +! 2/1 diff --git a/scales/jubilismic10.scl b/scales/jubilismic10.scl new file mode 100644 index 0000000..3c2e576 --- /dev/null +++ b/scales/jubilismic10.scl @@ -0,0 +1,30 @@ +! jubilismic10.scl +! +Jubilismic[10] (50/49) hobbit minimax tuning +10 +! +101.95500 +222.43019 +377.56981 +498.04500 +600.00000 +701.95500 +822.43019 +977.56981 +1098.04500 +2/1 +! +! ! prejubilismic10.scl +! Jubilismic[10] transversal +! 10 +! ! +! 15/14 +! 8/7 +! 5/4 +! 4/3 +! 7/5 +! 3/2 +! 8/5 +! 7/4 +! 28/15 +! 2/1 diff --git a/scales/julius22.scl b/scales/julius22.scl new file mode 100644 index 0000000..98698d3 --- /dev/null +++ b/scales/julius22.scl @@ -0,0 +1,53 @@ +! julius22.scl +Julius[22] hobbit (176/175&896/891) in POTE tuning +22 +! +59.00334 +104.60191 +163.60524 +209.20382 +286.19428 +313.80572 +390.79618 +436.39476 +495.39809 +540.99666 +600.00000 +659.00334 +704.60191 +763.60524 +809.20382 +886.19428 +913.80572 +990.79618 +1036.39476 +1095.39809 +1140.99666 +2/1 +! +!! prejulius22.scl +! Julius[22] transversal +! 22 +!! +! 28/27 +! 16/15 +! 11/10 +! 9/8 +! 32/27 +! 6/5 +! 5/4 +! 9/7 +! 4/3 +! 15/11 +! 45/32 +! 22/15 +! 3/2 +! 14/9 +! 8/5 +! 5/3 +! 27/16 +! 16/9 +! 20/11 +! 15/8 +! 27/14 +! 2/1 diff --git a/scales/julius24.scl b/scales/julius24.scl new file mode 100644 index 0000000..19fee7d --- /dev/null +++ b/scales/julius24.scl @@ -0,0 +1,57 @@ +! julius24.scl +Julius[24] hobbit (176/175&896/891) in POTE tuning +24 +! +59.00334 +104.60191 +163.60524 +209.20382 +268.20715 +313.80572 +331.79285 +390.79618 +436.39476 +495.39809 +540.99666 +600.00000 +645.59857 +704.60191 +763.60524 +809.20382 +868.20715 +913.80572 +972.80906 +990.79618 +1036.39476 +1095.39809 +1140.99666 +2/1 +! +!! prejulius24.scl +! Julius[24] transversal +! 24 +!! +! 28/27 +! 16/15 +! 11/10 +! 9/8 +! 7/6 +! 6/5 +! 40/33 +! 5/4 +! 9/7 +! 4/3 +! 15/11 +! 45/32 +! 16/11 +! 3/2 +! 14/9 +! 8/5 +! 33/20 +! 27/16 +! 7/4 +! 16/9 +! 20/11 +! 15/8 +! 27/14 +! 2/1 diff --git a/scales/kacapi1.scl b/scales/kacapi1.scl new file mode 100644 index 0000000..fb52bb1 --- /dev/null +++ b/scales/kacapi1.scl @@ -0,0 +1,10 @@ +! kacapi1.scl +! +kacapi indung tuning, Pelog by Uking Sukri, mean of 6 tunings, W. van Zanten, 1987 + 5 +! + 412.00000 + 510.00000 + 717.00000 + 1121.00000 + 1218.00000 diff --git a/scales/kacapi10.scl b/scales/kacapi10.scl new file mode 100644 index 0000000..01a58e7 --- /dev/null +++ b/scales/kacapi10.scl @@ -0,0 +1,10 @@ +! kacapi10.scl +! +kacapi indung tuning, Mandalungan by Uking Sukri, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 413.00000 + 617.00000 + 718.00000 + 1122.00000 + 1221.00000 diff --git a/scales/kacapi11.scl b/scales/kacapi11.scl new file mode 100644 index 0000000..92825ac --- /dev/null +++ b/scales/kacapi11.scl @@ -0,0 +1,10 @@ +! kacapi11.scl +! +kacapi indung tuning, Mandalungan by Bakang & others, mean of 2 tunings, W. van Zanten, 1987 + 5 +! + 394.00000 + 598.00000 + 715.00000 + 1119.00000 + 1214.00000 diff --git a/scales/kacapi2.scl b/scales/kacapi2.scl new file mode 100644 index 0000000..d71e1e6 --- /dev/null +++ b/scales/kacapi2.scl @@ -0,0 +1,10 @@ +! kacapi2.scl +! +kacapi indung tuning, Pelog by Bakang & others, mean of 8 tunings, W. van Zanten, 1987 + 5 +! + 402.00000 + 505.00000 + 704.00000 + 1115.00000 + 1208.00000 diff --git a/scales/kacapi3.scl b/scales/kacapi3.scl new file mode 100644 index 0000000..2e02a2d --- /dev/null +++ b/scales/kacapi3.scl @@ -0,0 +1,10 @@ +! kacapi3.scl +! +kacapi indung tuning, Pelog by Sulaeman Danuwijaya, mean of 9 tunings, W. van Zanten, 1987 + 5 +! + 400.00000 + 513.00000 + 706.00000 + 1115.00000 + 1207.00000 diff --git a/scales/kacapi4.scl b/scales/kacapi4.scl new file mode 100644 index 0000000..072a9fe --- /dev/null +++ b/scales/kacapi4.scl @@ -0,0 +1,10 @@ +! kacapi4.scl +! +kacapi indung tuning, Sorog by Uking Sukri, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 410.00000 + 508.00000 + 924.00000 + 1120.00000 + 1219.00000 diff --git a/scales/kacapi5.scl b/scales/kacapi5.scl new file mode 100644 index 0000000..31fd961 --- /dev/null +++ b/scales/kacapi5.scl @@ -0,0 +1,10 @@ +! kacapi5.scl +! +kacapi indung tuning, Sorog by Bakang & others, mean of 6 tunings, W. van Zanten, 1987 + 5 +! + 402.00000 + 505.00000 + 904.00000 + 1110.00000 + 1210.00000 diff --git a/scales/kacapi6.scl b/scales/kacapi6.scl new file mode 100644 index 0000000..5ede320 --- /dev/null +++ b/scales/kacapi6.scl @@ -0,0 +1,10 @@ +! kacapi6.scl +! +kacapi indung tuning, Salendro by Uking Sukri, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 260.00000 + 498.00000 + 734.00000 + 984.00000 + 1223.00000 diff --git a/scales/kacapi7.scl b/scales/kacapi7.scl new file mode 100644 index 0000000..49c7f23 --- /dev/null +++ b/scales/kacapi7.scl @@ -0,0 +1,10 @@ +! kacapi7.scl +! +kacapi indung tuning, Salendro by Bakang & others, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 250.00000 + 498.00000 + 743.00000 + 981.00000 + 1206.00000 diff --git a/scales/kacapi8.scl b/scales/kacapi8.scl new file mode 100644 index 0000000..00722b3 --- /dev/null +++ b/scales/kacapi8.scl @@ -0,0 +1,10 @@ +! kacapi8.scl +! +kacapi indung tuning, Mataraman by Uking Sukri, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 408.00000 + 509.00000 + 927.00000 + 1037.00000 + 1223.00000 diff --git a/scales/kacapi9.scl b/scales/kacapi9.scl new file mode 100644 index 0000000..b2e41c4 --- /dev/null +++ b/scales/kacapi9.scl @@ -0,0 +1,10 @@ +! kacapi9.scl +! +kacapi indung tuning, Mataraman by Bakang & others, mean of 4 tunings, W. van Zanten, 1987 + 5 +! + 410.00000 + 509.00000 + 911.00000 + 1004.00000 + 1210.00000 diff --git a/scales/kanzelmeyer_11.scl b/scales/kanzelmeyer_11.scl new file mode 100644 index 0000000..28eb800 --- /dev/null +++ b/scales/kanzelmeyer_11.scl @@ -0,0 +1,16 @@ +! KANZELMEYER_11.scl +! +Bruce Kanzelmeyer, 11 harmonics from 16 to 32. Base 388.3614815 Hz + 11 +! + 17/16 + 19/16 + 5/4 + 11/8 + 23/16 + 3/2 + 13/8 + 7/4 + 29/16 + 31/16 + 2/1 diff --git a/scales/kanzelmeyer_18.scl b/scales/kanzelmeyer_18.scl new file mode 100644 index 0000000..1939965 --- /dev/null +++ b/scales/kanzelmeyer_18.scl @@ -0,0 +1,23 @@ +! KANZELMEYER_18.scl +! +Bruce Kanzelmeyer, 18 harmonics from 32 to 64. Base 388.3614815 Hz + 18 +! + 17/16 + 37/32 + 19/16 + 5/4 + 41/32 + 43/32 + 11/8 + 23/16 + 47/32 + 3/2 + 13/8 + 53/32 + 7/4 + 29/16 + 59/32 + 61/32 + 31/16 + 2/1 diff --git a/scales/kayolonian.scl b/scales/kayolonian.scl new file mode 100644 index 0000000..eb0b157 --- /dev/null +++ b/scales/kayolonian.scl @@ -0,0 +1,24 @@ +! Kayolonian.scl +! +19-tone 5-limit scale of the Kayenian Imperium on Kayolonia (reeks van Sjauriek) + 19 +! + 128/125 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 512/375 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16/9 + 15/8 + 125/64 + 2/1 diff --git a/scales/kayolonian_12.scl b/scales/kayolonian_12.scl new file mode 100644 index 0000000..326a751 --- /dev/null +++ b/scales/kayolonian_12.scl @@ -0,0 +1,17 @@ +! kayolonian_12.scl +! +See Barnard: De Keiaanse Muziek, p. 11. (uitgebreide reeks) + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/kayolonian_40.scl b/scales/kayolonian_40.scl new file mode 100644 index 0000000..712ff39 --- /dev/null +++ b/scales/kayolonian_40.scl @@ -0,0 +1,45 @@ +! kayolonian_40.scl +! +See Barnard: De Keiaanse Muziek + 40 +! + 128/125 + 25/24 + 135/128 + 16/15 + 10/9 + 9/8 + 256/225 + 75/64 + 32/27 + 6/5 + 625/512 + 5/4 + 81/64 + 32/25 + 125/96 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 40/27 + 3/2 + 192/125 + 25/16 + 128/81 + 8/5 + 5/3 + 27/16 + 128/75 + 225/128 + 16/9 + 9/5 + 15/8 + 256/135 + 48/25 + 125/64 + 2/1 diff --git a/scales/kayolonian_f.scl b/scales/kayolonian_f.scl new file mode 100644 index 0000000..f763d57 --- /dev/null +++ b/scales/kayolonian_f.scl @@ -0,0 +1,14 @@ +! kayolonian_f.scl +! +Kayolonian scale F and periodicity block (128/125, 16875/16384) + 9 +! + 16/15 + 75/64 + 5/4 + 4/3 + 3/2 + 8/5 + 128/75 + 15/8 + 2/1 diff --git a/scales/kayolonian_p.scl b/scales/kayolonian_p.scl new file mode 100644 index 0000000..d2a9f5f --- /dev/null +++ b/scales/kayolonian_p.scl @@ -0,0 +1,14 @@ +! kayolonian_p.scl +! +Kayolonian scale P + 9 +! + 16/15 + 75/64 + 5/4 + 4/3 + 3/2 + 8/5 + 225/128 + 15/8 + 2/1 diff --git a/scales/kayolonian_s.scl b/scales/kayolonian_s.scl new file mode 100644 index 0000000..cce15c3 --- /dev/null +++ b/scales/kayolonian_s.scl @@ -0,0 +1,14 @@ +! kayolonian_s.scl +! +Kayolonian scale S + 9 +! + 1125/1024 + 75/64 + 5/4 + 5625/4096 + 3/2 + 8/5 + 225/128 + 15/8 + 2/1 diff --git a/scales/kayolonian_t.scl b/scales/kayolonian_t.scl new file mode 100644 index 0000000..d424e3c --- /dev/null +++ b/scales/kayolonian_t.scl @@ -0,0 +1,14 @@ +! kayolonian_t.scl +! +Kayolonian scale T + 9 +! + 16/15 + 256/225 + 4096/3375 + 4/3 + 8192/5625 + 8/5 + 128/75 + 2048/1125 + 2/1 diff --git a/scales/kayolonian_z.scl b/scales/kayolonian_z.scl new file mode 100644 index 0000000..cd726e2 --- /dev/null +++ b/scales/kayolonian_z.scl @@ -0,0 +1,14 @@ +! kayolonian_z.scl +! +Kayolonian scale Z + 9 +! + 16/15 + 256/225 + 5/4 + 4/3 + 3/2 + 8/5 + 128/75 + 2048/1125 + 2/1 diff --git a/scales/kayoloniana.scl b/scales/kayoloniana.scl new file mode 100644 index 0000000..e4c28b6 --- /dev/null +++ b/scales/kayoloniana.scl @@ -0,0 +1,24 @@ +! kayoloniana.scl +! +Amendment by Rasch of Kayolonian scale's note 9 + 19 +! + 128/125 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16/9 + 15/8 + 125/64 + 2/1 diff --git a/scales/kebyar-b.scl b/scales/kebyar-b.scl new file mode 100644 index 0000000..3d903b2 --- /dev/null +++ b/scales/kebyar-b.scl @@ -0,0 +1,10 @@ +! kebyar-b.scl +! +Gamelan Kebyar tuning begbeg, Andrew Toth, 1993 + 5 +! + 120.00000 + 234.00000 + 666.00000 + 747.00000 + 2/1 diff --git a/scales/kebyar-s.scl b/scales/kebyar-s.scl new file mode 100644 index 0000000..0bcfa57 --- /dev/null +++ b/scales/kebyar-s.scl @@ -0,0 +1,10 @@ +! kebyar-s.scl +! +Gamelan kebyar tuning sedung, Andrew Toth, 1993 + 5 +! + 136.00000 + 291.00000 + 670.00000 + 804.00000 + 2/1 diff --git a/scales/kebyar-t.scl b/scales/kebyar-t.scl new file mode 100644 index 0000000..59f7fbb --- /dev/null +++ b/scales/kebyar-t.scl @@ -0,0 +1,10 @@ +! kebyar-t.scl +! +Gamelan kebyar tuning tirus, Andrew Toth, 1993 + 5 +! + 197.00000 + 377.00000 + 724.00000 + 828.00000 + 2/1 diff --git a/scales/keemic15.scl b/scales/keemic15.scl new file mode 100644 index 0000000..eec6b82 --- /dev/null +++ b/scales/keemic15.scl @@ -0,0 +1,40 @@ +! keemic15.scl +Keemic[15] hobbit in minimax tuning +15 +! +59.7214 +176.9282 +236.6496 +321.1168 +380.8382 +4/3 +557.7664 +642.2336 +3/2 +819.1618 +878.8832 +963.3504 +1023.0718 +1140.2786 +2/1 +! +!! prekeemic15.scl +!! +! Prekeemic[15] transversal +! 15 +!! +! 25/24 +! 10/9 +! 125/108 +! 6/5 +! 5/4 +! 4/3 +! 25/18 +! 36/25 +! 3/2 +! 8/5 +! 5/3 +! 216/125 +! 9/5 +! 48/25 +! 2/1 diff --git a/scales/keen1.scl b/scales/keen1.scl new file mode 100644 index 0000000..fe5cdfb --- /dev/null +++ b/scales/keen1.scl @@ -0,0 +1,10 @@ +! keen1.scl +! +Keenanismic tempering of [5/4, 11/8, 3/2, 12/7, 2], 284-tET tuning + 5 +! + 384.50704 + 549.29577 + 701.40845 + 933.80282 + 2/1 diff --git a/scales/keen2.scl b/scales/keen2.scl new file mode 100644 index 0000000..87ba113 --- /dev/null +++ b/scales/keen2.scl @@ -0,0 +1,10 @@ +! keen2.scl +! +Keenanismic tempering of [8/7, 5/4, 11/8, 12/7, 2], 284-tET tuning + 5 +! + 232.39437 + 384.50704 + 549.29577 + 933.80282 + 2/1 diff --git a/scales/keen3.scl b/scales/keen3.scl new file mode 100644 index 0000000..3d2f772 --- /dev/null +++ b/scales/keen3.scl @@ -0,0 +1,10 @@ +! keen3.scl +! +Keenanismic tempering of [6/5, 11/8, 3/2, 7/4, 2], 284-tET tuning + 5 +! + 316.90141 + 549.29577 + 701.40845 + 967.60563 + 2/1 diff --git a/scales/keen4.scl b/scales/keen4.scl new file mode 100644 index 0000000..0bd4dcb --- /dev/null +++ b/scales/keen4.scl @@ -0,0 +1,10 @@ +! keen4.scl +! +Keenanismic tempering of [12/11, 5/4, 3/2, 12/7, 2], 284-tET tuning + 5 +! + 152.11268 + 384.50704 + 701.40845 + 933.80282 + 2/1 diff --git a/scales/keen5.scl b/scales/keen5.scl new file mode 100644 index 0000000..a2e18cd --- /dev/null +++ b/scales/keen5.scl @@ -0,0 +1,10 @@ +! keen5.scl +! +Keenanismic tempering of [6/5, 11/8, 3/2, 12/7, 2], 284-tET tuning + 5 +! + 316.90141 + 549.29577 + 701.40845 + 933.80282 + 2/1 diff --git a/scales/keen6.scl b/scales/keen6.scl new file mode 100644 index 0000000..b26462c --- /dev/null +++ b/scales/keen6.scl @@ -0,0 +1,10 @@ +! keen6.scl +! +Keenanismic tempering of [12/11, 5/4, 3/2, 7/4, 2], 284-tET tuning + 5 +! + 152.11268 + 384.50704 + 701.40845 + 967.60563 + 2/1 diff --git a/scales/keenan3.scl b/scales/keenan3.scl new file mode 100644 index 0000000..58a7913 --- /dev/null +++ b/scales/keenan3.scl @@ -0,0 +1,16 @@ +! keenan3.scl +! +Chain of 1/6 kleisma tempered 6/5s, 10 tetrads, Dave Keenan, TL 30-Jun-99 + 11 +! + 67.97000 + 135.94000 + 316.99250 + 384.96250 + 452.93250 + 633.98500 + 3/2 + 769.92500 + 950.97750 + 1018.94750 + 2/1 diff --git a/scales/keenan3j.scl b/scales/keenan3j.scl new file mode 100644 index 0000000..339694d --- /dev/null +++ b/scales/keenan3j.scl @@ -0,0 +1,16 @@ +! keenan3j.scl +! +Chain of 11 nearly just 19-tET minor thirds, Dave Keenan, 1-Jul-99 + 11 +! + 189.47368 + 252.63158 + 315.78947 + 505.26316 + 568.42105 + 757.89474 + 821.05263 + 884.21053 + 1073.68421 + 1136.84211 + 2/1 diff --git a/scales/keenan3rb.scl b/scales/keenan3rb.scl new file mode 100644 index 0000000..9ae8b40 --- /dev/null +++ b/scales/keenan3rb.scl @@ -0,0 +1,16 @@ +! keenan3rb.scl +! +Chain of 11 equal beating minor thirds, 6/5=3/2 same + 11 +! + 70.67006 + 141.34012 + 317.66751 + 388.33757 + 459.00763 + 635.33503 + 706.00509 + 776.67515 + 953.00254 + 1023.67260 + 2/1 diff --git a/scales/keenan3rb2.scl b/scales/keenan3rb2.scl new file mode 100644 index 0000000..adf4f86 --- /dev/null +++ b/scales/keenan3rb2.scl @@ -0,0 +1,16 @@ +! keenan3rb2.scl +! +Chain of 11 equal beating minor thirds, 6/5=3/2 opposite + 11 +! + 66.61790 + 133.23579 + 316.65447 + 383.27237 + 449.89027 + 633.30895 + 699.92685 + 766.54474 + 949.96342 + 1016.58132 + 2/1 diff --git a/scales/keenan5.scl b/scales/keenan5.scl new file mode 100644 index 0000000..1dc30fa --- /dev/null +++ b/scales/keenan5.scl @@ -0,0 +1,37 @@ +! +! keenan5.scl +! +11-limit, 31 tones, 9 hexads within 2.7c of just, Dave Keenan 27-Dec-99 + 31 +! + 36.19153216 ! Bx + 85.39311378 ! C# + 115.8026469 ! Db + 151.994179 ! Cx + 201.1957607 ! D + 231.6052938 ! Ebb + 267.7968259 ! D# + 316.9984075 ! Eb + 353.1899397 ! Dx + 383.5994728 ! E + 432.8010544 ! Fb + 468.9925866 ! E# + 499.4021197 ! F + 548.6037013 ! Gbb + 584.7952335 ! F# + 615.2047665 ! Gb + 651.3962987 ! Fx + 700.5978803 ! G + 731.0074134 ! Abb + 767.1989456 ! G# + 816.4005272 ! Ab + 18/11 ! Gx + 883.0015925 ! A + 932.2031741 ! Bbb + 968.3947062 ! A# + 998.8042393 ! Bb + 1048.005821 ! Cbb + 1084.197353 ! B + 1114.606886 ! Cb + 1169.590467 ! B# + 2/1 ! C diff --git a/scales/keenan6.scl b/scales/keenan6.scl new file mode 100644 index 0000000..aa5093a --- /dev/null +++ b/scales/keenan6.scl @@ -0,0 +1,37 @@ +! +! keenan6.scl +! +11-limit, 31 tones, 14 hexads within 3.2c of just, Dave Keenan 11-Jan-2000 + 31 +! Microtempered 11-limit diamond plus 16/15 and 15/8. Min beats in 4:5:6:7:9:11. + 115.9584761 ! 16/15 + 151.2176916 ! 12/11, 35/32 + 166.5545447 ! 11/10 + 181.3208835 ! 10/9 + 201.8137603 ! 9/8 + 231.9169522 ! 8/7 + 267.1761677 ! 7/6 , 64/55 + 317.7722363 ! 6/5 + 347.8754282 ! 11/9 + 383.1346438 ! 5/4 + 418.3938594 ! 14/11 + 433.7307124 ! 9/7 , 32/25 + 499.0931199 ! 4/3 + 549.6891885 ! 11/8 + 584.9484041 ! 7/5 , 45/32 + 615.0515959 ! 10/7 , 64/45 + 650.3108115 ! 16/11 + 700.9068801 ! 3/2 + 766.2692876 ! 14/9 , 25/16 + 781.6061406 ! 11/7 + 816.8653562 ! 8/5 + 852.1245718 ! 18/11 + 882.2277637 ! 5/3 + 932.8238323 ! 12/7 , 55/32 + 968.0830478 ! 7/4 + 998.1862397 ! 16/9 + 1018.679116 ! 9/5 + 1033.445455 ! 20/11 + 1048.782308 ! 11/6 , 64/35 + 1084.041524 ! 15/8 + 2/1 diff --git a/scales/keenan7.scl b/scales/keenan7.scl new file mode 100644 index 0000000..d818058 --- /dev/null +++ b/scales/keenan7.scl @@ -0,0 +1,27 @@ +! keenan7.scl +! +Dave Keenan, 22 out of 72-tET periodicity block. TL 29-04-2001 + 22 +! + 50.00000 + 116.66667 + 166.66667 + 216.66667 + 266.66667 + 316.66667 + 383.33333 + 433.33333 + 500.00000 + 550.00000 + 600.00000 + 650.00000 + 700.00000 + 766.66667 + 816.66667 + 883.33333 + 933.33333 + 983.33333 + 1033.33333 + 1083.33333 + 1150.00000 + 2/1 diff --git a/scales/keenan_mt.scl b/scales/keenan_mt.scl new file mode 100644 index 0000000..13d88a2 --- /dev/null +++ b/scales/keenan_mt.scl @@ -0,0 +1,17 @@ +! keenan_mt.scl +! +Dave Keenan 1/4-comma tempered version of keenan.scl with 6 7-limit tetrads + 12 +! + 117.10786 + 193.15686 + 269.20586 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 8/5 + 889.73529 + 965.78428 + 1082.89214 + 2/1 diff --git a/scales/keenan_st.scl b/scales/keenan_st.scl new file mode 100644 index 0000000..e298728 --- /dev/null +++ b/scales/keenan_st.scl @@ -0,0 +1,28 @@ +! keenan_st.scl +! +Dave Keenan, 7-limit temperament, g=260.353 + 23 +! + 44.94155 + 101.76484 + 158.58813 + 203.52968 + 260.35297 + 317.17626 + 362.11781 + 418.94110 + 463.88265 + 520.70594 + 577.52922 + 622.47078 + 679.29406 + 724.23562 + 781.05890 + 837.88219 + 882.82374 + 939.64703 + 984.58858 + 1041.41187 + 1098.23516 + 1143.17671 + 2/1 diff --git a/scales/keenan_t9.scl b/scales/keenan_t9.scl new file mode 100644 index 0000000..904bd0b --- /dev/null +++ b/scales/keenan_t9.scl @@ -0,0 +1,17 @@ +! keenan_t9.scl +! +Dave Keenan strange 9-limit temperament TL 19-11-98 + 12 +! + 106.00000 + 212.00000 + 276.00000 + 382.00000 + 488.00000 + 600.00000 + 706.00000 + 812.00000 + 876.00000 + 982.00000 + 1088.00000 + 2/1 diff --git a/scales/keentet.scl b/scales/keentet.scl new file mode 100644 index 0000000..53b07bb --- /dev/null +++ b/scales/keentet.scl @@ -0,0 +1,13 @@ +! keentet.scl +! +The five keenanismic tetrads, plus o- and u-tonal, in 284-tET + 8 +! + 152.11268 + 316.90141 + 384.50704 + 650.70423 + 701.40845 + 933.80282 + 967.60563 + 2/1 diff --git a/scales/keesred12_5.scl b/scales/keesred12_5.scl new file mode 100644 index 0000000..995437f --- /dev/null +++ b/scales/keesred12_5.scl @@ -0,0 +1,16 @@ +! keesred12_5.scl +Kees reduced 5-limit 12-note scale = Hahn reduced +12 +! +16/15 +9/8 +6/5 +5/4 +4/3 +25/18 +3/2 +8/5 +5/3 +9/5 +15/8 +2/1 diff --git a/scales/kelletat.scl b/scales/kelletat.scl new file mode 100644 index 0000000..37b6569 --- /dev/null +++ b/scales/kelletat.scl @@ -0,0 +1,17 @@ +! kelletat.scl +! +Herbert Kelletat's Bach-tuning (1966), Ein Beitrag zur musikalischen Temperatur p. 26-27. + 12 +! + 256/243 + 196.09000 + 32/27 + 388.26999 + 4/3 + 1024/729 + 700.00000 + 128/81 + 892.18000 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/kelletat1.scl b/scales/kelletat1.scl new file mode 100644 index 0000000..7c456d0 --- /dev/null +++ b/scales/kelletat1.scl @@ -0,0 +1,17 @@ +! kelletat1.scl +! +Herbert Kelletat's Bach-tuning (1960) + 12 +! + 92.18000 + 192.18000 + 296.09000 + 386.31499 + 500.00000 + 590.22500 + 696.09000 + 794.13500 + 888.26999 + 998.04500 + 1088.26999 + 2/1 diff --git a/scales/kellner.scl b/scales/kellner.scl new file mode 100644 index 0000000..6d11f65 --- /dev/null +++ b/scales/kellner.scl @@ -0,0 +1,17 @@ +! kellner.scl +! +Herbert Anton Kellner's Bach tuning. 5 1/5 Pyth. comma and 7 pure fifths + 12 +! + 256/243 + 194.52600 + 32/27 + 389.05200 + 4/3 + 1024/729 + 697.26300 + 128/81 + 891.78900 + 16/9 + 1091.00700 + 2/1 diff --git a/scales/kellner_eb.scl b/scales/kellner_eb.scl new file mode 100644 index 0000000..f991cd4 --- /dev/null +++ b/scales/kellner_eb.scl @@ -0,0 +1,17 @@ +! kellner_eb.scl +! +Equal beating variant of kellner.scl + 12 +! + 90.22500 + 193.30962 + 294.13500 + 387.74226 + 498.04500 + 588.26999 + 695.60256 + 792.18000 + 889.58443 + 996.09000 + 1089.69726 + 2/1 diff --git a/scales/kellner_org.scl b/scales/kellner_org.scl new file mode 100644 index 0000000..c948cd4 --- /dev/null +++ b/scales/kellner_org.scl @@ -0,0 +1,17 @@ +! kellner_org.scl +! +Kellner's original Bach tuning. C-E & C-G beat at identical rates, so B-F# slightly wider than C-G-D-A-E, 7 pure fifths + 12 +! + 256/243 + 194.55682 + 32/27 + 389.11365 + 4/3 + 1024/729 + 697.27841 + 128/81 + 891.83524 + 16/9 + 1091.06865 + 2/1 diff --git a/scales/kellners.scl b/scales/kellners.scl new file mode 100644 index 0000000..a2fc41a --- /dev/null +++ b/scales/kellners.scl @@ -0,0 +1,17 @@ +! kellners.scl +! +Kellner's temperament with 1/5 synt. comma instead of 1/5 Pyth. comma + 12 +! + 91.62051 + 195.30749 + 294.97231 + 390.61497 + 498.32410 + 589.94461 + 697.65374 + 793.29641 + 892.96123 + 996.64820 + 1092.29087 + 2/1 diff --git a/scales/kepler1.scl b/scales/kepler1.scl new file mode 100644 index 0000000..d3a99eb --- /dev/null +++ b/scales/kepler1.scl @@ -0,0 +1,17 @@ +! kepler1.scl +! +Kepler's Monochord no.1, Harmonices Mundi (1619) + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/kepler2.scl b/scales/kepler2.scl new file mode 100644 index 0000000..e48f4cb --- /dev/null +++ b/scales/kepler2.scl @@ -0,0 +1,17 @@ +! kepler2.scl +! +Kepler's Monochord no.2 + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/kepler3.scl b/scales/kepler3.scl new file mode 100644 index 0000000..eba8d81 --- /dev/null +++ b/scales/kepler3.scl @@ -0,0 +1,17 @@ +! kepler3.scl +! +Kepler's choice system, Harmonices Mundi, Liber III (1619) + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 27/16 + 9/5 + 243/128 + 2/1 diff --git a/scales/kilroy.scl b/scales/kilroy.scl new file mode 100644 index 0000000..1f45652 --- /dev/null +++ b/scales/kilroy.scl @@ -0,0 +1,17 @@ +! kilroy.scl +! +Kilroy + 12 +! + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/kimball.scl b/scales/kimball.scl new file mode 100644 index 0000000..3f23154 --- /dev/null +++ b/scales/kimball.scl @@ -0,0 +1,23 @@ +! kimball.scl +! +Buzz Kimball 18-note just scale + 18 +! + 25/24 + 135/128 + 10/9 + 9/8 + 75/64 + 5/4 + 81/64 + 4/3 + 25/18 + 45/32 + 3/2 + 25/16 + 5/3 + 27/16 + 225/128 + 16/9 + 15/8 + 2/1 diff --git a/scales/kimball_53.scl b/scales/kimball_53.scl new file mode 100644 index 0000000..7035142 --- /dev/null +++ b/scales/kimball_53.scl @@ -0,0 +1,58 @@ +! KIMBALL_53.scl +! +Buzz Kimball 53-note just scale + 53 +! + 18/17 + 17/16 + 16/15 + 14/13 + 13/12 + 12/11 + 11/10 + 17/15 + 8/7 + 7/6 + 20/17 + 13/11 + 6/5 + 17/14 + 11/9 + 16/13 + 5/4 + 14/11 + 22/17 + 13/10 + 17/13 + 4/3 + 11/8 + 18/13 + 7/5 + 24/17 + 17/12 + 10/7 + 13/9 + 16/11 + 3/2 + 26/17 + 20/13 + 17/11 + 11/7 + 8/5 + 13/8 + 18/11 + 28/17 + 5/3 + 22/13 + 17/10 + 12/7 + 7/4 + 30/17 + 20/11 + 11/6 + 24/13 + 13/7 + 15/8 + 32/17 + 17/9 + 2/1 diff --git a/scales/kirkwood.scl b/scales/kirkwood.scl new file mode 100644 index 0000000..c80085e --- /dev/null +++ b/scales/kirkwood.scl @@ -0,0 +1,13 @@ +! kirkwood.scl +! +Scale based on Kirkwood gaps of the asteroid belt + 8 +! + 9/8 + 7/6 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/kirn-stan.scl b/scales/kirn-stan.scl new file mode 100644 index 0000000..5659e0c --- /dev/null +++ b/scales/kirn-stan.scl @@ -0,0 +1,17 @@ +! kirn-stan.scl +! +Kirnberger temperament improved by Charles Earl Stanhope (1806) + 12 +! + 93.60302 + 193.75611 + 297.51302 + 5/4 + 4/3 + 591.64802 + 3/2 + 795.55802 + 888.90861 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger.scl b/scales/kirnberger.scl new file mode 100644 index 0000000..7e9a421 --- /dev/null +++ b/scales/kirnberger.scl @@ -0,0 +1,17 @@ +! kirnberger.scl +! +Kirnberger's well-temperament, also called Kirnberger III, letter to Forkel 1779 + 12 +! + 256/243 + 193.15686 + 32/27 + 5/4 + 4/3 + 45/32 + 696.57843 + 128/81 + 889.73529 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger1.scl b/scales/kirnberger1.scl new file mode 100644 index 0000000..a332778 --- /dev/null +++ b/scales/kirnberger1.scl @@ -0,0 +1,17 @@ +! kirnberger1.scl +! +Kirnberger's temperament 1 (1766) + 12 +! + 256/243 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 128/81 + 895.11200 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger2.scl b/scales/kirnberger2.scl new file mode 100644 index 0000000..ea5de94 --- /dev/null +++ b/scales/kirnberger2.scl @@ -0,0 +1,17 @@ +! kirnberger2.scl +! +Kirnberger 2: 1/2 synt. comma. "Die Kunst des reinen Satzes" (1774) + 12 +! + 135/128 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 270/161 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger24.scl b/scales/kirnberger24.scl new file mode 100644 index 0000000..0666369 --- /dev/null +++ b/scales/kirnberger24.scl @@ -0,0 +1,29 @@ +! kirnberger24.scl +! +Kirnberger, 24-tone 7-limit JI scale (ca. 1766) + 24 +! + 28/27 + 256/243 + 35/32 + 9/8 + 7/6 + 32/27 + 315/256 + 5/4 + 21/16 + 4/3 + 112/81 + 45/32 + 35/24 + 3/2 + 14/9 + 128/81 + 105/64 + 5/3 + 7/4 + 16/9 + 448/243 + 15/8 + 63/32 + 2/1 diff --git a/scales/kirnberger3.scl b/scales/kirnberger3.scl new file mode 100644 index 0000000..4468b16 --- /dev/null +++ b/scales/kirnberger3.scl @@ -0,0 +1,17 @@ +! kirnberger3.scl +! +Kirnberger 3: 1/4 synt. comma (1744) + 12 +! + 135/128 + 193.15686 + 32/27 + 5/4 + 4/3 + 45/32 + 696.57843 + 405/256 + 889.73529 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger3s.scl b/scales/kirnberger3s.scl new file mode 100644 index 0000000..2aeb072 --- /dev/null +++ b/scales/kirnberger3s.scl @@ -0,0 +1,17 @@ +! kirnberger3s.scl +! +Sparschuh's (2010) refined epimoric Kirnberger III variant + 12 +! + 256/243 + 161/144 + 32/27 + 5/4 + 4/3 + 1025/729 + 323/216 + 128/81 + 107/64 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger3v.scl b/scales/kirnberger3v.scl new file mode 100644 index 0000000..ab08b3c --- /dev/null +++ b/scales/kirnberger3v.scl @@ -0,0 +1,17 @@ +! kirnberger3v.scl +! +Variant well-temperament like Kirnberger 3, Kenneth Scholz, MTO 4.4, 1998 + 12 +! + 135/128 + 180/161 + 32/27 + 5/4 + 4/3 + 45/32 + 160/107 + 128/81 + 540/323 + 16/9 + 15/8 + 2/1 diff --git a/scales/kirnberger48.scl b/scales/kirnberger48.scl new file mode 100644 index 0000000..2c726f9 --- /dev/null +++ b/scales/kirnberger48.scl @@ -0,0 +1,53 @@ +! kirnberger48.scl +! +Kirnberger, 48-tone 7-limit JI scale (ca. 1769) + 48 +! + 28/27 + 25/24 + 256/243 + 135/128 + 16/15 + 35/32 + 10/9 + 9/8 + 7/6 + 75/64 + 32/27 + 6/5 + 315/256 + 5/4 + 512/405 + 81/64 + 21/16 + 320/243 + 675/512 + 4/3 + 27/20 + 112/81 + 25/18 + 45/32 + 64/45 + 35/24 + 40/27 + 3/2 + 14/9 + 25/16 + 128/81 + 405/256 + 8/5 + 105/64 + 5/3 + 27/16 + 7/4 + 1280/729 + 225/128 + 16/9 + 9/5 + 448/243 + 50/27 + 15/8 + 256/135 + 63/32 + 160/81 + 2/1 diff --git a/scales/klais.scl b/scales/klais.scl new file mode 100644 index 0000000..f454a9a --- /dev/null +++ b/scales/klais.scl @@ -0,0 +1,17 @@ +! klais.scl +! +Johannes Klais, Bach temperament. Similar to Kelletat (1960) + 12 +! + 256/243 + 196.09000 + 32/27 + 387.29249 + 4/3 + 1024/729 + 700.00000 + 128/81 + 892.18000 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/kleismic34trans.scl b/scales/kleismic34trans.scl new file mode 100644 index 0000000..bdfc2c1 --- /dev/null +++ b/scales/kleismic34trans.scl @@ -0,0 +1,39 @@ +! kleismic34trans.scl +! +Kleismic[34] transversal (detempering) + 34 +! + 128/125 + 25/24 + 16/15 + 27/25 + 10/9 + 9/8 + 144/125 + 75/64 + 6/5 + 100/81 + 5/4 + 32/25 + 162/125 + 4/3 + 27/20 + 25/18 + 45/32 + 36/25 + 40/27 + 3/2 + 125/81 + 25/16 + 8/5 + 81/50 + 5/3 + 128/75 + 125/72 + 16/9 + 9/5 + 50/27 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/klonaris.scl b/scales/klonaris.scl new file mode 100644 index 0000000..2501951 --- /dev/null +++ b/scales/klonaris.scl @@ -0,0 +1,17 @@ +! klonaris.scl +! +Johnny Klonaris, 19-limit harmonic scale + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/knot.scl b/scales/knot.scl new file mode 100644 index 0000000..46ae101 --- /dev/null +++ b/scales/knot.scl @@ -0,0 +1,29 @@ +! knot.scl +! +Smallest knot in cubic lattice, American Scientist, Nov-Dec '97 p. 506-510, trefoil knot of 24 units long + 24 +! + 525/512 + 15/14 + 35/32 + 9/8 + 8/7 + 75/64 + 5/4 + 4/3 + 175/128 + 7/5 + 45/32 + 35/24 + 3/2 + 25/16 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 225/128 + 175/96 + 64/35 + 15/8 + 2/1 diff --git a/scales/koepf_36.scl b/scales/koepf_36.scl new file mode 100644 index 0000000..b4a07d8 --- /dev/null +++ b/scales/koepf_36.scl @@ -0,0 +1,41 @@ +! koepf_36.scl +! +Siegfried Koepf, 36-tone subset of 48-tone scale (1991) + 36 +! + 69.00000 + 86.00000 + 100.00000 + 169.00000 + 186.00000 + 200.00000 + 269.00000 + 286.00000 + 300.00000 + 369.00000 + 386.00000 + 400.00000 + 469.00000 + 486.00000 + 500.00000 + 569.00000 + 586.00000 + 600.00000 + 669.00000 + 686.00000 + 700.00000 + 769.00000 + 786.00000 + 800.00000 + 869.00000 + 886.00000 + 900.00000 + 969.00000 + 986.00000 + 1000.00000 + 1069.00000 + 1086.00000 + 1100.00000 + 1169.00000 + 1186.00000 + 2/1 diff --git a/scales/koepf_48.scl b/scales/koepf_48.scl new file mode 100644 index 0000000..2f17625 --- /dev/null +++ b/scales/koepf_48.scl @@ -0,0 +1,53 @@ +! koepf_48.scl +! +Siegfried Koepf, 48-tone scale (1991) + 48 +! + 51.00000 + 69.00000 + 86.00000 + 100.00000 + 151.00000 + 169.00000 + 186.00000 + 200.00000 + 251.00000 + 269.00000 + 286.00000 + 300.00000 + 351.00000 + 369.00000 + 386.00000 + 400.00000 + 451.00000 + 469.00000 + 486.00000 + 500.00000 + 551.00000 + 569.00000 + 586.00000 + 600.00000 + 651.00000 + 669.00000 + 686.00000 + 700.00000 + 751.00000 + 769.00000 + 786.00000 + 800.00000 + 851.00000 + 869.00000 + 886.00000 + 900.00000 + 951.00000 + 969.00000 + 986.00000 + 1000.00000 + 1051.00000 + 1069.00000 + 1086.00000 + 1100.00000 + 1151.00000 + 1169.00000 + 1186.00000 + 2/1 diff --git a/scales/kolinski.scl b/scales/kolinski.scl new file mode 100644 index 0000000..f4caf5c --- /dev/null +++ b/scales/kolinski.scl @@ -0,0 +1,17 @@ +! kolinski.scl +! +Mieczyslaw Kolinski's 7th root of 3/2 (1959), also invented by Augusto Novaro and Serge Cordier (1975) + 12 +! + 100.27929 + 200.55857 + 300.83786 + 401.11714 + 501.39643 + 601.67572 + 3/2 + 802.23429 + 902.51357 + 1002.79286 + 1103.07214 + 1203.35143 diff --git a/scales/kora1.scl b/scales/kora1.scl new file mode 100644 index 0000000..33a83e1 --- /dev/null +++ b/scales/kora1.scl @@ -0,0 +1,12 @@ +! kora1.scl +! +Kora tuning Tomora Ba, also called Silaba, 1/1=F, R. King + 7 +! + 200.00000 + 385.00000 + 500.00000 + 700.00000 + 900.00000 + 1085.00000 + 2/1 diff --git a/scales/kora2.scl b/scales/kora2.scl new file mode 100644 index 0000000..72720ed --- /dev/null +++ b/scales/kora2.scl @@ -0,0 +1,12 @@ +! kora2.scl +! +Kora tuning Tomora Mesengo, also called Tomora, 1/1=F, R. King + 7 +! + 230.00000 + 325.00000 + 500.00000 + 700.00000 + 930.00000 + 1025.00000 + 2/1 diff --git a/scales/kora3.scl b/scales/kora3.scl new file mode 100644 index 0000000..c2e50a2 --- /dev/null +++ b/scales/kora3.scl @@ -0,0 +1,12 @@ +! kora3.scl +! +Kora tuning Hardino, 1/1=F, R.King + 7 +! + 185.00000 + 405.00000 + 500.00000 + 700.00000 + 885.00000 + 1105.00000 + 2/1 diff --git a/scales/kora4.scl b/scales/kora4.scl new file mode 100644 index 0000000..fbd4272 --- /dev/null +++ b/scales/kora4.scl @@ -0,0 +1,12 @@ +! kora4.scl +! +Kora tuning Sauta, 1/1=F, R. King + 7 +! + 185.00000 + 405.00000 + 605.00000 + 700.00000 + 885.00000 + 1105.00000 + 2/1 diff --git a/scales/korea_5.scl b/scales/korea_5.scl new file mode 100644 index 0000000..e67532b --- /dev/null +++ b/scales/korea_5.scl @@ -0,0 +1,10 @@ +! korea_5.scl +! +Scale called "the delightful" in Korea. Lou Harrison, "Avalokiteshvara" (1965) for harp + 5 +! + 9/8 + 4/3 + 3/2 + 9/5 + 2/1 diff --git a/scales/kornerup.scl b/scales/kornerup.scl new file mode 100644 index 0000000..8c2f2ee --- /dev/null +++ b/scales/kornerup.scl @@ -0,0 +1,24 @@ +! kornerup.scl +! +Kornerup's regular temperament with fifth of (15 - sqrt 5) / 22 octaves + 19 +! + 73.50132 + 118.92763 + 192.42895 + 265.93027 + 311.35658 + 384.85790 + 458.35921 + 503.78553 + 577.28684 + 622.71316 + 696.21447 + 769.71579 + 815.14210 + 888.64342 + 962.14474 + 1007.57105 + 1081.07237 + 1154.57369 + 2/1 diff --git a/scales/kornerup_11.scl b/scales/kornerup_11.scl new file mode 100644 index 0000000..f8dbc9c --- /dev/null +++ b/scales/kornerup_11.scl @@ -0,0 +1,16 @@ +! kornerup_11.scl +! +Kornerup's doric minor + 11 +! + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/koval.scl b/scales/koval.scl new file mode 100644 index 0000000..f8b93c8 --- /dev/null +++ b/scales/koval.scl @@ -0,0 +1,17 @@ +! koval.scl +! +Ron Koval Variable 1.0 (2002) + 12 +! + 98.87000 + 199.40000 + 299.60000 + 398.60000 + 500.00000 + 598.73000 + 699.67000 + 799.27000 + 899.00000 + 999.87000 + 1098.50000 + 2/1 diff --git a/scales/koval2.scl b/scales/koval2.scl new file mode 100644 index 0000000..43e7a63 --- /dev/null +++ b/scales/koval2.scl @@ -0,0 +1,17 @@ +! koval2.scl +! +Ron Koval Variable Well 1.5 + 12 +! + 98.26501 + 198.99000 + 299.35501 + 397.88000 + 499.84501 + 597.67001 + 699.49500 + 798.86001 + 898.48500 + 999.45001 + 1098.17500 + 2/1 diff --git a/scales/koval3.scl b/scales/koval3.scl new file mode 100644 index 0000000..c0f6959 --- /dev/null +++ b/scales/koval3.scl @@ -0,0 +1,17 @@ +! koval3.scl +! +Ron Koval Variable Well 1.9 + 12 +! + 97.82501 + 198.73000 + 299.21501 + 397.33000 + 499.84501 + 597.07001 + 699.36500 + 798.58001 + 898.09500 + 999.34001 + 1097.70500 + 2/1 diff --git a/scales/koval4.scl b/scales/koval4.scl new file mode 100644 index 0000000..99c13e7 --- /dev/null +++ b/scales/koval4.scl @@ -0,0 +1,17 @@ +! koval4.scl +! +Ron Koval Variable Well 3.0 + 12 +! + 96.56501 + 197.99000 + 298.75501 + 395.78000 + 499.74501 + 595.37001 + 698.99500 + 797.76001 + 896.98500 + 998.95001 + 1096.37500 + 2/1 diff --git a/scales/koval5.scl b/scales/koval5.scl new file mode 100644 index 0000000..76836ea --- /dev/null +++ b/scales/koval5.scl @@ -0,0 +1,17 @@ +! koval5.scl +! +Ron Koval Variable Well 5.0 + 12 +! + 94.32501 + 196.67000 + 297.98501 + 393.00000 + 499.65501 + 592.33001 + 698.33500 + 796.32001 + 895.00500 + 998.32001 + 1093.99500 + 2/1 diff --git a/scales/koval6.scl b/scales/koval6.scl new file mode 100644 index 0000000..3fcff27 --- /dev/null +++ b/scales/koval6.scl @@ -0,0 +1,17 @@ +! koval6.scl +! +Ron Koval EBVT (2002) + 12 +! + 97.46501 + 197.99000 + 298.35501 + 395.88000 + 498.74501 + 596.07001 + 700.89500 + 799.66001 + 896.78500 + 997.85001 + 1098.37500 + 2/1 diff --git a/scales/koval7.scl b/scales/koval7.scl new file mode 100644 index 0000000..7470558 --- /dev/null +++ b/scales/koval7.scl @@ -0,0 +1,17 @@ +! koval7.scl +! +Ron Koval Variable Well 1.3 + 12 +! + 98.53000 + 199.22000 + 299.48000 + 398.18000 + 500.00000 + 598.35000 + 699.57000 + 799.05000 + 898.70000 + 999.83000 + 1098.05000 + 2/1 diff --git a/scales/koval8.scl b/scales/koval8.scl new file mode 100644 index 0000000..cf8f768 --- /dev/null +++ b/scales/koval8.scl @@ -0,0 +1,17 @@ +! koval8.scl +! +Ron Koval Variable Well 1.7 + 12 +! + 98.08000 + 198.98000 + 299.32000 + 397.62000 + 500.00000 + 597.84000 + 699.44000 + 798.76000 + 898.30000 + 999.78000 + 1097.45000 + 2/1 diff --git a/scales/koval9.scl b/scales/koval9.scl new file mode 100644 index 0000000..1125b24 --- /dev/null +++ b/scales/koval9.scl @@ -0,0 +1,17 @@ +! koval9.scl +! +Ron Koval Variable Well 2.1 + 12 +! + 97.62000 + 198.74000 + 299.16000 + 397.06000 + 500.00000 + 597.34000 + 699.30000 + 798.46000 + 897.90000 + 999.72000 + 1096.85000 + 2/1 diff --git a/scales/kraeh_22.scl b/scales/kraeh_22.scl new file mode 100644 index 0000000..3a54615 --- /dev/null +++ b/scales/kraeh_22.scl @@ -0,0 +1,27 @@ +! kraeh_22.scl +! +Kraehenbuehl & Schmidt 7-limit 22-tone tuning + 22 +! + 49/48 + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 49/40 + 9/7 + 21/16 + 27/20 + 7/5 + 35/24 + 3/2 + 49/32 + 63/40 + 5/3 + 27/16 + 7/4 + 9/5 + 28/15 + 27/14 + 2/1 diff --git a/scales/kraeh_22a.scl b/scales/kraeh_22a.scl new file mode 100644 index 0000000..83e50ae --- /dev/null +++ b/scales/kraeh_22a.scl @@ -0,0 +1,51 @@ +! kraeh_22a.scl +! +Kraehenbuehl & Schmidt 7-limit 22-tone tuning with "inflections" for some tones + 46 +! + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 25/21 + 6/5 + 128/105 + 49/40 + 5/4 + 9/7 + 21/16 + 4/3 + 75/56 + 27/20 + 48/35 + 7/5 + 45/32 + 10/7 + 35/24 + 3/2 + 32/21 + 49/32 + 54/35 + 25/16 + 63/40 + 8/5 + 45/28 + 5/3 + 27/16 + 12/7 + 7/4 + 25/14 + 9/5 + 175/96 + 64/35 + 28/15 + 15/8 + 40/21 + 27/14 + 2/1 diff --git a/scales/kring1.scl b/scales/kring1.scl new file mode 100644 index 0000000..8ce9d57 --- /dev/null +++ b/scales/kring1.scl @@ -0,0 +1,12 @@ +! KRING1.scl +! +Double-tie circular mirroring of 4:5:6 and Partch's 5-limit tonality Diamond + 7 +! + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 2/1 diff --git a/scales/kring1p3.scl b/scales/kring1p3.scl new file mode 100644 index 0000000..8cd430d --- /dev/null +++ b/scales/kring1p3.scl @@ -0,0 +1,40 @@ +! kring1p3.scl +! +Third carthesian power of double-tie mirroring of 4:5:6 with kleismas removed + 35 +! + 128/125 + 25/24 + 16/15 + 27/25 + 10/9 + 9/8 + 144/125 + 75/64 + 32/27 + 6/5 + 5/4 + 32/25 + 125/96 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 36/25 + 40/27 + 3/2 + 192/125 + 25/16 + 8/5 + 5/3 + 27/16 + 128/75 + 125/72 + 16/9 + 9/5 + 50/27 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/kring2.scl b/scales/kring2.scl new file mode 100644 index 0000000..f133b2c --- /dev/null +++ b/scales/kring2.scl @@ -0,0 +1,12 @@ +! kring2.scl +! +Double-tie circular mirroring of 6:7:8 + 7 +! + 8/7 + 7/6 + 4/3 + 3/2 + 12/7 + 7/4 + 2/1 diff --git a/scales/kring2p3.scl b/scales/kring2p3.scl new file mode 100644 index 0000000..b22f0cd --- /dev/null +++ b/scales/kring2p3.scl @@ -0,0 +1,30 @@ +! kring2p3.scl +! +Third power of 6:7:8 mirroring with 1029/1024 intervals removed + 25 +! + 64/63 + 28/27 + 54/49 + 9/8 + 8/7 + 7/6 + 32/27 + 432/343 + 9/7 + 21/16 + 4/3 + 49/36 + 72/49 + 3/2 + 32/21 + 14/9 + 343/216 + 27/16 + 12/7 + 7/4 + 16/9 + 49/27 + 27/14 + 63/32 + 2/1 diff --git a/scales/kring3.scl b/scales/kring3.scl new file mode 100644 index 0000000..6975bb4 --- /dev/null +++ b/scales/kring3.scl @@ -0,0 +1,12 @@ +! kring3.scl +! +Double-tie circular mirroring of 3:5:7 + 7 +! + 7/6 + 6/5 + 7/5 + 10/7 + 5/3 + 12/7 + 2/1 diff --git a/scales/kring3bp.scl b/scales/kring3bp.scl new file mode 100644 index 0000000..cb23518 --- /dev/null +++ b/scales/kring3bp.scl @@ -0,0 +1,12 @@ +! kring3bp.scl +! +Double-tie BP circular mirroring of 3:5:7 + 7 +! + 9/7 + 7/5 + 5/3 + 9/5 + 15/7 + 7/3 + 3/1 diff --git a/scales/kring4.scl b/scales/kring4.scl new file mode 100644 index 0000000..a7ce221 --- /dev/null +++ b/scales/kring4.scl @@ -0,0 +1,12 @@ +! kring4.scl +! +Double-tie circular mirroring of 4:5:7 + 7 +! + 8/7 + 5/4 + 7/5 + 10/7 + 8/5 + 7/4 + 2/1 diff --git a/scales/kring4p3.scl b/scales/kring4p3.scl new file mode 100644 index 0000000..ae1724d --- /dev/null +++ b/scales/kring4p3.scl @@ -0,0 +1,34 @@ +! kring4p3.scl +! +Third power of 4:5:7 mirroring with 3136/3125 intervals removed + 29 +! + 128/125 + 256/245 + 343/320 + 35/32 + 28/25 + 8/7 + 400/343 + 49/40 + 5/4 + 32/25 + 64/49 + 343/256 + 175/128 + 7/5 + 10/7 + 256/175 + 512/343 + 49/32 + 25/16 + 8/5 + 80/49 + 343/200 + 7/4 + 25/14 + 64/35 + 640/343 + 245/128 + 125/64 + 2/1 diff --git a/scales/kring5.scl b/scales/kring5.scl new file mode 100644 index 0000000..b3aeaa3 --- /dev/null +++ b/scales/kring5.scl @@ -0,0 +1,12 @@ +! kring5.scl +! +Double-tie circular mirroring of 5:7:9 + 7 +! + 10/9 + 9/7 + 7/5 + 10/7 + 14/9 + 9/5 + 2/1 diff --git a/scales/kring5p3.scl b/scales/kring5p3.scl new file mode 100644 index 0000000..f166b82 --- /dev/null +++ b/scales/kring5p3.scl @@ -0,0 +1,38 @@ +! kring5p3.scl +! +Third power of 5:7:9 mirroring with 250047/250000 intervals removed + 33 +! + 50/49 + 729/700 + 729/686 + 49/45 + 10/9 + 567/500 + 81/70 + 405/343 + 98/81 + 100/81 + 63/50 + 9/7 + 450/343 + 980/729 + 1000/729 + 7/5 + 10/7 + 729/500 + 729/490 + 343/225 + 14/9 + 100/63 + 81/50 + 81/49 + 686/405 + 140/81 + 1000/567 + 9/5 + 90/49 + 1372/729 + 1400/729 + 49/25 + 2/1 diff --git a/scales/kring6.scl b/scales/kring6.scl new file mode 100644 index 0000000..8246f91 --- /dev/null +++ b/scales/kring6.scl @@ -0,0 +1,12 @@ +! kring6.scl +! +Double-tie circular mirroring of 6:7:9 + 7 +! + 7/6 + 9/7 + 4/3 + 3/2 + 14/9 + 12/7 + 2/1 diff --git a/scales/kring6p3.scl b/scales/kring6p3.scl new file mode 100644 index 0000000..de35e98 --- /dev/null +++ b/scales/kring6p3.scl @@ -0,0 +1,39 @@ +! kring6p3.scl +! +Third power of 6:7:9 mirroring with 118098/117649 intervals removed + 34 +! + 49/48 + 28/27 + 343/324 + 54/49 + 9/8 + 8/7 + 7/6 + 32/27 + 98/81 + 243/196 + 432/343 + 9/7 + 21/16 + 4/3 + 49/36 + 112/81 + 343/243 + 81/56 + 72/49 + 3/2 + 32/21 + 14/9 + 343/216 + 392/243 + 81/49 + 27/16 + 12/7 + 7/4 + 16/9 + 49/27 + 648/343 + 27/14 + 96/49 + 2/1 diff --git a/scales/krousseau2.scl b/scales/krousseau2.scl new file mode 100644 index 0000000..225a544 --- /dev/null +++ b/scales/krousseau2.scl @@ -0,0 +1,17 @@ +! KROUSSEAU2.scl +! +19-tET version of Kami Rousseau's tri-blues scale + 12 +! + 63.15789 + 189.47368 + 252.63158 + 442.10526 + 505.26316 + 568.42105 + 694.73684 + 757.89474 + 947.36842 + 1010.52632 + 1073.68421 + 2/1 diff --git a/scales/kukuya.scl b/scales/kukuya.scl new file mode 100644 index 0000000..1074882 --- /dev/null +++ b/scales/kukuya.scl @@ -0,0 +1,9 @@ +! kukuya.scl +! +African Kukuya Horns (aerophone, ivory, one note only) + 4 +! + 279.00000 + 562.00000 + 789.00000 + 980.00000 diff --git a/scales/kurdi pentachord 17-limit.scl b/scales/kurdi pentachord 17-limit.scl new file mode 100644 index 0000000..324dee4 --- /dev/null +++ b/scales/kurdi pentachord 17-limit.scl @@ -0,0 +1,9 @@ +! kurdi pentachord 17-limit.scl +! +Kurdi pentachord 102:108:120:136:153 + 4 +! + 18/17 + 20/17 + 4/3 + 3/2 diff --git a/scales/kurdi tetrachord 17-limit.scl b/scales/kurdi tetrachord 17-limit.scl new file mode 100644 index 0000000..58db5b5 --- /dev/null +++ b/scales/kurdi tetrachord 17-limit.scl @@ -0,0 +1,8 @@ +! kurdi tetrachord 17-limit.scl +! +Kurdi tetrachord 51:54:60:68 + 3 +! + 18/17 + 20/17 + 4/3 diff --git a/scales/kurzweil_arab.scl b/scales/kurzweil_arab.scl new file mode 100644 index 0000000..70469cc --- /dev/null +++ b/scales/kurzweil_arab.scl @@ -0,0 +1,17 @@ +! kurzweil_arab.scl +! +Kurzweil "Empirical Arabic" + 12 +! + 130.00000 + 180.00000 + 250.00000 + 355.00000 + 502.00000 + 623.00000 + 706.00000 + 786.00000 + 857.00000 + 930.00000 + 1110.00000 + 2/1 diff --git a/scales/kurzweil_ji.scl b/scales/kurzweil_ji.scl new file mode 100644 index 0000000..6447fff --- /dev/null +++ b/scales/kurzweil_ji.scl @@ -0,0 +1,17 @@ +! kurzweil_ji.scl +! +Kurzweil "Just with natural b7th", is Sauveur Just with 7/4 + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/kurzweil_pelogh.scl b/scales/kurzweil_pelogh.scl new file mode 100644 index 0000000..08acc86 --- /dev/null +++ b/scales/kurzweil_pelogh.scl @@ -0,0 +1,17 @@ +! kurzweil_pelogh.scl +! +Kurzweil "Empirical Bali/Java Harmonic Pelog" + 12 +! + 151.00000 + 164.00000 + 274.00000 + 287.00000 + 375.00000 + 483.00000 + 496.00000 + 851.00000 + 864.00000 + 973.00000 + 986.00000 + 2/1 diff --git a/scales/kurzweil_pelogm.scl b/scales/kurzweil_pelogm.scl new file mode 100644 index 0000000..6b8680d --- /dev/null +++ b/scales/kurzweil_pelogm.scl @@ -0,0 +1,17 @@ +! kurzweil_pelogm.scl +! +Kurzweil "Empirical Bali/Java Melodic Pelog" + 12 +! + 127.00000 + 142.00000 + 258.00000 + 277.00000 + 370.00000 + 474.00000 + 489.00000 + 824.00000 + 839.00000 + 943.00000 + 958.00000 + 2/1 diff --git a/scales/kurzweil_slen.scl b/scales/kurzweil_slen.scl new file mode 100644 index 0000000..0b715a6 --- /dev/null +++ b/scales/kurzweil_slen.scl @@ -0,0 +1,17 @@ +! kurzweil_slen.scl +! +Kurzweil "Empirical Bali/Java Slendro, Siam 7" + 12 +! + 35.00000 + 172.00000 + 275.00000 + 343.00000 + 515.00000 + 515.00000 + 687.00000 + 754.00000 + 857.00000 + 995.00000 + 1029.00000 + 2/1 diff --git a/scales/kurzweil_tibet.scl b/scales/kurzweil_tibet.scl new file mode 100644 index 0000000..91d794e --- /dev/null +++ b/scales/kurzweil_tibet.scl @@ -0,0 +1,17 @@ +! kurzweil_tibet.scl +! +Kurzweil "Empirical Tibetian Ceremonial" + 12 +! + 58.00000 + 232.00000 + 310.00000 + 378.00000 + 522.00000 + 618.00000 + 725.00000 + 773.00000 + 896.00000 + 1019.00000 + 1086.00000 + 2/1 diff --git a/scales/kwazy.scl b/scales/kwazy.scl new file mode 100644 index 0000000..413d918 --- /dev/null +++ b/scales/kwazy.scl @@ -0,0 +1,123 @@ +! kwazy.scl +! +Kwazy temperament, g=162.741892, p=600, 5-limit + 118 +! + 11.61082 + 21.45000 + 31.28919 + 41.12838 + 50.96757 + 62.57838 + 72.41757 + 82.25676 + 92.09595 + 101.93514 + 111.77432 + 123.38514 + 133.22433 + 143.06352 + 152.90270 + 162.74189 + 174.35271 + 184.19190 + 194.03108 + 203.87027 + 213.70946 + 225.32028 + 235.15946 + 244.99865 + 254.83784 + 264.67703 + 274.51622 + 286.12703 + 295.96622 + 305.80541 + 315.64460 + 325.48378 + 337.09460 + 346.93379 + 356.77298 + 366.61216 + 376.45135 + 386.29054 + 397.90136 + 407.74054 + 417.57973 + 427.41892 + 437.25811 + 448.86892 + 458.70811 + 468.54730 + 478.38649 + 488.22568 + 499.83649 + 509.67568 + 519.51487 + 529.35406 + 539.19324 + 549.03243 + 560.64325 + 570.48244 + 580.32162 + 590.16081 + 600.00000 + 611.61082 + 621.45000 + 631.28919 + 641.12838 + 650.96757 + 662.57838 + 672.41757 + 682.25676 + 692.09595 + 701.93514 + 711.77432 + 723.38514 + 733.22433 + 743.06352 + 752.90270 + 762.74189 + 774.35271 + 784.19190 + 794.03108 + 803.87027 + 813.70946 + 825.32028 + 835.15946 + 844.99865 + 854.83784 + 864.67703 + 874.51622 + 886.12703 + 895.96622 + 905.80541 + 915.64460 + 925.48378 + 937.09460 + 946.93379 + 956.77298 + 966.61216 + 976.45135 + 986.29054 + 997.90136 + 1007.74054 + 1017.57973 + 1027.41892 + 1037.25811 + 1048.86892 + 1058.70811 + 1068.54730 + 1078.38649 + 1088.22568 + 1099.83649 + 1109.67568 + 1119.51487 + 1129.35406 + 1139.19324 + 1149.03243 + 1160.64325 + 1170.48244 + 1180.32162 + 1190.16081 + 2/1 diff --git a/scales/laka-dwarf.scl b/scales/laka-dwarf.scl new file mode 100644 index 0000000..5916a51 --- /dev/null +++ b/scales/laka-dwarf.scl @@ -0,0 +1,45 @@ +! laka-dwarf.scl +! +Laka tempered (205-tET) dwarf(<17 27 40 48 59 63 70|) + 17 +! + 52.68293 + 105.36585 + 204.87805 + 245.85366 + 345.36585 + 386.34146 + 474.14634 + 550.24390 + 591.21951 + 702.43902 + 743.41463 + 842.92683 + 907.31707 + 971.70732 + 1047.80488 + 1088.78049 + 2/1 +! +! laka-dwarf.scl +! +! Dwarf((<17 27 40 48 59 63 70|) +! 17 +! +! 33/32 +! 17/16 +! 9/8 +! 147/128 +! 39/32 +! 5/4 +! 21/16 +! 11/8 +! 45/32 +! 3/2 +! 49/32 +! 13/8 +! 27/16 +! 7/4 +! 117/64 +! 15/8 +! 2/1 diff --git a/scales/lambdoma5_12.scl b/scales/lambdoma5_12.scl new file mode 100644 index 0000000..dfdcd16 --- /dev/null +++ b/scales/lambdoma5_12.scl @@ -0,0 +1,47 @@ +! lambdoma5_12.scl +! +5x12 Lambdoma + 42 +! + 1/12 + 1/11 + 1/10 + 1/9 + 1/8 + 1/7 + 1/6 + 2/11 + 1/5 + 2/9 + 1/4 + 3/11 + 2/7 + 3/10 + 1/3 + 4/11 + 3/8 + 2/5 + 5/12 + 3/7 + 4/9 + 5/11 + 1/2 + 5/9 + 4/7 + 3/5 + 5/8 + 2/3 + 5/7 + 3/4 + 4/5 + 5/6 + 1/1 + 5/4 + 4/3 + 3/2 + 5/3 + 2/1 + 5/2 + 3/1 + 4/1 + 5/1 diff --git a/scales/lambdoma_prim.scl b/scales/lambdoma_prim.scl new file mode 100644 index 0000000..57bcbf8 --- /dev/null +++ b/scales/lambdoma_prim.scl @@ -0,0 +1,61 @@ +! LAMBDOMA_prim.scl +! +Prime Lambdoma + 56 +! + 1/31 + 1/29 + 1/23 + 1/19 + 1/17 + 2/31 + 2/29 + 1/13 + 2/23 + 1/11 + 3/31 + 3/29 + 2/19 + 2/17 + 3/23 + 1/7 + 2/13 + 3/19 + 5/31 + 5/29 + 3/17 + 2/11 + 1/5 + 5/23 + 7/31 + 3/13 + 7/29 + 5/19 + 3/11 + 2/7 + 5/17 + 7/23 + 1/3 + 7/19 + 5/13 + 2/5 + 7/17 + 3/7 + 5/11 + 1/2 + 7/13 + 3/5 + 7/11 + 2/3 + 5/7 + 1/1 + 7/5 + 3/2 + 5/3 + 2/1 + 7/3 + 5/2 + 3/1 + 7/2 + 5/1 + 7/1 diff --git a/scales/lambert.scl b/scales/lambert.scl new file mode 100644 index 0000000..3fa8f21 --- /dev/null +++ b/scales/lambert.scl @@ -0,0 +1,17 @@ +! lambert.scl +! +Lambert's temperament (1774) 1/7 Pyth. comma, 5 pure + 12 +! + 93.57600 + 197.20700 + 297.48600 + 394.41400 + 501.39600 + 591.62100 + 698.60400 + 795.53100 + 895.81100 + 999.44100 + 1093.01800 + 2/1 diff --git a/scales/lara.scl b/scales/lara.scl new file mode 100644 index 0000000..d32bcec --- /dev/null +++ b/scales/lara.scl @@ -0,0 +1,17 @@ +! lara.scl +! +Sundanese 'multi-laras' gamelan Ki Barong tuning, Weintraub, TL 15-2-99 1/1=497 + 12 +! + 157.00000 + 227.00000 + 311.00000 + 459.00000 + 633.00000 + 715.00000 + 820.00000 + 939.00000 + 1096.00000 + 2/1 + 1370.00000 + 1436.00000 diff --git a/scales/leapday46.scl b/scales/leapday46.scl new file mode 100644 index 0000000..3df837e --- /dev/null +++ b/scales/leapday46.scl @@ -0,0 +1,34 @@ +! leapday46.scl +! +13-limit temperament, minimax g=495.66296 cents + 29 +! + 26.27036 + 78.31481 + 104.58518 + 156.62963 + 182.89999 + 234.94444 + 286.98889 + 313.25925 + 365.30370 + 391.57406 + 443.61851 + 495.66296 + 521.93333 + 573.97778 + 600.24814 + 652.29259 + 678.56295 + 730.60740 + 782.65185 + 808.92221 + 860.96666 + 887.23703 + 939.28148 + 991.32593 + 9/5 + 1069.64074 + 1095.91110 + 1147.95555 + 2/1 diff --git a/scales/leapmute29.scl b/scales/leapmute29.scl new file mode 100644 index 0000000..17dd807 --- /dev/null +++ b/scales/leapmute29.scl @@ -0,0 +1,33 @@ +! leapmute29.scl +Mutant Leapday[29] +29 +! +57.1369 +75.0086 +133.0100 +154.7025 +208.1886 +266.3358 +285.8586 +342.0593 +361.5820 +419.7292 +473.2153 +494.9078 +552.9092 +570.7809 +627.9178 +651.8696 +704.4723 +761.5703 +780.5243 +838.3071 +858.0978 +913.9589 +969.8200 +989.6107 +1047.3935 +1066.3475 +1123.4455 +1176.0482 +2/1 diff --git a/scales/leapmute46.scl b/scales/leapmute46.scl new file mode 100644 index 0000000..ceaaf5e --- /dev/null +++ b/scales/leapmute46.scl @@ -0,0 +1,50 @@ +! leapmute46.scl +Mutant Leapday[46] +46 +! +21.8547 +50.5389 +79.1541 +101.1907 +129.3994 +158.4402 +180.0390 +208.3730 +230.2118 +258.7418 +287.3668 +309.4913 +338.1162 +366.6462 +388.4850 +416.8190 +438.4178 +467.4586 +495.6673 +517.7039 +546.3191 +575.0033 +596.8581 +625.2155 +654.4536 +675.8018 +704.2189 +725.9988 +754.7046 +783.1759 +805.3327 +833.8729 +862.5793 +884.3876 +912.4705 +934.2787 +962.9851 +991.5253 +1013.6822 +1042.1535 +1070.8592 +1092.6392 +1121.0562 +1142.4045 +1171.6425 +2/1 diff --git a/scales/lebanon.scl b/scales/lebanon.scl new file mode 100644 index 0000000..3b67a2b --- /dev/null +++ b/scales/lebanon.scl @@ -0,0 +1,12 @@ +! lebanon.scl +! +Lebanese scale? Dastgah Shur + 7 +! + 150.00000 + 300.00000 + 500.00000 + 700.00000 + 800.00000 + 1000.00000 + 2/1 diff --git a/scales/leedy.scl b/scales/leedy.scl new file mode 100644 index 0000000..803db01 --- /dev/null +++ b/scales/leedy.scl @@ -0,0 +1,18 @@ +! leedy.scl +! +Douglas Leedy, scale for "Pastorale" (1987), 1/1=f, 10/9 only in vocal parts + 13 +! + 33/32 + 10/9 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 5/3 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/leeuw1.scl b/scales/leeuw1.scl new file mode 100644 index 0000000..656baa2 --- /dev/null +++ b/scales/leeuw1.scl @@ -0,0 +1,18 @@ +! leeuw1.scl +! +Ton de Leeuw: non-oct. mode from "Car nos vignes sont en fleurs",part 5. 1/1=A + 13 +! + 300.00000 + 500.00000 + 650.00000 + 800.00000 + 1000.00000 + 1150.00000 + 1300.00000 + 1450.00000 + 1600.00000 + 1800.00000 + 1950.00000 + 2100.00000 + 2300.00000 diff --git a/scales/leftpistol.scl b/scales/leftpistol.scl new file mode 100644 index 0000000..692302c --- /dev/null +++ b/scales/leftpistol.scl @@ -0,0 +1,17 @@ +! leftpistol.scl +! +Left Pistol + 12 +! + 135/128 + 16/15 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/legros1.scl b/scales/legros1.scl new file mode 100644 index 0000000..f88b9d5 --- /dev/null +++ b/scales/legros1.scl @@ -0,0 +1,17 @@ +! legros1.scl +! +Example of temperament with 3 just major thirds + 12 +! + 81.42557 + 193.15686 + 290.90905 + 5/4 + 4/3 + 579.47057 + 696.57843 + 783.38057 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/legros2.scl b/scales/legros2.scl new file mode 100644 index 0000000..434dd99 --- /dev/null +++ b/scales/legros2.scl @@ -0,0 +1,17 @@ +! legros2.scl +! +Example of temperament with 2 just major thirds + 12 +! + 86.80214 + 193.15686 + 290.90905 + 5/4 + 4/3 + 584.84714 + 696.57843 + 788.75714 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/lehman1.scl b/scales/lehman1.scl new file mode 100644 index 0000000..4fd3489 --- /dev/null +++ b/scales/lehman1.scl @@ -0,0 +1,17 @@ +! lehman1.scl +! +Bradley Lehman Bach temperament I (2005) + 12 +! + 99.34748 + 196.74124 + 299.51157 + 393.48248 + 501.62938 + 597.39248 + 698.37062 + 799.51029 + 895.11186 + 999.67438 + 1095.43748 + 2/1 diff --git a/scales/lehman2.scl b/scales/lehman2.scl new file mode 100644 index 0000000..58a66da --- /dev/null +++ b/scales/lehman2.scl @@ -0,0 +1,17 @@ +! lehman2.scl +! +Bradley Lehman Bach squiggle keyboard temperament II (2005) + 12 +! + 98.04500 + 196.09000 + 298.04500 + 392.18000 + 501.95500 + 596.09000 + 698.04500 + 798.04500 + 894.13500 + 998.04500 + 1094.13500 + 2/1 diff --git a/scales/lehman3.scl b/scales/lehman3.scl new file mode 100644 index 0000000..800ba4b --- /dev/null +++ b/scales/lehman3.scl @@ -0,0 +1,17 @@ +! lehman3.scl +! +Bradley Lehman Bach temperament III (2006) + 12 +! + 94.13500 + 196.09000 + 298.04500 + 392.18000 + 4/3 + 596.09000 + 698.04500 + 800.00000 + 894.13500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/lemba10.scl b/scales/lemba10.scl new file mode 100644 index 0000000..76af1aa --- /dev/null +++ b/scales/lemba10.scl @@ -0,0 +1,15 @@ +! lemba10.scl +! +10-note Lemba scale, TOP tuning, Herman Miller + 10 +! + 139.95000 + 230.87500 + 370.82500 + 461.75000 + 601.70000 + 741.65000 + 832.57500 + 972.52500 + 1063.45000 + 1203.40000 diff --git a/scales/lemba12.scl b/scales/lemba12.scl new file mode 100644 index 0000000..89ae203 --- /dev/null +++ b/scales/lemba12.scl @@ -0,0 +1,17 @@ +! lemba12.scl +! +Lemba[12] in 270-et (poptimal) + 12 +! + 93.33333 + 137.77778 + 231.11111 + 368.88889 + 462.22222 + 600.00000 + 693.33333 + 737.77778 + 831.11111 + 968.88889 + 1062.22222 + 2/1 diff --git a/scales/lemba22.scl b/scales/lemba22.scl new file mode 100644 index 0000000..383b758 --- /dev/null +++ b/scales/lemba22.scl @@ -0,0 +1,27 @@ +! lemba22.scl +! +Lemba[22] in 270-et (poptimal) + 22 +! + 44.44444 + 93.33333 + 137.77778 + 231.11111 + 275.55556 + 324.44444 + 368.88889 + 462.22222 + 506.66667 + 555.55556 + 600.00000 + 644.44444 + 693.33333 + 737.77778 + 831.11111 + 875.55556 + 924.44444 + 968.88889 + 1062.22222 + 1106.66667 + 1155.55556 + 2/1 diff --git a/scales/lemba24.scl b/scales/lemba24.scl new file mode 100644 index 0000000..7c53f1f --- /dev/null +++ b/scales/lemba24.scl @@ -0,0 +1,29 @@ +! lemba24.scl +! +24-note Lemba scale for mapping millerlemba24.kbm + 24 +! + 90.92500 + 139.95000 + 181.85000 + 230.87500 + 279.90000 + 321.80000 + 370.82500 + 412.72500 + 461.75000 + 510.77500 + 552.67500 + 601.70000 + 692.62500 + 741.65000 + 783.55000 + 832.57500 + 881.60000 + 923.50000 + 972.52500 + 1014.42500 + 1063.45000 + 1112.47500 + 1154.37500 + 1203.40000 diff --git a/scales/lemba8.scl b/scales/lemba8.scl new file mode 100644 index 0000000..5d64096 --- /dev/null +++ b/scales/lemba8.scl @@ -0,0 +1,13 @@ +! lemba8.scl +! +Lemba temperament (4 down, 3 up) TOP tuning, Herman Miller, TL 22-11-2004 + 8 +! + 90.92429 + 139.95064 + 230.87493 + 279.90128 + 370.82557 + 461.74985 + 510.77621 + 601.70049 diff --git a/scales/leusden.scl b/scales/leusden.scl new file mode 100644 index 0000000..4e8582f --- /dev/null +++ b/scales/leusden.scl @@ -0,0 +1,17 @@ +! leusden.scl +! +Organ in Gereformeerde kerk De Koningshof, Henk van Eeken, 1984, a'=415, modif. 1/4 mean + 12 +! + 89.73529 + 193.15686 + 296.57843 + 5/4 + 503.42157 + 586.31371 + 696.57843 + 793.15686 + 889.73529 + 1000.00000 + 1082.89214 + 2/1 diff --git a/scales/levens.scl b/scales/levens.scl new file mode 100644 index 0000000..931a21c --- /dev/null +++ b/scales/levens.scl @@ -0,0 +1,17 @@ +! levens.scl +! +Charles Levens' Monochord (1743) + 12 +! + 16/15 + 8/7 + 6/5 + 24/19 + 4/3 + 24/17 + 3/2 + 8/5 + 12/7 + 16/9 + 48/25 + 2/1 diff --git a/scales/levens2.scl b/scales/levens2.scl new file mode 100644 index 0000000..f7f11da --- /dev/null +++ b/scales/levens2.scl @@ -0,0 +1,17 @@ +! levens2.scl +! +Levens' Monochord, altered form + 12 +! + 16/15 + 8/7 + 6/5 + 24/19 + 4/3 + 24/17 + 3/2 + 8/5 + 32/19 + 16/9 + 32/17 + 2/1 diff --git a/scales/ligon.scl b/scales/ligon.scl new file mode 100644 index 0000000..dddb429 --- /dev/null +++ b/scales/ligon.scl @@ -0,0 +1,17 @@ +! ligon.scl +! +Jacky Ligon, strictly proper all prime scale, TL 08-09-2000 + 12 +! + 31/29 + 19/17 + 13/11 + 29/23 + 17/13 + 7/5 + 3/2 + 11/7 + 5/3 + 23/13 + 13/7 + 2/1 diff --git a/scales/ligon10.scl b/scales/ligon10.scl new file mode 100644 index 0000000..4194607 --- /dev/null +++ b/scales/ligon10.scl @@ -0,0 +1,12 @@ +! ligon10.scl +! +Jacky Ligon, 7 tone superparticular non-octave scale 'Mercury Sand' + 7 +! + 21/20 + 21/16 + 441/320 + 9261/6400 + 194481/128000 + 194481/102400 + 4084101/2048000 diff --git a/scales/ligon11.scl b/scales/ligon11.scl new file mode 100644 index 0000000..e910688 --- /dev/null +++ b/scales/ligon11.scl @@ -0,0 +1,12 @@ +! ligon11.scl +! +Jacky Ligon, 7 tone superparticular non-octave scale + 7 +! + 20/19 + 25/19 + 500/361 + 10000/6859 + 200000/130321 + 250000/130321 + 5000000/2476099 diff --git a/scales/ligon12.scl b/scales/ligon12.scl new file mode 100644 index 0000000..4262b8d --- /dev/null +++ b/scales/ligon12.scl @@ -0,0 +1,24 @@ +! ligon12.scl +! +Jacky Ligon, scale from "Symmetries" (2011) + 19 +! + 21/20 + 15/14 + 9/8 + 8/7 + 7/6 + 9/7 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 14/9 + 12/7 + 7/4 + 16/9 + 28/15 + 40/21 + 2/1 diff --git a/scales/ligon2.scl b/scales/ligon2.scl new file mode 100644 index 0000000..6f94bc9 --- /dev/null +++ b/scales/ligon2.scl @@ -0,0 +1,17 @@ +! ligon2.scl +! +Jacky Ligon, 19-limit symmetrical non-octave scale (2001) + 12 +! + 19/18 + 19/17 + 19/16 + 19/15 + 19/14 + 19/13 + 266/169 + 285/169 + 304/169 + 323/169 + 342/169 + 361/169 diff --git a/scales/ligon3.scl b/scales/ligon3.scl new file mode 100644 index 0000000..7e8ab6c --- /dev/null +++ b/scales/ligon3.scl @@ -0,0 +1,21 @@ +! ligon3.scl +! +Jacky Ligon, 23-limit non-octave scale (2001) + 16 +! + 23/22 + 23/21 + 23/20 + 23/19 + 23/18 + 30/23 + 23/16 + 23/15 + 368/225 + 12167/6750 + 46/25 + 437/225 + 92/45 + 161/75 + 506/225 + 529/225 diff --git a/scales/ligon4.scl b/scales/ligon4.scl new file mode 100644 index 0000000..4786877 --- /dev/null +++ b/scales/ligon4.scl @@ -0,0 +1,26 @@ +! ligon4.scl +! +Jacky Ligon, 2/1 Phi Scale, TL 12-04-2001 + 21 +! + 108.20400 + 175.07800 + 283.28200 + 350.15500 + 458.35900 + 566.56300 + 674.76700 + 741.64100 + 849.84500 + 916.71800 + 1024.92200 + 1091.79600 + 2/1 + 1308.20400 + 1416.40800 + 1483.28200 + 1550.15500 + 1658.35900 + 1766.56300 + 1833.43700 + 1941.64100 diff --git a/scales/ligon5.scl b/scales/ligon5.scl new file mode 100644 index 0000000..0049e47 --- /dev/null +++ b/scales/ligon5.scl @@ -0,0 +1,21 @@ +! ligon5.scl +! +Jacky Ligon, scale for "Two Golden Flutes" (2001) + 16 +! + 75.12000 + 121.54600 + 196.66600 + 318.21200 + 393.33200 + 439.75800 + 514.87800 + 636.42400 + 711.54400 + 757.97100 + 833.09000 + 954.63700 + 1029.75600 + 1076.18300 + 1151.30200 + 1272.84900 diff --git a/scales/ligon7.scl b/scales/ligon7.scl new file mode 100644 index 0000000..b4325e9 --- /dev/null +++ b/scales/ligon7.scl @@ -0,0 +1,12 @@ +! ligon7.scl +! +Jacky Ligon, 7 tone, 27/22=generator, MMM 22-01-2002 + 7 +! + 9/8 + 27/22 + 243/176 + 729/484 + 6561/3872 + 19683/10648 + 59049/29282 diff --git a/scales/ligon8.scl b/scales/ligon8.scl new file mode 100644 index 0000000..1c92a49 --- /dev/null +++ b/scales/ligon8.scl @@ -0,0 +1,10 @@ +! ligon8.scl +! +Jacky Ligon, 5 tone superparticular non-octave scale + 5 +! + 13/12 + 65/48 + 845/576 + 4225/2304 + 54925/27648 diff --git a/scales/ligon9.scl b/scales/ligon9.scl new file mode 100644 index 0000000..b749ef8 --- /dev/null +++ b/scales/ligon9.scl @@ -0,0 +1,10 @@ +! ligon9.scl +! +Jacky Ligon, 5 tone superparticular non-octave scale + 5 +! + 6/5 + 84/65 + 504/325 + 7056/4225 + 42336/21125 diff --git a/scales/lindley-ortgies1.scl b/scales/lindley-ortgies1.scl new file mode 100644 index 0000000..ad8cfe8 --- /dev/null +++ b/scales/lindley-ortgies1.scl @@ -0,0 +1,17 @@ +! lindley-ortgies1.scl +! +Lindley-Ortgies I Bach temperament (2006), Early Music 34/4, Nov. 2006 + 12 +! + 96.09000 + 198.04500 + 298.04500 + 396.09000 + 500.97750 + 596.09000 + 699.02250 + 797.06750 + 897.06750 + 999.02250 + 1096.09000 + 2/1 diff --git a/scales/lindley-ortgies2.scl b/scales/lindley-ortgies2.scl new file mode 100644 index 0000000..570f770 --- /dev/null +++ b/scales/lindley-ortgies2.scl @@ -0,0 +1,17 @@ +! lindley-ortgies2.scl +! +Lindley-Ortgies II Bach temperament (2006), Early Music 34/4, Nov. 2006 + 12 +! + 94.13500 + 196.09000 + 296.09000 + 392.18000 + 496.09000 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 16/9 + 1090.22500 + 2/1 diff --git a/scales/lindley1.scl b/scales/lindley1.scl new file mode 100644 index 0000000..bae9c77 --- /dev/null +++ b/scales/lindley1.scl @@ -0,0 +1,17 @@ +! lindley1.scl +! +Mark Lindley I Bach temperament (1993) + 12 +! + 93.73361 + 196.38818 + 296.49491 + 392.77635 + 500.53013 + 592.98992 + 698.19409 + 794.47730 + 894.58227 + 998.51252 + 1092.24622 + 2/1 diff --git a/scales/lindley2.scl b/scales/lindley2.scl new file mode 100644 index 0000000..12060ed --- /dev/null +++ b/scales/lindley2.scl @@ -0,0 +1,17 @@ +! lindley2.scl +! +Mark Lindley II Average Neidhardt temperaments (1993) + 12 +! + 95.11250 + 196.09000 + 297.06750 + 393.15750 + 499.02250 + 594.13500 + 698.04500 + 796.09000 + 894.13500 + 998.04500 + 1094.13500 + 2/1 diff --git a/scales/lindley_ea.scl b/scales/lindley_ea.scl new file mode 100644 index 0000000..ec4ce21 --- /dev/null +++ b/scales/lindley_ea.scl @@ -0,0 +1,17 @@ +! lindley_ea.scl +! +Mark Lindley +J. de Boer +W. Drake (1991), for organ Grosvenor Chapel, London + 12 +! + 256/243 + 196.09000 + 32/27 + 392.18000 + 501.95500 + 590.22500 + 698.04500 + 128/81 + 894.13500 + 998.04500 + 1090.22500 + 2/1 diff --git a/scales/lindley_sf.scl b/scales/lindley_sf.scl new file mode 100644 index 0000000..f47f929 --- /dev/null +++ b/scales/lindley_sf.scl @@ -0,0 +1,17 @@ +! lindley_sf.scl +! +Lindley (1988) suggestion nr. 2 for Stanford Fisk organ + 12 +! + 94.13500 + 196.09000 + 32/27 + 392.18000 + 501.95500 + 592.18000 + 698.04500 + 794.13500 + 894.13500 + 998.04500 + 1090.22500 + 2/1 diff --git a/scales/line40.scl b/scales/line40.scl new file mode 100644 index 0000000..dbab702 --- /dev/null +++ b/scales/line40.scl @@ -0,0 +1,44 @@ +! line40.scl +|11 -10 -10 10> tempered line scale in 2080-tET tuning +40 +! +8.65385 +26.53846 +102.11538 +120.00000 +128.65385 +146.53846 +222.11538 +240.00000 +248.65385 +266.53846 +342.11538 +360.00000 +368.65385 +386.53846 +462.11538 +480.00000 +488.65385 +506.53846 +582.11538 +600.00000 +608.65385 +626.53846 +702.11538 +720.00000 +728.65385 +746.53846 +822.11538 +840.00000 +848.65385 +866.53846 +942.11538 +960.00000 +968.65385 +986.53846 +1062.11538 +1080.00000 +1088.65385 +1106.53846 +1182.11538 +2/1 diff --git a/scales/linemarv12.scl b/scales/linemarv12.scl new file mode 100644 index 0000000..1e4f41b --- /dev/null +++ b/scales/linemarv12.scl @@ -0,0 +1,16 @@ +! linemarv12.scl +[0, 0, 0] to [0, 0, 5] +12 +! +115.587047 +231.174094 +346.761140 +384.385833 +499.972880 +615.559927 +700.027120 +815.614167 +931.201214 +968.825906 +1084.412953 +2/1 diff --git a/scales/liu_major.scl b/scales/liu_major.scl new file mode 100644 index 0000000..4f91994 --- /dev/null +++ b/scales/liu_major.scl @@ -0,0 +1,12 @@ +! liu_major.scl +! +Linus Liu's Major Scale, see his 1978 book, "Intonation Theory" + 7 +! + 10/9 + 100/81 + 4/3 + 3/2 + 5/3 + 50/27 + 2/1 diff --git a/scales/liu_mel.scl b/scales/liu_mel.scl new file mode 100644 index 0000000..5bbd4a3 --- /dev/null +++ b/scales/liu_mel.scl @@ -0,0 +1,14 @@ +! liu_mel.scl +! +Linus Liu's Melodic Minor, use 5 and 7 descending and 6 and 8 ascending + 9 +! + 10/9 + 6/5 + 4/3 + 3/2 + 81/50 + 5/3 + 9/5 + 50/27 + 2/1 diff --git a/scales/liu_minor.scl b/scales/liu_minor.scl new file mode 100644 index 0000000..4261949 --- /dev/null +++ b/scales/liu_minor.scl @@ -0,0 +1,12 @@ +! LIU_MINor.scl +! +Linus Liu's Harmonic Minor + 7 +! + 10/9 + 6/5 + 4/3 + 40/27 + 8/5 + 50/27 + 2/1 diff --git a/scales/liu_pent.scl b/scales/liu_pent.scl new file mode 100644 index 0000000..c1dc4a4 --- /dev/null +++ b/scales/liu_pent.scl @@ -0,0 +1,12 @@ +! liu_pent.scl +! +Linus Liu's "pentatonic scale" + 7 +! + 9/8 + 81/64 + 27/20 + 3/2 + 27/16 + 243/128 + 81/40 diff --git a/scales/locomotive.scl b/scales/locomotive.scl new file mode 100644 index 0000000..805debd --- /dev/null +++ b/scales/locomotive.scl @@ -0,0 +1,17 @@ +! locomotive.scl +! +A 2.9.11.13 subgroup scale, Gene Ward Smith + 12 +! + 88/81 + 9/8 + 11/9 + 16/13 + 11/8 + 13/9 + 16/11 + 13/8 + 18/11 + 16/9 + 81/44 + 2/1 diff --git a/scales/london-baroque.scl b/scales/london-baroque.scl new file mode 100644 index 0000000..5503ad4 --- /dev/null +++ b/scales/london-baroque.scl @@ -0,0 +1,17 @@ +! london-baroque.scl +! +Well-temperament used by London Baroque, close to Young + 12 +! + 256/243 + 196.09000 + 32/27 + 394.13500 + 4/3 + 590.22500 + 698.04500 + 128/81 + 894.13500 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/lorenzi-m.scl b/scales/lorenzi-m.scl new file mode 100644 index 0000000..b60a35f --- /dev/null +++ b/scales/lorenzi-m.scl @@ -0,0 +1,17 @@ +! lorenzi-m.scl +! +De Lorenzi's Metrofono (monochord) tuning (1870), Barbieri 2009 + 12 +! + 17/16 + 37/33 + 19/16 + 63/50 + 295/221 + 17/12 + 127/85 + 65/41 + 121/72 + 73/41 + 32/17 + 2/1 diff --git a/scales/lorenzi.scl b/scales/lorenzi.scl new file mode 100644 index 0000000..1d83221 --- /dev/null +++ b/scales/lorenzi.scl @@ -0,0 +1,17 @@ +! lorenzi.scl +! +Giambattista de Lorenzi, Venetian temperament (c. 1830), Barbieri, 1986 + 12 +! + 97.55529 + 198.53343 + 299.51156 + 397.06686 + 499.83718 + 597.39248 + 699.26671 + 798.53273 + 897.80014 + 999.67437 + 1097.22967 + 2/1 diff --git a/scales/lorina.scl b/scales/lorina.scl new file mode 100644 index 0000000..47b865e --- /dev/null +++ b/scales/lorina.scl @@ -0,0 +1,17 @@ +! lorina.scl +! +Lorina + 12 +! + 28/27 + 28/25 + 7/6 + 6/5 + 4/3 + 4/3 + 28/19 + 14/9 + 7/4 + 7/4 + 16/9 + 2/1 diff --git a/scales/lublin.scl b/scales/lublin.scl new file mode 100644 index 0000000..0ce9c87 --- /dev/null +++ b/scales/lublin.scl @@ -0,0 +1,17 @@ +! lublin.scl +! +Johannes von Lublin (1540) interpr. by Franz Joseph Ratte, p. 255 + 12 +! + 85.22372 + 196.95500 + 301.09000 + 400.86500 + 505.00000 + 604.77501 + 3/2 + 787.17872 + 898.91000 + 1003.04500 + 1102.82000 + 2/1 diff --git a/scales/lucktenberg.scl b/scales/lucktenberg.scl new file mode 100644 index 0000000..363dabd --- /dev/null +++ b/scales/lucktenberg.scl @@ -0,0 +1,17 @@ +! lucktenberg.scl +! +George Lucktenberg, general purpose temperament, 1/8P, SEHKS Newsletter vol.26 no.1 (2005) + 12 +! + 99.02250 + 198.04500 + 300.00000 + 396.09000 + 500.97750 + 597.06750 + 699.02250 + 798.04500 + 897.06750 + 999.02250 + 1095.11250 + 2/1 diff --git a/scales/lucy01and07tuned0b5s.scl b/scales/lucy01and07tuned0b5s.scl new file mode 100644 index 0000000..6bdedc5 --- /dev/null +++ b/scales/lucy01and07tuned0b5s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy01&07Tuned 0b5s RootKeyA = CC#DD#EFF#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy02and14tuned5b0s.scl b/scales/lucy02and14tuned5b0s.scl new file mode 100644 index 0000000..eccc475 --- /dev/null +++ b/scales/lucy02and14tuned5b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy02Tuned 5b0s RootKeyA = CDbDEbEFGbGAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy03tuned4b1s.scl b/scales/lucy03tuned4b1s.scl new file mode 100644 index 0000000..160e203 --- /dev/null +++ b/scales/lucy03tuned4b1s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy03Tuned 4b1s RootKeyA = CDbDEbEFF#GAbAB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy04and21tuned3b2s.scl b/scales/lucy04and21tuned3b2s.scl new file mode 100644 index 0000000..6d55234 --- /dev/null +++ b/scales/lucy04and21tuned3b2s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy04Tuned 3b2s RootKeyA = CC#DEbEFF#GAbAB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy05tuned2b3s.scl b/scales/lucy05tuned2b3s.scl new file mode 100644 index 0000000..7871e92 --- /dev/null +++ b/scales/lucy05tuned2b3s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy05Tuned 2b3s RootKeyA = CC#DEbEFF#GG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy06tuned1b4s.scl b/scales/lucy06tuned1b4s.scl new file mode 100644 index 0000000..67bdf75 --- /dev/null +++ b/scales/lucy06tuned1b4s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy06Tuned 1b4s RootKeyA = CC#DD#EFF#GG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy08tuned0b6s.scl b/scales/lucy08tuned0b6s.scl new file mode 100644 index 0000000..140c1ee --- /dev/null +++ b/scales/lucy08tuned0b6s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy08Tuned 0b6s RootKeyA = CC#DD#EE#F#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 763.94373 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy09tuned0b7s.scl b/scales/lucy09tuned0b7s.scl new file mode 100644 index 0000000..4e41468 --- /dev/null +++ b/scales/lucy09tuned0b7s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy09Tuned 0b7s RootKeyA = B#C#DD#EE#F#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 259.43669 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 763.94373 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy10tuned0b8s.scl b/scales/lucy10tuned0b8s.scl new file mode 100644 index 0000000..8059e79 --- /dev/null +++ b/scales/lucy10tuned0b8s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy10Tuned 0b8s RootKeyA = B#C#DD#EE#F#FxG#AA#B + 12 +! + 68.45076 + 190.98593 + 259.43669 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 763.94373 + 886.47890 + 954.92965 + 1077.46483 + 2/1 diff --git a/scales/lucy11tuned0b9s.scl b/scales/lucy11tuned0b9s.scl new file mode 100644 index 0000000..bb32515 --- /dev/null +++ b/scales/lucy11tuned0b9s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy11Tuned 0b9s RootKeyA = B#C#CxD#EE#F#FxG#AA#B + 12 +! + 68.45076 + 190.98593 + 259.43669 + 381.97187 + 450.42262 + 572.95780 + 695.49297 + 763.94373 + 886.47890 + 954.92965 + 1077.46483 + 2/1 diff --git a/scales/lucy13Gxtuned0b11s.scl b/scales/lucy13Gxtuned0b11s.scl new file mode 100644 index 0000000..e2069e6 --- /dev/null +++ b/scales/lucy13Gxtuned0b11s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy13Tuned 0b11s RootKeyA (resetAtoGx=-54.1) plays B#C#CxD#DxE#F#FxG#GxA#B + 12 +! + 68.45076 + 190.98593 + 259.43669 + 381.97187 + 450.42262 + 572.95780 + 641.40855 + 763.94373 + 886.47890 + 954.92965 + 1077.46483 + 2/1 diff --git a/scales/lucy15tuned6b0s.scl b/scales/lucy15tuned6b0s.scl new file mode 100644 index 0000000..ee6bb3e --- /dev/null +++ b/scales/lucy15tuned6b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy15Tuned 6b0s RootKeyA = CDbDEbEFGbGAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy16tuned7b0s.scl b/scales/lucy16tuned7b0s.scl new file mode 100644 index 0000000..d838853 --- /dev/null +++ b/scales/lucy16tuned7b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy16Tuned 7b0s RootKeyA = CDbDEbFbFGbGAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 749.57737 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 \ No newline at end of file diff --git a/scales/lucy18Bbbtuned9b0s.scl b/scales/lucy18Bbbtuned9b0s.scl new file mode 100644 index 0000000..2b45398 --- /dev/null +++ b/scales/lucy18Bbbtuned9b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy18Tuned 9b0s RootKeyA (resetAtoBbb=+54.1) plays CDbEbbEbFbFGbGAbBbbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 558.59144 + 627.04220 + 749.57737 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy19Bbbtuned10b0s.scl b/scales/lucy19Bbbtuned10b0s.scl new file mode 100644 index 0000000..c57f2f1 --- /dev/null +++ b/scales/lucy19Bbbtuned10b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy19Tuned 10b0s RootKeyA (resetAtoBbb=+54.1) plays CDbEbbEbFbFGbAbbAbBbbBbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 558.59144 + 627.04220 + 749.57737 + 818.02813 + 940.56331 + 1063.09848 + 1131.54923 + 2/1 \ No newline at end of file diff --git a/scales/lucy20Bbbtuned11b0s.scl b/scales/lucy20Bbbtuned11b0s.scl new file mode 100644 index 0000000..6ef73b9 --- /dev/null +++ b/scales/lucy20Bbbtuned11b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy20Tuned 11b0s RootKeyA (resetAtoBbb=+54.1) plays DbbDbEbbEbFbFGbAbbAbBbbCb + 12 +! + 122.53517 + 245.07034 + 367.60551 + 436.05627 + 558.59144 + 627.04220 + 749.57737 + 818.02813 + 940.56331 + 1063.09848 + 1131.54923 + 2/1 \ No newline at end of file diff --git a/scales/lucy22tuned4bGs.scl b/scales/lucy22tuned4bGs.scl new file mode 100644 index 0000000..38326a3 --- /dev/null +++ b/scales/lucy22tuned4bGs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy22Tuned 4bGs RootKeyA = CDbDEbEFGbGG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy23tuned4bDs.scl b/scales/lucy23tuned4bDs.scl new file mode 100644 index 0000000..66efd23 --- /dev/null +++ b/scales/lucy23tuned4bDs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy23Tuned 4bDs RootKeyA = CDbDD#EFGbGAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy24tuned4bCs.scl b/scales/lucy24tuned4bCs.scl new file mode 100644 index 0000000..ce71622 --- /dev/null +++ b/scales/lucy24tuned4bCs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy24Tuned 4bCs RootKeyA = CC#DEbEFGbGAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97186 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy25tunedAb4s.scl b/scales/lucy25tunedAb4s.scl new file mode 100644 index 0000000..3d5037f --- /dev/null +++ b/scales/lucy25tunedAb4s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy25Tuned Ab4s RootKeyA = CC#DD#EFF#GAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy26tunedGb4s.scl b/scales/lucy26tunedGb4s.scl new file mode 100644 index 0000000..b7bd008 --- /dev/null +++ b/scales/lucy26tunedGb4s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy26Tuned Gb4s RootKeyA = CC#DD#EFGbGG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56330 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy27tunedEb5s.scl b/scales/lucy27tunedEb5s.scl new file mode 100644 index 0000000..b9d6991 --- /dev/null +++ b/scales/lucy27tunedEb5s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy27Tuned Eb4s RootKeyA = CC#DEbEFF#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy28tunedDb4s.scl b/scales/lucy28tunedDb4s.scl new file mode 100644 index 0000000..b5fd449 --- /dev/null +++ b/scales/lucy28tunedDb4s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy28Tuned 0b5s RootKeyA = CDbDD#EFF#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy29tunedBbAbGbCsDs.scl b/scales/lucy29tunedBbAbGbCsDs.scl new file mode 100644 index 0000000..0b14313 --- /dev/null +++ b/scales/lucy29tunedBbAbGbCsDs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy29TunedBbAbGbCsDs RootKeyA = CC#DD#EFGbGAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy30tunedBbEbGbCsGs.scl b/scales/lucy30tunedBbEbGbCsGs.scl new file mode 100644 index 0000000..e79e680 --- /dev/null +++ b/scales/lucy30tunedBbEbGbCsGs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy30TunedBbEbGbCsGs RootKeyA = CC#DEbEFGbGG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 +1009.01407 +1077.46483 + 2/1 diff --git a/scales/lucy31tuned3b2sCsAs.scl b/scales/lucy31tuned3b2sCsAs.scl new file mode 100644 index 0000000..d3b1d4e --- /dev/null +++ b/scales/lucy31tuned3b2sCsAs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy31Tuned 3b2s RootKeyA = CC#DEbEFGbGAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy32tuned3b2sDsFs.scl b/scales/lucy32tuned3b2sDsFs.scl new file mode 100644 index 0000000..8a8052a --- /dev/null +++ b/scales/lucy32tuned3b2sDsFs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy32Tuned 3b2s RootKeyA = CDbDD#EFF#GAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy33tuned3b2sDsGs.scl b/scales/lucy33tuned3b2sDsGs.scl new file mode 100644 index 0000000..c08a77e --- /dev/null +++ b/scales/lucy33tuned3b2sDsGs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy33Tuned 3b2s RootKeyA = CDbDD#EFGbGG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy34tuned3b2sDsAs.scl b/scales/lucy34tuned3b2sDsAs.scl new file mode 100644 index 0000000..5f4d930 --- /dev/null +++ b/scales/lucy34tuned3b2sDsAs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy34Tuned 3b2s RootKeyA = CDbDD#EFGbGAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy35tuned3b2sFsGs.scl b/scales/lucy35tuned3b2sFsGs.scl new file mode 100644 index 0000000..9d0b58f --- /dev/null +++ b/scales/lucy35tuned3b2sFsGs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy35Tuned 3b2s RootKeyA = CDbDEbEFF#GG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy36tuned3b2sFsAs.scl b/scales/lucy36tuned3b2sFsAs.scl new file mode 100644 index 0000000..15f27cf --- /dev/null +++ b/scales/lucy36tuned3b2sFsAs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy36Tuned 3b2s RootKeyA = CDbDEbEFF#GAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy37tuned3b2sGsAs.scl b/scales/lucy37tuned3b2sGsAs.scl new file mode 100644 index 0000000..dc8c9f7 --- /dev/null +++ b/scales/lucy37tuned3b2sGsAs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy37Tuned 3b2s RootKeyA = CDbDEbEFGbGG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy38tuned2b3sDbEb.scl b/scales/lucy38tuned2b3sDbEb.scl new file mode 100644 index 0000000..f533d90 --- /dev/null +++ b/scales/lucy38tuned2b3sDbEb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy38Tuned 2b3s RootKeyA = CDbDEbEFF#GG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy39tuned2b3sDbGb.scl b/scales/lucy39tuned2b3sDbGb.scl new file mode 100644 index 0000000..52a0c34 --- /dev/null +++ b/scales/lucy39tuned2b3sDbGb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy39Tuned 2b3s RootKeyA = CDbDD#EFGbGG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56330 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy40tuned2b3sDbAb.scl b/scales/lucy40tuned2b3sDbAb.scl new file mode 100644 index 0000000..29fc03a --- /dev/null +++ b/scales/lucy40tuned2b3sDbAb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy40Tuned 2b3s RootKeyA = CDbDD#EFF#GAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy41tuned2b3sDbBb.scl b/scales/lucy41tuned2b3sDbBb.scl new file mode 100644 index 0000000..007bbc0 --- /dev/null +++ b/scales/lucy41tuned2b3sDbBb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy41Tuned 2b3s RootKeyA = CDbDD#EFF#GG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy42tuned2b3sEbGb.scl b/scales/lucy42tuned2b3sEbGb.scl new file mode 100644 index 0000000..b1c39ce --- /dev/null +++ b/scales/lucy42tuned2b3sEbGb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy42Tuned 2b3s RootKeyA = CC#DEbEFGbGG#AA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56330 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy43tuned2b3sEbAb.scl b/scales/lucy43tuned2b3sEbAb.scl new file mode 100644 index 0000000..a31413b --- /dev/null +++ b/scales/lucy43tuned2b3sEbAb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy43Tuned 2b3s RootKeyA = CC#DEbEFF#GAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy44tuned2b3sGbAb.scl b/scales/lucy44tuned2b3sGbAb.scl new file mode 100644 index 0000000..ed02238 --- /dev/null +++ b/scales/lucy44tuned2b3sGbAb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy44Tuned 2b3s RootKeyA = CC#DD#EFGbGAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56330 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy45tuned2b3sGbBb.scl b/scales/lucy45tuned2b3sGbBb.scl new file mode 100644 index 0000000..9f3896b --- /dev/null +++ b/scales/lucy45tuned2b3sGbBb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy45Tuned 2b3s RootKeyA = CC#DD#EFGbGG#ABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 940.56330 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy46tuned2b3sAbBb.scl b/scales/lucy46tuned2b3sAbBb.scl new file mode 100644 index 0000000..dbf1bad --- /dev/null +++ b/scales/lucy46tuned2b3sAbBb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy46Tuned 2b3s RootKeyA = CC#DD#EFF#GAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97187 + 504.50703 + 572.95780 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy50Bbbtuned6b1sFs.scl b/scales/lucy50Bbbtuned6b1sFs.scl new file mode 100644 index 0000000..9d0ffa3 --- /dev/null +++ b/scales/lucy50Bbbtuned6b1sFs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy50Tuned 6b1s RootKeyA (resetAtoBbb=+54.1) plays CDbDEbEFF#GAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 749.57737 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy51Bbbtuned3b3sBbEbDbBbbFsGsFx.scl b/scales/lucy51Bbbtuned3b3sBbEbDbBbbFsGsFx.scl new file mode 100644 index 0000000..0844f4e --- /dev/null +++ b/scales/lucy51Bbbtuned3b3sBbEbDbBbbFsGsFx.scl @@ -0,0 +1,16 @@ +! +0A440Lucy51Tuned 3b3s RootKeyA (resetAtoBbb=+54.1) plays CDbDEbEFF#FxG#BbbBbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 954.92965 + 1077.46483 + 2/1 \ No newline at end of file diff --git a/scales/lucy52tuned4b1sAs.scl b/scales/lucy52tuned4b1sAs.scl new file mode 100644 index 0000000..4a38409 --- /dev/null +++ b/scales/lucy52tuned4b1sAs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy52Tuned 4b1s RootKeyA = CDbDEbEFGbGAbAA#B + 12 +! + 68.45076 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy53tuned4b2sCsFCb.scl b/scales/lucy53tuned4b2sCsFCb.scl new file mode 100644 index 0000000..a596f80 --- /dev/null +++ b/scales/lucy53tuned4b2sCsFCb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy53Tuned 4b2s RootKeyA = CC#DEbEFF#GAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 381.97186 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy55tuned3b3sCxFb.scl b/scales/lucy55tuned3b3sCxFb.scl new file mode 100644 index 0000000..1bed858 --- /dev/null +++ b/scales/lucy55tuned3b3sCxFb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy55Tuned 3b3s RootKeyA = CC#CxEbFbFF#GAbABbB + 12 +! + 122.53517 + 190.98593 + 313.52110 + 381.97186 + 450.42262 + 627.04220 + 749.57738 + 818.02813 + 886.47890 + 1009.01407 + 1131.54924 + 2/1 diff --git a/scales/lucy56tuned4b3sEs.scl b/scales/lucy56tuned4b3sEs.scl new file mode 100644 index 0000000..cc2c635 --- /dev/null +++ b/scales/lucy56tuned4b3sEs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy56Tuned 4b3s RootKeyA = CC#DEbEE#F#GAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 381.97186 + 504.50703 + 627.04220 + 695.49297 + 763.94372 + 886.47890 + 1009.01407 + 1131.54924 + 2/1 \ No newline at end of file diff --git a/scales/lucy57tuned7b0sAbbGbb.scl b/scales/lucy57tuned7b0sAbbGbb.scl new file mode 100644 index 0000000..29a3615 --- /dev/null +++ b/scales/lucy57tuned7b0sAbbGbb.scl @@ -0,0 +1,16 @@ +! +0A440Lucy57Tuned 7b BbEbAbDbGbAbbGbb RootKeyA = CDbDEbEGbbGbAbbAbABbCb + 12 +! + 122.53517 + 190.98593 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 872.11255 + 940.56331 + 1063.09848 + 1131.54924 + 2/1 \ No newline at end of file diff --git a/scales/lucy58tuned5b2sEs.scl b/scales/lucy58tuned5b2sEs.scl new file mode 100644 index 0000000..6134862 --- /dev/null +++ b/scales/lucy58tuned5b2sEs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy58Tuned 5b2s RootKeyA = CDbDEbEE#F#GAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 763.94372 + 886.47890 + 1009.01407 + 1131.54924 + 2/1 diff --git a/scales/lucy59Bbbtuned9b0sE.scl b/scales/lucy59Bbbtuned9b0sE.scl new file mode 100644 index 0000000..4ce8d61 --- /dev/null +++ b/scales/lucy59Bbbtuned9b0sE.scl @@ -0,0 +1,16 @@ +! +0A440Lucy59Tuned 9b0s RootKeyA (resetAtoBbb=+54.1) plays CDbEbbEbEFGbAbbAbBbbBbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 558.59144 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1063.09848 + 1131.54923 + 2/1 diff --git a/scales/lucy60tuned3b4sEs.scl b/scales/lucy60tuned3b4sEs.scl new file mode 100644 index 0000000..2af1e74 --- /dev/null +++ b/scales/lucy60tuned3b4sEs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy60Tuned 3b4s RootKeyA = CDbDEbEE#F#GG#AA#Cb + 12 +! + 68.45076 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 763.94372 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy61Bbbtuned8b1s.scl b/scales/lucy61Bbbtuned8b1s.scl new file mode 100644 index 0000000..e3e9437 --- /dev/null +++ b/scales/lucy61Bbbtuned8b1s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy61Tuned 8b1s RootKeyA (resetAtoBbb=+54.1) plays CDbEbbEbFbFGbGAbBbbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 558.59144 + 627.04220 + 749.57737 + 818.02814 + 886.47890 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy62tuned4b3sBbbEs.scl b/scales/lucy62tuned4b3sBbbEs.scl new file mode 100644 index 0000000..0fdcd95 --- /dev/null +++ b/scales/lucy62tuned4b3sBbbEs.scl @@ -0,0 +1,16 @@ +! +0A440Lucy62Tuned 4b3s RootKeyA = CC#DEbEE#F#GAbABbbCb + 12 +! + 54.084410 + 245.07034 + 313.52110 + 381.97186 + 504.50703 + 627.04220 + 695.49297 + 763.94372 + 886.47890 + 1009.01407 + 1131.54924 + 2/1 diff --git a/scales/lucy63tuned5b0s.scl b/scales/lucy63tuned5b0s.scl new file mode 100644 index 0000000..7ecc576 --- /dev/null +++ b/scales/lucy63tuned5b0s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy63Tuned 5b0s RootKeyA = CDbDEbEFGbGGxABbAx + 12 +! + 122.53517 + 136.90152 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 940.56331 + 1009.01407 + 1145.91559 + 2/1 diff --git a/scales/lucy64tuned7b0snoF.scl b/scales/lucy64tuned7b0snoF.scl new file mode 100644 index 0000000..1389579 --- /dev/null +++ b/scales/lucy64tuned7b0snoF.scl @@ -0,0 +1,16 @@ +! +0A440Lucy64Tuned 7b0s no F RootKeyA = CDbDEbEFbGbGAbABbCb + 12 +! + 122.53517 + 245.07034 + 313.52110 + 436.05627 + 504.50703 + 627.04220 + 695.49297 + 749.57738 + 940.56331 + 1009.01407 + 1131.54923 + 2/1 diff --git a/scales/lucy65tuned2b3s.scl b/scales/lucy65tuned2b3s.scl new file mode 100644 index 0000000..2214da9 --- /dev/null +++ b/scales/lucy65tuned2b3s.scl @@ -0,0 +1,16 @@ +! +0A440Lucy65Tuned 2b4s RootKeyA = CC#DEbEFF#GG#ABbA# + 12 +! + 68.45076 + 122.53517 + 313.52110 + 381.97187 + 504.50703 + 627.04220 + 695.49297 + 818.02813 + 886.47890 + 1009.01407 + 1077.46483 + 2/1 diff --git a/scales/lucy_19.scl b/scales/lucy_19.scl new file mode 100644 index 0000000..f538300 --- /dev/null +++ b/scales/lucy_19.scl @@ -0,0 +1,24 @@ +! lucy_19.scl +! +Lucy's 19-tone scale + 19 +! + 68.451 cents + 122.535 cents + 190.986 cents + 245.070 cents + 313.521 cents + 381.972 cents + 436.056 cents + 504.507 cents + 572.958 cents + 627.042 cents + 695.493 cents + 763.944 cents + 818.028 cents + 886.479 cents + 940.563 cents + 1009.014 cents + 1077.465 cents + 1131.549 cents + 2/1 diff --git a/scales/lucy_24.scl b/scales/lucy_24.scl new file mode 100644 index 0000000..2c0d154 --- /dev/null +++ b/scales/lucy_24.scl @@ -0,0 +1,29 @@ +! lucy_24.scl +! +Lucy/Harrison, meantone tuning from Bbb to Cx, third=1200.0/pi, 1/1=A + 24 +! + 54.08441 + 68.45076 + 122.53517 + 190.98593 + 245.07034 + 259.43669 + 313.52110 + 381.97186 + 436.05627 + 450.42262 + 504.50703 + 572.95780 + 627.04220 + 695.49297 + 749.57738 + 763.94373 + 818.02814 + 886.47890 + 940.56331 + 954.92966 + 1009.01407 + 1077.46483 + 1131.54924 + 2/1 diff --git a/scales/lucy_31.scl b/scales/lucy_31.scl new file mode 100644 index 0000000..b4129c5 --- /dev/null +++ b/scales/lucy_31.scl @@ -0,0 +1,36 @@ +! lucy_31.scl +! +Lucy/Harrison's meantone tuning, 1/1=A + 31 +! + 54.08441 + 68.45076 + 122.53517 + 136.90152 + 190.98593 + 245.07034 + 259.43669 + 313.52110 + 367.60551 + 381.97186 + 436.05627 + 450.42262 + 504.50703 + 558.59144 + 572.95780 + 627.04220 + 641.40856 + 695.49297 + 749.57738 + 763.94373 + 818.02814 + 872.11255 + 886.47890 + 940.56331 + 954.92966 + 1009.01407 + 1063.09848 + 1077.46483 + 1131.54924 + 1145.91559 + 2/1 diff --git a/scales/lucy_7.scl b/scales/lucy_7.scl new file mode 100644 index 0000000..6a237a6 --- /dev/null +++ b/scales/lucy_7.scl @@ -0,0 +1,12 @@ +! lucy_7.scl +! +Diatonic Lucy's scale + 7 +! + 190.986 cents + 381.972 cents + 504.507 cents + 695.493 cents + 886.479 cents + 1077.465 cents + 2/1 diff --git a/scales/lumma5.scl b/scales/lumma5.scl new file mode 100644 index 0000000..3179b5b --- /dev/null +++ b/scales/lumma5.scl @@ -0,0 +1,17 @@ +! lumma5.scl +! +Carl Lumma's 5-limit version of lumma7, also Fokker 12-tone just. + 12 +! + 16/15 + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 225/128 + 15/8 + 2/1 diff --git a/scales/lumma_10.scl b/scales/lumma_10.scl new file mode 100644 index 0000000..c24bd49 --- /dev/null +++ b/scales/lumma_10.scl @@ -0,0 +1,15 @@ +! lumma_10.scl +! +Carl Lumma's 10-tone 125 cent Pyth. scale, TL 29-12-1999 + 10 +! + 125.00000 + 250.00000 + 375.00000 + 500.00000 + 625.00000 + 700.00000 + 825.00000 + 950.00000 + 1075.00000 + 2/1 diff --git a/scales/lumma_12_fun.scl b/scales/lumma_12_fun.scl new file mode 100644 index 0000000..fdeb1b4 --- /dev/null +++ b/scales/lumma_12_fun.scl @@ -0,0 +1,17 @@ +! lumma_12_fun.scl +! +Rational well temperament based on 577/289, 3/2, and 19/16 + 12 +! + 19/18 + 18464/16473 + 19/16 + 361/288 + 1154/867 + 361/256 + 73856/49419 + 10963/6936 + 9232/5491 + 4616/2601 + 208297/110976 + 577/289 diff --git a/scales/lumma_12_moh-ha-ha.scl b/scales/lumma_12_moh-ha-ha.scl new file mode 100644 index 0000000..404c94b --- /dev/null +++ b/scales/lumma_12_moh-ha-ha.scl @@ -0,0 +1,17 @@ +! lumma_12_moh-ha-ha.scl +! +Rational well temperament + 12 +! + 19/18 + 323/288 + 19/16 + 323/256 + 171/128 + 361/256 + 551/368 + 19/12 + 323/192 + 57/32 + 513/272 + 2/1 diff --git a/scales/lumma_12_strangeion.scl b/scales/lumma_12_strangeion.scl new file mode 100644 index 0000000..3ef9114 --- /dev/null +++ b/scales/lumma_12_strangeion.scl @@ -0,0 +1,17 @@ +! lumma_12_strangeion.scl +! +19-limit "dodekaphonic" scale + 12 +! + 17/16 + 19/17 + 19/16 + 323/256 + 8192/6137 + 361/256 + 6137/4096 + 512/323 + 32/19 + 34/19 + 32/17 + 2/1 diff --git a/scales/lumma_12p5.scl b/scales/lumma_12p5.scl new file mode 100644 index 0000000..e596fe8 --- /dev/null +++ b/scales/lumma_12p5.scl @@ -0,0 +1,17 @@ +! lumma_12p5.scl +! +Well-temperament 1/5Pyth. comma C-G-D A-E-B G#-Eb + 12 +! + 94.91700 + 194.52600 + 32/27 + 393.74400 + 4/3 + 592.96200 + 697.26300 + 796.87200 + 896.48100 + 16/9 + 1091.00700 + 2/1 diff --git a/scales/lumma_12p6.scl b/scales/lumma_12p6.scl new file mode 100644 index 0000000..c15e6e6 --- /dev/null +++ b/scales/lumma_12p6.scl @@ -0,0 +1,17 @@ +! lumma_12p6.scl +! +Well-temperament 1/6Pyth. comma C-G-D-A-E-B G#-Eb + 12 +! + 94.13500 + 196.09000 + 32/27 + 392.18000 + 4/3 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 16/9 + 1090.22500 + 2/1 diff --git a/scales/lumma_12p7.scl b/scales/lumma_12p7.scl new file mode 100644 index 0000000..3b88d02 --- /dev/null +++ b/scales/lumma_12p7.scl @@ -0,0 +1,17 @@ +! lumma_12p7.scl +! +Well-temperament 1/7Pyth. comma F-C-G-D-A-E F#-C#-G# + 12 +! + 96.92786 + 197.20714 + 297.48643 + 394.41428 + 501.39643 + 598.32428 + 698.60357 + 795.53143 + 895.81071 + 999.44143 + 1096.36928 + 2/1 diff --git a/scales/lumma_17.scl b/scales/lumma_17.scl new file mode 100644 index 0000000..5b30d2f --- /dev/null +++ b/scales/lumma_17.scl @@ -0,0 +1,22 @@ +! lumma_17.scl +! +Carl Lumma, intervals of attraction, minus inversions, trial and error (1999) + 17 +! + 11/10 + 9/8 + 7/6 + 11/9 + 5/4 + 9/7 + 11/8 + 7/5 + 3/2 + 11/7 + 13/8 + 5/3 + 7/4 + 9/5 + 11/6 + 15/8 + 2/1 diff --git a/scales/lumma_22.scl b/scales/lumma_22.scl new file mode 100644 index 0000000..aa1db80 --- /dev/null +++ b/scales/lumma_22.scl @@ -0,0 +1,27 @@ +! lumma_22.scl +! +Carl Lumma, intervals of attraction by trial and error (1999) + 22 +! + 11/10 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 3/2 + 11/7 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 15/8 + 2/1 diff --git a/scales/lumma_5151.scl b/scales/lumma_5151.scl new file mode 100644 index 0000000..1f70b87 --- /dev/null +++ b/scales/lumma_5151.scl @@ -0,0 +1,17 @@ +! lumma_5151.scl +! +Carl Lumma's 5151 temperament III (1197/709.5/696), June 2003 + 12 +! + 97.50000 + 195.00000 + 292.50000 + 390.00000 + 487.50000 + 598.50000 + 696.00000 + 793.50000 + 891.00000 + 988.50000 + 1086.00000 + 1197.00000 diff --git a/scales/lumma_al1.scl b/scales/lumma_al1.scl new file mode 100644 index 0000000..4ccd70b --- /dev/null +++ b/scales/lumma_al1.scl @@ -0,0 +1,17 @@ +! lumma_al1.scl +! +Alaska I (1197/709.5/696), Carl Lumma, 6 June 2003. + 12 +! + 84.00000 + 195.00000 + 292.50000 + 390.00000 + 487.50000 + 585.00000 + 696.00000 + 793.50000 + 891.00000 + 988.50000 + 1086.00000 + 1197.00000 diff --git a/scales/lumma_al2.scl b/scales/lumma_al2.scl new file mode 100644 index 0000000..7362821 --- /dev/null +++ b/scales/lumma_al2.scl @@ -0,0 +1,17 @@ +! lumma_al2.scl +! +Alaska II (1197/707/696.5), Carl Lumma, 6 June 2003. + 12 +! + 87.50000 + 196.00000 + 294.00000 + 392.00000 + 490.00000 + 588.00000 + 696.50000 + 794.50000 + 892.50000 + 990.50000 + 1088.50000 + 1197.00000 diff --git a/scales/lumma_al3.scl b/scales/lumma_al3.scl new file mode 100644 index 0000000..5821fa5 --- /dev/null +++ b/scales/lumma_al3.scl @@ -0,0 +1,17 @@ +! lumma_al3.scl +! +Alaska III (1197/707/696.5), Carl Lumma, 6 June 2003. + 12 +! + 87.50000 + 196.00000 + 294.00000 + 392.00000 + 500.50000 + 588.00000 + 696.50000 + 794.50000 + 892.50000 + 990.50000 + 1088.50000 + 1197.00000 diff --git a/scales/lumma_al4.scl b/scales/lumma_al4.scl new file mode 100644 index 0000000..9b11638 --- /dev/null +++ b/scales/lumma_al4.scl @@ -0,0 +1,17 @@ +! lumma_al4.scl +! +Alaska IV (1196/701/697), Carl Lumma, 6 June 2003. + 12 +! + 95.00000 + 198.00000 + 293.00000 + 396.00000 + 499.00000 + 594.00000 + 697.00000 + 792.00000 + 895.00000 + 994.00000 + 1093.00000 + 1196.00000 diff --git a/scales/lumma_al5.scl b/scales/lumma_al5.scl new file mode 100644 index 0000000..5e2a8c2 --- /dev/null +++ b/scales/lumma_al5.scl @@ -0,0 +1,17 @@ +! lumma_al5.scl +! +Alaska V (1197/702/696.375), Carl Lumma, 6 June 2003. + 12 +! + 97.87500 + 201.37500 + 299.25000 + 397.12500 + 500.62500 + 598.50000 + 696.37500 + 799.87500 + 897.75000 + 995.62500 + 1099.12500 + 1197.00000 diff --git a/scales/lumma_al6.scl b/scales/lumma_al6.scl new file mode 100644 index 0000000..e35fa83 --- /dev/null +++ b/scales/lumma_al6.scl @@ -0,0 +1,17 @@ +! lumma_al6.scl +! +Alaska VI (1196/701/696), Carl Lumma, 6 June 2003. + 12 +! + 98.00000 + 201.00000 + 299.00000 + 397.00000 + 500.00000 + 598.00000 + 696.00000 + 799.00000 + 897.00000 + 995.00000 + 1098.00000 + 1196.00000 diff --git a/scales/lumma_al7.scl b/scales/lumma_al7.scl new file mode 100644 index 0000000..229338d --- /dev/null +++ b/scales/lumma_al7.scl @@ -0,0 +1,17 @@ +! lumma_al7.scl +! +Alaska VII, Carl Lumma, 27 Jan 2004 + 12 +! + 93.33000 + 197.66000 + 294.66000 + 395.33000 + 496.00000 + 592.99000 + 697.33000 + 794.33000 + 894.99000 + 995.66000 + 1092.66000 + 1197.00000 diff --git a/scales/lumma_dec1.scl b/scales/lumma_dec1.scl new file mode 100644 index 0000000..1f58162 --- /dev/null +++ b/scales/lumma_dec1.scl @@ -0,0 +1,15 @@ +! lumma_dec1.scl +! +Carl Lumma, two 5-tone 7/4-chains, 5/4 apart in 31-tET, TL 9-2-2000 + 10 +! + 154.83871 + 232.25806 + 387.09677 + 464.51613 + 619.35484 + 696.77419 + 851.61290 + 967.74194 + 1083.87097 + 2/1 diff --git a/scales/lumma_dec2.scl b/scales/lumma_dec2.scl new file mode 100644 index 0000000..aff18a1 --- /dev/null +++ b/scales/lumma_dec2.scl @@ -0,0 +1,15 @@ +! lumma_dec2.scl +! +Carl Lumma, two 5-tone 3/2-chains, 7/4 apart in 31-tET, TL 9-2-2000 + 10 +! + 154.83871 + 193.54839 + 387.09677 + 464.51613 + 658.06452 + 696.77419 + 890.32258 + 967.74194 + 1161.29032 + 2/1 diff --git a/scales/lumma_magic.scl b/scales/lumma_magic.scl new file mode 100644 index 0000000..f75a520 --- /dev/null +++ b/scales/lumma_magic.scl @@ -0,0 +1,17 @@ +! lumma_magic.scl +! +Magic chord test, Carl Lumma, TL 24-06-99 + 12 +! + 28/25 + 8/7 + 6/5 + 5/4 + 4/3 + 7/5 + 10/7 + 8/5 + 5/3 + 7/4 + 25/14 + 2/1 diff --git a/scales/lumma_prism.scl b/scales/lumma_prism.scl new file mode 100644 index 0000000..433800d --- /dev/null +++ b/scales/lumma_prism.scl @@ -0,0 +1,17 @@ +! lumma_prism.scl +! +Carl Lumma's 7-limit 12-tone scale, a.k.a GW Smith's Prism. TL 21-11-98 + 12 +! + 16/15 + 28/25 + 7/6 + 5/4 + 4/3 + 7/5 + 112/75 + 8/5 + 5/3 + 7/4 + 28/15 + 2/1 diff --git a/scales/lumma_prismkeen.scl b/scales/lumma_prismkeen.scl new file mode 100644 index 0000000..8d39ae1 --- /dev/null +++ b/scales/lumma_prismkeen.scl @@ -0,0 +1,17 @@ +! lumma_prismkeen.scl +! +Dave Keenan's adaptation of Prism scale to include 6:8:11, TL 17-04-99 + 12 +! + 117.20490 + 198.43640 + 266.37190 + 383.57690 + 500.78180 + 582.01320 + 699.21820 + 816.42310 + 5/3 + 965.59010 + 1082.79500 + 2/1 diff --git a/scales/lumma_prismt.scl b/scales/lumma_prismt.scl new file mode 100644 index 0000000..b1ab141 --- /dev/null +++ b/scales/lumma_prismt.scl @@ -0,0 +1,17 @@ +! lumma_prismt.scl +! +Tempered Prism scale, 6 tetrads + 4 triads within 2c of Just, TL 19-2-99 + 12 +! + 115.58700 + 200.05420 + 268.79880 + 384.38580 + 499.97290 + 584.44010 + 700.02710 + 815.61420 + 5/3 + 7/4 + 1084.41300 + 2/1 diff --git a/scales/lumma_stelhex.scl b/scales/lumma_stelhex.scl new file mode 100644 index 0000000..0e6c0b6 --- /dev/null +++ b/scales/lumma_stelhex.scl @@ -0,0 +1,17 @@ +! lumma_stelhex.scl +! +12-out-of [4 5 6 7] stellated hexany + 12 +! + 21/20 + 7/6 + 6/5 + 5/4 + 21/16 + 7/5 + 3/2 + 8/5 + 42/25 + 7/4 + 9/5 + 2/1 diff --git a/scales/lumma_synchtrines+2.scl b/scales/lumma_synchtrines+2.scl new file mode 100644 index 0000000..8053784 --- /dev/null +++ b/scales/lumma_synchtrines+2.scl @@ -0,0 +1,17 @@ +! lumma_synchtrines+2.scl +! +The 12-tone equal temperament with 2:3:4 brats of +2 + 12 +! + 99.78287 + 199.56575 + 299.34862 + 399.13150 + 498.91437 + 598.69725 + 698.48012 + 798.26300 + 898.04587 + 997.82875 + 1097.61162 + 1197.39450 diff --git a/scales/lumma_wt19.scl b/scales/lumma_wt19.scl new file mode 100644 index 0000000..c3fa4db --- /dev/null +++ b/scales/lumma_wt19.scl @@ -0,0 +1,17 @@ +! lumma_wt19.scl +! +Carl Lumma, {2 3 17 19} well temperament, TL 13-09-2008 + 12 +! + 1024/969 + 272/243 + 384/323 + 64/51 + 4/3 + 24/17 + 256/171 + 512/323 + 256/153 + 16/9 + 32/17 + 2/1 diff --git a/scales/luyten.scl b/scales/luyten.scl new file mode 100644 index 0000000..c23bb55 --- /dev/null +++ b/scales/luyten.scl @@ -0,0 +1,24 @@ +! luyten.scl +! +Carl Luyten, harpsichord tuning. Praetorius, 1619. + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/lydian_chrom.scl b/scales/lydian_chrom.scl new file mode 100644 index 0000000..d900356 --- /dev/null +++ b/scales/lydian_chrom.scl @@ -0,0 +1,29 @@ +! lydian_chrom.scl +! +Lydian Chromatic Tonos + 24 +! + 20/19 + 10/9 + 20/17 + 40/33 + 5/4 + 10/7 + 20/13 + 8/5 + 80/49 + 5/3 + 20/11 + 2/1 + 40/19 + 20/9 + 40/17 + 80/33 + 5/2 + 20/7 + 40/13 + 16/5 + 160/49 + 10/3 + 40/11 + 4/1 diff --git a/scales/lydian_chrom2.scl b/scales/lydian_chrom2.scl new file mode 100644 index 0000000..acc8eaf --- /dev/null +++ b/scales/lydian_chrom2.scl @@ -0,0 +1,12 @@ +! lydian_chrom2.scl +! +Schlesinger's Lydian Harmonia in the chromatic genus + 7 +! + 26/25 + 13/12 + 13/10 + 13/9 + 26/17 + 13/8 + 2/1 diff --git a/scales/lydian_chrominv.scl b/scales/lydian_chrominv.scl new file mode 100644 index 0000000..604fb28 --- /dev/null +++ b/scales/lydian_chrominv.scl @@ -0,0 +1,12 @@ +! LYDIAN_CHROMinv.scl +! +A harmonic form of Schlesinger's Chromatic Lydian inverted + 7 +! + 27/26 + 14/13 + 18/13 + 20/13 + 21/13 + 22/13 + 2/1 diff --git a/scales/lydian_diat.scl b/scales/lydian_diat.scl new file mode 100644 index 0000000..a65e95b --- /dev/null +++ b/scales/lydian_diat.scl @@ -0,0 +1,29 @@ +! lydian_diat.scl +! +Lydian Diatonic Tonos + 24 +! + 20/19 + 10/9 + 5/4 + 4/3 + 10/7 + 40/27 + 20/13 + 5/3 + 40/23 + 20/11 + 40/21 + 2/1 + 40/19 + 20/9 + 5/2 + 8/3 + 20/7 + 88/27 + 40/13 + 10/3 + 80/23 + 40/11 + 80/21 + 4/1 diff --git a/scales/lydian_diat2.scl b/scales/lydian_diat2.scl new file mode 100644 index 0000000..a104f7a --- /dev/null +++ b/scales/lydian_diat2.scl @@ -0,0 +1,13 @@ +! LYDIAN_DIAT2.scl +! +Schlesinger's Lydian Harmonia, a subharmonic series through 13 from 26 + 8 +! + 13/12 + 13/11 + 13/10 + 26/19 + 13/9 + 13/8 + 13/7 + 2/1 diff --git a/scales/lydian_diat2inv.scl b/scales/lydian_diat2inv.scl new file mode 100644 index 0000000..cfd27ac --- /dev/null +++ b/scales/lydian_diat2inv.scl @@ -0,0 +1,13 @@ +! LYDIAN_DIAT2INV.scl +! +Inverted Schlesinger's Lydian Harmonia, a harmonic series from 13 from 26 + 8 +! + 14/13 + 16/13 + 18/13 + 19/13 + 20/13 + 22/13 + 24/13 + 2/1 diff --git a/scales/lydian_diatcon.scl b/scales/lydian_diatcon.scl new file mode 100644 index 0000000..ff28f1d --- /dev/null +++ b/scales/lydian_diatcon.scl @@ -0,0 +1,12 @@ +! lydian_diatcon.scl +! +A Lydian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 13/12 + 13/11 + 13/10 + 26/19 + 13/8 + 13/7 + 2/1 diff --git a/scales/lydian_enh.scl b/scales/lydian_enh.scl new file mode 100644 index 0000000..bf35a03 --- /dev/null +++ b/scales/lydian_enh.scl @@ -0,0 +1,29 @@ +! lydian_enh.scl +! +Lydian Enharmonic Tonos + 24 +! + 20/19 + 10/9 + 8/7 + 80/69 + 20/17 + 10/7 + 20/13 + 80/51 + 160/101 + 8/5 + 20/11 + 2/1 + 40/19 + 20/9 + 16/7 + 160/69 + 40/17 + 20/7 + 40/13 + 160/51 + 320/101 + 16/5 + 40/11 + 4/1 diff --git a/scales/lydian_enh2.scl b/scales/lydian_enh2.scl new file mode 100644 index 0000000..fbd6f9b --- /dev/null +++ b/scales/lydian_enh2.scl @@ -0,0 +1,12 @@ +! lydian_enh2.scl +! +Schlesinger's Lydian Harmonia in the enharmonic genus + 7 +! + 52/51 + 26/25 + 13/10 + 13/9 + 52/35 + 26/17 + 2/1 diff --git a/scales/lydian_enhinv.scl b/scales/lydian_enhinv.scl new file mode 100644 index 0000000..45c8c67 --- /dev/null +++ b/scales/lydian_enhinv.scl @@ -0,0 +1,12 @@ +! LYDIAN_ENHinv.scl +! +A harmonic form of Schlesinger's Enharmonic Lydian inverted + 7 +! + 53/52 + 27/26 + 18/13 + 20/13 + 41/26 + 21/13 + 2/1 diff --git a/scales/lydian_pent.scl b/scales/lydian_pent.scl new file mode 100644 index 0000000..239315f --- /dev/null +++ b/scales/lydian_pent.scl @@ -0,0 +1,12 @@ +! lydian_pent.scl +! +Schlesinger's Lydian Harmonia in the pentachromatic genus + 7 +! + 65/63 + 13/12 + 13/10 + 13/9 + 65/43 + 13/8 + 2/1 diff --git a/scales/lydian_pis.scl b/scales/lydian_pis.scl new file mode 100644 index 0000000..4a9ecbd --- /dev/null +++ b/scales/lydian_pis.scl @@ -0,0 +1,20 @@ +! lydian_pis.scl +! +The Diatonic Perfect Immutable System in the Lydian Tonos + 15 +! + 10/9 + 5/4 + 10/7 + 20/13 + 5/3 + 20/11 + 2/1 + 40/19 + 20/9 + 5/2 + 20/7 + 40/13 + 10/3 + 40/11 + 4/1 diff --git a/scales/lydian_tri.scl b/scales/lydian_tri.scl new file mode 100644 index 0000000..d151690 --- /dev/null +++ b/scales/lydian_tri.scl @@ -0,0 +1,12 @@ +! lydian_tri.scl +! +Schlesinger's Lydian Harmonia in the first trichromatic genus + 7 +! + 39/38 + 39/37 + 13/10 + 13/9 + 3/2 + 39/25 + 2/1 diff --git a/scales/lydian_tri2.scl b/scales/lydian_tri2.scl new file mode 100644 index 0000000..56b760f --- /dev/null +++ b/scales/lydian_tri2.scl @@ -0,0 +1,12 @@ +! lydian_tri2.scl +! +Schlesinger's Lydian Harmonia in the second trichromatic genus + 7 +! + 39/38 + 13/12 + 13/10 + 13/9 + 3/2 + 13/8 + 2/1 diff --git a/scales/machine_lf.scl b/scales/machine_lf.scl new file mode 100644 index 0000000..d1d7e41 --- /dev/null +++ b/scales/machine_lf.scl @@ -0,0 +1,16 @@ +! machine_lf.scl +! +Mike 11:9:7:4 Lesfip scale + 11 +! + 85.99880 + 215.04394 + 299.89634 + 428.87771 + 514.62336 + 643.60472 + 728.45713 + 857.50226 + 943.50107 + 1071.75053 + 2/1 diff --git a/scales/madagascar19.scl b/scales/madagascar19.scl new file mode 100644 index 0000000..966354f --- /dev/null +++ b/scales/madagascar19.scl @@ -0,0 +1,47 @@ +! madagascar19.scl +Madagascar[19] (19&53&58) hobbit in 313-tET tuning +19 +! +65.17572 +138.01917 +184.02556 +249.20128 +314.37700 +387.22045 +452.39617 +498.40256 +563.57827 +636.42173 +701.59744 +747.60383 +812.77955 +885.62300 +950.79872 +1015.97444 +1061.98083 +1134.82428 +2/1 +! +!! premadagascar19.scl +! Madagascar[19] transversal +! 19 +!! +! 26/25 +! 13/12 +! 10/9 +! 15/13 +! 6/5 +! 5/4 +! 13/10 +! 4/3 +! 18/13 +! 13/9 +! 3/2 +! 20/13 +! 8/5 +! 5/3 +! 26/15 +! 9/5 +! 24/13 +! 25/13 +! 2/1 diff --git a/scales/madenda-sejati.scl b/scales/madenda-sejati.scl new file mode 100644 index 0000000..111dec6 --- /dev/null +++ b/scales/madenda-sejati.scl @@ -0,0 +1,10 @@ +! madenda-sejati.scl +! +Sorog madenda sejati, Sunda + 5 +! + 424.00000 + 494.00000 + 918.00000 + 1130.00000 + 2/1 diff --git a/scales/madimba.scl b/scales/madimba.scl new file mode 100644 index 0000000..e0a9350 --- /dev/null +++ b/scales/madimba.scl @@ -0,0 +1,10 @@ +! madimba.scl +! +Madimba from Luba/Lulua tuning. 1/1=132 Hz, Tracey TR-35 A-3,4 + 5 +! + 40/33 + 89/66 + 56/33 + 59/33 + 2/1 diff --git a/scales/magic16septimage.scl b/scales/magic16septimage.scl new file mode 100644 index 0000000..6134fd0 --- /dev/null +++ b/scales/magic16septimage.scl @@ -0,0 +1,21 @@ +! magic16septimage.scl +Magic[16] in regular Septimage tuning +16 +! +57.718713363760023376 +207.60428878746658891 +265.32300215122661221 +323.04171551498663568 +380.76042887874665891 +438.47914224250668224 +496.19785560626670556 +646.08343102997327113 +703.80214439373329448 +761.52085775749331780 +819.23957112125334119 +876.95828448501336439 +1026.8438599087199301 +1084.5625732724799534 +1142.2812866362399767 +2/1 +! 5x^5 + 4x - 20 diff --git a/scales/magic16terzbirat.scl b/scales/magic16terzbirat.scl new file mode 100644 index 0000000..e79b12b --- /dev/null +++ b/scales/magic16terzbirat.scl @@ -0,0 +1,21 @@ +! magic16terzbirat.scl +Magic[16] in regular Terzbirat tuning +16 +! +59.047464820909637093 +203.17511726363454286 +262.22258208454417998 +321.27004690545381725 +380.31751172636345429 +439.36497654727309145 +498.41244136818272863 +642.54009381090763424 +701.58755863181727142 +760.63502345272690858 +819.68248827363654570 +878.72995309454618286 +1022.8576055372710886 +1081.9050703581807257 +1140.9525351790903629 +2/1 +! (4 + 2sqrt(13))/9 diff --git a/scales/mahur tetrachord 13-limit.scl b/scales/mahur tetrachord 13-limit.scl new file mode 100644 index 0000000..87159fd --- /dev/null +++ b/scales/mahur tetrachord 13-limit.scl @@ -0,0 +1,8 @@ +! mahur tetrachord 13-limit.scl +! +Mahur tetrachord 39:44:49:52 + 3 +! + 44/39 + 49/39 + 4/3 diff --git a/scales/mahur tetrachord 19-limit.scl b/scales/mahur tetrachord 19-limit.scl new file mode 100644 index 0000000..f2ea010 --- /dev/null +++ b/scales/mahur tetrachord 19-limit.scl @@ -0,0 +1,8 @@ +! mahur tetrachord 19-limit.scl +! +Mahur tetrachord 120:135:152:160 + 3 +! + 9/8 + 19/15 + 4/3 diff --git a/scales/maihingen.scl b/scales/maihingen.scl new file mode 100644 index 0000000..4377648 --- /dev/null +++ b/scales/maihingen.scl @@ -0,0 +1,17 @@ +! maihingen.scl +! +Tuning of the Baumeister organ in Maihingen (1737) + 12 +! + 85.33749 + 199.02250 + 305.86500 + 387.29249 + 500.97750 + 583.38249 + 3/2 + 781.42749 + 896.09000 + 994.13500 + 4096/2187 + 2/1 diff --git a/scales/majmin.scl b/scales/majmin.scl new file mode 100644 index 0000000..3bc062f --- /dev/null +++ b/scales/majmin.scl @@ -0,0 +1,22 @@ +! majmin.scl +! +Malcolm & Marpurg 4 (Yamaha major & minor) mixed. Mersenne/Ban without D# + 17 +! + 25/24 + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/major_clus.scl b/scales/major_clus.scl new file mode 100644 index 0000000..6dd4888 --- /dev/null +++ b/scales/major_clus.scl @@ -0,0 +1,17 @@ +! major_clus.scl +! +Chalmers' Major Mode Cluster + 12 +! + 135/128 + 10/9 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/major_wing.scl b/scales/major_wing.scl new file mode 100644 index 0000000..f378026 --- /dev/null +++ b/scales/major_wing.scl @@ -0,0 +1,17 @@ +! major_wing.scl +! +Chalmers' Major Wing with 7 major and 6 minor triads + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/major_wing_lesfip.scl b/scales/major_wing_lesfip.scl new file mode 100644 index 0000000..df32849 --- /dev/null +++ b/scales/major_wing_lesfip.scl @@ -0,0 +1,18 @@ +! major_wing_lesfip.scl +! +Lesfip version of Chalmers' Major Wing, 7-limit, 15 cents +! Approximately 233235212323 in 31-tET + 12 +! +75.75851 +196.98024 +310.53362 +387.55657 +501.78842 +697.53427 +774.55722 +814.47652 +888.11060 +1009.33233 +1085.09084 +2/1 diff --git a/scales/makoyan.scl b/scales/makoyan.scl new file mode 100644 index 0000000..c927d3b --- /dev/null +++ b/scales/makoyan.scl @@ -0,0 +1,17 @@ +! makoyan.scl +! +Makoyan's temperament (1999) + 12 +! + 93.00000 + 196.00000 + 293.00000 + 391.00000 + 500.00000 + 594.00000 + 699.00000 + 789.00000 + 891.00000 + 996.00000 + 1090.00000 + 2/1 diff --git a/scales/malcolm.scl b/scales/malcolm.scl new file mode 100644 index 0000000..e7c8f4e --- /dev/null +++ b/scales/malcolm.scl @@ -0,0 +1,17 @@ +! malcolm.scl +! +Alexander Malcolm's Monochord (1721), and C major in Yamaha synths, Wilkinson: Tuning In + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/malcolm2.scl b/scales/malcolm2.scl new file mode 100644 index 0000000..1972f52 --- /dev/null +++ b/scales/malcolm2.scl @@ -0,0 +1,17 @@ +! malcolm2.scl +! +Malcolm 2, differentially coherent + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 85/48 + 15/8 + 2/1 diff --git a/scales/malcolm_ap.scl b/scales/malcolm_ap.scl new file mode 100644 index 0000000..f700bc5 --- /dev/null +++ b/scales/malcolm_ap.scl @@ -0,0 +1,17 @@ +! malcolm_ap.scl +! +Best approximations in mix of all ETs from 12-23 to Malcolm's Monochord + 12 +! + 114.286 cents + 200.000 cents + 315.789 cents + 381.818 cents + 500.000 cents + 600.000 cents + 700.000 cents + 818.182 cents + 884.211 cents + 1000.000 cents + 1085.714 cents + 2/1 diff --git a/scales/malcolm_me.scl b/scales/malcolm_me.scl new file mode 100644 index 0000000..673ac05 --- /dev/null +++ b/scales/malcolm_me.scl @@ -0,0 +1,12 @@ +! malcolm_me.scl +! +Malcolm's Mid-East + 7 +! + 9/8 + 5/4 + 11/8 + 3/2 + 7/4 + 15/8 + 2/1 diff --git a/scales/malcolme.scl b/scales/malcolme.scl new file mode 100644 index 0000000..51f7916 --- /dev/null +++ b/scales/malcolme.scl @@ -0,0 +1,17 @@ +! malcolme.scl +! +Most equal interval permutation of Malcolm's Monochord + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 16/9 + 256/135 + 2/1 diff --git a/scales/malcolme2.scl b/scales/malcolme2.scl new file mode 100644 index 0000000..3c7f2dc --- /dev/null +++ b/scales/malcolme2.scl @@ -0,0 +1,17 @@ +! malcolme2.scl +! +Inverse most equal interval permutation of Malcolm's Monochord + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/malcolms.scl b/scales/malcolms.scl new file mode 100644 index 0000000..37cafa8 --- /dev/null +++ b/scales/malcolms.scl @@ -0,0 +1,17 @@ +! malcolms.scl +! +Symmetrical version of Malcolm's Monochord and Riley's Albion scale. Also proposed by Hindemith in Unterweisung im Tonsatz + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 600.00000 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/malerbi.scl b/scales/malerbi.scl new file mode 100644 index 0000000..3ada849 --- /dev/null +++ b/scales/malerbi.scl @@ -0,0 +1,17 @@ +! malerbi.scl +! +Luigi Malerbi's well-temperament nr.1 (1794) (nr.2 = Young). Also Sievers + 12 +! + 256/243 + 194.52600 + 32/27 + 389.05200 + 4/3 + 1024/729 + 697.26300 + 128/81 + 891.78900 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/malgache.scl b/scales/malgache.scl new file mode 100644 index 0000000..d1aba36 --- /dev/null +++ b/scales/malgache.scl @@ -0,0 +1,17 @@ +! malgache.scl +! +tuning from Madagascar + 12 +! + 135/128 + 9/8 + 75/64 + 5/4 + 27/20 + 45/32 + 3/2 + 405/256 + 27/16 + 225/128 + 15/8 + 2/1 diff --git a/scales/malgache1.scl b/scales/malgache1.scl new file mode 100644 index 0000000..7f4c6ea --- /dev/null +++ b/scales/malgache1.scl @@ -0,0 +1,17 @@ +! malgache1.scl +! +tuning from Madagascar + 12 +! + 16/15 + 9/8 + 32/27 + 5/4 + 27/20 + 36/25 + 3/2 + 8/5 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/malgache2.scl b/scales/malgache2.scl new file mode 100644 index 0000000..b60ce5a --- /dev/null +++ b/scales/malgache2.scl @@ -0,0 +1,17 @@ +! malgache2.scl +! +tuning from Madagascar + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 27/20 + 45/32 + 3/2 + 25/16 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/malkauns.scl b/scales/malkauns.scl new file mode 100644 index 0000000..f159b1e --- /dev/null +++ b/scales/malkauns.scl @@ -0,0 +1,10 @@ +! malkauns.scl +! +Raga Malkauns, inverse of prime_5.scl + 5 +! + 6/5 + 4/3 + 8/5 + 16/9 + 2/1 diff --git a/scales/mambuti.scl b/scales/mambuti.scl new file mode 100644 index 0000000..6246ad6 --- /dev/null +++ b/scales/mambuti.scl @@ -0,0 +1,13 @@ +! mambuti.scl +! +African Mambuti Flutes (aerophone; vertical wooden; one note each) + 8 +! + 204.000 cents + 411.000 cents + 710.000 cents + 1000.000 cents + 1206.000 cents + 1409.000 cents + 1918.000 cents + 2321.001 cents diff --git a/scales/mandela.scl b/scales/mandela.scl new file mode 100644 index 0000000..3fc47b3 --- /dev/null +++ b/scales/mandela.scl @@ -0,0 +1,21 @@ +! mandela.scl +! +One of the 195 other denizens of the dome of mandala, <14 23 36 40| weakly epimorphic +! <<1 4 6 4 7 4||: -6 to 7; <<3 -2 4 -11 -2 16||: -7 to 6; <<5 6 2 -3 -11 -12||: -2 to 11 +! Fokker block commas: 288/245, 63/50, 56/45 +14 +! +25/24 +15/14 +9/8 +8/7 +6/5 +5/4 +9/7 +10/7 +3/2 +5/3 +12/7 +7/4 +15/8 +2/1 diff --git a/scales/mandelbaum5.scl b/scales/mandelbaum5.scl new file mode 100644 index 0000000..d568882 --- /dev/null +++ b/scales/mandelbaum5.scl @@ -0,0 +1,24 @@ +! mandelbaum5.scl +! +Mandelbaum's 5-limit 19-tone scale, kleismic detempered circle of minor thirds. Per.bl. 81/80 & 15625/15552 + 19 +! + 25/24 + 27/25 + 10/9 + 125/108 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 36/25 + 3/2 + 125/81 + 8/5 + 5/3 + 125/72 + 9/5 + 50/27 + 48/25 + 2/1 diff --git a/scales/mandelbaum7.scl b/scales/mandelbaum7.scl new file mode 100644 index 0000000..ddfcb7e --- /dev/null +++ b/scales/mandelbaum7.scl @@ -0,0 +1,24 @@ +! mandelbaum7.scl +! +Mandelbaum's 7-limit 19-tone scale + 19 +! + 25/24 + 15/14 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 36/25 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 27/14 + 2/1 diff --git a/scales/mandelbaum7keemun.scl b/scales/mandelbaum7keemun.scl new file mode 100644 index 0000000..83f9f85 --- /dev/null +++ b/scales/mandelbaum7keemun.scl @@ -0,0 +1,24 @@ +! mandelbaum7keemun.scl +! +Keemun Fokkerization of mandelbaum7.scl, Gene Ward Smith, TL 8-3-2012 + 19 +! + 25/24 + 15/14 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/mander.scl b/scales/mander.scl new file mode 100644 index 0000000..a89e88f --- /dev/null +++ b/scales/mander.scl @@ -0,0 +1,17 @@ +! mander.scl +! +John Pike Mander's Adlington-Hall organ tuning compiled by A.Sparschuh + 12 +! + 78.91650 + 193.15686 + 32/27 + 5/4 + 4/3 + 581.26276 + 696.57843 + 777.28712 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/marimba1.scl b/scales/marimba1.scl new file mode 100644 index 0000000..d40484a --- /dev/null +++ b/scales/marimba1.scl @@ -0,0 +1,22 @@ +! marimba1.scl +! +Marimba of the Bakwese, SW Belgian Congo (Zaire). 1/1=140.5 Hz + 17 +! + 145.000 cents + 346.000 cents + 468.000 cents + 609.000 cents + 785.000 cents + 966.000 cents + 1123.000 cents + 1279.000 cents + 1474.000 cents + 1580.000 cents + 1772.000 cents + 1952.000 cents + 2146.000 cents + 2344.000 cents + 2438.000 cents + 2674.000 cents + 2780.000 cents diff --git a/scales/marimba2.scl b/scales/marimba2.scl new file mode 100644 index 0000000..3693326 --- /dev/null +++ b/scales/marimba2.scl @@ -0,0 +1,22 @@ +! marimba2.scl +! +Marimba of the Bakubu, S. Belgian Congo (Zaire). 1/1=141.5 Hz + 17 +! + 112.000 cents + 338.000 cents + 469.000 cents + 646.000 cents + 826.000 cents + 972.000 cents + 1187.000 cents + 1352.000 cents + 1476.000 cents + 1691.000 cents + 1849.000 cents + 2033.000 cents + 2239.000 cents + 2405.000 cents + 2557.000 cents + 2737.000 cents + 2891.000 cents diff --git a/scales/marimba3.scl b/scales/marimba3.scl new file mode 100644 index 0000000..263c3bf --- /dev/null +++ b/scales/marimba3.scl @@ -0,0 +1,15 @@ +! marimba3.scl +! +Marimba from the Yakoma tribe, Zaire. 1/1=185.5 Hz + 10 +! + 218.000 cents + 495.000 cents + 820.000 cents + 1038.000 cents + 1185.000 cents + 1447.000 cents + 1695.000 cents + 2020.000 cents + 2238.000 cents + 2385.000 cents diff --git a/scales/marion.scl b/scales/marion.scl new file mode 100644 index 0000000..5c15df8 --- /dev/null +++ b/scales/marion.scl @@ -0,0 +1,24 @@ +! marion.scl +! +scale with two different ET step sizes + 19 +! + 53.996 cents + 107.993 cents + 161.990 cents + 215.986 cents + 269.983 cents + 323.979 cents + 377.976 cents + 431.972 cents + 485.969 cents + 539.965 cents + 593.962 cents + 647.959 cents + 3/2 + 784.963 cents + 867.970 cents + 950.978 cents + 1033.985 cents + 1116.993 cents + 2 diff --git a/scales/marion1.scl b/scales/marion1.scl new file mode 100644 index 0000000..73cbd56 --- /dev/null +++ b/scales/marion1.scl @@ -0,0 +1,29 @@ +! marion1.scl +! +Marion's 7-limit Scale # 1 + 24 +! + 225/224 + 25/24 + 15/14 + 35/32 + 9/8 + 7/6 + 25/21 + 5/4 + 9/7 + 21/16 + 75/56 + 45/32 + 10/7 + 35/24 + 3/2 + 25/16 + 45/28 + 5/3 + 7/4 + 25/14 + 175/96 + 15/8 + 63/32 + 2/1 diff --git a/scales/marion10.scl b/scales/marion10.scl new file mode 100644 index 0000000..d98b44d --- /dev/null +++ b/scales/marion10.scl @@ -0,0 +1,30 @@ +! marion10.scl +! +Marion's 7-limit Scale # 10 + 25 +! + 49/48 + 25/24 + 35/32 + 10/9 + 245/216 + 7/6 + 175/144 + 5/4 + 35/27 + 49/36 + 25/18 + 1225/864 + 35/24 + 49/32 + 14/9 + 25/16 + 175/108 + 5/3 + 245/144 + 7/4 + 49/27 + 175/96 + 50/27 + 35/18 + 2/1 diff --git a/scales/marion15.scl b/scales/marion15.scl new file mode 100644 index 0000000..b08779c --- /dev/null +++ b/scales/marion15.scl @@ -0,0 +1,29 @@ +! marion15.scl +! +Marion's 7-limit Scale # 15 + 24 +! + 36/35 + 15/14 + 54/49 + 8/7 + 6/5 + 60/49 + 5/4 + 9/7 + 27/20 + 48/35 + 135/98 + 10/7 + 72/49 + 3/2 + 54/35 + 8/5 + 45/28 + 80/49 + 12/7 + 432/245 + 9/5 + 90/49 + 27/14 + 2/1 diff --git a/scales/marissing.scl b/scales/marissing.scl new file mode 100644 index 0000000..0849835 --- /dev/null +++ b/scales/marissing.scl @@ -0,0 +1,17 @@ +! marissing.scl +! +Peter van Marissing, just scale, Mens en Melodie, 1979 + 12 +! + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/marpurg-1.scl b/scales/marpurg-1.scl new file mode 100644 index 0000000..f7edfbf --- /dev/null +++ b/scales/marpurg-1.scl @@ -0,0 +1,17 @@ +! marpurg-1.scl +! +Other temperament by Marpurg, 3 fifths 1/3 Pyth. comma flat + 12 +! + 98.04500 + 9/8 + 301.95500 + 400.00000 + 4/3 + 603.91000 + 3/2 + 800.00000 + 898.04500 + 1003.91000 + 1101.95500 + 2/1 diff --git a/scales/marpurg-a.scl b/scales/marpurg-a.scl new file mode 100644 index 0000000..6d43d37 --- /dev/null +++ b/scales/marpurg-a.scl @@ -0,0 +1,17 @@ +! marpurg-a.scl +! +Marpurg's temperament A, 1/12 and 1/6 Pyth. comma + 12 +! + 101.95500 + 200.00000 + 300.00000 + 401.95500 + 500.00000 + 601.95500 + 700.00000 + 801.95500 + 901.95500 + 1000.00000 + 1101.95500 + 2/1 diff --git a/scales/marpurg-b.scl b/scales/marpurg-b.scl new file mode 100644 index 0000000..3026d5d --- /dev/null +++ b/scales/marpurg-b.scl @@ -0,0 +1,17 @@ +! marpurg-b.scl +! +Marpurg's temperament B, 1/12 and 1/6 Pyth. comma + 12 +! + 98.04500 + 198.04500 + 298.04500 + 400.00000 + 500.00000 + 600.00000 + 698.04500 + 798.04500 + 898.04500 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/marpurg-c.scl b/scales/marpurg-c.scl new file mode 100644 index 0000000..ca1d6dc --- /dev/null +++ b/scales/marpurg-c.scl @@ -0,0 +1,17 @@ +! marpurg-c.scl +! +Marpurg's temperament C, 1/12 and 1/6 Pyth. comma + 12 +! + 98.04500 + 200.00000 + 300.00000 + 400.00000 + 4/3 + 600.00000 + 700.00000 + 800.00000 + 898.04500 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/marpurg-d.scl b/scales/marpurg-d.scl new file mode 100644 index 0000000..08f6167 --- /dev/null +++ b/scales/marpurg-d.scl @@ -0,0 +1,17 @@ +! marpurg-d.scl +! +Marpurg's temperament D, 1/12 and 1/6 Pyth. comma + 12 +! + 98.04500 + 198.04500 + 300.00000 + 398.04500 + 4/3 + 600.00000 + 698.04500 + 798.04500 + 900.00000 + 998.04500 + 1098.04500 + 2/1 diff --git a/scales/marpurg-e.scl b/scales/marpurg-e.scl new file mode 100644 index 0000000..00af4cf --- /dev/null +++ b/scales/marpurg-e.scl @@ -0,0 +1,17 @@ +! marpurg-e.scl +! +Marpurg's temperament E, 1/12 and 1/6 Pyth. comma + 12 +! + 100.00000 + 201.95500 + 301.95500 + 401.95500 + 501.95500 + 601.95500 + 700.00000 + 800.00000 + 900.00000 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/marpurg-g.scl b/scales/marpurg-g.scl new file mode 100644 index 0000000..3d34c21 --- /dev/null +++ b/scales/marpurg-g.scl @@ -0,0 +1,17 @@ +! marpurg-g.scl +! +Marpurg's temperament G, 1/5 Pyth. comma + 12 +! + 99.60900 + 199.21800 + 298.82700 + 398.43600 + 4/3 + 602.34600 + 3/2 + 801.56400 + 901.17300 + 1000.78200 + 1100.39100 + 2/1 diff --git a/scales/marpurg-t1.scl b/scales/marpurg-t1.scl new file mode 100644 index 0000000..dabd35b --- /dev/null +++ b/scales/marpurg-t1.scl @@ -0,0 +1,17 @@ +! marpurg-t1.scl +! +Marpurg's temperament nr.1, Kirnbergersche Temperatur (1766). Also 12 Indian shrutis + 12 +! + 256/243 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 128/81 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/marpurg-t11.scl b/scales/marpurg-t11.scl new file mode 100644 index 0000000..4bceaff --- /dev/null +++ b/scales/marpurg-t11.scl @@ -0,0 +1,17 @@ +! marpurg-t11.scl +! +Marpurg's temperament nr.11, 6 tempered fifths + 12 +! + 105.86500 + 9/8 + 301.95500 + 81/64 + 4/3 + 607.82000 + 3/2 + 803.91000 + 27/16 + 1000.00000 + 243/128 + 2/1 diff --git a/scales/marpurg-t12.scl b/scales/marpurg-t12.scl new file mode 100644 index 0000000..ce7ae35 --- /dev/null +++ b/scales/marpurg-t12.scl @@ -0,0 +1,17 @@ +! marpurg-t12.scl +! +Marpurg's temperament nr.12, 4 tempered fifths + 12 +! + 16/15 + 205.86500 + 1215/1024 + 512/405 + 10935/8192 + 64/45 + 703.91000 + 8/5 + 907.82000 + 998.04500 + 256/135 + 2/1 diff --git a/scales/marpurg-t1a.scl b/scales/marpurg-t1a.scl new file mode 100644 index 0000000..2294de3 --- /dev/null +++ b/scales/marpurg-t1a.scl @@ -0,0 +1,17 @@ +! marpurg-t1a.scl +! +Marpurg's temperament no. 1, 1/12 and 1/6 Pyth. comma + 12 +! + 101.95500 + 201.95500 + 303.91000 + 400.00000 + 501.95500 + 601.95500 + 703.91000 + 800.00000 + 901.95500 + 1001.95500 + 1103.91000 + 2/1 diff --git a/scales/marpurg-t2.scl b/scales/marpurg-t2.scl new file mode 100644 index 0000000..946cb8b --- /dev/null +++ b/scales/marpurg-t2.scl @@ -0,0 +1,17 @@ +! marpurg-t2.scl +! +Marpurg's temperament nr.2, 2 tempered fifths, Neue Methode (1790) + 12 +! + 109.77500 + 9/8 + 313.68500 + 81/64 + 4/3 + 607.82000 + 3/2 + 811.73000 + 27/16 + 1015.64000 + 1105.86500 + 2/1 diff --git a/scales/marpurg-t2a.scl b/scales/marpurg-t2a.scl new file mode 100644 index 0000000..ca2a2ea --- /dev/null +++ b/scales/marpurg-t2a.scl @@ -0,0 +1,17 @@ +! marpurg-t2a.scl +! +Marpurg's temperament no. 2, 1/12 and 5/24 Pyth. comma + 12 +! + 96.09000 + 194.13500 + 297.06750 + 400.00000 + 496.09000 + 594.13500 + 697.06750 + 800.00000 + 896.09000 + 994.13500 + 1097.06750 + 2/1 diff --git a/scales/marpurg-t3.scl b/scales/marpurg-t3.scl new file mode 100644 index 0000000..60ecb36 --- /dev/null +++ b/scales/marpurg-t3.scl @@ -0,0 +1,17 @@ +! marpurg-t3.scl +! +Marpurg's temperament nr.3, 2 tempered fifths + 12 +! + 96.09000 + 9/8 + 300.00000 + 81/64 + 4/3 + 594.13500 + 3/2 + 798.04500 + 27/16 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/marpurg-t4.scl b/scales/marpurg-t4.scl new file mode 100644 index 0000000..7980b88 --- /dev/null +++ b/scales/marpurg-t4.scl @@ -0,0 +1,17 @@ +! marpurg-t4.scl +! +Marpurg's temperament nr.4, 2 tempered fifths + 12 +! + 98.04500 + 9/8 + 32/27 + 81/64 + 4/3 + 596.09000 + 3/2 + 800.00000 + 905.86500 + 996.09000 + 1094.13500 + 2/1 diff --git a/scales/marpurg-t5.scl b/scales/marpurg-t5.scl new file mode 100644 index 0000000..1fc5224 --- /dev/null +++ b/scales/marpurg-t5.scl @@ -0,0 +1,17 @@ +! marpurg-t5.scl +! +Marpurg's temperament nr.5, 2 tempered fifths + 12 +! + 103.91000 + 9/8 + 307.82000 + 81/64 + 4/3 + 601.95500 + 3/2 + 805.86500 + 27/16 + 1009.77500 + 1100.00000 + 2/1 diff --git a/scales/marpurg-t7.scl b/scales/marpurg-t7.scl new file mode 100644 index 0000000..9dada80 --- /dev/null +++ b/scales/marpurg-t7.scl @@ -0,0 +1,17 @@ +! marpurg-t7.scl +! +Marpurg's temperament nr.7, 3 tempered fifths + 12 +! + 98.04500 + 196.09000 + 32/27 + 400.00000 + 498.04500 + 596.09000 + 694.13500 + 800.00000 + 898.04500 + 996.09000 + 1094.13500 + 2/1 diff --git a/scales/marpurg-t8.scl b/scales/marpurg-t8.scl new file mode 100644 index 0000000..f9970ca --- /dev/null +++ b/scales/marpurg-t8.scl @@ -0,0 +1,17 @@ +! marpurg-t8.scl +! +Marpurg's temperament nr.8, 4 tempered fifths + 12 +! + 101.95500 + 198.04500 + 300.00000 + 401.95500 + 4/3 + 600.00000 + 696.09000 + 798.04500 + 900.00000 + 1001.95500 + 1098.04500 + 2/1 diff --git a/scales/marpurg-t9.scl b/scales/marpurg-t9.scl new file mode 100644 index 0000000..afe1a05 --- /dev/null +++ b/scales/marpurg-t9.scl @@ -0,0 +1,17 @@ +! marpurg-t9.scl +! +Marpurg's temperament nr.9, 4 tempered fifths + 12 +! + 101.95500 + 9/8 + 305.86500 + 81/64 + 503.91000 + 605.86500 + 3/2 + 803.91000 + 27/16 + 1007.82000 + 243/128 + 2/1 diff --git a/scales/marpurg.scl b/scales/marpurg.scl new file mode 100644 index 0000000..56752c9 --- /dev/null +++ b/scales/marpurg.scl @@ -0,0 +1,17 @@ +! marpurg.scl +! +Marpurg, Versuch ber die musikalische Temperatur (1776), p. 153 + 12 +! + 101.95500 + 200.97750 + 300.00000 + 401.95500 + 500.97750 + 600.00000 + 3/2 + 800.97750 + 900.00000 + 1001.95500 + 1100.97750 + 2/1 diff --git a/scales/marpurg1.scl b/scales/marpurg1.scl new file mode 100644 index 0000000..83be379 --- /dev/null +++ b/scales/marpurg1.scl @@ -0,0 +1,17 @@ +! marpurg1.scl +! +Marpurg's Monochord no.1 (1776) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/marpurg3.scl b/scales/marpurg3.scl new file mode 100644 index 0000000..5520b99 --- /dev/null +++ b/scales/marpurg3.scl @@ -0,0 +1,17 @@ +! marpurg3.scl +! +Marpurg 3 + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 27/16 + 16/9 + 15/8 + 2 diff --git a/scales/marsh.scl b/scales/marsh.scl new file mode 100644 index 0000000..12c5316 --- /dev/null +++ b/scales/marsh.scl @@ -0,0 +1,17 @@ +! marsh.scl +! +John Marsh's meantone temperament (1809) + 12 +! + 89.50000 + 197.00000 + 304.50000 + 394.00000 + 501.50000 + 591.00000 + 698.50000 + 788.00000 + 895.50000 + 1003.00000 + 1092.50000 + 2/1 diff --git a/scales/marvbiz.scl b/scales/marvbiz.scl new file mode 100644 index 0000000..dce1956 --- /dev/null +++ b/scales/marvbiz.scl @@ -0,0 +1,24 @@ +! marvbiz.scl +! +1/4 kleismic tempered marvel "byzantine" scale + 19 +! + 21/20 + 115.58705 + 200.05424 + 268.79879 + 6/5 + 384.38583 + 431.22833 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 768.77167 + 815.61417 + 5/3 + 931.20121 + 999.94576 + 1084.41295 + 40/21 + 2/1 diff --git a/scales/marvel10.scl b/scales/marvel10.scl new file mode 100644 index 0000000..e869ef6 --- /dev/null +++ b/scales/marvel10.scl @@ -0,0 +1,30 @@ +! marvel10.scl +Marvel[10] hobbit in 197-tET +10 +! +115.73604 +201.01523 +383.75635 +499.49239 +584.77157 +700.50761 +816.24365 +968.52792 +1084.26396 +2/1 +! ! +! ! premarvel10.scl +! ! +! Premarvel[10] hobbit transversal = diachrome4 +! 10 +! +! 16/15 +! 9/8 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 225/128 +! 15/8 +! 2/1 diff --git a/scales/marvel11.scl b/scales/marvel11.scl new file mode 100644 index 0000000..773ede7 --- /dev/null +++ b/scales/marvel11.scl @@ -0,0 +1,29 @@ +! marvel11.scl +Marvel[11] hobbit in 197-tET +11 +! +115.73604 +231.47208 +268.02030 +383.75635 +499.49239 +700.50761 +816.24365 +931.97970 +968.52792 +1084.26396 +2/1 +! +! ! premarvel11.scl +! Premarvel[11] hobbit 5-limit transversal ! 11 ! ! +! 16/15 +! 256/225 +! 75/64 +! 5/4 +! 4/3 +! 3/2 +! 8/5 +! 128/75 +! 225/128 +! 15/8 +! 2/1 diff --git a/scales/marvel12.scl b/scales/marvel12.scl new file mode 100644 index 0000000..51f389c --- /dev/null +++ b/scales/marvel12.scl @@ -0,0 +1,34 @@ +! marvel12.scl +Marvel[12] hobbit in 197-tET +12 +! +115.73604 +201.01523 +316.75127 +383.75635 +499.49239 +584.77157 +700.50761 +816.24365 +931.97970 +968.52792 +1084.26396 +2/1 +! +! ! premarvel12.scl +! ! +! Premarvel[12] hobbit 5-limit transversal = diadie2 = pump9 +! 12 +! ! +! 16/15 +! 9/8 +! 6/5 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 128/75 +! 225/128 +! 15/8 +! 2/1 diff --git a/scales/marvel19.scl b/scales/marvel19.scl new file mode 100644 index 0000000..60e8458 --- /dev/null +++ b/scales/marvel19.scl @@ -0,0 +1,48 @@ +! marvel19.scl +Marvel[19] hobbit in 197-tET +19 +! +85.27919 +115.73604 +201.01523 +268.02030 +316.75127 +383.75635 +432.48731 +499.49239 +584.77157 +615.22843 +700.50761 +767.51269 +816.24365 +883.24873 +931.97970 +998.98477 +1084.26396 +1114.72081 +2/1 +! +! premarvel19.scl +! +! Premarvel[19] hobbit 5-limit transversal = marvbizji +! 19 +! ! +! 135/128 +! 16/15 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 45/32 +! 64/45 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 16/9 +! 15/8 +! 256/135 +! 2/1 diff --git a/scales/marvel22.scl b/scales/marvel22.scl new file mode 100644 index 0000000..80587df --- /dev/null +++ b/scales/marvel22.scl @@ -0,0 +1,53 @@ +! marvel22.scl +Marvel[22] hobbit in 197-tET +22 +! +48.73096 +115.73604 +152.28426 +201.01523 +268.02030 +316.75127 +383.75635 +432.48731 +499.49239 +548.22335 +584.77157 +651.77665 +700.50761 +767.51269 +816.24365 +883.24873 +931.97970 +968.52792 +1017.25888 +1084.26396 +1132.99492 +2/1 +! +! ! premarvel22.scl +! Premarvel[22] hobbit 5-limit transversal +! 22 +! ! +! 128/125 +! 16/15 +! 1125/1024 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 512/375 +! 45/32 +! 375/256 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 225/128 +! 9/5 +! 15/8 +! 48/25 +! 2/1 \ No newline at end of file diff --git a/scales/marvel22_11.scl b/scales/marvel22_11.scl new file mode 100644 index 0000000..9c1d0b5 --- /dev/null +++ b/scales/marvel22_11.scl @@ -0,0 +1,53 @@ +! marvel22_11.scl +Unidecimal Marvel[22] hobbit, minimax tuning, commas 225/224, 385/384, 540/539 +22 +! +49.20158 +115.80265 +151.99418 +231.60529 +267.79683 +316.99841 +383.59947 +432.80105 +499.40212 +548.60370 +615.20477 +651.39630 +700.59788 +767.19895 +816.40053 +883.00159 +932.20317 +998.80424 +1048.00582 +1084.19735 +1163.80847 +2/1 +! +! ! premarvel22_11.scl +! Marvel[22] 5-limit transversal +! 22 +! ! +! 128/125 +! 16/15 +! 1125/1024 +! 256/225 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 512/375 +! 64/45 +! 375/256 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 16/9 +! 2048/1125 +! 15/8 +! 32768/16875 +! 2/1 diff --git a/scales/marvel9.scl b/scales/marvel9.scl new file mode 100644 index 0000000..6e5815a --- /dev/null +++ b/scales/marvel9.scl @@ -0,0 +1,28 @@ +! marvel9.scl +Marvel[9] hobbit in 197-tET +9 +! +115.73604 +268.02030 +383.75635 +499.49239 +700.50761 +816.24365 +931.97970 +1084.26396 +2/1 +! +! ! premarvel9.scl +! ! +! Premarvel[9] 5-limit transversal = kayolonian_f +! 9 +! ! +! 16/15 +! 75/64 +! 5/4 +! 4/3 +! 3/2 +! 8/5 +! 128/75 +! 15/8 +! 2/1 diff --git a/scales/marveldene.scl b/scales/marveldene.scl new file mode 100644 index 0000000..f1d2935 --- /dev/null +++ b/scales/marveldene.scl @@ -0,0 +1,16 @@ +! marveldene.scl +BlueJI in 197-tET (= Duodene, etc, in 197-tET) + 12 +! +115.73604 +201.01523 +316.75127 +383.75635 +499.49239 +584.77157 +700.50761 +816.24365 +883.24873 +1017.25888 +1084.26396 +2/1 diff --git a/scales/maunder1.scl b/scales/maunder1.scl new file mode 100644 index 0000000..d40852e --- /dev/null +++ b/scales/maunder1.scl @@ -0,0 +1,17 @@ +! maunder1.scl +! +Richard Maunder Bach temperament I (2005), also Daniel Jencka + 12 +! + 98.04500 + 196.09000 + 299.34833 + 392.18000 + 501.95500 + 596.09000 + 698.04500 + 798.69667 + 894.13500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/maunder2.scl b/scales/maunder2.scl new file mode 100644 index 0000000..f09485c --- /dev/null +++ b/scales/maunder2.scl @@ -0,0 +1,17 @@ +! maunder2.scl +! +Richard Maunder Bach temperament II (2005) + 12 +! + 98.04500 + 196.09000 + 300.00000 + 392.18000 + 501.95500 + 596.09000 + 698.04500 + 799.02250 + 894.13500 + 1000.97750 + 1094.13500 + 2/1 diff --git a/scales/mavila12.scl b/scales/mavila12.scl new file mode 100644 index 0000000..8439c3d --- /dev/null +++ b/scales/mavila12.scl @@ -0,0 +1,17 @@ +! mavila12.scl +! +A 12-note mavila scale (for warping meantone-based music), 5-limit TOP + 12 +! +-30.99719 + 163.50770 + 358.01258 + 327.01540 + 521.52028 + 490.52310 + 685.02798 + 654.03080 + 848.53568 + 1043.04057 + 1012.04338 + 1206.54826 diff --git a/scales/mavila9.scl b/scales/mavila9.scl new file mode 100644 index 0000000..7ade1b1 --- /dev/null +++ b/scales/mavila9.scl @@ -0,0 +1,14 @@ +! mavila9.scl +! +Mavila-9 in 5-limit TOP tuning + 9 +! + 163.50770 + 327.01540 + 358.01258 + 521.52028 + 685.02798 + 848.53568 + 879.53287 + 1043.04057 + 1206.54826 diff --git a/scales/mavlim1.scl b/scales/mavlim1.scl new file mode 100644 index 0000000..dcce918 --- /dev/null +++ b/scales/mavlim1.scl @@ -0,0 +1,14 @@ +! mavlim1.scl +! +First 27/25&135/128 scale + 9 +! + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 16/9 + 2/1 diff --git a/scales/mavsynch16.scl b/scales/mavsynch16.scl new file mode 100644 index 0000000..5d73b12 --- /dev/null +++ b/scales/mavsynch16.scl @@ -0,0 +1,21 @@ +! mavsynch16.scl +! +Mavila[16] in meta (brat=-1) tuning, fifth satisfies f^4 + f^3 - 8 = 0 + 16 +! + 65.63992 + 152.67431 + 218.31423 + 305.34861 + 370.98854 + 458.02292 + 523.66285 + 610.69723 + 676.33715 + 741.97708 + 829.01146 + 894.65139 + 981.68577 + 1047.32569 + 1134.36007 + 2/1 diff --git a/scales/mavsynch7.scl b/scales/mavsynch7.scl new file mode 100644 index 0000000..85efa90 --- /dev/null +++ b/scales/mavsynch7.scl @@ -0,0 +1,12 @@ +! mavsynch7.scl +! +Mavila[7] in meta (brat=-1) tuning, fifth satisfies f^4 + f^3 - 8 = 0 + 7 +! + 152.67431 + 370.98854 + 523.66285 + 676.33715 + 829.01146 + 1047.32569 + 2/1 diff --git a/scales/mbira_banda.scl b/scales/mbira_banda.scl new file mode 100644 index 0000000..42567a7 --- /dev/null +++ b/scales/mbira_banda.scl @@ -0,0 +1,12 @@ +! mbira_banda.scl +! +Mubayiwa Bandambira's tuning of keys R2-R9 from Berliner: The soul of mbira. + 7 +! + 185.000 cents + 389.000 cents + 593.000 cents + 756.000 cents + 914.000 cents + 1051.000 cents + 1302.000 cents diff --git a/scales/mbira_banda2.scl b/scales/mbira_banda2.scl new file mode 100644 index 0000000..4c22025 --- /dev/null +++ b/scales/mbira_banda2.scl @@ -0,0 +1,26 @@ +! mbira_banda2.scl +! +Mubayiwa Bandambira's Mbira DzaVadzimu tuning B1=114 Hz + 21 +! + 355.000 cents + 554.000 cents + 650.000 cents + 829.000 cents + 982.000 cents + 1400.000 cents + 1169.000 cents + 1850.000 cents + 1732.000 cents + 2038.000 cents + 2207.000 cents + 2400.001 cents + 1531.000 cents + 2415.001 cents + 2600.001 cents + 2804.001 cents + 3008.001 cents + 3171.001 cents + 3329.001 cents + 3466.001 cents + 3717.001 cents diff --git a/scales/mbira_chisanzhi.scl b/scales/mbira_chisanzhi.scl new file mode 100644 index 0000000..3329052 --- /dev/null +++ b/scales/mbira_chisanzhi.scl @@ -0,0 +1,11 @@ +! mbira_chisanzhi.scl +! +Mbira chisanzhi from Luchazi. 1/1=256 Hz, Tracey TR-184 B-4,5 + 6 +! + 69/64 + 5/4 + 87/64 + 97/64 + 53/32 + 2/1 diff --git a/scales/mbira_chisanzhi2.scl b/scales/mbira_chisanzhi2.scl new file mode 100644 index 0000000..3d3336e --- /dev/null +++ b/scales/mbira_chisanzhi2.scl @@ -0,0 +1,12 @@ +! mbira_chisanzhi2.scl +! +Mbira chisanzhi from Lunda. 1/1=212 Hz, Tracey TR-179 B-5,6 + 7 +! + 58/53 + 133/106 + 70/53 + 76/53 + 86/53 + 95/53 + 2/1 diff --git a/scales/mbira_gondo.scl b/scales/mbira_gondo.scl new file mode 100644 index 0000000..2fc6648 --- /dev/null +++ b/scales/mbira_gondo.scl @@ -0,0 +1,26 @@ +! mbira_gondo.scl +! +John Gondo's Mbira DzaVadzimu tuning B1=122 Hz + 21 +! + 323.000 cents + 480.000 cents + 644.000 cents + 830.000 cents + 981.000 cents + 1330.000 cents + 1179.000 cents + 1888.000 cents + 1697.000 cents + 2025.000 cents + 2189.000 cents + 2371.001 cents + 1517.000 cents + 2390.001 cents + 2569.001 cents + 2787.001 cents + 2923.001 cents + 3105.001 cents + 3256.001 cents + 3417.001 cents + 3609.001 cents diff --git a/scales/mbira_kankowela.scl b/scales/mbira_kankowela.scl new file mode 100644 index 0000000..4430587 --- /dev/null +++ b/scales/mbira_kankowela.scl @@ -0,0 +1,12 @@ +! mbira_kankowela.scl +! +Mbira kankowela from Valley Tonga. 1/1=240 Hz, Tracey TR-41 B-6 + 7 +! + 11/10 + 37/30 + 4/3 + 89/60 + 5/3 + 9/5 + 2/1 diff --git a/scales/mbira_kankowela2.scl b/scales/mbira_kankowela2.scl new file mode 100644 index 0000000..8884fd2 --- /dev/null +++ b/scales/mbira_kankowela2.scl @@ -0,0 +1,12 @@ +! mbira_kankowela2.scl +! +Mbira kankowela from Valley Tonga. 1/1=264 Hz, Tracey TR-41 B-7 + 7 +! + 73/66 + 41/33 + 89/66 + 3/2 + 18/11 + 59/33 + 2/1 diff --git a/scales/mbira_kankowela3.scl b/scales/mbira_kankowela3.scl new file mode 100644 index 0000000..b6bee97 --- /dev/null +++ b/scales/mbira_kankowela3.scl @@ -0,0 +1,12 @@ +! mbira_kankowela3.scl +! +Mbira kankowela from Valley Tonga. 1/1=264 Hz, Tracey TR-42 B-2 + 7 +! + 37/33 + 40/33 + 89/66 + 50/33 + 18/11 + 20/11 + 2/1 diff --git a/scales/mbira_kunaka.scl b/scales/mbira_kunaka.scl new file mode 100644 index 0000000..0dabbf0 --- /dev/null +++ b/scales/mbira_kunaka.scl @@ -0,0 +1,12 @@ +! mbira_kunaka.scl +! +John Kunaka's mbira tuning of keys R2-R9 + 7 +! + 196.000 cents + 377.000 cents + 506.000 cents + 676.000 cents + 877.000 cents + 1050.000 cents + 1148.000 cents diff --git a/scales/mbira_kunaka2.scl b/scales/mbira_kunaka2.scl new file mode 100644 index 0000000..d8b4a9b --- /dev/null +++ b/scales/mbira_kunaka2.scl @@ -0,0 +1,26 @@ +! mbira_kunaka2.scl +! +John Kunaka's Mbira DzaVadzimu tuning B1=113 Hz + 21 +! + 455.000 cents + 547.000 cents + 757.000 cents + 935.000 cents + 1089.000 cents + 1501.000 cents + 1260.000 cents + 1972.000 cents + 1763.000 cents + 2153.000 cents + 2317.001 cents + 2478.001 cents + 1638.000 cents + 2464.001 cents + 2660.001 cents + 2841.001 cents + 2970.001 cents + 3140.001 cents + 3341.001 cents + 3514.001 cents + 3612.001 cents diff --git a/scales/mbira_mude.scl b/scales/mbira_mude.scl new file mode 100644 index 0000000..e4bed9b --- /dev/null +++ b/scales/mbira_mude.scl @@ -0,0 +1,26 @@ +! mbira_mude.scl +! +Hakurotwi Mude's Mbira DzaVadzimu tuning B1=132 Hz + 21 +! + 174.000 cents + 289.000 cents + 575.000 cents + 612.000 cents + 770.000 cents + 1146.000 cents + 976.000 cents + 1678.000 cents + 1467.000 cents + 1848.000 cents + 1987.000 cents + 2115.000 cents + 1326.000 cents + 2117.000 cents + 2348.001 cents + 2528.001 cents + 2646.001 cents + 2860.001 cents + 3032.001 cents + 3205.001 cents + 3465.001 cents diff --git a/scales/mbira_mujuru.scl b/scales/mbira_mujuru.scl new file mode 100644 index 0000000..181b35c --- /dev/null +++ b/scales/mbira_mujuru.scl @@ -0,0 +1,26 @@ +! mbira_mujuru.scl +! +Ephat Mujuru's Mbira DzaVadzimu tuning, B1=106 Hz + 21 +! + 126.000 cents + 243.000 cents + 399.000 cents + 713.000 cents + 818.000 cents + 1232.000 cents + 1082.000 cents + 1706.000 cents + 1443.000 cents + 1858.000 cents + 1955.000 cents + 2219.000 cents + 1371.000 cents + 2210.000 cents + 2400.001 cents + 2556.001 cents + 2699.001 cents + 2918.001 cents + 3069.001 cents + 3197.001 cents + 3437.001 cents diff --git a/scales/mbira_zimb.scl b/scales/mbira_zimb.scl new file mode 100644 index 0000000..04089d6 --- /dev/null +++ b/scales/mbira_zimb.scl @@ -0,0 +1,12 @@ +! mbira_zimb.scl +! +Shona mbira scale + 7 +! + 98.000 cents + 271.000 cents + 472.000 cents + 642.000 cents + 771.000 cents + 952.000 cents + 1148.000 cents diff --git a/scales/mboko_bow.scl b/scales/mboko_bow.scl new file mode 100644 index 0000000..56a38a7 --- /dev/null +++ b/scales/mboko_bow.scl @@ -0,0 +1,7 @@ +! mboko_bow.scl +! +African Mboko Mouth Bow (chordophone, single string, plucked) + 2 +! + 492.000 cents + 625.000 cents diff --git a/scales/mboko_zither.scl b/scales/mboko_zither.scl new file mode 100644 index 0000000..707d1e4 --- /dev/null +++ b/scales/mboko_zither.scl @@ -0,0 +1,12 @@ +! mboko_zither.scl +! +African Mboko Zither (chordophone; idiochordic palm fibre, plucked) + 7 +! + 206.000 cents + 345.000 cents + 528.000 cents + 720.000 cents + 814.000 cents + 1024.000 cents + 1166.000 cents diff --git a/scales/mcclain.scl b/scales/mcclain.scl new file mode 100644 index 0000000..8ad9fa3 --- /dev/null +++ b/scales/mcclain.scl @@ -0,0 +1,17 @@ +! mcclain.scl +! +McClain's 12-tone scale, see page 119 of The Myth of Invariance + 12 +! + 135/128 + 9/8 + 75/64 + 5/4 + 81/64 + 45/32 + 3/2 + 25/16 + 27/16 + 15/8 + 125/64 + 2/1 diff --git a/scales/mcclain_18.scl b/scales/mcclain_18.scl new file mode 100644 index 0000000..a785efd --- /dev/null +++ b/scales/mcclain_18.scl @@ -0,0 +1,23 @@ +! MCCLAIN_18.scl +! +McClain's 18-tone scale, see page 143 of The Myth of Invariance + 18 +! + 135/128 + 9/8 + 75/64 + 625/512 + 5/4 + 81/64 + 675/512 + 45/32 + 375/256 + 3/2 + 25/16 + 405/256 + 27/16 + 225/128 + 15/8 + 243/128 + 125/64 + 2/1 diff --git a/scales/mcclain_8.scl b/scales/mcclain_8.scl new file mode 100644 index 0000000..81b71fe --- /dev/null +++ b/scales/mcclain_8.scl @@ -0,0 +1,13 @@ +! MCCLAIN_8.scl +! +McClain's 8-tone scale, see page 51 of The Myth of Invariance + 8 +! + 9/8 + 5/4 + 45/32 + 3/2 + 25/16 + 27/16 + 15/8 + 2/1 diff --git a/scales/mccoskey_22.scl b/scales/mccoskey_22.scl new file mode 100644 index 0000000..7ee8b05 --- /dev/null +++ b/scales/mccoskey_22.scl @@ -0,0 +1,27 @@ +! mccoskey_22.scl +! +31-limit rational interpretation of 22-tET, Marion McCoskey + 22 +! + 32/31 + 16/15 + 11/10 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 19/13 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 31/16 + 2/1 diff --git a/scales/mcgoogy_phi.scl b/scales/mcgoogy_phi.scl new file mode 100644 index 0000000..4e4c226 --- /dev/null +++ b/scales/mcgoogy_phi.scl @@ -0,0 +1,23 @@ +! mcgoogy_phi.scl +! +Brink McGoogy's Phinocchio tuning, mix of 5th (black keys) and 7th (white keys) root of phi + 18 +! + 36.61806 + 119.01290 + 203.23612 + 238.02580 + 357.03870 + 369.85418 + 476.05160 + 536.47224 + 595.06450 + 703.09030 + 714.07740 + 833.09030 + 869.70836 + 952.10320 + 1036.32642 + 1071.11610 + 1190.12899 + 1202.94447 diff --git a/scales/mcgoogy_phi2.scl b/scales/mcgoogy_phi2.scl new file mode 100644 index 0000000..937ed3c --- /dev/null +++ b/scales/mcgoogy_phi2.scl @@ -0,0 +1,23 @@ +! mcgoogy_phi2.scl +! +Brink McGoogy's Phinocchio tuning with symmetrical "brinko" + 18 +! + 35.70387 + 119.01290 + 202.32193 + 238.02580 + 357.03870 + 368.93999 + 476.05160 + 535.55805 + 595.06450 + 702.17611 + 714.07740 + 833.09030 + 868.79417 + 952.10320 + 1035.41223 + 1071.11610 + 1190.12899 + 1202.03028 diff --git a/scales/mclaren_bar.scl b/scales/mclaren_bar.scl new file mode 100644 index 0000000..855753d --- /dev/null +++ b/scales/mclaren_bar.scl @@ -0,0 +1,18 @@ +! mclaren_bar.scl +! +Metal bar scale. see McLaren, Xenharmonicon 15, pp.31-33 + 13 +! + 128.44200 + 191.00700 + 264.24700 + 378.21400 + 394.91800 + 520.84000 + 555.81300 + 642.34200 + 724.75000 + 759.72700 + 885.82100 + 1039.73500 + 1193.09900 diff --git a/scales/mclaren_cps.scl b/scales/mclaren_cps.scl new file mode 100644 index 0000000..1b6b78c --- /dev/null +++ b/scales/mclaren_cps.scl @@ -0,0 +1,20 @@ +! mclaren_cps.scl +! +2)12 [1,2,3,4,5,6,8,9,10,12,14,15] a degenerate CPS + 15 +! + 135/128 + 35/32 + 9/8 + 75/64 + 5/4 + 21/16 + 45/32 + 3/2 + 25/16 + 105/64 + 27/16 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/mclaren_harm.scl b/scales/mclaren_harm.scl new file mode 100644 index 0000000..481b1d2 --- /dev/null +++ b/scales/mclaren_harm.scl @@ -0,0 +1,16 @@ +! mclaren_harm.scl +! +from "Wilson part 9", claimed to be Schlesingers Dorian Enharmonic, prov. unkn + 11 +! + 16/15 + 8/7 + 64/55 + 128/109 + 4/3 + 16/11 + 64/43 + 128/85 + 32/21 + 16/9 + 2/1 diff --git a/scales/mclaren_rath1.scl b/scales/mclaren_rath1.scl new file mode 100644 index 0000000..343393d --- /dev/null +++ b/scales/mclaren_rath1.scl @@ -0,0 +1,17 @@ +! mclaren_rath1.scl +! +McLaren Rat H1 + 12 +! + 16/15 + 8/7 + 32/25 + 64/49 + 4/3 + 64/45 + 16/11 + 64/43 + 32/21 + 32/17 + 64/33 + 2/1 diff --git a/scales/mclaren_rath2.scl b/scales/mclaren_rath2.scl new file mode 100644 index 0000000..97b89d5 --- /dev/null +++ b/scales/mclaren_rath2.scl @@ -0,0 +1,17 @@ +! MCLAREN_RATH2.scl +! +McLaren Rat H2 + 12 +! + 16/15 + 8/7 + 32/25 + 64/49 + 4/3 + 16/11 + 64/43 + 32/21 + 32/19 + 64/37 + 16/9 + 2/1 diff --git a/scales/mean10.scl b/scales/mean10.scl new file mode 100644 index 0000000..b68ce22 --- /dev/null +++ b/scales/mean10.scl @@ -0,0 +1,17 @@ +! mean10.scl +! +3/10-comma meantone scale + 12 +! + 68.52180 + 191.00623 + 313.49066 + 382.01246 + 504.49689 + 573.01868 + 695.50311 + 764.02491 + 886.50934 + 1008.99377 + 1077.51557 + 2/1 diff --git a/scales/mean11.scl b/scales/mean11.scl new file mode 100644 index 0000000..83d550d --- /dev/null +++ b/scales/mean11.scl @@ -0,0 +1,17 @@ +! mean11.scl +! +3/11-comma meantone scale. A.J. Ellis no. 10 + 12 +! + 72.62754 + 192.17930 + 311.73105 + 384.35860 + 503.91035 + 576.53789 + 696.08965 + 768.71719 + 888.26895 + 1007.82070 + 1080.44825 + 2/1 diff --git a/scales/mean11ls_19.scl b/scales/mean11ls_19.scl new file mode 100644 index 0000000..48b530d --- /dev/null +++ b/scales/mean11ls_19.scl @@ -0,0 +1,24 @@ +! mean11ls_19.scl +! +Least squares appr. to 3/2, 5/4, 7/6, 15/14 and 11/8, Petr Parzek + 19 +! + 73.26337 + 119.09759 + 192.36096 + 265.62434 + 311.45855 + 384.72193 + 457.98530 + 503.81952 + 577.08289 + 622.91711 + 696.18048 + 769.44386 + 815.27807 + 888.54145 + 961.80482 + 1007.63904 + 1080.90241 + 1154.16578 + 2/1 diff --git a/scales/mean13.scl b/scales/mean13.scl new file mode 100644 index 0000000..180312c --- /dev/null +++ b/scales/mean13.scl @@ -0,0 +1,17 @@ +! mean13.scl +! +3/13-comma meantone scale + 12 +! + 78.94408 + 193.98402 + 309.02397 + 387.96804 + 503.00799 + 581.95207 + 696.99201 + 775.93609 + 890.97603 + 1006.01598 + 1084.96005 + 2/1 diff --git a/scales/mean14.scl b/scales/mean14.scl new file mode 100644 index 0000000..cf389ab --- /dev/null +++ b/scales/mean14.scl @@ -0,0 +1,17 @@ +! mean14.scl +! +3/14-comma meantone scale (Giordano Riccati, 1762) + 12 +! + 81.42557 + 194.69302 + 307.96047 + 389.38604 + 502.65349 + 584.07906 + 697.34651 + 778.77208 + 892.03953 + 1005.30698 + 1086.73255 + 2/1 diff --git a/scales/mean14_15.scl b/scales/mean14_15.scl new file mode 100644 index 0000000..c2a9390 --- /dev/null +++ b/scales/mean14_15.scl @@ -0,0 +1,20 @@ +! mean14_15.scl +! +15 of 3/14-comma meantone scale + 15 +! + 81.42557 + 113.26745 + 194.69302 + 276.11859 + 307.96047 + 389.38604 + 502.65349 + 584.07906 + 697.34651 + 778.77208 + 810.61396 + 892.03953 + 1005.30698 + 1086.73255 + 2/1 diff --git a/scales/mean14_19.scl b/scales/mean14_19.scl new file mode 100644 index 0000000..90036fc --- /dev/null +++ b/scales/mean14_19.scl @@ -0,0 +1,24 @@ +! mean14_19.scl +! +19 of 3/14-comma meantone scale + 19 +! + 81.42557 + 113.26745 + 194.69302 + 276.11859 + 307.96047 + 389.38604 + 470.81161 + 502.65349 + 584.07906 + 615.92094 + 697.34651 + 778.77208 + 810.61396 + 892.03953 + 973.46510 + 1005.30698 + 1086.73255 + 1168.15812 + 2/1 diff --git a/scales/mean14_7.scl b/scales/mean14_7.scl new file mode 100644 index 0000000..42f2c27 --- /dev/null +++ b/scales/mean14_7.scl @@ -0,0 +1,12 @@ +! mean14_7.scl +! +Least squares appr. of 5L+2S to Ptolemy's Intense Diatonic scale + 7 +! + 194.69302 + 389.38604 + 502.65349 + 697.34651 + 892.03953 + 1086.73255 + 2/1 diff --git a/scales/mean14a.scl b/scales/mean14a.scl new file mode 100644 index 0000000..62faa0b --- /dev/null +++ b/scales/mean14a.scl @@ -0,0 +1,17 @@ +! mean14a.scl +! +fifth of sqrt(5/2)-1 octave "recursive" meantone, Paul Hahn + 12 +! + 81.56620 + 194.73320 + 307.90020 + 389.46640 + 502.63340 + 584.19960 + 697.36660 + 778.93280 + 892.09980 + 1005.26680 + 1086.83300 + 2/1 diff --git a/scales/mean16.scl b/scales/mean16.scl new file mode 100644 index 0000000..a20c9f1 --- /dev/null +++ b/scales/mean16.scl @@ -0,0 +1,17 @@ +! mean16.scl +! +3/16-comma meantone scale + 12 +! + 85.45800 + 195.84514 + 306.23229 + 391.69029 + 502.07743 + 587.53543 + 697.92257 + 783.38057 + 893.76771 + 1004.15486 + 1089.61286 + 2/1 diff --git a/scales/mean17.scl b/scales/mean17.scl new file mode 100644 index 0000000..a91120a --- /dev/null +++ b/scales/mean17.scl @@ -0,0 +1,17 @@ +! mean17.scl +! +4/17-comma meantone scale, least squares error of 5/4 and 3/2 + 12 +! + 78.26288 + 193.78939 + 309.31591 + 387.57879 + 503.10530 + 581.36818 + 696.89470 + 775.15758 + 890.68409 + 1006.21061 + 1084.47349 + 2/1 diff --git a/scales/mean17_17.scl b/scales/mean17_17.scl new file mode 100644 index 0000000..7471bd1 --- /dev/null +++ b/scales/mean17_17.scl @@ -0,0 +1,22 @@ +! mean17_17.scl +! +4/17-comma meantone scale with split C#/Db, D#/Eb, F#/Gb, G#/Ab and A#/Bb + 17 +! + 78.26288 + 115.52651 + 193.78939 + 272.05228 + 309.31591 + 387.57879 + 503.10530 + 581.36818 + 618.63182 + 696.89470 + 775.15758 + 812.42121 + 890.68409 + 968.94697 + 1006.21061 + 1084.47349 + 2/1 diff --git a/scales/mean17_19.scl b/scales/mean17_19.scl new file mode 100644 index 0000000..befc5d0 --- /dev/null +++ b/scales/mean17_19.scl @@ -0,0 +1,24 @@ +! mean17_19.scl +! +4/17-comma meantone scale, least squares error of 5/4 and 3/2 + 19 +! + 78.26288 + 115.52651 + 193.78939 + 272.05228 + 309.31591 + 387.57879 + 465.84167 + 503.10530 + 581.36818 + 618.63182 + 696.89470 + 775.15758 + 812.42121 + 890.68409 + 968.94697 + 1006.21061 + 1084.47349 + 1162.73637 + 2/1 diff --git a/scales/mean18.scl b/scales/mean18.scl new file mode 100644 index 0000000..dadb33e --- /dev/null +++ b/scales/mean18.scl @@ -0,0 +1,17 @@ +! mean18.scl +! +5/18-comma meantone scale (Smith). 3/2 and 5/3 eq. beat. A.J. Ellis no. 9 + 12 +! + 71.86722 + 191.96206 + 312.05691 + 383.92413 + 504.01897 + 575.88619 + 695.98103 + 767.84825 + 887.94309 + 1008.03794 + 1079.90516 + 2/1 diff --git a/scales/mean19.scl b/scales/mean19.scl new file mode 100644 index 0000000..b6069f2 --- /dev/null +++ b/scales/mean19.scl @@ -0,0 +1,17 @@ +! mean19.scl +! +5/19-comma meantone scale, fifths beats three times third. A.J. Ellis no. 11 + 12 +! + 74.06816 + 192.59090 + 311.11365 + 385.18180 + 503.70455 + 577.77271 + 696.29545 + 770.36361 + 888.88635 + 1007.40910 + 1081.47725 + 2/1 diff --git a/scales/mean19r.scl b/scales/mean19r.scl new file mode 100644 index 0000000..621944f --- /dev/null +++ b/scales/mean19r.scl @@ -0,0 +1,17 @@ +! mean19r.scl +! +Approximate 5/19-comma meantone with 19/17 tone, Petr Parizek (2002) + 12 +! + 73.95162 + 19/17 + 311.16359 + 361/289 + 503.72120 + 6859/4913 + 696.27880 + 130321/83521 + 888.83641 + 34/19 + 1081.39402 + 2/1 diff --git a/scales/mean19t.scl b/scales/mean19t.scl new file mode 100644 index 0000000..8deb65c --- /dev/null +++ b/scales/mean19t.scl @@ -0,0 +1,17 @@ +! mean19t.scl +! +Approximate 5/19-comma meantone with three 7/6 minor thirds + 12 +! + 74.23293 + 192.63798 + 311.04303 + 385.27596 + 503.68101 + 577.91394 + 696.31899 + 770.55192 + 888.95697 + 1007.36202 + 1081.59495 + 2/1 diff --git a/scales/mean23.scl b/scales/mean23.scl new file mode 100644 index 0000000..c402c05 --- /dev/null +++ b/scales/mean23.scl @@ -0,0 +1,17 @@ +! mean23.scl +! +5/23-comma meantone scale, A.J. Ellis no. 4 + 12 +! + 80.95804 + 194.55944 + 308.16084 + 389.11888 + 502.72028 + 583.67832 + 697.27972 + 778.23776 + 891.83916 + 1005.44056 + 1086.39860 + 2/1 diff --git a/scales/mean23six.scl b/scales/mean23six.scl new file mode 100644 index 0000000..8450ee4 --- /dev/null +++ b/scales/mean23six.scl @@ -0,0 +1,17 @@ +! mean23six.scl +! +6/23-comma meantone scale + 12 +! + 74.41265 + 192.68933 + 310.96601 + 385.37866 + 503.65534 + 578.06799 + 696.34466 + 770.75732 + 889.03399 + 1007.31067 + 1081.72332 + 2/1 diff --git a/scales/mean24rat.scl b/scales/mean24rat.scl new file mode 100644 index 0000000..4e3c858 --- /dev/null +++ b/scales/mean24rat.scl @@ -0,0 +1,28 @@ +! mean24rat.scl +Meantone[24] in a rational tuning with brats of 4 +24 +! +3287219/3225600 +1121/1050 +449272979/412876800 +3527/3150 +459763/403200 +1882/1575 +62841811/51609600 +64307/50400 +2863099537/2202009600 +421/315 +585917/430080 +257/180 +133478939/91750400 +2356/1575 +245879/161280 +2516/1575 +168032819/103219200 +527/315 +171923/100800 +2816/1575 +23501171/12902400 +8017/4200 +458892629/235929600 +2/1 diff --git a/scales/mean25.scl b/scales/mean25.scl new file mode 100644 index 0000000..97c4b89 --- /dev/null +++ b/scales/mean25.scl @@ -0,0 +1,17 @@ +! mean25.scl +! +7/25-comma meantone scale, least square weights 3/2:0 5/4:1 6/5:1 + 12 +! + 71.53268 + 191.86648 + 312.20028 + 383.73296 + 504.06676 + 575.59944 + 695.93324 + 767.46592 + 887.79972 + 1008.13352 + 1079.66620 + 2/1 diff --git a/scales/mean26.scl b/scales/mean26.scl new file mode 100644 index 0000000..35ce9f1 --- /dev/null +++ b/scales/mean26.scl @@ -0,0 +1,17 @@ +! mean26.scl +! +7/26-comma meantone scale (Woolhouse 1835). Almost equal to meaneb742.scl + 12 +! + 73.15392 + 192.32969 + 311.50546 + 384.65938 + 503.83515 + 576.98908 + 696.16485 + 769.31877 + 888.49454 + 1007.67031 + 1080.82423 + 2/1 diff --git a/scales/mean26_21.scl b/scales/mean26_21.scl new file mode 100644 index 0000000..f909964 --- /dev/null +++ b/scales/mean26_21.scl @@ -0,0 +1,26 @@ +! mean26_21.scl +! +21 of 7/26-comma meantone scale (Woolhouse 1835) + 21 +! + 73.15395 + 119.17575 + 192.32970 + 265.48365 + 311.50545 + 384.65940 + 430.68120 + 457.81335 + 503.83515 + 576.98910 + 623.01090 + 696.16485 + 769.31880 + 815.34060 + 888.49455 + 961.64850 + 1007.67030 + 1080.82425 + 1126.84605 + 1153.97820 + 2/1 diff --git a/scales/mean27.scl b/scales/mean27.scl new file mode 100644 index 0000000..0a8e7c5 --- /dev/null +++ b/scales/mean27.scl @@ -0,0 +1,17 @@ +! mean27.scl +! +7/27-comma meantone scale, least square weights 3/2:2 5/4:1 6/5:1 + 12 +! + 74.65507 + 192.75859 + 310.86211 + 385.51718 + 503.62070 + 578.27578 + 696.37930 + 771.03437 + 889.13789 + 1007.24141 + 1081.89648 + 2/1 diff --git a/scales/mean29.scl b/scales/mean29.scl new file mode 100644 index 0000000..2cadcfd --- /dev/null +++ b/scales/mean29.scl @@ -0,0 +1,17 @@ +! mean29.scl +! +7/29-comma meantone scale, least square weights 3/2:4 5/4:1 6/5:1 + 12 +! + 77.34679 + 193.52766 + 309.70852 + 387.05531 + 503.23617 + 580.58297 + 696.76383 + 774.11062 + 890.29148 + 1006.47234 + 1083.81914 + 2/1 diff --git a/scales/mean2nine.scl b/scales/mean2nine.scl new file mode 100644 index 0000000..bdef2ff --- /dev/null +++ b/scales/mean2nine.scl @@ -0,0 +1,17 @@ +! mean2nine.scl +! +2/9-comma meantone scale, Lemme Rossi, Sistema musico (1666) + 12 +! + 80.23100 + 194.35200 + 75/64 + 388.70300 + 502.82400 + 583.05500 + 697.17600 + 777.40700 + 891.52800 + 1005.64800 + 1085.87900 + 2/1 diff --git a/scales/mean2nine_15.scl b/scales/mean2nine_15.scl new file mode 100644 index 0000000..6848505 --- /dev/null +++ b/scales/mean2nine_15.scl @@ -0,0 +1,20 @@ +! mean2nine_15.scl +! +15 of 2/9-comma meantone scale + 15 +! + 80.23100 + 114.12100 + 194.35200 + 75/64 + 308.47300 + 388.70300 + 502.82400 + 583.05500 + 697.17600 + 777.40700 + 811.29700 + 891.52800 + 1005.64800 + 1085.87900 + 2/1 diff --git a/scales/mean2nine_19.scl b/scales/mean2nine_19.scl new file mode 100644 index 0000000..52307ae --- /dev/null +++ b/scales/mean2nine_19.scl @@ -0,0 +1,24 @@ +! mean2nine_19.scl +! +19 of 2/9-comma meantone scale + 19 +! + 80.23100 + 114.12100 + 194.35200 + 75/64 + 308.47300 + 388.70300 + 468.93400 + 502.82400 + 583.05500 + 616.94500 + 697.17600 + 777.40700 + 811.29700 + 891.52800 + 971.75800 + 1005.64800 + 1085.87900 + 1166.11000 + 2/1 diff --git a/scales/mean2nine_31.scl b/scales/mean2nine_31.scl new file mode 100644 index 0000000..af7afe5 --- /dev/null +++ b/scales/mean2nine_31.scl @@ -0,0 +1,36 @@ +! mean2nine_31.scl +! +31 of 2/9-comma meantone scale + 31 +! + 46.34100 + 80.23100 + 114.12100 + 160.46200 + 194.35200 + 228.24200 + 75/64 + 308.47300 + 354.81300 + 388.70300 + 422.59300 + 468.93400 + 502.82400 + 5625/4096 + 583.05500 + 616.94500 + 663.28600 + 697.17600 + 743.51700 + 777.40700 + 811.29700 + 857.63700 + 891.52700 + 128/75 + 971.75800 + 1005.64800 + 1051.98900 + 1085.87900 + 1119.76900 + 1166.11000 + 2/1 diff --git a/scales/mean2sev.scl b/scales/mean2sev.scl new file mode 100644 index 0000000..71277ab --- /dev/null +++ b/scales/mean2sev.scl @@ -0,0 +1,17 @@ +! mean2sev.scl +! +2/7-comma meantone scale. Zarlino's temperament (1558). See also meaneb371 + 12 +! + 25/24 + 191.62069 + 312.56896 + 383.24139 + 504.18965 + 574.86208 + 695.81035 + 766.48277 + 887.43104 + 1008.37931 + 1079.05173 + 2/1 diff --git a/scales/mean2sev_15.scl b/scales/mean2sev_15.scl new file mode 100644 index 0000000..1de8f1d --- /dev/null +++ b/scales/mean2sev_15.scl @@ -0,0 +1,20 @@ +! mean2sev_15.scl +! +15 of 2/7-comma meantone scale + 15 +! + 25/24 + 120.94800 + 191.62100 + 262.29300 + 312.56900 + 383.24100 + 504.19000 + 574.86200 + 695.81000 + 766.48300 + 816.75900 + 887.43100 + 1008.37900 + 1079.05200 + 2/1 diff --git a/scales/mean2sev_19.scl b/scales/mean2sev_19.scl new file mode 100644 index 0000000..29936c0 --- /dev/null +++ b/scales/mean2sev_19.scl @@ -0,0 +1,24 @@ +! mean2sev_19.scl +! +19 of 2/7-comma meantone scale + 19 +! + 25/24 + 120.94800 + 191.62100 + 262.29300 + 312.56900 + 383.24100 + 453.91400 + 504.19000 + 574.86200 + 625.13800 + 695.81000 + 766.48300 + 816.75900 + 887.43100 + 958.10300 + 1008.37900 + 1079.05200 + 1149.72400 + 2/1 diff --git a/scales/mean2sev_31.scl b/scales/mean2sev_31.scl new file mode 100644 index 0000000..605a285 --- /dev/null +++ b/scales/mean2sev_31.scl @@ -0,0 +1,36 @@ +! mean2sev_31.scl +! +31 of 2/7-comma meantone scale + 31 +! + 20.39700 + 25/24 + 120.94800 + 625/576 + 191.62100 + 241.89700 + 262.29300 + 312.56900 + 332.96600 + 383.24100 + 433.51700 + 453.91400 + 504.19000 + 524.58600 + 574.86200 + 625.13800 + 645.53500 + 695.81000 + 716.20700 + 766.48300 + 816.75900 + 837.15500 + 887.43100 + 937.70700 + 958.10300 + 1008.37900 + 1028.77600 + 1079.05200 + 48/25 + 1149.72400 + 2/1 diff --git a/scales/mean2seveb.scl b/scales/mean2seveb.scl new file mode 100644 index 0000000..3541c2c --- /dev/null +++ b/scales/mean2seveb.scl @@ -0,0 +1,17 @@ +! mean2seveb.scl +! +"2/7-comma" meantone with equal beating fifths. A.J. Ellis no. 8 + 12 +! + 81.69618 + 193.65683 + 307.31057 + 388.40164 + 502.63919 + 584.12387 + 695.81039 + 777.79027 + 890.11854 + 1004.12185 + 1085.44863 + 2/1 diff --git a/scales/mean2sevr.scl b/scales/mean2sevr.scl new file mode 100644 index 0000000..2726e86 --- /dev/null +++ b/scales/mean2sevr.scl @@ -0,0 +1,17 @@ +! mean2sevr.scl +! +Rational approximation to 2/7-comma meantone, 1/1 = 262.9333 + 12 +! + 25/24 + 19825/17748 + 11811/9860 + 19685/15776 + 1979/1479 + 49475/35496 + 5895/3944 + 49125/31552 + 6585/3944 + 35307/19720 + 58845/31552 + 2/1 diff --git a/scales/mean4nine.scl b/scales/mean4nine.scl new file mode 100644 index 0000000..7a23cd2 --- /dev/null +++ b/scales/mean4nine.scl @@ -0,0 +1,17 @@ +! mean4nine.scl +! +4/9-comma meantone scale + 12 +! + 46.77655 + 184.79330 + 322.81005 + 369.58660 + 507.60335 + 554.37990 + 692.39665 + 739.17320 + 877.18995 + 1015.20670 + 1061.98325 + 2/1 diff --git a/scales/meanbrat32.scl b/scales/meanbrat32.scl new file mode 100644 index 0000000..d1e8c49 --- /dev/null +++ b/scales/meanbrat32.scl @@ -0,0 +1,17 @@ +! meanbrat32.scl +! +Beating of 5/4 = 1.5 times 3/2 same. Almost 1/3-comma + 12 +! + 65.12524 + 190.03578 + 314.94633 + 380.07157 + 504.98211 + 570.10735 + 695.01789 + 760.14313 + 885.05367 + 1009.96422 + 1075.08946 + 2/1 diff --git a/scales/meanbrat32a.scl b/scales/meanbrat32a.scl new file mode 100644 index 0000000..4894151 --- /dev/null +++ b/scales/meanbrat32a.scl @@ -0,0 +1,17 @@ +! meanbrat32a.scl +! +Beating of 5/4 = 1.5 times 3/2 opposite. Almost 3/16 Pyth. comma + 12 +! + 82.94816 + 195.12805 + 307.30793 + 390.25609 + 502.43598 + 585.38414 + 697.56402 + 780.51219 + 892.69207 + 1004.87195 + 1087.82012 + 2/1 diff --git a/scales/meanbratm32.scl b/scales/meanbratm32.scl new file mode 100644 index 0000000..be3716a --- /dev/null +++ b/scales/meanbratm32.scl @@ -0,0 +1,17 @@ +! meanbratm32.scl +! +Beating of 6/5 = 1.5 times 3/2 same. Almost 4/15-comma + 12 +! + 73.53661 + 192.43903 + 311.34145 + 384.87806 + 503.78048 + 577.31709 + 696.21952 + 769.75612 + 888.65855 + 1007.56097 + 1081.09758 + 2/1 diff --git a/scales/meandia.scl b/scales/meandia.scl new file mode 100644 index 0000000..8ef1a2d --- /dev/null +++ b/scales/meandia.scl @@ -0,0 +1,25 @@ +! meandia.scl +Detempered Meantone[21]; contains 7-limit diamond +21 +! +21/20 +15/14 +9/8 +8/7 +7/6 +6/5 +5/4 +9/7 +4/3 +7/5 +10/7 +3/2 +14/9 +8/5 +5/3 +12/7 +7/4 +9/5 +15/8 +27/14 +2/1 diff --git a/scales/meaneb1071.scl b/scales/meaneb1071.scl new file mode 100644 index 0000000..3d49726 --- /dev/null +++ b/scales/meaneb1071.scl @@ -0,0 +1,17 @@ +! meaneb1071.scl +! +Equal beating 7/4 = 3/2 same. + 12 +! + 76.589 cents + 193.311 cents + 269.901 cents + 386.623 cents + 503.344 cents + 579.934 cents + 696.656 cents + 773.245 cents + 889.967 cents + 966.556 cents + 1083.278 cents + 2/1 diff --git a/scales/meaneb1071a.scl b/scales/meaneb1071a.scl new file mode 100644 index 0000000..5ea1305 --- /dev/null +++ b/scales/meaneb1071a.scl @@ -0,0 +1,17 @@ +! meaneb1071a.scl +! +Equal beating 7/4 = 3/2 opposite. + 12 +! + 79.635 cents + 194.181 cents + 273.816 cents + 388.363 cents + 502.909 cents + 582.544 cents + 697.091 cents + 776.725 cents + 891.272 cents + 970.906 cents + 1085.453 cents + 2/1 diff --git a/scales/meaneb341.scl b/scales/meaneb341.scl new file mode 100644 index 0000000..bda3262 --- /dev/null +++ b/scales/meaneb341.scl @@ -0,0 +1,17 @@ +! meaneb341.scl +! +Equal beating 6/5 = 5/4 same. Almost 4/15 Pyth. comma + 12 +! + 70.106 cents + 191.459 cents + 312.812 cents + 382.918 cents + 504.271 cents + 574.377 cents + 695.729 cents + 765.835 cents + 887.188 cents + 1008.541 cents + 1078.647 cents + 2/1 diff --git a/scales/meaneb371.scl b/scales/meaneb371.scl new file mode 100644 index 0000000..4d62e54 --- /dev/null +++ b/scales/meaneb371.scl @@ -0,0 +1,17 @@ +! meaneb371.scl +! +Equal beating 6/5 = 3/2 same. Practically 2/7-comma (Zarlino) + 12 +! + 70.66697 + 191.61914 + 312.57130 + 383.23827 + 504.19043 + 574.85741 + 695.80957 + 766.47654 + 887.42870 + 1008.38086 + 1079.04784 + 2/1 diff --git a/scales/meaneb371a.scl b/scales/meaneb371a.scl new file mode 100644 index 0000000..89a38b4 --- /dev/null +++ b/scales/meaneb371a.scl @@ -0,0 +1,17 @@ +! MEANEB371A.scl +! +Equal beating 6/5 = 3/2 opposite. Almost 2/5-comma + 12 +! + 53.512 cents + 186.718 cents + 319.924 cents + 373.435 cents + 506.641 cents + 560.153 cents + 693.359 cents + 826.565 cents + 880.076 cents + 1013.282 cents + 1066.794 cents + 2/1 diff --git a/scales/meaneb381.scl b/scales/meaneb381.scl new file mode 100644 index 0000000..e5a68a4 --- /dev/null +++ b/scales/meaneb381.scl @@ -0,0 +1,17 @@ +! meaneb381.scl +! +Equal beating 6/5 = 8/5 same. Almost 1/7-comma + 12 +! + 92.146 cents + 197.756 cents + 303.366 cents + 395.512 cents + 501.122 cents + 593.268 cents + 698.878 cents + 804.488 cents + 896.634 cents + 1002.244 cents + 1094.390 cents + 2/1 diff --git a/scales/meaneb451.scl b/scales/meaneb451.scl new file mode 100644 index 0000000..74396a9 --- /dev/null +++ b/scales/meaneb451.scl @@ -0,0 +1,17 @@ +! meaneb451.scl +! +Equal beating 5/4 = 4/3 same, 5/24 comma meantone. A.J. Ellis no. 6 + 12 +! + 82.32302 + 194.94943 + 307.57585 + 389.89887 + 502.52528 + 584.84830 + 697.47472 + 779.79774 + 892.42415 + 1005.05057 + 1087.37359 + 2/1 diff --git a/scales/meaneb471.scl b/scales/meaneb471.scl new file mode 100644 index 0000000..babea90 --- /dev/null +++ b/scales/meaneb471.scl @@ -0,0 +1,17 @@ +! meaneb471.scl +! +Equal beating 5/4 = 3/2 same. Almost 5/17-comma. Erv Wilson's 'metameantone' + 12 +! + 69.41306 + 191.26087 + 313.10869 + 382.52175 + 504.36956 + 573.78262 + 695.63044 + 765.04350 + 886.89131 + 1008.73913 + 1078.15219 + 2/1 diff --git a/scales/meaneb471a.scl b/scales/meaneb471a.scl new file mode 100644 index 0000000..dc2d393 --- /dev/null +++ b/scales/meaneb471a.scl @@ -0,0 +1,17 @@ +! meaneb471a.scl +! +Equal beating 5/4 = 3/2 opposite. Almost 1/5 Pyth. Gottfried Keller (1707) + 12 +! + 80.94883 + 194.55681 + 308.16479 + 389.11362 + 502.72160 + 583.67043 + 697.27840 + 778.22724 + 891.83521 + 1005.44319 + 1086.39202 + 2/1 diff --git a/scales/meaneb471b.scl b/scales/meaneb471b.scl new file mode 100644 index 0000000..1a08ca0 --- /dev/null +++ b/scales/meaneb471b.scl @@ -0,0 +1,17 @@ +! meaneb471b.scl +! +21/109-comma meantone with 9/7 major thirds, almost equal beating 5/4 and 3/2 + 12 +! + 69.30142 + 191.22898 + 313.15654 + 382.45795 + 504.38551 + 573.68693 + 695.61449 + 14/9 + 886.84346 + 1008.77102 + 1078.07244 + 2/1 diff --git a/scales/meaneb472.scl b/scales/meaneb472.scl new file mode 100644 index 0000000..4fd7331 --- /dev/null +++ b/scales/meaneb472.scl @@ -0,0 +1,17 @@ +! meaneb472.scl +! +Beating of 5/4 = twice 3/2 same. Almost 5/14-comma + 12 +! + 59.90903 + 188.54544 + 317.18184 + 377.09088 + 505.72728 + 565.63631 + 694.27272 + 754.18175 + 882.81816 + 1011.45456 + 1071.36360 + 2/1 diff --git a/scales/meaneb472_19.scl b/scales/meaneb472_19.scl new file mode 100644 index 0000000..4b7d74e --- /dev/null +++ b/scales/meaneb472_19.scl @@ -0,0 +1,24 @@ +! MEANEB472_19.scl +! +Beating of 5/4 = twice 3/2 same, 19 tones + 19 +! + 59.91100 + 128.63500 + 188.54600 + 248.45700 + 317.18100 + 377.09200 + 437.00300 + 505.72700 + 565.63800 + 634.36200 + 694.27300 + 754.18400 + 822.90800 + 882.81900 + 942.73000 + 1011.45400 + 1071.36500 + 1131.27600 + 2/1 diff --git a/scales/meaneb472a.scl b/scales/meaneb472a.scl new file mode 100644 index 0000000..f9a9cdd --- /dev/null +++ b/scales/meaneb472a.scl @@ -0,0 +1,17 @@ +! MEANEB472A.scl +! +Beating of 5/4 = twice 3/2 opposite. Almost 3/17-comma + 12 +! + 84.717 cents + 195.633 cents + 306.550 cents + 391.267 cents + 502.183 cents + 586.900 cents + 697.817 cents + 782.533 cents + 893.450 cents + 1004.367 cents + 1089.083 cents + 2/1 diff --git a/scales/meaneb591.scl b/scales/meaneb591.scl new file mode 100644 index 0000000..663ba24 --- /dev/null +++ b/scales/meaneb591.scl @@ -0,0 +1,17 @@ +! MEANEB591.scl +! +Equal beating 4/3 = 5/3 same. + 12 +! + 74.071 cents + 192.592 cents + 311.112 cents + 385.183 cents + 503.704 cents + 577.775 cents + 696.296 cents + 814.817 cents + 888.888 cents + 1007.408 cents + 1081.479 cents + 2/1 diff --git a/scales/meaneb732.scl b/scales/meaneb732.scl new file mode 100644 index 0000000..6a18b87 --- /dev/null +++ b/scales/meaneb732.scl @@ -0,0 +1,17 @@ +! meaneb732.scl +! +Beating of 3/2 = twice 6/5 same. Almost 4/13-comma + 12 +! + 67.35866 + 190.67390 + 313.98914 + 381.34781 + 504.66305 + 572.02171 + 695.33695 + 762.69561 + 886.01086 + 1009.32610 + 1076.68476 + 2/1 diff --git a/scales/meaneb732_19.scl b/scales/meaneb732_19.scl new file mode 100644 index 0000000..bb597a7 --- /dev/null +++ b/scales/meaneb732_19.scl @@ -0,0 +1,24 @@ +! MEANEB732_19.scl +! +Beating of 3/2 = twice 6/5 same, 19 tones + 19 +! + 67.35900 + 123.31500 + 190.67400 + 258.03300 + 313.98900 + 381.34800 + 448.70700 + 504.66300 + 572.02200 + 627.97800 + 695.33700 + 762.69600 + 818.65200 + 886.01100 + 953.37000 + 1009.32600 + 1076.68500 + 1144.04400 + 2/1 diff --git a/scales/meaneb732a.scl b/scales/meaneb732a.scl new file mode 100644 index 0000000..41e5d39 --- /dev/null +++ b/scales/meaneb732a.scl @@ -0,0 +1,17 @@ +! meaneb732a.scl +! +Beating of 3/2 = twice 6/5 opposite. Almost 1/3 Pyth. comma + 12 +! + 58.956 cents + 188.273 cents + 317.590 cents + 376.546 cents + 505.863 cents + 564.819 cents + 694.137 cents + 753.092 cents + 882.410 cents + 1011.727 cents + 1070.683 cents + 2/1 diff --git a/scales/meaneb742.scl b/scales/meaneb742.scl new file mode 100644 index 0000000..83324b1 --- /dev/null +++ b/scales/meaneb742.scl @@ -0,0 +1,17 @@ +! MEANEB742.scl +! +Beating of 3/2 = twice 5/4 same. + 12 +! + 73.001 cents + 192.286 cents + 311.571 cents + 384.572 cents + 503.857 cents + 576.858 cents + 696.143 cents + 769.144 cents + 888.429 cents + 1007.714 cents + 1080.715 cents + 2/1 diff --git a/scales/meaneb742a.scl b/scales/meaneb742a.scl new file mode 100644 index 0000000..1f099e5 --- /dev/null +++ b/scales/meaneb742a.scl @@ -0,0 +1,17 @@ +! MEANEB742A.scl +! +Beating of 3/2 = twice 5/4 opposite. Almost 3/13-comma, 3/14 Pyth. comma + 12 +! + 78.670 cents + 193.906 cents + 309.141 cents + 387.812 cents + 503.047 cents + 581.717 cents + 696.953 cents + 775.623 cents + 890.859 cents + 1006.094 cents + 1084.765 cents + 2/1 diff --git a/scales/meaneb781.scl b/scales/meaneb781.scl new file mode 100644 index 0000000..647d090 --- /dev/null +++ b/scales/meaneb781.scl @@ -0,0 +1,17 @@ +! meaneb781.scl +! +Equal beating 3/2 = 8/5 same. + 12 +! + 79.272 cents + 194.078 cents + 308.883 cents + 388.156 cents + 502.961 cents + 582.233 cents + 697.039 cents + 811.844 cents + 891.117 cents + 1005.922 cents + 1085.194 cents + 2/1 diff --git a/scales/meaneb891.scl b/scales/meaneb891.scl new file mode 100644 index 0000000..793b159 --- /dev/null +++ b/scales/meaneb891.scl @@ -0,0 +1,17 @@ +! meaneb891.scl +! +Equal beating 8/5 = 5/3 same. Almost 5/18-comma + 12 +! + 72.044 cents + 192.013 cents + 311.981 cents + 384.025 cents + 503.994 cents + 576.038 cents + 696.006 cents + 815.975 cents + 888.019 cents + 1007.987 cents + 1080.032 cents + 2/1 diff --git a/scales/meaneight.scl b/scales/meaneight.scl new file mode 100644 index 0000000..808b7aa --- /dev/null +++ b/scales/meaneight.scl @@ -0,0 +1,17 @@ +! meaneight.scl +! +1/8-comma meantone scale + 12 +! + 94.86700 + 198.53343 + 302.19986 + 397.06686 + 500.73329 + 595.60029 + 699.26671 + 405/256 + 897.80014 + 1001.46657 + 1096.33357 + 2/1 diff --git a/scales/meaneightp.scl b/scales/meaneightp.scl new file mode 100644 index 0000000..e606128 --- /dev/null +++ b/scales/meaneightp.scl @@ -0,0 +1,17 @@ +! meaneightp.scl +! +1/8 Pyth. comma meantone scale + 12 +! + 93.15750 + 198.04500 + 302.93250 + 396.09000 + 500.97750 + 594.13500 + 699.02250 + 128/81 + 897.06750 + 1001.95500 + 1095.11250 + 2/1 diff --git a/scales/meanfifth.scl b/scales/meanfifth.scl new file mode 100644 index 0000000..42f446d --- /dev/null +++ b/scales/meanfifth.scl @@ -0,0 +1,17 @@ +! meanfifth.scl +! +1/5-comma meantone scale (Verheijen) + 12 +! + 83.57620 + 195.30749 + 307.03877 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 781.22994 + 892.96123 + 1004.69251 + 15/8 + 2/1 diff --git a/scales/meanfifth2.scl b/scales/meanfifth2.scl new file mode 100644 index 0000000..96a2bd6 --- /dev/null +++ b/scales/meanfifth2.scl @@ -0,0 +1,17 @@ +! meanfifth2.scl +! +1/5-comma meantone by John Holden (1770) + 12 +! + 16/15 + 195.30749 + 307.03877 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 809.38503 + 892.96123 + 1004.69251 + 15/8 + 2/1 diff --git a/scales/meanfifth_19.scl b/scales/meanfifth_19.scl new file mode 100644 index 0000000..6780805 --- /dev/null +++ b/scales/meanfifth_19.scl @@ -0,0 +1,24 @@ +! meanfifth_19.scl +! +19 of 1/5-comma meantone scale + 19 +! + 83.576 cents + 16/15 + 195.307 cents + 278.884 cents + 307.039 cents + 390.615 cents + 474.191 cents + 502.346 cents + 585.922 cents + 614.078 cents + 697.654 cents + 781.230 cents + 809.385 cents + 892.961 cents + 225/128 + 1004.693 cents + 15/8 + 1171.845 cents + 2/1 diff --git a/scales/meanfifth_43.scl b/scales/meanfifth_43.scl new file mode 100644 index 0000000..7657618 --- /dev/null +++ b/scales/meanfifth_43.scl @@ -0,0 +1,48 @@ +! meanfifth_43.scl +! +Complete 1/5-comma meantone scale + 43 +! + 28.155 cents + 55.421 cents + 83.576 cents + 16/15 + 138.997 cents + 167.152 cents + 195.307 cents + 256/225 + 250.729 cents + 278.884 cents + 307.039 cents + 334.305 cents + 362.460 cents + 390.615 cents + 418.770 cents + 446.036 cents + 474.191 cents + 502.346 cents + 530.501 cents + 557.767 cents + 585.922 cents + 614.078 cents + 759375/524288 + 669.499 cents + 697.654 cents + 725.809 cents + 50625/32768 + 781.230 cents + 809.385 cents + 836.651 cents + 3375/2048 + 892.961 cents + 921.116 cents + 948.382 cents + 225/128 + 1004.693 cents + 1032.848 cents + 1060.114 cents + 15/8 + 1116.424 cents + 1143.690 cents + 1171.845 cents + 2/1 diff --git a/scales/meanfifth_french.scl b/scales/meanfifth_french.scl new file mode 100644 index 0000000..646e03d --- /dev/null +++ b/scales/meanfifth_french.scl @@ -0,0 +1,17 @@ +! meanfifth_french.scl +! +Homogeneous French temperament, 1/5-comma, C. di Veroli + 12 +! + 87.87746 + 195.30749 + 291.78746 + 390.61497 + 4/3 + 585.92246 + 697.65374 + 789.83246 + 892.96123 + 994.91623 + 15/8 + 2/1 diff --git a/scales/meanfiftheb.scl b/scales/meanfiftheb.scl new file mode 100644 index 0000000..91aa244 --- /dev/null +++ b/scales/meanfiftheb.scl @@ -0,0 +1,17 @@ +! meanfiftheb.scl +! +"1/5-comma" meantone with equal beating fifths + 12 +! + 91.34419 + 196.73569 + 303.37286 + 394.24347 + 501.26376 + 592.44267 + 697.65398 + 789.21948 + 894.85220 + 1001.71892 + 1092.77425 + 2/1 diff --git a/scales/meangolden.scl b/scales/meangolden.scl new file mode 100644 index 0000000..dc940bf --- /dev/null +++ b/scales/meangolden.scl @@ -0,0 +1,17 @@ +! meangolden.scl +! +Meantone scale with Blackwood's R = phi, and diat./chrom. semitone = phi, Kornerup. Almost 4/15-comma + 12 +! + 73.50132 + 192.42895 + 311.35658 + 384.85790 + 503.78553 + 577.28684 + 696.21447 + 769.71579 + 888.64342 + 1007.57105 + 1081.07237 + 2/1 diff --git a/scales/meangolden_top.scl b/scales/meangolden_top.scl new file mode 100644 index 0000000..e007100 --- /dev/null +++ b/scales/meangolden_top.scl @@ -0,0 +1,17 @@ +! meangolden_top.scl +! +Meantone scale with Blackwood's R = phi, TOP tuning + 12 +! + 73.61241 + 192.71978 + 311.82716 + 385.43957 + 504.54694 + 578.15935 + 697.26673 + 816.37410 + 889.98651 + 1009.09389 + 1082.70630 + 1201.81367 diff --git a/scales/meanhalf.scl b/scales/meanhalf.scl new file mode 100644 index 0000000..37402f0 --- /dev/null +++ b/scales/meanhalf.scl @@ -0,0 +1,17 @@ +! meanhalf.scl +! +1/2-comma meantone scale + 12 +! + 38.41299 + 10/9 + 326.39443 + 100/81 + 508.79814 + 1000/729 + 691.20186 + 10000/6561 + 873.60557 + 9/5 + 1056.00928 + 2/1 diff --git a/scales/meanhar2.scl b/scales/meanhar2.scl new file mode 100644 index 0000000..a055691 --- /dev/null +++ b/scales/meanhar2.scl @@ -0,0 +1,17 @@ +! meanhar2.scl +! +1/9-Harrison's comma meantone scale + 12 +! + 74.23293 + 192.63798 + 7/6 + 385.27596 + 503.68101 + 577.91394 + 696.31899 + 770.55192 + 888.95697 + 963.18990 + 1081.59495 + 2/1 diff --git a/scales/meanhar3.scl b/scales/meanhar3.scl new file mode 100644 index 0000000..23b742c --- /dev/null +++ b/scales/meanhar3.scl @@ -0,0 +1,17 @@ +! meanhar3.scl +! +1/11-Harrison's comma meantone scale + 12 +! + 81.40603 + 194.68744 + 276.09347 + 389.37488 + 21/16 + 584.06231 + 697.34372 + 778.74975 + 892.03116 + 973.43719 + 1086.71859 + 2/1 diff --git a/scales/meanharris.scl b/scales/meanharris.scl new file mode 100644 index 0000000..fa529fd --- /dev/null +++ b/scales/meanharris.scl @@ -0,0 +1,17 @@ +! meanharris.scl +! +1/10-Harrison's comma meantone scale + 12 +! + 78.17813 + 193.76518 + 271.94332 + 387.53036 + 503.11741 + 581.29554 + 696.88259 + 775.06073 + 890.64777 + 7/4 + 1084.41295 + 2/1 diff --git a/scales/meanhsev.scl b/scales/meanhsev.scl new file mode 100644 index 0000000..5be6b6f --- /dev/null +++ b/scales/meanhsev.scl @@ -0,0 +1,46 @@ +! meanhsev.scl +! +1/14-septimal schisma tempered meantone scale + 41 +! + 26.72065 + 62.14574 + 88.86640 + 115.58705 + 142.30770 + 177.73279 + 204.45344 + 8/7 + 266.59919 + 293.31984 + 320.04049 + 355.46558 + 382.18623 + 408.90688 + 435.62754 + 471.05263 + 497.77328 + 524.49393 + 559.91902 + 586.63967 + 613.36033 + 640.08098 + 675.50607 + 702.22672 + 728.94737 + 764.37246 + 791.09312 + 817.81377 + 844.53442 + 879.95951 + 906.68016 + 933.40081 + 7/4 + 995.54656 + 1022.26721 + 1057.69230 + 1084.41295 + 1111.13360 + 1137.85426 + 1173.27935 + 2/1 diff --git a/scales/meanhskl.scl b/scales/meanhskl.scl new file mode 100644 index 0000000..da24deb --- /dev/null +++ b/scales/meanhskl.scl @@ -0,0 +1,17 @@ +! meanhskl.scl +! +Half septimal kleisma meantone + 12 +! + 86.69468 + 28/25 + 305.70228 + 784/625 + 501.90076 + 21952/15625 + 698.09924 + 614656/390625 + 894.29772 + 25/14 + 1090.49620 + 2/1 diff --git a/scales/meanlst357_19.scl b/scales/meanlst357_19.scl new file mode 100644 index 0000000..2deae50 --- /dev/null +++ b/scales/meanlst357_19.scl @@ -0,0 +1,24 @@ +! meanlst357_19.scl +! +19 of mean-tone scale, least square error in 3/2, 5/4 and 7/4 + 19 +! + 78.190 cents + 115.578 cents + 193.769 cents + 271.959 cents + 309.347 cents + 387.537 cents + 465.728 cents + 503.116 cents + 581.306 cents + 618.694 cents + 696.884 cents + 775.075 cents + 812.463 cents + 890.653 cents + 968.844 cents + 1006.231 cents + 1084.422 cents + 1162.612 cents + 2/1 diff --git a/scales/meanmalc.scl b/scales/meanmalc.scl new file mode 100644 index 0000000..bb56140 --- /dev/null +++ b/scales/meanmalc.scl @@ -0,0 +1,17 @@ +! meanmalc.scl +! +Meantone approximation to Malcolm's Monochord, 3/16 Pyth. comma + 12 +! + 112.32050 + 195.07180 + 307.39230 + 390.14360 + 502.46410 + 585.21540 + 697.53590 + 809.85640 + 892.60770 + 1004.92820 + 1087.67950 + 2/1 diff --git a/scales/meannine.scl b/scales/meannine.scl new file mode 100644 index 0000000..a83fc23 --- /dev/null +++ b/scales/meannine.scl @@ -0,0 +1,17 @@ +! meannine.scl +! +1/9-comma meantone scale, Jean-Baptiste Romieu + 12 +! + 96.95789 + 199.13083 + 301.30376 + 398.26165 + 500.43459 + 597.39248 + 699.56541 + 796.52331 + 898.69624 + 1000.86917 + 1097.82707 + 2/1 diff --git a/scales/meannkleis.scl b/scales/meannkleis.scl new file mode 100644 index 0000000..53f93a7 --- /dev/null +++ b/scales/meannkleis.scl @@ -0,0 +1,17 @@ +! meannkleis.scl +! +1/5 kleisma tempered meantone scale + 12 +! + 102.33482 + 200.66698 + 303.00191 + 401.33381 + 503.66900 + 602.00056 + 700.33355 + 802.66836 + 901.00064 + 1003.33545 + 59049/31250 + 2/1 diff --git a/scales/meanpi.scl b/scales/meanpi.scl new file mode 100644 index 0000000..d260b23 --- /dev/null +++ b/scales/meanpi.scl @@ -0,0 +1,17 @@ +! meanpi.scl +! +Pi-based meantone with Harrison's major third by Erv Wilson + 12 +! + 88.733 cents + 204.507 cents + 293.240 cents + 381.972 cents + 497.747 cents + 586.479 cents + 702.254 cents + 790.986 cents + 879.718 cents + 995.493 cents + 1084.225 cents + 2/1 diff --git a/scales/meanpi2.scl b/scales/meanpi2.scl new file mode 100644 index 0000000..b5a4a4c --- /dev/null +++ b/scales/meanpi2.scl @@ -0,0 +1,17 @@ +! meanpi2.scl +! +Pi-based meantone by Erv Wilson analogous to 22-tET + 12 +! + 163.756 cents + 218.216 cents + 381.972 cents + 436.432 cents + 600.188 cents + 654.648 cents + 709.108 cents + 872.864 cents + 927.324 cents + 1091.080 cents + 1145.540 cents + 2/1 diff --git a/scales/meanpkleis.scl b/scales/meanpkleis.scl new file mode 100644 index 0000000..0dd8b7f --- /dev/null +++ b/scales/meanpkleis.scl @@ -0,0 +1,17 @@ +! meanpkleis.scl +! +1/5 kleisma positive temperament + 12 +! + 16384/15625 + 207.15291 + 289.27063 + 371.38835 + 496.42354 + 578.54126 + 703.57646 + 785.69417 + 910.72937 + 992.84709 + 1074.96480 + 2/1 diff --git a/scales/meanquar.scl b/scales/meanquar.scl new file mode 100644 index 0000000..38ce2fa --- /dev/null +++ b/scales/meanquar.scl @@ -0,0 +1,17 @@ +! meanquar.scl +! +1/4-comma meantone scale. Pietro Aaron's temp. (1523). 6/5 beats twice 3/2 + 12 +! + 76.04900 + 193.15686 + 310.26471 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meanquar_14.scl b/scales/meanquar_14.scl new file mode 100644 index 0000000..cf3c006 --- /dev/null +++ b/scales/meanquar_14.scl @@ -0,0 +1,19 @@ +! meanquar_14.scl +! +1/4-comma meantone scale with split D#/Eb and G#/Ab, Otto Gibelius (1666) + 14 +! + 76.04900 + 193.15686 + 269.20586 + 310.26471 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 8/5 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meanquar_15.scl b/scales/meanquar_15.scl new file mode 100644 index 0000000..5fe1e40 --- /dev/null +++ b/scales/meanquar_15.scl @@ -0,0 +1,20 @@ +! meanquar_15.scl +! +1/4-comma meantone scale with split C#/Db, D#/Eb and G#/Ab + 15 +! + 76.04900 + 117.10786 + 193.15686 + 269.20586 + 310.26471 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 8/5 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meanquar_16.scl b/scales/meanquar_16.scl new file mode 100644 index 0000000..33ce493 --- /dev/null +++ b/scales/meanquar_16.scl @@ -0,0 +1,21 @@ +! meanquar_16.scl +! +1/4-comma meantone scale with split C#/Db, D#/Eb, G#/Ab and A#/Bb + 16 +! + 76.04900 + 117.10900 + 193.15700 + 269.20600 + 310.26500 + 5/4 + 503.42200 + 579.47100 + 696.57800 + 25/16 + 8/5 + 889.73500 + 965.78400 + 1006.84300 + 1082.89200 + 2/1 diff --git a/scales/meanquar_17.scl b/scales/meanquar_17.scl new file mode 100644 index 0000000..093ef35 --- /dev/null +++ b/scales/meanquar_17.scl @@ -0,0 +1,22 @@ +! meanquar_17.scl +! +1/4-comma meantone scale with split C#/Db, D#/Eb, F#/Gb, G#/Ab and A#/Bb + 17 +! + 76.04900 + 117.10786 + 193.15686 + 269.20585 + 310.26471 + 5/4 + 503.42157 + 579.47057 + 620.52943 + 696.57843 + 25/16 + 8/5 + 889.73528 + 965.78428 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meanquar_19.scl b/scales/meanquar_19.scl new file mode 100644 index 0000000..32596f2 --- /dev/null +++ b/scales/meanquar_19.scl @@ -0,0 +1,24 @@ +! meanquar_19.scl +! +19 of 1/4-comma meantone scale + 19 +! + 76.04900 + 117.10786 + 193.15686 + 269.20586 + 310.26471 + 5/4 + 462.36271 + 503.42157 + 579.47057 + 620.52943 + 696.57843 + 25/16 + 8/5 + 889.73529 + 965.78428 + 1006.84314 + 1082.89214 + 125/64 + 2/1 diff --git a/scales/meanquar_27.scl b/scales/meanquar_27.scl new file mode 100644 index 0000000..558d09c --- /dev/null +++ b/scales/meanquar_27.scl @@ -0,0 +1,32 @@ +! meanquar_27.scl +! +27 of 1/4-comma meantone scale + 27 +! + 76.04900 + 117.10786 + 152.09800 + 193.15686 + 234.21572 + 269.20586 + 310.26471 + 5/4 + 32/25 + 462.36271 + 503.42157 + 579.47057 + 620.52943 + 655.51957 + 696.57843 + 737.63729 + 25/16 + 8/5 + 848.67643 + 889.73529 + 930.79414 + 965.78428 + 1006.84314 + 1082.89214 + 1123.95100 + 125/64 + 2/1 diff --git a/scales/meanquar_31.scl b/scales/meanquar_31.scl new file mode 100644 index 0000000..613ed64 --- /dev/null +++ b/scales/meanquar_31.scl @@ -0,0 +1,36 @@ +! meanquar_31.scl +! +31 of 1/4-comma meantone scale + 31 +! + 128/125 + 76.04900 + 117.10786 + 152.09800 + 193.15686 + 234.21572 + 269.20586 + 310.26471 + 351.32357 + 5/4 + 32/25 + 462.36271 + 503.42157 + 544.48043 + 579.47057 + 620.52943 + 655.51957 + 696.57843 + 737.63729 + 25/16 + 8/5 + 848.67643 + 889.73529 + 930.79414 + 965.78428 + 1006.84314 + 1047.90200 + 1082.89214 + 1123.95100 + 125/64 + 2/1 diff --git a/scales/meanquareb.scl b/scales/meanquareb.scl new file mode 100644 index 0000000..7463b30 --- /dev/null +++ b/scales/meanquareb.scl @@ -0,0 +1,17 @@ +! meanquareb.scl +! +Variation on 1/4-comma meantone with equal beating fifths + 12 +! + 85.72030 + 194.93958 + 305.67193 + 390.83667 + 502.06657 + 587.59282 + 696.57833 + 782.55876 + 892.09129 + 1003.12163 + 1088.50291 + 2/1 diff --git a/scales/meanquarm23.scl b/scales/meanquarm23.scl new file mode 100644 index 0000000..80f9981 --- /dev/null +++ b/scales/meanquarm23.scl @@ -0,0 +1,17 @@ +! meanquarm23.scl +! +1/4-comma meantone approximation with minimal order 23 beatings + 12 +! + 23/22 + 19/17 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 25/16 + 5/3 + 34/19 + 43/23 + 2/1 diff --git a/scales/meanquarn.scl b/scales/meanquarn.scl new file mode 100644 index 0000000..7ce37d2 --- /dev/null +++ b/scales/meanquarn.scl @@ -0,0 +1,49 @@ +! meanquarn.scl +! +Non-octave quarter-comma meantone, fifth period + 44 +! + 76.04900 + 152.09800 + 193.15686 + 269.20586 + 625/512 + 5/4 + 462.36271 + 538.41171 + 579.47057 + 655.51957 + 696.57843 + 25/16 + 848.67643 + 889.73529 + 965.78428 + 1041.83328 + 1082.89214 + 125/64 + 1234.99014 + 1276.04900 + 1352.09800 + 1393.15686 + 1469.20586 + 625/256 + 5/2 + 1662.36271 + 1738.41171 + 1779.47057 + 1855.51957 + 3125/1024 + 25/8 + 2048.67643 + 2089.73529 + 2165.78428 + 2241.83328 + 2282.89214 + 125/32 + 2434.99014 + 2476.04900 + 2552.09800 + 2628.14700 + 2669.20586 + 625/128 + 5/1 diff --git a/scales/meanquarr.scl b/scales/meanquarr.scl new file mode 100644 index 0000000..10e41ce --- /dev/null +++ b/scales/meanquarr.scl @@ -0,0 +1,17 @@ +! meanquarr.scl +! +Rational approximation to 1/4-comma meantone, Kenneth Scholz, MTO 4.4, 1998 + 12 +! + 675/646 + 180/161 + 323/270 + 5/4 + 107/80 + 225/161 + 160/107 + 25/16 + 540/323 + 161/90 + 200/107 + 2/1 diff --git a/scales/meanquarw2.scl b/scales/meanquarw2.scl new file mode 100644 index 0000000..80645fa --- /dev/null +++ b/scales/meanquarw2.scl @@ -0,0 +1,17 @@ +! meanquarw2.scl +! +1/4-comma meantone with 1/2 wolf, used in England in 19th c. (Ellis) + 12 +! + 76.04900 + 193.15686 + 289.73529 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meanquarw3.scl b/scales/meanquarw3.scl new file mode 100644 index 0000000..17dbca6 --- /dev/null +++ b/scales/meanquarw3.scl @@ -0,0 +1,17 @@ +! meanquarw3.scl +! +1/4-comma meantone with 1/3 wolf, C. di Veroli & S. Leidemann (1985) + 12 +! + 76.04900 + 193.15686 + 296.57843 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 786.31371 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/meansabat.scl b/scales/meansabat.scl new file mode 100644 index 0000000..bdd793a --- /dev/null +++ b/scales/meansabat.scl @@ -0,0 +1,17 @@ +! meansabat.scl +! +1/9-schisma meantone scale of Eduard Sbat-Garibaldi + 12 +! + 112.16545 + 203.47584 + 6/5 + 406.95168 + 498.26208 + 610.42752 + 701.73792 + 813.90337 + 905.21376 + 1017.37921 + 1108.68960 + 2/1 diff --git a/scales/meansabat_53.scl b/scales/meansabat_53.scl new file mode 100644 index 0000000..4e618e3 --- /dev/null +++ b/scales/meansabat_53.scl @@ -0,0 +1,58 @@ +! meansabat_53.scl +! +53-tone 1/9-schisma meantone scale + 53 +! + 20.85505 + 41.71010 + 648/625 + 91.31040 + 112.16545 + 133.02049 + 153.87554 + 182.62079 + 203.47584 + 224.33089 + 245.18594 + 266.04099 + 294.78624 + 6/5 + 336.49634 + 357.35139 + 386.09663 + 406.95168 + 427.80673 + 448.66178 + 469.51683 + 498.26208 + 519.11713 + 539.97218 + 560.82723 + 589.57248 + 610.42752 + 36/25 + 652.13762 + 672.99267 + 701.73792 + 722.59297 + 743.44802 + 764.30307 + 793.04832 + 813.90337 + 834.75842 + 855.61346 + 5/3 + 905.21376 + 926.06881 + 216/125 + 967.77891 + 996.52416 + 1017.37921 + 1038.23426 + 1059.08931 + 1087.83455 + 1108.68960 + 1129.54465 + 1150.39970 + 1171.25475 + 2/1 diff --git a/scales/meanschis.scl b/scales/meanschis.scl new file mode 100644 index 0000000..eb4cb65 --- /dev/null +++ b/scales/meanschis.scl @@ -0,0 +1,17 @@ +! meanschis.scl +! +1/8-schisma temperament, Helmholtz + 12 +! + 91.44607 + 203.42157 + 294.86764 + 5/4 + 498.28921 + 589.73529 + 701.71079 + 793.15686 + 884.60293 + 996.57843 + 1088.02450 + 2/1 diff --git a/scales/meanschis7.scl b/scales/meanschis7.scl new file mode 100644 index 0000000..1477c34 --- /dev/null +++ b/scales/meanschis7.scl @@ -0,0 +1,17 @@ +! meanschis7.scl +! +1/7-schisma linear temperament + 12 +! + 91.62051 + 203.35180 + 294.97231 + 386.59282 + 498.32410 + 589.94461 + 701.67590 + 793.29641 + 884.91692 + 996.64820 + 15/8 + 2/1 diff --git a/scales/meanschis_17.scl b/scales/meanschis_17.scl new file mode 100644 index 0000000..fe462e4 --- /dev/null +++ b/scales/meanschis_17.scl @@ -0,0 +1,22 @@ +! meanschis_17.scl +! +17-tone 1/8-schisma linear temperament + 17 +! + 91.44607 + 182.89214 + 203.42157 + 294.86764 + 5/4 + 406.84314 + 498.28921 + 589.73529 + 610.26471 + 701.71079 + 793.15686 + 884.60293 + 905.13236 + 996.57843 + 1088.02450 + 1108.55393 + 2/1 diff --git a/scales/meansept.scl b/scales/meansept.scl new file mode 100644 index 0000000..55025d0 --- /dev/null +++ b/scales/meansept.scl @@ -0,0 +1,17 @@ +! meansept.scl +! +Meantone scale with septimal diminished fifth + 12 +! + 79.59756 + 194.17073 + 308.74390 + 388.34146 + 502.91463 + 7/5 + 697.08537 + 776.68292 + 891.25610 + 1005.82927 + 1085.42683 + 2/1 diff --git a/scales/meansept2.scl b/scales/meansept2.scl new file mode 100644 index 0000000..53be9a8 --- /dev/null +++ b/scales/meansept2.scl @@ -0,0 +1,24 @@ +! meansept2.scl +! +Meantone scale with septimal neutral second + 19 +! + 77.570 cents + 35/32 + 193.591 cents + 271.161 cents + 348.730 cents + 387.183 cents + 464.752 cents + 503.204 cents + 580.774 cents + 658.344 cents + 696.796 cents + 774.365 cents + 851.935 cents + 890.387 cents + 967.957 cents + 1045.526 cents + 1083.978 cents + 1161.548 cents + 2/1 diff --git a/scales/meansept3.scl b/scales/meansept3.scl new file mode 100644 index 0000000..1236e7f --- /dev/null +++ b/scales/meansept3.scl @@ -0,0 +1,46 @@ +! meansept3.scl +! +Pythagorean scale with septimal minor third + 41 +! + 35.95000 + 62.45300 + 88.95700 + 124.90700 + 151.41000 + 177.91400 + 213.86400 + 240.36700 + 7/6 + 293.37400 + 329.32400 + 355.82800 + 382.33100 + 418.28100 + 444.78500 + 471.28800 + 497.79100 + 49/36 + 560.24500 + 586.74800 + 622.69800 + 649.20200 + 675.70500 + 711.65500 + 738.15900 + 764.66200 + 791.16600 + 827.11600 + 853.61900 + 880.12200 + 916.07300 + 942.57600 + 969.07900 + 995.58300 + 1031.53300 + 1058.03600 + 1084.54000 + 1120.49000 + 1146.99300 + 1173.49700 + 2/1 diff --git a/scales/meansept4.scl b/scales/meansept4.scl new file mode 100644 index 0000000..041855f --- /dev/null +++ b/scales/meansept4.scl @@ -0,0 +1,46 @@ +! meansept4.scl +! +Pythagorean scale with septimal narrow fourth + 41 +! + 34.82000 + 61.79100 + 88.76200 + 123.58200 + 150.55300 + 177.52400 + 212.34400 + 239.31500 + 266.28600 + 293.25700 + 328.07700 + 355.04800 + 382.01900 + 416.83900 + 443.81000 + 21/16 + 497.75200 + 532.57200 + 559.54300 + 586.51400 + 621.33400 + 648.30500 + 675.27700 + 710.09600 + 737.06800 + 764.03900 + 791.01000 + 825.83000 + 852.80100 + 879.77200 + 914.59200 + 441/256 + 968.53400 + 995.50500 + 1030.32500 + 1057.29600 + 1084.26700 + 1119.08700 + 1146.05800 + 1173.02900 + 2/1 diff --git a/scales/meansev.scl b/scales/meansev.scl new file mode 100644 index 0000000..082faa9 --- /dev/null +++ b/scales/meansev.scl @@ -0,0 +1,17 @@ +! meansev.scl +! +1/7-comma meantone scale, Jean-Baptiste Romieu (1755) + 12 +! + 135/128 + 197.76535 + 303.35198 + 395.53070 + 501.11733 + 593.29604 + 698.88267 + 791.06139 + 896.64802 + 1002.23465 + 1094.41337 + 2/1 diff --git a/scales/meansev2.scl b/scales/meansev2.scl new file mode 100644 index 0000000..86b477b --- /dev/null +++ b/scales/meansev2.scl @@ -0,0 +1,17 @@ +! meansev2.scl +! +Meantone scale with 1/7-comma stretched octave (stretched meansept.scl) + 12 +! + 79.88941 + 194.69302 + 309.49663 + 389.38604 + 504.18965 + 584.07906 + 698.88267 + 778.77208 + 893.57569 + 1008.37931 + 1088.26871 + 1203.07233 diff --git a/scales/meansev_19.scl b/scales/meansev_19.scl new file mode 100644 index 0000000..2499672 --- /dev/null +++ b/scales/meansev_19.scl @@ -0,0 +1,24 @@ +! meansev_19.scl +! +19 of 1/7-comma meantone scale + 19 +! + 135/128 + 105.58700 + 197.76500 + 289.94400 + 303.35200 + 395.53100 + 487.70900 + 501.11700 + 593.29600 + 606.70400 + 698.88300 + 791.06100 + 804.46900 + 896.64800 + 988.82700 + 1002.23500 + 1094.41300 + 256/135 + 2/1 diff --git a/scales/meanseveb.scl b/scales/meanseveb.scl new file mode 100644 index 0000000..07a0262 --- /dev/null +++ b/scales/meanseveb.scl @@ -0,0 +1,17 @@ +! meanseveb.scl +! +"1/7-comma" meantone with equal beating fifths + 12 +! + 97.75182 + 198.78695 + 300.74053 + 398.13037 + 500.34544 + 597.97104 + 698.88299 + 796.80360 + 898.00345 + 1000.11376 + 1097.64492 + 2/1 diff --git a/scales/meansixth.scl b/scales/meansixth.scl new file mode 100644 index 0000000..d37514a --- /dev/null +++ b/scales/meansixth.scl @@ -0,0 +1,17 @@ +! meansixth.scl +! +1/6-comma meantone scale (tritonic temperament of Salinas) + 12 +! + 88.59433 + 196.74124 + 304.88814 + 393.48248 + 501.62938 + 45/32 + 698.37062 + 786.96495 + 895.11186 + 1003.25876 + 1091.85310 + 2/1 diff --git a/scales/meansixth_19.scl b/scales/meansixth_19.scl new file mode 100644 index 0000000..73d6e8e --- /dev/null +++ b/scales/meansixth_19.scl @@ -0,0 +1,24 @@ +! meansixth_19.scl +! +19 of 1/6-comma meantone scale + 19 +! + 88.59400 + 108.14700 + 196.74100 + 285.33600 + 304.88800 + 393.48200 + 482.07700 + 501.62900 + 45/32 + 64/45 + 698.37100 + 786.96500 + 806.51800 + 895.11200 + 983.70600 + 1003.25900 + 1091.85300 + 2025/1024 + 2/1 diff --git a/scales/meansixtheb.scl b/scales/meansixtheb.scl new file mode 100644 index 0000000..b6064c5 --- /dev/null +++ b/scales/meansixtheb.scl @@ -0,0 +1,17 @@ +! meansixtheb.scl +! +"1/6-comma" meantone with equal beating fifths + 12 +! + 95.08447 + 197.93243 + 301.83798 + 396.51166 + 500.72819 + 595.66937 + 698.37094 + 793.64713 + 896.69094 + 1000.78285 + 1095.61685 + 2/1 diff --git a/scales/meansixthm.scl b/scales/meansixthm.scl new file mode 100644 index 0000000..1f578fd --- /dev/null +++ b/scales/meansixthm.scl @@ -0,0 +1,17 @@ +! meansixthm.scl +! +modified 1/6-comma meantone scale, wolf spread over 2 fifths + 12 +! + 88.59433 + 196.74124 + 304.88814 + 393.48248 + 501.62938 + 45/32 + 698.37062 + 796.74124 + 895.11186 + 1003.25876 + 1091.85310 + 2/1 diff --git a/scales/meansixthm2.scl b/scales/meansixthm2.scl new file mode 100644 index 0000000..7330469 --- /dev/null +++ b/scales/meansixthm2.scl @@ -0,0 +1,17 @@ +! meanSIXTHM2.scl +! +modified 1/6-comma meantone scale, wolf spread over 4 fifths + 12 +! + 93.48272 + 196.74124 + 295.11186 + 393.48248 + 501.62938 + 590.22372 + 698.37062 + 796.74172 + 895.11186 + 998.37062 + 1091.85310 + 2/1 diff --git a/scales/meansixthpm.scl b/scales/meansixthpm.scl new file mode 100644 index 0000000..0a9f835 --- /dev/null +++ b/scales/meansixthpm.scl @@ -0,0 +1,17 @@ +! meansixthpm.scl +! +modified 1/6P-comma temperament, French 18th century + 12 +! + 86.31499 + 196.09000 + 292.18000 + 392.18000 + 4/3 + 1024/729 + 698.04500 + 788.26999 + 894.13500 + 16/9 + 1090.22500 + 2/1 diff --git a/scales/meansixthso.scl b/scales/meansixthso.scl new file mode 100644 index 0000000..19759a9 --- /dev/null +++ b/scales/meansixthso.scl @@ -0,0 +1,17 @@ +! meansixthso.scl +! +1/6-comma meantone scale with 1/6-comma stretched oct, Dave Keenan TL 13-12-99 + 12 +! + 74.25681 + 193.15686 + 312.05691 + 5/4 + 505.21376 + 579.47057 + 698.37062 + 25/16 + 891.52748 + 1010.42752 + 1084.68433 + 1203.58438 diff --git a/scales/meanstr.scl b/scales/meanstr.scl new file mode 100644 index 0000000..ae41add --- /dev/null +++ b/scales/meanstr.scl @@ -0,0 +1,17 @@ +! meanstr.scl +! +Meantone with 1/9-comma stretched octave, Petr Parizek (2006) + 12 +! + 25/24 + 191.96206 + 313.25170 + 383.92413 + 505.21376 + 575.88619 + 697.17583 + 767.84825 + 889.13789 + 1010.42752 + 1081.09995 + 1202.38959 diff --git a/scales/meanten.scl b/scales/meanten.scl new file mode 100644 index 0000000..657ff99 --- /dev/null +++ b/scales/meanten.scl @@ -0,0 +1,17 @@ +! meanten.scl +! +1/10-comma meantone scale + 12 +! + 98.63060 + 199.60874 + 300.58688 + 399.21749 + 500.19563 + 598.82623 + 699.80437 + 798.43498 + 899.41312 + 1000.39126 + 1099.02186 + 2/1 diff --git a/scales/meanthird.scl b/scales/meanthird.scl new file mode 100644 index 0000000..ad09bbe --- /dev/null +++ b/scales/meanthird.scl @@ -0,0 +1,17 @@ +! meanthird.scl +! +1/3-comma meantone scale (Salinas) + 12 +! + 63.50366 + 189.57248 + 6/5 + 379.14495 + 505.21376 + 25/18 + 694.78624 + 758.28990 + 5/3 + 1010.42752 + 1073.93119 + 2/1 diff --git a/scales/meanthird_19.scl b/scales/meanthird_19.scl new file mode 100644 index 0000000..8799e04 --- /dev/null +++ b/scales/meanthird_19.scl @@ -0,0 +1,24 @@ +! meanthird_19.scl +! +Complete 1/3-comma meantone scale + 19 +! + 63.50366 + 126.06881 + 189.57248 + 125/108 + 6/5 + 379.14495 + 442.64861 + 505.21376 + 25/18 + 36/25 + 694.78624 + 758.28990 + 820.85505 + 5/3 + 947.86238 + 1010.42752 + 1073.93119 + 1136.49634 + 2/1 diff --git a/scales/meanthirdeb.scl b/scales/meanthirdeb.scl new file mode 100644 index 0000000..d14bde5 --- /dev/null +++ b/scales/meanthirdeb.scl @@ -0,0 +1,17 @@ +! meanthirdeb.scl +! +"1/3-comma" meantone with equal beating fifths + 12 +! + 76.31802 + 191.94563 + 309.49223 + 385.15077 + 503.40211 + 579.48945 + 694.78630 + 771.41409 + 887.48566 + 1005.45409 + 1081.36933 + 2/1 diff --git a/scales/meanthirdp.scl b/scales/meanthirdp.scl new file mode 100644 index 0000000..7093f10 --- /dev/null +++ b/scales/meanthirdp.scl @@ -0,0 +1,17 @@ +! meanthirdp.scl +! +1/3-P comma meantone scale + 12 +! + 58.94498 + 188.26999 + 19683/16384 + 376.53999 + 505.86500 + 536870912/387420489 + 694.13500 + 753.07998 + 32768/19683 + 1011.73001 + 1070.67499 + 2/1 diff --git a/scales/meanvar1.scl b/scales/meanvar1.scl new file mode 100644 index 0000000..0b709eb --- /dev/null +++ b/scales/meanvar1.scl @@ -0,0 +1,17 @@ +! meanvar1.scl +! +Variable meantone 1: C-G-D-A-E 1/4, others 1/6 + 12 +! + 81.42557 + 193.15686 + 304.88814 + 5/4 + 501.62938 + 583.05495 + 696.57843 + 779.79619 + 889.73529 + 1003.25876 + 1084.68433 + 2/1 diff --git a/scales/meanvar2.scl b/scales/meanvar2.scl new file mode 100644 index 0000000..0beba3e --- /dev/null +++ b/scales/meanvar2.scl @@ -0,0 +1,17 @@ +! meanvar2.scl +! +Variable meantone 2: C..E 1/4, 1/5-1/6-1/7-1/8 outward both directions + 12 +! + 81.22075 + 193.15686 + 305.09296 + 5/4 + 502.34626 + 582.33808 + 696.57843 + 780.48746 + 889.73529 + 1003.97564 + 1083.96746 + 2/1 diff --git a/scales/meanvar3.scl b/scales/meanvar3.scl new file mode 100644 index 0000000..cb4fe2b --- /dev/null +++ b/scales/meanvar3.scl @@ -0,0 +1,17 @@ +! meanvar3.scl +! +Variable meantone 3: C..E 1/4, 1/6 next, then Pyth. + 12 +! + 88.59433 + 193.15686 + 297.71938 + 5/4 + 501.62938 + 586.63933 + 696.57843 + 790.54934 + 889.73529 + 999.67438 + 1084.68433 + 2/1 diff --git a/scales/meanvar4.scl b/scales/meanvar4.scl new file mode 100644 index 0000000..7d6b8a2 --- /dev/null +++ b/scales/meanvar4.scl @@ -0,0 +1,17 @@ +! meanvar4.scl +! +Variable meantone 4: naturals 1/4-comma, accidentals Pyth. + 12 +! + 86.80214 + 193.15686 + 299.51157 + 5/4 + 503.42157 + 584.84714 + 696.57843 + 788.75714 + 889.73529 + 1001.46657 + 1082.89214 + 2/1 diff --git a/scales/meister-p12.scl b/scales/meister-p12.scl new file mode 100644 index 0000000..b7861d1 --- /dev/null +++ b/scales/meister-p12.scl @@ -0,0 +1,17 @@ +! meister-p12.scl +! +Temperament with 1/6 and 1/12 P comma, W.Th. Meister, p. 117 + 12 +! + 256/243 + 196.09000 + 301.95500 + 392.18000 + 501.95500 + 590.22500 + 698.04500 + 790.22500 + 894.13500 + 1001.95500 + 1090.22500 + 2/1 diff --git a/scales/meister-s4.scl b/scales/meister-s4.scl new file mode 100644 index 0000000..83be64e --- /dev/null +++ b/scales/meister-s4.scl @@ -0,0 +1,17 @@ +! meister-s4.scl +! +Temperament with 1/4 comma, W.Th. Meister, p. 120 + 12 +! + 85.82528 + 193.15686 + 32/27 + 5/4 + 4/3 + 579.47057 + 696.57843 + 128/81 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/meister-s5.scl b/scales/meister-s5.scl new file mode 100644 index 0000000..3424926 --- /dev/null +++ b/scales/meister-s5.scl @@ -0,0 +1,17 @@ +! meister-s5.scl +! +Temperament with 1/5 comma, W.Th. Meister, p. 121 + 12 +! + 94.13436 + 195.30749 + 296.48061 + 390.61497 + 498.82687 + 592.96123 + 697.65374 + 795.30749 + 892.96123 + 997.65374 + 1091.78810 + 2/1 diff --git a/scales/meister-synt.scl b/scales/meister-synt.scl new file mode 100644 index 0000000..a153331 --- /dev/null +++ b/scales/meister-synt.scl @@ -0,0 +1,17 @@ +! meister-synt.scl +! +Halved syntonic comma's, Wolfgang Theodor Meister, Die Orgelstimmung in Sddeutschland, 1991, p. 117 + 12 +! + 25/24 + 193.15686 + 6/5 + 5/4 + 4/3 + 579.47057 + 3/2 + 25/16 + 5/3 + 1006.84314 + 15/8 + 2/1 diff --git a/scales/meister-t.scl b/scales/meister-t.scl new file mode 100644 index 0000000..1831043 --- /dev/null +++ b/scales/meister-t.scl @@ -0,0 +1,17 @@ +! meister-t.scl +! +A temperament, W.Th. Meister, p. 35-36 + 12 +! + 16/15 + 198.53343 + 6/5 + 391.69029 + 4/3 + 64/45 + 3/2 + 8/5 + 895.11186 + 16/9 + 15/8 + 2/1 diff --git a/scales/melog.scl b/scales/melog.scl new file mode 100644 index 0000000..ce9c75c --- /dev/null +++ b/scales/melog.scl @@ -0,0 +1,10 @@ +! melog.scl +! +pelog melog, Sunda + 5 +! + 420.00000 + 540.00000 + 690.00000 + 1080.00000 + 2/1 diff --git a/scales/mercadier.scl b/scales/mercadier.scl new file mode 100644 index 0000000..9b11c65 --- /dev/null +++ b/scales/mercadier.scl @@ -0,0 +1,17 @@ +! mercadier.scl +! +Mercadier's well-temperament (1777), 1/12 and 1/6 Pyth. comma + 12 +! + 94.13500 + 196.09000 + 296.09000 + 392.18000 + 500.00000 + 594.13500 + 698.04500 + 794.13500 + 894.13500 + 998.04500 + 1094.13500 + 2/1 diff --git a/scales/mercadier2.scl b/scales/mercadier2.scl new file mode 100644 index 0000000..b8f5abd --- /dev/null +++ b/scales/mercadier2.scl @@ -0,0 +1,17 @@ +! mercadier2.scl +! +Mercadier de Belestas (1776) + 12 +! + 93.50000 + 195.80000 + 296.00000 + 391.60000 + 499.90000 + 592.80000 + 697.80000 + 794.00000 + 893.60000 + 997.80000 + 1092.10000 + 2/1 diff --git a/scales/mercator.scl b/scales/mercator.scl new file mode 100644 index 0000000..80d576c --- /dev/null +++ b/scales/mercator.scl @@ -0,0 +1,24 @@ +! mercator.scl +! +19 out of 53-tET, see Mandelbaum p. 331 + 19 +! + 67.925 cents + 113.208 cents + 181.132 cents + 271.698 cents + 339.623 cents + 384.906 cents + 430.189 cents + 498.113 cents + 566.038 cents + 611.321 cents + 679.245 cents + 769.811 cents + 815.094 cents + 883.019 cents + 950.943 cents + 996.226 cents + 1086.793 cents + 1154.717 cents + 2/1 diff --git a/scales/merrick.scl b/scales/merrick.scl new file mode 100644 index 0000000..3eef696 --- /dev/null +++ b/scales/merrick.scl @@ -0,0 +1,17 @@ +! merrick.scl +! +A. Merrick's melodically tuned equal temperament (1811) + 12 +! + 108.96352 + 209.54567 + 310.11018 + 401.52867 + 500.35485 + 607.62320 + 708.89382 + 805.39624 + 895.93891 + 1006.89577 + 1099.12288 + 2/1 diff --git a/scales/mersen-ban.scl b/scales/mersen-ban.scl new file mode 100644 index 0000000..4772d66 --- /dev/null +++ b/scales/mersen-ban.scl @@ -0,0 +1,23 @@ +! mersen-ban.scl +! +For keyboard designs of Mersenne (1635) & Ban (1639), 10 black and extra D. Trait, p. 44-45 + 18 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/mersen_l1.scl b/scales/mersen_l1.scl new file mode 100644 index 0000000..32acef2 --- /dev/null +++ b/scales/mersen_l1.scl @@ -0,0 +1,17 @@ +! mersen_l1.scl +! +Mersenne lute 1 + 12 +! + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/mersen_l2.scl b/scales/mersen_l2.scl new file mode 100644 index 0000000..77b2521 --- /dev/null +++ b/scales/mersen_l2.scl @@ -0,0 +1,17 @@ +! mersen_l2.scl +! +Mersenne lute 2 + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2 diff --git a/scales/mersen_s1.scl b/scales/mersen_s1.scl new file mode 100644 index 0000000..0f52ef9 --- /dev/null +++ b/scales/mersen_s1.scl @@ -0,0 +1,17 @@ +! mersen_s1.scl +! +Mersenne spinet 1, Trait de l'orgue, 1635, p. 43 + 12 +! + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/mersen_s2.scl b/scales/mersen_s2.scl new file mode 100644 index 0000000..abce2b1 --- /dev/null +++ b/scales/mersen_s2.scl @@ -0,0 +1,17 @@ +! mersen_s2.scl +! +Mersenne spinet 2, Trait de l'orgue, 1635, p. 42 + 12 +! + 25/24 + 9/8 + 75/64 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/mersen_s3.scl b/scales/mersen_s3.scl new file mode 100644 index 0000000..53786b1 --- /dev/null +++ b/scales/mersen_s3.scl @@ -0,0 +1,21 @@ +! mersen_s3.scl +! +Mersenne spinet 3, Trait de l'orgue, 1635, p. 43 + 16 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/mersenmt1.scl b/scales/mersenmt1.scl new file mode 100644 index 0000000..4288136 --- /dev/null +++ b/scales/mersenmt1.scl @@ -0,0 +1,17 @@ +! mersenmt1.scl +! +Mersenne's Improved Meantone 1 + 12 +! + 76.04900 + 193.15686 + 299.51157 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 1001.46657 + 1082.89214 + 2/1 diff --git a/scales/mersenmt2.scl b/scales/mersenmt2.scl new file mode 100644 index 0000000..f7a5af2 --- /dev/null +++ b/scales/mersenmt2.scl @@ -0,0 +1,17 @@ +! mersenmt2.scl +! +Mersenne's Improved Meantone 2 + 12 +! + 76.04900 + 193.15686 + 288.75843 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/mersenne-t.scl b/scales/mersenne-t.scl new file mode 100644 index 0000000..8306981 --- /dev/null +++ b/scales/mersenne-t.scl @@ -0,0 +1,17 @@ +! mersenne-t.scl +! +Marin Mersenne, equal temp with just 5/4 (1636) + 12 +! + 96.57843 + 193.15686 + 289.73529 + 5/4 + 488.02450 + 589.73529 + 691.44607 + 793.15686 + 894.86764 + 996.57843 + 1098.28921 + 2/1 diff --git a/scales/mersenne_26.scl b/scales/mersenne_26.scl new file mode 100644 index 0000000..2d822b8 --- /dev/null +++ b/scales/mersenne_26.scl @@ -0,0 +1,31 @@ +! mersenne_26.scl +! +26-note choice system of Mersenne, Trait de l'orgue, 1635, p. 46-48 + 26 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 36/25 + 40/27 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 225/128 + 16/9 + 9/5 + 15/8 + 125/64 + 2/1 diff --git a/scales/mersenne_31.scl b/scales/mersenne_31.scl new file mode 100644 index 0000000..f0a63bd --- /dev/null +++ b/scales/mersenne_31.scl @@ -0,0 +1,36 @@ +! mersenne_31.scl +! +31-note choice system of Mersenne, Harmonie universelle (1636) + 31 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 32/27 + 6/5 + 100/81 + 5/4 + 125/96 + 320/243 + 4/3 + 25/18 + 45/32 + 64/45 + 36/25 + 40/27 + 3/2 + 25/16 + 128/81 + 8/5 + 400/243 + 5/3 + 125/72 + 225/128 + 16/9 + 9/5 + 50/27 + 15/8 + 125/64 + 2/1 diff --git a/scales/met24-byz-1st_pl-trans.scl b/scales/met24-byz-1st_pl-trans.scl new file mode 100644 index 0000000..dc6ab1b --- /dev/null +++ b/scales/met24-byz-1st_pl-trans.scl @@ -0,0 +1,12 @@ +! met24-byz-1st_pl-trans.scl +! +1st plagal Byzantine Liturgical Mode transposed (E-E, final A or ~4/3 step) + 7 +! + 150.00000 + 289.45312 + 496.87500 + 646.87500 + 785.15625 + 992.57812 + 2/1 diff --git a/scales/met24-byz-2nd_pl.scl b/scales/met24-byz-2nd_pl.scl new file mode 100644 index 0000000..1b5668b --- /dev/null +++ b/scales/met24-byz-2nd_pl.scl @@ -0,0 +1,12 @@ +! met24-byz-2nd_pl.scl +! +2nd plagal Byzantine Liturgical or Palace Mode with upper Diatonic tetra + 7 +! + 80.85937 + 427.73438 + 495.70313 + 703.12500 + 866.01563 + 992.57813 + 2/1 diff --git a/scales/met24-byz-3rd-ditonic.scl b/scales/met24-byz-3rd-ditonic.scl new file mode 100644 index 0000000..50dc515 --- /dev/null +++ b/scales/met24-byz-3rd-ditonic.scl @@ -0,0 +1,12 @@ +! met24-byz-3rd-ditonic.scl +! +3rd Byzantine Liturgical mode, ditonic, ~12.5-12.5-5 parts of 72 + 7 +! + 207.42187 + 414.84375 + 495.70312 + 703.12500 + 910.54687 + 1117.96875 + 2/1 diff --git a/scales/met24-byz-3rd.scl b/scales/met24-byz-3rd.scl new file mode 100644 index 0000000..10a5455 --- /dev/null +++ b/scales/met24-byz-3rd.scl @@ -0,0 +1,12 @@ +! met24-byz-3rd.scl +! +3rd Byzantine Liturgical mode (cf. tiby1.scl), ~12.5-14-3.5 parts of 72 + 7 +! + 207.42187 + 438.28125 + 495.70312 + 703.12500 + 910.54687 + 1142.57812 + 2/1 diff --git a/scales/met24-byz-4th_e.scl b/scales/met24-byz-4th_e.scl new file mode 100644 index 0000000..b07c08b --- /dev/null +++ b/scales/met24-byz-4th_e.scl @@ -0,0 +1,12 @@ +! met24-byz-4th_e.scl +! +4th Byzantine Liturgical mode, legetos type (final on E) + 7 +! + 139.45313 + 346.87500 + 554.29688 + 704.29688 + 842.57813 + 1050.00000 + 2/1 diff --git a/scales/met24-byz-4th_e2.scl b/scales/met24-byz-4th_e2.scl new file mode 100644 index 0000000..c5a09e7 --- /dev/null +++ b/scales/met24-byz-4th_e2.scl @@ -0,0 +1,12 @@ +! met24-byz-4th_e2.scl +! +4th Byzantine Liturgical mode, legetos type, ~7-12-12-9-7-12-9 parts of 68 + 7 +! + 125.39062 + 332.81250 + 540.23437 + 703.12500 + 829.68750 + 1037.10937 + 2/1 diff --git a/scales/met24-byz-4th_pl-var1.scl b/scales/met24-byz-4th_pl-var1.scl new file mode 100644 index 0000000..3e99592 --- /dev/null +++ b/scales/met24-byz-4th_pl-var1.scl @@ -0,0 +1,12 @@ +! met24-byz-4th_pl-var1.scl +! +4th plagal Byzantine Liturgical mode (C-C) type with consistent Bb + 7 +! + 207.42187 + 357.42187 + 496.87500 + 704.29687 + 911.71875 + 992.57812 + 2/1 diff --git a/scales/met24-byz-4th_pl-var2.scl b/scales/met24-byz-4th_pl-var2.scl new file mode 100644 index 0000000..4079e73 --- /dev/null +++ b/scales/met24-byz-4th_pl-var2.scl @@ -0,0 +1,12 @@ +! met24-byz-4th_pl-var2.scl +! +4th plagal Byzantine Liturgical mode with consistent Bb as ~7/4 + 7 +! + 207.42187 + 370.31250 + 495.70312 + 703.12500 + 910.54687 + 967.96875 + 2/1 diff --git a/scales/met24-byz-4th_pl.scl b/scales/met24-byz-4th_pl.scl new file mode 100644 index 0000000..b59db83 --- /dev/null +++ b/scales/met24-byz-4th_pl.scl @@ -0,0 +1,12 @@ +! met24-byz-4th_pl.scl +! +4th plagal Byzantine Liturgical mode (cf. 68: 12-9-7 or 72: 12-10-8) + 7 +! + 207.42187 + 370.31250 + 495.70312 + 703.12500 + 910.54687 + 1073.43750 + 2/1 diff --git a/scales/met24-byz-barys_diat.scl b/scales/met24-byz-barys_diat.scl new file mode 100644 index 0000000..fb680dd --- /dev/null +++ b/scales/met24-byz-barys_diat.scl @@ -0,0 +1,12 @@ +! met24-byz-barys_diat.scl +! +Byzantine Barys Diatonic Liturgical mode with upper Soft Chromatic tetra + 7 +! + 138.28125 + 345.70312 + 495.70312 + 703.12500 + 842.57812 + 1073.43750 + 2/1 diff --git a/scales/met24-byz-palace1.scl b/scales/met24-byz-palace1.scl new file mode 100644 index 0000000..eb24241 --- /dev/null +++ b/scales/met24-byz-palace1.scl @@ -0,0 +1,12 @@ +! met24-byz-palace1.scl +! +Byzantine Palace Mode, symmetrical, ~5-20-5 parts of 72 + 7 +! + 82.03126 + 414.84376 + 496.87501 + 704.29688 + 785.15626 + 1119.14063 + 2/1 diff --git a/scales/met24-byz-palace2.scl b/scales/met24-byz-palace2.scl new file mode 100644 index 0000000..47692b0 --- /dev/null +++ b/scales/met24-byz-palace2.scl @@ -0,0 +1,12 @@ +! met24-byz-palace2.scl +! +Byzantine Palace Mode, ~22:21-11:9-126:121 or ~5-21-4 parts of 72 + 7 +! + 80.85937 + 427.73438 + 495.70313 + 703.12500 + 785.15625 + 1130.85938 + 2/1 diff --git a/scales/met24-byz-schrom.scl b/scales/met24-byz-schrom.scl new file mode 100644 index 0000000..1422fe6 --- /dev/null +++ b/scales/met24-byz-schrom.scl @@ -0,0 +1,12 @@ +! met24-byz-schrom.scl +! +Byzantine Soft Chromatic, 2nd Liturgical mode (~14:13-8:7-13:12) + 7 +! + 126.56250 + 357.42187 + 496.87500 + 704.29687 + 829.68750 + 1061.71875 + 2/1 diff --git a/scales/met24-byz-schrom2.scl b/scales/met24-byz-schrom2.scl new file mode 100644 index 0000000..3260ddf --- /dev/null +++ b/scales/met24-byz-schrom2.scl @@ -0,0 +1,12 @@ +! met24-byz-schrom2.scl +! +Byzantine Soft Chromatic, 2nd Liturgical mode (~13:12-8:7-14:13) + 7 +! + 138.28125 + 370.31250 + 495.70313 + 703.12500 + 842.57813 + 1073.43750 + 2/1 diff --git a/scales/met24-chrys_chrom-2nd_pl.scl b/scales/met24-chrys_chrom-2nd_pl.scl new file mode 100644 index 0000000..e8fe1d9 --- /dev/null +++ b/scales/met24-chrys_chrom-2nd_pl.scl @@ -0,0 +1,12 @@ +! met24-chrys_chrom-2nd_pl.scl +! +Near Chrysanthos 2nd plagal Byzantine Liturgical mode (7-18-3 parts of 68) + 7 +! + 126.56250 + 439.45312 + 496.87500 + 704.29687 + 829.68750 + 1142.57812 + 2/1 diff --git a/scales/met24-chrys_chromdiat.scl b/scales/met24-chrys_chromdiat.scl new file mode 100644 index 0000000..85642f3 --- /dev/null +++ b/scales/met24-chrys_chromdiat.scl @@ -0,0 +1,12 @@ +! met24-chrys_chromdiat.scl +! +Near Chrysanthos Hard Chromatic/Diatonic Byzantine mode (68: 7-18-3-12-9-7-12) + 7 +! + 126.56250 + 439.45312 + 496.87500 + 704.29687 + 854.29687 + 992.57812 + 2/1 diff --git a/scales/met24-chrys_diat-1st-68.scl b/scales/met24-chrys_diat-1st-68.scl new file mode 100644 index 0000000..1a39b7e --- /dev/null +++ b/scales/met24-chrys_diat-1st-68.scl @@ -0,0 +1,12 @@ +! met24-chrys_diat-1st-68.scl +! +Near Chrysanthos 1st Byzantine Liturgical mode (68: 9-7-12-12-9-7-12) + 7 +! + 162.89063 + 288.28125 + 495.70313 + 703.12500 + 866.01563 + 992.57813 + 2/1 diff --git a/scales/met24-chrys_diat-1st.scl b/scales/met24-chrys_diat-1st.scl new file mode 100644 index 0000000..58a20e9 --- /dev/null +++ b/scales/met24-chrys_diat-1st.scl @@ -0,0 +1,12 @@ +! met24-chrys_diat-1st.scl +! +Near Chrysanthos JI diatonic, also 1st Byzantine Liturgical mode + 7 +! + 150.00000 + 289.45313 + 496.87500 + 704.29688 + 854.29688 + 992.57813 + 2/1 diff --git a/scales/met24-chrys_diat-4th-68.scl b/scales/met24-chrys_diat-4th-68.scl new file mode 100644 index 0000000..9222a70 --- /dev/null +++ b/scales/met24-chrys_diat-4th-68.scl @@ -0,0 +1,12 @@ +! met24-chrys_diat-4th-68.scl +! +Near Chrysanthos 4th Byzantine Liturgical mode (68: 12-9-7-12-9-7-12) + 7 +! + 207.42187 + 370.31250 + 496.87500 + 704.29687 + 867.18750 + 992.57812 + 2/1 diff --git a/scales/met24-chrys_diat-4th.scl b/scales/met24-chrys_diat-4th.scl new file mode 100644 index 0000000..6032dc4 --- /dev/null +++ b/scales/met24-chrys_diat-4th.scl @@ -0,0 +1,12 @@ +! met24-chrys_diat-4th.scl +! +Near Chrysanthos 4th Byzantine Liturgical mode, JI (also zalzal.scl) + 7 +! + 207.42188 + 357.42188 + 495.70313 + 703.12500 + 853.12500 + 992.57813 + 2/1 diff --git a/scales/met24-chrys_diat-4th_pl.scl b/scales/met24-chrys_diat-4th_pl.scl new file mode 100644 index 0000000..1a1811e --- /dev/null +++ b/scales/met24-chrys_diat-4th_pl.scl @@ -0,0 +1,12 @@ +! met24-chrys_diat-4th_pl.scl +! +Near Chrysanthos 4th Byzantine Liturgical mode, JI + 7 +! + 207.42187 + 357.42187 + 496.87500 + 704.29687 + 911.71875 + 1061.71875 + 2/1 diff --git a/scales/met24-chrys_diatenh.scl b/scales/met24-chrys_diatenh.scl new file mode 100644 index 0000000..8e29fa0 --- /dev/null +++ b/scales/met24-chrys_diatenh.scl @@ -0,0 +1,12 @@ +! met24-chrys_diatenh.scl +! +Near Chrysanthos Diatonic-Enharmonic Byzantine mode (68: 9-7-12-12-3-13-12) + 7 +! + 162.89063 + 288.28125 + 495.70313 + 703.12500 + 760.54688 + 992.57813 + 2/1 diff --git a/scales/met24-chrys_enhdiat.scl b/scales/met24-chrys_enhdiat.scl new file mode 100644 index 0000000..52d8f56 --- /dev/null +++ b/scales/met24-chrys_enhdiat.scl @@ -0,0 +1,12 @@ +! met24-chrys_enhdiat.scl +! +Near Chrysanthos Enharmonic-Diatonic Byzantine mode (68: 13-12-3-12-9-7-12) + 7 +! + 232.03125 + 439.45313 + 496.87500 + 704.29688 + 854.29688 + 992.57813 + 2/1 diff --git a/scales/met24c-cs12-archytan-maqam_cup.scl b/scales/met24c-cs12-archytan-maqam_cup.scl new file mode 100644 index 0000000..46320a2 --- /dev/null +++ b/scales/met24c-cs12-archytan-maqam_cup.scl @@ -0,0 +1,17 @@ +! met24c-cs12-archytan-maqam_cup.scl +! +Constant Structure, tempered subdivision of Archytas Chromatic + 12 +! + 68.55468 + 207.42187 + 288.86719 + 357.42187 + 496.28906 + 564.84375 + 703.71093 + 772.26562 + 911.13281 + 992.57812 + 1061.13281 + 2/1 diff --git a/scales/metals.scl b/scales/metals.scl new file mode 100644 index 0000000..e5a9e1f --- /dev/null +++ b/scales/metals.scl @@ -0,0 +1,16 @@ +! metals.scl +! +Gold, silver, titanium - strong metastable intervals between 1 and 2. + 9 +! + 339.0 + 422.0 + 560.0 + 607.0 + 792.0 + 833.0 + 943.0 + 1002.0 + 2/1 +! +! Dave Keenan, TL 77258. diff --git a/scales/metdia.scl b/scales/metdia.scl new file mode 100644 index 0000000..e9692f6 --- /dev/null +++ b/scales/metdia.scl @@ -0,0 +1,25 @@ +! metdia.scl +Consists of the tetrads of detempered Meantone[21] = meandia.scl +19 +! +21/20 +15/14 +9/8 +8/7 +7/6 +6/5 +5/4 +9/7 +4/3 +7/5 +10/7 +3/2 +8/5 +5/3 +12/7 +7/4 +9/5 +15/8 +2/1 +! [[0, -1, 0], [0, -1, -1], [0, 0, -1], [-1, 0, -1], [-1, 0, 1], [-1, 1, 0], +! [0, 0, 0], [-1, -1, 0], [0, 0, 1], [-1, 0, 0], [-1, 1, 1], [-1, -1, -1]] diff --git a/scales/meyer.scl b/scales/meyer.scl new file mode 100644 index 0000000..a1d73e2 --- /dev/null +++ b/scales/meyer.scl @@ -0,0 +1,24 @@ +! meyer.scl +! +Max Meyer, see Doty, David, 1/1 August 1992 (7:4) p.1 and 10-14 + 19 +! + 16/15 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/meyer_29.scl b/scales/meyer_29.scl new file mode 100644 index 0000000..cc7c60a --- /dev/null +++ b/scales/meyer_29.scl @@ -0,0 +1,34 @@ +! meyer_29.scl +! +Max Meyer, see David Doty, 1/1, August 1992, pp.1,10-14 + 29 +! + 525/512 + 135/128 + 35/32 + 567/512 + 9/8 + 75/64 + 315/256 + 5/4 + 81/64 + 21/16 + 675/512 + 175/128 + 45/32 + 729/512 + 375/256 + 189/128 + 3/2 + 25/16 + 405/256 + 105/64 + 27/16 + 7/4 + 225/128 + 945/512 + 15/8 + 243/128 + 125/64 + 63/32 + 2/1 diff --git a/scales/mgr12.scl b/scales/mgr12.scl new file mode 100644 index 0000000..2d01bd5 --- /dev/null +++ b/scales/mgr12.scl @@ -0,0 +1,17 @@ +! mgr12.scl +! +Modular Golomb Ruler of 12 segments, length 133 + 12 +! + 18.04511 + 54.13534 + 216.54135 + 261.65414 + 360.90226 + 387.96992 + 496.24060 + 613.53383 + 676.69173 + 685.71429 + 766.91729 + 2/1 diff --git a/scales/mgr14.scl b/scales/mgr14.scl new file mode 100644 index 0000000..628fbe5 --- /dev/null +++ b/scales/mgr14.scl @@ -0,0 +1,19 @@ +! mgr14.scl +! +Modular Golomb Ruler of 14 segments, length 183 + 14 +! + 32.78689 + 183.60656 + 249.18033 + 268.85246 + 321.31148 + 327.86885 + 445.90164 + 491.80328 + 603.27869 + 701.63934 + 793.44262 + 806.55738 + 832.78689 + 2/1 diff --git a/scales/mgr18.scl b/scales/mgr18.scl new file mode 100644 index 0000000..250317f --- /dev/null +++ b/scales/mgr18.scl @@ -0,0 +1,23 @@ +! mgr18.scl +! +Modular Golomb Ruler of 18 segments, length 307 + 18 +! + 7.81759 + 39.08795 + 85.99349 + 207.16612 + 218.89251 + 320.52117 + 324.42997 + 347.88274 + 383.06189 + 508.14332 + 578.50163 + 598.04560 + 652.76873 + 734.85342 + 750.48860 + 801.30293 + 844.29967 + 2/1 diff --git a/scales/mid_enh1.scl b/scales/mid_enh1.scl new file mode 100644 index 0000000..66f1c8c --- /dev/null +++ b/scales/mid_enh1.scl @@ -0,0 +1,12 @@ +! mid_enh1.scl +! +Mid-Mode1 Enharmonic, permutation of Archytas's with the 5/4 lying medially + 7 +! + 36/35 + 9/7 + 4/3 + 3/2 + 54/35 + 27/14 + 2/1 diff --git a/scales/mid_enh2.scl b/scales/mid_enh2.scl new file mode 100644 index 0000000..13537b8 --- /dev/null +++ b/scales/mid_enh2.scl @@ -0,0 +1,12 @@ +! mid_enh2.scl +! +Permutation of Archytas' Enharmonic with the 5/4 medially and 28/27 first + 7 +! + 28/27 + 35/27 + 4/3 + 3/2 + 14/9 + 35/18 + 2/1 diff --git a/scales/miller19.scl b/scales/miller19.scl new file mode 100644 index 0000000..9d6d830 --- /dev/null +++ b/scales/miller19.scl @@ -0,0 +1,24 @@ +! miller19.scl +! +TOP tempered nr. 64 [1202.9, 570.4479508], 7-limit {225/224, 1029/1000} + 19 +! + 62.00464 + 136.41550 + 198.42014 + 260.42477 + 322.42941 + 384.43404 + 446.43868 + 508.44332 + 570.44795 + 632.45259 + 694.45722 + 768.86809 + 830.87272 + 892.87736 + 954.88200 + 1016.88663 + 1078.89127 + 1140.89590 + 1202.90054 diff --git a/scales/miller7.scl b/scales/miller7.scl new file mode 100644 index 0000000..4f9cba0 --- /dev/null +++ b/scales/miller7.scl @@ -0,0 +1,17 @@ +! miller7.scl +! +Herman Miller, 7-limit JI. mode of parizek_ji1 + 12 +! + 21/20 + 9/8 + 6/5 + 63/50 + 27/20 + 7/5 + 3/2 + 63/40 + 42/25 + 9/5 + 189/100 + 2/1 diff --git a/scales/miller_12.scl b/scales/miller_12.scl new file mode 100644 index 0000000..9580860 --- /dev/null +++ b/scales/miller_12.scl @@ -0,0 +1,17 @@ +! miller_12.scl +! +Herman Miller, scale with appr. to three 7/4 and one 11/8, TL 19-11-99 + 12 +! + 76.00000 + 188.00000 + 312.00000 + 388.00000 + 500.00000 + 576.00000 + 700.00000 + 812.00000 + 888.00000 + 964.00000 + 1076.00000 + 2/1 diff --git a/scales/miller_12a.scl b/scales/miller_12a.scl new file mode 100644 index 0000000..6e43db0 --- /dev/null +++ b/scales/miller_12a.scl @@ -0,0 +1,17 @@ +! miller_12a.scl +! +Herman Miller, "Starling" scale, alternative version TL 25-11-99 + 12 +! + 76.60000 + 188.30000 + 311.70000 + 388.30000 + 500.00000 + 576.60000 + 700.00000 + 811.70000 + 888.30000 + 964.90000 + 1076.60000 + 1202.00000 diff --git a/scales/miller_12r.scl b/scales/miller_12r.scl new file mode 100644 index 0000000..3ed39f1 --- /dev/null +++ b/scales/miller_12r.scl @@ -0,0 +1,17 @@ +! miller_12r.scl +! +Herman Miller, "Starling" scale rational version + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 125/72 + 50/27 + 2/1 diff --git a/scales/miller_ar1.scl b/scales/miller_ar1.scl new file mode 100644 index 0000000..ab5738e --- /dev/null +++ b/scales/miller_ar1.scl @@ -0,0 +1,17 @@ +! miller_ar1.scl +! +Herman Miller, "Arrow I" well-temperament + 12 +! + 93.74400 + 196.87200 + 32/27 + 391.39800 + 4/3 + 591.78900 + 698.43600 + 795.69900 + 892.96200 + 16/9 + 1089.83400 + 2/1 diff --git a/scales/miller_ar2.scl b/scales/miller_ar2.scl new file mode 100644 index 0000000..703a6ba --- /dev/null +++ b/scales/miller_ar2.scl @@ -0,0 +1,17 @@ +! miller_ar2.scl +! +Herman Miller, "Arrow II" well-temperament + 12 +! + 93.74400 + 196.87200 + 295.30800 + 392.57100 + 499.21800 + 591.78900 + 698.43600 + 795.69900 + 894.13500 + 997.26300 + 1091.00700 + 2/1 diff --git a/scales/miller_b1.scl b/scales/miller_b1.scl new file mode 100644 index 0000000..f0da845 --- /dev/null +++ b/scales/miller_b1.scl @@ -0,0 +1,17 @@ +! miller_b1.scl +! +Herman Miller, "Butterfly I" well-temperament + 12 +! + 94.91700 + 195.69900 + 296.48100 + 392.57100 + 4/3 + 592.96200 + 698.43600 + 794.52600 + 895.30800 + 16/9 + 1091.00700 + 2/1 diff --git a/scales/miller_b2.scl b/scales/miller_b2.scl new file mode 100644 index 0000000..aa82d7b --- /dev/null +++ b/scales/miller_b2.scl @@ -0,0 +1,17 @@ +! miller_b2.scl +! +Herman Miller, "Butterfly II" well-temperament + 12 +! + 96.09000 + 196.87200 + 297.65400 + 392.57100 + 499.21800 + 594.13500 + 700.78200 + 795.69900 + 896.48100 + 997.26300 + 1093.35300 + 2/1 diff --git a/scales/miller_bug.scl b/scales/miller_bug.scl new file mode 100644 index 0000000..b18dcf2 --- /dev/null +++ b/scales/miller_bug.scl @@ -0,0 +1,17 @@ +! miller_bug.scl +! +Herman Miller, "Bug I" well-temperament + 12 +! + 92.57100 + 194.52600 + 296.48100 + 389.05200 + 4/3 + 592.96200 + 698.43600 + 794.52600 + 890.61600 + 16/9 + 1091.00700 + 2/1 diff --git a/scales/miller_lazy.scl b/scales/miller_lazy.scl new file mode 100644 index 0000000..7f5da15 --- /dev/null +++ b/scales/miller_lazy.scl @@ -0,0 +1,17 @@ +! miller_lazy.scl +! +Herman Miller, JI tuning for Lazy Summer Afternoon + 12 +! + 10/9 + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 3/2 + 5/3 + 7/4 + 16/9 + 15/8 + 2/1 diff --git a/scales/miller_nikta.scl b/scales/miller_nikta.scl new file mode 100644 index 0000000..33e4d0e --- /dev/null +++ b/scales/miller_nikta.scl @@ -0,0 +1,24 @@ +! miller_nikta.scl +! +Herman Miller, 19-tone scale of "Nikta", TL 22-1-1999 + 19 +! + 72.29585 + 134.87739 + 191.97467 + 266.34349 + 322.39553 + 385.57529 + 460.73248 + 502.65302 + 575.64326 + 645.68025 + 698.25973 + 768.34018 + 828.84645 + 885.09682 + 965.13063 + 1013.07877 + 1079.63411 + 1151.33508 + 2/1 diff --git a/scales/miller_reflections.scl b/scales/miller_reflections.scl new file mode 100644 index 0000000..e30ad08 --- /dev/null +++ b/scales/miller_reflections.scl @@ -0,0 +1,17 @@ +! miller_reflections.scl +! +Herman Miller, 7-limit (slightly tempered) "reflections" scale + 12 +! + 28/27 + 9/8 + 7/6 + 383.74300 + 4/3 + 7/5 + 3/2 + 14/9 + 5/3 + 7/4 + 1083.12800 + 2/1 diff --git a/scales/miller_sp.scl b/scales/miller_sp.scl new file mode 100644 index 0000000..3bb53c5 --- /dev/null +++ b/scales/miller_sp.scl @@ -0,0 +1,19 @@ +! miller_sp.scl +! +Herman Miller, Superpelog temperament, TOP tuning + 14 +! + 97.25000 + 194.50000 + 260.76000 + 358.01000 + 455.26000 + 521.52000 + 618.77000 + 716.02000 + 782.28000 + 879.53000 + 976.78000 + 1043.04000 + 1140.29000 + 1206.55000 diff --git a/scales/millerop.scl b/scales/millerop.scl new file mode 100644 index 0000000..7d5030c --- /dev/null +++ b/scales/millerop.scl @@ -0,0 +1,16 @@ +! millerop.scl +Lesfip 7 cents version of miller_12.scl +12 +! +79.72535 +187.22996 +312.87823 +390.28033 +497.82080 +577.45787 +701.79264 +810.47140 +889.49454 +966.31605 +1075.75351 +2/1 diff --git a/scales/minerva12.scl b/scales/minerva12.scl new file mode 100644 index 0000000..3758ff1 --- /dev/null +++ b/scales/minerva12.scl @@ -0,0 +1,33 @@ +! minerva12.scl +Minerva[12] (99/98&176/175) 11-limit hobbit, POTE tuning +12 +! +113.18260 +226.36520 +273.37552 +386.55812 +499.74073 +587.07667 +700.25927 +813.44188 +926.62448 +973.63480 +1086.81740 +2/1 +! +!! preminerva12.scl +! Minerva[12] 5-limit transversal +! 12 +!! +! 16/15 +! 256/225 +! 75/64 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 128/75 +! 225/128 +! 15/8 +! 2/1 diff --git a/scales/minerva22.scl b/scales/minerva22.scl new file mode 100644 index 0000000..7152a6e --- /dev/null +++ b/scales/minerva22.scl @@ -0,0 +1,27 @@ +! minerva22.scl +! +Minerva[22] 11-limit JI hobbit <22 35 51 62 76| + 22 +! + 36/35 + 15/14 + 11/10 + 8/7 + 7/6 + 40/33 + 5/4 + 9/7 + 4/3 + 48/35 + 10/7 + 22/15 + 3/2 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 64/35 + 15/8 + 64/33 + 2/1 diff --git a/scales/minerva22x.scl b/scales/minerva22x.scl new file mode 100644 index 0000000..29e556f --- /dev/null +++ b/scales/minerva22x.scl @@ -0,0 +1,53 @@ +! minerva22x.scl +Minerva[22] (176/175, 99/98) hobbit irregular +22 +! +41.29245 +114.02626 +157.58935 +226.41621 +271.94758 +341.84600 +388.44892 +426.82016 +501.32157 +540.56861 +612.07439 +657.60575 +701.95134 +773.43642 +810.46345 +887.70868 +925.67505 +972.97491 +1041.90541 +1088.25561 +1156.39821 +2/1 +! +! ! preminerva22.scl +! Minerva[22] transversal +! 22 +! ! +! 36/35 +! 15/14 +! 11/10 +! 8/7 +! 7/6 +! 40/33 +! 5/4 +! 9/7 +! 4/3 +! 48/35 +! 10/7 +! 22/15 +! 3/2 +! 11/7 +! 8/5 +! 5/3 +! 12/7 +! 7/4 +! 64/35 +! 15/8 +! 64/33 +! 2/1 diff --git a/scales/minor_5.scl b/scales/minor_5.scl new file mode 100644 index 0000000..c594cc8 --- /dev/null +++ b/scales/minor_5.scl @@ -0,0 +1,10 @@ +! minor_5.scl +! +A minor pentatonic, subharmonics 6 to 10 + 5 +! + 8/7 + 4/3 + 8/5 + 16/9 + 2/1 diff --git a/scales/minor_clus.scl b/scales/minor_clus.scl new file mode 100644 index 0000000..49bf0e3 --- /dev/null +++ b/scales/minor_clus.scl @@ -0,0 +1,17 @@ +! MINOR_CLUS.scl +! +Chalmers' Minor Mode Cluster, Genus [333335] + 12 +! + 16/15 + 9/8 + 6/5 + 4/3 + 27/20 + 64/45 + 3/2 + 8/5 + 27/16 + 16/9 + 9/5 + 2/1 diff --git a/scales/minor_wing.scl b/scales/minor_wing.scl new file mode 100644 index 0000000..478f7b7 --- /dev/null +++ b/scales/minor_wing.scl @@ -0,0 +1,17 @@ +! minor_wing.scl +! +Chalmers' Minor Wing with 7 minor and 6 major triads + 12 +! + 9/8 + 6/5 + 5/4 + 4/3 + 36/25 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 48/25 + 2 diff --git a/scales/minorthird_19.scl b/scales/minorthird_19.scl new file mode 100644 index 0000000..062f9c3 --- /dev/null +++ b/scales/minorthird_19.scl @@ -0,0 +1,24 @@ +! minorthird_19.scl +! +Chain of 19 minor thirds + 19 +! + 648/625 + 419904/390625 + 78125/69984 + 125/108 + 6/5 + 3888/3125 + 2519424/1953125 + 15625/11664 + 25/18 + 36/25 + 23328/15625 + 1953125/1259712 + 3125/1944 + 5/3 + 216/125 + 139968/78125 + 390625/209952 + 625/324 + 2/1 diff --git a/scales/minortone.scl b/scales/minortone.scl new file mode 100644 index 0000000..99003d1 --- /dev/null +++ b/scales/minortone.scl @@ -0,0 +1,51 @@ +! minortone.scl +! +Minortone temperament, g=182.466089, 5-limit + 46 +! + 21.38094 + 49.32178 + 77.26262 + 98.64356 + 126.58440 + 154.52525 + 182.46609 + 203.84703 + 231.78787 + 259.72871 + 281.10965 + 309.05049 + 336.99134 + 364.93218 + 386.31312 + 414.25396 + 442.19480 + 463.57574 + 491.51658 + 519.45742 + 547.39827 + 568.77920 + 596.72005 + 624.66089 + 646.04183 + 673.98267 + 701.92351 + 729.86436 + 751.24529 + 779.18614 + 807.12698 + 828.50792 + 856.44876 + 884.38960 + 912.33045 + 933.71138 + 961.65223 + 989.59307 + 1010.97401 + 1038.91485 + 1066.85569 + 1094.79653 + 1116.17747 + 1144.11831 + 1172.05916 + 2/1 diff --git a/scales/miracle1.scl b/scales/miracle1.scl new file mode 100644 index 0000000..6a3720f --- /dev/null +++ b/scales/miracle1.scl @@ -0,0 +1,26 @@ +! miracle1.scl +! +21 out of 72-tET Pyth. scale "Miracle/Blackjack", Keenan & Erlich, TL 2-5-2001 + 21 +! + 33.33333 + 116.66667 + 150.00000 + 233.33333 + 266.66667 + 350.00000 + 383.33333 + 466.66667 + 500.00000 + 583.33333 + 616.66667 + 700.00000 + 733.33333 + 816.66667 + 850.00000 + 933.33333 + 966.66667 + 1050.00000 + 1083.33333 + 1166.66667 + 2/1 diff --git a/scales/miracle1a.scl b/scales/miracle1a.scl new file mode 100644 index 0000000..18034c6 --- /dev/null +++ b/scales/miracle1a.scl @@ -0,0 +1,26 @@ +! miracle1a.scl +! +Version of Blackjack with just 11/8 intervals + 21 +! + 32.45471 + 116.75453 + 149.20923 + 233.50906 + 265.96376 + 350.26359 + 382.71829 + 467.01812 + 499.47282 + 583.77265 + 616.22735 + 700.52718 + 732.98188 + 817.28171 + 849.73641 + 934.03624 + 966.49094 + 1050.79077 + 1083.24547 + 1167.54529 + 2/1 diff --git a/scales/miracle2.scl b/scales/miracle2.scl new file mode 100644 index 0000000..eb68052 --- /dev/null +++ b/scales/miracle2.scl @@ -0,0 +1,36 @@ +! miracle2.scl +! +31 out of 72-tET Pythagorean scale "Miracle/Canasta", tempered Fokker-M, 36 7-limit tetrads + 31 +! + 33.33330 + 83.33337 + 116.66667 + 149.99997 + 200.00004 + 233.33334 + 266.66664 + 316.66671 + 350.00001 + 383.33331 + 433.33338 + 466.66668 + 499.99998 + 550.00005 + 583.33335 + 616.66665 + 649.99995 + 700.00002 + 733.33332 + 766.66662 + 816.66669 + 849.99999 + 883.33329 + 933.33336 + 966.66666 + 999.99996 + 1050.00003 + 1083.33333 + 1116.66663 + 1166.66670 + 2/1 diff --git a/scales/miracle24.scl b/scales/miracle24.scl new file mode 100644 index 0000000..4eb9fdc --- /dev/null +++ b/scales/miracle24.scl @@ -0,0 +1,29 @@ +! miracle24.scl +! +Miracle-24 in 72-tET tuning. + 24 +! + 33.33333 + 83.33333 + 116.66667 + 150.00000 + 233.33333 + 266.66667 + 350.00000 + 383.33333 + 466.66667 + 500.00000 + 583.33333 + 616.66667 + 700.00000 + 733.33333 + 816.66667 + 850.00000 + 933.33333 + 966.66667 + 1000.00000 + 1050.00000 + 1083.33333 + 1116.66667 + 1166.66667 + 2/1 diff --git a/scales/miracle2a.scl b/scales/miracle2a.scl new file mode 100644 index 0000000..e540d42 --- /dev/null +++ b/scales/miracle2a.scl @@ -0,0 +1,36 @@ +! miracle2a.scl +! +Version of Canasta with just 11/8 intervals + 31 +! + 32.45471 + 84.29982 + 116.75453 + 149.20923 + 201.05435 + 233.50906 + 265.96376 + 317.80888 + 350.26359 + 382.71829 + 434.56341 + 467.01812 + 499.47282 + 11/8 + 583.77265 + 616.22735 + 16/11 + 700.52718 + 732.98188 + 765.43659 + 817.28171 + 849.73641 + 882.19112 + 934.03624 + 966.49094 + 998.94565 + 1050.79077 + 1083.24547 + 1115.70018 + 1167.54529 + 2/1 diff --git a/scales/miracle2m.scl b/scales/miracle2m.scl new file mode 100644 index 0000000..19b404a --- /dev/null +++ b/scales/miracle2m.scl @@ -0,0 +1,36 @@ +! miracle2m.scl +! +Fractal form with division=2*sqrt(7)+5 by Jacques Dudon, TL 12-2-2010 + 31 +! + 33.98951 + 82.61154 + 116.60105 + 150.59056 + 199.21259 + 233.20210 + 267.19161 + 315.81364 + 349.80315 + 383.79266 + 432.41468 + 466.40420 + 500.39371 + 549.01573 + 583.00524 + 616.99476 + 650.98427 + 699.60629 + 733.59580 + 767.58532 + 816.20734 + 850.19685 + 884.18636 + 932.80839 + 966.79790 + 1000.78741 + 1049.40944 + 1083.39895 + 1117.38846 + 1166.01049 + 2/1 diff --git a/scales/miracle3.scl b/scales/miracle3.scl new file mode 100644 index 0000000..07ccdc5 --- /dev/null +++ b/scales/miracle3.scl @@ -0,0 +1,46 @@ +! miracle3.scl +! +41 out of 72-tET Pythagorean scale "Miracle/Studloco", Erlich/Keenan (2001) + 41 +! + 33.33333 + 66.66667 + 83.33333 + 116.66667 + 150.00000 + 183.33333 + 200.00000 + 233.33333 + 266.66667 + 300.00000 + 316.66667 + 350.00000 + 383.33333 + 416.66667 + 433.33333 + 466.66667 + 500.00000 + 533.33333 + 550.00000 + 583.33333 + 616.66667 + 650.00000 + 666.66667 + 700.00000 + 733.33333 + 766.66667 + 783.33333 + 816.66667 + 850.00000 + 883.33333 + 900.00000 + 933.33333 + 966.66667 + 1000.00000 + 1016.66667 + 1050.00000 + 1083.33333 + 1116.66667 + 1133.33333 + 1166.66667 + 2/1 diff --git a/scales/miracle31s.scl b/scales/miracle31s.scl new file mode 100644 index 0000000..9ce52c2 --- /dev/null +++ b/scales/miracle31s.scl @@ -0,0 +1,36 @@ +! miracle31s.scl +! +Miracle-31 with Secor's minimax generator of 116.7155941 cents (5:9 exact). XH5, 1976 + 31 +! + 32.84406 + 83.87154 + 116.71559 + 149.55965 + 200.58713 + 233.43119 + 266.27525 + 317.30272 + 350.14678 + 382.99084 + 434.01832 + 466.86238 + 499.70643 + 550.73391 + 583.57797 + 616.42203 + 649.26609 + 700.29357 + 733.13762 + 765.98168 + 817.00916 + 849.85322 + 882.69728 + 933.72475 + 966.56881 + 999.41287 + 1050.44035 + 1083.28441 + 1116.12847 + 1167.15594 + 2/1 diff --git a/scales/miracle3a.scl b/scales/miracle3a.scl new file mode 100644 index 0000000..4ac32ce --- /dev/null +++ b/scales/miracle3a.scl @@ -0,0 +1,46 @@ +! miracle3a.scl +! +Version of Studloco with just 11/8 intervals + 41 +! + 32.45471 + 64.90941 + 84.29982 + 116.75453 + 149.20923 + 181.66394 + 201.05435 + 233.50906 + 265.96376 + 298.41847 + 317.80888 + 350.26359 + 382.71829 + 415.17300 + 434.56341 + 467.01812 + 499.47282 + 531.92753 + 11/8 + 583.77265 + 616.22735 + 16/11 + 668.07247 + 700.52718 + 732.98188 + 765.43659 + 784.82700 + 817.28171 + 849.73641 + 882.19112 + 901.58153 + 934.03624 + 966.49094 + 998.94565 + 1018.33606 + 1050.79077 + 1083.24547 + 1115.70018 + 1135.09059 + 1167.54529 + 2/1 diff --git a/scales/miracle3p.scl b/scales/miracle3p.scl new file mode 100644 index 0000000..aff7662 --- /dev/null +++ b/scales/miracle3p.scl @@ -0,0 +1,46 @@ +! miracle3p.scl +! +Least squares Pythagorean approximation to partch_43 + 41 +! + 30.96288 + 54.97796 + 85.94084 + 116.90371 + 147.86659 + 178.82947 + 202.84455 + 233.80742 + 264.77030 + 295.73318 + 319.74826 + 350.71114 + 381.67401 + 412.63689 + 436.65197 + 467.61485 + 498.57773 + 529.54060 + 553.55569 + 584.51856 + 615.48144 + 646.44431 + 670.45940 + 701.42227 + 732.38515 + 763.34803 + 787.36311 + 818.32599 + 849.28886 + 880.25174 + 904.26682 + 935.22970 + 966.19258 + 997.15545 + 1021.17053 + 1052.13341 + 1083.09629 + 1114.05916 + 1138.07425 + 1169.03712 + 2/1 diff --git a/scales/miracle41s.scl b/scales/miracle41s.scl new file mode 100644 index 0000000..e7a05d2 --- /dev/null +++ b/scales/miracle41s.scl @@ -0,0 +1,46 @@ +! miracle41s.scl +! +Miracle-41 with Secor's minimax generator of 116.7155941 cents (5:9 exact). XH5, 1976 + 41 +! + 32.84406 + 51.02748 + 83.87154 + 116.71559 + 149.55965 + 10/9 + 200.58713 + 233.43119 + 266.27525 + 299.11931 + 317.30272 + 350.14678 + 382.99084 + 415.83490 + 434.01832 + 466.86238 + 499.70643 + 532.55049 + 550.73391 + 583.57797 + 616.42203 + 649.26609 + 667.44951 + 700.29357 + 733.13762 + 765.98168 + 784.16510 + 817.00916 + 849.85322 + 882.69728 + 900.88069 + 933.72475 + 966.56881 + 999.41287 + 9/5 + 1050.44035 + 1083.28441 + 1116.12847 + 1134.31188 + 1167.15594 + 2/1 diff --git a/scales/miracle_10.scl b/scales/miracle_10.scl new file mode 100644 index 0000000..423c5e8 --- /dev/null +++ b/scales/miracle_10.scl @@ -0,0 +1,15 @@ +! miracle_10.scl +! +A 10-tone subset of Blackjack, g=116.667 + 10 +! + 116.66667 + 233.33333 + 350.00000 + 466.66667 + 583.33333 + 700.00000 + 816.66667 + 933.33333 + 1050.00000 + 2/1 diff --git a/scales/miracle_12.scl b/scales/miracle_12.scl new file mode 100644 index 0000000..96687bb --- /dev/null +++ b/scales/miracle_12.scl @@ -0,0 +1,17 @@ +! miracle_12.scl +! +A 12-tone subset of Blackjack with six 4-7-9-11 tetrads + 12 +! + 116.66667 + 233.33333 + 350.00000 + 433.33333 + 466.66667 + 550.00000 + 583.33333 + 666.66667 + 783.33333 + 900.00000 + 1016.66667 + 2/1 diff --git a/scales/miracle_12a.scl b/scales/miracle_12a.scl new file mode 100644 index 0000000..1af592c --- /dev/null +++ b/scales/miracle_12a.scl @@ -0,0 +1,17 @@ +! miracle_12a.scl +! +A 12-tone chain of Miracle generators and subset of Blackjack + 12 +! + 116.66667 + 233.33333 + 350.00000 + 466.66667 + 583.33333 + 700.00000 + 816.66667 + 933.33333 + 1049.99999 + 1083.33333 + 1166.66667 + 2/1 diff --git a/scales/miracle_24hi.scl b/scales/miracle_24hi.scl new file mode 100644 index 0000000..c69cfab --- /dev/null +++ b/scales/miracle_24hi.scl @@ -0,0 +1,29 @@ +! miracle_24hi.scl +! +24 note mapping for Erlich/Keenan Miracle scale + 24 +! + 33.33333 + 66.66667 + 150.00000 + 183.33333 + 233.33333 + 266.66667 + 300.00000 + 383.33333 + 416.66667 + 500.00000 + 533.33333 + 583.33333 + 616.66667 + 650.00000 + 733.33333 + 766.66667 + 816.66667 + 850.00000 + 883.33333 + 966.66667 + 1000.00000 + 1083.33333 + 1116.66667 + 2/1 diff --git a/scales/miracle_24lo.scl b/scales/miracle_24lo.scl new file mode 100644 index 0000000..fb4f191 --- /dev/null +++ b/scales/miracle_24lo.scl @@ -0,0 +1,29 @@ +! miracle_24lo.scl +! +24 note mapping for Erlich/Keenan Miracle scale, low version, tuned to 72-equal + 24 +! + 33.3333333333333333 + 116.666666666666667 + 150.0 + 183.333333333333333 + 233.333333333333333 + 266.666666666666667 + 350.0 + 383.333333333333333 + 466.666666666666667 + 500.0 + 533.333333333333333 + 583.333333333333333 + 616.666666666666667 + 700.0 + 733.333333333333333 + 766.666666666666667 + 816.666666666666667 + 850.0 + 933.333333333333333 + 966.666666666666667 + 1050.0 + 1083.33333333333333 + 1116.66666666666667 + 2/1 diff --git a/scales/miracle_8.scl b/scales/miracle_8.scl new file mode 100644 index 0000000..25dab74 --- /dev/null +++ b/scales/miracle_8.scl @@ -0,0 +1,13 @@ +! miracle_8.scl +! +tet3a.scl in 72-tET + 8 +! + 116.66667 + 316.66667 + 433.33333 + 583.33333 + 700.00000 + 816.66667 + 933.33333 + 2/1 diff --git a/scales/miring.scl b/scales/miring.scl new file mode 100644 index 0000000..b17c333 --- /dev/null +++ b/scales/miring.scl @@ -0,0 +1,10 @@ +! miring.scl +! +sorog miring, Sunda + 5 +! + 420.00000 + 540.00000 + 930.00000 + 1080.00000 + 2/1 diff --git a/scales/miring1.scl b/scales/miring1.scl new file mode 100644 index 0000000..bb5250f --- /dev/null +++ b/scales/miring1.scl @@ -0,0 +1,10 @@ +! miring1.scl +! +Gamelan Miring from Serdang wetan, Tangerang. 1/1=309.5 Hz + 5 +! + 149.938 cents + 280.799 cents + 678.490 cents + 823.448 cents + 2/1 diff --git a/scales/miring2.scl b/scales/miring2.scl new file mode 100644 index 0000000..84e2a55 --- /dev/null +++ b/scales/miring2.scl @@ -0,0 +1,10 @@ +! miring2.scl +! +Gamelan Miring (Melog gender) from Serdang wetan + 5 +! + 113.476 cents + 263.677 cents + 666.219 cents + 789.079 cents + 2/1 diff --git a/scales/misca.scl b/scales/misca.scl new file mode 100644 index 0000000..bb9f0d8 --- /dev/null +++ b/scales/misca.scl @@ -0,0 +1,14 @@ +! misca.scl +! +21/20 x 20/19 x 19/18=7/6 7/6 x 8/7=4/3 + 9 +! + 21/20 + 21/19 + 7/6 + 4/3 + 3/2 + 63/40 + 63/38 + 7/4 + 2/1 diff --git a/scales/miscb.scl b/scales/miscb.scl new file mode 100644 index 0000000..0c28e34 --- /dev/null +++ b/scales/miscb.scl @@ -0,0 +1,14 @@ +! miscb.scl +! +33/32 x 32/31x 31/27=11/9 11/9 x 12/11=4/3 + 9 +! + 33/32 + 33/31 + 11/9 + 4/3 + 3/2 + 99/64 + 99/62 + 11/6 + 2/1 diff --git a/scales/miscc.scl b/scales/miscc.scl new file mode 100644 index 0000000..d258ff7 --- /dev/null +++ b/scales/miscc.scl @@ -0,0 +1,14 @@ +! miscc.scl +! +96/91 x 91/86 x 86/54=32/27. 32/27 x 9/8=4/3. + 9 +! + 96/91 + 48/43 + 32/27 + 4/3 + 3/2 + 144/91 + 72/43 + 16/9 + 2/1 diff --git a/scales/miscd.scl b/scales/miscd.scl new file mode 100644 index 0000000..63d4801 --- /dev/null +++ b/scales/miscd.scl @@ -0,0 +1,14 @@ +! miscd.scl +! +27/26 x 26/25 x 25/24=9/8. 9/8 x 32/27=4/3. + 9 +! + 27/26 + 27/25 + 9/8 + 4/3 + 3/2 + 81/52 + 81/50 + 27/16 + 2/1 diff --git a/scales/misce.scl b/scales/misce.scl new file mode 100644 index 0000000..ce8cc45 --- /dev/null +++ b/scales/misce.scl @@ -0,0 +1,14 @@ +! misce.scl +! +15/14 x 14/13 x 13/12=5/4. 5/4 x 16/15= 4/3. + 9 +! + 15/14 + 15/13 + 5/4 + 4/3 + 3/2 + 45/28 + 45/26 + 15/8 + 2/1 diff --git a/scales/miscf.scl b/scales/miscf.scl new file mode 100644 index 0000000..99edda3 --- /dev/null +++ b/scales/miscf.scl @@ -0,0 +1,14 @@ +! miscf.scl +! +SupraEnh 1 + 9 +! + 28/27 + 16/15 + 4/3 + 81/56 + 3/2 + 14/9 + 8/5 + 27/14 + 2/1 diff --git a/scales/miscg.scl b/scales/miscg.scl new file mode 100644 index 0000000..a0fd340 --- /dev/null +++ b/scales/miscg.scl @@ -0,0 +1,14 @@ +! miscg.scl +! +SupraEnh 2 + 9 +! + 28/27 + 16/15 + 9/7 + 4/3 + 3/2 + 14/9 + 8/5 + 27/14 + 2/1 diff --git a/scales/misch.scl b/scales/misch.scl new file mode 100644 index 0000000..debdecc --- /dev/null +++ b/scales/misch.scl @@ -0,0 +1,14 @@ +! misch.scl +! +SupraEnh 3 + 9 +! + 28/27 + 16/15 + 9/7 + 4/3 + 3/2 + 14/9 + 15/8 + 27/14 + 2/1 diff --git a/scales/misty.scl b/scales/misty.scl new file mode 100644 index 0000000..7bdd325 --- /dev/null +++ b/scales/misty.scl @@ -0,0 +1,68 @@ +! misty.scl +! +Misty temperament, g=96.787939, p=400, 5-limit + 63 +! + 45.39496 + 58.24321 + 71.09145 + 83.93969 + 96.78794 + 142.18290 + 155.03115 + 167.87939 + 180.72763 + 193.57588 + 238.97084 + 251.81908 + 264.66733 + 277.51557 + 290.36382 + 303.21206 + 348.60702 + 361.45527 + 374.30351 + 387.15176 + 400.00000 + 445.39496 + 458.24321 + 471.09145 + 483.93969 + 496.78794 + 542.18290 + 555.03115 + 567.87939 + 580.72763 + 593.57588 + 638.97084 + 651.81908 + 664.66733 + 677.51557 + 690.36382 + 703.21206 + 748.60702 + 761.45527 + 774.30351 + 787.15176 + 800.00000 + 845.39496 + 858.24321 + 871.09145 + 883.93969 + 896.78794 + 942.18290 + 955.03115 + 967.87939 + 980.72763 + 993.57588 + 1038.97084 + 1051.81908 + 1064.66733 + 1077.51557 + 1090.36382 + 1103.21206 + 1148.60702 + 1161.45527 + 1174.30351 + 1187.15176 + 2/1 diff --git a/scales/mistyschism.scl b/scales/mistyschism.scl new file mode 100644 index 0000000..e542057 --- /dev/null +++ b/scales/mistyschism.scl @@ -0,0 +1,17 @@ +! mistyschism.scl +! +Mistyschism scale 32805/32768 and 67108864/66430125 + 12 +! + 524288/492075 + 9/8 + 1215/1024 + 512/405 + 4/3 + 64/45 + 3/2 + 262144/164025 + 2048/1215 + 3645/2048 + 256/135 + 2/1 diff --git a/scales/mitchell.scl b/scales/mitchell.scl new file mode 100644 index 0000000..751e9cf --- /dev/null +++ b/scales/mitchell.scl @@ -0,0 +1,15 @@ +! mitchell.scl +! +Geordan Mitchell, fractal Koch flake monochord scale. XH 18, 2006 + 10 +! + 57.19972 + 177.21778 + 306.18002 + 445.52767 + 597.08106 + 714.11625 + 839.64063 + 974.98272 + 1121.80959 + 2/1 diff --git a/scales/mixed9_3.scl b/scales/mixed9_3.scl new file mode 100644 index 0000000..ce6b34e --- /dev/null +++ b/scales/mixed9_3.scl @@ -0,0 +1,14 @@ +! mixed9_3.scl +! +A mixture of the hemiolic chromatic and diatonic genera, 75 + 75 + 150 + 200 c + 9 +! + 75.000 cents + 150.000 cents + 300.000 cents + 500.000 cents + 700.000 cents + 775.000 cents + 850.000 cents + 1000.000 cents + 2/1 diff --git a/scales/mixed9_4.scl b/scales/mixed9_4.scl new file mode 100644 index 0000000..f971ab4 --- /dev/null +++ b/scales/mixed9_4.scl @@ -0,0 +1,14 @@ +! mixed9_4.scl +! +Mixed enneatonic 4, each "tetrachord" contains 67 + 67 + 133 + 233 cents. + 9 +! + 66.66667 + 133.33333 + 266.66667 + 500.00000 + 700.00000 + 766.66667 + 833.33333 + 966.66667 + 2/1 diff --git a/scales/mixed9_5.scl b/scales/mixed9_5.scl new file mode 100644 index 0000000..ece7de0 --- /dev/null +++ b/scales/mixed9_5.scl @@ -0,0 +1,14 @@ +! mixed9_5.scl +! +A mixture of the intense chromatic genus and the permuted intense diatonic + 9 +! + 100.000 cents + 200.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 900.000 cents + 1100.000 cents + 2/1 diff --git a/scales/mixed9_6.scl b/scales/mixed9_6.scl new file mode 100644 index 0000000..a68b182 --- /dev/null +++ b/scales/mixed9_6.scl @@ -0,0 +1,14 @@ +! mixed9_6.scl +! +Mixed 9-tonic 6, Mixture of Chromatic and Diatonic + 9 +! + 100.000 cents + 200.000 cents + 300.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 900.000 cents + 1000.000 cents + 2/1 diff --git a/scales/mixed9_7.scl b/scales/mixed9_7.scl new file mode 100644 index 0000000..ed82296 --- /dev/null +++ b/scales/mixed9_7.scl @@ -0,0 +1,14 @@ +! mixed9_7.scl +! +Mixed 9-tonic 7, Mixture of Chromatic and Diatonic + 9 +! + 100.000 cents + 300.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 1000.000 cents + 1100.000 cents + 2/1 diff --git a/scales/mixed9_8.scl b/scales/mixed9_8.scl new file mode 100644 index 0000000..4093388 --- /dev/null +++ b/scales/mixed9_8.scl @@ -0,0 +1,14 @@ +! mixed9_8.scl +! +Mixed 9-tonic 8, Mixture of Chromatic and Diatonic + 9 +! + 200.000 cents + 300.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 900.000 cents + 1000.000 cents + 1100.000 cents + 2/1 diff --git a/scales/mixol_chrom.scl b/scales/mixol_chrom.scl new file mode 100644 index 0000000..854f7ad --- /dev/null +++ b/scales/mixol_chrom.scl @@ -0,0 +1,29 @@ +! mixol_chrom.scl +! +Mixolydian chromatic tonos + 24 +! + 22/21 + 11/10 + 22/19 + 44/37 + 11/9 + 11/8 + 11/7 + 44/27 + 88/53 + 22/13 + 11/6 + 2/1 + 44/21 + 11/5 + 44/19 + 88/37 + 22/9 + 11/4 + 22/7 + 88/27 + 176/53 + 44/13 + 11/3 + 4/1 diff --git a/scales/mixol_chrom2.scl b/scales/mixol_chrom2.scl new file mode 100644 index 0000000..a96887d --- /dev/null +++ b/scales/mixol_chrom2.scl @@ -0,0 +1,12 @@ +! MIXOL_CHROM2.scl +! +Schlesinger's Mixolydian Harmonia in the chromatic genus + 7 +! + 28/27 + 14/13 + 14/11 + 7/5 + 28/19 + 14/9 + 2/1 diff --git a/scales/mixol_chrominv.scl b/scales/mixol_chrominv.scl new file mode 100644 index 0000000..09aa8d3 --- /dev/null +++ b/scales/mixol_chrominv.scl @@ -0,0 +1,12 @@ +! MIXOL_CHROMinv.scl +! +A harmonic form of Schlesinger's Chromatic Mixolydian inverted + 7 +! + 16/15 + 8/7 + 10/7 + 11/7 + 23/14 + 12/7 + 2/1 diff --git a/scales/mixol_diat.scl b/scales/mixol_diat.scl new file mode 100644 index 0000000..43cec20 --- /dev/null +++ b/scales/mixol_diat.scl @@ -0,0 +1,29 @@ +! mixol_diat.scl +! +Mixolydian diatonic tonos + 24 +! + 22/21 + 11/10 + 11/9 + 22/17 + 11/8 + 22/15 + 11/7 + 22/13 + 44/25 + 11/6 + 44/23 + 2/1 + 44/21 + 11/5 + 22/9 + 44/17 + 11/4 + 44/15 + 22/7 + 44/13 + 88/25 + 11/3 + 88/23 + 4/1 diff --git a/scales/mixol_diat2.scl b/scales/mixol_diat2.scl new file mode 100644 index 0000000..09f2c0c --- /dev/null +++ b/scales/mixol_diat2.scl @@ -0,0 +1,13 @@ +! mixol_diat2.scl +! +Schlesinger's Mixolydian Harmonia, a subharmonic series though 13 from 28 + 8 +! + 14/13 + 7/6 + 14/11 + 4/3 + 7/5 + 14/9 + 7/4 + 2/1 diff --git a/scales/mixol_diatcon.scl b/scales/mixol_diatcon.scl new file mode 100644 index 0000000..7008011 --- /dev/null +++ b/scales/mixol_diatcon.scl @@ -0,0 +1,12 @@ +! mixol_diatcon.scl +! +A Mixolydian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 14/13 + 7/6 + 14/11 + 3/2 + 14/9 + 7/4 + 2/1 diff --git a/scales/mixol_diatinv.scl b/scales/mixol_diatinv.scl new file mode 100644 index 0000000..ac74004 --- /dev/null +++ b/scales/mixol_diatinv.scl @@ -0,0 +1,12 @@ +! mixol_diatinv.scl +! +A Mixolydian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 8/7 + 9/7 + 4/3 + 11/7 + 12/7 + 13/7 + 2/1 diff --git a/scales/mixol_diatinv2.scl b/scales/mixol_diatinv2.scl new file mode 100644 index 0000000..07f5727 --- /dev/null +++ b/scales/mixol_diatinv2.scl @@ -0,0 +1,13 @@ +! mixol_diatinv2.scl +! +Inverted Schlesinger's Mixolydian Harmonia, a harmonic series from 14 from 28 + 8 +! + 8/7 + 9/7 + 4/3 + 10/7 + 11/7 + 12/7 + 13/7 + 2/1 diff --git a/scales/mixol_enh.scl b/scales/mixol_enh.scl new file mode 100644 index 0000000..6595053 --- /dev/null +++ b/scales/mixol_enh.scl @@ -0,0 +1,29 @@ +! mixol_enh.scl +! +Mixolydian Enharmonic Tonos + 24 +! + 22/21 + 11/10 + 44/39 + 8/7 + 22/19 + 4/3 + 11/7 + 8/5 + 176/109 + 44/27 + 88/49 + 2/1 + 44/21 + 11/5 + 88/39 + 16/7 + 44/19 + 8/3 + 22/7 + 16/5 + 352/109 + 88/27 + 176/49 + 4/1 diff --git a/scales/mixol_enh2.scl b/scales/mixol_enh2.scl new file mode 100644 index 0000000..c4171f0 --- /dev/null +++ b/scales/mixol_enh2.scl @@ -0,0 +1,12 @@ +! mixol_enh2.scl +! +Schlesinger's Mixolydian Harmonia in the enharmonic genus + 7 +! + 56/55 + 28/27 + 14/11 + 7/5 + 56/39 + 28/19 + 2/1 diff --git a/scales/mixol_enhinv.scl b/scales/mixol_enhinv.scl new file mode 100644 index 0000000..93bcc34 --- /dev/null +++ b/scales/mixol_enhinv.scl @@ -0,0 +1,12 @@ +! MIXOL_ENHinv.scl +! +A harmonic form of Schlesinger's Mixolydian inverted + 7 +! + 31/30 + 16/15 + 10/7 + 11/7 + 45/28 + 23/14 + 2/1 diff --git a/scales/mixol_penta.scl b/scales/mixol_penta.scl new file mode 100644 index 0000000..7d4cf16 --- /dev/null +++ b/scales/mixol_penta.scl @@ -0,0 +1,12 @@ +! mixol_penta.scl +! +Schlesinger's Mixolydian Harmonia in the pentachromatic genus + 7 +! + 35/34 + 14/13 + 14/11 + 7/5 + 35/24 + 14/9 + 2/1 diff --git a/scales/mixol_pis.scl b/scales/mixol_pis.scl new file mode 100644 index 0000000..ea2946a --- /dev/null +++ b/scales/mixol_pis.scl @@ -0,0 +1,20 @@ +! mixol_pis.scl +! +The Diatonic Perfect Immutable System in the Mixolydian Tonos + 15 +! + 11/10 + 11/9 + 11/8 + 11/7 + 22/13 + 11/6 + 2/1 + 44/21 + 11/5 + 22/9 + 11/4 + 22/7 + 44/13 + 11/3 + 4/1 diff --git a/scales/mixol_tri1.scl b/scales/mixol_tri1.scl new file mode 100644 index 0000000..2ed6f32 --- /dev/null +++ b/scales/mixol_tri1.scl @@ -0,0 +1,12 @@ +! mixol_tri1.scl +! +Schlesinger's Mixolydian Harmonia in the first trichromatic genus + 7 +! + 42/41 + 21/20 + 14/11 + 7/5 + 42/29 + 3/2 + 2/1 diff --git a/scales/mixol_tri2.scl b/scales/mixol_tri2.scl new file mode 100644 index 0000000..b25d535 --- /dev/null +++ b/scales/mixol_tri2.scl @@ -0,0 +1,12 @@ +! mixol_tri2.scl +! +Schlesinger's Mixolydian Harmonia in the second trichromatic genus + 7 +! + 42/41 + 14/13 + 14/11 + 7/5 + 42/29 + 14/9 + 2/1 diff --git a/scales/mmmgeo1.scl b/scales/mmmgeo1.scl new file mode 100644 index 0000000..358bfe1 --- /dev/null +++ b/scales/mmmgeo1.scl @@ -0,0 +1,12 @@ +! mmmgeo1.scl +! +Scale for MakeMicroMusic in Peppermint 24, maybe a bit like Georgian tunings + 7 +! + 187.34894 + 336.86046 + 495.90439 + 704.09561 + 832.76485 + 991.80879 + 2/1 diff --git a/scales/mmmgeo2.scl b/scales/mmmgeo2.scl new file mode 100644 index 0000000..cf1a996 --- /dev/null +++ b/scales/mmmgeo2.scl @@ -0,0 +1,12 @@ +! mmmgeo2.scl +! +Scale for MakeMicroMusic in Peppermint 24, maybe a bit like Georgian tunings + 7 +! + 208.19121 + 367.23515 + 516.74667 + 704.09561 + 863.13954 + 1071.33075 + 1220.84228 diff --git a/scales/mmmgeo3a.scl b/scales/mmmgeo3a.scl new file mode 100644 index 0000000..4073c79 --- /dev/null +++ b/scales/mmmgeo3a.scl @@ -0,0 +1,12 @@ +! mmmgeo3a.scl +! +Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"? + 7 +! + 128.66925 + 336.86046 + 495.90439 + 704.09561 + 832.76485 + 991.80879 + 2/1 diff --git a/scales/mmmgeo4a.scl b/scales/mmmgeo4a.scl new file mode 100644 index 0000000..5abd316 --- /dev/null +++ b/scales/mmmgeo4a.scl @@ -0,0 +1,12 @@ +! mmmgeo4a.scl +! +Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"? + 7 +! + 128.66925 + 336.86046 + 495.90439 + 704.09561 + 832.76485 + 1040.95607 + 2/1 diff --git a/scales/mmmgeo4b.scl b/scales/mmmgeo4b.scl new file mode 100644 index 0000000..871ac97 --- /dev/null +++ b/scales/mmmgeo4b.scl @@ -0,0 +1,12 @@ +! mmmgeo4b.scl +! +Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"? + 7 +! + 208.19121 + 367.23515 + 495.90439 + 704.09561 + 863.13954 + 1071.33075 + 2/1 diff --git a/scales/mmswap.scl b/scales/mmswap.scl new file mode 100644 index 0000000..d765cdc --- /dev/null +++ b/scales/mmswap.scl @@ -0,0 +1,17 @@ +! mmswap.scl +! +Swapping major and minor in 5-limit JI + 12 +! + 24/25 + 9/8 + 27/25 + 6/5 + 4/3 + 27/20 + 3/2 + 36/25 + 8/5 + 81/50 + 9/5 + 2/1 diff --git a/scales/moantone12.scl b/scales/moantone12.scl new file mode 100644 index 0000000..cd28769 --- /dev/null +++ b/scales/moantone12.scl @@ -0,0 +1,17 @@ +! moantone12.scl +! +Moantone[12] (Passion) in 86-tET + 12 +! + 97.67442 + 195.34884 + 293.02326 + 390.69767 + 488.37209 + 586.04651 + 711.62791 + 809.30233 + 906.97674 + 1004.65116 + 1102.32558 + 2/1 diff --git a/scales/mobbs-mackenzie.scl b/scales/mobbs-mackenzie.scl new file mode 100644 index 0000000..dbc6698 --- /dev/null +++ b/scales/mobbs-mackenzie.scl @@ -0,0 +1,17 @@ +! mobbs-mackenzie.scl +! +Kenneth Mobbs and Alexander Mackenzie of Ord, Bach temperament (2005) + 12 +! + 93.93832 + 201.49869 + 297.84832 + 398.82646 + 499.28184 + 591.98332 + 700.74935 + 795.89332 + 902.24804 + 998.56508 + 1095.40489 + 2/1 diff --git a/scales/mohaj-bala_213.scl b/scales/mohaj-bala_213.scl new file mode 100644 index 0000000..569a2b1 --- /dev/null +++ b/scales/mohaj-bala_213.scl @@ -0,0 +1,21 @@ +! mohaj-bala_213.scl +! +Parizekmic Mohajira+Bala scale, based on a double Bala sequence + 12 +! + 16/15 + 52/45 + 71/60 + 13/10 + 4/3 + 64/45 + 3/2 + 8/5 + 26/15 + 16/9 + 39/20 + 2/1 +! Interleaved Bala -c recurrent sequences, x^8 - 2 = x = 1.1544230572469 or 248.6064241458 cents (5-29-251 notes MOS) +! first sequence [351 (203) 117 135 156 180 208 240 (277) 320 (369) 426... +! second sequence transposed by 4 - x^3 (~32/13) : +! [(216) (250) 288 (332) 384 (443) 512 ... (512 = F#) diff --git a/scales/mohaj-bala_443.scl b/scales/mohaj-bala_443.scl new file mode 100644 index 0000000..71da473 --- /dev/null +++ b/scales/mohaj-bala_443.scl @@ -0,0 +1,21 @@ +! mohaj-bala_443.scl +! +Parizekmic Mohajira+Bala scale, based on a double Bala sequence + 12 +! + 16/15 + 52/45 + 443/360 + 13/10 + 4/3 + 64/45 + 3/2 + 8/5 + 26/15 + 83/45 + 39/20 + 2/1 +! Interleaved Bala -c recurrent sequences, x^8 - 2 = x = 1.1544230572469 or 248.6064241458 cents (5-29-251 notes MOS) +! first sequence [351 (203) 117 135 156 180 208 240 (277) 320... +! second sequence transposed by 4 - x^3 (~32/13) : +! [(216) (250) 288 332 384 443 512 ... (512 = F#) diff --git a/scales/mohajira-to-slendro.scl b/scales/mohajira-to-slendro.scl new file mode 100644 index 0000000..23f33d9 --- /dev/null +++ b/scales/mohajira-to-slendro.scl @@ -0,0 +1,21 @@ +! mohajira-to-slendro.scl +! +From Mohajira to Aeolian and Slendros + 12 +! + 21/20 + 9/8 + 6/5 + 49/40 + 4/3 + 7/5 + 3/2 + 8/5 + 49/30 + 9/5 + 11/6 + 2/1 +! 12 notes selection among two "Dudon scales" : +! D(540/539) = [1 539-135 9 77 5 11 45 3 49 27 7 15] +! D(441/440) = [1 9 147 5 21 11 3 49 55-441 7 63] +! Mohajira scale on white keys : [15 135 147 5 45 49 55] diff --git a/scales/mokhalif.scl b/scales/mokhalif.scl new file mode 100644 index 0000000..a44e42e --- /dev/null +++ b/scales/mokhalif.scl @@ -0,0 +1,12 @@ +! mokhalif.scl +! +Iranian mode Mokhalif from C + 7 +! + 200.00000 + 400.00000 + 500.00000 + 700.00000 + 840.00000 + 1040.00000 + 2/1 diff --git a/scales/montvallon.scl b/scales/montvallon.scl new file mode 100644 index 0000000..7f379f0 --- /dev/null +++ b/scales/montvallon.scl @@ -0,0 +1,17 @@ +! montvallon.scl +! +Montvallon's Monochord, Nouveau sisteme de musique (1742) + 12 +! + 135/128 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/monza.scl b/scales/monza.scl new file mode 100644 index 0000000..08c2f09 --- /dev/null +++ b/scales/monza.scl @@ -0,0 +1,17 @@ +! monza.scl +! +Irregular tuning for 18th century Italian music + 12 +! + 85.53299 + 194.52600 + 32/27 + 389.05200 + 4/3 + 583.57799 + 697.26300 + 789.83400 + 891.78900 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/monzismic.scl b/scales/monzismic.scl new file mode 100644 index 0000000..65bd3fe --- /dev/null +++ b/scales/monzismic.scl @@ -0,0 +1,58 @@ +! monzismic.scl +! +Monzismic temperament, g=249.018448, 5-limit + 53 +! + 23.55725 + 45.09224 + 68.64949 + 90.18448 + 113.74173 + 135.27672 + 158.83397 + 182.39122 + 203.92621 + 227.48346 + 249.01845 + 272.57570 + 294.11069 + 317.66794 + 339.20293 + 362.76018 + 386.31742 + 407.85242 + 431.40966 + 452.94466 + 476.50190 + 498.03690 + 521.59414 + 543.12914 + 566.68638 + 588.22138 + 611.77862 + 635.33587 + 656.87086 + 680.42811 + 701.96310 + 725.52035 + 747.05534 + 770.61259 + 792.14758 + 815.70483 + 837.23982 + 860.79707 + 884.35432 + 905.88931 + 929.44656 + 950.98155 + 974.53880 + 996.07379 + 1019.63104 + 1041.16603 + 1064.72328 + 1086.25827 + 1109.81552 + 1133.37277 + 1154.90776 + 1178.46501 + 2/1 diff --git a/scales/monzo-sym-11.scl b/scales/monzo-sym-11.scl new file mode 100644 index 0000000..2110f6a --- /dev/null +++ b/scales/monzo-sym-11.scl @@ -0,0 +1,46 @@ +! monzo-sym-11.scl +! +Monzo symmetrical system: 11-limit + 41 +! + 33/32 + 128/121 + 16/15 + 12/11 + 35/32 + 11/10 + 9/8 + 8/7 + 64/55 + 7/6 + 6/5 + 77/64 + 5/4 + 14/11 + 32/25 + 64/49 + 21/16 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 32/21 + 49/32 + 25/16 + 11/7 + 8/5 + 128/77 + 5/3 + 12/7 + 55/32 + 7/4 + 16/9 + 20/11 + 64/35 + 11/6 + 15/8 + 121/64 + 64/33 + 2/1 diff --git a/scales/monzo-sym-5.scl b/scales/monzo-sym-5.scl new file mode 100644 index 0000000..cdc3ac6 --- /dev/null +++ b/scales/monzo-sym-5.scl @@ -0,0 +1,18 @@ +! monzo-sym-5.scl +! +Monzo symmetrical system: 5-limit + 13 +! + 16/15 + 9/8 + 6/5 + 5/4 + 32/25 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/monzo-sym-7.scl b/scales/monzo-sym-7.scl new file mode 100644 index 0000000..9bf69df --- /dev/null +++ b/scales/monzo-sym-7.scl @@ -0,0 +1,30 @@ +! monzo-sym-7.scl +! +Monzo symmetrical system: 7-limit + 25 +! + 16/15 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 32/25 + 64/49 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 49/32 + 25/16 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 64/35 + 15/8 + 2/1 diff --git a/scales/monzo_pyth-quartertone.scl b/scales/monzo_pyth-quartertone.scl new file mode 100644 index 0000000..b624e61 --- /dev/null +++ b/scales/monzo_pyth-quartertone.scl @@ -0,0 +1,29 @@ +! monzo_pyth-quartertone.scl +! +Joe Monzo, approximation to 24-tET by 2^n*3^m + 24 +! + 46.92002 + 256/243 + 156.98998 + 9/8 + 250.83002 + 32/27 + 341.05502 + 81/64 + 451.12498 + 4/3 + 544.96502 + 729/512 + 655.03498 + 3/2 + 748.87502 + 128/81 + 858.94498 + 27/16 + 949.16998 + 16/9 + 1043.01002 + 243/128 + 1153.07998 + 2/1 diff --git a/scales/monzo_sumerian_2place12.scl b/scales/monzo_sumerian_2place12.scl new file mode 100644 index 0000000..dd8a9da --- /dev/null +++ b/scales/monzo_sumerian_2place12.scl @@ -0,0 +1,17 @@ +! monzo_sumerian_2place12.scl +! +Monzo - most accurate 2-place sexagesimal 12-tET approximation + 12 +! + 1800/1699 + 1200/1069 + 1200/1009 + 3600/2857 + 1200/899 + 1800/1273 + 400/267 + 100/63 + 3600/2141 + 3600/2021 + 100/53 + 2/1 diff --git a/scales/monzo_sumerian_simp12.scl b/scales/monzo_sumerian_simp12.scl new file mode 100644 index 0000000..ea62c3f --- /dev/null +++ b/scales/monzo_sumerian_simp12.scl @@ -0,0 +1,17 @@ +! monzo_sumerian_simp12.scl +! +Monzo - simplified 2-place sexagesimal 12-tET approximation + 12 +! + 300/283 + 120/107 + 120/101 + 150/119 + 4/3 + 75/53 + 3/2 + 100/63 + 180/107 + 180/101 + 100/53 + 2/1 diff --git a/scales/moore.scl b/scales/moore.scl new file mode 100644 index 0000000..409441d --- /dev/null +++ b/scales/moore.scl @@ -0,0 +1,17 @@ +! moore.scl +! +Moore representative Victorian well-temperament (1885) + 12 +! + 97.46501 + 198.99000 + 298.45501 + 395.98000 + 499.44501 + 596.97001 + 700.49500 + 797.96001 + 897.48500 + 998.95001 + 1096.47500 + 2/1 diff --git a/scales/morgan.scl b/scales/morgan.scl new file mode 100644 index 0000000..b95040c --- /dev/null +++ b/scales/morgan.scl @@ -0,0 +1,17 @@ +! morgan.scl +! +Augustus de Morgan's temperament (1843) + 12 +! + 100.00000 + 202.44375 + 298.53374 + 402.93250 + 499.02250 + 601.46625 + 701.46625 + 799.02250 + 902.93250 + 998.53374 + 1102.44375 + 2/1 diff --git a/scales/morgan_c_36.scl b/scales/morgan_c_36.scl new file mode 100644 index 0000000..7577fa2 --- /dev/null +++ b/scales/morgan_c_36.scl @@ -0,0 +1,41 @@ +! morgan_c_36.scl +! +Caleb Morgan's Hairy UnJust Tuning + 36 +! + 16/15 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 16/11 + 22/15 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 2/1 diff --git a/scales/morgan_c_46.scl b/scales/morgan_c_46.scl new file mode 100644 index 0000000..9a54393 --- /dev/null +++ b/scales/morgan_c_46.scl @@ -0,0 +1,51 @@ +! morgan_c_46.scl +! +Caleb Morgan's 13-limit superparticular tuning + 46 +! + 49/48 + 36/35 + 21/20 + 16/15 + 13/12 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 45/32 + 10/7 + 16/11 + 40/27 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 22/13 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 15/8 + 21/11 + 35/18 + 55/28 + 2/1 diff --git a/scales/moscow.scl b/scales/moscow.scl new file mode 100644 index 0000000..b5251ed --- /dev/null +++ b/scales/moscow.scl @@ -0,0 +1,17 @@ +! moscow.scl +! +Charles E. Moscow's equal beating piano tuning (1895) + 12 +! + 101.86639 + 199.90237 + 301.99802 + 400.24223 + 502.54252 + 604.15223 + 3/2 + 803.82139 + 901.85737 + 1003.95302 + 1102.19723 + 2/1 diff --git a/scales/mothra11br4.scl b/scales/mothra11br4.scl new file mode 100644 index 0000000..c05382d --- /dev/null +++ b/scales/mothra11br4.scl @@ -0,0 +1,16 @@ +! mothra11br4.scl +Mothra[11] with a brat of 4 +11 +! +194.55680981190403133 +232.42613496865067188 +426.98294478055470324 +464.85226993730134382 +659.40907974920537509 +697.27840490595201564 +891.83521471785604685 +929.70453987460268758 +1124.2613496865067188 +1162.1306748432533594 +2/1 +! x^12 + 2x^3 - 8 diff --git a/scales/mothra11rat.scl b/scales/mothra11rat.scl new file mode 100644 index 0000000..a6c779f --- /dev/null +++ b/scales/mothra11rat.scl @@ -0,0 +1,15 @@ +! mothra11rat.scl +Mothra[11] with exact 8/7 as generator +11 +! +16807/16384 +8/7 +2401/2048 +64/49 +343/256 +512/343 +49/32 +4096/2401 +7/4 +32768/16807 +2/1 diff --git a/scales/mothra11sub.scl b/scales/mothra11sub.scl new file mode 100644 index 0000000..09755e9 --- /dev/null +++ b/scales/mothra11sub.scl @@ -0,0 +1,16 @@ +! mothra11sub.scl +Mothra[11] with subminor third beats +11 +! +39.857902275036850177 +232.02841954499262996 +271.88632182002948016 +464.05683908998525998 +503.91474136502211010 +696.08525863497788988 +735.94316091001474006 +928.11367817997051984 +967.97158045500737002 +1160.1420977249631499 +2/1 +! 4x^7 - 13x^4 + 12 diff --git a/scales/mothra16br4.scl b/scales/mothra16br4.scl new file mode 100644 index 0000000..f3a4903 --- /dev/null +++ b/scales/mothra16br4.scl @@ -0,0 +1,21 @@ +! mothra16br4.scl +Mothra[16] with a brat of 4 +16 +! +156.68748465515739066 +194.55680981190403133 +232.42613496865067188 +389.11361962380806258 +426.98294478055470324 +464.85226993730134382 +621.53975459245873435 +659.40907974920537509 +697.27840490595201564 +853.96588956110940631 +891.83521471785604685 +929.70453987460268758 +1086.3920245297600782 +1124.2613496865067188 +1162.1306748432533594 +2/1 +! x^12 + 2x^3 - 8 diff --git a/scales/mttfokker.scl b/scales/mttfokker.scl new file mode 100644 index 0000000..b971e81 --- /dev/null +++ b/scales/mttfokker.scl @@ -0,0 +1,58 @@ +! mttfokker.scl +! +MTT-24-like Fokker block in POTE parapyth tuning, two chains of fifths 7/6 apart + 24 +! + 58.33846 + 126.99416 + 185.33261 + 207.71262 + 266.05107 + 288.43108 + 393.04523 + 415.42523 + 473.76369 + 496.14369 + 554.48215 + 623.13785 + 681.47631 + 703.85631 + 762.19476 + 784.57477 + 889.18892 + 911.56892 + 969.90738 + 992.28738 + 1050.62584 + 1119.28154 + 1177.62000 + 2/1 +! +!! mttfokkertrans.scl +!! +!2.3.7 transversal of mttfokker.scl +!! 49/48: -9 to 14; 531441/524288 0 or 12 ! 24 !! +! 28/27 +! 2187/2048 +! 567/512 +! 9/8 +! 7/6 +! 32/27 +! 5103/4096 +! 81/64 +! 21/16 +! 4/3 +! 112/81 +! 729/512 +! 189/128 +! 3/2 +! 14/9 +! 128/81 +! 1701/1024 +! 27/16 +! 7/4 +! 16/9 +! 448/243 +! 243/128 +! 63/32 +! 2/1 diff --git a/scales/munakata.scl b/scales/munakata.scl new file mode 100644 index 0000000..7af4e17 --- /dev/null +++ b/scales/munakata.scl @@ -0,0 +1,20 @@ +! munakata.scl +! +Nobuo Munakata, shamisen Ritsu Yang and Yin tuning, 1/1=E, TL 19-04-2008 + 15 +! + 27/26 + 9/8 + 243/208 + 32/27 + 81/64 + 2187/1664 + 4/3 + 18/13 + 3/2 + 81/52 + 27/16 + 729/416 + 16/9 + 243/128 + 2/1 diff --git a/scales/mund45.scl b/scales/mund45.scl new file mode 100644 index 0000000..586b8ce --- /dev/null +++ b/scales/mund45.scl @@ -0,0 +1,49 @@ +! mund45.scl +Tenney reduced 11-limit Miracle[45] +45 +! +45/44 +33/32 +25/24 +21/20 +15/14 +12/11 +11/10 +10/9 +9/8 +8/7 +7/6 +25/21 +6/5 +11/9 +5/4 +14/11 +9/7 +21/16 +4/3 +15/11 +11/8 +7/5 +10/7 +16/11 +22/15 +3/2 +32/21 +14/9 +11/7 +8/5 +18/11 +5/3 +27/16 +12/7 +7/4 +16/9 +9/5 +20/11 +11/6 +15/8 +21/11 +27/14 +35/18 +49/25 +2/1 diff --git a/scales/mundeuc45.scl b/scales/mundeuc45.scl new file mode 100644 index 0000000..54e2062 --- /dev/null +++ b/scales/mundeuc45.scl @@ -0,0 +1,50 @@ +! mundeuc45.scl +! +Euclidean reduced detempered Miracle[45] with Tenney tie-breaker + 45 +! + 45/44 + 33/32 + 28/27 + 21/20 + 15/14 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 16/11 + 22/15 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 28/15 + 21/11 + 27/14 + 64/33 + 55/28 + 2/1 diff --git a/scales/musaqa.scl b/scales/musaqa.scl new file mode 100644 index 0000000..7f6e2fb --- /dev/null +++ b/scales/musaqa.scl @@ -0,0 +1,12 @@ +! musaqa.scl +! +Egyptian scale by Miha'il Musaqa + 7 +! + 200.00000 + 350.00000 + 500.00000 + 700.00000 + 850.00000 + 1000.00000 + 2/1 diff --git a/scales/musaqa_24.scl b/scales/musaqa_24.scl new file mode 100644 index 0000000..0347bd5 --- /dev/null +++ b/scales/musaqa_24.scl @@ -0,0 +1,29 @@ +! musaqa_24.scl +! +d'Erlanger vol.5, p. 34. After Mih.a'il Mu^saqah, 1899, a Lebanese scholar + 24 +! + 3456/3361 + 864/817 + 384/353 + 216/193 + 3456/3001 + 32/27 + 3456/2833 + 54/43 + 128/99 + 864/649 + 3456/2521 + 24/17 + 3456/2377 + 864/577 + 128/83 + 27/17 + 3456/2113 + 32/19 + 3456/1993 + 216/121 + 384/209 + 864/457 + 3456/1777 + 2/1 diff --git a/scales/mustear pentachord 17-limit.scl b/scales/mustear pentachord 17-limit.scl new file mode 100644 index 0000000..1bd9c9f --- /dev/null +++ b/scales/mustear pentachord 17-limit.scl @@ -0,0 +1,9 @@ +! mustear pentachord 17-limit.scl +! +Mustear pentachord 42:48:51:56:63 + 4 +! + 8/7 + 17/14 + 4/3 + 3/2 diff --git a/scales/mustear pentachord 5-limit.scl b/scales/mustear pentachord 5-limit.scl new file mode 100644 index 0000000..c1f4814 --- /dev/null +++ b/scales/mustear pentachord 5-limit.scl @@ -0,0 +1,9 @@ +! mustear pentachord 5-limit.scl +! +Mustear pentachord 120:135:144:160:180 + 4 +! + 9/8 + 6/5 + 4/3 + 3/2 diff --git a/scales/myna15br25.scl b/scales/myna15br25.scl new file mode 100644 index 0000000..f4232c3 --- /dev/null +++ b/scales/myna15br25.scl @@ -0,0 +1,20 @@ +! myna15br25.scl +Myna[15] with a brat of 5/2 +15 +! +39.873439535587316106 +79.746879071174631958 +119.62031860676194795 +309.96835988389682900 +349.84179941948414501 +389.71523895507146095 +580.06328023220634205 +619.93671976779365797 +659.81015930338097396 +699.68359883896829004 +890.03164011610317102 +929.90507965169048696 +969.77851918727780304 +1009.6519587228651190 +2/1 +! 5x^10 + 4x^9 - 50 \ No newline at end of file diff --git a/scales/myna15br3.scl b/scales/myna15br3.scl new file mode 100644 index 0000000..4939249 --- /dev/null +++ b/scales/myna15br3.scl @@ -0,0 +1,20 @@ +! myna15br3.scl +Myna[15] with a brat of 3 +15 +! +39.634519805804147250 +79.269039611608294444 +118.90355941741244179 +309.90862995145103682 +349.54314975725518412 +389.17766956305933133 +580.18274009709792642 +619.81725990290207365 +659.45177970870622098 +699.08629951451036812 +890.09137004854896323 +929.72588985435311042 +969.36040966015725767 +1008.9949294659614050 +2/1 +! 5x^10 + 6x^9 - 60 diff --git a/scales/myna23.scl b/scales/myna23.scl new file mode 100644 index 0000000..ae7bcbf --- /dev/null +++ b/scales/myna23.scl @@ -0,0 +1,28 @@ +! myna23.scl +! +Myna[23] temperament, TOP tuning, g=309.892661 (Paul Erlich) + 23 +! + 40.74219 + 81.48437 + 187.66610 + 228.40829 + 269.15048 + 309.89266 + 350.63485 + 391.37703 + 497.55876 + 538.30095 + 579.04314 + 619.78532 + 660.52751 + 701.26969 + 807.45143 + 848.19361 + 888.93580 + 929.67798 + 970.42017 + 1011.16235 + 1117.34409 + 1158.08627 + 1198.82846 diff --git a/scales/myna7opt.scl b/scales/myna7opt.scl new file mode 100644 index 0000000..1a0cd18 --- /dev/null +++ b/scales/myna7opt.scl @@ -0,0 +1,11 @@ +! myna7opt.scl +Lesfip version of 7-limit Myna[7] +7 +! +267.31590 +310.96887 +579.17475 +620.82525 +889.03113 +932.68410 +2/1 diff --git a/scales/mynafip22.scl b/scales/mynafip22.scl new file mode 100644 index 0000000..e47c09a --- /dev/null +++ b/scales/mynafip22.scl @@ -0,0 +1,27 @@ +! mynafip22.scl +! +Lesfip scale with two ~17/14 semi-wolves, 11-limit diamond target, 10 cents error + 22 +! +38.69359 +81.40620 +121.30160 +201.53090 +269.69262 +309.68417 +350.93882 +387.17920 +456.68802 +514.15863 +584.00673 +619.96144 +661.05450 +700.41659 +768.80780 +849.44766 +888.04558 +932.20793 +970.07004 +1011.52732 +1085.24822 +2/1 diff --git a/scales/mystery.scl b/scales/mystery.scl new file mode 100644 index 0000000..86523ef --- /dev/null +++ b/scales/mystery.scl @@ -0,0 +1,63 @@ +! mystery.scl +! +Mystery temperament, minimax with pure octaves, g=15.021612, 13-limit + 58 +! + 15.02161 + 41.37931 + 56.40092 + 82.75862 + 97.78023 + 124.13793 + 139.15954 + 165.51724 + 180.53885 + 206.89655 + 221.91816 + 248.27586 + 263.29747 + 289.65517 + 304.67678 + 331.03448 + 346.05609 + 372.41379 + 387.43541 + 413.79310 + 428.81472 + 455.17241 + 470.19403 + 496.55172 + 511.57334 + 537.93103 + 552.95265 + 579.31034 + 594.33196 + 620.68966 + 635.71127 + 662.06897 + 677.09058 + 703.44828 + 718.46989 + 744.82759 + 759.84920 + 786.20690 + 801.22851 + 827.58621 + 842.60782 + 868.96552 + 883.98713 + 910.34483 + 925.36644 + 951.72414 + 966.74575 + 993.10345 + 1008.12506 + 1034.48276 + 1049.50437 + 1075.86207 + 1090.88368 + 1117.24138 + 1132.26299 + 1158.62069 + 1173.64230 + 2/1 diff --git a/scales/mystic-r.scl b/scales/mystic-r.scl new file mode 100644 index 0000000..6852918 --- /dev/null +++ b/scales/mystic-r.scl @@ -0,0 +1,10 @@ +! mystic-r.scl +! +Skriabin's mystic chord, op. 60 rationalised + 5 +! + 45/32 + 16/9 + 5/2 + 10/3 + 9/2 diff --git a/scales/mystic.scl b/scales/mystic.scl new file mode 100644 index 0000000..b7c725f --- /dev/null +++ b/scales/mystic.scl @@ -0,0 +1,10 @@ +! mystic.scl +! +Skriabin's mystic chord, op. 60 + 5 +! + 600.00000 + 1000.00000 + 1600.00000 + 2100.00000 + 2600.00000 diff --git a/scales/nakika12.scl b/scales/nakika12.scl new file mode 100644 index 0000000..2442b82 --- /dev/null +++ b/scales/nakika12.scl @@ -0,0 +1,35 @@ +! nakika12.scl +Nakika[12] (100/99&245/242) hobbit, 41-tET tuning +! As an octacot scale: [-10, -9, -8, -7, -2, -1, 0, 1, 2, 8, 9, 10] +! 335333433533 +12 +! +87.80488 +175.60976 +321.95122 +409.75610 +497.56098 +585.36585 +702.43902 +790.24390 +878.04878 +1024.39024 +1112.19512 +2/1 +! +!! prenakika12.scl +! Nakika[12] 2.3.11/7 subgroup transversal +! 12 +! +! 22/21 +! 484/441 +! 147/121 +! 14/11 +! 4/3 +! 88/63 +! 3/2 +! 11/7 +! 242/147 +! 441/242 +! 21/11 +! 2/1 diff --git a/scales/nassarre.scl b/scales/nassarre.scl new file mode 100644 index 0000000..15a1bd0 --- /dev/null +++ b/scales/nassarre.scl @@ -0,0 +1,17 @@ +! nassarre.scl +! +Nassarre's Equal Semitones + 12 +! + 103.00000 + 204.00000 + 303.00000 + 408.00000 + 507.00000 + 612.00000 + 711.00000 + 816.00000 + 915.00000 + 1020.00000 + 1107.00000 + 2/1 diff --git a/scales/ndau1.scl b/scales/ndau1.scl new file mode 100644 index 0000000..cd1213d --- /dev/null +++ b/scales/ndau1.scl @@ -0,0 +1,11 @@ +! ndau1.scl +! +Ndau mbira tuning, Zimbabwe. 1/1=204 Hz, Tracey TR-205 + 6 +! + 56/51 + 64/51 + 25/17 + 29/17 + 97/51 + 2/1 diff --git a/scales/ndau2.scl b/scales/ndau2.scl new file mode 100644 index 0000000..3f8f18f --- /dev/null +++ b/scales/ndau2.scl @@ -0,0 +1,11 @@ +! ndau2.scl +! +Ndau mbira tuning, Zimbabwe. 1/1=220 Hz, Tracey TR-176 + 6 +! + 13/11 + 74/55 + 83/55 + 91/55 + 98/55 + 2/1 diff --git a/scales/ndau3.scl b/scales/ndau3.scl new file mode 100644 index 0000000..491190b --- /dev/null +++ b/scales/ndau3.scl @@ -0,0 +1,11 @@ +! ndau3.scl +! +Ndau mbira tuning, Zimbabwe. 1/1=184 Hz, Tracey TR-176 + 6 +! + 101/92 + 27/23 + 63/46 + 36/23 + 41/23 + 2/1 diff --git a/scales/negri5_19.scl b/scales/negri5_19.scl new file mode 100644 index 0000000..3422613 --- /dev/null +++ b/scales/negri5_19.scl @@ -0,0 +1,24 @@ +! negri5_19.scl +! +Negri temperament, g=126.238272, 5-limit + 19 +! + 62.38272 + 126.23827 + 188.62099 + 252.47654 + 314.85926 + 378.71482 + 441.09754 + 504.95309 + 567.33581 + 631.19136 + 693.57408 + 757.42963 + 819.81235 + 883.66790 + 946.05062 + 1009.90618 + 1072.28890 + 1136.14445 + 2/1 diff --git a/scales/negri_19.scl b/scales/negri_19.scl new file mode 100644 index 0000000..61d410f --- /dev/null +++ b/scales/negri_19.scl @@ -0,0 +1,24 @@ +! negri_19.scl +! +Negri temperament, 13-limit, g=124.831 + 19 +! + 48.30502 + 124.83050 + 173.13553 + 249.66100 + 297.96603 + 374.49151 + 422.79653 + 499.32201 + 547.62703 + 624.15251 + 700.67799 + 748.98301 + 825.50849 + 873.81352 + 950.33900 + 998.64402 + 1075.16950 + 1123.47452 + 2/1 diff --git a/scales/negri_29.scl b/scales/negri_29.scl new file mode 100644 index 0000000..a06cca6 --- /dev/null +++ b/scales/negri_29.scl @@ -0,0 +1,34 @@ +! negri_29.scl +! +Negri temperament, 13-limit, g=124.831 + 29 +! + 48.30502 + 96.61005 + 124.83050 + 173.13553 + 221.44055 + 249.66100 + 297.96603 + 346.27105 + 374.49151 + 422.79653 + 471.10155 + 499.32201 + 547.62703 + 595.93205 + 624.15251 + 672.45753 + 700.67799 + 748.98301 + 797.28804 + 825.50849 + 873.81352 + 922.11854 + 950.33900 + 998.64402 + 1046.94904 + 1075.16950 + 1123.47452 + 1171.77954 + 2/1 diff --git a/scales/neid-mar-morg.scl b/scales/neid-mar-morg.scl new file mode 100644 index 0000000..31e3f85 --- /dev/null +++ b/scales/neid-mar-morg.scl @@ -0,0 +1,17 @@ +! neid-mar-morg.scl +! +Neidhardt-Marpurg-de Morgan temperament (1858) + 12 +! + 101.95500 + 201.95500 + 300.00000 + 401.95500 + 501.95500 + 600.00000 + 3/2 + 801.95500 + 900.00000 + 1001.95500 + 1101.95500 + 2/1 diff --git a/scales/neidhardt-f10.scl b/scales/neidhardt-f10.scl new file mode 100644 index 0000000..bd74577 --- /dev/null +++ b/scales/neidhardt-f10.scl @@ -0,0 +1,17 @@ +! neidhardt-f10.scl +! +Neidhardt's fifth-circle no. 10, 1/6 and 1/4 Pyth. comma + 12 +! + 94.13500 + 198.04500 + 298.04500 + 392.18000 + 4/3 + 596.09000 + 696.09000 + 796.09000 + 894.13500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/neidhardt-f10i.scl b/scales/neidhardt-f10i.scl new file mode 100644 index 0000000..f75f924 --- /dev/null +++ b/scales/neidhardt-f10i.scl @@ -0,0 +1,17 @@ +! neidhardt-f10i.scl +! +Neidhardt's fifth-circle no. 10, idealised + 12 +! + 94.13500 + 198.04500 + 298.04500 + 398.04500 + 4/3 + 598.04500 + 696.09000 + 796.09000 + 896.09000 + 16/9 + 1096.09000 + 2/1 diff --git a/scales/neidhardt-f11.scl b/scales/neidhardt-f11.scl new file mode 100644 index 0000000..7d22b7f --- /dev/null +++ b/scales/neidhardt-f11.scl @@ -0,0 +1,17 @@ +! neidhardt-f11.scl +! +Neidhardt's fifth-circle no. 11, 1/12, 1/6 and 1/4 Pyth. comma + 12 +! + 96.09000 + 198.04500 + 296.09000 + 394.13500 + 500.00000 + 598.04500 + 700.00000 + 800.00000 + 894.13500 + 16/9 + 1098.04500 + 2/1 diff --git a/scales/neidhardt-f12.scl b/scales/neidhardt-f12.scl new file mode 100644 index 0000000..7d7a230 --- /dev/null +++ b/scales/neidhardt-f12.scl @@ -0,0 +1,17 @@ +! neidhardt-f12.scl +! +Neidhardt's fifth-circle no. 12, 1/12, 1/6 and 1/4 Pyth. comma (1732) + 12 +! + 100.00000 + 198.04500 + 300.00000 + 396.09000 + 4/3 + 600.00000 + 700.00000 + 798.04500 + 900.00000 + 16/9 + 1098.04500 + 2/1 diff --git a/scales/neidhardt-f2.scl b/scales/neidhardt-f2.scl new file mode 100644 index 0000000..2e9edf0 --- /dev/null +++ b/scales/neidhardt-f2.scl @@ -0,0 +1,17 @@ +! neidhardt-f2.scl +! +Neidhardt's fifth-circle no. 2, 1/6 Pyth. comma, 9- 3+ + 12 +! + 101.95500 + 9/8 + 298.04500 + 400.00000 + 501.95500 + 603.91000 + 698.04500 + 800.00000 + 901.95500 + 1003.91000 + 1098.04500 + 2/1 diff --git a/scales/neidhardt-f3.scl b/scales/neidhardt-f3.scl new file mode 100644 index 0000000..d21d640 --- /dev/null +++ b/scales/neidhardt-f3.scl @@ -0,0 +1,17 @@ +! neidhardt-f3.scl +! +Neidhardt's fifth-circle no. 3, 1/6 Pyth. comma. Also Marpurg's temperament F + 12 +! + 101.95500 + 200.00000 + 301.95500 + 400.00000 + 501.95500 + 600.00000 + 3/2 + 800.00000 + 901.95500 + 1000.00000 + 1101.95500 + 2/1 diff --git a/scales/neidhardt-f4.scl b/scales/neidhardt-f4.scl new file mode 100644 index 0000000..66219b5 --- /dev/null +++ b/scales/neidhardt-f4.scl @@ -0,0 +1,17 @@ +! neidhardt-f4.scl +! +Neidhardt's fifth-circle no. 4, 1/4 Pyth. comma + 12 +! + 96.09000 + 198.04500 + 300.00000 + 396.09000 + 4/3 + 600.00000 + 696.09000 + 798.04500 + 900.00000 + 16/9 + 1098.04500 + 2/1 diff --git a/scales/neidhardt-f5.scl b/scales/neidhardt-f5.scl new file mode 100644 index 0000000..42dee9e --- /dev/null +++ b/scales/neidhardt-f5.scl @@ -0,0 +1,17 @@ +! neidhardt-f5.scl +! +Neidhardt's fifth-circle no. 5, 1/12 and 1/6 Pyth. comma + 12 +! + 100.00000 + 200.00000 + 298.04500 + 401.95500 + 501.95500 + 600.00000 + 700.00000 + 800.00000 + 898.04500 + 1001.95500 + 1101.95500 + 2/1 diff --git a/scales/neidhardt-f6.scl b/scales/neidhardt-f6.scl new file mode 100644 index 0000000..80b48d4 --- /dev/null +++ b/scales/neidhardt-f6.scl @@ -0,0 +1,17 @@ +! neidhardt-f6.scl +! +Neidhardt's fifth-circle no. 6, 1/12 and 1/6 Pyth. comma + 12 +! + 100.00000 + 196.09000 + 300.00000 + 400.00000 + 496.09000 + 600.00000 + 700.00000 + 796.09000 + 900.00000 + 1000.00000 + 1096.09000 + 2/1 diff --git a/scales/neidhardt-f7.scl b/scales/neidhardt-f7.scl new file mode 100644 index 0000000..d5d93e0 --- /dev/null +++ b/scales/neidhardt-f7.scl @@ -0,0 +1,17 @@ +! neidhardt-f7.scl +! +Neidhardt's fifth-circle no. 7, 1/6 and 1/4 Pyth. comma + 12 +! + 94.13500 + 194.13500 + 298.04500 + 400.00000 + 494.13500 + 596.09000 + 696.09000 + 800.00000 + 892.18000 + 16/9 + 1098.04500 + 2/1 diff --git a/scales/neidhardt-f9.scl b/scales/neidhardt-f9.scl new file mode 100644 index 0000000..e23b4a3 --- /dev/null +++ b/scales/neidhardt-f9.scl @@ -0,0 +1,17 @@ +! neidhardt-f9.scl +! +Neidhardt's fifth-circle no. 9, 1/12 and 1/6 Pyth. comma + 12 +! + 98.04500 + 196.09000 + 300.00000 + 400.00000 + 4/3 + 596.09000 + 700.00000 + 800.00000 + 898.04500 + 16/9 + 1100.00000 + 2/1 diff --git a/scales/neidhardt-s1.scl b/scales/neidhardt-s1.scl new file mode 100644 index 0000000..e0dc5dd --- /dev/null +++ b/scales/neidhardt-s1.scl @@ -0,0 +1,17 @@ +! neidhardt-s1.scl +! +Neidhardt's sample temperament no. 1, 1/1, -1/1 Pyth. comma (1732) + 12 +! + 256/243 + 9/8 + 19683/16384 + 8192/6561 + 177147/131072 + 1024/729 + 3/2 + 6561/4096 + 27/16 + 59049/32768 + 4096/2187 + 2/1 diff --git a/scales/neidhardt-s2.scl b/scales/neidhardt-s2.scl new file mode 100644 index 0000000..cc21cf8 --- /dev/null +++ b/scales/neidhardt-s2.scl @@ -0,0 +1,17 @@ +! neidhardt-s2.scl +! +Neidhardt's sample temperament no. 2, 1/12, 1/6 and 1/4 Pyth. comma (1732) + 12 +! + 256/243 + 194.13500 + 32/27 + 386.31499 + 496.09000 + 590.22500 + 698.04500 + 128/81 + 890.22500 + 994.13500 + 1088.26999 + 2/1 diff --git a/scales/neidhardt-s3.scl b/scales/neidhardt-s3.scl new file mode 100644 index 0000000..4cc3ff7 --- /dev/null +++ b/scales/neidhardt-s3.scl @@ -0,0 +1,17 @@ +! neidhardt-s3.scl +! +Neidhardt's sample temperament no. 3, 1/12, 1/6 and 1/4 Pyth. comma (1732) + 12 +! + 92.18000 + 196.09000 + 296.09000 + 388.26999 + 4/3 + 592.18000 + 698.04500 + 794.13500 + 892.18000 + 16/9 + 1090.22500 + 2/1 diff --git a/scales/neidhardt-t1.scl b/scales/neidhardt-t1.scl new file mode 100644 index 0000000..5744fa0 --- /dev/null +++ b/scales/neidhardt-t1.scl @@ -0,0 +1,17 @@ +! neidhardt-t1.scl +! +Neidhardt's third-circle no. 1, 1/12, 1/6 and 1/4 Pyth. comma (1732) 'Dorf' + 12 +! + 94.13500 + 198.04500 + 296.09000 + 390.22500 + 4/3 + 592.18000 + 700.00000 + 794.13500 + 894.13500 + 998.04500 + 1092.18000 + 2/1 diff --git a/scales/neidhardt-t2.scl b/scales/neidhardt-t2.scl new file mode 100644 index 0000000..5795ae3 --- /dev/null +++ b/scales/neidhardt-t2.scl @@ -0,0 +1,17 @@ +! neidhardt-t2.scl +! +Neidhardt's third-circle no. 2, 1/12, 1/6 and 1/4 Pyth. comma (1732) 'kleine Stadt' + 12 +! + 94.13500 + 196.09000 + 296.09000 + 392.18000 + 4/3 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/neidhardt-t3.scl b/scales/neidhardt-t3.scl new file mode 100644 index 0000000..846a41c --- /dev/null +++ b/scales/neidhardt-t3.scl @@ -0,0 +1,17 @@ +! neidhardt-t3.scl +! +Neidhardt's third-circle no. 3, 1/12 and 1/6 Pyth. comma + 12 +! + 96.09000 + 196.09000 + 296.09000 + 394.13500 + 500.00000 + 598.04500 + 698.04500 + 796.09000 + 896.09000 + 1001.95500 + 1092.18000 + 2/1 diff --git a/scales/neidhardt-t4.scl b/scales/neidhardt-t4.scl new file mode 100644 index 0000000..3d44ed5 --- /dev/null +++ b/scales/neidhardt-t4.scl @@ -0,0 +1,17 @@ +! neidhardt-t4.scl +! +Neidhardt's third-circle no. 4, 1/12 and 1/6 Pyth. comma + 12 +! + 96.09000 + 196.09000 + 296.09000 + 396.09000 + 4/3 + 596.09000 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/neidhardt-t5.scl b/scales/neidhardt-t5.scl new file mode 100644 index 0000000..6e295b6 --- /dev/null +++ b/scales/neidhardt-t5.scl @@ -0,0 +1,17 @@ +! neidhardt-t5.scl +! +Neidhardt's third-circle no. 5, 1/12 and 1/6 Pyth. comma + 12 +! + 100.00000 + 200.00000 + 300.00000 + 398.04500 + 501.95500 + 598.04500 + 700.00000 + 800.00000 + 900.00000 + 1000.00000 + 1098.04500 + 2/1 diff --git a/scales/neidhardt1.scl b/scales/neidhardt1.scl new file mode 100644 index 0000000..127f67e --- /dev/null +++ b/scales/neidhardt1.scl @@ -0,0 +1,17 @@ +! neidhardt1.scl +! +Neidhardt I temperament (1724) + 12 +! + 94.13500 + 196.09000 + 296.09000 + 392.18000 + 4/3 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/neidhardt2.scl b/scales/neidhardt2.scl new file mode 100644 index 0000000..134d6e2 --- /dev/null +++ b/scales/neidhardt2.scl @@ -0,0 +1,17 @@ +! neidhardt2.scl +! +Neidhardt II temperament (1724) + 12 +! + 96.09000 + 196.09000 + 298.04500 + 394.13500 + 500.00000 + 596.09000 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1096.09000 + 2/1 diff --git a/scales/neidhardt3.scl b/scales/neidhardt3.scl new file mode 100644 index 0000000..0396e07 --- /dev/null +++ b/scales/neidhardt3.scl @@ -0,0 +1,17 @@ +! neidhardt3.scl +! +Neidhardt III temperament (1724) 'groe Stadt' + 12 +! + 96.09000 + 196.09000 + 298.04500 + 394.13500 + 4/3 + 596.09000 + 698.04500 + 796.09000 + 894.13500 + 998.04500 + 1096.09000 + 2/1 diff --git a/scales/neidhardt4.scl b/scales/neidhardt4.scl new file mode 100644 index 0000000..b113446 --- /dev/null +++ b/scales/neidhardt4.scl @@ -0,0 +1,17 @@ +! neidhardt4.scl +! +Neidhardt IV temperament (1724), equal temperament + 12 +! + 100.00000 + 200.00000 + 300.00000 + 400.00000 + 500.00000 + 600.00000 + 700.00000 + 800.00000 + 900.00000 + 1000.00000 + 1100.00000 + 2/1 diff --git a/scales/neidhardtn.scl b/scales/neidhardtn.scl new file mode 100644 index 0000000..f13b13b --- /dev/null +++ b/scales/neidhardtn.scl @@ -0,0 +1,17 @@ +! neidhardtn.scl +! +Johann Georg Neidhardt's temperament (1732), alt. 1/6 & 0 P. Also Marpurg nr. 10 + 12 +! + 98.04500 + 200.00000 + 298.04500 + 400.00000 + 4/3 + 600.00000 + 698.04500 + 800.00000 + 898.04500 + 1000.00000 + 1098.04500 + 2/1 diff --git a/scales/neutr_diat.scl b/scales/neutr_diat.scl new file mode 100644 index 0000000..7302cfc --- /dev/null +++ b/scales/neutr_diat.scl @@ -0,0 +1,12 @@ +! neutr_diat.scl +! +Neutral Diatonic, 9 + 9 + 12 parts, geometric mean of major and minor + 7 +! + 9/8 + 350.00000 + 4/3 + 3/2 + 850.00000 + 1050.00000 + 2/1 diff --git a/scales/neutr_pent1.scl b/scales/neutr_pent1.scl new file mode 100644 index 0000000..2ad5f64 --- /dev/null +++ b/scales/neutr_pent1.scl @@ -0,0 +1,10 @@ +! neutr_pent1.scl +! +Quasi-Neutral Pentatonic 1, 15/13 x 52/45 in each trichord, after Dudon + 5 +! + 52/45 + 4/3 + 3/2 + 26/15 + 2/1 diff --git a/scales/neutr_pent2.scl b/scales/neutr_pent2.scl new file mode 100644 index 0000000..43fa631 --- /dev/null +++ b/scales/neutr_pent2.scl @@ -0,0 +1,10 @@ +! neutr_pent2.scl +! +Quasi-Neutral Pentatonic 2, 15/13 x 52/45 in each trichord, after Dudon + 5 +! + 15/13 + 4/3 + 3/2 + 45/26 + 2/1 diff --git a/scales/new_enh.scl b/scales/new_enh.scl new file mode 100644 index 0000000..641a414 --- /dev/null +++ b/scales/new_enh.scl @@ -0,0 +1,12 @@ +! new_enh.scl +! +New Enharmonic + 7 +! + 81/80 + 16/15 + 4/3 + 3/2 + 243/160 + 8/5 + 2/1 diff --git a/scales/new_enh2.scl b/scales/new_enh2.scl new file mode 100644 index 0000000..acd44e0 --- /dev/null +++ b/scales/new_enh2.scl @@ -0,0 +1,12 @@ +! new_enh2.scl +! +New Enharmonic permuted + 7 +! + 5/4 + 81/64 + 4/3 + 3/2 + 15/8 + 243/128 + 2/1 diff --git a/scales/newcastle.scl b/scales/newcastle.scl new file mode 100644 index 0000000..6e353ed --- /dev/null +++ b/scales/newcastle.scl @@ -0,0 +1,17 @@ +! newcastle.scl +! +Newcastle modified 1/3-comma meantone + 12 +! + 77.84119 + 189.57248 + 308.47252 + 5/4 + 505.21376 + 583.05495 + 694.78624 + 779.79619 + 5/3 + 1003.25876 + 15/8 + 2/1 diff --git a/scales/newton_15_out_of_53.scl b/scales/newton_15_out_of_53.scl new file mode 100644 index 0000000..a2e454f --- /dev/null +++ b/scales/newton_15_out_of_53.scl @@ -0,0 +1,23 @@ +! newton_15_out_of_53.scl +! +from drawing: Cambridge Univ.Lib.,Ms.Add.4000,fol.105v ; November 1665 +15 +! +! 1:1 ! GG ; 0 | |solut|fa|--| unison prime GAMMAut +! | | | | | | + 10/9 ! A\ ; 8 |mi|la|re| | | + 9/8 ! A ; 9 | | | |solut| + 32/27 ! Bb ; 13 |fa| | | | | + 5/4 ! B\ ; 17 | | |mi|la|re| + 4/3 ! C ; 22 |solut|fa|--| | + 45/32 ! C#\ ; 26 | | | | |mi| + 40/27 ! D\ ; 30 |la|re| | | | + 3/2 ! D ; 31 | | |solut fa| +128/81 ! Eb ; 35 |--| | | | | + 5/3 ! E\ ; 39 | |mi|la|re| | + 27/16 ! E ; 40 | | | | |sol + 16/9 ! F ; 44 |ut|fa|--| | | + 15/8 ! F#\ ; 48 | | |??|mi|fa| +160/81 ! G\ ; 52 |re| | | | | +! : | | | | | | + 2/1 ! G ; 53 | |solut|fa|--| octave diff --git a/scales/newts.scl b/scales/newts.scl new file mode 100644 index 0000000..acccea4 --- /dev/null +++ b/scales/newts.scl @@ -0,0 +1,46 @@ +! newts.scl +! +11-limit scale with boatload of neutral thirds +41 +! +32.91065 +50.80017 +83.50287 +116.45974 +149.89384 +182.87269 +199.63490 +233.54070 +266.22566 +299.83415 +316.84989 +349.84324 +383.18550 +400.34913 +449.39797 +466.56160 +499.90386 +532.89721 +549.91295 +583.52144 +616.20640 +650.11220 +666.87441 +699.85326 +733.28736 +766.24423 +798.94693 +816.83645 +849.74710 +883.17168 +899.88473 +933.63277 +966.38375 +999.89157 +1024.87355 +1049.85553 +1083.36335 +1116.11433 +1149.86237 +1166.57542 +2/1 diff --git a/scales/niederbobritzsch.scl b/scales/niederbobritzsch.scl new file mode 100644 index 0000000..c63f004 --- /dev/null +++ b/scales/niederbobritzsch.scl @@ -0,0 +1,17 @@ +! niederbobritzsch.scl +! +Gthel organ, Niederbobritzsch, 19th cent. from Klaus Walter, 1988 + 12 +! + 98.04500 + 202.44375 + 298.04500 + 399.02250 + 503.42125 + 600.48875 + 699.02250 + 798.04500 + 900.00000 + 1001.46625 + 1094.13500 + 2/1 diff --git a/scales/nikriz pentachord 13-limit.scl b/scales/nikriz pentachord 13-limit.scl new file mode 100644 index 0000000..03e7b76 --- /dev/null +++ b/scales/nikriz pentachord 13-limit.scl @@ -0,0 +1,9 @@ +! nikriz pentachord 13-limit.scl +! +Nikriz pentachord 32:36:39:45:48 + 4 +! + 9/8 + 39/32 + 45/32 + 3/2 diff --git a/scales/nikriz pentachord 29-limit.scl b/scales/nikriz pentachord 29-limit.scl new file mode 100644 index 0000000..af5f937 --- /dev/null +++ b/scales/nikriz pentachord 29-limit.scl @@ -0,0 +1,9 @@ +! nikriz pentachord 29-limit.scl +! +Nikriz pentachord 24:27:29:34:36 + 4 +! + 9/8 + 29/24 + 17/12 + 3/2 diff --git a/scales/nikriz pentachord 67-limit.scl b/scales/nikriz pentachord 67-limit.scl new file mode 100644 index 0000000..54a248a --- /dev/null +++ b/scales/nikriz pentachord 67-limit.scl @@ -0,0 +1,9 @@ +! nikriz pentachord 67-limit.scl +! +Nikriz pentachord 48:54:58:67:72 + 4 +! + 9/8 + 29/24 + 67/48 + 3/2 diff --git a/scales/nikriz pentachord 7-limit.scl b/scales/nikriz pentachord 7-limit.scl new file mode 100644 index 0000000..18a985e --- /dev/null +++ b/scales/nikriz pentachord 7-limit.scl @@ -0,0 +1,9 @@ +! nikriz pentachord 7-limit.scl +! +Nikriz pentachord 40:45:48:56:60 + 4 +! + 9/8 + 6/5 + 7/5 + 3/2 diff --git a/scales/norden.scl b/scales/norden.scl new file mode 100644 index 0000000..5146d8d --- /dev/null +++ b/scales/norden.scl @@ -0,0 +1,17 @@ +! norden.scl +! +Reconstructed Schnitger temperament, organ in Norden. Ortgies, 2002 + 12 +! + 85.53299 + 194.52600 + 32/27 + 389.05200 + 502.73700 + 583.57799 + 697.26300 + 787.48799 + 891.78900 + 1000.78200 + 4096/2187 + 2/1 diff --git a/scales/notchedcube.scl b/scales/notchedcube.scl new file mode 100644 index 0000000..033c642 --- /dev/null +++ b/scales/notchedcube.scl @@ -0,0 +1,32 @@ +! notchedcube.scl +Otonal tetrads sharing a note with the root tetrad, a notched chord cube +28 +! +49/48 +25/24 +21/20 +15/14 +35/32 +9/8 +8/7 +7/6 +6/5 +49/40 +5/4 +9/7 +21/16 +4/3 +7/5 +10/7 +35/24 +3/2 +49/32 +25/16 +8/5 +5/3 +12/7 +7/4 +25/14 +9/5 +15/8 +2/1 diff --git a/scales/novadene.scl b/scales/novadene.scl new file mode 100644 index 0000000..ed07ab6 --- /dev/null +++ b/scales/novadene.scl @@ -0,0 +1,17 @@ +! novadene.scl +! +Novadene, starling-tempered skew duodene in 185-tET tuning +12 +! +123.24324 +188.10811 +311.35135 +389.18919 +499.45946 +622.70270 +700.54054 +810.81081 +888.64865 +1011.89189 +1122.16216 +2/1 diff --git a/scales/novaro.scl b/scales/novaro.scl new file mode 100644 index 0000000..b6ac96d --- /dev/null +++ b/scales/novaro.scl @@ -0,0 +1,28 @@ +! novaro.scl +! +9-limit diamond with 21/20, 16/15, 15/8 and 40/21 added for evenness + 23 +! + 21/20 + 16/15 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 15/8 + 40/21 + 2/1 diff --git a/scales/novaro15.scl b/scales/novaro15.scl new file mode 100644 index 0000000..fd08406 --- /dev/null +++ b/scales/novaro15.scl @@ -0,0 +1,54 @@ +! novaro15.scl +! +1-15 diamond, see Novaro, 1927, Sistema Natural base del Natural-Aproximado, p + 49 +! + 16/15 + 15/14 + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 15/13 + 7/6 + 13/11 + 6/5 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 15/11 + 11/8 + 18/13 + 7/5 + 10/7 + 13/9 + 16/11 + 22/15 + 3/2 + 20/13 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 22/13 + 12/7 + 26/15 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 28/15 + 15/8 + 2/1 diff --git a/scales/novaro_eb.scl b/scales/novaro_eb.scl new file mode 100644 index 0000000..8ffd0d1 --- /dev/null +++ b/scales/novaro_eb.scl @@ -0,0 +1,17 @@ +! novaro_eb.scl +! +Novaro (?) equal beating 4/3 with stretched octave, almost pure 3/2 + 12 +! + 100.59143 + 200.22381 + 301.21327 + 401.21763 + 502.56285 + 602.89958 + 702.29381 + 803.05544 + 902.84690 + 1003.98852 + 1104.13506 + 1203.35143 diff --git a/scales/nufip15.scl b/scales/nufip15.scl new file mode 100644 index 0000000..8b13879 --- /dev/null +++ b/scales/nufip15.scl @@ -0,0 +1,20 @@ +! nufip15.scl +! +A 15-note lesfip mutant nusecond, target 11-limit diamond, error limit 12 cents + 15 +! + 44.85398 + 156.27185 + 200.77030 + 312.16415 + 387.79495 + 466.95289 + 544.35733 + 621.76177 + 700.91971 + 776.55051 + 887.94437 + 932.44281 + 1043.86068 + 1088.71467 + 2/1 diff --git a/scales/oconnell.scl b/scales/oconnell.scl new file mode 100644 index 0000000..353df39 --- /dev/null +++ b/scales/oconnell.scl @@ -0,0 +1,30 @@ +! oconnell.scl +! +Walter O'Connell, Pythagorean scale of 25 octaves reduced by Phi. XH 15 (1993) + 25 +! + 38.92318 + 69.09704 + 108.02022 + 138.19407 + 168.36793 + 207.29111 + 237.46496 + 267.63881 + 306.56200 + 336.73585 + 366.90970 + 405.83289 + 436.00674 + 474.92992 + 505.10378 + 535.27763 + 574.20081 + 604.37467 + 634.54852 + 673.47170 + 703.64555 + 733.81941 + 772.74259 + 802.91644 + 833.09030 diff --git a/scales/oconnell_11.scl b/scales/oconnell_11.scl new file mode 100644 index 0000000..5c2c93f --- /dev/null +++ b/scales/oconnell_11.scl @@ -0,0 +1,16 @@ +! oconnell_11.scl +! +Walter O'Connell, 11-note mode of 25-tone scale + 11 +! + 69.09704 + 168.36793 + 237.46496 + 306.56200 + 366.90970 + 474.92992 + 535.27763 + 604.37467 + 673.47170 + 772.74259 + 833.09030 diff --git a/scales/oconnell_14.scl b/scales/oconnell_14.scl new file mode 100644 index 0000000..c52d03f --- /dev/null +++ b/scales/oconnell_14.scl @@ -0,0 +1,19 @@ +! oconnell_14.scl +! +Walter O'Connell, 14-note mode of 25-tone scale + 14 +! + 69.09704 + 138.19407 + 168.36793 + 237.46496 + 306.56200 + 366.90970 + 436.00674 + 474.92992 + 535.27763 + 604.37467 + 673.47170 + 733.81941 + 772.74259 + 833.09030 diff --git a/scales/oconnell_7.scl b/scales/oconnell_7.scl new file mode 100644 index 0000000..dc5a579 --- /dev/null +++ b/scales/oconnell_7.scl @@ -0,0 +1,12 @@ +! oconnell_7.scl +! +Walter O'Connell, 7-note mode of 25-tone scale + 7 +! + 138.19407 + 237.46496 + 366.90970 + 474.92992 + 604.37467 + 703.64555 + 833.09030 diff --git a/scales/oconnell_9.scl b/scales/oconnell_9.scl new file mode 100644 index 0000000..0717974 --- /dev/null +++ b/scales/oconnell_9.scl @@ -0,0 +1,14 @@ +! oconnell_9.scl +! +Walter O'Connell, 9-tone mode of 25-tone scale + 9 +! + 108.02022 + 207.29111 + 267.63881 + 366.90970 + 474.92992 + 574.20081 + 634.54852 + 733.81941 + 833.09030 diff --git a/scales/oconnell_9a.scl b/scales/oconnell_9a.scl new file mode 100644 index 0000000..bcd2968 --- /dev/null +++ b/scales/oconnell_9a.scl @@ -0,0 +1,14 @@ +! oconnell_9a.scl +! +Walter O'Connell, 7+2 major mode analogy for 25-tone scale + 9 +! + 69.09704 + 168.36793 + 267.63881 + 366.90970 + 474.92992 + 535.27763 + 634.54852 + 733.81941 + 833.09030 diff --git a/scales/octasquare25.scl b/scales/octasquare25.scl new file mode 100644 index 0000000..2313693 --- /dev/null +++ b/scales/octasquare25.scl @@ -0,0 +1,29 @@ +! octasquare25.scl +5x5 generator square octagar tempered scale +25 +! +68.4275 +88.9570 +157.3845 +177.9139 +208.3998 +228.9292 +297.3567 +317.8862 +386.3137 +406.8431 +475.2707 +495.8001 +564.2277 +584.7571 +615.2429 +704.1999 +793.1569 +882.1138 +971.0708 +1001.5566 +1022.0861 +1090.5136 +1111.0430 +1179.4706 +2/1 diff --git a/scales/octocoh.scl b/scales/octocoh.scl new file mode 100644 index 0000000..eb3f720 --- /dev/null +++ b/scales/octocoh.scl @@ -0,0 +1,13 @@ +! octocoh.scl +! +Differentiall coherent octatonic with subharmonic 32 + 8 +! + 17/16 + 19/16 + 5/4 + 45/32 + 3/2 + 27/16 + 29/16 + 2/1 diff --git a/scales/octoid72.scl b/scales/octoid72.scl new file mode 100644 index 0000000..1484999 --- /dev/null +++ b/scales/octoid72.scl @@ -0,0 +1,76 @@ +! octoid72.scl +Octoid[72] in 224-et tuning +72 +! +16.071429 +32.142857 +48.214286 +64.285714 +85.714286 +101.785714 +117.857143 +133.928571 +150.000000 +166.071429 +182.142857 +198.214286 +214.285714 +235.714286 +251.785714 +267.857143 +283.928571 +300.000000 +316.071429 +332.142857 +348.214286 +364.285714 +385.714286 +401.785714 +417.857143 +433.928571 +450.000000 +466.071429 +482.142857 +498.214286 +514.285714 +535.714286 +551.785714 +567.857143 +583.928571 +600.000000 +616.071429 +632.142857 +648.214286 +664.285714 +685.714286 +701.785714 +717.857143 +733.928571 +750.000000 +766.071429 +782.142857 +798.214286 +814.285714 +835.714286 +851.785714 +867.857143 +883.928571 +900.000000 +916.071429 +932.142857 +948.214286 +964.285714 +985.714286 +1001.785714 +1017.857143 +1033.928571 +1050.000000 +1066.071429 +1082.142857 +1098.214286 +1114.285714 +1135.714286 +1151.785714 +1167.857143 +1183.928571 +2/1 diff --git a/scales/octone.scl b/scales/octone.scl new file mode 100644 index 0000000..4f1e17c --- /dev/null +++ b/scales/octone.scl @@ -0,0 +1,12 @@ +! octone.scl +octone around 60/49-7/4 interval +8 +! +15/14 +60/49 +5/4 +10/7 +3/2 +12/7 +7/4 +2/1 diff --git a/scales/octony_min.scl b/scales/octony_min.scl new file mode 100644 index 0000000..c3f55b1 --- /dev/null +++ b/scales/octony_min.scl @@ -0,0 +1,13 @@ +! OCTONY_MIN.scl +! +Octony on Harmonic Minor, from Palmer on an album of Turkish music + 8 +! + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 15/8 + 2/1 diff --git a/scales/octony_rot.scl b/scales/octony_rot.scl new file mode 100644 index 0000000..ce5fddf --- /dev/null +++ b/scales/octony_rot.scl @@ -0,0 +1,13 @@ +! octony_rot.scl +! +Rotated Octony on Harmonic Minor + 8 +! + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/octony_trans.scl b/scales/octony_trans.scl new file mode 100644 index 0000000..3afcae8 --- /dev/null +++ b/scales/octony_trans.scl @@ -0,0 +1,13 @@ +! OCTONY_trans.scl +! +Complex 10 of p. 115, an Octony based on Archytas's Enharmonic, + 8 +! + 28/27 + 16/15 + 5/4 + 4/3 + 25/16 + 45/28 + 5/3 + 2/1 diff --git a/scales/octony_trans2.scl b/scales/octony_trans2.scl new file mode 100644 index 0000000..56cb82f --- /dev/null +++ b/scales/octony_trans2.scl @@ -0,0 +1,13 @@ +! OCTONY_trans2.scl +! +Complex 6 of p. 115 based on Archytas's Enharmonic, an Octony + 8 +! + 28/27 + 16/15 + 135/112 + 243/196 + 9/7 + 4/3 + 27/14 + 2/1 diff --git a/scales/octony_trans3.scl b/scales/octony_trans3.scl new file mode 100644 index 0000000..ce3ec8c --- /dev/null +++ b/scales/octony_trans3.scl @@ -0,0 +1,13 @@ +! octony_trans3.scl +! +Complex 5 of p. 115 based on Archytas's Enharmonic, an Octony + 8 +! + 28/27 + 16/15 + 75/64 + 135/112 + 5/4 + 4/3 + 15/8 + 2/1 diff --git a/scales/octony_trans4.scl b/scales/octony_trans4.scl new file mode 100644 index 0000000..6af3e87 --- /dev/null +++ b/scales/octony_trans4.scl @@ -0,0 +1,13 @@ +! OCTONY_TRANS4.scl +! +Complex 11 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones + 8 +! + 28/27 + 16/15 + 9/7 + 4/3 + 45/28 + 81/49 + 12/7 + 2/1 diff --git a/scales/octony_trans5.scl b/scales/octony_trans5.scl new file mode 100644 index 0000000..e100085 --- /dev/null +++ b/scales/octony_trans5.scl @@ -0,0 +1,13 @@ +! OCTONY_TRANS5.scl +! +Complex 15 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones + 8 +! + 28/27 + 16/15 + 175/144 + 5/4 + 35/27 + 4/3 + 35/18 + 2/1 diff --git a/scales/octony_trans6.scl b/scales/octony_trans6.scl new file mode 100644 index 0000000..e880854 --- /dev/null +++ b/scales/octony_trans6.scl @@ -0,0 +1,13 @@ +! OCTONY_TRANS6.scl +! +Complex 14 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones + 8 +! + 36/35 + 28/27 + 16/15 + 9/7 + 324/245 + 4/3 + 48/35 + 2/1 diff --git a/scales/octony_u.scl b/scales/octony_u.scl new file mode 100644 index 0000000..2913074 --- /dev/null +++ b/scales/octony_u.scl @@ -0,0 +1,13 @@ +! octony_u.scl +! +7)8 octony from 1.3.5.7.9.11.13.15, 1.3.5.7.9.11.13 tonic (subharmonics 8-16) + 8 +! + 15/14 + 15/13 + 5/4 + 15/11 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/odd1.scl b/scales/odd1.scl new file mode 100644 index 0000000..8727392 --- /dev/null +++ b/scales/odd1.scl @@ -0,0 +1,17 @@ +! odd1.scl +! +ODD-1 + 12 +! + 25/24 + 6/5 + 5/4 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/odd2.scl b/scales/odd2.scl new file mode 100644 index 0000000..c6d955d --- /dev/null +++ b/scales/odd2.scl @@ -0,0 +1,17 @@ +! odd2.scl +! +ODD-2 + 12 +! + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/odonnell.scl b/scales/odonnell.scl new file mode 100644 index 0000000..97f6875 --- /dev/null +++ b/scales/odonnell.scl @@ -0,0 +1,17 @@ +! odonnell.scl +! +John O'Donnell Bach temperament (2006), Early Music 34/4, Nov. 2006 + 12 +! + 96.09000 + 196.09000 + 296.09000 + 396.09000 + 4/3 + 596.09000 + 698.04500 + 796.09000 + 894.13500 + 16/9 + 1094.13500 + 2/1 diff --git a/scales/oettingen.scl b/scales/oettingen.scl new file mode 100644 index 0000000..93658ba --- /dev/null +++ b/scales/oettingen.scl @@ -0,0 +1,58 @@ +! oettingen.scl +! +von Oettingen's Orthotonophonium tuning + 53 +! + 81/80 + 128/125 + 25/24 + 135/128 + 16/15 + 27/25 + 1125/1024 + 10/9 + 9/8 + 729/640 + 144/125 + 75/64 + 1215/1024 + 6/5 + 243/200 + 10125/8192 + 5/4 + 81/64 + 32/25 + 162/125 + 675/512 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 729/512 + 36/25 + 375/256 + 6075/4096 + 3/2 + 243/160 + 192/125 + 25/16 + 405/256 + 8/5 + 81/50 + 3375/2048 + 5/3 + 27/16 + 128/75 + 216/125 + 225/128 + 16/9 + 9/5 + 729/400 + 30375/16384 + 15/8 + 243/128 + 48/25 + 125/64 + 2025/1024 + 2/1 diff --git a/scales/oettingen2.scl b/scales/oettingen2.scl new file mode 100644 index 0000000..b5742a7 --- /dev/null +++ b/scales/oettingen2.scl @@ -0,0 +1,58 @@ +! OETTINGEN2.scl +! +von Oettingen's Orthotonophonium tuning with central 1/1 + 53 +! + 81/80 + 128/125 + 25/24 + 135/128 + 16/15 + 27/25 + 1125/1024 + 10/9 + 9/8 + 256/225 + 144/125 + 75/64 + 32/27 + 6/5 + 4096/3375 + 100/81 + 5/4 + 81/64 + 32/25 + 125/96 + 675/512 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 40/27 + 3/2 + 1024/675 + 192/125 + 25/16 + 128/81 + 8/5 + 81/50 + 3375/2048 + 5/3 + 27/16 + 128/75 + 125/72 + 225/128 + 16/9 + 9/5 + 2048/1125 + 50/27 + 15/8 + 256/135 + 48/25 + 125/64 + 160/81 + 2/1 diff --git a/scales/ogr10.scl b/scales/ogr10.scl new file mode 100644 index 0000000..a0c335b --- /dev/null +++ b/scales/ogr10.scl @@ -0,0 +1,15 @@ +! ogr10.scl +! +Optimal Golomb Ruler of 10 segments, length 72 + 10 +! + 16.66667 + 66.66667 + 216.66667 + 466.66667 + 550.00000 + 783.33333 + 900.00000 + 1066.66667 + 1166.66667 + 2/1 diff --git a/scales/ogr10a.scl b/scales/ogr10a.scl new file mode 100644 index 0000000..8d1c9e8 --- /dev/null +++ b/scales/ogr10a.scl @@ -0,0 +1,15 @@ +! ogr10a.scl +! +2nd Optimal Golomb Ruler of 10 segments, length 72 + 10 +! + 16.66667 + 150.00000 + 316.66667 + 400.00000 + 516.66667 + 866.66667 + 933.33333 + 966.66667 + 1150.00000 + 2/1 diff --git a/scales/ogr11.scl b/scales/ogr11.scl new file mode 100644 index 0000000..c1a1b7d --- /dev/null +++ b/scales/ogr11.scl @@ -0,0 +1,16 @@ +! ogr11.scl +! +Optimal Golomb Ruler of 11 segments, length 85 + 11 +! + 28.23529 + 84.70588 + 338.82353 + 409.41176 + 564.70588 + 607.05882 + 776.47059 + 960.00000 + 1058.82353 + 1072.94118 + 2/1 diff --git a/scales/ogr12.scl b/scales/ogr12.scl new file mode 100644 index 0000000..33a17cd --- /dev/null +++ b/scales/ogr12.scl @@ -0,0 +1,17 @@ +! ogr12.scl +! +Optimal Golomb Ruler of 12 segments, length 106 + 12 +! + 22.64151 + 56.60377 + 283.01887 + 418.86792 + 486.79245 + 667.92453 + 792.45283 + 962.26415 + 1007.54717 + 1109.43396 + 1120.75472 + 2/1 diff --git a/scales/ogr2.scl b/scales/ogr2.scl new file mode 100644 index 0000000..684f5ca --- /dev/null +++ b/scales/ogr2.scl @@ -0,0 +1,7 @@ +! ogr2.scl +! +Optimal Golomb Ruler of 2 segments, length 3 + 2 +! + 400.00000 + 2/1 diff --git a/scales/ogr3.scl b/scales/ogr3.scl new file mode 100644 index 0000000..60de9e7 --- /dev/null +++ b/scales/ogr3.scl @@ -0,0 +1,8 @@ +! ogr3.scl +! +Optimal Golomb Ruler of 3 segments, length 6 + 3 +! + 200.00000 + 800.00000 + 2/1 diff --git a/scales/ogr4.scl b/scales/ogr4.scl new file mode 100644 index 0000000..1b8fbfc --- /dev/null +++ b/scales/ogr4.scl @@ -0,0 +1,9 @@ +! ogr4.scl +! +Optimal Golomb Ruler of 4 segments, length 11 + 4 +! + 109.09091 + 436.36364 + 981.81818 + 2/1 diff --git a/scales/ogr4a.scl b/scales/ogr4a.scl new file mode 100644 index 0000000..1beaa00 --- /dev/null +++ b/scales/ogr4a.scl @@ -0,0 +1,9 @@ +! ogr4a.scl +! +2nd Optimal Golomb Ruler of 4 segments, length 11 + 4 +! + 218.18182 + 763.63636 + 872.72727 + 2/1 diff --git a/scales/ogr5.scl b/scales/ogr5.scl new file mode 100644 index 0000000..fea7500 --- /dev/null +++ b/scales/ogr5.scl @@ -0,0 +1,10 @@ +! ogr5.scl +! +Optimal Golomb Ruler of 5 segments, length 17 + 5 +! + 70.58824 + 282.35294 + 705.88235 + 847.05882 + 2/1 diff --git a/scales/ogr5a.scl b/scales/ogr5a.scl new file mode 100644 index 0000000..c916e36 --- /dev/null +++ b/scales/ogr5a.scl @@ -0,0 +1,10 @@ +! ogr5a.scl +! +2nd Optimal Golomb Ruler of 5 segments, length 17 + 5 +! + 70.58824 + 282.35294 + 705.88235 + 1058.82353 + 2/1 diff --git a/scales/ogr5b.scl b/scales/ogr5b.scl new file mode 100644 index 0000000..a41661b --- /dev/null +++ b/scales/ogr5b.scl @@ -0,0 +1,10 @@ +! ogr5b.scl +! +3rd Optimal Golomb Ruler of 5 segments, length 17 + 5 +! + 70.58824 + 564.70588 + 847.05882 + 988.23529 + 2/1 diff --git a/scales/ogr5c.scl b/scales/ogr5c.scl new file mode 100644 index 0000000..c96c9bd --- /dev/null +++ b/scales/ogr5c.scl @@ -0,0 +1,10 @@ +! ogr5c.scl +! +4th Optimal Golomb Ruler of 5 segments, length 17 + 5 +! + 70.58824 + 564.70588 + 776.47059 + 917.64706 + 2/1 diff --git a/scales/ogr6.scl b/scales/ogr6.scl new file mode 100644 index 0000000..21bc3b0 --- /dev/null +++ b/scales/ogr6.scl @@ -0,0 +1,11 @@ +! ogr6.scl +! +Optimal Golomb Ruler of 6 segments, length 25 + 6 +! + 48.00000 + 192.00000 + 480.00000 + 864.00000 + 1104.00000 + 2/1 diff --git a/scales/ogr6a.scl b/scales/ogr6a.scl new file mode 100644 index 0000000..acbe06b --- /dev/null +++ b/scales/ogr6a.scl @@ -0,0 +1,11 @@ +! ogr6a.scl +! +2nd Optimal Golomb Ruler of 6 segments, length 25 + 6 +! + 96.00000 + 144.00000 + 480.00000 + 768.00000 + 1008.00000 + 2/1 diff --git a/scales/ogr6b.scl b/scales/ogr6b.scl new file mode 100644 index 0000000..ec2abe2 --- /dev/null +++ b/scales/ogr6b.scl @@ -0,0 +1,11 @@ +! ogr6b.scl +! +3rd Optimal Golomb Ruler of 6 segments, length 25 + 6 +! + 48.00000 + 528.00000 + 768.00000 + 912.00000 + 1104.00000 + 2/1 diff --git a/scales/ogr6c.scl b/scales/ogr6c.scl new file mode 100644 index 0000000..73ddf2d --- /dev/null +++ b/scales/ogr6c.scl @@ -0,0 +1,11 @@ +! ogr6c.scl +! +4th Optimal Golomb Ruler of 6 segments, length 25 + 6 +! + 48.00000 + 336.00000 + 528.00000 + 960.00000 + 1104.00000 + 2/1 diff --git a/scales/ogr6d.scl b/scales/ogr6d.scl new file mode 100644 index 0000000..31d1caf --- /dev/null +++ b/scales/ogr6d.scl @@ -0,0 +1,11 @@ +! ogr6d.scl +! +5th Optimal Golomb Ruler of 6 segments, length 25 + 6 +! + 96.00000 + 336.00000 + 624.00000 + 1008.00000 + 1056.00000 + 2/1 diff --git a/scales/ogr7.scl b/scales/ogr7.scl new file mode 100644 index 0000000..20a72cb --- /dev/null +++ b/scales/ogr7.scl @@ -0,0 +1,12 @@ +! ogr7.scl +! +Optimal Golomb Ruler of 7 segments, length 34 + 7 +! + 35.29412 + 141.17647 + 317.64706 + 529.41176 + 776.47059 + 1129.41176 + 2/1 diff --git a/scales/ogr8.scl b/scales/ogr8.scl new file mode 100644 index 0000000..109189d --- /dev/null +++ b/scales/ogr8.scl @@ -0,0 +1,13 @@ +! ogr8.scl +! +Optimal Golomb Ruler of 8 segments, length 44 + 8 +! + 27.27273 + 136.36364 + 327.27273 + 681.81818 + 736.36364 + 954.54545 + 1118.18182 + 2/1 diff --git a/scales/ogr9.scl b/scales/ogr9.scl new file mode 100644 index 0000000..b9d8842 --- /dev/null +++ b/scales/ogr9.scl @@ -0,0 +1,14 @@ +! ogr9.scl +! +Optimal Golomb Ruler of 9 segments, length 55 + 9 +! + 21.81818 + 130.90909 + 218.18182 + 501.81818 + 567.27273 + 741.81818 + 894.54545 + 1156.36364 + 2/1 diff --git a/scales/oktone.scl b/scales/oktone.scl new file mode 100644 index 0000000..15b6669 --- /dev/null +++ b/scales/oktone.scl @@ -0,0 +1,14 @@ +! oktone.scl +! +202-tET tempering of octone (15/14 60/49 5/4 10/7 3/2 12/7 7/4 2) +! x^8-23*x^6-56*x^5-27*x^4+24*x^3+12*x^2 + 8 +! +118.81188 +350.49505 +386.13861 +617.82178 +700.99010 +932.67327 +968.31683 +2/1 diff --git a/scales/oldani.scl b/scales/oldani.scl new file mode 100644 index 0000000..6b93e43 --- /dev/null +++ b/scales/oldani.scl @@ -0,0 +1,17 @@ +! oldani.scl +! +5-limit JI scale by Norbert L. Oldani (1987), Interval 5(3), p.10-11 + 12 +! + 25/24 + 9/8 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/oljare.scl b/scales/oljare.scl new file mode 100644 index 0000000..f712fa5 --- /dev/null +++ b/scales/oljare.scl @@ -0,0 +1,17 @@ +! oljare.scl +! +Mats ljare, scale for "Tampere" (2001) + 12 +! + 35/32 + 7/6 + 5/4 + 4/3 + 35/24 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 35/18 + 2/1 diff --git a/scales/oljare17.scl b/scales/oljare17.scl new file mode 100644 index 0000000..e439c25 --- /dev/null +++ b/scales/oljare17.scl @@ -0,0 +1,13 @@ +! oljare17.scl +! +Mats ljare, scale for "Fafner" (2001), MOS in 17-tET + 8 +! + 70.58824 + 352.94118 + 423.52941 + 705.88235 + 776.47059 + 847.05882 + 1129.41176 + 2/1 diff --git a/scales/olympos.scl b/scales/olympos.scl new file mode 100644 index 0000000..95e0d98 --- /dev/null +++ b/scales/olympos.scl @@ -0,0 +1,10 @@ +! Olympos.scl +! +Scale of ancient Greek flutist Olympos, 6th century BC as reported by Partch + 5 +! + 16/15 + 4/3 + 64/45 + 16/9 + 2/1 diff --git a/scales/omaha.scl b/scales/omaha.scl new file mode 100644 index 0000000..61faf4a --- /dev/null +++ b/scales/omaha.scl @@ -0,0 +1,16 @@ +! omaha.scl +Omaha 2.3.11 scale +12 +! +12/11 +9/8 +32/27 +11/9 +4/3 +11/8 +3/2 +18/11 +27/16 +16/9 +11/6 +2/1 diff --git a/scales/opelt.scl b/scales/opelt.scl new file mode 100644 index 0000000..ae5aaba --- /dev/null +++ b/scales/opelt.scl @@ -0,0 +1,24 @@ +! opelt.scl +! +Friederich Wilhelm Opelt 19-tone + 19 +! + 25/24 + 27/25 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/organ1373a.scl b/scales/organ1373a.scl new file mode 100644 index 0000000..86ce2c7 --- /dev/null +++ b/scales/organ1373a.scl @@ -0,0 +1,17 @@ +! organ1373a.scl +! +English organ tuning (1373) with 18:17:16 ficta semitones (Eb-G#) + 12 +! + 18/17 + 9/8 + 81/68 + 81/64 + 4/3 + 24/17 + 3/2 + 27/17 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/organ1373b.scl b/scales/organ1373b.scl new file mode 100644 index 0000000..bb06e59 --- /dev/null +++ b/scales/organ1373b.scl @@ -0,0 +1,17 @@ +! organ1373b.scl +! +English organ tuning (1373) with 18:17:16 accidental semitones (Eb-G#), Pythagorean whole tones + 12 +! + 18/17 + 9/8 + 81/68 + 81/64 + 4/3 + 24/17 + 3/2 + 27/17 + 27/16 + 243/136 + 243/128 + 2/1 diff --git a/scales/orwell13eb.scl b/scales/orwell13eb.scl new file mode 100644 index 0000000..8a28d4d --- /dev/null +++ b/scales/orwell13eb.scl @@ -0,0 +1,17 @@ +! orwell13eb.scl +Equal beating version of Orwell[13], x^10 + 2x^3 - 8 generator +13 +! +43.573939095570593791 +157.54107727531699652 +271.50821545506339932 +315.08215455063399307 +429.04929273038039591 +543.01643091012679865 +586.59037000569739241 +700.55750818544379516 +814.52464636519019800 +858.09858546076079170 +972.06572364050719448 +1086.0328618202535973 +2/1 diff --git a/scales/orwell22.scl b/scales/orwell22.scl new file mode 100644 index 0000000..7ace0c1 --- /dev/null +++ b/scales/orwell22.scl @@ -0,0 +1,26 @@ +! orwell22.scl +Orwell[22] 7-limit 6 cents lesfip optimized + 22 +! +42.2392 +114.6679 +156.5802 +198.8363 +271.7320 +313.5924 +385.9890 +428.0889 +469.4472 +542.8804 +584.9577 +657.2815 +699.3588 +772.7920 +814.1503 +856.2502 +928.6468 +970.5072 +1043.4029 +1085.6590 +1127.5713 +2/1 diff --git a/scales/orwell9-12.scl b/scales/orwell9-12.scl new file mode 100644 index 0000000..8868213 --- /dev/null +++ b/scales/orwell9-12.scl @@ -0,0 +1,16 @@ +! orwell9-12.scl +Twelve notes of Orwell[9], POTE tuning +12 +! +157.13063 +157.13063 +271.42613 +428.55676 +542.85225 +542.85225 +699.98289 +814.27838 +971.40901 +971.40901 +1085.70451 +2/1 diff --git a/scales/orwellismic22_11.scl b/scales/orwellismic22_11.scl new file mode 100644 index 0000000..782a857 --- /dev/null +++ b/scales/orwellismic22_11.scl @@ -0,0 +1,52 @@ +! orwellismic22_11.scl +Unidecimal Orwellismic[22] {1728/1715, 540/539} hobbit in 111-tET +22 +! +43.24324 +108.10811 +162.16216 +227.02703 +270.27027 +313.51351 +389.18919 +432.43243 +497.29730 +540.54054 +583.78378 +659.45946 +702.70270 +767.56757 +810.81081 +886.48649 +929.72973 +972.97297 +1037.83784 +1081.08108 +1156.75676 +2/1 +! +! preorwellismic22_11 {2, 3, 7} transversal +! 22 +! +! 49/48 +! 343/324 +! 54/49 +! 8/7 +! 7/6 +! 343/288 +! 432/343 +! 9/7 +! 4/3 +! 49/36 +! 2401/1728 +! 72/49 +! 3/2 +! 14/9 +! 343/216 +! 576/343 +! 12/7 +! 7/4 +! 49/27 +! 2401/1296 +! 96/49 +! 2/1 diff --git a/scales/orwellismic9.scl b/scales/orwellismic9.scl new file mode 100644 index 0000000..aedadd4 --- /dev/null +++ b/scales/orwellismic9.scl @@ -0,0 +1,28 @@ +! orwellismic9.scl +Orwellismic[9] 1728/1715 hobbit in 142-tET +9 +! +160.56338 +270.42254 +430.98592 +498.59155 +701.40845 +769.01408 +929.57746 +1039.43662 +2/1 +! +!! preorwellismic9.scl +!! +! Preorwellismic[9] {2, 3, 7} transversal +! 9 +!! +! 54/49 +! 7/6 +! 9/7 +! 4/3 +! 3/2 +! 14/9 +! 12/7 +! 49/27 +! 2/1 diff --git a/scales/p4.scl b/scales/p4.scl new file mode 100644 index 0000000..6f77264 --- /dev/null +++ b/scales/p4.scl @@ -0,0 +1,9 @@ +! p4.scl +! +First 4 primes, for testing tempering + 4 +! + 2/1 + 3/1 + 5/1 + 7/1 diff --git a/scales/p5.scl b/scales/p5.scl new file mode 100644 index 0000000..438fc17 --- /dev/null +++ b/scales/p5.scl @@ -0,0 +1,10 @@ +! p5.scl +! +First 5 primes, for testing tempering + 5 +! + 2/1 + 3/1 + 5/1 + 7/1 + 11/1 diff --git a/scales/p5a.scl b/scales/p5a.scl new file mode 100644 index 0000000..7e60584 --- /dev/null +++ b/scales/p5a.scl @@ -0,0 +1,14 @@ +! p5a.scl +! +First 5 primes plus superparticulars, for testing tempering + 9 +! + 2/1 + 3/1 + 5/1 + 7/1 + 11/1 + 3/2 + 5/4 + 7/6 + 11/10 diff --git a/scales/p6.scl b/scales/p6.scl new file mode 100644 index 0000000..d99d618 --- /dev/null +++ b/scales/p6.scl @@ -0,0 +1,11 @@ +! p6.scl +! +First 6 primes, for testing tempering + 6 +! + 2/1 + 3/1 + 5/1 + 7/1 + 11/1 + 13/1 diff --git a/scales/p6a.scl b/scales/p6a.scl new file mode 100644 index 0000000..562d9bd --- /dev/null +++ b/scales/p6a.scl @@ -0,0 +1,16 @@ +! p6a.scl +! +First 6 primes plus superparticulars, for testing tempering + 11 +! + 2/1 + 3/1 + 5/1 + 7/1 + 11/1 + 13/1 + 3/2 + 5/4 + 7/6 + 11/10 + 13/12 diff --git a/scales/pagano_b.scl b/scales/pagano_b.scl new file mode 100644 index 0000000..3c83b45 --- /dev/null +++ b/scales/pagano_b.scl @@ -0,0 +1,17 @@ +! pagano_b.scl +! +Pat Pagano and David Beardsley, 17-limit scale, TL 27-2-2001 + 12 +! + 17/16 + 425/384 + 153/128 + 51/40 + 1377/1024 + 17/12 + 119/80 + 51/32 + 17/10 + 85/48 + 119/64 + 2/1 diff --git a/scales/pajara_mm.scl b/scales/pajara_mm.scl new file mode 100644 index 0000000..6fb615b --- /dev/null +++ b/scales/pajara_mm.scl @@ -0,0 +1,27 @@ +! pajara_mm.scl +! +Paul Erlich's Pajara or Twintone with minimax optimal generator and just octave + 22 +! + 56.17800 + 109.36300 + 165.54200 + 218.72600 + 274.90500 + 328.08900 + 384.26800 + 437.45200 + 493.63100 + 546.81500 + 600.00000 + 656.17800 + 709.36300 + 765.54200 + 818.72600 + 874.90500 + 928.08900 + 984.26800 + 1037.45200 + 1093.63100 + 1146.81500 + 2/1 diff --git a/scales/pajara_rms.scl b/scales/pajara_rms.scl new file mode 100644 index 0000000..ff2434b --- /dev/null +++ b/scales/pajara_rms.scl @@ -0,0 +1,27 @@ +! pajara_rms.scl +! +Paul Erlich's Pajara or Twintone with RMS optimal generator and just octave + 22 +! + 52.88600 + 108.81400 + 161.70000 + 217.62900 + 270.51500 + 326.44300 + 379.32900 + 435.25700 + 488.14300 + 544.07200 + 600.00000 + 652.88600 + 708.81400 + 761.70000 + 817.62900 + 870.51500 + 926.44300 + 979.32900 + 1035.25700 + 1088.14300 + 1144.07200 + 2/1 diff --git a/scales/pajara_top.scl b/scales/pajara_top.scl new file mode 100644 index 0000000..eadca13 --- /dev/null +++ b/scales/pajara_top.scl @@ -0,0 +1,27 @@ +! pajara_top.scl +! +Paul Erlich's Pajara, TOP tuning + 22 +! + 40.95257 + 106.56655 + 172.18053 + 213.13309 + 278.74707 + 319.69964 + 385.31362 + 426.26618 + 491.88016 + 532.83273 + 598.44671 + 639.39928 + 705.01326 + 770.62724 + 811.57980 + 877.19378 + 918.14635 + 983.76033 + 1024.71289 + 1090.32688 + 1131.27944 + 1196.89342 diff --git a/scales/palace.scl b/scales/palace.scl new file mode 100644 index 0000000..2da02a6 --- /dev/null +++ b/scales/palace.scl @@ -0,0 +1,17 @@ +! palace.scl +! +Palace mode+ + 12 +! + 18/17 + 9/8 + 8/7 + 9/7 + 4/3 + 10/7 + 3/2 + 36/23 + 18/11 + 12/7 + 9/5 + 2/1 diff --git a/scales/palace2.scl b/scales/palace2.scl new file mode 100644 index 0000000..3af840a --- /dev/null +++ b/scales/palace2.scl @@ -0,0 +1,12 @@ +! palace2.scl +! +Byzantine Palace mode, 17-limit + 7 +! + 18/17 + 9/7 + 4/3 + 3/2 + 18/11 + 9/5 + 2/1 diff --git a/scales/panpipe1.scl b/scales/panpipe1.scl new file mode 100644 index 0000000..2b9f97d --- /dev/null +++ b/scales/panpipe1.scl @@ -0,0 +1,11 @@ +! panpipe1.scl +! +Palina panpipe of Solomon Islands. 1/1=f+45c. From Ocora CD Guadalcanal + 6 +! + 270.00000 + 487.00000 + 676.00000 + 836.00000 + 1035.00000 + 2/1 diff --git a/scales/panpipe2.scl b/scales/panpipe2.scl new file mode 100644 index 0000000..59ae366 --- /dev/null +++ b/scales/panpipe2.scl @@ -0,0 +1,20 @@ +! panpipe2.scl +! +Lalave panpipe of Solomon Islands. 1/1=f'+47c. + 15 +! + 245.00000 + 456.00000 + 689.00000 + 883.00000 + 1056.00000 + 1256.00000 + 1457.00000 + 1643.00000 + 1822.00000 + 1976.00000 + 2169.00000 + 2285.00000 + 2444.00000 + 2606.00000 + 2854.00000 diff --git a/scales/panpipe3.scl b/scales/panpipe3.scl new file mode 100644 index 0000000..4348f1b --- /dev/null +++ b/scales/panpipe3.scl @@ -0,0 +1,20 @@ +! panpipe3.scl +! +Tenaho panpipe of Solomon Islands. 1/1=f'+67c. + 15 +! + 251.00000 + 461.00000 + 658.00000 + 873.00000 + 1061.00000 + 1261.00000 + 1443.00000 + 1648.00000 + 1835.00000 + 1982.00000 + 2151.00000 + 2311.00000 + 2435.00000 + 2571.00000 + 2776.00000 diff --git a/scales/parachrom.scl b/scales/parachrom.scl new file mode 100644 index 0000000..7424922 --- /dev/null +++ b/scales/parachrom.scl @@ -0,0 +1,12 @@ +! parachrom.scl +! +Parachromatic, new genus 5 + 5 + 20 parts + 7 +! + 83.33333 + 166.66667 + 500.00000 + 700.00000 + 783.33333 + 866.66667 + 2/1 diff --git a/scales/parakleismic.scl b/scales/parakleismic.scl new file mode 100644 index 0000000..9383481 --- /dev/null +++ b/scales/parakleismic.scl @@ -0,0 +1,47 @@ +! parakleismic.scl +! +Parakleismic temperament, g=315.250913, 5-limit + 42 +! + 50.77100 + 61.00365 + 111.77465 + 122.00730 + 132.23996 + 183.01096 + 193.24361 + 244.01461 + 254.24726 + 305.01826 + 315.25091 + 366.02191 + 376.25457 + 386.48722 + 437.25822 + 447.49087 + 498.26187 + 508.49452 + 559.26552 + 569.49817 + 620.26917 + 630.50183 + 681.27283 + 691.50548 + 701.73813 + 752.50913 + 762.74178 + 813.51278 + 823.74543 + 874.51643 + 884.74909 + 935.52009 + 945.75274 + 996.52374 + 1006.75639 + 1016.98904 + 1067.76004 + 1077.99270 + 1128.76370 + 1138.99635 + 1189.76735 + 2/1 diff --git a/scales/parapyth12-7.scl b/scales/parapyth12-7.scl new file mode 100644 index 0000000..2865f3a --- /dev/null +++ b/scales/parapyth12-7.scl @@ -0,0 +1,19 @@ +! parapyth12-7.scl +! +2.3.7 transversal of parapyth12 +! 3-distributional even SLSLSMLSLSLM +! <<1 -2 -6||: -6 to 5; <<1 10 13||: 0 to 11; <<2 8 7||: 0 to 10 even + 12 +! + 28/27 + 9/8 + 7/6 + 81/64 + 21/16 + 112/81 + 3/2 + 14/9 + 27/16 + 7/4 + 243/128 + 2/1 diff --git a/scales/parapyth12.scl b/scales/parapyth12.scl new file mode 100644 index 0000000..f10f845 --- /dev/null +++ b/scales/parapyth12.scl @@ -0,0 +1,17 @@ +! parapyth12.scl +! +A triple Fokker block of the 2.3.7.11.13 temperament called Parapyth, TOP tuning + 12 +! + 58.23604 + 206.95866 + 265.19471 + 413.91733 + 472.15337 + 554.50965 + 703.23227 + 761.46832 + 910.19094 + 968.42698 + 1117.14960 + 1199.50588 diff --git a/scales/parapyth12trans.scl b/scales/parapyth12trans.scl new file mode 100644 index 0000000..5cdfa17 --- /dev/null +++ b/scales/parapyth12trans.scl @@ -0,0 +1,17 @@ +! parapyth12trans.scl +! +A JI transversal of parapyth17.scl for use in calculations. If you temper out 352/351 and 364/363 it becomes parapyth17 + 12 +! + 28/27 + 9/8 + 7/6 + 14/11 + 21/16 + 11/8 + 3/2 + 14/9 + 22/13 + 7/4 + 21/11 + 2/1 diff --git a/scales/parapyth17-7.scl b/scales/parapyth17-7.scl new file mode 100644 index 0000000..65dfe84 --- /dev/null +++ b/scales/parapyth17-7.scl @@ -0,0 +1,24 @@ +! parapyth17-7.scl +! +2.3.7 transversal of parapyth17 +! Scale has trivalence property MSLMLSMLSLMLSMLSL +! <<1 -2 -6||: -9 to 7; <<2 13 15||: -1 to 15; <<1 15 21||: 0 to 16 + 17 +! + 28/27 + 2187/2048 + 9/8 + 7/6 + 896/729 + 81/64 + 21/16 + 112/81 + 729/512 + 3/2 + 14/9 + 3584/2187 + 27/16 + 7/41 + 448/243 + 243/128 + 2/1 diff --git a/scales/parapyth17trans.scl b/scales/parapyth17trans.scl new file mode 100644 index 0000000..7bca99b --- /dev/null +++ b/scales/parapyth17trans.scl @@ -0,0 +1,22 @@ +! parapyth17trans.scl +! +A JI transversal of parapyth17.scl for use in calculations. If you temper out 352/351 and 364/363 it becomes parapyth17 + 17 +! + 28/27 + 14/13 + 9/8 + 7/6 + 11/9 + 14/11 + 21/16 + 11/8 + 56/39 + 3/2 + 14/9 + 13/8 + 22/13 + 7/4 + 11/6 + 21/11 + 2/1 diff --git a/scales/parizek_13lqmt.scl b/scales/parizek_13lqmt.scl new file mode 100644 index 0000000..7f9a0ad --- /dev/null +++ b/scales/parizek_13lqmt.scl @@ -0,0 +1,17 @@ +! parizek_13lqmt.scl +13-limit Quasi-meantone (darker) +! April 2003 - Petr Parizek +12 +! +5488/5265 +392/351 +140/117 +56/45 +4/3 +490/351 +175/117 +14/9 +5/3 +25/14 +1960/1053 +2/1 diff --git a/scales/parizek_17lqmt.scl b/scales/parizek_17lqmt.scl new file mode 100644 index 0000000..47ebf0e --- /dev/null +++ b/scales/parizek_17lqmt.scl @@ -0,0 +1,22 @@ +! parizek_17lqmt.scl +!April 2004 - Petr Parizek +!To tune the scale by ear, please choose the intervals in the following order: +!Eb-F#, Eb-G, G-B, Eb-G#, G#-Bb, Bb-D, Bb-F, G#-C#, G#-E, E-A, A-C. +!It's good to begin the tuning in some higher octaves to be able to hear +!the characteristic timbre of the Eb-G# interval (i.e. 17/13 in this scale). +! +17-limit Quasi-meantone + 12 +! + 25/24 + 125/112 + 325/272 + 5/4 + 75/56 + 2275/1632 + 1625/1088 + 25/16 + 5/3 + 25/14 + 8125/4352 + 2/1 diff --git a/scales/parizek_7lmtd1.scl b/scales/parizek_7lmtd1.scl new file mode 100644 index 0000000..5d6dda3 --- /dev/null +++ b/scales/parizek_7lmtd1.scl @@ -0,0 +1,18 @@ +! parizek_7lmtd1.scl +! March 2002 - Petr Parizek +! Use SET MIDDLE 62 +7-limit Quasi-Meantone No. 1, 1/1=D +! +12 +15/14 +28/25 +6/5 +5/4 +75/56 +7/5 +3/2 +8/5 +375/224 +224/125 +15/8 +2/1 diff --git a/scales/parizek_7lqmtd2.scl b/scales/parizek_7lqmtd2.scl new file mode 100644 index 0000000..f666367 --- /dev/null +++ b/scales/parizek_7lqmtd2.scl @@ -0,0 +1,21 @@ +! parizek_7lqmtd2.scl +!June 2004 - Petr Parizek +!Use SET MIDDLE 62 +!To tune the scale by ear, please choose the intervals in this order: +!D-F#, D-Bb, Bb-F, Bb-G#, G#-C#, C#-A, A-E, E-C, F#-Eb, Eb-G, G-B. +! +7-limit Quasi-meantone no. 2 (1/1 is D) +12 +! +15/14 +28/25 +6/5 +5/4 +75/56 +7/5 +112/75 +8/5 +375/224 +224/125 +28/15 +2/1 diff --git a/scales/parizek_cirot.scl b/scales/parizek_cirot.scl new file mode 100644 index 0000000..8474240 --- /dev/null +++ b/scales/parizek_cirot.scl @@ -0,0 +1,17 @@ +! parizek_cirot.scl +! +Overtempered circular tuning (1/1 is F) + 12 +! + 78.49499 + 198.04500 + 282.40499 + 388.26999 + 494.13500 + 584.35999 + 703.91000 + 776.53999 + 892.18000 + 988.26999 + 1090.22500 + 2/1 diff --git a/scales/parizek_epi.scl b/scales/parizek_epi.scl new file mode 100644 index 0000000..0d8fa81 --- /dev/null +++ b/scales/parizek_epi.scl @@ -0,0 +1,18 @@ +! parizek_epi.scl +! April 2002 - Petr Parizek +In The Epimoric World +! +12 +! +13/12 +7/6 +6/5 +5/4 +4/3 +7/5 +3/2 +8/5 +5/3 +7/4 +11/6 +2/1 diff --git a/scales/parizek_epi2.scl b/scales/parizek_epi2.scl new file mode 100644 index 0000000..9dc73f9 --- /dev/null +++ b/scales/parizek_epi2.scl @@ -0,0 +1,29 @@ +! parizek_epi2.scl +! +In the Epimoric World - extended (version for two keyboards) + 24 +! + 13/12 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 2/1 + 2/1 diff --git a/scales/parizek_epi2a.scl b/scales/parizek_epi2a.scl new file mode 100644 index 0000000..8415ee1 --- /dev/null +++ b/scales/parizek_epi2a.scl @@ -0,0 +1,30 @@ +! parizek_epi2a.scl +In the Epimoric World 2a (Almost the same as EPI2) +! April 2003 - Petr Parizek +! +24 +! +13/12 +11/10 +9/8 +8/7 +7/6 +6/5 +5/4 +9/7 +4/3 +11/8 +7/5 +10/7 +3/2 +11/7 +8/5 +13/8 +5/3 +12/7 +7/4 +9/5 +11/6 +13/7 +2/1 +2/1 diff --git a/scales/parizek_ji1.scl b/scales/parizek_ji1.scl new file mode 100644 index 0000000..99fe2ce --- /dev/null +++ b/scales/parizek_ji1.scl @@ -0,0 +1,17 @@ +! parizek_ji1.scl +! +Petr Parizek, 12-tone septimal tuning (2002). Dominant-diminished-pajara-injera-meantone wakalix + 12 +! + 21/20 + 9/8 + 7/6 + 5/4 + 21/16 + 7/5 + 3/2 + 63/40 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/parizek_jiweltmp.scl b/scales/parizek_jiweltmp.scl new file mode 100644 index 0000000..804f585 --- /dev/null +++ b/scales/parizek_jiweltmp.scl @@ -0,0 +1,17 @@ +! parizek_jiweltmp.scl +19-limit Rational Well Temperament +! April 2003 - Petr Parizek +12 +! +17/16 +9/8 +19/16 +34/27 +4/3 +17/12 +3/2 +51/32 +32/19 +16/9 +17/9 +2/1 diff --git a/scales/parizek_jiwt2.scl b/scales/parizek_jiwt2.scl new file mode 100644 index 0000000..a7b4aed --- /dev/null +++ b/scales/parizek_jiwt2.scl @@ -0,0 +1,18 @@ +!jiwt2.scl +Rational Well Temperament 2 (1/1 is Db) +! June 2003 - Petr Parizek +! +12 +! +17/16 +9/8 +19/16 +81/64 +4/3 +64/45 +3/2 +1216/765 +27/16 +16/9 +243/128 +2/1 diff --git a/scales/parizek_jiwt3.scl b/scales/parizek_jiwt3.scl new file mode 100644 index 0000000..0981f23 --- /dev/null +++ b/scales/parizek_jiwt3.scl @@ -0,0 +1,19 @@ +! parizek_jiwt3.scl +! June 2004 - Petr Parizek +! +Rational Well-temperament 3 +! + 12 +! + 256/243 + 272/243 + 32/27 + 304/243 + 4/3 + 1024/729 + 256/171 + 128/81 + 256/153 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/parizek_llt7.scl b/scales/parizek_llt7.scl new file mode 100644 index 0000000..03764a1 --- /dev/null +++ b/scales/parizek_llt7.scl @@ -0,0 +1,12 @@ +! parizek_llt7.scl +! +7-tone mode of Linear Level Tuning 2000 (= wilson_helix.scl) + 7 +! + 13/12 + 5/4 + 11/8 + 3/2 + 13/8 + 11/6 + 2/1 diff --git a/scales/parizek_lt13.scl b/scales/parizek_lt13.scl new file mode 100644 index 0000000..90ddbbb --- /dev/null +++ b/scales/parizek_lt13.scl @@ -0,0 +1,18 @@ +! parizek_lt13.scl +! +Linear temperament, g=sqrt(11/8) + 13 +! + 80.93074 + 178.29486 + 275.65897 + 356.58971 + 453.95383 + 11/8 + 632.24868 + 729.61280 + 826.97691 + 907.90765 + 1005.27177 + 1102.63588 + 2/1 diff --git a/scales/parizek_lt130.scl b/scales/parizek_lt130.scl new file mode 100644 index 0000000..0bbd93e --- /dev/null +++ b/scales/parizek_lt130.scl @@ -0,0 +1,18 @@ +! parizek_lt130.scl +! +Linear temperament, g=13th root of 130, with good 1:2:5:11:13. TL 23-03-2008 + 13 +! + 96.43713 + 192.87427 + 289.31140 + 385.74854 + 482.18567 + 578.62281 + 648.21857 + 744.65570 + 841.09284 + 937.52997 + 1033.96711 + 1130.40424 + 2/1 diff --git a/scales/parizek_meanqr.scl b/scales/parizek_meanqr.scl new file mode 100644 index 0000000..aa06a7e --- /dev/null +++ b/scales/parizek_meanqr.scl @@ -0,0 +1,17 @@ +! parizek_meanqr.scl +! +Rational approx. of 1/4-comma meantone for beat-rate tuning, 1/1 = 257.2 Hz, TL 17-12-2005 + 12 +! + 5375/5144 + 6470/5787 + 3846/3215 + 5/4 + 860/643 + 16175/11574 + 1923/1286 + 25/16 + 1075/643 + 10352/5787 + 9615/5144 + 2/1 diff --git a/scales/parizek_part7_12.scl b/scales/parizek_part7_12.scl new file mode 100644 index 0000000..3e35bb0 --- /dev/null +++ b/scales/parizek_part7_12.scl @@ -0,0 +1,17 @@ +! parizek_part7_12.scl +! +Partial 7-limit half-octave temperament +12 +! +29.27333 +130.55859 +231.84384 +314.97154 +416.25679 +600.00000 +629.27333 +730.55859 +831.84384 +914.97154 +1016.25679 +2/1 diff --git a/scales/parizek_qmeb1.scl b/scales/parizek_qmeb1.scl new file mode 100644 index 0000000..56644c5 --- /dev/null +++ b/scales/parizek_qmeb1.scl @@ -0,0 +1,17 @@ +! parizek_qmeb1.scl +! +Equal beating quasi-meantone tuning no. 1 - F...A# (1/1 = 261.7Hz)(3/2 5/3 5/4 7/4 7/6) + 12 +! + 87555/83744 + 5863/5234 + 48855/41872 + 3270/2617 + 10513/7851 + 29305/20936 + 3923/2617 + 16345/10468 + 4380/2617 + 9157/5234 + 9775/5234 + 2/1 diff --git a/scales/parizek_qmeb2.scl b/scales/parizek_qmeb2.scl new file mode 100644 index 0000000..ce9c54d --- /dev/null +++ b/scales/parizek_qmeb2.scl @@ -0,0 +1,17 @@ +! parizek_qmeb2.scl +! +Equal beating quasi-meantone tuning no. 2 - F...A# (1/1 = 262.7Hz) + 12 +! + 5505/5254 + 2946/2627 + 49195/42032 + 3285/2627 + 10553/7881 + 29445/21016 + 3933/2627 + 16445/10508 + 4400/2627 + 9187/5254 + 9835/5254 + 2/1 diff --git a/scales/parizek_qmeb3.scl b/scales/parizek_qmeb3.scl new file mode 100644 index 0000000..11aa389 --- /dev/null +++ b/scales/parizek_qmeb3.scl @@ -0,0 +1,17 @@ +! parizek_qmeb3.scl +! +Equal beating quasi-meantone tuning no. 3 - F...A#. 1/1 = 262Hz + 12 +! + 2197/2096 + 147/131 + 9819/8384 + 1311/1048 + 877/655 + 5877/4192 + 785/524 + 3281/2096 + 439/262 + 1833/1048 + 1963/1048 + 2/1 diff --git a/scales/parizek_qmtp12.scl b/scales/parizek_qmtp12.scl new file mode 100644 index 0000000..df99861 --- /dev/null +++ b/scales/parizek_qmtp12.scl @@ -0,0 +1,17 @@ +! parizek_qmtp12.scl +! +12-tone quasi-meantone tuning with 1/9 Pyth. comma as basic tempering unit (F...A#) + 12 +! + 77.19166 + 196.09000 + 268.06832 + 8192/6561 + 505.86500 + 583.05666 + 699.34833 + 771.32665 + 890.22500 + 967.41665 + 1083.70833 + 2/1 diff --git a/scales/parizek_qmtp24.scl b/scales/parizek_qmtp24.scl new file mode 100644 index 0000000..2746bae --- /dev/null +++ b/scales/parizek_qmtp24.scl @@ -0,0 +1,29 @@ +! parizek_qmtp24.scl +! +24-tone quasi-meantone tuning with 1/9 Pyth. comma as basic tempering unit (Bbb...C##) + 24 +! + 74.58499 + 121.50501 + 151.77665 + 196.09000 + 268.06832 + 314.98834 + 8192/6561 + 43046721/33554432 + 461.55165 + 505.86500 + 580.44999 + 627.37001 + 652.42831 + 699.34833 + 67108864/43046721 + 6561/4096 + 890.22500 + 934.53835 + 967.41665 + 1011.73001 + 1083.70833 + 1130.62835 + 1155.68665 + 2/1 diff --git a/scales/parizek_ragipuq1.scl b/scales/parizek_ragipuq1.scl new file mode 100644 index 0000000..65ebc48 --- /dev/null +++ b/scales/parizek_ragipuq1.scl @@ -0,0 +1,22 @@ +! parizek_ragipuq1.scl +! +17-step ragisma pump, symmetric (7/6, 5/1, 2/7) + 17 +! + 7/6 + 1/3 + 5/3 + 35/18 + 5/9 + 35/54 + 175/54 + 25/27 + 175/162 + 25/81 + 125/81 + 875/486 + 125/243 + 875/1458 + 4375/1458 + 625/729 + 4375/4374 diff --git a/scales/parizek_rphi.scl b/scales/parizek_rphi.scl new file mode 100644 index 0000000..0a306a2 --- /dev/null +++ b/scales/parizek_rphi.scl @@ -0,0 +1,15 @@ +! parizek_rphi.scl +! +The most difficult 10-tone quasi-linear normalized phi chain + 10 +! + 24157817/22811548 + 102334155/91246192 + 7049156/5702887 + 7465176/5702887 + 31622993/22811548 + 33489287/22811548 + 9227465/5702887 + 39088169/22811548 + 165580141/91246192 + 2/1 diff --git a/scales/parizek_syndiat.scl b/scales/parizek_syndiat.scl new file mode 100644 index 0000000..693e746 --- /dev/null +++ b/scales/parizek_syndiat.scl @@ -0,0 +1,17 @@ +! parizek_syndiat.scl +! +Petr Parizek, diatonic scale with syntonic alternatives + 12 +! + 10/9 + 9/8 + 5/4 + 4/3 + 27/20 + 40/27 + 3/2 + 5/3 + 27/16 + 50/27 + 15/8 + 2/1 diff --git a/scales/parizek_syntonal.scl b/scales/parizek_syntonal.scl new file mode 100644 index 0000000..eff18b1 --- /dev/null +++ b/scales/parizek_syntonal.scl @@ -0,0 +1,17 @@ +! parizek_syntonal.scl +! +Petr Parizek, Syntonic corrections in JI tonality, Jan. 2004 + 12 +! + 25/24 + 10/9 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/parizek_temp.scl b/scales/parizek_temp.scl new file mode 100644 index 0000000..e01bf7a --- /dev/null +++ b/scales/parizek_temp.scl @@ -0,0 +1,11 @@ +! parizek_temp.scl +! +Nice small scale, TL 10-12-2007 + 6 +! + 111.78823 + 162.73726 + 274.52549 + 325.47451 + 437.26274 + 600.00000 diff --git a/scales/parizek_temp19.scl b/scales/parizek_temp19.scl new file mode 100644 index 0000000..344e12b --- /dev/null +++ b/scales/parizek_temp19.scl @@ -0,0 +1,17 @@ +! parizek_temp19.scl +! +Petr Parizek, genus [3 3 19 19 19] well temperament + 12 +! + 1083/1024 + 9/8 + 19/16 + 20577/16384 + 171/128 + 361/256 + 3/2 + 3249/2048 + 6859/4096 + 57/32 + 61731/32768 + 2/1 diff --git a/scales/parizek_triharmon.scl b/scales/parizek_triharmon.scl new file mode 100644 index 0000000..f2b2e23 --- /dev/null +++ b/scales/parizek_triharmon.scl @@ -0,0 +1,25 @@ +! parizek_triharmon.scl +! +The triharmonic scale + 20 +! + 99.53378 + 257.54248 + 357.07625 + 456.61003 + 614.61873 + 714.15251 + 8/5 + 971.69498 + 1071.22876 + 1170.76254 + 1328.77124 + 1428.30502 + 5/2 + 1685.84749 + 1785.38127 + 1943.38997 + 2042.92375 + 2142.45752 + 2300.46622 + 4/1 \ No newline at end of file diff --git a/scales/parizek_well.scl b/scales/parizek_well.scl new file mode 100644 index 0000000..a916761 --- /dev/null +++ b/scales/parizek_well.scl @@ -0,0 +1,17 @@ +! parizek_well.scl +! +Well-temperament with 1/6-P fifths + 12 +! + 98.04500 + 200.00000 + 298.04500 + 396.09000 + 4/3 + 596.09000 + 3/2 + 796.09000 + 898.04500 + 1000.00000 + 1094.13500 + 2/1 diff --git a/scales/parizek_xid1.scl b/scales/parizek_xid1.scl new file mode 100644 index 0000000..6b830e5 --- /dev/null +++ b/scales/parizek_xid1.scl @@ -0,0 +1,21 @@ +! parizek_xid1.scl +! +Semisixth in two octaves +16 +! +73.18474 +258.10077 +443.01679 +627.93282 +701.11756 +886.03359 +1070.94962 +1144.13436 +1329.05038 +1513.96641 +1587.15115 +1772.06718 +1956.98321 +2030.16795 +2215.08397 +4/1 diff --git a/scales/parizek_xid2.scl b/scales/parizek_xid2.scl new file mode 100644 index 0000000..b7394fd --- /dev/null +++ b/scales/parizek_xid2.scl @@ -0,0 +1,21 @@ +! parizek_xid2.scl +! +Semitenth in two octaves +16 +! +129.05038 +258.10077 +387.15115 +627.93282 +756.98321 +886.03359 +1015.08397 +1144.13436 +1384.91603 +1513.96641 +1643.01679 +1772.06718 +1901.11756 +2141.89923 +2270.94962 +4/1 diff --git a/scales/partch-barstow.scl b/scales/partch-barstow.scl new file mode 100644 index 0000000..38c2775 --- /dev/null +++ b/scales/partch-barstow.scl @@ -0,0 +1,23 @@ +! partch-barstow.scl +! +Guitar scale for Partch's Barstow (1941, 1968) + 18 +! + 16/15 + 11/10 + 10/9 + 9/8 + 8/7 + 6/5 + 5/4 + 4/3 + 11/8 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 9/5 + 11/6 + 15/8 + 2/1 diff --git a/scales/partch-greek.scl b/scales/partch-greek.scl new file mode 100644 index 0000000..c31dd0d --- /dev/null +++ b/scales/partch-greek.scl @@ -0,0 +1,17 @@ +! partch-greek.scl +! +Partch Greek scales from "Two Studies on Ancient Greek Scales" on black/white + 12 +! + 1/1 + 28/27 + 9/8 + 16/15 + 4/3 + 6/5 + 3/2 + 3/2 + 14/9 + 8/5 + 8/5 + 2/1 diff --git a/scales/partch-grm.scl b/scales/partch-grm.scl new file mode 100644 index 0000000..5f505d9 --- /dev/null +++ b/scales/partch-grm.scl @@ -0,0 +1,14 @@ +! partch-grm.scl +! +Partch Greek scales from "Two Studies on Ancient Greek Scales" mixed + 9 +! + 28/27 + 16/15 + 9/8 + 6/5 + 4/3 + 3/2 + 14/9 + 8/5 + 2/1 diff --git a/scales/partch-indian.scl b/scales/partch-indian.scl new file mode 100644 index 0000000..e5deced --- /dev/null +++ b/scales/partch-indian.scl @@ -0,0 +1,27 @@ +! partch-indian.scl +! +Partch's Indian Chromatic, Exposition of Monophony, 1933. + 22 +! + 33/32 + 17/16 + 12/11 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 22/15 + 3/2 + 14/9 + 11/7 + 18/11 + 27/16 + 7/4 + 20/11 + 15/8 + 64/33 + 2/1 diff --git a/scales/partch_29-av.scl b/scales/partch_29-av.scl new file mode 100644 index 0000000..c1bb56e --- /dev/null +++ b/scales/partch_29-av.scl @@ -0,0 +1,34 @@ +! partch_29-av.scl +! +29-tone JI scale from Partch's Adapted Viola 1928-30 + 29 +! + 33/32 + 21/20 + 15/14 + 12/11 + 10/9 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 28/15 + 40/21 + 64/33 + 2/1 diff --git a/scales/partch_29.scl b/scales/partch_29.scl new file mode 100644 index 0000000..3a0df42 --- /dev/null +++ b/scales/partch_29.scl @@ -0,0 +1,34 @@ +! partch_29.scl +! +Partch/Ptolemy 11-limit Diamond + 29 +! + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 2/1 diff --git a/scales/partch_37.scl b/scales/partch_37.scl new file mode 100644 index 0000000..ec3bbcc --- /dev/null +++ b/scales/partch_37.scl @@ -0,0 +1,42 @@ +! partch_37.scl +! 37-tone JI scale from 1931-32 draft of Partch's "Exposition" +From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol.9(2) + 37 +! + 49/48 + 33/32 + 22/21 + 16/15 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 21/11 + 64/33 + 96/49 + 2/1 diff --git a/scales/partch_39.scl b/scales/partch_39.scl new file mode 100644 index 0000000..4df2373 --- /dev/null +++ b/scales/partch_39.scl @@ -0,0 +1,44 @@ +! partch_39.scl +! +Ur-Partch Keyboard 39 tones, published in Interval + 39 +! + 49/48 + 33/32 + 22/21 + 16/15 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 16/11 + 22/15 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 15/8 + 21/11 + 64/33 + 96/49 + 2/1 diff --git a/scales/partch_41.scl b/scales/partch_41.scl new file mode 100644 index 0000000..f9fcbed --- /dev/null +++ b/scales/partch_41.scl @@ -0,0 +1,46 @@ +! PARTCH_41.scl +! +13-limit Diamond after Partch, Genesis of a Music, p 454, 2nd edition + 41 +! + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 11/8 + 18/13 + 7/5 + 10/7 + 13/9 + 16/11 + 3/2 + 20/13 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 22/13 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 2/1 diff --git a/scales/partch_41a.scl b/scales/partch_41a.scl new file mode 100644 index 0000000..cb0866e --- /dev/null +++ b/scales/partch_41a.scl @@ -0,0 +1,46 @@ +! partch_41a.scl +! +From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol. 9(2) + 41 +! + 49/48 + 33/32 + 22/21 + 16/15 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 16/11 + 22/15 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 21/11 + 64/33 + 96/49 + 2/1 diff --git a/scales/partch_41comb.scl b/scales/partch_41comb.scl new file mode 100644 index 0000000..6b37233 --- /dev/null +++ b/scales/partch_41comb.scl @@ -0,0 +1,46 @@ +! partch_41comb.scl +! +41-tone JI combination from Partch's 29-tone and 37-tone scales + 41 +! + 49/48 + 33/32 + 22/21 + 21/20 + 16/15 + 15/14 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 28/15 + 15/8 + 40/21 + 21/11 + 64/33 + 96/49 + 2/1 diff --git a/scales/partch_43.scl b/scales/partch_43.scl new file mode 100644 index 0000000..2781ccb --- /dev/null +++ b/scales/partch_43.scl @@ -0,0 +1,48 @@ +! PARTCH_43.scl +! +Harry Partch's 43-tone pure scale + 43 +! + 81/80 + 33/32 + 21/20 + 16/15 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 10/7 + 16/11 + 40/27 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 40/21 + 64/33 + 160/81 + 2/1 diff --git a/scales/partch_43a.scl b/scales/partch_43a.scl new file mode 100644 index 0000000..1d3d089 --- /dev/null +++ b/scales/partch_43a.scl @@ -0,0 +1,48 @@ +! partch_43a.scl +! +From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol. 9(2) + 43 +! + 49/48 + 33/32 + 21/20 + 16/15 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 16/11 + 22/15 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 15/8 + 40/21 + 64/33 + 96/49 + 2/1 diff --git a/scales/patala.scl b/scales/patala.scl new file mode 100644 index 0000000..2e4ac47 --- /dev/null +++ b/scales/patala.scl @@ -0,0 +1,12 @@ +! patala.scl +! +Observed patala tuning from Burma, Helmholtz/Ellis p. 518, nr.83 + 7 +! + 176.00000 + 350.00000 + 533.00000 + 707.00000 + 899.00000 + 1053.00000 + 1246.00000 diff --git a/scales/paulsmagic.scl b/scales/paulsmagic.scl new file mode 100644 index 0000000..d87a35d --- /dev/null +++ b/scales/paulsmagic.scl @@ -0,0 +1,27 @@ +! paulsmagic.scl +! +Circulating Magic[22] lesfip, 9-limit, 12 cent tolerance, from Paul Erlich erlich5.scl + 22 +! +59.24115 +102.13353 +145.02590 +204.26705 +262.58518 +322.72878 +379.53398 +439.87810 +496.63805 +526.89129 +584.58102 +643.08125 +702.13353 +761.18580 +819.68603 +877.37576 +907.62900 +964.38895 +1024.73307 +1081.53827 +1141.68187 +2/1 diff --git a/scales/pel-pelog.scl b/scales/pel-pelog.scl new file mode 100644 index 0000000..3983a09 --- /dev/null +++ b/scales/pel-pelog.scl @@ -0,0 +1,12 @@ +! pel-pelog.scl +! +Pelog-like pelogic[7] + 7 +! + 134.41490 + 268.82979 + 537.65958 + 672.07448 + 806.48937 + 940.90427 + 1209.73406 diff --git a/scales/pelog1.scl b/scales/pelog1.scl new file mode 100644 index 0000000..842d2c2 --- /dev/null +++ b/scales/pelog1.scl @@ -0,0 +1,12 @@ +! pelog1.scl +! +Gamelan Saih pitu from Ksatria, Den Pasar (South Bali). 1/1=312.5 Hz + 7 +! + 153.000 + 315.000 + 552.000 + 706.000 + 848.000 + 1058.000 + 2/1 diff --git a/scales/pelog10.scl b/scales/pelog10.scl new file mode 100644 index 0000000..b9eac11 --- /dev/null +++ b/scales/pelog10.scl @@ -0,0 +1,12 @@ +! pelog10.scl +! +Balinese saih 7 scale, Krobokan. 1/1=275 Hz. McPhee, Music in Bali, 1966 + 7 +! + 179.25315 + 294.52841 + 466.27835 + 670.18835 + 813.68629 + 909.35892 + 2/1 diff --git a/scales/pelog11.scl b/scales/pelog11.scl new file mode 100644 index 0000000..d50ee4f --- /dev/null +++ b/scales/pelog11.scl @@ -0,0 +1,12 @@ +! pelog11.scl +! +Balinese saih pitu, gamelan luang, banjar Ssh. 1/1=276 Hz. McPhee, 1966 + 7 +! + 172.96917 + 386.31371 + 516.76123 + 685.14677 + 906.79403 + 1045.93815 + 2/1 diff --git a/scales/pelog12.scl b/scales/pelog12.scl new file mode 100644 index 0000000..8181b91 --- /dev/null +++ b/scales/pelog12.scl @@ -0,0 +1,12 @@ +! pelog12.scl +! +Balinese saih pitu, gamelan Semar Pegulingan, Tampak Gangsai, 1/1=310, McPhee + 7 +! + 144.57645 + 282.75390 + 546.23355 + 671.91114 + 774.85984 + 1023.79033 + 2/1 diff --git a/scales/pelog13.scl b/scales/pelog13.scl new file mode 100644 index 0000000..e5d814c --- /dev/null +++ b/scales/pelog13.scl @@ -0,0 +1,12 @@ +! pelog13.scl +! +Balinese saih pitu, gamelan Semar Pegulingan, Klungkung, 1/1=325. McPhee, 1966 + 7 +! + 177.06863 + 368.10694 + 512.63227 + 710.81044 + 954.30653 + 1101.35872 + 2/1 diff --git a/scales/pelog14.scl b/scales/pelog14.scl new file mode 100644 index 0000000..55ceda7 --- /dev/null +++ b/scales/pelog14.scl @@ -0,0 +1,12 @@ +! pelog14.scl +! +Balinese saih pitu, suling gambuh, Tabanan, 1/1=211 Hz, McPhee, 1966 + 7 +! + 164.25817 + 293.62212 + 489.82059 + 626.48975 + 747.83606 + 851.22404 + 2/1 diff --git a/scales/pelog15.scl b/scales/pelog15.scl new file mode 100644 index 0000000..3402107 --- /dev/null +++ b/scales/pelog15.scl @@ -0,0 +1,12 @@ +! pelog15.scl +! +Balinese saih pitu, suling gambuh, Batuan, 1/1=202 Hz. McPhee, 1966 + 7 +! + 147.77788 + 280.28666 + 476.48514 + 626.03713 + 769.19584 + 849.73288 + 2/1 diff --git a/scales/pelog16.scl b/scales/pelog16.scl new file mode 100644 index 0000000..e2b6eac --- /dev/null +++ b/scales/pelog16.scl @@ -0,0 +1,10 @@ +! pelog16.scl +! +Balinese 5-tone pelog, "Tembung chenik", 1/1=273 Hz, McPhee, 1966 + 5 +! + 134.17680 + 317.75384 + 10/7 + 798.55929 + 2/1 diff --git a/scales/pelog17.scl b/scales/pelog17.scl new file mode 100644 index 0000000..98e15ed --- /dev/null +++ b/scales/pelog17.scl @@ -0,0 +1,10 @@ +! pelog17.scl +! +Balinese 5-tone pelog, "Selisir Sunarn", 1/1=310 Hz, McPhee, 1966 + 5 +! + 185.19378 + 6/5 + 645.18814 + 792.61624 + 2/1 diff --git a/scales/pelog18.scl b/scales/pelog18.scl new file mode 100644 index 0000000..41324b7 --- /dev/null +++ b/scales/pelog18.scl @@ -0,0 +1,10 @@ +! pelog18.scl +! +Balinese 5-tone pelog, "Selisir pelgongan", 1/1=305 Hz, McPhee, 1966 + 5 +! + 109.95657 + 287.02520 + 614.64739 + 748.62182 + 2/1 diff --git a/scales/pelog19.scl b/scales/pelog19.scl new file mode 100644 index 0000000..94b7417 --- /dev/null +++ b/scales/pelog19.scl @@ -0,0 +1,10 @@ +! pelog19.scl +! +Balinese 5-tone pelog, "Demung", 1/1=362 Hz, McPhee, 1966 + 5 +! + 207.09535 + 314.04641 + 761.49652 + 854.45089 + 2/1 diff --git a/scales/pelog2.scl b/scales/pelog2.scl new file mode 100644 index 0000000..cde04c4 --- /dev/null +++ b/scales/pelog2.scl @@ -0,0 +1,12 @@ +! pelog2.scl +! +Bamboo gambang from Batu lulan (South Bali). 1/1=315 Hz + 7 +! + 150.000 + 321.000 + 483.000 + 685.000 + 838.000 + 1003.000 + 2/1 diff --git a/scales/pelog20.scl b/scales/pelog20.scl new file mode 100644 index 0000000..cadb15c --- /dev/null +++ b/scales/pelog20.scl @@ -0,0 +1,9 @@ +! pelog20.scl +! +Balinese 4-tone pelog, gamelan bebonang, Sayan village, 1/1=290 Hz, McPhee, 1966 + 4 +! + 197.26418 + 569.67233 + 669.81980 + 2/1 diff --git a/scales/pelog3.scl b/scales/pelog3.scl new file mode 100644 index 0000000..5613ef4 --- /dev/null +++ b/scales/pelog3.scl @@ -0,0 +1,10 @@ +! pelog3.scl +! +Gamelan Gong from Padangtegal, distr. Ubud (South Bali). 1/1=555 Hz + 5 +! + 152.000 + 326.000 + 692.000 + 825.000 + 2/1 diff --git a/scales/pelog4.scl b/scales/pelog4.scl new file mode 100644 index 0000000..1268a18 --- /dev/null +++ b/scales/pelog4.scl @@ -0,0 +1,12 @@ +! pelog4.scl +! +Hindu-Jav. demung, excavated in Banjarnegara. 1/1=427 Hz + 7 +! + 184.000 + 334.000 + 518.000 + 669.000 + 880.000 + 1016.000 + 2/1 diff --git a/scales/pelog5.scl b/scales/pelog5.scl new file mode 100644 index 0000000..7dccb0f --- /dev/null +++ b/scales/pelog5.scl @@ -0,0 +1,12 @@ +! pelog5.scl +! +Gamelan Kyahi Munggang (Paku Alaman, Jogja). 1/1=199.5 Hz + 7 +! + 146.000 + 299.000 + 544.000 + 695.000 + 850.000 + 1008.000 + 2/1 diff --git a/scales/pelog6.scl b/scales/pelog6.scl new file mode 100644 index 0000000..0cf6360 --- /dev/null +++ b/scales/pelog6.scl @@ -0,0 +1,11 @@ +! pelog6.scl +! +Gamelan Semar pegulingan, Ubud (S. Bali). 1/1=263.5 Hz + 6 +! + 130.000 + 326.000 + 526.000 + 675.000 + 792.000 + 2/1 diff --git a/scales/pelog7.scl b/scales/pelog7.scl new file mode 100644 index 0000000..af5e4a0 --- /dev/null +++ b/scales/pelog7.scl @@ -0,0 +1,12 @@ +! pelog7.scl +! +Gamelan Kantjilbelik (kraton Jogja). Measured by Surjodiningrat, 1972. + 7 +! + 125.000 + 256.000 + 523.000 + 668.000 + 788.000 + 934.000 + 2/1 diff --git a/scales/pelog8.scl b/scales/pelog8.scl new file mode 100644 index 0000000..0716f5b --- /dev/null +++ b/scales/pelog8.scl @@ -0,0 +1,19 @@ +! pelog8.scl +! +from William Malm: Music Cultures of the Pacific, the Near East and Asia. + 14 +! + 125.000 + 266.000 + 563.000 + 676.000 + 800.000 + 965.000 + 1220.000 + 1360.000 + 1503.000 + 1778.000 + 1905.000 + 2021.000 + 2225.000 + 2447.000 diff --git a/scales/pelog_24.scl b/scales/pelog_24.scl new file mode 100644 index 0000000..a9a2930 --- /dev/null +++ b/scales/pelog_24.scl @@ -0,0 +1,12 @@ +! pelog_24.scl +! +Subset of 24-tET (Sumatra?). Also Arabic Segah (Dudon) Two 4+3+3 tetrachords + 7 +! + 200.00000 + 350.00000 + 500.00000 + 700.00000 + 900.00000 + 1050.00000 + 2/1 diff --git a/scales/pelog_9.scl b/scales/pelog_9.scl new file mode 100644 index 0000000..b3f71ce --- /dev/null +++ b/scales/pelog_9.scl @@ -0,0 +1,12 @@ +! pelog_9.scl +! +9-tET "Pelog" + 7 +! + 133.33333 + 266.66667 + 533.33333 + 666.66667 + 800.00000 + 933.33333 + 2/1 diff --git a/scales/pelog_a.scl b/scales/pelog_a.scl new file mode 100644 index 0000000..d68151d --- /dev/null +++ b/scales/pelog_a.scl @@ -0,0 +1,12 @@ +! pelog_a.scl +! +Pelog, average class A. Kunst 1949 + 7 +! + 122.000 + 271.000 + 571.000 + 677.000 + 785.000 + 947.000 + 2/1 diff --git a/scales/pelog_alves.scl b/scales/pelog_alves.scl new file mode 100644 index 0000000..08bf0bb --- /dev/null +++ b/scales/pelog_alves.scl @@ -0,0 +1,12 @@ +! pelog_alves.scl +! +Bill Alves JI Pelog, 1/1 vol. 9 no. 4, 1997. 1/1=293.33 + 7 +! + 8/7 + 6/5 + 21/16 + 3/2 + 8/5 + 7/4 + 2/1 diff --git a/scales/pelog_av.scl b/scales/pelog_av.scl new file mode 100644 index 0000000..a3a9509 --- /dev/null +++ b/scales/pelog_av.scl @@ -0,0 +1,12 @@ +! pelog_av.scl +! +"Normalised Pelog", Kunst, 1949. Average of 39 Javanese gamelans + 7 +! + 120.000 + 270.000 + 540.000 + 670.000 + 785.000 + 950.000 + 2/1 diff --git a/scales/pelog_b.scl b/scales/pelog_b.scl new file mode 100644 index 0000000..1c3f7af --- /dev/null +++ b/scales/pelog_b.scl @@ -0,0 +1,12 @@ +! pelog_b.scl +! +Pelog, average class B. Kunst 1949 + 7 +! + 118.000 + 253.000 + 525.000 + 659.000 + 772.000 + 945.000 + 2/1 diff --git a/scales/pelog_c.scl b/scales/pelog_c.scl new file mode 100644 index 0000000..98c68b9 --- /dev/null +++ b/scales/pelog_c.scl @@ -0,0 +1,12 @@ +! pelog_c.scl +! +Pelog, average class C. Kunst 1949 + 7 +! + 117.000 + 262.000 + 508.000 + 668.000 + 779.000 + 945.000 + 2/1 diff --git a/scales/pelog_he.scl b/scales/pelog_he.scl new file mode 100644 index 0000000..d93bfc3 --- /dev/null +++ b/scales/pelog_he.scl @@ -0,0 +1,12 @@ +! pelog_he.scl +! +Observed Javanese Pelog scale, Helmholtz/Ellis p. 518, nr.96 + 7 +! + 137.00000 + 446.00000 + 575.00000 + 687.00000 + 820.00000 + 1098.00000 + 2/1 diff --git a/scales/pelog_jc.scl b/scales/pelog_jc.scl new file mode 100644 index 0000000..2f0292b --- /dev/null +++ b/scales/pelog_jc.scl @@ -0,0 +1,10 @@ +! pelog_jc.scl +! +John Chalmers' Pelog, on keys C# E F# A B c#, like Olympos' Enharmonic on 4/3. Also hirajoshi2 + 5 +! + 9/8 + 6/5 + 3/2 + 8/5 + 2/1 diff --git a/scales/pelog_laras.scl b/scales/pelog_laras.scl new file mode 100644 index 0000000..22da4ed --- /dev/null +++ b/scales/pelog_laras.scl @@ -0,0 +1,12 @@ +! pelog_laras.scl +! +Lou Harrison, gamelan "Si Betty" + 7 +! + 13/12 + 7/6 + 17/12 + 3/2 + 19/12 + 7/4 + 2/1 diff --git a/scales/pelog_mal.scl b/scales/pelog_mal.scl new file mode 100644 index 0000000..9b39d06 --- /dev/null +++ b/scales/pelog_mal.scl @@ -0,0 +1,10 @@ +! pelog_mal.scl +! +Malaysian Pelog, Pierre Genest: Diffrentes gammes encore en usage + 5 +! + 13/12 + 4/3 + 3/2 + 13/8 + 2/1 diff --git a/scales/pelog_me1.scl b/scales/pelog_me1.scl new file mode 100644 index 0000000..6c78b9a --- /dev/null +++ b/scales/pelog_me1.scl @@ -0,0 +1,12 @@ +! pelog_me1.scl +! +Gamelan Kyahi Kanyut Mesem pelog (Mangku Nagaran). 1/1=295 Hz + 7 +! + 124.521 + 271.058 + 522.809 + 688.207 + 787.819 + 954.515 + 2/1 diff --git a/scales/pelog_me2.scl b/scales/pelog_me2.scl new file mode 100644 index 0000000..abc292e --- /dev/null +++ b/scales/pelog_me2.scl @@ -0,0 +1,12 @@ +! pelog_me2.scl +! +Gamelan Kyahi Bermara (kraton Jogja). 1/1=290 Hz + 7 +! + 104.253 + 236.762 + 501.772 + 661.692 + 760.647 + 929.145 + 2/1 diff --git a/scales/pelog_me3.scl b/scales/pelog_me3.scl new file mode 100644 index 0000000..814f75c --- /dev/null +++ b/scales/pelog_me3.scl @@ -0,0 +1,12 @@ +! pelog_me3.scl +! +Gamelan Kyahi Pangasih (kraton Solo). 1/1=286 Hz + 7 +! + 128.298 + 276.357 + 545.806 + 669.366 + 784.692 + 967.096 + 2/1 diff --git a/scales/pelog_pa.scl b/scales/pelog_pa.scl new file mode 100644 index 0000000..2900cfd --- /dev/null +++ b/scales/pelog_pa.scl @@ -0,0 +1,12 @@ +! pelog_pa.scl +! +"Blown fifth" pelog, von Hornbostel, type a. + 7 +! + 156.000 cents + 312.000 cents + 468.000 cents + 678.000 cents + 834.000 cents + 990.000 cents + 2/1 diff --git a/scales/pelog_pa2.scl b/scales/pelog_pa2.scl new file mode 100644 index 0000000..1156c2d --- /dev/null +++ b/scales/pelog_pa2.scl @@ -0,0 +1,12 @@ +! pelog_pa2.scl +! +New mixed gender Pelog + 7 +! + 156.000 cents + 312.000 cents + 522.000 cents + 678.000 cents + 834.000 cents + 990.000 cents + 2/1 diff --git a/scales/pelog_pb.scl b/scales/pelog_pb.scl new file mode 100644 index 0000000..5c96ca2 --- /dev/null +++ b/scales/pelog_pb.scl @@ -0,0 +1,12 @@ +! pelog_pb.scl +! +"Primitive" Pelog, step of blown semi-fourths, von Hornbostel, type b. + 7 +! + 105.000 cents + 261.000 cents + 522.000 cents + 678.000 cents + 783.000 cents + 939.000 cents + 2/1 diff --git a/scales/pelog_pb2.scl b/scales/pelog_pb2.scl new file mode 100644 index 0000000..30733a3 --- /dev/null +++ b/scales/pelog_pb2.scl @@ -0,0 +1,12 @@ +! pelog_pb2.scl +! +"Primitive" Pelog, Kunst: Music in Java, p. 28 + 7 +! + 102.000 cents + 258.000 cents + 522.000 cents + 678.000 cents + 780.000 cents + 936.000 cents + 2/1 diff --git a/scales/pelog_schmidt.scl b/scales/pelog_schmidt.scl new file mode 100644 index 0000000..11840ad --- /dev/null +++ b/scales/pelog_schmidt.scl @@ -0,0 +1,12 @@ +! pelog_schmidt.scl +! +Modern Pelog designed by Dan Schmidt and used by Berkeley Gamelan + 7 +! + 11/10 + 6/5 + 7/5 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/pelog_selun.scl b/scales/pelog_selun.scl new file mode 100644 index 0000000..e470043 --- /dev/null +++ b/scales/pelog_selun.scl @@ -0,0 +1,16 @@ +! pelog_selun.scl +! +Gamelan selunding from Kengetan, South Bali (Pelog), 1/1=141 Hz + 11 +! + 124.347 cents + 63/47 + 68/47 + 805.224 cents + 2/1 + 101/47 + 126/47 + 136/47 + 449/141 + 4/1 + 202/47 diff --git a/scales/pelog_slen.scl b/scales/pelog_slen.scl new file mode 100644 index 0000000..146ea95 --- /dev/null +++ b/scales/pelog_slen.scl @@ -0,0 +1,16 @@ +! pelog_slen.scl +! +W.P. Malm, pelog+slendro, Musical Cultures Of The Pacific, The Near East, And Asia. P: 1,3,5,6,8,10; S: 2,4,7,9 + 11 +! + 175.00000 + 275.00000 + 425.00000 + 475.00000 + 525.00000 + 675.00000 + 725.00000 + 925.00000 + 975.00000 + 1100.00000 + 2/1 diff --git a/scales/pelog_str.scl b/scales/pelog_str.scl new file mode 100644 index 0000000..0ec0a47 --- /dev/null +++ b/scales/pelog_str.scl @@ -0,0 +1,14 @@ +! pelog_str.scl +! +JI Pelog with stretched 2/1 and extra tones between 2-3, 6-7. Wolf, XH 11, '87 + 9 +! + 16807/15552 + 7/6 + 117649/93312 + 49/36 + 823543/559872 + 343/216 + 5764801/3359232 + 2401/1296 + 40353607/20155392 diff --git a/scales/pelogic.scl b/scales/pelogic.scl new file mode 100644 index 0000000..4bc0d83 --- /dev/null +++ b/scales/pelogic.scl @@ -0,0 +1,14 @@ +! pelogic.scl +! +Pelogic temperament, g=521.089678, 5-limit + 9 +! + 47.62775 + 205.44839 + 363.26903 + 521.08968 + 568.71742 + 726.53807 + 884.35871 + 1042.17936 + 2/1 diff --git a/scales/pelogic2.scl b/scales/pelogic2.scl new file mode 100644 index 0000000..cbbc199 --- /dev/null +++ b/scales/pelogic2.scl @@ -0,0 +1,17 @@ +! pelogic2.scl +! +Pelogic temperament, g=677.137654 in cycle of fifths order + 12 +! +-60.03642 + 154.27531 + 94.23889 + 308.55062 + 248.51419 + 462.82592 + 677.13765 + 617.10123 + 831.41296 + 771.37654 + 985.68827 + 2/1 diff --git a/scales/penchgah pentachord 7-limit.scl b/scales/penchgah pentachord 7-limit.scl new file mode 100644 index 0000000..271090b --- /dev/null +++ b/scales/penchgah pentachord 7-limit.scl @@ -0,0 +1,9 @@ +! penchgah pentachord 7-limit.scl +! +Penchgah pentachord 40:45:50:56:60 + 4 +! + 9/8 + 5/4 + 7/5 + 3/2 diff --git a/scales/penta1.scl b/scales/penta1.scl new file mode 100644 index 0000000..ff3d318 --- /dev/null +++ b/scales/penta1.scl @@ -0,0 +1,17 @@ +! penta1.scl +! +Pentagonal scale 9/8 3/2 16/15 4/3 5/3 + 12 +! + 27/25 + 9/8 + 6/5 + 81/64 + 729/512 + 36/25 + 243/160 + 81/50 + 27/16 + 9/5 + 243/128 + 2 diff --git a/scales/penta2.scl b/scales/penta2.scl new file mode 100644 index 0000000..6f7b4fc --- /dev/null +++ b/scales/penta2.scl @@ -0,0 +1,17 @@ +! penta2.scl +! +Pentagonal scale 7/4 4/3 15/8 32/21 6/5 + 12 +! + 49/48 + 35/32 + 7/6 + 1225/1024 + 245/192 + 49/36 + 25/18 + 49/32 + 5/3 + 7/4 + 175/96 + 2/1 diff --git a/scales/penta_opt.scl b/scales/penta_opt.scl new file mode 100644 index 0000000..dbe5f7d --- /dev/null +++ b/scales/penta_opt.scl @@ -0,0 +1,10 @@ +! penta_opt.scl +! +Optimally consonant major pentatonic, John deLaubenfels (2001) + 5 +! + 193.17000 + 386.34000 + 698.35000 + 887.99000 + 2/1 diff --git a/scales/pentadekany.scl b/scales/pentadekany.scl new file mode 100644 index 0000000..15887bc --- /dev/null +++ b/scales/pentadekany.scl @@ -0,0 +1,20 @@ +! pentadekany.scl +! +2)6 1.3.5.7.11.13 Pentadekany (1.3 tonic) + 15 +! + 13/12 + 55/48 + 7/6 + 5/4 + 65/48 + 11/8 + 35/24 + 143/96 + 77/48 + 13/8 + 5/3 + 7/4 + 11/6 + 91/48 + 2/1 diff --git a/scales/pentadekany2.scl b/scales/pentadekany2.scl new file mode 100644 index 0000000..4b11b3d --- /dev/null +++ b/scales/pentadekany2.scl @@ -0,0 +1,20 @@ +! PENTADEKANY2.scl +! +2)6 1.3.5.7.9.11 Pentadekany (1.3 tonic) + 15 +! + 33/32 + 9/8 + 55/48 + 7/6 + 5/4 + 21/16 + 11/8 + 35/24 + 3/2 + 77/48 + 5/3 + 7/4 + 11/6 + 15/8 + 2/1 diff --git a/scales/pentadekany3.scl b/scales/pentadekany3.scl new file mode 100644 index 0000000..afdd31c --- /dev/null +++ b/scales/pentadekany3.scl @@ -0,0 +1,20 @@ +! pentadekany3.scl +! +2)6 1.5.11.17.23.31 Pentadekany (1.5 tonic) + 15 +! + 17/16 + 341/320 + 11/10 + 713/640 + 23/20 + 187/160 + 391/320 + 11/8 + 23/16 + 31/20 + 253/160 + 527/320 + 17/10 + 31/16 + 2/1 diff --git a/scales/pentadekany4.scl b/scales/pentadekany4.scl new file mode 100644 index 0000000..9f19ef3 --- /dev/null +++ b/scales/pentadekany4.scl @@ -0,0 +1,20 @@ +! pentadekany4.scl +! +2)6 1.3.9.51.57.87 Pentadekany (1.3 tonic) + 15 +! + 261/256 + 17/16 + 9/8 + 19/16 + 153/128 + 171/128 + 87/64 + 1479/1024 + 3/2 + 51/32 + 1653/1024 + 57/32 + 29/16 + 969/512 + 2/1 diff --git a/scales/pentatetra1.scl b/scales/pentatetra1.scl new file mode 100644 index 0000000..8dd0215 --- /dev/null +++ b/scales/pentatetra1.scl @@ -0,0 +1,14 @@ +! pentatetra1.scl +! +Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3 + 9 +! + 20/19 + 10/9 + 5/4 + 4/3 + 3/2 + 30/19 + 5/3 + 15/8 + 2/1 diff --git a/scales/pentatetra2.scl b/scales/pentatetra2.scl new file mode 100644 index 0000000..240a011 --- /dev/null +++ b/scales/pentatetra2.scl @@ -0,0 +1,14 @@ +! pentatetra2.scl +! +Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3 + 9 +! + 20/19 + 20/17 + 5/4 + 4/3 + 3/2 + 30/19 + 30/17 + 15/8 + 2/1 diff --git a/scales/pentatetra3.scl b/scales/pentatetra3.scl new file mode 100644 index 0000000..a64e6f4 --- /dev/null +++ b/scales/pentatetra3.scl @@ -0,0 +1,14 @@ +! pentatetra3.scl +! +Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3 + 9 +! + 10/9 + 20/17 + 5/4 + 4/3 + 3/2 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/pentatriad.scl b/scales/pentatriad.scl new file mode 100644 index 0000000..debfb8b --- /dev/null +++ b/scales/pentatriad.scl @@ -0,0 +1,16 @@ +! pentatriad.scl +! +4:5:6 Pentatriadic scale + 11 +! + 10/9 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/pentatriad1.scl b/scales/pentatriad1.scl new file mode 100644 index 0000000..d15e33c --- /dev/null +++ b/scales/pentatriad1.scl @@ -0,0 +1,16 @@ +! PENTATRIAD1.scl +! +3:5:9 Pentatriadic scale + 11 +! + 10/9 + 9/8 + 5/4 + 4/3 + 40/27 + 3/2 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/pepper.scl b/scales/pepper.scl new file mode 100644 index 0000000..aafeefa --- /dev/null +++ b/scales/pepper.scl @@ -0,0 +1,22 @@ +! pepper.scl +! +Keenan Pepper's 17-tone jazz tuning, TL 07-06-2000 + 17 +! + 21/20 + 10/9 + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 45/32 + 3/2 + 14/9 + 5/3 + 27/16 + 7/4 + 16/9 + 15/8 + 63/32 + 2/1 diff --git a/scales/pepper2.scl b/scales/pepper2.scl new file mode 100644 index 0000000..baebf4d --- /dev/null +++ b/scales/pepper2.scl @@ -0,0 +1,17 @@ +! pepper2.scl +! +Keenan Pepper's "Noble Fifth" with chromatic/diatonic semitone = Phi (12) + 12 +! + 128.66925 + 208.19121 + 287.71318 + 416.38243 + 495.90439 + 624.57364 + 704.09561 + 832.76485 + 912.28682 + 991.80879 + 1120.47803 + 2/1 diff --git a/scales/pepper_archytas12.scl b/scales/pepper_archytas12.scl new file mode 100644 index 0000000..5b0e544 --- /dev/null +++ b/scales/pepper_archytas12.scl @@ -0,0 +1,17 @@ +! pepper_archytas12.scl +! +A 3-distributionally even scale in archytas (64/63 planar) temperament + 12 +! + 121.03173 + 218.08986 + 271.34857 + 392.38030 + 489.43842 + 610.47016 + 707.52828 + 828.56002 + 881.81873 + 978.87685 + 1099.90858 + 1196.96671 diff --git a/scales/pepper_archytas7.scl b/scales/pepper_archytas7.scl new file mode 100644 index 0000000..f67fda5 --- /dev/null +++ b/scales/pepper_archytas7.scl @@ -0,0 +1,12 @@ +! pepper_archytas7.scl +! +A trivalent scale in archytas (64/63 planar) temperament + 7 +! + 174.29045 + 392.38030 + 489.43842 + 707.52828 + 881.81873 + 978.87685 + 1196.96671 diff --git a/scales/pepper_archytas8.scl b/scales/pepper_archytas8.scl new file mode 100644 index 0000000..026e2cd --- /dev/null +++ b/scales/pepper_archytas8.scl @@ -0,0 +1,13 @@ +! pepper_archytas8.scl +! +A 3-distributionally even scale in archytas (64/63 planar) temperament + 8 +! + 121.03173 + 392.38030 + 489.43842 + 610.47016 + 707.52828 + 978.87685 + 1099.90858 + 1196.96671 diff --git a/scales/pepper_didymus9.scl b/scales/pepper_didymus9.scl new file mode 100644 index 0000000..a902796 --- /dev/null +++ b/scales/pepper_didymus9.scl @@ -0,0 +1,14 @@ +! pepper_didymus9.scl +! +A trivalent scale in didymus (81/80 planar) temperament + 9 +! + 192.70000 + 385.40000 + 461.68000 + 654.38000 + 697.04000 + 889.74000 + 966.02000 + 1158.72000 + 1201.38000 diff --git a/scales/pepper_jubilee12.scl b/scales/pepper_jubilee12.scl new file mode 100644 index 0000000..7eaa2c4 --- /dev/null +++ b/scales/pepper_jubilee12.scl @@ -0,0 +1,17 @@ +! pepper_jubilee12.scl +! +A 3-distributionally even scale in jubilee (50/49 planar) temperament + 12 +! + 102.92000 + 205.84000 + 277.70000 + 380.62000 + 483.54000 + 599.66000 + 702.58000 + 805.50000 + 877.36000 + 980.28000 + 1083.20000 + 1199.32000 diff --git a/scales/pepper_meantone-killer.scl b/scales/pepper_meantone-killer.scl new file mode 100644 index 0000000..5d58ba1 --- /dev/null +++ b/scales/pepper_meantone-killer.scl @@ -0,0 +1,20 @@ +! pepper_meantone-killer.scl +! +15 circulating notes of porcupine (sort of nusecond in the far keys) +15 +! +67. +161. +228. +319. +390. +477. +552. +635. +714. +793. +876. +951. +1038. +1109. +2/1 diff --git a/scales/pepper_orwellian13.scl b/scales/pepper_orwellian13.scl new file mode 100644 index 0000000..f7d5a7d --- /dev/null +++ b/scales/pepper_orwellian13.scl @@ -0,0 +1,18 @@ +! pepper_orwellian13.scl +! +A trivalent scale in orwellian temperament + 13 +! + 43.33408 + 160.85955 + 270.47330 + 387.99877 + 431.33285 + 540.94659 + 658.47207 + 701.80615 + 819.33162 + 928.94536 + 972.27944 + 1089.80492 + 1199.41866 diff --git a/scales/pepper_orwellian9.scl b/scales/pepper_orwellian9.scl new file mode 100644 index 0000000..1204c19 --- /dev/null +++ b/scales/pepper_orwellian9.scl @@ -0,0 +1,14 @@ +! pepper_orwellian9.scl +! +A trivalent scale in orwellian temperament + 9 +! + 43.33408 + 270.47330 + 387.99877 + 431.33285 + 658.47207 + 701.80615 + 928.94536 + 972.27944 + 1199.41866 diff --git a/scales/pepper_portent11.scl b/scales/pepper_portent11.scl new file mode 100644 index 0000000..26401ce --- /dev/null +++ b/scales/pepper_portent11.scl @@ -0,0 +1,16 @@ +! pepper_portent11.scl +! +A trivalent scale in portent temperament + 11 +! + 151.53528 + 233.78395 + 385.31924 + 467.56790 + 619.10319 + 701.35186 + 852.88714 + 935.13581 + 966.70658 + 1118.24187 + 1200.49054 diff --git a/scales/pepper_sengic7.scl b/scales/pepper_sengic7.scl new file mode 100644 index 0000000..de5d5e0 --- /dev/null +++ b/scales/pepper_sengic7.scl @@ -0,0 +1,12 @@ +! pepper_sengic7.scl +! +A trivalent scale in sengic temperament + 7 +! + 237.09600 + 366.62200 + 496.14800 + 811.77500 + 941.30100 + 1070.82700 + 1200.35300 diff --git a/scales/pepper_sengic8.scl b/scales/pepper_sengic8.scl new file mode 100644 index 0000000..a0b218b --- /dev/null +++ b/scales/pepper_sengic8.scl @@ -0,0 +1,13 @@ +! pepper_sengic8.scl +! +A 3-distributionally even scale in sengic temperament + 8 +! + 237.09600 + 366.62200 + 496.14800 + 625.67400 + 811.77500 + 941.30100 + 1070.82700 + 1200.35300 diff --git a/scales/pepper_sengic9.scl b/scales/pepper_sengic9.scl new file mode 100644 index 0000000..408ddd1 --- /dev/null +++ b/scales/pepper_sengic9.scl @@ -0,0 +1,14 @@ +! pepper_sengic9.scl +! +A trivalent scale in sengic temperament + 9 +! + 129.52600 + 259.05200 + 388.57800 + 518.10400 + 704.20500 + 833.73100 + 963.25700 + 1092.78300 + 1200.35300 diff --git a/scales/pepper_sonic13.scl b/scales/pepper_sonic13.scl new file mode 100644 index 0000000..3009215 --- /dev/null +++ b/scales/pepper_sonic13.scl @@ -0,0 +1,18 @@ +! pepper_sonic13.scl +! +A trivalent scale in sonic temperament + 13 +! + 96.02000 + 311.62000 + 379.72000 + 475.74000 + 543.84000 + 639.86000 + 707.96000 + 803.98000 + 872.08000 + 968.10000 + 1036.20000 + 1132.22000 + 1200.32000 diff --git a/scales/pepper_sonic15.scl b/scales/pepper_sonic15.scl new file mode 100644 index 0000000..4213fe5 --- /dev/null +++ b/scales/pepper_sonic15.scl @@ -0,0 +1,20 @@ +! pepper_sonic15.scl +! +A trivalent scale in sonic temperament + 15 +! + 96.02000 + 164.12000 + 215.60000 + 311.62000 + 379.72000 + 475.74000 + 543.84000 + 639.86000 + 707.96000 + 803.98000 + 872.08000 + 968.10000 + 1036.20000 + 1132.22000 + 1200.32000 diff --git a/scales/pepper_starling11.scl b/scales/pepper_starling11.scl new file mode 100644 index 0000000..b18b213 --- /dev/null +++ b/scales/pepper_starling11.scl @@ -0,0 +1,16 @@ +! pepper_starling11.scl +! +A trivalent scale in starling temperament + 11 +! + 78.92909 + 266.49112 + 311.10146 + 390.03054 + 577.59258 + 656.52166 + 701.13200 + 888.69403 + 967.62312 + 1155.18515 + 1199.79549 diff --git a/scales/pepper_starling7.scl b/scales/pepper_starling7.scl new file mode 100644 index 0000000..79e482b --- /dev/null +++ b/scales/pepper_starling7.scl @@ -0,0 +1,12 @@ +! pepper_starling7.scl +! +A trivalent scale in starling temperament + 7 +! + 78.92909 + 311.10146 + 390.03054 + 622.20291 + 701.13200 + 967.62312 + 1199.79549 diff --git a/scales/pepper_zeus7.scl b/scales/pepper_zeus7.scl new file mode 100644 index 0000000..aa95d93 --- /dev/null +++ b/scales/pepper_zeus7.scl @@ -0,0 +1,12 @@ +! pepper_zeus7.scl +! +A trivalent scale in zeus temperament + 7 +! + 157.11062 + 388.03261 + 545.14324 + 702.25386 + 933.17585 + 1090.28647 + 1200.17235 diff --git a/scales/pepper_zeus8.scl b/scales/pepper_zeus8.scl new file mode 100644 index 0000000..267dfb2 --- /dev/null +++ b/scales/pepper_zeus8.scl @@ -0,0 +1,13 @@ +! pepper_zeus8.scl +! +A 3-distributionally even scale in zeus temperament + 8 +! + 157.11100 + 314.22200 + 471.33300 + 655.02900 + 812.14000 + 969.25100 + 1126.36200 + 1200.17200 diff --git a/scales/perkis-indian.scl b/scales/perkis-indian.scl new file mode 100644 index 0000000..5491109 --- /dev/null +++ b/scales/perkis-indian.scl @@ -0,0 +1,27 @@ +! perkis-indian.scl +! +Indian 22 Perkis + 22 +! + 36/35 + 18/17 + 12/11 + 9/8 + 36/31 + 6/5 + 5/4 + 9/7 + 4/3 + 26/19 + 600.00000 + 13/9 + 52/35 + 26/17 + 167/106 + 13/8 + 99/59 + 26/15 + 52/29 + 115/62 + 52/27 + 2/1 diff --git a/scales/perrett-tt.scl b/scales/perrett-tt.scl new file mode 100644 index 0000000..b05fb38 --- /dev/null +++ b/scales/perrett-tt.scl @@ -0,0 +1,24 @@ +! perrett-tt.scl +! +Perrett Tierce-Tone + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 63/40 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 63/32 + 2/1 diff --git a/scales/perrett.scl b/scales/perrett.scl new file mode 100644 index 0000000..af1bc12 --- /dev/null +++ b/scales/perrett.scl @@ -0,0 +1,12 @@ +! perrett.scl +! +Perrett / Tartini / Pachymeres Enharmonic + 7 +! + 21/20 + 16/15 + 4/3 + 3/2 + 63/40 + 8/5 + 2/1 diff --git a/scales/perrett_14.scl b/scales/perrett_14.scl new file mode 100644 index 0000000..cce23d6 --- /dev/null +++ b/scales/perrett_14.scl @@ -0,0 +1,19 @@ +! perrett_14.scl +! +Perrett's 14-tone system (subscale of tierce-tone) + 14 +! + 21/20 + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 7/5 + 3/2 + 63/40 + 5/3 + 7/4 + 15/8 + 63/32 + 2/1 diff --git a/scales/perrett_chrom.scl b/scales/perrett_chrom.scl new file mode 100644 index 0000000..976f5b9 --- /dev/null +++ b/scales/perrett_chrom.scl @@ -0,0 +1,12 @@ +! perrett_chrom.scl +! +Perrett's Chromatic + 7 +! + 21/20 + 9/8 + 4/3 + 3/2 + 63/40 + 27/16 + 2/1 diff --git a/scales/perry.scl b/scales/perry.scl new file mode 100644 index 0000000..c93163d --- /dev/null +++ b/scales/perry.scl @@ -0,0 +1,17 @@ +! perry.scl +! +Robin Perry, Tuning List 22-9-'98 + 12 +! + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/perry2.scl b/scales/perry2.scl new file mode 100644 index 0000000..9c17850 --- /dev/null +++ b/scales/perry2.scl @@ -0,0 +1,17 @@ +! perry2.scl +! +Robin Perry, 7-limit scale, TL 22-10-2006 + 12 +! + 21/20 + 10/9 + 7/6 + 5/4 + 4/3 + 10/7 + 3/2 + 100/63 + 5/3 + 7/4 + 40/21 + 2/1 diff --git a/scales/perry3.scl b/scales/perry3.scl new file mode 100644 index 0000000..3550e1c --- /dev/null +++ b/scales/perry3.scl @@ -0,0 +1,18 @@ +! perry3.scl +! +Robin Perry, symmetrical 3,5,17 scale, TL 22-10-2006 + 13 +! + 17/16 + 9/8 + 20/17 + 5/4 + 4/3 + 24/17 + 17/12 + 3/2 + 8/5 + 17/10 + 16/9 + 32/17 + 2/1 diff --git a/scales/perry4.scl b/scales/perry4.scl new file mode 100644 index 0000000..fd5bac4 --- /dev/null +++ b/scales/perry4.scl @@ -0,0 +1,32 @@ +! perry4.scl +! +Robin Perry, Just About fretboard + 27 +! + 66.00000 + 90.00000 + 114.00000 + 180.00000 + 204.00000 + 270.00000 + 294.00000 + 318.00000 + 384.00000 + 408.00000 + 474.00000 + 498.00000 + 588.00000 + 612.00000 + 678.00000 + 702.00000 + 768.00000 + 792.00000 + 816.00000 + 882.00000 + 906.00000 + 972.00000 + 996.00000 + 1086.00000 + 1110.00000 + 1176.00000 + 1200.00000 diff --git a/scales/persian-far.scl b/scales/persian-far.scl new file mode 100644 index 0000000..5d76f94 --- /dev/null +++ b/scales/persian-far.scl @@ -0,0 +1,22 @@ +! persian-far.scl +! +Hormoz Farhat, average of observed Persian tar and sehtar tunings (1966) + 17 +! + 90.00000 + 135.00000 + 205.00000 + 295.00000 + 340.00000 + 410.00000 + 500.00000 + 565.00000 + 630.00000 + 700.00000 + 790.00000 + 835.00000 + 905.00000 + 995.00000 + 1040.00000 + 1110.00000 + 2/1 diff --git a/scales/persian-far53.scl b/scales/persian-far53.scl new file mode 100644 index 0000000..6b75228 --- /dev/null +++ b/scales/persian-far53.scl @@ -0,0 +1,23 @@ +! persian-far53.scl +! +Hormoz Farhat, pitches in The Dastgah Concept in Persian Music in 53-tET + 18 +! + 90.56604 + 135.84906 + 203.77358 + 294.33962 + 339.62264 + 407.54717 + 498.11321 + 566.03774 + 611.32075 + 633.96226 + 701.88679 + 792.45283 + 837.73585 + 905.66038 + 996.22642 + 1041.50943 + 1109.43396 + 2/1 diff --git a/scales/persian-hr.scl b/scales/persian-hr.scl new file mode 100644 index 0000000..4e703e6 --- /dev/null +++ b/scales/persian-hr.scl @@ -0,0 +1,23 @@ +! persian-hr.scl +! +Hatami-Rankin Persian scale + 18 +! + 12/11 + 9/8 + 7/6 + 6/5 + 11/9 + 5/4 + 4/3 + 7/5 + 16/11 + 3/2 + 8/5 + 44/27 + 5/3 + 7/4 + 9/5 + 15/8 + 64/33 + 2/1 diff --git a/scales/persian-vaz.scl b/scales/persian-vaz.scl new file mode 100644 index 0000000..b970cca --- /dev/null +++ b/scales/persian-vaz.scl @@ -0,0 +1,22 @@ +! persian-vaz.scl +! +Vaziri's Persian tuning, using quartertones + 17 +! + 100.00000 + 150.00000 + 200.00000 + 300.00000 + 350.00000 + 400.00000 + 500.00000 + 550.00000 + 650.00000 + 700.00000 + 800.00000 + 850.00000 + 900.00000 + 1000.00000 + 1050.00000 + 1100.00000 + 2/1 diff --git a/scales/persian.scl b/scales/persian.scl new file mode 100644 index 0000000..3070a89 --- /dev/null +++ b/scales/persian.scl @@ -0,0 +1,22 @@ +! persian.scl +! +Persian Tar Scale, from Dariush Anooshfar, TL 2-10-94 + 17 +! + 256/243 + 27/25 + 9/8 + 32/27 + 243/200 + 81/64 + 4/3 + 25/18 + 36/25 + 3/2 + 128/81 + 81/50 + 27/16 + 16/9 + 729/400 + 243/128 + 2/1 diff --git a/scales/persian2.scl b/scales/persian2.scl new file mode 100644 index 0000000..3e64ea9 --- /dev/null +++ b/scales/persian2.scl @@ -0,0 +1,22 @@ +! persian2.scl +! +Traditional Persian scale, from Mark Rankin + 17 +! + 256/243 + 54/49 + 9/8 + 32/27 + 27/22 + 81/64 + 4/3 + 1024/729 + 72/49 + 3/2 + 128/81 + 18/11 + 27/16 + 16/9 + 4096/2187 + 96/49 + 2/1 diff --git a/scales/phi1_13.scl b/scales/phi1_13.scl new file mode 100644 index 0000000..5e80709 --- /dev/null +++ b/scales/phi1_13.scl @@ -0,0 +1,18 @@ +! phi1_13.scl +! +Pythagorean scale with (Phi + 1) / 2 as fifth + 13 +! + 69.097 cents + 198.542 cents + 267.639 cents + 397.084 cents + 466.181 cents + 535.278 cents + 664.722 cents + 733.819 cents + 802.916 cents + 932.361 cents + 1001.458 cents + 1130.903 cents + 2/1 diff --git a/scales/phi_10.scl b/scales/phi_10.scl new file mode 100644 index 0000000..4fd0417 --- /dev/null +++ b/scales/phi_10.scl @@ -0,0 +1,15 @@ +! phi_10.scl +! +Pythagorean scale with Phi as fifth + 10 +! + 99.271 cents + 198.542 cents + 366.910 cents + 466.181 cents + 565.451 cents + 733.819 cents + 833.090 cents + 932.361 cents + 1100.729 cents + 2/1 diff --git a/scales/phi_11.scl b/scales/phi_11.scl new file mode 100644 index 0000000..e980bf8 --- /dev/null +++ b/scales/phi_11.scl @@ -0,0 +1,16 @@ +! phi_11.scl +! +Non-octave Phi-based scale, Aaron Hunt, TL 29-08-2007 + 11 +! + 99.27089 + 198.54178 + 297.81267 + 366.90970 + 466.18059 + 565.45148 + 664.72237 + 733.81941 + 833.09030 + 932.36119 + 1031.63207 diff --git a/scales/phi_12.scl b/scales/phi_12.scl new file mode 100644 index 0000000..a489477 --- /dev/null +++ b/scales/phi_12.scl @@ -0,0 +1,17 @@ +! phi_12.scl +! +Non-octave Pythagorean scale with Phi as fourth. Jacky Ligon TL 12-04-2001 + 12 +! + 121.54600 + 243.09200 + 318.21200 + 439.75800 + 514.87800 + 636.42400 + 757.97000 + 833.09000 + 954.63600 + 1029.75600 + 1151.30200 + 1226.42200 diff --git a/scales/phi_13.scl b/scales/phi_13.scl new file mode 100644 index 0000000..a051539 --- /dev/null +++ b/scales/phi_13.scl @@ -0,0 +1,18 @@ +! phi_13.scl +! +Pythagorean scale with Phi as fifth + 13 +! + 99.271 cents + 198.542 cents + 267.639 cents + 366.910 cents + 466.181 cents + 565.451 cents + 634.549 cents + 733.819 cents + 833.090 cents + 932.361 cents + 1001.458 cents + 1100.729 cents + 2/1 diff --git a/scales/phi_13a.scl b/scales/phi_13a.scl new file mode 100644 index 0000000..fe0906b --- /dev/null +++ b/scales/phi_13a.scl @@ -0,0 +1,18 @@ +! phi_13a.scl +! +Non-octave Pythagorean scale with Phi as fifth, Jacky Ligon TL 12-04-2001 + 13 +! + 121.54600 + 196.66600 + 318.21200 + 393.33200 + 514.87800 + 636.42400 + 711.54400 + 833.09000 + 908.21000 + 1029.75600 + 1151.30200 + 1226.42200 + 1347.96800 diff --git a/scales/phi_13b.scl b/scales/phi_13b.scl new file mode 100644 index 0000000..8654805 --- /dev/null +++ b/scales/phi_13b.scl @@ -0,0 +1,18 @@ +! phi_13b.scl +! +Non-octave Pythagorean scale with 12 3/2s, Jacky Ligon, TL 12-04-2001 + 13 +! + 102.41400 + 165.70900 + 268.12300 + 331.41800 + 433.83200 + 536.24600 + 599.54100 + 3/2 + 765.25000 + 867.66400 + 970.07800 + 1033.37300 + 1135.78700 diff --git a/scales/phi_17.scl b/scales/phi_17.scl new file mode 100644 index 0000000..41c30d8 --- /dev/null +++ b/scales/phi_17.scl @@ -0,0 +1,22 @@ +! phi_17.scl +! +Phi + 1 equal division by 17, Brouncker (1653) + 17 +! + 98.011 cents + 196.021 cents + 294.032 cents + 392.042 cents + 490.053 cents + 588.064 cents + 686.074 cents + 784.085 cents + 882.096 cents + 980.106 cents + 1078.117 cents + 1176.127 cents + 1274.138 cents + 1372.149 cents + 1470.159 cents + 1568.170 cents + 1666.181 cents diff --git a/scales/phi_7b.scl b/scales/phi_7b.scl new file mode 100644 index 0000000..289c7d3 --- /dev/null +++ b/scales/phi_7b.scl @@ -0,0 +1,12 @@ +! phi_7b.scl +! +Heinz Bohlen's Pythagorean scale with Phi as fifth (1999) + 7 +! + 99.27100 + 235.77000 + 366.91000 + 466.18100 + 597.32000 + 733.81900 + 833.09000 diff --git a/scales/phi_7be.scl b/scales/phi_7be.scl new file mode 100644 index 0000000..b37d1a1 --- /dev/null +++ b/scales/phi_7be.scl @@ -0,0 +1,12 @@ +! phi_7be.scl +! +36-tET approximation of phi_7b + 7 +! + 100.00000 + 233.33333 + 366.66667 + 466.66667 + 600.00000 + 733.33333 + 833.33333 diff --git a/scales/phi_8.scl b/scales/phi_8.scl new file mode 100644 index 0000000..5d1f674 --- /dev/null +++ b/scales/phi_8.scl @@ -0,0 +1,13 @@ +! phi_8.scl +! +Non-octave Pythagorean scale with 4/3s, Jacky Ligon, TL 12-04-2001 + 8 +! + 117.57200 + 190.23600 + 307.80900 + 380.47300 + 4/3 + 615.61700 + 688.28100 + 805.85400 diff --git a/scales/phi_8a.scl b/scales/phi_8a.scl new file mode 100644 index 0000000..62b6ceb --- /dev/null +++ b/scales/phi_8a.scl @@ -0,0 +1,13 @@ +! phi_8a.scl +! +Non-octave Pythagorean scale with 5/4s, Jacky Ligon, TL 12-04-2001 + 8 +! + 91.19600 + 147.55900 + 238.75500 + 295.11700 + 5/4 + 477.51000 + 533.87200 + 625.06900 diff --git a/scales/phi_inv_13.scl b/scales/phi_inv_13.scl new file mode 100644 index 0000000..2a770f9 --- /dev/null +++ b/scales/phi_inv_13.scl @@ -0,0 +1,18 @@ +! phi_inv_13.scl +! +Phi root of 2 generator, WF=Fibonacci series. Jacky Ligon/Aaron Johnson + 13 +! + 108.20393 + 216.40786 + 283.28157 + 391.48551 + 499.68944 + 566.56315 + 674.76708 + 741.64079 + 849.84472 + 958.04865 + 1024.92236 + 1133.12629 + 2/1 diff --git a/scales/phi_inv_8.scl b/scales/phi_inv_8.scl new file mode 100644 index 0000000..7bd83b5 --- /dev/null +++ b/scales/phi_inv_8.scl @@ -0,0 +1,13 @@ +! phi_inv_8.scl +! +Phi root of 2 generator, WF=Fibonacci series. Jacky Ligon/Aaron Johnson + 8 +! + 108.20393 + 283.28157 + 391.48551 + 566.56315 + 741.64079 + 849.84472 + 1024.92236 + 2/1 diff --git a/scales/phi_mos2.scl b/scales/phi_mos2.scl new file mode 100644 index 0000000..58b0aa1 --- /dev/null +++ b/scales/phi_mos2.scl @@ -0,0 +1,14 @@ +! phi_mos2.scl +! +Period Phi, generator 2nd successive golden section of Phi, Cameron Bobro + 9 +! + 69.09700 + 168.36790 + 267.63880 + 366.90970 + 436.00670 + 535.27760 + 634.54850 + 733.81940 + 833.09030 diff --git a/scales/phi_mos3.scl b/scales/phi_mos3.scl new file mode 100644 index 0000000..7e220ca --- /dev/null +++ b/scales/phi_mos3.scl @@ -0,0 +1,12 @@ +! phi_mos3.scl +! +Period Phi, generator 3rd successive golden section of Phi, Cameron Bobro + 7 +! + 110.00734 + 235.77441 + 345.78175 + 471.54882 + 581.55616 + 707.32323 + 833.09030 diff --git a/scales/phi_mos4.scl b/scales/phi_mos4.scl new file mode 100644 index 0000000..7c40e3f --- /dev/null +++ b/scales/phi_mos4.scl @@ -0,0 +1,16 @@ +! phi_mos4.scl +! +Period Phi, generator 4th successive golden section of Phi, Cameron Bobro + 11 +! + 63.69166 + 149.46366 + 213.15532 + 298.92732 + 362.61898 + 448.39098 + 512.08264 + 597.85464 + 661.54630 + 747.31830 + 833.09030 diff --git a/scales/phillips_19.scl b/scales/phillips_19.scl new file mode 100644 index 0000000..de0c9cf --- /dev/null +++ b/scales/phillips_19.scl @@ -0,0 +1,24 @@ +! phillips_19.scl +! +Pauline Phillips, organ manual scale, TL 7-10-2002 + 19 +! + 84.00000 + 155.00000 + 200.00000 + 268.00000 + 384.00000 + 400.00000 + 468.00000 + 500.00000 + 584.00000 + 668.00000 + 700.00000 + 768.00000 + 855.00000 + 900.00000 + 968.00000 + 1084.00000 + 1100.00000 + 1168.00000 + 2/1 diff --git a/scales/phillips_19a.scl b/scales/phillips_19a.scl new file mode 100644 index 0000000..1cb9afd --- /dev/null +++ b/scales/phillips_19a.scl @@ -0,0 +1,24 @@ +! phillips_19a.scl +! +Adaptation by Gene Ward Smith with more consonant chords, TL 25-10-2002 + 19 +! + 83.67670 + 152.13946 + 199.68304 + 268.14580 + 384.15214 + 399.36609 + 467.82884 + 500.15848 + 583.83518 + 652.29794 + 699.84152 + 768.30428 + 851.98098 + 899.52456 + 967.98732 + 1083.99366 + 1099.20761 + 1152.45642 + 2/1 diff --git a/scales/phillips_22.scl b/scales/phillips_22.scl new file mode 100644 index 0000000..d31ef7a --- /dev/null +++ b/scales/phillips_22.scl @@ -0,0 +1,27 @@ +! phillips_22.scl +! +All-key 19-limit JI scale (2002), TL 21-10-2002 + 22 +! + 135/128 + 35/32 + 9/8 + 76545/65536 + 75/64 + 5/4 + 81/64 + 21/16 + 10935/8192 + 45/32 + 3/2 + 399/256 + 25/16 + 51/32 + 105/64 + 27/16 + 7/4 + 225/128 + 15/8 + 243/128 + 63/32 + 2/1 diff --git a/scales/phillips_ji.scl b/scales/phillips_ji.scl new file mode 100644 index 0000000..0e4408e --- /dev/null +++ b/scales/phillips_ji.scl @@ -0,0 +1,26 @@ +! phillips_ji.scl +! +Pauline Phillips, JI 0 #/b "C" scale (2002), TL 8-10-2002 + 21 +! + 135/128 + 35/32 + 9/8 + 76545/65536 + 75/64 + 5/4 + 81/64 + 10935/8192 + 45/32 + 189/128 + 3/2 + 399/256 + 25/16 + 105/64 + 27/16 + 7/4 + 225/128 + 15/8 + 243/128 + 63/32 + 2/1 diff --git a/scales/phryg_chromcon2.scl b/scales/phryg_chromcon2.scl new file mode 100644 index 0000000..cfba988 --- /dev/null +++ b/scales/phryg_chromcon2.scl @@ -0,0 +1,12 @@ +! PHRYG_CHROMcon2.scl +! +Harmonic Conjunct Chromatic Phrygian + 7 +! + 13/12 + 9/8 + 7/6 + 3/2 + 19/12 + 5/3 + 2/1 diff --git a/scales/phryg_chromconi.scl b/scales/phryg_chromconi.scl new file mode 100644 index 0000000..2131cef --- /dev/null +++ b/scales/phryg_chromconi.scl @@ -0,0 +1,12 @@ +! phryg_chromconi.scl +! +Inverted Conjunct Chromatic Phrygian + 7 +! + 13/12 + 4/3 + 17/12 + 3/2 + 11/6 + 23/12 + 2/1 diff --git a/scales/phryg_chrominv.scl b/scales/phryg_chrominv.scl new file mode 100644 index 0000000..65591b6 --- /dev/null +++ b/scales/phryg_chrominv.scl @@ -0,0 +1,12 @@ +! PHRYG_CHROMinv.scl +! +Inverted Schlesinger's Chromatic Phrygian + 7 +! + 25/24 + 13/12 + 4/3 + 3/2 + 19/12 + 5/3 + 2/1 diff --git a/scales/phryg_chromt.scl b/scales/phryg_chromt.scl new file mode 100644 index 0000000..336d710 --- /dev/null +++ b/scales/phryg_chromt.scl @@ -0,0 +1,29 @@ +! phryg_chromt.scl +! +Phrygian Chromatic Tonos + 24 +! + 18/17 + 9/8 + 6/5 + 36/29 + 9/7 + 18/13 + 3/2 + 36/23 + 8/5 + 18/11 + 9/5 + 2/1 + 36/17 + 9/4 + 12/5 + 72/29 + 18/7 + 36/13 + 3/1 + 72/23 + 16/5 + 36/11 + 18/5 + 4/1 diff --git a/scales/phryg_diat.scl b/scales/phryg_diat.scl new file mode 100644 index 0000000..dea802e --- /dev/null +++ b/scales/phryg_diat.scl @@ -0,0 +1,13 @@ +! PHRYG_DIAT.scl +! +Schlesinger's Phrygian Harmonia, a subharmonic series through 13 from 24 + 8 +! + 12/11 + 6/5 + 4/3 + 24/17 + 3/2 + 12/7 + 24/13 + 2/1 diff --git a/scales/phryg_diatcon.scl b/scales/phryg_diatcon.scl new file mode 100644 index 0000000..4a9326d --- /dev/null +++ b/scales/phryg_diatcon.scl @@ -0,0 +1,12 @@ +! phryg_diatcon.scl +! +A Phrygian Diatonic with its own trite synemmenon replacing paramese + 7 +! + 12/11 + 6/5 + 4/3 + 24/17 + 12/7 + 24/13 + 2/1 diff --git a/scales/phryg_diatinv.scl b/scales/phryg_diatinv.scl new file mode 100644 index 0000000..831e84d --- /dev/null +++ b/scales/phryg_diatinv.scl @@ -0,0 +1,12 @@ +! PHRYG_DIATINV.scl +! +Inverted Conjunct Phrygian Harmonia with 17, the local Trite Synemmenon + 7 +! + 13/12 + 7/6 + 17/12 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/phryg_diatsinv.scl b/scales/phryg_diatsinv.scl new file mode 100644 index 0000000..a83670e --- /dev/null +++ b/scales/phryg_diatsinv.scl @@ -0,0 +1,13 @@ +! phryg_diatsinv.scl +! +Inverted Schlesinger's Phrygian Harmonia, a harmonic series from 12 from 24 + 8 +! + 13/12 + 7/6 + 4/3 + 17/12 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/phryg_enh.scl b/scales/phryg_enh.scl new file mode 100644 index 0000000..30e88d0 --- /dev/null +++ b/scales/phryg_enh.scl @@ -0,0 +1,12 @@ +! PHRYG_ENH.scl +! +Schlesinger's Phrygian Harmonia in the enharmonic genus + 7 +! + 48/47 + 24/23 + 4/3 + 3/2 + 48/31 + 8/5 + 2/1 diff --git a/scales/phryg_enhcon.scl b/scales/phryg_enhcon.scl new file mode 100644 index 0000000..276edad --- /dev/null +++ b/scales/phryg_enhcon.scl @@ -0,0 +1,12 @@ +! PHRYG_ENHcon.scl +! +Harmonic Conjunct Enharmonic Phrygian + 7 +! + 13/12 + 53/48 + 9/8 + 3/2 + 37/24 + 19/12 + 2/1 diff --git a/scales/phryg_enhinv.scl b/scales/phryg_enhinv.scl new file mode 100644 index 0000000..a3c5e60 --- /dev/null +++ b/scales/phryg_enhinv.scl @@ -0,0 +1,12 @@ +! phryg_enhinv.scl +! +Inverted Schlesinger's Enharmonic Phrygian Harmonia + 7 +! + 5/4 + 31/24 + 4/3 + 3/2 + 23/12 + 47/24 + 2/1 diff --git a/scales/phryg_enhinv2.scl b/scales/phryg_enhinv2.scl new file mode 100644 index 0000000..9fe8401 --- /dev/null +++ b/scales/phryg_enhinv2.scl @@ -0,0 +1,12 @@ +! PHRYG_ENHINV2.scl +! +Inverted harmonic form of Schlesinger's Enharmonic Phrygian + 7 +! + 49/48 + 25/24 + 4/3 + 3/2 + 37/24 + 19/12 + 2/1 diff --git a/scales/phryg_penta.scl b/scales/phryg_penta.scl new file mode 100644 index 0000000..d838faf --- /dev/null +++ b/scales/phryg_penta.scl @@ -0,0 +1,12 @@ +! phryg_penta.scl +! +Schlesinger's Phrygian Harmonia in the pentachromatic genus + 7 +! + 30/29 + 12/11 + 4/3 + 3/2 + 30/19 + 12/7 + 2/1 diff --git a/scales/phryg_pis.scl b/scales/phryg_pis.scl new file mode 100644 index 0000000..29262a3 --- /dev/null +++ b/scales/phryg_pis.scl @@ -0,0 +1,20 @@ +! phryg_pis.scl +! +The Diatonic Perfect Immutable System in the Phrygian Tonos + 15 +! + 9/8 + 9/7 + 18/13 + 3/2 + 18/11 + 9/5 + 2/1 + 36/17 + 9/4 + 18/7 + 36/13 + 3/1 + 36/11 + 18/5 + 4/1 diff --git a/scales/phryg_tri1.scl b/scales/phryg_tri1.scl new file mode 100644 index 0000000..51fe605 --- /dev/null +++ b/scales/phryg_tri1.scl @@ -0,0 +1,12 @@ +! phryg_tri1.scl +! +Schlesinger's Phrygian Harmonia in the chromatic genus + 7 +! + 24/23 + 12/11 + 4/3 + 3/2 + 8/5 + 12/7 + 2/1 diff --git a/scales/phryg_tri1inv.scl b/scales/phryg_tri1inv.scl new file mode 100644 index 0000000..5b24cc5 --- /dev/null +++ b/scales/phryg_tri1inv.scl @@ -0,0 +1,12 @@ +! PHRYG_TRI1INV.scl +! +Inverted Schlesinger's Chromatic Phrygian Harmonia + 7 +! + 7/6 + 5/4 + 4/3 + 3/2 + 11/6 + 23/12 + 2/1 diff --git a/scales/phryg_tri2.scl b/scales/phryg_tri2.scl new file mode 100644 index 0000000..ab60d3c --- /dev/null +++ b/scales/phryg_tri2.scl @@ -0,0 +1,12 @@ +! phryg_tri2.scl +! +Schlesinger's Phrygian Harmonia in the second trichromatic genus + 7 +! + 36/35 + 12/11 + 4/3 + 3/2 + 36/23 + 12/7 + 2/1 diff --git a/scales/phryg_tri3.scl b/scales/phryg_tri3.scl new file mode 100644 index 0000000..ea69b97 --- /dev/null +++ b/scales/phryg_tri3.scl @@ -0,0 +1,12 @@ +! phryg_tri3.scl +! +Schlesinger's Phrygian Harmonia in the first trichromatic genus + 7 +! + 36/35 + 18/17 + 4/3 + 3/2 + 36/23 + 18/11 + 2/1 diff --git a/scales/phrygian.scl b/scales/phrygian.scl new file mode 100644 index 0000000..459382d --- /dev/null +++ b/scales/phrygian.scl @@ -0,0 +1,17 @@ +! phrygian.scl +! +Old Phrygian ?? + 12 +! + 10/9 + 6/5 + 5/4 + 4/3 + 27/20 + 40/27 + 3/2 + 8/5 + 5/3 + 16/9 + 9/5 + 2 diff --git a/scales/phrygian_diat.scl b/scales/phrygian_diat.scl new file mode 100644 index 0000000..691b5ad --- /dev/null +++ b/scales/phrygian_diat.scl @@ -0,0 +1,29 @@ +! phrygian_diat.scl +! +Phrygian Diatonic Tonos + 24 +! + 18/17 + 9/8 + 9/7 + 4/3 + 18/13 + 36/25 + 3/2 + 18/11 + 12/7 + 9/5 + 36/19 + 2/1 + 36/17 + 9/4 + 18/7 + 8/3 + 36/13 + 72/25 + 3/1 + 36/11 + 24/7 + 18/5 + 72/19 + 4/1 diff --git a/scales/phrygian_enh.scl b/scales/phrygian_enh.scl new file mode 100644 index 0000000..b795525 --- /dev/null +++ b/scales/phrygian_enh.scl @@ -0,0 +1,17 @@ +! phrygian_enh.scl +! +Phrygian Enharmonic Tonos + 12 +! + 18/17 + 9/8 + 36/31 + 72/61 + 6/5 + 4/3 + 3/2 + 72/47 + 48/31 + 36/23 + 72/41 + 2/1 diff --git a/scales/piano.scl b/scales/piano.scl new file mode 100644 index 0000000..fbe6ae8 --- /dev/null +++ b/scales/piano.scl @@ -0,0 +1,24 @@ +! piano.scl +! +Enhanced Piano Total Gamut, see 1/1 vol. 8/2 January 1994 + 19 +! + 135/128 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 4/3 + 45/32 + 64/45 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 7/4 + 16/9 + 15/8 + 63/32 + 2/1 diff --git a/scales/piano7.scl b/scales/piano7.scl new file mode 100644 index 0000000..a647d32 --- /dev/null +++ b/scales/piano7.scl @@ -0,0 +1,17 @@ +! piano7.scl +! +Enhanced piano 7-limit + 12 +! + 135/128 + 9/8 + 7/6 + 5/4 + 4/3 + 45/32 + 3/2 + 14/9 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_10.scl b/scales/pipedum_10.scl new file mode 100644 index 0000000..b591762 --- /dev/null +++ b/scales/pipedum_10.scl @@ -0,0 +1,15 @@ +! pipedum_10.scl +! +2048/2025, 34171875/33554432 are homophonic intervals + 10 +! + 16/15 + 75/64 + 5/4 + 4/3 + 64/45 + 1024/675 + 3375/2048 + 225/128 + 15/8 + 2/1 diff --git a/scales/pipedum_10a.scl b/scales/pipedum_10a.scl new file mode 100644 index 0000000..ebd73e7 --- /dev/null +++ b/scales/pipedum_10a.scl @@ -0,0 +1,15 @@ +! pipedum_10a.scl +! +2048/2025, 25/24 are homophonic intervals + 10 +! + 16/15 + 9/8 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 16/9 + 15/8 + 2/1 diff --git a/scales/pipedum_10b.scl b/scales/pipedum_10b.scl new file mode 100644 index 0000000..f59b176 --- /dev/null +++ b/scales/pipedum_10b.scl @@ -0,0 +1,15 @@ +! pipedum_10b.scl +! +225/224, 64/63, 25/24 are homophonic intervals + 10 +! + 16/15 + 9/8 + 6/5 + 4/3 + 45/32 + 3/2 + 8/5 + 128/75 + 15/8 + 2/1 diff --git a/scales/pipedum_10c.scl b/scales/pipedum_10c.scl new file mode 100644 index 0000000..c6387de --- /dev/null +++ b/scales/pipedum_10c.scl @@ -0,0 +1,15 @@ +! pipedum_10c.scl +! +225/224, 64/63, 49/48 are homophonic intervals + 10 +! + 15/14 + 7/6 + 5/4 + 4/3 + 10/7 + 3/2 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_10d.scl b/scales/pipedum_10d.scl new file mode 100644 index 0000000..140c002 --- /dev/null +++ b/scales/pipedum_10d.scl @@ -0,0 +1,15 @@ +! pipedum_10d.scl +! +1029/1024, 2048/2025, 64/63 are homophonic intervals + 10 +! + 16/15 + 8/7 + 128/105 + 21/16 + 64/45 + 3/2 + 512/315 + 12/7 + 28/15 + 2/1 diff --git a/scales/pipedum_10e.scl b/scales/pipedum_10e.scl new file mode 100644 index 0000000..28f39ba --- /dev/null +++ b/scales/pipedum_10e.scl @@ -0,0 +1,15 @@ +! pipedum_10e.scl +! +2048/2025, 64/63, 49/48 are homophonic intervals + 10 +! + 35/32 + 7/6 + 5/4 + 4/3 + 45/32 + 14/9 + 105/64 + 16/9 + 15/8 + 2/1 diff --git a/scales/pipedum_10f.scl b/scales/pipedum_10f.scl new file mode 100644 index 0000000..fca3ebd --- /dev/null +++ b/scales/pipedum_10f.scl @@ -0,0 +1,15 @@ +! pipedum_10f.scl +! +225/224, 64/63, 28/27 are homophonic intervals + 10 +! + 15/14 + 9/8 + 5/4 + 4/3 + 10/7 + 3/2 + 45/28 + 16/9 + 15/8 + 2/1 diff --git a/scales/pipedum_10g.scl b/scales/pipedum_10g.scl new file mode 100644 index 0000000..544e337 --- /dev/null +++ b/scales/pipedum_10g.scl @@ -0,0 +1,15 @@ +! pipedum_10g.scl +! +225/224, 1029/1024, 2048/2025 are homophonic intervals + 10 +! + 15/14 + 8/7 + 56/45 + 4/3 + 64/45 + 32/21 + 512/315 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_10h.scl b/scales/pipedum_10h.scl new file mode 100644 index 0000000..dfba555 --- /dev/null +++ b/scales/pipedum_10h.scl @@ -0,0 +1,15 @@ +! pipedum_10h.scl +! +225/224, 1029/1024, 64/63 are homophonic intervals + 10 +! + 35/32 + 7/6 + 5/4 + 4/3 + 10/7 + 49/32 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_10i.scl b/scales/pipedum_10i.scl new file mode 100644 index 0000000..893a00d --- /dev/null +++ b/scales/pipedum_10i.scl @@ -0,0 +1,15 @@ +! pipedum_10i.scl +! +225/224, 2048/2025, 49/48 are homophonic intervals + 10 +! + 16/15 + 9/8 + 315/256 + 21/16 + 45/32 + 3/2 + 8/5 + 7/4 + 28/15 + 2/1 diff --git a/scales/pipedum_10j.scl b/scales/pipedum_10j.scl new file mode 100644 index 0000000..7c9962f --- /dev/null +++ b/scales/pipedum_10j.scl @@ -0,0 +1,15 @@ +! pipedum_10j.scl +! +25/24, 28/27, 49/48, Gene Ward Smith, 2002 + 10 +! + 36/35 + 7/6 + 6/5 + 4/3 + 7/5 + 3/2 + 8/5 + 7/4 + 28/15 + 2/1 diff --git a/scales/pipedum_10k.scl b/scales/pipedum_10k.scl new file mode 100644 index 0000000..2e9f5e1 --- /dev/null +++ b/scales/pipedum_10k.scl @@ -0,0 +1,15 @@ +! pipedum_10k.scl +! +2048/2025, 225/224, 2401/2400 + 10 +! + 15/14 + 8/7 + 49/40 + 21/16 + 45/32 + 675/448 + 45/28 + 392/225 + 28/15 + 2/1 diff --git a/scales/pipedum_10l.scl b/scales/pipedum_10l.scl new file mode 100644 index 0000000..e57c17e --- /dev/null +++ b/scales/pipedum_10l.scl @@ -0,0 +1,15 @@ +! pipedum_10l.scl +! +64/63, 225/224 and 2401/2400 + 10 +! + 10/9 + 8/7 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 15/8 + 2/1 diff --git a/scales/pipedum_10m.scl b/scales/pipedum_10m.scl new file mode 100644 index 0000000..f0f3a04 --- /dev/null +++ b/scales/pipedum_10m.scl @@ -0,0 +1,15 @@ +! pipedum_10m.scl +! +2.7.13 Fokker block (free-floating parallelogram definition) 343/338, 28672/28561. Keenan Pepper, 2011 + 10 +! + 14/13 + 1183/1024 + 637/512 + 169/128 + 91/64 + 49/32 + 13/8 + 7/4 + 49/26 + 2/1 diff --git a/scales/pipedum_11.scl b/scales/pipedum_11.scl new file mode 100644 index 0000000..ed11777 --- /dev/null +++ b/scales/pipedum_11.scl @@ -0,0 +1,16 @@ +! pipedum_11.scl +! +16/15, 15625/15552 are homophonic intervals + 11 +! + 25/24 + 27/25 + 6/5 + 5/4 + 25/18 + 36/25 + 3/2 + 5/3 + 125/72 + 9/5 + 2/1 diff --git a/scales/pipedum_11a.scl b/scales/pipedum_11a.scl new file mode 100644 index 0000000..82d8f01 --- /dev/null +++ b/scales/pipedum_11a.scl @@ -0,0 +1,16 @@ +! pipedum_11a.scl +! +126/125, 1728/1715, 10/9, Gene Ward Smith, 2002 + 11 +! + 36/35 + 7/6 + 6/5 + 216/175 + 7/5 + 36/25 + 35/24 + 5/3 + 12/7 + 35/18 + 2/1 diff --git a/scales/pipedum_11b.scl b/scales/pipedum_11b.scl new file mode 100644 index 0000000..e1cdbea --- /dev/null +++ b/scales/pipedum_11b.scl @@ -0,0 +1,16 @@ +! pipedum_11b.scl +! +16/15, 49/45, 126/125, Carl Lumma, 2010 + 11 +! + 25/24 + 125/112 + 7/6 + 5/4 + 7/5 + 35/24 + 3/2 + 5/3 + 7/4 + 35/18 + 2/1 diff --git a/scales/pipedum_12.scl b/scales/pipedum_12.scl new file mode 100644 index 0000000..891e384 --- /dev/null +++ b/scales/pipedum_12.scl @@ -0,0 +1,17 @@ +! pipedum_12.scl +! +81/80, 2048/2025 are homophonic intervals + 12 +! + 135/128 + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/pipedum_12a.scl b/scales/pipedum_12a.scl new file mode 100644 index 0000000..9c6aa61 --- /dev/null +++ b/scales/pipedum_12a.scl @@ -0,0 +1,17 @@ +! pipedum_12a.scl +! +81/80, 2048/2025 are homophonic intervals + 12 +! + 16/15 + 256/225 + 75/64 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/pipedum_12b.scl b/scales/pipedum_12b.scl new file mode 100644 index 0000000..c42c11c --- /dev/null +++ b/scales/pipedum_12b.scl @@ -0,0 +1,17 @@ +! pipedum_12b.scl +! +64/63, 50/49 comma, 36/35 chroma + 12 +! + 21/20 + 8/7 + 6/5 + 49/40 + 4/3 + 7/5 + 3/2 + 8/5 + 12/7 + 7/4 + 28/15 + 2/1 diff --git a/scales/pipedum_12c.scl b/scales/pipedum_12c.scl new file mode 100644 index 0000000..780f1da --- /dev/null +++ b/scales/pipedum_12c.scl @@ -0,0 +1,17 @@ +! pipedum_12c.scl +! +225/224, 64/63, 36/35 are homophonic intervals + 12 +! + 15/14 + 9/8 + 135/112 + 5/4 + 4/3 + 45/32 + 3/2 + 45/28 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_12d.scl b/scales/pipedum_12d.scl new file mode 100644 index 0000000..da47cac --- /dev/null +++ b/scales/pipedum_12d.scl @@ -0,0 +1,17 @@ +! pipedum_12d.scl +! +50/49, 128/125, 225/224 are homophonic intervals + 12 +! + 15/14 + 28/25 + 6/5 + 5/4 + 75/56 + 7/5 + 3/2 + 8/5 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/pipedum_12e.scl b/scales/pipedum_12e.scl new file mode 100644 index 0000000..8b4610a --- /dev/null +++ b/scales/pipedum_12e.scl @@ -0,0 +1,17 @@ +! pipedum_12e.scl +! +50/49, 225/224, 3136/3125 are homophonic intervals + 12 +! + 15/14 + 28/25 + 6/5 + 5/4 + 75/56 + 10/7 + 3/2 + 8/5 + 42/25 + 25/14 + 375/196 + 2/1 diff --git a/scales/pipedum_12f.scl b/scales/pipedum_12f.scl new file mode 100644 index 0000000..18564fb --- /dev/null +++ b/scales/pipedum_12f.scl @@ -0,0 +1,17 @@ +! pipedum_12f.scl +! +128/125, 3136/3125, 703125/702464 are homophonic intervals + 12 +! + 1875/1792 + 28/25 + 6/5 + 5/4 + 75/56 + 7/5 + 3/2 + 25/16 + 375/224 + 224/125 + 15/8 + 2/1 diff --git a/scales/pipedum_12g.scl b/scales/pipedum_12g.scl new file mode 100644 index 0000000..65b47de --- /dev/null +++ b/scales/pipedum_12g.scl @@ -0,0 +1,17 @@ +! pipedum_12g.scl +! +50/49, 225/224, 28672/28125 are homophonic intervals + 12 +! + 16/15 + 35/32 + 75/64 + 5/4 + 4/3 + 7/5 + 112/75 + 25/16 + 375/224 + 7/4 + 28/15 + 2/1 diff --git a/scales/pipedum_12h.scl b/scales/pipedum_12h.scl new file mode 100644 index 0000000..54157fb --- /dev/null +++ b/scales/pipedum_12h.scl @@ -0,0 +1,17 @@ +! pipedum_12h.scl +! +2048/2025, 67108864/66430125, Gene Ward Smith, 2004 + 12 +! + 135/128 + 18225/16384 + 1215/1024 + 512/405 + 4/3 + 45/32 + 3/2 + 405/256 + 54675/32768 + 16/9 + 256/135 + 2/1 diff --git a/scales/pipedum_12i.scl b/scales/pipedum_12i.scl new file mode 100644 index 0000000..15d9950 --- /dev/null +++ b/scales/pipedum_12i.scl @@ -0,0 +1,17 @@ +! pipedum_12i.scl +! +64/63, 6561/6272, Gene Ward Smith, 2004 + 12 +! + 28/27 + 9/8 + 7/6 + 9/7 + 4/3 + 81/56 + 3/2 + 14/9 + 27/16 + 16/9 + 27/14 + 2/1 diff --git a/scales/pipedum_12j.scl b/scales/pipedum_12j.scl new file mode 100644 index 0000000..8f4a365 --- /dev/null +++ b/scales/pipedum_12j.scl @@ -0,0 +1,17 @@ +! pipedum_12j.scl +! +6561/6272, 59049/57344 + 12 +! + 243/224 + 7168/6561 + 32/27 + 9/7 + 4/3 + 81/56 + 3/2 + 128/81 + 12/7 + 16/9 + 27/14 + 2/1 diff --git a/scales/pipedum_12k.scl b/scales/pipedum_12k.scl new file mode 100644 index 0000000..28f9136 --- /dev/null +++ b/scales/pipedum_12k.scl @@ -0,0 +1,17 @@ +! pipedum_12k.scl +! +64/63, 729/686, Gene Ward Smith, 2004 + 12 +! + 28/27 + 9/8 + 7/6 + 9/7 + 4/3 + 49/36 + 3/2 + 14/9 + 12/7 + 7/4 + 49/27 + 2/1 diff --git a/scales/pipedum_12l.scl b/scales/pipedum_12l.scl new file mode 100644 index 0000000..d6e52bf --- /dev/null +++ b/scales/pipedum_12l.scl @@ -0,0 +1,17 @@ +! pipedum_12l.scl +! +81/80, 361/360, 513/512, Gene Ward Smith + 12 +! + 19/18 + 9/8 + 19/16 + 19/15 + 4/3 + 38/27 + 3/2 + 19/12 + 27/16 + 16/9 + 19/10 + 2/1 diff --git a/scales/pipedum_13.scl b/scales/pipedum_13.scl new file mode 100644 index 0000000..f647884 --- /dev/null +++ b/scales/pipedum_13.scl @@ -0,0 +1,18 @@ +! pipedum_13.scl +! +33275/32768, 163840/161051 are homophonic intervals. Op de Coul, 2001 + 13 +! + 128/121 + 11/10 + 605/512 + 5/4 + 160/121 + 11/8 + 16/11 + 25/16 + 8/5 + 55/32 + 20/11 + 121/64 + 2/1 diff --git a/scales/pipedum_130.scl b/scales/pipedum_130.scl new file mode 100644 index 0000000..f45fada --- /dev/null +++ b/scales/pipedum_130.scl @@ -0,0 +1,135 @@ +! pipedum_130.scl +! +2401/2400, 3136/3125, 19683/19600, Gene Ward Smith, 2002 + 130 +! + 126/125 + 81/80 + 64/63 + 50/49 + 36/35 + 405/392 + 28/27 + 392/375 + 21/20 + 1296/1225 + 200/189 + 16/15 + 15/14 + 27/25 + 175/162 + 49/45 + 192/175 + 54/49 + 448/405 + 10/9 + 28/25 + 9/8 + 500/441 + 567/500 + 8/7 + 144/125 + 81/70 + 784/675 + 7/6 + 147/125 + 405/343 + 32/27 + 25/21 + 6/5 + 756/625 + 98/81 + 1372/1125 + 60/49 + 216/175 + 100/81 + 56/45 + 5/4 + 5000/3969 + 63/50 + 80/63 + 32/25 + 9/7 + 162/125 + 35/27 + 98/75 + 450/343 + 324/245 + 250/189 + 4/3 + 168/125 + 27/20 + 2744/2025 + 200/147 + 48/35 + 135/98 + 112/81 + 25/18 + 7/5 + 800/567 + 882/625 + 64/45 + 10/7 + 36/25 + 81/56 + 196/135 + 35/24 + 72/49 + 1296/875 + 40/27 + 112/75 + 3/2 + 189/125 + 245/162 + 32/21 + 75/49 + 54/35 + 3136/2025 + 14/9 + 196/125 + 63/40 + 128/81 + 100/63 + 8/5 + 45/28 + 81/50 + 5488/3375 + 80/49 + 288/175 + 81/49 + 224/135 + 5/3 + 42/25 + 27/16 + 320/189 + 128/75 + 12/7 + 216/125 + 140/81 + 392/225 + 7/4 + 432/245 + 1000/567 + 16/9 + 25/14 + 9/5 + 1134/625 + 49/27 + 64/35 + 90/49 + 324/175 + 50/27 + 28/15 + 15/8 + 189/100 + 256/135 + 40/21 + 48/25 + 27/14 + 784/405 + 35/18 + 49/25 + 675/343 + 160/81 + 448/225 + 2/1 diff --git a/scales/pipedum_13a.scl b/scales/pipedum_13a.scl new file mode 100644 index 0000000..f7f423c --- /dev/null +++ b/scales/pipedum_13a.scl @@ -0,0 +1,18 @@ +! pipedum_13a.scl +! +15/14, 3136/3125, 2401/2400, Gene Ward Smith, 2002 + 13 +! + 50/49 + 28/25 + 8/7 + 5/4 + 32/25 + 7/5 + 10/7 + 25/16 + 8/5 + 7/4 + 25/14 + 49/25 + 2/1 diff --git a/scales/pipedum_13b.scl b/scales/pipedum_13b.scl new file mode 100644 index 0000000..6bc5cd5 --- /dev/null +++ b/scales/pipedum_13b.scl @@ -0,0 +1,18 @@ +! pipedum_13b.scl +! +15/14, 3136/3125, 6144/6125, Gene Ward Smith, 2002 + 13 +! + 128/125 + 28/25 + 8/7 + 5/4 + 32/25 + 7/5 + 10/7 + 25/16 + 8/5 + 7/4 + 25/14 + 125/64 + 2/1 diff --git a/scales/pipedum_13bp.scl b/scales/pipedum_13bp.scl new file mode 100644 index 0000000..2724ac3 --- /dev/null +++ b/scales/pipedum_13bp.scl @@ -0,0 +1,18 @@ +! pipedum_13bp.scl +! +78732/78125, 250/243, twelfth based, Manuel Op de Coul, 2003 + 13 +! + 27/25 + 729/625 + 625/486 + 25/18 + 3/2 + 5/3 + 9/5 + 243/125 + 25/12 + 125/54 + 5/2 + 27/10 + 3/1 diff --git a/scales/pipedum_13bp2.scl b/scales/pipedum_13bp2.scl new file mode 100644 index 0000000..93a2556 --- /dev/null +++ b/scales/pipedum_13bp2.scl @@ -0,0 +1,18 @@ +! pipedum_13bp2.scl +! +250/243, 648/625, twelfth based, Manuel Op de Coul, 2003 + 13 +! + 10/9 + 6/5 + 4/3 + 36/25 + 3/2 + 5/3 + 9/5 + 2/1 + 54/25 + 12/5 + 324/125 + 25/9 + 3/1 diff --git a/scales/pipedum_13c.scl b/scales/pipedum_13c.scl new file mode 100644 index 0000000..235cf42 --- /dev/null +++ b/scales/pipedum_13c.scl @@ -0,0 +1,18 @@ +! pipedum_13c.scl +! +15/14, 2401/2400, 6144/6125, Gene Ward Smith, 2002 + 13 +! + 49/48 + 28/25 + 8/7 + 5/4 + 32/25 + 7/5 + 10/7 + 25/16 + 8/5 + 7/4 + 25/14 + 96/49 + 2/1 diff --git a/scales/pipedum_13d.scl b/scales/pipedum_13d.scl new file mode 100644 index 0000000..a3f4880 --- /dev/null +++ b/scales/pipedum_13d.scl @@ -0,0 +1,18 @@ +! pipedum_13d.scl +! +125/121, 33275/32768, Joe Monzo, 2003 + 13 +! + 275/256 + 11/10 + 605/512 + 5/4 + 32/25 + 11/8 + 16/11 + 25/16 + 8/5 + 55/32 + 20/11 + 121/64 + 2/1 diff --git a/scales/pipedum_13e.scl b/scales/pipedum_13e.scl new file mode 100644 index 0000000..ec91094 --- /dev/null +++ b/scales/pipedum_13e.scl @@ -0,0 +1,18 @@ +! pipedum_13e.scl +! +33275/32768, 163840/161051, Op de Coul, 2004 + 13 +! + 128/121 + 11/10 + 64/55 + 5/4 + 32/25 + 11/8 + 16/11 + 25/16 + 8/5 + 55/32 + 20/11 + 121/64 + 2/1 diff --git a/scales/pipedum_14.scl b/scales/pipedum_14.scl new file mode 100644 index 0000000..cca63d8 --- /dev/null +++ b/scales/pipedum_14.scl @@ -0,0 +1,19 @@ +! pipedum_14.scl +! +81/80, 49/48, 2401/2400, Paul Erlich, TL 17-1-2001 + 14 +! + 21/20 + 160/147 + 7/6 + 49/40 + 9/7 + 4/3 + 343/240 + 3/2 + 14/9 + 80/49 + 12/7 + 147/80 + 40/21 + 2/1 diff --git a/scales/pipedum_140.scl b/scales/pipedum_140.scl new file mode 100644 index 0000000..261eb8c --- /dev/null +++ b/scales/pipedum_140.scl @@ -0,0 +1,145 @@ +! pipedum_140.scl +! +2401/2400, 5120/5103, 15625/15552 + 140 +! + 225/224 + 81/80 + 875/864 + 49/48 + 525/512 + 36/35 + 1323/1280 + 729/700 + 25/24 + 21/20 + 200/189 + 1225/1152 + 16/15 + 15/14 + 27/25 + 175/162 + 49/45 + 35/32 + 625/567 + 441/400 + 10/9 + 125/112 + 28/25 + 9/8 + 245/216 + 875/768 + 8/7 + 147/128 + 81/70 + 125/108 + 7/6 + 75/64 + 147/125 + 189/160 + 25/21 + 1225/1024 + 6/5 + 135/112 + 243/200 + 175/144 + 49/40 + 315/256 + 625/504 + 3969/3200 + 5/4 + 63/50 + 1225/972 + 80/63 + 245/192 + 32/25 + 9/7 + 35/27 + 125/96 + 98/75 + 21/16 + 250/189 + 1323/1000 + 4/3 + 75/56 + 27/20 + 875/648 + 49/36 + 175/128 + 48/35 + 441/320 + 25/18 + 625/448 + 7/5 + 45/32 + 567/400 + 1225/864 + 10/7 + 735/512 + 36/25 + 81/56 + 35/24 + 375/256 + 147/100 + 189/128 + 125/84 + 112/75 + 3/2 + 245/162 + 875/576 + 32/21 + 49/32 + 54/35 + 125/81 + 14/9 + 25/16 + 196/125 + 63/40 + 100/63 + 1225/768 + 8/5 + 45/28 + 81/50 + 175/108 + 49/30 + 105/64 + 625/378 + 1323/800 + 5/3 + 375/224 + 42/25 + 27/16 + 245/144 + 875/512 + 12/7 + 441/256 + 243/140 + 125/72 + 7/4 + 225/128 + 441/250 + 16/9 + 25/14 + 9/5 + 875/486 + 49/27 + 175/96 + 64/35 + 147/80 + 50/27 + 625/336 + 28/15 + 15/8 + 189/100 + 1225/648 + 40/21 + 245/128 + 48/25 + 27/14 + 35/18 + 125/64 + 49/25 + 63/32 + 125/63 + 3969/2000 + 2/1 diff --git a/scales/pipedum_14a.scl b/scales/pipedum_14a.scl new file mode 100644 index 0000000..459d162 --- /dev/null +++ b/scales/pipedum_14a.scl @@ -0,0 +1,19 @@ +! pipedum_14a.scl +! +81/80, 50/49, 2401/2400, Paul Erlich, 2001 + 14 +! + 21/20 + 49/45 + 7/6 + 60/49 + 9/7 + 4/3 + 7/5 + 3/2 + 14/9 + 49/30 + 12/7 + 90/49 + 40/21 + 2/1 diff --git a/scales/pipedum_14b.scl b/scales/pipedum_14b.scl new file mode 100644 index 0000000..001d44d --- /dev/null +++ b/scales/pipedum_14b.scl @@ -0,0 +1,19 @@ +! pipedum_14b.scl +! +245/243, 81/80 comma, 25/24 chroma + 14 +! + 21/20 + 9/8 + 7/6 + 6/5 + 35/27 + 27/20 + 7/5 + 3/2 + 14/9 + 8/5 + 7/4 + 9/5 + 35/18 + 2/1 diff --git a/scales/pipedum_14c.scl b/scales/pipedum_14c.scl new file mode 100644 index 0000000..f07e8b9 --- /dev/null +++ b/scales/pipedum_14c.scl @@ -0,0 +1,19 @@ +! pipedum_14c.scl +! +245/243, 50/49 comma, 25/24 chroma + 14 +! + 15/14 + 27/25 + 7/6 + 5/4 + 9/7 + 25/18 + 7/5 + 3/2 + 54/35 + 5/3 + 25/14 + 9/5 + 35/18 + 2/1 diff --git a/scales/pipedum_15.scl b/scales/pipedum_15.scl new file mode 100644 index 0000000..92166cf --- /dev/null +++ b/scales/pipedum_15.scl @@ -0,0 +1,20 @@ +! pipedum_15.scl +! +126/125, 128/125, 875/864, 5-limit, Paul Erlich, 2001 + 15 +! + 25/24 + 10/9 + 144/125 + 6/5 + 5/4 + 4/3 + 25/18 + 36/25 + 3/2 + 8/5 + 5/3 + 125/72 + 9/5 + 48/25 + 2/1 diff --git a/scales/pipedum_15a.scl b/scales/pipedum_15a.scl new file mode 100644 index 0000000..ba1d480 --- /dev/null +++ b/scales/pipedum_15a.scl @@ -0,0 +1,20 @@ +! pipedum_15a.scl +! +Septimal version of pipedum_15, Manuel Op de Coul, 2001 + 15 +! + 21/20 + 10/9 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 35/24 + 3/2 + 8/5 + 5/3 + 7/4 + 28/15 + 48/25 + 2/1 diff --git a/scales/pipedum_15b.scl b/scales/pipedum_15b.scl new file mode 100644 index 0000000..04792ce --- /dev/null +++ b/scales/pipedum_15b.scl @@ -0,0 +1,20 @@ +! pipedum_15b.scl +! +126/125, 128/125, 1029/1024, Paul Erlich, 2001 + 15 +! + 21/20 + 35/32 + 8/7 + 25/21 + 5/4 + 21/16 + 175/128 + 256/175 + 32/21 + 8/5 + 42/25 + 7/4 + 64/35 + 40/21 + 2/1 diff --git a/scales/pipedum_15c.scl b/scales/pipedum_15c.scl new file mode 100644 index 0000000..16eda53 --- /dev/null +++ b/scales/pipedum_15c.scl @@ -0,0 +1,20 @@ +! pipedum_15c.scl +! +49/48, 126/125, 1029/1024, Paul Erlich, 2001 + 15 +! + 21/20 + 160/147 + 8/7 + 6/5 + 5/4 + 64/49 + 48/35 + 35/24 + 49/32 + 8/5 + 5/3 + 7/4 + 147/80 + 40/21 + 2/1 diff --git a/scales/pipedum_15d.scl b/scales/pipedum_15d.scl new file mode 100644 index 0000000..f8bef5d --- /dev/null +++ b/scales/pipedum_15d.scl @@ -0,0 +1,20 @@ +! pipedum_15d.scl +! +64/63, 126/125, 1029/1024, Paul Erlich, 2001 + 15 +! + 21/20 + 35/32 + 8/7 + 6/5 + 5/4 + 21/16 + 441/320 + 640/441 + 32/21 + 8/5 + 5/3 + 7/4 + 64/35 + 40/21 + 2/1 diff --git a/scales/pipedum_15e.scl b/scales/pipedum_15e.scl new file mode 100644 index 0000000..e243b79 --- /dev/null +++ b/scales/pipedum_15e.scl @@ -0,0 +1,20 @@ +! pipedum_15e.scl +! +64/63, 875/864, 1029/1024, Paul Erlich, 2001 + 15 +! + 256/245 + 35/32 + 8/7 + 6/5 + 80/63 + 21/16 + 48/35 + 35/24 + 32/21 + 63/40 + 5/3 + 7/4 + 64/35 + 245/128 + 2/1 diff --git a/scales/pipedum_15f.scl b/scales/pipedum_15f.scl new file mode 100644 index 0000000..ad3f8b1 --- /dev/null +++ b/scales/pipedum_15f.scl @@ -0,0 +1,20 @@ +! pipedum_15f.scl +! +126/125, 64/63 comma, 28/27 chroma + 15 +! + 21/20 + 10/9 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 40/27 + 3/2 + 8/5 + 5/3 + 16/9 + 28/15 + 15/8 + 2/1 diff --git a/scales/pipedum_15g.scl b/scales/pipedum_15g.scl new file mode 100644 index 0000000..5393e76 --- /dev/null +++ b/scales/pipedum_15g.scl @@ -0,0 +1,20 @@ +! pipedum_15g.scl +! +128/125, 250/243 + 15 +! + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 36/25 + 3/2 + 8/5 + 5/3 + 16/9 + 9/5 + 48/25 + 2/1 diff --git a/scales/pipedum_15h.scl b/scales/pipedum_15h.scl new file mode 100644 index 0000000..118238a --- /dev/null +++ b/scales/pipedum_15h.scl @@ -0,0 +1,20 @@ +! pipedum_15h.scl +! +121/120, 1331/1323, 4375/4356, 15625/15552 + 15 +! + 21/20 + 10/9 + 8/7 + 6/5 + 14/11 + 4/3 + 7/5 + 16/11 + 32/21 + 8/5 + 5/3 + 7/4 + 20/11 + 21/11 + 2/1 diff --git a/scales/pipedum_16.scl b/scales/pipedum_16.scl new file mode 100644 index 0000000..474b465 --- /dev/null +++ b/scales/pipedum_16.scl @@ -0,0 +1,21 @@ +! pipedum_16.scl +! +50/49, 126/125, 1029/1024, Paul Erlich, 2001 + 16 +! + 21/20 + 35/32 + 8/7 + 6/5 + 5/4 + 21/16 + 200/147 + 10/7 + 147/100 + 49/32 + 8/5 + 42/25 + 7/4 + 147/80 + 40/21 + 2/1 diff --git a/scales/pipedum_17.scl b/scales/pipedum_17.scl new file mode 100644 index 0000000..e719d4e --- /dev/null +++ b/scales/pipedum_17.scl @@ -0,0 +1,22 @@ +! pipedum_17.scl +! +245/243, 64/63, 525/512, Paul Erlich, 2001 + 17 +! + 36/35 + 35/32 + 9/8 + 7/6 + 128/105 + 9/7 + 4/3 + 48/35 + 35/24 + 3/2 + 14/9 + 105/64 + 12/7 + 16/9 + 64/35 + 35/18 + 2/1 diff --git a/scales/pipedum_171.scl b/scales/pipedum_171.scl new file mode 100644 index 0000000..010005e --- /dev/null +++ b/scales/pipedum_171.scl @@ -0,0 +1,176 @@ +! pipedum_171.scl +! +2401/2400, 4375/4374, 32805/32768, Gene Ward Smith, 2002 + 171 +! + 225/224 + 245/243 + 81/80 + 64/63 + 49/48 + 525/512 + 36/35 + 1323/1280 + 28/27 + 25/24 + 256/245 + 21/20 + 135/128 + 200/189 + 1225/1152 + 16/15 + 15/14 + 2205/2048 + 175/162 + 243/224 + 49/45 + 35/32 + 800/729 + 441/400 + 567/512 + 10/9 + 125/112 + 28/25 + 9/8 + 640/567 + 245/216 + 729/640 + 8/7 + 147/128 + 280/243 + 125/108 + 11907/10240 + 7/6 + 75/64 + 2000/1701 + 189/160 + 32/27 + 25/21 + 1225/1024 + 6/5 + 135/112 + 98/81 + 175/144 + 128/105 + 49/40 + 315/256 + 100/81 + 3969/3200 + 56/45 + 5/4 + 1125/896 + 63/50 + 81/64 + 80/63 + 245/192 + 2800/2187 + 9/7 + 1323/1024 + 35/27 + 125/96 + 98/75 + 21/16 + 320/243 + 250/189 + 1701/1280 + 4/3 + 75/56 + 980/729 + 27/20 + 1215/896 + 49/36 + 175/128 + 48/35 + 441/320 + 112/81 + 25/18 + 35721/25600 + 7/5 + 45/32 + 800/567 + 1225/864 + 64/45 + 10/7 + 735/512 + 350/243 + 81/56 + 196/135 + 35/24 + 375/256 + 147/100 + 189/128 + 40/27 + 125/84 + 112/75 + 3/2 + 675/448 + 245/162 + 243/160 + 32/21 + 49/32 + 1120/729 + 54/35 + 3969/2560 + 14/9 + 25/16 + 8000/5103 + 63/40 + 405/256 + 100/63 + 1225/768 + 8/5 + 45/28 + 392/243 + 175/108 + 729/448 + 49/30 + 105/64 + 400/243 + 1323/800 + 224/135 + 5/3 + 375/224 + 42/25 + 27/16 + 320/189 + 245/144 + 2187/1280 + 12/7 + 441/256 + 140/81 + 125/72 + 392/225 + 7/4 + 225/128 + 1000/567 + 567/320 + 16/9 + 25/14 + 3920/2187 + 9/5 + 405/224 + 49/27 + 175/96 + 64/35 + 147/80 + 945/512 + 50/27 + 11907/6400 + 28/15 + 15/8 + 3200/1701 + 189/100 + 243/128 + 40/21 + 245/128 + 1400/729 + 27/14 + 784/405 + 35/18 + 125/64 + 49/25 + 63/32 + 160/81 + 125/63 + 5103/2560 + 2/1 diff --git a/scales/pipedum_17a.scl b/scales/pipedum_17a.scl new file mode 100644 index 0000000..f57cd5f --- /dev/null +++ b/scales/pipedum_17a.scl @@ -0,0 +1,22 @@ +! pipedum_17a.scl +! +245/243, 525/512, 1728/1715, Paul Erlich, 2001 + 17 +! + 28/27 + 35/32 + 245/216 + 7/6 + 128/105 + 9/7 + 4/3 + 48/35 + 35/24 + 3/2 + 14/9 + 105/64 + 12/7 + 432/245 + 64/35 + 27/14 + 2/1 diff --git a/scales/pipedum_17b.scl b/scales/pipedum_17b.scl new file mode 100644 index 0000000..f55a8f4 --- /dev/null +++ b/scales/pipedum_17b.scl @@ -0,0 +1,22 @@ +! pipedum_17b.scl +! +245/243, 64/63 comma, 25/24 chroma + 17 +! + 81/80 + 35/32 + 9/8 + 7/6 + 5/4 + 35/27 + 21/16 + 45/32 + 35/24 + 3/2 + 14/9 + 5/3 + 27/16 + 7/4 + 15/8 + 35/18 + 2/1 diff --git a/scales/pipedum_17c.scl b/scales/pipedum_17c.scl new file mode 100644 index 0000000..0133a83 --- /dev/null +++ b/scales/pipedum_17c.scl @@ -0,0 +1,22 @@ +! pipedum_17c.scl +! +1605632/1594323, 177147/175616, Manuel Op de Coul, 2002 + 17 +! + 6561/6272 + 7168/6561 + 8/7 + 32/27 + 896/729 + 9/7 + 4/3 + 2187/1568 + 81/56 + 3/2 + 128/81 + 3584/2187 + 12/7 + 16/9 + 729/392 + 27/14 + 2/1 diff --git a/scales/pipedum_17d.scl b/scales/pipedum_17d.scl new file mode 100644 index 0000000..da6e848 --- /dev/null +++ b/scales/pipedum_17d.scl @@ -0,0 +1,22 @@ +! pipedum_17d.scl +! +243/242, 99/98, 64/63, Manuel Op de Coul, 2002 + 17 +! + 22/21 + 88/81 + 8/7 + 33/28 + 11/9 + 9/7 + 4/3 + 88/63 + 77/54 + 3/2 + 11/7 + 44/27 + 12/7 + 16/9 + 11/6 + 27/14 + 2/1 diff --git a/scales/pipedum_17e.scl b/scales/pipedum_17e.scl new file mode 100644 index 0000000..4871e71 --- /dev/null +++ b/scales/pipedum_17e.scl @@ -0,0 +1,22 @@ +! pipedum_17e.scl +! +245/243, 1728/1715, 32805/32768, Manuel Op de Coul, 2003 + 17 +! + 28/27 + 35/32 + 245/216 + 32/27 + 315/256 + 9/7 + 4/3 + 2835/2048 + 81/56 + 245/162 + 128/81 + 105/64 + 245/144 + 16/9 + 945/512 + 27/14 + 2/1 diff --git a/scales/pipedum_17f.scl b/scales/pipedum_17f.scl new file mode 100644 index 0000000..2b740f0 --- /dev/null +++ b/scales/pipedum_17f.scl @@ -0,0 +1,22 @@ +! pipedum_17f.scl +! +243/242, 8192/8019, Manuel Op de Coul + 17 +! + 33/32 + 12/11 + 9/8 + 32/27 + 11/9 + 81/64 + 4/3 + 11/8 + 16/11 + 3/2 + 128/81 + 18/11 + 27/16 + 16/9 + 11/6 + 64/33 + 2/1 diff --git a/scales/pipedum_17g.scl b/scales/pipedum_17g.scl new file mode 100644 index 0000000..ad34b2f --- /dev/null +++ b/scales/pipedum_17g.scl @@ -0,0 +1,22 @@ +! pipedum_17g.scl +! +243/242, 896/891, 99/98, Manuel Op de Coul + 17 +! + 22/21 + 12/11 + 8/7 + 7/6 + 11/9 + 9/7 + 4/3 + 11/8 + 16/11 + 3/2 + 14/9 + 18/11 + 12/7 + 7/4 + 11/6 + 21/11 + 2/1 diff --git a/scales/pipedum_18.scl b/scales/pipedum_18.scl new file mode 100644 index 0000000..e8d1fff --- /dev/null +++ b/scales/pipedum_18.scl @@ -0,0 +1,23 @@ +! pipedum_18.scl +! +875/864, 686/675, 128/125, Paul Erlich, 2001 + 18 +! + 25/24 + 15/14 + 245/216 + 7/6 + 175/144 + 5/4 + 125/96 + 75/56 + 196/135 + 112/75 + 14/9 + 8/5 + 5/3 + 12/7 + 49/27 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_18a.scl b/scales/pipedum_18a.scl new file mode 100644 index 0000000..c21820b --- /dev/null +++ b/scales/pipedum_18a.scl @@ -0,0 +1,23 @@ +! pipedum_18a.scl +! +875/864, 686/675, 50/49, Paul Erlich, 2001 + 18 +! + 36/35 + 15/14 + 28/25 + 7/6 + 6/5 + 5/4 + 98/75 + 49/36 + 7/5 + 72/49 + 75/49 + 8/5 + 5/3 + 12/7 + 25/14 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_18b.scl b/scales/pipedum_18b.scl new file mode 100644 index 0000000..1f0e32c --- /dev/null +++ b/scales/pipedum_18b.scl @@ -0,0 +1,23 @@ +! pipedum_18b.scl +! +1728/1715, 875/864, 686/675, Paul Erlich, 2001 + 18 +! + 25/24 + 15/14 + 245/216 + 7/6 + 175/144 + 5/4 + 1715/1296 + 49/36 + 10/7 + 72/49 + 75/49 + 8/5 + 5/3 + 12/7 + 25/14 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_19a.scl b/scales/pipedum_19a.scl new file mode 100644 index 0000000..c982092 --- /dev/null +++ b/scales/pipedum_19a.scl @@ -0,0 +1,24 @@ +! pipedum_19a.scl +! +3125/3072, 15625/15552 are homophonic intervals + 19 +! + 648/625 + 27/25 + 9/8 + 144/125 + 6/5 + 5/4 + 162/125 + 27/20 + 864/625 + 36/25 + 3/2 + 25/16 + 124416/78125 + 5184/3125 + 216/125 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/pipedum_19b.scl b/scales/pipedum_19b.scl new file mode 100644 index 0000000..6fb1118 --- /dev/null +++ b/scales/pipedum_19b.scl @@ -0,0 +1,24 @@ +! pipedum_19b.scl +! +225/224, 3136/3125, 4375/4374, Op de Coul, 2000 + 19 +! + 25/24 + 15/14 + 10/9 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 25/18 + 36/25 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 9/5 + 28/15 + 48/25 + 2/1 diff --git a/scales/pipedum_19e.scl b/scales/pipedum_19e.scl new file mode 100644 index 0000000..bce960e --- /dev/null +++ b/scales/pipedum_19e.scl @@ -0,0 +1,24 @@ +! pipedum_19e.scl +! +225/224, 126/125, 245/243, Paul Erlich, 2001 + 19 +! + 36/35 + 15/14 + 192/175 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 175/96 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_19f.scl b/scales/pipedum_19f.scl new file mode 100644 index 0000000..1d4a56d --- /dev/null +++ b/scales/pipedum_19f.scl @@ -0,0 +1,24 @@ +! pipedum_19f.scl +! +225/224, 245/243, 3645/3584, Paul Erlich, 2001 + 19 +! + 36/35 + 16/15 + 192/175 + 7/6 + 135/112 + 5/4 + 9/7 + 4/3 + 48/35 + 35/24 + 3/2 + 14/9 + 8/5 + 224/135 + 12/7 + 175/96 + 15/8 + 35/18 + 2/1 diff --git a/scales/pipedum_19g.scl b/scales/pipedum_19g.scl new file mode 100644 index 0000000..1be5785 --- /dev/null +++ b/scales/pipedum_19g.scl @@ -0,0 +1,24 @@ +! pipedum_19g.scl +! +10976/10935, 225/224, 126/125, Paul Erlich, 2001 + 19 +! + 36/35 + 15/14 + 54/49 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 135/98 + 196/135 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 49/27 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_19h.scl b/scales/pipedum_19h.scl new file mode 100644 index 0000000..645e585 --- /dev/null +++ b/scales/pipedum_19h.scl @@ -0,0 +1,24 @@ +! pipedum_19h.scl +! +126/125, 81/80 comma, 49/48 chroma + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 27/20 + 7/5 + 35/24 + 3/2 + 63/40 + 100/63 + 5/3 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/pipedum_19i.scl b/scales/pipedum_19i.scl new file mode 100644 index 0000000..c489b1d --- /dev/null +++ b/scales/pipedum_19i.scl @@ -0,0 +1,24 @@ +! pipedum_19i.scl +! +225/224, 81/80 comma, 49/48 chroma + 19 +! + 135/128 + 35/32 + 9/8 + 7/6 + 315/256 + 5/4 + 21/16 + 4/3 + 45/32 + 35/24 + 3/2 + 14/9 + 105/64 + 5/3 + 7/4 + 16/9 + 15/8 + 63/32 + 2/1 diff --git a/scales/pipedum_19j.scl b/scales/pipedum_19j.scl new file mode 100644 index 0000000..cba6284 --- /dev/null +++ b/scales/pipedum_19j.scl @@ -0,0 +1,24 @@ +! pipedum_19j.scl +! +21/20, 3136/3125, 2401/2400, Gene Ward Smith, 2002 + 19 +! + 50/49 + 35/32 + 28/25 + 8/7 + 49/40 + 5/4 + 125/98 + 343/250 + 7/5 + 10/7 + 500/343 + 196/125 + 8/5 + 80/49 + 7/4 + 25/14 + 64/35 + 49/25 + 2/1 diff --git a/scales/pipedum_19k.scl b/scales/pipedum_19k.scl new file mode 100644 index 0000000..f9624b0 --- /dev/null +++ b/scales/pipedum_19k.scl @@ -0,0 +1,24 @@ +! pipedum_19k.scl +! +21/20, 3136/3125, 6144/6125, Gene Ward Smith, 2002 + 19 +! + 128/125 + 35/32 + 28/25 + 8/7 + 49/40 + 5/4 + 32/25 + 175/128 + 7/5 + 10/7 + 256/175 + 25/16 + 8/5 + 80/49 + 7/4 + 25/14 + 64/35 + 125/64 + 2/1 diff --git a/scales/pipedum_19l.scl b/scales/pipedum_19l.scl new file mode 100644 index 0000000..9d3c625 --- /dev/null +++ b/scales/pipedum_19l.scl @@ -0,0 +1,24 @@ +! pipedum_19l.scl +! +21/20, 2401/2400, 6144/6125, Gene Ward Smith, 2002 + 19 +! + 49/48 + 35/32 + 28/25 + 8/7 + 49/40 + 5/4 + 245/192 + 48/35 + 7/5 + 10/7 + 35/24 + 384/245 + 8/5 + 80/49 + 7/4 + 25/14 + 64/35 + 96/49 + 2/1 diff --git a/scales/pipedum_19m.scl b/scales/pipedum_19m.scl new file mode 100644 index 0000000..4c3d56b --- /dev/null +++ b/scales/pipedum_19m.scl @@ -0,0 +1,24 @@ +! pipedum_19m.scl +! +126/125, 1728/1715, 16/15, Gene Ward Smith, 2002 + 19 +! + 36/35 + 28/25 + 8/7 + 7/6 + 6/5 + 175/144 + 4/3 + 48/35 + 7/5 + 10/7 + 14/9 + 8/5 + 288/175 + 5/3 + 12/7 + 28/15 + 48/25 + 35/18 + 2/1 diff --git a/scales/pipedum_19n.scl b/scales/pipedum_19n.scl new file mode 100644 index 0000000..4ca2436 --- /dev/null +++ b/scales/pipedum_19n.scl @@ -0,0 +1,24 @@ +! pipedum_19n.scl +! +126/125, 2401/2400, 16/15, Gene Ward Smith, 2002 + 19 +! + 49/48 + 21/20 + 15/14 + 7/6 + 6/5 + 49/40 + 5/4 + 125/98 + 7/5 + 10/7 + 35/24 + 3/2 + 49/30 + 5/3 + 12/7 + 7/4 + 25/14 + 49/25 + 2/1 diff --git a/scales/pipedum_19o.scl b/scales/pipedum_19o.scl new file mode 100644 index 0000000..56b062a --- /dev/null +++ b/scales/pipedum_19o.scl @@ -0,0 +1,24 @@ +! pipedum_19o.scl +! +16875/16384, 81/80 + 19 +! + 135/128 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 675/512 + 4/3 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 16/9 + 15/8 + 256/135 + 2/1 diff --git a/scales/pipedum_20.scl b/scales/pipedum_20.scl new file mode 100644 index 0000000..d1c45aa --- /dev/null +++ b/scales/pipedum_20.scl @@ -0,0 +1,25 @@ +! pipedum_20.scl +! +9801/9800, 243/242, 126/125, 100/99, Paul Erlich, 2000 + 20 +! + 28/27 + 15/14 + 10/9 + 140/121 + 33/28 + 11/9 + 14/11 + 33/25 + 15/11 + 140/99 + 22/15 + 50/33 + 11/7 + 18/11 + 5/3 + 121/70 + 9/5 + 28/15 + 27/14 + 2/1 diff --git a/scales/pipedum_21.scl b/scales/pipedum_21.scl new file mode 100644 index 0000000..19ca7b4 --- /dev/null +++ b/scales/pipedum_21.scl @@ -0,0 +1,26 @@ +! pipedum_21.scl +! +36/35, 225/224, 2401/2400, P. Erlich, 2001. Just PB version of miracle1.scl + 21 +! + 49/48 + 15/14 + 49/45 + 8/7 + 7/6 + 60/49 + 5/4 + 98/75 + 4/3 + 7/5 + 10/7 + 3/2 + 75/49 + 8/5 + 49/30 + 12/7 + 7/4 + 90/49 + 28/15 + 96/49 + 2/1 diff --git a/scales/pipedum_21a.scl b/scales/pipedum_21a.scl new file mode 100644 index 0000000..272266d --- /dev/null +++ b/scales/pipedum_21a.scl @@ -0,0 +1,26 @@ +! pipedum_21a.scl +! +1029/1024, 81/80 comma, 25/24 chroma + 21 +! + 64/63 + 35/32 + 10/9 + 8/7 + 7/6 + 5/4 + 80/63 + 21/16 + 4/3 + 10/7 + 35/24 + 3/2 + 32/21 + 105/64 + 5/3 + 12/7 + 7/4 + 15/8 + 40/21 + 63/32 + 2/1 diff --git a/scales/pipedum_21b.scl b/scales/pipedum_21b.scl new file mode 100644 index 0000000..01a6613 --- /dev/null +++ b/scales/pipedum_21b.scl @@ -0,0 +1,26 @@ +! pipedum_21b.scl +! +36/35, 225/224, 1029/1024, Gene Ward Smith, 2002 + 21 +! + 49/48 + 16/15 + 49/45 + 8/7 + 7/6 + 128/105 + 56/45 + 21/16 + 4/3 + 7/5 + 64/45 + 3/2 + 32/21 + 8/5 + 49/30 + 12/7 + 7/4 + 64/35 + 28/15 + 256/135 + 2/1 diff --git a/scales/pipedum_21c.scl b/scales/pipedum_21c.scl new file mode 100644 index 0000000..cf35d32 --- /dev/null +++ b/scales/pipedum_21c.scl @@ -0,0 +1,26 @@ +! pipedum_21c.scl +! +128/125, 34171875/33554432 Fokker block + 21 +! + 16875/16384 + 16/15 + 1125/1024 + 256/225 + 75/64 + 4096/3375 + 5/4 + 675/512 + 4/3 + 45/32 + 64/45 + 3/2 + 1024/675 + 8/5 + 3375/2048 + 128/75 + 225/128 + 2048/1125 + 15/8 + 32768/16875 + 2/1 diff --git a/scales/pipedum_22.scl b/scales/pipedum_22.scl new file mode 100644 index 0000000..a49b5d1 --- /dev/null +++ b/scales/pipedum_22.scl @@ -0,0 +1,27 @@ +! pipedum_22.scl +! +3125/3072, 2109375/2097152 are homophonic intervals + 22 +! + 128/125 + 16/15 + 2048/1875 + 9375/8192 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 512/375 + 65536/46875 + 375/256 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16384/9375 + 1875/1024 + 15/8 + 125/64 + 2/1 diff --git a/scales/pipedum_22a.scl b/scales/pipedum_22a.scl new file mode 100644 index 0000000..d63d156 --- /dev/null +++ b/scales/pipedum_22a.scl @@ -0,0 +1,27 @@ +! pipedum_22a.scl +! +2048/2025, 2109375/2097152 are homophonic intervals + 22 +! + 128/125 + 16/15 + 1125/1024 + 256/225 + 75/64 + 4096/3375 + 5/4 + 32/25 + 4/3 + 512/375 + 64/45 + 8192/5625 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 225/128 + 2048/1125 + 15/8 + 32768/16875 + 2/1 diff --git a/scales/pipedum_22b.scl b/scales/pipedum_22b.scl new file mode 100644 index 0000000..542b2a7 --- /dev/null +++ b/scales/pipedum_22b.scl @@ -0,0 +1,27 @@ +! pipedum_22b.scl +! +2025/2048, 245/243, 64/63, P. Erlich "7-limit Indian", TL 19-12-2000 + 22 +! + 28/27 + 16/15 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 175/128 + 45/32 + 35/24 + 3/2 + 14/9 + 8/5 + 105/64 + 27/16 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/pipedum_22b2.scl b/scales/pipedum_22b2.scl new file mode 100644 index 0000000..4a162ca --- /dev/null +++ b/scales/pipedum_22b2.scl @@ -0,0 +1,27 @@ +! pipedum_22b2.scl +! +Version of pipedum_22b with other shape, Paul Erlich + 22 +! + 28/27 + 16/15 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 45/32 + 35/24 + 3/2 + 14/9 + 8/5 + 105/64 + 12/7 + 16/9 + 64/35 + 15/8 + 27/14 + 2/1 diff --git a/scales/pipedum_22c.scl b/scales/pipedum_22c.scl new file mode 100644 index 0000000..e01cc26 --- /dev/null +++ b/scales/pipedum_22c.scl @@ -0,0 +1,27 @@ +! pipedum_22c.scl +! +1728/1715, 64/63, 50/49, Paul Erlich, 2001 + 22 +! + 49/48 + 21/20 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 40/21 + 96/49 + 2/1 diff --git a/scales/pipedum_22d.scl b/scales/pipedum_22d.scl new file mode 100644 index 0000000..d380afb --- /dev/null +++ b/scales/pipedum_22d.scl @@ -0,0 +1,27 @@ +! pipedum_22d.scl +! +1728/1715, 875/864, 64/63, Paul Erlich, 2001 + 22 +! + 36/35 + 21/20 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 245/192 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 384/245 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_22e.scl b/scales/pipedum_22e.scl new file mode 100644 index 0000000..a6ccaa3 --- /dev/null +++ b/scales/pipedum_22e.scl @@ -0,0 +1,27 @@ +! pipedum_22e.scl +! +1728/1715, 245/243, 50/49, Paul Erlich, 2001 + 22 +! + 36/35 + 21/20 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 49/36 + 7/5 + 72/49 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_22f.scl b/scales/pipedum_22f.scl new file mode 100644 index 0000000..d9c637d --- /dev/null +++ b/scales/pipedum_22f.scl @@ -0,0 +1,27 @@ +! pipedum_22f.scl +! +1728/1715, 245/243, 875/864, Paul Erlich, 2001 + 22 +! + 36/35 + 1296/1225 + 10/9 + 245/216 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 432/245 + 9/5 + 1225/648 + 35/18 + 2/1 diff --git a/scales/pipedum_22g.scl b/scales/pipedum_22g.scl new file mode 100644 index 0000000..a6a3cef --- /dev/null +++ b/scales/pipedum_22g.scl @@ -0,0 +1,27 @@ +! pipedum_22g.scl +! +225/224, 1728/1715, 64/63, Paul Erlich, 2001 + 22 +! + 49/48 + 16/15 + 35/32 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 64/35 + 15/8 + 96/49 + 2/1 diff --git a/scales/pipedum_22h.scl b/scales/pipedum_22h.scl new file mode 100644 index 0000000..68d8141 --- /dev/null +++ b/scales/pipedum_22h.scl @@ -0,0 +1,27 @@ +! pipedum_22h.scl +! +225/224, 1728/1715, 875/864, Paul Erlich, 2001 + 22 +! + 36/35 + 15/14 + 192/175 + 245/216 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 432/245 + 175/96 + 28/15 + 35/18 + 2/1 diff --git a/scales/pipedum_22i.scl b/scales/pipedum_22i.scl new file mode 100644 index 0000000..e440ead --- /dev/null +++ b/scales/pipedum_22i.scl @@ -0,0 +1,27 @@ +! pipedum_22i.scl +! +1728/1715, 245/243, 245/243, Paul Erlich, 2001 + 22 +! + 36/35 + 16/15 + 54/49 + 245/216 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 432/245 + 49/27 + 15/8 + 35/18 + 2/1 diff --git a/scales/pipedum_22j.scl b/scales/pipedum_22j.scl new file mode 100644 index 0000000..7573077 --- /dev/null +++ b/scales/pipedum_22j.scl @@ -0,0 +1,27 @@ +! pipedum_22j.scl +! +50/49, 64/63, 245/243, Gene Ward Smith, 2002 + 22 +! + 28/27 + 15/14 + 10/9 + 8/7 + 7/6 + 60/49 + 80/63 + 9/7 + 4/3 + 27/20 + 10/7 + 40/27 + 3/2 + 14/9 + 80/49 + 5/3 + 12/7 + 16/9 + 90/49 + 40/21 + 27/14 + 2/1 diff --git a/scales/pipedum_22k.scl b/scales/pipedum_22k.scl new file mode 100644 index 0000000..dd0155f --- /dev/null +++ b/scales/pipedum_22k.scl @@ -0,0 +1,27 @@ +! pipedum_22k.scl +! +121/120, 2048/2025, 4125/4096, Manuel Op de Coul + 22 +! + 25/24 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 32/25 + 4/3 + 11/8 + 45/32 + 16/11 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/pipedum_22l.scl b/scales/pipedum_22l.scl new file mode 100644 index 0000000..b871b95 --- /dev/null +++ b/scales/pipedum_22l.scl @@ -0,0 +1,27 @@ +! pipedum_22l.scl +! +121/120, 736/729, 100/99, 2048/2025 + 22 +! + 256/243 + 88/81 + 10/9 + 1408/1215 + 32/27 + 11/9 + 512/405 + 176/135 + 4/3 + 2816/2025 + 64/45 + 40/27 + 5632/3645 + 128/81 + 44/27 + 2048/1215 + 704/405 + 16/9 + 11264/6075 + 256/135 + 88/45 + 2/1 diff --git a/scales/pipedum_23.scl b/scales/pipedum_23.scl new file mode 100644 index 0000000..ad4e5dd --- /dev/null +++ b/scales/pipedum_23.scl @@ -0,0 +1,28 @@ +! pipedum_23.scl +! +6144/6125, 15625/1552, 5103/5000, Manuel Op de Coul, 2003 + 23 +! + 648/625 + 200/189 + 192/175 + 124416/109375 + 125/108 + 6/5 + 3888/3125 + 80/63 + 1152/875 + 4/3 + 25/18 + 36/25 + 2500/1701 + 32/21 + 6912/4375 + 3125/1944 + 5/3 + 216/125 + 1000/567 + 64/35 + 41472/21875 + 625/324 + 2/1 diff --git a/scales/pipedum_24.scl b/scales/pipedum_24.scl new file mode 100644 index 0000000..7ea857d --- /dev/null +++ b/scales/pipedum_24.scl @@ -0,0 +1,29 @@ +! pipedum_24.scl +! +121/120, 16384/16335, 32805/32768. Manuel Op de Coul, 2001 + 24 +! + 45/44 + 135/128 + 12/11 + 10/9 + 55/48 + 32/27 + 11/9 + 5/4 + 128/99 + 4/3 + 15/11 + 45/32 + 16/11 + 3/2 + 135/88 + 128/81 + 44/27 + 5/3 + 55/32 + 16/9 + 11/6 + 15/8 + 64/33 + 2/1 diff --git a/scales/pipedum_24a.scl b/scales/pipedum_24a.scl new file mode 100644 index 0000000..8266e30 --- /dev/null +++ b/scales/pipedum_24a.scl @@ -0,0 +1,29 @@ +! pipedum_24a.scl +! +49/48, 81/80, 128/125, Gene Ward Smith, 2002 + 24 +! + 25/24 + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 315/256 + 5/4 + 21/16 + 4/3 + 7/5 + 45/32 + 35/24 + 3/2 + 63/40 + 8/5 + 105/64 + 5/3 + 7/4 + 9/5 + 28/15 + 15/8 + 63/32 + 2/1 diff --git a/scales/pipedum_25.scl b/scales/pipedum_25.scl new file mode 100644 index 0000000..3b0803a --- /dev/null +++ b/scales/pipedum_25.scl @@ -0,0 +1,30 @@ +! pipedum_25.scl +! +65625/65536, 1029/1024, 3125/3072, Manuel Op de Coul, 2003 + 25 +! + 525/512 + 21/20 + 672/625 + 125/112 + 8/7 + 1024/875 + 6/5 + 5/4 + 2625/2048 + 21/16 + 168/125 + 625/448 + 10/7 + 256/175 + 3/2 + 25/16 + 8/5 + 105/64 + 42/25 + 262144/153125 + 25/14 + 64/35 + 15/8 + 48/25 + 2/1 diff --git a/scales/pipedum_26.scl b/scales/pipedum_26.scl new file mode 100644 index 0000000..427532f --- /dev/null +++ b/scales/pipedum_26.scl @@ -0,0 +1,31 @@ +! pipedum_26.scl +! +1029/1024, 1728/1715, 50/49, Paul Erlich, 2001 + 26 +! + 49/48 + 21/20 + 35/32 + 384/343 + 8/7 + 7/6 + 6/5 + 5/4 + 245/192 + 64/49 + 4/3 + 48/35 + 7/5 + 35/24 + 3/2 + 49/32 + 384/245 + 8/5 + 5/3 + 12/7 + 7/4 + 343/192 + 64/35 + 40/21 + 96/49 + 2/1 diff --git a/scales/pipedum_26a.scl b/scales/pipedum_26a.scl new file mode 100644 index 0000000..34c65ba --- /dev/null +++ b/scales/pipedum_26a.scl @@ -0,0 +1,31 @@ +! PIPEDUM_26a.scl +! +50/49, 81/80, 525/512, Gene Ward Smith, 2002 + 26 +! + 25/24 + 21/20 + 35/32 + 9/8 + 7/6 + 75/64 + 315/256 + 56/45 + 5/4 + 21/16 + 4/3 + 7/5 + 45/32 + 35/24 + 3/2 + 25/16 + 63/40 + 105/64 + 5/3 + 7/4 + 225/128 + 16/9 + 28/15 + 15/8 + 63/32 + 2/1 diff --git a/scales/pipedum_26b.scl b/scales/pipedum_26b.scl new file mode 100644 index 0000000..902ceae --- /dev/null +++ b/scales/pipedum_26b.scl @@ -0,0 +1,31 @@ +! pipedum_26b.scl +! +81/80, 78125/73728, Gene Ward Smith, 2005 + 26 +! + 128/125 + 25/24 + 16/15 + 10/9 + 144/125 + 75/64 + 6/5 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 36/25 + 3/2 + 192/125 + 25/16 + 8/5 + 5/3 + 128/75 + 125/72 + 9/5 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/pipedum_27.scl b/scales/pipedum_27.scl new file mode 100644 index 0000000..c48b31c --- /dev/null +++ b/scales/pipedum_27.scl @@ -0,0 +1,32 @@ +! pipedum_27.scl +! +126/125, 1728/1715, 4000/3969 are homophonic intervals, Paul Erlich + 27 +! + 3200/3087 + 2560/2401 + 160/147 + 384/343 + 8/7 + 288/245 + 1600/1323 + 1280/1029 + 80/63 + 64/49 + 2304/1715 + 48/35 + 1728/1225 + 640/441 + 512/343 + 32/21 + 384/245 + 8/5 + 288/175 + 10368/6125 + 256/147 + 3072/1715 + 64/35 + 2304/1225 + 48/25 + 1728/875 + 2/1 diff --git a/scales/pipedum_27a.scl b/scales/pipedum_27a.scl new file mode 100644 index 0000000..724cfae --- /dev/null +++ b/scales/pipedum_27a.scl @@ -0,0 +1,32 @@ +! pipedum_27a.scl +! +126/126, 1728/1715, 64/63, Paul Erlich, 2001 + 27 +! + 36/35 + 21/20 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 9/7 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 14/9 + 8/5 + 80/49 + 5/3 + 12/7 + 7/4 + 9/5 + 28/15 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_27b.scl b/scales/pipedum_27b.scl new file mode 100644 index 0000000..0275392 --- /dev/null +++ b/scales/pipedum_27b.scl @@ -0,0 +1,32 @@ +! pipedum_27b.scl +! +2401/2400, 126/125, 128/125, Paul Erlich, 2001 + 27 +! + 50/49 + 25/24 + 15/14 + 28/25 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 125/98 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 196/125 + 8/5 + 80/49 + 5/3 + 12/7 + 7/4 + 25/14 + 28/15 + 48/25 + 49/25 + 2/1 diff --git a/scales/pipedum_27c.scl b/scales/pipedum_27c.scl new file mode 100644 index 0000000..8b8c1f0 --- /dev/null +++ b/scales/pipedum_27c.scl @@ -0,0 +1,32 @@ +! pipedum_27c.scl +! +2401/2400, 126/125, 686/675, Paul Erlich, 2001 + 27 +! + 50/49 + 21/20 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 60/49 + 5/4 + 9/7 + 4/3 + 49/36 + 7/5 + 10/7 + 72/49 + 3/2 + 14/9 + 8/5 + 49/30 + 5/3 + 12/7 + 7/4 + 9/5 + 28/15 + 40/21 + 49/25 + 2/1 diff --git a/scales/pipedum_27d.scl b/scales/pipedum_27d.scl new file mode 100644 index 0000000..e5f0e6f --- /dev/null +++ b/scales/pipedum_27d.scl @@ -0,0 +1,32 @@ +! pipedum_27d.scl +! +2401/2400, 126/125, 64/63, Paul Erlich, 2001 + 27 +! + 50/49 + 21/20 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 9/7 + 4/3 + 200/147 + 7/5 + 10/7 + 147/100 + 3/2 + 14/9 + 8/5 + 80/49 + 5/3 + 12/7 + 7/4 + 9/5 + 28/15 + 40/21 + 49/25 + 2/1 diff --git a/scales/pipedum_27e.scl b/scales/pipedum_27e.scl new file mode 100644 index 0000000..0129c3c --- /dev/null +++ b/scales/pipedum_27e.scl @@ -0,0 +1,32 @@ +! pipedum_27e.scl +! +2401/2400, 126/125, 245/243, Paul Erlich, 2001 + 27 +! + 36/35 + 21/20 + 27/25 + 10/9 + 8/7 + 7/6 + 6/5 + 60/49 + 63/50 + 9/7 + 4/3 + 49/36 + 7/5 + 10/7 + 72/49 + 3/2 + 14/9 + 100/63 + 49/30 + 5/3 + 12/7 + 7/4 + 9/5 + 50/27 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_27f.scl b/scales/pipedum_27f.scl new file mode 100644 index 0000000..76522ea --- /dev/null +++ b/scales/pipedum_27f.scl @@ -0,0 +1,32 @@ +! pipedum_27f.scl +! +2401/2400, 1728/1715, 128/125, Paul Erlich, 2001 + 27 +! + 49/48 + 25/24 + 15/14 + 28/25 + 8/7 + 7/6 + 6/5 + 60/49 + 5/4 + 245/192 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 384/245 + 8/5 + 49/30 + 5/3 + 12/7 + 7/4 + 25/14 + 28/15 + 48/25 + 96/49 + 2/1 diff --git a/scales/pipedum_27g.scl b/scales/pipedum_27g.scl new file mode 100644 index 0000000..e86e2f0 --- /dev/null +++ b/scales/pipedum_27g.scl @@ -0,0 +1,32 @@ +! pipedum_27g.scl +! +2401/2400, 1728/1715, 686/675, Paul Erlich, 2001 + 27 +! + 49/48 + 360/343 + 15/14 + 2401/2160 + 8/7 + 7/6 + 6/5 + 60/49 + 5/4 + 9/7 + 4/3 + 49/36 + 7/5 + 10/7 + 72/49 + 3/2 + 14/9 + 8/5 + 49/30 + 5/3 + 12/7 + 7/4 + 4320/2401 + 28/15 + 343/180 + 96/49 + 2/1 diff --git a/scales/pipedum_27h.scl b/scales/pipedum_27h.scl new file mode 100644 index 0000000..2e7c336 --- /dev/null +++ b/scales/pipedum_27h.scl @@ -0,0 +1,32 @@ +! pipedum_27h.scl +! +2401/2400, 1728/1715, 64/63, Paul Erlich, 2001 + 27 +! + 49/48 + 21/20 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 9/7 + 4/3 + 49/36 + 7/5 + 10/7 + 72/49 + 3/2 + 14/9 + 8/5 + 80/49 + 5/3 + 12/7 + 7/4 + 9/5 + 28/15 + 40/21 + 96/49 + 2/1 diff --git a/scales/pipedum_27i.scl b/scales/pipedum_27i.scl new file mode 100644 index 0000000..909d53b --- /dev/null +++ b/scales/pipedum_27i.scl @@ -0,0 +1,32 @@ +! pipedum_27i.scl +! +2401/2400, 1728/1715, 245/243, Paul Erlich, 2001 + 27 +! + 36/35 + 21/20 + 2592/2401 + 10/9 + 8/7 + 7/6 + 6/5 + 49/40 + 432/343 + 9/7 + 4/3 + 49/36 + 7/5 + 10/7 + 72/49 + 3/2 + 14/9 + 343/216 + 80/49 + 5/3 + 12/7 + 7/4 + 9/5 + 2401/1296 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_27j.scl b/scales/pipedum_27j.scl new file mode 100644 index 0000000..268fdee --- /dev/null +++ b/scales/pipedum_27j.scl @@ -0,0 +1,32 @@ +! pipedum_27j.scl +! +78732/78125, 390625000/387420489 + 27 +! + 250/243 + 62500/59049 + 27/25 + 10/9 + 2500/2187 + 729/625 + 6/5 + 100/81 + 19683/15625 + 162/125 + 4/3 + 1000/729 + 4374/3125 + 36/25 + 40/27 + 118098/78125 + 972/625 + 8/5 + 81/50 + 5/3 + 1250/729 + 312500/177147 + 9/5 + 50/27 + 12500/6561 + 243/125 + 2/1 diff --git a/scales/pipedum_27k.scl b/scales/pipedum_27k.scl new file mode 100644 index 0000000..034b172 --- /dev/null +++ b/scales/pipedum_27k.scl @@ -0,0 +1,32 @@ +! pipedum_27k.scl +! +67108864/66430125, 25/24 + 27 +! + 81/80 + 256/243 + 2187/2048 + 10/9 + 9/8 + 729/640 + 32/27 + 6/5 + 81/64 + 320/243 + 4/3 + 27/20 + 1024/729 + 729/512 + 40/27 + 3/2 + 243/160 + 128/81 + 8/5 + 27/16 + 2187/1280 + 1280/729 + 16/9 + 9/5 + 243/128 + 160/81 + 2/1 diff --git a/scales/pipedum_28.scl b/scales/pipedum_28.scl new file mode 100644 index 0000000..338aa24 --- /dev/null +++ b/scales/pipedum_28.scl @@ -0,0 +1,33 @@ +! pipedum_28.scl +! +393216/390625, 16875/16384 + 28 +! + 128/125 + 25/24 + 16/15 + 2048/1875 + 9375/8192 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 1024/625 + 5/3 + 128/75 + 16384/9375 + 1875/1024 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/pipedum_29.scl b/scales/pipedum_29.scl new file mode 100644 index 0000000..e9f7662 --- /dev/null +++ b/scales/pipedum_29.scl @@ -0,0 +1,34 @@ +! pipedum_29.scl +! +5120/5103, 225/224, 50421/50000, Manuel Op de Coul, 2003 + 29 +! + 50/49 + 21/20 + 15/14 + 441/400 + 9/8 + 225/196 + 32/27 + 1600/1323 + 56/45 + 80/63 + 98/75 + 4/3 + 200/147 + 7/5 + 10/7 + 147/100 + 3/2 + 75/49 + 63/40 + 45/28 + 224/135 + 320/189 + 392/225 + 16/9 + 800/441 + 28/15 + 40/21 + 49/25 + 2/1 diff --git a/scales/pipedum_29a.scl b/scales/pipedum_29a.scl new file mode 100644 index 0000000..8478da3 --- /dev/null +++ b/scales/pipedum_29a.scl @@ -0,0 +1,34 @@ +! pipedum_29a.scl +! +49/48, 55/54, 65/64, 91/90, 100/99 + 29 +! + 25/24 + 21/20 + 35/32 + 10/9 + 9/8 + 7/6 + 6/5 + 175/144 + 5/4 + 35/27 + 21/16 + 4/3 + 25/18 + 7/5 + 648/455 + 35/24 + 3/2 + 25/16 + 63/40 + 105/64 + 5/3 + 27/16 + 7/4 + 9/5 + 175/96 + 15/8 + 35/18 + 63/32 + 2/1 diff --git a/scales/pipedum_31.scl b/scales/pipedum_31.scl new file mode 100644 index 0000000..eaad5c4 --- /dev/null +++ b/scales/pipedum_31.scl @@ -0,0 +1,36 @@ +! pipedum_31.scl +! +81/80, 225/224, 1029/1024 are homophonic intervals + 31 +! + 8505/8192 + 135/128 + 2205/2048 + 567/512 + 9/8 + 147/128 + 1215/1024 + 19845/16384 + 315/256 + 81/64 + 1323/1024 + 21/16 + 178605/131072 + 2835/2048 + 45/32 + 11907/8192 + 189/128 + 3/2 + 25515/16384 + 405/256 + 6615/4096 + 1701/1024 + 27/16 + 441/256 + 3645/2048 + 59535/32768 + 945/512 + 243/128 + 3969/2048 + 63/32 + 2/1 diff --git a/scales/pipedum_31a.scl b/scales/pipedum_31a.scl new file mode 100644 index 0000000..4596083 --- /dev/null +++ b/scales/pipedum_31a.scl @@ -0,0 +1,36 @@ +! pipedum_31a.scl +! +393216/390625, 2109375/2097152 are homophonic intervals + 31 +! + 16875/16384 + 135/128 + 27/25 + 1125/1024 + 9/8 + 144/125 + 75/64 + 6/5 + 768/625 + 98304/78125 + 84375/65536 + 675/512 + 27/20 + 5625/4096 + 45/32 + 36/25 + 4608/3125 + 3/2 + 192/125 + 24576/15625 + 421875/262144 + 3375/2048 + 27/16 + 216/125 + 225/128 + 9/5 + 1152/625 + 15/8 + 48/25 + 6144/3125 + 2/1 diff --git a/scales/pipedum_31a2.scl b/scales/pipedum_31a2.scl new file mode 100644 index 0000000..958e52f --- /dev/null +++ b/scales/pipedum_31a2.scl @@ -0,0 +1,36 @@ +! pipedum_31a2.scl +! +Variant of pipedum_31a, corner clipped genus + 31 +! + 128/125 + 135/128 + 27/25 + 1125/1024 + 9/8 + 144/125 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 675/512 + 27/20 + 5625/4096 + 45/32 + 36/25 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 3375/2048 + 27/16 + 216/125 + 225/128 + 9/5 + 1875/1024 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/pipedum_31b.scl b/scales/pipedum_31b.scl new file mode 100644 index 0000000..a864ef7 --- /dev/null +++ b/scales/pipedum_31b.scl @@ -0,0 +1,36 @@ +! pipedum_31b.scl +! +245/243, 1029/1024 comma, 25/24 chroma + 31 +! + 49/48 + 15/14 + 35/32 + 10/9 + 9/8 + 8/7 + 7/6 + 288/245 + 5/4 + 245/192 + 35/27 + 21/16 + 4/3 + 49/36 + 10/7 + 35/24 + 40/27 + 3/2 + 49/32 + 14/9 + 105/64 + 5/3 + 245/144 + 12/7 + 7/4 + 16/9 + 15/8 + 40/21 + 35/18 + 63/32 + 2/1 diff --git a/scales/pipedum_31c.scl b/scales/pipedum_31c.scl new file mode 100644 index 0000000..f42c4bc --- /dev/null +++ b/scales/pipedum_31c.scl @@ -0,0 +1,36 @@ +! pipedum_31c.scl +! +126/125, 225/224, 1029/1024, Op de Coul + 31 +! + 64/63 + 21/20 + 16/15 + 35/32 + 28/25 + 8/7 + 7/6 + 6/5 + 49/40 + 5/4 + 32/25 + 21/16 + 4/3 + 441/320 + 7/5 + 10/7 + 147/100 + 3/2 + 32/21 + 63/40 + 8/5 + 105/64 + 42/25 + 12/7 + 7/4 + 9/5 + 147/80 + 15/8 + 48/25 + 63/32 + 2/1 diff --git a/scales/pipedum_31d.scl b/scales/pipedum_31d.scl new file mode 100644 index 0000000..a281c3b --- /dev/null +++ b/scales/pipedum_31d.scl @@ -0,0 +1,36 @@ +! pipedum_31d.scl +! +1728/1715, 225/224, 81/80 + 31 +! + 36/35 + 21/20 + 15/14 + 35/32 + 9/8 + 8/7 + 7/6 + 6/5 + 98/81 + 5/4 + 9/7 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 54/35 + 14/9 + 8/5 + 105/64 + 5/3 + 12/7 + 7/4 + 9/5 + 64/35 + 15/8 + 27/14 + 35/18 + 2/1 diff --git a/scales/pipedum_31e.scl b/scales/pipedum_31e.scl new file mode 100644 index 0000000..48e80d9 --- /dev/null +++ b/scales/pipedum_31e.scl @@ -0,0 +1,36 @@ +! pipedum_31e.scl +! +81/80, 126/125, 1029/1024, "Synstargam", Gene Ward Smith, 2005 + 31 +! + 49/48 + 25/24 + 200/189 + 35/32 + 10/9 + 8/7 + 7/6 + 25/21 + 175/144 + 5/4 + 80/63 + 21/16 + 4/3 + 175/128 + 25/18 + 10/7 + 35/24 + 3/2 + 32/21 + 25/16 + 100/63 + 105/64 + 5/3 + 12/7 + 7/4 + 25/14 + 175/96 + 15/8 + 40/21 + 35/18 + 2/1 diff --git a/scales/pipedum_31f.scl b/scales/pipedum_31f.scl new file mode 100644 index 0000000..3ba5907 --- /dev/null +++ b/scales/pipedum_31f.scl @@ -0,0 +1,36 @@ +! pipedum_31f.scl +! +225/224, 2401/2400, 1728/1715 + 31 +! + 49/48 + 360/343 + 16/15 + 49/45 + 28/25 + 8/7 + 7/6 + 6/5 + 60/49 + 5/4 + 32/25 + 98/75 + 4/3 + 48/35 + 7/5 + 10/7 + 72/49 + 3/2 + 343/225 + 384/245 + 8/5 + 49/30 + 576/343 + 12/7 + 7/4 + 16/9 + 64/35 + 28/15 + 343/180 + 96/49 + 2/1 diff --git a/scales/pipedum_31g.scl b/scales/pipedum_31g.scl new file mode 100644 index 0000000..dc69123 --- /dev/null +++ b/scales/pipedum_31g.scl @@ -0,0 +1,36 @@ +! pipedum_31g.scl +! +540/539, 2401/2400, 3025/3024, 5632/5625 + 31 +! + 45/44 + 21/20 + 15/14 + 12/11 + 28/25 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 32/25 + 21/16 + 75/56 + 15/11 + 7/5 + 10/7 + 22/15 + 3/2 + 49/32 + 11/7 + 8/5 + 18/11 + 42/25 + 12/7 + 7/4 + 25/14 + 11/6 + 15/8 + 21/11 + 88/45 + 2/1 diff --git a/scales/pipedum_32.scl b/scales/pipedum_32.scl new file mode 100644 index 0000000..f8f8cab --- /dev/null +++ b/scales/pipedum_32.scl @@ -0,0 +1,37 @@ +! pipedum_32.scl +! +225/224, 2048/2025, 117649/116640 + 32 +! + 49/48 + 405/392 + 15/14 + 35/32 + 1715/1536 + 8/7 + 7/6 + 343/288 + 135/112 + 56/45 + 245/192 + 2025/1568 + 4/3 + 49/36 + 135/98 + 45/32 + 196/135 + 72/49 + 675/448 + 14/9 + 343/216 + 45/28 + 105/64 + 686/405 + 12/7 + 7/4 + 49/27 + 90/49 + 15/8 + 245/128 + 96/49 + 2/1 diff --git a/scales/pipedum_32a.scl b/scales/pipedum_32a.scl new file mode 100644 index 0000000..091fa85 --- /dev/null +++ b/scales/pipedum_32a.scl @@ -0,0 +1,37 @@ +! pipedum_32a.scl +! +589824/588245, 225/224, 2048/2025 + 32 +! + 525/512 + 360/343 + 15/14 + 35/32 + 384/343 + 8/7 + 7/6 + 343/288 + 60/49 + 5/4 + 245/192 + 64/49 + 4/3 + 49/36 + 1024/735 + 64/45 + 35/24 + 512/343 + 32/21 + 14/9 + 8192/5145 + 512/315 + 224/135 + 1715/1024 + 675/392 + 225/128 + 3675/2048 + 90/49 + 15/8 + 245/128 + 96/49 + 2/1 diff --git a/scales/pipedum_34.scl b/scales/pipedum_34.scl new file mode 100644 index 0000000..ce505d3 --- /dev/null +++ b/scales/pipedum_34.scl @@ -0,0 +1,39 @@ +! pipedum_34.scl +! +15625/15552, 393216/390625 are homophonic intervals + 34 +! + 128/125 + 25/24 + 16/15 + 625/576 + 10/9 + 9/8 + 144/125 + 75/64 + 6/5 + 768/625 + 5/4 + 32/25 + 125/96 + 4/3 + 3125/2304 + 25/18 + 45/32 + 36/25 + 4608/3125 + 3/2 + 192/125 + 25/16 + 8/5 + 625/384 + 5/3 + 128/75 + 125/72 + 16/9 + 9/5 + 1152/625 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/pipedum_342.scl b/scales/pipedum_342.scl new file mode 100644 index 0000000..3a95e50 --- /dev/null +++ b/scales/pipedum_342.scl @@ -0,0 +1,347 @@ +! pipedum_342.scl +! +kalisma, ragisma, schisma and Breedsma, Manuel Op de Coul, 2001 + 342 +! + 441/440 + 225/224 + 896/891 + 126/125 + 100/99 + 81/80 + 8192/8085 + 64/63 + 56/55 + 50/49 + 45/44 + 128/125 + 6400/6237 + 36/35 + 1225/1188 + 405/392 + 512/495 + 28/27 + 80/77 + 729/700 + 735/704 + 256/245 + 2800/2673 + 21/20 + 81/77 + 256/243 + 1568/1485 + 1296/1225 + 35/33 + 1701/1600 + 25600/24057 + 16/15 + 294/275 + 15/14 + 189/176 + 12800/11907 + 320/297 + 27/25 + 250/231 + 243/224 + 896/825 + 160/147 + 12/11 + 35/32 + 20480/18711 + 192/175 + 980/891 + 54/49 + 243/220 + 448/405 + 256/231 + 10/9 + 49/44 + 2187/1960 + 8960/8019 + 28/25 + 1000/891 + 9/8 + 3969/3520 + 640/567 + 112/99 + 567/500 + 25/22 + 256/225 + 64000/56133 + 8/7 + 63/55 + 225/196 + 1024/891 + 144/125 + 800/693 + 81/70 + 1225/1056 + 512/441 + 64/55 + 7/6 + 90/77 + 6561/5600 + 3136/2673 + 288/245 + 350/297 + 189/160 + 4096/3465 + 32/27 + 196/165 + 25/21 + 105/88 + 448/375 + 3200/2673 + 6/5 + 1323/1100 + 135/112 + 1792/1485 + 1600/1323 + 40/33 + 243/200 + 375/308 + 128/105 + 336/275 + 60/49 + 27/22 + 896/729 + 2560/2079 + 216/175 + 245/198 + 243/196 + 89600/72171 + 56/45 + 96/77 + 5/4 + 441/352 + 1536/1225 + 1120/891 + 63/50 + 125/99 + 81/64 + 3136/2475 + 80/63 + 14/11 + 5103/4000 + 10240/8019 + 32/25 + 8000/6237 + 9/7 + 567/440 + 5120/3969 + 128/99 + 162/125 + 100/77 + 729/560 + 31360/24057 + 64/49 + 72/55 + 21/16 + 405/308 + 320/243 + 392/297 + 324/245 + 175/132 + 896/675 + 512/385 + 4/3 + 147/110 + 75/56 + 3584/2673 + 168/125 + 400/297 + 27/20 + 11907/8800 + 256/189 + 224/165 + 200/147 + 15/11 + 2187/1600 + 25600/18711 + 48/35 + 1225/891 + 135/98 + 2048/1485 + 112/81 + 320/231 + 243/175 + 245/176 + 1024/735 + 11200/8019 + 7/5 + 108/77 + 45/32 + 6272/4455 + 1728/1225 + 140/99 + 567/400 + 125/88 + 64/45 + 392/275 + 10/7 + 63/44 + 12288/8575 + 1280/891 + 36/25 + 1000/693 + 81/56 + 3584/2475 + 640/441 + 16/11 + 35/24 + 225/154 + 256/175 + 3920/2673 + 72/49 + 81/55 + 189/128 + 1024/693 + 40/27 + 49/33 + 729/490 + 35840/24057 + 112/75 + 576/385 + 3/2 + 1323/880 + 2560/1701 + 448/297 + 189/125 + 50/33 + 243/160 + 256000/168399 + 32/21 + 84/55 + 75/49 + 135/88 + 192/125 + 3200/2079 + 54/35 + 1225/792 + 2048/1323 + 256/165 + 14/9 + 120/77 + 2187/1400 + 12544/8019 + 384/245 + 1400/891 + 63/40 + 243/154 + 128/81 + 784/495 + 100/63 + 35/22 + 5103/3200 + 12800/8019 + 8/5 + 441/275 + 45/28 + 7168/4455 + 6400/3969 + 160/99 + 81/50 + 125/77 + 512/315 + 448/275 + 80/49 + 18/11 + 105/64 + 10240/6237 + 288/175 + 490/297 + 81/49 + 729/440 + 224/135 + 128/77 + 5/3 + 147/88 + 2048/1225 + 4480/2673 + 42/25 + 500/297 + 27/16 + 12544/7425 + 320/189 + 56/33 + 1701/1000 + 75/44 + 128/75 + 32000/18711 + 12/7 + 189/110 + 675/392 + 512/297 + 216/125 + 400/231 + 243/140 + 125440/72171 + 256/147 + 96/55 + 7/4 + 135/77 + 1280/729 + 1568/891 + 432/245 + 175/99 + 567/320 + 2048/1155 + 16/9 + 98/55 + 25/14 + 315/176 + 224/125 + 1600/891 + 9/5 + 3969/2200 + 1024/567 + 896/495 + 800/441 + 20/11 + 729/400 + 102400/56133 + 64/35 + 504/275 + 90/49 + 81/44 + 448/243 + 1280/693 + 324/175 + 245/132 + 729/392 + 44800/24057 + 28/15 + 144/77 + 15/8 + 25088/13365 + 2304/1225 + 560/297 + 189/100 + 125/66 + 256/135 + 1568/825 + 40/21 + 21/11 + 15309/8000 + 5120/2673 + 48/25 + 4000/2079 + 27/14 + 1701/880 + 2560/1323 + 64/33 + 35/18 + 150/77 + 1024/525 + 15680/8019 + 96/49 + 108/55 + 63/32 + 4096/2079 + 160/81 + 196/99 + 486/245 + 175/88 + 448/225 + 768/385 + 2/1 diff --git a/scales/pipedum_34a.scl b/scales/pipedum_34a.scl new file mode 100644 index 0000000..d24d2f7 --- /dev/null +++ b/scales/pipedum_34a.scl @@ -0,0 +1,39 @@ +! pipedum_34a.scl +! +15625/15552, 2048/2025, Manuel Op de Coul, 2001 + 34 +! + 81/80 + 25/24 + 16/15 + 27/25 + 10/9 + 9/8 + 144/125 + 75/64 + 6/5 + 243/200 + 5/4 + 32/25 + 125/96 + 4/3 + 27/20 + 25/18 + 45/32 + 36/25 + 40/27 + 3/2 + 192/125 + 25/16 + 8/5 + 81/50 + 5/3 + 27/16 + 216/125 + 16/9 + 9/5 + 50/27 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/pipedum_34b.scl b/scales/pipedum_34b.scl new file mode 100644 index 0000000..21430b4 --- /dev/null +++ b/scales/pipedum_34b.scl @@ -0,0 +1,39 @@ +! pipedum_34b.scl +! +100/99, 243/242, 5632/5625, Manuel Op de Coul + 34 +! + 45/44 + 25/24 + 16/15 + 12/11 + 10/9 + 9/8 + 55/48 + 32/27 + 6/5 + 11/9 + 5/4 + 32/25 + 72/55 + 4/3 + 15/11 + 11/8 + 45/32 + 16/11 + 22/15 + 3/2 + 55/36 + 25/16 + 8/5 + 18/11 + 5/3 + 27/16 + 55/32 + 16/9 + 9/5 + 11/6 + 15/8 + 48/25 + 88/45 + 2/1 diff --git a/scales/pipedum_36.scl b/scales/pipedum_36.scl new file mode 100644 index 0000000..191b313 --- /dev/null +++ b/scales/pipedum_36.scl @@ -0,0 +1,41 @@ +! pipedum_36.scl +! +1029/1024, 245/243 comma, 50/49 chroma, Gene Ward Smith, 2001 + 36 +! + 49/48 + 36/35 + 15/14 + 35/32 + 10/9 + 9/8 + 147/128 + 7/6 + 343/288 + 60/49 + 5/4 + 245/192 + 9/7 + 21/16 + 4/3 + 49/36 + 45/32 + 10/7 + 35/24 + 72/49 + 3/2 + 49/32 + 14/9 + 45/28 + 105/64 + 5/3 + 245/144 + 12/7 + 7/4 + 343/192 + 90/49 + 15/8 + 40/21 + 35/18 + 63/32 + 2/1 diff --git a/scales/pipedum_36a.scl b/scales/pipedum_36a.scl new file mode 100644 index 0000000..8229e83 --- /dev/null +++ b/scales/pipedum_36a.scl @@ -0,0 +1,41 @@ +! pipedum_36a.scl +! +1125/1024, 531441/524288, Op de Coul + 36 +! + 81/80 + 256/243 + 135/128 + 16/15 + 10/9 + 4096/3645 + 9/8 + 32/27 + 1215/1024 + 6/5 + 5/4 + 512/405 + 81/64 + 4/3 + 10935/8192 + 27/20 + 45/32 + 64/45 + 729/512 + 40/27 + 3/2 + 243/160 + 128/81 + 405/256 + 8/5 + 5/3 + 2048/1215 + 27/16 + 16/9 + 3645/2048 + 9/5 + 15/8 + 256/135 + 243/128 + 160/81 + 2/1 diff --git a/scales/pipedum_37.scl b/scales/pipedum_37.scl new file mode 100644 index 0000000..932b8c9 --- /dev/null +++ b/scales/pipedum_37.scl @@ -0,0 +1,42 @@ +! pipedum_37.scl +! +250/243, 3136/3125, 3125/3087, Gene Ward Smith, 2002 + 37 +! + 126/125 + 200/189 + 16/15 + 15/14 + 10/9 + 28/25 + 8/7 + 3125/2646 + 25/21 + 6/5 + 56/45 + 80/63 + 125/98 + 250/189 + 4/3 + 168/125 + 27/20 + 625/441 + 10/7 + 36/25 + 112/75 + 3/2 + 75/49 + 100/63 + 8/5 + 1008/625 + 5/3 + 250/147 + 12/7 + 16/9 + 25/14 + 9/5 + 2500/1323 + 40/21 + 48/25 + 125/63 + 2/1 diff --git a/scales/pipedum_38.scl b/scales/pipedum_38.scl new file mode 100644 index 0000000..56e4554 --- /dev/null +++ b/scales/pipedum_38.scl @@ -0,0 +1,43 @@ +! pipedum_38.scl +! +81/80, 1224440064/1220703125, Manuel Op de Coul, 2001 + 38 +! + 648/625 + 25/24 + 3125/2916 + 27/25 + 10/9 + 17496/15625 + 144/125 + 125/108 + 6/5 + 3125/2592 + 3888/3125 + 5/4 + 625/486 + 162/125 + 4/3 + 15625/11664 + 864/625 + 25/18 + 36/25 + 625/432 + 23328/15625 + 3/2 + 125/81 + 972/625 + 8/5 + 3125/1944 + 5184/3125 + 5/3 + 216/125 + 125/72 + 15625/8748 + 9/5 + 50/27 + 5832/3125 + 48/25 + 625/324 + 78125/39366 + 2/1 diff --git a/scales/pipedum_38a.scl b/scales/pipedum_38a.scl new file mode 100644 index 0000000..975dafa --- /dev/null +++ b/scales/pipedum_38a.scl @@ -0,0 +1,43 @@ +! PIPEDUM_38a.scl +! +50/49, 81/80, 3125/3072, Gene Ward Smith, 2002 + 38 +! + 525/512 + 25/24 + 21/20 + 16/15 + 35/32 + 28/25 + 9/8 + 7/6 + 75/64 + 6/5 + 315/256 + 5/4 + 63/50 + 125/96 + 21/16 + 4/3 + 175/128 + 7/5 + 45/32 + 35/24 + 375/256 + 112/75 + 3/2 + 25/16 + 63/40 + 8/5 + 105/64 + 5/3 + 42/25 + 7/4 + 225/128 + 9/5 + 175/96 + 28/15 + 15/8 + 125/64 + 63/32 + 2/1 diff --git a/scales/pipedum_41.scl b/scales/pipedum_41.scl new file mode 100644 index 0000000..cef6b7e --- /dev/null +++ b/scales/pipedum_41.scl @@ -0,0 +1,46 @@ +! pipedum_41.scl +! +100/99, 105/104, 196/195, 275/273, 385/384, Paul Erlich, TL 3-11-2000 + 41 +! + 65/64 + 33/32 + 21/20 + 15/14 + 35/32 + 10/9 + 9/8 + 8/7 + 65/56 + 33/28 + 6/5 + 49/40 + 5/4 + 81/64 + 9/7 + 21/16 + 4/3 + 65/48 + 11/8 + 7/5 + 10/7 + 35/24 + 77/52 + 3/2 + 49/32 + 14/9 + 63/40 + 8/5 + 13/8 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 91/48 + 77/40 + 55/28 + 2/1 diff --git a/scales/pipedum_41a.scl b/scales/pipedum_41a.scl new file mode 100644 index 0000000..169ea46 --- /dev/null +++ b/scales/pipedum_41a.scl @@ -0,0 +1,46 @@ +! PIPEDUM_41a.scl +! +pipedum_41 improved shape by Manuel Op de Coul, all intervals superparticular + 41 +! + 65/64 + 33/32 + 21/20 + 15/14 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 10/7 + 16/11 + 40/27 + 3/2 + 49/32 + 14/9 + 11/7 + 8/5 + 13/8 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 91/48 + 77/40 + 55/28 + 2/1 diff --git a/scales/pipedum_41b.scl b/scales/pipedum_41b.scl new file mode 100644 index 0000000..e024e01 --- /dev/null +++ b/scales/pipedum_41b.scl @@ -0,0 +1,46 @@ +! pipedum_41b.scl +! +pipedum_41 more improved shape by M. OdC, all intervals superparticular + 41 +! + 64/63 + 28/27 + 21/20 + 16/15 + 49/45 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 81/64 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 10/7 + 35/24 + 40/27 + 3/2 + 32/21 + 14/9 + 63/40 + 8/5 + 13/8 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 15/8 + 40/21 + 27/14 + 63/32 + 2/1 diff --git a/scales/pipedum_41c.scl b/scales/pipedum_41c.scl new file mode 100644 index 0000000..ba6f252 --- /dev/null +++ b/scales/pipedum_41c.scl @@ -0,0 +1,46 @@ +! pipedum_41c.scl +! +225/224, 245/243, 1029/1024, Gene Ward Smith, 2002 + 41 +! + 49/48 + 28/27 + 135/128 + 15/14 + 35/32 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 135/112 + 60/49 + 5/4 + 245/192 + 9/7 + 21/16 + 4/3 + 49/36 + 135/98 + 45/32 + 10/7 + 35/24 + 72/49 + 3/2 + 32/21 + 14/9 + 384/245 + 45/28 + 105/64 + 5/3 + 245/144 + 12/7 + 7/4 + 16/9 + 49/27 + 90/49 + 15/8 + 40/21 + 35/18 + 96/49 + 2/1 diff --git a/scales/pipedum_43.scl b/scales/pipedum_43.scl new file mode 100644 index 0000000..3460292 --- /dev/null +++ b/scales/pipedum_43.scl @@ -0,0 +1,48 @@ +! pipedum_43.scl +! +81/80, 126/125, 12288/12005, Gene Ward Smith, 2002 + 43 +! + 36/35 + 256/245 + 21/20 + 27/25 + 35/32 + 192/175 + 10/9 + 8/7 + 7/6 + 288/245 + 6/5 + 216/175 + 5/4 + 1536/1225 + 80/63 + 64/49 + 21/16 + 4/3 + 48/35 + 7/5 + 1728/1225 + 36/25 + 640/441 + 35/24 + 3/2 + 32/21 + 384/245 + 63/40 + 8/5 + 175/108 + 288/175 + 5/3 + 12/7 + 256/147 + 7/4 + 9/5 + 64/35 + 2304/1225 + 189/100 + 40/21 + 35/18 + 96/49 + 2/1 diff --git a/scales/pipedum_45.scl b/scales/pipedum_45.scl new file mode 100644 index 0000000..5050ebb --- /dev/null +++ b/scales/pipedum_45.scl @@ -0,0 +1,50 @@ +! pipedum_45.scl +! +81/80, 525/512, 2401/2400, Gene Ward Smith, 2002 + 45 +! + 64/63 + 49/48 + 21/20 + 16/15 + 15/14 + 49/45 + 28/25 + 9/8 + 8/7 + 512/441 + 7/6 + 6/5 + 49/40 + 56/45 + 5/4 + 9/7 + 98/75 + 21/16 + 4/3 + 49/36 + 48/35 + 7/5 + 64/45 + 10/7 + 147/100 + 3/2 + 32/21 + 49/32 + 14/9 + 8/5 + 45/28 + 49/30 + 5/3 + 42/25 + 12/7 + 392/225 + 7/4 + 16/9 + 64/35 + 147/80 + 28/15 + 40/21 + 49/25 + 63/32 + 2/1 diff --git a/scales/pipedum_45a.scl b/scales/pipedum_45a.scl new file mode 100644 index 0000000..443b86c --- /dev/null +++ b/scales/pipedum_45a.scl @@ -0,0 +1,50 @@ +! pipedum_45a.scl +! +81/80, 2401/2400, 4375/4374, Gene Ward Smith + 45 +! + 49/48 + 36/35 + 21/20 + 200/189 + 27/25 + 54/49 + 10/9 + 245/216 + 8/7 + 7/6 + 25/21 + 6/5 + 49/40 + 100/81 + 63/50 + 9/7 + 35/27 + 324/245 + 4/3 + 49/36 + 243/175 + 7/5 + 10/7 + 350/243 + 72/49 + 3/2 + 245/162 + 54/35 + 14/9 + 100/63 + 81/50 + 80/49 + 5/3 + 42/25 + 12/7 + 7/4 + 432/245 + 9/5 + 49/27 + 50/27 + 189/100 + 40/21 + 35/18 + 96/49 + 2/1 diff --git a/scales/pipedum_46.scl b/scales/pipedum_46.scl new file mode 100644 index 0000000..57b53ec --- /dev/null +++ b/scales/pipedum_46.scl @@ -0,0 +1,51 @@ +! pipedum_46.scl +! +126/125, 1029/1024, 5120/5103, Manuel Op de Coul, 2001 + 46 +! + 64/63 + 1323/1280 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 640/567 + 147/128 + 7/6 + 32/27 + 6/5 + 49/40 + 56/45 + 5/4 + 80/63 + 35/27 + 21/16 + 4/3 + 256/189 + 441/320 + 7/5 + 64/45 + 10/7 + 35/24 + 40/27 + 3/2 + 32/21 + 14/9 + 63/40 + 8/5 + 49/30 + 105/64 + 5/3 + 320/189 + 441/256 + 7/4 + 16/9 + 9/5 + 147/80 + 28/15 + 15/8 + 40/21 + 35/18 + 63/32 + 2/1 diff --git a/scales/pipedum_46a.scl b/scales/pipedum_46a.scl new file mode 100644 index 0000000..cc9862a --- /dev/null +++ b/scales/pipedum_46a.scl @@ -0,0 +1,51 @@ +! pipedum_46a.scl +! +126/125, 1029/1024, 245/243, Gene Ward Smith, 2002 + 46 +! + 49/48 + 36/35 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 9/8 + 8/7 + 7/6 + 288/245 + 6/5 + 60/49 + 49/40 + 5/4 + 80/63 + 9/7 + 21/16 + 4/3 + 27/20 + 48/35 + 480/343 + 7/5 + 10/7 + 35/24 + 40/27 + 3/2 + 32/21 + 14/9 + 63/40 + 8/5 + 80/49 + 49/30 + 5/3 + 245/144 + 12/7 + 7/4 + 16/9 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 35/18 + 96/49 + 2/1 diff --git a/scales/pipedum_46b.scl b/scales/pipedum_46b.scl new file mode 100644 index 0000000..8efd29a --- /dev/null +++ b/scales/pipedum_46b.scl @@ -0,0 +1,51 @@ +! pipedum_46b.scl +! +2048/2025, 78732/78125 + 46 +! + 81/80 + 648/625 + 25/24 + 16/15 + 27/25 + 625/576 + 10/9 + 9/8 + 144/125 + 125/108 + 32/27 + 6/5 + 243/200 + 100/81 + 5/4 + 32/25 + 162/125 + 125/96 + 4/3 + 27/20 + 864/625 + 25/18 + 64/45 + 36/25 + 729/500 + 40/27 + 3/2 + 192/125 + 125/81 + 25/16 + 8/5 + 81/50 + 400/243 + 5/3 + 27/16 + 216/125 + 125/72 + 16/9 + 9/5 + 1152/625 + 50/27 + 15/8 + 48/25 + 243/125 + 160/81 + 2/1 diff --git a/scales/pipedum_46c.scl b/scales/pipedum_46c.scl new file mode 100644 index 0000000..f3ca660 --- /dev/null +++ b/scales/pipedum_46c.scl @@ -0,0 +1,51 @@ +! pipedum_46c.scl +! +126/125, 176/175, 385/384, 896/891, Paul Erlich + 46 +! + 55/54 + 28/27 + 22/21 + 16/15 + 175/162 + 11/10 + 10/9 + 256/225 + 55/48 + 88/75 + 32/27 + 6/5 + 11/9 + 56/45 + 44/35 + 80/63 + 35/27 + 55/42 + 4/3 + 110/81 + 11/8 + 25/18 + 64/45 + 275/192 + 22/15 + 40/27 + 264/175 + 55/36 + 14/9 + 11/7 + 8/5 + 44/27 + 33/20 + 5/3 + 128/75 + 55/32 + 44/25 + 16/9 + 25/14 + 11/6 + 50/27 + 256/135 + 275/144 + 88/45 + 160/81 + 2/1 diff --git a/scales/pipedum_46d.scl b/scales/pipedum_46d.scl new file mode 100644 index 0000000..fada057 --- /dev/null +++ b/scales/pipedum_46d.scl @@ -0,0 +1,51 @@ +! pipedum_46d.scl +! +91/90, 121/120, 126/125, 169/168, 176/175 + 46 +! + 143/140 + 1001/960 + 21/20 + 715/672 + 13/12 + 11/10 + 39/35 + 91/80 + 55/48 + 65/56 + 143/120 + 6/5 + 429/350 + 715/576 + 5/4 + 143/112 + 13/10 + 375/286 + 33/25 + 65/48 + 11/8 + 7/5 + 143/100 + 36/25 + 35/24 + 143/96 + 3/2 + 77/50 + 39/25 + 11/7 + 77/48 + 13/8 + 33/20 + 42/25 + 143/84 + 12/7 + 7/4 + 143/80 + 9/5 + 11/6 + 13/7 + 15/8 + 77/40 + 39/20 + 143/72 + 2/1 diff --git a/scales/pipedum_50.scl b/scales/pipedum_50.scl new file mode 100644 index 0000000..73e4bc2 --- /dev/null +++ b/scales/pipedum_50.scl @@ -0,0 +1,55 @@ +! pipedum_50.scl +! +81/80, 126/125, 16807/16384, Gene Ward Smith, 2002 + 50 +! + 49/48 + 36/35 + 256/245 + 21/20 + 200/189 + 160/147 + 35/32 + 10/9 + 8/7 + 147/128 + 7/6 + 288/245 + 6/5 + 1600/1323 + 49/40 + 5/4 + 80/63 + 245/192 + 64/49 + 21/16 + 4/3 + 48/35 + 441/320 + 12800/9261 + 7/5 + 10/7 + 640/441 + 35/24 + 3/2 + 32/21 + 49/32 + 384/245 + 63/40 + 8/5 + 175/108 + 80/49 + 5/3 + 245/144 + 12/7 + 256/147 + 7/4 + 9/5 + 64/35 + 147/80 + 50/27 + 40/21 + 245/128 + 35/18 + 96/49 + 2/1 diff --git a/scales/pipedum_53a.scl b/scales/pipedum_53a.scl new file mode 100644 index 0000000..91ad23e --- /dev/null +++ b/scales/pipedum_53a.scl @@ -0,0 +1,58 @@ +! pipedum_53a.scl +! +225/224, 1728/1715, 4375/4374, Manuel Op de Coul, 2001 + 53 +! + 50/49 + 36/35 + 25/24 + 200/189 + 15/14 + 27/25 + 54/49 + 10/9 + 9/8 + 8/7 + 125/108 + 7/6 + 25/21 + 6/5 + 60/49 + 100/81 + 5/4 + 80/63 + 9/7 + 35/27 + 250/189 + 4/3 + 27/20 + 48/35 + 25/18 + 7/5 + 10/7 + 36/25 + 72/49 + 40/27 + 3/2 + 32/21 + 54/35 + 14/9 + 100/63 + 8/5 + 81/50 + 288/175 + 5/3 + 27/16 + 12/7 + 125/72 + 7/4 + 25/14 + 9/5 + 90/49 + 50/27 + 15/8 + 40/21 + 27/14 + 35/18 + 125/63 + 2/1 diff --git a/scales/pipedum_53b.scl b/scales/pipedum_53b.scl new file mode 100644 index 0000000..a1ecc02 --- /dev/null +++ b/scales/pipedum_53b.scl @@ -0,0 +1,58 @@ +! pipedum_53b.scl +! +225/224, 1728/1715, 3125/3087, Gene Ward Smith, 2002 + 53 +! + 50/49 + 36/35 + 25/24 + 21/20 + 15/14 + 375/343 + 54/49 + 10/9 + 28/25 + 8/7 + 144/125 + 7/6 + 25/21 + 6/5 + 60/49 + 216/175 + 5/4 + 125/98 + 9/7 + 98/75 + 450/343 + 4/3 + 168/125 + 48/35 + 25/18 + 7/5 + 10/7 + 36/25 + 72/49 + 125/84 + 3/2 + 75/49 + 54/35 + 14/9 + 196/125 + 8/5 + 80/49 + 288/175 + 5/3 + 42/25 + 12/7 + 600/343 + 7/4 + 25/14 + 9/5 + 686/375 + 90/49 + 28/15 + 40/21 + 48/25 + 96/49 + 49/25 + 2/1 diff --git a/scales/pipedum_53c.scl b/scales/pipedum_53c.scl new file mode 100644 index 0000000..5f7be17 --- /dev/null +++ b/scales/pipedum_53c.scl @@ -0,0 +1,58 @@ +! pipedum_53c.scl +! +225/224, 2430/2401 and 5120/5103 + 53 +! + 50/49 + 36/35 + 25/24 + 21/20 + 15/14 + 27/25 + 35/32 + 10/9 + 9/8 + 8/7 + 81/70 + 7/6 + 25/21 + 6/5 + 60/49 + 49/40 + 5/4 + 63/50 + 9/7 + 35/27 + 21/16 + 4/3 + 27/20 + 48/35 + 25/18 + 7/5 + 10/7 + 36/25 + 35/24 + 40/27 + 3/2 + 32/21 + 54/35 + 14/9 + 63/40 + 8/5 + 80/49 + 49/30 + 5/3 + 42/25 + 12/7 + 140/81 + 7/4 + 16/9 + 9/5 + 64/35 + 50/27 + 15/8 + 40/21 + 27/14 + 35/18 + 49/25 + 2/1 diff --git a/scales/pipedum_55.scl b/scales/pipedum_55.scl new file mode 100644 index 0000000..e05f75a --- /dev/null +++ b/scales/pipedum_55.scl @@ -0,0 +1,60 @@ +! pipedum_55.scl +! +81/80, 686/675, 6144/6125, Gene Ward Smith, 2002 + 55 +! + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 28/25 + 9/8 + 245/216 + 8/7 + 7/6 + 75/64 + 6/5 + 175/144 + 49/40 + 56/45 + 5/4 + 245/192 + 9/7 + 125/96 + 21/16 + 4/3 + 49/36 + 48/35 + 7/5 + 45/32 + 10/7 + 36/25 + 35/24 + 112/75 + 3/2 + 49/32 + 54/35 + 14/9 + 25/16 + 8/5 + 49/30 + 105/64 + 5/3 + 42/25 + 245/144 + 12/7 + 7/4 + 225/128 + 9/5 + 49/27 + 175/96 + 28/15 + 15/8 + 48/25 + 27/14 + 35/18 + 448/225 + 2/1 diff --git a/scales/pipedum_58.scl b/scales/pipedum_58.scl new file mode 100644 index 0000000..4de7524 --- /dev/null +++ b/scales/pipedum_58.scl @@ -0,0 +1,63 @@ +! pipedum_58.scl +! +9801/9800, 2401/2400, 5120/5103, 896/891 + 58 +! + 99/98 + 77/75 + 28/27 + 256/243 + 297/280 + 15/14 + 49/45 + 11/10 + 352/315 + 640/567 + 891/784 + 231/200 + 7/6 + 32/27 + 176/147 + 135/112 + 49/40 + 99/80 + 44/35 + 80/63 + 1568/1215 + 2079/1600 + 21/16 + 4/3 + 66/49 + 308/225 + 112/81 + 891/640 + 99/70 + 10/7 + 196/135 + 22/15 + 1408/945 + 3/2 + 297/196 + 77/50 + 14/9 + 128/81 + 704/441 + 45/28 + 49/30 + 33/20 + 176/105 + 320/189 + 2673/1568 + 693/400 + 7/4 + 16/9 + 88/49 + 1232/675 + 147/80 + 297/160 + 66/35 + 40/21 + 784/405 + 88/45 + 63/32 + 2/1 diff --git a/scales/pipedum_58a.scl b/scales/pipedum_58a.scl new file mode 100644 index 0000000..3f92944 --- /dev/null +++ b/scales/pipedum_58a.scl @@ -0,0 +1,63 @@ +! pipedum_58a.scl +! +126/125, 144/143, 176/175, 196/195, 364/363 + 58 +! + 66/65 + 1375/1344 + 336/325 + 25/24 + 35/33 + 14/13 + 12/11 + 11/10 + 28/25 + 44/39 + 25/22 + 15/13 + 7/6 + 77/65 + 6/5 + 110/91 + 16/13 + 245/198 + 5/4 + 14/11 + 84/65 + 55/42 + 4704/3575 + 4/3 + 35/26 + 196/143 + 18/13 + 7/5 + 55/39 + 56/39 + 132/91 + 35/24 + 49/33 + 3/2 + 84/55 + 20/13 + 14/9 + 11/7 + 8/5 + 21/13 + 275/168 + 1176/715 + 5/3 + 22/13 + 112/65 + 792/455 + 7/4 + 98/55 + 70/39 + 20/11 + 24/13 + 28/15 + 616/325 + 21/11 + 25/13 + 280/143 + 77/39 + 2/1 diff --git a/scales/pipedum_5a.scl b/scales/pipedum_5a.scl new file mode 100644 index 0000000..249befd --- /dev/null +++ b/scales/pipedum_5a.scl @@ -0,0 +1,10 @@ +! pipedum_5a.scl +! +27/25, 81/80 + 5 +! + 10/9 + 4/3 + 3/2 + 9/5 + 2/1 diff --git a/scales/pipedum_64.scl b/scales/pipedum_64.scl new file mode 100644 index 0000000..c7e22e4 --- /dev/null +++ b/scales/pipedum_64.scl @@ -0,0 +1,69 @@ +! pipedum_64.scl +! +225/224, 235298/234375, 67108864/66706983 + 64 +! + 128/125 + 50/49 + 256/245 + 21/20 + 1875/1792 + 15/14 + 343/320 + 160/147 + 35/32 + 9/8 + 3584/3125 + 8/7 + 147/128 + 147/125 + 75/64 + 6/5 + 1875/1568 + 60/49 + 49/40 + 784/625 + 5/4 + 9/7 + 1029/800 + 64/49 + 21/16 + 168/125 + 4/3 + 48/35 + 343/250 + 480/343 + 7/5 + 896/625 + 10/7 + 256/175 + 147/100 + 375/256 + 3/2 + 2401/1600 + 32/21 + 49/32 + 63/40 + 25/16 + 8/5 + 1024/625 + 80/49 + 105/64 + 42/25 + 375/224 + 12/7 + 343/200 + 256/147 + 7/4 + 224/125 + 25/14 + 64/35 + 147/80 + 640/343 + 15/8 + 48/25 + 375/196 + 96/49 + 49/25 + 2048/1029 + 2/1 diff --git a/scales/pipedum_65.scl b/scales/pipedum_65.scl new file mode 100644 index 0000000..801dc20 --- /dev/null +++ b/scales/pipedum_65.scl @@ -0,0 +1,70 @@ +! pipedum_65.scl +! +1216/1215, 32805/32768, 39858075/39845888. Manuel Op de Coul, 2001 + 65 +! + 2048/2025 + 65536/64125 + 12288/11875 + 4275/4096 + 135/128 + 16/15 + 512/475 + 1048576/961875 + 577125/524288 + 285/256 + 9/8 + 256/225 + 8192/7125 + 2375/2048 + 95/81 + 1215/1024 + 6/5 + 576/475 + 131072/106875 + 475/384 + 304/243 + 81/64 + 243/190 + 3072/2375 + 21375/16384 + 95/72 + 4/3 + 8192/6075 + 648/475 + 16384/11875 + 1425/1024 + 45/32 + 64/45 + 2048/1425 + 3456/2375 + 192375/131072 + 95/64 + 3/2 + 1024/675 + 32768/21375 + 2375/1536 + 12825/8192 + 405/256 + 8/5 + 768/475 + 524288/320625 + 475/288 + 855/512 + 27/16 + 128/75 + 4096/2375 + 7125/4096 + 95/54 + 16/9 + 9/5 + 864/475 + 65536/35625 + 475/256 + 152/81 + 256/135 + 729/380 + 4608/2375 + 64125/32768 + 95/48 + 2/1 diff --git a/scales/pipedum_65a.scl b/scales/pipedum_65a.scl new file mode 100644 index 0000000..77de2ce --- /dev/null +++ b/scales/pipedum_65a.scl @@ -0,0 +1,70 @@ +! pipedum_65a.scl +! +78732/78125, 32805/32768 + 65 +! + 81/80 + 128/125 + 250/243 + 25/24 + 135/128 + 16/15 + 27/25 + 2187/2000 + 800/729 + 10/9 + 9/8 + 729/640 + 144/125 + 125/108 + 75/64 + 32/27 + 6/5 + 243/200 + 8000/6561 + 100/81 + 5/4 + 81/64 + 32/25 + 162/125 + 125/96 + 320/243 + 4/3 + 27/20 + 2187/1600 + 1000/729 + 25/18 + 45/32 + 64/45 + 36/25 + 729/500 + 375/256 + 40/27 + 3/2 + 243/160 + 192/125 + 125/81 + 25/16 + 128/81 + 8/5 + 81/50 + 6561/4000 + 400/243 + 5/3 + 27/16 + 128/75 + 216/125 + 125/72 + 225/128 + 16/9 + 9/5 + 729/400 + 4000/2187 + 50/27 + 15/8 + 243/128 + 48/25 + 243/125 + 125/64 + 160/81 + 2/1 diff --git a/scales/pipedum_67.scl b/scales/pipedum_67.scl new file mode 100644 index 0000000..088c353 --- /dev/null +++ b/scales/pipedum_67.scl @@ -0,0 +1,72 @@ +! pipedum_67.scl +! +81/80, 1029/1024, 9604/9375, Gene Ward Smith, 2002 + 67 +! + 225/224 + 50/49 + 49/48 + 25/24 + 21/20 + 16/15 + 15/14 + 49/45 + 35/32 + 28/25 + 9/8 + 8/7 + 343/300 + 225/196 + 7/6 + 75/64 + 25/21 + 6/5 + 60/49 + 49/40 + 56/45 + 5/4 + 80/63 + 1029/800 + 4000/3087 + 98/75 + 21/16 + 4/3 + 75/56 + 200/147 + 441/320 + 7/5 + 45/32 + 10/7 + 343/240 + 35/24 + 147/100 + 112/75 + 3/2 + 343/225 + 75/49 + 49/32 + 14/9 + 25/16 + 8/5 + 45/28 + 49/30 + 105/64 + 5/3 + 42/25 + 12/7 + 343/200 + 392/225 + 7/4 + 225/128 + 16/9 + 25/14 + 800/441 + 147/80 + 28/15 + 15/8 + 40/21 + 3087/1600 + 49/25 + 63/32 + 448/225 + 2/1 diff --git a/scales/pipedum_68.scl b/scales/pipedum_68.scl new file mode 100644 index 0000000..5498c9e --- /dev/null +++ b/scales/pipedum_68.scl @@ -0,0 +1,73 @@ +! pipedum_68.scl +! +245/243, 2048/2025, 2401/2400, Gene Ward Smith, 2002 + 68 +! + 64/63 + 49/48 + 36/35 + 256/245 + 21/20 + 16/15 + 15/14 + 49/45 + 54/49 + 448/405 + 28/25 + 9/8 + 8/7 + 784/675 + 7/6 + 189/160 + 32/27 + 6/5 + 128/105 + 49/40 + 56/45 + 5/4 + 432/343 + 32/25 + 9/7 + 64/49 + 21/16 + 4/3 + 27/20 + 256/189 + 48/35 + 135/98 + 7/5 + 64/45 + 10/7 + 81/56 + 196/135 + 72/49 + 112/75 + 3/2 + 32/21 + 49/32 + 14/9 + 384/245 + 63/40 + 8/5 + 45/28 + 49/30 + 224/135 + 5/3 + 42/25 + 27/16 + 12/7 + 392/225 + 7/4 + 16/9 + 343/192 + 9/5 + 64/35 + 90/49 + 28/15 + 256/135 + 40/21 + 48/25 + 27/14 + 96/49 + 448/225 + 2/1 diff --git a/scales/pipedum_72.scl b/scales/pipedum_72.scl new file mode 100644 index 0000000..9f10f36 --- /dev/null +++ b/scales/pipedum_72.scl @@ -0,0 +1,77 @@ +! pipedum_72.scl +! +225/224, 1029/1024, 4375/4374, Gene Ward Smith, 2002 + 72 +! + 81/80 + 49/48 + 36/35 + 25/24 + 21/20 + 1225/1152 + 16/15 + 27/25 + 35/32 + 441/400 + 10/9 + 9/8 + 245/216 + 8/7 + 81/70 + 7/6 + 189/160 + 32/27 + 6/5 + 175/144 + 49/40 + 216/175 + 5/4 + 63/50 + 245/192 + 9/7 + 35/27 + 21/16 + 1152/875 + 4/3 + 27/20 + 49/36 + 48/35 + 25/18 + 7/5 + 1225/864 + 10/7 + 36/25 + 35/24 + 189/128 + 40/27 + 3/2 + 245/162 + 49/32 + 54/35 + 14/9 + 63/40 + 100/63 + 8/5 + 175/108 + 105/64 + 288/175 + 5/3 + 42/25 + 245/144 + 12/7 + 140/81 + 7/4 + 567/320 + 16/9 + 9/5 + 175/96 + 147/80 + 50/27 + 28/15 + 189/100 + 40/21 + 48/25 + 35/18 + 63/32 + 160/81 + 2/1 diff --git a/scales/pipedum_72a.scl b/scales/pipedum_72a.scl new file mode 100644 index 0000000..cc961e4 --- /dev/null +++ b/scales/pipedum_72a.scl @@ -0,0 +1,77 @@ +! pipedum_72a.scl +! +4375/4374, 2401/2400, 15625/15552, Manuel Op de Coul, 2002 + 72 +! + 126/125 + 49/48 + 36/35 + 648/625 + 21/20 + 1323/1250 + 15/14 + 27/25 + 49/45 + 625/567 + 10/9 + 28/25 + 245/216 + 8/7 + 125/108 + 7/6 + 147/125 + 25/21 + 6/5 + 756/625 + 49/40 + 216/175 + 5/4 + 63/50 + 3969/3125 + 9/7 + 35/27 + 98/75 + 250/189 + 4/3 + 875/648 + 49/36 + 48/35 + 25/18 + 7/5 + 882/625 + 10/7 + 36/25 + 35/24 + 147/100 + 1296/875 + 3/2 + 189/125 + 46656/30625 + 125/81 + 14/9 + 6125/3888 + 100/63 + 8/5 + 175/108 + 49/30 + 288/175 + 5/3 + 42/25 + 245/144 + 12/7 + 216/125 + 7/4 + 441/250 + 7776/4375 + 9/5 + 49/27 + 3125/1701 + 50/27 + 28/15 + 1225/648 + 40/21 + 48/25 + 35/18 + 49/25 + 125/63 + 2/1 diff --git a/scales/pipedum_72b.scl b/scales/pipedum_72b.scl new file mode 100644 index 0000000..cd374a7 --- /dev/null +++ b/scales/pipedum_72b.scl @@ -0,0 +1,77 @@ +! pipedum_72b.scl +! +225/224, 3025/3024, 1375/1372, 4375/4374 + 72 +! + 126/125 + 1375/1344 + 33/32 + 25/24 + 21/20 + 1375/1296 + 77/72 + 27/25 + 49/45 + 11/10 + 125/112 + 9/8 + 6875/6048 + 55/48 + 81/70 + 7/6 + 33/28 + 385/324 + 6/5 + 175/144 + 275/224 + 99/80 + 5/4 + 63/50 + 275/216 + 77/60 + 35/27 + 98/75 + 297/224 + 75/56 + 27/20 + 1375/1008 + 11/8 + 25/18 + 7/5 + 99/70 + 77/54 + 81/56 + 35/24 + 165/112 + 1925/1296 + 3/2 + 189/125 + 55/36 + 77/50 + 14/9 + 2475/1568 + 1375/864 + 45/28 + 81/50 + 275/168 + 33/20 + 5/3 + 42/25 + 275/162 + 55/32 + 243/140 + 7/4 + 99/56 + 385/216 + 9/5 + 49/27 + 11/6 + 63504/34375 + 15/8 + 1485/784 + 275/144 + 27/14 + 35/18 + 55/28 + 1925/972 + 2/1 diff --git a/scales/pipedum_72b2.scl b/scales/pipedum_72b2.scl new file mode 100644 index 0000000..cc9e4cb --- /dev/null +++ b/scales/pipedum_72b2.scl @@ -0,0 +1,77 @@ +! pipedum_72b2.scl +! +Optimised version of pipedum_72b, Manuel Op de Coul + 72 +! + 81/80 + 45/44 + 33/32 + 25/24 + 21/20 + 35/33 + 15/14 + 27/25 + 12/11 + 11/10 + 10/9 + 9/8 + 25/22 + 8/7 + 81/70 + 7/6 + 33/28 + 25/21 + 6/5 + 40/33 + 11/9 + 99/80 + 5/4 + 44/35 + 14/11 + 9/7 + 35/27 + 21/16 + 33/25 + 4/3 + 27/20 + 15/11 + 11/8 + 25/18 + 7/5 + 99/70 + 10/7 + 36/25 + 16/11 + 22/15 + 40/27 + 3/2 + 50/33 + 32/21 + 54/35 + 14/9 + 11/7 + 35/22 + 8/5 + 81/50 + 18/11 + 33/20 + 5/3 + 27/16 + 56/33 + 12/7 + 121/70 + 7/4 + 44/25 + 16/9 + 9/5 + 20/11 + 11/6 + 50/27 + 15/8 + 66/35 + 21/11 + 27/14 + 35/18 + 49/25 + 99/50 + 2/1 diff --git a/scales/pipedum_72c.scl b/scales/pipedum_72c.scl new file mode 100644 index 0000000..587ced7 --- /dev/null +++ b/scales/pipedum_72c.scl @@ -0,0 +1,77 @@ +! pipedum_72c.scl +! +441/440, 2401/2400, 4375/4374, 1375/1372 + 72 +! + 126/125 + 50/49 + 36/35 + 28/27 + 21/20 + 200/189 + 15/14 + 27/25 + 49/45 + 54/49 + 10/9 + 28/25 + 245/216 + 8/7 + 81/70 + 7/6 + 147/125 + 25/21 + 6/5 + 98/81 + 60/49 + 216/175 + 5/4 + 63/50 + 80/63 + 9/7 + 35/27 + 98/75 + 324/245 + 4/3 + 27/20 + 49/36 + 48/35 + 25/18 + 7/5 + 1728/1225 + 10/7 + 36/25 + 35/24 + 72/49 + 40/27 + 3/2 + 245/162 + 32/21 + 54/35 + 14/9 + 63/40 + 100/63 + 8/5 + 175/108 + 49/30 + 288/175 + 5/3 + 42/25 + 250/147 + 12/7 + 140/81 + 7/4 + 432/245 + 16/9 + 9/5 + 49/27 + 90/49 + 50/27 + 28/15 + 189/100 + 40/21 + 48/25 + 35/18 + 49/25 + 125/63 + 2/1 diff --git a/scales/pipedum_74.scl b/scales/pipedum_74.scl new file mode 100644 index 0000000..1fc5426 --- /dev/null +++ b/scales/pipedum_74.scl @@ -0,0 +1,79 @@ +! pipedum_74.scl +! +81/80, 126/125, 4194304/4117715, Gene Ward Smith, 2002 + 74 +! + 1029/1024 + 64/63 + 49/48 + 256/245 + 21/20 + 16/15 + 343/320 + 9216/8575 + 192/175 + 441/400 + 10/9 + 1715/1536 + 384/343 + 8/7 + 147/128 + 512/441 + 7/6 + 2048/1715 + 6/5 + 3087/2560 + 128/105 + 49/40 + 8575/6912 + 1536/1225 + 63/50 + 80/63 + 245/192 + 64/49 + 21/16 + 4096/3087 + 4/3 + 343/256 + 48/35 + 441/320 + 1024/735 + 7/5 + 343/240 + 12288/8575 + 36/25 + 640/441 + 35/24 + 1715/1152 + 512/343 + 3/2 + 32/21 + 49/32 + 384/245 + 63/40 + 8192/5145 + 8/5 + 1029/640 + 49/30 + 288/175 + 5/3 + 2048/1225 + 1715/1024 + 245/144 + 12/7 + 256/147 + 7/4 + 16/9 + 343/192 + 3072/1715 + 64/35 + 147/80 + 28/15 + 2304/1225 + 16384/8575 + 245/128 + 48/25 + 35/18 + 96/49 + 2048/1029 + 2/1 diff --git a/scales/pipedum_8.scl b/scales/pipedum_8.scl new file mode 100644 index 0000000..e9fd009 --- /dev/null +++ b/scales/pipedum_8.scl @@ -0,0 +1,13 @@ +! pipedum_8.scl +! +50/49, 126/125 and 686/675 + 8 +! + 8/7 + 6/5 + 4/3 + 7/5 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/pipedum_81.scl b/scales/pipedum_81.scl new file mode 100644 index 0000000..bea3963 --- /dev/null +++ b/scales/pipedum_81.scl @@ -0,0 +1,86 @@ +! pipedum_81.scl +! +81/80, 126/125, 17294403/16777216, Gene Ward Smith, 2002 + 81 +! + 1029/1024 + 49/48 + 36/35 + 256/245 + 21/20 + 21609/20480 + 15/14 + 343/320 + 160/147 + 35/32 + 36015/32768 + 1715/1536 + 384/343 + 9/8 + 8/7 + 147/128 + 7/6 + 2401/2048 + 288/245 + 2048/1715 + 6/5 + 3087/2560 + 60/49 + 49/40 + 1280/1029 + 5/4 + 5145/4096 + 245/192 + 9/7 + 64/49 + 21/16 + 21609/16384 + 4/3 + 343/256 + 2304/1715 + 48/35 + 441/320 + 480/343 + 7/5 + 7203/5120 + 10/7 + 735/512 + 640/441 + 35/24 + 12005/8192 + 512/343 + 3/2 + 3087/2048 + 32/21 + 49/32 + 384/245 + 63/40 + 102400/64827 + 64827/40960 + 8/5 + 1029/640 + 80/49 + 105/64 + 5120/3087 + 5/3 + 1715/1024 + 12/7 + 441/256 + 256/147 + 7/4 + 7203/4096 + 3072/1715 + 9/5 + 9261/5120 + 64/35 + 147/80 + 640/343 + 15/8 + 2401/1280 + 40/21 + 245/128 + 12005/6144 + 96/49 + 63/32 + 2048/1029 + 2/1 diff --git a/scales/pipedum_87.scl b/scales/pipedum_87.scl new file mode 100644 index 0000000..283fbd6 --- /dev/null +++ b/scales/pipedum_87.scl @@ -0,0 +1,92 @@ +! pipedum_87.scl +! +67108864/66430125, 15625/15552, Op de Coul + 87 +! + 2048/2025 + 81/80 + 128/125 + 16875/16384 + 25/24 + 256/243 + 135/128 + 16/15 + 2187/2048 + 27/25 + 800/729 + 1125/1024 + 10/9 + 4096/3645 + 9/8 + 256/225 + 729/640 + 125/108 + 2560/2187 + 75/64 + 32/27 + 1215/1024 + 6/5 + 4096/3375 + 625/512 + 100/81 + 10125/8192 + 5/4 + 512/405 + 81/64 + 32/25 + 6561/5120 + 125/96 + 320/243 + 675/512 + 4/3 + 8192/6075 + 27/20 + 512/375 + 5625/4096 + 25/18 + 1024/729 + 45/32 + 64/45 + 729/512 + 36/25 + 3200/2187 + 375/256 + 40/27 + 6075/4096 + 3/2 + 1024/675 + 243/160 + 125/81 + 10240/6561 + 25/16 + 128/81 + 405/256 + 8/5 + 16384/10125 + 81/50 + 400/243 + 3375/2048 + 5/3 + 2048/1215 + 27/16 + 128/75 + 2187/1280 + 125/72 + 1280/729 + 225/128 + 16/9 + 3645/2048 + 9/5 + 2048/1125 + 1875/1024 + 50/27 + 4096/2187 + 15/8 + 256/135 + 243/128 + 48/25 + 12800/6561 + 125/64 + 160/81 + 2025/1024 + 2/1 diff --git a/scales/pipedum_8a.scl b/scales/pipedum_8a.scl new file mode 100644 index 0000000..ec47a07 --- /dev/null +++ b/scales/pipedum_8a.scl @@ -0,0 +1,13 @@ +! pipedum_8a.scl +! +16/15 and 250/243, or 250/243 and 648/625 + 8 +! + 10/9 + 6/5 + 5/4 + 27/20 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/pipedum_9.scl b/scales/pipedum_9.scl new file mode 100644 index 0000000..4de030d --- /dev/null +++ b/scales/pipedum_9.scl @@ -0,0 +1,14 @@ +! pipedum_9.scl +! +225/224, 49/48, 36/35 are homophonic intervals + 9 +! + 15/14 + 7/6 + 5/4 + 4/3 + 3/2 + 45/28 + 12/7 + 15/8 + 2/1 diff --git a/scales/pipedum_99.scl b/scales/pipedum_99.scl new file mode 100644 index 0000000..80d5c97 --- /dev/null +++ b/scales/pipedum_99.scl @@ -0,0 +1,104 @@ +! pipedum_99.scl +! +2401/2400, 3136/3125, 4375/4374, Gene Ward Smith, 2002 + 99 +! + 126/125 + 875/864 + 49/48 + 36/35 + 28/27 + 25/24 + 21/20 + 1323/1250 + 16/15 + 15/14 + 27/25 + 49/45 + 35/32 + 54/49 + 10/9 + 28/25 + 9/8 + 245/216 + 8/7 + 144/125 + 125/108 + 7/6 + 147/125 + 405/343 + 25/21 + 6/5 + 756/625 + 175/144 + 49/40 + 216/175 + 56/45 + 5/4 + 63/50 + 343/270 + 125/98 + 9/7 + 35/27 + 98/75 + 21/16 + 250/189 + 4/3 + 168/125 + 27/20 + 49/36 + 48/35 + 135/98 + 25/18 + 7/5 + 882/625 + 1225/864 + 10/7 + 36/25 + 196/135 + 35/24 + 147/100 + 40/27 + 125/84 + 3/2 + 189/125 + 343/225 + 75/49 + 54/35 + 14/9 + 196/125 + 63/40 + 100/63 + 8/5 + 45/28 + 175/108 + 49/30 + 288/175 + 625/378 + 5/3 + 42/25 + 5292/3125 + 245/144 + 12/7 + 216/125 + 125/72 + 7/4 + 441/250 + 16/9 + 25/14 + 9/5 + 49/27 + 686/375 + 90/49 + 50/27 + 28/15 + 15/8 + 189/100 + 40/21 + 48/25 + 27/14 + 35/18 + 49/25 + 1728/875 + 125/63 + 2/1 diff --git a/scales/pipedum_9a.scl b/scales/pipedum_9a.scl new file mode 100644 index 0000000..04f500b --- /dev/null +++ b/scales/pipedum_9a.scl @@ -0,0 +1,14 @@ +! pipedum_9a.scl +! +4375/4374, 2401/2400, 21/20 + 9 +! + 175/162 + 7/6 + 1225/972 + 49/36 + 8575/5832 + 343/216 + 60025/34992 + 2401/1296 + 2/1 diff --git a/scales/pipedum_9b.scl b/scales/pipedum_9b.scl new file mode 100644 index 0000000..9fc8779 --- /dev/null +++ b/scales/pipedum_9b.scl @@ -0,0 +1,14 @@ +! pipedum_9b.scl +! +128/125, 2109375/2097152 + 9 +! + 16/15 + 75/64 + 5/4 + 512/375 + 375/256 + 8/5 + 128/75 + 15/8 + 2/1 diff --git a/scales/pipedum_9c.scl b/scales/pipedum_9c.scl new file mode 100644 index 0000000..339af8a --- /dev/null +++ b/scales/pipedum_9c.scl @@ -0,0 +1,14 @@ +! pipedum_9c.scl +! +49/48, 21/20, 99/98, 121/120, Gene Ward Smith, 2002 + 9 +! + 12/11 + 7/6 + 14/11 + 4/3 + 3/2 + 11/7 + 12/7 + 11/6 + 2/1 diff --git a/scales/pipedum_9d.scl b/scales/pipedum_9d.scl new file mode 100644 index 0000000..c723a9c --- /dev/null +++ b/scales/pipedum_9d.scl @@ -0,0 +1,14 @@ +! pipedum_9d.scl +! +128/125, 36/35, 99/98, 121/120, Gene Ward Smith, 2002 + 9 +! + 35/33 + 33/28 + 5/4 + 175/132 + 264/175 + 8/5 + 56/33 + 66/35 + 2/1 diff --git a/scales/pipedum_9e.scl b/scales/pipedum_9e.scl new file mode 100644 index 0000000..32cb7ae --- /dev/null +++ b/scales/pipedum_9e.scl @@ -0,0 +1,14 @@ +! pipedum_9e.scl +! +21/20, 27/25, 128/125 + 9 +! + 25/24 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 48/25 + 2/1 diff --git a/scales/polansky_owt1.scl b/scales/polansky_owt1.scl new file mode 100644 index 0000000..5bfa62d --- /dev/null +++ b/scales/polansky_owt1.scl @@ -0,0 +1,17 @@ +! polansky_owt1.scl +! +Optimal WT 1, from A Math. Model for Optimal Tuning Systems, 2008 + 12 +! + 101.95500 + 203.75000 + 297.15008 + 396.25000 + 4/3 + 600.00000 + 3/2 + 803.75000 + 897.15008 + 996.25000 + 1098.04500 + 2/1 diff --git a/scales/polansky_owt2.scl b/scales/polansky_owt2.scl new file mode 100644 index 0000000..a33a8ef --- /dev/null +++ b/scales/polansky_owt2.scl @@ -0,0 +1,17 @@ +! polansky_owt2.scl +! +Optimal WT 2, from A Math. Model for Optimal Tuning Systems, 2008 + 12 +! + 93.10000 + 203.10000 + 296.30000 + 397.40000 + 498.50000 + 591.70000 + 701.60000 + 794.80000 + 903.40000 + 997.40000 + 1091.40000 + 2/1 diff --git a/scales/polansky_ps.scl b/scales/polansky_ps.scl new file mode 100644 index 0000000..aead73c --- /dev/null +++ b/scales/polansky_ps.scl @@ -0,0 +1,55 @@ +! polansky_ps.scl +! +Three interlocking harmonic series on 1:5:3 by Larry Polansky in Psaltery + 50 +! + 2/1 + 3/1 + 4/1 + 5/1 + 6/1 + 7/1 + 8/1 + 9/1 + 10/1 + 11/1 + 12/1 + 13/1 + 14/1 + 15/1 + 16/1 + 17/1 + 5/4 + 5/2 + 15/4 + 5/1 + 25/4 + 15/2 + 35/4 + 10/1 + 45/4 + 25/2 + 55/4 + 15/1 + 65/4 + 35/2 + 75/4 + 20/1 + 85/4 + 3/2 + 3/1 + 9/2 + 6/1 + 15/2 + 9/1 + 21/2 + 12/1 + 27/2 + 15/1 + 33/2 + 18/1 + 39/2 + 21/1 + 45/2 + 24/1 + 51/2 diff --git a/scales/ponsford1.scl b/scales/ponsford1.scl new file mode 100644 index 0000000..61e0125 --- /dev/null +++ b/scales/ponsford1.scl @@ -0,0 +1,17 @@ +! ponsford1.scl +! +David Ponsford Bach temperament I (2005) + 12 +! + 100.00000 + 198.04500 + 300.00000 + 394.13500 + 500.00000 + 598.04500 + 700.00000 + 800.00000 + 896.09000 + 1000.00000 + 1096.09000 + 2/1 diff --git a/scales/ponsford2.scl b/scales/ponsford2.scl new file mode 100644 index 0000000..33b2131 --- /dev/null +++ b/scales/ponsford2.scl @@ -0,0 +1,17 @@ +! ponsford2.scl +! +David Ponsford Bach temperament II (2005) + 12 +! + 109.77500 + 9/8 + 305.86500 + 403.91000 + 501.95500 + 607.82000 + 703.91000 + 807.82000 + 903.91000 + 1003.91000 + 1105.86500 + 2/1 diff --git a/scales/poole-rod.scl b/scales/poole-rod.scl new file mode 100644 index 0000000..df2af2b --- /dev/null +++ b/scales/poole-rod.scl @@ -0,0 +1,23 @@ +! poole-rod.scl +! +Rod Poole's 13-limit scale +! http://anaphoriasouth.blogspot.com/2009/10/scale-develops-rod-pooles-tuning.html + 17 +! + 33/32 + 13/12 + 9/8 + 7/6 + 11/9 + 14/11 + 4/3 + 11/8 + 13/9 + 3/2 + 14/9 + 44/27 + 27/16 + 7/4 + 11/6 + 21/11 + 2/1 diff --git a/scales/poole.scl b/scales/poole.scl new file mode 100644 index 0000000..8c6caca --- /dev/null +++ b/scales/poole.scl @@ -0,0 +1,12 @@ +! poole.scl +! +Henry Ward Poole's double diatonic or dichordal scale, also Ewan Macpherson's experimentally-verified great highland bagpipe tuning + 7 +! + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/poole_100.scl b/scales/poole_100.scl new file mode 100644 index 0000000..4ea6656 --- /dev/null +++ b/scales/poole_100.scl @@ -0,0 +1,104 @@ +! poole_100.scl +Henry Ward Poole's 100 note 7-limit scale, Helmholtz page 474 +100 +! +32805/32768 +2240/2187 +28/27 +8505/8192 +20480/19683 +25/24 +137781/131072 +256/243 +135/128 +2187/2048 +7168/6561 +35/32 +800/729 +567/512 +65536/59049 +10/9 +18225/16384 +9/8 +295245/262144 +280/243 +7/6 +76545/65536 +2560/2187 +75/64 +32/27 +1215/1024 +19683/16384 +896/729 +315/256 +100/81 +5103/4096 +8192/6561 +5/4 +164025/131072 +81/64 +35/27 +21/16 +688905/524288 +320/243 +675/512 +4/3 +10935/8192 +177147/131072 +8960/6561 +112/81 +2835/2048 +81920/59049 +25/18 +45927/32768 +1024/729 +45/32 +729/512 +28672/19683 +35/24 +3200/2187 +189/128 +40/27 +6075/4096 +3/2 +98415/65536 +1120/729 +14/9 +25515/16384 +10240/6561 +25/16 +413343/262144 +128/81 +405/256 +6561/4096 +3584/2187 +105/64 +400/243 +1701/1024 +32768/19683 +5/3 +54675/32768 +27/16 +140/81 +7/4 +229635/131072 +1280/729 +225/128 +16/9 +3645/2048 +59049/32768 +35840/19683 +448/243 +945/512 +50/27 +15309/8192 +4096/2187 +15/8 +492075/262144 +243/128 +35/18 +12800/6561 +63/32 +160/81 +2025/1024 +2/1 diff --git a/scales/porcupine.scl b/scales/porcupine.scl new file mode 100644 index 0000000..356215c --- /dev/null +++ b/scales/porcupine.scl @@ -0,0 +1,42 @@ +! porcupine.scl +! +Porcupine temperament, g=162.996, 7-limit + 37 +! + 44.94039 + 89.88078 + 103.96821 + 148.90860 + 162.99603 + 207.93642 + 222.02384 + 266.96423 + 311.90462 + 325.99205 + 370.93244 + 385.01987 + 429.96026 + 474.90065 + 488.98808 + 533.92847 + 548.01590 + 592.95629 + 637.89668 + 651.98410 + 696.92449 + 711.01192 + 755.95231 + 800.89270 + 814.98013 + 859.92052 + 874.00795 + 918.94834 + 963.88873 + 977.97616 + 1022.91655 + 1037.00397 + 1081.94436 + 1126.88475 + 1140.97218 + 1185.91257 + 2/1 diff --git a/scales/porcupine15cfip.scl b/scales/porcupine15cfip.scl new file mode 100644 index 0000000..a545b05 --- /dev/null +++ b/scales/porcupine15cfip.scl @@ -0,0 +1,20 @@ +! porcupine15cfip.scl +! +A circulating Porcupine[15] lesfip scale, 11-limit target, 15 cent tolerance + 15 +! +61.59759 +161.50757 +226.12741 +319.17600 +388.13838 +477.94924 +549.56710 +621.18496 +710.99581 +779.95820 +873.00679 +937.62663 +1037.53661 +1099.13420 +2/1 diff --git a/scales/porcupine15fip.scl b/scales/porcupine15fip.scl new file mode 100644 index 0000000..4647e1b --- /dev/null +++ b/scales/porcupine15fip.scl @@ -0,0 +1,20 @@ +! porcupine15fip.scl +! +Lesfip version of Porcupine[15], 11-limit diamond target, 15 cent tolerance + 15 +! + 100.98886 + 162.45590 + 262.89824 + 325.04535 + 387.19246 + 487.63480 + 549.10184 + 650.09070 + 711.24951 + 812.69999 + 875.28995 + 974.80075 + 1037.39071 + 1138.84119 + 2/1 diff --git a/scales/porcupine15lfip.scl b/scales/porcupine15lfip.scl new file mode 100644 index 0000000..e17937e --- /dev/null +++ b/scales/porcupine15lfip.scl @@ -0,0 +1,20 @@ +! porcupine15lfip.scl +! +Porcupine-related lesfip scale + 15 +! + 90.75957 + 162.69064 + 256.58844 + 318.16312 + 423.99014 + 479.55828 + 585.38530 + 646.95998 + 740.85778 + 812.78885 + 903.54842 + 971.39229 + 1051.77421 + 1132.15613 + 2/1 diff --git a/scales/portbag1.scl b/scales/portbag1.scl new file mode 100644 index 0000000..aeea59f --- /dev/null +++ b/scales/portbag1.scl @@ -0,0 +1,12 @@ +! portbag1.scl +! +Portugese bagpipe tuning + 7 +! + 14/13 + 81/68 + 32/25 + 36/25 + 128/81 + 7/4 + 2/1 diff --git a/scales/portbag2.scl b/scales/portbag2.scl new file mode 100644 index 0000000..e5954fd --- /dev/null +++ b/scales/portbag2.scl @@ -0,0 +1,15 @@ +! portbag2.scl +! +Portugese bagpipe tuning 2 + 10 +! + 21/20 + 14/13 + 32/27 + 17/14 + 21/16 + 64/45 + 3/2 + 25/16 + 59/32 + 2/1 diff --git a/scales/portent26.scl b/scales/portent26.scl new file mode 100644 index 0000000..aae1a4d --- /dev/null +++ b/scales/portent26.scl @@ -0,0 +1,61 @@ +! portent26.scl +Portent[26] hobbit minimax tuning +26 +! +32.08279 +82.50211 +151.08133 +201.50065 +233.58344 +265.66623 +316.08556 +384.66477 +416.74756 +467.16688 +499.24967 +549.66900 +618.24821 +650.33100 +700.75033 +732.83312 +783.25244 +815.33523 +883.91444 +934.33377 +966.41656 +998.49935 +1048.91867 +1117.49789 +1167.91721 +2/1 +! Commas 1029/1024, 385/384, 441/440 +! ! preportent26.scl +! Portent[26] transversal +! 26 +! ! +! 49/48 +! 21/20 +! 12/11 +! 9/8 +! 8/7 +! 7/6 +! 6/5 +! 5/4 +! 14/11 +! 21/16 +! 4/3 +! 11/8 +! 10/7 +! 16/11 +! 3/2 +! 32/21 +! 11/7 +! 8/5 +! 5/3 +! 12/7 +! 7/4 +! 16/9 +! 11/6 +! 21/11 +! 55/28 +! 2/1 diff --git a/scales/portsmouth.scl b/scales/portsmouth.scl new file mode 100644 index 0000000..feb8a84 --- /dev/null +++ b/scales/portsmouth.scl @@ -0,0 +1,16 @@ +! portsmouth.scl +Portsmouth, a 2.3.7.11 subgroup scale +12 +! +22/21 +8/7 +7/6 +9/7 +4/3 +11/8 +3/2 +11/7 +12/7 +7/4 +11/6 +2/1 diff --git a/scales/pps7.scl b/scales/pps7.scl new file mode 100644 index 0000000..178771e --- /dev/null +++ b/scales/pps7.scl @@ -0,0 +1,12 @@ +! pps7.scl +! +Merged transpositions of superparticular 8/7 7/6 6/5 5/4 4/3 3/2 2/1 + 7 +! + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 3/2 + 2/1 diff --git a/scales/precata19.scl b/scales/precata19.scl new file mode 100644 index 0000000..b91fe0e --- /dev/null +++ b/scales/precata19.scl @@ -0,0 +1,23 @@ +! precata19.scl +Cata[19] transversal +19 +! +25/24 +13/12 +10/9 +52/45 +6/5 +5/4 +13/10 +4/3 +18/13 +13/9 +3/2 +20/13 +8/5 +5/3 +26/15 +9/5 +24/13 +25/13 +2/1 diff --git a/scales/prelleur.scl b/scales/prelleur.scl new file mode 100644 index 0000000..486b677 --- /dev/null +++ b/scales/prelleur.scl @@ -0,0 +1,17 @@ +! prelleur.scl +! +Peter Prelleur's well temperament (1731) + 12 +! + 95.23981 + 197.28010 + 298.84336 + 395.27547 + 501.02019 + 594.84986 + 697.98011 + 796.88836 + 895.68875 + 1000.05579 + 1094.06772 + 2/1 diff --git a/scales/preston.scl b/scales/preston.scl new file mode 100644 index 0000000..584b9ed --- /dev/null +++ b/scales/preston.scl @@ -0,0 +1,17 @@ +! preston.scl +! +Preston's equal beating temperament (1785) + 12 +! + 94.16180 + 198.75561 + 300.78080 + 396.22975 + 500.35948 + 594.39883 + 698.86421 + 793.18976 + 897.95531 + 1000.13831 + 1095.72669 + 2/1 diff --git a/scales/preston2.scl b/scales/preston2.scl new file mode 100644 index 0000000..90e3913 --- /dev/null +++ b/scales/preston2.scl @@ -0,0 +1,17 @@ +! preston2.scl +! +Preston's theoretically correct well temperament + 12 +! + 94.04104 + 198.29744 + 302.55384 + 396.59488 + 500.85128 + 594.89232 + 699.14872 + 793.18976 + 897.44616 + 1001.70256 + 1095.74360 + 2/1 diff --git a/scales/prime_10.scl b/scales/prime_10.scl new file mode 100644 index 0000000..03af2b2 --- /dev/null +++ b/scales/prime_10.scl @@ -0,0 +1,15 @@ +! prime_10.scl +! +First 10 prime numbers reduced by 2/1 + 10 +! + 17/16 + 19/16 + 5/4 + 11/8 + 23/16 + 3/2 + 13/8 + 7/4 + 29/16 + 2/1 diff --git a/scales/prime_5.scl b/scales/prime_5.scl new file mode 100644 index 0000000..6ee19b4 --- /dev/null +++ b/scales/prime_5.scl @@ -0,0 +1,10 @@ +! prime_5.scl +! +What Lou Harrison calls "the Prime Pentatonic", a widely used scale + 5 +! + 9/8 + 5/4 + 3/2 + 5/3 + 2/1 diff --git a/scales/prinz.scl b/scales/prinz.scl new file mode 100644 index 0000000..a1337b1 --- /dev/null +++ b/scales/prinz.scl @@ -0,0 +1,17 @@ +! prinz.scl +! +Prinz well-tempermament (1808) + 12 +! + 256/243 + 193.15686 + 32/27 + 5/4 + 4/3 + 1024/729 + 696.57843 + 128/81 + 889.73529 + 16/9 + 15/8 + 2/1 diff --git a/scales/prinz2.scl b/scales/prinz2.scl new file mode 100644 index 0000000..3f1a2d7 --- /dev/null +++ b/scales/prinz2.scl @@ -0,0 +1,17 @@ +! prinz2.scl +! +Prinz equal beating temperament (1808) + 12 +! + 256/243 + 189.04953 + 32/27 + 5/4 + 4/3 + 1024/729 + 693.05403 + 128/81 + 887.02010 + 16/9 + 15/8 + 2/1 diff --git a/scales/prisun.scl b/scales/prisun.scl new file mode 100644 index 0000000..2f9a5cb --- /dev/null +++ b/scales/prisun.scl @@ -0,0 +1,17 @@ +! prisun.scl +! +Unimarv tempered pris/cv3, 166-tET + 12 +! +115.66265 +202.40964 +267.46988 +383.13253 +498.79518 +585.54217 +701.20482 +816.86747 +881.92771 +968.67470 +1084.33735 +2/1 diff --git a/scales/prod13.scl b/scales/prod13.scl new file mode 100644 index 0000000..7f0c6e5 --- /dev/null +++ b/scales/prod13.scl @@ -0,0 +1,32 @@ +! prod13.scl +! +13-limit binary products [1 3 5 7 9 11 13] + 27 +! + 65/64 + 33/32 + 35/32 + 143/128 + 9/8 + 77/64 + 39/32 + 5/4 + 81/64 + 21/16 + 169/128 + 11/8 + 45/32 + 91/64 + 3/2 + 49/32 + 99/64 + 25/16 + 13/8 + 27/16 + 55/32 + 7/4 + 117/64 + 15/8 + 121/64 + 63/32 + 2/1 diff --git a/scales/prod7d.scl b/scales/prod7d.scl new file mode 100644 index 0000000..9eff038 --- /dev/null +++ b/scales/prod7d.scl @@ -0,0 +1,44 @@ +! prod7d.scl +! +Double Cubic Corner 7-limit. Chalmers '96 + 39 +! + 64/63 + 128/125 + 256/245 + 16/15 + 35/32 + 9/8 + 8/7 + 147/128 + 75/64 + 32/27 + 128/105 + 5/4 + 32/25 + 64/49 + 21/16 + 4/3 + 343/256 + 175/128 + 45/32 + 64/45 + 256/175 + 512/343 + 3/2 + 32/21 + 49/32 + 25/16 + 8/5 + 105/64 + 27/16 + 128/75 + 256/147 + 7/4 + 16/9 + 64/35 + 15/8 + 245/128 + 125/64 + 63/32 + 2/1 diff --git a/scales/prod7s.scl b/scales/prod7s.scl new file mode 100644 index 0000000..9da39a0 --- /dev/null +++ b/scales/prod7s.scl @@ -0,0 +1,25 @@ +! prod7s.scl +! +Single Cubic Corner 7-limit = superstellated three out of 1 3 5 7 tetrany + 20 +! + 35/32 + 9/8 + 147/128 + 75/64 + 5/4 + 21/16 + 343/256 + 175/128 + 45/32 + 3/2 + 49/32 + 25/16 + 105/64 + 27/16 + 7/4 + 15/8 + 245/128 + 125/64 + 63/32 + 2/1 diff --git a/scales/prodigy11.scl b/scales/prodigy11.scl new file mode 100644 index 0000000..a1b4cbe --- /dev/null +++ b/scales/prodigy11.scl @@ -0,0 +1,32 @@ +! prodigy11.scl +Prodigy[11] (225/224, 441/400) hobbit in 72-tET +11 +! -8, -7, -6, -2, -1, 0, 1, 2, 6, 7, 8 secors in miracle +! +116.66667 +233.33333 +266.66667 +383.33333 +500.00000 +700.00000 +816.66667 +933.33333 +966.66667 +1083.33333 +2/1 +! +!! prodigy11.scl +! Prodigy[11] 5-limit transversal +! 11 +!! +! 16/15 +! 256/225 +! 75/64 +! 5/4 +! 4/3 +! 3/2 +! 8/5 +! 128/75 +! 225/128 +! 15/8 +! 2/1 \ No newline at end of file diff --git a/scales/prodigy12.scl b/scales/prodigy12.scl new file mode 100644 index 0000000..aa63805 --- /dev/null +++ b/scales/prodigy12.scl @@ -0,0 +1,17 @@ +! prodigy12.scl +! +Prodigy[12] (225/224, 441/440) hobbit, 72-tET tuning. As a miracle scale, [-8, -7, -6, -2, -1, 0, 1, 2, 5, 6, 7, 8] + 12 +! + 116.66667 + 233.33333 + 266.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 816.66667 + 933.33333 + 966.66667 + 1083.33333 + 2/1 diff --git a/scales/prodigy29.scl b/scales/prodigy29.scl new file mode 100644 index 0000000..20e94d9 --- /dev/null +++ b/scales/prodigy29.scl @@ -0,0 +1,34 @@ +! prodigy29.scl +! +Prodigy[29] (225/224, 441/440) hobbit irregular tuning + 29 +! + 33.64857 + 83.71417 + 116.60518 + 150.45004 + 200.56120 + 233.54687 + 317.05141 + 350.24665 + 383.49044 + 433.73468 + 466.77798 + 500.29835 + 550.27449 + 583.60636 + 616.93823 + 666.91437 + 700.43474 + 733.47804 + 783.72228 + 816.96607 + 850.16131 + 933.66586 + 966.65152 + 1016.76269 + 1050.60754 + 1083.49856 + 1133.56415 + 1167.21272 + 2/1 diff --git a/scales/prodq13.scl b/scales/prodq13.scl new file mode 100644 index 0000000..fee431c --- /dev/null +++ b/scales/prodq13.scl @@ -0,0 +1,45 @@ +! prodq13.scl +! +13-limit Binary products"ients. Chalmers '96 + 40 +! + 65/64 + 33/32 + 128/121 + 16/15 + 35/32 + 143/128 + 9/8 + 8/7 + 64/55 + 77/64 + 39/32 + 16/13 + 5/4 + 32/25 + 64/49 + 21/16 + 169/128 + 4/3 + 11/8 + 128/91 + 91/64 + 16/11 + 3/2 + 256/169 + 49/32 + 25/16 + 8/5 + 13/8 + 64/39 + 128/77 + 55/32 + 7/4 + 16/9 + 256/143 + 64/35 + 15/8 + 121/64 + 64/33 + 128/65 + 2/1 diff --git a/scales/prog_ennea.scl b/scales/prog_ennea.scl new file mode 100644 index 0000000..1f2667b --- /dev/null +++ b/scales/prog_ennea.scl @@ -0,0 +1,14 @@ +! prog_ennea.scl +! +Progressive Enneatonic, 50+100+150+200 cents in each half (500 cents) + 9 +! + 50.00000 + 150.00000 + 300.00000 + 500.00000 + 700.00000 + 750.00000 + 850.00000 + 1000.00000 + 2/1 diff --git a/scales/prog_ennea1.scl b/scales/prog_ennea1.scl new file mode 100644 index 0000000..8e4b1b1 --- /dev/null +++ b/scales/prog_ennea1.scl @@ -0,0 +1,14 @@ +! PROG_ENNEA1.scl +! +Progressive Enneatonic, appr. 50+100+150+200 cents in each half (500 cents) + 9 +! + 36/35 + 12/11 + 19/16 + 4/3 + 3/2 + 17/11 + 18/11 + 16/9 + 2/1 diff --git a/scales/prog_ennea2.scl b/scales/prog_ennea2.scl new file mode 100644 index 0000000..8a40fc5 --- /dev/null +++ b/scales/prog_ennea2.scl @@ -0,0 +1,14 @@ +! prog_ennea2.scl +! +Progressive Enneatonic, appr. 50+100+200+150 cents in each half (500 cents) + 9 +! + 34/33 + 12/11 + 27/22 + 4/3 + 3/2 + 17/11 + 18/11 + 81/44 + 2/1 diff --git a/scales/prog_ennea3.scl b/scales/prog_ennea3.scl new file mode 100644 index 0000000..ec0433b --- /dev/null +++ b/scales/prog_ennea3.scl @@ -0,0 +1,14 @@ +! prog_ennea3.scl +! +Progressive Enneatonic, appr. 50+100+150+200 cents in each half (500 cents) + 9 +! + 34/33 + 12/11 + 32/27 + 4/3 + 3/2 + 17/11 + 18/11 + 16/9 + 2/1 diff --git a/scales/prooijen1.scl b/scales/prooijen1.scl new file mode 100644 index 0000000..8ba7253 --- /dev/null +++ b/scales/prooijen1.scl @@ -0,0 +1,12 @@ +! prooijen1.scl +! +Kees van Prooijen, major mode of Bohlen-Pierce + 7 +! + 35/27 + 7/5 + 5/3 + 9/5 + 7/3 + 25/9 + 3/1 diff --git a/scales/prooijen2.scl b/scales/prooijen2.scl new file mode 100644 index 0000000..8386e58 --- /dev/null +++ b/scales/prooijen2.scl @@ -0,0 +1,12 @@ +! prooijen2.scl +! +Kees van Prooijen, minor mode of Bohlen-Pierce + 7 +! + 25/21 + 9/7 + 5/3 + 9/5 + 15/7 + 25/9 + 3/1 diff --git a/scales/ps-dorian.scl b/scales/ps-dorian.scl new file mode 100644 index 0000000..53e6d4c --- /dev/null +++ b/scales/ps-dorian.scl @@ -0,0 +1,12 @@ +! ps-dorian.scl +! +Complex 4 of p. 115 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 4/3 + 3/2 + 15/8 + 27/14 + 2/1 diff --git a/scales/ps-enh.scl b/scales/ps-enh.scl new file mode 100644 index 0000000..4914463 --- /dev/null +++ b/scales/ps-enh.scl @@ -0,0 +1,12 @@ +! ps-enh.scl +! +Dorian mode of an Enharmonic genus found in Ptolemy's Harmonics + 7 +! + 56/55 + 16/15 + 4/3 + 3/2 + 84/55 + 8/5 + 2/1 diff --git a/scales/ps-hypod.scl b/scales/ps-hypod.scl new file mode 100644 index 0000000..5edcb04 --- /dev/null +++ b/scales/ps-hypod.scl @@ -0,0 +1,12 @@ +! ps-hypod.scl +! +Complex 7 of p. 115 based on Archytas's Enharmonic + 7 +! + 9/8 + 45/32 + 81/56 + 3/2 + 14/9 + 8/5 + 2/1 diff --git a/scales/ps-hypod2.scl b/scales/ps-hypod2.scl new file mode 100644 index 0000000..942d142 --- /dev/null +++ b/scales/ps-hypod2.scl @@ -0,0 +1,12 @@ +! PS-HYPOD2.scl +! +Complex 8 of p. 115 based on Archytas's Enharmonic + 7 +! + 9/8 + 7/6 + 6/5 + 3/2 + 15/8 + 27/14 + 2/1 diff --git a/scales/ps-mixol.scl b/scales/ps-mixol.scl new file mode 100644 index 0000000..9974e66 --- /dev/null +++ b/scales/ps-mixol.scl @@ -0,0 +1,12 @@ +! ps-mixol.scl +! +Complex 3 of p. 115 based on Archytas's Enharmonic + 7 +! + 28/27 + 16/15 + 4/3 + 5/3 + 12/7 + 16/9 + 2/1 diff --git a/scales/ptolemy.scl b/scales/ptolemy.scl new file mode 100644 index 0000000..ede2909 --- /dev/null +++ b/scales/ptolemy.scl @@ -0,0 +1,12 @@ +! ptolemy.scl +! +Ptolemy's Intense Diatonic Syntonon, also Zarlino's scale + 7 +! + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/ptolemy_chrom.scl b/scales/ptolemy_chrom.scl new file mode 100644 index 0000000..0f0ea33 --- /dev/null +++ b/scales/ptolemy_chrom.scl @@ -0,0 +1,12 @@ +! ptolemy_chrom.scl +! +Ptolemy Soft Chromatic + 7 +! + 28/27 + 10/9 + 4/3 + 3/2 + 14/9 + 5/3 + 2/1 diff --git a/scales/ptolemy_ddiat.scl b/scales/ptolemy_ddiat.scl new file mode 100644 index 0000000..389dec0 --- /dev/null +++ b/scales/ptolemy_ddiat.scl @@ -0,0 +1,12 @@ +! ptolemy_ddiat.scl +! +Lyra tuning, Dorian mode, comb. of diatonon toniaion & diatonon ditoniaion + 7 +! + 28/27 + 32/27 + 4/3 + 3/2 + 128/81 + 16/9 + 2/1 diff --git a/scales/ptolemy_diat.scl b/scales/ptolemy_diat.scl new file mode 100644 index 0000000..bbae277 --- /dev/null +++ b/scales/ptolemy_diat.scl @@ -0,0 +1,12 @@ +! PTOLEMY_DIAT.scl +! +Ptolemy's Diatonon Ditoniaion & Archytas' Diatonic, also Lyra tuning + 7 +! + 10/9 + 6/5 + 4/3 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/ptolemy_diat2.scl b/scales/ptolemy_diat2.scl new file mode 100644 index 0000000..df14566 --- /dev/null +++ b/scales/ptolemy_diat2.scl @@ -0,0 +1,12 @@ +! ptolemy_diat2.scl +! +Dorian mode of a permutation of Ptolemy's Tonic Diatonic + 7 +! + 28/27 + 7/6 + 4/3 + 3/2 + 14/9 + 7/4 + 2/1 diff --git a/scales/ptolemy_diat3.scl b/scales/ptolemy_diat3.scl new file mode 100644 index 0000000..0de5446 --- /dev/null +++ b/scales/ptolemy_diat3.scl @@ -0,0 +1,12 @@ +! PTOLEMY_DIAT3.scl +! +Dorian mode of the remaining permutation of Ptolemy's Intense Diatonic + 7 +! + 9/8 + 6/5 + 4/3 + 3/2 + 27/16 + 9/5 + 2/1 diff --git a/scales/ptolemy_diat4.scl b/scales/ptolemy_diat4.scl new file mode 100644 index 0000000..83b9f43 --- /dev/null +++ b/scales/ptolemy_diat4.scl @@ -0,0 +1,12 @@ +! PTOLEMY_DIAT4.scl +! +permuted Ptolemy's diatonic + 7 +! + 8/7 + 32/27 + 4/3 + 3/2 + 12/7 + 16/9 + 2/1 diff --git a/scales/ptolemy_diat5.scl b/scales/ptolemy_diat5.scl new file mode 100644 index 0000000..60591cd --- /dev/null +++ b/scales/ptolemy_diat5.scl @@ -0,0 +1,12 @@ +! PTOLEMY_DIAT5.scl +! +Sterea lyra, Dorian, comb. of 2 Tonic Diatonic 4chords, also Archytas' diatonic + 7 +! + 28/27 + 32/27 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/ptolemy_diff.scl b/scales/ptolemy_diff.scl new file mode 100644 index 0000000..d52348c --- /dev/null +++ b/scales/ptolemy_diff.scl @@ -0,0 +1,12 @@ +! ptolemy_diff.scl +! +Difference tones of Intense Diatonic reduced by 2/1 + 7 +! + 9/8 + 5/4 + 21/16 + 3/2 + 13/8 + 15/8 + 2/1 diff --git a/scales/ptolemy_enh.scl b/scales/ptolemy_enh.scl new file mode 100644 index 0000000..2e6ecf7 --- /dev/null +++ b/scales/ptolemy_enh.scl @@ -0,0 +1,12 @@ +! PTOLEMY_enh.scl +! +Dorian mode of Ptolemy's Enharmonic + 7 +! + 46/45 + 16/15 + 4/3 + 3/2 + 23/15 + 8/5 + 2/1 diff --git a/scales/ptolemy_exp.scl b/scales/ptolemy_exp.scl new file mode 100644 index 0000000..2411d47 --- /dev/null +++ b/scales/ptolemy_exp.scl @@ -0,0 +1,29 @@ +! ptolemy_exp.scl +! +Intense Diatonic expanded: all interval combinations + 24 +! + 25/24 + 135/128 + 1125/1024 + 10/9 + 9/8 + 75/64 + 5/4 + 125/96 + 675/512 + 4/3 + 25/18 + 45/32 + 375/256 + 3/2 + 25/16 + 405/256 + 3375/2048 + 5/3 + 27/16 + 225/128 + 15/8 + 125/64 + 2025/1024 + 2/1 diff --git a/scales/ptolemy_hom.scl b/scales/ptolemy_hom.scl new file mode 100644 index 0000000..cbbe7d1 --- /dev/null +++ b/scales/ptolemy_hom.scl @@ -0,0 +1,12 @@ +! PTOLEMY_hom.scl +! +Dorian mode of Ptolemy's Equable Diatonic or Diatonon Homalon + 7 +! + 12/11 + 6/5 + 4/3 + 3/2 + 18/11 + 9/5 + 2/1 diff --git a/scales/ptolemy_hominv.scl b/scales/ptolemy_hominv.scl new file mode 100644 index 0000000..e1fc319 --- /dev/null +++ b/scales/ptolemy_hominv.scl @@ -0,0 +1,12 @@ +! ptolemy_hominv.scl +! +Inverse of Ptolemy's Equable Diatonic, 11-limit superparticular + 7 +! + 10/9 + 11/9 + 4/3 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/ptolemy_hominv2.scl b/scales/ptolemy_hominv2.scl new file mode 100644 index 0000000..fa4433f --- /dev/null +++ b/scales/ptolemy_hominv2.scl @@ -0,0 +1,19 @@ +! ptolemy_hominv2.scl +! +Densified version of ptolemy_hominv.scl + 14 +! + 19/18 + 10/9 + 7/6 + 11/9 + 23/18 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 23/12 + 2/1 diff --git a/scales/ptolemy_iast.scl b/scales/ptolemy_iast.scl new file mode 100644 index 0000000..44fa72e --- /dev/null +++ b/scales/ptolemy_iast.scl @@ -0,0 +1,12 @@ +! ptolemy_iast.scl +! +Ptolemy's Iastia or Lydia tuning, mixture of Tonic Diatonic & Intense Diatonic + 7 +! + 28/27 + 32/27 + 4/3 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/ptolemy_iastaiol.scl b/scales/ptolemy_iastaiol.scl new file mode 100644 index 0000000..24fa06d --- /dev/null +++ b/scales/ptolemy_iastaiol.scl @@ -0,0 +1,12 @@ +! PTOLEMY_IASTaiol.scl +! +Ptolemy's kithara tuning, mixture of Tonic Diatonic and Ditone Diatonic + 7 +! + 28/27 + 32/27 + 4/3 + 3/2 + 27/16 + 16/9 + 2/1 diff --git a/scales/ptolemy_ichrom.scl b/scales/ptolemy_ichrom.scl new file mode 100644 index 0000000..32a9017 --- /dev/null +++ b/scales/ptolemy_ichrom.scl @@ -0,0 +1,12 @@ +! ptolemy_ichrom.scl +! +Dorian mode of Ptolemy's Intense Chromatic + 7 +! + 22/21 + 8/7 + 4/3 + 3/2 + 11/7 + 12/7 + 2/1 diff --git a/scales/ptolemy_idiat.scl b/scales/ptolemy_idiat.scl new file mode 100644 index 0000000..5709a04 --- /dev/null +++ b/scales/ptolemy_idiat.scl @@ -0,0 +1,12 @@ +! ptolemy_idiat.scl +! +Dorian mode of Ptolemy's Intense Diatonic (Diatonon Syntonon) + 7 +! + 16/15 + 6/5 + 4/3 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/ptolemy_imix.scl b/scales/ptolemy_imix.scl new file mode 100644 index 0000000..41c2bb4 --- /dev/null +++ b/scales/ptolemy_imix.scl @@ -0,0 +1,16 @@ +! ptolemy_imix.scl +! +Ptolemy Intense Diatonic mixed with its inverse + 11 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/ptolemy_malak.scl b/scales/ptolemy_malak.scl new file mode 100644 index 0000000..ee9fef5 --- /dev/null +++ b/scales/ptolemy_malak.scl @@ -0,0 +1,12 @@ +! PTOLEMY_malak.scl +! +Ptolemy's Malaka lyra tuning, a mixture of Intense Chrom. & Tonic Diatonic + 7 +! + 22/21 + 8/7 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/ptolemy_malak2.scl b/scales/ptolemy_malak2.scl new file mode 100644 index 0000000..d04b30a --- /dev/null +++ b/scales/ptolemy_malak2.scl @@ -0,0 +1,12 @@ +! PTOLEMY_MALAK2.scl +! +Malaka lyra, mixture of his Soft Chromatic and Tonic Diatonic. + 7 +! + 28/27 + 10/9 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/ptolemy_mdiat.scl b/scales/ptolemy_mdiat.scl new file mode 100644 index 0000000..ee17ef7 --- /dev/null +++ b/scales/ptolemy_mdiat.scl @@ -0,0 +1,12 @@ +! ptolemy_mdiat.scl +! +Ptolemy soft diatonic + 7 +! + 21/20 + 7/6 + 4/3 + 3/2 + 63/40 + 7/4 + 2/1 diff --git a/scales/ptolemy_mdiat2.scl b/scales/ptolemy_mdiat2.scl new file mode 100644 index 0000000..16d0ea2 --- /dev/null +++ b/scales/ptolemy_mdiat2.scl @@ -0,0 +1,12 @@ +! ptolemy_mdiat2.scl +! +permuted Ptolemy soft diatonic + 7 +! + 10/9 + 7/6 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/ptolemy_mdiat3.scl b/scales/ptolemy_mdiat3.scl new file mode 100644 index 0000000..b843e64 --- /dev/null +++ b/scales/ptolemy_mdiat3.scl @@ -0,0 +1,12 @@ +! ptolemy_mdiat3.scl +! +permuted Ptolemy soft diatonic + 7 +! + 8/7 + 6/5 + 4/3 + 3/2 + 12/7 + 9/5 + 2/1 diff --git a/scales/ptolemy_meta.scl b/scales/ptolemy_meta.scl new file mode 100644 index 0000000..59d5ebb --- /dev/null +++ b/scales/ptolemy_meta.scl @@ -0,0 +1,12 @@ +! ptolemy_meta.scl +! +Metabolika lyra tuning, mixture of Soft Diatonic & Tonic Diatonic + 7 +! + 21/20 + 7/6 + 4/3 + 3/2 + 14/9 + 16/9 + 2/1 diff --git a/scales/ptolemy_mix.scl b/scales/ptolemy_mix.scl new file mode 100644 index 0000000..fc6d5d7 --- /dev/null +++ b/scales/ptolemy_mix.scl @@ -0,0 +1,24 @@ +! ptolemy_mix.scl +! +All modes of Ptolemy Intense Diatonic mixed + 19 +! + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 4/3 + 27/20 + 45/32 + 64/45 + 40/27 + 3/2 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/ptolemy_perm.scl b/scales/ptolemy_perm.scl new file mode 100644 index 0000000..b41c075 --- /dev/null +++ b/scales/ptolemy_perm.scl @@ -0,0 +1,40 @@ +! C:\scalamake\src2\scl\ptolemy_perm.scl +! +Ptolemy all interval permutations + 35 +! + 16/15 + 10/9 + 9/8 + 256/225 + 32/27 + 6/5 + 100/81 + 5/4 + 512/405 + 81/64 + 32/25 + 320/243 + 4/3 + 27/20 + 25/18 + 1024/729 + 45/32 + 64/45 + 729/512 + 36/25 + 40/27 + 3/2 + 243/160 + 25/16 + 128/81 + 405/256 + 8/5 + 81/50 + 5/3 + 27/16 + 225/128 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/ptolemy_prod.scl b/scales/ptolemy_prod.scl new file mode 100644 index 0000000..e421df7 --- /dev/null +++ b/scales/ptolemy_prod.scl @@ -0,0 +1,26 @@ +! ptolemy_prod.scl +! +Product of Intense Diatonic with its intervals + 21 +! + 25/24 + 135/128 + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 81/64 + 4/3 + 25/18 + 45/32 + 64/45 + 40/27 + 3/2 + 8/5 + 5/3 + 27/16 + 16/9 + 50/27 + 15/8 + 2/1 diff --git a/scales/ptolemy_tree.scl b/scales/ptolemy_tree.scl new file mode 100644 index 0000000..b805c91 --- /dev/null +++ b/scales/ptolemy_tree.scl @@ -0,0 +1,19 @@ +! ptolemy_tree.scl +! +Intense Diatonic with all their Farey parent fractions + 14 +! + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 9/5 + 11/6 + 13/7 + 15/8 + 2/1 diff --git a/scales/pump12_1.scl b/scales/pump12_1.scl new file mode 100644 index 0000000..d92dc4f --- /dev/null +++ b/scales/pump12_1.scl @@ -0,0 +1,37 @@ +! pump12_1.scl +Pump1 35 intervals 30 triads 197-tET +! x^12-35*x^10-60*x^9+226*x^8+512*x^7-476*x^6-1488*x^5+136*x^4+1664*x^3+452*x^2-560*x-240 +12 +! +115.73604 +268.02030 +383.75635 +499.49239 +615.22843 +700.50761 +767.51269 +816.24365 +883.24873 +998.98477 +1084.26396 +2/1 +! +! !prepump12_1.scl +! 5-limit pump12_1 transversal +! 12 +! ! +! 16/15 +! 75/64 +! 5/4 +! 4/3 +! 64/45 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 16/9 +! 15/8 +! 2/1 +! ! comma pump +! ! [-1, -1, -2]->[0, -1, -2]->[0, -1, -1]-> +! ! [0, -1, 0]->[0, 0, 0]->[0, 0, 1]->[0, 0, 2] diff --git a/scales/pump12_2.scl b/scales/pump12_2.scl new file mode 100644 index 0000000..3a61126 --- /dev/null +++ b/scales/pump12_2.scl @@ -0,0 +1,37 @@ +! pump12_2.scl +Pump2 35 intervals 30 triads 197-tET +! x^12-35*x^10-60*x^9+226*x^8+512*x^7-476*x^6-1488*x^5+136*x^4+1664*x^3+452*x^2-560*x-240 +12 +! +67.00508 +115.73604 +182.74112 +268.02030 +383.75635 +499.49239 +615.22843 +767.51269 +883.24873 +998.98477 +1084.26396 +2/1 +! +! ! prepump12_2.scl +! 5-limit transversal +! 12 +! ! +! 25/24 +! 16/15 +! 10/9 +! 75/64 +! 5/4 +! 4/3 +! 64/45 +! 25/16 +! 5/3 +! 16/9 +! 15/8 +! 2/1 +! ! comma pump +! ! [-1, -1, -2]->[-1, -1, -1]->[-1, -1, 0]-> +! ! [-1, 0, 0]->[0, 0, 0]->[0, 0, 1]->[0, 0, 2] diff --git a/scales/pump13.scl b/scales/pump13.scl new file mode 100644 index 0000000..33def72 --- /dev/null +++ b/scales/pump13.scl @@ -0,0 +1,36 @@ +! pump13.scl +Pump13 tetrads of dwarf15_5 in 197-tET +13 +! +85.27919 +201.01523 +268.02030 +383.75635 +469.03553 +499.49239 +584.77157 +700.50761 +767.51269 +883.24873 +968.52792 +1084.26396 +2/1 +! +! ! prepump13.scl +! Prepump13 5-limit transversal +! 13 +! ! +! 135/128 +! 9/8 +! 75/64 +! 5/4 +! 675/512 +! 4/3 +! 45/32 +! 3/2 +! 25/16 +! 5/3 +! 225/128 +! 15/8 +! 2/1 +! tetrads [[0, -1, -2], [0, -1, -1], [0, 0, -1], ! [0, 0, 0], [0, 1, 0], [0, 1, 1]] diff --git a/scales/pump14.scl b/scales/pump14.scl new file mode 100644 index 0000000..395e4c2 --- /dev/null +++ b/scales/pump14.scl @@ -0,0 +1,38 @@ +! pump14.scl +Pump14 tetrads of dwarf17_5a in 197-tET +14 +! +67.00508 +115.73604 +182.74112 +268.02030 +383.75635 +499.49239 +615.22843 +700.50761 +767.51269 +816.24365 +883.24873 +998.98477 +1084.26396 +2/1 +! +! ! prepump14.scl +! 5-limi transversal +! 14 +! ! +! 25/24 +! 16/15 +! 10/9 +! 75/64 +! 5/4 +! 4/3 +! 64/45 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 16/9 +! 15/8 +! 2/1 +! tetrads [[0, -1, 0], [0, -1, 1], [1, -1, 1], [1, -1, 2], ! [0, 0, 2], [0, -1, -2], [0, 0, 1], [0, -1, -1]] diff --git a/scales/pump15.scl b/scales/pump15.scl new file mode 100644 index 0000000..37a3b6d --- /dev/null +++ b/scales/pump15.scl @@ -0,0 +1,39 @@ +! pump15.scl +Marvel pump scale in 197-tET +15 +! +115.73604 +231.47208 +268.02030 +316.75127 +383.75635 +499.49239 +584.77157 +615.22843 +700.50761 +816.24365 +883.24873 +931.97970 +968.52792 +1084.26396 +2/1 +! +! ! prepump15.scl +! 5-limit transversal +! 15 +! ! +! 16/15 +! 256/225 +! 75/64 +! 6/5 +! 5/4 +! 4/3 +! 45/32 +! 64/45 +! 3/2 +! 8/5 +! 5/3 +! 128/75 +! 225/128 +! 15/8 +! 2/1 diff --git a/scales/pump16.scl b/scales/pump16.scl new file mode 100644 index 0000000..0aee35f --- /dev/null +++ b/scales/pump16.scl @@ -0,0 +1,41 @@ +! pump16.scl +Marvel tempered pentad comma pump in 197-tET +16 +! +115.73604 +201.01523 +231.47208 +316.75127 +383.75635 +499.49239 +584.77157 +700.50761 +816.24365 +883.24873 +931.97970 +968.52792 +998.98477 +1017.25888 +1084.26396 +2/1 +! +! ! prepump16.scl +! 5-limit transversal +! 16 +! ! +! 16/15 +! 9/8 +! 256/225 +! 6/5 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 8/5 +! 5/3 +! 128/75 +! 225/128 +! 16/9 +! 9/5 +! 15/8 +! 2/1 diff --git a/scales/pump17.scl b/scales/pump17.scl new file mode 100644 index 0000000..a406a51 --- /dev/null +++ b/scales/pump17.scl @@ -0,0 +1,43 @@ +! pump17.scl +Marvel tempered comma pump scale in 197-tET +17 +! +115.73604 +201.01523 +268.02030 +316.75127 +383.75635 +432.48731 +499.49239 +584.77157 +700.50761 +767.51269 +816.24365 +883.24873 +931.97970 +1017.25888 +1084.26396 +1132.99492 +2/1 +! +! ! prepump17.scl +! 5-limit transversal +! 17 +! ! +! 16/15 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 45/32 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 9/5 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/pump18.scl b/scales/pump18.scl new file mode 100644 index 0000000..46de2c5 --- /dev/null +++ b/scales/pump18.scl @@ -0,0 +1,47 @@ +! pump18.scl +Tetrads from dwarf22_5 marvel tuned in 197-tET +18 +! +115.73604 +201.01523 +268.02030 +316.75127 +383.75635 +432.48731 +499.49239 +584.77157 +700.50761 +767.51269 +816.24365 +883.24873 +931.97970 +968.52792 +1017.25888 +1084.26396 +1132.99492 +2/1 +! +! ! prepump18.scl +! 5-limit transversal +! 18 +! ! +! 16/15 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 45/32 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 225/128 +! 9/5 +! 15/8 +! 48/25 +! 2/1 +! tetrads +! [[-1, 0, -1], [-1, 0, 0], [-1, 0, 1], [0, -1, -2], ! [0, -1, -1], [0, 0, -1], [0, 0, 0], [-1, 1, 1], ! [-1, 1, 2], [0, 0, 1], [0, 0, 2], [0, 1, 2]] diff --git a/scales/pyclesfip17.scl b/scales/pyclesfip17.scl new file mode 100644 index 0000000..d1484da --- /dev/null +++ b/scales/pyclesfip17.scl @@ -0,0 +1,22 @@ +! pyclesfip17.scl +! +9-limit 15 cent lesfip derived from Pycnic[17] + 17 +! + 66.73123 + 130.99360 + 190.93224 + 261.57168 + 321.51031 + 385.77268 + 452.50392 + 571.99486 + 629.68133 + 695.44810 + 764.80077 + 826.25196 + 887.70314 + 957.05582 + 1022.82259 + 1080.50906 + 2/1 diff --git a/scales/pygmie.scl b/scales/pygmie.scl new file mode 100644 index 0000000..7a7e17e --- /dev/null +++ b/scales/pygmie.scl @@ -0,0 +1,10 @@ +! pygmie.scl +! +Pygmie scale + 5 +! + 8/7 + 21/16 + 3/2 + 7/4 + 2/1 diff --git a/scales/pyle.scl b/scales/pyle.scl new file mode 100644 index 0000000..cc52ab9 --- /dev/null +++ b/scales/pyle.scl @@ -0,0 +1,17 @@ +! pyle.scl +! +Howard Willet Pyle quasi equal temperament + 12 +! + 100.05000 + 199.89000 + 300.17000 + 400.22000 + 500.05000 + 599.99000 + 699.73000 + 799.90000 + 899.86000 + 1000.25000 + 1100.40000 + 2/1 diff --git a/scales/pyramid.scl b/scales/pyramid.scl new file mode 100644 index 0000000..73d61c2 --- /dev/null +++ b/scales/pyramid.scl @@ -0,0 +1,17 @@ +! pyramid.scl +! +This scale may also be called the "Wedding Cake" + 12 +! + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/pyramid_down.scl b/scales/pyramid_down.scl new file mode 100644 index 0000000..1a75e6c --- /dev/null +++ b/scales/pyramid_down.scl @@ -0,0 +1,17 @@ +! pyramid_down.scl +! +Upside-Down Wedding Cake (divorce cake) + 12 +! + 16/15 + 9/8 + 6/5 + 32/25 + 4/3 + 3/2 + 8/5 + 27/16 + 16/9 + 9/5 + 48/25 + 2/1 diff --git a/scales/pyth_12.scl b/scales/pyth_12.scl new file mode 100644 index 0000000..adfb755 --- /dev/null +++ b/scales/pyth_12.scl @@ -0,0 +1,17 @@ +! pyth_12.scl +! +12-tone Pythagorean scale + 12 +! + 2187/2048 + 9/8 + 32/27 + 81/64 + 4/3 + 729/512 + 3/2 + 6561/4096 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/pyth_12s.scl b/scales/pyth_12s.scl new file mode 100644 index 0000000..b32305d --- /dev/null +++ b/scales/pyth_12s.scl @@ -0,0 +1,17 @@ +! pyth_12s.scl +! +Pythagorean with major thirds flat by a schisma + 12 +! + 2187/2048 + 9/8 + 19683/16384 + 8192/6561 + 4/3 + 1024/729 + 3/2 + 6561/4096 + 32768/19683 + 59049/32768 + 4096/2187 + 2/1 diff --git a/scales/pyth_17.scl b/scales/pyth_17.scl new file mode 100644 index 0000000..c74a7e0 --- /dev/null +++ b/scales/pyth_17.scl @@ -0,0 +1,22 @@ +! pyth_17.scl +! +17-tone Pythagorean scale. Used in Persian music + 17 +! + 256/243 + 2187/2048 + 9/8 + 32/27 + 19683/16384 + 81/64 + 4/3 + 1024/729 + 729/512 + 3/2 + 128/81 + 6561/4096 + 27/16 + 16/9 + 59049/32768 + 243/128 + 2/1 diff --git a/scales/pyth_17s.scl b/scales/pyth_17s.scl new file mode 100644 index 0000000..bd451f6 --- /dev/null +++ b/scales/pyth_17s.scl @@ -0,0 +1,22 @@ +! pyth_17s.scl +! +Schismatically altered 17-tone Pythagorean scale + 17 +! + 256/243 + 16/15 + 9/8 + 32/27 + 6/5 + 81/64 + 4/3 + 1024/729 + 64/45 + 3/2 + 128/81 + 8/5 + 27/16 + 16/9 + 9/5 + 243/128 + 2/1 diff --git a/scales/pyth_22.scl b/scales/pyth_22.scl new file mode 100644 index 0000000..a73a73c --- /dev/null +++ b/scales/pyth_22.scl @@ -0,0 +1,27 @@ +! pyth_22.scl +! +Pythagorean shrutis + 22 +! + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 32/27 + 19683/16384 + 8192/6561 + 81/64 + 4/3 + 177147/131072 + 1024/729 + 729/512 + 3/2 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 16/9 + 59049/32768 + 4096/2187 + 243/128 + 2/1 diff --git a/scales/pyth_27.scl b/scales/pyth_27.scl new file mode 100644 index 0000000..8f68245 --- /dev/null +++ b/scales/pyth_27.scl @@ -0,0 +1,32 @@ +! pyth_27.scl +! +27-tone Pythagorean scale + 27 +! + 531441/524288 + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 4782969/4194304 + 32/27 + 19683/16384 + 8192/6561 + 81/64 + 4/3 + 177147/131072 + 1024/729 + 729/512 + 262144/177147 + 3/2 + 1594323/1048576 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 14348907/8388608 + 16/9 + 59049/32768 + 4096/2187 + 243/128 + 2/1 diff --git a/scales/pyth_31.scl b/scales/pyth_31.scl new file mode 100644 index 0000000..2a74c5d --- /dev/null +++ b/scales/pyth_31.scl @@ -0,0 +1,36 @@ +! pyth_31.scl +! +31-tone Pythagorean scale + 31 +! + 531441/524288 + 256/243 + 2187/2048 + 1162261467/1073741824 + 9/8 + 4782969/4194304 + 32/27 + 19683/16384 + 341.05502 + 8192/6561 + 81/64 + 43046721/33554432 + 4/3 + 177147/131072 + 1024/729 + 729/512 + 387420489/268435456 + 3/2 + 1594323/1048576 + 128/81 + 6561/4096 + 839.10002 + 27/16 + 14348907/8388608 + 16/9 + 59049/32768 + 1043.01002 + 4096/2187 + 243/128 + 129140163/67108864 + 2/1 diff --git a/scales/pyth_7a.scl b/scales/pyth_7a.scl new file mode 100644 index 0000000..54846da --- /dev/null +++ b/scales/pyth_7a.scl @@ -0,0 +1,17 @@ +! pyth_7a.scl +! +Pythagorean 7-tone with whole tones divided arithmetically + 12 +! + 17/16 + 9/8 + 153/128 + 81/64 + 4/3 + 17/12 + 3/2 + 51/32 + 27/16 + 459/256 + 243/128 + 2/1 diff --git a/scales/pyth_chrom.scl b/scales/pyth_chrom.scl new file mode 100644 index 0000000..7d859d5 --- /dev/null +++ b/scales/pyth_chrom.scl @@ -0,0 +1,13 @@ +! pyth_chrom.scl +! +Dorian mode of the so-called Pythagorean chromatic, recorded by Gaudentius + 8 +! + 256/243 + 9/8 + 4/3 + 3/2 + 128/81 + 27/16 + 16/9 + 2/1 diff --git a/scales/pyth_sev.scl b/scales/pyth_sev.scl new file mode 100644 index 0000000..d74ab1d --- /dev/null +++ b/scales/pyth_sev.scl @@ -0,0 +1,31 @@ +! pyth_sev.scl +! +26-tone Pythagorean scale based on 7/4 + 26 +! + 16807/16384 + 282475249/268435456 + 132.38860 + 131072/117649 + 8/7 + 2401/2048 + 40353607/33554432 + 363.56269 + 1048576/823543 + 64/49 + 343/256 + 5764801/4194304 + 594.73678 + 8388608/5764801 + 512/343 + 49/32 + 823543/524288 + 825.91088 + 67108864/40353607 + 4096/2401 + 7/4 + 117649/65536 + 1977326743/1073741824 + 536870912/282475249 + 32768/16807 + 2/1 diff --git a/scales/pyth_sev_16.scl b/scales/pyth_sev_16.scl new file mode 100644 index 0000000..fe8ce8b --- /dev/null +++ b/scales/pyth_sev_16.scl @@ -0,0 +1,21 @@ +! pyth_sev_16.scl +! +16-tone Pythagorean scale based on 7/4, "Armodue" + 16 +! + 16807/16384 + 282475249/268435456 + 132.38860 + 2401/2048 + 40353607/33554432 + 363.56269 + 343/256 + 5764801/4194304 + 594.73678 + 49/32 + 823543/524288 + 825.91088 + 7/4 + 117649/65536 + 1977326743/1073741824 + 2/1 diff --git a/scales/pyth_third.scl b/scales/pyth_third.scl new file mode 100644 index 0000000..0c9b490 --- /dev/null +++ b/scales/pyth_third.scl @@ -0,0 +1,36 @@ +! pyth_third.scl +! +Cycle of 5/4 thirds + 31 +! + 128/125 + 16384/15625 + 2097152/1953125 + 268435456/244140625 + 181.01942 + 1220703125/1073741824 + 9765625/8388608 + 78125/65536 + 625/512 + 5/4 + 32/25 + 4096/3125 + 524288/390625 + 67108864/48828125 + 567.33314 + 608.39199 + 48828125/33554432 + 390625/262144 + 3125/2048 + 25/16 + 8/5 + 1024/625 + 131072/78125 + 16777216/9765625 + 953.64685 + 994.70571 + 244140625/134217728 + 1953125/1048576 + 15625/8192 + 125/64 + 2/1 diff --git a/scales/quasi_5.scl b/scales/quasi_5.scl new file mode 100644 index 0000000..9977a0b --- /dev/null +++ b/scales/quasi_5.scl @@ -0,0 +1,10 @@ +! quasi_5.scl +! +Quasi-Equal 5-Tone in 24-tET, 5 5 4 5 5 steps + 5 +! + 250.00000 + 500.00000 + 700.00000 + 950.00000 + 2/1 diff --git a/scales/quasi_9.scl b/scales/quasi_9.scl new file mode 100644 index 0000000..d7f18f7 --- /dev/null +++ b/scales/quasi_9.scl @@ -0,0 +1,14 @@ +! quasi_9.scl +! +Quasi-Equal Enneatonic, Each "tetrachord" has 125 + 125 + 125 + 125 cents + 9 +! + 125.00000 + 250.00000 + 375.00000 + 500.00000 + 700.00000 + 825.00000 + 950.00000 + 1075.00000 + 2/1 diff --git a/scales/quasic22.scl b/scales/quasic22.scl new file mode 100644 index 0000000..e9ff64f --- /dev/null +++ b/scales/quasic22.scl @@ -0,0 +1,26 @@ +! quasic22.scl +A 22 note quasi-circulating scale +22 +! +25/24 +140625/131072 +1125/1024 +9/8 +75/64 +1265625/1048576 +5/4 +125/96 +4/3 +5625/4096 +45/32 +375/256 +3/2 +25/16 +421875/262144 +5/3 +28125/16384 +225/128 +3796875/2097152 +15/8 +125/64 +2/1 diff --git a/scales/quint_chrom.scl b/scales/quint_chrom.scl new file mode 100644 index 0000000..aeacee0 --- /dev/null +++ b/scales/quint_chrom.scl @@ -0,0 +1,12 @@ +! quint_chrom.scl +! +Aristides Quintilianus' Chromatic genus + 7 +! + 18/17 + 9/8 + 4/3 + 3/2 + 27/17 + 27/16 + 2/1 diff --git a/scales/qx1.scl b/scales/qx1.scl new file mode 100644 index 0000000..e56a11e --- /dev/null +++ b/scales/qx1.scl @@ -0,0 +1,38 @@ +! qx1.scl +breed tempered |-15 0 -2 7> |-9 0 -7-9> Fokker block +31 +! +35.294118 +84.313725 +119.607843 +154.901961 +203.921569 +239.215686 +266.666667 +315.686275 +350.980392 +386.274510 +435.294118 +470.588235 +505.882353 +554.901961 +582.352941 +617.647059 +666.666667 +701.960784 +737.254902 +786.274510 +821.568627 +849.019608 +898.039216 +933.333333 +968.627451 +1017.647059 +1052.941176 +1088.235294 +1137.254902 +1164.705882 +2/1 +! 49/48, 21/20, 15/14, 35/32, 9/8, 147/128, 7/6, 6/5, 49/40, 5/4, +! 9/7, 21/16, 75/56, 135/98, 7/5, 10/7, 72/49, 3/2, 49/32, 63/40, +! 45/28, 49/30, 42/25, 12/7, 7/4, 9/5, 90/49, 15/8, 27/14, 49/25, 2 diff --git a/scales/qx2.scl b/scales/qx2.scl new file mode 100644 index 0000000..fd3465d --- /dev/null +++ b/scales/qx2.scl @@ -0,0 +1,38 @@ +! qx2.scl +breed tempered |-15 0 -2 7> |-9 0 -7-9> Fokker block +31 +! +35.294118 +84.313725 +119.607843 +147.058824 +196.078431 +231.372549 +266.666667 +315.686275 +350.980392 +386.274510 +435.294118 +462.745098 +498.039216 +547.058824 +582.352941 +617.647059 +666.666667 +701.960784 +729.411765 +764.705882 +813.725490 +849.019608 +884.313725 +933.333333 +968.627451 +1003.921569 +1045.098039 +1080.392157 +1115.686275 +1164.705882 +2/1 +! 49/48, 21/20, 15/14, 49/45, 28/25, 8/7, 7/6, 6/5, 49/40, 5/4, +! 9/7, 64/49, 4/3, 48/35, 7/5, 10/7, 72/49, 3/2, 32/21, 14/9, +! 8/5, 49/30, 5/3, 12/7, 7/4, 25/14, 64/35, 28/15, 40/21, 49/25 2 \ No newline at end of file diff --git a/scales/ragib.scl b/scales/ragib.scl new file mode 100644 index 0000000..dfd8df8 --- /dev/null +++ b/scales/ragib.scl @@ -0,0 +1,29 @@ +! ragib.scl +! +Idris Rag'ib Bey, vol.5 d'Erlanger, p. 40. + 24 +! + 1000/969 + 1000/931 + 167.00000 + 9/8 + 257.00000 + 25/21 + 369.00000 + 432.00000 + 200/153 + 4/3 + 500/363 + 605.00000 + 500/343 + 3/2 + 767.00000 + 808.00000 + 2000/1209 + 940.00000 + 970.00000 + 16/9 + 1038.00000 + 1000/537 + 25/13 + 2/1 diff --git a/scales/ragib7.scl b/scales/ragib7.scl new file mode 100644 index 0000000..b7c8ec2 --- /dev/null +++ b/scales/ragib7.scl @@ -0,0 +1,29 @@ +! ragib7.scl +! +7-limit version of Idris Rag'ib Bey scale + 24 +! + 405/392 + 672/625 + 54/49 + 9/8 + 512/441 + 25/21 + 243/196 + 9/7 + 64/49 + 4/3 + 135/98 + 486/343 + 35/24 + 3/2 + 14/9 + 625/392 + 81/49 + 441/256 + 7/4 + 16/9 + 175/96 + 625/336 + 48/25 + 2/1 diff --git a/scales/ragipu16.scl b/scales/ragipu16.scl new file mode 100644 index 0000000..b281f72 --- /dev/null +++ b/scales/ragipu16.scl @@ -0,0 +1,21 @@ +! ragipu16.scl +! +16-step ragisma pump (1/3, 10/7, 7/2) +16 +! +1/3 +7/6 +7/18 +5/9 +5/27 +35/54 +35/162 +245/324 +175/162 +175/486 +1225/972 +1225/2916 +875/1458 +875/4374 +6125/8748 +4375/4374 diff --git a/scales/ragipu17.scl b/scales/ragipu17.scl new file mode 100644 index 0000000..3a35558 --- /dev/null +++ b/scales/ragipu17.scl @@ -0,0 +1,22 @@ +! ragipu17.scl +! +17-step ragisma pump (7/6, 5/1, 2/7) +17 +! +7/6 +1/3 +5/3 +35/18 +5/9 +35/54 +5/27 +25/27 +175/162 +25/81 +125/81 +875/486 +125/243 +875/1458 +125/729 +875/4374 +4375/4374 diff --git a/scales/ragismic19.scl b/scales/ragismic19.scl new file mode 100644 index 0000000..f18e93b --- /dev/null +++ b/scales/ragismic19.scl @@ -0,0 +1,47 @@ +! ragismic19.scl +Ragismic[19] hobbit in 6279-tET +19 +! +48.92499 +133.39704 +182.32203 +266.79408 +315.71906 +364.64405 +449.11610 +498.04109 +568.56187 +631.43813 +701.95891 +750.88390 +835.35595 +884.28094 +933.20592 +1017.67797 +1066.60296 +1151.07501 +2/1 +! +! !preragismic19.scl +! Preragismic[19] 5-limit transversal +! 19 +! ! +! 250/243 +! 27/25 +! 10/9 +! 729/625 +! 6/5 +! 100/81 +! 162/125 +! 4/3 +! 25/18 +! 36/25 +! 3/2 +! 125/81 +! 81/50 +! 5/3 +! 1250/729 +! 9/5 +! 50/27 +! 243/125 +! 2/1 diff --git a/scales/rain123.scl b/scales/rain123.scl new file mode 100644 index 0000000..b81a986 --- /dev/null +++ b/scales/rain123.scl @@ -0,0 +1,17 @@ +! rain123.scl +! +Raintree scale tuned to 123-tET + 12 +! + 97.56098 + 204.87805 + 302.43902 + 400.00000 + 497.56098 + 604.87805 + 702.43902 + 800.00000 + 897.56098 + 995.12195 + 1102.43902 + 2/1 diff --git a/scales/rain159.scl b/scales/rain159.scl new file mode 100644 index 0000000..63f2bad --- /dev/null +++ b/scales/rain159.scl @@ -0,0 +1,17 @@ +! rain159.scl +! +Raintree scale tuned to 159-tET + 12 +! + 98.11321 + 203.77358 + 301.88679 + 400.00000 + 498.11321 + 603.77358 + 701.88679 + 800.00000 + 898.11321 + 996.22642 + 1101.88679 + 2/1 diff --git a/scales/raintree.scl b/scales/raintree.scl new file mode 100644 index 0000000..0aa1e22 --- /dev/null +++ b/scales/raintree.scl @@ -0,0 +1,17 @@ +! raintree.scl +! +Raintree Goldbach 12-tone tuning, TL 14-3-2007 + 12 +! + 135/128 + 9/8 + 1215/1024 + 512/405 + 4/3 + 64/45 + 3/2 + 405/256 + 2048/1215 + 16/9 + 256/135 + 2/1 diff --git a/scales/raintree2.scl b/scales/raintree2.scl new file mode 100644 index 0000000..87094ee --- /dev/null +++ b/scales/raintree2.scl @@ -0,0 +1,17 @@ +! raintree2.scl +! +Raintree Goldbach Celestial tuning, TL 15-10-2009 + 12 +! + 200/189 + 28/25 + 25/21 + 63/50 + 75/56 + 567/400 + 112/75 + 100/63 + 42/25 + 25/14 + 189/100 + 2/1 diff --git a/scales/rameau-flat.scl b/scales/rameau-flat.scl new file mode 100644 index 0000000..95748f5 --- /dev/null +++ b/scales/rameau-flat.scl @@ -0,0 +1,17 @@ +! rameau-flat.scl +! +Rameau bemols, see Pierre-Yves Asselin in "Musique et temperament" + 12 +! + 92.66800 + 193.15700 + 304.88800 + 5/4 + 503.42200 + 582.20000 + 696.57800 + 800.00000 + 889.73500 + 1006.84300 + 1082.89200 + 2/1 diff --git a/scales/rameau-french.scl b/scales/rameau-french.scl new file mode 100644 index 0000000..33a57ca --- /dev/null +++ b/scales/rameau-french.scl @@ -0,0 +1,17 @@ +! rameau-french.scl +! +Standard French temperament, Rameau version (1726), C. di Veroli, 2002 + 12 +! + 88.33435 + 193.15686 + 297.97936 + 5/4 + 503.42157 + 584.84714 + 696.57843 + 793.15686 + 889.73529 + 1001.46657 + 1082.89214 + 2/1 diff --git a/scales/rameau-gall.scl b/scales/rameau-gall.scl new file mode 100644 index 0000000..be53494 --- /dev/null +++ b/scales/rameau-gall.scl @@ -0,0 +1,17 @@ +! rameau-gall.scl +! +Rameau's temperament, after Gallimard (1st solution) + 12 +! + 84.11386 + 193.15686 + 296.50069 + 5/4 + 503.42157 + 582.15886 + 696.57843 + 788.75714 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/rameau-gall2.scl b/scales/rameau-gall2.scl new file mode 100644 index 0000000..1a5a25c --- /dev/null +++ b/scales/rameau-gall2.scl @@ -0,0 +1,17 @@ +! rameau-gall2.scl +! +Rameau's temperament, after Gallimard (2nd solution) + 12 +! + 81.40742 + 193.15686 + 292.41449 + 5/4 + 503.42157 + 580.95786 + 696.57843 + 785.08292 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/rameau-merc.scl b/scales/rameau-merc.scl new file mode 100644 index 0000000..a0472fd --- /dev/null +++ b/scales/rameau-merc.scl @@ -0,0 +1,17 @@ +! rameau-merc.scl +! +Rameau's temperament, after Mercadier + 12 +! + 76.04900 + 193.15686 + 286.60780 + 5/4 + 4/3 + 579.47057 + 696.57843 + 775.85337 + 889.73529 + 993.93937 + 1082.89214 + 2/1 diff --git a/scales/rameau-minor.scl b/scales/rameau-minor.scl new file mode 100644 index 0000000..30ff4cc --- /dev/null +++ b/scales/rameau-minor.scl @@ -0,0 +1,14 @@ +! RAMEAU-MINor.scl +! +Rameau's systeme diatonique mineur on E. Asc. 4-6-8-9, desc. 9-7-5-4 + 9 +! + 9/8 + 6/5 + 27/20 + 3/2 + 8/5 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/rameau-nouv.scl b/scales/rameau-nouv.scl new file mode 100644 index 0000000..eb56c40 --- /dev/null +++ b/scales/rameau-nouv.scl @@ -0,0 +1,17 @@ +! rameau-nouv.scl +! +Temperament by Rameau in Nouveau Systeme (1726) + 12 +! + 92.47254 + 193.15686 + 302.05294 + 5/4 + 503.42157 + 587.68234 + 696.57843 + 797.26274 + 889.73529 + 1006.84314 + 1082.89214 + 2/1 diff --git a/scales/rameau-sharp.scl b/scales/rameau-sharp.scl new file mode 100644 index 0000000..4ac904d --- /dev/null +++ b/scales/rameau-sharp.scl @@ -0,0 +1,17 @@ +! rameau-sharp.scl +! +Rameau dieses, see Pierre-Yves Asselin in "Musique et temperament" + 12 +! + 76.04900 + 193.15700 + 285.60000 + 5/4 + 4/3 + 579.47100 + 696.57800 + 775.31600 + 889.73500 + 993.20000 + 1082.89200 + 2/1 diff --git a/scales/rameau.scl b/scales/rameau.scl new file mode 100644 index 0000000..a2d011f --- /dev/null +++ b/scales/rameau.scl @@ -0,0 +1,17 @@ +! rameau.scl +! +Rameau's modified meantone temperament (1725) + 12 +! + 86.80200 + 193.15700 + 297.80000 + 5/4 + 503.42200 + 584.84700 + 696.57800 + 788.75700 + 889.73500 + 1006.84300 + 1082.89200 + 2/1 diff --git a/scales/ramis.scl b/scales/ramis.scl new file mode 100644 index 0000000..9a3529c --- /dev/null +++ b/scales/ramis.scl @@ -0,0 +1,17 @@ +! ramis.scl +! +Monochord of Ramos de Pareja (Ramis de Pareia), Musica practica (1482). 81/80 & 2048/2025. Switched on Bach + 12 +! + 135/128 + 10/9 + 32/27 + 5/4 + 4/3 + 45/32 + 3/2 + 128/81 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/rankfour46a.scl b/scales/rankfour46a.scl new file mode 100644 index 0000000..938991e --- /dev/null +++ b/scales/rankfour46a.scl @@ -0,0 +1,101 @@ +! rankfour46a.scl +Rank four hobbit 441/440, 364/363 in 393-tET +46 +! +27.48092 +54.96183 +82.44275 +109.92366 +122.13740 +149.61832 +177.09924 +204.58015 +232.06107 +259.54198 +287.02290 +314.50382 +332.82443 +369.46565 +387.78626 +415.26718 +442.74809 +470.22901 +497.70992 +525.19084 +552.67176 +580.15267 +592.36641 +619.84733 +647.32824 +674.80916 +702.29008 +729.77099 +757.25191 +784.73282 +812.21374 +839.69466 +867.17557 +885.49618 +912.97710 +934.35115 +967.93893 +989.31298 +1016.79389 +1035.11450 +1062.59542 +1090.07634 +1117.55725 +1145.03817 +1172.51908 +2/1 +! +! ! prerankfour46a.scl +! Prerankfour46a transversal +! 46 +! ! +! 56/55 +! 33/32 +! 21/20 +! 16/15 +! 15/14 +! 12/11 +! 72/65 +! 9/8 +! 8/7 +! 64/55 +! 13/11 +! 6/5 +! 40/33 +! 26/21 +! 5/4 +! 14/11 +! 165/128 +! 21/16 +! 4/3 +! 65/48 +! 11/8 +! 7/5 +! 45/32 +! 10/7 +! 16/11 +! 65/44 +! 3/2 +! 32/21 +! 65/42 +! 11/7 +! 8/5 +! 13/8 +! 33/20 +! 5/3 +! 22/13 +! 12/7 +! 7/4 +! 39/22 +! 9/5 +! 20/11 +! 24/13 +! 15/8 +! 21/11 +! 64/33 +! 55/28 +! 2/1 diff --git a/scales/rankfour46b.scl b/scales/rankfour46b.scl new file mode 100644 index 0000000..aba1ad6 --- /dev/null +++ b/scales/rankfour46b.scl @@ -0,0 +1,101 @@ +! rankfour46b.scl +Rankfour46b hobbit minimax tuning, commas 385/384, 325/324 +46 +! +23.28465 +51.91084 +67.11570 +113.50965 +136.7943 +151.99916 +180.62535 +203.91000 +232.53619 +265.50881 +288.79346 +317.41965 +332.62451 +369.33049 +384.53535 +413.16154 +436.44620 +469.41881 +498.04500 +521.32965 +549.95584 +565.16070 +588.44535 +634.83930 +650.04416 +678.67035 +701.95500 +730.58119 +753.86584 +786.83846 +815.46465 +838.74930 +853.95416 +882.58035 +905.86500 +934.49119 +967.46381 +996.09000 +1019.37465 +1048.00084 +1063.20570 +1086.49035 +1115.11654 +1148.08916 +1171.37381 +2/1 +! +! ! prerankfour46b.scl +! Prerankfour46b 7-limit transversal +! 46 +! ! +! 81/80 +! 36/35 +! 25/24 +! 16/15 +! 27/25 +! 35/32 +! 10/9 +! 9/8 +! 8/7 +! 7/6 +! 189/160 +! 6/5 +! 175/144 +! 216/175 +! 5/4 +! 80/63 +! 9/7 +! 21/16 +! 4/3 +! 27/20 +! 48/35 +! 25/18 +! 45/32 +! 36/25 +! 35/24 +! 40/27 +! 3/2 +! 32/21 +! 54/35 +! 63/40 +! 8/5 +! 81/50 +! 105/64 +! 5/3 +! 27/16 +! 12/7 +! 7/4 +! 16/9 +! 9/5 +! 64/35 +! 50/27 +! 15/8 +! 40/21 +! 35/18 +! 63/32 +! 2/1 diff --git a/scales/rapoport_8.scl b/scales/rapoport_8.scl new file mode 100644 index 0000000..7fd5515 --- /dev/null +++ b/scales/rapoport_8.scl @@ -0,0 +1,13 @@ +! rapoport_8.scl +! +Paul Rapoport, cycle of 14/9 close to 8 out of 11-tET, XH 13, 1991 + 8 +! + 67228/59049 + 98/81 + 9/7 + 9604/6561 + 14/9 + 81/49 + 1372/729 + 2/1 diff --git a/scales/rast pentachord 11-limit.scl b/scales/rast pentachord 11-limit.scl new file mode 100644 index 0000000..1778ce5 --- /dev/null +++ b/scales/rast pentachord 11-limit.scl @@ -0,0 +1,9 @@ +! rast pentachord 11-limit.scl +! +Rast pentachord 72:81:88:96:108 + 4 +! + 9/8 + 11/9 + 4/3 + 3/2 diff --git a/scales/rast pentachord 31-limit.scl b/scales/rast pentachord 31-limit.scl new file mode 100644 index 0000000..dc178c7 --- /dev/null +++ b/scales/rast pentachord 31-limit.scl @@ -0,0 +1,9 @@ +! rast pentachord 31-limit.scl +! +Rast pentachord 600:675:744:800:900 + 4 +! + 9/8 + 31/25 + 4/3 + 3/2 diff --git a/scales/rast pentachord 5-limit.scl b/scales/rast pentachord 5-limit.scl new file mode 100644 index 0000000..ddb9459 --- /dev/null +++ b/scales/rast pentachord 5-limit.scl @@ -0,0 +1,9 @@ +! rast pentachord 5-limit.scl +! +Rast pentachord 600:675:744:800:900 + 4 +! + 9/8 + 5/4 + 4/3 + 3/2 diff --git a/scales/rast tetrachord 11-limit.scl b/scales/rast tetrachord 11-limit.scl new file mode 100644 index 0000000..cba0ab1 --- /dev/null +++ b/scales/rast tetrachord 11-limit.scl @@ -0,0 +1,8 @@ +! rast tetrachord 11-limit.scl +! +Rast tetrachord 72:81:88:96 + 3 +! + 9/8 + 11/9 + 4/3 diff --git a/scales/rast tetrachord 31-limit.scl b/scales/rast tetrachord 31-limit.scl new file mode 100644 index 0000000..ea53636 --- /dev/null +++ b/scales/rast tetrachord 31-limit.scl @@ -0,0 +1,8 @@ +! rast tetrachord 31-limit.scl +! +Rast tetrachord 600:675:744:800 + 3 +! + 9/8 + 31/25 + 4/3 diff --git a/scales/rast tetrachord 5-limit.scl b/scales/rast tetrachord 5-limit.scl new file mode 100644 index 0000000..bc962cb --- /dev/null +++ b/scales/rast tetrachord 5-limit.scl @@ -0,0 +1,8 @@ +! rast tetrachord 5-limit.scl +! +Rast tetrachord 24:27:30:32 + 3 +! + 9/8 + 5/4 + 4/3 diff --git a/scales/rast_7-limit.scl b/scales/rast_7-limit.scl new file mode 100644 index 0000000..f9e0589 --- /dev/null +++ b/scales/rast_7-limit.scl @@ -0,0 +1,12 @@ +! rast_7-limit.scl +! +7-limit diatonic Rast scale + 7 +! + 28/25 + 56/45 + 75/56 + 112/75 + 3136/1875 + 6272/3375 + 2/1 diff --git a/scales/rast_moha.scl b/scales/rast_moha.scl new file mode 100644 index 0000000..568460b --- /dev/null +++ b/scales/rast_moha.scl @@ -0,0 +1,12 @@ +! rast_moha.scl +! +Rast + Mohajira (Dudon) 4 + 3 + 3 Rast and 3 + 4 + 3 Mohajira tetrachords + 7 +! + 200.00000 + 350.00000 + 500.00000 + 700.00000 + 850.00000 + 1050.00000 + 2/1 diff --git a/scales/rat_dorenh.scl b/scales/rat_dorenh.scl new file mode 100644 index 0000000..1c191b3 --- /dev/null +++ b/scales/rat_dorenh.scl @@ -0,0 +1,12 @@ +! rat_dorenh.scl +! +Rationalized Schlesinger's Dorian Harmonia in the enharmonic genus + 7 +! + 44/43 + 22/21 + 11/8 + 11/7 + 8/5 + 44/27 + 2/1 diff --git a/scales/rat_hypodenh.scl b/scales/rat_hypodenh.scl new file mode 100644 index 0000000..4a9b6cd --- /dev/null +++ b/scales/rat_hypodenh.scl @@ -0,0 +1,12 @@ +! rat_hypodenh.scl +! +1+1 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian + 7 +! + 32/31 + 16/15 + 4/3 + 16/11 + 64/43 + 32/21 + 2/1 diff --git a/scales/rat_hypodenh2.scl b/scales/rat_hypodenh2.scl new file mode 100644 index 0000000..e4a2ca0 --- /dev/null +++ b/scales/rat_hypodenh2.scl @@ -0,0 +1,12 @@ +! rat_hypodenh2.scl +! +1+2 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian + 7 +! + 32/31 + 32/29 + 4/3 + 16/11 + 64/43 + 64/41 + 2/1 diff --git a/scales/rat_hypodenh3.scl b/scales/rat_hypodenh3.scl new file mode 100644 index 0000000..0efc407 --- /dev/null +++ b/scales/rat_hypodenh3.scl @@ -0,0 +1,12 @@ +! rat_hypodenh3.scl +! +1+3 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian + 7 +! + 32/31 + 8/7 + 4/3 + 16/11 + 64/43 + 8/5 + 2/1 diff --git a/scales/rat_hypodhex.scl b/scales/rat_hypodhex.scl new file mode 100644 index 0000000..984f4a1 --- /dev/null +++ b/scales/rat_hypodhex.scl @@ -0,0 +1,12 @@ +! rat_hypodhex.scl +! +1+1 rationalized hexachromatic/hexenharmonic genus derived from K.S.'Bastard' + 7 +! + 48/47 + 24/23 + 4/3 + 16/11 + 96/65 + 3/2 + 2/1 diff --git a/scales/rat_hypodhex2.scl b/scales/rat_hypodhex2.scl new file mode 100644 index 0000000..ba30a4c --- /dev/null +++ b/scales/rat_hypodhex2.scl @@ -0,0 +1,12 @@ +! RAT_HYPODHEX2.scl +! +1+2 rat. hexachromatic/hexenharmonic genus derived from K.S.'s 'Bastard' Hypodo + 7 +! + 48/47 + 16/15 + 4/3 + 16/11 + 96/65 + 32/21 + 2/1 diff --git a/scales/rat_hypodhex3.scl b/scales/rat_hypodhex3.scl new file mode 100644 index 0000000..2eee285 --- /dev/null +++ b/scales/rat_hypodhex3.scl @@ -0,0 +1,12 @@ +! RAT_HYPODHEX3.scl +! +1+3 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian + 7 +! + 48/47 + 12/11 + 4/3 + 16/11 + 96/65 + 48/31 + 2/1 diff --git a/scales/rat_hypodhex4.scl b/scales/rat_hypodhex4.scl new file mode 100644 index 0000000..ce64b8c --- /dev/null +++ b/scales/rat_hypodhex4.scl @@ -0,0 +1,12 @@ +! RAT_HYPODHEX4.scl +! +1+4 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian + 7 +! + 48/47 + 48/43 + 4/3 + 16/11 + 96/65 + 96/61 + 2/1 diff --git a/scales/rat_hypodhex5.scl b/scales/rat_hypodhex5.scl new file mode 100644 index 0000000..78e9eab --- /dev/null +++ b/scales/rat_hypodhex5.scl @@ -0,0 +1,12 @@ +! RAT_HYPODHEX5.scl +! +1+5 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian + 7 +! + 48/47 + 8/7 + 4/3 + 16/11 + 96/65 + 8/5 + 2/1 diff --git a/scales/rat_hypodhex6.scl b/scales/rat_hypodhex6.scl new file mode 100644 index 0000000..ee0fbce --- /dev/null +++ b/scales/rat_hypodhex6.scl @@ -0,0 +1,12 @@ +! RAT_HYPODHEX6.scl +! +2+3 rationalized hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' hypod + 7 +! + 24/23 + 48/43 + 4/3 + 16/11 + 3/2 + 96/61 + 2/1 diff --git a/scales/rat_hypodpen.scl b/scales/rat_hypodpen.scl new file mode 100644 index 0000000..3b3c6f3 --- /dev/null +++ b/scales/rat_hypodpen.scl @@ -0,0 +1,12 @@ +! RAT_HYPODpen.scl +! +1+1 rationalized pentachromatic/pentenharmonic genus derived from K.S.'s 'Bastar + 7 +! + 40/39 + 20/19 + 4/3 + 16/11 + 40/27 + 80/53 + 2/1 diff --git a/scales/rat_hypodpen2.scl b/scales/rat_hypodpen2.scl new file mode 100644 index 0000000..d28ebb9 --- /dev/null +++ b/scales/rat_hypodpen2.scl @@ -0,0 +1,12 @@ +! RAT_HYPODPEN2.scl +! +1+2 rationalized pentachromatic/pentenharmonic genus from K.S.'s 'Bastard' hyp + 7 +! + 40/39 + 40/37 + 4/3 + 16/11 + 40/27 + 20/13 + 2/1 diff --git a/scales/rat_hypodpen3.scl b/scales/rat_hypodpen3.scl new file mode 100644 index 0000000..8eebe62 --- /dev/null +++ b/scales/rat_hypodpen3.scl @@ -0,0 +1,12 @@ +! RAT_HYPODPEN3.scl +! +1+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian + 7 +! + 40/39 + 10/9 + 4/3 + 16/11 + 40/27 + 80/51 + 2/1 diff --git a/scales/rat_hypodpen4.scl b/scales/rat_hypodpen4.scl new file mode 100644 index 0000000..49f91fe --- /dev/null +++ b/scales/rat_hypodpen4.scl @@ -0,0 +1,12 @@ +! RAT_HYPODPEN4.scl +! +1+4 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian + 7 +! + 40/39 + 8/7 + 4/3 + 16/11 + 40/27 + 8/5 + 2/1 diff --git a/scales/rat_hypodpen5.scl b/scales/rat_hypodpen5.scl new file mode 100644 index 0000000..fe10f11 --- /dev/null +++ b/scales/rat_hypodpen5.scl @@ -0,0 +1,12 @@ +! RAT_HYPODPEN5.scl +! +2+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian + 7 +! + 20/19 + 10/9 + 4/3 + 16/11 + 80/53 + 80/51 + 2/1 diff --git a/scales/rat_hypodpen6.scl b/scales/rat_hypodpen6.scl new file mode 100644 index 0000000..4ebe6bc --- /dev/null +++ b/scales/rat_hypodpen6.scl @@ -0,0 +1,12 @@ +! RAT_HYPODPEN6.scl +! +2+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian + 7 +! + 40/39 + 8/7 + 4/3 + 16/11 + 80/53 + 8/5 + 2/1 diff --git a/scales/rat_hypodtri.scl b/scales/rat_hypodtri.scl new file mode 100644 index 0000000..8ae14d7 --- /dev/null +++ b/scales/rat_hypodtri.scl @@ -0,0 +1,12 @@ +! rat_hypodtri.scl +! +rationalized first (1+1) trichromatic genus derived from K.S.'s 'Bastard' hyp + 7 +! + 24/23 + 12/11 + 4/3 + 16/11 + 3/2 + 48/31 + 2/1 diff --git a/scales/rat_hypodtri2.scl b/scales/rat_hypodtri2.scl new file mode 100644 index 0000000..baf0109 --- /dev/null +++ b/scales/rat_hypodtri2.scl @@ -0,0 +1,12 @@ +! RAT_HYPODTRI2.scl +! +rationalized second (1+2) trichromatic genus derived from K.S.'s 'Bastard' hyp + 7 +! + 24/23 + 8/7 + 4/3 + 16/11 + 3/2 + 8/5 + 2/1 diff --git a/scales/rat_hypolenh.scl b/scales/rat_hypolenh.scl new file mode 100644 index 0000000..b24bf59 --- /dev/null +++ b/scales/rat_hypolenh.scl @@ -0,0 +1,13 @@ +! rat_hypolenh.scl +! +Rationalized Schlesinger's Hypolydian Harmonia in the enharmonic genus + 8 +! + 40/39 + 20/19 + 4/3 + 10/7 + 20/13 + 80/51 + 8/5 + 2/1 diff --git a/scales/rat_hypopchrom.scl b/scales/rat_hypopchrom.scl new file mode 100644 index 0000000..9e7cacd --- /dev/null +++ b/scales/rat_hypopchrom.scl @@ -0,0 +1,12 @@ +! rat_hypopchrom.scl +! +Rationalized Schlesinger's Hypophrygian Harmonia in the chromatic genus + 7 +! + 18/17 + 9/8 + 18/13 + 3/2 + 36/23 + 18/11 + 2/1 diff --git a/scales/rat_hypopenh.scl b/scales/rat_hypopenh.scl new file mode 100644 index 0000000..d427bcc --- /dev/null +++ b/scales/rat_hypopenh.scl @@ -0,0 +1,12 @@ +! rat_hypopenh.scl +! +Rationalized Schlesinger's Hypophrygian Harmonia in the enharmonic genus + 7 +! + 36/35 + 18/17 + 18/13 + 3/2 + 72/47 + 36/23 + 2/1 diff --git a/scales/rat_hypoppen.scl b/scales/rat_hypoppen.scl new file mode 100644 index 0000000..0357cb1 --- /dev/null +++ b/scales/rat_hypoppen.scl @@ -0,0 +1,12 @@ +! rat_hypoppen.scl +! +Rationalized Schlesinger's Hypophrygian Harmonia in the pentachromatic genus + 7 +! + 45/43 + 9/8 + 18/13 + 3/2 + 45/29 + 18/11 + 2/1 diff --git a/scales/rat_hypoptri.scl b/scales/rat_hypoptri.scl new file mode 100644 index 0000000..9967771 --- /dev/null +++ b/scales/rat_hypoptri.scl @@ -0,0 +1,12 @@ +! rat_hypoptri.scl +! +Rationalized Schlesinger's Hypophrygian Harmonia in first trichromatic genus + 7 +! + 27/26 + 27/25 + 18/13 + 3/2 + 54/35 + 27/17 + 2/1 diff --git a/scales/rat_hypoptri2.scl b/scales/rat_hypoptri2.scl new file mode 100644 index 0000000..fb25f78 --- /dev/null +++ b/scales/rat_hypoptri2.scl @@ -0,0 +1,12 @@ +! RAT_HYPOPTRI2.scl +! +Rationalized Schlesinger's Hypophrygian Harmonia in second trichromatic genus + 7 +! + 27/26 + 9/8 + 18/13 + 3/2 + 54/35 + 18/11 + 2/1 diff --git a/scales/rectsp10.scl b/scales/rectsp10.scl new file mode 100644 index 0000000..bebc3a4 --- /dev/null +++ b/scales/rectsp10.scl @@ -0,0 +1,37 @@ +! rectsp10.scl +! +Rectangle minimal beats spectrum of order 10 + 32 +! + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 13/10 + 4/3 + 11/8 + 7/5 + 10/7 + 13/9 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 5/3 + 17/10 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 15/8 + 17/9 + 19/10 + 2/1 diff --git a/scales/rectsp10a.scl b/scales/rectsp10a.scl new file mode 100644 index 0000000..f043d4b --- /dev/null +++ b/scales/rectsp10a.scl @@ -0,0 +1,50 @@ +! rectsp10a.scl +! +Rectangle minimal beats spectrum of order 10 union with inversion + 45 +! + 20/19 + 18/17 + 16/15 + 14/13 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 20/17 + 6/5 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 11/8 + 18/13 + 7/5 + 10/7 + 13/9 + 16/11 + 3/2 + 20/13 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 17/10 + 12/7 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 13/7 + 15/8 + 17/9 + 19/10 + 2/1 diff --git a/scales/rectsp11.scl b/scales/rectsp11.scl new file mode 100644 index 0000000..8938db3 --- /dev/null +++ b/scales/rectsp11.scl @@ -0,0 +1,47 @@ +! rectsp11.scl +! +Rectangle minimal beats spectrum of order 11 + 42 +! + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 15/11 + 11/8 + 7/5 + 10/7 + 13/9 + 16/11 + 3/2 + 17/11 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 17/10 + 12/7 + 19/11 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 13/7 + 15/8 + 17/9 + 19/10 + 21/11 + 2/1 diff --git a/scales/rectsp12.scl b/scales/rectsp12.scl new file mode 100644 index 0000000..f8acad7 --- /dev/null +++ b/scales/rectsp12.scl @@ -0,0 +1,51 @@ +! rectsp12.scl +! +Rectangle minimal beats spectrum of order 12 + 46 +! + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 7/6 + 13/11 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 15/11 + 11/8 + 7/5 + 17/12 + 10/7 + 13/9 + 16/11 + 3/2 + 17/11 + 14/9 + 11/7 + 19/12 + 8/5 + 13/8 + 18/11 + 5/3 + 17/10 + 12/7 + 19/11 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 13/7 + 15/8 + 17/9 + 19/10 + 21/11 + 23/12 + 2/1 diff --git a/scales/rectsp6.scl b/scales/rectsp6.scl new file mode 100644 index 0000000..38704c3 --- /dev/null +++ b/scales/rectsp6.scl @@ -0,0 +1,17 @@ +! rectsp6.scl +! +Rectangle minimal beats spectrum of order 6, also Songlines.DEM, Bill Thibault and Scott Gresham-Lancaster (1992) + 12 +! + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/rectsp6a.scl b/scales/rectsp6a.scl new file mode 100644 index 0000000..655cdb4 --- /dev/null +++ b/scales/rectsp6a.scl @@ -0,0 +1,22 @@ +! rectsp6a.scl +! +Rectangle minimal beats spectrum of order 6 union with inversion + 17 +! + 12/11 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 2/1 diff --git a/scales/rectsp7.scl b/scales/rectsp7.scl new file mode 100644 index 0000000..78d7964 --- /dev/null +++ b/scales/rectsp7.scl @@ -0,0 +1,23 @@ +! rectsp7.scl +! +Rectangle minimal beats spectrum of order 7 + 18 +! + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 2/1 diff --git a/scales/rectsp7a.scl b/scales/rectsp7a.scl new file mode 100644 index 0000000..65f4c5e --- /dev/null +++ b/scales/rectsp7a.scl @@ -0,0 +1,28 @@ +! rectsp7a.scl +! +Rectangle minimal beats spectrum of order 7 union with inversion + 23 +! + 14/13 + 12/11 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 14/11 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 11/7 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 2/1 diff --git a/scales/rectsp8.scl b/scales/rectsp8.scl new file mode 100644 index 0000000..4783f7e --- /dev/null +++ b/scales/rectsp8.scl @@ -0,0 +1,27 @@ +! rectsp8.scl +! +Rectangle minimal beats spectrum of order 8 + 22 +! + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 9/5 + 11/6 + 13/7 + 15/8 + 2/1 diff --git a/scales/rectsp8a.scl b/scales/rectsp8a.scl new file mode 100644 index 0000000..cd4c126 --- /dev/null +++ b/scales/rectsp8a.scl @@ -0,0 +1,36 @@ +! rectsp8a.scl +! +Rectangle minimal beats spectrum of order 8 union with inversion + 31 +! + 16/15 + 14/13 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 16/13 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 15/8 + 2/1 diff --git a/scales/rectsp9.scl b/scales/rectsp9.scl new file mode 100644 index 0000000..e3d2944 --- /dev/null +++ b/scales/rectsp9.scl @@ -0,0 +1,33 @@ +! rectsp9.scl +! +Rectangle minimal beats spectrum of order 9 + 28 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 5/4 + 9/7 + 4/3 + 11/8 + 7/5 + 10/7 + 13/9 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 15/8 + 17/9 + 2/1 diff --git a/scales/rectsp9a.scl b/scales/rectsp9a.scl new file mode 100644 index 0000000..aa79e6f --- /dev/null +++ b/scales/rectsp9a.scl @@ -0,0 +1,42 @@ +! rectsp9a.scl +! +Rectangle minimal beats spectrum of order 9 union with inversion + 37 +! + 18/17 + 16/15 + 14/13 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 11/9 + 16/13 + 5/4 + 14/11 + 9/7 + 4/3 + 11/8 + 18/13 + 7/5 + 10/7 + 13/9 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 18/11 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 13/7 + 15/8 + 17/9 + 2/1 diff --git a/scales/redfield.scl b/scales/redfield.scl new file mode 100644 index 0000000..dd26d31 --- /dev/null +++ b/scales/redfield.scl @@ -0,0 +1,12 @@ +! redfield.scl +! +John Redfield, New Diatonic Scale (1930), inverse of ptolemy_idiat.scl + 7 +! + 10/9 + 5/4 + 4/3 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/reinhard.scl b/scales/reinhard.scl new file mode 100644 index 0000000..6e7c94c --- /dev/null +++ b/scales/reinhard.scl @@ -0,0 +1,17 @@ +! reinhard.scl +! +Andreas Reinhard's Monochord (1604) (variant of Ganassi's). Also Abraham Bartolus (1614) + 12 +! + 18/17 + 9/8 + 45/38 + 5/4 + 4/3 + 24/17 + 3/2 + 30/19 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/reinhardj17.scl b/scales/reinhardj17.scl new file mode 100644 index 0000000..3c6599c --- /dev/null +++ b/scales/reinhardj17.scl @@ -0,0 +1,22 @@ +! reinhardj17.scl +! +Johnny Reinhard's Harmonic-17 tuning for "Tresspass" (1998) + 17 +! + 18/17 + 17/16 + 34/31 + 19/17 + 17/15 + 20/17 + 17/14 + 22/17 + 17/13 + 24/17 + 26/17 + 17/11 + 28/17 + 17/10 + 31/17 + 32/17 + 2/1 diff --git a/scales/renteng1.scl b/scales/renteng1.scl new file mode 100644 index 0000000..f766476 --- /dev/null +++ b/scales/renteng1.scl @@ -0,0 +1,10 @@ +! renteng1.scl +! +Gamelan Renteng from Chileunyi (Tg. Sari). 1/1=330 Hz + 5 +! + 12/11 + 311.264 cents + 698.454 cents + 846.168 cents + 2/1 diff --git a/scales/renteng2.scl b/scales/renteng2.scl new file mode 100644 index 0000000..70e75bc --- /dev/null +++ b/scales/renteng2.scl @@ -0,0 +1,10 @@ +! renteng2.scl +! +Gamelan Renteng from Chikebo (Tg. Sari). 1/1=360 Hz + 5 +! + 9/8 + 303.577 cents + 717.911 cents + 843.485 cents + 2/1 diff --git a/scales/renteng3.scl b/scales/renteng3.scl new file mode 100644 index 0000000..651f5e5 --- /dev/null +++ b/scales/renteng3.scl @@ -0,0 +1,11 @@ +! renteng3.scl +! +Gamelan Renteng from Lebakwangi (Pameungpeuk). 1/1=377 Hz + 6 +! + 111.157 cents + 310.275 cents + 644.372 cents + 775.381 cents + 1008.388 cents + 2/1 diff --git a/scales/renteng4.scl b/scales/renteng4.scl new file mode 100644 index 0000000..f540f4e --- /dev/null +++ b/scales/renteng4.scl @@ -0,0 +1,10 @@ +! renteng4.scl +! +Gamelan Renteng Bale` bandung from Kanoman (Cheribon). 1/1=338 Hz + 5 +! + 216.385 cents + 304.508 cents + 722.323 cents + 836.583 cents + 2/1 diff --git a/scales/riccati.scl b/scales/riccati.scl new file mode 100644 index 0000000..7116d11 --- /dev/null +++ b/scales/riccati.scl @@ -0,0 +1,17 @@ +! riccati.scl +! +Giordano Riccati, Venetian temperament, Barbieri, 1986 + 12 +! + 91.85286 + 196.74124 + 301.62959 + 393.48248 + 501.62935 + 591.85298 + 698.37062 + 791.85275 + 895.11186 + 1001.62947 + 1091.85310 + 2/1 diff --git a/scales/riemann.scl b/scales/riemann.scl new file mode 100644 index 0000000..1d3ab18 --- /dev/null +++ b/scales/riemann.scl @@ -0,0 +1,34 @@ +! riemann.scl +! +Imaginary part of zeroes of the Riemann Zeta function + 29 +! + 4585.40631 + 5272.59690 + 5573.37915 + 5912.61538 + 6049.86281 + 6278.55639 + 6425.62689 + 6524.63626 + 6702.14077 + 6764.77868 + 6872.53483 + 6982.56693 + 7069.32512 + 7112.10394 + 7229.83632 + 7281.36805 + 7343.88476 + 7405.52405 + 7490.77295 + 7523.39731 + 7571.91451 + 7648.17701 + 7685.87339 + 7739.97422 + 7767.16295 + 7837.50613 + 7877.46130 + 7899.62049 + 7952.27348 diff --git a/scales/riley_albion.scl b/scales/riley_albion.scl new file mode 100644 index 0000000..5beec0f --- /dev/null +++ b/scales/riley_albion.scl @@ -0,0 +1,17 @@ +! riley_albion.scl +! +Terry Riley's Harp of New Albion scale, inverse Malcolm's Monochord, 1/1 on C# + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/riley_rosary.scl b/scales/riley_rosary.scl new file mode 100644 index 0000000..af68f65 --- /dev/null +++ b/scales/riley_rosary.scl @@ -0,0 +1,17 @@ +! riley_rosary.scl +! +Terry Riley, tuning for Cactus Rosary (1993) + 12 +! + 49/48 + 9/8 + 7/6 + 5/4 + 21/16 + 11/8 + 3/2 + 49/32 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/robot_dead.scl b/scales/robot_dead.scl new file mode 100644 index 0000000..ad34d45 --- /dev/null +++ b/scales/robot_dead.scl @@ -0,0 +1,17 @@ +! robot_dead.scl +! +Dead Robot (see lattice) + 12 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/robot_live.scl b/scales/robot_live.scl new file mode 100644 index 0000000..94d2da1 --- /dev/null +++ b/scales/robot_live.scl @@ -0,0 +1,17 @@ +! robot_live.scl +! +Live Robot + 12 +! + 9/8 + 6/5 + 5/4 + 32/25 + 4/3 + 36/25 + 3/2 + 8/5 + 128/75 + 15/8 + 48/25 + 2/1 diff --git a/scales/rodan26opt.scl b/scales/rodan26opt.scl new file mode 100644 index 0000000..9a6ad01 --- /dev/null +++ b/scales/rodan26opt.scl @@ -0,0 +1,30 @@ +! rodan26opt.scl +Rodan[26] 13-limit 5 cents lesfip optimized + 26 +! +29.06175 +152.51210 +180.52990 +208.84186 +233.75208 +262.95258 +386.79098 +414.78377 +444.47024 +467.92065 +497.60712 +525.59991 +649.43831 +678.63882 +703.54903 +731.86099 +759.87879 +883.32914 +912.39089 +938.87987 +966.05891 +995.02774 +1117.36315 +1146.33198 +1173.51102 +2/1 diff --git a/scales/rodan31opt.scl b/scales/rodan31opt.scl new file mode 100644 index 0000000..294ebc8 --- /dev/null +++ b/scales/rodan31opt.scl @@ -0,0 +1,35 @@ +! rodan31opt.scl +Rodan[31] 13-limit 6 cents lesfip optimized + 31 +! +95.6695 +124.038 +150.9566 +178.3229 +205.8857 +234.4243 +329.9162 +358.6095 +385.5754 +412.8647 +440.0470 +468.8797 +564.2187 +593.0514 +620.2337 +647.5230 +674.4889 +703.1822 +798.6741 +827.2127 +854.7755 +882.1418 +909.0604 +937.4289 +1033.0984 +1061.2150 +1089.4016 +1116.5492 +1143.6968 +1171.8834 +2/1 diff --git a/scales/rogers_7.scl b/scales/rogers_7.scl new file mode 100644 index 0000000..dbdd27f --- /dev/null +++ b/scales/rogers_7.scl @@ -0,0 +1,12 @@ +! rogers_7.scl +! +Prent Rogers, scale of Serenade for Alto Flute nr.10 + 7 +! + 8/7 + 9/7 + 10/7 + 3/2 + 12/7 + 27/14 + 2/1 diff --git a/scales/romieu.scl b/scales/romieu.scl new file mode 100644 index 0000000..9be0bf9 --- /dev/null +++ b/scales/romieu.scl @@ -0,0 +1,17 @@ +! romieu.scl +! +Romieu's Monochord, Mmoire thorique & pratique (1758) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/romieu_inv.scl b/scales/romieu_inv.scl new file mode 100644 index 0000000..77a0551 --- /dev/null +++ b/scales/romieu_inv.scl @@ -0,0 +1,17 @@ +! romieu_inv.scl +! +Romieu inverted, Pure (just) C minor in Wilkinson: Tuning In + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/rosati_21.scl b/scales/rosati_21.scl new file mode 100644 index 0000000..833c385 --- /dev/null +++ b/scales/rosati_21.scl @@ -0,0 +1,26 @@ +! rosati_21.scl +! +Dante Rosati, JI guitar tuning + 21 +! + 16/15 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/rosati_21a.scl b/scales/rosati_21a.scl new file mode 100644 index 0000000..36854f4 --- /dev/null +++ b/scales/rosati_21a.scl @@ -0,0 +1,26 @@ +! rosati_21A.scl +! +Alternative version of rosati_21 with more tetrads + 21 +! + 15/14 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 28/15 + 2/1 diff --git a/scales/rosati_21m.scl b/scales/rosati_21m.scl new file mode 100644 index 0000000..fbaf8f6 --- /dev/null +++ b/scales/rosati_21m.scl @@ -0,0 +1,26 @@ +! rosati_21m.scl +! +1/4-kleismic marvel tempering of rosati_21.scl + 21 +! + 115.58705 + 184.33159 + 200.05424 + 8/7 + 268.79879 + 6/5 + 384.38583 + 431.22833 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 768.77167 + 815.61417 + 5/3 + 931.20121 + 7/4 + 999.94576 + 1015.66841 + 1084.41295 + 2/1 diff --git a/scales/rousseau.scl b/scales/rousseau.scl new file mode 100644 index 0000000..2ee52d0 --- /dev/null +++ b/scales/rousseau.scl @@ -0,0 +1,17 @@ +! rousseau.scl +! +Rousseau's Monochord, Dictionnaire de musique (1768) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/rousseau2.scl b/scales/rousseau2.scl new file mode 100644 index 0000000..a102bfe --- /dev/null +++ b/scales/rousseau2.scl @@ -0,0 +1,17 @@ +! rousseau2.scl +! +Standard French temperament Rousseau-2, C. di Veroli + 12 +! + 81.42557 + 193.15686 + 287.58466 + 5/4 + 4/3 + 581.26276 + 696.57843 + 783.38057 + 889.73529 + 993.84092 + 1082.89214 + 2/1 diff --git a/scales/rousseau3.scl b/scales/rousseau3.scl new file mode 100644 index 0000000..f42fc51 --- /dev/null +++ b/scales/rousseau3.scl @@ -0,0 +1,17 @@ +! rousseau3.scl +! +Standard French temperament Rousseau-3, C. di Veroli, 2002 + 12 +! + 81.42557 + 193.15686 + 288.83919 + 5/4 + 4/3 + 579.47057 + 696.57843 + 783.38057 + 889.73529 + 994.29781 + 1082.89214 + 2/1 diff --git a/scales/rousseau4.scl b/scales/rousseau4.scl new file mode 100644 index 0000000..a46768a --- /dev/null +++ b/scales/rousseau4.scl @@ -0,0 +1,17 @@ +! rousseau4.scl +! +Standard French temperament Rousseau-4, C. di Veroli + 12 +! + 81.42557 + 193.15686 + 287.58466 + 5/4 + 4/3 + 579.47057 + 696.57843 + 783.38057 + 889.73529 + 993.84092 + 1082.89214 + 2/1 diff --git a/scales/rousseauk.scl b/scales/rousseauk.scl new file mode 100644 index 0000000..4c39255 --- /dev/null +++ b/scales/rousseauk.scl @@ -0,0 +1,17 @@ +! rousseauk.scl +! +Kami Rousseau's 7-limit tri-blues scale + 12 +! + 21/20 + 9/8 + 7/6 + 21/16 + 4/3 + 7/5 + 3/2 + 14/9 + 7/4 + 16/9 + 28/15 + 2/1 diff --git a/scales/rousseauw.scl b/scales/rousseauw.scl new file mode 100644 index 0000000..9537444 --- /dev/null +++ b/scales/rousseauw.scl @@ -0,0 +1,17 @@ +! rousseauw.scl +! +Jean-Jacques Rousseau's temperament (1768) + 12 +! + 97.71224 + 197.92021 + 300.12482 + 395.84043 + 500.54075 + 596.25638 + 698.96011 + 799.16809 + 896.88032 + 1000.58234 + 1094.80053 + 2/1 diff --git a/scales/rsr_12.scl b/scales/rsr_12.scl new file mode 100644 index 0000000..98914e5 --- /dev/null +++ b/scales/rsr_12.scl @@ -0,0 +1,17 @@ +! rsr_12.scl +! +RSR - 7 limit JI + 12 +! + 16/15 + 8/7 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/rvf1.scl b/scales/rvf1.scl new file mode 100644 index 0000000..e1d2da8 --- /dev/null +++ b/scales/rvf1.scl @@ -0,0 +1,24 @@ +! rvf1.scl +! +RVF-1: D-A 695 cents, the increment is 0.25 cents, interval range 49.5 to 75.5 + 19 +! + 68.25000 + 118.75000 + 190.75000 + 261.00000 + 312.00000 + 381.00000 + 454.75000 + 504.25000 + 572.25000 + 621.75000 + 695.50000 + 764.50000 + 815.50000 + 885.75000 + 957.75000 + 1008.25000 + 1076.50000 + 1152.00000 + 2/1 diff --git a/scales/rvf2.scl b/scales/rvf2.scl new file mode 100644 index 0000000..01f64f9 --- /dev/null +++ b/scales/rvf2.scl @@ -0,0 +1,24 @@ +! rvf2.scl +! +RVF-2: 695 cents, 0.607 cents, 31-90 cents, C-A# is 7/4. + 19 +! + 72.90000 + 109.80000 + 191.80000 + 269.60000 + 307.70000 + 382.40000 + 468.70000 + 503.20000 + 575.50000 + 610.00000 + 696.20000 + 770.90000 + 809.10000 + 886.80000 + 968.80000 + 1005.70000 + 1078.60000 + 1169.10000 + 2/1 diff --git a/scales/rvf3.scl b/scales/rvf3.scl new file mode 100644 index 0000000..d5faba5 --- /dev/null +++ b/scales/rvf3.scl @@ -0,0 +1,24 @@ +! rvf3.scl +! +RVF-3: 694.737, 0.082, 25-97, the fifth E#-B# is 3/2. + 19 +! + 73.60000 + 106.30000 + 191.90000 + 271.90000 + 306.20000 + 382.20000 + 473.40000 + 502.90000 + 575.60000 + 605.10000 + 696.30000 + 772.30000 + 806.60000 + 886.60000 + 972.20000 + 1004.90000 + 1078.50000 + 1175.30000 + 2/1 diff --git a/scales/rvf4.scl b/scales/rvf4.scl new file mode 100644 index 0000000..a87f3a1 --- /dev/null +++ b/scales/rvf4.scl @@ -0,0 +1,17 @@ +! rvf4.scl +! +697-703 cents, increments of 1 cent + 12 +! + 92.00000 + 197.00000 + 297.00000 + 392.00000 + 500.00000 + 591.00000 + 699.00000 + 794.00000 + 894.00000 + 999.00000 + 1091.00000 + 2/1 diff --git a/scales/rvfj_12.scl b/scales/rvfj_12.scl new file mode 100644 index 0000000..945a6f9 --- /dev/null +++ b/scales/rvfj_12.scl @@ -0,0 +1,17 @@ +! rvfj_12.scl +! +Regularly varied fifths well temperament with just fifth. Op de Coul (2007) + 12 +! + 93.77954 + 196.44545 + 295.20136 + 394.31272 + 4/3 + 593.60182 + 698.04500 + 794.31272 + 895.20136 + 996.44545 + 1093.77954 + 2/1 diff --git a/scales/saba pentachord 13-limit a.scl b/scales/saba pentachord 13-limit a.scl new file mode 100644 index 0000000..752cb89 --- /dev/null +++ b/scales/saba pentachord 13-limit a.scl @@ -0,0 +1,9 @@ +! saba pentachord 13-limit a.scl +! +Saba pentachord 10:11:12:13:15 + 4 +! + 11/10 + 6/5 + 13/10 + 3/2 diff --git a/scales/saba pentachord 13-limit b.scl b/scales/saba pentachord 13-limit b.scl new file mode 100644 index 0000000..9ba2431 --- /dev/null +++ b/scales/saba pentachord 13-limit b.scl @@ -0,0 +1,9 @@ +! saba pentachord 13-limit b.scl +! +Saba pentachord 22:24:26:28:33 + 4 +! + 12/11 + 13/11 + 14/11 + 3/2 diff --git a/scales/saba pentachord 19-limit.scl b/scales/saba pentachord 19-limit.scl new file mode 100644 index 0000000..b98b279 --- /dev/null +++ b/scales/saba pentachord 19-limit.scl @@ -0,0 +1,10 @@ +! saba pentachord 19-limit.scl +! +Saba pentachord 44:48:52:56:57:66 + 5 +! + 12/11 + 13/11 + 14/11 + 57/44 + 3/2 diff --git a/scales/saba pentachord 23-limit a+b.scl b/scales/saba pentachord 23-limit a+b.scl new file mode 100644 index 0000000..f120250 --- /dev/null +++ b/scales/saba pentachord 23-limit a+b.scl @@ -0,0 +1,10 @@ +! saba pentachord 23-limit a+b.scl +! +Saba pentachord 42:46:50:54:55:63 + 5 +! + 23/21 + 25/21 + 9/7 + 55/42 + 3/2 diff --git a/scales/saba pentachord 23-limit a.scl b/scales/saba pentachord 23-limit a.scl new file mode 100644 index 0000000..1e18915 --- /dev/null +++ b/scales/saba pentachord 23-limit a.scl @@ -0,0 +1,9 @@ +! saba pentachord 23-limit a.scl +! +Saba pentachord 42:46:50:54:63 + 4 +! + 23/21 + 25/21 + 9/7 + 3/2 diff --git a/scales/saba pentachord 23-limit b.scl b/scales/saba pentachord 23-limit b.scl new file mode 100644 index 0000000..ab17707 --- /dev/null +++ b/scales/saba pentachord 23-limit b.scl @@ -0,0 +1,9 @@ +! saba pentachord 23-limit b.scl +! +Saba pentachord 42:46:50:55:63 + 4 +! + 23/21 + 25/21 + 55/42 + 3/2 diff --git a/scales/saba pentachord 31-limit.scl b/scales/saba pentachord 31-limit.scl new file mode 100644 index 0000000..7530f78 --- /dev/null +++ b/scales/saba pentachord 31-limit.scl @@ -0,0 +1,10 @@ +! saba pentachord 31-limit.scl +! +Saba pentachord 96:105:114:124:126:144 + 5 +! + 35/32 + 19/16 + 31/24 + 21/16 + 3/2 diff --git a/scales/saba_sup.scl b/scales/saba_sup.scl new file mode 100644 index 0000000..caa689c --- /dev/null +++ b/scales/saba_sup.scl @@ -0,0 +1,13 @@ +! saba_sup.scl +! +Superparticular version of maqam Sab + 8 +! + 11/10 + 6/5 + 5/4 + 3/2 + 8/5 + 9/5 + 19/10 + 2/1 diff --git a/scales/sabbagh.scl b/scales/sabbagh.scl new file mode 100644 index 0000000..ca0e4f6 --- /dev/null +++ b/scales/sabbagh.scl @@ -0,0 +1,12 @@ +! sabbagh.scl +! +Tawfiq al-Sabbagh, a composer from Syria. 1/1=G + 7 +! + 203.77358 + 356.60377 + 498.11321 + 701.88679 + 854.71698 + 996.22642 + 2/1 diff --git a/scales/sabbagh2.scl b/scales/sabbagh2.scl new file mode 100644 index 0000000..7a9456d --- /dev/null +++ b/scales/sabbagh2.scl @@ -0,0 +1,29 @@ +! sabbagh2.scl +! +Tawfiq al-Sabbagh, Arabic master musical scale in 53-tET (1954) + 24 +! + 90.56604 + 113.20755 + 158.49057 + 203.77358 + 294.33962 + 316.98113 + 362.26415 + 384.90566 + 407.54717 + 498.11321 + 566.03774 + 588.67925 + 611.32075 + 701.88679 + 792.45283 + 815.09434 + 860.37736 + 905.66038 + 996.22642 + 1018.86792 + 1064.15094 + 1086.79245 + 1109.43396 + 2/1 diff --git a/scales/safi_arabic.scl b/scales/safi_arabic.scl new file mode 100644 index 0000000..9a59508 --- /dev/null +++ b/scales/safi_arabic.scl @@ -0,0 +1,22 @@ +! safi_arabic.scl +! +Arabic 17-tone Pythagorean mode, Safiyuddn Al-Urmaw (Safi al-Din) + 17 +! + 256/243 + 65536/59049 + 9/8 + 32/27 + 8192/6561 + 81/64 + 4/3 + 1024/729 + 262144/177147 + 3/2 + 128/81 + 32768/19683 + 27/16 + 16/9 + 4096/2187 + 1048576/531441 + 2/1 diff --git a/scales/safi_arabic_s.scl b/scales/safi_arabic_s.scl new file mode 100644 index 0000000..cab3f8f --- /dev/null +++ b/scales/safi_arabic_s.scl @@ -0,0 +1,22 @@ +! safi_arabic_s.scl +! +Schismatically altered Arabic 17-tone Pythagorean mode + 17 +! + 256/243 + 10/9 + 9/8 + 32/27 + 5/4 + 81/64 + 4/3 + 45/32 + 40/27 + 3/2 + 128/81 + 5/3 + 27/16 + 16/9 + 15/8 + 160/81 + 2/1 diff --git a/scales/safi_buzurk.scl b/scales/safi_buzurk.scl new file mode 100644 index 0000000..daf3a66 --- /dev/null +++ b/scales/safi_buzurk.scl @@ -0,0 +1,10 @@ +! safi_buzurk.scl +! +Buzurk genus by Safi al-Din Urmavi + 5 +! + 23/22 + 9/8 + 39/32 + 39/28 + 3/2 diff --git a/scales/safi_diat.scl b/scales/safi_diat.scl new file mode 100644 index 0000000..27b1008 --- /dev/null +++ b/scales/safi_diat.scl @@ -0,0 +1,12 @@ +! safi_diat.scl +! +Safi al-Din's Diatonic, also the strong form of Avicenna's 8/7 diatonic + 7 +! + 19/18 + 7/6 + 4/3 + 3/2 + 19/12 + 7/4 + 2/1 diff --git a/scales/safi_diat2.scl b/scales/safi_diat2.scl new file mode 100644 index 0000000..fb15b26 --- /dev/null +++ b/scales/safi_diat2.scl @@ -0,0 +1,12 @@ +! safi_diat2.scl +! +Safi al-Din's 2nd Diatonic, a 3/4 tone diatonic like Ptolemy's Equable Diatonic + 7 +! + 64/59 + 32/27 + 4/3 + 3/2 + 96/59 + 16/9 + 2/1 diff --git a/scales/safi_isfahan.scl b/scales/safi_isfahan.scl new file mode 100644 index 0000000..79b755b --- /dev/null +++ b/scales/safi_isfahan.scl @@ -0,0 +1,9 @@ +! safi_isfahan.scl +! +Isfahan genus by Safi al-Din Urmavi + 4 +! + 13/12 + 7/6 + 91/72 + 4/3 diff --git a/scales/safi_isfahan2.scl b/scales/safi_isfahan2.scl new file mode 100644 index 0000000..5743612 --- /dev/null +++ b/scales/safi_isfahan2.scl @@ -0,0 +1,9 @@ +! safi_isfahan2.scl +! +Alternative Isfahan genus by Safi al-Din Urmavi + 4 +! + 13/12 + 7/6 + 5/4 + 4/3 diff --git a/scales/safi_major.scl b/scales/safi_major.scl new file mode 100644 index 0000000..ac04ea7 --- /dev/null +++ b/scales/safi_major.scl @@ -0,0 +1,11 @@ +! safi_major.scl +! +Singular Major (DF #6), from Safi al-Din, strong 32/27 chromatic + 6 +! + 14/13 + 16/13 + 4/3 + 56/39 + 3/2 + 2/1 diff --git a/scales/safi_rahevi.scl b/scales/safi_rahevi.scl new file mode 100644 index 0000000..1d16570 --- /dev/null +++ b/scales/safi_rahevi.scl @@ -0,0 +1,8 @@ +! safi_rahevi.scl +! +Rahevi genus by Safi al-Din Urmavi + 3 +! + 13/12 + 7/6 + 5/4 diff --git a/scales/safi_unnamed1.scl b/scales/safi_unnamed1.scl new file mode 100644 index 0000000..5111587 --- /dev/null +++ b/scales/safi_unnamed1.scl @@ -0,0 +1,10 @@ +! safi_unnamed1.scl +! +Unnamed genus by Safi al-Din Urmavi (Ferahnak-like) + 5 +! + 16/15 + 32/27 + 4/3 + 18/13 + 3/2 diff --git a/scales/safi_unnamed2.scl b/scales/safi_unnamed2.scl new file mode 100644 index 0000000..528edca --- /dev/null +++ b/scales/safi_unnamed2.scl @@ -0,0 +1,10 @@ +! safi_unnamed2.scl +! +Unnamed genus by Safi al-Din Urmavi (Ushshaq-like) + 5 +! + 13/12 + 7/6 + 4/3 + 18/13 + 3/2 diff --git a/scales/safi_unnamed3.scl b/scales/safi_unnamed3.scl new file mode 100644 index 0000000..9c7ddff --- /dev/null +++ b/scales/safi_unnamed3.scl @@ -0,0 +1,10 @@ +! safi_unnamed3.scl +! +Unnamed genus by Safi al-Din Urmavi (Karjighar-like) + 5 +! + 14/13 + 7/6 + 4/3 + 18/13 + 3/2 diff --git a/scales/safi_unnamed4.scl b/scales/safi_unnamed4.scl new file mode 100644 index 0000000..7f5cdf2 --- /dev/null +++ b/scales/safi_unnamed4.scl @@ -0,0 +1,10 @@ +! safi_unnamed4.scl +! +Unnamed genus by Safi al-Din Urmavi (Saba/Rast-like) + 5 +! + 8/7 + 26/21 + 4/3 + 18/13 + 3/2 diff --git a/scales/safi_zirefkend-i.scl b/scales/safi_zirefkend-i.scl new file mode 100644 index 0000000..0f06e70 --- /dev/null +++ b/scales/safi_zirefkend-i.scl @@ -0,0 +1,10 @@ +! safi_zirefkend-i.scl +! +Zirefkend-i Koutchek genus by Safi al-Din Urmavi + 5 +! + 10/9 + 5/4 + 9/7 + 39/28 + 3/2 diff --git a/scales/safi_zirefkend.scl b/scales/safi_zirefkend.scl new file mode 100644 index 0000000..ea73b2a --- /dev/null +++ b/scales/safi_zirefkend.scl @@ -0,0 +1,9 @@ +! safi_zirefkend.scl +! +Zirefkend genus by Safi al-Din Urmavi + 4 +! + 10/9 + 9/7 + 39/28 + 3/2 diff --git a/scales/safi_zirefkend2.scl b/scales/safi_zirefkend2.scl new file mode 100644 index 0000000..351d710 --- /dev/null +++ b/scales/safi_zirefkend2.scl @@ -0,0 +1,11 @@ +! safi_zirefkend2.scl +! +Zirefkend genus by Safi al-Din Urmavi that confirms with the 17-tone Edvar on Zirefkend + 6 +! + 10/9 + 6/5 + 5/4 + 9/7 + 39/28 + 3/2 diff --git a/scales/safiyuddin_actual_buzurg.scl b/scales/safiyuddin_actual_buzurg.scl new file mode 100644 index 0000000..0491ed1 --- /dev/null +++ b/scales/safiyuddin_actual_buzurg.scl @@ -0,0 +1,13 @@ +! safiyuddin_actual_buzurg.scl +! +Actual Buzurg by Safi al-Din Urmavi in Risala al-Sharafiyyah according to Dr. Oz. + 8 +! + 14/13 + 16/13 + 4/3 + 56/39 + 3/2 + 27/16 + 15/8 + 2/1 diff --git a/scales/safiyuddin_actual_isfahan.scl b/scales/safiyuddin_actual_isfahan.scl new file mode 100644 index 0000000..d25885d --- /dev/null +++ b/scales/safiyuddin_actual_isfahan.scl @@ -0,0 +1,13 @@ +! safiyuddin_actual_isfahan.scl +! +Actual Isfahan on 3/2 by Safi al-Din Urmavi in Risala al-Sharafiyyah according to Dr. Oz. + 8 +! + 9/8 + 39/32 + 4/3 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/safiyuddin_actual_rahavi.scl b/scales/safiyuddin_actual_rahavi.scl new file mode 100644 index 0000000..77c7e53 --- /dev/null +++ b/scales/safiyuddin_actual_rahavi.scl @@ -0,0 +1,12 @@ +! safiyuddin_actual_rahavi.scl +! +Actual Rahavi on 16/13 by Safi al-Din Urmavi in Risala al-Sharafiyyah according to Dr. Oz. + 7 +! + 13/12 + 16/13 + 4/3 + 56/39 + 20/13 + 16/9 + 2/1 diff --git a/scales/safiyuddin_actual_zirefkend_octavedgenus.scl b/scales/safiyuddin_actual_zirefkend_octavedgenus.scl new file mode 100644 index 0000000..5135539 --- /dev/null +++ b/scales/safiyuddin_actual_zirefkend_octavedgenus.scl @@ -0,0 +1,13 @@ +! safiyuddin_actual_zirefkend_octavedgenus.scl +! +Actual Zirefkend by Safi al-Din Urmavi in Risala al-Sharafiyyah according to Dr. Oz. + 8 +! + 14/13 + 7/6 + 6/5 + 27/20 + 3/2 + 21/13 + 9/5 + 2/1 diff --git a/scales/safiyuddin_udfretratios.scl b/scales/safiyuddin_udfretratios.scl new file mode 100644 index 0000000..055c9bd --- /dev/null +++ b/scales/safiyuddin_udfretratios.scl @@ -0,0 +1,26 @@ +! safiyuddin_udfretratios.scl +! +Two conjunct tetrachords in an octave from Ud fret ratios by Safi al-Din Urmavi + 21 +! + 256/243 + 18/17 + 162/149 + 54/49 + 9/8 + 32/27 + 81/68 + 27/22 + 81/64 + 4/3 + 1024/243 + 72/17 + 648/149 + 216/49 + 9/2 + 128/27 + 81/17 + 54/11 + 81/16 + 16/3 + 2/1 diff --git a/scales/salinas_19.scl b/scales/salinas_19.scl new file mode 100644 index 0000000..d34826b --- /dev/null +++ b/scales/salinas_19.scl @@ -0,0 +1,24 @@ +! salinas_19.scl +! +Salinas' enharmonic tuning for his 19-tone instr. "instrumentum imperfectum" + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 16/9 + 15/8 + 125/64 + 2/1 diff --git a/scales/salinas_24.scl b/scales/salinas_24.scl new file mode 100644 index 0000000..3559ea2 --- /dev/null +++ b/scales/salinas_24.scl @@ -0,0 +1,29 @@ +! salinas_24.scl +! +Salinas enharmonic system "instrumentum perfectum". Subset of Mersenne + 24 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 125/96 + 4/3 + 25/18 + 45/32 + 64/45 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 125/72 + 225/128 + 16/9 + 9/5 + 15/8 + 125/64 + 2/1 diff --git a/scales/salinas_enh.scl b/scales/salinas_enh.scl new file mode 100644 index 0000000..ef5eaf1 --- /dev/null +++ b/scales/salinas_enh.scl @@ -0,0 +1,12 @@ +! salinas_enh.scl +! +Salinas's and Euler's enharmonic + 7 +! + 25/24 + 16/15 + 4/3 + 3/2 + 25/16 + 8/5 + 2/1 diff --git a/scales/salunding.scl b/scales/salunding.scl new file mode 100644 index 0000000..4574b36 --- /dev/null +++ b/scales/salunding.scl @@ -0,0 +1,10 @@ +! salunding.scl +! +Gamelan slunding, Kengetan, South-Bali. 1/1=378 Hz + 5 +! + 132.220 + 297.995 + 692.771 + 817.118 + 2/1 diff --git a/scales/samad_oghab_dokhtaramme_zurnascale.scl b/scales/samad_oghab_dokhtaramme_zurnascale.scl new file mode 100644 index 0000000..e9ba874 --- /dev/null +++ b/scales/samad_oghab_dokhtaramme_zurnascale.scl @@ -0,0 +1,17 @@ +! samad_oghab_dokhtaramme_zurnascale.scl +! +Ushshaq-like Zurna scale on A from Dokhtar Amme sang by Samad Oghab + 12 +! + 25/22 + 27/22 + 41/33 + 111/88 + 57/44 + 29/22 + 46/33 + 3/2 + 37/22 + 81/44 + 41/22 + 2/1 diff --git a/scales/sankey.scl b/scales/sankey.scl new file mode 100644 index 0000000..7a1f4c2 --- /dev/null +++ b/scales/sankey.scl @@ -0,0 +1,17 @@ +! sankey.scl +! +John Sankey's Scarlatti tuning, personal evaluation based on d'Alembert's + 12 +! + 85.60000 + 193.40000 + 291.40000 + 5/4 + 4/3 + 584.70000 + 696.70000 + 787.50000 + 888.70000 + 994.90000 + 4096/2187 + 2/1 diff --git a/scales/santur1.scl b/scales/santur1.scl new file mode 100644 index 0000000..9f7647a --- /dev/null +++ b/scales/santur1.scl @@ -0,0 +1,13 @@ +! santur1.scl +! +Persian santur tuning. 1/1=E + 8 +! + 129.99971 + 345.00000 + 490.00034 + 630.00051 + 849.99952 + 1034.99975 + 1137.00011 + 2/1 diff --git a/scales/santur2.scl b/scales/santur2.scl new file mode 100644 index 0000000..5381b1b --- /dev/null +++ b/scales/santur2.scl @@ -0,0 +1,13 @@ +! santur2.scl +! +Persian santur tuning. 1/1=E + 8 +! + 125.00000 + 335.00000 + 480.00000 + 625.00000 + 835.00000 + 1034.99975 + 1115.00000 + 2/1 diff --git a/scales/sanza.scl b/scales/sanza.scl new file mode 100644 index 0000000..572cdd5 --- /dev/null +++ b/scales/sanza.scl @@ -0,0 +1,13 @@ +! sanza.scl +! +African N'Gundi Sanza (idiophone; set of lamellas, thumb-plucked) + 8 +! + 197.000 + 288.000 + 485.000 + 692.000 + 986.000 + 1204.000 + 1423.000 + 1494.000 diff --git a/scales/sanza2.scl b/scales/sanza2.scl new file mode 100644 index 0000000..f6d8def --- /dev/null +++ b/scales/sanza2.scl @@ -0,0 +1,12 @@ +! sanza2.scl +! +African Baduma Sanza (idiophone, like mbira) + 7 +! + 694.00000 + 997.00000 + 2/1 + 1404.00000 + 1611.00000 + 1711.00000 + 1898.00000 diff --git a/scales/sauveur.scl b/scales/sauveur.scl new file mode 100644 index 0000000..62f2b3a --- /dev/null +++ b/scales/sauveur.scl @@ -0,0 +1,17 @@ +! sauveur.scl +! +Sauveur's tempered system of the harpsichord. Trait (1697) + 12 +! + 85.429 + 194.319 + 311.789 + 395.690 + 502.325 + 587.221 + 697.153 + 807.712 + 893.287 + 1009.919 + 1090.274 + 2/1 diff --git a/scales/sauveur2.scl b/scales/sauveur2.scl new file mode 100644 index 0000000..5b2043a --- /dev/null +++ b/scales/sauveur2.scl @@ -0,0 +1,17 @@ +! sauveur2.scl +! +Sauveur's Systme Chromatique des Musiciens (Mmoires 1701), 12 out of 55. + 12 +! + 109.09100 + 196.36400 + 305.45500 + 392.72700 + 501.81800 + 610.90900 + 698.18200 + 807.27300 + 894.54500 + 1003.63600 + 1090.90900 + 2/1 diff --git a/scales/sauveur_17.scl b/scales/sauveur_17.scl new file mode 100644 index 0000000..4d10b28 --- /dev/null +++ b/scales/sauveur_17.scl @@ -0,0 +1,22 @@ +! sauveur_17.scl +! +Sauveur's oriental system, aft. Kitab al-adwar (Bagdad 1294) by Safi al-Din + 17 +! + 256/243 + 65536/59049 + 9/8 + 32/27 + 8192/6561 + 81/64 + 4/3 + 1024/729 + 729/512 + 3/2 + 128/81 + 6561/4096 + 27/16 + 16/9 + 4096/2187 + 243/128 + 2/1 diff --git a/scales/sauveur_ji.scl b/scales/sauveur_ji.scl new file mode 100644 index 0000000..c9c97cb --- /dev/null +++ b/scales/sauveur_ji.scl @@ -0,0 +1,17 @@ +! sauveur_ji.scl +! +Application des sons harmoniques la composition des jeux d'orgues (1702) (PB 81/80 & 128/125) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/savas_bardiat.scl b/scales/savas_bardiat.scl new file mode 100644 index 0000000..b082111 --- /dev/null +++ b/scales/savas_bardiat.scl @@ -0,0 +1,12 @@ +! savas_bardiat.scl +! +Savas's Byzantine Liturgical mode, 8 + 12 + 10 parts + 7 +! + 133.33333 + 333.33333 + 500.00000 + 700.00000 + 833.33333 + 1033.33333 + 2/1 diff --git a/scales/savas_barenh.scl b/scales/savas_barenh.scl new file mode 100644 index 0000000..2d5a33d --- /dev/null +++ b/scales/savas_barenh.scl @@ -0,0 +1,12 @@ +! savas_barenh.scl +! +Savas's Byzantine Liturgical mode, 8 + 16 + 6 parts + 7 +! + 133.33333 + 400.00000 + 500.00000 + 700.00000 + 833.33333 + 1100.00000 + 2/1 diff --git a/scales/savas_chrom.scl b/scales/savas_chrom.scl new file mode 100644 index 0000000..0666941 --- /dev/null +++ b/scales/savas_chrom.scl @@ -0,0 +1,12 @@ +! savas_chrom.scl +! +Savas's Chromatic, Byzantine Liturgical mode, 8 + 14 + 8 parts + 7 +! + 133.33333 + 366.66667 + 500.00000 + 700.00000 + 833.33333 + 1066.66667 + 2/1 diff --git a/scales/savas_diat.scl b/scales/savas_diat.scl new file mode 100644 index 0000000..779f7f9 --- /dev/null +++ b/scales/savas_diat.scl @@ -0,0 +1,12 @@ +! savas_diat.scl +! +Savas's Diatonic, Byzantine Liturgical mode, 10 + 8 + 12 parts + 7 +! + 166.66667 + 300.00000 + 500.00000 + 700.00000 + 866.66667 + 1000.00000 + 2/1 diff --git a/scales/savas_palace.scl b/scales/savas_palace.scl new file mode 100644 index 0000000..87cba77 --- /dev/null +++ b/scales/savas_palace.scl @@ -0,0 +1,12 @@ +! savas_palace.scl +! +Savas's Byzantine Liturgical mode, 6 + 20 + 4 parts + 7 +! + 100.00000 + 433.33333 + 500.00000 + 700.00000 + 800.00000 + 1133.33333 + 2/1 diff --git a/scales/sc311_41.scl b/scales/sc311_41.scl new file mode 100644 index 0000000..06fa854 --- /dev/null +++ b/scales/sc311_41.scl @@ -0,0 +1,315 @@ +! sc311_41.scl +A 311 note 41-limit epimorphic JI scale +311 +! +280/279 +175/174 +125/124 +100/99 +82/81 +70/69 +63/62 +55/54 +49/48 +45/44 +40/39 +37/36 +34/33 +32/31 +30/29 +28/27 +27/26 +25/24 +24/23 +23/22 +22/21 +21/20 +20/19 +19/18 +37/35 +18/17 +17/16 +33/31 +16/15 +31/29 +15/14 +29/27 +14/13 +41/38 +27/25 +13/12 +25/23 +37/34 +12/11 +35/32 +23/21 +45/41 +11/10 +32/29 +21/19 +31/28 +10/9 +49/44 +29/26 +19/17 +28/25 +46/41 +9/8 +35/31 +26/23 +17/15 +25/22 +33/29 +57/50 +8/7 +55/48 +31/27 +23/20 +15/13 +37/32 +22/19 +29/25 +57/49 +7/6 +76/65 +34/29 +27/23 +20/17 +33/28 +13/11 +32/27 +19/16 +25/21 +31/26 +49/41 +91/76 +6/5 +65/54 +35/29 +29/24 +23/19 +17/14 +28/23 +39/32 +11/9 +38/31 +27/22 +16/13 +37/30 +21/17 +26/21 +31/25 +46/37 +81/65 +5/4 +114/91 +49/39 +34/27 +29/23 +24/19 +19/15 +33/26 +14/11 +37/29 +23/18 +32/25 +77/60 +9/7 +40/31 +31/24 +22/17 +48/37 +13/10 +30/23 +17/13 +38/29 +21/16 +25/19 +29/22 +33/25 +45/34 +65/49 +93/70 +4/3 +123/92 +75/56 +51/38 +35/26 +31/23 +27/20 +23/17 +19/14 +34/25 +15/11 +41/30 +26/19 +48/35 +11/8 +40/29 +29/21 +18/13 +25/18 +32/23 +39/28 +81/58 +7/5 +80/57 +38/27 +31/22 +24/17 +17/12 +44/31 +27/19 +57/40 +10/7 +63/44 +33/23 +23/16 +36/25 +13/9 +42/29 +29/20 +16/11 +35/24 +19/13 +41/28 +22/15 +25/17 +28/19 +31/21 +37/25 +46/31 +52/35 +76/51 +112/75 +184/123 +3/2 +140/93 +95/63 +68/45 +50/33 +41/27 +35/23 +32/21 +29/19 +26/17 +23/15 +20/13 +37/24 +17/11 +48/31 +31/20 +14/9 +81/52 +25/16 +36/23 +58/37 +11/7 +41/26 +30/19 +19/12 +46/29 +27/17 +51/32 +91/57 +8/5 +77/48 +37/23 +29/18 +21/13 +34/21 +60/37 +13/8 +44/27 +31/19 +18/11 +41/25 +23/14 +28/17 +33/20 +48/29 +58/35 +93/56 +5/3 +147/88 +77/46 +52/31 +37/22 +32/19 +27/16 +22/13 +39/23 +17/10 +46/27 +29/17 +65/38 +12/7 +55/32 +31/18 +19/11 +45/26 +26/15 +33/19 +54/31 +96/55 +7/4 +100/57 +51/29 +37/21 +30/17 +23/13 +39/22 +16/9 +41/23 +25/14 +34/19 +52/29 +88/49 +9/5 +56/31 +38/21 +29/16 +20/11 +51/28 +31/17 +64/35 +11/6 +57/31 +35/19 +24/13 +37/20 +63/34 +13/7 +41/22 +28/15 +58/31 +15/8 +62/33 +32/17 +17/9 +70/37 +36/19 +19/10 +40/21 +21/11 +44/23 +23/12 +25/13 +52/27 +27/14 +29/15 +31/16 +33/17 +37/19 +39/20 +45/23 +49/25 +55/28 +63/32 +69/35 +81/41 +99/50 +135/68 +189/95 +279/140 +2/1 diff --git a/scales/scalatron.scl b/scales/scalatron.scl new file mode 100644 index 0000000..de30d02 --- /dev/null +++ b/scales/scalatron.scl @@ -0,0 +1,24 @@ +! scalatron.scl +! +Scalatron (tm) 19-tone scale, see manual, 1974 + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 125/96 + 4/3 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 9/5 + 15/8 + 125/64 + 2/1 diff --git a/scales/scheffer.scl b/scales/scheffer.scl new file mode 100644 index 0000000..a6be75a --- /dev/null +++ b/scales/scheffer.scl @@ -0,0 +1,17 @@ +! scheffer.scl +! +H.Th. Scheffer (1748) modified 1/5-comma temperament, Sweden + 12 +! + 83.57600 + 195.30700 + 292.96163 + 390.61500 + 502.34600 + 585.92200 + 697.65400 + 781.23000 + 892.96100 + 1004.69300 + 15/8 + 2/1 diff --git a/scales/schiassi.scl b/scales/schiassi.scl new file mode 100644 index 0000000..f08fdf9 --- /dev/null +++ b/scales/schiassi.scl @@ -0,0 +1,17 @@ +! schiassi.scl +! +Filippo Schiassi + 12 +! + 135/128 + 9/8 + 1215/1024 + 5/4 + 4/3 + 45/32 + 3/2 + 405/256 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/schidlof.scl b/scales/schidlof.scl new file mode 100644 index 0000000..44a198a --- /dev/null +++ b/scales/schidlof.scl @@ -0,0 +1,26 @@ +! schidlof.scl +! +Schidlof + 21 +! + 81/80 + 21/20 + 15/14 + 9/8 + 7/6 + 135/112 + 100/81 + 5/4 + 4/3 + 27/20 + 7/5 + 10/7 + 3/2 + 14/9 + 45/28 + 5/3 + 7/4 + 25/14 + 50/27 + 15/8 + 2/1 diff --git a/scales/schillinger.scl b/scales/schillinger.scl new file mode 100644 index 0000000..c71fa7b --- /dev/null +++ b/scales/schillinger.scl @@ -0,0 +1,41 @@ +! schillinger.scl +! +Joseph Schillinger's double equal temperament, p.664 Mathematical Basis... + 36 +! + 8.33333 + 91.66667 + 100.00000 + 108.33333 + 191.66667 + 200.00000 + 208.33333 + 291.66667 + 300.00000 + 308.33333 + 391.66667 + 400.00000 + 408.33333 + 491.66667 + 500.00000 + 508.33333 + 591.66667 + 600.00000 + 608.33333 + 691.66667 + 700.00000 + 708.33333 + 791.66667 + 800.00000 + 808.33333 + 891.66667 + 900.00000 + 908.33333 + 991.66667 + 1000.00000 + 1008.33333 + 1091.66667 + 1100.00000 + 1108.33333 + 1191.66667 + 2/1 diff --git a/scales/schis41.scl b/scales/schis41.scl new file mode 100644 index 0000000..e6f0597 --- /dev/null +++ b/scales/schis41.scl @@ -0,0 +1,46 @@ +! schis41.scl +Tenney reduced version of wilson_41 +! 41&53 <<1 -8 -14 23 -15 -25 33 -10 81 113|| +41 +! +50/49 +25/24 +81/77 +15/14 +12/11 +10/9 +9/8 +8/7 +7/6 +25/21 +6/5 +27/22 +5/4 +63/50 +9/7 +21/16 +4/3 +200/147 +25/18 +7/5 +10/7 +16/11 +40/27 +3/2 +32/21 +14/9 +100/63 +8/5 +18/11 +5/3 +27/16 +12/7 +7/4 +16/9 +9/5 +50/27 +15/8 +154/81 +27/14 +49/25 +2/1 diff --git a/scales/schisynch17.scl b/scales/schisynch17.scl new file mode 100644 index 0000000..42c0e78 --- /dev/null +++ b/scales/schisynch17.scl @@ -0,0 +1,22 @@ +! schisynch17.scl +Schismatic[17] in synch (brat=-1) tuning +! fifth satisfies f^9 + f^8 - 64 = 0 +17 +! +91.360882 +182.721764 +203.455647 +294.816529 +386.177411 +406.911294 +498.272176 +589.633058 +680.993940 +701.727824 +793.088706 +884.449587 +905.183471 +996.544353 +1087.905235 +1108.639118 +2/1 diff --git a/scales/schlesinger_jupiter.scl b/scales/schlesinger_jupiter.scl new file mode 100644 index 0000000..91d5fb4 --- /dev/null +++ b/scales/schlesinger_jupiter.scl @@ -0,0 +1,17 @@ +! schlesinger_jupiter.scl +! +Schlesinger's Jupiter scale + 12 +! + 18/17 + 9/8 + 36/31 + 6/5 + 18/13 + 36/25 + 3/2 + 36/23 + 18/11 + 12/7 + 9/5 + 2/1 diff --git a/scales/schlesinger_mars.scl b/scales/schlesinger_mars.scl new file mode 100644 index 0000000..3f8bb20 --- /dev/null +++ b/scales/schlesinger_mars.scl @@ -0,0 +1,17 @@ +! schlesinger_mars.scl +! +Schlesinger's Mars scale + 12 +! + 20/19 + 10/9 + 20/17 + 5/4 + 10/7 + 40/27 + 20/13 + 8/5 + 5/3 + 40/23 + 20/11 + 2/1 diff --git a/scales/schlesinger_saturn.scl b/scales/schlesinger_saturn.scl new file mode 100644 index 0000000..068d9e2 --- /dev/null +++ b/scales/schlesinger_saturn.scl @@ -0,0 +1,17 @@ +! schlesinger_saturn.scl +! +Schlesinger's Saturn scale + 12 +! + 32/31 + 16/15 + 8/7 + 16/13 + 4/3 + 32/23 + 16/11 + 32/21 + 8/5 + 32/19 + 16/9 + 2/1 diff --git a/scales/schlick-barbour.scl b/scales/schlick-barbour.scl new file mode 100644 index 0000000..15721c1 --- /dev/null +++ b/scales/schlick-barbour.scl @@ -0,0 +1,17 @@ +! schlick-barbour.scl +! +Reconstructed temp. A. Schlick, Spiegel d. Orgelmacher und Organisten (1511) by Barbour + 12 +! + 256/243 + 196.09000 + 301.95500 + 392.18000 + 501.95500 + 590.22500 + 698.04500 + 796.09000 + 894.13500 + 1001.95500 + 1090.22500 + 2/1 diff --git a/scales/schlick-husmann.scl b/scales/schlick-husmann.scl new file mode 100644 index 0000000..9de5863 --- /dev/null +++ b/scales/schlick-husmann.scl @@ -0,0 +1,17 @@ +! schlick-husmann.scl +! +Schlick's temperament reconstructed by Heinrich Husmann (1967) + 12 +! + 85.00000 + 196.00000 + 305.00000 + 390.00000 + 502.00000 + 589.00000 + 698.00000 + 799.00000 + 892.00000 + 1003.00000 + 1088.00000 + 2/1 diff --git a/scales/schlick-lange.scl b/scales/schlick-lange.scl new file mode 100644 index 0000000..24d19cf --- /dev/null +++ b/scales/schlick-lange.scl @@ -0,0 +1,17 @@ +! schlick-lange.scl +! +Reconstructed temp. Arnoldt Schlick (1511) by Helmut Lange, Ein Beitrag zur musikalischen Temperatur, 1968, p. 482 + 12 +! + 85.45800 + 195.84514 + 306.23229 + 391.69029 + 502.07743 + 587.53543 + 697.92257 + 800.24486 + 893.76771 + 1004.15486 + 1089.61286 + 2/1 diff --git a/scales/schlick-ratte.scl b/scales/schlick-ratte.scl new file mode 100644 index 0000000..279012b --- /dev/null +++ b/scales/schlick-ratte.scl @@ -0,0 +1,17 @@ +! schlick-ratte.scl +! +Schlick's temperament reconstructed by F.J. Ratte (1991) + 12 +! + 88.26999 + 196.09000 + 303.91000 + 392.18000 + 501.95500 + 590.22500 + 698.04500 + 800.00000 + 894.13500 + 1001.95500 + 1090.22500 + 2/1 diff --git a/scales/schlick-schugk.scl b/scales/schlick-schugk.scl new file mode 100644 index 0000000..ce89a13 --- /dev/null +++ b/scales/schlick-schugk.scl @@ -0,0 +1,17 @@ +! schlick-schugk.scl +! +Schlick's temperament reconstructed by Hans-Joachim Schugk (1980) + 12 +! + 80.84099 + 194.52600 + 308.21100 + 389.05200 + 502.73700 + 583.57799 + 697.26300 + 778.10399 + 891.78900 + 1005.47400 + 4096/2187 + 2/1 diff --git a/scales/schlick-tessmer.scl b/scales/schlick-tessmer.scl new file mode 100644 index 0000000..2ba74e7 --- /dev/null +++ b/scales/schlick-tessmer.scl @@ -0,0 +1,17 @@ +! schlick-tessmer.scl +! +Schlick's temperament reconstructed by Manfred Tessmer (1994) + 12 +! + 87.78124 + 195.11250 + 302.44375 + 390.22500 + 502.44375 + 587.78124 + 697.55625 + 798.53375 + 892.66875 + 1002.44375 + 1087.78124 + 2/1 diff --git a/scales/schlick2.scl b/scales/schlick2.scl new file mode 100644 index 0000000..00488bd --- /dev/null +++ b/scales/schlick2.scl @@ -0,0 +1,17 @@ +! schlick2.scl +! +Another reconstructed Schlick's modified meantone (Poletti?) + 12 +! + 88.17405 + 196.08638 + 303.94955 + 392.17970 + 501.95216 + 589.22477 + 698.04492 + 800.22382 + 894.13477 + 1002.95316 + 1090.22462 + 2/1 diff --git a/scales/schlick3.scl b/scales/schlick3.scl new file mode 100644 index 0000000..a715936 --- /dev/null +++ b/scales/schlick3.scl @@ -0,0 +1,17 @@ +! schlick3.scl +! +Possible well-tempered interpretation of 1511 tuning, Margo Schulter + 12 +! + 88.27000 + 196.09000 + 303.91000 + 392.18000 + 501.95500 + 589.24750 + 698.04500 + 799.02250 + 894.13500 + 1002.93250 + 1090.22500 + 2/1 diff --git a/scales/schlick3a.scl b/scales/schlick3a.scl new file mode 100644 index 0000000..6c814b8 --- /dev/null +++ b/scales/schlick3a.scl @@ -0,0 +1,17 @@ +! schlick3a.scl +! +Variation on Schlick (1511), all 5ths within 7c of pure, Margo Schulter + 12 +! + 88.27000 + 196.09000 + 303.91000 + 392.18000 + 501.95500 + 589.24750 + 698.04500 + 797.00000 + 894.13500 + 1002.93250 + 1090.22500 + 2/1 diff --git a/scales/schneegass1.scl b/scales/schneegass1.scl new file mode 100644 index 0000000..52d0ebe --- /dev/null +++ b/scales/schneegass1.scl @@ -0,0 +1,17 @@ +! schneegass1.scl +! +Cyriacus Schneega (1590), meantone, 1st method: rational approximation + 12 +! + 75.87331 + 12800/11449 + 1225043/1024000 + 163840000/131079601 + 107/80 + 579.31998 + 160/107 + 772.42664 + 2048000/1225043 + 11449/6400 + 1082.76665 + 2/1 diff --git a/scales/schneegass2.scl b/scales/schneegass2.scl new file mode 100644 index 0000000..96c10fc --- /dev/null +++ b/scales/schneegass2.scl @@ -0,0 +1,17 @@ +! schneegass2.scl +! +Cyriacus Schneega (1590), meantone, 2nd method: geometric approximation + 12 +! + 79.00509 + 12800/11449 + 1225043/1024000 + 389.34510 + 107/80 + 582.45176 + 160/107 + 775.55842 + 2048000/1225043 + 11449/6400 + 1085.89843 + 2/1 diff --git a/scales/schneegass3.scl b/scales/schneegass3.scl new file mode 100644 index 0000000..ea83198 --- /dev/null +++ b/scales/schneegass3.scl @@ -0,0 +1,17 @@ +! schneegass3.scl +! +Cyriacus Schneega (1590), meantone, 3rd method: numeric approximation + 12 +! + 80.78200 + 194.07200 + 308.10800 + 388.35300 + 500.90700 + 581.22600 + 695.96000 + 775.33900 + 889.80200 + 1005.45800 + 1085.48300 + 2/1 diff --git a/scales/schneider_log.scl b/scales/schneider_log.scl new file mode 100644 index 0000000..8e448b0 --- /dev/null +++ b/scales/schneider_log.scl @@ -0,0 +1,17 @@ +! schneider_log.scl +! +Robert Schneider, scale of log(4) .. log(16), 1/1=264Hz + 12 +! + 258.38795 + 444.17202 + 587.05376 + 3/2 + 797.33845 + 878.42501 + 948.64203 + 1010.34963 + 1065.23606 + 1114.54688 + 1159.22503 + 2/1 diff --git a/scales/scholz.scl b/scales/scholz.scl new file mode 100644 index 0000000..ea4e11e --- /dev/null +++ b/scales/scholz.scl @@ -0,0 +1,13 @@ +! scholz.scl +! +Simple Tune #1 Carter Scholz + 8 +! + 28/27 + 8/7 + 7/6 + 4/3 + 3/2 + 14/9 + 7/4 + 2/1 diff --git a/scales/scholz_epi.scl b/scales/scholz_epi.scl new file mode 100644 index 0000000..f4dbb01 --- /dev/null +++ b/scales/scholz_epi.scl @@ -0,0 +1,45 @@ +! scholz_epi.scl +! +Carter Scholz, Epimore + 40 +! + 4/1 + 5/1 + 6/1 + 7/1 + 8/1 + 9/1 + 10/1 + 11/1 + 12/1 + 13/1 + 14/1 + 15/1 + 16/1 + 18/1 + 20/1 + 21/1 + 22/1 + 24/1 + 25/1 + 26/1 + 27/1 + 28/1 + 32/1 + 33/1 + 35/1 + 36/1 + 39/1 + 40/1 + 42/1 + 44/1 + 45/1 + 48/1 + 49/1 + 50/1 + 54/1 + 55/1 + 56/1 + 63/1 + 64/1 + 65/1 diff --git a/scales/schulter_10.scl b/scales/schulter_10.scl new file mode 100644 index 0000000..066be43 --- /dev/null +++ b/scales/schulter_10.scl @@ -0,0 +1,15 @@ +! schulter_10.scl +! +Margo Schulter, 13-limit tuning, TL 14-11-2007 + 10 +! + 22/21 + 9/8 + 33/28 + 4/3 + 88/63 + 3/2 + 11/7 + 39/22 + 13/7 + 2/1 diff --git a/scales/schulter_12.scl b/scales/schulter_12.scl new file mode 100644 index 0000000..de332f0 --- /dev/null +++ b/scales/schulter_12.scl @@ -0,0 +1,17 @@ +! schulter_12.scl +! +Margo Schulter's 5-limit JI virt. ET, "scintilla of Artusi" tempered, TL 22-08-98 + 12 +! + 100.00896 + 134217728/119574225 + 300.01152 + 400.00512 + 500.01408 + 600.00768 + 16384/10935 + 800.01024 + 900.00384 + 1000.01280 + 1100.00640 + 1200.01536 diff --git a/scales/schulter_14_13-12.scl b/scales/schulter_14_13-12.scl new file mode 100644 index 0000000..8ab2ef9 --- /dev/null +++ b/scales/schulter_14_13-12.scl @@ -0,0 +1,17 @@ +! schulter_14_13-12.scl +! +Temperament with just 14/13 apotome, close to Pepper Noble Fifth + 12 +! + 14/13 + 208.08521 + 287.87218 + 416.17043 + 495.95739 + 624.25564 + 704.04261 + 832.34085 + 912.12782 + 991.91479 + 1120.21303 + 2/1 diff --git a/scales/schulter_17.scl b/scales/schulter_17.scl new file mode 100644 index 0000000..f5d8f04 --- /dev/null +++ b/scales/schulter_17.scl @@ -0,0 +1,22 @@ +! schulter_17.scl +! +Neo-Gothic well-temperament (14:11, 9:7 hypermeantone fifths) TL 04-09-2000 + 17 +! + 126/121 + 130.63900 + 208.75400 + 286.86900 + 343.78700 + 14/11 + 495.62300 + 561.32900 + 626.26200 + 704.37700 + 778.87100 + 196/121 + 913.13100 + 991.24600 + 1052.55800 + 1121.88500 + 2/1 diff --git a/scales/schulter_24.scl b/scales/schulter_24.scl new file mode 100644 index 0000000..acd3d01 --- /dev/null +++ b/scales/schulter_24.scl @@ -0,0 +1,29 @@ +! schulter_24.scl +! +Rational intonation (RI) scale with some "17-ish" features (24 notes) + 24 +! + 32/31 + 243/224 + 243/217 + 26/23 + 7/6 + 20/17 + 17/14 + 23/18 + 368/279 + 11160261/8388608 + 11160261/8126464 + 13/9 + 416/279 + 16777216/11160261 + 26040609/16777216 + 31/19 + 32/19 + 17/10 + 561/320 + 23/13 + 736/403 + 48/25 + 119/60 + 2/1 diff --git a/scales/schulter_24a.scl b/scales/schulter_24a.scl new file mode 100644 index 0000000..82d08dd --- /dev/null +++ b/scales/schulter_24a.scl @@ -0,0 +1,29 @@ +! schulter_24a.scl +! +M. Schulter, just/rational intonation system - with circulating 24-note set + 24 +! + 36/35 + 18/17 + 12/11 + 9/8 + 15/13 + 19/16 + 11/9 + 29/23 + 13/10 + 4/3 + 11/8 + 17/12 + 16/11 + 3/2 + 20/13 + 46/29 + 18/11 + 32/19 + 26/15 + 16/9 + 11/6 + 17/9 + 35/18 + 2/1 diff --git a/scales/schulter_34.scl b/scales/schulter_34.scl new file mode 100644 index 0000000..727a64e --- /dev/null +++ b/scales/schulter_34.scl @@ -0,0 +1,39 @@ +! schulter_34.scl +! +"Carthesian tuning" with two 17-tET chains 55.106 cents apart + 34 +! + 55.10600 + 70.58824 + 125.69424 + 141.17647 + 196.28247 + 211.76471 + 7/6 + 282.35294 + 337.45894 + 352.94118 + 408.04718 + 423.52941 + 478.63541 + 494.11765 + 549.22365 + 564.70588 + 619.81188 + 635.29412 + 690.40012 + 705.88235 + 760.98835 + 776.47059 + 831.57659 + 847.05882 + 902.16482 + 917.64706 + 972.75306 + 988.23529 + 1043.34129 + 1058.82353 + 1113.92953 + 1129.41176 + 1184.51776 + 2/1 diff --git a/scales/schulter_44_39-12.scl b/scales/schulter_44_39-12.scl new file mode 100644 index 0000000..ce26c37 --- /dev/null +++ b/scales/schulter_44_39-12.scl @@ -0,0 +1,17 @@ +! schulter_44_39-12.scl +! +12-note chromatic tuning with 352:351, 364:363 (G=1/1, Eb-G#) + 12 +! + 14/13 + 44/39 + 13/11 + 14/11 + 4/3 + 56/39 + 3/2 + 11/7 + 22/13 + 39/22 + 21/11 + 2/1 diff --git a/scales/schulter_44_39-12_c.scl b/scales/schulter_44_39-12_c.scl new file mode 100644 index 0000000..61cae7b --- /dev/null +++ b/scales/schulter_44_39-12_c.scl @@ -0,0 +1,17 @@ +! schulter_44_39-12_c.scl +! +44_39-12.scl with C as 1/1 (Eb-G#) + 12 +! + 14/13 + 9/8 + 33/28 + 33/26 + 117/88 + 63/44 + 3/2 + 21/13 + 22/13 + 39/22 + 21/11 + 2/1 diff --git a/scales/schulter_44_39-diat1.scl b/scales/schulter_44_39-diat1.scl new file mode 100644 index 0000000..0628566 --- /dev/null +++ b/scales/schulter_44_39-diat1.scl @@ -0,0 +1,12 @@ +! schulter_44_39-diat1.scl +! +Diatonic involving 352:351 and 364:363 + 7 +! + 44/39 + 14/11 + 4/3 + 3/2 + 22/13 + 39/22 + 2/1 diff --git a/scales/schulter_O3-reg-24.scl b/scales/schulter_O3-reg-24.scl new file mode 100644 index 0000000..d11be80 --- /dev/null +++ b/scales/schulter_O3-reg-24.scl @@ -0,0 +1,29 @@ +! schulter_o3-reg-24.scl +! +O3 temperament, regular version: pure 22/21, 7/4, 11/6 + 24 +! + 57.14813 + 127.24815 + 184.39628 + 207.78519 + 264.93331 + 288.32222 + 345.47035 + 415.57037 + 472.71850 + 496.10741 + 553.25553 + 623.35556 + 680.50368 + 703.89259 + 761.04072 + 831.14074 + 888.28887 + 911.67778 + 7/4 + 992.21481 + 11/6 + 21/11 + 1176.61109 + 2/1 diff --git a/scales/schulter_O3-zalzalian12_D.scl b/scales/schulter_O3-zalzalian12_D.scl new file mode 100644 index 0000000..8ec5b20 --- /dev/null +++ b/scales/schulter_O3-zalzalian12_D.scl @@ -0,0 +1,17 @@ +! schulter_O3-zalzalian12_D.scl +! +Sampling of Zalzalian maqam/dastgah modes, slendro/pelog modes + 12 +! + 138.28125 + 207.42187 + 264.84375 + 345.70312 + 472.26563 + 680.85937 + 704.29687 + 842.57813 + 969.14063 + 1049.99999 + 1176.56249 + 2/1 diff --git a/scales/schulter_O3_24.scl b/scales/schulter_O3_24.scl new file mode 100644 index 0000000..9812ac9 --- /dev/null +++ b/scales/schulter_O3_24.scl @@ -0,0 +1,29 @@ +! schulter_O3_24.scl +! +O3 or "Ozone" (24): just 22/21 limma, 7/4, 11/6, 1024-tET + 24 +! + 57.42188 + 126.56250 + 183.98438 + 207.42188 + 264.84376 + 288.28125 + 345.70313 + 414.84375 + 472.26563 + 495.70312 + 553.12500 + 622.26563 + 679.68751 + 703.12500 + 760.54688 + 830.85937 + 888.28125 + 911.71875 + 969.14063 + 992.57813 + 1050.00001 + 1119.14063 + 1176.56251 + 2/1 diff --git a/scales/schulter_bamm24b-pegasus12d.scl b/scales/schulter_bamm24b-pegasus12d.scl new file mode 100644 index 0000000..7c0a1d1 --- /dev/null +++ b/scales/schulter_bamm24b-pegasus12d.scl @@ -0,0 +1,17 @@ +! schulter_bamm24b-pegasus12d.scl +! +Offshoot of Kraig Grady's Centaur: Rast/Penchgah plus Archytas-like modes on 1/1 + 12 +! + 531/512 + 9/8 + 4779/4096 + 59/48 + 4/3 + 177/128 + 3/2 + 1593/1024 + 27/16 + 14337/8192 + 59/32 + 2/1 diff --git a/scales/schulter_biapotomic_septimal24.scl b/scales/schulter_biapotomic_septimal24.scl new file mode 100644 index 0000000..dd03983 --- /dev/null +++ b/scales/schulter_biapotomic_septimal24.scl @@ -0,0 +1,29 @@ +! schulter_biapotomic_septimal24.scl +! +Biapotomic: two apotomes = 7/6; virtually just 23/16 + 24 +! + 57.31792 + 76.11753 + 133.43545 + 209.55299 + 266.87091 + 285.67052 + 342.98844 + 419.10597 + 476.42389 + 495.22351 + 552.54143 + 571.34104 + 628.65896 + 704.77649 + 762.09441 + 780.89403 + 838.21195 + 914.32948 + 971.64740 + 990.44701 + 1047.76493 + 1123.88247 + 1181.20039 + 2/1 diff --git a/scales/schulter_cantonpentalike34.scl b/scales/schulter_cantonpentalike34.scl new file mode 100644 index 0000000..c8dddd8 --- /dev/null +++ b/scales/schulter_cantonpentalike34.scl @@ -0,0 +1,39 @@ +! schulter_cantonpentalike34.scl +! +Variation on Gene Ward Smith Cantonpenta, 34-note superset in 271-tET + 34 +! + 57.56458 + 79.70480 + 128.41328 + 137.26937 + 185.97786 + 208.11808 + 265.68266 + 287.82288 + 336.53137 + 345.38745 + 394.09594 + 416.23616 + 473.80074 + 495.94096 + 553.50554 + 575.64576 + 624.35424 + 633.21033 + 681.91882 + 704.05904 + 761.62362 + 783.76384 + 832.47232 + 841.32841 + 890.03690 + 912.17712 + 969.74170 + 991.88192 + 1040.59041 + 1049.44649 + 1098.15498 + 1120.29520 + 1177.85978 + 2/1 diff --git a/scales/schulter_cantonpentamint58.scl b/scales/schulter_cantonpentamint58.scl new file mode 100644 index 0000000..b792ebd --- /dev/null +++ b/scales/schulter_cantonpentamint58.scl @@ -0,0 +1,63 @@ +! schulter_cantonpentamint58.scl +! +Rank-3 variant on Gene Ward Smith's Cantonpenta with just 12:13:14 + 58 +! + 27.51001 + 48.51128 + 58.78570 + 79.78697 + 107.29698 + 128.29824 + 138.57267 + 176.80952 + 187.08394 + 208.08521 + 235.59522 + 256.59649 + 266.87091 + 287.87218 + 315.38219 + 336.38346 + 346.65788 + 384.89473 + 395.16916 + 416.17043 + 443.68043 + 464.68170 + 474.95613 + 495.95739 + 523.46740 + 544.46867 + 554.74309 + 575.74436 + 603.25437 + 624.25564 + 634.53006 + 672.76691 + 683.04134 + 704.04261 + 731.55261 + 752.55388 + 762.82831 + 783.82957 + 811.33958 + 832.34085 + 842.61527 + 880.85213 + 891.12655 + 912.12782 + 939.63783 + 960.63910 + 970.91352 + 991.91479 + 1019.42480 + 1040.42606 + 1050.70049 + 1088.93734 + 1099.21176 + 1120.21303 + 1147.72304 + 1168.72431 + 1178.99873 + 2/1 diff --git a/scales/schulter_christmas_eve24.scl b/scales/schulter_christmas_eve24.scl new file mode 100644 index 0000000..b84d658 --- /dev/null +++ b/scales/schulter_christmas_eve24.scl @@ -0,0 +1,29 @@ +! schulter_christmas_eve24.scl +! +ChristmasEve or 12/24, just 14/11; 13 fourths up = ~128/99 + 24 +! + 52.52389 + 130.63894 + 183.16283 + 208.75398 + 261.27787 + 286.86903 + 339.39292 + 417.50796 + 470.03186 + 495.62301 + 548.14690 + 626.26195 + 678.78584 + 704.37699 + 756.90088 + 835.01593 + 887.53982 + 913.13097 + 965.65487 + 991.24602 + 1043.76991 + 1121.88496 + 1174.40885 + 2/1 diff --git a/scales/schulter_diat7.scl b/scales/schulter_diat7.scl new file mode 100644 index 0000000..9442589 --- /dev/null +++ b/scales/schulter_diat7.scl @@ -0,0 +1,12 @@ +! schulter_diat7.scl +! +Diatonic scale, symmetrical tetrachords based on 14/11 and 13/11 triads + 7 +! + 44/39 + 14/11 + 4/3 + 3/2 + 22/13 + 21/11 + 2/1 diff --git a/scales/schulter_ham.scl b/scales/schulter_ham.scl new file mode 100644 index 0000000..a7fc8b3 --- /dev/null +++ b/scales/schulter_ham.scl @@ -0,0 +1,22 @@ +! schulter_ham.scl +! +New rational tuning of "Hammond organ type", TL 01-03-2002 + 17 +! + 25/24 + 243/224 + 26/23 + 20/17 + 38/31 + 23/18 + 141/106 + 18/13 + 13/9 + 212/141 + 36/23 + 31/19 + 17/10 + 23/13 + 448/243 + 48/25 + 2/1 diff --git a/scales/schulter_indigo12.scl b/scales/schulter_indigo12.scl new file mode 100644 index 0000000..898d401 --- /dev/null +++ b/scales/schulter_indigo12.scl @@ -0,0 +1,17 @@ +! schulter_indigo12.scl +! +Expansion of 12:13:14:16:18:21:22:24 by Margo Schulter, TL 9-7-2010 + 12 +! + 28/27 + 13/12 + 7/6 + 11/9 + 4/3 + 13/9 + 3/2 + 14/9 + 13/8 + 7/4 + 11/6 + 2/1 diff --git a/scales/schulter_jot17a.scl b/scales/schulter_jot17a.scl new file mode 100644 index 0000000..005508b --- /dev/null +++ b/scales/schulter_jot17a.scl @@ -0,0 +1,22 @@ +! schulter_jot17a.scl +! +Just octachord tuning -- 4:3-9:8-4:3 division, 17 steps (7 + 3 + 7), Bb-Bb + 17 +! + 28/27 + 14/13 + 44/39 + 7/6 + 28/23 + 14/11 + 4/3 + 112/81 + 56/39 + 3/2 + 14/9 + 21/13 + 22/13 + 7/4 + 42/23 + 21/11 + 2/1 diff --git a/scales/schulter_jot17bb.scl b/scales/schulter_jot17bb.scl new file mode 100644 index 0000000..68a29be --- /dev/null +++ b/scales/schulter_jot17bb.scl @@ -0,0 +1,22 @@ +! schulter_jot17bb.scl +! +"Just Octachord Tuning" (Bb-Eb, F-Bb) -- 896:891 divided into 1792:1787:1782 + 17 +! + 28/27 + 14/13 + 2016/1787 + 7/6 + 28/23 + 14/11 + 4/3 + 112/81 + 56/39 + 3/2 + 14/9 + 21/13 + 3024/1787 + 7/4 + 42/23 + 21/11 + 2/1 diff --git a/scales/schulter_jwt17.scl b/scales/schulter_jwt17.scl new file mode 100644 index 0000000..9064c9a --- /dev/null +++ b/scales/schulter_jwt17.scl @@ -0,0 +1,22 @@ +! schulter_jwt17.scl +! +"Just well-tuned 17" circulating system + 17 +! + 126/121 + 109/101 + 44/39 + 33/28 + 11/9 + 14/11 + 117/88 + 18/13 + 23/16 + 176/117 + 224/143 + 13/8 + 56/33 + 23/13 + 81/44 + 224/117 + 2/1 diff --git a/scales/schulter_lin76-34.scl b/scales/schulter_lin76-34.scl new file mode 100644 index 0000000..c90f5aa --- /dev/null +++ b/scales/schulter_lin76-34.scl @@ -0,0 +1,29 @@ +! schulter_lin76-34.scl +! +Two 12-note chains, ~704.160 cents, 34 4ths apart (32 4ths = 7:6), TL 29-11-02 + 24 +! + 58.55034 + 129.12199 + 187.67233 + 208.32057 + 7/6 + 287.51915 + 346.06949 + 416.64114 + 475.19148 + 495.83972 + 554.39006 + 624.96171 + 683.51205 + 704.16029 + 762.71062 + 833.28228 + 891.83261 + 912.48086 + 971.03119 + 991.67943 + 1050.22977 + 1120.80142 + 1179.35176 + 2/1 diff --git a/scales/schulter_met12.scl b/scales/schulter_met12.scl new file mode 100644 index 0000000..e77221a --- /dev/null +++ b/scales/schulter_met12.scl @@ -0,0 +1,17 @@ +! schulter_met12.scl +! +Milder Extended Temperament, 5ths average 703.711 cents + 12 +! + 126.56250 + 207.42187 + 289.45313 + 414.84375 + 496.87500 + 622.26563 + 704.29688 + 829.68750 + 911.71875 + 992.57813 + 1119.14063 + 2/1 diff --git a/scales/schulter_met24-buzurg_al-erin10_cup.scl b/scales/schulter_met24-buzurg_al-erin10_cup.scl new file mode 100644 index 0000000..9f5c470 --- /dev/null +++ b/scales/schulter_met24-buzurg_al-erin10_cup.scl @@ -0,0 +1,15 @@ +! schulter_met24-buzurg_al-erin10_cup.scl +! +Decatonic with septimal Buzurg & Rastlike modes + 10 +! + 126.56250 + 232.03125 + 357.42187 + 496.87500 + 622.26562 + 704.29687 + 829.68750 + 935.15625 + 1061.71875 + 2/1 diff --git a/scales/schulter_met24-canonical.scl b/scales/schulter_met24-canonical.scl new file mode 100644 index 0000000..cf4ca1d --- /dev/null +++ b/scales/schulter_met24-canonical.scl @@ -0,0 +1,29 @@ +! schulter_met24-canonical.scl +! +Smoothed MET-24 in 2048-tET, generators (2/1, 703.711c, 57.422c) + 24 +! + 57.42188 + 125.97656 + 183.39844 + 207.42188 + 264.84375 + 288.86719 + 346.28906 + 414.84375 + 472.26563 + 496.28906 + 553.71094 + 622.26563 + 679.68750 + 703.71094 + 761.13281 + 829.68750 + 887.10938 + 911.13281 + 968.55469 + 992.57812 + 1050.00000 + 1118.55469 + 1175.97656 + 2/1 diff --git a/scales/schulter_met24-ji1.scl b/scales/schulter_met24-ji1.scl new file mode 100644 index 0000000..695fb3f --- /dev/null +++ b/scales/schulter_met24-ji1.scl @@ -0,0 +1,29 @@ +! schulter_met24-ji1.scl +! +Possible JI interpretation of MET-24 + 24 +! + 91/88 + 14/13 + 10/9 + 9/8 + 7/6 + 13/11 + 11/9 + 14/11 + 21/16 + 4/3 + 11/8 + 63/44 + 189/128 + 3/2 + 14/9 + 21/13 + 5/3 + 22/13 + 7/4 + 39/22 + 11/6 + 21/11 + 63/32 + 2/1 diff --git a/scales/schulter_met24-ji3_a.scl b/scales/schulter_met24-ji3_a.scl new file mode 100644 index 0000000..fa4ce1e --- /dev/null +++ b/scales/schulter_met24-ji3_a.scl @@ -0,0 +1,29 @@ +! schulter_met24-ji3_a.scl +! +JI interpretation of MET-24, 1/1 is A or 22/13 of C-C version + 24 +! + 91/88 + 22/21 + 13/12 + 9/8 + 7/6 + 13/11 + 11/9 + 14/11 + 21/16 + 4/3 + 11/8 + 88/63 + 13/9 + 3/2 + 273/176 + 11/7 + 13/8 + 22/13 + 7/4 + 39/22 + 11/6 + 21/11 + 63/32 + 2/1 diff --git a/scales/schulter_met24-semineutral17_F#.scl b/scales/schulter_met24-semineutral17_F#.scl new file mode 100644 index 0000000..7fd4c1d --- /dev/null +++ b/scales/schulter_met24-semineutral17_F#.scl @@ -0,0 +1,22 @@ +! schulter_met24-semineutral17_F#.scl +! +17-CS semineutral sixth from two large major thirds (~63:81:104) + 17 +! + 57.42187 + 139.45313 + 207.42187 + 264.84375 + 370.31250 + 427.73437 + 496.87500 + 577.73438 + 635.15625 + 704.29687 + 761.71875 + 867.18750 + 924.60937 + 992.57812 + 1074.60937 + 1132.03125 + 2/1 diff --git a/scales/schulter_met24.scl b/scales/schulter_met24.scl new file mode 100644 index 0000000..234bb76 --- /dev/null +++ b/scales/schulter_met24.scl @@ -0,0 +1,29 @@ +! schulter_met24.scl +! +Milder Extended Temperament, 5ths avg. 703.658c, spaced 57.422c + 24 +! + 57.42188 + 126.56250 + 183.98438 + 207.42187 + 264.84375 + 289.45313 + 346.87500 + 414.84375 + 472.26563 + 496.87500 + 554.29688 + 622.26563 + 679.68750 + 704.29688 + 761.71875 + 829.68750 + 887.10938 + 911.71875 + 969.14063 + 992.57813 + 1050.00000 + 1119.14063 + 1176.56250 + 2/1 diff --git a/scales/schulter_met24pote.scl b/scales/schulter_met24pote.scl new file mode 100644 index 0000000..b9dcdf9 --- /dev/null +++ b/scales/schulter_met24pote.scl @@ -0,0 +1,59 @@ +! schulter_met24pote.scl +! +MET-24 parapyth temperament Fokker block in POTE tuning + 24 +! + 58.33846 + 126.99416 + 185.33261 + 207.71262 + 266.05107 + 288.43108 + 346.76953 + 415.42523 + 473.76369 + 496.14369 + 554.48215 + 623.13785 + 681.47631 + 703.85631 + 762.19476 + 830.85047 + 889.18892 + 911.56892 + 969.90738 + 992.28738 + 1050.62584 + 1119.28154 + 1177.62000 + 2/1 +! +!! met24trans.scl +!! +!MET-24 2.3.7 transversal +! 24 +!! +! 28/27 +! 2187/2048 +! 567/512 +! 9/8 +! 7/6 +! 32/27 +! 896/729 +! 81/64 +! 21/16 +! 4/3 +! 112/81 +! 729/512 +! 189/128 +! 3/2 +! 14/9 +! 6561/4096 +! 1701/1024 +! 27/16 +! 7/4 +! 16/9 +! 448/243 +! 243/128 +! 63/32 +! 2/1 diff --git a/scales/schulter_neogeb24.scl b/scales/schulter_neogeb24.scl new file mode 100644 index 0000000..49c7a4c --- /dev/null +++ b/scales/schulter_neogeb24.scl @@ -0,0 +1,29 @@ +! schulter_neogeb24.scl +! +Neo-Gothic e-based lineotuning (T/S or Blackwood's R=e, ~2.71828), 24 notes + 24 +! + 55.28289 + 132.24835 + 187.53125 + 209.21382 + 264.49671 + 286.17928 + 341.46217 + 418.42763 + 473.71052 + 495.39309 + 550.67598 + 627.64145 + 682.92434 + 704.60691 + 759.88980 + 836.85526 + 892.13815 + 913.82072 + 969.10362 + 990.78618 + 1046.06908 + 1123.03454 + 1178.31743 + 2/1 diff --git a/scales/schulter_neogji12.scl b/scales/schulter_neogji12.scl new file mode 100644 index 0000000..4da92f5 --- /dev/null +++ b/scales/schulter_neogji12.scl @@ -0,0 +1,17 @@ +! schulter_neogji12.scl +! +M. Schulter, neo-Gothic 12-note JI (prim. 2/3/7/11) 1/1=F with Eb key as D+1 + 12 +! + 392/363 + 9/8 + 147/121 + 14/11 + 4/3 + 63/44 + 3/2 + 196/121 + 27/16 + 56/33 + 21/11 + 2/1 diff --git a/scales/schulter_neogp16a.scl b/scales/schulter_neogp16a.scl new file mode 100644 index 0000000..2ad575e --- /dev/null +++ b/scales/schulter_neogp16a.scl @@ -0,0 +1,21 @@ +! schulter_neogp16a.scl +! +M. Schulter, scale from mainly prime-to-prime ratios and octave complements (Gb-D#) + 16 +! + 43/41 + 6439/5989 + 53/47 + 13/11 + 137/113 + 47/37 + 4/3 + 7/5 + 1781/1243 + 3/2 + 11/7 + 21/13 + 22/13 + 946/533 + 82/43 + 2/1 diff --git a/scales/schulter_patheq58.scl b/scales/schulter_patheq58.scl new file mode 100644 index 0000000..4402ecc --- /dev/null +++ b/scales/schulter_patheq58.scl @@ -0,0 +1,63 @@ +! schulter_patheq58.scl +! +Aug2-plus-spacing and 21-fifths pathways to 5/4 equally (in)accurate + 58 +! + 22.64890 + 46.13400 + 57.29241 + 80.77750 + 103.42640 + 126.91150 + 138.06991 + 173.04550 + 184.20390 + 207.68900 + 230.33790 + 253.82300 + 264.98141 + 288.46650 + 311.11540 + 334.60050 + 345.75891 + 380.73450 + 391.89290 + 415.37800 + 438.02690 + 461.51200 + 472.67041 + 496.15550 + 518.80440 + 542.28950 + 553.44791 + 576.93300 + 599.58190 + 623.06700 + 634.22541 + 669.20100 + 680.35940 + 703.84450 + 726.49340 + 749.97850 + 761.13691 + 784.62200 + 807.27090 + 830.75600 + 841.91441 + 876.89000 + 888.04840 + 911.53350 + 934.18240 + 957.66750 + 968.82591 + 992.31100 + 1014.95990 + 1038.44500 + 1049.60341 + 1084.57900 + 1095.73740 + 1119.22250 + 1141.87140 + 1165.35650 + 1176.51490 + 2/1 diff --git a/scales/schulter_pel.scl b/scales/schulter_pel.scl new file mode 100644 index 0000000..16d4f2f --- /dev/null +++ b/scales/schulter_pel.scl @@ -0,0 +1,10 @@ +! schulter_pel.scl +! +Just pelog-style Phrygian pentatonic + 5 +! + 28/27 + 7/6 + 3/2 + 14/9 + 2/1 diff --git a/scales/schulter_peppermint.scl b/scales/schulter_peppermint.scl new file mode 100644 index 0000000..36c23b1 --- /dev/null +++ b/scales/schulter_peppermint.scl @@ -0,0 +1,29 @@ +! schulter_peppermint.scl +! +Peppermint 24: Wilson/Pepper apotome/limma=Phi, 2 chains spaced for pure 7:6 + 24 +! + 58.67969 + 128.66925 + 187.34894 + 208.19121 + 7/6 + 287.71318 + 346.39287 + 416.38243 + 475.06212 + 495.90439 + 554.58409 + 624.57364 + 683.25333 + 704.09561 + 762.77530 + 832.76485 + 891.44454 + 912.28682 + 970.96651 + 991.80879 + 1050.48848 + 1120.47803 + 1179.15772 + 2/1 diff --git a/scales/schulter_piaguilike2.scl b/scales/schulter_piaguilike2.scl new file mode 100644 index 0000000..ac8263a --- /dev/null +++ b/scales/schulter_piaguilike2.scl @@ -0,0 +1,17 @@ +! schulter_piaguilike2.scl +! +Like Mario Pizarro's Piagui: steps of (9/8)^1/2 and (128/81)^1/8 + 12 +! + 99.02250 + 198.04500 + 297.06750 + 396.09000 + 4/3 + 600.00000 + 699.02250 + 798.04500 + 897.06750 + 16/9 + 1098.04500 + 2/1 diff --git a/scales/schulter_qcm62a.scl b/scales/schulter_qcm62a.scl new file mode 100644 index 0000000..f17d4d8 --- /dev/null +++ b/scales/schulter_qcm62a.scl @@ -0,0 +1,67 @@ +! schulter_qcm62a.scl +! +1/4-comma meantone, two 31-notes at 1/4-comma (Vicentino-like system) + 62 +! + 5.37657 + 128/125 + 46.43543 + 76.04900 + 81.42557 + 117.10786 + 122.48443 + 152.09800 + 157.47457 + 193.15686 + 198.53343 + 234.21572 + 239.59229 + 269.20586 + 75/64 + 310.26471 + 6/5 + 350.63143 + 351.32357 + 5/4 + 391.69029 + 32/25 + 432.74914 + 462.36271 + 467.73928 + 503.42157 + 508.79814 + 544.48043 + 549.85700 + 579.47057 + 584.84714 + 620.52943 + 625.90600 + 655.51957 + 375/256 + 696.57843 + 3/2 + 737.63729 + 192/125 + 25/16 + 778.00400 + 8/5 + 819.06286 + 848.67643 + 854.05300 + 889.73529 + 895.11186 + 930.79414 + 936.17072 + 965.78428 + 971.16086 + 1006.84314 + 1012.21971 + 1047.90200 + 1053.27857 + 1082.89214 + 15/8 + 1123.95100 + 48/25 + 125/64 + 1164.31771 + 2/1 diff --git a/scales/schulter_qcmlji24.scl b/scales/schulter_qcmlji24.scl new file mode 100644 index 0000000..71540b9 --- /dev/null +++ b/scales/schulter_qcmlji24.scl @@ -0,0 +1,29 @@ +! schulter_qcmlji24.scl +! +24-note adaptive JI (Eb-G#/F'-A#') for Lasso's Prologue to _Prophetiae_ + 24 +! + 5.37657 + 76.04900 + 81.42557 + 193.15686 + 198.53343 + 75/64 + 310.26471 + 5/4 + 391.69029 + 503.42157 + 508.79814 + 579.47057 + 584.84714 + 696.57843 + 3/2 + 25/16 + 778.00400 + 889.73529 + 895.11186 + 971.16086 + 1006.84314 + 1082.89214 + 15/8 + 2/1 diff --git a/scales/schulter_qcmqd8_4.scl b/scales/schulter_qcmqd8_4.scl new file mode 100644 index 0000000..cb005b0 --- /dev/null +++ b/scales/schulter_qcmqd8_4.scl @@ -0,0 +1,17 @@ +! schulter_qcmqd8_4.scl +! +F-C# in 1/4-comma meantone, other 5ths ~4.888 cents wide or (2048/2025)^(1/4) + 12 +! + 76.04900 + 193.15686 + 289.73529 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 782.89214 + 889.73529 + 996.57843 + 1082.89214 + 2/1 diff --git a/scales/schulter_rbuzurg-buzurg8_cup.scl b/scales/schulter_rbuzurg-buzurg8_cup.scl new file mode 100644 index 0000000..bb23e82 --- /dev/null +++ b/scales/schulter_rbuzurg-buzurg8_cup.scl @@ -0,0 +1,13 @@ +! schulter_rbuzurg-buzurg8_cup.scl +! +Buzurg pentachord plus 133-229-133 tetrachord at ~3/2 + 8 +! + 133.35066 + 361.88496 + 495.23562 + 628.58628 + 704.76438 + 838.11504 + 1066.64934 + 2/1 diff --git a/scales/schulter_rbuzurg-buzurg_hijaz_cup.scl b/scales/schulter_rbuzurg-buzurg_hijaz_cup.scl new file mode 100644 index 0000000..f4d42f9 --- /dev/null +++ b/scales/schulter_rbuzurg-buzurg_hijaz_cup.scl @@ -0,0 +1,13 @@ +! schulter_rbuzurg-buzurg_hijaz_cup.scl +! +Qutb al-Din al-Shirazi's Buzurg plus upper Hijaz (JI 12:11-7:6-22:21) + 8 +! + 133.35066 + 361.88496 + 495.23562 + 628.58628 + 704.76438 + 857.12058 + 1123.82190 + 2/1 diff --git a/scales/schulter_semineutral36.scl b/scales/schulter_semineutral36.scl new file mode 100644 index 0000000..cf2fc13 --- /dev/null +++ b/scales/schulter_semineutral36.scl @@ -0,0 +1,22 @@ +! schulter_semineutral36.scl +! +Semineutral tuning in 36-tET, 0-433.33-866.67 cents + 17 +! + 66.66667 + 133.33333 + 200.00000 + 266.66667 + 366.66666 + 433.33333 + 500.00000 + 566.66667 + 633.33333 + 700.00000 + 766.66667 + 866.66667 + 933.33333 + 1000.00000 + 1066.66667 + 1133.33333 + 2/1 diff --git a/scales/schulter_shur10.scl b/scales/schulter_shur10.scl new file mode 100644 index 0000000..de2c151 --- /dev/null +++ b/scales/schulter_shur10.scl @@ -0,0 +1,15 @@ +! schulter_shur10.scl +! +Tuning set for "Prelude in Shur for Erv Wilson" + 10 +! + 138.28126 + 264.84376 + 472.26562 + 495.70313 + 633.98438 + 703.12500 + 760.54688 + 841.40625 + 967.96876 + 2/1 diff --git a/scales/schulter_shur17.scl b/scales/schulter_shur17.scl new file mode 100644 index 0000000..8bd8d76 --- /dev/null +++ b/scales/schulter_shur17.scl @@ -0,0 +1,22 @@ +! schulter_shur17.scl +! +Peppermint 17-note thirdtone set for Persian dastgah-ha + 17 +! + 69.98955 + 128.66924 + 208.19121 + 287.71318 + 357.70273 + 416.38243 + 495.90439 + 565.89395 + 624.57364 + 704.09561 + 774.08516 + 832.76485 + 912.28682 + 991.80879 + 1061.79834 + 1120.47803 + 2/1 diff --git a/scales/schulter_simplemint24.scl b/scales/schulter_simplemint24.scl new file mode 100644 index 0000000..857a131 --- /dev/null +++ b/scales/schulter_simplemint24.scl @@ -0,0 +1,29 @@ +! schulter_simplemint24.scl +! +Rank 3 temperament (2-3-7-9-11-13), 704c 5th, 58c spacing, 1200-tET + 24 +! + 58.00000 + 128.00000 + 186.00000 + 208.00000 + 266.00000 + 288.00000 + 346.00000 + 416.00000 + 474.00000 + 496.00000 + 554.00000 + 624.00000 + 682.00000 + 704.00000 + 762.00000 + 832.00000 + 890.00000 + 912.00000 + 970.00000 + 992.00000 + 1050.00000 + 1120.00000 + 1178.00000 + 2/1 diff --git a/scales/schulter_sq.scl b/scales/schulter_sq.scl new file mode 100644 index 0000000..d2ae751 --- /dev/null +++ b/scales/schulter_sq.scl @@ -0,0 +1,29 @@ +! schulter_sq.scl +! +"Sesquisexta" tuning, two 12-tone Pyth. manuals a 7/6 apart. TL 16-5-2001 + 24 +! + 28/27 + 2187/2048 + 567/512 + 9/8 + 7/6 + 32/27 + 5103/4096 + 81/64 + 21/16 + 4/3 + 112/81 + 729/512 + 189/128 + 3/2 + 14/9 + 6561/4096 + 1701/1024 + 27/16 + 7/4 + 16/9 + 15309/8192 + 243/128 + 63/32 + 2/1 diff --git a/scales/schulter_tedorian.scl b/scales/schulter_tedorian.scl new file mode 100644 index 0000000..f493049 --- /dev/null +++ b/scales/schulter_tedorian.scl @@ -0,0 +1,12 @@ +! schulter_tedorian.scl +! +Eb Dorian in temperament extraordinaire -- neo-medieval style + 7 +! + 213.68628 + 289.73528 + 493.15685 + 706.84314 + 910.26471 + 986.31371 + 2/1 diff --git a/scales/schulter_turquoise17-104ed2.scl b/scales/schulter_turquoise17-104ed2.scl new file mode 100644 index 0000000..bfd6345 --- /dev/null +++ b/scales/schulter_turquoise17-104ed2.scl @@ -0,0 +1,22 @@ +! schulter_turquoise17-104ed2.scl +! +Turquoise 17 in 104-tET, ~33:36:39:42:44 at steps 0 7 10 + 17 +! + 69.23077 + 150.00000 + 207.69231 + 288.46154 + 357.69231 + 415.38462 + 496.15385 + 565.38462 + 646.15385 + 703.84616 + 784.61539 + 853.84616 + 911.53846 + 992.30769 + 1061.53846 + 1119.23077 + 2/1 diff --git a/scales/schulter_turquoise17.scl b/scales/schulter_turquoise17.scl new file mode 100644 index 0000000..80e19e6 --- /dev/null +++ b/scales/schulter_turquoise17.scl @@ -0,0 +1,22 @@ +! schulter_turquoise17.scl +! +Turquoise 17 in 1024-tET, ~33:36:39:42:44 at steps 0 7 10 + 17 +! + 70.31249 + 151.17187 + 208.59375 + 289.45313 + 358.59375 + 416.01563 + 496.87500 + 566.01562 + 646.87500 + 704.29688 + 785.15625 + 854.29687 + 911.71875 + 992.57812 + 1061.71875 + 1119.14063 + 2/1 diff --git a/scales/schulter_wilsonistic.scl b/scales/schulter_wilsonistic.scl new file mode 100644 index 0000000..f3dbf32 --- /dev/null +++ b/scales/schulter_wilsonistic.scl @@ -0,0 +1,17 @@ +! schulter_wilsonistic.scl +! +Margo Schulter, Wilsonistic Pivot on C + 12 +! + 91/88 + 44/39 + 7/6 + 14/11 + 4/3 + 11/8 + 3/2 + 273/176 + 22/13 + 7/4 + 21/11 + 2/1 diff --git a/scales/schulter_xenoga24.scl b/scales/schulter_xenoga24.scl new file mode 100644 index 0000000..6391f33 --- /dev/null +++ b/scales/schulter_xenoga24.scl @@ -0,0 +1,29 @@ +! schulter_xenoga24.scl +! +M. Schulter, 3+7 ratios Xeno-Gothic adaptive tuning (keyboards 64:63 apart) + 24 +! + 64/63 + 2187/2048 + 243/224 + 9/8 + 8/7 + 32/27 + 2048/1701 + 81/64 + 9/7 + 4/3 + 256/189 + 729/512 + 81/56 + 3/2 + 32/21 + 6561/4096 + 729/448 + 27/16 + 12/7 + 16/9 + 1024/567 + 243/128 + 27/14 + 2/1 diff --git a/scales/schulter_xenogj24.scl b/scales/schulter_xenogj24.scl new file mode 100644 index 0000000..fd3518d --- /dev/null +++ b/scales/schulter_xenogj24.scl @@ -0,0 +1,29 @@ +! schulter_xenogj24.scl +! +Neo-Gothic 3/17-flavor JI (keyboards 459:448 apart) + 24 +! + 459/448 + 2187/2048 + 1003833/917504 + 9/8 + 4131/3584 + 32/27 + 17/14 + 81/64 + 37179/28672 + 4/3 + 153/112 + 729/512 + 334611/229376 + 3/2 + 1377/896 + 6561/4096 + 3011499/1835008 + 27/16 + 12393/7168 + 16/9 + 51/28 + 243/128 + 111537/57344 + 2/1 diff --git a/scales/schulter_zarte84.scl b/scales/schulter_zarte84.scl new file mode 100644 index 0000000..9aeda3b --- /dev/null +++ b/scales/schulter_zarte84.scl @@ -0,0 +1,17 @@ +! schulter_zarte84.scl +! +Temperament extraordinaire, Zarlino's 2/7-comma meantone (F-C#) + 12 +! + 25/24 + 191.62069 + 287.43104 + 383.24139 + 504.18965 + 574.86208 + 695.81035 + 779.05173 + 887.43104 + 995.81035 + 1079.05173 + 2/1 diff --git a/scales/schulter_zarte84n.scl b/scales/schulter_zarte84n.scl new file mode 100644 index 0000000..883dc50 --- /dev/null +++ b/scales/schulter_zarte84n.scl @@ -0,0 +1,17 @@ +! schulter_zarte84n.scl +! +Zarlino temperament extraordinaire, 1024-tET mapping + 12 +! + 70.31250 + 191.01562 + 287.10938 + 383.20313 + 503.90625 + 574.21875 + 696.09375 + 778.12500 + 887.10938 + 996.09375 + 1079.29688 + 2/1 \ No newline at end of file diff --git a/scales/scotbag.scl b/scales/scotbag.scl new file mode 100644 index 0000000..1cbd91f --- /dev/null +++ b/scales/scotbag.scl @@ -0,0 +1,12 @@ +! scotbag.scl +! +Scottish bagpipe tuning + 7 +! + 10/9 + 5/4 + 15/11 + 40/27 + 5/3 + 11/6 + 2/1 diff --git a/scales/scotbag2.scl b/scales/scotbag2.scl new file mode 100644 index 0000000..1ddabff --- /dev/null +++ b/scales/scotbag2.scl @@ -0,0 +1,12 @@ +! scotbag2.scl +! +Scottish bagpipe tuning 2, symmmetrical + 7 +! + 10/9 + 11/9 + 4/3 + 3/2 + 18/11 + 9/5 + 2/1 diff --git a/scales/scotbag3.scl b/scales/scotbag3.scl new file mode 100644 index 0000000..76add9d --- /dev/null +++ b/scales/scotbag3.scl @@ -0,0 +1,12 @@ +! scotbag3.scl +! +Scottish bagpipe tuning 3 + 7 +! + 9/8 + 5/4 + 11/8 + 3/2 + 27/16 + 11/6 + 2/1 diff --git a/scales/scotbag4.scl b/scales/scotbag4.scl new file mode 100644 index 0000000..9f2378c --- /dev/null +++ b/scales/scotbag4.scl @@ -0,0 +1,12 @@ +! scotbag4.scl +! +Scottish Higland Bagpipe by Macdonald, Edinburgh. Helmholtz/Ellis p. 515, nr.52 + 7 +! + 197.00000 + 341.00000 + 495.00000 + 703.00000 + 853.00000 + 1009.00000 + 2/1 diff --git a/scales/scottd1.scl b/scales/scottd1.scl new file mode 100644 index 0000000..dc8b666 --- /dev/null +++ b/scales/scottd1.scl @@ -0,0 +1,17 @@ +! scottd1.scl +! +Dale Scott's temperament 1, TL 9-6-1999 + 12 +! + 135/128 + 194.13500 + 1215/1024 + 388.26999 + 10935/8192 + 45/32 + 698.04500 + 405/256 + 890.22500 + 998.04500 + 15/8 + 2/1 diff --git a/scales/scottd2.scl b/scales/scottd2.scl new file mode 100644 index 0000000..73f1f5d --- /dev/null +++ b/scales/scottd2.scl @@ -0,0 +1,17 @@ +! scottd2.scl +! +Dale Scott's temperament 2, TL 9-6-1999 + 12 +! + 93.74400 + 195.69900 + 297.65400 + 391.39800 + 500.39100 + 591.78900 + 698.43600 + 795.69900 + 892.96200 + 999.60900 + 1091.00700 + 2/1 diff --git a/scales/scottd3.scl b/scales/scottd3.scl new file mode 100644 index 0000000..755d692 --- /dev/null +++ b/scales/scottd3.scl @@ -0,0 +1,17 @@ +! scottd3.scl +! +Dale Scott's temperament 3, TL 9-6-1999 + 12 +! + 95.11250 + 197.06750 + 299.02250 + 394.13500 + 499.99950 + 593.15750 + 699.02250 + 797.06750 + 895.11250 + 1000.97750 + 1093.15750 + 2/1 diff --git a/scales/scottd4.scl b/scales/scottd4.scl new file mode 100644 index 0000000..d770be9 --- /dev/null +++ b/scales/scottd4.scl @@ -0,0 +1,17 @@ +! scottd4.scl +! +Dale Scott's temperament 4, TL 9-6-1999 + 12 +! + 96.38467 + 197.87743 + 299.19782 + 395.57340 + 500.72614 + 595.58477 + 699.27386 + 797.79827 + 896.48143 + 1000.02285 + 1095.26744 + 2/1 diff --git a/scales/scottj.scl b/scales/scottj.scl new file mode 100644 index 0000000..16cfe94 --- /dev/null +++ b/scales/scottj.scl @@ -0,0 +1,9 @@ +! scottj.scl +! +Jeff Scott's "seven and five" tuning, fifth-repeating. TL 20-04-99 + 4 +! + 9/8 + 9/7 + 4/3 + 3/2 diff --git a/scales/scottj2.scl b/scales/scottj2.scl new file mode 100644 index 0000000..b4f49fa --- /dev/null +++ b/scales/scottj2.scl @@ -0,0 +1,24 @@ +! scottj2.scl +! +Jeff Scott's "just tritone/13" tuning. TL 17-03-2001 + 19 +! + 10/9 + 8/7 + 7/6 + 6/5 + 4/3 + 7/5 + 14/9 + 8/5 + 18/11 + 5/3 + 13/7 + 2/1 + 13/6 + 20/9 + 16/7 + 7/3 + 13/5 + 11/4 + 3/1 diff --git a/scales/scottr_ebvt.scl b/scales/scottr_ebvt.scl new file mode 100644 index 0000000..16c75e5 --- /dev/null +++ b/scales/scottr_ebvt.scl @@ -0,0 +1,17 @@ +! scottr_ebvt.scl +! +Robert Scott Equal Beating Victorian Temperament (2001) + 12 +! + 95.62500 + 196.54999 + 296.71500 + 393.83999 + 497.80500 + 593.42999 + 699.19500 + 797.22000 + 894.74499 + 996.31000 + 1095.23499 + 2/1 diff --git a/scales/scottr_lab.scl b/scales/scottr_lab.scl new file mode 100644 index 0000000..32e488d --- /dev/null +++ b/scales/scottr_lab.scl @@ -0,0 +1,17 @@ +! scottr_lab.scl +! +Robert Scott Tunelab EBVT (2002) + 12 +! + 94.45500 + 195.82000 + 295.72500 + 392.67000 + 498.08500 + 592.51000 + 700.06500 + 796.55000 + 893.74500 + 995.92000 + 1094.76500 + 2/1 diff --git a/scales/secor12_1.scl b/scales/secor12_1.scl new file mode 100644 index 0000000..fbb2d17 --- /dev/null +++ b/scales/secor12_1.scl @@ -0,0 +1,17 @@ +! secor12_1.scl +! +George Secor's 12-tone temperament ordinaire #1, proportional beating + 12 +! + 86.53330 + 194.55680 + 294.12876 + 389.11361 + 499.91792 + 585.54105 + 697.27840 + 789.37483 + 891.83521 + 997.96292 + 1086.39201 + 2/1 diff --git a/scales/secor12_2.scl b/scales/secor12_2.scl new file mode 100644 index 0000000..4508f8b --- /dev/null +++ b/scales/secor12_2.scl @@ -0,0 +1,17 @@ +! secor12_2.scl +! +George Secor's closed 12-tone well-temperament #2, with 7 just fifths + 12 +! + 256/243 + 194.86828 + 32/27 + 388.02514 + 4/3 + 1024/729 + 698.28985 + 128/81 + 891.44671 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/secor12_3.scl b/scales/secor12_3.scl new file mode 100644 index 0000000..693f54a --- /dev/null +++ b/scales/secor12_3.scl @@ -0,0 +1,17 @@ +! secor12_3.scl +! +George Secor's closed 12-tone temperament #3 with 5 meantone, 3 just, and 2 wide fifths + 12 +! + 83.13700 + 193.15686 + 292.42357 + 5/4 + 501.71015 + 581.18200 + 696.57843 + 785.09200 + 889.73529 + 999.75514 + 1082.89214 + 2/1 diff --git a/scales/secor17htt1.scl b/scales/secor17htt1.scl new file mode 100644 index 0000000..52fe954 --- /dev/null +++ b/scales/secor17htt1.scl @@ -0,0 +1,22 @@ +! secor17htt1.scl +! +George Secor's 17-tone high-tolerance temperament subset #1 on C (5/4 & 7/4 exact) + 17 +! +30.08878 +140.19633 +207.15739 +265.24719 +347.35372 +5/4 +496.42131 +554.51111 +612.60091 +703.57869 +733.66747 +843.77502 +882.73506 +7/4 +1050.93241 +1089.89245 +2/1 diff --git a/scales/secor17htt2.scl b/scales/secor17htt2.scl new file mode 100644 index 0000000..54c3ed6 --- /dev/null +++ b/scales/secor17htt2.scl @@ -0,0 +1,22 @@ +! secor17htt2.scl +! +George Secor's 17-tone high-tolerance temperament subset #2 on Eo (5/4 & 7/4 exact) + 17 +! +30.08878 +116.17960 +207.15739 +237.24617 +347.35372 +5/4 +496.42131 +554.51111 +612.60091 +703.57869 +733.66747 +843.77502 +910.73608 +7/4 +1050.93241 +1089.89245 +2/1 diff --git a/scales/secor17htt3.scl b/scales/secor17htt3.scl new file mode 100644 index 0000000..b779c0c --- /dev/null +++ b/scales/secor17htt3.scl @@ -0,0 +1,22 @@ +! secor17htt3.scl +! +George Secor's 17-tone high-tolerance temperament subset #3 on G (5/4 & 7/4 exact) + 17 +! +58.08980 +116.17960 +207.15739 +237.24617 +347.35372 +5/4 +472.40458 +554.51111 +593.47114 +703.57869 +733.66747 +843.77502 +910.73608 +7/4 +1050.93241 +1089.89245 +2/1 diff --git a/scales/secor17htt4.scl b/scales/secor17htt4.scl new file mode 100644 index 0000000..aa61c04 --- /dev/null +++ b/scales/secor17htt4.scl @@ -0,0 +1,22 @@ +! secor17htt4.scl +! +George Secor's 17-tone high-tolerance temperament subset #4 on Bo (5/4 & 7/4 exact) + 17 +! +58.08980 +116.17960 +207.15739 +237.24617 +347.35372 +414.31478 +472.40458 +554.51111 +593.47114 +703.57869 +733.66747 +819.75830 +910.73608 +940.82486 +1050.93241 +1089.89245 +2/1 diff --git a/scales/secor17wt.scl b/scales/secor17wt.scl new file mode 100644 index 0000000..c4f5251 --- /dev/null +++ b/scales/secor17wt.scl @@ -0,0 +1,22 @@ +! secor17wt.scl +! +George Secor's well temperament with 5 pure 11/7 and 3 near just 11/6 +17 +! + 66.74120 +144.85624 +214.44090 +278.33864 +353.61023 +428.88181 +492.77955 +562.36421 +640.47925 +707.22045 +771.11819 +849.23324 +921.66136 +985.55910 +1057.98722 +1136.10226 +2/1 diff --git a/scales/secor17zrt.scl b/scales/secor17zrt.scl new file mode 100644 index 0000000..df4a7c0 --- /dev/null +++ b/scales/secor17zrt.scl @@ -0,0 +1,22 @@ +! secor17zrt.scl +! +George Secor's 17-tone Zany Rational Temperament (2012) +17 +! +555/536 +289/268 +75/67 +157/134 +163/134 +2015/1608 +802/603 +369/268 +5075/3618 +401/268 +835/536 +869/536 +1010/603 +1064/603 +981/536 +15/8 +2/1 diff --git a/scales/secor19wt.scl b/scales/secor19wt.scl new file mode 100644 index 0000000..2a1b2b5 --- /dev/null +++ b/scales/secor19wt.scl @@ -0,0 +1,24 @@ +! secor19wt.scl +! +George Secor's 19-tone well temperament with ten 5/17-comma fifths + 19 +! + 69.40735 + 131.54493 + 191.25924 + 260.66659 + 317.95765 + 382.51849 + 451.92584 + 504.37038 + 573.77773 + 638.33856 + 695.62962 + 765.03697 + 824.57129 + 886.88886 + 956.29622 +1011.16402 +1078.14811 +1145.13220 +2/1 \ No newline at end of file diff --git a/scales/secor19wt1.scl b/scales/secor19wt1.scl new file mode 100644 index 0000000..f2dd731 --- /dev/null +++ b/scales/secor19wt1.scl @@ -0,0 +1,24 @@ +! secor19wt1.scl +! +George Secor's 19-tone proportional-beating (5/17-comma) well temperament (v.1) + 19 +! + 69.41306 + 131.21719 + 191.26088 + 260.67394 + 318.03803 + 382.52175 + 451.93481 + 504.36956 + 573.78263 + 638.12678 + 695.63044 + 765.04350 + 824.94573 + 886.89131 + 956.30438 + 1011.12652 + 1078.15219 + 1145.03265 + 2/1 diff --git a/scales/secor19wt2.scl b/scales/secor19wt2.scl new file mode 100644 index 0000000..3069f0e --- /dev/null +++ b/scales/secor19wt2.scl @@ -0,0 +1,24 @@ +! secor19wt2.scl +! +George Secor's 19-tone proportional-beating (5/17-comma) well temperament (v.2) + 19 +! + 69.41306 + 131.21719 + 191.26088 + 260.67394 + 317.43304 + 382.52175 + 451.93481 + 504.36956 + 573.78263 + 638.12678 + 695.63044 + 765.04350 + 824.40909 + 886.89131 + 956.30438 +1010.63200 +1078.15219 +1145.03265 +2/1 \ No newline at end of file diff --git a/scales/secor1_4tx.scl b/scales/secor1_4tx.scl new file mode 100644 index 0000000..4a128d2 --- /dev/null +++ b/scales/secor1_4tx.scl @@ -0,0 +1,17 @@ +! secor1_4tx.scl +! +George Secor's rational 1/4-comma temperament extraordinaire + 12 +! + 4873/4644 + 481/430 + 61837/52245 + 484/387 + 7747/5805 + 8132/5805 + 193/129 + 1219/774 + 1942/1161 + 30988/17415 + 3621/1935 + 2/1 diff --git a/scales/secor1_5tx.scl b/scales/secor1_5tx.scl new file mode 100644 index 0000000..8660b95 --- /dev/null +++ b/scales/secor1_5tx.scl @@ -0,0 +1,17 @@ +! secor1_5tx.scl +! +George Secor's 1/5-comma temperament extraordinaire (ratios supplied by G. W. Smith) + 12 +! + 5075/4824 + 75/67 + 28591/24120 + 2015/1608 + 805/603 + 5075/3618 + 401/268 + 5075/3216 + 1010/603 + 3220/1809 + 15/8 + 2/1 diff --git a/scales/secor22_17p5.scl b/scales/secor22_17p5.scl new file mode 100644 index 0000000..e6f0245 --- /dev/null +++ b/scales/secor22_17p5.scl @@ -0,0 +1,27 @@ +! secor22_17p5.scl +! +George Secor's 17-tone temperament plus 5 extra 5-limit intervals + 22 +! + 66.74120 + 144.85624 + 173.96100 + 214.44090 + 278.33864 + 353.61023 + 5/4 + 428.88181 + 492.77955 + 562.36421 + 600.75500 + 640.47925 + 707.22045 + 771.11819 + 849.23324 + 879.76000 + 921.66136 + 985.55910 + 1057.98722 + 1093.53400 + 1136.10226 + 2/1 diff --git a/scales/secor22_19p3.scl b/scales/secor22_19p3.scl new file mode 100644 index 0000000..73733bf --- /dev/null +++ b/scales/secor22_19p3.scl @@ -0,0 +1,27 @@ +! secor22_19p3.scl +! +George Secor's 19+3 well temperament with ten ~5/17-comma (equal-beating) fifths and 3 pure 9:11. TL 28-6-2002,26-10-2006. Aux=1,10,19 + 22 +! + 34.29925 + 69.41306 + 131.54971 + 191.26088 + 260.67394 + 317.95963 + 382.52175 + 451.93481 + 504.36956 + 538.66882 + 573.78263 + 638.34474 + 695.63044 + 765.04350 + 824.75467 + 886.89131 + 956.30438 +1011.16460 +1043.03838 +1078.15219 +1145.13978 +2/1 diff --git a/scales/secor22_ji29.scl b/scales/secor22_ji29.scl new file mode 100644 index 0000000..fc11e75 --- /dev/null +++ b/scales/secor22_ji29.scl @@ -0,0 +1,29 @@ +! secor22_ji29.scl +! +George Secor's 22-tone just intonation (29-limit otonality on 4/3) +! 15-limit otonality on 1/1 +! 7-limit scale 16:18:20:21:24:25:28:32 available starting on 4/3 and 5/3 + 22 +! +25/24 +13/12 +105/96 +9/8 +7/6 +29/24 +5/4 +125/96 +4/3 +11/8 +17/12 +35/24 +3/2 +19/12 +13/8 +5/3 +27/16 +7/4 +11/6 +15/8 +23/12 +2/1 diff --git a/scales/secor29htt.scl b/scales/secor29htt.scl new file mode 100644 index 0000000..ff5bfde --- /dev/null +++ b/scales/secor29htt.scl @@ -0,0 +1,34 @@ +! secor29htt.scl +! +George Secor's 29-tone 13-limit high-tolerance temperament (5/4 & 7/4 exact) + 29 +! +58.08980 +97.04984 +140.19633 +179.15637 +207.15739 +265.24719 +296.73557 +347.35372 +5/4 +414.31478 +472.40458 +496.42131 +554.51111 +593.47114 +633.37025 +679.56197 +703.57869 +761.66849 +800.62853 +843.77502 +882.73506 +910.73608 +7/4 +992.84261 +1050.93241 +1089.89245 +1117.89347 +1175.98327 +2/1 diff --git a/scales/secor29tolerant.scl b/scales/secor29tolerant.scl new file mode 100644 index 0000000..a1c8d7f --- /dev/null +++ b/scales/secor29tolerant.scl @@ -0,0 +1,67 @@ +! secor29tolerant.scl +! +Version of George Secor's secor29htt in tolerant temperament, POTE tuning + 29 +! + 57.71785 + 98.86459 + 137.91534 + 179.06208 + 207.92100 + 265.63886 + 294.49778 + 345.83634 + 386.98308 + 415.84201 + 473.55986 + 496.03950 + 553.75735 + 594.90409 + 633.95484 + 681.48086 + 703.96050 + 761.67835 + 802.82509 + 841.87584 + 883.02258 + 911.88151 + 969.59936 + 992.07900 + 1049.79685 + 1090.94359 + 1119.80251 + 1177.52036 + 2/1 +! +!! secor29trans.scl +!! +!5-limit transversal for secor29tolerant ! 29 !! +! 6561/6400 +! 135/128 +! 27/25 +! 10/9 +! 9/8 +! 59049/51200 +! 4782969/4096000 +! 243/200 +! 5/4 +! 81/64 +! 531441/409600 +! 4/3 +! 2187/1600 +! 45/32 +! 36/25 +! 4782969/3276800 +! 3/2 +! 19683/12800 +! 405/256 +! 81/50 +! 5/3 +! 27/16 +! 177147/102400 +! 16/9 +! 729/400 +! 15/8 +! 243/128 +! 1594323/819200 +! 2/1 diff --git a/scales/secor34wt.scl b/scales/secor34wt.scl new file mode 100644 index 0000000..227fb49 --- /dev/null +++ b/scales/secor34wt.scl @@ -0,0 +1,39 @@ +! secor34wt.scl +! +George Secor's 34-tone well temperament (with 10 exact 11/7) +34 +! +40.47925 +66.74120 +107.22045 +144.85624 +171.11819 +214.44090 +249.23324 +278.33864 +321.66136 +353.61023 +385.55910 +428.88181 +457.98722 +492.77955 +536.10226 +562.36421 +600.00000 +640.47925 +666.74120 +707.22045 +744.85624 +771.11819 +814.44090 +849.23324 +878.33864 +921.66136 +953.61023 +985.55910 +1028.88181 +1057.98722 +1092.77955 +1136.10226 +1162.36421 +2/1 diff --git a/scales/secor41htt.scl b/scales/secor41htt.scl new file mode 100644 index 0000000..122c64f --- /dev/null +++ b/scales/secor41htt.scl @@ -0,0 +1,46 @@ +! secor41htt.scl +! +George Secor's 13-limit high-tolerance temperament superset (5/4 & 7/4 exact) + 41 +! +30.08878 +58.08980 +97.04984 +116.17960 +140.19633 +179.15637 +207.15739 +237.24617 +265.24719 +296.73557 +323.33699 +347.35372 +5/4 +414.31478 +444.40355 +472.40458 +496.42131 +526.51008 +554.51111 +593.47114 +612.60091 +636.61764 +679.56197 +703.57869 +733.66747 +761.66849 +800.62853 +819.75830 +843.77502 +882.73506 +910.73608 +940.82486 +7/4 +992.84261 +1026.91568 +1050.93241 +1089.89245 +1117.89347 +1147.98225 +1175.98327 +2/1 diff --git a/scales/secor5_23stx.scl b/scales/secor5_23stx.scl new file mode 100644 index 0000000..99b4209 --- /dev/null +++ b/scales/secor5_23stx.scl @@ -0,0 +1,17 @@ +! secor5_23stx.scl +! +George Secor's synchronous 5/23-comma temperament extraordinaire + 12 +! + 62/59 + 66/59 + 70/59 + 591/472 + 315/236 + 331/236 + 353/236 + 745/472 + 395/236 + 1051/590 + 221/118 + 2/1 diff --git a/scales/secor5_23tx.scl b/scales/secor5_23tx.scl new file mode 100644 index 0000000..79f8380 --- /dev/null +++ b/scales/secor5_23tx.scl @@ -0,0 +1,17 @@ +! secor5_23tx.scl +! +George Secor's rational 5/23-comma temperament extraordinaire + 12 +! + 390/371 + 3321/2968 + 4397/3710 + 929/742 + 2476/1855 + 8325/5936 + 555/371 + 9365/5936 + 621/371 + 9904/5565 + 5559/2968 + 2/1 diff --git a/scales/secor5_23wt.scl b/scales/secor5_23wt.scl new file mode 100644 index 0000000..fd7006c --- /dev/null +++ b/scales/secor5_23wt.scl @@ -0,0 +1,17 @@ +! secor5_23wt.scl +! +George Secor's rational 5/23-comma proportional-beating well-temperament + 12 +! + 256/243 + 966664/863865 + 32/27 + 120176/95985 + 4/3 + 1024/729 + 143588/95985 + 128/81 + 160624/95985 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/secor_bicycle.scl b/scales/secor_bicycle.scl new file mode 100644 index 0000000..96e5a4e --- /dev/null +++ b/scales/secor_bicycle.scl @@ -0,0 +1,17 @@ +! secor_bicycle.scl +! +George Secor, 13-limit harmonic bicycle (1963), also Erv Wilson, see David Rosenthal: Helix Song, XH 7&8, 1979 + 12 +! + 13/12 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 13/8 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/secor_pelogic11.scl b/scales/secor_pelogic11.scl new file mode 100644 index 0000000..a0f7ec5 --- /dev/null +++ b/scales/secor_pelogic11.scl @@ -0,0 +1,16 @@ +! secor_pelogic11.scl +! +George Secor's isopelogic scale with ~537.84194 generator and just 13/11 (1979) + 11 +! + 40.57749 + 164.89361 + 13/11 + 413.52583 + 537.84194 + 662.15806 + 702.73555 + 827.05166 + 951.36778 + 1075.68389 + 2/1 diff --git a/scales/secor_pelogic7.scl b/scales/secor_pelogic7.scl new file mode 100644 index 0000000..4e17bf2 --- /dev/null +++ b/scales/secor_pelogic7.scl @@ -0,0 +1,12 @@ +! secor_pelogic7.scl +! +George Secor's isopelogic scale with ~537.84194 generator, just 13/11 and near just 11:13:15:19 tetrads (1979) + 7 +! + 124.31611 + 248.63222 + 537.84194 + 662.15806 + 786.47417 + 22/13 + 2/1 diff --git a/scales/secor_pelogic9.scl b/scales/secor_pelogic9.scl new file mode 100644 index 0000000..c4ee51c --- /dev/null +++ b/scales/secor_pelogic9.scl @@ -0,0 +1,14 @@ +! secor_pelogic9.scl +! +George Secor's isopelogic scale with ~537.84194 generator and just 13/11 (1979) + 9 +! + 164.89361 + 13/11 + 413.52583 + 537.84194 + 662.15806 + 827.05166 + 951.36778 + 1075.68389 + 2/1 diff --git a/scales/secor_swt149.scl b/scales/secor_swt149.scl new file mode 100644 index 0000000..aee397e --- /dev/null +++ b/scales/secor_swt149.scl @@ -0,0 +1,16 @@ +! secor_swt149.scl +George Secor's 149-based synchronous WT + 12 +! + 315/298 + 167/149 + 177/149 + 187/149 + 199/149 + 210/149 + 223/149 + 236/149 + 250/149 + 265/149 + 280/149 + 2/1 diff --git a/scales/secor_vrwt.scl b/scales/secor_vrwt.scl new file mode 100644 index 0000000..af275b4 --- /dev/null +++ b/scales/secor_vrwt.scl @@ -0,0 +1,17 @@ +! secor_vrwt.scl +! +George Secor's Victorian rational well-temperament (based on Ellis #2) +12 +! + 545/516 + 6071/5418 + 707447/595980 + 755/602 + 30118/22575 + 30535/21672 + 451/301 + 34315/21672 + 1514/903 + 2755/1548 + 20365/10836 + 2/1 diff --git a/scales/secor_wt1-5.scl b/scales/secor_wt1-5.scl new file mode 100644 index 0000000..a55f3d6 --- /dev/null +++ b/scales/secor_wt1-5.scl @@ -0,0 +1,17 @@ +! secor_wt1-5.scl +! +George Secor's 1/5-comma well-temperament (ratios supplied by G. W. Smith) + 12 +! + 256/243 + 75/67 + 32/27 + 2015/1608 + 4/3 + 9101/6480 + 401/268 + 128/81 + 1010/603 + 16/9 + 15/8 + 2/1 diff --git a/scales/secor_wt1-7.scl b/scales/secor_wt1-7.scl new file mode 100644 index 0000000..b87ebcb --- /dev/null +++ b/scales/secor_wt1-7.scl @@ -0,0 +1,17 @@ +! secor_wt1-7.scl +! +George Secor's 1/7-comma well-temperament + 12 +! +93.97984 +197.75601 +297.88984 +395.51202 +501.12200 +593.26802 +698.87800 +795.93484 +896.63401 +999.88484 +1094.39002 +2/1 diff --git a/scales/secor_wt1-7r.scl b/scales/secor_wt1-7r.scl new file mode 100644 index 0000000..d2d87e4 --- /dev/null +++ b/scales/secor_wt1-7r.scl @@ -0,0 +1,17 @@ +! secor_wt1-7r.scl +! +George Secor's 1/7-comma well-temperament, Gene Ward Smith rational version + 12 +! + 6264/5929 + 33232/29645 + 105592/88935 + 5322/4235 + 39597/29645 + 8352/5929 + 31706/21175 + 9396/5929 + 9952/5929 + 52796/29645 + 55782/29645 + 2/1 diff --git a/scales/secor_wt10.scl b/scales/secor_wt10.scl new file mode 100644 index 0000000..c9334c3 --- /dev/null +++ b/scales/secor_wt10.scl @@ -0,0 +1,17 @@ +! secor_wt10.scl +! +George Secor's 12-tone well-temperament, proportional beating + 12 +! + 95.22303 + 197.75601 + 297.21199 + 395.51202 + 501.12199 + 593.26803 + 698.87801 + 797.17803 + 896.63402 + 999.16699 + 1094.39003 + 2/1 diff --git a/scales/secor_wt2-11.scl b/scales/secor_wt2-11.scl new file mode 100644 index 0000000..872c9f3 --- /dev/null +++ b/scales/secor_wt2-11.scl @@ -0,0 +1,17 @@ +! secor_wt2-11.scl +! +George Secor's rational 2/11-comma well-temperament + 12 +! + 560/531 + 2643/2360 + 70/59 + 74/59 + 315/236 + 2240/1593 + 883/590 + 280/177 + 890/531 + 105/59 + 443/236 + 2/1 diff --git a/scales/secor_wtpb-24a.scl b/scales/secor_wtpb-24a.scl new file mode 100644 index 0000000..fab4110 --- /dev/null +++ b/scales/secor_wtpb-24a.scl @@ -0,0 +1,17 @@ +! secor_wtpb-24a.scl +! +George Secor's 24-triad proportional-beating well-temperament (24a) + 12 +! + 256/243 + 272/243 + 32/27 + 304/243 + 4/3 + 1024/729 + 364/243 + 128/81 + 2032/1215 + 16/9 + 152/81 + 2/1 diff --git a/scales/secor_wtpb-24b.scl b/scales/secor_wtpb-24b.scl new file mode 100644 index 0000000..c8daa7b --- /dev/null +++ b/scales/secor_wtpb-24b.scl @@ -0,0 +1,17 @@ +! secor_wtpb-24b.scl +! +George Secor's 24-triad proportional-beating well-temperament (24b) + 12 +! + 256/243 + 4076/3645 + 32/27 + 169/135 + 4/3 + 1024/729 + 202/135 + 128/81 + 2033/1215 + 16/9 + 6832/3645 + 2/1 diff --git a/scales/secor_wtpb-24c.scl b/scales/secor_wtpb-24c.scl new file mode 100644 index 0000000..6c6c2ad --- /dev/null +++ b/scales/secor_wtpb-24c.scl @@ -0,0 +1,17 @@ +! secor_wtpb-24c.scl +! +George Secor's 24-triad proportional-beating well-temperament (24c) + 12 +! + 96/91 + 102/91 + 108/91 + 114/91 + 243/182 + 128/91 + 545/364 + 144/91 + 305/182 + 162/91 + 683/364 + 2/1 \ No newline at end of file diff --git a/scales/secor_wtpb-24d.scl b/scales/secor_wtpb-24d.scl new file mode 100644 index 0000000..9f029db --- /dev/null +++ b/scales/secor_wtpb-24d.scl @@ -0,0 +1,17 @@ +! secor_wtpb-24d.scl +! +George Secor's 24-triad proportional-beating well-temperament (24d) + 12 +! + 315/298 + 167/149 + 177/149 + 187/149 + 199/149 + 210/149 + 223/149 + 236/149 + 250/149 + 531/298 + 280/149 + 2/1 diff --git a/scales/secor_wtpb-24e.scl b/scales/secor_wtpb-24e.scl new file mode 100644 index 0000000..58e94cf --- /dev/null +++ b/scales/secor_wtpb-24e.scl @@ -0,0 +1,17 @@ +! secor_wtpb-24e.scl +! +George Secor's 24-triad proportional-beating well-temperament (24e) + 12 +! + 581/550 + 28/25 + 653/550 + 69/55 + 367/275 + 31/22 + 412/275 + 871/550 + 461/275 + 89/50 + 47/25 + 2/1 diff --git a/scales/secoralternative10.scl b/scales/secoralternative10.scl new file mode 100644 index 0000000..30b7ef9 --- /dev/null +++ b/scales/secoralternative10.scl @@ -0,0 +1,31 @@ +! secoralternative10.scl +! +George Secor "meantone alternative", {196/195, 676/675}-tempering in POTE tuning of 2.3.5.7.13 scale + 10 +! + 140.00441 + 264.20379 + 388.40316 + 496.79750 + 594.80816 + 703.20250 + 843.20691 + 967.40629 + 1091.60566 + 2/1 +! +!! secoralternativeJI.scl +!! +!Transversal (original JI version) +! 10 +! +! 13/12 +! 7/6 +! 5/4 +! 4/3 +! 45/32 +! 3/2 +! 13/8 +! 7/4 +! 15/8 +! 2/1 diff --git a/scales/segah pentachord 17-limit.scl b/scales/segah pentachord 17-limit.scl new file mode 100644 index 0000000..94b210b --- /dev/null +++ b/scales/segah pentachord 17-limit.scl @@ -0,0 +1,9 @@ +! segah pentachord 17-limit.scl +! +Segah pentachord 42:45:51:56:63 + 4 +! + 15/14 + 17/14 + 4/3 + 3/2 diff --git a/scales/segah pentachord 5-limit.scl b/scales/segah pentachord 5-limit.scl new file mode 100644 index 0000000..5be3af2 --- /dev/null +++ b/scales/segah pentachord 5-limit.scl @@ -0,0 +1,9 @@ +! segah pentachord 5-limit.scl +! +Segah pentachord 30:32:36:40:45 + 4 +! + 16/15 + 6/5 + 4/3 + 3/2 diff --git a/scales/segah-ferahnak pentachord 19-limit.scl b/scales/segah-ferahnak pentachord 19-limit.scl new file mode 100644 index 0000000..501c87d --- /dev/null +++ b/scales/segah-ferahnak pentachord 19-limit.scl @@ -0,0 +1,10 @@ +! segah-ferahnak pentachord 19-limit.scl +! +Segah-Ferahnak pentachord 14:15:17:19:20:21 + 5 +! + 15/14 + 17/14 + 19/14 + 10/7 + 3/2 diff --git a/scales/segah2.scl b/scales/segah2.scl new file mode 100644 index 0000000..f1d52bb --- /dev/null +++ b/scales/segah2.scl @@ -0,0 +1,12 @@ +! segah2.scl +! +Iranian mode Segah from C + 7 +! + 200.000 cents + 340.000 cents + 500.000 cents + 700.000 cents + 840.000 cents + 1000.000 cents + 2/1 diff --git a/scales/segah99.scl b/scales/segah99.scl new file mode 100644 index 0000000..8868706 --- /dev/null +++ b/scales/segah99.scl @@ -0,0 +1,12 @@ +! segah99.scl +! +segah_rat in 99-tET tempering + 7 +! + 206.06061 + 351.51515 + 496.96970 + 703.03030 + 909.09091 + 1054.54545 + 2/1 diff --git a/scales/segah_rat.scl b/scales/segah_rat.scl new file mode 100644 index 0000000..9ec5efe --- /dev/null +++ b/scales/segah_rat.scl @@ -0,0 +1,12 @@ +! segah_rat.scl +! +Rationalized Arabic Segh + 7 +! + 9/8 + 11/9 + 4/3 + 3/2 + 27/16 + 11/6 + 2/1 diff --git a/scales/seidel_12.scl b/scales/seidel_12.scl new file mode 100644 index 0000000..d345429 --- /dev/null +++ b/scales/seidel_12.scl @@ -0,0 +1,17 @@ +! seidel_12.scl +! +Dave Seidel, Harmonicious 12-tone scale, TL 31-01-2009 + 12 +! + 9/8 + 58/49 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 27/16 + 11/6 + 31/16 + 2/1 diff --git a/scales/seidel_32.scl b/scales/seidel_32.scl new file mode 100644 index 0000000..cdf654b --- /dev/null +++ b/scales/seidel_32.scl @@ -0,0 +1,37 @@ +! seidel_32.scl +! +Dave Seidel, Base 9:7:4 Symmetry, scale for Passacaglia and Fugue State (2005) + 32 +! + 257/256 + 261/256 + 131/128 + 263/256 + 67/64 + 269/256 + 271/256 + 17/16 + 137/128 + 277/256 + 139/128 + 279/256 + 281/256 + 283/256 + 71/64 + 9/8 + 7/4 + 113/64 + 227/128 + 229/128 + 29/16 + 233/128 + 59/32 + 119/64 + 239/128 + 241/128 + 61/32 + 31/16 + 251/128 + 63/32 + 127/64 + 2/1 diff --git a/scales/seikilos.scl b/scales/seikilos.scl new file mode 100644 index 0000000..f0d16a4 --- /dev/null +++ b/scales/seikilos.scl @@ -0,0 +1,17 @@ +! seikilos.scl +! +Seikilos Tuning + 12 +! + 28/27 + 9/8 + 7/6 + 9/7 + 4/3 + 49/36 + 3/2 + 14/9 + 27/16 + 7/4 + 27/14 + 2/1 diff --git a/scales/sejati.scl b/scales/sejati.scl new file mode 100644 index 0000000..d81ef45 --- /dev/null +++ b/scales/sejati.scl @@ -0,0 +1,10 @@ +! sejati.scl +! +salendro sejati, Sunda + 5 +! + 282.00000 + 494.00000 + 706.00000 + 988.00000 + 2/1 diff --git a/scales/sekati1.scl b/scales/sekati1.scl new file mode 100644 index 0000000..08706db --- /dev/null +++ b/scales/sekati1.scl @@ -0,0 +1,12 @@ +! sekati1.scl +! +Gamelan sekati from Sumenep, East-Madura. 1/1=244 Hz + 7 +! + 149.45400 + 343.21000 + 458.57500 + 663.69400 + 838.34300 + 1008.90300 + 2/1 diff --git a/scales/sekati2.scl b/scales/sekati2.scl new file mode 100644 index 0000000..b85fde4 --- /dev/null +++ b/scales/sekati2.scl @@ -0,0 +1,12 @@ +! sekati2.scl +! +Gamelan Kyahi Sepuh from kraton Solo. 1/1=216 Hz + 7 +! + 171.55000 + 334.24300 + 539.62000 + 707.29000 + 820.68500 + 1011.79800 + 2/1 diff --git a/scales/sekati3.scl b/scales/sekati3.scl new file mode 100644 index 0000000..96f7d09 --- /dev/null +++ b/scales/sekati3.scl @@ -0,0 +1,12 @@ +! sekati3.scl +! +Gamelan Kyahi Henem from kraton Solo. 1/1=168.5 Hz + 7 +! + 189.58100 + 283.66800 + 597.85600 + 750.91600 + 841.71300 + 1032.94000 + 2/1 diff --git a/scales/sekati4.scl b/scales/sekati4.scl new file mode 100644 index 0000000..4450158 --- /dev/null +++ b/scales/sekati4.scl @@ -0,0 +1,12 @@ +! sekati4.scl +! +Gamelan Kyahi Guntur madu from kraton Jogya. 1/1=201.5 Hz + 7 +! + 63.26800 + 171.63100 + 464.42800 + 642.22600 + 778.97400 + 898.05100 + 2/1 diff --git a/scales/sekati5.scl b/scales/sekati5.scl new file mode 100644 index 0000000..2623782 --- /dev/null +++ b/scales/sekati5.scl @@ -0,0 +1,12 @@ +! sekati5.scl +! +Gamelan Kyahi Naga Ilaga from kraton Jogya. 1/1=218.5 Hz + 7 +! + 85.03300 + 301.05400 + 531.39600 + 627.75800 + 724.26000 + 874.02800 + 2/1 diff --git a/scales/sekati6.scl b/scales/sekati6.scl new file mode 100644 index 0000000..fc0fe75 --- /dev/null +++ b/scales/sekati6.scl @@ -0,0 +1,12 @@ +! sekati6.scl +! +Gamelan Kyahi Munggang from Paku Alaman, Jogya. 1/1=199.5 Hz + 7 +! + 145.56800 + 298.19800 + 543.01500 + 694.70800 + 850.18000 + 1007.50000 + 2/1 diff --git a/scales/sekati7.scl b/scales/sekati7.scl new file mode 100644 index 0000000..54dce9d --- /dev/null +++ b/scales/sekati7.scl @@ -0,0 +1,12 @@ +! sekati7.scl +! +Gamelan of Sultan Anom from Cheribon. 1/1=282 Hz + 7 +! + 158.29400 + 339.01600 + 605.16600 + 693.75000 + 828.20600 + 991.48000 + 2/1 diff --git a/scales/sekati8.scl b/scales/sekati8.scl new file mode 100644 index 0000000..a1686fe --- /dev/null +++ b/scales/sekati8.scl @@ -0,0 +1,12 @@ +! sekati8.scl +! +The old Sultans-gamelan Kyahi Suka rame from Banten. 1/1=262.5 Hz + 7 +! + 160.50200 + 326.59900 + 507.91000 + 654.03200 + 842.30200 + 929.27800 + 2/1 diff --git a/scales/sekati9.scl b/scales/sekati9.scl new file mode 100644 index 0000000..069eccf --- /dev/null +++ b/scales/sekati9.scl @@ -0,0 +1,12 @@ +! sekati9.scl +! +Gamelan Sekati from Katjerbonan, Cheribon. 1/1=292 Hz + 7 +! + 120.23300 + 298.76100 + 487.63800 + 629.30500 + 786.79900 + 958.63200 + 2/1 diff --git a/scales/selisir.scl b/scales/selisir.scl new file mode 100644 index 0000000..2141765 --- /dev/null +++ b/scales/selisir.scl @@ -0,0 +1,10 @@ +! selisir.scl +! +Gamelan semara pagulingan, Bali. Pagan Kelod + 5 +! + 110.00000 + 350.00000 + 650.00000 + 810.00000 + 1205.00000 diff --git a/scales/selisir2.scl b/scales/selisir2.scl new file mode 100644 index 0000000..f23c8ce --- /dev/null +++ b/scales/selisir2.scl @@ -0,0 +1,10 @@ +! selisir2.scl +! +Gamelan semara pagulingan, Bali. Kamasan + 5 +! + 115.00000 + 235.00000 + 630.00000 + 770.00000 + 1190.00000 diff --git a/scales/selisir3.scl b/scales/selisir3.scl new file mode 100644 index 0000000..6f23dc0 --- /dev/null +++ b/scales/selisir3.scl @@ -0,0 +1,10 @@ +! selisir3.scl +! +Gamelan gong, Pliatan, Bali. 1/1=280 Hz, McPhee, 1966 + 5 +! + 148.05890 + 268.63657 + 638.99410 + 762.70629 + 2/1 diff --git a/scales/selisir4.scl b/scales/selisir4.scl new file mode 100644 index 0000000..f4fe7cf --- /dev/null +++ b/scales/selisir4.scl @@ -0,0 +1,10 @@ +! selisir4.scl +! +Gamelan gong, Apuan, Bali. 1/1=285 Hz. McPhee, 1966 + 5 +! + 100.30396 + 211.31852 + 629.59439 + 732.06418 + 2/1 diff --git a/scales/selisir5.scl b/scales/selisir5.scl new file mode 100644 index 0000000..97e3482 --- /dev/null +++ b/scales/selisir5.scl @@ -0,0 +1,10 @@ +! selisir5.scl +! +Gamelan gong, Sayan, Bali. 1/1=275 Hz. McPhee, 1966 + 5 +! + 91.94554 + 289.20972 + 661.61786 + 761.76534 + 2/1 diff --git a/scales/selisir6.scl b/scales/selisir6.scl new file mode 100644 index 0000000..1823e64 --- /dev/null +++ b/scales/selisir6.scl @@ -0,0 +1,10 @@ +! selisir6.scl +! +Gamelan gong, Gianyar, Bali. 1/1=274 Hz. McPhee, 1966 + 5 +! + 133.70554 + 306.13769 + 718.72253 + 800.20741 + 2/1 diff --git a/scales/semafip.scl b/scales/semafip.scl new file mode 100644 index 0000000..d445404 --- /dev/null +++ b/scales/semafip.scl @@ -0,0 +1,13 @@ +! semafip.scl +Lesfip scale related to Semaphore[9] +9 +! +115.58705 +317.36560 +383.67934 +499.33824 +700.66176 +816.32066 +882.63440 +1084.41295 +2/1 diff --git a/scales/senior.scl b/scales/senior.scl new file mode 100644 index 0000000..9b20b54 --- /dev/null +++ b/scales/senior.scl @@ -0,0 +1,176 @@ +! senior.scl +! +Senior temperament, g=322.801387, 5-limit + 171 +! + 7.16394 + 14.32788 + 20.52899 + 27.69293 + 34.85687 + 42.02080 + 49.18474 + 56.34868 + 62.54980 + 69.71373 + 76.87767 + 84.04161 + 91.20555 + 98.36949 + 105.53342 + 111.73454 + 118.89848 + 126.06241 + 133.22635 + 140.39029 + 147.55423 + 154.71817 + 160.91928 + 168.08322 + 175.24716 + 182.41110 + 189.57503 + 196.73897 + 202.94009 + 210.10402 + 217.26796 + 224.43190 + 231.59584 + 238.75978 + 245.92372 + 252.12483 + 259.28877 + 266.45271 + 273.61664 + 280.78058 + 287.94452 + 294.14563 + 301.30957 + 308.47351 + 315.63745 + 322.80139 + 329.96533 + 337.12926 + 343.33038 + 350.49432 + 357.65825 + 364.82219 + 371.98613 + 379.15007 + 5/4 + 392.51512 + 399.67906 + 406.84300 + 414.00693 + 421.17087 + 428.33481 + 434.53593 + 441.69986 + 448.86380 + 456.02774 + 463.19168 + 470.35562 + 477.51955 + 483.72067 + 490.88461 + 498.04854 + 505.21248 + 512.37642 + 519.54036 + 525.74147 + 532.90541 + 540.06935 + 547.23329 + 554.39723 + 561.56116 + 568.72510 + 574.92622 + 582.09015 + 589.25409 + 596.41803 + 603.58197 + 610.74591 + 616.94702 + 624.11096 + 631.27490 + 638.43884 + 645.60277 + 652.76671 + 659.93065 + 666.13176 + 673.29570 + 680.45964 + 687.62358 + 694.78752 + 701.95146 + 709.11539 + 715.31651 + 722.48045 + 729.64438 + 736.80832 + 743.97226 + 751.13620 + 757.33731 + 764.50125 + 771.66519 + 778.82913 + 785.99307 + 793.15700 + 800.32094 + 806.52206 + 8/5 + 820.84993 + 828.01387 + 835.17781 + 842.34175 + 848.54286 + 855.70680 + 862.87074 + 870.03467 + 877.19861 + 884.36255 + 891.52649 + 897.72760 + 904.89154 + 912.05548 + 919.21942 + 926.38336 + 933.54729 + 939.74841 + 946.91235 + 954.07628 + 961.24022 + 968.40416 + 975.56810 + 982.73204 + 988.93315 + 996.09709 + 1003.26103 + 1010.42497 + 1017.58890 + 1024.75284 + 1031.91678 + 1038.11789 + 1045.28183 + 1052.44577 + 1059.60971 + 1066.77365 + 1073.93759 + 1080.13870 + 1087.30264 + 1094.46658 + 1101.63051 + 1108.79445 + 1115.95839 + 1123.12233 + 1129.32344 + 1136.48738 + 1143.65132 + 1150.81526 + 1157.97920 + 1165.14313 + 1171.34425 + 1178.50819 + 1185.67212 + 1192.83606 + 2/1 diff --git a/scales/sensax.scl b/scales/sensax.scl new file mode 100644 index 0000000..f692e26 --- /dev/null +++ b/scales/sensax.scl @@ -0,0 +1,25 @@ +! sensax.scl +Sensamagic tweak +21 +! +50.14242 +115.82189 +151.42408 +201.08512 +267.01496 +317.42478 +383.15371 +433.91306 +499.54606 +549.02293 +585.42415 +650.44950 +700.52674 +751.56246 +816.73731 +882.27688 +933.49479 +1018.35453 +1084.18083 +1148.96438 +2/1 diff --git a/scales/sensi19.scl b/scales/sensi19.scl new file mode 100644 index 0000000..ee0a07f --- /dev/null +++ b/scales/sensi19.scl @@ -0,0 +1,24 @@ +! sensi19.scl +! +Sensi[19] + 19 +! + 72.77227 + 128.93789 + 201.71016 + 257.87578 + 314.04141 + 386.81367 + 442.97930 + 515.75156 + 571.91719 + 628.08281 + 700.85508 + 757.02070 + 829.79297 + 885.95859 + 958.73086 + 1014.89648 + 1071.06211 + 1143.83438 + 2/1 diff --git a/scales/sensi19br1.scl b/scales/sensi19br1.scl new file mode 100644 index 0000000..42c69e3 --- /dev/null +++ b/scales/sensi19br1.scl @@ -0,0 +1,24 @@ +! sensi19br1.scl +Sensi[19] with a brat of 1 +19 +! +76.257330780373381909 +129.88836294010183147 +206.14569372047521346 +259.77672588020366297 +336.03405666057704494 +389.66508882030549448 +443.29612098003394384 +519.55345176040732583 +573.18448392013577534 +649.44181470050915724 +703.07284686023760674 +779.33017764061098878 +832.96120980033943817 +886.59224196006788767 +962.84957274044126970 +1016.4806049001697190 +1092.7379356805431011 +1146.3689678402715506 +2/1 +! x^9 - 5x^7 + 20 diff --git a/scales/sensidia.scl b/scales/sensidia.scl new file mode 100644 index 0000000..e015486 --- /dev/null +++ b/scales/sensidia.scl @@ -0,0 +1,31 @@ +! sensidia.scl +Detempered Sensi[27]; contains 7-limit diamond +27 +! +28/27 +21/20 +15/14 +10/9 +8/7 +7/6 +6/5 +56/45 +5/4 +9/7 +4/3 +27/20 +7/5 +10/7 +40/27 +3/2 +14/9 +8/5 +45/28 +5/3 +12/7 +7/4 +9/5 +28/15 +40/21 +27/14 +2/1 diff --git a/scales/sensisynch19.scl b/scales/sensisynch19.scl new file mode 100644 index 0000000..37f1a7a --- /dev/null +++ b/scales/sensisynch19.scl @@ -0,0 +1,24 @@ +! sensisynch19.scl +! +Sensi[19] in synch (brat=-1) tuning, generator ~162/125 satisfies g^9-g^7-4=0 + 19 +! + 70.11537 + 128.21328 + 198.32865 + 256.42657 + 314.52448 + 384.63985 + 442.73776 + 512.85313 + 570.95104 + 629.04896 + 699.16433 + 757.26224 + 827.37761 + 885.47552 + 955.59089 + 1013.68881 + 1071.78672 + 1141.90209 + 2/1 diff --git a/scales/septenarius440.scl b/scales/septenarius440.scl new file mode 100644 index 0000000..8fad7cd --- /dev/null +++ b/scales/septenarius440.scl @@ -0,0 +1,18 @@ +! septenarius440.scl +! +Andreas Sparschuh's septenarius @ middle c'=263Hz or a'=440Hz +! +12 +! +278/263 ! C# +294/263 ! D +312/263 ! Eb +330/263 ! E +351/263 ! F +371/263 ! F# +393/263 ! G +416/263 ! G# +440/263 ! A +468/263 ! Bb +495/263 ! B +2/1 diff --git a/scales/septenarius440a.scl b/scales/septenarius440a.scl new file mode 100644 index 0000000..3c6cbab --- /dev/null +++ b/scales/septenarius440a.scl @@ -0,0 +1,18 @@ +! septenarius440a.scl +! +Tom Dent's septenarius @ middle c'=262 Hz or a'=440 Hz +! +12 +! +278/262 ! C# +294/262 ! D +312/262 ! Eb +330/262 ! E +350/262 ! F +371/262 ! F# +393/262 ! G +416/262 ! G# +440/262 ! A +468/262 ! Bb +495/262 ! B +2/1 diff --git a/scales/septenariusGG49.scl b/scales/septenariusGG49.scl new file mode 100644 index 0000000..a378e43 --- /dev/null +++ b/scales/septenariusGG49.scl @@ -0,0 +1,16 @@ +! septenariusGG49.scl +Sparschuh's version @ middle-c'=262Hz or a'=440Hz +12 +!absolute pitches relativ to c=131 Hz +555/524 ! c# 138.75 Hz +147/131 ! d +156/131 ! eb +165/131 ! e +175/131 ! f +185/131 ! f# +196/131 ! g +208/131 ! g# +220/131 ! a 440Hz/2 +234/131 ! bb +247/131 ! b +2/1 diff --git a/scales/septicyc.scl b/scales/septicyc.scl new file mode 100644 index 0000000..0ac5c35 --- /dev/null +++ b/scales/septicyc.scl @@ -0,0 +1,15 @@ +! septicyc.scl +Gene Ward Smith, septicyclic 1029/1024-tempered scale, in 252-tET +11 +! +152.380952 +233.333333 +385.714286 +466.666667 +500.000000 +700.000000 +733.333333 +885.714286 +966.666667 +1119.047619 +2/1 diff --git a/scales/serafini-11.scl b/scales/serafini-11.scl new file mode 100644 index 0000000..1304461 --- /dev/null +++ b/scales/serafini-11.scl @@ -0,0 +1,17 @@ +! serafini-11.scl +! +Carlo Serafini, scale of "Piano 11" + 12 +! + 11/10 + 9/8 + 7/6 + 5/4 + 11/8 + 10/7 + 3/2 + 8/5 + 5/3 + 7/4 + 20/11 + 2/1 diff --git a/scales/serre_enh.scl b/scales/serre_enh.scl new file mode 100644 index 0000000..05a856b --- /dev/null +++ b/scales/serre_enh.scl @@ -0,0 +1,12 @@ +! serre_enh.scl +! +Dorian mode of the Serre's Enharmonic + 7 +! + 64/63 + 16/15 + 4/3 + 3/2 + 32/21 + 8/5 + 2/1 diff --git a/scales/sev-elev.scl b/scales/sev-elev.scl new file mode 100644 index 0000000..d502971 --- /dev/null +++ b/scales/sev-elev.scl @@ -0,0 +1,17 @@ +! sev-elev.scl +! +"Seven-Eleven Blues" of Pitch Palette + 12 +! + 16/15 + 9/8 + 7/6 + 5/4 + 9/7 + 11/8 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/sevish.scl b/scales/sevish.scl new file mode 100644 index 0000000..3467001 --- /dev/null +++ b/scales/sevish.scl @@ -0,0 +1,17 @@ +! sevish.scl +! +Sean "Sevish" Archibald's "Trapped in a Cycle" JI scale + 12 +! + 33/32 + 9/8 + 7/6 + 5/4 + 21/16 + 11/8 + 3/2 + 77/48 + 5/3 + 27/16 + 7/4 + 2/1 diff --git a/scales/sha.scl b/scales/sha.scl new file mode 100644 index 0000000..0e5e8bc --- /dev/null +++ b/scales/sha.scl @@ -0,0 +1,29 @@ +! sha.scl +! +Three chains of sqrt(3/2) separated by 10/7 + 24 +! + 50/49 + 15/14 + 147.06750 + 182.04311 + 9/8 + 238.88562 + 266.51031 + 350.97750 + 385.95312 + 470.42031 + 4/3 + 533.02061 + 10/7 + 3/2 + 75/49 + 764.55531 + 821.39781 + 849.02250 + 883.99811 + 968.46531 + 1052.93250 + 1087.90812 + 40/21 + 2/1 diff --git a/scales/shahin.scl b/scales/shahin.scl new file mode 100644 index 0000000..fda9663 --- /dev/null +++ b/scales/shahin.scl @@ -0,0 +1,23 @@ +! shahin.scl +! +Mohajeri Shahin Iranian style scale, TL 9-4-2006 + 18 +! + 18/17 + 27/25 + 9/8 + 108/91 + 108/89 + 54/43 + 4/3 + 108/79 + 27/19 + 36/25 + 3/2 + 27/17 + 18/11 + 27/16 + 108/61 + 108/59 + 36/19 + 2/1 diff --git a/scales/shahin2.scl b/scales/shahin2.scl new file mode 100644 index 0000000..5f6a86d --- /dev/null +++ b/scales/shahin2.scl @@ -0,0 +1,23 @@ +! shahin2.scl +! +Mohajeri Shahin 17-limit 18-tone Persian scale, TL 08-07-2007 + 18 +! + 18/17 + 13/12 + 9/8 + 81/68 + 39/32 + 81/64 + 4/3 + 351/256 + 24/17 + 13/9 + 3/2 + 27/17 + 13/8 + 27/16 + 16/9 + 117/64 + 32/17 + 2/1 diff --git a/scales/shahin_adl.scl b/scales/shahin_adl.scl new file mode 100644 index 0000000..73b10d7 --- /dev/null +++ b/scales/shahin_adl.scl @@ -0,0 +1,17 @@ +! shahin_adl.scl +! +Mohajeri Shahin, arithmetic division of length temperament, TL 14-12-2006 + 12 +! + 10000/9453 + 8250/7367 + 110000/92731 + 13750/10937 + 66000/49513 + 6875/4863 + 22000/14671 + 20625/12968 + 110000/65231 + 2750/1539 + 30000/15859 + 2/1 diff --git a/scales/shahin_agin.scl b/scales/shahin_agin.scl new file mode 100644 index 0000000..e114826 --- /dev/null +++ b/scales/shahin_agin.scl @@ -0,0 +1,17 @@ +! shahin_agin.scl +! +Mohajeri Shahin, Microaginco (2007) + 12 +! + 75.00000 + 150.00000 + 237.50000 + 325.00000 + 412.50000 + 537.50000 + 662.50000 + 725.00000 + 837.50000 + 950.00000 + 1075.00000 + 2/1 diff --git a/scales/shahin_baran.scl b/scales/shahin_baran.scl new file mode 100644 index 0000000..4b51733 --- /dev/null +++ b/scales/shahin_baran.scl @@ -0,0 +1,17 @@ +! shahin_baran.scl +! +Mohajeri Shahin, Baran scale + 12 +! + 80.00000 + 166.66667 + 260.00000 + 360.00000 + 466.66667 + 580.00000 + 700.00000 + 780.00000 + 870.00000 + 970.00000 + 1080.00000 + 2/1 diff --git a/scales/shahin_dance.scl b/scales/shahin_dance.scl new file mode 100644 index 0000000..6fa3b38 --- /dev/null +++ b/scales/shahin_dance.scl @@ -0,0 +1,12 @@ +! shahin_dance.scl +! +Mohajeri Shahin, microtonal dance, 2 unequal tetrachords. TL 01-10-2007 + 7 +! + 137.50000 + 375.00000 + 537.50000 + 725.00000 + 937.50000 + 1100.00000 + 2/1 diff --git a/scales/shahin_wt.scl b/scales/shahin_wt.scl new file mode 100644 index 0000000..d03e677 --- /dev/null +++ b/scales/shahin_wt.scl @@ -0,0 +1,17 @@ +! shahin_wt.scl +! +Mohajeri Shahin, well temperament, TL 28-12-2006 + 12 +! + 98.47944 + 203.47556 + 301.95500 + 400.00000 + 498.47944 + 603.47556 + 3/2 + 800.00000 + 898.47944 + 1003.47556 + 1101.95500 + 2/1 diff --git a/scales/shalfun.scl b/scales/shalfun.scl new file mode 100644 index 0000000..d4c0fa0 --- /dev/null +++ b/scales/shalfun.scl @@ -0,0 +1,29 @@ +! shalfun.scl +! +d'Erlanger vol.5, p. 40. After Alexandre ^Salfun (Chalfoun) + 24 +! + 1000/971 + 10000/9429 + 2500/2289 + 9/8 + 125/108 + 25/21 + 1250/1021 + 500/397 + 5000/3859 + 4/3 + 2000/1457 + 400/283 + 10000/6869 + 3/2 + 1250/809 + 2000/1257 + 10000/6103 + 27/16 + 10000/5757 + 5000/2797 + 10000/5437 + 5000/2643 + 10000/5141 + 2/1 diff --git a/scales/shansx.scl b/scales/shansx.scl new file mode 100644 index 0000000..d2d92d2 --- /dev/null +++ b/scales/shansx.scl @@ -0,0 +1,17 @@ +! shansx.scl +! +Untempered Tanaka/Hanson harmonic system including the kleisma + 12 +! + 648/625 + 144/125 + 6/5 + 3888/3125 + 864/625 + 36/25 + 8/5 + 5184/3125 + 216/125 + 48/25 + 31104/15625 + 2/1 diff --git a/scales/sharm1c-conm.scl b/scales/sharm1c-conm.scl new file mode 100644 index 0000000..8567d2f --- /dev/null +++ b/scales/sharm1c-conm.scl @@ -0,0 +1,12 @@ +! sharm1c-conm.scl +! +Subharm1C-ConMixolydian + 7 +! + 7/6 + 28/23 + 14/11 + 14/9 + 28/17 + 7/4 + 2/1 diff --git a/scales/sharm1c-conp.scl b/scales/sharm1c-conp.scl new file mode 100644 index 0000000..7d72736 --- /dev/null +++ b/scales/sharm1c-conp.scl @@ -0,0 +1,12 @@ +! sharm1c-conp.scl +! +Subharm1C-ConPhryg + 7 +! + 6/5 + 24/19 + 4/3 + 8/5 + 12/7 + 24/13 + 2/1 diff --git a/scales/sharm1c-dor.scl b/scales/sharm1c-dor.scl new file mode 100644 index 0000000..1ea1c7e --- /dev/null +++ b/scales/sharm1c-dor.scl @@ -0,0 +1,13 @@ +! sharm1c-dor.scl +! +Subharm1C-Dorian + 8 +! + 11/9 + 22/17 + 11/8 + 22/15 + 11/7 + 11/6 + 23/11 + 2/1 diff --git a/scales/sharm1c-lyd.scl b/scales/sharm1c-lyd.scl new file mode 100644 index 0000000..e7d4421 --- /dev/null +++ b/scales/sharm1c-lyd.scl @@ -0,0 +1,13 @@ +! sharm1c-lyd.scl +! +Subharm1C-Lydian + 8 +! + 13/11 + 26/21 + 13/10 + 19/13 + 13/9 + 13/7 + 52/27 + 2/1 diff --git a/scales/sharm1c-mix.scl b/scales/sharm1c-mix.scl new file mode 100644 index 0000000..56a4310 --- /dev/null +++ b/scales/sharm1c-mix.scl @@ -0,0 +1,12 @@ +! sharm1c-mix.scl +! +Subharm1C-Mixolydian + 7 +! + 7/6 + 28/23 + 14/11 + 7/5 + 7/4 + 28/15 + 2/1 diff --git a/scales/sharm1c-phr.scl b/scales/sharm1c-phr.scl new file mode 100644 index 0000000..6739d68 --- /dev/null +++ b/scales/sharm1c-phr.scl @@ -0,0 +1,12 @@ +! sharm1c-phr.scl +! +Subharm1C-Phrygian + 7 +! + 6/5 + 24/19 + 4/3 + 3/2 + 24/13 + 48/25 + 2/1 diff --git a/scales/sharm1e-conm.scl b/scales/sharm1e-conm.scl new file mode 100644 index 0000000..f7aa4dd --- /dev/null +++ b/scales/sharm1e-conm.scl @@ -0,0 +1,12 @@ +! sharm1e-conm.scl +! +Subharm1E-ConMixolydian + 7 +! + 28/23 + 56/45 + 14/11 + 28/17 + 56/33 + 7/4 + 2/1 diff --git a/scales/sharm1e-conp.scl b/scales/sharm1e-conp.scl new file mode 100644 index 0000000..5a64930 --- /dev/null +++ b/scales/sharm1e-conp.scl @@ -0,0 +1,12 @@ +! sharm1e-conp.scl +! +Subharm1E-ConPhrygian + 7 +! + 24/19 + 48/37 + 4/3 + 12/7 + 16/9 + 24/13 + 2/1 diff --git a/scales/sharm1e-dor.scl b/scales/sharm1e-dor.scl new file mode 100644 index 0000000..c648b17 --- /dev/null +++ b/scales/sharm1e-dor.scl @@ -0,0 +1,13 @@ +! sharm1e-dor.scl +! +Subharm1E-Dorian + 8 +! + 22/17 + 4/3 + 11/8 + 22/15 + 11/7 + 44/23 + 88/45 + 2/1 diff --git a/scales/sharm1e-lyd.scl b/scales/sharm1e-lyd.scl new file mode 100644 index 0000000..33bed87 --- /dev/null +++ b/scales/sharm1e-lyd.scl @@ -0,0 +1,13 @@ +! SHARM1E-lyd.scl +! +Subharm1E-Lydian + 8 +! + 26/21 + 52/41 + 13/10 + 19/13 + 13/9 + 52/27 + 104/53 + 2/1 diff --git a/scales/sharm1e-mix.scl b/scales/sharm1e-mix.scl new file mode 100644 index 0000000..72f7de7 --- /dev/null +++ b/scales/sharm1e-mix.scl @@ -0,0 +1,12 @@ +! sharm1e-mix.scl +! +Subharm1E-Mixolydian + 7 +! + 28/23 + 56/45 + 14/11 + 7/5 + 28/15 + 56/29 + 2/1 diff --git a/scales/sharm1e-phr.scl b/scales/sharm1e-phr.scl new file mode 100644 index 0000000..3cd0dec --- /dev/null +++ b/scales/sharm1e-phr.scl @@ -0,0 +1,12 @@ +! sharm1e-phr.scl +! +Subharm1E-Phrygian + 7 +! + 24/19 + 48/37 + 4/3 + 3/2 + 48/25 + 96/49 + 2/1 diff --git a/scales/sharm2c-15.scl b/scales/sharm2c-15.scl new file mode 100644 index 0000000..4368beb --- /dev/null +++ b/scales/sharm2c-15.scl @@ -0,0 +1,12 @@ +! SHARM2C-15.scl +! +Subharm2C-15-Harmonia + 7 +! + 5/4 + 30/23 + 15/11 + 3/2 + 30/17 + 15/8 + 2/1 diff --git a/scales/sharm2c-hypod.scl b/scales/sharm2c-hypod.scl new file mode 100644 index 0000000..61b05d9 --- /dev/null +++ b/scales/sharm2c-hypod.scl @@ -0,0 +1,13 @@ +! sharm2c-hypod.scl +! +SHarm2C-Hypodorian + 8 +! + 16/13 + 32/25 + 4/3 + 32/23 + 16/11 + 16/9 + 32/17 + 2/1 diff --git a/scales/sharm2c-hypol.scl b/scales/sharm2c-hypol.scl new file mode 100644 index 0000000..25b69a9 --- /dev/null +++ b/scales/sharm2c-hypol.scl @@ -0,0 +1,13 @@ +! SHarm2C-Hypol.scl +! +SHarm2C-Hypolydian + 8 +! + 20/17 + 5/4 + 4/3 + 10/7 + 20/13 + 20/11 + 40/21 + 2/1 diff --git a/scales/sharm2c-hypop.scl b/scales/sharm2c-hypop.scl new file mode 100644 index 0000000..01f7b42 --- /dev/null +++ b/scales/sharm2c-hypop.scl @@ -0,0 +1,13 @@ +! SHarm2C-Hypop.scl +! +SHarm2C-Hypophrygian + 8 +! + 9/7 + 4/3 + 18/13 + 36/25 + 3/2 + 9/5 + 36/19 + 2/1 diff --git a/scales/sharm2e-15.scl b/scales/sharm2e-15.scl new file mode 100644 index 0000000..7116285 --- /dev/null +++ b/scales/sharm2e-15.scl @@ -0,0 +1,12 @@ +! sharm2e-15.scl +! +Subharm2E-15-Harmonia + 7 +! + 30/23 + 4/3 + 15/11 + 3/2 + 15/8 + 60/31 + 2/1 diff --git a/scales/sharm2e-hypod.scl b/scales/sharm2e-hypod.scl new file mode 100644 index 0000000..708406f --- /dev/null +++ b/scales/sharm2e-hypod.scl @@ -0,0 +1,13 @@ +! SHarm2E-Hypod.scl +! +SHarm2E-Hypodorian + 8 +! + 32/25 + 64/49 + 4/3 + 32/23 + 16/11 + 32/17 + 64/33 + 2/1 diff --git a/scales/sharm2e-hypol.scl b/scales/sharm2e-hypol.scl new file mode 100644 index 0000000..1e680cf --- /dev/null +++ b/scales/sharm2e-hypol.scl @@ -0,0 +1,13 @@ +! SHarm2E-Hypol.scl +! +SHarm2E-Hypolydian + 8 +! + 5/4 + 40/31 + 4/3 + 10/7 + 20/13 + 40/21 + 80/41 + 2/1 diff --git a/scales/sharm2e-hypop.scl b/scales/sharm2e-hypop.scl new file mode 100644 index 0000000..7ed2337 --- /dev/null +++ b/scales/sharm2e-hypop.scl @@ -0,0 +1,13 @@ +! SHarm2E-Hypop.scl +! +SHarm2E-Hypophrygian + 8 +! + 4/3 + 72/53 + 18/13 + 36/25 + 3/2 + 36/19 + 72/37 + 2/1 diff --git a/scales/sheiman.scl b/scales/sheiman.scl new file mode 100644 index 0000000..ba2409f --- /dev/null +++ b/scales/sheiman.scl @@ -0,0 +1,19 @@ +! sheiman.scl +! +Michael Sheiman's harmonic scale, TL 2-2-2009 + 14 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 27/16 + 7/4 + 29/16 + 31/16 + 2/1 diff --git a/scales/sheiman_7.scl b/scales/sheiman_7.scl new file mode 100644 index 0000000..91777c6 --- /dev/null +++ b/scales/sheiman_7.scl @@ -0,0 +1,12 @@ +! sheiman_7.scl +! +Michael Sheiman's 7-tone 11-limit symmetrical just scale, TL 79656 + 7 +! + 12/11 + 6/5 + 4/3 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/sheiman_9.scl b/scales/sheiman_9.scl new file mode 100644 index 0000000..1ffc5e1 --- /dev/null +++ b/scales/sheiman_9.scl @@ -0,0 +1,14 @@ +! sheiman_9.scl +! +Michael Sheiman's 9-tone JI scale, TL 27-03-2009 + 9 +! + 17/16 + 9/8 + 19/16 + 5/4 + 4/3 + 7/5 + 28/19 + 14/9 + 21/13 diff --git a/scales/sheiman_michael-phi.scl b/scales/sheiman_michael-phi.scl new file mode 100644 index 0000000..3f5536b --- /dev/null +++ b/scales/sheiman_michael-phi.scl @@ -0,0 +1,14 @@ +! sheiman_michael-phi.scl +! +Michael Sheiman's Phi Section scale, from Tuning List + 9 +! + 149.464 + 235.774 + 273.024 + 366.910 + 466.181 + 560.566 + 597.316 + 683.627 + 833.090 diff --git a/scales/sheiman_phi_r.scl b/scales/sheiman_phi_r.scl new file mode 100644 index 0000000..ab43456 --- /dev/null +++ b/scales/sheiman_phi_r.scl @@ -0,0 +1,13 @@ +! sheiman_phi_r.scl +! +Rational version of Michael Sheiman's Phi scale + 8 +! + 18/17 + 9/8 + 19/16 + 19/15 + 4/3 + 10/7 + 20/13 + 21/13 diff --git a/scales/sheiman_phiter6.scl b/scales/sheiman_phiter6.scl new file mode 100644 index 0000000..44c1d38 --- /dev/null +++ b/scales/sheiman_phiter6.scl @@ -0,0 +1,11 @@ +! sheiman_phiter6.scl +! +Michael Sheiman's Phiter scale + 6 +! + 198.52000 + 297.78000 + 496.30000 + 664.66200 + 763.92200 + 833.02400 diff --git a/scales/sheiman_silver.scl b/scales/sheiman_silver.scl new file mode 100644 index 0000000..f077699 --- /dev/null +++ b/scales/sheiman_silver.scl @@ -0,0 +1,17 @@ +! sheiman_silver.scl +! +Michael Sheiman's Silver scale, TL 26-03-2010 + 12 +! + 13/12 + 9/8 + 39/32 + 117/88 + 63/44 + 3/2 + 25/16 + 5/3 + 16/9 + 24/13 + 25/13 + 2/1 diff --git a/scales/shell5_2.scl b/scales/shell5_2.scl new file mode 100644 index 0000000..c87acbc --- /dev/null +++ b/scales/shell5_2.scl @@ -0,0 +1,18 @@ +! shell5_2.scl +! +5-limit Hahn Shell 2, Gene Ward Smith + 13 +! + 25/24 + 16/15 + 10/9 + 9/8 + 32/25 + 25/18 + 36/25 + 25/16 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/shell5_3.scl b/scales/shell5_3.scl new file mode 100644 index 0000000..d0ef647 --- /dev/null +++ b/scales/shell5_3.scl @@ -0,0 +1,24 @@ +! shell5_3.scl +! +5-limit Hahn Shell 3, Gene Ward Smith + 19 +! + 128/125 + 27/25 + 144/125 + 125/108 + 75/64 + 32/27 + 125/96 + 27/20 + 45/32 + 64/45 + 40/27 + 192/125 + 27/16 + 128/75 + 216/125 + 125/72 + 50/27 + 125/64 + 2/1 diff --git a/scales/shell5_4.scl b/scales/shell5_4.scl new file mode 100644 index 0000000..56fdc84 --- /dev/null +++ b/scales/shell5_4.scl @@ -0,0 +1,30 @@ +! shell5_4.scl +! +5-limit Hahn Shell 4, Gene Ward Smith + 25 +! + 81/80 + 648/625 + 135/128 + 625/576 + 256/225 + 625/512 + 768/625 + 100/81 + 81/64 + 162/125 + 512/375 + 864/625 + 625/432 + 375/256 + 125/81 + 128/81 + 81/50 + 625/384 + 1024/625 + 225/128 + 1152/625 + 256/135 + 625/324 + 160/81 + 2/1 diff --git a/scales/shell7_2.scl b/scales/shell7_2.scl new file mode 100644 index 0000000..f6e0d97 --- /dev/null +++ b/scales/shell7_2.scl @@ -0,0 +1,48 @@ +! shell7_2.scl +! +7-limit Hahn Shell 2, Gene Ward Smith + 43 +! + 50/49 + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 28/25 + 9/8 + 25/21 + 60/49 + 49/40 + 32/25 + 9/7 + 64/49 + 21/16 + 49/36 + 48/35 + 25/18 + 36/25 + 35/24 + 72/49 + 32/21 + 49/32 + 14/9 + 25/16 + 80/49 + 49/30 + 42/25 + 16/9 + 25/14 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 48/25 + 35/18 + 96/49 + 49/25 + 2/1 diff --git a/scales/sherwood.scl b/scales/sherwood.scl new file mode 100644 index 0000000..9476803 --- /dev/null +++ b/scales/sherwood.scl @@ -0,0 +1,17 @@ +! sherwood.scl +! +Sherwood's improved meantone temperament + 12 +! + 114.420 cents + 194.501 cents + 308.921 cents + 389.002 cents + 503.422 cents + 583.503 cents + 697.923 cents + 812.342 cents + 892.424 cents + 1006.843 cents + 1086.925 cents + 1201.344 cents diff --git a/scales/shmigelsky.scl b/scales/shmigelsky.scl new file mode 100644 index 0000000..e8d1341 --- /dev/null +++ b/scales/shmigelsky.scl @@ -0,0 +1,28 @@ +! shmigelsky.scl +! +Shmigelsky's 7-limit just scale (2002) + 23 +! + 21/20 + 16/15 + 35/32 + 9/8 + 7/6 + 6/5 + 315/256 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 105/64 + 5/3 + 7/4 + 9/5 + 175/96 + 15/8 + 35/18 + 2/1 diff --git a/scales/shrutar.scl b/scales/shrutar.scl new file mode 100644 index 0000000..7aa82b5 --- /dev/null +++ b/scales/shrutar.scl @@ -0,0 +1,27 @@ +! shrutar.scl +! +Paul Erlich's Shrutar tuning (from 9th fret) tempered with Dave Keenan + 22 +! + 33/32 + 101.95500 ! 16/15 / (2048/2025)^(1/2) + 12/11 + 9/8 + 262.02693 ! 7/6 / (896/891)^(1/2) + 6/5 + 5/4 + 9/7 + 4/3 + 11/8 + 595.11186 ! 45/32 * (2048/2025)^(1/4) + 643.83808 ! 16/11 / (896/891)^(1/2) + 3/2 + 760.07192 ! 14/9 / (896/891)^(1/2) + 808.79814 ! 8/5 / (2048/2025)^(1/4) + 18/11 + 27/16 + 7/4 + 9/5 + 15/8 + 1141.88308 ! 27/14 * (896/891)^(1/2) + 2/1 diff --git a/scales/shrutar_temp.scl b/scales/shrutar_temp.scl new file mode 100644 index 0000000..800efb9 --- /dev/null +++ b/scales/shrutar_temp.scl @@ -0,0 +1,27 @@ +! shrutar_temp.scl +! +Shrutar temperament, 11-limit, g=52.474, 1/2 oct. + 22 +! + 52.47367 + 104.94734 + 157.42101 + 209.89468 + 262.36834 + 314.84201 + 390.10532 + 442.57899 + 495.05266 + 547.52633 + 600.00000 + 652.47367 + 704.94734 + 757.42101 + 809.89468 + 862.36834 + 914.84201 + 990.10532 + 1042.57899 + 1095.05266 + 1147.52633 + 1200.00000 diff --git a/scales/shrutart.scl b/scales/shrutart.scl new file mode 100644 index 0000000..8bd6049 --- /dev/null +++ b/scales/shrutart.scl @@ -0,0 +1,27 @@ +! shrutart.scl +! +Paul Erlich's 'Shrutar' tuning tempered by Dave Keenan, TL 29-12-2000 + 22 +! + 53.50000 + 106.80000 + 155.10000 + 203.90000 + 266.90000 + 315.60000 + 386.30000 + 439.80000 + 498.00000 + 546.80000 + 600.00000 + 653.20000 + 702.00000 + 760.20000 + 813.70000 + 884.40000 + 933.10000 + 996.10000 + 1044.90000 + 1093.20000 + 1146.50000 + 2/1 diff --git a/scales/siamese.scl b/scales/siamese.scl new file mode 100644 index 0000000..1359baf --- /dev/null +++ b/scales/siamese.scl @@ -0,0 +1,17 @@ +! siamese.scl +! +Siamese Tuning, after Clem Fortuna's Microtonal Guide + 12 +! + 49.800 + 172.000 + 215.000 + 344.000 + 515.000 + 564.800 + 685.800 + 735.800 + 857.800 + 914.800 + 1028.800 + 2/1 diff --git a/scales/silbermann1.scl b/scales/silbermann1.scl new file mode 100644 index 0000000..fdf80c0 --- /dev/null +++ b/scales/silbermann1.scl @@ -0,0 +1,17 @@ +! silbermann1.scl +! +Gottfried Silbermann's temperament nr. 1 + 12 +! + 87.29249 + 200.00000 + 307.82000 + 390.22500 + 502.93250 + 590.22500 + 700.00000 + 784.35999 + 895.11250 + 1005.86500 + 1090.22500 + 2/1 diff --git a/scales/silbermann2.scl b/scales/silbermann2.scl new file mode 100644 index 0000000..d9b908c --- /dev/null +++ b/scales/silbermann2.scl @@ -0,0 +1,17 @@ +! silbermann2.scl +! +Gottfried Silbermann's temperament nr. 2, 1/6 Pyth. comma meantone + 12 +! + 86.31499 + 196.09000 + 305.86500 + 392.18000 + 501.95500 + 1024/729 + 698.04500 + 784.35999 + 894.13500 + 1003.91000 + 1090.22500 + 2/1 diff --git a/scales/silbermann2a.scl b/scales/silbermann2a.scl new file mode 100644 index 0000000..6005380 --- /dev/null +++ b/scales/silbermann2a.scl @@ -0,0 +1,17 @@ +! silbermann2a.scl +! +Modified Silbermann's temperament nr. 2, also used by Hinsz in Midwolda + 12 +! + 86.31499 + 196.09000 + 298.04500 + 392.18000 + 501.95500 + 1024/729 + 698.04500 + 784.35999 + 894.13500 + 1003.91000 + 1090.22500 + 2/1 diff --git a/scales/silver.scl b/scales/silver.scl new file mode 100644 index 0000000..ffd1f85 --- /dev/null +++ b/scales/silver.scl @@ -0,0 +1,17 @@ +! silver.scl +! +Equal beating chromatic scale, A.L.Leigh Silver JASA 29/4, 476-481, 1957 + 12 +! + 100.03402 + 199.51879 + 299.79965 + 399.51612 + 500.01742 + 599.94076 + 699.32161 + 799.50359 + 899.12725 + 999.54025 + 1099.38074 + 2/1 diff --git a/scales/silver_11.scl b/scales/silver_11.scl new file mode 100644 index 0000000..65c8089 --- /dev/null +++ b/scales/silver_11.scl @@ -0,0 +1,16 @@ +! silver_11.scl +! +Eleven-tone MOS from 1+sqr(2), 1525.864 cents + 11 +! + 103.45586 + 206.91171 + 325.86396 + 429.31982 + 532.77567 + 651.72793 + 755.18378 + 858.63964 + 977.59189 + 1081.04775 + 2/1 diff --git a/scales/silver_11a.scl b/scales/silver_11a.scl new file mode 100644 index 0000000..29c9b28 --- /dev/null +++ b/scales/silver_11a.scl @@ -0,0 +1,16 @@ +! silver_11a.scl +! +Eleven-tone MOS from 317.17 cents + 11 +! + 68.68000 + 137.36000 + 317.17000 + 385.85000 + 454.53000 + 634.34000 + 703.02000 + 771.70000 + 951.51000 + 1020.19000 + 2/1 diff --git a/scales/silver_11b.scl b/scales/silver_11b.scl new file mode 100644 index 0000000..4267bc7 --- /dev/null +++ b/scales/silver_11b.scl @@ -0,0 +1,16 @@ +! silver_11b.scl +! +Eleven-tone MOS from 331.67 cents + 11 +! + 126.69000 + 253.37000 + 331.67000 + 458.36000 + 585.05000 + 663.34000 + 790.03000 + 916.72000 + 995.02000 + 1121.70000 + 2/1 diff --git a/scales/silver_15.scl b/scales/silver_15.scl new file mode 100644 index 0000000..0fc4b01 --- /dev/null +++ b/scales/silver_15.scl @@ -0,0 +1,20 @@ +! silver_15.scl +! +Sqrt(2) + 1 equal division by 15, Brouncker (1653) + 15 +! + 101.72426 + 203.44853 + 305.17279 + 406.89706 + 508.62132 + 610.34559 + 712.06985 + 813.79411 + 915.51838 + 1017.24264 + 1118.96691 + 1220.69117 + 1322.41544 + 1424.13970 + 1525.86396 diff --git a/scales/silver_7.scl b/scales/silver_7.scl new file mode 100644 index 0000000..e3aa5ba --- /dev/null +++ b/scales/silver_7.scl @@ -0,0 +1,12 @@ +! silver_7.scl +! +Seven-tone MOS from 1+sqr(2), 1525.864 cents, Aksaka, Pell + 7 +! + 103.45586 + 325.86396 + 429.31982 + 651.72793 + 755.18378 + 977.59189 + 2/1 diff --git a/scales/silver_8.scl b/scales/silver_8.scl new file mode 100644 index 0000000..19ca946 --- /dev/null +++ b/scales/silver_8.scl @@ -0,0 +1,13 @@ +! silver_8.scl +! +Eight-tone MOS from 273.85 cents + 8 +! + 169.25000 + 273.85000 + 443.10000 + 547.70000 + 716.95000 + 821.55000 + 1095.40000 + 2/1 diff --git a/scales/silver_9.scl b/scales/silver_9.scl new file mode 100644 index 0000000..ec5fce7 --- /dev/null +++ b/scales/silver_9.scl @@ -0,0 +1,14 @@ +! silver_9.scl +! +Nine-tone MOS from 280.61 cents + 9 +! + 203.05000 + 280.61000 + 483.66000 + 561.22000 + 764.27000 + 841.83000 + 1044.88000 + 1122.44000 + 2/1 diff --git a/scales/silvermean.scl b/scales/silvermean.scl new file mode 100644 index 0000000..09c0a1b --- /dev/null +++ b/scales/silvermean.scl @@ -0,0 +1,12 @@ +! silvermean.scl +! +First 6 approximants to the Silver Mean, 1+sqr(2) reduced by 2/1 + 7 +! + 35/32 + 5/4 + 169/128 + 3/2 + 51/32 + 29/16 + 2/1 diff --git a/scales/simonton.scl b/scales/simonton.scl new file mode 100644 index 0000000..f72859c --- /dev/null +++ b/scales/simonton.scl @@ -0,0 +1,17 @@ +! simonton.scl +! +Simonton Integral Ratio Scale, JASA 25/6 (1953): A new integral ratio scale + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 16/9 + 17/9 + 2/1 diff --git a/scales/sims.scl b/scales/sims.scl new file mode 100644 index 0000000..788fa02 --- /dev/null +++ b/scales/sims.scl @@ -0,0 +1,23 @@ +! sims.scl +! +Ezra Sims' 18-tone mode + 18 +! + 25/24 + 13/12 + 9/8 + 7/6 + 29/24 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/sims2.scl b/scales/sims2.scl new file mode 100644 index 0000000..7b89015 --- /dev/null +++ b/scales/sims2.scl @@ -0,0 +1,25 @@ +! sims2.scl +! +Sims II, harmonics 20 to 40 + 20 +! + 33/32 + 17/16 + 35/32 + 9/8 + 37/32 + 19/16 + 39/32 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/sims_24.scl b/scales/sims_24.scl new file mode 100644 index 0000000..c15f2ad --- /dev/null +++ b/scales/sims_24.scl @@ -0,0 +1,29 @@ +! sims_24.scl +! +Ezra Sims, Reflections on This and That, 1991, p.93-106 + 24 +! + 33/32 + 25/24 + 17/16 + 13/12 + 35/32 + 9/8 + 37/32 + 7/6 + 19/16 + 29/24 + 39/32 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/sims_herf.scl b/scales/sims_herf.scl new file mode 100644 index 0000000..3a4e66c --- /dev/null +++ b/scales/sims_herf.scl @@ -0,0 +1,19 @@ +! sims_herf.scl +! +Reflections on This and That, 1991. Used by Richter-Herf in Ekmelischer Gesang + 14 +! + 33/32 + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 13/8 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/sin.scl b/scales/sin.scl new file mode 100644 index 0000000..d2fb8bc --- /dev/null +++ b/scales/sin.scl @@ -0,0 +1,26 @@ +! sin.scl +! +1/sin(2pi/n), n=4..25 + 21 +! + 86.87642 + 249.02244 + 426.08449 + 600.00000 + 765.10317 + 919.96672 + 1064.70922 + 2/1 + 1326.66808 + 1445.54349 + 1557.39975 + 1662.93203 + 1762.75655 + 1857.41616 + 1947.38770 + 2033.09030 + 2114.89300 + 2193.12200 + 2268.06600 + 2339.98100 + 2409.09630 diff --git a/scales/sinemod12.scl b/scales/sinemod12.scl new file mode 100644 index 0000000..3bac72d --- /dev/null +++ b/scales/sinemod12.scl @@ -0,0 +1,24 @@ +! sinemod12.scl +! +Sine modulated F=12, A=-.08203754 + 19 +! + 58.413 cents + 130.128 cents + 191.156 cents + 247.468 cents + 318.256 cents + 382.130 cents + 437.083 cents + 506.116 cents + 572.759 cents + 627.241 cents + 693.884 cents + 762.918 cents + 817.870 cents + 881.744 cents + 952.532 cents + 1008.844 cents + 1069.872 cents + 1141.587 cents + 2/1 diff --git a/scales/sinemod8.scl b/scales/sinemod8.scl new file mode 100644 index 0000000..4757bc3 --- /dev/null +++ b/scales/sinemod8.scl @@ -0,0 +1,24 @@ +! sinemod8.scl +! +Sine modulated F=8, A=.11364155. Deviation minimal3/2, 4/3, 5/4, 6/5, 5/3, 8/5 + 19 +! + 70.116 cents + 129.732 cents + 184.193 cents + 246.623 cents + 318.120 cents + 386.100 cents + 443.287 cents + 498.690 cents + 564.013 cents + 635.987 cents + 701.310 cents + 756.713 cents + 813.900 cents + 881.880 cents + 953.377 cents + 1015.807 cents + 1070.268 cents + 1129.884 cents + 2/1 diff --git a/scales/singapore.scl b/scales/singapore.scl new file mode 100644 index 0000000..70557af --- /dev/null +++ b/scales/singapore.scl @@ -0,0 +1,12 @@ +! singapore.scl +! +An observed xylophone tuning from Singapore + 7 +! + 187.000 cents + 356.000 cents + 526.000 cents + 672.000 cents + 856.000 cents + 985.000 cents + 2 diff --git a/scales/singapore_coh.scl b/scales/singapore_coh.scl new file mode 100644 index 0000000..11e5cf8 --- /dev/null +++ b/scales/singapore_coh.scl @@ -0,0 +1,12 @@ +! singapore_coh.scl +! +Differentially coherent interpretation of xylophone tuning from Singapore + 7 +! + 10/9 + 11/9 + 4/3 + 53/36 + 59/36 + 16/9 + 2/1 diff --git a/scales/sintemp6.scl b/scales/sintemp6.scl new file mode 100644 index 0000000..a18f2eb --- /dev/null +++ b/scales/sintemp6.scl @@ -0,0 +1,17 @@ +! sintemp6.scl +! +Sine modulated fifths, A=1/6 Pyth, one cycle, f0=-90 degrees + 12 +! + 100.00000 + 192.70384 + 305.34116 + 390.74884 + 503.38616 + 596.09000 + 696.09000 + 803.38616 + 890.74884 + 1005.34116 + 1092.70384 + 2/1 diff --git a/scales/sintemp6a.scl b/scales/sintemp6a.scl new file mode 100644 index 0000000..1de7e82 --- /dev/null +++ b/scales/sintemp6a.scl @@ -0,0 +1,17 @@ +! sintemp6a.scl +! +Sine modulated fifths, A=1/12 Pyth, one cycle, f0= D-A + 12 +! + 93.68134 + 197.32942 + 297.32942 + 393.68134 + 500.00000 + 592.70384 + 699.02250 + 795.37442 + 895.37442 + 999.02250 + 1092.70384 + 2/1 diff --git a/scales/sintemp_19.scl b/scales/sintemp_19.scl new file mode 100644 index 0000000..31e7b2e --- /dev/null +++ b/scales/sintemp_19.scl @@ -0,0 +1,24 @@ +! sintemp_19.scl +! +Sine modulated thirds, A=7.366 cents, one cycle over fifths, f0=90 degrees + 19 +! + 72.81716 + 125.58714 + 193.15686 + 260.72658 + 313.49655 + 5/4 + 446.77544 + 503.92620 + 577.91731 + 632.40807 + 696.47293 + 767.06941 + 819.24430 + 889.84078 + 953.90565 + 1008.39641 + 1082.38751 + 1139.53827 + 2/1 diff --git a/scales/sintemp_7.scl b/scales/sintemp_7.scl new file mode 100644 index 0000000..daa9a9d --- /dev/null +++ b/scales/sintemp_7.scl @@ -0,0 +1,12 @@ +! sintemp_7.scl +! +Sine modulated fifths, A=8.12 cents, one cycle, f0=90 degrees + 7 +! + 184.61189 + 346.91732 + 509.22275 + 693.83464 + 868.51923 + 1025.31542 + 2/1 diff --git a/scales/slen_pel.scl b/scales/slen_pel.scl new file mode 100644 index 0000000..7369121 --- /dev/null +++ b/scales/slen_pel.scl @@ -0,0 +1,17 @@ +! slen_pel.scl +! +Pelog white, Slendro black + 12 +! + 1/1 + 137.00000 + 228.00000 + 446.00000 + 575.00000 + 484.00000 + 687.00000 + 728.00000 + 820.00000 + 960.00000 + 1098.00000 + 2/1 diff --git a/scales/slen_pel16.scl b/scales/slen_pel16.scl new file mode 100644 index 0000000..bc22fbd --- /dev/null +++ b/scales/slen_pel16.scl @@ -0,0 +1,17 @@ +! slen_pel16.scl +! +16-tET Slendro and Pelog + 12 +! + 1/1 + 150.000 cents + 150.000 cents + 225.000 cents + 300.000 cents + 450.000 cents + 675.000 cents + 675.000 cents + 750.000 cents + 825.000 cents + 900.000 cents + 2/1 diff --git a/scales/slen_pel23.scl b/scales/slen_pel23.scl new file mode 100644 index 0000000..45f4e33 --- /dev/null +++ b/scales/slen_pel23.scl @@ -0,0 +1,17 @@ +! slen_pel23.scl +! +23-tET Slendro and Pelog + 12 +! + 1/1 + 208.69565 + 208.69565 + 156.52174 + 469.56522 + 313.04348 + 730.43478 + 730.43478 + 678.26087 + 939.13043 + 834.78261 + 2/1 diff --git a/scales/slen_pel_jc.scl b/scales/slen_pel_jc.scl new file mode 100644 index 0000000..f7253e9 --- /dev/null +++ b/scales/slen_pel_jc.scl @@ -0,0 +1,17 @@ +! slen_pel_jc.scl +! +Slendro (John Chalmers) plus Pelog S1c,P1c#,S2d,eb,P2e,S3f,P3f#,S4g,ab,P4a,S5bb,P5b + 12 +! + 1/1 + 8/7 + 8/7 + 16/15 + 64/49 + 4/3 + 3/2 + 3/2 + 3/2 + 12/7 + 8/5 + 2/1 diff --git a/scales/slen_pel_schmidt.scl b/scales/slen_pel_schmidt.scl new file mode 100644 index 0000000..b392143 --- /dev/null +++ b/scales/slen_pel_schmidt.scl @@ -0,0 +1,17 @@ +! slen_pel_schmidt.scl +! +Dan Schmidt (Pelog white, Slendro black) + 12 +! + 1/1 + 9/8 + 7/6 + 5/4 + 4/3 + 11/8 + 3/2 + 3/2 + 7/4 + 7/4 + 15/8 + 2/1 diff --git a/scales/slendro.scl b/scales/slendro.scl new file mode 100644 index 0000000..4623fde --- /dev/null +++ b/scales/slendro.scl @@ -0,0 +1,10 @@ +! slendro.scl +! +Observed Javanese Slendro scale, Helmholtz/Ellis p. 518, nr.94 + 5 +! + 228.00000 + 484.00000 + 728.00000 + 960.00000 + 2/1 diff --git a/scales/slendro10.scl b/scales/slendro10.scl new file mode 100644 index 0000000..fe137c1 --- /dev/null +++ b/scales/slendro10.scl @@ -0,0 +1,10 @@ +! slendro10.scl +! +Low gender from Singaraja (banjar Lod Peken), Bali, 1/1=172 Hz, McPhee, 1966 + 5 +! + 261.10972 + 465.01972 + 698.59664 + 991.68081 + 2/1 diff --git a/scales/slendro11.scl b/scales/slendro11.scl new file mode 100644 index 0000000..9a82abe --- /dev/null +++ b/scales/slendro11.scl @@ -0,0 +1,10 @@ +! slendro11.scl +! +Low gender from Sawan, Bali, 1/1=167.5 Hz, McPhee, 1966 + 5 +! + 231.81996 + 472.01091 + 679.41483 + 950.27017 + 2/1 diff --git a/scales/slendro12.scl b/scales/slendro12.scl new file mode 100644 index 0000000..86aaecb --- /dev/null +++ b/scales/slendro12.scl @@ -0,0 +1,9 @@ +! slendro12.scl +! +Saih angklung, 4-tone slendro from Mas village, 1/1=410 Hz, McPhee, 1966 + 4 +! + 232.75682 + 408.13275 + 715.97317 + 2/1 diff --git a/scales/slendro13.scl b/scales/slendro13.scl new file mode 100644 index 0000000..e26163b --- /dev/null +++ b/scales/slendro13.scl @@ -0,0 +1,9 @@ +! slendro13.scl +! +Saih angklung, 4-tone slendro from Kamassan village, 1/1=400 Hz, McPhee, 1966 + 4 +! + 9/8 + 368.91423 + 730.57109 + 2/1 diff --git a/scales/slendro14.scl b/scales/slendro14.scl new file mode 100644 index 0000000..61f4b19 --- /dev/null +++ b/scales/slendro14.scl @@ -0,0 +1,9 @@ +! slendro14.scl +! +Saih angklung, 4-tone slendro from Sayan village, 1/1=365 Hz, McPhee, 1966 + 4 +! + 242.99144 + 492.10594 + 753.35844 + 2/1 diff --git a/scales/slendro15.scl b/scales/slendro15.scl new file mode 100644 index 0000000..d882e82 --- /dev/null +++ b/scales/slendro15.scl @@ -0,0 +1,9 @@ +! slendro15.scl +! +Saih angklung, 4-tone slendro from Tabanan, 1/1=326 Hz, McPhee, 1966 + 4 +! + 242.42236 + 471.28660 + 687.73534 + 2/1 diff --git a/scales/slendro2.scl b/scales/slendro2.scl new file mode 100644 index 0000000..b0cb2df --- /dev/null +++ b/scales/slendro2.scl @@ -0,0 +1,10 @@ +! slendro2.scl +! +Gamelan slendro from Ranchaiyuh, distr. Tanggerang, Batavia. 1/1=282.5 Hz + 5 +! + 231.940 cents + 471.802 cents + 717.208 cents + 939.247 cents + 2/1 diff --git a/scales/slendro3.scl b/scales/slendro3.scl new file mode 100644 index 0000000..b3e3443 --- /dev/null +++ b/scales/slendro3.scl @@ -0,0 +1,10 @@ +! slendro3.scl +! +Gamelan kodok ngorek. 1/1=270 Hz + 5 +! + 227.96513 + 449.27462 + 697.67506 + 952.25895 + 1196.79104 diff --git a/scales/slendro4.scl b/scales/slendro4.scl new file mode 100644 index 0000000..60ab9d3 --- /dev/null +++ b/scales/slendro4.scl @@ -0,0 +1,10 @@ +! slendro4.scl +! +Low gender in saih lima from Kuta, Bali. 1/1=183 Hz. McPhee, 1966 + 5 +! + 204.96083 + 476.62740 + 736.29981 + 1004.93638 + 2/1 diff --git a/scales/slendro5_1.scl b/scales/slendro5_1.scl new file mode 100644 index 0000000..ee0f92d --- /dev/null +++ b/scales/slendro5_1.scl @@ -0,0 +1,10 @@ +! slendro5_1.scl +! +A slendro type pentatonic which is based on intervals of 7; from Lou Harrison + 5 +! + 8/7 + 9/7 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro5_2.scl b/scales/slendro5_2.scl new file mode 100644 index 0000000..4aecf01 --- /dev/null +++ b/scales/slendro5_2.scl @@ -0,0 +1,10 @@ +! slendro5_2.scl +! +A slendro type pentatonic which is based on intervals of 7, no. 2 + 5 +! + 7/6 + 4/3 + 3/2 + 7/4 + 2/1 diff --git a/scales/slendro5_4.scl b/scales/slendro5_4.scl new file mode 100644 index 0000000..4ac4fc6 --- /dev/null +++ b/scales/slendro5_4.scl @@ -0,0 +1,10 @@ +! slendro5_4.scl +! +A slendro type pentatonic which is based on intervals of 7, no. 4 + 5 +! + 9/8 + 4/3 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro6.scl b/scales/slendro6.scl new file mode 100644 index 0000000..71234a3 --- /dev/null +++ b/scales/slendro6.scl @@ -0,0 +1,10 @@ +! slendro6.scl +! +Low gender from Klandis, Bali. 1/1=180 Hz. McPhee, 1966 + 5 +! + 208.17939 + 461.59662 + 727.41478 + 982.51162 + 2/1 diff --git a/scales/slendro8.scl b/scales/slendro8.scl new file mode 100644 index 0000000..88012f5 --- /dev/null +++ b/scales/slendro8.scl @@ -0,0 +1,10 @@ +! slendro8.scl +! +Low gender from Tabanan, Bali, 1/1=179 Hz, McPhee, 1966 + 5 +! + 292.92561 + 507.68978 + 762.15035 + 1005.73478 + 2/1 diff --git a/scales/slendro9.scl b/scales/slendro9.scl new file mode 100644 index 0000000..55edea4 --- /dev/null +++ b/scales/slendro9.scl @@ -0,0 +1,10 @@ +! slendro9.scl +! +Low gender from Singaraja (banjar Panataran), Bali. 1/1=175 Hz. McPhee, 1966. Ayers ICMC 1996 + 5 +! + 8/7 + 9/7 + 52/35 + 12/7 + 2/1 diff --git a/scales/slendro_7_1.scl b/scales/slendro_7_1.scl new file mode 100644 index 0000000..4ed7d0b --- /dev/null +++ b/scales/slendro_7_1.scl @@ -0,0 +1,10 @@ +! slendro_7_1.scl +! +Septimal Slendro 1, from HMSL Manual, also Lou Harrison, Jacques Dudon + 5 +! + 8/7 + 64/49 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro_7_2.scl b/scales/slendro_7_2.scl new file mode 100644 index 0000000..612affb --- /dev/null +++ b/scales/slendro_7_2.scl @@ -0,0 +1,10 @@ +! slendro_7_2.scl +! +Septimal Slendro 2, from Lou Harrison, Jacques Dudon's APTOS + 5 +! + 9/8 + 21/16 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro_7_3.scl b/scales/slendro_7_3.scl new file mode 100644 index 0000000..9366bba --- /dev/null +++ b/scales/slendro_7_3.scl @@ -0,0 +1,10 @@ +! slendro_7_3.scl +! +Septimal Slendro 3, Harrison, Dudon, called "MILLS" after Mills Gamelan + 5 +! + 9/8 + 9/7 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro_7_4.scl b/scales/slendro_7_4.scl new file mode 100644 index 0000000..267d467 --- /dev/null +++ b/scales/slendro_7_4.scl @@ -0,0 +1,10 @@ +! slendro_7_4.scl +! +Septimal Slendro 4, from Lou Harrison, Jacques Dudon, called "NAT" + 5 +! + 9/8 + 21/16 + 3/2 + 7/4 + 2/1 diff --git a/scales/slendro_7_5.scl b/scales/slendro_7_5.scl new file mode 100644 index 0000000..b68209e --- /dev/null +++ b/scales/slendro_7_5.scl @@ -0,0 +1,10 @@ +! slendro_7_5.scl +! +Septimal Slendro 5, from Jacques Dudon + 5 +! + 7/6 + 21/16 + 49/32 + 343/192 + 2/1 diff --git a/scales/slendro_7_6.scl b/scales/slendro_7_6.scl new file mode 100644 index 0000000..3ea5601 --- /dev/null +++ b/scales/slendro_7_6.scl @@ -0,0 +1,10 @@ +! slendro_7_6.scl +! +Septimal Slendro 6, from Robert Walker + 5 +! + 8/7 + 64/49 + 512/343 + 256/147 + 2/1 diff --git a/scales/slendro_a1.scl b/scales/slendro_a1.scl new file mode 100644 index 0000000..67999ba --- /dev/null +++ b/scales/slendro_a1.scl @@ -0,0 +1,10 @@ +! slendro_a1.scl +! +Dudon's Slendro A1, "Seven-Limit Slendro Mutations", 1/1 8:2'94 hexany 1.3.7.21 + 5 +! + 8/7 + 4/3 + 3/2 + 7/4 + 2/1 diff --git a/scales/slendro_alves.scl b/scales/slendro_alves.scl new file mode 100644 index 0000000..da00036 --- /dev/null +++ b/scales/slendro_alves.scl @@ -0,0 +1,10 @@ +! slendro_alves.scl +! +Bill Alves, slendro for Gender Barung, 1/1 vol.9 no.4, 1997. 1/1=282.86 Hz + 5 +! + 8/7 + 4/3 + 14/9 + 16/9 + 2/1 diff --git a/scales/slendro_ang.scl b/scales/slendro_ang.scl new file mode 100644 index 0000000..1828069 --- /dev/null +++ b/scales/slendro_ang.scl @@ -0,0 +1,10 @@ +! slendro_ang.scl +! +Gamelan Angklung Sangsit, North Bali. 1/1=294 Hz + 5 +! + 8/7 + 457.834 cents + 684.199 cents + 922.793 cents + 2/1 diff --git a/scales/slendro_ang2.scl b/scales/slendro_ang2.scl new file mode 100644 index 0000000..768329b --- /dev/null +++ b/scales/slendro_ang2.scl @@ -0,0 +1,10 @@ +! slendro_ang2.scl +! +Angklung from Banyuwangi. 1/1=298 Hz. J. Kunst, Music in Java, p.198 + 5 +! + 278.45111 + 569.18212 + 740.25820 + 1041.95318 + 2/1 diff --git a/scales/slendro_av.scl b/scales/slendro_av.scl new file mode 100644 index 0000000..8dd2d07 --- /dev/null +++ b/scales/slendro_av.scl @@ -0,0 +1,10 @@ +! slendro_av.scl +! +Average of 30 measured slendro gamelans, W. Surjodiningrat et al., 1993. + 5 +! + 231.00000 + 474.00000 + 717.00000 + 955.00000 + 1208.00000 diff --git a/scales/slendro_dudon.scl b/scales/slendro_dudon.scl new file mode 100644 index 0000000..3dcd2c7 --- /dev/null +++ b/scales/slendro_dudon.scl @@ -0,0 +1,10 @@ +! slendro_dudon.scl +! +Dudon's Slendro from "Fleurs de lumire" (1995) + 5 +! + 7/6 + 4/3 + 55/36 + 7/4 + 2/1 diff --git a/scales/slendro_gum.scl b/scales/slendro_gum.scl new file mode 100644 index 0000000..766b37d --- /dev/null +++ b/scales/slendro_gum.scl @@ -0,0 +1,10 @@ +! slendro_gum.scl +! +Gumbeng, bamboo idiochord from Banyumas. 1/1=440 Hz + 5 +! + 265.746 cents + 496.077 cents + 712.416 cents + 9/5 + 1207.851 cents diff --git a/scales/slendro_ky1.scl b/scales/slendro_ky1.scl new file mode 100644 index 0000000..8fe62a3 --- /dev/null +++ b/scales/slendro_ky1.scl @@ -0,0 +1,10 @@ +! slendro_ky1.scl +! +Kyahi Kanyut Me`sem slendro, Mangku Nagaran, Solo. 1/1=291 Hz + 5 +! + 222.974 cents + 475.590 cents + 711.842 cents + 937.091 cents + 2/1 diff --git a/scales/slendro_ky2.scl b/scales/slendro_ky2.scl new file mode 100644 index 0000000..8f70777 --- /dev/null +++ b/scales/slendro_ky2.scl @@ -0,0 +1,10 @@ +! slendro_ky2.scl +! +Kyahi Pengawe' sari, Paku Alaman, Jogya. 1/1=295 Hz + 5 +! + 250.868 cents + 483.311 cents + 715.595 cents + 951.130 cents + 1200.000 cents diff --git a/scales/slendro_laras.scl b/scales/slendro_laras.scl new file mode 100644 index 0000000..422193c --- /dev/null +++ b/scales/slendro_laras.scl @@ -0,0 +1,12 @@ +! slendro_laras.scl +! +Lou Harrison, gamelan "Si Betty" + 7 +! + 8/7 + 4/3 + 3/2 + 12/7 + 2/1 + 16/7 + 8/3 diff --git a/scales/slendro_m.scl b/scales/slendro_m.scl new file mode 100644 index 0000000..70e4d51 --- /dev/null +++ b/scales/slendro_m.scl @@ -0,0 +1,10 @@ +! slendro_m.scl +! +Dudon's Slendro M from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994. Also scale by Giovanni Marco Marci (17th cent.) + 5 +! + 8/7 + 4/3 + 3/2 + 12/7 + 2/1 diff --git a/scales/slendro_madu.scl b/scales/slendro_madu.scl new file mode 100644 index 0000000..4725f90 --- /dev/null +++ b/scales/slendro_madu.scl @@ -0,0 +1,10 @@ +! slendro_madu.scl +! +Sultan's gamelan Madoe kentir, Jogjakarta, Jaap Kunst + 5 +! + 240.00000 + 482.00000 + 711.00000 + 931.00000 + 1199.00000 diff --git a/scales/slendro_pa.scl b/scales/slendro_pa.scl new file mode 100644 index 0000000..eea4049 --- /dev/null +++ b/scales/slendro_pa.scl @@ -0,0 +1,10 @@ +! slendro_pa.scl +! +"Blown fifth" primitive slendro, von Hornbostel + 5 +! + 261.000 cents + 522.000 cents + 783.000 cents + 1044.000 cents + 2/1 diff --git a/scales/slendro_pas.scl b/scales/slendro_pas.scl new file mode 100644 index 0000000..7e9cfb2 --- /dev/null +++ b/scales/slendro_pas.scl @@ -0,0 +1,10 @@ +! slendro_pas.scl +! +Gamelan slendro of regent of Pasoeroean, Jaap Kunst + 5 +! + 239.00000 + 469.00000 + 705.00000 + 941.00000 + 1200.00000 diff --git a/scales/slendro_pb.scl b/scales/slendro_pb.scl new file mode 100644 index 0000000..fa6aa76 --- /dev/null +++ b/scales/slendro_pb.scl @@ -0,0 +1,10 @@ +! slendro_pb.scl +! +"Blown fifth" medium slendro, von Hornbostel + 5 +! + 264.000 cents + 468.000 cents + 732.000 cents + 936.000 cents + 2/1 diff --git a/scales/slendro_pc.scl b/scales/slendro_pc.scl new file mode 100644 index 0000000..1b84069 --- /dev/null +++ b/scales/slendro_pc.scl @@ -0,0 +1,10 @@ +! slendro_pc.scl +! +"Blown fifth" modern slendro, von Hornbostel + 5 +! + 234.000 cents + 468.000 cents + 702.000 cents + 936.000 cents + 2/1 diff --git a/scales/slendro_pliat.scl b/scales/slendro_pliat.scl new file mode 100644 index 0000000..7c7287d --- /dev/null +++ b/scales/slendro_pliat.scl @@ -0,0 +1,14 @@ +! slendro_pliat.scl +! +Gender wayang from Pliatan, South Bali (Slendro), 1/1=305.5 Hz + 9 +! + 235.419 cents + 453.560 cents + 704.786 cents + 927.453 cents + 2/1 + 1435.419 cents + 1653.560 cents + 1904.786 cents + 2127.453 cents diff --git a/scales/slendro_q13.scl b/scales/slendro_q13.scl new file mode 100644 index 0000000..72624d4 --- /dev/null +++ b/scales/slendro_q13.scl @@ -0,0 +1,10 @@ +! slendro_q13.scl +! +13-tET quasi slendro, Blackwood + 5 +! + 276.92308 + 553.84615 + 738.46154 + 1015.38462 + 2/1 diff --git a/scales/slendro_s1.scl b/scales/slendro_s1.scl new file mode 100644 index 0000000..f786426 --- /dev/null +++ b/scales/slendro_s1.scl @@ -0,0 +1,10 @@ +! slendro_s1.scl +! +Dudon's Slendro S1 from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994 + 5 +! + 8/7 + 4/3 + 32/21 + 7/4 + 2/1 diff --git a/scales/slendro_udan.scl b/scales/slendro_udan.scl new file mode 100644 index 0000000..086158c --- /dev/null +++ b/scales/slendro_udan.scl @@ -0,0 +1,10 @@ +! slendro_udan.scl +! +Slendro Udan Mas (approx) + 5 +! + 7/6 + 47/35 + 20/13 + 16/9 + 2/1 diff --git a/scales/slendro_wolf.scl b/scales/slendro_wolf.scl new file mode 100644 index 0000000..6f81900 --- /dev/null +++ b/scales/slendro_wolf.scl @@ -0,0 +1,10 @@ +! slendro_wolf.scl +! +Daniel Wolf's slendro, TL 30-5-97 + 5 +! + 226.46625 + 452.93250 + 713.23313 + 939.69938 + 2/1 diff --git a/scales/slendrob1.scl b/scales/slendrob1.scl new file mode 100644 index 0000000..99fe27a --- /dev/null +++ b/scales/slendrob1.scl @@ -0,0 +1,10 @@ +! slendrob1.scl +! +Gamelan miring of Musadikrama, desa Katur, Bajanegara. 1/1=434 Hz + 5 +! + 279.363 cents + 531.624 cents + 777.408 cents + 1039.179 cents + 2/1 diff --git a/scales/slendrob2.scl b/scales/slendrob2.scl new file mode 100644 index 0000000..7bb3d64 --- /dev/null +++ b/scales/slendrob2.scl @@ -0,0 +1,10 @@ +! slendrob2.scl +! +Gamelan miring from Bajanegara. 1/1=262 Hz + 5 +! + 280.036 cents + 486.443 cents + 728.186 cents + 936.430 cents + 2/1 diff --git a/scales/slendrob3.scl b/scales/slendrob3.scl new file mode 100644 index 0000000..7afa02a --- /dev/null +++ b/scales/slendrob3.scl @@ -0,0 +1,10 @@ +! slendrob3.scl +! +Gamelan miring from Ngumpak, Bajanegara. 1/1=266 Hz + 5 +! + 265.010 cents + 465.193 cents + 727.795 cents + 929.328 cents + 2/1 diff --git a/scales/slendroc1.scl b/scales/slendroc1.scl new file mode 100644 index 0000000..388250a --- /dev/null +++ b/scales/slendroc1.scl @@ -0,0 +1,10 @@ +! slendroc1.scl +! +Kyahi Kanyut mesem slendro (Mangku Nagaran Solo). 1/1=291 Hz + 5 +! + 223.000 cents + 476.000 cents + 712.000 cents + 937.000 cents + 2/1 diff --git a/scales/slendroc2.scl b/scales/slendroc2.scl new file mode 100644 index 0000000..edf28b5 --- /dev/null +++ b/scales/slendroc2.scl @@ -0,0 +1,10 @@ +! slendroc2.scl +! +Kyahi Pengawe sari (Paku Alaman, Jogja). 1/1=295 Hz + 5 +! + 251.00000 + 484.00000 + 718.00000 + 951.00000 + 2/1 diff --git a/scales/slendroc3.scl b/scales/slendroc3.scl new file mode 100644 index 0000000..e85bbae --- /dev/null +++ b/scales/slendroc3.scl @@ -0,0 +1,10 @@ +! slendroc3.scl +! +Gamelan slendro of R.M. Jayadipura, Jogja. 1/1=231 Hz + 5 +! + 245.000 cents + 476.000 cents + 715.000 cents + 946.000 cents + 2/1 diff --git a/scales/slendroc4.scl b/scales/slendroc4.scl new file mode 100644 index 0000000..50a9bcd --- /dev/null +++ b/scales/slendroc4.scl @@ -0,0 +1,10 @@ +! slendroc4.scl +! +Gamelan slendro, Rancha iyuh, Tanggerang, Batavia. 1/1=282.5 Hz + 5 +! + 232.000 cents + 473.000 cents + 718.000 cents + 940.000 cents + 2/1 diff --git a/scales/slendroc5.scl b/scales/slendroc5.scl new file mode 100644 index 0000000..efd07bb --- /dev/null +++ b/scales/slendroc5.scl @@ -0,0 +1,10 @@ +! slendroc5.scl +! +Gender wayang from Pliatan, South Bali. 1/1=611 Hz + 5 +! + 236.000 cents + 454.000 cents + 705.000 cents + 928.000 cents + 2/1 diff --git a/scales/slendroc6.scl b/scales/slendroc6.scl new file mode 100644 index 0000000..1dc63c8 --- /dev/null +++ b/scales/slendroc6.scl @@ -0,0 +1,15 @@ +! slendroc6.scl +! +from William Malm: Music Cultures of the Pacific, the Near East and Asia. + 10 +! + 218.000 cents + 473.000 cents + 721.000 cents + 954.000 cents + 1213.000 cents + 1458.000 cents + 1695.000 cents + 1929.000 cents + 2174.000 cents + 2441.000 cents diff --git a/scales/slendrod1.scl b/scales/slendrod1.scl new file mode 100644 index 0000000..7c8891c --- /dev/null +++ b/scales/slendrod1.scl @@ -0,0 +1,10 @@ +! slendrod1.scl +! +Gender wayang from Ubud (S. Bali). 1/1=347 Hz + 5 +! + 193.000 cents + 457.000 cents + 687.000 cents + 919.000 cents + 2/1 diff --git a/scales/smith_eh.scl b/scales/smith_eh.scl new file mode 100644 index 0000000..0ba5af2 --- /dev/null +++ b/scales/smith_eh.scl @@ -0,0 +1,17 @@ +! smith_eh.scl +! +Robert Smith's Equal Harmony temperament (1749) + 12 +! + 71.84801 + 191.95658 + 312.06514 + 383.91315 + 504.02171 + 575.86973 + 695.97829 + 767.82630 + 887.93486 + 1008.04342 + 1079.89144 + 2/1 diff --git a/scales/smith_mq.scl b/scales/smith_mq.scl new file mode 100644 index 0000000..62ec8aa --- /dev/null +++ b/scales/smith_mq.scl @@ -0,0 +1,17 @@ +! smith_mq.scl +! +Robert Smith approximation of quarter comma meantone fifth + 12 +! + 76.04945 + 413449/369800 + 318028000/265847707 + 5/4 + 860/643 + 579.47096 + 643/430 + 25/16 + 265847707/159014000 + 739600/413449 + 1082.89247 + 2/1 diff --git a/scales/smithgw46.scl b/scales/smithgw46.scl new file mode 100644 index 0000000..03ea581 --- /dev/null +++ b/scales/smithgw46.scl @@ -0,0 +1,13 @@ +! smithgw46.scl +! +Gene Ward Smith 46-tET subset "Star" + 8 +! + 78.26087 + 313.04348 + 391.30435 + 573.91304 + 704.34783 + 886.95652 + 965.21739 + 2/1 diff --git a/scales/smithgw46a.scl b/scales/smithgw46a.scl new file mode 100644 index 0000000..56b5c7b --- /dev/null +++ b/scales/smithgw46a.scl @@ -0,0 +1,13 @@ +! smithgw46a.scl +! +46-tET version of "Star", alternative version + 8 +! + 130.43478 + 313.04348 + 391.30435 + 626.08696 + 704.34783 + 886.95652 + 1017.39130 + 2/1 diff --git a/scales/smithgw72a.scl b/scales/smithgw72a.scl new file mode 100644 index 0000000..b2dfda0 --- /dev/null +++ b/scales/smithgw72a.scl @@ -0,0 +1,16 @@ +! smithgw72a.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 11 +! + 150.00000 + 233.33333 + 383.33333 + 466.66667 + 616.66667 + 700.00000 + 850.00000 + 883.33333 + 966.66667 + 1116.66667 + 2/1 diff --git a/scales/smithgw72c.scl b/scales/smithgw72c.scl new file mode 100644 index 0000000..705443f --- /dev/null +++ b/scales/smithgw72c.scl @@ -0,0 +1,14 @@ +! smithgw72c.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 9 +! + 116.66667 + 266.66667 + 383.33333 + 500.00000 + 700.00000 + 816.66667 + 966.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw72d.scl b/scales/smithgw72d.scl new file mode 100644 index 0000000..9214b87 --- /dev/null +++ b/scales/smithgw72d.scl @@ -0,0 +1,13 @@ +! smithgw72d.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 8 +! + 266.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 816.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw72e.scl b/scales/smithgw72e.scl new file mode 100644 index 0000000..666e0c6 --- /dev/null +++ b/scales/smithgw72e.scl @@ -0,0 +1,13 @@ +! smithgw72e.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 8 +! + 116.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 816.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw72f.scl b/scales/smithgw72f.scl new file mode 100644 index 0000000..8f7d740 --- /dev/null +++ b/scales/smithgw72f.scl @@ -0,0 +1,10 @@ +! smithgw72f.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 5 +! + 383.33333 + 500.00000 + 883.33333 + 1000.00000 + 2/1 diff --git a/scales/smithgw72g.scl b/scales/smithgw72g.scl new file mode 100644 index 0000000..fea0914 --- /dev/null +++ b/scales/smithgw72g.scl @@ -0,0 +1,10 @@ +! smithgw72g.scl +! +Gene Ward Smith 72-tET subset, TL 04-01-2002 + 5 +! + 383.33333 + 500.00000 + 700.00000 + 816.66667 + 2/1 diff --git a/scales/smithgw72h.scl b/scales/smithgw72h.scl new file mode 100644 index 0000000..8c90294 --- /dev/null +++ b/scales/smithgw72h.scl @@ -0,0 +1,12 @@ +! smithgw72h.scl +! +Gene Ward Smith 72-tET subset, TL 09-01-2002 + 7 +! + 116.66667 + 316.66667 + 500.00000 + 700.00000 + 883.33333 + 1083.33333 + 2/1 diff --git a/scales/smithgw72i.scl b/scales/smithgw72i.scl new file mode 100644 index 0000000..706796c --- /dev/null +++ b/scales/smithgw72i.scl @@ -0,0 +1,17 @@ +! smithgw72I.scl +! +Gene Ward Smith 72-tET subset version of Duodene, TL 02-06-2002 + 12 +! + 116.66667 + 200.00000 + 316.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 816.66667 + 883.33333 + 1016.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw72j.scl b/scales/smithgw72j.scl new file mode 100644 index 0000000..e6e39e6 --- /dev/null +++ b/scales/smithgw72j.scl @@ -0,0 +1,15 @@ +! smithgw72j.scl +! +{225/224, 441/440} tempering of decad, 72-et version (2002) + 10 +! + 83.33333 + 266.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 883.33333 + 966.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw_18.scl b/scales/smithgw_18.scl new file mode 100644 index 0000000..47ceb43 --- /dev/null +++ b/scales/smithgw_18.scl @@ -0,0 +1,23 @@ +! smithgw_18.scl +! +Gene Ward Smith chord analogue to periodicity blocks, TL 12-07-2002 + 18 +! + 25/24 + 15/14 + 35/32 + 9/8 + 75/64 + 5/4 + 21/16 + 75/56 + 45/32 + 35/24 + 3/2 + 25/16 + 45/28 + 5/3 + 7/4 + 25/14 + 15/8 + 2/1 diff --git a/scales/smithgw_21.scl b/scales/smithgw_21.scl new file mode 100644 index 0000000..cd3ff48 --- /dev/null +++ b/scales/smithgw_21.scl @@ -0,0 +1,26 @@ +! smithgw_21.scl +! +Gene Ward Smith symmetrical 7-limit JI version of Blackjack, TL 10-5-2002 + 21 +! + 49/48 + 15/14 + 35/32 + 8/7 + 7/6 + 49/40 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 8/5 + 80/49 + 12/7 + 7/4 + 64/35 + 28/15 + 96/49 + 2/1 diff --git a/scales/smithgw_45.scl b/scales/smithgw_45.scl new file mode 100644 index 0000000..0a55bf3 --- /dev/null +++ b/scales/smithgw_45.scl @@ -0,0 +1,50 @@ +! smithgw_45.scl +! +Gene Ward Smith large limma repeating 5-tone MOS + 45 +! + 35.33333 + 49.00000 + 84.33333 + 98.00000 + 133.33333 + 168.66666 + 182.33333 + 217.66667 + 231.33333 + 266.66667 + 302.00000 + 315.66667 + 351.00000 + 364.66667 + 400.00000 + 435.33333 + 449.00000 + 484.33333 + 498.00000 + 533.33333 + 568.66666 + 582.33333 + 617.66667 + 631.33333 + 666.66667 + 702.00000 + 715.66667 + 751.00000 + 764.66667 + 800.00000 + 835.33333 + 849.00000 + 884.33333 + 898.00000 + 933.33333 + 968.66666 + 982.33333 + 1017.66667 + 1031.33333 + 1066.66667 + 1102.00000 + 1115.66667 + 1151.00000 + 1164.66667 + 2/1 diff --git a/scales/smithgw_58.scl b/scales/smithgw_58.scl new file mode 100644 index 0000000..b5fe045 --- /dev/null +++ b/scales/smithgw_58.scl @@ -0,0 +1,63 @@ +! smithgw_58.scl +! +Gene Ward Smith 58-tone epimorphic superset of Partch's 43-tone scale + 58 +! + 81/80 + 45/44 + 33/32 + 21/20 + 16/15 + 27/25 + 12/11 + 11/10 + 10/9 + 9/8 + 8/7 + 121/105 + 7/6 + 32/27 + 6/5 + 40/33 + 11/9 + 99/80 + 5/4 + 14/11 + 9/7 + 315/242 + 21/16 + 4/3 + 27/20 + 15/11 + 11/8 + 7/5 + 99/70 + 10/7 + 16/11 + 22/15 + 40/27 + 3/2 + 32/21 + 484/315 + 14/9 + 11/7 + 8/5 + 81/50 + 18/11 + 33/20 + 5/3 + 27/16 + 12/7 + 121/70 + 7/4 + 16/9 + 9/5 + 20/11 + 11/6 + 50/27 + 15/8 + 40/21 + 64/33 + 88/45 + 160/81 + 2/1 diff --git a/scales/smithgw_9.scl b/scales/smithgw_9.scl new file mode 100644 index 0000000..9bc4617 --- /dev/null +++ b/scales/smithgw_9.scl @@ -0,0 +1,14 @@ +! smithgw_9.scl +! +Gene Ward Smith "Miracle-Magic square" tuning, genus chromaticum of ji_12a + 9 +! + 16/15 + 7/6 + 5/4 + 4/3 + 3/2 + 8/5 + 12/7 + 15/8 + 2/1 diff --git a/scales/smithgw_al-baked.scl b/scales/smithgw_al-baked.scl new file mode 100644 index 0000000..803df2e --- /dev/null +++ b/scales/smithgw_al-baked.scl @@ -0,0 +1,17 @@ +! smithgw_al-baked.scl +! +Baked alaska, with beat ratios of 2 and 3/2 + 12 +! + 102.56522 + 201.13005 + 299.69489 + 402.26011 + 500.82494 + 599.38977 + 3/2 + 800.51983 + 899.08466 + 1001.64989 + 1100.21472 + 1198.77955 diff --git a/scales/smithgw_al-fried.scl b/scales/smithgw_al-fried.scl new file mode 100644 index 0000000..27f3bce --- /dev/null +++ b/scales/smithgw_al-fried.scl @@ -0,0 +1,17 @@ +! smithgw_al-fried.scl +! +Fried alaska, with octave-fifth brats of 1 and 2 + 12 +! + 98.86779 + 197.73558 + 299.07437 + 397.94215 + 496.80994 + 598.14873 + 697.01652 + 795.88431 + 897.22310 + 996.09089 + 1094.95867 + 1196.29747 diff --git a/scales/smithgw_asbru.scl b/scales/smithgw_asbru.scl new file mode 100644 index 0000000..3343b58 --- /dev/null +++ b/scales/smithgw_asbru.scl @@ -0,0 +1,17 @@ +! smithgw_asbru.scl +! +Modified bifrost (2003) + 12 +! + 89.60192 + 200.00000 + 310.39808 + 400.00000 + 510.39808 + 589.60192 + 700.00000 + 800.00000 + 900.00000 + 1010.39808 + 1089.60192 + 2/1 diff --git a/scales/smithgw_ball.scl b/scales/smithgw_ball.scl new file mode 100644 index 0000000..c3b96ec --- /dev/null +++ b/scales/smithgw_ball.scl @@ -0,0 +1,43 @@ +! smithgw_ball.scl +! +Ball 2 around tetrad lattice hole + 38 +! + 49/48 + 25/24 + 21/20 + 15/14 + 35/32 + 9/8 + 147/128 + 7/6 + 75/64 + 6/5 + 49/40 + 5/4 + 245/192 + 9/7 + 21/16 + 75/56 + 175/128 + 7/5 + 45/32 + 10/7 + 35/24 + 3/2 + 49/32 + 25/16 + 63/40 + 45/28 + 105/64 + 5/3 + 12/7 + 7/4 + 25/14 + 9/5 + 175/96 + 147/80 + 15/8 + 245/128 + 63/32 + 2/1 diff --git a/scales/smithgw_ball2.scl b/scales/smithgw_ball2.scl new file mode 100644 index 0000000..0a1bf9d --- /dev/null +++ b/scales/smithgw_ball2.scl @@ -0,0 +1,60 @@ +! smithgw_ball2.scl +! +7-limit crystal ball 2 + 55 +! + 50/49 + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 28/25 + 9/8 + 8/7 + 7/6 + 25/21 + 6/5 + 60/49 + 49/40 + 5/4 + 32/25 + 9/7 + 64/49 + 21/16 + 4/3 + 49/36 + 48/35 + 25/18 + 7/5 + 10/7 + 36/25 + 35/24 + 72/49 + 3/2 + 32/21 + 49/32 + 14/9 + 25/16 + 8/5 + 80/49 + 49/30 + 5/3 + 42/25 + 12/7 + 7/4 + 16/9 + 25/14 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 48/25 + 35/18 + 96/49 + 49/25 + 2/1 diff --git a/scales/smithgw_bifrost.scl b/scales/smithgw_bifrost.scl new file mode 100644 index 0000000..d377ba2 --- /dev/null +++ b/scales/smithgw_bifrost.scl @@ -0,0 +1,17 @@ +! smithgw_bifrost.scl +! +Six meantone fifths, four pure, two of sqrt(2048/2025 sqrt(5)) + 12 +! + 86.80214 + 193.15686 + 299.51157 + 5/4 + 503.42157 + 584.84714 + 696.57843 + 793.15686 + 889.73528 + 1001.46657 + 1082.89214 + 2/1 diff --git a/scales/smithgw_cauldron.scl b/scales/smithgw_cauldron.scl new file mode 100644 index 0000000..c23d77c --- /dev/null +++ b/scales/smithgw_cauldron.scl @@ -0,0 +1,17 @@ +! smithgw_cauldron.scl +! +Circulating temperament with two pure 9/7 thirds + 12 +! + 86.50612 + 189.20489 + 308.09633 + 378.40979 + 505.39755 + 575.71101 + 694.60245 + 797.30123 + 883.80734 + 1010.79511 + 1073.01223 + 2/1 diff --git a/scales/smithgw_choraled.scl b/scales/smithgw_choraled.scl new file mode 100644 index 0000000..c9a8b5d --- /dev/null +++ b/scales/smithgw_choraled.scl @@ -0,0 +1,30 @@ +! smithgw_choraled.scl +Scale used in "choraled" by Gene Ward Smith +26 +! +70.870134 +85.285706 +95.735073 +181.020779 +205.885718 +266.306484 +301.620791 +386.906496 +411.771435 +472.192202 +497.057141 +567.927275 +592.792214 +617.657153 +653.212981 +678.077920 +702.942859 +798.677932 +883.963637 +908.828577 +969.249343 +1089.849355 +1114.714294 +1150.270122 +1175.135061 +2/1 diff --git a/scales/smithgw_circu.scl b/scales/smithgw_circu.scl new file mode 100644 index 0000000..eebc2c6 --- /dev/null +++ b/scales/smithgw_circu.scl @@ -0,0 +1,17 @@ +! smithgw_circu.scl +! +Circulating temperament, brats of 1.5, 2.0, 4.0 + 12 +! + 25250/23829 + 26684/23829 + 37875/31772 + 29840/23829 + 63769/47658 + 11190/7943 + 35636/23829 + 12625/7943 + 39940/23829 + 32737/18330 + 14920/7943 + 2/1 diff --git a/scales/smithgw_ck.scl b/scales/smithgw_ck.scl new file mode 100644 index 0000000..167fffa --- /dev/null +++ b/scales/smithgw_ck.scl @@ -0,0 +1,77 @@ +! smithgw_ck.scl +! +Catakleismic temperament, g=316.745, 11-limit + 72 +! + 18.15906 + 36.31813 + 54.47719 + 66.98086 + 85.13992 + 103.29898 + 121.45805 + 133.96171 + 152.12078 + 170.27984 + 188.43890 + 200.94257 + 219.10163 + 237.26070 + 255.41976 + 267.92342 + 286.08249 + 304.24155 + 316.74521 + 334.90428 + 353.06334 + 371.22241 + 383.72607 + 401.88513 + 420.04420 + 438.20326 + 450.70693 + 468.86599 + 487.02505 + 505.18412 + 517.68778 + 535.84685 + 554.00591 + 572.16497 + 584.66864 + 602.82770 + 620.98677 + 633.49043 + 651.64949 + 669.80856 + 687.96762 + 700.47128 + 718.63035 + 736.78941 + 754.94848 + 767.45214 + 785.61120 + 803.77027 + 821.92933 + 834.43299 + 852.59206 + 870.75112 + 888.91019 + 901.41385 + 919.57292 + 937.73198 + 950.23564 + 968.39471 + 986.55377 + 1004.71284 + 1017.21650 + 1035.37556 + 1053.53463 + 1071.69369 + 1084.19735 + 1102.35642 + 1120.51548 + 1138.67455 + 1151.17821 + 1169.33727 + 1187.49634 + 2/1 diff --git a/scales/smithgw_decab.scl b/scales/smithgw_decab.scl new file mode 100644 index 0000000..cd3050c --- /dev/null +++ b/scales/smithgw_decab.scl @@ -0,0 +1,15 @@ +! smithgw_decab.scl +! [21/20, 16/15, 15/14, 10/9, 21/20, 15/14, 16/15, 21/20, 10/9, 15/14] +(10/9) <==> (16/15) transform of decaa +10 +! +21/20 +28/25 +6/5 +4/3 +7/5 +3/2 +8/5 +42/25 +28/15 +2/1 diff --git a/scales/smithgw_decac.scl b/scales/smithgw_decac.scl new file mode 100644 index 0000000..21375d5 --- /dev/null +++ b/scales/smithgw_decac.scl @@ -0,0 +1,15 @@ +! smithgw_decac.scl +! [15/14, 16/15, 21/20, 10/9, 15/14, 21/20, 16/15, 15/14, 10/9, 21/20] +inversion of decaa +10 +! +15/14 +8/7 +6/5 +4/3 +10/7 +3/2 +8/5 +12/7 +40/21 +2/1 diff --git a/scales/smithgw_decad.scl b/scales/smithgw_decad.scl new file mode 100644 index 0000000..167aad8 --- /dev/null +++ b/scales/smithgw_decad.scl @@ -0,0 +1,15 @@ +! smithgw_decad.scl +! [15/14, 10/9, 21/20, 16/15, 15/14, 21/20, 10/9, 15/14, 16/15, 21/20] +inversion of decab +10 +! +15/14 +25/21 +5/4 +4/3 +10/7 +3/2 +5/3 +25/14 +40/21 +2/1 diff --git a/scales/smithgw_dhexmarv.scl b/scales/smithgw_dhexmarv.scl new file mode 100644 index 0000000..f17d13b --- /dev/null +++ b/scales/smithgw_dhexmarv.scl @@ -0,0 +1,16 @@ +! smithgw_dhexmarv.scl +Dualhex in 11-limit minimax Marvel ({225/224, 385/384}-planar) +12 +! +115.802647 +151.994179 +267.796826 +383.599473 +468.992587 +535.593652 +700.597880 +767.198946 +852.592059 +968.394706 +1084.197353 +2/1 diff --git a/scales/smithgw_diff13.scl b/scales/smithgw_diff13.scl new file mode 100644 index 0000000..d6e3b23 --- /dev/null +++ b/scales/smithgw_diff13.scl @@ -0,0 +1,18 @@ +! smithgw_diff13.scl +! +mod 13 perfect difference set, 7-limit + 13 +! + 21/20 + 15/14 + 8/7 + 6/5 + 60/49 + 9/7 + 14/9 + 49/30 + 5/3 + 7/4 + 28/15 + 40/21 + 2/1 diff --git a/scales/smithgw_duopors.scl b/scales/smithgw_duopors.scl new file mode 100644 index 0000000..cb55725 --- /dev/null +++ b/scales/smithgw_duopors.scl @@ -0,0 +1,16 @@ +! smithgw_duopors.scl +3-->10/3 5-->24/3 sorted rotated Duodene in 22-et +12 +! +54.5454545 +163.636364 +327.272727 +381.818182 +490.909091 +545.454545 +709.090909 +818.181818 +872.727273 +1036.363636 +1036.363636 +2/1 diff --git a/scales/smithgw_dwarf6_7.scl b/scales/smithgw_dwarf6_7.scl new file mode 100644 index 0000000..5911864 --- /dev/null +++ b/scales/smithgw_dwarf6_7.scl @@ -0,0 +1,11 @@ +! smithgw_dwarf6_7.scl +! +Dwarf(<6 10 14 17|) + 6 +! + 8/7 + 5/4 + 10/7 + 3/2 + 12/7 + 2/1 diff --git a/scales/smithgw_ennon13.scl b/scales/smithgw_ennon13.scl new file mode 100644 index 0000000..814eae7 --- /dev/null +++ b/scales/smithgw_ennon13.scl @@ -0,0 +1,17 @@ +! smithgw_ennon13.scl +Nonoctave Ennealimmal, [3, 5/3] just tuning +13 +! +27/25 +7/6 +63/50 +10/7 +54/35 +5/3 +9/5 +35/18 +21/10 +50/21 +18/7 +25/9 +3/1 diff --git a/scales/smithgw_ennon15.scl b/scales/smithgw_ennon15.scl new file mode 100644 index 0000000..70e6121 --- /dev/null +++ b/scales/smithgw_ennon15.scl @@ -0,0 +1,19 @@ +! smithgw_ennon15.scl +Nonoctave Ennealimmal, [3, 5/3] just tuning +15 +! +27/25 +7/6 +63/50 +250/189 +10/7 +54/35 +5/3 +9/5 +35/18 +21/10 +245/108 +50/21 +18/7 +25/9 +3/1 diff --git a/scales/smithgw_ennon28.scl b/scales/smithgw_ennon28.scl new file mode 100644 index 0000000..ea9362d --- /dev/null +++ b/scales/smithgw_ennon28.scl @@ -0,0 +1,32 @@ +! smithgw_ennon28.scl +Nonoctave Ennealimmal, [3, 5/3] just tuning +28 +! +21/20 +27/25 +245/216 +7/6 +49/40 +63/50 +250/189 +49/36 +10/7 +72/49 +54/35 +100/63 +5/3 +7/4 +9/5 +189/100 +35/18 +49/24 +21/10 +108/49 +245/108 +50/21 +49/20 +18/7 +500/189 +25/9 +20/7 +3/1 diff --git a/scales/smithgw_ennon43.scl b/scales/smithgw_ennon43.scl new file mode 100644 index 0000000..555038b --- /dev/null +++ b/scales/smithgw_ennon43.scl @@ -0,0 +1,47 @@ +! smithgw_ennon43.scl +Nonoctave Ennealimmal, [3, 5/3] just tuning +43 +! +36/35 +21/20 +27/25 +10/9 +245/216 +7/6 +6/5 +49/40 +63/50 +35/27 +250/189 +49/36 +25/18 +10/7 +72/49 +3/2 +54/35 +100/63 +81/50 +5/3 +12/7 +7/4 +9/5 +50/27 +189/100 +35/18 +2/1 +49/24 +21/10 +54/25 +108/49 +245/108 +81/35 +50/21 +49/20 +5/2 +18/7 +500/189 +27/10 +25/9 +20/7 +35/12 +3/1 diff --git a/scales/smithgw_euclid3.scl b/scales/smithgw_euclid3.scl new file mode 100644 index 0000000..8ef67df --- /dev/null +++ b/scales/smithgw_euclid3.scl @@ -0,0 +1,48 @@ +! smithgw_euclid3.scl +! +7-limit Euclid ball 3 + 43 +! + 49/48 + 36/35 + 25/24 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 28/25 + 8/7 + 7/6 + 25/21 + 6/5 + 60/49 + 49/40 + 5/4 + 9/7 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 14/9 + 8/5 + 80/49 + 49/30 + 5/3 + 42/25 + 12/7 + 7/4 + 25/14 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 48/25 + 35/18 + 96/49 + 2/1 diff --git a/scales/smithgw_exotic1.scl b/scales/smithgw_exotic1.scl new file mode 100644 index 0000000..234c1c8 --- /dev/null +++ b/scales/smithgw_exotic1.scl @@ -0,0 +1,17 @@ +! smithgw_exotic1.scl +! +Exotic temperament featuring four pure 14/11 thirds and two pure fifths + 12 +! + 86.06169 + 198.38534 + 310.70898 + 391.24602 + 503.56966 + 589.63136 + 3/2 + 11/7 + 894.81568 + 1007.13932 + 1093.20102 + 2/1 diff --git a/scales/smithgw_fifaug.scl b/scales/smithgw_fifaug.scl new file mode 100644 index 0000000..7ccb6c5 --- /dev/null +++ b/scales/smithgw_fifaug.scl @@ -0,0 +1,19 @@ +! smithgw_fifaug.scl +Three circles of four (56/11)^(1/4) fifths with 11/7 as wolf +15 +! +95.623008 +113.130973 +208.753982 +304.376991 +400.000000 +495.623008 +513.130973 +608.753982 +704.376991 +800.000000 +895.623008 +913.130973 +1008.753982 +1104.376991 +2/1 diff --git a/scales/smithgw_gamelion.scl b/scales/smithgw_gamelion.scl new file mode 100644 index 0000000..01b8412 --- /dev/null +++ b/scales/smithgw_gamelion.scl @@ -0,0 +1,15 @@ +! smithgw_gamelion.scl +! +Gene Smith's 3136:3125 planar-tempered decatonic + 10 +! + 193.22000 + 315.25400 + 386.44100 + 508.47500 + 579.66100 + 701.69500 + 772.88100 + 894.91500 + 1088.13600 + 2/1 diff --git a/scales/smithgw_glumma.scl b/scales/smithgw_glumma.scl new file mode 100644 index 0000000..be2d200 --- /dev/null +++ b/scales/smithgw_glumma.scl @@ -0,0 +1,17 @@ +! smithgw_glumma.scl +! +Gene Smith's 7-limit Glumma scale (2002) + 12 +! + 36/35 + 8/7 + 6/5 + 5/4 + 48/35 + 10/7 + 3/2 + 5/3 + 12/7 + 7/4 + 96/49 + 2/1 diff --git a/scales/smithgw_gm.scl b/scales/smithgw_gm.scl new file mode 100644 index 0000000..897cb05 --- /dev/null +++ b/scales/smithgw_gm.scl @@ -0,0 +1,46 @@ +! smithgw_gm.scl +! +Gene Ward Smith "Genesis Minus" periodicity block + 41 +! + 81/80 + 33/32 + 21/20 + 16/15 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 21/16 + 4/3 + 27/20 + 11/8 + 7/5 + 10/7 + 16/11 + 40/27 + 3/2 + 32/21 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 11/6 + 15/8 + 40/21 + 64/33 + 160/81 + 2/1 diff --git a/scales/smithgw_grail.scl b/scales/smithgw_grail.scl new file mode 100644 index 0000000..1bacccb --- /dev/null +++ b/scales/smithgw_grail.scl @@ -0,0 +1,16 @@ +! smithgw_grail.scl +Holy Grail circulating temperament with two 14/11 and one 9/7 major third +12 +! +86.869027 +195.623009 +304.376991 +391.246018 +504.376991 +578.080960 +695.623009 +795.623009 +895.623009 +1013.165056 +1086.869026 +2/1 diff --git a/scales/smithgw_graileq.scl b/scales/smithgw_graileq.scl new file mode 100644 index 0000000..1b683dd --- /dev/null +++ b/scales/smithgw_graileq.scl @@ -0,0 +1,17 @@ +! smithgw_graileq.scl +! +56% RMS grail + 44% JI grail + 12 +! + 85.29319 + 196.24472 + 307.19625 + 392.48944 + 505.78483 + 579.66309 + 697.95321 + 796.24472 + 894.53624 + 1012.82635 + 1086.70462 + 2/1 diff --git a/scales/smithgw_grailrms.scl b/scales/smithgw_grailrms.scl new file mode 100644 index 0000000..3f4d980 --- /dev/null +++ b/scales/smithgw_grailrms.scl @@ -0,0 +1,17 @@ +! smithgw_grailrms.scl +! +RMS optimized Holy Grail + 12 +! + 84.04825 + 196.73589 + 309.42352 + 393.47177 + 506.89705 + 580.91301 + 699.79411 + 796.73589 + 893.67766 + 1012.55876 + 1086.57473 + 2/1 diff --git a/scales/smithgw_hahn12.scl b/scales/smithgw_hahn12.scl new file mode 100644 index 0000000..5878822 --- /dev/null +++ b/scales/smithgw_hahn12.scl @@ -0,0 +1,17 @@ +! smithgw_hahn12.scl +! +Hahn-reduced 12 note scale, Fokker block 225/224, 126/125, 64/63 + 12 +! + 15/14 + 8/7 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/smithgw_hahn15.scl b/scales/smithgw_hahn15.scl new file mode 100644 index 0000000..6fb0cdf --- /dev/null +++ b/scales/smithgw_hahn15.scl @@ -0,0 +1,20 @@ +! smithgw_hahn15.scl +! +Hahn-reduced 15 note scale + 15 +! + 16/15 + 10/9 + 7/6 + 6/5 + 5/4 + 4/3 + 7/5 + 10/7 + 3/2 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 2/1 diff --git a/scales/smithgw_hahn16.scl b/scales/smithgw_hahn16.scl new file mode 100644 index 0000000..30d08a3 --- /dev/null +++ b/scales/smithgw_hahn16.scl @@ -0,0 +1,21 @@ +! smithgw_hahn16.scl +! +Hahn-reduced 16 note scale + 16 +! + 15/14 + 9/8 + 8/7 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 3/2 + 25/16 + 8/5 + 5/3 + 7/4 + 28/15 + 15/8 + 2/1 diff --git a/scales/smithgw_hahn19.scl b/scales/smithgw_hahn19.scl new file mode 100644 index 0000000..30f586f --- /dev/null +++ b/scales/smithgw_hahn19.scl @@ -0,0 +1,24 @@ +! smithgw_hahn19.scl +! +Hahn-reduced 19 note scale + 19 +! + 21/20 + 15/14 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/smithgw_hahn22.scl b/scales/smithgw_hahn22.scl new file mode 100644 index 0000000..70a4ffe --- /dev/null +++ b/scales/smithgw_hahn22.scl @@ -0,0 +1,27 @@ +! smithgw_hahn22.scl +! +Hahn-reduced 22 note scale + 22 +! + 25/24 + 15/14 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 25/18 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/smithgw_hemw.scl b/scales/smithgw_hemw.scl new file mode 100644 index 0000000..5dd5edb --- /dev/null +++ b/scales/smithgw_hemw.scl @@ -0,0 +1,46 @@ +! smithgw_hemw.scl +! +Hemiwrschmidt TOP tempering of 43 notes of septimal ball 3 + 41 +! + 36.75744 + 46.79268 + 73.51487 + 83.55011 + 110.27231 + 120.30755 + 157.06499 + 183.78719 + 193.82243 + 230.57987 + 267.33730 + 304.09474 + 314.12998 + 350.88742 + 387.64485 + 434.43753 + 471.19497 + 497.91717 + 544.70985 + 581.46728 + 618.22472 + 654.98216 + 701.77484 + 728.49703 + 765.25447 + 812.04715 + 848.80458 + 885.56202 + 895.59726 + 932.35470 + 969.11214 + 1005.86957 + 1015.90482 + 1042.62702 + 1079.38445 + 1089.41969 + 1116.14189 + 1126.17713 + 1152.89932 + 1162.93457 + 1199.69200 diff --git a/scales/smithgw_indianred.scl b/scales/smithgw_indianred.scl new file mode 100644 index 0000000..62ce0c9 --- /dev/null +++ b/scales/smithgw_indianred.scl @@ -0,0 +1,27 @@ +! smithgw_indianred.scl +! +32805/32768 Hahn-reduced + 22 +! + 135/128 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 256/135 + 2/1 diff --git a/scales/smithgw_klv.scl b/scales/smithgw_klv.scl new file mode 100644 index 0000000..948871d --- /dev/null +++ b/scales/smithgw_klv.scl @@ -0,0 +1,20 @@ +! smithgw_klv.scl +! +Variant of kleismic with 9/7 thirds, g=316.492 + 15 +! + 65.96636 + 131.93272 + 197.89909 + 316.49159 + 382.45795 + 448.42431 + 514.39068 + 632.98318 + 698.94954 + 14/9 + 830.88227 + 949.47477 + 1015.44113 + 1081.40750 + 2/1 diff --git a/scales/smithgw_majraj1.scl b/scales/smithgw_majraj1.scl new file mode 100644 index 0000000..adf74e2 --- /dev/null +++ b/scales/smithgw_majraj1.scl @@ -0,0 +1,16 @@ +! smithgw_majraj1.scl +Majraj 648/625 6561/6250 scale +12 +! +27/25 +125/108 +729/625 +5/4 +27/20 +25/18 +3/2 +81/50 +5/3 +9/5 +243/125 +2/1 diff --git a/scales/smithgw_majraj2.scl b/scales/smithgw_majraj2.scl new file mode 100644 index 0000000..53692bb --- /dev/null +++ b/scales/smithgw_majraj2.scl @@ -0,0 +1,16 @@ +! smithgw_majraj2.scl +Majraj 648/625 6561/6250 scale +12 +! +27/25 +10/9 +6/5 +162/125 +4/3 +36/25 +3/2 +125/81 +5/3 +9/5 +50/27 +2/1 diff --git a/scales/smithgw_majraj3.scl b/scales/smithgw_majraj3.scl new file mode 100644 index 0000000..a0e00e9 --- /dev/null +++ b/scales/smithgw_majraj3.scl @@ -0,0 +1,16 @@ +! smithgw_majraj3.scl +Majraj 648/625 6561/6250 scale +12 +! +27/25 +10/9 +6/5 +162/125 +4/3 +25/18 +3/2 +125/81 +5/3 +9/5 +50/27 +2/1 diff --git a/scales/smithgw_majsyn1.scl b/scales/smithgw_majsyn1.scl new file mode 100644 index 0000000..213882b --- /dev/null +++ b/scales/smithgw_majsyn1.scl @@ -0,0 +1,16 @@ +! smithgw_majsyn1.scl +First Majsyn 648/625 81/80 scale +12 +! +250/243 +10/9 +6/5 +100/81 +4/3 +25/18 +40/27 +125/81 +5/3 +16/9 +50/27 +2/1 diff --git a/scales/smithgw_majsyn2.scl b/scales/smithgw_majsyn2.scl new file mode 100644 index 0000000..bef46a3 --- /dev/null +++ b/scales/smithgw_majsyn2.scl @@ -0,0 +1,16 @@ +! smithgw_majsyn2.scl +Second Majsyn 648/625 81/80 scale +12 +! +25/24 +10/9 +6/5 +5/4 +4/3 +25/18 +3/2 +125/81 +5/3 +9/5 +50/27 +2/1 diff --git a/scales/smithgw_majsyn3.scl b/scales/smithgw_majsyn3.scl new file mode 100644 index 0000000..9d57c88 --- /dev/null +++ b/scales/smithgw_majsyn3.scl @@ -0,0 +1,16 @@ +! smithgw_majsyn3.scl +Third Majsyn 648/625 81/80 scale +12 +! +25/24 +9/8 +6/5 +5/4 +27/20 +25/18 +3/2 +25/16 +5/3 +9/5 +15/8 +2/1 diff --git a/scales/smithgw_meandin.scl b/scales/smithgw_meandin.scl new file mode 100644 index 0000000..b5a7eaa --- /dev/null +++ b/scales/smithgw_meandin.scl @@ -0,0 +1,17 @@ +! smithgw_meandin.scl +! +Gene Smith, inverted detempered 7-limit meantone + 12 +! + 15/14 + 8/7 + 6/5 + 9/7 + 4/3 + 10/7 + 3/2 + 8/5 + 12/7 + 9/5 + 27/14 + 2/1 diff --git a/scales/smithgw_meanlesfip.scl b/scales/smithgw_meanlesfip.scl new file mode 100644 index 0000000..c160e78 --- /dev/null +++ b/scales/smithgw_meanlesfip.scl @@ -0,0 +1,17 @@ +! smithgw_meanlesfip.scl +! +12-note 5-limit meantone lesfip + 12 +! + 71.99829 + 191.39229 + 306.33099 + 384.18843 + 503.58243 + 575.58072 + 695.11120 + 769.76122 + 887.79036 + 1005.81950 + 1080.46952 + 2/1 diff --git a/scales/smithgw_meanred.scl b/scales/smithgw_meanred.scl new file mode 100644 index 0000000..ee1f862 --- /dev/null +++ b/scales/smithgw_meanred.scl @@ -0,0 +1,17 @@ +! smithgw_meanred.scl +! +171-et Hahn reduced rational Meantone[12] + 12 +! + 672/625 + 125/112 + 6/5 + 56/45 + 75/56 + 25/18 + 112/75 + 45/28 + 5/3 + 224/125 + 625/336 + 2/1 diff --git a/scales/smithgw_meansp.scl b/scales/smithgw_meansp.scl new file mode 100644 index 0000000..da96eac --- /dev/null +++ b/scales/smithgw_meansp.scl @@ -0,0 +1,12 @@ +! smithgw_meansp.scl +! +Strictly proper scale in 1/4-comma meantone, TL 10-6-2006 + 7 +! + 117.10786 + 5/4 + 32/25 + 696.57843 + 8/5 + 1006.84314 + 2/1 diff --git a/scales/smithgw_meantune.scl b/scales/smithgw_meantune.scl new file mode 100644 index 0000000..88d9a6e --- /dev/null +++ b/scales/smithgw_meantune.scl @@ -0,0 +1,21 @@ +! smithgw_meantune.scl +! +Meantune scale/temperament, Gene Ward Smith (2003) + 16 +! + 77.18667 + 116.09974 + 193.48516 + 309.60699 + 386.99240 + 425.90548 + 503.09215 + 580.12326 + 620.00616 + 695.75115 + 812.87817 + 890.21397 + 1007.34099 + 1083.08598 + 1122.96889 + 2/1 diff --git a/scales/smithgw_mir22.scl b/scales/smithgw_mir22.scl new file mode 100644 index 0000000..5951629 --- /dev/null +++ b/scales/smithgw_mir22.scl @@ -0,0 +1,27 @@ +! smithgw_mir22.scl +! +11-limit Miracle[22] + 22 +! + 45/44 + 21/20 + 15/14 + 12/11 + 8/7 + 7/6 + 11/9 + 5/4 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 32/21 + 8/5 + 18/11 + 12/7 + 7/4 + 11/6 + 15/8 + 49/25 + 2/1 diff --git a/scales/smithgw_mmt.scl b/scales/smithgw_mmt.scl new file mode 100644 index 0000000..6470f81 --- /dev/null +++ b/scales/smithgw_mmt.scl @@ -0,0 +1,17 @@ +! smithgw_mmt.scl +! +Modified meantone with 5/4, 14/11 and 44/35 major thirds, TL 17-03-2003 + 12 +! + 76.04900 + 193.15686 + 279.07046 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 11/7 + 889.73529 + 975.64889 + 1082.89214 + 2/1 diff --git a/scales/smithgw_modmos12a.scl b/scales/smithgw_modmos12a.scl new file mode 100644 index 0000000..e84e11b --- /dev/null +++ b/scales/smithgw_modmos12a.scl @@ -0,0 +1,17 @@ +! smithgw_modmos12a.scl +! +A 12-note modmos in 50-et meantone + 12 +! + 24.00000 + 192.00000 + 264.00000 + 384.00000 + 456.00000 + 576.00000 + 696.00000 + 768.00000 + 840.00000 + 960.00000 + 1080.00000 + 2/1 diff --git a/scales/smithgw_monzoblock37.scl b/scales/smithgw_monzoblock37.scl new file mode 100644 index 0000000..01f1c2b --- /dev/null +++ b/scales/smithgw_monzoblock37.scl @@ -0,0 +1,43 @@ +! smithgw_monzoblock37.scl +! +Symmetrical 13-limit Fokker block containing all of the primes as scale degrees +! Commas: 512/507, 121/120, 91/90, 385/384, 64/63; all generators -18 to 18 + 37 +! + 1024/1001 + 33/32 + 16/15 + 13/12 + 12/11 + 44/39 + 8/7 + 7/6 + 13/11 + 77/64 + 16/13 + 5/4 + 33/26 + 13/10 + 4/3 + 192/143 + 11/8 + 128/91 + 91/64 + 16/11 + 143/96 + 3/2 + 20/13 + 52/33 + 8/5 + 13/8 + 128/77 + 22/13 + 12/7 + 7/4 + 39/22 + 11/6 + 24/13 + 15/8 + 64/33 + 1001/512 + 2/1 diff --git a/scales/smithgw_mush.scl b/scales/smithgw_mush.scl new file mode 100644 index 0000000..5db7d3c --- /dev/null +++ b/scales/smithgw_mush.scl @@ -0,0 +1,16 @@ +! smithgw_mush.scl +Mysterious mush scale. Gene Smith's meantone to TOP pelogic transformation +12 +! +-1175.551080 +-163.507699 +848.535681 +-327.015398 +685.027982 +-490.523090 +521.520283 +-654.030800 +358.012584 +1370.055964 +194.504885 +1206.548265 diff --git a/scales/smithgw_orw18r.scl b/scales/smithgw_orw18r.scl new file mode 100644 index 0000000..10327f7 --- /dev/null +++ b/scales/smithgw_orw18r.scl @@ -0,0 +1,23 @@ +! smithgw_orw18r.scl +! +Rational version of two cycles of 9-tone "Orwell" + 18 +! + 36/35 + 15/14 + 35/32 + 8/7 + 7/6 + 5/4 + 9/7 + 4/3 + 48/35 + 35/24 + 3/2 + 14/9 + 8/5 + 12/7 + 7/4 + 49/27 + 15/8 + 2/1 diff --git a/scales/smithgw_pel1.scl b/scales/smithgw_pel1.scl new file mode 100644 index 0000000..8df2e51 --- /dev/null +++ b/scales/smithgw_pel1.scl @@ -0,0 +1,17 @@ +! smithgw_pel1.scl +! +125/108, 135/128 periodicity block no. 1 + 12 +! + 25/24 + 10/9 + 9/8 + 5/4 + 4/3 + 25/18 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/smithgw_pel3.scl b/scales/smithgw_pel3.scl new file mode 100644 index 0000000..af2b867 --- /dev/null +++ b/scales/smithgw_pel3.scl @@ -0,0 +1,17 @@ +! smithgw_pel3.scl +! +125/108, 135/128 periodicity block no. 3 + 12 +! + 10/9 + 9/8 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/smithgw_pk.scl b/scales/smithgw_pk.scl new file mode 100644 index 0000000..df4f637 --- /dev/null +++ b/scales/smithgw_pk.scl @@ -0,0 +1,20 @@ +! smithgw_pk.scl +! +Parakleismic temperament, g=315.263, 5-limit + 15 +! + 61.05322 + 122.10645 + 183.15967 + 315.26331 + 376.31653 + 437.36976 + 498.42298 + 630.52661 + 691.57984 + 752.63306 + 8/5 + 945.78992 + 1006.84314 + 1067.89637 + 2/1 diff --git a/scales/smithgw_pris.scl b/scales/smithgw_pris.scl new file mode 100644 index 0000000..1943fc4 --- /dev/null +++ b/scales/smithgw_pris.scl @@ -0,0 +1,17 @@ +! smithgw_pris.scl +! [16/15, 21/20, 25/24, 15/14, 16/15, 21/20, 15/14, 16/15, 25/24, 21/20, 16/15, 15/14] +optimized (15/14)^3 (16/15)^4 (21/20)^3 (25/24)^2 scale +12 +! +16/15 +28/25 +7/6 +5/4 +4/3 +7/5 +3/2 +8/5 +5/3 +7/4 +28/15 +2/1 diff --git a/scales/smithgw_prisa.scl b/scales/smithgw_prisa.scl new file mode 100644 index 0000000..d6b8872 --- /dev/null +++ b/scales/smithgw_prisa.scl @@ -0,0 +1,17 @@ +! smithgw_prisa.scl +! [21/20, 16/15, 15/14, 25/24, 21/20, 16/15, 15/14, 16/15, 21/20, 25/24, 16/15, 15/14] +optimized (15/14)^3 (16/15)^4 (21/20)^3 (25/24)^2 scale +12 +! +21/20 +28/25 +6/5 +5/4 +21/16 +7/5 +3/2 +8/5 +42/25 +7/4 +28/15 +2/1 diff --git a/scales/smithgw_propsep.scl b/scales/smithgw_propsep.scl new file mode 100644 index 0000000..540e3f0 --- /dev/null +++ b/scales/smithgw_propsep.scl @@ -0,0 +1,16 @@ +! smithgw_propsep.scl +! +Proper septicyclic 1029/1024-tempered scale in 252-tET + 11 +! + 38.09524 + 152.38095 + 304.76190 + 385.71429 + 538.09524 + 619.04762 + 700.00000 + 852.38095 + 933.33333 + 1085.71429 + 2/1 diff --git a/scales/smithgw_pum13marv.scl b/scales/smithgw_pum13marv.scl new file mode 100644 index 0000000..e847d08 --- /dev/null +++ b/scales/smithgw_pum13marv.scl @@ -0,0 +1,18 @@ +! smithgw_pum13marv.scl +! +pum13 marvel tempered and in epimorphic order + 13 +! + 200.05424 + 268.79879 + 468.85303 + 384.38583 + 584.44007 + 499.97288 + 700.02712 + 768.77167 + 7/4 + 5/3 + 1084.41295 + 1284.46719 + 2/1 diff --git a/scales/smithgw_qm3a.scl b/scales/smithgw_qm3a.scl new file mode 100644 index 0000000..0a1cef0 --- /dev/null +++ b/scales/smithgw_qm3a.scl @@ -0,0 +1,15 @@ +! smithgw_qm3a.scl +! +Qm(3) 10-note quasi-miracle scale, mode A, 72-tET, TL 04-01-2002 + 10 +! + 116.66667 + 266.66667 + 383.33333 + 500.00000 + 583.33333 + 700.00000 + 816.66667 + 966.66667 + 1083.33333 + 2/1 diff --git a/scales/smithgw_qm3b.scl b/scales/smithgw_qm3b.scl new file mode 100644 index 0000000..98f7aa4 --- /dev/null +++ b/scales/smithgw_qm3b.scl @@ -0,0 +1,15 @@ +! smithgw_qm3b.scl +! +Qm(3) 10-note quasi-miracle scale, mode B + 10 +! + 116.66667 + 233.33333 + 383.33333 + 500.00000 + 616.66667 + 700.00000 + 816.66667 + 933.33333 + 1083.33333 + 2/1 diff --git a/scales/smithgw_ragasyn1.scl b/scales/smithgw_ragasyn1.scl new file mode 100644 index 0000000..cf15df1 --- /dev/null +++ b/scales/smithgw_ragasyn1.scl @@ -0,0 +1,17 @@ +! smithgw_ragasyn1.scl +! +Ragasyn 6561/6250 81/80 scale + 12 +! + 250/243 + 10/9 + 6/5 + 100/81 + 4/3 + 25/18 + 3/2 + 125/81 + 5/3 + 9/5 + 50/27 + 2/1 diff --git a/scales/smithgw_ratwell.scl b/scales/smithgw_ratwell.scl new file mode 100644 index 0000000..454fad6 --- /dev/null +++ b/scales/smithgw_ratwell.scl @@ -0,0 +1,17 @@ +! smithgw_ratwell.scl +! +7-limit rational well-temperament + 12 +! + 256/243 + 28/25 + 32/27 + 175616/140625 + 4/3 + 1024/729 + 3/2 + 128/81 + 3136/1875 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/smithgw_ratwolf.scl b/scales/smithgw_ratwolf.scl new file mode 100644 index 0000000..6512a30 --- /dev/null +++ b/scales/smithgw_ratwolf.scl @@ -0,0 +1,17 @@ +! smithgw_ratwolf.scl +! +Eleven fifths of (416/5)^(1/11) and one 20/13 wolf, G.W. Smith 2003 + 12 +! + 70.86342 + 191.67526 + 312.48710 + 383.35053 + 504.16237 + 575.02579 + 695.83763 + 766.70106 + 887.51290 + 1008.32474 + 1079.18816 + 2/1 diff --git a/scales/smithgw_rectoo.scl b/scales/smithgw_rectoo.scl new file mode 100644 index 0000000..7343b5e --- /dev/null +++ b/scales/smithgw_rectoo.scl @@ -0,0 +1,17 @@ +! smithgw_rectoo.scl +! +Hahn-reduced circle of fifths via <12 19 27 34| kernel + 12 +! + 10/9 + 8/7 + 6/5 + 5/4 + 4/3 + 3/2 + 25/16 + 8/5 + 5/3 + 7/4 + 9/5 + 2/1 diff --git a/scales/smithgw_red72_11geo.scl b/scales/smithgw_red72_11geo.scl new file mode 100644 index 0000000..3c1811f --- /dev/null +++ b/scales/smithgw_red72_11geo.scl @@ -0,0 +1,76 @@ +! smithgw_red72_11geo.scl +Geometric 11-limit reduced scale +72 +! +100/99 +56/55 +33/32 +25/24 +21/20 +35/33 +15/14 +27/25 +12/11 +11/10 +10/9 +9/8 +112/99 +8/7 +231/200 +7/6 +33/28 +25/21 +6/5 +40/33 +11/9 +99/80 +5/4 +44/35 +14/11 +9/7 +35/27 +21/16 +33/25 +4/3 +27/20 +15/11 +11/8 +25/18 +7/5 +140/99 +10/7 +36/25 +16/11 +22/15 +40/27 +3/2 +50/33 +32/21 +54/35 +14/9 +11/7 +35/22 +8/5 +160/99 +18/11 +33/20 +5/3 +42/25 +56/33 +12/7 +400/231 +7/4 +99/56 +16/9 +9/5 +20/11 +11/6 +50/27 +28/15 +66/35 +40/21 +48/25 +64/33 +55/28 +99/50 +2/1 diff --git a/scales/smithgw_red72_11pro.scl b/scales/smithgw_red72_11pro.scl new file mode 100644 index 0000000..2398e4f --- /dev/null +++ b/scales/smithgw_red72_11pro.scl @@ -0,0 +1,76 @@ +! smithgw_red72_11pro.scl +Prooijen 11-limit reduced scale +72 +! +81/80 +64/63 +33/32 +25/24 +21/20 +128/121 +16/15 +27/25 +12/11 +11/10 +10/9 +9/8 +25/22 +8/7 +297/256 +7/6 +33/28 +32/27 +6/5 +40/33 +11/9 +99/80 +5/4 +81/64 +14/11 +32/25 +128/99 +21/16 +160/121 +4/3 +27/20 +15/11 +11/8 +25/18 +7/5 +512/363 +10/7 +36/25 +16/11 +22/15 +40/27 +3/2 +121/80 +32/21 +99/64 +25/16 +11/7 +128/81 +8/5 +160/99 +18/11 +33/20 +5/3 +27/16 +56/33 +12/7 +512/297 +7/4 +44/25 +16/9 +9/5 +20/11 +11/6 +50/27 +15/8 +121/64 +40/21 +48/25 +64/33 +63/32 +160/81 +2/1 diff --git a/scales/smithgw_sc19.scl b/scales/smithgw_sc19.scl new file mode 100644 index 0000000..55530d7 --- /dev/null +++ b/scales/smithgw_sc19.scl @@ -0,0 +1,24 @@ +! smithgw_sc19.scl +! +Fokker block from commas <81/80, 78732/78125>, Gene Ward Smith 2002 +19 +! +250/243 +27/25 +10/9 +125/108 +6/5 +5/4 +162/125 +4/3 +25/18 +36/25 +3/2 +125/81 +8/5 +5/3 +216/125 +9/5 +50/27 +243/125 +2/1 diff --git a/scales/smithgw_sch13.scl b/scales/smithgw_sch13.scl new file mode 100644 index 0000000..fd7b9e4 --- /dev/null +++ b/scales/smithgw_sch13.scl @@ -0,0 +1,34 @@ +! smithgw_sch13.scl +! +13-limit schismic temperament, g=704.3917, TL 31-10-2002 + 29 +! + 52.70053 + 105.40105 + 130.74197 + 183.44250 + 208.78342 + 261.48395 + 314.18447 + 339.52539 + 392.22592 + 417.56684 + 470.26737 + 522.96789 + 548.30882 + 601.00934 + 626.35026 + 679.05079 + 704.39171 + 757.09224 + 809.79276 + 835.13368 + 887.83421 + 913.17513 + 965.87566 + 1018.57618 + 1043.91711 + 1096.61763 + 1121.95855 + 1174.65908 + 2/1 diff --git a/scales/smithgw_sch13a.scl b/scales/smithgw_sch13a.scl new file mode 100644 index 0000000..6bdb20a --- /dev/null +++ b/scales/smithgw_sch13a.scl @@ -0,0 +1,34 @@ +! smithgw_sch13a.scl +! +13-limit schismic temperament, g=702.660507, TL 31-10-2002 + 29 +! + 31.92608 + 63.85217 + 118.62355 + 150.54963 + 205.32101 + 237.24710 + 269.17318 + 323.94456 + 355.87064 + 410.64203 + 442.56811 + 474.49419 + 529.26558 + 561.19166 + 615.96304 + 647.88912 + 702.66051 + 734.58659 + 766.51267 + 821.28406 + 853.21014 + 907.98152 + 939.90760 + 971.83369 + 1026.60507 + 1058.53115 + 1113.30253 + 1145.22862 + 2/1 diff --git a/scales/smithgw_scj22a.scl b/scales/smithgw_scj22a.scl new file mode 100644 index 0000000..be07b80 --- /dev/null +++ b/scales/smithgw_scj22a.scl @@ -0,0 +1,27 @@ +! smithgw_scj22a.scl +<3125/3072 250/243> Fokker block +! 225/224 ^ 15625/15552 = [6,5,22,37,-18,-6] catakleismic +22 +! +25/24 +16/15 +10/9 +9/8 +144/125 +6/5 +5/4 +32/25 +4/3 +864/625 +25/18 +36/25 +3/2 +25/16 +8/5 +5/3 +125/72 +16/9 +9/5 +15/8 +48/25 +2/1 diff --git a/scales/smithgw_scj22b.scl b/scales/smithgw_scj22b.scl new file mode 100644 index 0000000..8ae21b5 --- /dev/null +++ b/scales/smithgw_scj22b.scl @@ -0,0 +1,27 @@ +! smithgw_scj22b.scl +<2048/2025 250/243> Fokker block +! 5120/5103 ^ 225/224 = [1,-8,-14,-10,25,-15] schismic candidate +22 +! +25/24 +16/15 +10/9 +9/8 +32/27 +6/5 +5/4 +32/25 +4/3 +27/20 +64/45 +40/27 +3/2 +25/16 +8/5 +5/3 +27/16 +16/9 +9/5 +15/8 +48/25 +2/1 diff --git a/scales/smithgw_scj22c.scl b/scales/smithgw_scj22c.scl new file mode 100644 index 0000000..2d80179 --- /dev/null +++ b/scales/smithgw_scj22c.scl @@ -0,0 +1,27 @@ +! smithgw_scj22c.scl +<2048/2025 3125/3072> Fokker block +! 225/224 ^ 65625/65536 = [7,-3,827,7,-21] orwell candidate +22 +! +25/24 +16/15 +10/9 +9/8 +75/64 +6/5 +5/4 +32/25 +4/3 +512/375 +45/32 +375/256 +3/2 +25/16 +8/5 +5/3 +128/75 +16/9 +9/5 +15/8 +48/25 +2/1 diff --git a/scales/smithgw_secab.scl b/scales/smithgw_secab.scl new file mode 100644 index 0000000..8756460 --- /dev/null +++ b/scales/smithgw_secab.scl @@ -0,0 +1,15 @@ +! smithgw_secab.scl +! [22, 29, 34, 51, 22, 34, 29, 22, 51, 34] +{126/125, 176/175} tempering of decab, 328-et version +10 +! +80.48780488 +186.5853659 +310.9756098 +497.5609756 +578.0487805 +702.4390244 +808.5365854 +889.0243902 +1075.609756 +2/1 diff --git a/scales/smithgw_secac.scl b/scales/smithgw_secac.scl new file mode 100644 index 0000000..98d7bd1 --- /dev/null +++ b/scales/smithgw_secac.scl @@ -0,0 +1,15 @@ +! smithgw_secac.scl +! [34, 29, 22, 51, 34, 22, 29, 34, 51, 22] +{126/125, 176/175} tempering of decac, 328-et version +10 +! +124.3902439 +230.4878049 +310.9756098 +497.5609756 +621.9512195 +702.4390244 +808.5365854 +932.9268293 +1119.512195 +2/1 diff --git a/scales/smithgw_secad.scl b/scales/smithgw_secad.scl new file mode 100644 index 0000000..2d1ac47 --- /dev/null +++ b/scales/smithgw_secad.scl @@ -0,0 +1,15 @@ +! smithgw_secad.scl +! [34, 51, 22, 29, 34, 22, 51, 34, 29, 22] +{126/125, 176/175} tempering of decad, 328-et version +10 +! +124.3902439 +310.9756098 +391.4634146 +497.5609756 +621.9512195 +702.4390244 +889.0243902 +1013.414634 +1119.512195 +2/1 diff --git a/scales/smithgw_smalldi11.scl b/scales/smithgw_smalldi11.scl new file mode 100644 index 0000000..d15e597 --- /dev/null +++ b/scales/smithgw_smalldi11.scl @@ -0,0 +1,17 @@ +! smithgw_smalldi11.scl +! +Small diesic 11-note block, <10/9, 126/125, 1728/1715> commas +! +11 +! +36/35 +7/6 +6/5 +216/175 +7/5 +10/7 +175/108 +5/3 +12/7 +35/18 +2/1 diff --git a/scales/smithgw_smalldi19a.scl b/scales/smithgw_smalldi19a.scl new file mode 100644 index 0000000..0ca5193 --- /dev/null +++ b/scales/smithgw_smalldi19a.scl @@ -0,0 +1,25 @@ +! smithgw_smalldi19a.scl +! +Small diesic 19-note block, <16/15, 126/125, 1728/1715> commas +! +19 +! +36/35 +25/24 +8/7 +7/6 +6/5 +175/144 +5/4 +48/35 +7/5 +10/7 +35/24 +8/5 +288/175 +5/3 +12/7 +7/4 +48/25 +35/18 +2/1 diff --git a/scales/smithgw_smalldi19b.scl b/scales/smithgw_smalldi19b.scl new file mode 100644 index 0000000..922a3d7 --- /dev/null +++ b/scales/smithgw_smalldi19b.scl @@ -0,0 +1,25 @@ +! smithgw_smalldi19b.scl +! +Small diesic 19-note block, <16/15, 126/125, 2401/2400> commas +! +19 +! +50/49 +21/20 +8/7 +7/6 +6/5 +49/40 +5/4 +48/35 +7/5 +10/7 +35/24 +8/5 +80/49 +5/3 +12/7 +7/4 +40/21 +49/25 +2/1 diff --git a/scales/smithgw_smalldi19c.scl b/scales/smithgw_smalldi19c.scl new file mode 100644 index 0000000..a685dd3 --- /dev/null +++ b/scales/smithgw_smalldi19c.scl @@ -0,0 +1,25 @@ +! smithgw_smalldi19c.scl +! +Small diesic 19-note scale containing glumma +! +19 +! +49/48 +21/20 +15/14 +35/32 +6/5 +49/40 +5/4 +9/7 +21/16 +10/7 +35/24 +3/2 +49/32 +5/3 +12/7 +7/4 +9/5 +35/18 +2/1 diff --git a/scales/smithgw_smalldiglum19.scl b/scales/smithgw_smalldiglum19.scl new file mode 100644 index 0000000..306bf8f --- /dev/null +++ b/scales/smithgw_smalldiglum19.scl @@ -0,0 +1,25 @@ +! smithgw_smalldiglum19.scl +! +Small diesic "glumma" variant of 19-note MOS, 31/120 version +! +19 +! +40.0 +80.0 +120.0 +160.0 +310.0 +350.0 +390.0 +430.0 +470.0 +620.0 +660.0 +700.0 +740.0 +890.0 +930.0 +970.0 +1010.0 +1160.0 +2/1 diff --git a/scales/smithgw_smalldimos11.scl b/scales/smithgw_smalldimos11.scl new file mode 100644 index 0000000..5fc0f9a --- /dev/null +++ b/scales/smithgw_smalldimos11.scl @@ -0,0 +1,17 @@ +! smithgw_smalldimos11.scl +! +Small diesic 11-note MOS, 31/120 version +! +11 +! +40.0 +270.0 +310.0 +350.0 +580.0 +620.0 +850.0 +890.0 +930.0 +1160.0 +2/1 diff --git a/scales/smithgw_smalldimos19.scl b/scales/smithgw_smalldimos19.scl new file mode 100644 index 0000000..693bbce --- /dev/null +++ b/scales/smithgw_smalldimos19.scl @@ -0,0 +1,25 @@ +! smithgw_smalldimos19.scl +! +Small diesic 19-note MOS, 31/120 version +! +19 +! +40.0 +80.0 +230.0 +270.0 +310.0 +350.0 +390.0 +540.0 +580.0 +620.0 +660.0 +810.0 +850.0 +890.0 +930.0 +970.0 +1120.0 +1160.0 +2/1 diff --git a/scales/smithgw_sqoo.scl b/scales/smithgw_sqoo.scl new file mode 100644 index 0000000..a8897e9 --- /dev/null +++ b/scales/smithgw_sqoo.scl @@ -0,0 +1,22 @@ +! smithgw_sqoo.scl +3x3 chord square, 2401/2400 projection of tetrad lattice (612-et tuning) +18 +! +35.294118 +84.313725 +119.607843 +266.666667 +350.980392 +386.274510 +470.588235 +582.352941 +617.647059 +701.960784 +737.254902 +849.019608 +884.313726 +933.333333 +968.627451 +1052.941176 +1088.235294 +2/1 diff --git a/scales/smithgw_star.scl b/scales/smithgw_star.scl new file mode 100644 index 0000000..9199b2a --- /dev/null +++ b/scales/smithgw_star.scl @@ -0,0 +1,13 @@ +! smithgw_star.scl +! +Gene Ward Smith "Star" scale, untempered version + 8 +! + 25/24 + 6/5 + 5/4 + 36/25 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/smithgw_star2.scl b/scales/smithgw_star2.scl new file mode 100644 index 0000000..db36bd7 --- /dev/null +++ b/scales/smithgw_star2.scl @@ -0,0 +1,13 @@ +! smithgw_star2.scl +! +Gene Ward Smith "Star" scale, alternative untempered version + 8 +! + 27/25 + 6/5 + 5/4 + 36/25 + 3/2 + 5/3 + 9/5 + 2/1 diff --git a/scales/smithgw_starra.scl b/scales/smithgw_starra.scl new file mode 100644 index 0000000..1ca350c --- /dev/null +++ b/scales/smithgw_starra.scl @@ -0,0 +1,17 @@ +! smithgw_starra.scl +! [22, 34, 29, 22, 22, 41, 22, 22, 29, 22, 34, 29] +12 note {126/125, 176/175} scale, 328-tET version (inverse of smithgw_starrb.scl) + 12 +! + 80.48780488 + 204.8780488 + 310.9756098 + 391.4634146 + 471.9512195 + 621.9512195 + 702.4390244 + 782.9268293 + 889.0243902 + 969.5121951 + 1093.902439 + 2/1 diff --git a/scales/smithgw_starrb.scl b/scales/smithgw_starrb.scl new file mode 100644 index 0000000..7ccd9a7 --- /dev/null +++ b/scales/smithgw_starrb.scl @@ -0,0 +1,17 @@ +! smithgw_starrb.scl +! [22, 22, 29, 34, 22, 29, 34, 22, 29, 22, 22, 41] +12 note {126/125, 176/175} scale, 328-tET version (inverse of smithgw_starra.scl) + 12 +! + 80.48780488 + 160.9756098 + 267.0731707 + 391.4634146 + 471.9512195 + 578.0487805 + 702.4390244 + 782.9268293 + 889.0243902 + 969.5121951 + 1050.000000 + 2/1 diff --git a/scales/smithgw_starrc.scl b/scales/smithgw_starrc.scl new file mode 100644 index 0000000..2f43fe3 --- /dev/null +++ b/scales/smithgw_starrc.scl @@ -0,0 +1,17 @@ +! smithgw_starrc.scl +! [22, 22, 41, 22, 22, 29, 34, 22, 29, 22, 34, 29] +12 note {126/125, 176/175} scale, 328-et version +12 +! +80.48780488 +160.9756098 +310.9756098 +391.4634146 +471.9512195 +578.0487805 +702.4390244 +782.9268293 +889.0243902 +969.5121951 +1093.902439 +2/1 diff --git a/scales/smithgw_suzz.scl b/scales/smithgw_suzz.scl new file mode 100644 index 0000000..7a75fe9 --- /dev/null +++ b/scales/smithgw_suzz.scl @@ -0,0 +1,16 @@ +! smithgw_suzz.scl +! [13, 24, 13, 24, 18, 24, 13, 24, 13, 24] +! +{385/384, 441/440} suzz in 190-et version +10 +! +82.10526316 +233.6842105 +315.7894737 +467.3684211 +581.0526316 +732.6315789 +814.7368421 +966.3157895 +1048.421053 +2/1 diff --git a/scales/smithgw_syndia2.scl b/scales/smithgw_syndia2.scl new file mode 100644 index 0000000..ebad7b2 --- /dev/null +++ b/scales/smithgw_syndia2.scl @@ -0,0 +1,16 @@ +! snithgw_syndia2.scl +Second 81/80 2048/2025 Fokker block +12 +! +16/15 +256/225 +6/5 +32/25 +4/3 +64/45 +3/2 +8/5 +128/75 +9/5 +256/135 +2/1 diff --git a/scales/smithgw_syndia3.scl b/scales/smithgw_syndia3.scl new file mode 100644 index 0000000..441270e --- /dev/null +++ b/scales/smithgw_syndia3.scl @@ -0,0 +1,16 @@ +! smithgw_syndia3.scl +Third 81/80 2048/2025 Fokker block +12 +! +135/128 +9/8 +1215/1024 +5/4 +675/512 +45/32 +3/2 +405/256 +27/16 +225/128 +15/8 +2/1 diff --git a/scales/smithgw_syndia4.scl b/scales/smithgw_syndia4.scl new file mode 100644 index 0000000..1ce5aef --- /dev/null +++ b/scales/smithgw_syndia4.scl @@ -0,0 +1,16 @@ +! smithgw_syndia4.scl +Fourth 81/80 2048/2025 Fokker block +12 +! +135/128 +9/8 +6/5 +5/4 +4/3 +45/32 +3/2 +8/5 +27/16 +16/9 +15/8 +2/1 diff --git a/scales/smithgw_syndia6.scl b/scales/smithgw_syndia6.scl new file mode 100644 index 0000000..1e795ef --- /dev/null +++ b/scales/smithgw_syndia6.scl @@ -0,0 +1,16 @@ +! smithgw_syndia6.scl +Sixth 81/80 2048/2025 Fokker block +12 +! +135/128 +9/8 +6/5 +5/4 +4/3 +45/32 +3/2 +405/256 +27/16 +16/9 +15/8 +2/1 diff --git a/scales/smithgw_tetra.scl b/scales/smithgw_tetra.scl new file mode 100644 index 0000000..b9d06b1 --- /dev/null +++ b/scales/smithgw_tetra.scl @@ -0,0 +1,18 @@ +! smithgw_tetra.scl +! [61, 83, 83, 47, 61, 83, 83, 83, 47, 61, 83, 83] +{225/224, 385/384} tempering of two-tetrachord 12-note scale +! 858-et version of 1-21/20-9/8-6/5-5/4-21/16-7/5-3/2-8/5-5/3-7/4-28/15 +12 +! +85.31468531 +201.3986014 +317.4825175 +383.2167832 +468.5314685 +584.6153846 +700.6993007 +816.7832168 +882.5174825 +967.8321678 +1083.916084 +2/1 diff --git a/scales/smithgw_tr31.scl b/scales/smithgw_tr31.scl new file mode 100644 index 0000000..f1c9857 --- /dev/null +++ b/scales/smithgw_tr31.scl @@ -0,0 +1,20 @@ +! smithgw_tr31.scl +! +6/31 generator supermajor seconds tripentatonic scale + 15 +! + 38.70968 + 193.54839 + 232.25806 + 270.96774 + 425.80645 + 464.51613 + 503.22581 + 696.77419 + 735.48387 + 774.19355 + 929.03226 + 967.74194 + 1006.45161 + 1161.29032 + 2/1 diff --git a/scales/smithgw_tr7_13.scl b/scales/smithgw_tr7_13.scl new file mode 100644 index 0000000..bfd9b84 --- /dev/null +++ b/scales/smithgw_tr7_13.scl @@ -0,0 +1,17 @@ +! smithgw_tr7_13.scl +! +81/80 ==> 28561/28672 + 12 +! +-610.538616 +484.215446 +-126.323169 +968.430892 +357.892277 +1452.646339 +842.107723 +231.569108 +1326.323169 +715.784554 +1810.538616 +2/1 diff --git a/scales/smithgw_tr7_13b.scl b/scales/smithgw_tr7_13b.scl new file mode 100644 index 0000000..983becd --- /dev/null +++ b/scales/smithgw_tr7_13b.scl @@ -0,0 +1,17 @@ +! smithgw_tr7_13b.scl +! +reverse reduced 81/80 ==> 28561/28672 + 12 +! +610.538616 +715.784554 +126.323169 +231.569108 +842.107723 +252.646339 +357.892277 +968.430892 +1073.676831 +484.215446 +589.461384 +2/1 diff --git a/scales/smithgw_tr7_13r.scl b/scales/smithgw_tr7_13r.scl new file mode 100644 index 0000000..0d77a7d --- /dev/null +++ b/scales/smithgw_tr7_13r.scl @@ -0,0 +1,17 @@ +! smithgw_tr7_13r.scl +! +reduced 81/80 ==> 28561/28672 + 12 +! +589.461384 +484.215446 +1073.676831 +968.430892 +357.892277 +252.646339 +842.107723 +231.569108 +126.323169 +715.784554 +610.538616 +2/1 diff --git a/scales/smithgw_tra.scl b/scales/smithgw_tra.scl new file mode 100644 index 0000000..9754db2 --- /dev/null +++ b/scales/smithgw_tra.scl @@ -0,0 +1,17 @@ +! smithgw_tra.scl +! +81/80 ==> 1029/512 + 12 +! +-1232.777790 +733.111116 +-499.666674 +1466.222232 +233.444442 +2199.333348 +966.555558 +-266.222232 +1699.666674 +466.888884 +2432.777790 +2/1 diff --git a/scales/smithgw_tre.scl b/scales/smithgw_tre.scl new file mode 100644 index 0000000..1b2ec6b --- /dev/null +++ b/scales/smithgw_tre.scl @@ -0,0 +1,17 @@ +! smithgw_tre.scl +! +81/80 ==> 1029/512 ==> reduction + 12 +! +-32.778000 +733.111000 +700.333000 +266.222000 +233.444000 +999.333000 +966.556000 +933.778000 +499.667000 +466.889000 +1232.778000 +2/1 diff --git a/scales/smithgw_treb.scl b/scales/smithgw_treb.scl new file mode 100644 index 0000000..f4cfd56 --- /dev/null +++ b/scales/smithgw_treb.scl @@ -0,0 +1,17 @@ +! smithgw_treb.scl +! +reversed 81/80 ==> 1029/512 ==> reduction + 12 +! +32.778000 +466.889000 +499.667000 +933.778000 +966.556000 +999.333000 +233.444000 +266.222000 +700.333000 +733.111000 +1167.22200 +2/1 diff --git a/scales/smithgw_trx.scl b/scales/smithgw_trx.scl new file mode 100644 index 0000000..64adedb --- /dev/null +++ b/scales/smithgw_trx.scl @@ -0,0 +1,17 @@ +! smithgw_trx.scl +! +reduced 3/2->7/6 5/4->11/6 scale + 12 +! +1086.963920 +525.214432 +412.178352 +1050.428864 +937.392784 +375.643295 +262.607216 +149.571136 +787.821648 +674.785568 +113.036080 +2/1 diff --git a/scales/smithgw_trxb.scl b/scales/smithgw_trxb.scl new file mode 100644 index 0000000..861ee8f --- /dev/null +++ b/scales/smithgw_trxb.scl @@ -0,0 +1,17 @@ +! smithgw_trxb.scl +! +reversed reduced 3/2->7/6 5/4->11/6 scale + 12 +! +113.036080 +674.785568 +787.821648 +149.571136 +262.607216 +375.643295 +937.392784 +1050.428864 +412.178352 +525.214432 +1086.963920 +2/1 diff --git a/scales/smithgw_wa.scl b/scales/smithgw_wa.scl new file mode 100644 index 0000000..dba5ea5 --- /dev/null +++ b/scales/smithgw_wa.scl @@ -0,0 +1,17 @@ +! smithgw_wa.scl +! +Wreckmeister A temperament, TL 2-6-2002 + 12 +! + 77.77778 + 233.33333 + 311.11111 + 388.88889 + 500.00000 + 622.22222 + 700.00000 + 811.11111 + 888.88889 + 1011.11111 + 1122.22222 + 2/1 diff --git a/scales/smithgw_wa120.scl b/scales/smithgw_wa120.scl new file mode 100644 index 0000000..2272ad9 --- /dev/null +++ b/scales/smithgw_wa120.scl @@ -0,0 +1,17 @@ +! smithgw_wa120.scl +! +120-tET version of Wreckmeister A temperament + 12 +! + 80.00000 + 230.00000 + 310.00000 + 390.00000 + 500.00000 + 620.00000 + 700.00000 + 810.00000 + 890.00000 + 1010.00000 + 1120.00000 + 2/1 diff --git a/scales/smithgw_wb.scl b/scales/smithgw_wb.scl new file mode 100644 index 0000000..cf08a24 --- /dev/null +++ b/scales/smithgw_wb.scl @@ -0,0 +1,17 @@ +! smithgw_wb.scl +! +Wreckmeister B temperament, TL 2-6-2002 + 12 +! + 122.22222 + 188.88889 + 311.11111 + 388.88889 + 500.00000 + 577.77778 + 700.00000 + 811.11111 + 888.88889 + 1011.11111 + 1077.77778 + 2/1 diff --git a/scales/smithgw_well1.scl b/scales/smithgw_well1.scl new file mode 100644 index 0000000..baa0c20 --- /dev/null +++ b/scales/smithgw_well1.scl @@ -0,0 +1,17 @@ +! smithgw_well1.scl +! +Well-temperament, Gene Ward Smith (2005) + 12 +! + 28800/27307 + 30574/27307 + 32400/27307 + 34185/27307 + 36450/27307 + 38400/27307 + 5841/3901 + 43200/27307 + 45715/27307 + 48600/27307 + 51200/27307 + 2/1 diff --git a/scales/smithgw_whelp1.scl b/scales/smithgw_whelp1.scl new file mode 100644 index 0000000..9cfe087 --- /dev/null +++ b/scales/smithgw_whelp1.scl @@ -0,0 +1,17 @@ +! smithgw_whelp1.scl +! +Well-temperament with one pure third, Gene Ward Smith (2003) + 12 +! + 135/128 + 193.15686 + 32/27 + 5/4 + 494.15525 + 593.01126 + 693.17766 + 793.15686 + 893.13606 + 993.30246 + 1092.15846 + 2/1 diff --git a/scales/smithgw_whelp2.scl b/scales/smithgw_whelp2.scl new file mode 100644 index 0000000..cc6a1f1 --- /dev/null +++ b/scales/smithgw_whelp2.scl @@ -0,0 +1,17 @@ +! smithgw_whelp2.scl +! +well-temperament with two pure thirds + 12 +! + 91.65659 + 192.72130 + 293.61178 + 5/4 + 493.76664 + 591.63723 + 699.09016 + 791.79210 + 892.68258 + 993.74728 + 1085.40388 + 2/1 diff --git a/scales/smithgw_whelp3.scl b/scales/smithgw_whelp3.scl new file mode 100644 index 0000000..d5df374 --- /dev/null +++ b/scales/smithgw_whelp3.scl @@ -0,0 +1,17 @@ +! smithgw_whelp3.scl +! +well-temperament with three pure thirds + 12 +! + 92.40143 + 193.15686 + 293.91228 + 5/4 + 501.15529 + 591.20167 + 698.84471 + 793.15686 + 887.46900 + 995.11204 + 1085.15843 + 2/1 diff --git a/scales/smithgw_wilcmarv11.scl b/scales/smithgw_wilcmarv11.scl new file mode 100644 index 0000000..0a9981e --- /dev/null +++ b/scales/smithgw_wilcmarv11.scl @@ -0,0 +1,16 @@ +! smithgw_wilcmarv11.scl +Wilson Class scale in 11-limit minimax Marvel +12 +! +85.393114 +151.994179 +316.998408 +383.599473 +468.992587 +584.795233 +700.597880 +767.198946 +901.793641 +968.394706 +1084.197353 +2/1 diff --git a/scales/smithgw_wilcmarv7.scl b/scales/smithgw_wilcmarv7.scl new file mode 100644 index 0000000..07164da --- /dev/null +++ b/scales/smithgw_wilcmarv7.scl @@ -0,0 +1,17 @@ +! smithgw_wilcmarv7.scl +! +Wilson Class scale in 1/4-kleisma Marvel + 12 +! + 21/20 + 153.21174 + 6/5 + 384.38583 + 468.85303 + 584.44007 + 700.02712 + 768.77167 + 900.08136 + 7/4 + 1084.41295 + 2/1 diff --git a/scales/smithgw_wiz28.scl b/scales/smithgw_wiz28.scl new file mode 100644 index 0000000..b6f0994 --- /dev/null +++ b/scales/smithgw_wiz28.scl @@ -0,0 +1,33 @@ +! smithgw_wiz28.scl +! +11-limit Wizard[28] + 28 +! + 33/32 + 35/33 + 15/14 + 11/10 + 25/22 + 7/6 + 33/28 + 40/33 + 5/4 + 9/7 + 33/25 + 4/3 + 11/8 + 99/70 + 16/11 + 3/2 + 50/33 + 14/9 + 8/5 + 33/20 + 5/3 + 12/7 + 44/25 + 20/11 + 15/8 + 66/35 + 35/18 + 2/1 diff --git a/scales/smithgw_wiz34.scl b/scales/smithgw_wiz34.scl new file mode 100644 index 0000000..b36b8ea --- /dev/null +++ b/scales/smithgw_wiz34.scl @@ -0,0 +1,39 @@ +! smithgw_wiz34.scl +! +11-limit Wizard[34] + 34 +! + 33/32 + 25/24 + 35/33 + 15/14 + 11/10 + 25/22 + 7/6 + 33/28 + 6/5 + 40/33 + 5/4 + 9/7 + 33/25 + 4/3 + 15/11 + 11/8 + 99/70 + 16/11 + 22/15 + 3/2 + 50/33 + 14/9 + 8/5 + 33/20 + 5/3 + 56/33 + 12/7 + 44/25 + 20/11 + 15/8 + 66/35 + 27/14 + 35/18 + 2/1 diff --git a/scales/smithgw_wiz38.scl b/scales/smithgw_wiz38.scl new file mode 100644 index 0000000..efe624f --- /dev/null +++ b/scales/smithgw_wiz38.scl @@ -0,0 +1,43 @@ +! smithgw_wiz38.scl +! +11-limit Wizard[38] + 38 +! + 33/32 + 25/24 + 35/33 + 15/14 + 12/11 + 11/10 + 25/22 + 7/6 + 33/28 + 6/5 + 40/33 + 5/4 + 9/7 + 35/27 + 33/25 + 4/3 + 15/11 + 11/8 + 99/70 + 16/11 + 22/15 + 3/2 + 50/33 + 54/35 + 14/9 + 8/5 + 33/20 + 5/3 + 56/33 + 12/7 + 44/25 + 20/11 + 11/6 + 15/8 + 66/35 + 27/14 + 35/18 + 2/1 diff --git a/scales/smithgw_wreckpop.scl b/scales/smithgw_wreckpop.scl new file mode 100644 index 0000000..c2fcd23 --- /dev/null +++ b/scales/smithgw_wreckpop.scl @@ -0,0 +1,17 @@ +! smithgw_wreckpop.scl +! +"Wreckmeister" 13-limit meanpop (50-et) tempered thirds + 12 +! + 72.00000 + 192.00000 + 312.00000 + 384.00000 + 504.00000 + 576.00000 + 696.00000 + 816.00000 + 888.00000 + 960.00000 + 1128.00000 + 2/1 diff --git a/scales/smithgw_yarman12.scl b/scales/smithgw_yarman12.scl new file mode 100644 index 0000000..530060a --- /dev/null +++ b/scales/smithgw_yarman12.scl @@ -0,0 +1,17 @@ +! smithgw_yarman12.scl +! +Gene Ward Smith's Circulating 12-tone Temperament in 159-tET inspired by Ozan Yarman + 12 +! + 98.11321 + 196.22642 + 316.98113 + 384.90566 + 505.66038 + 588.67925 + 694.33962 + 807.54717 + 890.56604 + 1011.32075 + 1079.24528 + 2/1 diff --git a/scales/smithj12.scl b/scales/smithj12.scl new file mode 100644 index 0000000..5438848 --- /dev/null +++ b/scales/smithj12.scl @@ -0,0 +1,17 @@ +! smithj12.scl +! +Jon Lyle Smith, 5-limit JI scale, MMM 21-3-2006 + 12 +! + 25/24 + 9/8 + 75/64 + 81/64 + 675/512 + 25/18 + 3/2 + 25/16 + 27/16 + 225/128 + 243/128 + 2/1 diff --git a/scales/smithj12pt.scl b/scales/smithj12pt.scl new file mode 100644 index 0000000..73414ff --- /dev/null +++ b/scales/smithj12pt.scl @@ -0,0 +1,17 @@ +! smithj12pt.scl +! +Jon Lyle Smith, extended septimal Ptolemy, MMM 7-2-2011 + 12 +! + 21/20 + 9/8 + 7/6 + 9/7 + 4/3 + 10/7 + 3/2 + 63/40 + 27/16 + 7/4 + 27/14 + 2/1 diff --git a/scales/smithj17.scl b/scales/smithj17.scl new file mode 100644 index 0000000..decab9c --- /dev/null +++ b/scales/smithj17.scl @@ -0,0 +1,22 @@ +! smithj17.scl +! +Jon Lyle Smith 17-tone well temperament, MMM 12-2006 + 17 +! + 71.00000 + 137.00000 + 208.00000 + 288.00000 + 345.00000 + 416.00000 + 496.00000 + 567.00000 + 633.00000 + 704.00000 + 784.00000 + 841.00000 + 912.00000 + 992.00000 + 1049.00000 + 1120.00000 + 2/1 diff --git a/scales/smithj24.scl b/scales/smithj24.scl new file mode 100644 index 0000000..8c1d1d8 --- /dev/null +++ b/scales/smithj24.scl @@ -0,0 +1,29 @@ +! smithj24.scl +! +Jon Lyle Smith 5-limit JI scale, TL 8-4-2006 + 24 +! + 81/80 + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 45/32 + 64/45 + 40/27 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/smithrk_19.scl b/scales/smithrk_19.scl new file mode 100644 index 0000000..a187b36 --- /dev/null +++ b/scales/smithrk_19.scl @@ -0,0 +1,24 @@ +! smithrk_19.scl +! +19 out of 612-tET by Roger K. Smith (1978) + 19 +! + 84.31373 + 154.90196 + 203.92157 + 266.66667 + 315.68627 + 386.27451 + 470.58824 + 498.03922 + 582.35294 + 652.94118 + 701.96078 + 764.70588 + 813.72549 + 884.31373 + 968.62745 + 1017.64706 + 1080.39216 + 1150.98039 + 2/1 diff --git a/scales/smithrk_mult.scl b/scales/smithrk_mult.scl new file mode 100644 index 0000000..2c3b3fc --- /dev/null +++ b/scales/smithrk_mult.scl @@ -0,0 +1,24 @@ +! smithrk_mult.scl +! +Roger K. Smith, "Multitonic" scale, just version + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 7/4 + 9/5 + 28/15 + 35/18 + 2/1 diff --git a/scales/snyder.scl b/scales/snyder.scl new file mode 100644 index 0000000..1b4d119 --- /dev/null +++ b/scales/snyder.scl @@ -0,0 +1,173 @@ +! snyder.scl +! +Jeff Snyder, 19-limit normal scale for adaptable JI (2010) + 168 +! + 256/255 + 96/95 + 81/80 + 65/64 + 64/63 + 45/44 + 40/39 + 33/32 + 25/24 + 21/20 + 20/19 + 256/243 + 135/128 + 19/18 + 18/17 + 17/16 + 16/15 + 15/14 + 13/12 + 12/11 + 35/32 + 128/117 + 11/10 + 10/9 + 285/256 + 64/57 + 9/8 + 96/85 + 17/15 + 256/225 + 585/512 + 8/7 + 55/48 + 15/13 + 64/55 + 7/6 + 75/64 + 20/17 + 45/38 + 32/27 + 1215/1024 + 19/16 + 153/128 + 6/5 + 40/33 + 39/32 + 128/105 + 11/9 + 315/256 + 16/13 + 5/4 + 64/51 + 24/19 + 512/405 + 81/64 + 19/15 + 80/63 + 51/40 + 32/25 + 9/7 + 165/128 + 128/99 + 13/10 + 21/16 + 256/195 + 675/512 + 45/34 + 85/64 + 4/3 + 171/128 + 128/95 + 27/20 + 65/48 + 256/189 + 15/11 + 48/35 + 11/8 + 18/13 + 25/18 + 7/5 + 80/57 + 45/32 + 24/17 + 17/12 + 64/45 + 57/40 + 10/7 + 36/25 + 13/9 + 16/11 + 35/24 + 22/15 + 189/128 + 96/65 + 40/27 + 95/64 + 765/512 + 256/171 + 3/2 + 128/85 + 195/128 + 32/21 + 20/13 + 99/64 + 256/165 + 14/9 + 25/16 + 80/51 + 63/40 + 30/19 + 128/81 + 405/256 + 19/12 + 51/32 + 8/5 + 45/28 + 13/8 + 512/315 + 18/11 + 105/64 + 64/39 + 33/20 + 5/3 + 855/512 + 256/153 + 32/19 + 27/16 + 17/10 + 128/75 + 12/7 + 55/32 + 45/26 + 26/15 + 96/55 + 7/4 + 225/128 + 30/17 + 85/48 + 16/9 + 57/32 + 512/285 + 9/5 + 20/11 + 117/64 + 64/35 + 11/6 + 945/512 + 24/13 + 28/15 + 15/8 + 32/17 + 17/9 + 36/19 + 256/135 + 243/128 + 19/10 + 40/21 + 48/25 + 495/256 + 64/33 + 39/20 + 63/32 + 128/65 + 160/81 + 2025/1024 + 95/48 + 255/128 + 2/1 diff --git a/scales/solar.scl b/scales/solar.scl new file mode 100644 index 0000000..19b52e8 --- /dev/null +++ b/scales/solar.scl @@ -0,0 +1,13 @@ +! solar.scl +! +Solar system scale: 0=Pluto, 8=Mercury. 1/1=248.54 years period + 8 +! + 711.42000 + 1877.80000 + 3692.10000 + 5266.90000 + 8455.20000 + 9548.80000 + 10390.00000 + 12013.00000 diff --git a/scales/sonbirkezsorted.scl b/scales/sonbirkezsorted.scl new file mode 100644 index 0000000..30badaf --- /dev/null +++ b/scales/sonbirkezsorted.scl @@ -0,0 +1,17 @@ +! sonbirkezsorted.scl +! +Sonbirkez Huzzam scale +12 +! +121/108 +847/720 +57/46 +4/3 +3/2 +8/5 +81/50 +64/39 +121/72 +847/480 +171/92 +2/1 diff --git a/scales/sorge.scl b/scales/sorge.scl new file mode 100644 index 0000000..0c59a30 --- /dev/null +++ b/scales/sorge.scl @@ -0,0 +1,17 @@ +! sorge.scl +! +Sorge's Monochord (1756). Fokker block 81/80 128/125 + 12 +! + 25/24 + 9/8 + 75/64 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/sorge1.scl b/scales/sorge1.scl new file mode 100644 index 0000000..42c8331 --- /dev/null +++ b/scales/sorge1.scl @@ -0,0 +1,17 @@ +! sorge1.scl +! +Georg Andreas Sorge temperament I (1744) + 12 +! + 256/243 + 192.18000 + 32/27 + 8192/6561 + 4/3 + 1024/729 + 696.09000 + 128/81 + 888.26999 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/sorge2.scl b/scales/sorge2.scl new file mode 100644 index 0000000..9086e99 --- /dev/null +++ b/scales/sorge2.scl @@ -0,0 +1,17 @@ +! sorge2.scl +! +Georg Andreas Sorge temperament II (1744) + 12 +! + 98.04500 + 196.09000 + 301.95500 + 396.09000 + 501.95500 + 598.04500 + 698.04500 + 800.00000 + 896.09000 + 1001.95500 + 1098.04500 + 2/1 diff --git a/scales/sorge3.scl b/scales/sorge3.scl new file mode 100644 index 0000000..217c384 --- /dev/null +++ b/scales/sorge3.scl @@ -0,0 +1,17 @@ +! sorge3.scl +! +Georg Andreas Sorge temperament III (1744) + 12 +! + 94.13500 + 196.09000 + 298.04500 + 396.09000 + 4/3 + 594.13500 + 698.04500 + 796.09000 + 894.13500 + 998.04500 + 1094.13500 + 2/1 diff --git a/scales/sorge4.scl b/scales/sorge4.scl new file mode 100644 index 0000000..805d386 --- /dev/null +++ b/scales/sorge4.scl @@ -0,0 +1,17 @@ +! sorge4.scl +! +Georg Andreas Sorge, well temperament, (1756, 1758) + 12 +! + 96.09000 + 196.09000 + 298.04500 + 394.13500 + 4/3 + 596.09000 + 698.04500 + 798.04500 + 894.13500 + 998.04500 + 1096.09000 + 2/1 diff --git a/scales/sorog9.scl b/scales/sorog9.scl new file mode 100644 index 0000000..b8a71e5 --- /dev/null +++ b/scales/sorog9.scl @@ -0,0 +1,10 @@ +! sorog9.scl +! +9-tET Sorog + 5 +! + 400.00000 + 533.33333 + 933.33333 + 1066.66667 + 2/1 diff --git a/scales/spanyi.scl b/scales/spanyi.scl new file mode 100644 index 0000000..7128118 --- /dev/null +++ b/scales/spanyi.scl @@ -0,0 +1,17 @@ +! spanyi.scl +! +Mikls Spnyi Bach temperament (2007) + 12 +! + 91.85426 + 9/8 + 295.11256 + 389.54105 + 498.37085 + 593.45106 + 3/2 + 793.48341 + 896.72553 + 996.74170 + 1091.49605 + 2/1 diff --git a/scales/sparschuh-2009well885Hz.scl b/scales/sparschuh-2009well885Hz.scl new file mode 100644 index 0000000..6a698e4 --- /dev/null +++ b/scales/sparschuh-2009well885Hz.scl @@ -0,0 +1,17 @@ +! sparschuh-2009well885Hz.scl +! +Andreas Sparschuh, modern pianos with an fusing 3rd: C-E ~+0.654...c "sharp" above 5/4 + 12 +! + 558/529 + 592/529 + 2511/2116 + 1323/1058 + 706/529 + 744/529 + 792/529 + 837/529 + 885/529 + 1883/1058 + 992/529 + 2/1 diff --git a/scales/sparschuh-442widefrench5th-a.scl b/scales/sparschuh-442widefrench5th-a.scl new file mode 100644 index 0000000..a36de9b --- /dev/null +++ b/scales/sparschuh-442widefrench5th-a.scl @@ -0,0 +1,17 @@ +! sparschuh-442widefrench5th-a.scl +! +Margo Schulter's proposed revision with A at 885/529 + 12 +! + 558/529 + 592/529 + 628/529 + 662/529 + 706/529 + 744/529 + 792/529 + 837/529 + 885/529 + 942/529 + 992/529 + 2/1 diff --git a/scales/sparschuh-442widefrench5th.scl b/scales/sparschuh-442widefrench5th.scl new file mode 100644 index 0000000..2fb7e9a --- /dev/null +++ b/scales/sparschuh-442widefrench5th.scl @@ -0,0 +1,21 @@ +! sparschuh-442widefrench5th.scl +! +! relative deviations in the circle of 5ths, beginning from: +! 442Hz=A 662:663 E 992:993 B F# C# G# inbetween the "french" 5th G#-Eb 2512:2511 =~0.7Cents widend sharper +! Eb Bb 1412:1413 F 1058:1059 C 528:529 G 296:297 D 221:222 A=442Hz +! and with all other 5ths JI-pure or narrow flattend. +Rational temperament, 1/1=264.5 Hz, Andreas Sparschuh (2008) + 12 +! +558/529 +592/529 ! d +628/529 ! eb +662/529 ! e (5:4)*(2652:2645) ~4.6 Cents sharper above 5/4 JI 3rd +706/529 ! f (4:3)*(1059:1058) ~1.6 Cents sharper above 4/3 JI 4th +744/529 +792/529 ! g (3:2)*(528:529) ~3.3Cents flattend up than 3/2 JI 5th +838/529 +884/529 ! a +942/529 ! bb +992/529 ! b +2/1 diff --git a/scales/sparschuh-885organ.scl b/scales/sparschuh-885organ.scl new file mode 100644 index 0000000..97c4520 --- /dev/null +++ b/scales/sparschuh-885organ.scl @@ -0,0 +1,17 @@ +! sparschuh-885organ.scl +! +Andreas Sparschuh, for neobaroque pipe-organs with fusing 3rds C-E, G-B & F-A (2009) + 12 +! + 557/529 + 592/529 + 628/529 + 1323/1058 + 1415/1058 + 1485/1058 + 792/529 + 836/529 + 885/529 + 41/23 + 1981/1058 + 2/1 diff --git a/scales/sparschuh-eleven_eyes.scl b/scales/sparschuh-eleven_eyes.scl new file mode 100644 index 0000000..2facc24 --- /dev/null +++ b/scales/sparschuh-eleven_eyes.scl @@ -0,0 +1,18 @@ +! sparschuh-eleven_eyes.scl +! +12 out of 53 starting from a'=440Hz + 12 +! +! 1/1 ! C *264*Hz = 33Hz*8 unison "middle-C" +139/132 ! Db *278* C#\ + 9/8 ! D *297* +625/528 ! Eb *312.5* = 5^4/2 + 5/4 ! E\ *330* or Fb + 4/3 ! F *352* = 11 * 32 '11th partial to C\\ +371/264 ! Gb *371* F#\ + 3/2 ! G *396* + 52/33 ! Ab *416* 208 104 52 26 13th partial to C\\ + 5/3 ! A\ *440*Hz standard normal-tone +469/264 ! Bb *469* + 15/8 ! B\ *495* + 2/1 ! C' *528* octave diff --git a/scales/sparschuh-epimoric7.scl b/scales/sparschuh-epimoric7.scl new file mode 100644 index 0000000..8ca10d3 --- /dev/null +++ b/scales/sparschuh-epimoric7.scl @@ -0,0 +1,17 @@ +! sparschuh-epimoric7.scl +! +Sparschuh's epimoric two- and one-7th part of syntonic comma (2010) + 12 +! + 59/56 + 47/42 + 32/27 + 561/448 + 4/3 + 59/42 + 283/189 + 128/81 + 281/168 + 16/9 + 15/8 + 2/1 diff --git a/scales/sparschuh-eqbeat-fac_ceg.scl b/scales/sparschuh-eqbeat-fac_ceg.scl new file mode 100644 index 0000000..7417bde --- /dev/null +++ b/scales/sparschuh-eqbeat-fac_ceg.scl @@ -0,0 +1,16 @@ +! sparschuh-eqbeat-fac_ceg.scl +Sparschuh's 'Equal-Beating' major triads F~A~C & C~E~G well-temperament (2014) +12 +! Middle C4 = 262.80 Hz or one-lined c' +27750/26280 ! C# +29440/26280 ! D +31218/26280 ! Eb +32900/26280 ! E = (5/4)[658/657 +~2.633...cents] +35120/26280 ! F = (4/3)(439/438 +~3.948...cents) +37000/26280 ! F# +39360/26280 ! G = (3/2)(656/657 -~2.637...cents) +41624/26280 ! G# +44000/26280 ! A = F*(5/4)[440/439 +~3.939...cents] @ a'= 440.00Hz +46827/26280 ! Bb +49340/26280 ! B +2/1 ! C' = F*(3/2)*(438/439 -~3.948...cents) diff --git a/scales/sparschuh-equalbeating.scl b/scales/sparschuh-equalbeating.scl new file mode 100644 index 0000000..50595ed --- /dev/null +++ b/scales/sparschuh-equalbeating.scl @@ -0,0 +1,17 @@ +! sparschuh-equalbeating.scl +! +Sparschuh's Equal-Beating, A4=440Hz, TL 14-5-2010 + 12 +! + 173/164 + 46/41 + 389/328 + 411/328 + 219/164 + 231/164 + 3/2 + 519/328 + 275/164 + 73/41 + 77/41 + 2/1 diff --git a/scales/sparschuh-gothic440.scl b/scales/sparschuh-gothic440.scl new file mode 100644 index 0000000..b359661 --- /dev/null +++ b/scales/sparschuh-gothic440.scl @@ -0,0 +1,17 @@ +! sparschuh-gothic440.scl +! +Andreas Sparschuh, Gothic style, A=440 + 12 +! +555/526 ! C# 277.5 Hz +285/263 ! D +312/263 ! Eb +329/263 ! E +351/263 ! F +370/263 ! F# +394/263 ! G +416/263 ! G# +440/263 ! A reference-pitch 440Hz +468/263 ! Bb +987/526 ! B 493.5 Hz +2/1 diff --git a/scales/sparschuh-jsbloops440.scl b/scales/sparschuh-jsbloops440.scl new file mode 100644 index 0000000..4ac43f0 --- /dev/null +++ b/scales/sparschuh-jsbloops440.scl @@ -0,0 +1,20 @@ +! sparschuh-jsbloops440.scl +! +Sparschuh's 2007 interpretation of J.S. Bach's WTC loops @ 440 cps +! +12 +! +! 1055 = (263.75 middle C) *4 +! +1112/1055 ! c# +1180/1055 ! D +1251/1055 ! Eb +1319/1055 ! e +1407/1055 ! F +1483/1055 ! f# +1582/1055 ! G +1668/1055 ! g# +1760/1055 ! a with 1760 := 440 * 4 +3753/2110 ! Bb +1978/1055 ! h +2/1 \ No newline at end of file diff --git a/scales/sparschuh-neovictorian.scl b/scales/sparschuh-neovictorian.scl new file mode 100644 index 0000000..6271b67 --- /dev/null +++ b/scales/sparschuh-neovictorian.scl @@ -0,0 +1,17 @@ +! sparschuh-neovictorian.scl +! +Andreas Sparschuh, epimoric neo-Victorian well-temperament + 12 +! + 19/18 + 545/486 + 32/27 + 305/243 + 4/3 + 38/27 + 485/324 + 19/12 + 136/81 + 16/9 + 152/81 + 2/1 diff --git a/scales/sparschuh-neovictorian2.scl b/scales/sparschuh-neovictorian2.scl new file mode 100644 index 0000000..4cfe013 --- /dev/null +++ b/scales/sparschuh-neovictorian2.scl @@ -0,0 +1,17 @@ +! sparschuh-neovictorian2.scl +! +Andreas Sparschuh, neo-Victorian temperament, C4 = 262 Hz or A = 440 + 12 +! + 138/131 + 147/131 + 156/131 + 329/262 + 175/131 + 184/131 + 3/2 + 415/262 + 220/131 + 234/131 + 246/131 + 2/1 diff --git a/scales/sparschuh-oldpiano.scl b/scales/sparschuh-oldpiano.scl new file mode 100644 index 0000000..48ef2f5 --- /dev/null +++ b/scales/sparschuh-oldpiano.scl @@ -0,0 +1,17 @@ +! sparschuh-oldpiano.scl +! +Sparschuh's-Old-Piano in absolute Hertzians and cents approximation +12 +! Deep_C2 = 65.7 Hz( = 0 Cents ) within the 'great-octave' pitches +693/657 ! 69.3 # ( ~ 092.354378...) +738/657 ! 73.6 D ( ~ 201.272935...) +779/657 ! 77.9 # ( ~ 294.875949...) ; (32/27)(3117/3116 ~+0.55Cents) +822/657 ! 82.2 E ( ~ 387.894028...) ; (5/4)*(1096/1095 = ~+1.6Cents) +876/657 ! 87.6 F ( ~ 498.044999...) ; (4/3) exact JI 4th +924/657 ! 92.4 # ( ~ 590.399377...) +984/657 ! 98.4 G ( ~ 699.317934...) ; (3/2)*(656/657 = ~-2.6Cents) +1039/657 ! 103.9 # ( ~ 793.476454...) +1100/657 ! 110.0 A ( ~ 892.245898...) ; (5/3)*(220/219 = ~+7.9Cents) +1168/657 ! 116.8 # ( ~ 996.089998...) ; (16/9) exact JI dim_7th +1232/657 ! 123.2 B ( ~ 1088.44438...) +2/1 ! Low_C3=131.4 c ( = 1200 octave ) diff --git a/scales/sparschuh-pc-div.scl b/scales/sparschuh-pc-div.scl new file mode 100644 index 0000000..95d831c --- /dev/null +++ b/scales/sparschuh-pc-div.scl @@ -0,0 +1,13 @@ +! sparschuh-pc-div.scl +! +Andreas Sparschuh, division of Pyth. comma in 8 superparticular steps (1999) + 8 +! + 315/314 + 189/188 + 2835/2816 + 45927/45568 + 688905/683008 + 413343/409600 + 6200145/6127616 + 531441/524288 diff --git a/scales/sparschuh-pc.scl b/scales/sparschuh-pc.scl new file mode 100644 index 0000000..ae4343e --- /dev/null +++ b/scales/sparschuh-pc.scl @@ -0,0 +1,17 @@ +! sparschuh-pc.scl +! +Andreas Sparschuh, division of Pyth. comma, Werckmeister variant + 12 +! + 95.11250 + 197.06750 + 297.06750 + 389.24750 + 499.02250 + 593.15750 + 700.97750 + 796.09000 + 893.15750 + 998.04500 + 1091.20250 + 2/1 diff --git a/scales/sparschuh-sc.scl b/scales/sparschuh-sc.scl new file mode 100644 index 0000000..cb23a40 --- /dev/null +++ b/scales/sparschuh-sc.scl @@ -0,0 +1,17 @@ +! sparschuh-sc.scl +! +Syntonic comma variant of sparschuh-pc.scl. TL 08-02-2009 + 12 +! + 94.70549 + 195.68363 + 296.82330 + 388.84049 + 498.94111 + 592.75049 + 699.10520 + 795.76440 + 892.26206 + 997.88221 + 1090.79549 + 2/1 diff --git a/scales/sparschuh-squiggle_clavichord.scl b/scales/sparschuh-squiggle_clavichord.scl new file mode 100644 index 0000000..b415cdd --- /dev/null +++ b/scales/sparschuh-squiggle_clavichord.scl @@ -0,0 +1,17 @@ +! sparschuh-squiggle_clavichord.scl +! +Bach temperament, a'=400 Hz + 12 +! + 504/479 + 536/479 + 567/479 + 599/479 + 639/479 + 672/479 + 718/479 + 756/479 + 800/479 + 851/479 + 898/479 + 2/1 diff --git a/scales/sparschuh-squiggle_harpsichord.scl b/scales/sparschuh-squiggle_harpsichord.scl new file mode 100644 index 0000000..aa7b0b8 --- /dev/null +++ b/scales/sparschuh-squiggle_harpsichord.scl @@ -0,0 +1,17 @@ +! sparschuh-squiggle_harpsichord.scl +! +Andreas Sparschuh, Bach temperament + 12 +! + 504/479 + 536/479 + 568/479 ! Eb instead once D# 567 due to change in enharmonic dim-6th + 599/479 + 1279/958 ! F 639.5 = 1297/2 + 672/479 + 718/479 + 756/479 + 800/479 + 854/479 ! b that's barely 851 in the clavichord version + 898/479 + 2/1 diff --git a/scales/sparschuh-stanhope.scl b/scales/sparschuh-stanhope.scl new file mode 100644 index 0000000..e3543cd --- /dev/null +++ b/scales/sparschuh-stanhope.scl @@ -0,0 +1,16 @@ +! sparschuh-stanhope.scl +Sparschuh's (2010) septenarian variant of Stanhopes (1806) idea +12 +! +1394/1323 ! C# (256/243) * (6273/6272 ~+0.276...Cents sharper ) +494/441 ! D (10/9) * (247/245 ~+14.075...Cents sharper ) +32/27 ! Eb 2^5/3^3 Pythagorean minor-3rd +5/4 ! E +4/3 ! F +620/441 ! F# (45/32) * (3968/3969 ~-0.436...Cents flattend ) +3/2 ! G +697/441 ! G# (128/81) * (6273/6272 ~+0.276...Cents sharper ) +82/49 ! A (5/3) * (246/245 ~+7.052...Cents sharper ) +16/9 ! Bb +15/8 ! B +2/1 diff --git a/scales/sparschuh-wohltemperiert.scl b/scales/sparschuh-wohltemperiert.scl new file mode 100644 index 0000000..79f6c00 --- /dev/null +++ b/scales/sparschuh-wohltemperiert.scl @@ -0,0 +1,18 @@ +! sparschuh-wohltemperiert.scl +! For J.S. Bach's DWK invented by Andreas Sparschuh in 2008 +! +C-major beats C:E:G = 4: 5*(1316/1315): 6*(1314/1315) synchronously, Andreas Sparschuh (2008) +12 +! +555/526 ! C# 277.5/263 +589/526 ! D 294.5/263 +312/263 ! Eb +329/263 ! E (5/4)*(1316/1315) ~1.316...Cents sharper than JI 5:4 +351/263 ! F +370/263 ! F# +1971/1315 ! G 394.2/263 (3/2)*(1314/1315) ~-1.317...C lower than 3:2 +416/263 ! G# +440/263 ! A +468/263 ! Bb +987/526 ! B 493.5/263 +2/1 diff --git a/scales/sparschuh_19limwell.scl b/scales/sparschuh_19limwell.scl new file mode 100644 index 0000000..ff47034 --- /dev/null +++ b/scales/sparschuh_19limwell.scl @@ -0,0 +1,17 @@ +! sparschuh_19limwell.scl +! +Sparschuh's 19-limit well-temperament with epimoric 5ths & 3rds (2010) + 12 +! +256/243 ! C# |8,-5> +272/243 ! D |4,-5,0,0,0,0,1> +32/27 ! Eb |4,-3> +304/243 ! E |4,-5,0,0,0,0,0,1> +4/3 ! F |2,-1> +38/27 ! F# |1,-3,0,0,0,0,0,1> +364/243 ! G |2,-5,0,1,0,1> +128/81 ! G# |7,-4> +256/153 ! A |8,-2,0,0,0,0,-1> +16/9 ! Bb |4,-2> +152/81 ! B +2/1 ! C' |1> diff --git a/scales/sparschuh_41_23_bi_epi.scl b/scales/sparschuh_41_23_bi_epi.scl new file mode 100644 index 0000000..e85f753 --- /dev/null +++ b/scales/sparschuh_41_23_bi_epi.scl @@ -0,0 +1,17 @@ +! sparschuh_41_23_bi_epi.scl +! +Sparschuh's 41- and 23-limit bi-epimoric well-temperament (2010) + 12 +! + 96/91 + 102/91 + 108/91 + 144/115 + 3280/2457 + 128/91 + 2592/1729 + 144/91 + 152/91 + 162/91 + 15552/8281 + 2/1 diff --git a/scales/sparschuh_53in13lim.scl b/scales/sparschuh_53in13lim.scl new file mode 100644 index 0000000..8d4624e --- /dev/null +++ b/scales/sparschuh_53in13lim.scl @@ -0,0 +1,59 @@ +! sparschuh_53in13lim.scl +! +Sparschuh's overtone-series 1:3:5:7:9:11:13:15 interpolation (2012) +53 +! +78/77 ! A +1 D/ +33/32 ! B +2 D+ +28/27 ! C +3 EB +59/56 ! D +4 Eb 19.666.../18.666... +16/15 ! E +5 D# +13/12 ! F +6 D& +12/11 ! G +7 E- +10/9 ! H +8 E\ +9/8 ! I +9 E. +8/7 ! J +10 E/ +15/13 ! K +11 E+ 7.5/6.5 F- +7/6 ! L +12 F\ +32/27 ! M +13 F. 6.4/5.4 +6/5 ! N +14 F/ +39/32 ! O +15 F+ +16/13 ! P +16 GB +5/4 ! Q +17 Gb 1.25 tierce or major-3rd or 5th-partial +81/64 ! R +18 F# 1.265625 ditone (9/8)^2 +9/7 ! S +19 F& 4.5/3.5 +35/27 ! T +20 G- 4.375/3.375 +21/16 ! U +21 G\ 4.2/3.2 +4/3 ! V +22 G. quarte +27/20 ! W +23 G/ +11/8 ! X +24 G+ 3.666.../2.666... +18/13 ! Y +25 AB 3.6/2.6 +45/32 ! Z +26 Ab tritone +! ======== central symmetric-mirror-axis ================== +64/45 ! z -26 G# inverse-tritone +13/9 ! y -25 G& 3.25/2.25 +16/11 ! x -24 G# 3.2/2.2 +40/27 ! w -23 A\ +3/2 ! v -22 A. quinte +32/21 ! u -21 A/ 2.9090../1.9090.. +54/35 ! t -20 A+ +14/9 ! s -19 BB 2.8/1.8 +128/81 ! r -18 Bb +8/5 ! q -17 A# 2.666.../1.666... +13/8 ! p -16 A& 2.6/1.6 +64/39 ! o -15 B- 2.56/1.56 +5/3 ! n -14 B\ 2.5/1.5 +27/16 ! m -13 B. 2.4545../1.4545.. +12/7 ! l -12 B/ 2.4/1.4 +26/15 ! k -11 B+ 2.3636../1.3636.. C- +7/4 ! j -10 C\ 2.333.../1.333... +16/9 ! i -9 C. +9/5 ! h -8 C/ 2.25/1.25 +11/6 ! g -7 C+ 2.2/1.2 +24/13 ! f -6 DB 2.1818../1.1818.. +15/8 ! e -5 Db +112/59 ! d -4 C# +27/14 ! c -3 C& +64/33 ! b -2 D- +77/39 ! a -1 D\ +2/1 ! @'+-0 D. diff --git a/scales/sparschuh_53tone5limit.scl b/scales/sparschuh_53tone5limit.scl new file mode 100644 index 0000000..0f00cd7 --- /dev/null +++ b/scales/sparschuh_53tone5limit.scl @@ -0,0 +1,59 @@ +! sparschuh_53tone5limit.scl +! +Sparschuh's tri-section of Mercator's-comma into (schisma)*2-Monzisma +53 +! +81/80 ! A | -4 4,-1> D/ syntonic-comma +43046721/41943040 ! B |-23 16,-1> D+ +20480/19683 ! C | 12 -9, 1> EB +135/128 ! D | -7 3, 1> Eb +16/15 ! E | 4 -1,-1> D# +177147/163840 ! F |-15 11,-1> D& +5242880/4782969 ! G | 20 -14, 1> E- +10/9 ! H | 1 -2, 1> E\ +9/8 ! I | -3 2> E. +729/640 ! J | -7 6,-1> E/ +387420489/335544320 ! K |-26 18,-1> E+=F- +2560/2187 ! L | 9 -7, 1> F\ +32/27 ! M | 5 -3> F. +6/5 ! N | 1 1,-1> F/ +1594323/1310720 ! O |-18 13,-1> F+ +655360/531441 ! P | 17 -12, 1> GB +5/4 ! Q | -2 0, 1> Gb +81/64 ! R | -6 4> F# +6561/5120 ! S |-10 8,-1> F& +167772160/129140163 ! T | 25 -17, 1> G- +320/243 ! U | 6 -5, 1> G\ +4/3 ! V | 2 -1> G. +27/20 ! W | -2 3,-1> G/ +14348907/10485760 ! X |-21 15,-1> G+ +81920/59049 ! Y | 14 -10, 1> AB +45/32 ! Z | -5 2, 1> Ab +! <<<=======symmetric-mirror-axis=======>>> ! +64/45 ! z | 6 -2,-1> G# +59049/40960 ! y |-13 10,-1> G& +20971520/14348907 ! x | 22 -15, 1> A- +40/27 ! w | 3 -3, 1> A\ +3/2 ! v | -1 1> A. +243/160 ! u | -5 5,-1> A/ +129140163/83886080 ! t |-24 17,-1> A+ +10240/6561 ! s | 11 -8, 1> BB +128/81 ! r | 7 -4> Bb +8/5 ! q | 3 0,-1> A# +531441/327680 ! p |-16 12,-1> A& +5242880/4782969 ! o | 19 -13, 1> B- +5/3 ! n | 0 -1, 1> B\ +27/16 ! m | -4 3> B. +2187/1280 ! l | -8 7,-1> B/ +671088640/387420489 ! k | 27 -18, 1> B+=C- +1280/729 ! j | 8 -6, 1> C\ +16/9 ! i | 4 -2> C. +9/5 ! h | 0 2,-1> C/ +4782969/2621440 ! g |-19 14,-1> C+ +327,680/177,147 ! f | 16 -11, 1> DB +15/8 ! e | -3 1, 1> Db +256/135 ! d | 8 -3,-1> C# +19683/10240 ! c |-11 9,-1> C& +83886080/43046721 ! b | 24 -16, 1> D- +160/81 ! a | 5 -4,-1> D\ +2/1 ! @'| 1> D. diff --git a/scales/sparschuh_53via19lim.scl b/scales/sparschuh_53via19lim.scl new file mode 100644 index 0000000..3bd9177 --- /dev/null +++ b/scales/sparschuh_53via19lim.scl @@ -0,0 +1,60 @@ +! sparschuh_53via19lim.scl +! +Sparschuh's Symmetric 53-tone well-temperament via 19-limit (2012) +53 +! +! 1/1 ! @ unison +76/75 ! A +77/75 ! B +26/25 ! C +256/243 ! D +2187/2048 ! E +225/208 ! F +675/616 ! G +675/608 ! H +9/8 ! I +57/50 ! J +231/200 ! K +117/100 ! L +32/27 ! M +2432/2025 ! N +2025/1664 ! O +832/675 ! P +8192/6561 ! Q +81/64 ! R +50/39 ! S +100/77 ! T +25/19 ! U +4/3 ! V +304/225 ! W +308/225 ! X +104/75 ! Y +1024/729 ! Z +! <======== mirror-symmetry-axis =========> ! +729/512 ! z +75/52 ! y +225/154 ! x +225/152 ! w +3/2 ! v +38/25 ! u +77/50 ! t +39/25 ! s +128/81 ! r +6561/4096 ! q +675/416 ! p +3328/2025 ! o +2025/1216 ! n +27/16 ! m +200/117 ! l +400/231 ! k +100/57 ! j +16/9 ! i +1216/675 ! h +1232/675 ! g +416/225 ! f +4096/2187 ! e +243/128 ! d +50/26 ! c +150/77 ! b +75/38 ! a +2/1 ! @' octave diff --git a/scales/sparschuh_5limdodek.scl b/scales/sparschuh_5limdodek.scl new file mode 100644 index 0000000..5a7c2f4 --- /dev/null +++ b/scales/sparschuh_5limdodek.scl @@ -0,0 +1,16 @@ +! sparschuh_5limdodek.scl +Sparschuh's 5-limit dodecatonics with two Kirnberger 5ths: C-G & A-E +12 +! +256/243 !_______: C# = |8 -5> inital limma +262144/234375 !_: D_ = |18 -1, -7> +32/27 !_________: Eb = |5 -3> +5/4 !___________: E_ = |-2 0, 1> +4/3 !___________: E_ = |2 -1> +1024/729 !______: F# = |10 -6> +16384/10935 !___: G_ = |14 -7, 1> +128/81 !________: G# = |7 -4> +78125/46656 !___: A_ = |-6 -6, 7> +16/9 !__________: Bb = |4 -2> +4096/2187 !_____: B_ = |12 -7> 'leading-tone' concludes by apotome B-C +2/1 diff --git a/scales/sparschuh_bach19lim.scl b/scales/sparschuh_bach19lim.scl new file mode 100644 index 0000000..5ec39d7 --- /dev/null +++ b/scales/sparschuh_bach19lim.scl @@ -0,0 +1,28 @@ +! sparschuh_bach19lim.scl +! +Sparschuh's (2012) 19-limit Bach's decorative ornament tuning +12 +! +256/243 ! C# = | 8 -5> ! initial limma +! * 17/16 = +| 4 0, 0 0 0, 0 1> +272/243 ! D = | 4 -3, 0 0 0, 0 1> +! * 18/17 = +| 1 2, 0 0 0, 0 -1> +32/27 ! Eb = | 5 -3> +! * 96/91 = +| 5 1, 0 -1 0, -1> +1024/819 ! E = | 10 -3, 0 -1 0, -1> +! * 273/256 = +| -8 1, 0 1 0, 1> +4/3 ! F = | 2 -1> +! * 256/243 = +| 8 -5> +1024/729 ! F# = | 10 -6> +! * 81/76 = +| -2 4, 0 0 0, 0 0 -1> +256/171 ! G = | 8 -3, 0 0 0, 0 0 -1> +! * 19/18 = +| -1 -2, 0 0 0, 0 0 1> +128/81 ! G# = | 7 -4> +! * 18/17 = +| 1 2, 0 0 0, 0 -1> +256/153 ! A = | 8 2, 0 0 0, 0 -1> +! * 17/16 = +| -4 0, 0 0 0, 0 1> +16/9 ! Bb = | -4 2> +! * 256/243 = +| 8 -5> +4096/2187 ! B = | 12 -7> +! 2187/2048 = +|-11 7> ! finally apotome as C-major 'leading-tone' +2/1 ! C' = |1> diff --git a/scales/sparschuh_bach_cup.scl b/scales/sparschuh_bach_cup.scl new file mode 100644 index 0000000..c6311a8 --- /dev/null +++ b/scales/sparschuh_bach_cup.scl @@ -0,0 +1,16 @@ +! sparschuh_bach_cup.scl +Septenarian interpretation of J.S.Bach's cup compiled by A.Sparschuh +12 +! +1046/993 ! C# ~ 91.674983...Cents +1112/993 ! D_ ~195.949398... +1176/993 ! Eb ~292.826925... +1242/993 ! E_ ~387.359461... +1328/993 ! F_ ~503.267429... +1396/993 ! F# ~589.719982... +1488/993 ! G_ ~700.210684... +1568/993 ! G# ~790.871924... +1662/993 ! A_ ~891.665711... +1768/993 ! Bb ~998.703182... +1862/993 ! B_ ~1088.38494... +2/1 diff --git a/scales/sparschuh_dent.scl b/scales/sparschuh_dent.scl new file mode 100644 index 0000000..41717f0 --- /dev/null +++ b/scales/sparschuh_dent.scl @@ -0,0 +1,17 @@ +! sparschuh_dent.scl +! +Modified Sparschuh temperament with a'=419 Hz by Tom Dent + 12 +! + 132/125 + 28/25 + 297/250 + 157/125 + 667/500 + 176/125 + 187/125 + 198/125 + 419/250 + 89/50 + 47/25 + 2/1 diff --git a/scales/sparschuh_dyadrat53.scl b/scales/sparschuh_dyadrat53.scl new file mode 100644 index 0000000..cbda33f --- /dev/null +++ b/scales/sparschuh_dyadrat53.scl @@ -0,0 +1,57 @@ +! sparschuh_dyadrat53.scl +Sparschuh's Dyadic-Rational 53 in Philolaos/Boethius style (2010) +53 +! 1/1 ! 0: C- 256 Hz middle_C-_4 +65/64 ! 1: C\ 260 +527/512 ! 2: C. 263.5 +533/512 ! 3: C/ 266.5 +135/128 ! 4: C+ 270 +547/512 ! 5: DB 273.5 +277/256 ! 6: Db 277 +281/256 ! 7: C# 281 +569/512 ! 8: C& 284.5 +9/8 ! 9: D- 288 ! tone +73/64 ! 10: D\ 292 +37/32 ! 11: D. 296 +75/64 ! 12: D/ 300 +19/16 ! 13: D+ 304 +77/64 ! 14: EB 308 +39/32 ! 15: Eb 312 +79/64 ! 16: D# 316 +5/4 ! 17: D& 320 ! the "just" 3rd +81/64 ! 18: E- 324 Pythagorean "ditone" +657/512 ! 19: E\ 328.5 +333/256 ! 20: E. 333 +675/512 ! 21: E/ 337.5 +171/128 ! 22: E+ 342 = F- (4/3)*(513/512) an 4th: ratio 1.335,937,5 +693/512 ! 23: F\ 346.5 +351/256 ! 24: F. 351 +711/512 ! 25: F/ 355.5 +45/32 ! 26: F+ 360 ! Syntonic 5-limit tritone +729/512 ! 27: GB 364.5 ! Pythagorean 3-limit tritone +739/512 ! 28: Gb 369.5 +749/512 ! 29: F# 374.5 +379/256 ! 30: F& 379 +3/2 ! 31: G- 384 ! the JI 5th +195/128 ! 32: G\ 390 +395/256 ! 33: G. 395 +25/16 ! 34: G/ 400 Hz ! Mersenne's "French-opera-tone" +405/256 ! 35: G+ 405 +821/512 ! 36: AB 410.5 +13/8 ! 37: Ab 416 ! the 13th partial overtone +843/512 ! 38: G# 421.5 ! ~Mozart's~Vienna-pitch +853/512 ! 39: G& 426.5 +27/16 ! 40: A- 432 ! Sauveur's & Verdi's ; Pythagorean 6th +219/128 ! 41: A\ 438 ! Pavarotti's abs.-pitch +111/64 ! 42: A. 444 ! Herbert Karajan's " +225/128 ! 43: A/ 450 ! (7/4)*(225/224) ~natural~septime~ +57/32 ! 44: A+ 456 ! Werckmeister's ~"Choir~Thon"~ +231/128 ! 45: BB 462 +117/64 ! 46: Bb 468 +237/128 ! 47: A# 474 +15/8 ! 48: A& 480 ! Syntonic 5-limit 7th +243/128 ! 49: B- 486 ! Pythagoran 7th or octave/limma +985/512 ! 50: B\ 492.5 +499/256 ! 51: B. 499 +1011/512 ! 52: B/ 505.5 +2/1 ! 53: B+ 512 =C-! tenor_C-_5 diff --git a/scales/sparschuh_ji53.scl b/scales/sparschuh_ji53.scl new file mode 100644 index 0000000..57ded57 --- /dev/null +++ b/scales/sparschuh_ji53.scl @@ -0,0 +1,58 @@ +! sparschuh_ji53.scl +! +Sparschuh's rational 53-tone with some epimoric biased 5ths (2010) + 53 +! + 65/64 + 33/32 + 26/25 + 20/19 + 16/15 + 13/12 + 11/10 + 10/9 + 9/8 + 8/7 + 52/45 + 7/6 + 32/27 + 6/5 + 11/9 + 16/13 + 5/4 + 81/64 + 9/7 + 57/44 + 21/16 + 4/3 + 23/17 + 11/8 + 18/13 + 7/5 + 10/7 + 13/9 + 16/11 + 34/23 + 3/2 + 32/21 + 88/57 + 14/9 + 128/81 + 8/5 + 13/8 + 18/11 + 5/3 + 27/16 + 12/7 + 45/26 + 7/4 + 16/9 + 9/5 + 20/11 + 24/13 + 15/8 + 19/10 + 25/13 + 64/33 + 128/65 + 2/1 diff --git a/scales/sparschuh_ji53a.scl b/scales/sparschuh_ji53a.scl new file mode 100644 index 0000000..260058d --- /dev/null +++ b/scales/sparschuh_ji53a.scl @@ -0,0 +1,58 @@ +! sparschuh_ji53a.scl +! +Sparschuh's tri-section of Mercator's-comma into (schisma)*2-Monzisma + 53 +! + 81/80 + 43046721/41943040 + 20480/19683 + 135/128 + 16/15 + 177147/163840 + 5242880/4782969 + 10/9 + 9/8 + 729/640 + 387420489/335544320 + 2560/2187 + 32/27 + 6/5 + 1594323/1310720 + 655360/531441 + 5/4 + 81/64 + 6561/5120 + 167772160/129140163 + 320/243 + 4/3 + 27/20 + 14348907/10485760 + 81920/59049 + 45/32 + 64/45 + 59049/40960 + 20971520/14348907 + 40/27 + 3/2 + 243/160 + 129140163/83886080 + 10240/6561 + 128/81 + 8/5 + 531441/327680 + 2621440/1594323 + 5/3 + 27/16 + 2187/1280 + 671088640/387420489 + 1280/729 + 16/9 + 9/5 + 4782969/2621440 + 327680/177147 + 15/8 + 256/135 + 19683/10240 + 83886080/43046721 + 160/81 + 2/1 diff --git a/scales/sparschuh_mietke.scl b/scales/sparschuh_mietke.scl new file mode 100644 index 0000000..6eb531a --- /dev/null +++ b/scales/sparschuh_mietke.scl @@ -0,0 +1,17 @@ +! sparschuh_mietke.scl +! +Andreas Sparschuh, proposal for Mietke's lost "Bach" hpschd, 1/1=243, a=406, TL 6-10-2008 + 12 +! + 256/243 + 272/243 + 32/27 + 304/243 + 4/3 + 38/27 + 364/243 + 128/81 + 406/243 + 16/9 + 152/81 + 2/1 diff --git a/scales/sparschuh_septenarian29.scl b/scales/sparschuh_septenarian29.scl new file mode 100644 index 0000000..78d6c24 --- /dev/null +++ b/scales/sparschuh_septenarian29.scl @@ -0,0 +1,34 @@ +! sparschuh_septenarian29.scl +! +Sparschuh's C-major-JI and 2 harmonic overtone-series 1:3:5:7:9:11:15 over F & C + 29 +! +91/88 !___! 01: C+_4__273 / C_4__264 +2227/2112 ! 02: Db_7_2227 / C_7_2112 +13/12 !___! 03: C#_3__143 / C_3__132 +293/264 !_! 04: D-_4__293 / C_4__264 +9/8 !_____! 05: D__4__297 / C_4__264 +7/6 !_____! 06: D+_2___77 / C_2___66 +313/264 !_! 07: Eb_4__313 / C_4__264 +161/132 !_! 08: D#_3__132 / C_3__132 +5/4 !_____! 09: E-_3__165 / C_3__132 +14/11 !___! 10: E__1___42 / C_1___33 +231/176 !_! 11: E+F-5_693 / C_5__524 +4/3 !_____! 12: F__1___44 / C_1___33 +121/88 !__! 13: F+_4__363 / C_4__264 +45/32 !___! 14: Gb_6_1485 / C_5_1056 +63/44 !___! 15: F#_4__381 / C_4__264 +65/44 !___! 16: G-_3__195 / C_3__132 +3/2 !_____! 17: G__2___99 / C_2___66 +205/132 !_! 18: G+_3__205 / C_3__132 +835/528 !_! 19: Ab_5__835 / C_5__528 +13/8 !____! 20: G#_4__329 / C_4__264 +5/3 !_____! 21: A-_1___55 / C_1___33 +149/88 !__! 22: A__4__447 / C_4__264 +7/4 !_____! 23: A+_3__231 / C_3__132 +313/176 !_! 24: Bb_5__939 / C_5__528 +11/6 !____! 25: A#_2__121 / C_2___66 +15/8 !____! 26: B-_4__495 / C_4__262 +23/12 !___! 27: B__3__253 / C_3__132 +65/33 !___! 28: (B+_2=C-_3)/C_2___33 +2/1 diff --git a/scales/sparschuh_septenarian53.scl b/scales/sparschuh_septenarian53.scl new file mode 100644 index 0000000..9107b5d --- /dev/null +++ b/scales/sparschuh_septenarian53.scl @@ -0,0 +1,58 @@ +! sparschuh_septenarian53.scl +! +Sparschuh's 53 generalization of Werckmeister's septenarius temperament + 53 +! + 2075/2048 + 525/512 + 136231/131072 + 69043/65536 + 2187/2048 + 1107/1024 + 4485/4096 + 36369/32768 + 9/8 + 1167/1024 + 4725/4096 + 153259/131072 + 77673/65536 + 615/512 + 1245/1024 + 40365/32768 + 40915/32768 + 81/64 + 2625/2048 + 42525/32768 + 1347/1024 + 174763/131072 + 2767/2048 + 175/128 + 90821/65536 + 46029/32768 + 729/512 + 23625/16384 + 95681/65536 + 12123/8192 + 3/2 + 389/256 + 1575/1024 + 102173/65536 + 25891/16384 + 205/128 + 415/256 + 13455/8192 + 109107/65536 + 27/16 + 875/512 + 14175/8192 + 449/256 + 116509/65536 + 1845/1024 + 1867/1024 + 121095/65536 + 15343/8192 + 243/128 + 7875/4096 + 127575/65536 + 4041/2048 + 2/1 diff --git a/scales/sparschuh_wtc.scl b/scales/sparschuh_wtc.scl new file mode 100644 index 0000000..045aff7 --- /dev/null +++ b/scales/sparschuh_wtc.scl @@ -0,0 +1,17 @@ +! sparschuh_wtc.scl +! +Andreas Sparschuh WTC temperament. 1/1=250 Hz, modified Collatz sequence + 12 +! + 132/125 + 28/25 + 297/250 + 157/125 + 667/500 + 176/125 + 187/125 + 198/125 + 42/25 + 89/50 + 47/25 + 2/1 diff --git a/scales/spec1_14.scl b/scales/spec1_14.scl new file mode 100644 index 0000000..9ae0d30 --- /dev/null +++ b/scales/spec1_14.scl @@ -0,0 +1,17 @@ +! spec1_14.scl +! +Spectrum sequence of 8/7: 1 to 27 reduced by 2/1 + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 2/1 diff --git a/scales/spec1_17.scl b/scales/spec1_17.scl new file mode 100644 index 0000000..3dca67e --- /dev/null +++ b/scales/spec1_17.scl @@ -0,0 +1,17 @@ +! spec1_17.scl +! +Spectrum sequence of 7/6: 1 to 27 reduced by 2/1 + 12 +! + 17/16 + 9/8 + 19/16 + 5/4 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 15/8 + 2/1 diff --git a/scales/spec1_25.scl b/scales/spec1_25.scl new file mode 100644 index 0000000..d5ebcc8 --- /dev/null +++ b/scales/spec1_25.scl @@ -0,0 +1,17 @@ +! spec1_25.scl +! +Spectrum sequence of 5/4: 1 to 25 reduced by 2/1 + 12 +! + 17/16 + 9/8 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/spec1_33.scl b/scales/spec1_33.scl new file mode 100644 index 0000000..3cc0bbf --- /dev/null +++ b/scales/spec1_33.scl @@ -0,0 +1,17 @@ +! spec1_33.scl +! +Spectrum sequence of 4/3: 1 to 29 reduced by 2/1 + 12 +! + 17/16 + 9/8 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 7/4 + 29/16 + 15/8 + 2/1 diff --git a/scales/spec1_4.scl b/scales/spec1_4.scl new file mode 100644 index 0000000..daa8c18 --- /dev/null +++ b/scales/spec1_4.scl @@ -0,0 +1,17 @@ +! spec1_4.scl +! +Spectrum sequence of 7/5: 1 to 25 reduced by 2/1 + 12 +! + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/spec1_5.scl b/scales/spec1_5.scl new file mode 100644 index 0000000..053d373 --- /dev/null +++ b/scales/spec1_5.scl @@ -0,0 +1,17 @@ +! spec1_5.scl +! +Spectrum sequence of 1.5: 1 to 27 reduced by 2/1 + 12 +! + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/specr2.scl b/scales/specr2.scl new file mode 100644 index 0000000..b65058e --- /dev/null +++ b/scales/specr2.scl @@ -0,0 +1,17 @@ +! specr2.scl +! +Spectrum sequence of sqrt(2): 1 to 29 reduced by 2/1 + 12 +! + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 7/4 + 29/16 + 15/8 + 2/1 diff --git a/scales/specr3.scl b/scales/specr3.scl new file mode 100644 index 0000000..15ddcad --- /dev/null +++ b/scales/specr3.scl @@ -0,0 +1,17 @@ +! specr3.scl +! +Spectrum sequence of sqrt(3): 1 to 31 reduced by 2/1 + 12 +! + 17/16 + 19/16 + 5/4 + 11/8 + 3/2 + 25/16 + 13/8 + 27/16 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/spectacle31.scl b/scales/spectacle31.scl new file mode 100644 index 0000000..d09f869 --- /dev/null +++ b/scales/spectacle31.scl @@ -0,0 +1,71 @@ +! spectacle31.scl +Spectacle[31] (225/224, 243/242) hobbit irregular tuning +31 +! +33.27107 +83.57190 +116.62282 +149.93810 +199.93973 +233.34108 +266.49979 +316.66703 +349.97554 +383.00061 +433.10737 +466.87702 +499.82170 +549.94596 +583.61650 +616.33507 +649.98208 +700.00870 +733.13143 +766.79215 +816.78708 +849.90861 +899.95096 +933.46720 +966.54803 +999.85048 +1050.10849 +1083.02279 +1116.66491 +1166.77519 +2/1 +! +! ! prespectacle31.scl +! Spectacle[31] transversal +! 31 +! ! +! 45/44 +! 21/20 +! 15/14 +! 12/11 +! 9/8 +! 55/48 +! 64/55 +! 6/5 +! 11/9 +! 96/77 +! 77/60 +! 21/16 +! 4/3 +! 11/8 +! 7/5 +! 10/7 +! 16/11 +! 3/2 +! 32/21 +! 120/77 +! 77/48 +! 18/11 +! 27/16 +! 55/32 +! 96/55 +! 16/9 +! 11/6 +! 15/8 +! 40/21 +! 55/28 +! 2/1 diff --git a/scales/spon_chal1.scl b/scales/spon_chal1.scl new file mode 100644 index 0000000..57da2f8 --- /dev/null +++ b/scales/spon_chal1.scl @@ -0,0 +1,14 @@ +! spon_chal1.scl +! +JC Spondeion, from discussions with George Kahrimanis about tritone of spondeion + 9 +! + 15/14 + 12/11 + 35/32 + 4/3 + 3/2 + 45/28 + 18/11 + 105/64 + 2/1 diff --git a/scales/spon_chal2.scl b/scales/spon_chal2.scl new file mode 100644 index 0000000..8d5b964 --- /dev/null +++ b/scales/spon_chal2.scl @@ -0,0 +1,14 @@ +! spon_chal2.scl +! +JC Spondeion II, 10 May 1997. Various tunings for the parhypatai and hence trito + 9 +! + 256/243 + 16/15 + 12/11 + 4/3 + 3/2 + 128/81 + 8/5 + 18/11 + 2/1 diff --git a/scales/spon_mont.scl b/scales/spon_mont.scl new file mode 100644 index 0000000..a6d88f0 --- /dev/null +++ b/scales/spon_mont.scl @@ -0,0 +1,10 @@ +! spon_mont.scl +! +Montford's Spondeion, a mixed septimal and undecimal pentatonic (1923) + 5 +! + 28/27 + 4/3 + 3/2 + 18/11 + 2/1 diff --git a/scales/spon_terp.scl b/scales/spon_terp.scl new file mode 100644 index 0000000..649f586 --- /dev/null +++ b/scales/spon_terp.scl @@ -0,0 +1,10 @@ +! spon_terp.scl +! +Subharm. 6-tone series, guess at Greek poet Terpander's, 6th c. BC & Spondeion, Winnington-Ingram (1928) + 5 +! + 12/11 + 4/3 + 3/2 + 18/11 + 2/1 diff --git a/scales/sqrtphi.scl b/scales/sqrtphi.scl new file mode 100644 index 0000000..bf96dae --- /dev/null +++ b/scales/sqrtphi.scl @@ -0,0 +1,28 @@ +! sqrtphi.scl +! +Sqrtphi[23], the 23-note MOS of the 49&72 temperament in sqrt(phi) tuning + 23 +! + 49.63544 + 99.27089 + 148.90633 + 218.00337 + 267.63881 + 317.27426 + 366.90970 + 416.54515 + 466.18059 + 515.81604 + 565.45148 + 634.54852 + 684.18396 + 733.81941 + 783.45485 + 833.09030 + 882.72574 + 932.36119 + 981.99663 + 1051.09367 + 1100.72911 + 1150.36456 + 2/1 diff --git a/scales/squares.scl b/scales/squares.scl new file mode 100644 index 0000000..42ba944 --- /dev/null +++ b/scales/squares.scl @@ -0,0 +1,18 @@ +! squares.scl +! +Robert Walker, scale steps are of form n^2/(n^2-1), TL 20-8-2004 + 13 +! + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 4/3 + 3/2 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 2/1 diff --git a/scales/stade.scl b/scales/stade.scl new file mode 100644 index 0000000..e92da13 --- /dev/null +++ b/scales/stade.scl @@ -0,0 +1,17 @@ +! stade.scl +! +Organs in St. Cosmae, Stade; Magnuskerk, Anloo; H.K. Sluipwijk, modif. 1/4 mean + 12 +! + 81.42557 + 193.15686 + 289.73529 + 5/4 + 4/3 + 579.47057 + 696.57843 + 783.38057 + 889.73529 + 16/9 + 1082.89214 + 2/1 diff --git a/scales/stanhope.scl b/scales/stanhope.scl new file mode 100644 index 0000000..317f2b7 --- /dev/null +++ b/scales/stanhope.scl @@ -0,0 +1,17 @@ +! stanhope.scl +! +Well temperament of Charles, third earl of Stanhope (1801) + 12 +! + 256/243 + 196.09000 + 32/27 + 8192/6561 + 4/3 + 1024/729 + 3/2 + 128/81 + 890.22500 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/stanhope2.scl b/scales/stanhope2.scl new file mode 100644 index 0000000..da910bc --- /dev/null +++ b/scales/stanhope2.scl @@ -0,0 +1,17 @@ +! stanhope2.scl +! +Stanhope temperament (real version?) with 1/3 synt. comma temp. + 12 +! + 91.69029 + 196.74124 + 294.62343 + 5/4 + 4/3 + 45/32 + 3/2 + 793.15686 + 891.52748 + 16/9 + 15/8 + 2/1 diff --git a/scales/stanhope_f.scl b/scales/stanhope_f.scl new file mode 100644 index 0000000..0549894 --- /dev/null +++ b/scales/stanhope_f.scl @@ -0,0 +1,17 @@ +! stanhope_f.scl +! +Stanhope temperament, equal beating version by Farey (1807) + 12 +! + 256/243 + 192.88380 + 32/27 + 8192/6561 + 4/3 + 1024/729 + 3/2 + 128/81 + 887.33159 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/stanhope_m.scl b/scales/stanhope_m.scl new file mode 100644 index 0000000..807083a --- /dev/null +++ b/scales/stanhope_m.scl @@ -0,0 +1,17 @@ +! stanhope_m.scl +! +Stanhope's (1806) monochord string lenghts compiled by A.Sparschuh + 12 +! + 120/113 + 120/107 + 120/101 + 5/4 + 4/3 + 24/17 + 3/2 + 8/5 + 120/71 + 120/67 + 15/8 + 2/1 diff --git a/scales/stanhope_s.scl b/scales/stanhope_s.scl new file mode 100644 index 0000000..23bfb85 --- /dev/null +++ b/scales/stanhope_s.scl @@ -0,0 +1,17 @@ +! stanhope_s.scl +! +Stanhope temperament, alt. version with 1/3 syntonic comma + 12 +! + 91.202 cents + 196.741 cents + 295.112 cents + 5/4 + 4/3 + 589.247 cents + 3/2 + 793.157 cents + 891.527 cents + 16/9 + 15/8 + 2 diff --git a/scales/starling.scl b/scales/starling.scl new file mode 100644 index 0000000..b045499 --- /dev/null +++ b/scales/starling.scl @@ -0,0 +1,17 @@ +! starling.scl +! +Starling temperament, Herman Miller (1999) + 12 +! + 111.20000 + 200.00000 + 311.20000 + 388.80000 + 500.00000 + 588.80000 + 700.00000 + 811.20000 + 888.80000 + 1000.00000 + 1088.80000 + 2/1 diff --git a/scales/starling11.scl b/scales/starling11.scl new file mode 100644 index 0000000..a94fc2b --- /dev/null +++ b/scales/starling11.scl @@ -0,0 +1,30 @@ +! starling11.scl +Starling[11] hobbit <11 18 26 31| in <135 214 314 379| tuning +11 +! +80.00000 +231.11111 +311.11111 +391.11111 +577.77778 +622.22222 +808.88889 +888.88889 +968.88889 +1120.00000 +2/1 +! +!! prestarling11.scl +!! +! Starling[11] transversal <11 18 26 31| ! 11 ! +! 25/24 +! 144/125 +! 6/5 +! 5/4 +! 25/18 +! 36/25 +! 8/5 +! 5/3 +! 125/72 +! 48/25 +! 2/1 diff --git a/scales/starling12.scl b/scales/starling12.scl new file mode 100644 index 0000000..241a59f --- /dev/null +++ b/scales/starling12.scl @@ -0,0 +1,34 @@ +! starling12.scl +Starling[12] hobbit in <135 214 314 379| tuning +12 +! +80.00000 +231.11111 +311.11111 +391.11111 +497.77778 +622.22222 +702.22222 +808.88889 +888.88889 +1013.33333 +1120.00000 +2/1 +! +!! prestarling12.scl +!! +! Prestarling[12] hobbit transversal = thirds.scl +! 12 +!! +! 25/24 +! 144/125 +! 6/5 +! 5/4 +! 4/3 +! 36/25 +! 3/2 +! 8/5 +! 5/3 +! 9/5 +! 48/25 +! 2/1 diff --git a/scales/starling15.scl b/scales/starling15.scl new file mode 100644 index 0000000..21e4543 --- /dev/null +++ b/scales/starling15.scl @@ -0,0 +1,40 @@ +! starling15.scl +Starling[15] hobbit in <135 214 314 379| tuning +15 +! +80.00000 +186.66667 +231.11111 +311.11111 +391.11111 +497.77778 +577.77778 +622.22222 +702.22222 +808.88889 +888.88889 +968.88889 +1013.33333 +1120.00000 +2/1 +! +!! prestarling15.scl +!! +! Prestarling[15] hobbit transversal = pipedum_15 +! 15 +!! +! 25/24 +! 10/9 +! 144/125 +! 6/5 +! 5/4 +! 4/3 +! 25/18 +! 36/25 +! 3/2 +! 8/5 +! 5/3 +! 125/72 +! 9/5 +! 48/25 +! 2/1 diff --git a/scales/starling16.scl b/scales/starling16.scl new file mode 100644 index 0000000..3b00464 --- /dev/null +++ b/scales/starling16.scl @@ -0,0 +1,42 @@ +! starling16.scl +Starling[16] hobbit in <135 214 314 379| tuning +16 +! +80.00000 +106.66667 +231.11111 +311.11111 +391.11111 +417.77778 +497.77778 +622.22222 +702.22222 +728.88889 +808.88889 +888.88889 +1013.33333 +1093.33333 +1120.00000 +2/1 +! +!! prestarling16.scl +!! +! Prestarling[16] hobbit transversal +! 16 +! ! +! 25/24 +! 16/15 +! 144/125 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 36/25 +! 3/2 +! 192/125 +! 8/5 +! 5/3 +! 9/5 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/starling17.scl b/scales/starling17.scl new file mode 100644 index 0000000..17307e5 --- /dev/null +++ b/scales/starling17.scl @@ -0,0 +1,44 @@ +! starling17.scl +Starling[17] hobbit <17 27 40 49| in <135 214 314 379| tuning +17 +! +80.00000 +106.66667 +186.66667 +311.11111 +391.11111 +417.77778 +497.77778 +577.77778 +622.22222 +702.22222 +782.22222 +808.88889 +888.88889 +1013.33333 +1093.33333 +1120.00000 +2/1 +! +!! prestarling17.scl +!! +! Prestarling[17] hobbit <17 27 40 49| +! 17 +!! +! 25/24 +! 16/15 +! 10/9 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 25/18 +! 36/25 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 9/5 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/starling19.scl b/scales/starling19.scl new file mode 100644 index 0000000..52f2af9 --- /dev/null +++ b/scales/starling19.scl @@ -0,0 +1,48 @@ +! starling19.scl +Starling[19] hobbit in <135 214 314 379| tuning +19 +! +80.00000 +106.66667 +186.66667 +231.11111 +311.11111 +391.11111 +417.77778 +497.77778 +577.77778 +622.22222 +702.22222 +782.22222 +808.88889 +888.88889 +968.88889 +1013.33333 +1093.33333 +1120.00000 +2/1 +! +!! prestarling19.scl +!! +! Prestarling[19] hobbit transversal +! 19 +!! +! 25/24 +! 16/15 +! 10/9 +! 144/125 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 25/18 +! 36/25 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 125/72 +! 9/5 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/starling7.scl b/scales/starling7.scl new file mode 100644 index 0000000..bc06823 --- /dev/null +++ b/scales/starling7.scl @@ -0,0 +1,25 @@ +! starling7.scl +Starling[7] hobbit <7 11 16 19| in <135 214 314 379| tuning +7 +! +186.66667 +311.11111 +497.77778 +702.22222 +888.88889 +1013.33333 +2/1 +! +!! prestarling7.scl +!! +! Starling[7] transversal <7 11 16 19| = ptolemy_diat +! 7 +!! al-farabi_diat2 = diff7 = porchrome1 = synchrome1 = synpor1 +!! +! 10/9 +! 6/5 +! 4/3 +! 3/2 +! 5/3 +! 9/5 +! 2/1 diff --git a/scales/starling8.scl b/scales/starling8.scl new file mode 100644 index 0000000..1350eeb --- /dev/null +++ b/scales/starling8.scl @@ -0,0 +1,26 @@ +! starling8.scl +Starling[8] hobbit <8 13 19 23| in <135 214 314 379| tuning +8 +! +80.00000 +311.11111 +391.11111 +622.22222 +702.22222 +888.88889 +1120.00000 +2/1 +! +!! prestarling8.scl +!! +! Starling[8] transversal +! 8 +!! +! 25/24 +! 6/5 +! 5/4 +! 36/25 +! 3/2 +! 5/3 +! 48/25 +! 2/1 diff --git a/scales/starling9.scl b/scales/starling9.scl new file mode 100644 index 0000000..d4d5dbe --- /dev/null +++ b/scales/starling9.scl @@ -0,0 +1,28 @@ +! starling9.scl +Starling[9] hobbit <9 14 21 26| in <135 214 314 379| tuning +9 +! +80.00000 +311.11111 +391.11111 +497.77778 +702.22222 +808.88889 +888.88889 +1120.00000 +2/1 +! +!! prestarling9.scl +!! +! Starling[9] transversal <9 14 21 26| = pipedum9_e (dielim1) +! 9 +!! +! 25/24 +! 6/5 +! 5/4 +! 4/3 +! 3/2 +! 8/5 +! 5/3 +! 48/25 +! 2/1 diff --git a/scales/stearns.scl b/scales/stearns.scl new file mode 100644 index 0000000..efa8829 --- /dev/null +++ b/scales/stearns.scl @@ -0,0 +1,12 @@ +! stearns.scl +! +Dan Stearns, guitar scale + 7 +! + 8/7 + 9/7 + 7/5 + 32/21 + 12/7 + 27/14 + 2/1 diff --git a/scales/stearns2.scl b/scales/stearns2.scl new file mode 100644 index 0000000..8d783ff --- /dev/null +++ b/scales/stearns2.scl @@ -0,0 +1,27 @@ +! stearns2.scl +! +Dan Stearns, scale for "At A Day Job" based on harmonics 10-20 and 14-28 + 22 +! + 15/14 + 11/10 + 8/7 + 6/5 + 17/14 + 9/7 + 13/10 + 19/14 + 7/5 + 10/7 + 3/2 + 11/7 + 8/5 + 23/14 + 17/10 + 12/7 + 25/14 + 9/5 + 13/7 + 19/10 + 27/14 + 2/1 diff --git a/scales/stearns3.scl b/scales/stearns3.scl new file mode 100644 index 0000000..71a125a --- /dev/null +++ b/scales/stearns3.scl @@ -0,0 +1,14 @@ +! stearns3.scl +! +Dan Stearns, trivalent version of Bohlen's Lambda scale + 9 +! + 260.54178 + 390.81267 + 573.19192 + 833.73370 + 1016.11295 + 1276.65473 + 1459.03397 + 1719.57575 + 3/1 diff --git a/scales/stearns4.scl b/scales/stearns4.scl new file mode 100644 index 0000000..250b850 --- /dev/null +++ b/scales/stearns4.scl @@ -0,0 +1,12 @@ +! stearns4.scl +! +Dan Stearns, 1/4-septimal comma temperament, tuning-math 2-12-2001 + 7 +! + 217.54205 + 9/7 + 491.22898 + 708.77102 + 926.31307 + 982.45795 + 2/1 diff --git a/scales/steldek1.scl b/scales/steldek1.scl new file mode 100644 index 0000000..f2f3dfc --- /dev/null +++ b/scales/steldek1.scl @@ -0,0 +1,35 @@ +! steldek1.scl +! +Stellated two out of 1 3 5 7 9 dekany + 30 +! + 21/20 + 135/128 + 15/14 + 35/32 + 9/8 + 7/6 + 189/160 + 135/112 + 315/256 + 5/4 + 81/64 + 21/16 + 27/20 + 45/32 + 35/24 + 189/128 + 3/2 + 49/32 + 25/16 + 63/40 + 45/28 + 105/64 + 5/3 + 27/16 + 7/4 + 15/8 + 27/14 + 35/18 + 63/32 + 2/1 diff --git a/scales/steldek1s.scl b/scales/steldek1s.scl new file mode 100644 index 0000000..0bc7e7b --- /dev/null +++ b/scales/steldek1s.scl @@ -0,0 +1,39 @@ +! steldek1s.scl +! +Superstellated two out of 1 3 5 7 9 dekany + 34 +! + 21/20 + 135/128 + 15/14 + 35/32 + 9/8 + 7/6 + 189/160 + 135/112 + 315/256 + 5/4 + 81/64 + 35/27 + 21/16 + 27/20 + 135/98 + 45/32 + 35/24 + 189/128 + 3/2 + 49/32 + 25/16 + 63/40 + 45/28 + 105/64 + 5/3 + 27/16 + 7/4 + 945/512 + 15/8 + 189/100 + 27/14 + 35/18 + 63/32 + 2/1 diff --git a/scales/steldek2.scl b/scales/steldek2.scl new file mode 100644 index 0000000..73359c5 --- /dev/null +++ b/scales/steldek2.scl @@ -0,0 +1,40 @@ +! steldek2.scl +! +Stellated two out of 1 3 5 7 11 dekany + 35 +! + 385/384 + 33/32 + 21/20 + 15/14 + 35/32 + 9/8 + 55/48 + 33/28 + 105/88 + 77/64 + 5/4 + 165/128 + 21/16 + 15/11 + 11/8 + 231/160 + 35/24 + 165/112 + 3/2 + 385/256 + 49/32 + 25/16 + 35/22 + 77/48 + 105/64 + 33/20 + 55/32 + 7/4 + 231/128 + 15/8 + 121/64 + 21/11 + 77/40 + 55/28 + 2/1 diff --git a/scales/steldek2s.scl b/scales/steldek2s.scl new file mode 100644 index 0000000..52eba69 --- /dev/null +++ b/scales/steldek2s.scl @@ -0,0 +1,45 @@ +! steldek2s.scl +! +Superstellated two out of 1 3 5 7 11 dekany + 40 +! + 385/384 + 33/32 + 21/20 + 15/14 + 35/32 + 9/8 + 1155/1024 + 55/48 + 231/200 + 33/28 + 105/88 + 77/64 + 5/4 + 165/128 + 21/16 + 385/288 + 15/11 + 11/8 + 231/160 + 35/24 + 165/112 + 3/2 + 385/256 + 49/32 + 25/16 + 35/22 + 77/48 + 105/64 + 33/20 + 165/98 + 55/32 + 210/121 + 7/4 + 231/128 + 15/8 + 121/64 + 21/11 + 77/40 + 55/28 + 2/1 diff --git a/scales/steldia.scl b/scales/steldia.scl new file mode 100644 index 0000000..9f0a8d9 --- /dev/null +++ b/scales/steldia.scl @@ -0,0 +1,23 @@ +! steldia.scl +Stellated hexany plus diamond; superparticular ratios +18 +! +15/14 +8/7 +7/6 +6/5 +60/49 +5/4 +9/7 +4/3 +7/5 +10/7 +3/2 +8/5 +5/3 +12/7 +7/4 +25/14 +15/8 +2/1 +! [-1..0, -1..0, -1..1] diff --git a/scales/steleik1.scl b/scales/steleik1.scl new file mode 100644 index 0000000..7bbad03 --- /dev/null +++ b/scales/steleik1.scl @@ -0,0 +1,75 @@ +! steleik1.scl +! +Stellated Eikosany 3 out of 1 3 5 7 9 11 + 70 +! + 385/384 + 49/48 + 45/44 + 33/32 + 25/24 + 135/128 + 77/72 + 693/640 + 35/32 + 847/768 + 495/448 + 9/8 + 1155/1024 + 55/48 + 147/128 + 297/256 + 7/6 + 75/64 + 105/88 + 77/64 + 315/256 + 99/80 + 5/4 + 121/96 + 81/64 + 245/192 + 165/128 + 21/16 + 385/288 + 693/512 + 11/8 + 539/384 + 45/32 + 363/256 + 63/44 + 275/192 + 231/160 + 35/24 + 165/112 + 189/128 + 3/2 + 385/256 + 55/36 + 49/32 + 99/64 + 25/16 + 63/40 + 605/384 + 35/22 + 77/48 + 45/28 + 105/64 + 5/3 + 27/16 + 55/32 + 7/4 + 99/56 + 385/216 + 315/176 + 231/128 + 175/96 + 11/6 + 15/8 + 121/64 + 77/40 + 495/256 + 35/18 + 55/28 + 63/32 + 2/1 diff --git a/scales/steleik1s.scl b/scales/steleik1s.scl new file mode 100644 index 0000000..c366ebf --- /dev/null +++ b/scales/steleik1s.scl @@ -0,0 +1,85 @@ +! steleik1s.scl +! +Superstellated Eikosany 3 out of 1 3 5 7 9 11 + 80 +! + 385/384 + 2079/2048 + 33/32 + 539/512 + 135/128 + 1089/1024 + 189/176 + 275/256 + 693/640 + 35/32 + 495/448 + 567/512 + 9/8 + 1155/1024 + 55/48 + 147/128 + 297/256 + 75/64 + 189/160 + 605/512 + 105/88 + 77/64 + 135/112 + 315/256 + 5/4 + 81/64 + 10395/8192 + 165/128 + 2079/1600 + 1331/1024 + 21/16 + 297/224 + 385/288 + 343/256 + 945/704 + 693/512 + 175/128 + 11/8 + 45/32 + 363/256 + 729/512 + 231/160 + 1485/1024 + 35/24 + 165/112 + 189/128 + 3/2 + 385/256 + 49/32 + 135/88 + 99/64 + 25/16 + 405/256 + 77/48 + 2079/1280 + 105/64 + 847/512 + 1485/896 + 27/16 + 3465/2048 + 55/32 + 441/256 + 891/512 + 7/4 + 225/128 + 385/216 + 315/176 + 231/128 + 945/512 + 297/160 + 15/8 + 121/64 + 1485/784 + 243/128 + 245/128 + 495/256 + 945/484 + 125/64 + 63/32 + 2/1 diff --git a/scales/steleik2.scl b/scales/steleik2.scl new file mode 100644 index 0000000..f0df7d4 --- /dev/null +++ b/scales/steleik2.scl @@ -0,0 +1,85 @@ +! steleik2.scl +! +Stellated Eikosany 3 out of 1 3 5 7 11 13 + 80 +! + 121/120 + 49/48 + 143/140 + 91/88 + 1001/960 + 21/20 + 169/160 + 77/72 + 14/13 + 13/12 + 11/10 + 143/128 + 539/480 + 91/80 + 55/48 + 7/6 + 13/11 + 77/65 + 143/120 + 6/5 + 77/64 + 49/40 + 1183/960 + 5/4 + 1001/800 + 121/96 + 91/72 + 14/11 + 143/112 + 77/60 + 13/10 + 1001/768 + 637/480 + 4/3 + 65/48 + 11/8 + 91/66 + 1001/720 + 7/5 + 169/120 + 91/64 + 143/100 + 35/24 + 22/15 + 77/52 + 143/96 + 3/2 + 121/80 + 91/60 + 77/50 + 1001/640 + 11/7 + 8/5 + 77/48 + 13/8 + 49/30 + 1573/960 + 33/20 + 91/55 + 5/3 + 1001/600 + 22/13 + 143/84 + 26/15 + 1001/576 + 7/4 + 169/96 + 847/480 + 143/80 + 91/50 + 11/6 + 13/7 + 28/15 + 91/48 + 77/40 + 1859/960 + 39/20 + 77/39 + 143/72 + 2/1 diff --git a/scales/steleik2s.scl b/scales/steleik2s.scl new file mode 100644 index 0000000..69d5557 --- /dev/null +++ b/scales/steleik2s.scl @@ -0,0 +1,97 @@ +! steleik2s.scl +! +Superstellated Eikosany 3 out of 1 3 5 7 11 13 + 92 +! + 385/384 + 105/104 + 65/64 + 33/32 + 2145/2048 + 539/512 + 273/256 + 2197/2048 + 275/256 + 5005/4608 + 35/32 + 195/176 + 231/208 + 143/128 + 9/8 + 1155/1024 + 147/128 + 1183/1024 + 75/64 + 3003/2560 + 605/512 + 455/384 + 105/88 + 2145/1792 + 77/64 + 39/32 + 5005/4096 + 637/512 + 5/4 + 325/256 + 165/128 + 455/352 + 1331/1024 + 1001/768 + 21/16 + 169/128 + 1365/1024 + 343/256 + 429/320 + 175/128 + 2145/1568 + 11/8 + 1155/832 + 715/512 + 45/32 + 1365/968 + 363/256 + 91/64 + 231/160 + 3003/2048 + 165/112 + 3/2 + 385/256 + 195/128 + 49/32 + 1573/1024 + 99/64 + 273/176 + 25/16 + 1001/640 + 165/104 + 715/448 + 13/8 + 5005/3072 + 105/64 + 845/512 + 847/512 + 429/256 + 27/16 + 273/160 + 1155/676 + 55/32 + 195/112 + 7/4 + 455/256 + 231/128 + 1859/1024 + 117/64 + 15015/8192 + 385/208 + 715/384 + 15/8 + 3003/1600 + 121/64 + 245/128 + 429/224 + 1365/704 + 125/64 + 1001/512 + 63/32 + 507/256 + 2/1 diff --git a/scales/stelhex-catakleismic.scl b/scales/stelhex-catakleismic.scl new file mode 100644 index 0000000..2716ea5 --- /dev/null +++ b/scales/stelhex-catakleismic.scl @@ -0,0 +1,18 @@ +! stelhex-catakleismic.scl +! +Stelhex tempered in 13-limit POTE-tuned catakleismic +! generators: -5, 0, 1, 5, 6, 7, 16, 17, 18, 22, 23, 28 + 12 +! + 84.96312 + 267.80043 + 316.73753 + 383.68764 + 468.65076 + 584.53796 + 700.42516 + 816.31236 + 901.27549 + 968.22560 + 1017.16269 + 2/1 diff --git a/scales/stelhex1.scl b/scales/stelhex1.scl new file mode 100644 index 0000000..73ba0ec --- /dev/null +++ b/scales/stelhex1.scl @@ -0,0 +1,19 @@ +! stelhex1.scl +! +Stellated two out of 1 3 5 7 hexany <14 23 36 40| weakly epimorphic, also dekatesserany, tetradekany + 14 +! + 21/20 + 15/14 + 35/32 + 9/8 + 5/4 + 21/16 + 35/24 + 3/2 + 49/32 + 25/16 + 105/64 + 7/4 + 15/8 + 2/1 diff --git a/scales/stelhex1star.scl b/scales/stelhex1star.scl new file mode 100644 index 0000000..eb119f8 --- /dev/null +++ b/scales/stelhex1star.scl @@ -0,0 +1,19 @@ +! stelhex1star.scl +! +Starling (126/125) tempered dekatesserany, one major and minor triad extra + 14 +! + 78.43056 + 123.39348 + 156.86113 + 201.82404 + 389.67129 + 468.10186 + 655.94911 + 700.91202 + 734.37967 + 779.34259 + 857.77315 + 967.18984 + 1090.58332 + 2/1 diff --git a/scales/stelhex2.scl b/scales/stelhex2.scl new file mode 100644 index 0000000..1e372fd --- /dev/null +++ b/scales/stelhex2.scl @@ -0,0 +1,17 @@ +! stelhex2.scl +! +Stellated two out of 1 3 5 9 hexany + 12 +! + 135/128 + 9/8 + 5/4 + 81/64 + 27/20 + 45/32 + 3/2 + 25/16 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/stelhex3.scl b/scales/stelhex3.scl new file mode 100644 index 0000000..eb0f487 --- /dev/null +++ b/scales/stelhex3.scl @@ -0,0 +1,19 @@ +! stelhex3.scl +! +Stellated Tetrachordal Hexany based on Archytas's Enharmonic + 14 +! + 28/27 + 16/15 + 784/729 + 448/405 + 256/225 + 35/27 + 4/3 + 48/35 + 112/81 + 64/45 + 1792/1215 + 224/135 + 16/9 + 2/1 diff --git a/scales/stelhex4.scl b/scales/stelhex4.scl new file mode 100644 index 0000000..dbb009a --- /dev/null +++ b/scales/stelhex4.scl @@ -0,0 +1,19 @@ +! STELHEX4.scl +! +Stellated Tetrachordal Hexany based on the 1/1 35/36 16/15 4/3 tetrachord + 14 +! + 36/35 + 1296/1225 + 16/15 + 192/175 + 256/225 + 9/7 + 4/3 + 48/35 + 112/81 + 64/45 + 256/175 + 288/175 + 16/9 + 2/1 diff --git a/scales/stelhex5.scl b/scales/stelhex5.scl new file mode 100644 index 0000000..9d6b72b --- /dev/null +++ b/scales/stelhex5.scl @@ -0,0 +1,17 @@ +! stelhex5.scl +! +Stellated two out of 1 3 7 9 hexany, stellation is degenerate + 12 +! + 9/8 + 7/6 + 81/64 + 21/16 + 189/128 + 3/2 + 49/32 + 27/16 + 7/4 + 27/14 + 63/32 + 2/1 diff --git a/scales/stelhex6.scl b/scales/stelhex6.scl new file mode 100644 index 0000000..08e5718 --- /dev/null +++ b/scales/stelhex6.scl @@ -0,0 +1,19 @@ +! stelhex6.scl +! +Stellated two out of 1 3 5 11 hexany, from The Giving, by Stephen J. Taylor + 14 +! + 33/32 + 9/8 + 55/48 + 5/4 + 165/128 + 15/11 + 11/8 + 3/2 + 25/16 + 33/20 + 55/32 + 15/8 + 121/64 + 2/1 diff --git a/scales/stelhexplus.scl b/scales/stelhexplus.scl new file mode 100644 index 0000000..0379618 --- /dev/null +++ b/scales/stelhexplus.scl @@ -0,0 +1,20 @@ +! stelhexplus.scl +13-limit 8 cents tolerance least squares +16 +! +115.58159 +231.81264 +347.39422 +434.14130 +464.16965 +498.95440 +548.93933 +615.05498 +730.13984 +817.25438 +932.33924 +998.45490 +1048.43982 +1083.22457 +1113.25292 +2/1 diff --git a/scales/stellar.scl b/scales/stellar.scl new file mode 100644 index 0000000..cb9cc38 --- /dev/null +++ b/scales/stellar.scl @@ -0,0 +1,25 @@ +! stellar.scl +! +stellar scale in 1/4 kleismic marvel tempering + 20 +! + 115.58705 + 153.21174 + 200.05424 + 8/7 + 268.79879 + 6/5 + 384.38583 + 468.85303 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 768.77167 + 815.61417 + 853.23886 + 5/3 + 931.20121 + 7/4 + 1084.41295 + 2/1 diff --git a/scales/stellar5.scl b/scales/stellar5.scl new file mode 100644 index 0000000..329a348 --- /dev/null +++ b/scales/stellar5.scl @@ -0,0 +1,25 @@ +! stellar5.scl +! +Marvel scale stellar in 5-limit detempering + 20 +! + 16/15 + 1125/1024 + 9/8 + 256/225 + 75/64 + 6/5 + 5/4 + 675/512 + 4/3 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 3375/2048 + 5/3 + 128/75 + 225/128 + 15/8 + 2/1 diff --git a/scales/stellblock.scl b/scales/stellblock.scl new file mode 100644 index 0000000..d9be1d7 --- /dev/null +++ b/scales/stellblock.scl @@ -0,0 +1,26 @@ +! stellblock.scl +! +Weak Fokker block, <20 32 45 54| epimorphic; mutated from stella +! <<4 0 8 -9 2 18||: -12 to 4; <<4 5 -2 -1 -14 -18||: -8 to 11; <<4 10 8 7 2 -9||: -8 to 10 +20 +! +15/14 +10/9 +8/7 +7/6 +25/21 +6/5 +5/4 +9/7 +4/3 +10/7 +40/27 +3/2 +54/35 +5/3 +12/7 +16/9 +50/27 +40/21 +35/18 +2/1 diff --git a/scales/stelpd1.scl b/scales/stelpd1.scl new file mode 100644 index 0000000..dc8b18f --- /dev/null +++ b/scales/stelpd1.scl @@ -0,0 +1,76 @@ +! stelpd1.scl +! +Stellated two out of 1 3 5 7 9 11 pentadekany + 71 +! + 385/384 + 45/44 + 33/32 + 21/20 + 135/128 + 77/72 + 15/14 + 189/176 + 693/640 + 35/32 + 495/448 + 9/8 + 55/48 + 297/256 + 7/6 + 33/28 + 189/160 + 105/88 + 77/64 + 135/112 + 27/22 + 315/256 + 99/80 + 5/4 + 81/64 + 165/128 + 21/16 + 297/224 + 385/288 + 27/20 + 693/512 + 15/11 + 11/8 + 45/32 + 63/44 + 231/160 + 35/24 + 165/112 + 189/128 + 3/2 + 385/256 + 55/36 + 49/32 + 135/88 + 99/64 + 25/16 + 63/40 + 35/22 + 77/48 + 45/28 + 105/64 + 33/20 + 5/3 + 27/16 + 55/32 + 7/4 + 99/56 + 315/176 + 231/128 + 11/6 + 297/160 + 15/8 + 121/64 + 21/11 + 77/40 + 27/14 + 495/256 + 35/18 + 55/28 + 63/32 + 2/1 diff --git a/scales/stelpd1s.scl b/scales/stelpd1s.scl new file mode 100644 index 0000000..5aa168f --- /dev/null +++ b/scales/stelpd1s.scl @@ -0,0 +1,115 @@ +! stelpd1s.scl +! +Superstellated two out of 1 3 5 7 9 11 pentadekany + 110 +! + 385/384 + 2079/2048 + 55/54 + 45/44 + 33/32 + 2079/2000 + 21/20 + 135/128 + 35/33 + 297/280 + 77/72 + 15/14 + 189/176 + 1485/1372 + 693/640 + 35/32 + 495/448 + 135/121 + 9/8 + 1155/1024 + 55/48 + 231/200 + 297/256 + 7/6 + 33/28 + 189/160 + 385/324 + 105/88 + 77/64 + 135/112 + 27/22 + 315/256 + 99/80 + 5/4 + 495/392 + 81/64 + 10395/8192 + 77/60 + 165/128 + 35/27 + 2079/1600 + 315/242 + 55/42 + 21/16 + 297/224 + 385/288 + 945/704 + 27/20 + 693/512 + 15/11 + 11/8 + 135/98 + 45/32 + 1890/1331 + 77/54 + 63/44 + 231/160 + 1485/1024 + 35/24 + 165/112 + 189/128 + 297/200 + 3/2 + 385/256 + 297/196 + 55/36 + 49/32 + 135/88 + 99/64 + 189/121 + 25/16 + 63/40 + 385/243 + 35/22 + 77/48 + 45/28 + 2079/1280 + 105/64 + 33/20 + 1485/896 + 5/3 + 165/98 + 27/16 + 3465/2048 + 189/110 + 55/32 + 693/400 + 210/121 + 7/4 + 135/77 + 99/56 + 385/216 + 315/176 + 231/128 + 11/6 + 945/512 + 297/160 + 15/8 + 189/100 + 121/64 + 1485/784 + 21/11 + 77/40 + 27/14 + 495/256 + 35/18 + 945/484 + 55/28 + 63/32 + 2/1 diff --git a/scales/stelpent1.scl b/scales/stelpent1.scl new file mode 100644 index 0000000..ceb2e43 --- /dev/null +++ b/scales/stelpent1.scl @@ -0,0 +1,35 @@ +! stelpent1.scl +! +Stellated one out of 1 3 5 7 9 pentany + 30 +! + 21/20 + 15/14 + 35/32 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 4/3 + 27/20 + 7/5 + 45/32 + 10/7 + 35/24 + 3/2 + 14/9 + 63/40 + 45/28 + 5/3 + 27/16 + 12/7 + 7/4 + 9/5 + 15/8 + 27/14 + 35/18 + 63/32 + 2/1 diff --git a/scales/stelpent1s.scl b/scales/stelpent1s.scl new file mode 100644 index 0000000..0d5071f --- /dev/null +++ b/scales/stelpent1s.scl @@ -0,0 +1,60 @@ +! stelpent1s.scl +! +Superstellated one out of 1 3 5 7 9 pentany + 55 +! + 28/27 + 21/20 + 135/128 + 15/14 + 27/25 + 35/32 + 54/49 + 10/9 + 9/8 + 280/243 + 7/6 + 189/160 + 6/5 + 135/112 + 60/49 + 315/256 + 5/4 + 63/50 + 9/7 + 35/27 + 21/16 + 4/3 + 27/20 + 135/98 + 7/5 + 45/32 + 10/7 + 35/24 + 189/128 + 40/27 + 3/2 + 189/125 + 54/35 + 14/9 + 540/343 + 63/40 + 45/28 + 105/64 + 5/3 + 42/25 + 27/16 + 12/7 + 140/81 + 7/4 + 9/5 + 90/49 + 945/512 + 28/15 + 15/8 + 189/100 + 40/21 + 27/14 + 35/18 + 63/32 + 2/1 diff --git a/scales/steltet1.scl b/scales/steltet1.scl new file mode 100644 index 0000000..07ad12d --- /dev/null +++ b/scales/steltet1.scl @@ -0,0 +1,21 @@ +! steltet1.scl +! +Stellated one out of 1 3 5 7 tetrany + 16 +! + 21/20 + 15/14 + 35/32 + 7/6 + 6/5 + 5/4 + 21/16 + 7/5 + 10/7 + 35/24 + 3/2 + 5/3 + 12/7 + 7/4 + 15/8 + 2/1 diff --git a/scales/steltet1s.scl b/scales/steltet1s.scl new file mode 100644 index 0000000..a936a59 --- /dev/null +++ b/scales/steltet1s.scl @@ -0,0 +1,25 @@ +! steltet1s.scl +! +Superstellated one out of 1 3 5 7 tetrany + 20 +! + 21/20 + 15/14 + 35/32 + 7/6 + 6/5 + 60/49 + 5/4 + 21/16 + 7/5 + 10/7 + 35/24 + 3/2 + 105/64 + 5/3 + 42/25 + 12/7 + 7/4 + 15/8 + 35/18 + 2/1 diff --git a/scales/steltet2.scl b/scales/steltet2.scl new file mode 100644 index 0000000..1bec4da --- /dev/null +++ b/scales/steltet2.scl @@ -0,0 +1,21 @@ +! steltet2.scl +! +Stellated three out of 1 3 5 7 tetrany + 16 +! + 49/48 + 25/24 + 35/32 + 7/6 + 5/4 + 245/192 + 21/16 + 35/24 + 3/2 + 49/32 + 25/16 + 5/3 + 7/4 + 175/96 + 15/8 + 2/1 diff --git a/scales/steltri1.scl b/scales/steltri1.scl new file mode 100644 index 0000000..29cc425 --- /dev/null +++ b/scales/steltri1.scl @@ -0,0 +1,11 @@ +! steltri1.scl +! +Stellated one out of 1 3 5 triany + 6 +! + 6/5 + 5/4 + 3/2 + 5/3 + 15/8 + 2/1 diff --git a/scales/steltri2.scl b/scales/steltri2.scl new file mode 100644 index 0000000..b0c5a74 --- /dev/null +++ b/scales/steltri2.scl @@ -0,0 +1,11 @@ +! steltri2.scl +! +Stellated two out of 1 3 5 triany + 6 +! + 9/8 + 5/4 + 3/2 + 25/16 + 15/8 + 2/1 diff --git a/scales/sternbrocot4.scl b/scales/sternbrocot4.scl new file mode 100644 index 0000000..6915462 --- /dev/null +++ b/scales/sternbrocot4.scl @@ -0,0 +1,20 @@ +! sternbrocot4.scl +Level 4 of the Stern-Brocot tree +16 +! +6/5 +5/4 +9/7 +4/3 +11/8 +7/5 +10/7 +3/2 +11/7 +8/5 +13/8 +5/3 +12/7 +7/4 +9/5 +2/1 diff --git a/scales/stevin.scl b/scales/stevin.scl new file mode 100644 index 0000000..eed65be --- /dev/null +++ b/scales/stevin.scl @@ -0,0 +1,17 @@ +! stevin.scl +! +Simon Stevin, monochord division of 10000 parts for 12-tET (1585) + 12 +! + 5000/4719 + 10000/8909 + 10000/8409 + 625/496 + 10000/7491 + 10000/7071 + 5000/3337 + 5000/3149 + 1250/743 + 10000/5611 + 625/331 + 2/1 diff --git a/scales/stopper.scl b/scales/stopper.scl new file mode 100644 index 0000000..51663d9 --- /dev/null +++ b/scales/stopper.scl @@ -0,0 +1,24 @@ +! stopper.scl +! +Bernard Stopper, piano tuning with 19th root of 3 (1988) + 19 +! + 100.10289 + 200.20579 + 300.30868 + 400.41158 + 500.51447 + 600.61737 + 700.72026 + 800.82316 + 900.92605 + 1001.02895 + 1101.13184 + 1201.23474 + 1301.33763 + 1401.44053 + 1501.54342 + 1601.64632 + 1701.74921 + 1801.85211 + 3/1 diff --git a/scales/storbeck.scl b/scales/storbeck.scl new file mode 100644 index 0000000..05ef610 --- /dev/null +++ b/scales/storbeck.scl @@ -0,0 +1,26 @@ +! storbeck.scl +! +Ulrich Storbeck 7-limit JI scale (2001) + 21 +! + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 27/20 + 48/35 + 35/24 + 40/27 + 3/2 + 54/35 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 2/1 diff --git a/scales/strahle.scl b/scales/strahle.scl new file mode 100644 index 0000000..7728da8 --- /dev/null +++ b/scales/strahle.scl @@ -0,0 +1,17 @@ +! strahle.scl +! +Daniel P. Strhle's Geometrical scale (1743) + 12 +! + 211/199 + 109/97 + 25/21 + 29/23 + 239/179 + 41/29 + 253/169 + 65/41 + 89/53 + 137/77 + 281/149 + 2/1 diff --git a/scales/studwacko.scl b/scales/studwacko.scl new file mode 100644 index 0000000..189f819 --- /dev/null +++ b/scales/studwacko.scl @@ -0,0 +1,45 @@ +! studwacko.scl +Tweaked miracle41s.scl, Gene Ward Smith, 2010 +41 +! +33.60446 +50.12246 +83.22129 +116.66878 +150.11628 +183.21510 +199.73311 +233.33756 +266.53967 +300.89382 +316.92405 +349.73617 +383.66091 +417.32974 +432.94139 +466.78427 +500.17066 +533.68151 +549.32740 +583.23392 +616.58329 +650.76422 +666.40459 +699.58485 +733.75271 +766.93297 +782.57334 +816.75427 +850.10364 +884.01016 +899.65606 +933.16690 +966.55329 +1000.39617 +1016.00782 +1049.67666 +1083.60139 +1116.41351 +1132.44374 +1166.79790 +2/1 diff --git a/scales/sub24-12.scl b/scales/sub24-12.scl new file mode 100644 index 0000000..ff8b4bd --- /dev/null +++ b/scales/sub24-12.scl @@ -0,0 +1,17 @@ +! sub24-12.scl +! +Subharmonics 24-12. Phrygian Harmonia-Aliquot 24 (flute tuning) + 12 +! + 24/23 + 12/11 + 8/7 + 6/5 + 24/19 + 4/3 + 24/17 + 3/2 + 8/5 + 12/7 + 24/13 + 2/1 diff --git a/scales/sub40.scl b/scales/sub40.scl new file mode 100644 index 0000000..2283b1d --- /dev/null +++ b/scales/sub40.scl @@ -0,0 +1,17 @@ +! sub40.scl +! +Subharmonics 40-20 + 12 +! + 20/19 + 10/9 + 20/17 + 5/4 + 4/3 + 10/7 + 20/13 + 8/5 + 5/3 + 20/11 + 40/21 + 2/1 diff --git a/scales/sub50.scl b/scales/sub50.scl new file mode 100644 index 0000000..7c7fc58 --- /dev/null +++ b/scales/sub50.scl @@ -0,0 +1,17 @@ +! sub50.scl +! +12 out of subharmonics 25-50 + 12 +! + 25/24 + 10/9 + 25/21 + 5/4 + 25/19 + 10/7 + 25/17 + 25/16 + 5/3 + 25/14 + 50/27 + 2/1 diff --git a/scales/sub8.scl b/scales/sub8.scl new file mode 100644 index 0000000..bd3d396 --- /dev/null +++ b/scales/sub8.scl @@ -0,0 +1,13 @@ +! sub8.scl +! +Subharmonics 16-8 + 8 +! + 16/15 + 8/7 + 16/13 + 4/3 + 16/11 + 8/5 + 16/9 + 2/1 diff --git a/scales/sullivan12.scl b/scales/sullivan12.scl new file mode 100644 index 0000000..ede9e5b --- /dev/null +++ b/scales/sullivan12.scl @@ -0,0 +1,17 @@ +! sullivan12.scl +! +John O'Sullivan, 7-limit Natural Pan Tuning (2007). 3/2 is also tonic + 12 +! + 15/14 + 9/8 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/sullivan7.scl b/scales/sullivan7.scl new file mode 100644 index 0000000..0d99682 --- /dev/null +++ b/scales/sullivan7.scl @@ -0,0 +1,12 @@ +! sullivan7.scl +! +John O'Sullivan, 7-limit just scale (2011) + 7 +! + 7/6 + 5/4 + 4/3 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/sullivan_blue.scl b/scales/sullivan_blue.scl new file mode 100644 index 0000000..7e8b6c1 --- /dev/null +++ b/scales/sullivan_blue.scl @@ -0,0 +1,17 @@ +! sullivan_blue.scl +! +John O'Sullivan, Blue Temperament (2010), many good intervals within 256/255 + 12 +! + 121.56054 + 200.73393 + 313.52356 + 388.43145 + 501.22149 + 580.39508 + 3/2 + 816.86235 + 889.44038 + 1012.51440 + 1085.09234 + 2/1 diff --git a/scales/sullivan_cjv.scl b/scales/sullivan_cjv.scl new file mode 100644 index 0000000..d415ee3 --- /dev/null +++ b/scales/sullivan_cjv.scl @@ -0,0 +1,27 @@ +! sullivan_cjv.scl +! +John O'Sullivan, 7-limit JI for Chris Vaisvil (2013) + 22 +! + 16/15 + 15/14 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 4/3 + 7/5 + 10/7 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/sullivan_raven.scl b/scales/sullivan_raven.scl new file mode 100644 index 0000000..434441b --- /dev/null +++ b/scales/sullivan_raven.scl @@ -0,0 +1,17 @@ +! sullivan_raven.scl +! +John O'Sullivan, Raven temperament v2 (2012) + 12 +! + 113.81510 + 208.99190 + 6/5 + 5/4 + 4/3 + 577.43040 + 3/2 + 810.29840 + 425/256 + 967.13200 + 32/17 + 2/1 diff --git a/scales/sullivan_ravenji.scl b/scales/sullivan_ravenji.scl new file mode 100644 index 0000000..fe72a99 --- /dev/null +++ b/scales/sullivan_ravenji.scl @@ -0,0 +1,17 @@ +! sullivan_ravenji.scl +! +John O'Sullivan, Raven JI (2016) + 12 +! + 25/24 + 9/8 + 6/5 + 5/4 + 4/3 + 7/5 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/sullivan_sh.scl b/scales/sullivan_sh.scl new file mode 100644 index 0000000..e5a0b8e --- /dev/null +++ b/scales/sullivan_sh.scl @@ -0,0 +1,17 @@ +! sullivan_sh.scl +! +John O'Sullivan, 7-limit Seventh Heaven scale (2011) + 12 +! + 15/14 + 8/7 + 7/6 + 9/7 + 21/16 + 7/5 + 10/7 + 14/9 + 12/7 + 7/4 + 27/14 + 2/1 diff --git a/scales/sullivan_zen.scl b/scales/sullivan_zen.scl new file mode 100644 index 0000000..78c396f --- /dev/null +++ b/scales/sullivan_zen.scl @@ -0,0 +1,17 @@ +! sullivan_zen.scl +! +John O'Sullivan, 7-limit just Zen scale (2011) + 12 +! + 15/14 + 9/8 + 7/6 + 9/7 + 4/3 + 7/5 + 3/2 + 14/9 + 5/3 + 9/5 + 27/14 + 2/1 diff --git a/scales/sullivan_zen2.scl b/scales/sullivan_zen2.scl new file mode 100644 index 0000000..3b19c59 --- /dev/null +++ b/scales/sullivan_zen2.scl @@ -0,0 +1,17 @@ +! sullivan_zen2.scl +! +John O'Sullivan, Zen temperament (2011) + 12 +! + 114.10000 + 203.90000 + 265.70000 + 436.20000 + 498.00000 + 587.90000 + 702.00000 + 758.40000 + 890.00000 + 1011.90000 + 1143.50000 + 2/1 diff --git a/scales/sumatra.scl b/scales/sumatra.scl new file mode 100644 index 0000000..72755a8 --- /dev/null +++ b/scales/sumatra.scl @@ -0,0 +1,14 @@ +! sumatra.scl +! +"Archeological" tuning of Pasirah Rus orch. in Muaralakitan, Sumatra. 1/1=354 Hz + 9 +! + 33.899 cents + 372.566 cents + 537.929 cents + 695.422 cents + 1030.589 cents + 1224.281 cents + 1546.741 cents + 1737.929 cents + 3/1 diff --git a/scales/super_10.scl b/scales/super_10.scl new file mode 100644 index 0000000..424de95 --- /dev/null +++ b/scales/super_10.scl @@ -0,0 +1,15 @@ +! super_10.scl +! +A superparticular 10-tone scale + 10 +! + 13/12 + 7/6 + 5/4 + 4/3 + 17/12 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/super_11.scl b/scales/super_11.scl new file mode 100644 index 0000000..e0b8af6 --- /dev/null +++ b/scales/super_11.scl @@ -0,0 +1,16 @@ +! super_11.scl +! +A superparticular 11-tone scale + 11 +! + 13/12 + 7/6 + 5/4 + 4/3 + 17/12 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 diff --git a/scales/super_12.scl b/scales/super_12.scl new file mode 100644 index 0000000..943b7a8 --- /dev/null +++ b/scales/super_12.scl @@ -0,0 +1,17 @@ +! super_12.scl +! +A superparticular 12-tone scale + 12 +! + 15/14 + 8/7 + 17/14 + 9/7 + 19/14 + 10/7 + 3/2 + 45/28 + 12/7 + 38/21 + 40/21 + 2/1 diff --git a/scales/super_13.scl b/scales/super_13.scl new file mode 100644 index 0000000..1055ff4 --- /dev/null +++ b/scales/super_13.scl @@ -0,0 +1,18 @@ +! super_13.scl +! +A superparticular 13-tone scale + 13 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 8/5 + 17/10 + 9/5 + 19/10 + 2/1 diff --git a/scales/super_15.scl b/scales/super_15.scl new file mode 100644 index 0000000..03c6328 --- /dev/null +++ b/scales/super_15.scl @@ -0,0 +1,20 @@ +! super_15.scl +! +A superparticular 15-tone scale + 15 +! + 19/18 + 10/9 + 7/6 + 11/9 + 23/18 + 4/3 + 25/18 + 35/24 + 55/36 + 115/72 + 5/3 + 7/4 + 11/6 + 23/12 + 2/1 diff --git a/scales/super_19.scl b/scales/super_19.scl new file mode 100644 index 0000000..574ef4f --- /dev/null +++ b/scales/super_19.scl @@ -0,0 +1,24 @@ +! super_19.scl +! +A superparticular 19-tone scale + 19 +! + 25/24 + 13/12 + 9/8 + 7/6 + 29/24 + 5/4 + 13/10 + 27/20 + 7/5 + 29/20 + 3/2 + 39/25 + 81/50 + 42/25 + 87/50 + 9/5 + 28/15 + 29/15 + 2/1 diff --git a/scales/super_19a.scl b/scales/super_19a.scl new file mode 100644 index 0000000..84c2a44 --- /dev/null +++ b/scales/super_19a.scl @@ -0,0 +1,24 @@ +! super_19a.scl +! +Another superparticular 19-tone scale + 19 +! + 26/25 + 27/25 + 28/25 + 29/25 + 6/5 + 56/45 + 58/45 + 4/3 + 25/18 + 13/9 + 3/2 + 39/25 + 81/50 + 42/25 + 87/50 + 9/5 + 28/15 + 29/15 + 2/1 diff --git a/scales/super_19b.scl b/scales/super_19b.scl new file mode 100644 index 0000000..71064e0 --- /dev/null +++ b/scales/super_19b.scl @@ -0,0 +1,24 @@ +! super_19b.scl +! +Another superparticular 19-tone scale + 19 +! + 33/32 + 17/16 + 9/8 + 37/32 + 19/16 + 39/32 + 5/4 + 21/16 + 11/8 + 23/16 + 3/2 + 25/16 + 13/8 + 27/16 + 7/4 + 29/16 + 15/8 + 31/16 + 2/1 diff --git a/scales/super_22.scl b/scales/super_22.scl new file mode 100644 index 0000000..30f1e1c --- /dev/null +++ b/scales/super_22.scl @@ -0,0 +1,27 @@ +! super_22.scl +! +A superparticular 22-tone scale + 22 +! + 29/28 + 15/14 + 31/28 + 8/7 + 33/28 + 17/14 + 5/4 + 31/24 + 4/3 + 11/8 + 17/12 + 35/24 + 3/2 + 87/56 + 45/28 + 93/56 + 12/7 + 62/35 + 64/35 + 66/35 + 68/35 + 2/1 diff --git a/scales/super_22a.scl b/scales/super_22a.scl new file mode 100644 index 0000000..604396d --- /dev/null +++ b/scales/super_22a.scl @@ -0,0 +1,27 @@ +! super_22a.scl +! +Another superparticular 22-tone scale + 22 +! + 26/25 + 27/25 + 28/25 + 29/25 + 6/5 + 87/70 + 9/7 + 93/70 + 48/35 + 99/70 + 51/35 + 3/2 + 31/20 + 8/5 + 33/20 + 17/10 + 7/4 + 9/5 + 37/20 + 19/10 + 39/20 + 2/1 diff --git a/scales/super_24.scl b/scales/super_24.scl new file mode 100644 index 0000000..8ffde4e --- /dev/null +++ b/scales/super_24.scl @@ -0,0 +1,29 @@ +! super_24.scl +! +Superparticular 24-tone scale, inverse of Mans.ur 'Awad + 24 +! + 31/30 + 16/15 + 11/10 + 17/15 + 7/6 + 6/5 + 37/30 + 19/15 + 13/10 + 4/3 + 11/8 + 17/12 + 35/24 + 3/2 + 31/20 + 8/5 + 33/20 + 17/10 + 7/4 + 9/5 + 37/20 + 19/10 + 39/20 + 2/1 diff --git a/scales/super_8.scl b/scales/super_8.scl new file mode 100644 index 0000000..7bb7d22 --- /dev/null +++ b/scales/super_8.scl @@ -0,0 +1,13 @@ +! super_8.scl +! +A superparticular 8-tone scale + 8 +! + 11/10 + 6/5 + 13/10 + 7/5 + 3/2 + 5/3 + 11/6 + 2/1 diff --git a/scales/super_9.scl b/scales/super_9.scl new file mode 100644 index 0000000..a2fc635 --- /dev/null +++ b/scales/super_9.scl @@ -0,0 +1,14 @@ +! super_9.scl +! +A superparticular 9-tone scale + 9 +! + 11/10 + 6/5 + 13/10 + 7/5 + 3/2 + 13/8 + 7/4 + 15/8 + 2/1 diff --git a/scales/superfif7a.scl b/scales/superfif7a.scl new file mode 100644 index 0000000..8035164 --- /dev/null +++ b/scales/superfif7a.scl @@ -0,0 +1,14 @@ +! superfif7a.scl +! +3/2 repeating 12-tET patent val. August-Dominant-Diminished-Pajara-Injera-Schism superduperwakalix +! august: -5 to 1; dominant: -2 to 4; diminished: -4 to 2 +! pajara: -5 to 1; injera: -2 to 4; schism: -6 to 0 +7 +! +15/14 +10/9 +7/6 +5/4 +4/3 +10/7 +3/2 diff --git a/scales/suppig.scl b/scales/suppig.scl new file mode 100644 index 0000000..7795834 --- /dev/null +++ b/scales/suppig.scl @@ -0,0 +1,24 @@ +! suppig.scl +! +Friedrich Suppig's 19-tone JI scale. Calculus Musicus, Berlin 1722 + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 125/96 + 4/3 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/surupan_7.scl b/scales/surupan_7.scl new file mode 100644 index 0000000..7d6dc9a --- /dev/null +++ b/scales/surupan_7.scl @@ -0,0 +1,12 @@ +! surupan_7.scl +! +7-tone surupan (Sunda) + 7 +! + 120.000 + 390.000 + 510.000 + 660.000 + 780.000 + 1050.000 + 2/1 diff --git a/scales/surupan_9.scl b/scales/surupan_9.scl new file mode 100644 index 0000000..aefba83 --- /dev/null +++ b/scales/surupan_9.scl @@ -0,0 +1,14 @@ +! surupan_9.scl +! +Theoretical nine-tone surupan gamut + 9 +! + 120.000 cents + 270.000 cents + 390.000 cents + 510.000 cents + 660.000 cents + 780.000 cents + 930.000 cents + 1050.000 cents + 2/1 diff --git a/scales/surupan_ajeng.scl b/scales/surupan_ajeng.scl new file mode 100644 index 0000000..67e5efc --- /dev/null +++ b/scales/surupan_ajeng.scl @@ -0,0 +1,10 @@ +! surupan_ajeng.scl +! +Surupan ajeng, West-Java + 5 +! + 150.00000 + 270.00000 + 660.00000 + 810.00000 + 2/1 diff --git a/scales/surupan_degung.scl b/scales/surupan_degung.scl new file mode 100644 index 0000000..09dd795 --- /dev/null +++ b/scales/surupan_degung.scl @@ -0,0 +1,10 @@ +! surupan_degung.scl +! +Surupan degung, Sunda + 5 +! + 360.00000 + 480.00000 + 720.00000 + 1080.00000 + 2/1 diff --git a/scales/surupan_madenda.scl b/scales/surupan_madenda.scl new file mode 100644 index 0000000..9b778f3 --- /dev/null +++ b/scales/surupan_madenda.scl @@ -0,0 +1,10 @@ +! surupan_madenda.scl +! +Surupan madenda + 5 +! + 360.000 cents + 480.000 cents + 840.000 cents + 1080.000 cents + 2/1 diff --git a/scales/surupan_melog.scl b/scales/surupan_melog.scl new file mode 100644 index 0000000..4cf13fb --- /dev/null +++ b/scales/surupan_melog.scl @@ -0,0 +1,10 @@ +! surupan_melog.scl +! +Surupan melog jawar, West-Java + 5 +! + 120.00000 + 270.00000 + 660.00000 + 780.00000 + 2/1 diff --git a/scales/surupan_miring.scl b/scales/surupan_miring.scl new file mode 100644 index 0000000..7b0d1bd --- /dev/null +++ b/scales/surupan_miring.scl @@ -0,0 +1,10 @@ +! surupan_miring.scl +! +Surupan miring, West-Java + 5 +! + 150.00000 + 270.00000 + 690.00000 + 810.00000 + 2/1 diff --git a/scales/surupan_x.scl b/scales/surupan_x.scl new file mode 100644 index 0000000..918a97a --- /dev/null +++ b/scales/surupan_x.scl @@ -0,0 +1,10 @@ +! surupan_x.scl +! +Surupan tone-gender X (= unmodified nyorog) + 5 +! + 120.000 cents + 270.000 cents + 660.000 cents + 810.000 cents + 2/1 diff --git a/scales/surupan_y.scl b/scales/surupan_y.scl new file mode 100644 index 0000000..f57f5f3 --- /dev/null +++ b/scales/surupan_y.scl @@ -0,0 +1,10 @@ +! surupan_y.scl +! +Surupan tone-gender Y (= mode on pamiring) + 5 +! + 120.000 cents + 240.000 cents + 660.000 cents + 780.000 cents + 2/1 diff --git a/scales/sverige.scl b/scales/sverige.scl new file mode 100644 index 0000000..e8954e5 --- /dev/null +++ b/scales/sverige.scl @@ -0,0 +1,29 @@ +! sverige.scl +! +Scale on Swedish 50 crown banknote with Swedish fiddle + 24 +! + 200.00000 + 400.00000 + 500.00000 + 700.00000 + 900.00000 + 1000.00000 + 1100.00000 + 2/1 + 1300.00000 + 1400.00000 + 1500.00000 + 1600.00000 + 1700.00000 + 1800.00000 + 1900.00000 + 2000.00000 + 2100.00000 + 2200.00000 + 2300.00000 + 4/1 + 2600.00000 + 2800.00000 + 2900.00000 + 3100.00000 diff --git a/scales/syntonolydian.scl b/scales/syntonolydian.scl new file mode 100644 index 0000000..0c168fb --- /dev/null +++ b/scales/syntonolydian.scl @@ -0,0 +1,12 @@ +! syntonolydian.scl +! +Greek Syntonolydian, also genus duplicatum medium, or ditonum (Al-Farabi) + 7 +! + 9/8 + 81/64 + 729/512 + 3/2 + 27/16 + 243/128 + 2/1 diff --git a/scales/syrian.scl b/scales/syrian.scl new file mode 100644 index 0000000..9416de3 --- /dev/null +++ b/scales/syrian.scl @@ -0,0 +1,35 @@ +! syrian.scl +! +d'Erlanger vol.5, p. 29. After ^Sayh.'Ali ad-Darwis^ (Shaykh Darvish) + 30 +! + 800/779 + 256/243 + 2187/2048 + 35073/32000 + 9/8 + 500/433 + 32/27 + 19683/16384 + 315657/256000 + 8192/6561 + 81/64 + 1299/1000 + 4/3 + 16000/11691 + 1024/729 + 729/512 + 11691/8000 + 3/2 + 2000/1299 + 128/81 + 6561/4096 + 105219/64000 + 27/16 + 433/250 + 16/9 + 64000/35073 + 4096/2187 + 243/128 + 3897/2000 + 2/1 diff --git a/scales/t-side.scl b/scales/t-side.scl new file mode 100644 index 0000000..06e4fa1 --- /dev/null +++ b/scales/t-side.scl @@ -0,0 +1,17 @@ +! t-side.scl +! +Tau-on-Side + 12 +! + 25/24 + 16/15 + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 15/8 + 2/1 diff --git a/scales/t-side2.scl b/scales/t-side2.scl new file mode 100644 index 0000000..3d215d2 --- /dev/null +++ b/scales/t-side2.scl @@ -0,0 +1,17 @@ +! t-side2.scl +! +Tau-on-Side opposite + 12 +! + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 225/128 + 9/5 + 15/8 + 2/1 diff --git a/scales/tagawa_55.scl b/scales/tagawa_55.scl new file mode 100644 index 0000000..2788f0d --- /dev/null +++ b/scales/tagawa_55.scl @@ -0,0 +1,60 @@ +! tagawa_55.scl +! +Rick Tagawa, 17-limit diamond subset with good 72-tET approximation (2003) + 55 +! + 18/17 + 17/16 + 16/15 + 15/14 + 14/13 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 17/15 + 8/7 + 15/13 + 7/6 + 20/17 + 13/11 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 4/3 + 15/11 + 11/8 + 18/13 + 7/5 + 24/17 + 17/12 + 10/7 + 13/9 + 16/11 + 22/15 + 3/2 + 14/9 + 11/7 + 8/5 + 18/11 + 5/3 + 22/13 + 17/10 + 12/7 + 26/15 + 7/4 + 30/17 + 16/9 + 9/5 + 20/11 + 11/6 + 24/13 + 13/7 + 28/15 + 15/8 + 32/17 + 17/9 + 2/1 diff --git a/scales/tamil.scl b/scales/tamil.scl new file mode 100644 index 0000000..24daaee --- /dev/null +++ b/scales/tamil.scl @@ -0,0 +1,27 @@ +! tamil.scl +! +Possible Tamil sruti scale. Alternative 11th sruti is 45/32 or 64/45 + 22 +! + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 4/3 + 27/20 + 729/512 + 40/27 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 16/9 + 9/5 + 15/8 + 243/128 + 2/1 diff --git a/scales/tamil_vi.scl b/scales/tamil_vi.scl new file mode 100644 index 0000000..00732ea --- /dev/null +++ b/scales/tamil_vi.scl @@ -0,0 +1,17 @@ +! tamil_vi.scl +! +Vilarippalai scale in Tamil music, Vidyasankar Sundaresan + 12 +! + 256/243 + 10/9 + 32/27 + 5/4 + 4/3 + 45/32 + 40/27 + 128/81 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/tamil_vi2.scl b/scales/tamil_vi2.scl new file mode 100644 index 0000000..ba79a37 --- /dev/null +++ b/scales/tamil_vi2.scl @@ -0,0 +1,17 @@ +! tamil_vi2.scl +! +Vilarippalai scale with 1024/729 tritone + 12 +! + 256/243 + 10/9 + 32/27 + 5/4 + 4/3 + 1024/729 + 40/27 + 128/81 + 5/3 + 16/9 + 15/8 + 2/1 diff --git a/scales/tanaka.scl b/scales/tanaka.scl new file mode 100644 index 0000000..003235b --- /dev/null +++ b/scales/tanaka.scl @@ -0,0 +1,31 @@ +! tanaka.scl +! +26-note choice system of Shoh Tanaka, Studien i.G.d. reinen Stimmung (1890) + 26 +! + 25/24 + 135/128 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 81/64 + 675/512 + 4/3 + 27/20 + 25/18 + 45/32 + 64/45 + 40/27 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/tanbur.scl b/scales/tanbur.scl new file mode 100644 index 0000000..d026850 --- /dev/null +++ b/scales/tanbur.scl @@ -0,0 +1,17 @@ +! tanbur.scl +! +Sub-40 tanbur scale + 12 +! + 40/39 + 20/19 + 40/37 + 10/9 + 8/7 + 320/273 + 160/133 + 320/259 + 80/63 + 64/49 + 160/119 + 2/1 diff --git a/scales/tansur.scl b/scales/tansur.scl new file mode 100644 index 0000000..ea544cd --- /dev/null +++ b/scales/tansur.scl @@ -0,0 +1,17 @@ +! tansur.scl +! +William Tans'ur temperament from A New Musical Grammar (1746) p. 73 + 12 +! + 90.79526 + 197.20630 + 32/27 + 392.56607 + 4/3 + 588.84026 + 699.08516 + 792.75026 + 894.03623 + 16/9 + 1089.94363 + 2/1 diff --git a/scales/tapek-ribbon.scl b/scales/tapek-ribbon.scl new file mode 100644 index 0000000..2e430a7 --- /dev/null +++ b/scales/tapek-ribbon.scl @@ -0,0 +1,23 @@ +! tapek-ribbon.scl +! +Eq-diff ribbon extension of Superpyth, made of two Tapek sequences +12 +! +1777/1656 ! C# +627/552 ! D +173/138 ! E +4273/3312 ! E+ +1465/1104 ! F +131/92 ! F# +104/69 ! G +3673/2208 ! A +945/552 ! A+ +243/138 ! Bb +1043/552 ! B +2/1 +! Tapek -c and triple h.eq-b recurrent sequence 3x^3 = x^2 + 8 +! and Superpyth temperament (generator = 710.25498677616 c.) +! completed by the arithmetical mean ribbon y = (1 + x)/2, +! equal-differential frequencies of all [7:6:5:4] tetrads +! main sequence : 243 1465 69 13 627 945 4273/3 ... (C = 69) +! major third sequence : 3673 173 1043 393 1777/3... diff --git a/scales/tartini_7.scl b/scales/tartini_7.scl new file mode 100644 index 0000000..be7273a --- /dev/null +++ b/scales/tartini_7.scl @@ -0,0 +1,12 @@ +! tartini_7.scl +! +Tartini (1754) with 2 neochromatic tetrachords, 1/1=d, Minor Gipsy (Slovakia) + 7 +! + 9/8 + 6/5 + 45/32 + 3/2 + 8/5 + 15/8 + 2/1 diff --git a/scales/taylor_g.scl b/scales/taylor_g.scl new file mode 100644 index 0000000..d34f6fb --- /dev/null +++ b/scales/taylor_g.scl @@ -0,0 +1,17 @@ +! taylor_g.scl +! +Gregory Taylor's Dutch train ride scale based on pelog_schmidt + 12 +! + 21/20 + 11/10 + 9/8 + 6/5 + 27/20 + 7/5 + 3/2 + 63/40 + 8/5 + 33/20 + 9/5 + 2/1 diff --git a/scales/taylor_n.scl b/scales/taylor_n.scl new file mode 100644 index 0000000..852d878 --- /dev/null +++ b/scales/taylor_n.scl @@ -0,0 +1,17 @@ +! taylor_n.scl +! +Nigel Taylor's Circulating Balanced temperament (20th cent.) + 12 +! + 92.18000 + 194.13500 + 296.09000 + 388.26999 + 4/3 + 590.22500 + 697.06750 + 794.13500 + 891.20250 + 998.04500 + 1090.22500 + 2/1 diff --git a/scales/telemann.scl b/scales/telemann.scl new file mode 100644 index 0000000..f4d9d34 --- /dev/null +++ b/scales/telemann.scl @@ -0,0 +1,49 @@ +! telemann.scl +! +G.Ph. Telemann (1767). 55-tET interpretation of Klang- und Intervallen-Tafel + 44 +! + 21.81818 + 65.45455 + 87.27273 + 109.09091 + 130.90909 + 174.54545 + 196.36364 + 218.18182 + 240.00000 + 261.81818 + 283.63636 + 305.45455 + 327.27273 + 370.90909 + 392.72727 + 414.54545 + 436.36364 + 480.00000 + 501.81818 + 523.63636 + 567.27273 + 589.09091 + 610.90909 + 632.72727 + 676.36364 + 698.18182 + 720.00000 + 763.63636 + 785.45455 + 807.27273 + 829.09091 + 872.72727 + 894.54545 + 916.36364 + 938.18182 + 981.81818 + 1003.63636 + 1025.45455 + 1069.09091 + 1090.90909 + 1112.72727 + 1134.54545 + 1178.18182 + 2/1 diff --git a/scales/telemann_28.scl b/scales/telemann_28.scl new file mode 100644 index 0000000..1193323 --- /dev/null +++ b/scales/telemann_28.scl @@ -0,0 +1,33 @@ +! telemann_28.scl +! +Telemann's tuning as described on Sorge's monochord, 1746, 1748, 1749 + 28 +! + 21.81818 + 87.27273 + 109.09091 + 196.36364 + 218.18182 + 283.63636 + 305.45455 + 392.72727 + 414.54545 + 480.00000 + 501.81818 + 523.63636 + 589.09091 + 610.90909 + 676.36364 + 698.18182 + 720.00000 + 763.63636 + 785.45455 + 894.54545 + 916.36364 + 981.81818 + 1003.63636 + 1025.45455 + 1090.90909 + 1112.72727 + 1178.18182 + 2/1 diff --git a/scales/temes-mix.scl b/scales/temes-mix.scl new file mode 100644 index 0000000..d7737d5 --- /dev/null +++ b/scales/temes-mix.scl @@ -0,0 +1,14 @@ +! temes-mix.scl +! +Temes' 5-tone Phi scale mixed with its octave inverse + 9 +! + 273.02400 + 366.90970 + 466.18100 + 560.06700 + 639.93400 + 733.82000 + 833.09030 + 926.97700 + 2/1 diff --git a/scales/temes.scl b/scales/temes.scl new file mode 100644 index 0000000..ccd16da --- /dev/null +++ b/scales/temes.scl @@ -0,0 +1,10 @@ +! temes.scl +! +Lorne Temes' 5-tone phi scale (1970) + 5 +! + 273.02400 + 366.91000 + 466.18100 + 560.06700 + 833.09030 diff --git a/scales/temes2-mix.scl b/scales/temes2-mix.scl new file mode 100644 index 0000000..3823ae8 --- /dev/null +++ b/scales/temes2-mix.scl @@ -0,0 +1,23 @@ +! temes2-mix.scl +! +Temes' 2 cycle Phi scale mixed with its 4/1 inverse + 18 +! + 273.02400 + 366.90970 + 466.18100 + 560.06700 + 733.82000 + 833.09030 + 1006.84400 + 1106.11400 + 2/1 + 1293.88700 + 1393.15700 + 1566.90970 + 1666.18000 + 1839.93400 + 1933.82000 + 2033.09030 + 2126.97700 + 4/1 diff --git a/scales/temes2.scl b/scales/temes2.scl new file mode 100644 index 0000000..429a011 --- /dev/null +++ b/scales/temes2.scl @@ -0,0 +1,15 @@ +! temes2.scl +! +Lorne Temes' 5-tone Phi scale / 2 cycle (1970) + 10 +! + 273.02400 + 366.91000 + 466.18100 + 560.06700 + 833.09030 + 1106.11400 + 2/1 + 1299.27100 + 1393.15700 + 1666.18059 diff --git a/scales/temp10ebss.scl b/scales/temp10ebss.scl new file mode 100644 index 0000000..c762612 --- /dev/null +++ b/scales/temp10ebss.scl @@ -0,0 +1,15 @@ +! temp10ebss.scl +! +Cycle of 10 equal "beating" 15/14's + 10 +! + 120.18917 + 240.32830 + 360.42075 + 480.46967 + 600.47799 + 720.44845 + 840.38358 + 960.28577 + 1080.15722 + 2/1 diff --git a/scales/temp11ebst.scl b/scales/temp11ebst.scl new file mode 100644 index 0000000..7170e29 --- /dev/null +++ b/scales/temp11ebst.scl @@ -0,0 +1,16 @@ +! temp11ebst.scl +! +Cycle of 11 equal beating 9/7's + 11 +! + 109.34585 + 218.44143 + 327.30253 + 436.80330 + 546.04397 + 655.04102 + 763.80980 + 873.22337 + 982.38238 + 1091.30292 + 2/1 diff --git a/scales/temp12bf1.scl b/scales/temp12bf1.scl new file mode 100644 index 0000000..5ccfb86 --- /dev/null +++ b/scales/temp12bf1.scl @@ -0,0 +1,17 @@ +! temp12bf1.scl +! +Temperament with fifths beating 1.0 Hz at 1/1=256 Hz + 12 +! + 101.99734 + 200.14890 + 298.98883 + 400.70883 + 499.73483 + 601.63553 + 699.69932 + 801.82580 + 900.09464 + 999.04612 + 1100.87447 + 2/1 diff --git a/scales/temp12ebf.scl b/scales/temp12ebf.scl new file mode 100644 index 0000000..2a1db7f --- /dev/null +++ b/scales/temp12ebf.scl @@ -0,0 +1,17 @@ +! temp12ebf.scl +! +Equal beating temperament, Barthold Fritz (1756), The Best Factory Tuners (1840) + 12 +! + 100.03402 + 199.51879 + 299.79965 + 399.51600 + 500.01741 + 599.94075 + 699.32161 + 799.50359 + 899.12725 + 999.54025 + 1099.38074 + 2/1 diff --git a/scales/temp12ebf4.scl b/scales/temp12ebf4.scl new file mode 100644 index 0000000..9456295 --- /dev/null +++ b/scales/temp12ebf4.scl @@ -0,0 +1,17 @@ +! temp12ebf4.scl +! +Eleven equal beating fifths and just fourth + 12 +! + 1522037/1437621 + 1612853/1437621 + 1707821/1437621 + 1809989/1437621 + 4/3 + 2031767/1437621 + 2152855/1437621 + 2279479/1437621 + 2415703/1437621 + 2558155/1437621 + 2711407/1437621 + 2/1 diff --git a/scales/temp12ebfo.scl b/scales/temp12ebfo.scl new file mode 100644 index 0000000..48c88e8 --- /dev/null +++ b/scales/temp12ebfo.scl @@ -0,0 +1,17 @@ +! temp12ebfo.scl +! +Equal beating fifths and fifth beats equal octave opposite at C + 12 +! + 100.16688 + 200.08089 + 300.36118 + 400.38196 + 500.76339 + 600.87937 + 700.74546 + 800.98036 + 900.95840 + 1001.29935 + 1101.37723 + 1201.81274 diff --git a/scales/temp12ebfo2o.scl b/scales/temp12ebfo2o.scl new file mode 100644 index 0000000..f547ccd --- /dev/null +++ b/scales/temp12ebfo2o.scl @@ -0,0 +1,17 @@ +! temp12ebfo2o.scl +! +Equal beating fifths and fifth beats twice octave opposite at C + 12 +! + 100.12507 + 199.90373 + 300.18427 + 400.10916 + 500.52841 + 600.58372 + 700.29676 + 800.51506 + 900.38140 + 1000.74512 + 1100.74823 + 1201.24166 diff --git a/scales/temp12ebfp.scl b/scales/temp12ebfp.scl new file mode 100644 index 0000000..09ab129 --- /dev/null +++ b/scales/temp12ebfp.scl @@ -0,0 +1,17 @@ +! temp12ebfp.scl +! +All fifths except G#-Eb beat same as 700 c. C-G + 12 +! + 103.55897 + 200.65044 + 298.34297 + 401.65789 + 499.50980 + 602.98376 + 700.00000 + 803.67255 + 900.86449 + 998.65259 + 1102.06287 + 2/1 diff --git a/scales/temp12ebfr.scl b/scales/temp12ebfr.scl new file mode 100644 index 0000000..ea9defe --- /dev/null +++ b/scales/temp12ebfr.scl @@ -0,0 +1,17 @@ +! temp12ebfr.scl +! +Exact values of equal beating temperament of Best Factory Tuners (1840) + 12 +! + 1662005/1568693 + 1760309/1568693 + 1865285/1568693 + 1975877/1568693 + 2093975/1568693 + 10223/7229 + 2349463/1568693 + 355633/224099 + 2636887/1568693 + 399193/224099 + 2960239/1568693 + 2/1 diff --git a/scales/temp12ep.scl b/scales/temp12ep.scl new file mode 100644 index 0000000..04cb45e --- /dev/null +++ b/scales/temp12ep.scl @@ -0,0 +1,17 @@ +! temp12ep.scl +! +Pythagorean comma distributed equally over octave and fifth: 1/19-Pyth comma + 12 +! + 100.10289 + 200.20579 + 300.30868 + 400.41158 + 500.51447 + 600.61737 + 700.72026 + 800.82316 + 900.92605 + 1001.02895 + 1101.13184 + 1201.23474 diff --git a/scales/temp12fo1o.scl b/scales/temp12fo1o.scl new file mode 100644 index 0000000..bbcdeeb --- /dev/null +++ b/scales/temp12fo1o.scl @@ -0,0 +1,17 @@ +! temp12fo1o.scl +! +Fifth beats equal octave opposite + 12 +! + 100.13028 + 200.26056 + 300.39084 + 400.52112 + 500.65141 + 600.78169 + 700.91197 + 801.04225 + 901.17253 + 1001.30281 + 1101.43309 + 1201.56337 diff --git a/scales/temp12fo2o.scl b/scales/temp12fo2o.scl new file mode 100644 index 0000000..6d41abc --- /dev/null +++ b/scales/temp12fo2o.scl @@ -0,0 +1,17 @@ +! temp12fo2o.scl +! +Fifth beats twice octave opposite + 12 +! + 100.08496 + 200.16992 + 300.25488 + 400.33984 + 500.42480 + 600.50975 + 700.59471 + 800.67967 + 900.76463 + 1000.84959 + 1100.93455 + 1201.01951 diff --git a/scales/temp12k4.scl b/scales/temp12k4.scl new file mode 100644 index 0000000..3e6d66f --- /dev/null +++ b/scales/temp12k4.scl @@ -0,0 +1,17 @@ +! temp12k4.scl +! +Temperament with 4 1/4-comma fifths + 12 +! + 91.44607 + 193.15686 + 294.86764 + 5/4 + 498.28921 + 589.73529 + 696.57843 + 793.15686 + 889.73529 + 996.57843 + 1088.02450 + 2/1 diff --git a/scales/temp12p10.scl b/scales/temp12p10.scl new file mode 100644 index 0000000..f8c4fde --- /dev/null +++ b/scales/temp12p10.scl @@ -0,0 +1,17 @@ +! temp12p10.scl +! +1/10-Pyth. comma well temperament + 12 +! + 99.60900 + 199.21800 + 298.82700 + 398.43600 + 500.39100 + 597.65400 + 699.60900 + 799.21800 + 898.82700 + 998.43600 + 1098.04500 + 2/1 diff --git a/scales/temp12p6.scl b/scales/temp12p6.scl new file mode 100644 index 0000000..d08b95c --- /dev/null +++ b/scales/temp12p6.scl @@ -0,0 +1,17 @@ +! temp12p6.scl +! +Modified 1/6-Pyth. comma temperament + 12 +! + 256/243 + 196.09000 + 32/27 + 392.18000 + 501.95500 + 590.22500 + 698.04500 + 128/81 + 894.13500 + 1000.00000 + 1090.22500 + 2/1 diff --git a/scales/temp12p8.scl b/scales/temp12p8.scl new file mode 100644 index 0000000..f2761fb --- /dev/null +++ b/scales/temp12p8.scl @@ -0,0 +1,17 @@ +! temp12p8.scl +! +1/8-Pyth. comma well temperament + 12 +! + 99.02250 + 198.04500 + 297.06750 + 396.09000 + 500.97750 + 597.06750 + 699.02250 + 798.04500 + 897.06750 + 999.02250 + 1095.11250 + 2/1 diff --git a/scales/temp12p8a.scl b/scales/temp12p8a.scl new file mode 100644 index 0000000..aa40227 --- /dev/null +++ b/scales/temp12p8a.scl @@ -0,0 +1,17 @@ +! temp12p8a.scl +! +1/8-Pyth. comma well temperament, consecutive just fifths + 12 +! + 96.09000 + 198.04500 + 300.00000 + 396.09000 + 500.97750 + 594.13500 + 699.02250 + 798.04500 + 897.06750 + 1001.95500 + 1095.11250 + 2/1 diff --git a/scales/temp12rwt.scl b/scales/temp12rwt.scl new file mode 100644 index 0000000..a24470b --- /dev/null +++ b/scales/temp12rwt.scl @@ -0,0 +1,17 @@ +! temp12rwt.scl +! +[2 3 17 19] well temperament + 12 +! + 19/18 + 323/288 + 19/16 + 64/51 + 4/3 + 24/17 + 3/2 + 19/12 + 57/34 + 16/9 + 32/17 + 2/1 diff --git a/scales/temp12septendec.scl b/scales/temp12septendec.scl new file mode 100644 index 0000000..ac1ebdf --- /dev/null +++ b/scales/temp12septendec.scl @@ -0,0 +1,17 @@ +! temp12septendec.scl +! +Scale with 18/17 steps + 12 +! + 18/17 + 324/289 + 5832/4913 + 104976/83521 + 1889568/1419857 + 34012224/24137569 + 612220032/410338673 + 791.63700 + 890.59100 + 989.54600 + 17/9 + 2/1 diff --git a/scales/temp12w2b.scl b/scales/temp12w2b.scl new file mode 100644 index 0000000..bc8e239 --- /dev/null +++ b/scales/temp12w2b.scl @@ -0,0 +1,17 @@ +! temp12w2b.scl +! +The fifths on white keys beat twice the amount of fifths on black keys + 12 +! + 97.64740 + 198.37690 + 298.94478 + 397.35370 + 500.52914 + 596.86680 + 698.63726 + 798.03530 + 897.37367 + 999.50477 + 1096.67190 + 2/1 diff --git a/scales/temp152-171.scl b/scales/temp152-171.scl new file mode 100644 index 0000000..9c07ee6 --- /dev/null +++ b/scales/temp152-171.scl @@ -0,0 +1,43 @@ +! temp152-171.scl +! +152&171 temperament, 2 cycles of 19-tET separated by one step of 171-tET + 38 +! + 7.01754 + 63.15789 + 70.17544 + 126.31579 + 133.33333 + 189.47368 + 196.49123 + 252.63158 + 259.64912 + 315.78947 + 322.80702 + 378.94737 + 385.96491 + 442.10526 + 449.12281 + 505.26316 + 512.28070 + 568.42105 + 575.43860 + 631.57895 + 638.59649 + 694.73684 + 701.75439 + 757.89474 + 764.91228 + 821.05263 + 828.07018 + 884.21053 + 891.22807 + 947.36842 + 954.38596 + 1010.52632 + 1017.54386 + 1073.68421 + 1080.70175 + 1136.84211 + 1143.85965 + 2/1 diff --git a/scales/temp15coh.scl b/scales/temp15coh.scl new file mode 100644 index 0000000..d410341 --- /dev/null +++ b/scales/temp15coh.scl @@ -0,0 +1,20 @@ +! temp15coh.scl +! +Differential coherent 15-tone scale, OdC, 2003 + 15 +! + 79.92106 + 159.85997 + 239.98331 + 320.10702 + 400.23104 + 480.34408 + 554.94648 + 635.29081 + 715.61676 + 795.93352 + 879.95478 + 960.08632 + 1040.21703 + 1120.09807 + 2/1 diff --git a/scales/temp15ebmt.scl b/scales/temp15ebmt.scl new file mode 100644 index 0000000..a5fb0e5 --- /dev/null +++ b/scales/temp15ebmt.scl @@ -0,0 +1,20 @@ +! temp15ebmt.scl +! +Cycle of 15 equal beating minor thirds + 15 +! + 80.84979 + 160.86950 + 240.10459 + 321.54836 + 402.12907 + 481.89451 + 560.88910 + 642.09685 + 722.45469 + 802.00947 + 880.80477 + 961.81688 + 1041.98993 + 1121.37002 + 2/1 diff --git a/scales/temp15ebsi.scl b/scales/temp15ebsi.scl new file mode 100644 index 0000000..60d64b7 --- /dev/null +++ b/scales/temp15ebsi.scl @@ -0,0 +1,20 @@ +! temp15ebsi.scl +! +Cycle of 15 equal beating major sixths + 15 +! + 80.58071 + 160.34615 + 239.34075 + 320.54850 + 400.90633 + 480.46112 + 559.25642 + 640.26852 + 720.44158 + 799.82166 + 878.45164 + 959.30144 + 1039.32115 + 1118.55623 + 2/1 diff --git a/scales/temp15mt.scl b/scales/temp15mt.scl new file mode 100644 index 0000000..ce19329 --- /dev/null +++ b/scales/temp15mt.scl @@ -0,0 +1,20 @@ +! temp15mt.scl +! +Cycle of 15 minor thirds, Petr Parizek + 15 +! + 67.97000 + 181.05250 + 249.02250 + 316.99250 + 384.96250 + 4/3 + 566.01500 + 633.98500 + 3/2 + 815.03750 + 883.00750 + 950.97750 + 1018.94750 + 1132.03000 + 2/1 diff --git a/scales/temp15rbt.scl b/scales/temp15rbt.scl new file mode 100644 index 0000000..036717a --- /dev/null +++ b/scales/temp15rbt.scl @@ -0,0 +1,20 @@ +! temp15rbt.scl +! +Cycle of 15 minor thirds, 6/5 equal beats 5/4 opposite + 15 +! + 67.79481 + 135.58962 + 203.38443 + 316.94870 + 384.74351 + 452.53832 + 520.33313 + 633.89740 + 701.69221 + 769.48702 + 883.05130 + 950.84611 + 1018.64092 + 1086.43572 + 2/1 diff --git a/scales/temp16d3.scl b/scales/temp16d3.scl new file mode 100644 index 0000000..b9a8cdd --- /dev/null +++ b/scales/temp16d3.scl @@ -0,0 +1,21 @@ +! temp16d3.scl +! +Cycle of 16 thirds tempered by 1/3 small diesis + 16 +! + 25/24 + 164.42524 + 235.09767 + 305.77010 + 376.44252 + 447.11495 + 517.78738 + 611.54020 + 682.21262 + 752.88505 + 823.55748 + 894.22990 + 27648/15625 + 1152/625 + 48/25 + 2/1 diff --git a/scales/temp16d4.scl b/scales/temp16d4.scl new file mode 100644 index 0000000..562c2df --- /dev/null +++ b/scales/temp16d4.scl @@ -0,0 +1,21 @@ +! temp16d4.scl +! +Cycle of 16 thirds tempered by 1/4 small diesis + 16 +! + 63.26903 + 189.10322 + 252.37225 + 6/5 + 378.91032 + 442.17936 + 505.44839 + 36/25 + 694.55161 + 757.82064 + 821.08968 + 5/3 + 1010.19290 + 1073.46193 + 1136.73097 + 2/1 diff --git a/scales/temp16ebs.scl b/scales/temp16ebs.scl new file mode 100644 index 0000000..3cd6a0e --- /dev/null +++ b/scales/temp16ebs.scl @@ -0,0 +1,21 @@ +! temp16ebs.scl +! +Cycle of 16 equal beating sevenths + 16 +! + 75.93089 + 150.50906 + 223.81417 + 300.06152 + 374.93725 + 448.52255 + 525.04899 + 600.18703 + 674.01928 + 750.79160 + 826.16068 + 900.21036 + 977.19912 + 1052.77153 + 1127.01252 + 2/1 diff --git a/scales/temp16ebt.scl b/scales/temp16ebt.scl new file mode 100644 index 0000000..f4ccb26 --- /dev/null +++ b/scales/temp16ebt.scl @@ -0,0 +1,21 @@ +! temp16ebt.scl +! +Cycle of 16 equal beating thirds + 16 +! + 77.11806 + 152.68067 + 226.78366 + 299.51467 + 370.95403 + 448.74413 + 524.93656 + 599.63088 + 672.91799 + 744.88113 + 823.21734 + 899.92125 + 975.09547 + 1048.83362 + 1121.22134 + 2/1 diff --git a/scales/temp16l4.scl b/scales/temp16l4.scl new file mode 100644 index 0000000..f1f3e45 --- /dev/null +++ b/scales/temp16l4.scl @@ -0,0 +1,21 @@ +! temp16l4.scl +! +Cycle of 16 fifths tempered by 1/4 major limma + 16 +! + 110.19290 + 157.82064 + 268.01354 + 6/5 + 363.26903 + 473.46193 + 521.08968 + 36/25 + 678.91032 + 789.10322 + 836.73097 + 5/3 + 994.55161 + 1042.17936 + 1152.37225 + 2/1 diff --git a/scales/temp17ebf.scl b/scales/temp17ebf.scl new file mode 100644 index 0000000..9bc354c --- /dev/null +++ b/scales/temp17ebf.scl @@ -0,0 +1,22 @@ +! temp17ebf.scl +! +Cycle of 17 equal beating fifths + 17 +! + 70.13638 + 141.07480 + 212.79168 + 282.57630 + 353.17307 + 424.55843 + 494.03333 + 564.32917 + 635.42240 + 707.28947 + 777.21438 + 847.94741 + 919.46501 + 989.06347 + 1059.47937 + 1130.68917 + 2/1 diff --git a/scales/temp17ebs.scl b/scales/temp17ebs.scl new file mode 100644 index 0000000..f568357 --- /dev/null +++ b/scales/temp17ebs.scl @@ -0,0 +1,22 @@ +! temp17ebs.scl +! +Cycle of 17 equal beating sevenths + 17 +! + 68.93351 + 142.63186 + 207.82361 + 277.67454 + 352.31365 + 418.30444 + 488.97839 + 564.46059 + 631.16677 + 702.57694 + 778.81263 + 846.15764 + 918.22469 + 995.13213 + 1063.04624 + 1135.69807 + 2/1 diff --git a/scales/temp17fo2.scl b/scales/temp17fo2.scl new file mode 100644 index 0000000..5e24f8e --- /dev/null +++ b/scales/temp17fo2.scl @@ -0,0 +1,22 @@ +! temp17fo2.scl +! +Fifth beats twice octave opposite + 17 +! + 70.46790 + 140.93579 + 211.40369 + 281.87158 + 352.33948 + 422.80737 + 493.27527 + 563.74316 + 634.21106 + 704.67895 + 775.14685 + 845.61474 + 916.08264 + 986.55053 + 1057.01843 + 1127.48632 + 1197.95422 diff --git a/scales/temp17nt.scl b/scales/temp17nt.scl new file mode 100644 index 0000000..a0ceea4 --- /dev/null +++ b/scales/temp17nt.scl @@ -0,0 +1,22 @@ +! temp17nt.scl +! +17-tone temperament with 27/22 neutral thirds + 17 +! + 71.59191 + 139.77132 + 211.36323 + 282.95515 + 27/22 + 422.72647 + 494.31838 + 565.91030 + 634.08970 + 705.68162 + 777.27353 + 44/27 + 917.04485 + 988.63677 + 1060.22868 + 1128.40809 + 2/1 diff --git a/scales/temp17s.scl b/scales/temp17s.scl new file mode 100644 index 0000000..b76f1ee --- /dev/null +++ b/scales/temp17s.scl @@ -0,0 +1,22 @@ +! temp17s.scl +! +Margo Schulter, cycle of 17 fifths tempered by 2 schismas, TL 10-9-98 + 17 +! + 70.34931 + 141.03710 + 211.72488 + 282.41267 + 352.76198 + 423.44977 + 494.13756 + 564.48687 + 635.17465 + 705.86244 + 776.21175 + 846.89954 + 917.58733 + 988.27512 + 1058.62442 + 1129.31221 + 2/1 diff --git a/scales/temp19d5.scl b/scales/temp19d5.scl new file mode 100644 index 0000000..f99db4b --- /dev/null +++ b/scales/temp19d5.scl @@ -0,0 +1,24 @@ +! temp19d5.scl +! +Cycle of 19 thirds tempered by 1/5 small diesis. Third = 3\5 + 19 +! + 58.82700 + 117.65400 + 176.48100 + 262.73700 + 321.56400 + 380.39100 + 439.21800 + 4/3 + 556.87200 + 643.12800 + 3/2 + 760.78200 + 819.60900 + 878.43600 + 937.26300 + 1023.51900 + 1082.34600 + 1141.17300 + 2/1 diff --git a/scales/temp19ebf.scl b/scales/temp19ebf.scl new file mode 100644 index 0000000..6340988 --- /dev/null +++ b/scales/temp19ebf.scl @@ -0,0 +1,24 @@ +! temp19ebf.scl +! +Cycle of 19 equal beating fifths + 19 +! + 62.31053 + 126.46348 + 187.50576 + 250.39887 + 315.12993 + 376.70257 + 440.12275 + 505.37650 + 567.42837 + 631.32454 + 692.13112 + 754.78990 + 819.28847 + 880.64786 + 943.85616 + 1008.89982 + 1070.75911 + 1134.46402 + 2/1 diff --git a/scales/temp19ebmt.scl b/scales/temp19ebmt.scl new file mode 100644 index 0000000..b519088 --- /dev/null +++ b/scales/temp19ebmt.scl @@ -0,0 +1,24 @@ +! temp19ebmt.scl +! +Cycle of 19 equal beating minor thirds + 19 +! + 63.19175 + 126.36104 + 189.50869 + 252.63548 + 315.84302 + 379.02754 + 442.18986 + 505.33079 + 568.45110 + 631.65240 + 694.83089 + 757.98741 + 821.12274 + 884.23766 + 947.43375 + 1010.60722 + 1073.75890 + 1136.88957 + 2/1 diff --git a/scales/temp19ebo.scl b/scales/temp19ebo.scl new file mode 100644 index 0000000..4f323de --- /dev/null +++ b/scales/temp19ebo.scl @@ -0,0 +1,24 @@ +! temp19ebo.scl +! +Cycle of 19 equal beating octaves in twelfth + 19 +! + 1105619/1043411 + 1171155/1043411 + 1241139/1043411 + 1314867/1043411 + 1393599/1043411 + 1476543/1043411 + 4691773/3130233 + 4971709/3130233 + 5266621/3130233 + 5581549/3130233 + 5913325/3130233 + 6267619/3130233 + 6640867/3130233 + 7034083/3130233 + 7453987/3130233 + 7896355/3130233 + 8368747/3130233 + 8866411/3130233 + 3/1 diff --git a/scales/temp19ebt.scl b/scales/temp19ebt.scl new file mode 100644 index 0000000..be83437 --- /dev/null +++ b/scales/temp19ebt.scl @@ -0,0 +1,24 @@ +! temp19ebt.scl +! +Cycle of 19 equal beating thirds + 19 +! + 64.73784 + 128.61228 + 191.66550 + 253.93688 + 315.46322 + 376.27901 + 441.38619 + 505.61168 + 568.99890 + 631.58834 + 693.41786 + 754.52287 + 819.92857 + 884.43769 + 948.09467 + 1010.94092 + 1073.01514 + 1134.35351 + 2/1 diff --git a/scales/temp19k10.scl b/scales/temp19k10.scl new file mode 100644 index 0000000..9b02127 --- /dev/null +++ b/scales/temp19k10.scl @@ -0,0 +1,24 @@ +! temp19k10.scl +! +Chain of 19 minor thirds tempered by 1/10 kleisma + 19 +! + 65.80806 + 131.61612 + 197.42418 + 263.23224 + 316.45201 + 382.26007 + 448.06813 + 513.87619 + 579.68425 + 632.90403 + 698.71209 + 972/625 + 830.32821 + 896.13627 + 949.35604 + 1015.16410 + 1080.97216 + 1146.78022 + 2/1 diff --git a/scales/temp19k3.scl b/scales/temp19k3.scl new file mode 100644 index 0000000..bb0d351 --- /dev/null +++ b/scales/temp19k3.scl @@ -0,0 +1,24 @@ +! temp19k3.scl +! +Chain of 19 minor thirds tempered by 1/3 kleisma + 19 +! + 73.37485 + 146.74971 + 220.12456 + 293.49941 + 318.34371 + 391.71857 + 1953125/1492992 + 538.46827 + 611.84313 + 636.68743 + 15625/10368 + 783.43713 + 856.81199 + 930.18684 + 125/72 + 1028.40599 + 1101.78085 + 1175.15570 + 2/1 diff --git a/scales/temp19k4.scl b/scales/temp19k4.scl new file mode 100644 index 0000000..1795b08 --- /dev/null +++ b/scales/temp19k4.scl @@ -0,0 +1,24 @@ +! temp19k4.scl +! +Chain of 19 minor thirds tempered by 1/4 kleisma + 19 +! + 25/24 + 625/576 + 15625/13824 + 390625/331776 + 317.66811 + 388.34053 + 459.01296 + 529.68539 + 600.35781 + 635.33621 + 706.00864 + 776.68107 + 847.35349 + 918.02592 + 953.00432 + 1023.67675 + 1094.34917 + 1165.02160 + 2/1 diff --git a/scales/temp19k5.scl b/scales/temp19k5.scl new file mode 100644 index 0000000..fa2fe4b --- /dev/null +++ b/scales/temp19k5.scl @@ -0,0 +1,24 @@ +! temp19k5.scl +! +Chain of 19 minor thirds tempered by 1/5 kleisma + 19 +! + 69.05097 + 138.10194 + 207.15303 + 276.20388 + 317.26274 + 5/4 + 455.36468 + 524.41566 + 593.46663 + 634.52549 + 703.57646 + 25/16 + 841.67840 + 910.72937 + 951.78823 + 1020.83920 + 1089.89017 + 125/64 + 2/1 diff --git a/scales/temp19k6.scl b/scales/temp19k6.scl new file mode 100644 index 0000000..7f757ba --- /dev/null +++ b/scales/temp19k6.scl @@ -0,0 +1,24 @@ +! temp19k6.scl +! +Chain of 19 minor thirds tempered by 1/6 kleisma + 19 +! + 67.97000 + 135.94000 + 9/8 + 271.88000 + 316.99250 + 384.96250 + 452.93250 + 520.90250 + 588.87250 + 633.98500 + 3/2 + 769.92500 + 837.89500 + 27/16 + 950.97750 + 1018.94750 + 1086.91750 + 1154.88750 + 2/1 diff --git a/scales/temp19k7.scl b/scales/temp19k7.scl new file mode 100644 index 0000000..65aa208 --- /dev/null +++ b/scales/temp19k7.scl @@ -0,0 +1,24 @@ +! temp19k7.scl +! +Chain of 19 minor thirds tempered by 1/7 kleisma + 19 +! + 67.19788 + 134.39576 + 201.59364 + 268.79152 + 316.79947 + 383.99735 + 451.19523 + 518.39311 + 585.59098 + 633.59894 + 700.79682 + 767.99470 + 81/50 + 902.39208 + 950.39841 + 9/5 + 1084.79417 + 1151.99205 + 2/1 diff --git a/scales/temp19k8.scl b/scales/temp19k8.scl new file mode 100644 index 0000000..38651dd --- /dev/null +++ b/scales/temp19k8.scl @@ -0,0 +1,24 @@ +! temp19k8.scl +! +Chain of 19 minor thirds tempered by 1/8 kleisma + 19 +! + 66.61879 + 27/25 + 199.85636 + 729/625 + 316.65470 + 383.27348 + 449.89227 + 516.51106 + 583.12985 + 633.30939 + 699.92818 + 766.54697 + 833.16576 + 899.78454 + 949.96409 + 1016.58288 + 1083.20167 + 1149.82045 + 2/1 diff --git a/scales/temp19k9.scl b/scales/temp19k9.scl new file mode 100644 index 0000000..ca8474e --- /dev/null +++ b/scales/temp19k9.scl @@ -0,0 +1,24 @@ +! temp19k9.scl +! +Chain of 19 minor thirds tempered by 1/9 kleisma + 19 +! + 66.16838 + 132.33677 + 198.50515 + 264.67353 + 316.54210 + 382.71048 + 448.87886 + 515.04724 + 581.21563 + 633.08419 + 699.25257 + 765.42096 + 831.58934 + 897.75772 + 949.62629 + 1015.79467 + 1081.96305 + 1148.13144 + 2/1 diff --git a/scales/temp19lst.scl b/scales/temp19lst.scl new file mode 100644 index 0000000..fe34125 --- /dev/null +++ b/scales/temp19lst.scl @@ -0,0 +1,24 @@ +! temp19lst.scl +! +Cycle of 19 least squares thirds 5/4^5 = 3/2 + 19 +! + 58.14361 + 116.28722 + 174.43083 + 264.33158 + 322.47519 + 380.61880 + 438.76241 + 496.90602 + 555.04963 + 644.95037 + 703.09398 + 761.23759 + 819.38120 + 877.52481 + 935.66842 + 1025.56917 + 1083.71278 + 1141.85639 + 2/1 diff --git a/scales/temp19mto.scl b/scales/temp19mto.scl new file mode 100644 index 0000000..f9d36ef --- /dev/null +++ b/scales/temp19mto.scl @@ -0,0 +1,24 @@ +! temp19mto.scl +! +Minor third beats equal octave opposite + 19 +! + 63.14482 + 126.28964 + 189.43446 + 252.57927 + 315.72409 + 378.86891 + 442.01373 + 505.15855 + 568.30337 + 631.44819 + 694.59301 + 757.73782 + 820.88264 + 884.02746 + 947.17228 + 1010.31710 + 1073.46192 + 1136.60674 + 1199.75156 diff --git a/scales/temp21ebs.scl b/scales/temp21ebs.scl new file mode 100644 index 0000000..c7285f4 --- /dev/null +++ b/scales/temp21ebs.scl @@ -0,0 +1,26 @@ +! temp21ebs.scl +! +Cycle of 21 equal beating sevenths + 21 +! + 57.66073 + 114.87988 + 171.67502 + 228.06284 + 285.82558 + 343.14264 + 400.03182 + 456.51000 + 514.36228 + 571.76530 + 628.73702 + 685.29449 + 743.22536 + 800.70380 + 857.74794 + 914.37498 + 972.37479 + 1029.91938 + 1087.02703 + 1143.71509 + 2/1 diff --git a/scales/temp22ebf.scl b/scales/temp22ebf.scl new file mode 100644 index 0000000..7fcb1ba --- /dev/null +++ b/scales/temp22ebf.scl @@ -0,0 +1,27 @@ +! temp22ebf.scl +! +Cycle of 22 equal beating fifths + 22 +! + 53.34234 + 107.81540 + 163.40704 + 220.10378 + 272.95699 + 326.94574 + 382.05844 + 438.28218 + 490.70808 + 544.27350 + 598.96735 + 654.77723 + 711.68944 + 764.73722 + 818.91865 + 874.22193 + 930.63393 + 983.22992 + 1036.96387 + 1091.82449 + 1147.79919 + 2/1 diff --git a/scales/temp22ebt.scl b/scales/temp22ebt.scl new file mode 100644 index 0000000..35ac0a2 --- /dev/null +++ b/scales/temp22ebt.scl @@ -0,0 +1,27 @@ +! temp22ebt.scl +! +Cycle of 22 equal beating thirds + 22 +! + 55.59843 + 110.73921 + 165.44028 + 219.71865 + 273.59049 + 327.07117 + 380.17529 + 435.96807 + 491.29549 + 546.17592 + 600.62673 + 654.66444 + 708.30475 + 761.56255 + 817.51177 + 872.98943 + 928.01420 + 982.60375 + 1036.77490 + 1090.54359 + 1143.92499 + 2/1 diff --git a/scales/temp22fo2.scl b/scales/temp22fo2.scl new file mode 100644 index 0000000..5d02c5a --- /dev/null +++ b/scales/temp22fo2.scl @@ -0,0 +1,27 @@ +! temp22fo2.scl +! +Fifth beats twice octave opposite + 22 +! + 54.37660 + 108.75320 + 163.12979 + 217.50639 + 271.88299 + 326.25959 + 380.63618 + 435.01278 + 489.38938 + 543.76598 + 598.14257 + 652.51917 + 706.89577 + 761.27237 + 815.64896 + 870.02556 + 924.40216 + 978.77876 + 1033.15536 + 1087.53195 + 1141.90855 + 1196.28515 diff --git a/scales/temp23ebs.scl b/scales/temp23ebs.scl new file mode 100644 index 0000000..384ba27 --- /dev/null +++ b/scales/temp23ebs.scl @@ -0,0 +1,28 @@ +! temp23ebs.scl +! +Cycle of 23 equal beating major sixths + 23 +! + 51.62899 + 103.58029 + 155.84630 + 208.41948 + 261.29237 + 312.68051 + 364.39657 + 416.43289 + 468.78190 + 521.43607 + 574.38796 + 625.85061 + 677.63944 + 729.74683 + 782.16521 + 834.88706 + 887.90497 + 939.42987 + 991.27952 + 1043.44628 + 1095.92259 + 1148.70098 + 2/1 diff --git a/scales/temp24ebaf.scl b/scales/temp24ebaf.scl new file mode 100644 index 0000000..16140cc --- /dev/null +++ b/scales/temp24ebaf.scl @@ -0,0 +1,29 @@ +! temp24ebaf.scl +! +Cycle of 24 equal beating 11/8's + 24 +! + 49.94274 + 100.30106 + 150.16035 + 200.43693 + 250.21760 + 300.41714 + 350.12371 + 400.25066 + 449.88739 + 499.94589 + 549.51678 + 599.51077 + 649.91927 + 699.82685 + 750.15071 + 799.97687 + 850.22098 + 899.97043 + 950.13937 + 999.81652 + 1049.91462 + 1099.52361 + 1149.55493 + 2/1 diff --git a/scales/temp24ebf.scl b/scales/temp24ebf.scl new file mode 100644 index 0000000..9f15f54 --- /dev/null +++ b/scales/temp24ebf.scl @@ -0,0 +1,29 @@ +! temp24ebf.scl +! +24-tone ET with 23 equal beatings fifths. Fifth on 17 slightly smaller. + 24 +! + 50.00000 + 100.03402 + 150.42382 + 199.51879 + 249.64386 + 299.79965 + 349.63877 + 399.51600 + 449.75288 + 500.01741 + 549.96134 + 599.94075 + 650.27722 + 699.32161 + 749.39658 + 799.50359 + 849.96468 + 899.12725 + 949.31927 + 999.54025 + 1049.44220 + 1099.38074 + 1149.67728 + 2/1 diff --git a/scales/temp24ebt.scl b/scales/temp24ebt.scl new file mode 100644 index 0000000..88fca6e --- /dev/null +++ b/scales/temp24ebt.scl @@ -0,0 +1,29 @@ +! temp24ebt.scl +! +Two octaves with equal beating twelfths + 24 +! + 100.72182 + 200.85206 + 300.42716 + 399.48097 + 500.67518 + 601.24845 + 701.23932 + 800.68359 + 899.61450 + 1000.69019 + 1101.15234 + 1201.03894 + 1300.38531 + 1399.22424 + 1500.21123 + 1600.59019 + 1700.39874 + 1799.67180 + 1898.44187 + 1999.36244 + 2099.67910 + 2199.42918 + 2298.64735 + 4/1 diff --git a/scales/temp25ebt.scl b/scales/temp25ebt.scl new file mode 100644 index 0000000..4bfc552 --- /dev/null +++ b/scales/temp25ebt.scl @@ -0,0 +1,30 @@ +! temp25ebt.scl +! +Cycle of 25 equal beating thirds + 25 +! + 48.57624 + 96.94492 + 145.11261 + 193.08564 + 240.87006 + 288.47173 + 335.89628 + 383.14913 + 431.81301 + 480.26654 + 528.51640 + 576.56901 + 624.43055 + 672.10695 + 719.60394 + 766.92700 + 815.66122 + 864.18284 + 912.49865 + 960.61512 + 1008.53853 + 1056.27489 + 1103.82997 + 1151.20937 + 2/1 diff --git a/scales/temp26ebf.scl b/scales/temp26ebf.scl new file mode 100644 index 0000000..5f98556 --- /dev/null +++ b/scales/temp26ebf.scl @@ -0,0 +1,31 @@ +! temp26ebf.scl +! +Cycle of 26 equal beating fifths + 26 +! + 44.42304 + 90.63536 + 138.65907 + 181.87169 + 226.85651 + 273.63796 + 322.23703 + 365.95376 + 411.45000 + 458.74924 + 507.87144 + 552.04623 + 598.00694 + 645.77616 + 688.76571 + 733.52412 + 780.07625 + 828.44352 + 871.95720 + 917.24749 + 964.33824 + 1013.24985 + 1057.24026 + 1103.01405 + 1150.59416 + 2/1 diff --git a/scales/temp26ebmt.scl b/scales/temp26ebmt.scl new file mode 100644 index 0000000..e992268 --- /dev/null +++ b/scales/temp26ebmt.scl @@ -0,0 +1,31 @@ +! temp26ebmt.scl +! +Cycle of 26 equal beating minor thirds + 26 +! + 45.89339 + 93.98362 + 139.06230 + 186.32128 + 230.64111 + 277.12513 + 325.81750 + 371.44543 + 419.26490 + 464.09648 + 511.10319 + 555.19258 + 601.44114 + 649.89350 + 695.30255 + 742.89871 + 787.52643 + 834.32497 + 878.22415 + 924.27830 + 972.53246 + 1017.76071 + 1065.17237 + 1109.63162 + 1156.25808 + 2/1 diff --git a/scales/temp26ebs.scl b/scales/temp26ebs.scl new file mode 100644 index 0000000..47bf20e --- /dev/null +++ b/scales/temp26ebs.scl @@ -0,0 +1,31 @@ +! temp26ebs.scl +! +Cycle of 26 equal beating sevenths + 26 +! + 46.24638 + 92.43699 + 138.57337 + 184.65700 + 230.68933 + 276.94849 + 323.15153 + 369.30000 + 415.39539 + 461.43915 + 507.70950 + 553.92342 + 600.08246 + 646.18814 + 692.24192 + 738.52206 + 784.74550 + 830.91381 + 877.02850 + 923.09104 + 969.37975 + 1015.61153 + 1061.78795 + 1107.91052 + 1153.98073 + 2/1 diff --git a/scales/temp26rb3.scl b/scales/temp26rb3.scl new file mode 100644 index 0000000..aa243ea --- /dev/null +++ b/scales/temp26rb3.scl @@ -0,0 +1,31 @@ +! temp26rb3.scl +! +Cycle of 26 fifths, 5/4 beats three times 3/2 + 26 +! + 45.12835 + 94.06569 + 139.19404 + 184.32239 + 229.45074 + 278.38807 + 323.51642 + 368.64477 + 413.77312 + 462.71046 + 507.83881 + 552.96716 + 601.90449 + 647.03284 + 692.16119 + 737.28954 + 786.22688 + 831.35523 + 876.48358 + 921.61193 + 970.54926 + 1015.67761 + 1060.80596 + 1105.93431 + 1154.87165 + 2/1 diff --git a/scales/temp26so1o.scl b/scales/temp26so1o.scl new file mode 100644 index 0000000..2ca3263 --- /dev/null +++ b/scales/temp26so1o.scl @@ -0,0 +1,31 @@ +! temp26so1o.scl +! +Seventh beats equal octave opposite + 26 +! + 46.13960 + 92.27921 + 138.41881 + 184.55842 + 230.69802 + 276.83763 + 322.97723 + 369.11683 + 415.25644 + 461.39604 + 507.53565 + 553.67525 + 599.81486 + 645.95446 + 692.09406 + 738.23367 + 784.37327 + 830.51288 + 876.65248 + 922.79208 + 968.93169 + 1015.07129 + 1061.21090 + 1107.35050 + 1153.49011 + 1199.62971 diff --git a/scales/temp27c8.scl b/scales/temp27c8.scl new file mode 100644 index 0000000..6d2cbc6 --- /dev/null +++ b/scales/temp27c8.scl @@ -0,0 +1,32 @@ +! temp27c8.scl +! +Cycle of 27 fifths tempered by 1/8 of difference between augm. 2nd and 5/4 + 27 +! + 47.27580 + 79.26227 + 126.53807 + 173.81387 + 221.08968 + 268.36548 + 6/5 + 347.62775 + 394.90355 + 442.17936 + 489.45516 + 536.73097 + 25/18 + 615.99323 + 663.26903 + 710.54484 + 757.82064 + 789.80710 + 837.08291 + 5/3 + 931.63452 + 978.91032 + 1026.18613 + 1058.17259 + 1105.44839 + 1152.72420 + 2/1 diff --git a/scales/temp27rb2.scl b/scales/temp27rb2.scl new file mode 100644 index 0000000..57c0834 --- /dev/null +++ b/scales/temp27rb2.scl @@ -0,0 +1,32 @@ +! temp27rb2.scl +! +Cycle of 27 fourths, 5/4 beats twice 4/3 + 27 +! + 44.66497 + 89.32994 + 133.99491 + 178.65988 + 223.32486 + 266.79898 + 311.46395 + 356.12892 + 400.79390 + 445.45887 + 488.93299 + 533.59797 + 578.26294 + 622.92791 + 667.59288 + 712.25785 + 755.73198 + 800.39695 + 845.06192 + 889.72689 + 934.39186 + 977.86599 + 1022.53096 + 1067.19593 + 1111.86090 + 1156.52587 + 2/1 diff --git a/scales/temp28ebt.scl b/scales/temp28ebt.scl new file mode 100644 index 0000000..c22a1fe --- /dev/null +++ b/scales/temp28ebt.scl @@ -0,0 +1,33 @@ +! temp28ebt.scl +! +Cycle of 28 equal beating thirds + 28 +! + 43.01329 + 85.97864 + 128.89728 + 171.77041 + 214.59919 + 257.38473 + 300.12815 + 342.83051 + 385.49284 + 428.52627 + 471.51126 + 514.44903 + 557.34080 + 600.18774 + 642.99100 + 685.75167 + 728.47084 + 771.14957 + 814.19914 + 857.19984 + 900.15293 + 943.05963 + 985.92111 + 1028.73854 + 1071.51303 + 1114.24567 + 1156.93752 + 2/1 diff --git a/scales/temp28fo1o.scl b/scales/temp28fo1o.scl new file mode 100644 index 0000000..2d1f3aa --- /dev/null +++ b/scales/temp28fo1o.scl @@ -0,0 +1,33 @@ +! temp28fo1o.scl +! +Third beats equal octave opposite + 28 +! + 42.88681 + 85.77362 + 128.66044 + 171.54725 + 214.43406 + 257.32087 + 300.20768 + 343.09450 + 385.98131 + 428.86812 + 471.75493 + 514.64174 + 557.52856 + 600.41537 + 643.30218 + 686.18899 + 729.07580 + 771.96262 + 814.84943 + 857.73624 + 900.62305 + 943.50986 + 986.39668 + 1029.28349 + 1072.17030 + 1115.05711 + 1157.94392 + 1200.83074 diff --git a/scales/temp29c14.scl b/scales/temp29c14.scl new file mode 100644 index 0000000..6b9ef94 --- /dev/null +++ b/scales/temp29c14.scl @@ -0,0 +1,34 @@ +! temp29c14.scl +! +Cycle of 29 fifths 1/14 comma positive + 29 +! + 41.89397 + 83.78795 + 124.43815 + 166.33212 + 206.98233 + 248.87630 + 290.77027 + 331.42048 + 373.31445 + 413.96466 + 455.85863 + 497.75260 + 538.40281 + 580.29678 + 620.94699 + 662.84096 + 703.49116 + 745.38514 + 787.27911 + 827.92932 + 869.82329 + 910.47349 + 952.36747 + 994.26144 + 1034.91164 + 1076.80562 + 1117.45582 + 1159.34979 + 2/1 diff --git a/scales/temp29ebf.scl b/scales/temp29ebf.scl new file mode 100644 index 0000000..a11bf03 --- /dev/null +++ b/scales/temp29ebf.scl @@ -0,0 +1,34 @@ +! temp29ebf.scl +! +Cycle of 29 equal beating fifths + 29 +! + 41.49070 + 82.55659 + 124.22928 + 165.47103 + 207.31795 + 248.72803 + 289.71599 + 331.31147 + 372.47861 + 414.25162 + 455.59029 + 496.50923 + 538.03632 + 579.13736 + 620.84490 + 662.12030 + 704.00058 + 745.44287 + 786.46196 + 828.08829 + 869.28524 + 911.08778 + 952.45499 + 993.40151 + 1034.95593 + 1076.08338 + 1117.81708 + 1159.11777 + 2/1 diff --git a/scales/temp29fo1o.scl b/scales/temp29fo1o.scl new file mode 100644 index 0000000..6f18028 --- /dev/null +++ b/scales/temp29fo1o.scl @@ -0,0 +1,34 @@ +! temp29fo1o.scl +! +Fifth beats equal octave opposite + 29 +! + 41.33820 + 82.67640 + 124.01460 + 165.35279 + 206.69099 + 248.02919 + 289.36739 + 330.70559 + 372.04379 + 413.38198 + 454.72018 + 496.05838 + 537.39658 + 578.73478 + 620.07298 + 661.41118 + 702.74937 + 744.08757 + 785.42577 + 826.76397 + 868.10217 + 909.44037 + 950.77857 + 992.11676 + 1033.45496 + 1074.79316 + 1116.13136 + 1157.46956 + 1198.80776 diff --git a/scales/temp29fo2o.scl b/scales/temp29fo2o.scl new file mode 100644 index 0000000..377748a --- /dev/null +++ b/scales/temp29fo2o.scl @@ -0,0 +1,34 @@ +! temp29fo2o.scl +! +Fifth beats twice octave opposite + 29 +! + 41.35248 + 82.70495 + 124.05743 + 165.40990 + 206.76238 + 248.11485 + 289.46733 + 330.81980 + 372.17228 + 413.52475 + 454.87723 + 496.22970 + 537.58218 + 578.93465 + 620.28713 + 661.63960 + 702.99208 + 744.34455 + 785.69703 + 827.04951 + 868.40198 + 909.75446 + 951.10693 + 992.45941 + 1033.81188 + 1075.16436 + 1116.51683 + 1157.86931 + 1199.22178 diff --git a/scales/temp31c51.scl b/scales/temp31c51.scl new file mode 100644 index 0000000..418fffa --- /dev/null +++ b/scales/temp31c51.scl @@ -0,0 +1,36 @@ +! temp31c51.scl +! +Cycle of 31 51/220-comma tempered fifths (twice diff. of 31-tET and 1/4-comma) + 31 +! + 36.36658 + 78.78616 + 115.15274 + 157.57233 + 193.93890 + 230.30548 + 272.72507 + 309.09164 + 345.45822 + 387.87781 + 424.24438 + 466.66397 + 503.03055 + 539.39713 + 581.81671 + 618.18329 + 660.60287 + 696.96945 + 733.33603 + 775.75562 + 812.12219 + 854.54178 + 890.90836 + 927.27493 + 969.69452 + 1006.06110 + 1042.42767 + 1084.84726 + 1121.21384 + 1163.63342 + 2/1 diff --git a/scales/temp31ebf.scl b/scales/temp31ebf.scl new file mode 100644 index 0000000..5f24863 --- /dev/null +++ b/scales/temp31ebf.scl @@ -0,0 +1,36 @@ +! temp31ebf.scl +! +Cycle of 31 equal beating fifths + 31 +! + 39.01804 + 76.66801 + 116.51968 + 154.95606 + 192.05687 + 231.33996 + 269.24003 + 309.35054 + 348.03095 + 385.36220 + 424.88392 + 463.00912 + 503.35254 + 542.25248 + 579.79097 + 619.52726 + 657.85483 + 694.85287 + 734.02950 + 771.82914 + 811.83571 + 850.41814 + 887.65687 + 927.08278 + 965.11761 + 1005.36755 + 1044.17938 + 1081.63470 + 1121.28487 + 1159.53124 + 2/1 diff --git a/scales/temp31ebs.scl b/scales/temp31ebs.scl new file mode 100644 index 0000000..53b01b4 --- /dev/null +++ b/scales/temp31ebs.scl @@ -0,0 +1,36 @@ +! temp31ebs.scl +! +Cycle of 31 equal beating sevenths + 31 +! + 38.44053 + 77.00619 + 115.69462 + 154.50347 + 193.43045 + 232.47328 + 270.88529 + 309.42296 + 348.08394 + 386.86586 + 425.76643 + 464.78335 + 503.17045 + 541.68367 + 580.32066 + 619.07905 + 657.95654 + 696.95082 + 735.31614 + 773.80799 + 812.42401 + 851.16184 + 890.01915 + 928.99365 + 967.33993 + 1005.81311 + 1044.41080 + 1083.13065 + 1121.97032 + 1160.92753 + 2/1 diff --git a/scales/temp31ebsi.scl b/scales/temp31ebsi.scl new file mode 100644 index 0000000..6b8a840 --- /dev/null +++ b/scales/temp31ebsi.scl @@ -0,0 +1,36 @@ +! temp31ebsi.scl +! +Cycle of 31 equal beating major sixths + 31 +! + 37.24512 + 75.03303 + 113.35966 + 152.22064 + 191.61132 + 231.52676 + 271.96175 + 308.80706 + 346.19792 + 384.13051 + 422.60068 + 461.60399 + 501.13569 + 541.19079 + 581.76400 + 618.73247 + 656.24566 + 694.29966 + 732.89028 + 772.01298 + 811.66299 + 851.83522 + 892.52434 + 929.59607 + 967.21181 + 1005.36759 + 1044.05915 + 1083.28192 + 1123.03105 + 1163.30141 + 2/1 diff --git a/scales/temp31ebt.scl b/scales/temp31ebt.scl new file mode 100644 index 0000000..c41c197 --- /dev/null +++ b/scales/temp31ebt.scl @@ -0,0 +1,36 @@ +! temp31ebt.scl +! +Cycle of 31 equal beating thirds + 31 +! + 38.49866 + 77.05366 + 115.66385 + 154.32808 + 193.04524 + 231.81421 + 270.63393 + 309.50333 + 348.42137 + 387.38703 + 425.86209 + 464.39398 + 502.98154 + 541.62360 + 580.31905 + 619.06677 + 657.86568 + 696.71470 + 735.61279 + 774.55892 + 813.01512 + 851.52855 + 890.09801 + 928.72236 + 967.40046 + 1006.13119 + 1044.91346 + 1083.74620 + 1122.62835 + 1161.55887 + 2/1 diff --git a/scales/temp31g3.scl b/scales/temp31g3.scl new file mode 100644 index 0000000..0d04235 --- /dev/null +++ b/scales/temp31g3.scl @@ -0,0 +1,36 @@ +! temp31g3.scl +! +Wonder Scale, cycle of 31 sevenths tempered by 1/3 gamelan residue, s.wonder1.scl + 31 +! + 30.07500 + 60.15000 + 256/243 + 173.83500 + 9/8 + 233.98500 + 264.06000 + 32/27 + 324.21000 + 81/64 + 437.89500 + 467.97000 + 4/3 + 528.12000 + 558.19500 + 641.80500 + 671.88000 + 3/2 + 732.03000 + 762.10500 + 128/81 + 875.79000 + 27/16 + 935.94000 + 966.01500 + 16/9 + 1026.16500 + 243/128 + 1139.85000 + 1169.92500 + 2/1 diff --git a/scales/temp31g4.scl b/scales/temp31g4.scl new file mode 100644 index 0000000..a55f721 --- /dev/null +++ b/scales/temp31g4.scl @@ -0,0 +1,36 @@ +! temp31g4.scl +! +Cycle of 31 sevenths tempered by 1/4 gamelan residue + 31 +! + 33.58863 + 67.17726 + 100.76590 + 166.10501 + 199.69364 + 233.28227 + 7/6 + 300.45954 + 334.04817 + 432/343 + 432.97592 + 466.56455 + 500.15318 + 49/36 + 567.33044 + 632.66956 + 72/49 + 699.84682 + 733.43545 + 767.02408 + 343/216 + 865.95183 + 899.54046 + 12/7 + 966.71773 + 1000.30636 + 1033.89499 + 1099.23410 + 1132.82274 + 1166.41137 + 2/1 diff --git a/scales/temp31g5.scl b/scales/temp31g5.scl new file mode 100644 index 0000000..93976b0 --- /dev/null +++ b/scales/temp31g5.scl @@ -0,0 +1,36 @@ +! temp31g5.scl +! +Cycle of 31 sevenths tempered by 1/5 gamelan residue + 31 +! + 49/48 + 2401/2304 + 117649/110592 + 161.46701 + 197.16383 + 232.86064 + 268.55745 + 304.25426 + 339.95107 + 394.32765 + 430.02446 + 465.72128 + 501.41809 + 537.11490 + 572.81171 + 627.18829 + 662.88510 + 698.58191 + 734.27872 + 769.97554 + 805.67235 + 860.04893 + 895.74574 + 931.44255 + 967.13936 + 1002.83617 + 1038.53299 + 221184/117649 + 4608/2401 + 96/49 + 2/1 diff --git a/scales/temp31g6.scl b/scales/temp31g6.scl new file mode 100644 index 0000000..2b69955 --- /dev/null +++ b/scales/temp31g6.scl @@ -0,0 +1,36 @@ +! temp31g6.scl +! +Cycle of 31 sevenths tempered by 1/6 gamelan residue + 31 +! + 37.10227 + 74.20453 + 111.30680 + 158.37502 + 384/343 + 232.57955 + 269.68181 + 306.78408 + 343.88634 + 147456/117649 + 428.05683 + 465.15909 + 502.26136 + 539.36362 + 576.46589 + 623.53411 + 660.63638 + 697.73864 + 734.84091 + 771.94317 + 117649/73728 + 856.11366 + 893.21592 + 930.31819 + 967.42045 + 343/192 + 1041.62498 + 1088.69320 + 1125.79547 + 1162.89773 + 2/1 diff --git a/scales/temp31g7.scl b/scales/temp31g7.scl new file mode 100644 index 0000000..4cbf00f --- /dev/null +++ b/scales/temp31g7.scl @@ -0,0 +1,36 @@ +! temp31g7.scl +! +Cycle of 31 sevenths tempered by 1/7 gamelan residue + 31 +! + 38.10616 + 76.21232 + 114.31848 + 156.16645 + 194.27261 + 232.37877 + 270.48493 + 308.59109 + 5764801/4718592 + 388.54521 + 3072/2401 + 464.75754 + 502.86370 + 540.96986 + 579.07602 + 620.92398 + 659.03014 + 697.13630 + 735.24246 + 2401/1536 + 811.45479 + 9437184/5764801 + 891.40891 + 929.51507 + 967.62123 + 1005.72739 + 1043.83355 + 1085.68152 + 1123.78768 + 1161.89384 + 2/1 diff --git a/scales/temp31h10.scl b/scales/temp31h10.scl new file mode 100644 index 0000000..8a07fa0 --- /dev/null +++ b/scales/temp31h10.scl @@ -0,0 +1,36 @@ +! temp31h10.scl +! +Cycle of 31 fifths tempered by 1/10 Harrison's comma + 31 +! + 40.76922 + 78.17813 + 115.58705 + 156.35627 + 193.76518 + 8/7 + 271.94332 + 309.35223 + 350.12145 + 387.53036 + 424.93927 + 465.70850 + 503.11741 + 543.88663 + 581.29554 + 618.70446 + 659.47368 + 696.88259 + 49/32 + 775.06073 + 812.46964 + 853.23886 + 890.64777 + 928.05668 + 7/4 + 1006.23482 + 1047.00404 + 1084.41295 + 1121.82187 + 1162.59109 + 2/1 diff --git a/scales/temp31h11.scl b/scales/temp31h11.scl new file mode 100644 index 0000000..7e0abdd --- /dev/null +++ b/scales/temp31h11.scl @@ -0,0 +1,36 @@ +! temp31h11.scl +! +Cycle of 31 fifths tempered by 1/11 Harrison's comma + 31 +! + 49.53066 + 81.40603 + 113.28141 + 162.81206 + 194.68744 + 226.56281 + 276.09347 + 307.96884 + 357.49950 + 389.37488 + 421.25025 + 21/16 + 502.65628 + 552.18694 + 584.06231 + 615.93769 + 665.46835 + 697.34372 + 746.87438 + 778.74975 + 810.62512 + 860.15578 + 892.03116 + 923.90653 + 973.43719 + 1005.31256 + 1054.84322 + 1086.71859 + 1118.59397 + 1168.12463 + 2/1 diff --git a/scales/temp31h12.scl b/scales/temp31h12.scl new file mode 100644 index 0000000..aaf686d --- /dev/null +++ b/scales/temp31h12.scl @@ -0,0 +1,36 @@ +! temp31h12.scl +! +Cycle of 31 fifths tempered by 1/12 Harrison's comma + 31 +! + 56.83185 + 84.09595 + 111.36004 + 168.19189 + 195.45598 + 222.72008 + 279.55193 + 306.81602 + 363.64788 + 390.91197 + 418.17606 + 475.00792 + 502.27201 + 559.10386 + 586.36795 + 613.63205 + 670.46390 + 697.72799 + 754.55985 + 781.82394 + 809.08803 + 865.91989 + 893.18398 + 920.44807 + 977.27992 + 1004.54402 + 1061.37587 + 1088.63996 + 1115.90405 + 63/32 + 2/1 diff --git a/scales/temp31h8.scl b/scales/temp31h8.scl new file mode 100644 index 0000000..ea7c81d --- /dev/null +++ b/scales/temp31h8.scl @@ -0,0 +1,36 @@ +! temp31h8.scl +! +Cycle of 31 fifths tempered by 1/8 Harrison's comma + 31 +! + 16.67527 + 69.30142 + 121.92756 + 138.60283 + 191.22898 + 243.85512 + 260.53039 + 313.15654 + 98/81 + 382.45795 + 9/7 + 451.75937 + 504.38551 + 521.06079 + 573.68693 + 626.31307 + 642.98835 + 695.61449 + 712.28976 + 14/9 + 817.54205 + 834.21732 + 886.84346 + 939.46961 + 956.14488 + 1008.77102 + 1025.44630 + 1078.07244 + 1130.69858 + 1147.37386 + 2/1 diff --git a/scales/temp31h9.scl b/scales/temp31h9.scl new file mode 100644 index 0000000..6b26e8e --- /dev/null +++ b/scales/temp31h9.scl @@ -0,0 +1,36 @@ +! temp31h9.scl +! +Cycle of 31 fifths tempered by 1/9 Harrison's comma + 31 +! + 30.06080 + 74.23293 + 118.40505 + 148.46585 + 192.63798 + 236.81010 + 7/6 + 311.04303 + 341.10383 + 385.27596 + 429.44808 + 459.50888 + 503.68101 + 49/36 + 577.91394 + 622.08606 + 652.14686 + 696.31899 + 726.37979 + 770.55192 + 814.72404 + 844.78484 + 888.95697 + 12/7 + 963.18990 + 1007.36202 + 1037.42282 + 1081.59495 + 1125.76707 + 1155.82787 + 2/1 diff --git a/scales/temp31ms.scl b/scales/temp31ms.scl new file mode 100644 index 0000000..4da38a7 --- /dev/null +++ b/scales/temp31ms.scl @@ -0,0 +1,36 @@ +! temp31ms.scl +! +Cycle of 31 5th root of 5/4 chromatic semitones + 31 +! + 128/125 + 77.26274 + 118.32160 + 154.52549 + 195.58434 + 231.78823 + 272.84709 + 309.05097 + 350.10983 + 5/4 + 32/25 + 463.57646 + 504.63532 + 540.83920 + 581.89806 + 618.10194 + 659.16080 + 695.36468 + 736.42354 + 25/16 + 8/5 + 849.89017 + 890.94903 + 927.15291 + 968.21177 + 1004.41566 + 1045.47451 + 1081.67840 + 1122.73726 + 125/64 + 2/1 diff --git a/scales/temp31mt.scl b/scales/temp31mt.scl new file mode 100644 index 0000000..0d21e59 --- /dev/null +++ b/scales/temp31mt.scl @@ -0,0 +1,36 @@ +! temp31mt.scl +! +Cycle of 31 square root of 5/4 meantones + 31 +! + 128/125 + 16384/15625 + 2097152/1953125 + 152.09751 + 193.15686 + 234.21572 + 275.27457 + 316.33343 + 625/512 + 5/4 + 32/25 + 4096/3125 + 524288/390625 + 67108864/48828125 + 579.47008 + 620.52943 + 661.58829 + 702.64715 + 743.70600 + 25/16 + 8/5 + 1024/625 + 131072/78125 + 16777216/9765625 + 965.78380 + 1006.84314 + 1047.90200 + 1088.96086 + 1130.01972 + 125/64 + 2/1 diff --git a/scales/temp31rb1.scl b/scales/temp31rb1.scl new file mode 100644 index 0000000..8c3e018 --- /dev/null +++ b/scales/temp31rb1.scl @@ -0,0 +1,36 @@ +! temp31rb1.scl +! +Meta-Wrschmidt cycle of 31 thirds, 3/2 beats equal 5/4 + 31 +! + 37.50743 + 75.01486 + 112.52229 + 162.45294 + 199.96037 + 237.46780 + 274.97523 + 312.48266 + 349.99009 + 387.49752 + 425.00495 + 462.51238 + 500.01982 + 537.52725 + 587.45789 + 624.96532 + 662.47275 + 699.98018 + 737.48762 + 774.99505 + 812.50248 + 850.00991 + 887.51734 + 925.02477 + 974.95542 + 1012.46285 + 1049.97028 + 1087.47771 + 1124.98514 + 1162.49257 + 2/1 diff --git a/scales/temp31rb1a.scl b/scales/temp31rb1a.scl new file mode 100644 index 0000000..0451bb4 --- /dev/null +++ b/scales/temp31rb1a.scl @@ -0,0 +1,36 @@ +! temp31rb1a.scl +! +Cycle of 31 thirds, 5/4 beats equal 7/4 + 31 +! + 38.62561 + 77.25122 + 115.87684 + 155.37113 + 193.99674 + 232.62235 + 271.24796 + 309.87357 + 348.49918 + 387.12480 + 425.75041 + 464.37602 + 503.00163 + 542.49592 + 581.12153 + 619.74715 + 658.37276 + 696.99837 + 735.62398 + 774.24959 + 812.87520 + 851.50082 + 890.12643 + 928.75204 + 968.24633 + 1006.87194 + 1045.49755 + 1084.12316 + 1122.74878 + 1161.37439 + 2/1 diff --git a/scales/temp31rb2.scl b/scales/temp31rb2.scl new file mode 100644 index 0000000..1bbe637 --- /dev/null +++ b/scales/temp31rb2.scl @@ -0,0 +1,36 @@ +! temp31rb2.scl +! +Cycle of 31 thirds, 3/2 beats twice 5/4 + 31 +! + 38.03035 + 76.06070 + 114.09105 + 159.14112 + 197.17147 + 235.20182 + 273.23217 + 311.26252 + 349.29287 + 387.32322 + 425.35357 + 463.38392 + 501.41427 + 539.44462 + 584.49468 + 622.52503 + 660.55538 + 698.58573 + 736.61608 + 774.64643 + 812.67678 + 850.70713 + 888.73748 + 926.76783 + 971.81790 + 1009.84825 + 1047.87860 + 1085.90895 + 1123.93930 + 1161.96965 + 2/1 diff --git a/scales/temp31rb2a.scl b/scales/temp31rb2a.scl new file mode 100644 index 0000000..64388bf --- /dev/null +++ b/scales/temp31rb2a.scl @@ -0,0 +1,36 @@ +! temp31rb2a.scl +! +Cycle of 31 thirds, 5/4 beats twice 3/2 + 31 +! + 37.17203 + 74.34406 + 111.51609 + 164.57714 + 201.74917 + 238.92120 + 276.09323 + 313.26526 + 350.43729 + 387.60932 + 424.78135 + 461.95338 + 499.12541 + 536.29745 + 589.35849 + 626.53052 + 663.70255 + 700.87459 + 738.04662 + 775.21865 + 812.39068 + 849.56271 + 886.73474 + 923.90677 + 976.96782 + 1014.13985 + 1051.31188 + 1088.48391 + 1125.65594 + 1162.82797 + 2/1 diff --git a/scales/temp31rb2b.scl b/scales/temp31rb2b.scl new file mode 100644 index 0000000..3221990 --- /dev/null +++ b/scales/temp31rb2b.scl @@ -0,0 +1,36 @@ +! temp31rb2b.scl +! +Cycle of 31 thirds, 5/4 beats twice 7/4 (7/4 beats twice 5/4 gives 31-tET) + 31 +! + 38.57825 + 77.15650 + 115.73475 + 155.67108 + 194.24933 + 232.82758 + 271.40583 + 309.98408 + 348.56233 + 387.14058 + 425.71883 + 464.29708 + 502.87533 + 542.81167 + 581.38992 + 619.96817 + 658.54642 + 697.12467 + 735.70292 + 774.28117 + 812.85942 + 851.43767 + 890.01592 + 928.59417 + 968.53050 + 1007.10875 + 1045.68700 + 1084.26525 + 1122.84350 + 1161.42175 + 2/1 diff --git a/scales/temp31rbf2.scl b/scales/temp31rbf2.scl new file mode 100644 index 0000000..5347107 --- /dev/null +++ b/scales/temp31rbf2.scl @@ -0,0 +1,36 @@ +! temp31rbf2.scl +! +Cycle of 31 fifths, 3/2 beats equal 7/4. Meta-Huygens + 31 +! + 44.72225 + 79.63451 + 124.35677 + 159.26903 + 194.18129 + 238.90354 + 273.81580 + 308.72807 + 353.45032 + 388.36258 + 433.08483 + 467.99709 + 502.90936 + 547.63161 + 582.54387 + 627.26612 + 662.17838 + 697.09064 + 741.81290 + 776.72516 + 821.44741 + 856.35967 + 891.27193 + 935.99419 + 970.90645 + 1005.81871 + 1050.54096 + 1085.45322 + 1130.17548 + 1165.08774 + 2/1 diff --git a/scales/temp31rbs1.scl b/scales/temp31rbs1.scl new file mode 100644 index 0000000..03776a1 --- /dev/null +++ b/scales/temp31rbs1.scl @@ -0,0 +1,36 @@ +! temp31rbs1.scl +! +Cycle of 31 sevenths, 3/2 beats equal 7/4. 17/9 schisma fifth + 31 +! + 36.22596 + 72.45193 + 108.67789 + 160.30288 + 196.52884 + 232.75481 + 268.98077 + 305.20674 + 341.43270 + 393.05769 + 429.28365 + 465.50961 + 501.73558 + 537.96154 + 574.18751 + 625.81249 + 662.03846 + 698.26442 + 734.49039 + 770.71635 + 806.94231 + 858.56730 + 894.79326 + 931.01923 + 967.24519 + 1003.47116 + 1039.69712 + 1091.32211 + 1127.54807 + 1163.77404 + 2/1 diff --git a/scales/temp31rbs2.scl b/scales/temp31rbs2.scl new file mode 100644 index 0000000..dc8ff77 --- /dev/null +++ b/scales/temp31rbs2.scl @@ -0,0 +1,36 @@ +! temp31rbs2.scl +! +Cycle of 31 sevenths, 3/2 beats twice 7/4. Almost 31-tET + 31 +! + 38.63383 + 77.26767 + 115.90150 + 155.00557 + 193.63940 + 232.27323 + 270.90707 + 309.54090 + 348.17473 + 387.27880 + 425.91263 + 464.54647 + 503.18030 + 541.81413 + 580.44797 + 619.55203 + 658.18587 + 696.81970 + 735.45353 + 774.08737 + 812.72120 + 851.82527 + 890.45910 + 929.09293 + 967.72677 + 1006.36060 + 1044.99443 + 1084.09850 + 1122.73233 + 1161.36617 + 2/1 diff --git a/scales/temp31smith.scl b/scales/temp31smith.scl new file mode 100644 index 0000000..02f65ae --- /dev/null +++ b/scales/temp31smith.scl @@ -0,0 +1,36 @@ +! temp31smith.scl +! +Gene Ward Smith, {225/224, 385/384, 1331/1323}, 11-limit TOP + 31 +! + 38.39000 + 76.78000 + 115.17000 + 153.56000 + 191.95000 + 230.34000 + 268.73000 + 307.12000 + 345.51000 + 383.90000 + 422.29000 + 460.68000 + 499.07000 + 547.75000 + 586.14000 + 624.53000 + 662.92000 + 701.31000 + 739.70000 + 778.09000 + 816.48000 + 854.87000 + 893.26000 + 931.65000 + 970.04000 + 1008.43000 + 1046.82000 + 1085.21000 + 1123.60000 + 1161.99000 + 1200.38000 diff --git a/scales/temp31so2o.scl b/scales/temp31so2o.scl new file mode 100644 index 0000000..3e2ceeb --- /dev/null +++ b/scales/temp31so2o.scl @@ -0,0 +1,36 @@ +! temp31so2o.scl +! +Seventh beats twice octave opposite + 31 +! + 38.73505 + 77.47010 + 116.20515 + 154.94020 + 193.67525 + 232.41031 + 271.14536 + 309.88041 + 348.61546 + 387.35051 + 426.08556 + 464.82061 + 503.55566 + 542.29071 + 581.02576 + 619.76081 + 658.49587 + 697.23092 + 735.96597 + 774.70102 + 813.43607 + 852.17112 + 890.90617 + 929.64122 + 968.37627 + 1007.11132 + 1045.84637 + 1084.58143 + 1123.31648 + 1162.05153 + 1200.78658 diff --git a/scales/temp31st2o.scl b/scales/temp31st2o.scl new file mode 100644 index 0000000..0b12548 --- /dev/null +++ b/scales/temp31st2o.scl @@ -0,0 +1,36 @@ +! temp31st2o.scl +! +Seventh beats twice third opposite + 31 +! + 38.70878 + 77.41756 + 116.12634 + 154.83512 + 193.54390 + 232.25268 + 270.96145 + 309.67023 + 348.37901 + 387.08779 + 425.79657 + 464.50535 + 503.21413 + 541.92291 + 580.63169 + 619.34047 + 658.04925 + 696.75803 + 735.46680 + 774.17558 + 812.88436 + 851.59314 + 890.30192 + 929.01070 + 967.71948 + 1006.42826 + 1045.13704 + 1083.84582 + 1122.55460 + 1161.26338 + 1199.97216 diff --git a/scales/temp31to.scl b/scales/temp31to.scl new file mode 100644 index 0000000..1c1238d --- /dev/null +++ b/scales/temp31to.scl @@ -0,0 +1,36 @@ +! temp31to.scl +! +Third beats equal octave opposite + 31 +! + 38.67471 + 77.34942 + 116.02413 + 154.69884 + 193.37355 + 232.04827 + 270.72298 + 309.39769 + 348.07240 + 386.74711 + 425.42182 + 464.09653 + 502.77124 + 541.44595 + 580.12066 + 618.79537 + 657.47009 + 696.14480 + 734.81951 + 773.49422 + 812.16893 + 850.84364 + 889.51835 + 928.19306 + 966.86777 + 1005.54248 + 1044.21719 + 1082.89190 + 1121.56662 + 1160.24133 + 1198.91604 diff --git a/scales/temp31w10.scl b/scales/temp31w10.scl new file mode 100644 index 0000000..1a34d19 --- /dev/null +++ b/scales/temp31w10.scl @@ -0,0 +1,36 @@ +! temp31w10.scl +! +Cycle of 31 thirds tempered by 1/10 Wuerschmidt comma + 31 +! + 37.62527 + 75.25054 + 112.87581 + 161.70661 + 199.33189 + 236.95716 + 75/64 + 312.20770 + 349.83297 + 387.45824 + 425.08351 + 462.70879 + 500.33406 + 468/343 + 586.79013 + 624.41540 + 662.04067 + 699.66594 + 737.29121 + 774.91649 + 812.54176 + 850.16703 + 887.79230 + 128/75 + 974.24837 + 1011.87364 + 1049.49891 + 1087.12419 + 1124.74946 + 1162.37473 + 2/1 diff --git a/scales/temp31w11.scl b/scales/temp31w11.scl new file mode 100644 index 0000000..c04668f --- /dev/null +++ b/scales/temp31w11.scl @@ -0,0 +1,36 @@ +! temp31w11.scl +! +Cycle of 31 thirds tempered by 1/11 Wuerschmidt comma + 31 +! + 37.93742 + 75.87483 + 113.81225 + 159.72970 + 197.66712 + 235.60453 + 273.54195 + 311.47936 + 349.41678 + 387.35419 + 425.29161 + 463.22903 + 501.16644 + 512/375 + 585.02131 + 622.95873 + 375/256 + 698.83356 + 736.77097 + 774.70839 + 812.64581 + 850.58322 + 888.52064 + 926.45805 + 972.37551 + 1010.31292 + 1048.25034 + 1086.18775 + 1124.12517 + 1162.06258 + 2/1 diff --git a/scales/temp31w12.scl b/scales/temp31w12.scl new file mode 100644 index 0000000..8223ebd --- /dev/null +++ b/scales/temp31w12.scl @@ -0,0 +1,36 @@ +! temp31w12.scl +! +Cycle of 31 thirds tempered by 1/12 Wuerschmidt comma + 31 +! + 38.19754 + 76.39507 + 114.59261 + 158.08227 + 196.27981 + 234.47734 + 272.67488 + 310.87242 + 349.06995 + 387.26749 + 425.46502 + 463.66256 + 501.86010 + 540.05763 + 583.54730 + 621.74483 + 659.94237 + 698.13990 + 736.33744 + 774.53498 + 812.73251 + 850.93005 + 889.12758 + 927.32512 + 970.81478 + 1009.01232 + 1875/1024 + 1085.40739 + 1123.60493 + 1161.80246 + 2/1 diff --git a/scales/temp31w13.scl b/scales/temp31w13.scl new file mode 100644 index 0000000..2ac514b --- /dev/null +++ b/scales/temp31w13.scl @@ -0,0 +1,36 @@ +! temp31w13.scl +! +Cycle of 31 thirds tempered by 1/13 Wuerschmidt comma + 31 +! + 38.41764 + 76.83528 + 115.25291 + 156.68829 + 195.10593 + 9375/8192 + 271.94121 + 310.35885 + 348.77648 + 387.19412 + 425.61176 + 464.02940 + 502.44703 + 805/589 + 582.30005 + 620.71769 + 659.13533 + 697.55297 + 735.97060 + 774.38824 + 812.80588 + 851.22352 + 889.64115 + 928.05879 + 969.49417 + 1007.91181 + 1046.32945 + 1084.74709 + 1123.16472 + 1161.58236 + 2/1 diff --git a/scales/temp31w14.scl b/scales/temp31w14.scl new file mode 100644 index 0000000..33c5e60 --- /dev/null +++ b/scales/temp31w14.scl @@ -0,0 +1,36 @@ +! temp31w14.scl +! +Cycle of 31 thirds tempered by 1/14 Wuerschmidt comma + 31 +! + 38.60630 + 77.21259 + 115.81889 + 155.49346 + 194.09975 + 232.70605 + 271.31235 + 309.91864 + 348.52494 + 387.13123 + 425.73753 + 464.34383 + 502.95012 + 541.55642 + 581.23099 + 46875/32768 + 658.44358 + 697.04988 + 735.65617 + 774.26247 + 255879/160000 + 851.47506 + 890.08136 + 928.68765 + 968.36222 + 1006.96852 + 1045.57481 + 1084.18111 + 1122.78741 + 1161.39370 + 2/1 diff --git a/scales/temp31w15.scl b/scales/temp31w15.scl new file mode 100644 index 0000000..7140991 --- /dev/null +++ b/scales/temp31w15.scl @@ -0,0 +1,36 @@ +! temp31w15.scl +! +Cycle of 31 thirds tempered by 1/15 Wuerschmidt comma, almost 31-tET + 31 +! + 38.76980 + 77.53960 + 116.30940 + 154.45793 + 193.22773 + 231.99753 + 270.76733 + 309.53713 + 348.30693 + 387.07673 + 425.84653 + 464.61633 + 503.38613 + 542.15593 + 580.30446 + 619.07426 + 657.84407 + 696.61387 + 735.38367 + 774.15347 + 812.92327 + 851.69307 + 890.46287 + 929.23267 + 967.38120 + 234375/131072 + 1044.92080 + 1083.69060 + 1122.46040 + 1161.23020 + 2/1 diff --git a/scales/temp31w8.scl b/scales/temp31w8.scl new file mode 100644 index 0000000..ce703b1 --- /dev/null +++ b/scales/temp31w8.scl @@ -0,0 +1,36 @@ +! temp31w8.scl +! +Cycle of 31 thirds tempered by 1/8 Wuerschmidt comma + 31 +! + 36.76687 + 73.53375 + 110.30062 + 167.14313 + 9/8 + 240.67688 + 277.44375 + 314.21063 + 350.97750 + 387.74438 + 424.51125 + 461.27812 + 4/3 + 534.81187 + 591.65438 + 628.42125 + 665.18813 + 3/2 + 738.72188 + 775.48875 + 812.25562 + 849.02250 + 885.78937 + 922.55625 + 979.39875 + 1016.16563 + 1052.93250 + 1089.69938 + 1126.46625 + 1163.23313 + 2/1 diff --git a/scales/temp31w9.scl b/scales/temp31w9.scl new file mode 100644 index 0000000..5853512 --- /dev/null +++ b/scales/temp31w9.scl @@ -0,0 +1,36 @@ +! temp31w9.scl +! +Cycle of 31 thirds tempered by 1/9 Wuerschmidt comma + 31 +! + 37.24376 + 74.48752 + 16/15 + 164.12284 + 201.36660 + 238.61037 + 275.85413 + 313.09789 + 350.34165 + 387.58541 + 424.82917 + 462.07294 + 499.31670 + 536.56046 + 588.95202 + 626.19578 + 663.43954 + 700.68330 + 737.92706 + 775.17083 + 812.41459 + 849.65835 + 886.90211 + 924.14587 + 225/128 + 1013.78119 + 1051.02495 + 15/8 + 1125.51248 + 1162.75624 + 2/1 diff --git a/scales/temp32ebf.scl b/scales/temp32ebf.scl new file mode 100644 index 0000000..c6a5b7e --- /dev/null +++ b/scales/temp32ebf.scl @@ -0,0 +1,37 @@ +! temp32ebf.scl +! +Cycle of 32 equal beating fifths + 32 +! + 35.14022 + 71.40470 + 108.80499 + 147.35125 + 187.05220 + 227.91507 + 262.57622 + 298.35625 + 335.26730 + 373.32013 + 412.52407 + 452.88703 + 487.13316 + 522.49332 + 558.98010 + 596.60481 + 635.37731 + 675.30604 + 716.39795 + 751.24915 + 787.22140 + 824.32660 + 862.57527 + 901.97652 + 942.53797 + 976.94891 + 1012.47583 + 1049.13114 + 1086.92594 + 1125.86987 + 1165.97116 + 2/1 diff --git a/scales/temp33a12.scl b/scales/temp33a12.scl new file mode 100644 index 0000000..7e3f293 --- /dev/null +++ b/scales/temp33a12.scl @@ -0,0 +1,38 @@ +! temp33a12.scl +! +Cycle of 33 fifths tempered by 1/12 "11 fifths" comma + 33 +! + 34.82342 + 69.64683 + 104.47025 + 146.55470 + 181.37812 + 216.20154 + 251.02495 + 285.84837 + 327.93282 + 362.75624 + 397.57966 + 432.40307 + 467.22649 + 509.31094 + 544.13436 + 578.95777 + 613.78119 + 655.86564 + 690.68906 + 725.51248 + 760.33589 + 795.15931 + 837.24376 + 872.06718 + 906.89060 + 941.71401 + 225/128 + 1018.62188 + 1053.44530 + 15/8 + 1123.09213 + 1165.17658 + 2/1 diff --git a/scales/temp34ebsi.scl b/scales/temp34ebsi.scl new file mode 100644 index 0000000..30f8bf3 --- /dev/null +++ b/scales/temp34ebsi.scl @@ -0,0 +1,39 @@ +! temp34ebsi.scl +! +Cycle of 34 equal beating major sixths + 34 +! + 35.18973 + 70.99215 + 106.01272 + 141.64651 + 176.50546 + 211.97812 + 246.68259 + 282.00119 + 317.93207 + 353.07573 + 388.83224 + 423.80880 + 459.39873 + 494.21562 + 529.64634 + 564.31061 + 599.58912 + 635.48003 + 670.58540 + 706.30373 + 741.24371 + 776.79716 + 811.57908 + 846.97493 + 881.60577 + 916.85093 + 952.70861 + 987.78213 + 1023.46871 + 1058.37826 + 1093.90137 + 1128.65421 + 1164.02105 + 2/1 diff --git a/scales/temp34ebt.scl b/scales/temp34ebt.scl new file mode 100644 index 0000000..383dc46 --- /dev/null +++ b/scales/temp34ebt.scl @@ -0,0 +1,39 @@ +! temp34ebt.scl +! +Cycle of 34 equal beating thirds + 34 +! + 34.76249 + 69.65037 + 104.66158 + 139.79408 + 175.04582 + 210.41481 + 245.89905 + 281.49657 + 317.20540 + 353.02362 + 388.94932 + 423.65945 + 458.49584 + 493.45640 + 528.53908 + 563.74186 + 599.06270 + 634.49962 + 670.05062 + 705.71375 + 741.48706 + 777.36863 + 812.03699 + 846.83229 + 881.75243 + 916.79538 + 951.95907 + 987.24149 + 1022.64064 + 1058.15452 + 1093.78117 + 1129.51863 + 1165.36498 + 2/1 diff --git a/scales/temp34rb2a.scl b/scales/temp34rb2a.scl new file mode 100644 index 0000000..bebe8be --- /dev/null +++ b/scales/temp34rb2a.scl @@ -0,0 +1,39 @@ +! temp34rb2a.scl +! +Cycle of 34 thirds, 5/4 beats twice 3/2 + 34 +! + 37.17204 + 74.34408 + 111.51612 + 148.68816 + 185.86020 + 201.74912 + 238.92116 + 276.09320 + 313.26524 + 350.43728 + 387.60932 + 424.78136 + 461.95340 + 499.12544 + 536.29748 + 573.46952 + 610.64156 + 626.53048 + 663.70252 + 700.87456 + 738.04660 + 775.21864 + 812.39068 + 849.56272 + 886.73476 + 923.90680 + 961.07884 + 998.25088 + 1014.13980 + 1051.31184 + 1088.48388 + 1125.65592 + 1162.82796 + 2/1 diff --git a/scales/temp34w10.scl b/scales/temp34w10.scl new file mode 100644 index 0000000..612207c --- /dev/null +++ b/scales/temp34w10.scl @@ -0,0 +1,39 @@ +! temp34w10.scl +! +Cycle of 34 thirds tempered by 1/10 Wuerschmidt comma + 34 +! + 37.62527 + 75.25054 + 112.87581 + 124.08134 + 161.70661 + 199.33189 + 236.95716 + 75/64 + 312.20770 + 349.83297 + 387.45824 + 425.08351 + 462.70879 + 500.33406 + 511.53959 + 5625/4096 + 586.79013 + 624.41540 + 662.04067 + 699.66594 + 737.29121 + 774.91649 + 812.54176 + 850.16703 + 887.79230 + 128/75 + 936.62310 + 974.24837 + 1011.87364 + 1049.49891 + 1087.12419 + 1124.74946 + 1162.37473 + 2/1 diff --git a/scales/temp34w5.scl b/scales/temp34w5.scl new file mode 100644 index 0000000..6334cf2 --- /dev/null +++ b/scales/temp34w5.scl @@ -0,0 +1,39 @@ +! temp34w5.scl +! +Cycle of 34 thirds tempered by 1/5 Wuerschmidt comma + 34 +! + 34.19168 + 68.38337 + 102.57505 + 149.26098 + 183.45267 + 217.64435 + 251.83603 + 18432/15625 + 320.21940 + 354.41109 + 388.60277 + 422.79446 + 125/96 + 491.17783 + 537.86375 + 572.05544 + 606.24712 + 640.43881 + 674.63049 + 708.82217 + 192/125 + 777.20554 + 811.39723 + 845.58891 + 879.78060 + 15625/9216 + 960.65821 + 994.84989 + 3538944/1953125 + 1063.23326 + 1097.42495 + 1131.61663 + 1165.80832 + 2/1 diff --git a/scales/temp34w6.scl b/scales/temp34w6.scl new file mode 100644 index 0000000..2636b60 --- /dev/null +++ b/scales/temp34w6.scl @@ -0,0 +1,39 @@ +! temp34w6.scl +! +Cycle of 34 thirds tempered by 1/6 Wuerschmidt comma + 34 +! + 35.33621 + 25/24 + 105.53155 + 140.86777 + 176.20398 + 211.54020 + 246.87641 + 282.21262 + 317.54884 + 352.88505 + 388.22126 + 423.55748 + 458.89369 + 494.22990 + 529.08903 + 564.42524 + 599.76146 + 635.09767 + 670.43388 + 705.77010 + 741.10631 + 776.44252 + 811.77874 + 847.11495 + 882.45116 + 663552/390625 + 952.64651 + 27648/15625 + 1023.31893 + 1152/625 + 1093.99136 + 48/25 + 1164.66379 + 2/1 diff --git a/scales/temp34w7.scl b/scales/temp34w7.scl new file mode 100644 index 0000000..bb4a130 --- /dev/null +++ b/scales/temp34w7.scl @@ -0,0 +1,39 @@ +! temp34w7.scl +! +Cycle of 34 thirds tempered by 1/7 Wuerschmidt comma + 34 +! + 36.15373 + 72.30747 + 98.71888 + 134.87262 + 171.02635 + 207.18008 + 243.33382 + 279.48755 + 6/5 + 351.79502 + 387.94876 + 424.10249 + 460.25622 + 496.40996 + 522.82137 + 558.97511 + 595.12884 + 36/25 + 667.43631 + 703.59004 + 739.74378 + 775.89751 + 812.05124 + 848.20498 + 5/3 + 910.77013 + 216/125 + 983.07760 + 1019.23133 + 1055.38506 + 1091.53880 + 1127.69253 + 1163.84627 + 2/1 diff --git a/scales/temp34w8.scl b/scales/temp34w8.scl new file mode 100644 index 0000000..6fd978a --- /dev/null +++ b/scales/temp34w8.scl @@ -0,0 +1,39 @@ +! temp34w8.scl +! +Cycle of 34 thirds tempered by 1/8 Wuerschmidt comma + 34 +! + 36.76687 + 73.53375 + 93.60938 + 130.37625 + 167.14313 + 9/8 + 240.67688 + 277.44375 + 314.21063 + 350.97750 + 387.74438 + 424.51125 + 461.27812 + 4/3 + 518.12063 + 554.88750 + 591.65438 + 628.42125 + 665.18813 + 3/2 + 738.72188 + 775.48875 + 812.25562 + 849.02250 + 885.78937 + 27/16 + 942.63188 + 979.39875 + 1016.16563 + 1052.93250 + 1089.69938 + 1126.46625 + 1163.23313 + 2/1 diff --git a/scales/temp34w9.scl b/scales/temp34w9.scl new file mode 100644 index 0000000..40b3fc5 --- /dev/null +++ b/scales/temp34w9.scl @@ -0,0 +1,39 @@ +! temp34w9.scl +! +Cycle of 34 thirds tempered by 1/9 Wuerschmidt comma + 34 +! + 37.24376 + 74.48752 + 16/15 + 126.87908 + 164.12284 + 201.36660 + 238.61037 + 275.85413 + 313.09789 + 350.34165 + 387.58541 + 424.82917 + 462.07294 + 499.31670 + 514.46449 + 551.70825 + 588.95202 + 626.19578 + 663.43954 + 700.68330 + 737.92706 + 775.17083 + 812.41459 + 849.65835 + 886.90211 + 902.04991 + 939.29367 + 225/128 + 1013.78119 + 1051.02495 + 15/8 + 1125.51248 + 1162.75624 + 2/1 diff --git a/scales/temp35ebsi.scl b/scales/temp35ebsi.scl new file mode 100644 index 0000000..e08c733 --- /dev/null +++ b/scales/temp35ebsi.scl @@ -0,0 +1,40 @@ +! temp35ebsi.scl +! +Cycle of 35 equal beating major sixths + 35 +! + 32.47084 + 65.50566 + 99.10332 + 133.26232 + 167.98080 + 203.25653 + 239.08697 + 275.46919 + 307.52657 + 340.14854 + 373.33422 + 407.08237 + 441.39140 + 476.25934 + 511.68389 + 547.66240 + 584.19186 + 616.37642 + 649.12540 + 682.43785 + 716.31245 + 750.74751 + 785.74100 + 821.29053 + 857.39336 + 894.04643 + 926.33775 + 959.19334 + 992.61218 + 1026.59287 + 1061.13367 + 1096.23247 + 1131.88682 + 1168.09392 + 2/1 diff --git a/scales/temp36ebs.scl b/scales/temp36ebs.scl new file mode 100644 index 0000000..5828700 --- /dev/null +++ b/scales/temp36ebs.scl @@ -0,0 +1,41 @@ +! temp36ebs.scl +! +Cycle of 36 equal beating sevenths + 36 +! + 32.76712 + 65.74796 + 98.93984 + 132.34007 + 165.94594 + 199.75472 + 233.76369 + 266.48229 + 299.41521 + 332.55978 + 365.91331 + 399.47309 + 433.23640 + 467.20050 + 499.87677 + 532.76788 + 565.87116 + 599.18393 + 632.70349 + 666.42710 + 700.35205 + 732.99137 + 765.84598 + 798.91322 + 832.19041 + 865.67485 + 899.36381 + 933.25457 + 965.86162 + 998.68436 + 1031.72013 + 1064.96625 + 1098.42002 + 1132.07872 + 1165.93962 + 2/1 diff --git a/scales/temp37ebs.scl b/scales/temp37ebs.scl new file mode 100644 index 0000000..42d6e63 --- /dev/null +++ b/scales/temp37ebs.scl @@ -0,0 +1,42 @@ +! temp37ebs.scl +! +Cycle of 37 equal beating sevenths + 37 +! + 32.27555 + 65.80301 + 97.68070 + 130.80255 + 162.30170 + 195.03749 + 226.17620 + 258.54419 + 292.16588 + 324.13146 + 357.34293 + 388.92575 + 421.74687 + 452.96527 + 485.41459 + 519.11914 + 551.16204 + 584.45234 + 616.10872 + 649.00487 + 680.29334 + 712.81415 + 746.59156 + 778.70240 + 812.06198 + 843.78301 + 876.74511 + 908.09513 + 940.67876 + 974.52017 + 1006.69072 + 1040.11115 + 1071.88897 + 1104.90897 + 1136.31307 + 1168.95186 + 2/1 diff --git a/scales/temp37ebt.scl b/scales/temp37ebt.scl new file mode 100644 index 0000000..4788b77 --- /dev/null +++ b/scales/temp37ebt.scl @@ -0,0 +1,42 @@ +! temp37ebt.scl +! +Cycle of 37 equal beating thirds + 37 +! + 31.62023 + 63.41174 + 95.37232 + 127.49976 + 159.79183 + 192.24632 + 224.86099 + 257.63363 + 290.56202 + 323.64395 + 356.87720 + 390.25957 + 421.80846 + 453.52955 + 485.42062 + 517.47947 + 549.70386 + 582.09159 + 614.64042 + 647.34813 + 680.21251 + 713.23134 + 746.40240 + 779.72350 + 811.21555 + 842.88053 + 874.71622 + 906.72040 + 938.89086 + 971.22537 + 1003.72172 + 1036.37767 + 1069.19102 + 1102.15955 + 1135.28103 + 1168.55327 + 2/1 diff --git a/scales/temp40ebt.scl b/scales/temp40ebt.scl new file mode 100644 index 0000000..277a2ea --- /dev/null +++ b/scales/temp40ebt.scl @@ -0,0 +1,45 @@ +! temp40ebt.scl +! +Cycle of 40 equal beating thirds + 40 +! + 28.94137 + 58.08433 + 87.42687 + 116.96697 + 146.70258 + 176.63165 + 206.75207 + 237.06175 + 267.55854 + 298.24032 + 329.10493 + 360.15019 + 391.37393 + 420.23153 + 449.29153 + 478.55194 + 508.01076 + 537.66593 + 567.51541 + 597.55711 + 627.78894 + 658.20877 + 688.81446 + 719.60388 + 750.57484 + 781.72519 + 810.51613 + 839.51010 + 868.70515 + 898.09925 + 927.69038 + 957.47649 + 987.45552 + 1017.62535 + 1047.98388 + 1078.52898 + 1109.25851 + 1140.17030 + 1171.26217 + 2/1 diff --git a/scales/temp41ebf.scl b/scales/temp41ebf.scl new file mode 100644 index 0000000..0382721 --- /dev/null +++ b/scales/temp41ebf.scl @@ -0,0 +1,46 @@ +! temp41ebf.scl +! +Cycle of 41 equal beating fifths + 41 +! + 29.34318 + 58.58766 + 87.73539 + 117.12045 + 146.40595 + 175.59390 + 205.01881 + 234.34336 + 263.56958 + 292.69943 + 322.06675 + 351.33487 + 380.50579 + 409.91382 + 439.22183 + 468.43184 + 497.54581 + 526.89738 + 556.15007 + 585.30587 + 614.69891 + 643.99224 + 673.18786 + 702.62037 + 731.95237 + 761.18589 + 790.32289 + 819.69730 + 848.97237 + 878.15010 + 907.56488 + 936.87951 + 966.09600 + 995.21631 + 1024.57418 + 1053.83305 + 1082.99489 + 1112.39393 + 1141.69313 + 1170.89450 + 2/1 diff --git a/scales/temp43ebf.scl b/scales/temp43ebf.scl new file mode 100644 index 0000000..82605f3 --- /dev/null +++ b/scales/temp43ebf.scl @@ -0,0 +1,48 @@ +! temp43ebf.scl +! +Cycle of 43 equal beating fifths + 43 +! + 28.50596 + 56.17567 + 83.04637 + 112.05706 + 140.20868 + 167.53993 + 194.08700 + 222.75382 + 250.57716 + 277.59469 + 306.76137 + 335.06186 + 362.53533 + 389.21840 + 418.02975 + 445.99108 + 473.14049 + 502.44723 + 530.88139 + 558.48253 + 585.28766 + 614.22870 + 642.31384 + 669.58157 + 696.06789 + 724.67015 + 752.43183 + 779.39044 + 808.49452 + 836.73528 + 864.15168 + 890.78018 + 919.53355 + 947.43951 + 974.53602 + 1003.78658 + 1032.16712 + 1059.71704 + 1086.47322 + 1115.36225 + 1143.39773 + 1170.61800 + 2/1 diff --git a/scales/temp4ebmt.scl b/scales/temp4ebmt.scl new file mode 100644 index 0000000..718746f --- /dev/null +++ b/scales/temp4ebmt.scl @@ -0,0 +1,9 @@ +! temp4ebmt.scl +! +Cycle of 4 equal beating minor thirds + 4 +! + 796/671 + 86/61 + 1126/671 + 2/1 diff --git a/scales/temp4ebsi.scl b/scales/temp4ebsi.scl new file mode 100644 index 0000000..5f8dd95 --- /dev/null +++ b/scales/temp4ebsi.scl @@ -0,0 +1,9 @@ +! temp4ebsi.scl +! +Cycle of 4 equal beating major sixths + 4 +! + 473/398 + 563/398 + 671/398 + 2/1 diff --git a/scales/temp53ebs.scl b/scales/temp53ebs.scl new file mode 100644 index 0000000..674c350 --- /dev/null +++ b/scales/temp53ebs.scl @@ -0,0 +1,58 @@ +! temp53ebs.scl +! +Cycle of 53 equal beating harmonic sevenths + 53 +! + 22.01475 + 45.02110 + 69.04974 + 90.75183 + 113.43560 + 137.13180 + 158.53754 + 180.91545 + 204.29632 + 225.42085 + 247.50842 + 270.58988 + 294.69590 + 316.46696 + 339.22191 + 362.99146 + 384.46261 + 406.90802 + 430.35851 + 451.54513 + 473.69680 + 496.84439 + 521.01853 + 542.85030 + 565.66789 + 589.50201 + 611.03071 + 633.53553 + 657.04727 + 678.28851 + 700.49659 + 723.70235 + 747.93641 + 769.82159 + 792.69427 + 816.58516 + 838.16448 + 860.72155 + 884.28714 + 905.57641 + 927.83408 + 951.09098 + 975.37771 + 997.30983 + 1020.23094 + 1044.17174 + 1065.79554 + 1088.39852 + 1112.01144 + 1133.34292 + 1155.64416 + 1178.94598 + 2/1 diff --git a/scales/temp53ebsi.scl b/scales/temp53ebsi.scl new file mode 100644 index 0000000..7efa0df --- /dev/null +++ b/scales/temp53ebsi.scl @@ -0,0 +1,58 @@ +! temp53ebsi.scl +! +Cycle of 53 equal beating major sixths + 53 +! + 22.76241 + 45.19314 + 68.22076 + 90.90941 + 113.26840 + 136.22333 + 158.84129 + 181.13152 + 204.01677 + 226.56698 + 248.79128 + 271.60973 + 294.09496 + 317.17780 + 339.92015 + 362.33136 + 385.33921 + 408.00864 + 430.34893 + 453.28491 + 475.88445 + 498.15675 + 521.02383 + 543.55637 + 565.76349 + 588.56451 + 611.03280 + 634.09848 + 656.82413 + 679.21911 + 702.21051 + 724.86394 + 747.18867 + 770.10888 + 792.69309 + 814.95048 + 837.80244 + 860.32028 + 882.51309 + 905.29962 + 927.75381 + 950.80520 + 973.51696 + 995.89844 + 1018.87614 + 1041.51626 + 1063.82804 + 1086.73513 + 1109.30657 + 1131.55154 + 1154.39093 + 1176.89653 + 2/1 diff --git a/scales/temp53ebt.scl b/scales/temp53ebt.scl new file mode 100644 index 0000000..94589c3 --- /dev/null +++ b/scales/temp53ebt.scl @@ -0,0 +1,58 @@ +! temp53ebt.scl +! +Cycle of 53 equal beating thirds + 53 +! + 22.60521 + 45.67215 + 68.21759 + 91.22434 + 113.71172 + 136.65999 + 159.09096 + 181.98241 + 204.35856 + 227.19480 + 249.51767 + 272.30024 + 294.57132 + 317.30173 + 339.52248 + 362.20217 + 384.37398 + 407.00436 + 430.09666 + 452.66655 + 475.69794 + 498.20907 + 521.18128 + 543.63533 + 566.55004 + 588.94862 + 611.80745 + 634.15212 + 656.95666 + 679.24894 + 702.00069 + 724.24205 + 746.94249 + 769.13433 + 791.78490 + 814.89752 + 837.48702 + 860.53814 + 883.06832 + 906.05971 + 928.53226 + 951.46561 + 973.88217 + 996.75911 + 1019.12126 + 1041.94340 + 1064.25266 + 1087.02152 + 1109.27939 + 1131.99647 + 1154.20436 + 1176.87109 + 2/1 diff --git a/scales/temp57ebs.scl b/scales/temp57ebs.scl new file mode 100644 index 0000000..00984bd --- /dev/null +++ b/scales/temp57ebs.scl @@ -0,0 +1,62 @@ +! temp57ebs.scl +! +Cycle of 57 equal beating harmonic sevenths + 57 +! + 21.06123 + 41.99546 + 63.08251 + 84.04210 + 105.15438 + 126.13874 + 147.27568 + 168.28425 + 189.44527 + 210.47750 + 231.66206 + 252.71739 + 273.64583 + 294.72711 + 315.68104 + 336.78769 + 357.76652 + 378.89795 + 399.90111 + 421.05676 + 442.08370 + 463.26301 + 484.31318 + 505.23655 + 526.31280 + 547.26177 + 568.36349 + 589.33748 + 610.46410 + 631.46254 + 652.61348 + 673.63581 + 694.81052 + 715.85618 + 736.77512 + 757.84695 + 778.79160 + 799.88901 + 820.85877 + 841.98118 + 862.97548 + 884.12231 + 905.14059 + 926.31129 + 947.35300 + 968.26806 + 989.33604 + 1010.27689 + 1031.37054 + 1052.33660 + 1073.45532 + 1094.44601 + 1115.58924 + 1136.60399 + 1157.77117 + 1178.80943 + 2/1 diff --git a/scales/temp59ebt.scl b/scales/temp59ebt.scl new file mode 100644 index 0000000..faddf70 --- /dev/null +++ b/scales/temp59ebt.scl @@ -0,0 +1,64 @@ +! temp59ebt.scl +! +Cycle of 59 equal beating thirds + 59 +! + 20.34168 + 40.64185 + 60.98841 + 81.29338 + 101.64470 + 121.95437 + 142.31034 + 162.62459 + 182.98510 + 203.30384 + 223.66879 + 243.99190 + 264.36119 + 284.68858 + 305.06210 + 325.39367 + 345.77133 + 366.10698 + 386.48869 + 406.82833 + 427.12648 + 447.47104 + 467.77405 + 488.12341 + 508.43116 + 528.78522 + 549.09759 + 569.45624 + 589.77314 + 610.13627 + 630.45759 + 650.82510 + 671.15074 + 691.52252 + 711.85238 + 732.22834 + 752.56232 + 772.94237 + 793.28038 + 813.57692 + 833.91988 + 854.22131 + 874.56911 + 894.87532 + 915.22786 + 935.53873 + 955.89588 + 976.21132 + 996.57299 + 1016.89287 + 1037.25896 + 1057.58320 + 1077.95359 + 1098.28208 + 1118.65669 + 1138.98933 + 1159.36805 + 1179.70475 + 2/1 diff --git a/scales/temp5ebf.scl b/scales/temp5ebf.scl new file mode 100644 index 0000000..11d714a --- /dev/null +++ b/scales/temp5ebf.scl @@ -0,0 +1,10 @@ +! temp5ebf.scl +! +Cycle of 5 equal beating fifths + 5 +! + 367/319 + 421/319 + 485/319 + 557/319 + 2/1 diff --git a/scales/temp5ebs.scl b/scales/temp5ebs.scl new file mode 100644 index 0000000..afe69a1 --- /dev/null +++ b/scales/temp5ebs.scl @@ -0,0 +1,10 @@ +! temp5ebs.scl +! +Cycle of 5 equal beating harmonic sevenths + 5 +! + 10553/9181 + 12121/9181 + 13913/9181 + 15961/9181 + 2/1 diff --git a/scales/temp6.scl b/scales/temp6.scl new file mode 100644 index 0000000..c5d5cd8 --- /dev/null +++ b/scales/temp6.scl @@ -0,0 +1,11 @@ +! temp6.scl +! +Tempered wholetone scale with approximations to 5/4 (4), 7/5 (4) and 7/4 (1) + 6 +! + 193.15696 + 387.07411 + 618.24830 + 812.16545 + 1005.32241 + 2/1 diff --git a/scales/temp65ebf.scl b/scales/temp65ebf.scl new file mode 100644 index 0000000..c2eb549 --- /dev/null +++ b/scales/temp65ebf.scl @@ -0,0 +1,70 @@ +! temp65ebf.scl +! +Cycle of 65 equal beating fifths + 65 +! + 18.36726 + 36.78835 + 55.26285 + 73.79034 + 92.37041 + 110.71505 + 129.11369 + 147.56590 + 166.07129 + 184.62942 + 202.95264 + 221.33001 + 239.76112 + 258.24557 + 276.78294 + 295.37280 + 313.72701 + 332.13514 + 350.59678 + 369.11151 + 387.67893 + 406.01120 + 424.39756 + 442.83760 + 461.33091 + 479.87706 + 498.47564 + 516.83836 + 535.25494 + 553.72496 + 572.24802 + 590.82368 + 609.16402 + 627.55838 + 646.00636 + 664.50754 + 683.06151 + 701.38064 + 719.75397 + 738.18108 + 756.66154 + 775.19496 + 793.78091 + 812.13128 + 830.53561 + 848.99348 + 867.50448 + 886.06818 + 904.39682 + 922.77959 + 941.21606 + 959.70582 + 978.24846 + 996.84355 + 1015.20287 + 1033.61606 + 1052.08273 + 1070.60246 + 1089.17482 + 1107.51193 + 1125.90309 + 1144.34790 + 1162.84593 + 1181.39676 + 2/1 diff --git a/scales/temp65ebt.scl b/scales/temp65ebt.scl new file mode 100644 index 0000000..cdcf4da --- /dev/null +++ b/scales/temp65ebt.scl @@ -0,0 +1,70 @@ +! temp65ebt.scl +! +Cycle of 65 equal beating thirds + 65 +! + 18.48544 + 36.52225 + 55.05594 + 73.13931 + 91.72036 + 109.84946 + 128.47699 + 146.65096 + 165.32411 + 183.54212 + 202.26003 + 220.52125 + 239.28308 + 257.58669 + 276.39162 + 294.73682 + 313.58403 + 331.97003 + 350.85870 + 369.28473 + 388.21407 + 406.67934 + 424.69666 + 443.21055 + 461.27481 + 479.83642 + 497.94676 + 516.55521 + 534.71076 + 553.36519 + 571.56512 + 590.26466 + 608.50814 + 627.25195 + 645.53816 + 664.32541 + 682.65354 + 701.48340 + 719.85266 + 738.72431 + 757.13391 + 776.04657 + 794.49573 + 812.49750 + 830.99558 + 849.04457 + 867.59066 + 885.68601 + 904.27923 + 922.42008 + 941.05955 + 959.24505 + 977.92992 + 996.15924 + 1014.88865 + 1033.16097 + 1051.93409 + 1070.24859 + 1089.06459 + 1107.42048 + 1126.27854 + 1144.67502 + 1163.57435 + 1182.01065 + 2/1 diff --git a/scales/temp6eb2.scl b/scales/temp6eb2.scl new file mode 100644 index 0000000..11a9e64 --- /dev/null +++ b/scales/temp6eb2.scl @@ -0,0 +1,11 @@ +! temp6eb2.scl +! +Cycle of 6 equal beating 9/8 seconds + 6 +! + 302065/269297 + 19937/15841 + 1753/1241 + 25121/15841 + 479545/269297 + 2/1 diff --git a/scales/temp6teb.scl b/scales/temp6teb.scl new file mode 100644 index 0000000..61e9992 --- /dev/null +++ b/scales/temp6teb.scl @@ -0,0 +1,11 @@ +! temp6teb.scl +! +Cycle of 6 equal beating 6/5's in a twelfth + 6 +! + 37281/31031 + 4071/2821 + 591/341 + 5871/2821 + 77541/31031 + 3/1 diff --git a/scales/temp7-5ebf.scl b/scales/temp7-5ebf.scl new file mode 100644 index 0000000..5623941 --- /dev/null +++ b/scales/temp7-5ebf.scl @@ -0,0 +1,17 @@ +! temp7-5ebf.scl +! +7 equal beating fifths on white, 5 equal beating fifths on black + 12 +! + 70.71353 + 4151/3767 + 313.38190 + 4583/3767 + 5069/3767 + 551.03010 + 5581/3767 + 796.02752 + 6157/3767 + 1035.65861 + 6805/3767 + 2/1 diff --git a/scales/temp7ebf.scl b/scales/temp7ebf.scl new file mode 100644 index 0000000..08e46ae --- /dev/null +++ b/scales/temp7ebf.scl @@ -0,0 +1,12 @@ +! temp7ebf.scl +! +Cycle of 7 equal beating fifths + 7 +! + 4151/3767 + 4583/3767 + 5069/3767 + 5581/3767 + 6157/3767 + 6805/3767 + 2/1 diff --git a/scales/temp7ebnt.scl b/scales/temp7ebnt.scl new file mode 100644 index 0000000..37e8893 --- /dev/null +++ b/scales/temp7ebnt.scl @@ -0,0 +1,12 @@ +! temp7ebnt.scl +! +Cycle of 7 equal beating 11/9 neutral thirds + 7 +! + 171.33780 + 341.40222 + 513.30682 + 683.88085 + 856.25199 + 1027.24525 + 2/1 diff --git a/scales/temp8eb3q.scl b/scales/temp8eb3q.scl new file mode 100644 index 0000000..e9932a3 --- /dev/null +++ b/scales/temp8eb3q.scl @@ -0,0 +1,13 @@ +! temp8eb3q.scl +! +Cycle of 8 equal "beating" 12/11's + 8 +! + 149.79118 + 299.65248 + 449.57812 + 599.56279 + 749.60161 + 899.69010 + 1049.82416 + 2/1 diff --git a/scales/temp9ebmt.scl b/scales/temp9ebmt.scl new file mode 100644 index 0000000..649ca52 --- /dev/null +++ b/scales/temp9ebmt.scl @@ -0,0 +1,14 @@ +! temp9ebmt.scl +! +Cycle of 9 equal beating 7/6 septimal minor thirds + 9 +! + 133.32932 + 266.59840 + 399.94793 + 533.23570 + 666.60254 + 799.90634 + 933.28804 + 1066.60558 + 2/1 diff --git a/scales/tenn41a.scl b/scales/tenn41a.scl new file mode 100644 index 0000000..9de2e9d --- /dev/null +++ b/scales/tenn41a.scl @@ -0,0 +1,45 @@ +! tenn41a.scl +29&41 Tenney reduced fifths from -20 to 20 +41 +! +45/44 +25/24 +22/21 +15/14 +12/11 +10/9 +9/8 +63/55 +7/6 +25/21 +6/5 +11/9 +5/4 +14/11 +9/7 +55/42 +4/3 +15/11 +11/8 +88/63 +63/44 +16/11 +22/15 +3/2 +32/21 +14/9 +11/7 +8/5 +18/11 +5/3 +27/16 +189/110 +110/63 +16/9 +9/5 +11/6 +15/8 +21/11 +27/14 +55/28 +2/1 diff --git a/scales/tenn41b.scl b/scales/tenn41b.scl new file mode 100644 index 0000000..f68b6e2 --- /dev/null +++ b/scales/tenn41b.scl @@ -0,0 +1,45 @@ +! tenn41b.scl +41&53 Tenney reduced fifths from -20 to 20 +41 +! +55/54 +25/24 +81/77 +15/14 +27/25 +10/9 +9/8 +8/7 +7/6 +25/21 +6/5 +27/22 +5/4 +63/50 +9/7 +21/16 +4/3 +27/20 +25/18 +7/5 +10/7 +36/25 +40/27 +3/2 +32/21 +14/9 +100/63 +8/5 +44/27 +5/3 +27/16 +12/7 +7/4 +16/9 +9/5 +50/27 +15/8 +154/81 +27/14 +49/25 +2/1 diff --git a/scales/tenn41c.scl b/scales/tenn41c.scl new file mode 100644 index 0000000..bd19a13 --- /dev/null +++ b/scales/tenn41c.scl @@ -0,0 +1,45 @@ +! tenn41c.scl +53&118 Tenney reduced fifths from -20 to 20 +41 +! +81/80 +25/24 +256/243 +2187/2048 +27/25 +10/9 +9/8 +729/640 +88/75 +32/27 +19683/16384 +100/81 +8192/6561 +81/64 +32/25 +33/25 +4/3 +27/20 +25/18 +1024/729 +729/512 +36/25 +40/27 +3/2 +243/160 +25/16 +128/81 +6561/4096 +81/50 +32768/19683 +27/16 +75/44 +44/25 +16/9 +9/5 +50/27 +4096/2187 +243/128 +48/25 +99/50 +2/1 diff --git a/scales/tenney_11.scl b/scales/tenney_11.scl new file mode 100644 index 0000000..7e54312 --- /dev/null +++ b/scales/tenney_11.scl @@ -0,0 +1,16 @@ +! tenney_11.scl +! +Scale of James Tenney's "Spectrum II" (1995) for wind quintet + 11 +! + 17/16 + 9/8 + 19/16 + 5/4 + 21/16 + 11/8 + 3/2 + 25/16 + 13/8 + 7/4 + 2/1 diff --git a/scales/tenney_8.scl b/scales/tenney_8.scl new file mode 100644 index 0000000..4631293 --- /dev/null +++ b/scales/tenney_8.scl @@ -0,0 +1,13 @@ +! tenney_8.scl +! +James Tenney, first eight primes octatonic + 8 +! + 17/16 + 19/16 + 5/4 + 11/8 + 3/2 + 13/8 + 7/4 + 2/1 diff --git a/scales/terrain.scl b/scales/terrain.scl new file mode 100644 index 0000000..4d53384 --- /dev/null +++ b/scales/terrain.scl @@ -0,0 +1,17 @@ +! terrain.scl +! +JI version of generated scale for 63/50 and 10/9 effectively 250047/250000 (landscape) tempering in 2.9/5.9/7 subgroup +12 +! +50/49 +10/9 +500/441 +63/50 +9/7 +7/5 +10/7 +100/63 +81/50 +441/250 +9/5 +2/1 diff --git a/scales/tertia78.scl b/scales/tertia78.scl new file mode 100644 index 0000000..4d1e2c6 --- /dev/null +++ b/scales/tertia78.scl @@ -0,0 +1,82 @@ +! tertia78.scl +Tertiaseptal[78] in 140-tET tuning +78 +! +8.571429 +34.285714 +42.857143 +68.571429 +77.142857 +85.714286 +111.428571 +120.000000 +145.714286 +154.285714 +162.857143 +188.571429 +197.142857 +222.857143 +231.428571 +240.000000 +265.714286 +274.285714 +300.000000 +308.571429 +317.142857 +342.857143 +351.428571 +377.142857 +385.714286 +394.285714 +420.000000 +428.571429 +454.285714 +462.857143 +471.428571 +497.142857 +505.714286 +531.428571 +540.000000 +548.571429 +574.285714 +582.857143 +591.428571 +617.142857 +625.714286 +651.428571 +660.000000 +668.571429 +694.285714 +702.857143 +728.571429 +737.142857 +745.714286 +771.428571 +780.000000 +805.714286 +814.285714 +822.857143 +848.571429 +857.142857 +882.857143 +891.428571 +900.000000 +925.714286 +934.285714 +960.000000 +968.571429 +977.142857 +1002.857143 +1011.428571 +1037.142857 +1045.714286 +1054.285714 +1080.000000 +1088.571429 +1114.285714 +1122.857143 +1131.428571 +1157.142857 +1165.714286 +1191.428571 +2/1 diff --git a/scales/tertiadia.scl b/scales/tertiadia.scl new file mode 100644 index 0000000..a8b1222 --- /dev/null +++ b/scales/tertiadia.scl @@ -0,0 +1,17 @@ +! tertiadia.scl +! +Tertiadia 2048/2025 and 262144/253125 scale + 12 +! + 16/15 + 256/225 + 75/64 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 3375/2048 + 225/128 + 15/8 + 2/1 diff --git a/scales/tertiadie.scl b/scales/tertiadie.scl new file mode 100644 index 0000000..ba72243 --- /dev/null +++ b/scales/tertiadie.scl @@ -0,0 +1,17 @@ +! tertiadie.scl +! +First Tertiadie 262144/253125 and 128/125 scale + 12 +! + 16/15 + 256/225 + 75/64 + 5/4 + 4/3 + 64/45 + 375/256 + 25/16 + 5/3 + 2048/1125 + 15/8 + 2/1 diff --git a/scales/tet3a.scl b/scales/tet3a.scl new file mode 100644 index 0000000..4087843 --- /dev/null +++ b/scales/tet3a.scl @@ -0,0 +1,13 @@ +! tet3a.scl +! +Eight notes, two major one minor tetrad + 8 +! + 15/14 + 6/5 + 9/7 + 7/5 + 3/2 + 8/5 + 12/7 + 2/1 diff --git a/scales/tetragam-di.scl b/scales/tetragam-di.scl new file mode 100644 index 0000000..9404a12 --- /dev/null +++ b/scales/tetragam-di.scl @@ -0,0 +1,17 @@ +! tetragam-di.scl +! +Tetragam Dia2 + 12 +! + 16/15 + 10/9 + 10/9 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 5/3 + 7/4 + 2/1 diff --git a/scales/tetragam-enh.scl b/scales/tetragam-enh.scl new file mode 100644 index 0000000..8e11619 --- /dev/null +++ b/scales/tetragam-enh.scl @@ -0,0 +1,17 @@ +! tetragam-enh.scl +! +Tetragam Enharm. + 12 +! + 28/27 + 16/15 + 16/15 + 5/4 + 4/3 + 7/5 + 3/2 + 14/9 + 8/5 + 8/5 + 7/4 + 2/1 diff --git a/scales/tetragam-hex.scl b/scales/tetragam-hex.scl new file mode 100644 index 0000000..716886e --- /dev/null +++ b/scales/tetragam-hex.scl @@ -0,0 +1,17 @@ +! tetragam-hex.scl +! +Tetragam/Hexgam + 12 +! + 28/27 + 9/8 + 7/6 + 5/4 + 21/16 + 35/24 + 3/2 + 14/9 + 5/3 + 7/4 + 15/8 + 2/1 diff --git a/scales/tetragam-py.scl b/scales/tetragam-py.scl new file mode 100644 index 0000000..87ab10c --- /dev/null +++ b/scales/tetragam-py.scl @@ -0,0 +1,17 @@ +! tetragam-py.scl +! +Tetragam Pyth. + 12 +! + 256/243 + 9/8 + 9/8 + 81/64 + 4/3 + 729/512 + 3/2 + 128/81 + 27/16 + 27/16 + 16/9 + 2/1 diff --git a/scales/tetragam-slpe.scl b/scales/tetragam-slpe.scl new file mode 100644 index 0000000..05cf7aa --- /dev/null +++ b/scales/tetragam-slpe.scl @@ -0,0 +1,17 @@ +! tetragam-slpe.scl +! +Tetragam Slendro as 5-tET, Pelog-like pitches on C# E F# A B + 12 +! + 1/1 + 240.000 cents + 240.000 cents + 16/15 + 480.000 cents + 4/3 + 720.000 cents + 960.000 cents + 3/2 + 960.000 cents + 8/5 + 2/1 diff --git a/scales/tetragam-slpe2.scl b/scales/tetragam-slpe2.scl new file mode 100644 index 0000000..a5cfe97 --- /dev/null +++ b/scales/tetragam-slpe2.scl @@ -0,0 +1,17 @@ +! tetragam-slpe2.scl +! +Tetragam Slendro as 5-tET, Pelog-like pitches on C# E F# A B + 12 +! + 1/1 + 240.000 cents + 240.000 cents + 156.000 cents + 480.000 cents + 312.000 cents + 720.000 cents + 720.000 cents + 678.000 cents + 960.000 cents + 834.000 cents + 2/1 diff --git a/scales/tetragam-sp.scl b/scales/tetragam-sp.scl new file mode 100644 index 0000000..591983b --- /dev/null +++ b/scales/tetragam-sp.scl @@ -0,0 +1,17 @@ +! tetragam-sp.scl +! +Tetragam Septimal + 12 +! + 28/27 + 28/27 + 28/27 + 9/7 + 4/3 + 7/5 + 3/2 + 14/9 + 14/9 + 14/9 + 7/4 + 2/1 diff --git a/scales/tetragam-un.scl b/scales/tetragam-un.scl new file mode 100644 index 0000000..1d4c9e8 --- /dev/null +++ b/scales/tetragam-un.scl @@ -0,0 +1,17 @@ +! tetragam-un.scl +! +Tetragam Undecimal + 12 +! + 33/32 + 12/11 + 12/11 + 11/9 + 4/3 + 11/8 + 3/2 + 99/64 + 18/11 + 18/11 + 11/6 + 2/1 diff --git a/scales/tetragam13.scl b/scales/tetragam13.scl new file mode 100644 index 0000000..1232325 --- /dev/null +++ b/scales/tetragam13.scl @@ -0,0 +1,17 @@ +! tetragam13.scl +! +Tetragam (13-tET) + 12 +! + 92.308 cents + 276.923 cents + 276.923 cents + 461.538 cents + 461.538 cents + 738.462 cents + 738.462 cents + 923.077 cents + 923.077 cents + 923.077 cents + 1107.692 cents + 2/1 diff --git a/scales/tetragam5.scl b/scales/tetragam5.scl new file mode 100644 index 0000000..4ccca6c --- /dev/null +++ b/scales/tetragam5.scl @@ -0,0 +1,17 @@ +! tetragam5.scl +! +Tetragam (5-tET) + 12 +! + 240.000 cents + 240.000 cents + 240.000 cents + 240.000 cents + 480.000 cents + 480.000 cents + 720.000 cents + 960.000 cents + 960.000 cents + 960.000 cents + 960.000 cents + 2/1 diff --git a/scales/tetragam7.scl b/scales/tetragam7.scl new file mode 100644 index 0000000..3320a25 --- /dev/null +++ b/scales/tetragam7.scl @@ -0,0 +1,17 @@ +! tetragam7.scl +! +Tetragam (7-tET) + 12 +! + 171.429 cents + 171.429 cents + 171.429 cents + 342.857 cents + 514.286 cents + 514.286 cents + 685.714 cents + 857.143 cents + 857.143 cents + 857.143 cents + 1028.571 cents + 2/1 diff --git a/scales/tetragam8.scl b/scales/tetragam8.scl new file mode 100644 index 0000000..f08e59b --- /dev/null +++ b/scales/tetragam8.scl @@ -0,0 +1,17 @@ +! tetragam8.scl +! +Tetragam (8-tET) + 12 +! + 150.00000 + 300.00000 + 300.00000 + 450.00000 + 450.00000 + 750.00000 + 750.00000 + 900.00000 + 900.00000 + 900.00000 + 900.00000 + 2/1 diff --git a/scales/tetragam9a.scl b/scales/tetragam9a.scl new file mode 100644 index 0000000..8d0ab1b --- /dev/null +++ b/scales/tetragam9a.scl @@ -0,0 +1,17 @@ +! tetragam9a.scl +! +Tetragam (9-tET) A + 12 +! + 133.333 cents + 266.667 cents + 266.667 cents + 400.000 cents + 533.333 cents + 800.000 cents + 800.000 cents + 933.333 cents + 933.333 cents + 933.333 cents + 1066.667 cents + 2/1 diff --git a/scales/tetragam9b.scl b/scales/tetragam9b.scl new file mode 100644 index 0000000..1bbe09c --- /dev/null +++ b/scales/tetragam9b.scl @@ -0,0 +1,17 @@ +! tetragam9b.scl +! +Tetragam (9-tET) B + 12 +! + 133.333 cents + 133.333 cents + 133.333 cents + 266.667 cents + 266.667 cents + 666.667 cents + 666.667 cents + 800.000 cents + 800.000 cents + 800.000 cents + 933.333 cents + 2/1 diff --git a/scales/tetraphonic_31.scl b/scales/tetraphonic_31.scl new file mode 100644 index 0000000..e75ded1 --- /dev/null +++ b/scales/tetraphonic_31.scl @@ -0,0 +1,36 @@ +! tetraphonic_31.scl +! +31-tone Tetraphonic Cycle, conjunctive form on 5/4, 6/5, 7/6 and 8/7 + 31 +! + 50/49 + 25/24 + 50/47 + 25/23 + 10/9 + 25/22 + 50/43 + 25/21 + 50/41 + 5/4 + 60/47 + 30/23 + 4/3 + 15/11 + 60/43 + 10/7 + 60/41 + 3/2 + 49/32 + 147/94 + 147/92 + 49/30 + 147/88 + 147/86 + 7/4 + 84/47 + 42/23 + 28/15 + 21/11 + 84/43 + 2/1 diff --git a/scales/tetratriad.scl b/scales/tetratriad.scl new file mode 100644 index 0000000..daa8308 --- /dev/null +++ b/scales/tetratriad.scl @@ -0,0 +1,14 @@ +! tetratriad.scl +! +4:5:6 Tetratriadic scale + 9 +! + 9/8 + 5/4 + 4/3 + 45/32 + 3/2 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/tetratriad1.scl b/scales/tetratriad1.scl new file mode 100644 index 0000000..ca0de85 --- /dev/null +++ b/scales/tetratriad1.scl @@ -0,0 +1,14 @@ +! tetratriad1.scl +! +3:5:9 Tetratriadic scale + 9 +! + 10/9 + 9/8 + 5/4 + 4/3 + 3/2 + 5/3 + 27/16 + 15/8 + 2/1 diff --git a/scales/tetratriad2.scl b/scales/tetratriad2.scl new file mode 100644 index 0000000..ec575b5 --- /dev/null +++ b/scales/tetratriad2.scl @@ -0,0 +1,14 @@ +! tetratriad2.scl +! +3:5:7 Tetratriadic scale + 9 +! + 245/216 + 7/6 + 49/36 + 10/7 + 343/216 + 5/3 + 12/7 + 35/18 + 2/1 diff --git a/scales/thailand.scl b/scales/thailand.scl new file mode 100644 index 0000000..126a219 --- /dev/null +++ b/scales/thailand.scl @@ -0,0 +1,12 @@ +! thailand.scl +! +Observed ranat tuning from Thailand, Helmholtz/Ellis p. 518, nr.85 + 7 +! + 129.00000 + 277.00000 + 508.00000 + 726.00000 + 771.00000 + 1029.00000 + 1254.00000 diff --git a/scales/thailand2.scl b/scales/thailand2.scl new file mode 100644 index 0000000..f213c27 --- /dev/null +++ b/scales/thailand2.scl @@ -0,0 +1,12 @@ +! thailand2.scl +! +Observed ranat t'hong tuning, Helmholtz/Ellis p. 518 + 7 +! + 200.00000 + 340.00000 + 537.00000 + 699.00000 + 881.00000 + 1043.00000 + 1207.00000 diff --git a/scales/thailand3.scl b/scales/thailand3.scl new file mode 100644 index 0000000..544a525 --- /dev/null +++ b/scales/thailand3.scl @@ -0,0 +1,12 @@ +! thailand3.scl +! +Observed tak'hay tuning. Helmholtz, p. 518 + 7 +! + 198.00000 + 362.00000 + 528.00000 + 720.00000 + 890.00000 + 1080.00000 + 1250.00000 diff --git a/scales/thailand4.scl b/scales/thailand4.scl new file mode 100644 index 0000000..d248cef --- /dev/null +++ b/scales/thailand4.scl @@ -0,0 +1,20 @@ +! thailand4.scl +! +Khong mon (bronze percussion vessels) tuning, Gemeentemuseum Den Haag. 1/1=465 Hz + 15 +! + 129.09586 + 262.07745 + 415.11290 + 703.19558 + 804.35347 + 984.18181 + 2/1 + 1329.09586 + 1462.07745 + 1616.57694 + 1904.43528 + 2002.01238 + 2186.28921 + 4/1 + 2529.09586 diff --git a/scales/thailand5.scl b/scales/thailand5.scl new file mode 100644 index 0000000..7b180c9 --- /dev/null +++ b/scales/thailand5.scl @@ -0,0 +1,12 @@ +! thailand5.scl +! +Observed Siamese scale, C. Stumpf, Tonsystem und Musik der Siamesen, 1901, p.137. 1/1=423 Hz + 7 +! + 182.40371 + 344.05608 + 522.42898 + 686.88282 + 864.60119 + 1037.04094 + 2/1 diff --git a/scales/thirds.scl b/scales/thirds.scl new file mode 100644 index 0000000..062dc07 --- /dev/null +++ b/scales/thirds.scl @@ -0,0 +1,17 @@ +! thirds.scl +! +Major and minor thirds parallellogram. Fokker block 81/80 128/125 + 12 +! + 25/24 + 10/9 + 6/5 + 5/4 + 4/3 + 25/18 + 3/2 + 8/5 + 5/3 + 125/72 + 48/25 + 2/1 diff --git a/scales/thirteendene.scl b/scales/thirteendene.scl new file mode 100644 index 0000000..b103f06 --- /dev/null +++ b/scales/thirteendene.scl @@ -0,0 +1,17 @@ +! thirteendene.scl +! +Detempered 2.3.5.7.13 transversal of marveldene, hecate (225/224, 325/324, 385/384) version + 12 +! +13/12 +9/8 +6/5 +9/7 +27/20 +13/9 +3/2 +8/5 +27/16 +9/5 +27/14 +2/1 diff --git a/scales/thomas.scl b/scales/thomas.scl new file mode 100644 index 0000000..d3be88e --- /dev/null +++ b/scales/thomas.scl @@ -0,0 +1,17 @@ +! thomas.scl +! +Tuning of the Thomas/Philpott organ, Gereformeerde Kerk, St. Jansklooster + 12 +! + 122.48000 + 205.87000 + 6/5 + 412.71000 + 504.89000 + 621.51000 + 16384/10935 + 822.48000 + 907.82000 + 1009.76000 + 1119.55000 + 2/1 diff --git a/scales/thrush12.scl b/scales/thrush12.scl new file mode 100644 index 0000000..3c52c25 --- /dev/null +++ b/scales/thrush12.scl @@ -0,0 +1,33 @@ +! thrush12.scl +Thrush[12] (126/125, 176/175) hobbit in the POTE tuning +12 +! +80.43583 +230.31897 +310.75480 +391.19062 +498.05458 +578.49041 +701.94542 +808.80938 +889.24520 +969.68103 +1119.56417 +2/1 +! +!! prethrush12.scl +! Thrush[12] 5-limit transversal +! 12 +!! +! 25/24 +! 144/125 +! 6/5 +! 5/4 +! 4/3 +! 25/18 +! 3/2 +! 8/5 +! 5/3 +! 125/72 +! 48/25 +! 2/1 diff --git a/scales/thrush15.scl b/scales/thrush15.scl new file mode 100644 index 0000000..d5891a6 --- /dev/null +++ b/scales/thrush15.scl @@ -0,0 +1,39 @@ +! thrush15.scl +Thrush[15] hobbit 7&9 limit minimax tuning, commas 126/125, 176/175 +15 +! +79.86894 +159.73788 +8/7 +311.04303 +390.91197 +4/3 +577.91394 +622.08606 +3/2 +809.08803 +888.95697 +7/4 +1040.26212 +1120.13106 +2/1 +! +! ! prethrush15.scl +! Thrush[15] transversal +! 15 +! ! +! 21/20 +! 11/10 +! 8/7 +! 6/5 +! 5/4 +! 4/3 +! 7/5 +! 10/7 +! 3/2 +! 8/5 +! 5/3 +! 7/4 +! 20/11 +! 21/11 +! 2/1 \ No newline at end of file diff --git a/scales/thunor46.scl b/scales/thunor46.scl new file mode 100644 index 0000000..e44d006 --- /dev/null +++ b/scales/thunor46.scl @@ -0,0 +1,101 @@ +! thunor46.scl +Thunor[46] hobbit in 494-tET, commas 4375/4374, 3025/3024, 1716/1715 +46 +! +31.57895 +48.58300 +80.16194 +102.02429 +133.60324 +150.60729 +182.18623 +213.76518 +235.62753 +262.34818 +284.21053 +315.78947 +332.79352 +364.37247 +395.95142 +417.81377 +449.39271 +466.39676 +497.97571 +519.83806 +546.55870 +568.42105 +600.00000 +631.57895 +648.58300 +680.16194 +702.02429 +733.60324 +750.60729 +782.18623 +813.76518 +835.62753 +862.34818 +884.21053 +915.78947 +932.79352 +964.37247 +995.95142 +1017.81377 +1049.39271 +1066.39676 +1097.97571 +1119.83806 +1146.55870 +1168.42105 +2/1 +! +! !prethunor46.scl +! Thunor[46] transversal +! 46 +! ! +! 891/875 +! 250/243 +! 22/21 +! 297/280 +! 27/25 +! 275/252 +! 10/9 +! 198/175 +! 8019/7000 +! 220/189 +! 33/28 +! 6/5 +! 1375/1134 +! 100/81 +! 44/35 +! 891/700 +! 162/125 +! 55/42 +! 4/3 +! 27/20 +! 1000/729 +! 25/18 +! 99/70 +! 36/25 +! 275/189 +! 40/27 +! 3/2 +! 2673/1750 +! 125/81 +! 11/7 +! 8/5 +! 81/50 +! 400/243 +! 5/3 +! 297/175 +! 1250/729 +! 110/63 +! 16/9 +! 9/5 +! 8019/4375 +! 50/27 +! 66/35 +! 2673/1400 +! 1100/567 +! 55/28 +! 2/1 diff --git a/scales/tiby1.scl b/scales/tiby1.scl new file mode 100644 index 0000000..55bbad8 --- /dev/null +++ b/scales/tiby1.scl @@ -0,0 +1,12 @@ +! tiby1.scl +! +Tiby's 1st Byzantine Liturgical genus, 12 + 13 + 3 parts + 7 +! + 211.76471 + 441.17647 + 494.11765 + 705.88235 + 917.64706 + 1147.05882 + 2/1 diff --git a/scales/tiby2.scl b/scales/tiby2.scl new file mode 100644 index 0000000..5a1b95c --- /dev/null +++ b/scales/tiby2.scl @@ -0,0 +1,12 @@ +! tiby2.scl +! +Tiby's second Byzantine Liturgical genus, 12 + 5 + 11 parts + 7 +! + 211.76471 + 300.00000 + 494.11765 + 705.88235 + 917.64706 + 1005.88235 + 2/1 diff --git a/scales/tiby3.scl b/scales/tiby3.scl new file mode 100644 index 0000000..9db12c7 --- /dev/null +++ b/scales/tiby3.scl @@ -0,0 +1,12 @@ +! tiby3.scl +! +Tiby's third Byzantine Liturgical genus, 12 + 9 + 7 parts + 7 +! + 211.76471 + 370.58824 + 494.11765 + 705.88235 + 917.64706 + 1076.47059 + 2/1 diff --git a/scales/tiby4.scl b/scales/tiby4.scl new file mode 100644 index 0000000..fe545a1 --- /dev/null +++ b/scales/tiby4.scl @@ -0,0 +1,12 @@ +! tiby4.scl +! +Tiby's fourth Byzantine Liturgical genus, 9 + 12 + 7 parts + 7 +! + 158.82353 + 370.58824 + 494.11765 + 705.88235 + 864.70588 + 1076.47059 + 2/1 diff --git a/scales/timbila1.scl b/scales/timbila1.scl new file mode 100644 index 0000000..a9b6a1e --- /dev/null +++ b/scales/timbila1.scl @@ -0,0 +1,12 @@ +! timbila1.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-198 A-1,2 + 7 +! + 69/62 + 77/62 + 42/31 + 3/2 + 103/62 + 57/31 + 2/1 diff --git a/scales/timbila2.scl b/scales/timbila2.scl new file mode 100644 index 0000000..11d7e06 --- /dev/null +++ b/scales/timbila2.scl @@ -0,0 +1,12 @@ +! timbila2.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-200 B-3 + 7 +! + 34/31 + 75/62 + 42/31 + 3/2 + 103/62 + 56/31 + 2/1 diff --git a/scales/timbila3.scl b/scales/timbila3.scl new file mode 100644 index 0000000..f142bb4 --- /dev/null +++ b/scales/timbila3.scl @@ -0,0 +1,12 @@ +! timbila3.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-202 B-4 + 7 +! + 69/62 + 75/62 + 81/62 + 45/31 + 101/62 + 55/31 + 2/1 diff --git a/scales/timbila4.scl b/scales/timbila4.scl new file mode 100644 index 0000000..80ce7c2 --- /dev/null +++ b/scales/timbila4.scl @@ -0,0 +1,12 @@ +! timbila4.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-206 + 7 +! + 75/62 + 83/62 + 46/31 + 101/62 + 56/31 + 61/31 + 2/1 diff --git a/scales/timbila5.scl b/scales/timbila5.scl new file mode 100644 index 0000000..9b65809 --- /dev/null +++ b/scales/timbila5.scl @@ -0,0 +1,12 @@ +! timbila5.scl +! +Timbila from Chopi tuning. 1/1=268 Hz, Tracey TR-207 A-1,2,3 + 7 +! + 75/67 + 82/67 + 91/67 + 100/67 + 110/67 + 122/67 + 2/1 diff --git a/scales/timbila6.scl b/scales/timbila6.scl new file mode 100644 index 0000000..cd9f884 --- /dev/null +++ b/scales/timbila6.scl @@ -0,0 +1,12 @@ +! timbila6.scl +! +Timbila from Chopi tuning. 1/1=268 Hz, Tracey TR-207 A-4,5,6 + 7 +! + 76/67 + 84/67 + 90/67 + 100/67 + 110/67 + 122/67 + 2/1 diff --git a/scales/timbila7.scl b/scales/timbila7.scl new file mode 100644 index 0000000..b8bd54a --- /dev/null +++ b/scales/timbila7.scl @@ -0,0 +1,12 @@ +! timbila7.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-207 B-4,5 + 7 +! + 34/31 + 37/31 + 41/31 + 91/62 + 101/62 + 56/31 + 2/1 diff --git a/scales/timbila8.scl b/scales/timbila8.scl new file mode 100644 index 0000000..2199a88 --- /dev/null +++ b/scales/timbila8.scl @@ -0,0 +1,12 @@ +! timbila8.scl +! +Timbila from Chopi tuning. 1/1=248 Hz, Tracey TR-208 B-2,3,4,5 + 7 +! + 34/31 + 75/62 + 41/31 + 91/62 + 101/62 + 56/31 + 2/1 diff --git a/scales/todi_av.scl b/scales/todi_av.scl new file mode 100644 index 0000000..37f9f5f --- /dev/null +++ b/scales/todi_av.scl @@ -0,0 +1,12 @@ +! todi_av.scl +! +Average of 8 interpretations of raga Todi, in B. Bel, 1988. + 7 +! + 95.00000 + 294.00000 + 606.00000 + 702.00000 + 792.00000 + 1107.00000 + 2/1 diff --git a/scales/tonos15_pis.scl b/scales/tonos15_pis.scl new file mode 100644 index 0000000..f9f81f1 --- /dev/null +++ b/scales/tonos15_pis.scl @@ -0,0 +1,20 @@ +! tonos15_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-15 + 15 +! + 11/10 + 11/9 + 11/8 + 22/15 + 22/13 + 11/6 + 2/1 + 44/21 + 11/5 + 22/9 + 11/4 + 44/15 + 44/13 + 11/3 + 4/1 diff --git a/scales/tonos17_pis.scl b/scales/tonos17_pis.scl new file mode 100644 index 0000000..53bccd7 --- /dev/null +++ b/scales/tonos17_pis.scl @@ -0,0 +1,20 @@ +! tonos17_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-17 + 15 +! + 12/11 + 6/5 + 4/3 + 24/17 + 8/5 + 24/13 + 2/1 + 48/23 + 24/11 + 12/5 + 8/3 + 48/17 + 3/1 + 24/7 + 4/1 diff --git a/scales/tonos19_pis.scl b/scales/tonos19_pis.scl new file mode 100644 index 0000000..e660dc7 --- /dev/null +++ b/scales/tonos19_pis.scl @@ -0,0 +1,20 @@ +! tonos19_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-19 + 15 +! + 14/13 + 7/6 + 14/11 + 28/19 + 14/9 + 7/4 + 2/1 + 56/27 + 28/13 + 7/3 + 28/11 + 56/19 + 28/9 + 7/2 + 4/1 diff --git a/scales/tonos21_pis.scl b/scales/tonos21_pis.scl new file mode 100644 index 0000000..8185bc7 --- /dev/null +++ b/scales/tonos21_pis.scl @@ -0,0 +1,20 @@ +! tonos21_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-21 + 15 +! + 8/7 + 16/13 + 4/3 + 32/21 + 32/19 + 16/9 + 2/1 + 32/15 + 16/7 + 32/13 + 8/3 + 64/21 + 64/19 + 32/9 + 4/1 diff --git a/scales/tonos23_pis.scl b/scales/tonos23_pis.scl new file mode 100644 index 0000000..792e998 --- /dev/null +++ b/scales/tonos23_pis.scl @@ -0,0 +1,20 @@ +! tonos23_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-23 + 15 +! + 9/8 + 9/7 + 18/13 + 36/23 + 12/7 + 9/5 + 2/1 + 36/17 + 9/4 + 18/7 + 36/13 + 72/23 + 24/7 + 18/5 + 4/1 diff --git a/scales/tonos25_pis.scl b/scales/tonos25_pis.scl new file mode 100644 index 0000000..f297f87 --- /dev/null +++ b/scales/tonos25_pis.scl @@ -0,0 +1,20 @@ +! tonos25_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-25 + 15 +! + 9/8 + 9/7 + 18/13 + 36/25 + 18/11 + 9/5 + 2/1 + 36/17 + 9/4 + 18/7 + 36/13 + 72/25 + 36/11 + 18/5 + 4/1 diff --git a/scales/tonos27_pis.scl b/scales/tonos27_pis.scl new file mode 100644 index 0000000..5296041 --- /dev/null +++ b/scales/tonos27_pis.scl @@ -0,0 +1,20 @@ +! tonos27_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-27 + 15 +! + 10/9 + 5/4 + 10/7 + 40/27 + 5/3 + 40/21 + 2/1 + 40/19 + 20/9 + 5/2 + 20/7 + 80/27 + 10/3 + 80/21 + 4/1 diff --git a/scales/tonos29_pis.scl b/scales/tonos29_pis.scl new file mode 100644 index 0000000..2d6c2a6 --- /dev/null +++ b/scales/tonos29_pis.scl @@ -0,0 +1,20 @@ +! tonos29_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-29 + 15 +! + 11/10 + 11/9 + 11/8 + 44/29 + 22/13 + 11/6 + 2/1 + 44/21 + 11/5 + 22/9 + 11/4 + 88/29 + 44/13 + 11/3 + 4/1 diff --git a/scales/tonos31_pis.scl b/scales/tonos31_pis.scl new file mode 100644 index 0000000..a76ea96 --- /dev/null +++ b/scales/tonos31_pis.scl @@ -0,0 +1,20 @@ +! tonos31_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-31 + 15 +! + 23/22 + 23/20 + 23/18 + 46/31 + 23/14 + 23/13 + 23/12 + 2/1 + 23/11 + 23/10 + 23/9 + 92/31 + 23/7 + 46/13 + 4/1 diff --git a/scales/tonos31_pis2.scl b/scales/tonos31_pis2.scl new file mode 100644 index 0000000..79b8da5 --- /dev/null +++ b/scales/tonos31_pis2.scl @@ -0,0 +1,20 @@ +! tonos31_pis2.scl +! +Diatonic Perfect Immutable System in the new Tonos-31B + 15 +! + 12/11 + 6/5 + 4/3 + 48/31 + 12/7 + 24/13 + 2/1 + 48/23 + 24/11 + 12/5 + 8/3 + 96/31 + 24/7 + 48/13 + 4/1 diff --git a/scales/tonos33_pis.scl b/scales/tonos33_pis.scl new file mode 100644 index 0000000..9b7bf6f --- /dev/null +++ b/scales/tonos33_pis.scl @@ -0,0 +1,20 @@ +! tonos33_pis.scl +! +Diatonic Perfect Immutable System in the new Tonos-33 + 15 +! + 12/11 + 6/5 + 4/3 + 16/11 + 8/5 + 16/9 + 2/1 + 48/23 + 24/11 + 12/5 + 8/3 + 32/11 + 16/5 + 32/9 + 4/1 diff --git a/scales/toof1.scl b/scales/toof1.scl new file mode 100644 index 0000000..b4d580f --- /dev/null +++ b/scales/toof1.scl @@ -0,0 +1,85 @@ +! toof1.scl +! +12&224[80] in 224-et tuning + 80 +! + 5.35714 + 10.71429 + 16.07143 + 21.42857 + 26.78571 + 32.14286 + 101.78571 + 107.14286 + 112.50000 + 117.85714 + 123.21429 + 128.57143 + 133.92857 + 203.57143 + 208.92857 + 214.28571 + 219.64286 + 225.00000 + 230.35714 + 300.00000 + 305.35714 + 310.71429 + 316.07143 + 321.42857 + 326.78571 + 332.14286 + 401.78571 + 407.14286 + 412.50000 + 417.85714 + 423.21429 + 428.57143 + 433.92857 + 503.57143 + 508.92857 + 514.28571 + 519.64286 + 525.00000 + 530.35714 + 600.00000 + 605.35714 + 610.71429 + 616.07143 + 621.42857 + 626.78571 + 632.14286 + 701.78571 + 707.14286 + 712.50000 + 717.85714 + 723.21429 + 728.57143 + 733.92857 + 803.57143 + 808.92857 + 814.28571 + 819.64286 + 825.00000 + 830.35714 + 900.00000 + 905.35714 + 910.71429 + 916.07143 + 921.42857 + 926.78571 + 932.14286 + 1001.78571 + 1007.14286 + 1012.50000 + 1017.85714 + 1023.21429 + 1028.57143 + 1033.92857 + 1103.57143 + 1108.92857 + 1114.28571 + 1119.64286 + 1125.00000 + 1130.35714 + 2/1 diff --git a/scales/torb24.scl b/scales/torb24.scl new file mode 100644 index 0000000..5f8dd20 --- /dev/null +++ b/scales/torb24.scl @@ -0,0 +1,28 @@ +! torb24.scl +detempering C2 x C12 {648/625, 2048/2025} with generators 45/32 and 135/128 +24 +! +81/80 +25/24 +16/15 +10/9 +9/8 +32/27 +6/5 +5/4 +32/25 +4/3 +27/20 +25/18 +45/32 +40/27 +3/2 +25/16 +8/5 +5/3 +27/16 +16/9 +9/5 +15/8 +48/25 +2/1 diff --git a/scales/trab19.scl b/scales/trab19.scl new file mode 100644 index 0000000..6c4d583 --- /dev/null +++ b/scales/trab19.scl @@ -0,0 +1,24 @@ +! trab19.scl +! +Diamond {1,3,5,45,75,225} + 19 +! + 16/15 + 9/8 + 256/225 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 45/32 + 64/45 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 225/128 + 16/9 + 15/8 + 2/1 diff --git a/scales/trab19a.scl b/scales/trab19a.scl new file mode 100644 index 0000000..9e450a7 --- /dev/null +++ b/scales/trab19a.scl @@ -0,0 +1,24 @@ +! trab19a.scl +! +Diamond {1,3,9,15,675} + 19 +! + 16/15 + 9/8 + 256/225 + 75/64 + 6/5 + 5/4 + 675/512 + 4/3 + 45/32 + 64/45 + 3/2 + 1024/675 + 8/5 + 5/3 + 128/75 + 225/128 + 16/9 + 15/8 + 2/1 diff --git a/scales/trab19marv.scl b/scales/trab19marv.scl new file mode 100644 index 0000000..6d41060 --- /dev/null +++ b/scales/trab19marv.scl @@ -0,0 +1,24 @@ +! trab19marv.scl +! +1/4 kleismic tempered trab19 + 19 +! + 115.58705 + 200.05424 + 8/7 + 268.79879 + 6/5 + 384.38583 + 431.22833 + 499.97288 + 584.44007 + 615.55993 + 700.02712 + 768.77167 + 815.61417 + 5/3 + 931.20121 + 7/4 + 999.94576 + 1084.41295 + 2/1 diff --git a/scales/tranh.scl b/scales/tranh.scl new file mode 100644 index 0000000..8dea7c0 --- /dev/null +++ b/scales/tranh.scl @@ -0,0 +1,10 @@ +! tranh.scl +! +Bac Dan Tranh scale, Vietnam + 5 +! + 10/9 + 4/3 + 3/2 + 5/3 + 2/1 diff --git a/scales/tranh2.scl b/scales/tranh2.scl new file mode 100644 index 0000000..e6c558b --- /dev/null +++ b/scales/tranh2.scl @@ -0,0 +1,10 @@ +! tranh2.scl +! +Dan Ca Dan Tranh scale + 5 +! + 10/9 + 20/17 + 3/2 + 5/3 + 2/1 diff --git a/scales/tranh3.scl b/scales/tranh3.scl new file mode 100644 index 0000000..eb90320 --- /dev/null +++ b/scales/tranh3.scl @@ -0,0 +1,11 @@ +! tranh3.scl +! +Sa Mac Dan Tranh scale + 6 +! + 17/14 + 4/3 + 3/2 + 38/21 + 51/28 + 2/1 diff --git a/scales/trawas.scl b/scales/trawas.scl new file mode 100644 index 0000000..6d1c9a4 --- /dev/null +++ b/scales/trawas.scl @@ -0,0 +1,10 @@ +! trawas.scl +! +Observed East-Javanese children's Trawas-songs scale. J. Kunst, Music in Java, p. 584. + 5 +! + 306.15505 + 541.48577 + 711.38954 + 1039.53077 + 2/1 diff --git a/scales/tri12-1.scl b/scales/tri12-1.scl new file mode 100644 index 0000000..2757951 --- /dev/null +++ b/scales/tri12-1.scl @@ -0,0 +1,17 @@ +! TRI12-1.scl +! +12-tone Tritriadic of 7:9:11 + 12 +! + 99/98 + 81/77 + 11/9 + 121/98 + 14/11 + 9/7 + 14/9 + 11/7 + 18/11 + 81/49 + 121/63 + 2/1 diff --git a/scales/tri12-2.scl b/scales/tri12-2.scl new file mode 100644 index 0000000..14eb4e8 --- /dev/null +++ b/scales/tri12-2.scl @@ -0,0 +1,17 @@ +! tri12-2.scl +! +12-tone Tritriadic of 6:7:9 + 12 +! + 9/8 + 7/6 + 9/7 + 4/3 + 49/36 + 3/2 + 14/9 + 12/7 + 7/4 + 49/27 + 27/14 + 2/1 diff --git a/scales/tri19-1.scl b/scales/tri19-1.scl new file mode 100644 index 0000000..99678b5 --- /dev/null +++ b/scales/tri19-1.scl @@ -0,0 +1,24 @@ +! tri19-1.scl +! +3:5:7 Tritriadic 19-Tone Matrix + 19 +! + 50/49 + 36/35 + 7/6 + 25/21 + 6/5 + 60/49 + 49/36 + 25/18 + 7/5 + 10/7 + 36/25 + 72/49 + 49/30 + 5/3 + 42/25 + 12/7 + 35/18 + 49/25 + 2/1 diff --git a/scales/tri19-2.scl b/scales/tri19-2.scl new file mode 100644 index 0000000..25b959c --- /dev/null +++ b/scales/tri19-2.scl @@ -0,0 +1,24 @@ +! tri19-2.scl +! +3:5:9 Tritriadic 19-Tone Matrix + 19 +! + 27/25 + 10/9 + 9/8 + 6/5 + 100/81 + 5/4 + 4/3 + 27/20 + 25/18 + 36/25 + 40/27 + 3/2 + 8/5 + 81/50 + 5/3 + 16/9 + 9/5 + 50/27 + 2/1 diff --git a/scales/tri19-3.scl b/scales/tri19-3.scl new file mode 100644 index 0000000..3f545ed --- /dev/null +++ b/scales/tri19-3.scl @@ -0,0 +1,24 @@ +! tri19-3.scl +! +4:5:6 Tritriadic 19-Tone Matrix + 19 +! + 25/24 + 16/15 + 10/9 + 9/8 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/tri19-4.scl b/scales/tri19-4.scl new file mode 100644 index 0000000..592a138 --- /dev/null +++ b/scales/tri19-4.scl @@ -0,0 +1,24 @@ +! tri19-4.scl +! +4:5:9 Tritriadic 19-Tone Matrix + 19 +! + 81/80 + 10/9 + 9/8 + 100/81 + 5/4 + 81/64 + 32/25 + 25/18 + 45/32 + 64/45 + 36/25 + 25/16 + 128/81 + 8/5 + 81/50 + 16/9 + 9/5 + 160/81 + 2/1 diff --git a/scales/tri19-5.scl b/scales/tri19-5.scl new file mode 100644 index 0000000..84dad50 --- /dev/null +++ b/scales/tri19-5.scl @@ -0,0 +1,24 @@ +! tri19-5.scl +! +5:7:9 Tritriadic 19-Tone Matrix + 19 +! + 50/49 + 49/45 + 10/9 + 81/70 + 98/81 + 100/81 + 63/50 + 9/7 + 7/5 + 10/7 + 14/9 + 100/63 + 81/50 + 81/49 + 140/81 + 9/5 + 90/49 + 49/25 + 2/1 diff --git a/scales/tri19-6.scl b/scales/tri19-6.scl new file mode 100644 index 0000000..23487b0 --- /dev/null +++ b/scales/tri19-6.scl @@ -0,0 +1,24 @@ +! tri19-6.scl +! +6:7:8 Tritriadic 19-Tone Matrix + 19 +! + 49/48 + 9/8 + 8/7 + 7/6 + 9/7 + 64/49 + 21/16 + 4/3 + 49/36 + 72/49 + 3/2 + 32/21 + 49/32 + 14/9 + 12/7 + 7/4 + 16/9 + 96/49 + 2/1 diff --git a/scales/tri19-7.scl b/scales/tri19-7.scl new file mode 100644 index 0000000..d202044 --- /dev/null +++ b/scales/tri19-7.scl @@ -0,0 +1,24 @@ +! tri19-7.scl +! +6:7:9 Tritriadic 19-Tone Matrix + 19 +! + 28/27 + 54/49 + 9/8 + 8/7 + 7/6 + 98/81 + 9/7 + 4/3 + 49/36 + 72/49 + 3/2 + 14/9 + 81/49 + 12/7 + 7/4 + 16/9 + 49/27 + 27/14 + 2/1 diff --git a/scales/tri19-8.scl b/scales/tri19-8.scl new file mode 100644 index 0000000..e83ee9a --- /dev/null +++ b/scales/tri19-8.scl @@ -0,0 +1,24 @@ +! tri19-8.scl +! +7:9:11 Tritriadic 19-Tone Matrix + 19 +! + 99/98 + 126/121 + 81/77 + 98/81 + 11/9 + 121/98 + 14/11 + 9/7 + 162/121 + 121/81 + 14/9 + 11/7 + 196/121 + 18/11 + 81/49 + 154/81 + 121/63 + 196/99 + 2/1 diff --git a/scales/tri19-9.scl b/scales/tri19-9.scl new file mode 100644 index 0000000..ee5108f --- /dev/null +++ b/scales/tri19-9.scl @@ -0,0 +1,24 @@ +! tri19-9.scl +! +4:5:7 Tritriadic 19-Tone Matrix + 19 +! + 50/49 + 35/32 + 28/25 + 8/7 + 49/40 + 5/4 + 32/25 + 64/49 + 7/5 + 10/7 + 49/32 + 25/16 + 8/5 + 80/49 + 7/4 + 25/14 + 64/35 + 49/25 + 2/1 diff --git a/scales/triangs11.scl b/scales/triangs11.scl new file mode 100644 index 0000000..da12bc7 --- /dev/null +++ b/scales/triangs11.scl @@ -0,0 +1,15 @@ +! triangs11.scl +! +The first 11 terms of the triangular number series, octave reduced + 10 +! + 33/32 + 9/8 + 5/4 + 21/16 + 45/32 + 3/2 + 55/32 + 7/4 + 15/8 + 2/1 diff --git a/scales/triangs13.scl b/scales/triangs13.scl new file mode 100644 index 0000000..f6c12af --- /dev/null +++ b/scales/triangs13.scl @@ -0,0 +1,17 @@ +! triangs13.scl +! +The first 13 terms of the triangular number series, octave reduced + 12 +! + 33/32 + 9/8 + 39/32 + 5/4 + 21/16 + 45/32 + 91/64 + 3/2 + 55/32 + 7/4 + 15/8 + 2/1 diff --git a/scales/triangs22.scl b/scales/triangs22.scl new file mode 100644 index 0000000..9b740a8 --- /dev/null +++ b/scales/triangs22.scl @@ -0,0 +1,24 @@ +! triangs22.scl +! +The first 22 terms of the triangular number series, octave reduced + 19 +! + 33/32 + 17/16 + 9/8 + 153/128 + 39/32 + 5/4 + 21/16 + 171/128 + 45/32 + 91/64 + 95/64 + 3/2 + 105/64 + 55/32 + 7/4 + 231/128 + 15/8 + 253/128 + 2/1 diff --git a/scales/triaphonic_12.scl b/scales/triaphonic_12.scl new file mode 100644 index 0000000..a689c25 --- /dev/null +++ b/scales/triaphonic_12.scl @@ -0,0 +1,17 @@ +! triaphonic_12.scl +! +12-tone Triaphonic Cycle, conjunctive form on 4/3, 5/4 and 6/5 + 12 +! + 20/19 + 10/9 + 20/17 + 5/4 + 4/3 + 80/57 + 40/27 + 80/51 + 5/3 + 30/17 + 15/8 + 2/1 diff --git a/scales/triaphonic_17.scl b/scales/triaphonic_17.scl new file mode 100644 index 0000000..0368a13 --- /dev/null +++ b/scales/triaphonic_17.scl @@ -0,0 +1,22 @@ +! triaphonic_17.scl +! +17-tone Triaphonic Cycle, conjunctive form on 4/3, 7/6 and 9/7 + 17 +! + 28/27 + 14/13 + 28/25 + 7/6 + 28/23 + 14/11 + 4/3 + 112/81 + 56/39 + 112/75 + 14/9 + 21/13 + 42/25 + 7/4 + 42/23 + 21/11 + 2/1 diff --git a/scales/trichord7.scl b/scales/trichord7.scl new file mode 100644 index 0000000..810e8e6 --- /dev/null +++ b/scales/trichord7.scl @@ -0,0 +1,16 @@ +! trichord7.scl +! +Trichordal undecatonic, 7-limit + 11 +! + 9/8 + 7/6 + 5/4 + 21/16 + 4/3 + 3/2 + 5/3 + 27/16 + 7/4 + 15/8 + 2/1 diff --git a/scales/tridec8.scl b/scales/tridec8.scl new file mode 100644 index 0000000..6e5ba06 --- /dev/null +++ b/scales/tridec8.scl @@ -0,0 +1,13 @@ +! tridec8.scl +! +Tridec[8] 2.7/5.11/5.13/5 subgroup scale in 89\235 tuning +8 +! +163.40426 +291.06383 +454.46809 +582.12766 +745.53191 +908.93617 +1036.59574 +2/1 diff --git a/scales/trikleismic57.scl b/scales/trikleismic57.scl new file mode 100644 index 0000000..5c2169f --- /dev/null +++ b/scales/trikleismic57.scl @@ -0,0 +1,61 @@ +! trikleismic57.scl +Trikleismic[57] in 159-tET tuning +57 +! +15.094340 +52.830189 +67.924528 +83.018868 +98.113208 +135.849057 +150.943396 +166.037736 +181.132075 +218.867925 +233.962264 +249.056604 +264.150943 +301.886792 +316.981132 +332.075472 +347.169811 +384.905660 +400.000000 +415.094340 +452.830189 +467.924528 +483.018868 +498.113208 +535.849057 +550.943396 +566.037736 +581.132075 +618.867925 +633.962264 +649.056604 +664.150943 +701.886792 +716.981132 +732.075472 +747.169811 +784.905660 +800.000000 +815.094340 +852.830189 +867.924528 +883.018868 +898.113208 +935.849057 +950.943396 +966.037736 +981.132075 +1018.867925 +1033.962264 +1049.056604 +1064.150943 +1101.886792 +1116.981132 +1132.075472 +1147.169811 +1184.905660 +2/1 diff --git a/scales/trithagorean.scl b/scales/trithagorean.scl new file mode 100644 index 0000000..3e1020a --- /dev/null +++ b/scales/trithagorean.scl @@ -0,0 +1,18 @@ +! trithagorean.scl +! +Tritave scale with a 5/3 generator. + 13 +! + 27/25 + 729/625 + 19683/15625 + 3125/2187 + 125/81 + 5/3 + 9/5 + 243/125 + 6561/3125 + 15625/6561 + 625/243 + 25/9 + 3/1 diff --git a/scales/tritriad.scl b/scales/tritriad.scl new file mode 100644 index 0000000..dc25b08 --- /dev/null +++ b/scales/tritriad.scl @@ -0,0 +1,12 @@ +! tritriad.scl +! +Tritriadic scale of the 10:12:15 triad, natural minor mode + 7 +! + 9/8 + 6/5 + 4/3 + 3/2 + 8/5 + 9/5 + 2/1 diff --git a/scales/tritriad10.scl b/scales/tritriad10.scl new file mode 100644 index 0000000..8936202 --- /dev/null +++ b/scales/tritriad10.scl @@ -0,0 +1,12 @@ +! TRITRIAD10.scl +! +Tritriadic scale of the 10:14:15 triad + 7 +! + 21/20 + 9/8 + 4/3 + 7/5 + 3/2 + 28/15 + 2/1 diff --git a/scales/tritriad11.scl b/scales/tritriad11.scl new file mode 100644 index 0000000..9ab97a7 --- /dev/null +++ b/scales/tritriad11.scl @@ -0,0 +1,12 @@ +! TRITRIAD11.scl +! +Tritriadic scale of the 11:13:15 triad + 7 +! + 13/11 + 15/11 + 22/15 + 195/121 + 26/15 + 225/121 + 2/1 diff --git a/scales/tritriad13.scl b/scales/tritriad13.scl new file mode 100644 index 0000000..e94001e --- /dev/null +++ b/scales/tritriad13.scl @@ -0,0 +1,12 @@ +! tritriad13.scl +! +Tritriadic scale of the 10:13:15 triad + 7 +! + 9/8 + 13/10 + 4/3 + 3/2 + 26/15 + 39/20 + 2/1 diff --git a/scales/tritriad14.scl b/scales/tritriad14.scl new file mode 100644 index 0000000..c63282e --- /dev/null +++ b/scales/tritriad14.scl @@ -0,0 +1,12 @@ +! tritriad14.scl +! +Tritriadic scale of the 14:18:21 triad + 7 +! + 9/8 + 9/7 + 4/3 + 3/2 + 12/7 + 27/14 + 2/1 diff --git a/scales/tritriad18.scl b/scales/tritriad18.scl new file mode 100644 index 0000000..c46d275 --- /dev/null +++ b/scales/tritriad18.scl @@ -0,0 +1,12 @@ +! tritriad18.scl +! +Tritriadic scale of the 18:22:27 triad + 7 +! + 9/8 + 11/9 + 4/3 + 3/2 + 44/27 + 11/6 + 2/1 diff --git a/scales/tritriad22.scl b/scales/tritriad22.scl new file mode 100644 index 0000000..ed0f00d --- /dev/null +++ b/scales/tritriad22.scl @@ -0,0 +1,12 @@ +! TRITRIAD22.scl +! +Tritriadic scale of the 22:27:33 triad + 7 +! + 9/8 + 27/22 + 4/3 + 3/2 + 18/11 + 81/44 + 2/1 diff --git a/scales/tritriad26.scl b/scales/tritriad26.scl new file mode 100644 index 0000000..6aed18e --- /dev/null +++ b/scales/tritriad26.scl @@ -0,0 +1,12 @@ +! TRITRIAD26.scl +! +Tritriadic scale of the 26:30:39 triad + 7 +! + 9/8 + 15/13 + 4/3 + 3/2 + 20/13 + 45/26 + 2/1 diff --git a/scales/tritriad3.scl b/scales/tritriad3.scl new file mode 100644 index 0000000..b2f2fe6 --- /dev/null +++ b/scales/tritriad3.scl @@ -0,0 +1,12 @@ +! tritriad3.scl +! +Tritriadic scale of the 3:5:7 triad. Possibly Mathews's 3.5.7a + 7 +! + 7/6 + 49/36 + 10/7 + 5/3 + 12/7 + 35/18 + 2/1 diff --git a/scales/tritriad32.scl b/scales/tritriad32.scl new file mode 100644 index 0000000..e311af2 --- /dev/null +++ b/scales/tritriad32.scl @@ -0,0 +1,12 @@ +! TRITRIAD32.scl +! +Tritriadic scale of the 26:32:39 triad + 7 +! + 9/8 + 16/13 + 4/3 + 3/2 + 64/39 + 24/13 + 2/1 diff --git a/scales/tritriad3c.scl b/scales/tritriad3c.scl new file mode 100644 index 0000000..f7db9ed --- /dev/null +++ b/scales/tritriad3c.scl @@ -0,0 +1,12 @@ +! tritriad3c.scl +! +From 1/1 7/6 7/5, a variant of the 3.5.7 triad + 7 +! + 7/6 + 7/5 + 10/7 + 49/30 + 5/3 + 49/25 + 2/1 diff --git a/scales/tritriad3d.scl b/scales/tritriad3d.scl new file mode 100644 index 0000000..cd3052c --- /dev/null +++ b/scales/tritriad3d.scl @@ -0,0 +1,12 @@ +! tritriad3d.scl +! +From 1/1 7/6 5/3, a variant of the 3.5.7 triad + 7 +! + 7/6 + 6/5 + 25/18 + 7/5 + 5/3 + 35/18 + 2/1 diff --git a/scales/tritriad5.scl b/scales/tritriad5.scl new file mode 100644 index 0000000..05a2620 --- /dev/null +++ b/scales/tritriad5.scl @@ -0,0 +1,12 @@ +! tritriad5.scl +! +Tritriadic scale of the 5:7:9 triad. Possibly Mathews's 5.7.9a. + 7 +! + 10/9 + 63/50 + 7/5 + 14/9 + 81/50 + 9/5 + 2/1 diff --git a/scales/tritriad68.scl b/scales/tritriad68.scl new file mode 100644 index 0000000..9bb45e2 --- /dev/null +++ b/scales/tritriad68.scl @@ -0,0 +1,12 @@ +! tritriad68.scl +! +Tritriadic scale of the 6:7:8 triad + 7 +! + 7/6 + 4/3 + 3/2 + 14/9 + 7/4 + 16/9 + 2/1 diff --git a/scales/tritriad68i.scl b/scales/tritriad68i.scl new file mode 100644 index 0000000..7f7b5bb --- /dev/null +++ b/scales/tritriad68i.scl @@ -0,0 +1,12 @@ +! tritriad68i.scl +! +Tritriadic scale of the subharmonic 6:7:8 triad + 7 +! + 8/7 + 4/3 + 3/2 + 32/21 + 12/7 + 16/9 + 2/1 diff --git a/scales/tritriad69.scl b/scales/tritriad69.scl new file mode 100644 index 0000000..70d7c68 --- /dev/null +++ b/scales/tritriad69.scl @@ -0,0 +1,12 @@ +! tritriad69.scl +! +Tritriadic scale of the 6:7:9 triad, septimal natural minor + 7 +! + 9/8 + 7/6 + 4/3 + 3/2 + 14/9 + 7/4 + 2/1 diff --git a/scales/tritriad7.scl b/scales/tritriad7.scl new file mode 100644 index 0000000..3d8ccac --- /dev/null +++ b/scales/tritriad7.scl @@ -0,0 +1,12 @@ +! tritriad7.scl +! +Tritriadic scale of the 7:9:11 triad + 7 +! + 99/98 + 121/98 + 14/11 + 9/7 + 11/7 + 18/11 + 2/1 diff --git a/scales/tritriad9.scl b/scales/tritriad9.scl new file mode 100644 index 0000000..0c8759c --- /dev/null +++ b/scales/tritriad9.scl @@ -0,0 +1,12 @@ +! tritriad9.scl +! +Tritriadic scale of the 9:11:13 triad + 7 +! + 169/162 + 11/9 + 18/13 + 13/9 + 22/13 + 143/81 + 2/1 diff --git a/scales/trost.scl b/scales/trost.scl new file mode 100644 index 0000000..f59e72d --- /dev/null +++ b/scales/trost.scl @@ -0,0 +1,17 @@ +! trost.scl +! +Johann Caspar Trost, organ temperament (1677), from Ratte, p. 390 + 12 +! + 96.57875 + 206.84250 + 296.57875 + 400.00000 + 503.42125 + 600.00000 + 696.57875 + 793.15750 + 903.42125 + 1006.84250 + 1089.73625 + 2/1 diff --git a/scales/tsikno_2nd.scl b/scales/tsikno_2nd.scl new file mode 100644 index 0000000..061f705 --- /dev/null +++ b/scales/tsikno_2nd.scl @@ -0,0 +1,12 @@ +! tsikno_2nd.scl +! +Tsiknopoulos 2nd Byzantine Liturgical mode (68: 7-14-7-12-7-14-7) + 7 +! + 123.52941 + 370.58824 + 494.11765 + 705.88235 + 829.41176 + 1076.47059 + 2/1 diff --git a/scales/tsjerepnin.scl b/scales/tsjerepnin.scl new file mode 100644 index 0000000..050226d --- /dev/null +++ b/scales/tsjerepnin.scl @@ -0,0 +1,14 @@ +! tsjerepnin.scl +! +Scale from Ivan Tsjerepnin's Santur Opera (1977) & suite from it Santur Live! + 9 +! + 10/9 + 6/5 + 4/3 + 45/32 + 3/2 + 8/5 + 9/5 + 15/8 + 2/1 diff --git a/scales/tsuda13.scl b/scales/tsuda13.scl new file mode 100644 index 0000000..9e4532c --- /dev/null +++ b/scales/tsuda13.scl @@ -0,0 +1,17 @@ +! tsuda13.scl +! +Mayumi Tsuda's Harmonic-13 scale. 1/1=440 Hz + 12 +! + 14/13 + 13/12 + 16/13 + 13/10 + 18/13 + 13/9 + 20/13 + 13/8 + 22/13 + 13/7 + 208/105 + 2/1 diff --git a/scales/tuneable3.scl b/scales/tuneable3.scl new file mode 100644 index 0000000..4be29c7 --- /dev/null +++ b/scales/tuneable3.scl @@ -0,0 +1,106 @@ +! tuneable3.scl +! +Marc Sabat, 3 octaves of intervals tuneable by ear + 101 +! + 8/7 + 7/6 + 19/16 + 6/5 + 11/9 + 5/4 + 14/11 + 9/7 + 13/10 + 4/3 + 27/20 + 11/8 + 7/5 + 17/12 + 10/7 + 13/9 + 16/11 + 3/2 + 14/9 + 11/7 + 8/5 + 13/8 + 5/3 + 17/10 + 12/7 + 7/4 + 9/5 + 20/11 + 11/6 + 13/7 + 15/8 + 23/12 + 2/1 + 13/6 + 11/5 + 9/4 + 7/3 + 19/8 + 12/5 + 17/7 + 22/9 + 27/11 + 5/2 + 18/7 + 13/5 + 21/8 + 8/3 + 11/4 + 14/5 + 17/6 + 20/7 + 23/8 + 3/1 + 28/9 + 25/8 + 22/7 + 19/6 + 16/5 + 13/4 + 23/7 + 10/3 + 27/8 + 17/5 + 24/7 + 7/2 + 18/5 + 11/3 + 15/4 + 19/5 + 23/6 + 27/7 + 4/1 + 25/6 + 21/5 + 17/4 + 13/3 + 22/5 + 9/2 + 23/5 + 14/3 + 19/4 + 24/5 + 5/1 + 26/5 + 21/4 + 16/3 + 11/2 + 28/5 + 17/3 + 23/4 + 6/1 + 25/4 + 19/3 + 13/2 + 20/3 + 27/4 + 7/1 + 22/3 + 15/2 + 23/3 + 8/1 diff --git a/scales/tuners1.scl b/scales/tuners1.scl new file mode 100644 index 0000000..742e560 --- /dev/null +++ b/scales/tuners1.scl @@ -0,0 +1,17 @@ +! tuners1.scl +! +The Tuner's Guide well temperament no. 1 (1840) + 12 +! + 95.75974 + 196.99752 + 299.66974 + 394.73984 + 500.26102 + 595.90158 + 698.99589 + 797.71474 + 896.31192 + 1001.62474 + 1095.51755 + 2/1 diff --git a/scales/tuners2.scl b/scales/tuners2.scl new file mode 100644 index 0000000..28cbb85 --- /dev/null +++ b/scales/tuners2.scl @@ -0,0 +1,17 @@ +! tuners2.scl +! +The Tuner's Guide well temperament no. 2 (1840) + 12 +! + 98.77260 + 199.37853 + 300.84967 + 399.25057 + 500.95184 + 599.56336 + 700.01439 + 798.89467 + 899.60413 + 1001.17376 + 1099.66483 + 2/1 diff --git a/scales/tuners3.scl b/scales/tuners3.scl new file mode 100644 index 0000000..d5cb2cc --- /dev/null +++ b/scales/tuners3.scl @@ -0,0 +1,17 @@ +! tuners3.scl +! +The Tuner's Guide well temperament no. 3 (1840) + 12 +! + 98.34687 + 199.85693 + 300.72629 + 398.70981 + 499.86580 + 598.11216 + 699.52430 + 800.30187 + 899.64640 + 1000.63840 + 1098.73440 + 2/1 diff --git a/scales/turkish.scl b/scales/turkish.scl new file mode 100644 index 0000000..41df657 --- /dev/null +++ b/scales/turkish.scl @@ -0,0 +1,12 @@ +! turkish.scl +! +Turkish, 5-limit from Palmer on a Turkish music record, harmonic minor inverse + 7 +! + 16/15 + 5/4 + 4/3 + 3/2 + 5/3 + 16/9 + 2/1 diff --git a/scales/turkish_17.scl b/scales/turkish_17.scl new file mode 100644 index 0000000..94bbfbb --- /dev/null +++ b/scales/turkish_17.scl @@ -0,0 +1,22 @@ +! turkish_17.scl +! +Turkish THM folk music gamut in 53-tET + 17 +! + 67.92453 + 113.20755 + 203.77358 + 294.33962 + 362.26415 + 407.54717 + 498.11321 + 566.03774 + 611.32075 + 701.88679 + 792.45283 + 860.37736 + 905.66038 + 996.22642 + 1064.15094 + 1109.43396 + 2/1 diff --git a/scales/turkish_24.scl b/scales/turkish_24.scl new file mode 100644 index 0000000..eb4f162 --- /dev/null +++ b/scales/turkish_24.scl @@ -0,0 +1,29 @@ +! turkish_24.scl +! +Ra'uf Yekta, 24-tone Pythagorean Turkish Theoretical Gamut, 1/1=D (perde yegah) at 294 Hz + 24 +! + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 32/27 + 19683/16384 + 8192/6561 + 81/64 + 2097152/1594323 + 4/3 + 1024/729 + 729/512 + 262144/177147 + 3/2 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 8388608/4782969 + 16/9 + 4096/2187 + 243/128 + 1048576/531441 + 2/1 diff --git a/scales/turkish_24a.scl b/scales/turkish_24a.scl new file mode 100644 index 0000000..26a6bbb --- /dev/null +++ b/scales/turkish_24a.scl @@ -0,0 +1,29 @@ +! turkish_24a.scl +! +Turkish gamut with schismatic simplifications + 24 +! + 256/243 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 81/64 + 320/243 + 4/3 + 45/32 + 64/45 + 40/27 + 3/2 + 128/81 + 8/5 + 5/3 + 27/16 + 1280/729 + 16/9 + 15/8 + 243/128 + 160/81 + 2/1 diff --git a/scales/turkish_29.scl b/scales/turkish_29.scl new file mode 100644 index 0000000..0879fb0 --- /dev/null +++ b/scales/turkish_29.scl @@ -0,0 +1,34 @@ +! turkish_29.scl +! +Gltekin Oransay, 29-tone Turkish gamut, 1/1=D + 29 +! + 81/80 + 256/243 + 16/15 + 10/9 + 9/8 + 75/64 + 32/27 + 6/5 + 5/4 + 81/64 + 320/243 + 4/3 + 27/20 + 45/32 + 64/45 + 40/27 + 3/2 + 243/160 + 128/81 + 8/5 + 5/3 + 27/16 + 128/75 + 16/9 + 9/5 + 15/8 + 243/128 + 160/81 + 2/1 diff --git a/scales/turkish_29a.scl b/scales/turkish_29a.scl new file mode 100644 index 0000000..d7e0ef7 --- /dev/null +++ b/scales/turkish_29a.scl @@ -0,0 +1,34 @@ +! turkish_29a.scl +! +Combined gamut of KTM and THM in 53-tET + 29 +! + 67.92453 + 90.56604 + 113.20755 + 181.13208 + 203.77358 + 294.33962 + 316.98113 + 362.26415 + 384.90566 + 475.47170 + 498.11321 + 520.75472 + 566.03774 + 588.67925 + 611.32075 + 679.24528 + 701.88679 + 792.45283 + 815.09434 + 860.37736 + 883.01887 + 905.66038 + 996.22642 + 1018.86792 + 1064.15094 + 1086.79245 + 1109.43396 + 1177.35849 + 2/1 diff --git a/scales/turkish_41.scl b/scales/turkish_41.scl new file mode 100644 index 0000000..3638a19 --- /dev/null +++ b/scales/turkish_41.scl @@ -0,0 +1,46 @@ +! turkish_41.scl +! +Abdlkadir Tre and M. Ekrem Karadeniz theoretical Turkish gamut + 41 +! + 33.96226 + 67.92453 + 90.56604 + 124.52830 + 158.49057 + 181.13208 + 203.77358 + 237.73585 + 271.69811 + 294.33962 + 328.30189 + 362.26415 + 384.90566 + 418.86792 + 452.83019 + 475.47170 + 498.11321 + 532.07547 + 566.03774 + 588.67925 + 622.64151 + 656.60377 + 679.24528 + 701.88679 + 735.84906 + 769.81132 + 792.45283 + 826.41509 + 860.37736 + 883.01887 + 905.66038 + 939.62264 + 973.58491 + 996.22642 + 1030.18868 + 1064.15094 + 1086.79245 + 1120.75472 + 1154.71698 + 1177.35849 + 2/1 diff --git a/scales/turkish_41a.scl b/scales/turkish_41a.scl new file mode 100644 index 0000000..ed51299 --- /dev/null +++ b/scales/turkish_41a.scl @@ -0,0 +1,46 @@ +! turkish_41a.scl +! +Karadeniz's theoretical Turkish gamut, quantized to subset of 53-tET + 41 +! + 45.28302 + 67.92453 + 90.56604 + 113.20755 + 158.49057 + 181.13208 + 203.77358 + 226.41509 + 271.69811 + 294.33962 + 316.98113 + 362.26415 + 384.90566 + 430.18868 + 452.83019 + 475.47170 + 498.11321 + 520.75472 + 566.03774 + 588.67925 + 633.96226 + 656.60377 + 679.24528 + 701.88679 + 747.16981 + 769.81132 + 792.45283 + 837.73585 + 860.37736 + 883.01887 + 905.66038 + 950.94340 + 973.58491 + 996.22642 + 1041.50943 + 1064.15094 + 1086.79245 + 1132.07547 + 1154.71698 + 1177.35849 + 2/1 diff --git a/scales/turkish_aeu.scl b/scales/turkish_aeu.scl new file mode 100644 index 0000000..92a5780 --- /dev/null +++ b/scales/turkish_aeu.scl @@ -0,0 +1,29 @@ +! turkish_aeu.scl +! +Arel-Ezgi-Uzdilek (AEU) 24 tone theoretical system + 24 +! + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 32/27 + 19683/16384 + 8192/6561 + 81/64 + 4/3 + 177147/131072 + 1024/729 + 729/512 + 262144/177147 + 3/2 + 128/81 + 6561/4096 + 32768/19683 + 27/16 + 16/9 + 59049/32768 + 4096/2187 + 243/128 + 1048576/531441 + 2/1 diff --git a/scales/turkish_aeu41.scl b/scales/turkish_aeu41.scl new file mode 100644 index 0000000..d885315 --- /dev/null +++ b/scales/turkish_aeu41.scl @@ -0,0 +1,46 @@ +! turkish_aeu41.scl +! +Arel-Ezgi-Uzdilek extended to 41-quasi equal + 41 +! + 531441/524288 + 66.76499 + 90.22500 + 2187/2048 + 1162261467/1073741824 + 180.44999 + 9/8 + 4782969/4194304 + 270.67499 + 294.13500 + 19683/16384 + 350.97750 + 384.35999 + 81/64 + 43046721/33554432 + 474.58499 + 498.04500 + 177147/131072 + 564.80998 + 588.26999 + 729/512 + 387420489/268435456 + 678.49499 + 3/2 + 1594323/1048576 + 768.71999 + 792.18000 + 6561/4096 + 839.10002 + 882.40499 + 27/16 + 14348907/8388608 + 972.62999 + 996.09000 + 59049/32768 + 1062.85498 + 1086.31499 + 243/128 + 129140163/67108864 + 1176.53999 + 2/1 diff --git a/scales/turkish_awjara_on_b.scl b/scales/turkish_awjara_on_b.scl new file mode 100644 index 0000000..f106925 --- /dev/null +++ b/scales/turkish_awjara_on_b.scl @@ -0,0 +1,17 @@ +! turkish_awjara_on_b.scl +! +Turkish Awjara with perde iraq on B by Dr. Oz. + 12 +! + 1375/1323 + 55/49 + 81/70 + 99/80 + 147/110 + 25/18 + 3/2 + 1323/800 + 243/140 + 25/14 + 297/160 + 441/220 diff --git a/scales/turkish_bagl.scl b/scales/turkish_bagl.scl new file mode 100644 index 0000000..3d439e1 --- /dev/null +++ b/scales/turkish_bagl.scl @@ -0,0 +1,22 @@ +! turkish_bagl.scl +! +Ratios of the 17 frets on the neck of "Baglama" ("saz") according to Yaln Tura + 17 +! + 18/17 + 12/11 + 9/8 + 81/68 + 27/22 + 81/64 + 4/3 + 24/17 + 16/11 + 3/2 + 27/17 + 18/11 + 27/16 + 16/9 + 32/17 + 64/33 + 2/1 diff --git a/scales/turkish_bestenigar_on_b.scl b/scales/turkish_bestenigar_on_b.scl new file mode 100644 index 0000000..e7c6658 --- /dev/null +++ b/scales/turkish_bestenigar_on_b.scl @@ -0,0 +1,17 @@ +! turkish_bestenigar_on_b.scl +! +Turkish Bestenigar with perde iraq on B by Dr. Oz. + 12 +! + 264/245 + 55/49 + 27/22 + 100/81 + 147/110 + 36/25 + 3/2 + 165/98 + 140/81 + 25/14 + 1060.00000 + 441/220 diff --git a/scales/turkish_buselik_on_d.scl b/scales/turkish_buselik_on_d.scl new file mode 100644 index 0000000..0182221 --- /dev/null +++ b/scales/turkish_buselik_on_d.scl @@ -0,0 +1,15 @@ +! turkish_buselik_on_d.scl +! +Turkish Buselik with perde buselik on E by Dr. Oz. + 10 +! + 22/21 + 55/49 + 63/50 + 147/110 + 3/2 + 81/50 + 165/98 + 25/14 + 28/15 + 441/220 diff --git a/scales/turkish_huseyni_and_neva.scl b/scales/turkish_huseyni_and_neva.scl new file mode 100644 index 0000000..b6702a2 --- /dev/null +++ b/scales/turkish_huseyni_and_neva.scl @@ -0,0 +1,15 @@ +! turkish_huseyni_and_neva.scl +! +Turkish Huseyni and Neva (also Tahir, Muhayyer, Gerdaniye, simple Isfahan & Gulizar) with perde dugah on D by Dr. Oz. + 10 +! + 55/49 + 27/22 + 121/98 + 147/110 + 7/5 + 3/2 + 165/98 + 81/44 + 363/196 + 441/220 diff --git a/scales/turkish_mahur_and_penchgah.scl b/scales/turkish_mahur_and_penchgah.scl new file mode 100644 index 0000000..3dd64de --- /dev/null +++ b/scales/turkish_mahur_and_penchgah.scl @@ -0,0 +1,15 @@ +! turkish_mahur_and_penchgah.scl +! +Turkish Mahur and Penchgah with perde rast on C by Dr. Oz. + 10 +! + 55/49 + 96/77 + 63/50 + 147/110 + 7/5 + 3/2 + 165/98 + 144/77 + 189/100 + 441/220 diff --git a/scales/turkish_mahur_and_zavil.scl b/scales/turkish_mahur_and_zavil.scl new file mode 100644 index 0000000..a99811a --- /dev/null +++ b/scales/turkish_mahur_and_zavil.scl @@ -0,0 +1,15 @@ +! turkish_mahur_and_zavil.scl +! +Turkish Mahur and Zavil with perde rast on C by Dr. Oz. + 10 +! + 55/49 + 25/21 + 121/98 + 147/110 + 7/5 + 3/2 + 165/98 + 363/196 + 189/100 + 441/220 diff --git a/scales/turkish_nishabur_on_e.scl b/scales/turkish_nishabur_on_e.scl new file mode 100644 index 0000000..6290a62 --- /dev/null +++ b/scales/turkish_nishabur_on_e.scl @@ -0,0 +1,14 @@ +! turkish_nishabur_on_e.scl +! +Turkish Nishabur with perde buselik on E by Dr. Oz. + 9 +! + 22/21 + 55/49 + 25/21 + 63/50 + 7/5 + 3/2 + 165/98 + 25/14 + 441/220 diff --git a/scales/turkish_rast_and_penchgah_on_c.scl b/scales/turkish_rast_and_penchgah_on_c.scl new file mode 100644 index 0000000..655406a --- /dev/null +++ b/scales/turkish_rast_and_penchgah_on_c.scl @@ -0,0 +1,14 @@ +! turkish_rast_and_penchgah_on_c.scl +! +Turkish Rast, Acemli Rast and Penchgah with perde rast on C by Dr. Ozan Yarman + 9 +! + 55/49 + 121/98 + 147/110 + 7/5 + 3/2 + 165/98 + 25/14 + 363/196 + 441/220 diff --git a/scales/turkish_segah-huzzam-mustear_on_e.scl b/scales/turkish_segah-huzzam-mustear_on_e.scl new file mode 100644 index 0000000..674f363 --- /dev/null +++ b/scales/turkish_segah-huzzam-mustear_on_e.scl @@ -0,0 +1,17 @@ +! turkish_segah-huzzam-mustear_on_e.scl +! +Turkish Segah, Huzzam and Mustear with perde segah on E by Dr. Oz. + 12 +! + 25/21 + 55/49 + 81/70 + 99/80 + 147/110 + 7/5 + 3/2 + 18/11 + 33/20 + 243/140 + 297/160 + 441/220 diff --git a/scales/turkish_segah-huzzam-mustear_v2_on_e.scl b/scales/turkish_segah-huzzam-mustear_v2_on_e.scl new file mode 100644 index 0000000..9864bef --- /dev/null +++ b/scales/turkish_segah-huzzam-mustear_v2_on_e.scl @@ -0,0 +1,17 @@ +! turkish_segah-huzzam-mustear_v2_on_e.scl +! +Turkish Segah, Huzzam and Mustear ver.2 with perde segah on E by Dr. Oz. + 12 +! + 25/21 + 55/49 + 64/55 + 99/80 + 147/110 + 7/5 + 3/2 + 105/64 + 1323/800 + 99/56 + 297/160 + 441/220 diff --git a/scales/turkish_segah_on_e.scl b/scales/turkish_segah_on_e.scl new file mode 100644 index 0000000..4838b72 --- /dev/null +++ b/scales/turkish_segah_on_e.scl @@ -0,0 +1,17 @@ +! turkish_segah_on_e.scl +! +Turkish Segah with perde segah on E by Dr. Oz. + 12 +! + 25/21 + 55/49 + 81/70 + 99/80 + 147/110 + 243/140 + 3/2 + 1323/800 + 2673/1600 + 25/14 + 297/160 + 441/220 diff --git a/scales/turkish_sivas.scl b/scales/turkish_sivas.scl new file mode 100644 index 0000000..73fcb6e --- /dev/null +++ b/scales/turkish_sivas.scl @@ -0,0 +1,20 @@ +! turkish_sivas.scl +! +Notes on a baglama from Sivas + 15 +! + 256/243 + 2187/2048 + 65536/59049 + 9/8 + 32/27 + 19683/16384 + 8192/6561 + 4/3 + 262144/177147 + 3/2 + 128/81 + 32768/19683 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/turkish_sunbule_on_d.scl b/scales/turkish_sunbule_on_d.scl new file mode 100644 index 0000000..09bc776 --- /dev/null +++ b/scales/turkish_sunbule_on_d.scl @@ -0,0 +1,16 @@ +! turkish_sunbule_on_d.scl +! +Turkish Sunbule with perde dugah on D (also Chargah on F) by Dr. Oz. + 11 +! + 264/245 + 55/49 + 40/33 + 63/50 + 147/110 + 36/25 + 3/2 + 165/98 + 25/14 + 147/80 + 441/220 diff --git a/scales/turkish_ushshaq-bayati_on_d.scl b/scales/turkish_ushshaq-bayati_on_d.scl new file mode 100644 index 0000000..832567d --- /dev/null +++ b/scales/turkish_ushshaq-bayati_on_d.scl @@ -0,0 +1,15 @@ +! turkish_ushshaq-bayati_on_d.scl +! +Turkish Ushshaq/Bayati with perde dugah on D by Dr. Oz. + 10 +! + 55/49 + 11/9 + 49/40 + 147/110 + 3/2 + 77/48 + 165/98 + 25/14 + 90/49 + 441/220 diff --git a/scales/turko-arabic_(kurdili)hijazkar-suznak-nawruz_neveser_nikriz_on_c.scl b/scales/turko-arabic_(kurdili)hijazkar-suznak-nawruz_neveser_nikriz_on_c.scl new file mode 100644 index 0000000..1d294b0 --- /dev/null +++ b/scales/turko-arabic_(kurdili)hijazkar-suznak-nawruz_neveser_nikriz_on_c.scl @@ -0,0 +1,17 @@ +! turko-arabic_(kurdili)hijazkar-suznak-nawruz_neveser_nikriz_on_c.scl +! +Mixture of Turkish and Arabic intonations of Hijazkar, Kurdili-Hijazkar, Suznak, Nawruz, (Kurdili)Neveser, and Nikriz with perde rast on C by Dr. Oz. + 12 +! + 27/25 + 55/49 + 25/21 + 315/256 + 147/110 + 7/5 + 3/2 + 81/50 + 165/98 + 25/14 + 297/160 + 441/220 diff --git a/scales/turko-arabic_(kurdili)neveser_and_nikriz_on_c.scl b/scales/turko-arabic_(kurdili)neveser_and_nikriz_on_c.scl new file mode 100644 index 0000000..608b6cc --- /dev/null +++ b/scales/turko-arabic_(kurdili)neveser_and_nikriz_on_c.scl @@ -0,0 +1,16 @@ +! turko-arabic_(kurdili)neveser_and_nikriz_on_c.scl +! +Mixture of Turkish and Arabic intonations of Neveser, Kurdili Neveser, and Nikriz with perde rast on C by Dr. Oz. + 11 +! + 27/25 + 55/49 + 25/21 + 147/110 + 7/5 + 3/2 + 81/50 + 165/98 + 25/14 + 297/160 + 441/220 diff --git a/scales/turko-arabic_hijaz-humayun-zirgule_on_d.scl b/scales/turko-arabic_hijaz-humayun-zirgule_on_d.scl new file mode 100644 index 0000000..b31c74b --- /dev/null +++ b/scales/turko-arabic_hijaz-humayun-zirgule_on_d.scl @@ -0,0 +1,17 @@ +! turko-arabic_hijaz-humayun-zirgule_on_d.scl +! +Mixture of Turkish and Arabic intonations of Hijaz, Humayun, and Zirgule with perde dugah on D by Dr. Oz. + 12 +! + 25/24 + 55/49 + 40/33 + 63/50 + 147/110 + 25/18 + 3/2 + 7/5 + 165/98 + 25/14 + 297/160 + 441/220 diff --git a/scales/turko-arabic_hijazkar_and kurdili-hijazkar_on_c.scl b/scales/turko-arabic_hijazkar_and kurdili-hijazkar_on_c.scl new file mode 100644 index 0000000..337b034 --- /dev/null +++ b/scales/turko-arabic_hijazkar_and kurdili-hijazkar_on_c.scl @@ -0,0 +1,15 @@ +! turko-arabic_hijazkar_and kurdili-hijazkar_on_c.scl +! +Mixture of Turkish and Arabic intonations of Hijazkar and Kurdili Hijazkar with perde rast on C by Dr. Oz. + 10 +! + 27/25 + 25/21 + 315/256 + 147/110 + 3/2 + 81/50 + 165/98 + 25/14 + 297/160 + 441/220 diff --git a/scales/turko-arabic_iraq-awdj_and_ferahnak_on_b.scl b/scales/turko-arabic_iraq-awdj_and_ferahnak_on_b.scl new file mode 100644 index 0000000..7e8d832 --- /dev/null +++ b/scales/turko-arabic_iraq-awdj_and_ferahnak_on_b.scl @@ -0,0 +1,17 @@ +! turko-arabic_iraq-awdj_and_ferahnak_on_b.scl +! +Mixture of Turkish and Arabic intonations of Iraq/Awdj and Ferahnak with perde iraq on B by Dr. Oz. + 12 +! + 40/33 + 55/49 + 27/22 + 100/81 + 147/110 + 5500/3969 + 3/2 + 55/32 + 165/98 + 81/44 + 50/27 + 441/220 diff --git a/scales/turko-arabic_karjighar-bayati_shuri_on_d.scl b/scales/turko-arabic_karjighar-bayati_shuri_on_d.scl new file mode 100644 index 0000000..2a8f686 --- /dev/null +++ b/scales/turko-arabic_karjighar-bayati_shuri_on_d.scl @@ -0,0 +1,15 @@ +! turko-arabic_karjighar-bayati_shuri_on_d.scl +! +Mixture of Turkish and Arabic intonations of Karjighar (Bayati Shuri) with perde dugah on D by Dr. Oz. + 10 +! + 55/49 + 6/5 + 27/22 + 147/110 + 3/2 + 35/22 + 45/28 + 81/44 + 1029/550 + 441/220 diff --git a/scales/turko-arabic_kurdi_buselik_nishabur_on_d.scl b/scales/turko-arabic_kurdi_buselik_nishabur_on_d.scl new file mode 100644 index 0000000..ea855bb --- /dev/null +++ b/scales/turko-arabic_kurdi_buselik_nishabur_on_d.scl @@ -0,0 +1,17 @@ +! turko-arabic_kurdi_buselik_nishabur_on_d.scl +! +Mixture of Turkish and Arabic intonations of Kurdi, Buselik and Nishabur with perde dugah on D and buselik on E by Dr. Oz. + 12 +! + 22/21 + 55/49 + 25/21 + 63/50 + 147/110 + 7/5 + 3/2 + 81/50 + 165/98 + 25/14 + 28/15 + 441/220 diff --git a/scales/turko-arabic_kurdi_on_d.scl b/scales/turko-arabic_kurdi_on_d.scl new file mode 100644 index 0000000..bfa1f08 --- /dev/null +++ b/scales/turko-arabic_kurdi_on_d.scl @@ -0,0 +1,12 @@ +! turko-arabic_kurdi_on_d.scl +! +Mixture of Turkish and Arabic intonations of Kurdi with perde dugah on D by Dr. Oz. + 7 +! + 55/49 + 25/21 + 147/110 + 3/2 + 165/98 + 25/14 + 441/220 diff --git a/scales/turko-arabic_nihavend(murassah)_zanjaran_on_c.scl b/scales/turko-arabic_nihavend(murassah)_zanjaran_on_c.scl new file mode 100644 index 0000000..2483dc1 --- /dev/null +++ b/scales/turko-arabic_nihavend(murassah)_zanjaran_on_c.scl @@ -0,0 +1,17 @@ +! turko-arabic_nihavend(murassah)_zanjaran_on_c.scl +! +Mixture of Turkish and Arabic intonations of Nihavend (Murassah) and Zanjaran with perde rast on C by Dr. Oz. + 12 +! + 27/25 + 55/49 + 25/21 + 63/50 + 147/110 + 343/242 + 3/2 + 35/22 + 165/98 + 25/14 + 245/132 + 441/220 diff --git a/scales/turko-arabic_nihavend_and_nihavend-murassah_on_c.scl b/scales/turko-arabic_nihavend_and_nihavend-murassah_on_c.scl new file mode 100644 index 0000000..482e443 --- /dev/null +++ b/scales/turko-arabic_nihavend_and_nihavend-murassah_on_c.scl @@ -0,0 +1,15 @@ +! turko-arabic_nihavend_and_nihavend-murassah_on_c.scl +! +Mixture of Turkish and Arabic intonations of Nihavend and Nihavend Murassah with perde rast on C by Dr. Oz. + 10 +! + 55/49 + 25/21 + 147/110 + 343/242 + 3/2 + 35/22 + 165/98 + 25/14 + 245/132 + 441/220 diff --git a/scales/turko-arabic_rast_huseyni_uzzal-garip.scl b/scales/turko-arabic_rast_huseyni_uzzal-garip.scl new file mode 100644 index 0000000..4a9cb0b --- /dev/null +++ b/scales/turko-arabic_rast_huseyni_uzzal-garip.scl @@ -0,0 +1,17 @@ +! turko-arabic_rast_huseyni_uzzal-garip.scl +! +Mixture of Turkish and Arabic general intonations of Rast, Huseyni, Uzzal and Garip Hijaz and with perde rast on C, dugah on D by Dr. Oz. + 12 +! + 135/98 + 55/49 + 27/22 + 121/98 + 147/110 + 10/7 + 3/2 + 25/14 + 165/98 + 81/44 + 363/196 + 441/220 diff --git a/scales/turko-arabic_rast_on_c.scl b/scales/turko-arabic_rast_on_c.scl new file mode 100644 index 0000000..2d1dc71 --- /dev/null +++ b/scales/turko-arabic_rast_on_c.scl @@ -0,0 +1,15 @@ +! turko-arabic_rast_on_c.scl +! +Mixture of Turkish and Arabic general intonations of Rast by Dr. Oz. + 10 +! + 55/49 + 27/22 + 121/98 + 147/110 + 3/2 + 165/98 + 25/14 + 81/44 + 363/196 + 441/220 diff --git a/scales/turko-arabic_saba_on_d.scl b/scales/turko-arabic_saba_on_d.scl new file mode 100644 index 0000000..bf40d41 --- /dev/null +++ b/scales/turko-arabic_saba_on_d.scl @@ -0,0 +1,17 @@ +! turko-arabic_saba_on_d.scl +! +Mixture of Turkish and Arabic intonations of Saba (also Koutchek) with perde dugah on D (and Muberka on E) by Dr. Oz. + 12 +! + 264/245 + 55/49 + 49/40 + 121/98 + 147/110 + 45/32 + 3/2 + 36/25 + 165/98 + 25/14 + 1060.00000 + 441/220 diff --git a/scales/turko-arabic_suznak-nawruz_on_c.scl b/scales/turko-arabic_suznak-nawruz_on_c.scl new file mode 100644 index 0000000..2420f06 --- /dev/null +++ b/scales/turko-arabic_suznak-nawruz_on_c.scl @@ -0,0 +1,14 @@ +! turko-arabic_suznak-nawruz_on_c.scl +! +Mixture of Turkish and Arabic intonations of Suznak and Nawruz with perde rast on C by Dr. Oz. + 9 +! + 55/49 + 315/256 + 147/110 + 3/2 + 81/50 + 165/98 + 25/14 + 297/160 + 441/220 diff --git a/scales/turko-arabic_ushshaq-bayati_and_huseyni_on_d.scl b/scales/turko-arabic_ushshaq-bayati_and_huseyni_on_d.scl new file mode 100644 index 0000000..8d783d4 --- /dev/null +++ b/scales/turko-arabic_ushshaq-bayati_and_huseyni_on_d.scl @@ -0,0 +1,14 @@ +! turko-arabic_ushshaq-bayati_and_huseyni_on_d.scl +! +Mixture of Turkish and Arabic intonations of Ushshaq/Bayati and Huseyni with perde dugah on D by Dr. Oz. + 9 +! + 55/49 + 49/40 + 121/98 + 147/110 + 3/2 + 165/98 + 25/14 + 1060.00000 + 441/220 diff --git a/scales/turko-arabic_uzzal-garip.scl b/scales/turko-arabic_uzzal-garip.scl new file mode 100644 index 0000000..2e28b65 --- /dev/null +++ b/scales/turko-arabic_uzzal-garip.scl @@ -0,0 +1,16 @@ +! turko-arabic_uzzal-garip.scl +! +Mixture of Turkish and Arabic general intonations of Uzzal and Garip Hijaz with perde dugah on D by Dr. Oz. + 11 +! + 55/49 + 27/22 + 121/98 + 135/98 + 10/7 + 3/2 + 25/14 + 165/98 + 81/44 + 363/196 + 441/220 diff --git a/scales/two29.scl b/scales/two29.scl new file mode 100644 index 0000000..4e362eb --- /dev/null +++ b/scales/two29.scl @@ -0,0 +1,63 @@ +! two29.scl +! +Two 29-tET scales 25 cents shifted, many near just intervals + 58 +! + 25.00000 + 41.37931 + 66.37931 + 82.75862 + 107.75862 + 124.13793 + 149.13793 + 165.51724 + 190.51724 + 206.89655 + 231.89655 + 248.27586 + 273.27586 + 289.65517 + 314.65517 + 331.03448 + 356.03448 + 372.41379 + 397.41379 + 413.79310 + 438.79310 + 455.17241 + 480.17241 + 496.55172 + 521.55172 + 537.93103 + 562.93103 + 579.31034 + 604.31034 + 620.68966 + 645.68966 + 662.06897 + 687.06897 + 703.44828 + 728.44828 + 744.82759 + 769.82759 + 786.20690 + 811.20690 + 827.58621 + 852.58621 + 868.96552 + 893.96552 + 910.34483 + 935.34483 + 951.72414 + 976.72414 + 993.10345 + 1018.10345 + 1034.48276 + 1059.48276 + 1075.86207 + 1100.86207 + 1117.24138 + 1142.24138 + 1158.62069 + 1183.62069 + 2/1 diff --git a/scales/two29a.scl b/scales/two29a.scl new file mode 100644 index 0000000..8cb914d --- /dev/null +++ b/scales/two29a.scl @@ -0,0 +1,63 @@ +! two29a.scl +! +Two 29-tET scales 15.826 cents shifted, 13-limit chords, Mystery temperament, Gene Ward Smith + 58 +! + 15.82579 + 41.37931 + 57.20510 + 82.75862 + 98.58441 + 124.13793 + 139.96372 + 165.51724 + 181.34303 + 206.89655 + 222.72234 + 248.27586 + 264.10165 + 289.65517 + 305.48096 + 331.03448 + 346.86027 + 372.41379 + 388.23958 + 413.79310 + 429.61889 + 455.17241 + 470.99820 + 496.55172 + 512.37751 + 537.93103 + 553.75682 + 579.31034 + 595.13613 + 620.68966 + 636.51544 + 662.06897 + 677.89475 + 703.44828 + 719.27406 + 744.82759 + 760.65337 + 786.20690 + 802.03268 + 827.58621 + 843.41199 + 868.96552 + 884.79130 + 910.34483 + 926.17061 + 951.72414 + 967.54992 + 993.10345 + 1008.92923 + 1034.48276 + 1050.30855 + 1075.86207 + 1091.68786 + 1117.24138 + 1133.06717 + 1158.62069 + 1174.44648 + 2/1 diff --git a/scales/twofifths1.scl b/scales/twofifths1.scl new file mode 100644 index 0000000..7ffce32 --- /dev/null +++ b/scales/twofifths1.scl @@ -0,0 +1,79 @@ +! twofifths1.scl +152&159[75] in 159-et tuning +75 +! +7.547170 +15.094340 +22.641509 +30.188679 +37.735849 +135.849057 +143.396226 +150.943396 +158.490566 +166.037736 +173.584906 +181.132075 +188.679245 +196.226415 +203.773585 +211.320755 +309.433962 +316.981132 +324.528302 +332.075472 +339.622642 +347.169811 +354.716981 +362.264151 +369.811321 +377.358491 +475.471698 +483.018868 +490.566038 +498.113208 +505.660377 +513.207547 +520.754717 +528.301887 +535.849057 +543.396226 +550.943396 +649.056604 +656.603774 +664.150943 +671.698113 +679.245283 +686.792453 +694.339623 +701.886792 +709.433962 +716.981132 +724.528302 +822.641509 +830.188679 +837.735849 +845.283019 +852.830189 +860.377358 +867.924528 +875.471698 +883.018868 +890.566038 +988.679245 +996.226415 +1003.773585 +1011.320755 +1018.867925 +1026.415094 +1033.962264 +1041.509434 +1049.056604 +1056.603774 +1064.150943 +1162.264151 +1169.811321 +1177.358491 +1184.905660 +1192.452830 +2/1 diff --git a/scales/twofifths2.scl b/scales/twofifths2.scl new file mode 100644 index 0000000..dee9c10 --- /dev/null +++ b/scales/twofifths2.scl @@ -0,0 +1,68 @@ +! twofifths2.scl +19&159[64] in 159-et tuning +64 +! +7.547170 +15.094340 +22.641509 +67.924528 +75.471698 +83.018868 +128.301887 +135.849057 +143.396226 +150.943396 +196.226415 +203.773585 +211.320755 +256.603774 +264.150943 +271.698113 +316.981132 +324.528302 +332.075472 +339.622642 +384.905660 +392.452830 +400.000000 +445.283019 +452.830189 +460.377358 +505.660377 +513.207547 +520.754717 +528.301887 +573.584906 +581.132075 +588.679245 +633.962264 +641.509434 +649.056604 +656.603774 +701.886792 +709.433962 +716.981132 +762.264151 +769.811321 +777.358491 +822.641509 +830.188679 +837.735849 +845.283019 +890.566038 +898.113208 +905.660377 +950.943396 +958.490566 +966.037736 +1011.320755 +1018.867925 +1026.415094 +1033.962264 +1079.245283 +1086.792453 +1094.339623 +1139.622642 +1147.169811 +1154.716981 +2/1 diff --git a/scales/ulimba.scl b/scales/ulimba.scl new file mode 100644 index 0000000..61f40be --- /dev/null +++ b/scales/ulimba.scl @@ -0,0 +1,12 @@ +! ulimba.scl +! +Ulimba from Nyanja tuning. 1/1=126 Hz, Tracey TR-89 A-1,2 + 7 +! + 8/7 + 79/63 + 29/21 + 95/63 + 5/3 + 116/63 + 2/1 diff --git a/scales/ultimate12_nr1.scl b/scales/ultimate12_nr1.scl new file mode 100644 index 0000000..4aa2bfd --- /dev/null +++ b/scales/ultimate12_nr1.scl @@ -0,0 +1,17 @@ +! ultimate12_nr1.scl +! +Ultimate Proportional Synchronous Beating Well-Temperament by Ozan Yarman + 12 +! + 277/262 + 147/131 + 156/131 + 329/262 + 175/131 + 185/131 + 196/131 + 208/131 + 220/131 + 234/131 + 247/131 + 2/1 diff --git a/scales/ultimate12_nr2.scl b/scales/ultimate12_nr2.scl new file mode 100644 index 0000000..3c63fd6 --- /dev/null +++ b/scales/ultimate12_nr2.scl @@ -0,0 +1,17 @@ +! ultimate12_nr2.scl +! +Ultimate Proportional Synchronous Beating Well Temperament nr.2 by Ozan Yarman + 12 +! + 37/35 + 28/25 + 25/21 + 44/35 + 234/175 + 148/105 + 157/105 + 278/175 + 176/105 + 312/175 + 988/525 + 2/1 diff --git a/scales/ultimate12_nr3.scl b/scales/ultimate12_nr3.scl new file mode 100644 index 0000000..adc822a --- /dev/null +++ b/scales/ultimate12_nr3.scl @@ -0,0 +1,17 @@ +! ultimate12_nr3.scl +! +Ultimate Synchronous Proportional Beating Well-Temperament nr. 3 by Ozan Yarman + 12 +! + 208/197 + 441/394 + 234/197 + 495/394 + 263/197 + 555/394 + 295/197 + 312/197 + 330/197 + 351/197 + 741/394 + 2/1 diff --git a/scales/ultimate12_nr4a.scl b/scales/ultimate12_nr4a.scl new file mode 100644 index 0000000..53e2c3d --- /dev/null +++ b/scales/ultimate12_nr4a.scl @@ -0,0 +1,17 @@ +! ultimate12_nr4a.scl +! +Ultimate Synchronous Proportional Beating Well-Temperament nr.4a by Ozan Yarman + 12 +! + 37/35 + 353/315 + 208/175 + 79/63 + 701/525 + 148/105 + 472/315 + 111/70 + 176/105 + 312/175 + 592/315 + 2/1 diff --git a/scales/ultimate12_nr4b.scl b/scales/ultimate12_nr4b.scl new file mode 100644 index 0000000..22c3f71 --- /dev/null +++ b/scales/ultimate12_nr4b.scl @@ -0,0 +1,17 @@ +! C:\Program Files\Scala\Ozan\12-tone\ultimate12_nr4b.scl +! +Ultimate Synchronous Proportional Beating Well-Temperament nr.4b by Ozan Yarman + 12 +! + 37/35 + 28/25 + 208/175 + 79/63 + 234/175 + 148/105 + 472/315 + 111/70 + 176/105 + 312/175 + 592/315 + 2/1 diff --git a/scales/unimajor.scl b/scales/unimajor.scl new file mode 100644 index 0000000..75886a5 --- /dev/null +++ b/scales/unimajor.scl @@ -0,0 +1,16 @@ +! unimajor.scl +A 2.3.11/7 subgroup scale +12 +! +22/21 +9/8 +32/27 +14/11 +4/3 +63/44 +3/2 +11/7 +27/16 +16/9 +21/11 +2/1 diff --git a/scales/unimajorpenta.scl b/scales/unimajorpenta.scl new file mode 100644 index 0000000..635a073 --- /dev/null +++ b/scales/unimajorpenta.scl @@ -0,0 +1,17 @@ +! unimajorpenta.scl +! +Pentacircle (896/891) tempered unimajor in 152\259 tuning + 12 +! + 78.76448 + 208.49421 + 287.25869 + 416.98842 + 495.75290 + 625.48263 + 704.24710 + 783.01158 + 912.74131 + 991.50579 + 1121.23552 + 2/1 diff --git a/scales/unimarv19.scl b/scales/unimarv19.scl new file mode 100644 index 0000000..da128f9 --- /dev/null +++ b/scales/unimarv19.scl @@ -0,0 +1,47 @@ +! unimarv19.scl +Unimarv[19] (Unidecimal marvel 225/224&385/384) hobbit in POTE tuning ! as catakleismic [-17, -16, -12, -11, -10, -6, -5, -4, -1, ! 0, 1, 4, 5, 6, 10, 11, 12, 16, 17] +19 +! +66.69201 +116.07099 +200.77735 +267.46935 +316.84833 +383.54034 +432.91932 +499.61133 +584.31769 +615.68231 +700.38867 +767.08068 +816.45966 +883.15167 +932.53065 +999.22265 +1083.92901 +1133.30799 +2/1 +! +!! preunimarv19.scl +! Unimarv[19] 5-limit transversal +! 19 +!! +! 25/24 +! 16/15 +! 9/8 +! 75/64 +! 6/5 +! 5/4 +! 32/25 +! 4/3 +! 45/32 +! 64/45 +! 3/2 +! 25/16 +! 8/5 +! 5/3 +! 128/75 +! 16/9 +! 15/8 +! 48/25 +! 2/1 diff --git a/scales/urania24.scl b/scales/urania24.scl new file mode 100644 index 0000000..7563148 --- /dev/null +++ b/scales/urania24.scl @@ -0,0 +1,57 @@ +! urania24.scl +Urania[24] hobbit (81/80, 121/120) in POTE tuning +24 +! +36.65667 +119.06191 +155.71857 +192.37524 +229.03190 +311.43714 +348.09381 +384.75047 +467.15572 +503.81238 +540.46905 +584.48961 +659.53095 +696.18762 +732.84428 +815.24953 +851.90619 +888.56286 +963.60420 +1007.62476 +1044.28143 +1080.93809 +1163.34333 +2/1 +! +!! preurnaia24.scl +! Urania[24] transversal +! 24 +!! +! 33/32 +! 16/15 +! 11/10 +! 9/8 +! 25/22 +! 6/5 +! 11/9 +! 5/4 +! 33/25 +! 4/3 +! 11/8 +! 88/63 +! 16/11 +! 3/2 +! 50/33 +! 8/5 +! 18/11 +! 5/3 +! 7/4 +! 9/5 +! 11/6 +! 15/8 +! 64/33 +! 2/1 diff --git a/scales/urmawi.scl b/scales/urmawi.scl new file mode 100644 index 0000000..d36ddca --- /dev/null +++ b/scales/urmawi.scl @@ -0,0 +1,12 @@ +! urmawi.scl +! +al-Urmawi, one of twelve maqam rows. First tetrachord is Rast + 7 +! + 9/8 + 8192/6561 + 4/3 + 3/2 + 27/16 + 59049/32768 + 2/1 diff --git a/scales/uruk.scl b/scales/uruk.scl new file mode 100644 index 0000000..bb949aa --- /dev/null +++ b/scales/uruk.scl @@ -0,0 +1,21 @@ +! uruk.scl +Jon Lyle Smith's "Uruk" scale +17 +! +21/20 +15/14 +9/8 +189/160 +135/112 +81/64 +4/3 +7/5 +10/7 +3/2 +63/40 +45/28 +27/16 +567/320 +405/224 +243/128 +2/1 diff --git a/scales/ushaq99.scl b/scales/ushaq99.scl new file mode 100644 index 0000000..ad4102d --- /dev/null +++ b/scales/ushaq99.scl @@ -0,0 +1,13 @@ +! ushaq99.scl +! +yarman_ushaq in 99ef tempering + 8 +! +145.45455 +290.90909 +496.96970 +703.03030 +787.87879 +848.48485 +993.93939 +2/1 diff --git a/scales/ushshaq tetrachord 11-limit.scl b/scales/ushshaq tetrachord 11-limit.scl new file mode 100644 index 0000000..1ffe729 --- /dev/null +++ b/scales/ushshaq tetrachord 11-limit.scl @@ -0,0 +1,8 @@ +! ushshaq tetrachord 11-limit.scl +! +Ushshaq tetrachord 81:88:96:108 + 3 +! + 88/81 + 32/27 + 4/3 diff --git a/scales/ushshaq tetrachord 19-limit.scl b/scales/ushshaq tetrachord 19-limit.scl new file mode 100644 index 0000000..427ae8c --- /dev/null +++ b/scales/ushshaq tetrachord 19-limit.scl @@ -0,0 +1,8 @@ +! ushshaq tetrachord 19-limit.scl +! +Ushshaq tetrachord 96:105:114:128 + 3 +! + 35/32 + 19/16 + 4/3 diff --git a/scales/ushshaq tetrachord 23-limit.scl b/scales/ushshaq tetrachord 23-limit.scl new file mode 100644 index 0000000..765439c --- /dev/null +++ b/scales/ushshaq tetrachord 23-limit.scl @@ -0,0 +1,8 @@ +! ushshaq tetrachord 23-limit.scl +! +Ushshaq tetrachord 21:23:25:28 + 3 +! + 23/21 + 25/21 + 4/3 diff --git a/scales/vaisvil_70.scl b/scales/vaisvil_70.scl new file mode 100644 index 0000000..f2eb825 --- /dev/null +++ b/scales/vaisvil_70.scl @@ -0,0 +1,75 @@ +! vaisvil_70.scl +! +Chris Vaisvil, disjunct 70 tones + 70 +! + 65/64 + 49/48 + 33/32 + 25/24 + 67/64 + 17/16 + 69/64 + 13/12 + 35/32 + 53/48 + 71/64 + 9/8 + 55/48 + 7/6 + 19/16 + 29/24 + 59/48 + 5/4 + 61/48 + 31/24 + 21/16 + 4/3 + 65/48 + 11/8 + 67/48 + 17/12 + 23/16 + 35/24 + 71/48 + 3/2 + 49/32 + 25/16 + 51/32 + 13/8 + 53/32 + 27/16 + 55/32 + 7/4 + 57/32 + 29/16 + 59/32 + 15/8 + 61/32 + 31/16 + 63/32 + 2/1 + 65/32 + 33/16 + 67/32 + 17/8 + 69/32 + 35/16 + 71/32 + 9/4 + 147/64 + 75/32 + 153/64 + 39/16 + 159/64 + 81/32 + 165/64 + 21/8 + 171/64 + 87/32 + 177/64 + 45/16 + 183/64 + 93/32 + 189/64 + 3/1 diff --git a/scales/vaisvil_goldsilver.scl b/scales/vaisvil_goldsilver.scl new file mode 100644 index 0000000..65a421f --- /dev/null +++ b/scales/vaisvil_goldsilver.scl @@ -0,0 +1,14 @@ +! vaisvil_goldsilver.scl +! +Chris Vaisvil, notes from golden and silver section scales combined, TL 09-05-2009 + 9 +! + 118.86332 + 235.77738 + 366.91254 + 510.73163 + 599.99564 + 718.86136 + 13/8 + 1076.29807 + 2/1 diff --git a/scales/vaisvil_halfdiamond91.scl b/scales/vaisvil_halfdiamond91.scl new file mode 100644 index 0000000..727ef56 --- /dev/null +++ b/scales/vaisvil_halfdiamond91.scl @@ -0,0 +1,96 @@ +! vaisvil_halfdiamond91.scl +! +Chris Vaisvil, 91 note half diamond + 91 +! + 27/25 + 25/23 + 23/21 + 21/19 + 19/17 + 17/15 + 31/27 + 15/13 + 27/23 + 13/11 + 25/21 + 23/19 + 11/9 + 21/17 + 31/25 + 19/15 + 9/7 + 17/13 + 25/19 + 31/23 + 23/17 + 15/11 + 7/5 + 27/19 + 13/9 + 19/13 + 25/17 + 31/21 + 23/15 + 17/11 + 11/7 + 27/17 + 21/13 + 31/19 + 5/3 + 19/11 + 23/13 + 9/5 + 31/17 + 13/7 + 17/9 + 21/11 + 25/13 + 31/15 + 27/13 + 23/11 + 19/9 + 15/7 + 11/5 + 25/11 + 7/3 + 31/13 + 17/7 + 27/11 + 23/9 + 13/5 + 19/7 + 25/9 + 31/11 + 3/1 + 23/7 + 17/5 + 31/9 + 25/7 + 11/3 + 19/5 + 27/7 + 21/5 + 13/3 + 31/7 + 23/5 + 5/1 + 27/5 + 17/3 + 31/5 + 19/3 + 7/1 + 23/3 + 25/3 + 9/1 + 31/3 + 11/1 + 13/1 + 15/1 + 17/1 + 19/1 + 21/1 + 23/1 + 25/1 + 27/1 + 31/1 diff --git a/scales/vaisvil_harm3-26.scl b/scales/vaisvil_harm3-26.scl new file mode 100644 index 0000000..323923b --- /dev/null +++ b/scales/vaisvil_harm3-26.scl @@ -0,0 +1,17 @@ +! vaisvil_harm3-26.scl +! +Chris Vaisvil, octave reduced harmonic scale 3-26 with 4 skipped + 12 +! + 25/24 + 13/12 + 7/6 + 5/4 + 17/12 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 23/12 + 2/1 diff --git a/scales/val-werck.scl b/scales/val-werck.scl new file mode 100644 index 0000000..2913d8c --- /dev/null +++ b/scales/val-werck.scl @@ -0,0 +1,16 @@ +! val-werck.scl +Vallotti-Young and Werckmeister III, 10 cents 5-limit lesfip scale + 12 +! +87.16412 +192.01793 +296.87174 +384.03586 +502.60070 +582.31031 +696.70413 +792.01793 +887.33173 +1001.72555 +1081.43517 +2/1 diff --git a/scales/valamute.scl b/scales/valamute.scl new file mode 100644 index 0000000..b77cd72 --- /dev/null +++ b/scales/valamute.scl @@ -0,0 +1,35 @@ +! valamute.scl +Mutant Valentine[31] 13-limit least squares optimum +31 +! +47.8285 +78.0488 +125.6858 +155.4471 +203.8093 +233.2741 +281.4630 +312.7138 +359.1733 +391.1125 +437.2653 +468.6727 +500.0802 +546.2329 +578.1721 +624.6316 +655.8824 +704.0713 +733.5361 +781.8983 +811.6596 +859.2966 +889.5169 +937.3454 +966.6831 +1015.4920 +1044.1791 +1093.1663 +1121.8534 +1170.6623 +2/1 diff --git a/scales/valenporc15.scl b/scales/valenporc15.scl new file mode 100644 index 0000000..4a3ba12 --- /dev/null +++ b/scales/valenporc15.scl @@ -0,0 +1,20 @@ +! valenporc15.scl +! +Valentine-porcupine circulating strictly proper 15-note lesfip scale, 11 limit diamond target, 13.8 to 15.5 cent tolerance. Can be tuned in 77-tET + 15 +! + 79.99698 + 158.13771 + 233.53897 + 314.10167 + 389.50293 + 467.64365 + 547.64064 + 623.18179 + 701.41713 + 780.49908 + 873.82032 + 967.14156 + 1046.22350 + 1124.45885 + 2/1 diff --git a/scales/valentine.scl b/scales/valentine.scl new file mode 100644 index 0000000..777ac57 --- /dev/null +++ b/scales/valentine.scl @@ -0,0 +1,17 @@ +! valentine.scl +! +Robert Valentine, tuning with primes 3 & 19, TL 7-2-2002 + 12 +! + 19/18 + 9/8 + 19/16 + 24/19 + 4/3 + 27/19 + 3/2 + 19/12 + 32/19 + 57/32 + 36/19 + 2/1 diff --git a/scales/valentine2.scl b/scales/valentine2.scl new file mode 100644 index 0000000..f2e433a --- /dev/null +++ b/scales/valentine2.scl @@ -0,0 +1,20 @@ +! valentine2.scl +! +Robert Valentine, two octave 31-tET subset for guitar, TL 10-5-2002 + 15 +! + 154.83871 + 309.67742 + 503.22581 + 658.06452 + 812.90323 + 1006.45161 + 1161.29032 + 1316.12903 + 1509.67742 + 1664.51613 + 1819.35484 + 1896.77419 + 2051.61290 + 2206.45161 + 4/1 diff --git a/scales/vallotti.scl b/scales/vallotti.scl new file mode 100644 index 0000000..cefb3fc --- /dev/null +++ b/scales/vallotti.scl @@ -0,0 +1,17 @@ +! vallotti.scl +! +Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754) + 12 +! + 94.13500 + 196.09000 + 298.04500 + 392.18000 + 501.95500 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1090.22500 + 2/1 diff --git a/scales/vallotti2.scl b/scales/vallotti2.scl new file mode 100644 index 0000000..b9ab45a --- /dev/null +++ b/scales/vallotti2.scl @@ -0,0 +1,17 @@ +! vallotti2.scl +! +Francesco Antonio Vallotti temperament, 1/6-comma + 12 +! + 95.76310 + 196.74124 + 299.67310 + 393.48248 + 501.62938 + 593.80810 + 698.37062 + 797.71810 + 895.11186 + 1001.62810 + 1091.85310 + 2/1 diff --git a/scales/vavoom.scl b/scales/vavoom.scl new file mode 100644 index 0000000..825f2ae --- /dev/null +++ b/scales/vavoom.scl @@ -0,0 +1,80 @@ +! vavoom.scl +! +Vavoom temperament, g=111.875426, 5-limit + 75 +! + 10.64332 + 30.62969 + 41.27300 + 61.25937 + 81.24574 + 91.88906 + 111.87543 + 122.51874 + 142.50511 + 153.14843 + 173.13480 + 193.12117 + 203.76448 + 223.75085 + 234.39417 + 254.38054 + 265.02386 + 285.01022 + 304.99659 + 6/5 + 335.62628 + 346.26960 + 366.25596 + 386.24233 + 396.88565 + 416.87202 + 427.51534 + 447.50170 + 458.14502 + 478.13139 + 498.11776 + 508.76108 + 528.74744 + 539.39076 + 559.37713 + 570.02045 + 590.00682 + 609.99318 + 620.63650 + 640.62287 + 651.26619 + 671.25256 + 681.89587 + 701.88224 + 721.86861 + 732.51193 + 752.49830 + 763.14161 + 783.12798 + 793.77130 + 813.75767 + 833.74404 + 844.38735 + 864.37372 + 875.01704 + 895.00341 + 905.64673 + 925.63309 + 945.61946 + 956.26278 + 976.24915 + 986.89247 + 1006.87883 + 1017.52215 + 1037.50852 + 1057.49489 + 1068.13821 + 1088.12457 + 1098.76789 + 1118.75426 + 1129.39758 + 1149.38395 + 1169.37031 + 1180.01363 + 2/1 diff --git a/scales/velde_9.scl b/scales/velde_9.scl new file mode 100644 index 0000000..7a475fe --- /dev/null +++ b/scales/velde_9.scl @@ -0,0 +1,14 @@ +! velde_9.scl +! +Marcel de Velde, TL 09-07-2010 + 9 +! + 13/12 + 7/6 + 11/9 + 4/3 + 13/9 + 14/9 + 7/4 + 11/6 + 2/1 diff --git a/scales/velde_ji.scl b/scales/velde_ji.scl new file mode 100644 index 0000000..f59cbcc --- /dev/null +++ b/scales/velde_ji.scl @@ -0,0 +1,17 @@ +! velde_ji.scl +! +Marcel de Velde, 12 tone JI scale (2011) + 12 +! + 19/18 + 9/8 + 19/16 + 5/4 + 4/3 + 45/32 + 3/2 + 19/12 + 27/16 + 16/9 + 15/8 + 2/1 diff --git a/scales/venkataramana.scl b/scales/venkataramana.scl new file mode 100644 index 0000000..5251149 --- /dev/null +++ b/scales/venkataramana.scl @@ -0,0 +1,38 @@ +! venkataramana.scl +! +Praveen Venkataramana, 7-limit diamond 1 3 5 7 9 15 21 35, TL 24-03-2009, 1/1=390 Hz + 33 +! + 36/35 + 21/20 + 16/15 + 15/14 + 35/32 + 10/9 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 4/3 + 48/35 + 7/5 + 10/7 + 35/24 + 3/2 + 32/21 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 16/9 + 9/5 + 64/35 + 28/15 + 15/8 + 40/21 + 35/18 + 2/1 diff --git a/scales/veroli-ord.scl b/scales/veroli-ord.scl new file mode 100644 index 0000000..8e21406 --- /dev/null +++ b/scales/veroli-ord.scl @@ -0,0 +1,17 @@ +! veroli-ord.scl +! +Temprament ordinaire after Veroli, W.Th. Meister, 1991, p. 126 + 12 +! + 80.93500 + 193.15686 + 288.27000 + 5/4 + 4/3 + 580.93500 + 696.57843 + 782.89000 + 889.73529 + 994.13500 + 1082.89214 + 2/1 diff --git a/scales/veroli.scl b/scales/veroli.scl new file mode 100644 index 0000000..95cc1fa --- /dev/null +++ b/scales/veroli.scl @@ -0,0 +1,17 @@ +! veroli.scl +! +Claudio di Veroli's well temperament (1978) + 12 +! + 98.09000 + 199.45000 + 299.18000 + 398.91000 + 500.27000 + 598.36000 + 699.73000 + 798.63000 + 899.18000 + 999.73000 + 1098.63000 + 2/1 diff --git a/scales/veroli1.scl b/scales/veroli1.scl new file mode 100644 index 0000000..e94ae8a --- /dev/null +++ b/scales/veroli1.scl @@ -0,0 +1,17 @@ +! veroli1.scl +! +Claudio di Veroli Bach temperament I (2009) + 12 +! + 96.09000 + 196.09000 + 300.00000 + 394.13500 + 501.95500 + 594.13500 + 698.04500 + 798.04500 + 896.09000 + 1001.95500 + 1094.13500 + 2/1 diff --git a/scales/veroli2.scl b/scales/veroli2.scl new file mode 100644 index 0000000..198dc4b --- /dev/null +++ b/scales/veroli2.scl @@ -0,0 +1,17 @@ +! veroli2.scl +! +Claudio di Veroli Bach temperament II (2009) + 12 +! + 96.09000 + 196.09000 + 300.00000 + 394.13500 + 501.95500 + 594.13500 + 698.04500 + 800.00000 + 896.09000 + 1001.95500 + 1094.13500 + 2/1 diff --git a/scales/vertex_chrom.scl b/scales/vertex_chrom.scl new file mode 100644 index 0000000..b504faa --- /dev/null +++ b/scales/vertex_chrom.scl @@ -0,0 +1,12 @@ +! vertex_chrom.scl +! +A vertex tetrachord from Chapter 5, 66.7 + 266.7 + 166.7 cents + 7 +! + 66.66667 + 333.33333 + 500.00000 + 700.00000 + 766.66667 + 933.33333 + 2/1 diff --git a/scales/vertex_chrom2.scl b/scales/vertex_chrom2.scl new file mode 100644 index 0000000..12d5145 --- /dev/null +++ b/scales/vertex_chrom2.scl @@ -0,0 +1,12 @@ +! vertex_chrom2.scl +! +A vertex tetrachord from Chapter 5, 83.3 + 283.3 + 133.3 cents + 7 +! + 83.33333 + 366.66667 + 500.00000 + 700.00000 + 783.33333 + 1066.66667 + 2/1 diff --git a/scales/vertex_chrom3.scl b/scales/vertex_chrom3.scl new file mode 100644 index 0000000..31a7e17 --- /dev/null +++ b/scales/vertex_chrom3.scl @@ -0,0 +1,12 @@ +! vertex_chrom3.scl +! +A vertex tetrachord from Chapter 5, 87.5 + 287.5 + 125 cents + 7 +! + 87.500 cents + 375.000 cents + 500.000 cents + 700.000 cents + 787.500 cents + 1075.000 cents + 2/1 diff --git a/scales/vertex_chrom4.scl b/scales/vertex_chrom4.scl new file mode 100644 index 0000000..abfa173 --- /dev/null +++ b/scales/vertex_chrom4.scl @@ -0,0 +1,12 @@ +! vertex_chrom4.scl +! +A vertex tetrachord from Chapter 5, 88.9 + 288.9 + 122.2 cents + 7 +! + 88.88889 + 377.77778 + 500.00000 + 700.00000 + 788.88889 + 1077.77778 + 2/1 diff --git a/scales/vertex_diat.scl b/scales/vertex_diat.scl new file mode 100644 index 0000000..6d1f4a1 --- /dev/null +++ b/scales/vertex_diat.scl @@ -0,0 +1,12 @@ +! vertex_diat.scl +! +A vertex tetrachord from Chapter 5, 233.3 + 133.3 + 133.3 cents + 7 +! + 233.33333 + 366.66667 + 500.00000 + 700.00000 + 933.33333 + 1066.6667 + 2/1 diff --git a/scales/vertex_diat10.scl b/scales/vertex_diat10.scl new file mode 100644 index 0000000..22bb274 --- /dev/null +++ b/scales/vertex_diat10.scl @@ -0,0 +1,12 @@ +! vertex_diat10.scl +! +A vertex tetrachord from Chapter 5, 212.5 + 162.5 + 125 cents + 7 +! + 212.500 cents + 375.000 cents + 500.000 cents + 700.000 cents + 912.500 cents + 1075.000 cents + 2/1 diff --git a/scales/vertex_diat11.scl b/scales/vertex_diat11.scl new file mode 100644 index 0000000..737c67e --- /dev/null +++ b/scales/vertex_diat11.scl @@ -0,0 +1,12 @@ +! VERTEX_DIAT11.scl +! +A vertex tetrachord from Chapter 5, 212.5 + 62.5 + 225 cents + 7 +! + 212.500 cents + 275.000 cents + 500.000 cents + 700.000 cents + 912.500 cents + 975.000 cents + 2/1 diff --git a/scales/vertex_diat12.scl b/scales/vertex_diat12.scl new file mode 100644 index 0000000..64f6e99 --- /dev/null +++ b/scales/vertex_diat12.scl @@ -0,0 +1,12 @@ +! vertex_diat12.scl +! +A vertex tetrachord from Chapter 5, 200 + 125 + 175 cents + 7 +! + 200.000 cents + 325.000 cents + 500.000 cents + 700.000 cents + 900.000 cents + 1025.000 cents + 2/1 diff --git a/scales/vertex_diat2.scl b/scales/vertex_diat2.scl new file mode 100644 index 0000000..b25170a --- /dev/null +++ b/scales/vertex_diat2.scl @@ -0,0 +1,12 @@ +! vertex_diat2.scl +! +A vertex tetrachord from Chapter 5, 233.3 + 166.7 + 100 cents + 7 +! + 233.33333 + 400.00000 + 500.00000 + 700.00000 + 933.33333 + 1100.00000 + 2/1 diff --git a/scales/vertex_diat4.scl b/scales/vertex_diat4.scl new file mode 100644 index 0000000..7116815 --- /dev/null +++ b/scales/vertex_diat4.scl @@ -0,0 +1,12 @@ +! vertex_diat4.scl +! +A vertex tetrachord from Chapter 5, 225 + 175 + 100 cents + 7 +! + 225.000 cents + 400.000 cents + 500.000 cents + 700.000 cents + 925.000 cents + 1100.000 cents + 2/1 diff --git a/scales/vertex_diat5.scl b/scales/vertex_diat5.scl new file mode 100644 index 0000000..22d81b0 --- /dev/null +++ b/scales/vertex_diat5.scl @@ -0,0 +1,12 @@ +! vertex_diat5.scl +! +A vertex tetrachord from Chapter 5, 87.5 + 237.5 + 175 cents + 7 +! + 87.500 cents + 325.000 cents + 500.000 cents + 700.000 cents + 787.500 cents + 1025.000 cents + 2/1 diff --git a/scales/vertex_diat7.scl b/scales/vertex_diat7.scl new file mode 100644 index 0000000..30f2517 --- /dev/null +++ b/scales/vertex_diat7.scl @@ -0,0 +1,12 @@ +! vertex_diat7.scl +! +A vertex tetrachord from Chapter 5, 200 + 75 + 225 cents + 7 +! + 200.000 cents + 275.000 cents + 500.000 cents + 700.000 cents + 900.000 cents + 975.000 cents + 2/1 diff --git a/scales/vertex_diat8.scl b/scales/vertex_diat8.scl new file mode 100644 index 0000000..32c9791 --- /dev/null +++ b/scales/vertex_diat8.scl @@ -0,0 +1,12 @@ +! vertex_diat8.scl +! +A vertex tetrachord from Chapter 5, 100 + 175 + 225 cents + 7 +! + 100.000 cents + 275.000 cents + 500.000 cents + 700.000 cents + 800.000 cents + 975.000 cents + 2/1 diff --git a/scales/vertex_diat9.scl b/scales/vertex_diat9.scl new file mode 100644 index 0000000..92587eb --- /dev/null +++ b/scales/vertex_diat9.scl @@ -0,0 +1,12 @@ +! vertex_diat9.scl +! +A vertex tetrachord from Chapter 5, 212.5 + 137.5 + 150 cents + 7 +! + 212.500 cents + 350.000 cents + 500.000 cents + 700.000 cents + 912.500 cents + 1050.000 cents + 2/1 diff --git a/scales/vertex_sdiat.scl b/scales/vertex_sdiat.scl new file mode 100644 index 0000000..5812f17 --- /dev/null +++ b/scales/vertex_sdiat.scl @@ -0,0 +1,12 @@ +! vertex_sdiat.scl +! +A vertex tetrachord from Chapter 5, 87.5 + 187.5 + 225 cents + 7 +! + 87.500 cents + 275.000 cents + 500.000 cents + 700.000 cents + 787.500 cents + 975.000 cents + 2/1 diff --git a/scales/vertex_sdiat2.scl b/scales/vertex_sdiat2.scl new file mode 100644 index 0000000..b8bf2f2 --- /dev/null +++ b/scales/vertex_sdiat2.scl @@ -0,0 +1,12 @@ +! vertex_sdiat2.scl +! +A vertex tetrachord from Chapter 5, 75 + 175 + 250 cents + 7 +! + 75.000 cents + 250.000 cents + 500.000 cents + 700.000 cents + 775.000 cents + 950.000 cents + 2/1 diff --git a/scales/vertex_sdiat3.scl b/scales/vertex_sdiat3.scl new file mode 100644 index 0000000..c58eba2 --- /dev/null +++ b/scales/vertex_sdiat3.scl @@ -0,0 +1,12 @@ +! vertex_sdiat3.scl +! +A vertex tetrachord from Chapter 5, 25 + 225 + 250 cents + 7 +! + 25.000 cents + 250.000 cents + 500.000 cents + 700.000 cents + 725.000 cents + 950.000 cents + 2/1 diff --git a/scales/vertex_sdiat4.scl b/scales/vertex_sdiat4.scl new file mode 100644 index 0000000..a22ba66 --- /dev/null +++ b/scales/vertex_sdiat4.scl @@ -0,0 +1,12 @@ +! vertex_sdiat4.scl +! +A vertex tetrachord from Chapter 5, 66.7 + 183.3 + 250 cents + 7 +! + 66.667 cents + 250.000 cents + 500.000 cents + 700.000 cents + 766.667 cents + 950.000 cents + 2/1 diff --git a/scales/vertex_sdiat5.scl b/scales/vertex_sdiat5.scl new file mode 100644 index 0000000..16ecb1d --- /dev/null +++ b/scales/vertex_sdiat5.scl @@ -0,0 +1,12 @@ +! vertex_sdiat5.scl +! +A vertex tetrachord from Chapter 5, 233.33 + 16.67 + 250 cents + 7 +! + 233.333 cents + 250.000 cents + 500.000 cents + 700.000 cents + 933.333 cents + 950.000 cents + 2/1 diff --git a/scales/vicentino1.scl b/scales/vicentino1.scl new file mode 100644 index 0000000..3414c8f --- /dev/null +++ b/scales/vicentino1.scl @@ -0,0 +1,41 @@ +! vicentino1.scl +! +Usual Archicembalo tuning, 31-tET plus D,E,G,A,B a 10th tone higher + 36 +! + 38.70968 + 77.41935 + 116.12903 + 154.83871 + 193.54839 + 212.90323 + 232.25806 + 270.96774 + 309.67742 + 348.38710 + 387.09677 + 406.45161 + 425.80645 + 464.51613 + 503.22581 + 541.93548 + 580.64516 + 619.35484 + 658.06452 + 696.77419 + 716.12903 + 735.48387 + 774.19355 + 812.90323 + 851.61290 + 890.32258 + 909.67742 + 929.03226 + 967.74194 + 1006.45161 + 1045.16129 + 1083.87097 + 1103.22581 + 1122.58065 + 1161.29032 + 2/1 diff --git a/scales/vicentino2.scl b/scales/vicentino2.scl new file mode 100644 index 0000000..5484ec0 --- /dev/null +++ b/scales/vicentino2.scl @@ -0,0 +1,41 @@ +! vicentino2.scl +! +Alternative Archicembalo tuning, lower 3 rows the same upper 3 rows 3/2 higher + 36 +! + 5.18081 + 77.41935 + 82.60016 + 116.12903 + 121.30984 + 193.54839 + 198.72919 + 270.96774 + 276.14855 + 309.67742 + 314.85823 + 387.09677 + 392.27758 + 464.51613 + 469.69694 + 503.22581 + 508.40661 + 580.64516 + 585.82597 + 619.35484 + 696.77419 + 3/2 + 774.19355 + 779.37436 + 812.90323 + 818.08403 + 890.32258 + 895.50339 + 967.74194 + 972.92274 + 1006.45161 + 1011.63242 + 1083.87097 + 1089.05178 + 1161.29032 + 2/1 diff --git a/scales/vicentino2q217.scl b/scales/vicentino2q217.scl new file mode 100644 index 0000000..4dbc3e2 --- /dev/null +++ b/scales/vicentino2q217.scl @@ -0,0 +1,41 @@ +! vicentino2q217.scl +! +Vicentino's second tuning, 217-tET version + 36 +! + 5.52995 + 77.41935 + 82.94931 + 116.12903 + 121.65899 + 193.54839 + 199.07834 + 270.96774 + 276.49770 + 309.67742 + 315.20737 + 387.09677 + 392.62673 + 464.51613 + 470.04608 + 503.22581 + 508.75576 + 580.64516 + 586.17512 + 619.35484 + 696.77419 + 702.30415 + 774.19355 + 779.72350 + 812.90323 + 818.43318 + 890.32258 + 895.85253 + 967.74194 + 973.27189 + 1006.45161 + 1011.98157 + 1083.87097 + 1089.40092 + 1161.29032 + 2/1 diff --git a/scales/vicentino36.scl b/scales/vicentino36.scl new file mode 100644 index 0000000..91a2a12 --- /dev/null +++ b/scales/vicentino36.scl @@ -0,0 +1,41 @@ +! vicentino36.scl +! +Vicentino's second tuning of 1555 + 36 +! + 5.37657 + 76.04900 + 81.42557 + 117.10786 + 122.48443 + 193.15686 + 198.53343 + 269.20586 + 75/64 + 310.26472 + 6/5 + 5/4 + 391.69029 + 462.36271 + 503.42157 + 508.79814 + 579.47057 + 584.84714 + 620.52943 + 625.90600 + 696.57843 + 3/2 + 25/16 + 778.00400 + 8/5 + 819.06286 + 889.73528 + 895.11186 + 965.78429 + 971.16086 + 1006.84314 + 1012.21971 + 1082.89214 + 15/8 + 125/64 + 2/1 diff --git a/scales/vicentino38.scl b/scales/vicentino38.scl new file mode 100644 index 0000000..770ebe1 --- /dev/null +++ b/scales/vicentino38.scl @@ -0,0 +1,43 @@ +! vicentino38.scl +! +Vicentino's second archicembalo tuning, 1/4-comma (Gb-B#, Db'-F##') + 38 +! + 5.37657 + 76.04900 + 81.42557 + 117.10786 + 122.48443 + 193.15686 + 198.53343 + 269.20586 + 75/64 + 310.26471 + 6/5 + 5/4 + 391.69029 + 462.36271 + 467.73928 + 503.42157 + 508.79814 + 579.47057 + 584.84714 + 620.52943 + 660.89614 + 696.57843 + 3/2 + 25/16 + 778.00400 + 8/5 + 819.06286 + 889.73529 + 895.11186 + 965.78428 + 971.16086 + 1006.84314 + 1012.21971 + 1082.89214 + 15/8 + 1158.94114 + 1164.31771 + 2/1 diff --git a/scales/victor_eb.scl b/scales/victor_eb.scl new file mode 100644 index 0000000..4071201 --- /dev/null +++ b/scales/victor_eb.scl @@ -0,0 +1,17 @@ +! victor_eb.scl +! +Equal beating Victorian piano temperament, interpr. by Bill Bremmer (improved) + 12 +! + 95.43690 + 197.05898 + 299.34691 + 394.21891 + 4/3 + 593.48190 + 699.31189 + 797.39190 + 896.20301 + 998.56425 + 1096.17391 + 2/1 diff --git a/scales/victorian.scl b/scales/victorian.scl new file mode 100644 index 0000000..5462a85 --- /dev/null +++ b/scales/victorian.scl @@ -0,0 +1,17 @@ +! victorian.scl +! +Form of Victorian temperament (1885) + 12 +! + 96.00000 + 198.00000 + 298.00000 + 393.00000 + 500.00000 + 595.00000 + 700.00000 + 797.00000 + 895.00000 + 999.00000 + 1094.00000 + 2/1 diff --git a/scales/vines_ovovo10eb5w6w7_0_D.scl b/scales/vines_ovovo10eb5w6w7_0_D.scl new file mode 100644 index 0000000..3864233 --- /dev/null +++ b/scales/vines_ovovo10eb5w6w7_0_D.scl @@ -0,0 +1,15 @@ +! vines_ovovo10eb5w6w7_0_D.scl +! +Mark Vines, 4:5:6:7 equal beating in 1 of 10 keys, an Eronyme algorithmic temperament +10 +! + 137.12065 + 238.67819 + 375.79885 + 480.66090 + 617.78156 + 719.33910 + 856.45975 + 961.32181 + 1098.44246 + 2/1 diff --git a/scales/vines_ovovo22eb9w14w15_00_D.scl b/scales/vines_ovovo22eb9w14w15_00_D.scl new file mode 100644 index 0000000..f1b0bdc --- /dev/null +++ b/scales/vines_ovovo22eb9w14w15_00_D.scl @@ -0,0 +1,27 @@ +! vines_ovovo22eb9w14w15_00_D.scl +! +Mark Vines ovovo temperament, 8:9:14:15 equal beating in 3 of 22 keys + 22 +! + 67.11177 + 127.50020 + 171.67242 + 215.84463 + 276.23306 + 343.34483 + 387.51704 + 431.68926 + 492.07769 + 559.18946 + 619.57789 + 663.75010 + 707.92232 + 768.31074 + 835.42252 + 879.59473 + 923.76694 + 984.15537 + 1051.26715 + 1095.43936 + 1155.82779 + 2/1 diff --git a/scales/vines_ovovo27eb5w6w7_00_D.scl b/scales/vines_ovovo27eb5w6w7_00_D.scl new file mode 100644 index 0000000..261d9b4 --- /dev/null +++ b/scales/vines_ovovo27eb5w6w7_00_D.scl @@ -0,0 +1,32 @@ +! vines_ovovo27eb5w6w7_00_D.scl +! +4:5:6:7 equal beating in 12 of 27 keys, slendro temperament from chain links inverting the smallest Pisot-Vijayaraghavan number + 27 +! + 34.11139 + 93.76621 + 132.58924 + 166.70063 + 226.35544 + 260.46683 + 320.12165 + 354.23304 + 393.05607 + 452.71089 + 486.82228 + 546.47709 + 580.58848 + 619.41152 + 653.52291 + 713.17772 + 747.28911 + 806.94393 + 841.05531 + 879.87835 + 939.53317 + 973.64456 + 1033.29937 + 1067.41076 + 1106.23380 + 1165.88861 + 2/1 diff --git a/scales/vitale1.scl b/scales/vitale1.scl new file mode 100644 index 0000000..2c328a5 --- /dev/null +++ b/scales/vitale1.scl @@ -0,0 +1,21 @@ +! vitale1.scl +! +Rami Vitale's 7-limit just scale + 16 +! + 15/14 + 9/8 + 7/6 + 5/4 + 9/7 + 21/16 + 4/3 + 10/7 + 3/2 + 45/28 + 27/16 + 7/4 + 15/8 + 27/14 + 63/32 + 2/1 diff --git a/scales/vitale2.scl b/scales/vitale2.scl new file mode 100644 index 0000000..809cfaa --- /dev/null +++ b/scales/vitale2.scl @@ -0,0 +1,21 @@ +! vitale2.scl +! +Rami Vitale, inverse mode of vitale1.scl + 16 +! + 21/20 + 9/8 + 8/7 + 7/6 + 6/5 + 9/7 + 4/3 + 7/5 + 3/2 + 63/40 + 27/16 + 12/7 + 7/4 + 9/5 + 27/14 + 2/1 diff --git a/scales/vitale3.scl b/scales/vitale3.scl new file mode 100644 index 0000000..058db34 --- /dev/null +++ b/scales/vitale3.scl @@ -0,0 +1,28 @@ +! vitale3.scl +! +Superset of several Byzantine scales by Rami Vitale, TL 29-Aug-2001 + 23 +! + 21/20 + 15/14 + 9/8 + 8/7 + 7/6 + 6/5 + 5/4 + 9/7 + 21/16 + 4/3 + 7/5 + 10/7 + 3/2 + 63/40 + 45/28 + 27/16 + 12/7 + 7/4 + 9/5 + 15/8 + 27/14 + 63/32 + 2/1 diff --git a/scales/vogel_21.scl b/scales/vogel_21.scl new file mode 100644 index 0000000..177801b --- /dev/null +++ b/scales/vogel_21.scl @@ -0,0 +1,26 @@ +! vogel_21.scl +! +Martin Vogel's 21-tone Archytas system, see Divisions of the tetrachord + 21 +! + 28/27 + 16/15 + 9/8 + 7/6 + 32/27 + 6/5 + 896/729 + 512/405 + 4/3 + 112/81 + 64/45 + 3/2 + 14/9 + 128/81 + 8/5 + 3584/2187 + 2048/1215 + 16/9 + 448/243 + 256/135 + 2/1 diff --git a/scales/vogelh_b.scl b/scales/vogelh_b.scl new file mode 100644 index 0000000..e903f4a --- /dev/null +++ b/scales/vogelh_b.scl @@ -0,0 +1,17 @@ +! vogelh_b.scl +! +Harald Vogel's temperament, van Eeken organ in Bunschoten, Immanuelkerk, 1992 + 12 +! + 94.91700 + 194.52600 + 32/27 + 389.05200 + 502.73700 + 1024/729 + 697.26300 + 128/81 + 891.78900 + 16/9 + 4096/2187 + 2/1 diff --git a/scales/vogelh_fisk.scl b/scales/vogelh_fisk.scl new file mode 100644 index 0000000..3fdc2b8 --- /dev/null +++ b/scales/vogelh_fisk.scl @@ -0,0 +1,17 @@ +! vogelh_fisk.scl +! +Modified meantone tuning of Fisk organ in Memorial Church at Stanford + 12 +! + 80.12416 + 194.52600 + 309.57950 + 389.05200 + 502.73700 + 583.54541 + 697.26300 + 776.70291 + 891.78900 + 1006.15825 + 4096/2187 + 2/1 diff --git a/scales/vogelh_hamburg.scl b/scales/vogelh_hamburg.scl new file mode 100644 index 0000000..5486757 --- /dev/null +++ b/scales/vogelh_hamburg.scl @@ -0,0 +1,17 @@ +! vogelh_hamburg.scl +! +Harald Vogel's temperament for the Schnitger organ in St. Jakobi, Hamburg (1993) + 12 +! + 87.87746 + 195.30749 + 1215/1024 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 789.83246 + 892.96123 + 1000.39126 + 15/8 + 2/1 diff --git a/scales/vogelh_hmean.scl b/scales/vogelh_hmean.scl new file mode 100644 index 0000000..0bc06f5 --- /dev/null +++ b/scales/vogelh_hmean.scl @@ -0,0 +1,17 @@ +! vogelh_hmean.scl +! +Harald Vogel hybrid meantone (1984) + 12 +! + 95.76416 + 200.78200 + 309.57950 + 401.56400 + 502.73700 + 599.18542 + 700.39100 + 792.34291 + 901.17300 + 1006.15825 + 1101.95500 + 2/1 diff --git a/scales/volans.scl b/scales/volans.scl new file mode 100644 index 0000000..9b0ae7d --- /dev/null +++ b/scales/volans.scl @@ -0,0 +1,12 @@ +! volans.scl +! +African scale according to Kevin Volans 1/1=G + 7 +! + 171.000 + 360.000 + 514.000 + 685.000 + 860.000 + 1060.000 + 2/1 diff --git a/scales/vong.scl b/scales/vong.scl new file mode 100644 index 0000000..a1fa2bb --- /dev/null +++ b/scales/vong.scl @@ -0,0 +1,12 @@ +! vong.scl +! +Vong Co Dan Tranh scale, Vietnam + 7 +! + 11/10 + 36/29 + 27/20 + 3/2 + 33/20 + 51/28 + 2/1 diff --git a/scales/vries19-72.scl b/scales/vries19-72.scl new file mode 100644 index 0000000..9ecfe6f --- /dev/null +++ b/scales/vries19-72.scl @@ -0,0 +1,23 @@ +! vries19-72.scl +! +Leo de Vries 19/72 Through-Transposing-Tonality 18 tone scale + 18 +! + 66.66667 + 133.33333 + 200.00000 + 266.66667 + 316.66667 + 383.33333 + 450.00000 + 516.66667 + 583.33333 + 633.33333 + 700.00000 + 766.66667 + 833.33333 + 950.00000 + 1016.66667 + 1083.33333 + 1150.00000 + 2/1 diff --git a/scales/vries35-72.scl b/scales/vries35-72.scl new file mode 100644 index 0000000..24e8c4d --- /dev/null +++ b/scales/vries35-72.scl @@ -0,0 +1,22 @@ +! vries35-72.scl +! +Leo de Vries 35/72 Through-Transposing-Tonality 17 tone scale + 17 +! + 350.00000 + 383.33333 + 416.66667 + 450.00000 + 483.33333 + 516.66667 + 550.00000 + 583.33333 + 933.33333 + 966.66667 + 1000.00000 + 1033.33333 + 1066.66667 + 1100.00000 + 1133.33333 + 1166.66667 + 2/1 diff --git a/scales/vries5-72.scl b/scales/vries5-72.scl new file mode 100644 index 0000000..d1289a5 --- /dev/null +++ b/scales/vries5-72.scl @@ -0,0 +1,23 @@ +! vries5-72.scl +! +Leo de Vries 5/72 Through-Transposing-Tonality 18 tone scale + 18 +! + 50.00000 + 83.33333 + 133.33333 + 166.66667 + 216.66667 + 250.00000 + 333.33333 + 416.66667 + 500.00000 + 583.33333 + 666.66667 + 750.00000 + 833.33333 + 916.66667 + 1000.00000 + 1083.33333 + 1166.66667 + 2/1 diff --git a/scales/vries6-31.scl b/scales/vries6-31.scl new file mode 100644 index 0000000..366eed5 --- /dev/null +++ b/scales/vries6-31.scl @@ -0,0 +1,16 @@ +! vries6-31.scl +! +Leo de Vries 6/31 TTT used in "For 31-tone organ" (1995) + 11 +! + 193.54839 + 232.25806 + 425.80645 + 464.51613 + 658.06452 + 696.77419 + 890.32258 + 929.03226 + 1122.58065 + 1161.29032 + 2/1 diff --git a/scales/walker_21.scl b/scales/walker_21.scl new file mode 100644 index 0000000..dd5eaa4 --- /dev/null +++ b/scales/walker_21.scl @@ -0,0 +1,26 @@ +! walker_21.scl +! +Douglas Walker, for Out of the fathomless dark/into the limitless light (1977) + 21 +! + 16/15 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 5/4 + 9/7 + 4/3 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/walkerr_11.scl b/scales/walkerr_11.scl new file mode 100644 index 0000000..ab91da4 --- /dev/null +++ b/scales/walkerr_11.scl @@ -0,0 +1,16 @@ +! walkerr_11.scl +! +Robert Walker, "Seven to Pi" scale, TL 09-07-2002 + 11 +! + 131072/117649 + 8/7 + 1048576/823543 + 64/49 + 8388608/5764801 + 512/343 + 67108864/40353607 + 1067.61140 + 536870912/282475249 + 32768/16807 + 2/1 diff --git a/scales/wang-pho.scl b/scales/wang-pho.scl new file mode 100644 index 0000000..37e4338 --- /dev/null +++ b/scales/wang-pho.scl @@ -0,0 +1,17 @@ +! wang-pho.scl +! +Wang Pho, Pythagorean-type Monochord (10th cent.) + 12 +! + 225/211 + 9/8 + 900/751 + 900/713 + 225/167 + 300/211 + 3/2 + 900/563 + 150/89 + 300/167 + 36/19 + 2/1 diff --git a/scales/wauchope.scl b/scales/wauchope.scl new file mode 100644 index 0000000..ba18884 --- /dev/null +++ b/scales/wauchope.scl @@ -0,0 +1,13 @@ +! wauchope.scl +! +Ken Wauchope, symmetrical 7-limit whole-half step scale + 8 +! + 21/20 + 7/6 + 5/4 + 7/5 + 3/2 + 5/3 + 7/4 + 2/1 diff --git a/scales/wegscheider.scl b/scales/wegscheider.scl new file mode 100644 index 0000000..0cfa247 --- /dev/null +++ b/scales/wegscheider.scl @@ -0,0 +1,17 @@ +! wegscheider.scl +! +Kristian Wegscheider, Bach-temperament after "H.C. Snerha" (2003). A=416 Hz + 12 +! + 92.03963 + 192.81412 + 296.22200 + 388.40098 + 500.13200 + 590.08463 + 697.30804 + 793.99463 + 890.61248 + 998.17700 + 1088.12963 + 2/1 diff --git a/scales/wegscheider_1a.scl b/scales/wegscheider_1a.scl new file mode 100644 index 0000000..a8fa9a1 --- /dev/null +++ b/scales/wegscheider_1a.scl @@ -0,0 +1,17 @@ +! wegscheider_1a.scl +! +Kristian Wegscheider, temperament 1A, equal beating with two pure fifths, Tuning Methods in Organbuilding + 12 +! + 97.33360 + 198.65291 + 298.26375 + 397.87650 + 500.40549 + 597.61013 + 698.80266 + 796.30875 + 897.79759 + 1000.21875 + 1097.32688 + 2/1 diff --git a/scales/weingarten.scl b/scales/weingarten.scl new file mode 100644 index 0000000..6990c9e --- /dev/null +++ b/scales/weingarten.scl @@ -0,0 +1,17 @@ +! weingarten.scl +! +Gabler organ in Weingarten (1750). 1/11-(synt.+Pyth. comma) meantone + 12 +! + 85.07009 + 195.73431 + 306.39853 + 391.46862 + 502.13284 + 587.20293 + 697.86716 + 782.93724 + 893.60147 + 1004.26569 + 1089.33578 + 2/1 diff --git a/scales/weingarten2.scl b/scales/weingarten2.scl new file mode 100644 index 0000000..a20b78e --- /dev/null +++ b/scales/weingarten2.scl @@ -0,0 +1,17 @@ +! weingarten2.scl +! +Temperament of Gabler organ in Weingarten after restauration (1983) + 12 +! + 95.11250 + 196.09000 + 301.46625 + 394.13500 + 499.02250 + 591.20250 + 698.04500 + 798.04500 + 895.11250 + 1001.46625 + 1091.20250 + 2/1 diff --git a/scales/weiss1.scl b/scales/weiss1.scl new file mode 100644 index 0000000..eb86036 --- /dev/null +++ b/scales/weiss1.scl @@ -0,0 +1,110 @@ +! weiss1.scl +! +J.J. Weiss, system 1 qanun tuning (1990), Stefan Pohlit thesis, 2011 + 105 +! + 81/80 + 49/48 + 1053/1024 + 729/704 + 2673/2560 + 256/243 + 135/128 + 16/15 + 2187/2048 + 784/729 + 13/12 + 12/11 + 11/10 + 10/9 + 9/8 + 729/640 + 147/128 + 9477/8192 + 6561/5632 + 24057/20480 + 32/27 + 1215/1024 + 6/5 + 19683/16367 + 98/81 + 39/32 + 27/22 + 99/80 + 8192/6561 + 5/4 + 512/405 + 81/64 + 25088/19683 + 6561/5120 + 104/81 + 1323/1024 + 128/99 + 85293/65536 + 176/135 + 59049/45056 + 320/243 + 216513/163840 + 4/3 + 10935/8192 + 27/20 + 177147/131072 + 49/36 + 351/256 + 243/176 + 891/640 + 1024/729 + 45/32 + 64/45 + 729/512 + 3136/2187 + 13/9 + 16/11 + 22/15 + 40/27 + 3/2 + 243/160 + 49/32 + 3159/2048 + 2187/1408 + 8019/5120 + 128/81 + 405/256 + 8/5 + 6561/4096 + 392/243 + 13/8 + 18/11 + 33/20 + 5/3 + 27/16 + 2187/1280 + 441/256 + 28431/16384 + 19683/11284 + 72171/40960 + 16/9 + 3645/2048 + 9/5 + 59049/32768 + 49/27 + 117/64 + 81/44 + 297/160 + 4096/2187 + 15/8 + 256/135 + 243/128 + 5120/2673 + 19683/10240 + 52/27 + 3969/2048 + 64/33 + 6561/3361 + 88/45 + 177147/90112 + 160/81 + 649539/327680 + 2/1 + 32805/16384 + 531441/262144 diff --git a/scales/weiss2.scl b/scales/weiss2.scl new file mode 100644 index 0000000..9dd83c0 --- /dev/null +++ b/scales/weiss2.scl @@ -0,0 +1,110 @@ +! weiss2.scl +! +J.J. Weiss, system 2 qanun tuning (2007), Stefan Pohlit thesis, 2011 + 105 +! + 81/80 + 1701/1664 + 33/32 + 27/26 + 243/232 + 256/243 + 135/128 + 16/15 + 2187/2048 + 14/13 + 88/81 + 128/117 + 119/108 + 10/9 + 9/8 + 729/640 + 15309/13312 + 297/256 + 243/208 + 9639/8192 + 32/27 + 1215/1024 + 6/5 + 19683/16367 + 63/52 + 11/9 + 16/13 + 119/96 + 8192/6561 + 5/4 + 512/405 + 81/64 + 448/351 + 6561/5120 + 2816/2187 + 137781/106496 + 4096/3159 + 2673/2048 + 952/729 + 2187/1664 + 320/243 + 86751/65536 + 4/3 + 10935/8192 + 27/20 + 177147/131072 + 567/416 + 11/8 + 18/13 + 357/256 + 1024/729 + 45/32 + 64/45 + 729/512 + 56/39 + 352/243 + 512/351 + 119/81 + 40/27 + 3/2 + 243/160 + 5103/3328 + 99/64 + 81/52 + 3213/2048 + 128/81 + 405/256 + 8/5 + 6561/4096 + 21/13 + 44/27 + 64/39 + 119/72 + 5/3 + 27/16 + 2187/1280 + 45927/26624 + 891/512 + 729/416 + 28917/16384 + 16/9 + 3645/2048 + 9/5 + 59049/32768 + 189/104 + 11/6 + 24/13 + 119/64 + 4096/2187 + 15/8 + 256/135 + 243/128 + 224/117 + 19683/10240 + 1408/729 + 413343/212992 + 2048/1053 + 8019/4096 + 476/243 + 6561/3328 + 160/81 + 260253/131072 + 2/1 + 32805/16384 + 531441/262144 diff --git a/scales/weiss_mandal.scl b/scales/weiss_mandal.scl new file mode 100644 index 0000000..7b53df4 --- /dev/null +++ b/scales/weiss_mandal.scl @@ -0,0 +1,77 @@ +! weiss_mandal.scl +! +J.J. Weiss, tempered Mandal Set, tuning for Turkish qanun based on 18/17, Stefan Pohlit thesis, 2011 + 72 +! + 16.00000 + 32.00000 + 49.00000 + 66.00000 + 83.00000 + 100.00000 + 116.00000 + 132.00000 + 149.00000 + 166.00000 + 183.00000 + 200.00000 + 216.00000 + 232.00000 + 249.00000 + 266.00000 + 283.00000 + 300.00000 + 316.00000 + 332.00000 + 349.00000 + 366.00000 + 383.00000 + 400.00000 + 416.00000 + 432.00000 + 449.00000 + 466.00000 + 483.00000 + 500.00000 + 516.00000 + 532.00000 + 549.00000 + 566.00000 + 583.00000 + 600.00000 + 616.00000 + 632.00000 + 649.00000 + 666.00000 + 683.00000 + 700.00000 + 716.00000 + 732.00000 + 749.00000 + 766.00000 + 783.00000 + 800.00000 + 816.00000 + 832.00000 + 849.00000 + 866.00000 + 883.00000 + 900.00000 + 916.00000 + 932.00000 + 949.00000 + 966.00000 + 983.00000 + 1000.00000 + 1016.00000 + 1032.00000 + 1049.00000 + 1066.00000 + 1083.00000 + 1100.00000 + 1116.00000 + 1132.00000 + 1149.00000 + 1166.00000 + 1183.00000 + 2/1 diff --git a/scales/wellfip17.scl b/scales/wellfip17.scl new file mode 100644 index 0000000..97b3129 --- /dev/null +++ b/scales/wellfip17.scl @@ -0,0 +1,23 @@ +! wellfip17.scl +! +17-note lesfip scale, 11-limit diamond target, 8.6 to 10.8 cents tolerance +! strictly proper scale, approximately 32233223223322322 in 41-tET, two ~32/21 wolf fifths + 17 +! + 88.53133 + 147.91505 + 205.23945 + 292.78417 + 381.10837 + 438.83496 + 497.46008 + 586.04341 + 644.66854 + 702.39512 + 790.71932 + 878.26405 + 935.58845 + 994.97216 + 1083.50349 + 1141.75175 + 2/1 diff --git a/scales/wendell1.scl b/scales/wendell1.scl new file mode 100644 index 0000000..9725e81 --- /dev/null +++ b/scales/wendell1.scl @@ -0,0 +1,17 @@ +! wendell1.scl +! +Robert Wendell's Natural Synchronous well-temperament (2003) + 12 +! + 94.16800 + 198.17100 + 298.07800 + 393.68000 + 4/3 + 597.59000 + 699.49200 + 796.12300 + 895.75700 + 1000.03300 + 1095.63500 + 2/1 diff --git a/scales/wendell1r.scl b/scales/wendell1r.scl new file mode 100644 index 0000000..3e2a74a --- /dev/null +++ b/scales/wendell1r.scl @@ -0,0 +1,17 @@ +! wendell1r.scl +! +Rational version of wendell1.scl by Gene Ward Smith + 12 +! + 24000/22729 + 76460/68187 + 27000/22729 + 85600/68187 + 4/3 + 32100/22729 + 102140/68187 + 36000/22729 + 114400/68187 + 40500/22729 + 42800/22729 + 2/1 diff --git a/scales/wendell2.scl b/scales/wendell2.scl new file mode 100644 index 0000000..5aa850b --- /dev/null +++ b/scales/wendell2.scl @@ -0,0 +1,17 @@ +! wendell2.scl +! +Robert Wendell's Very Mild Synchronous well-temperament (2003) + 12 +! + 94.93100 + 198.79700 + 298.84100 + 394.11360 + 498.44500 + 598.02400 + 700.05800 + 796.88600 + 895.75900 + 1000.79600 + 1096.06900 + 2/1 diff --git a/scales/wendell2p.scl b/scales/wendell2p.scl new file mode 100644 index 0000000..80617ee --- /dev/null +++ b/scales/wendell2p.scl @@ -0,0 +1,17 @@ +! wendell2p.scl +! +1/5P version of wendell2.scl, Op de Coul + 12 +! + 94.91700 + 199.21800 + 298.82700 + 393.74400 + 4/3 + 597.65400 + 3/2 + 796.87200 + 896.48100 + 1000.78200 + 1095.69900 + 2/1 diff --git a/scales/wendell3.scl b/scales/wendell3.scl new file mode 100644 index 0000000..4f2e097 --- /dev/null +++ b/scales/wendell3.scl @@ -0,0 +1,17 @@ +! wendell3.scl +! +Robert Wendell Modern Well (2002) + 12 +! + 96.07834 + 197.06000 + 298.04167 + 394.12000 + 500.00500 + 595.09667 + 699.01500 + 797.06000 + 895.10500 + 999.02333 + 1094.11500 + 2/1 diff --git a/scales/wendell4.scl b/scales/wendell4.scl new file mode 100644 index 0000000..9eae8fa --- /dev/null +++ b/scales/wendell4.scl @@ -0,0 +1,17 @@ +! wendell4.scl +! +Robert Wendell's ET equivalent (2002) + 12 +! + 96.48501 + 199.61000 + 298.43500 + 399.22000 + 4/3 + 598.83001 + 697.65500 + 798.44001 + 897.26500 + 1000.39000 + 1096.87500 + 2/1 diff --git a/scales/wendell5.scl b/scales/wendell5.scl new file mode 100644 index 0000000..08aa782 --- /dev/null +++ b/scales/wendell5.scl @@ -0,0 +1,17 @@ +! wendell5.scl +! +Robert Wendell Synchronous Victorian (2002) + 12 +! + 92.18501 + 195.31000 + 296.09501 + 390.62000 + 4/3 + 594.53001 + 697.65500 + 794.14001 + 892.96500 + 998.05001 + 1092.57500 + 2/1 diff --git a/scales/wendell6.scl b/scales/wendell6.scl new file mode 100644 index 0000000..29847d2 --- /dev/null +++ b/scales/wendell6.scl @@ -0,0 +1,17 @@ +! wendell6.scl +! +Robert Wendell's RPW Synchronous well (2002) + 12 +! + 94.51000 + 197.65000 + 298.42500 + 392.94000 + 498.04000 + 596.85500 + 699.34500 + 796.47000 + 895.29500 + 1000.38500 + 1094.89500 + 2/1 diff --git a/scales/wendell7.scl b/scales/wendell7.scl new file mode 100644 index 0000000..d3b863a --- /dev/null +++ b/scales/wendell7.scl @@ -0,0 +1,17 @@ +! wendell7.scl +! +Robert Wendell Tweaked Synchronous Well + 12 +! + 93.82500 + 197.54000 + 297.74500 + 392.94000 + 4/3 + 596.86000 + 698.81500 + 795.79000 + 894.99500 + 999.71000 + 1094.90500 + 2/1 diff --git a/scales/werck1.scl b/scales/werck1.scl new file mode 100644 index 0000000..d06705b --- /dev/null +++ b/scales/werck1.scl @@ -0,0 +1,25 @@ +! werck1.scl +! +Werckmeister I (just intonation) + 20 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 4/3 + 25/18 + 45/32 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/werck3.scl b/scales/werck3.scl new file mode 100644 index 0000000..846eaf8 --- /dev/null +++ b/scales/werck3.scl @@ -0,0 +1,17 @@ +! werck3.scl +! +Andreas Werckmeister's temperament III (the most famous one, 1681) + 12 +! + 256/243 + 192.18000 + 32/27 + 390.22500 + 4/3 + 1024/729 + 696.09000 + 128/81 + 888.26999 + 16/9 + 1092.18000 + 2/1 diff --git a/scales/werck3_eb.scl b/scales/werck3_eb.scl new file mode 100644 index 0000000..7f1b9af --- /dev/null +++ b/scales/werck3_eb.scl @@ -0,0 +1,17 @@ +! werck3_eb.scl +! +Werckmeister III equal beating version, 5/4 beats twice 3/2 + 12 +! + 256/243 + 193.29300 + 32/27 + 391.76700 + 4/3 + 1024/729 + 697.41300 + 128/81 + 889.81200 + 16/9 + 1093.77200 + 2/1 diff --git a/scales/werck3_ebm.scl b/scales/werck3_ebm.scl new file mode 100644 index 0000000..3470e98 --- /dev/null +++ b/scales/werck3_ebm.scl @@ -0,0 +1,20 @@ +! werck3_ebm.scl +! +Harmonic equal-beating meta-version of Werckmeister III by Jacques Dudon (2006) + 12 +! + 256/243 + 21995/19683 + 32/27 + 2740/2187 + 4/3 + 1024/729 + 9808/6561 + 128/81 + 10960/6561 + 16/9 + 1370/729 + 2/1 +! achieved with Comptine recurrent sequence x^3 = (3/5)x^2 + 2 +! (x = 1.494929263 or 696.09266484 c.), Dudon 2006 +! triple equal-beating property : 3A - 5C = 4E - 5C = 3D - 2A diff --git a/scales/werck3_mim.scl b/scales/werck3_mim.scl new file mode 100644 index 0000000..400b090 --- /dev/null +++ b/scales/werck3_mim.scl @@ -0,0 +1,17 @@ +! werck3_mim.scl +! +Werckmeister III, 10 cents 5-limit mimafip scale + 12 +! + 256/243 + 192.18000 + 32/27 + 384.36000 + 503.91000 + 584.35871 + 696.09000 + 786.31500 + 888.26999 + 1000.00129 + 1080.45000 + 2/1 diff --git a/scales/werck3_mod.scl b/scales/werck3_mod.scl new file mode 100644 index 0000000..b62d059 --- /dev/null +++ b/scales/werck3_mod.scl @@ -0,0 +1,17 @@ +! werck3_mod.scl +! +Modified Werckmeister III with B between E and F#, Nijsse (1997), organ Soest + 12 +! + 256/243 + 192.18000 + 32/27 + 390.22500 + 4/3 + 1024/729 + 696.09000 + 128/81 + 888.26999 + 16/9 + 1089.24750 + 2/1 diff --git a/scales/werck3_turck.scl b/scales/werck3_turck.scl new file mode 100644 index 0000000..576d367 --- /dev/null +++ b/scales/werck3_turck.scl @@ -0,0 +1,17 @@ +! werck3_turck.scl +! +Daniel Gottlob Trck's 1806 Werckmeister III compiled by Andreas Sparschuh, TL 28-05-2010 + 12 +! + 256/243 + 272/243 + 32/27 + 304/243 + 4/3 + 1024/729 + 3280/2187 + 128/81 + 1216/729 + 16/9 + 152/81 + 2/1 diff --git a/scales/werck4.scl b/scales/werck4.scl new file mode 100644 index 0000000..0e15b67 --- /dev/null +++ b/scales/werck4.scl @@ -0,0 +1,17 @@ +! werck4.scl +! +Andreas Werckmeister's temperament IV + 12 +! + 82.40499 + 196.09000 + 32/27 + 392.18000 + 4/3 + 1024/729 + 694.13500 + 784.35999 + 890.22500 + 1003.91000 + 4096/2187 + 2/1 diff --git a/scales/werck5.scl b/scales/werck5.scl new file mode 100644 index 0000000..f1008e5 --- /dev/null +++ b/scales/werck5.scl @@ -0,0 +1,17 @@ +! werck5.scl +! +Andreas Werckmeister's temperament V + 12 +! + 96.09000 + 9/8 + 300.00000 + 396.09000 + 503.91000 + 600.00000 + 3/2 + 128/81 + 900.00000 + 1001.95500 + 1098.04500 + 2/1 diff --git a/scales/werck6.scl b/scales/werck6.scl new file mode 100644 index 0000000..1476295 --- /dev/null +++ b/scales/werck6.scl @@ -0,0 +1,17 @@ +! werck6.scl +! +Andreas Werckmeister's "septenarius" tuning VI, D is probably erroneous + 12 +! + 98/93 + 49/44 + 196/165 + 49/39 + 4/3 + 196/139 + 196/131 + 49/31 + 196/117 + 98/55 + 49/26 + 2/1 diff --git a/scales/werck6_cor.scl b/scales/werck6_cor.scl new file mode 100644 index 0000000..867e011 --- /dev/null +++ b/scales/werck6_cor.scl @@ -0,0 +1,17 @@ +! werck6_cor.scl +! +Corrected Septenarius with D string length=175 by Tom Dent (2006) + 12 +! + 98/93 + 28/25 + 196/165 + 49/39 + 4/3 + 196/139 + 196/131 + 49/31 + 196/117 + 98/55 + 49/26 + 2/1 diff --git a/scales/werck6_dup.scl b/scales/werck6_dup.scl new file mode 100644 index 0000000..6a12f42 --- /dev/null +++ b/scales/werck6_dup.scl @@ -0,0 +1,17 @@ +! werck6_dup.scl +! +Andreas Werckmeister's VI in the interpretation by Dupont (1935) + 12 +! + 256/243 + 187.15300 + 297.48600 + 394.41400 + 4/3 + 594.97300 + 698.60400 + 792.18000 + 892.45900 + 999.44100 + 1096.36900 + 2/1 diff --git a/scales/werck_cl5.scl b/scales/werck_cl5.scl new file mode 100644 index 0000000..70a7c97 --- /dev/null +++ b/scales/werck_cl5.scl @@ -0,0 +1,17 @@ +! werck_cl5.scl +! +Werckmeister Clavier temperament (Nothw. Anm.) Poletti reconstr. 1/5-comma + 12 +! + 83.57620 + 195.30749 + 293.59126 + 390.61497 + 502.34626 + 585.92246 + 697.65374 + 786.79126 + 892.96123 + 1000.39126 + 15/8 + 2/1 diff --git a/scales/werck_cl6.scl b/scales/werck_cl6.scl new file mode 100644 index 0000000..d37bf04 --- /dev/null +++ b/scales/werck_cl6.scl @@ -0,0 +1,17 @@ +! werck_cl6.scl +! +Werckmeister Clavier temperament (Nothw. Anm.) Poletti reconstr. 1/6-comma + 12 +! + 88.59433 + 196.74124 + 295.67438 + 393.48248 + 501.62938 + 45/32 + 698.37062 + 791.67438 + 895.11186 + 999.67438 + 1091.85310 + 2/1 diff --git a/scales/werck_puzzle.scl b/scales/werck_puzzle.scl new file mode 100644 index 0000000..23986e4 --- /dev/null +++ b/scales/werck_puzzle.scl @@ -0,0 +1,17 @@ +! werck_puzzle.scl +! +From Hypomnemata Musica, 1697, p. 49, 1/1=192, fifths tempered superparticular + 12 +! + 25/24 + 107/96 + 75/64 + 5/4 + 85/64 + 67/48 + 143/96 + 25/16 + 5/3 + 113/64 + 15/8 + 2/1 diff --git a/scales/werckmeisterIV_variant.scl b/scales/werckmeisterIV_variant.scl new file mode 100644 index 0000000..d70054a --- /dev/null +++ b/scales/werckmeisterIV_variant.scl @@ -0,0 +1,17 @@ +! werckmeisterIV_variant.scl +! +Werckmeister IV with 1/3 syntonic comma temperings + 12 +! + 85.00995 + 196.74124 + 32/27 + 393.48248 + 4/3 + 45/32 + 694.78624 + 785.01123 + 891.52748 + 1003.25876 + 15/8 + 2/1 diff --git a/scales/werckmeisterIV_variant_c.scl b/scales/werckmeisterIV_variant_c.scl new file mode 100644 index 0000000..c73c446 --- /dev/null +++ b/scales/werckmeisterIV_variant_c.scl @@ -0,0 +1,17 @@ +! werckmeisterIV_variant_c.scl +! +Werckmeister IV variation, 1/3-SC, all intervals in cents + 12 +! + 85.00995 + 196.74124 + 294.13500 + 393.48248 + 498.04500 + 590.22372 + 694.78624 + 785.01123 + 891.52748 + 1003.25876 + 1088.26871 + 2/1 diff --git a/scales/white.scl b/scales/white.scl new file mode 100644 index 0000000..a8a211e --- /dev/null +++ b/scales/white.scl @@ -0,0 +1,27 @@ +! white.scl +! +Justin White's 22-tone scale based on Al-Farabi's tetrachord + 22 +! + 135/128 + 567/512 + 9/8 + 7/6 + 1215/1024 + 5/4 + 81/64 + 21/16 + 4/3 + 45/32 + 189/128 + 3/2 + 14/9 + 405/256 + 5/3 + 27/16 + 7/4 + 16/9 + 15/8 + 243/128 + 63/32 + 2/1 diff --git a/scales/whoosh.scl b/scales/whoosh.scl new file mode 100644 index 0000000..425cead --- /dev/null +++ b/scales/whoosh.scl @@ -0,0 +1,446 @@ +! whoosh.scl +! +Whoosh temperament, g=560.54697, 5-limit + 441 +! + 3.13944 + 6.27888 + 8.20455 + 11.34399 + 14.48343 + 16.40910 + 19.54854 + 22.68798 + 24.61365 + 27.75309 + 30.89253 + 32.81820 + 35.95764 + 39.09708 + 41.02275 + 44.16219 + 47.30163 + 49.22730 + 52.36674 + 55.50618 + 57.43185 + 60.57129 + 62.49696 + 65.63640 + 68.77584 + 70.70151 + 73.84095 + 76.98039 + 78.90606 + 82.04550 + 85.18494 + 87.11061 + 90.25005 + 93.38949 + 95.31516 + 98.45460 + 101.59404 + 103.51971 + 106.65915 + 109.79859 + 111.72426 + 114.86370 + 118.00314 + 119.92881 + 123.06825 + 126.20769 + 128.13336 + 131.27280 + 134.41224 + 136.33791 + 139.47735 + 142.61679 + 144.54246 + 147.68190 + 149.60757 + 152.74701 + 155.88645 + 157.81212 + 160.95156 + 164.09100 + 166.01667 + 169.15611 + 172.29555 + 174.22122 + 177.36066 + 180.50010 + 182.42577 + 185.56521 + 188.70465 + 190.63032 + 193.76976 + 196.90920 + 198.83487 + 201.97431 + 205.11375 + 207.03942 + 210.17886 + 213.31830 + 215.24397 + 218.38341 + 221.52285 + 223.44852 + 226.58796 + 228.51363 + 231.65307 + 234.79251 + 236.71818 + 239.85762 + 242.99706 + 244.92273 + 248.06217 + 251.20161 + 253.12728 + 256.26672 + 259.40616 + 261.33183 + 264.47127 + 267.61071 + 269.53638 + 272.67582 + 275.81526 + 277.74093 + 280.88037 + 284.01981 + 285.94548 + 289.08492 + 292.22436 + 294.15003 + 297.28947 + 300.42891 + 302.35458 + 305.49402 + 307.41969 + 310.55913 + 313.69857 + 315.62424 + 318.76368 + 321.90312 + 323.82879 + 326.96823 + 330.10767 + 332.03334 + 335.17278 + 338.31222 + 340.23789 + 343.37733 + 346.51677 + 348.44244 + 351.58188 + 354.72132 + 356.64699 + 359.78643 + 362.92587 + 364.85154 + 367.99098 + 371.13042 + 373.05609 + 376.19553 + 379.33497 + 381.26064 + 384.40008 + 386.32575 + 389.46519 + 392.60463 + 394.53030 + 397.66974 + 400.80918 + 402.73485 + 405.87429 + 409.01373 + 410.93940 + 414.07884 + 417.21828 + 419.14395 + 422.28339 + 425.42283 + 427.34850 + 430.48794 + 433.62738 + 435.55305 + 438.69249 + 441.83193 + 443.75760 + 446.89704 + 450.03648 + 451.96215 + 455.10159 + 458.24103 + 460.16670 + 463.30614 + 465.23181 + 468.37125 + 471.51069 + 473.43636 + 476.57580 + 479.71524 + 481.64091 + 484.78035 + 487.91979 + 489.84546 + 492.98490 + 496.12434 + 498.05001 + 501.18945 + 504.32889 + 506.25456 + 509.39400 + 512.53344 + 514.45911 + 517.59855 + 520.73799 + 522.66366 + 525.80310 + 528.94254 + 530.86821 + 534.00765 + 537.14709 + 539.07276 + 542.21220 + 544.13787 + 547.27731 + 550.41675 + 552.34242 + 555.48186 + 558.62130 + 560.54697 + 563.68641 + 566.82585 + 568.75152 + 571.89096 + 575.03040 + 576.95607 + 580.09551 + 583.23495 + 585.16062 + 588.30006 + 591.43950 + 593.36517 + 596.50461 + 599.64405 + 601.56972 + 604.70916 + 607.84860 + 609.77427 + 612.91371 + 616.05315 + 617.97882 + 621.11826 + 623.04393 + 626.18337 + 629.32281 + 631.24848 + 634.38792 + 637.52736 + 639.45303 + 642.59247 + 645.73191 + 647.65758 + 650.79702 + 653.93646 + 655.86213 + 659.00157 + 662.14101 + 664.06668 + 667.20612 + 670.34556 + 672.27123 + 675.41067 + 678.55011 + 680.47578 + 683.61522 + 686.75466 + 688.68033 + 691.81977 + 694.95921 + 696.88488 + 700.02432 + 701.94999 + 705.08943 + 708.22887 + 710.15454 + 713.29398 + 716.43342 + 718.35909 + 721.49853 + 724.63797 + 726.56364 + 729.70308 + 732.84252 + 734.76819 + 737.90763 + 741.04707 + 742.97274 + 746.11218 + 749.25162 + 751.17729 + 754.31673 + 757.45617 + 759.38184 + 762.52128 + 765.66072 + 767.58639 + 770.72583 + 773.86527 + 775.79094 + 778.93038 + 782.06982 + 783.99549 + 787.13493 + 789.06060 + 792.20004 + 795.33948 + 797.26515 + 800.40459 + 803.54403 + 805.46970 + 808.60914 + 811.74858 + 813.67425 + 816.81369 + 819.95313 + 821.87880 + 825.01824 + 828.15768 + 830.08335 + 833.22279 + 836.36223 + 838.28790 + 841.42734 + 844.56678 + 846.49245 + 849.63189 + 852.77133 + 854.69700 + 857.83644 + 860.97588 + 862.90155 + 866.04099 + 867.96666 + 871.10610 + 874.24554 + 876.17121 + 879.31065 + 882.45009 + 884.37576 + 887.51520 + 890.65464 + 892.58031 + 895.71975 + 898.85919 + 900.78486 + 903.92430 + 907.06374 + 908.98941 + 912.12885 + 915.26829 + 917.19396 + 920.33340 + 923.47284 + 925.39851 + 928.53795 + 931.67739 + 933.60306 + 936.74250 + 939.88194 + 941.80761 + 944.94705 + 946.87272 + 950.01216 + 953.15160 + 955.07727 + 958.21671 + 961.35615 + 963.28182 + 966.42126 + 969.56070 + 971.48637 + 974.62581 + 977.76525 + 979.69092 + 982.83036 + 985.96980 + 987.89547 + 991.03491 + 994.17435 + 996.10002 + 999.23946 + 1002.37890 + 1004.30457 + 1007.44401 + 1010.58345 + 1012.50912 + 1015.64856 + 1018.78800 + 1020.71367 + 1023.85311 + 1025.77878 + 1028.91822 + 1032.05766 + 1033.98333 + 1037.12277 + 1040.26221 + 1042.18788 + 1045.32732 + 1048.46676 + 1050.39243 + 1053.53187 + 1056.67131 + 1058.59698 + 1061.73642 + 1064.87586 + 1066.80153 + 1069.94097 + 1073.08041 + 1075.00608 + 1078.14552 + 1081.28496 + 1083.21063 + 1086.35007 + 1089.48951 + 1091.41518 + 1094.55462 + 1097.69406 + 1099.61973 + 1102.75917 + 1104.68484 + 1107.82428 + 1110.96372 + 1112.88939 + 1116.02883 + 1119.16827 + 1121.09394 + 1124.23338 + 1127.37282 + 1129.29849 + 1132.43793 + 1135.57737 + 1137.50304 + 1140.64248 + 1143.78192 + 1145.70759 + 1148.84703 + 1151.98647 + 1153.91214 + 1157.05158 + 1160.19102 + 1162.11669 + 1165.25613 + 1168.39557 + 1170.32124 + 1173.46068 + 1176.60012 + 1178.52579 + 1181.66523 + 1183.59090 + 1186.73034 + 1189.86978 + 1191.79545 + 1194.93489 + 1198.07433 + 2/1 diff --git a/scales/wicks_eb.scl b/scales/wicks_eb.scl new file mode 100644 index 0000000..f2b0a9a --- /dev/null +++ b/scales/wicks_eb.scl @@ -0,0 +1,17 @@ +! wicks_eb.scl +! +Mark Wicks' equal beating temperament for organs (1887) + 12 +! + 96.71564 + 198.75561 + 295.75170 + 398.07101 + 495.31776 + 597.88666 + 699.74789 + 796.58349 + 898.74299 + 995.84635 + 1098.27248 + 2/1 diff --git a/scales/wiegleb-book.scl b/scales/wiegleb-book.scl new file mode 100644 index 0000000..0186c5b --- /dev/null +++ b/scales/wiegleb-book.scl @@ -0,0 +1,17 @@ +! wiegleb-book.scl +! +Werkstattbuch Wiegleb, organ temperament, 2nd half 18th cent., from Ratte, p. 406 + 12 +! + 92.18000 + 196.09000 + 296.09000 + 394.13500 + 500.00000 + 590.22500 + 698.04500 + 794.13500 + 894.13500 + 998.04500 + 1092.18000 + 2/1 diff --git a/scales/wiegleb.scl b/scales/wiegleb.scl new file mode 100644 index 0000000..a6ba05c --- /dev/null +++ b/scales/wiegleb.scl @@ -0,0 +1,17 @@ +! wiegleb.scl +! +Wiegleb's organ temperament (1790) + 12 +! + 91.20250 + 194.13500 + 295.11250 + 391.20250 + 499.02250 + 589.24750 + 697.06750 + 793.15750 + 891.20250 + 997.06750 + 1090.22500 + 2/1 diff --git a/scales/wier_15.scl b/scales/wier_15.scl new file mode 100644 index 0000000..1383aa0 --- /dev/null +++ b/scales/wier_15.scl @@ -0,0 +1,20 @@ +! wier_15.scl +! +Danny Wier, 11-limit JI scale, TL 27-07-2009 + 15 +! + 22/21 + 11/10 + 8/7 + 6/5 + 44/35 + 33/25 + 25/18 + 36/25 + 50/33 + 35/22 + 5/3 + 7/4 + 20/11 + 21/11 + 2/1 diff --git a/scales/wier_53.scl b/scales/wier_53.scl new file mode 100644 index 0000000..26daca1 --- /dev/null +++ b/scales/wier_53.scl @@ -0,0 +1,58 @@ +! wier_53.scl +Danny Wier's schismatically-altered 53-Pythagorgean scale (2002) +53 +! http://launch.groups.yahoo.com/group/tuning/message/38888 +! +64/63 ! A +36/35 ! B +28/27 ! C +135/128 ! D +16/15 ! E +243/224 ! F +35/32 ! G +10/9 ! H +9/8 ! I +8/7 ! J +81/70 ! K +7/6 ! L +32/27 ! M +6/5 ! N +128/105 ! O +315/256 ! P +5/4 ! Q +81/64 ! R +9/7 ! S +35/27 ! T +21/16 ! U +4/3 ! V +27/20 ! W +48/35 ! X +112/81 ! Y +45/32 ! Z +64/45 ! z +81/56 ! y +35/24 ! x +40/27 ! w +3/2 ! v +32/21 ! u +54/35 ! t +14/9 ! s +128/81 ! r +8/5 ! q +512/315 ! p +105/64 ! o +5/3 ! n +27/16 ! m +12/7 ! l +140/81 ! k +7/4 ! j +16/9 ! i +9/5 ! h +64/35 ! g +448/243 ! f +15/8 ! e +256/135 ! d +27/14 ! c +35/18 ! b +63/32 ! a +2/1 ! @' diff --git a/scales/wier_cl.scl b/scales/wier_cl.scl new file mode 100644 index 0000000..3e70c15 --- /dev/null +++ b/scales/wier_cl.scl @@ -0,0 +1,17 @@ +! wier_cl.scl +! +Danny Wier, ClownTone (2003) + 12 +! + 19/18 + 10/9 + 7/6 + 11/9 + 4/3 + 17/12 + 3/2 + 19/12 + 5/3 + 7/4 + 11/6 + 2/1 diff --git a/scales/wier_j.scl b/scales/wier_j.scl new file mode 100644 index 0000000..ec3f247 --- /dev/null +++ b/scales/wier_j.scl @@ -0,0 +1,17 @@ +! wier_j.scl +! +Danny Wier, 8 1/4P, 4 -1/4P temperament + 12 +! + 72.63000 + 192.18000 + 276.54000 + 384.36000 + 492.18000 + 576.54000 + 696.09000 + 768.72000 + 888.27000 + 984.36000 + 1080.45000 + 2/1 diff --git a/scales/wiese1.scl b/scales/wiese1.scl new file mode 100644 index 0000000..6e83d32 --- /dev/null +++ b/scales/wiese1.scl @@ -0,0 +1,17 @@ +! wiese1.scl +! +Christian Ludwig Gustav von Wiese's 1/2P-comma temperament no. 1 (1793) + 12 +! + 256/243 + 9/8 + 32/27 + 81/64 + 4/3 + 5760/4073 + 3/2 + 128/81 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/wiese3.scl b/scales/wiese3.scl new file mode 100644 index 0000000..b8c5740 --- /dev/null +++ b/scales/wiese3.scl @@ -0,0 +1,17 @@ +! wiese3.scl +! +Christian Ludwig Gustav von Wiese's 1/2P-comma temperament no. 3 (1793). Also Grammateus (1518) according to Ratte, p. 249 + 12 +! + 101.95500 + 9/8 + 305.86500 + 81/64 + 4/3 + 600.00000 + 3/2 + 803.91000 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/wilson-rastbayyati24.scl b/scales/wilson-rastbayyati24.scl new file mode 100644 index 0000000..f252e40 --- /dev/null +++ b/scales/wilson-rastbayyati24.scl @@ -0,0 +1,29 @@ +! wilson-rastbayyati24.scl +! +Erv Wilson scale from Rast/Bayyati matrix (27/22, 11/9) + 24 +! + 8192/8019 + 256/243 + 12/11 + 9/8 + 1024/891 + 32/27 + 27/22 + 8192/6561 + 128/99 + 4/3 + 243/176 + 1024/729 + 16/11 + 3/2 + 4096/2673 + 128/81 + 18/11 + 27/16 + 512/297 + 16/9 + 81/44 + 4096/2187 + 64/33 + 2/1 diff --git a/scales/wilson1.scl b/scales/wilson1.scl new file mode 100644 index 0000000..fab1750 --- /dev/null +++ b/scales/wilson1.scl @@ -0,0 +1,24 @@ +! wilson1.scl +! +Wilson's 19-tone Scott scale (1976) + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 225/128 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/wilson11.scl b/scales/wilson11.scl new file mode 100644 index 0000000..5948832 --- /dev/null +++ b/scales/wilson11.scl @@ -0,0 +1,24 @@ +! wilson11.scl +! +Wilson 11-limit 19-tone scale (1977) + 19 +! + 28/27 + 35/33 + 49/44 + 7/6 + 105/88 + 56/45 + 14/11 + 4/3 + 7/5 + 63/44 + 3/2 + 14/9 + 35/22 + 147/88 + 7/4 + 315/176 + 28/15 + 21/11 + 2/1 diff --git a/scales/wilson1t.scl b/scales/wilson1t.scl new file mode 100644 index 0000000..cdde3bb --- /dev/null +++ b/scales/wilson1t.scl @@ -0,0 +1,24 @@ +! wilson1t.scl +! +Wilson's Scott scale, wilson1, in minimax minerva tempering + 19 +! + 75.87387 + 115.31791 + 195.66021 + 271.53407 + 310.97812 + 386.85198 + 426.29603 + 502.16990 + 7/5 + 621.95624 + 697.83010 + 773.70397 + 813.14801 + 889.02188 + 969.36418 + 1008.80822 + 1084.68209 + 1124.12613 + 2/1 diff --git a/scales/wilson2.scl b/scales/wilson2.scl new file mode 100644 index 0000000..689ce70 --- /dev/null +++ b/scales/wilson2.scl @@ -0,0 +1,24 @@ +! wilson2.scl +! +Wilson 19-tone (1975) + 19 +! + 28/27 + 16/15 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 112/81 + 64/45 + 3/2 + 14/9 + 8/5 + 27/16 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/wilson3.scl b/scales/wilson3.scl new file mode 100644 index 0000000..a0c89c3 --- /dev/null +++ b/scales/wilson3.scl @@ -0,0 +1,24 @@ +! wilson3.scl +! +Wilson 19-tone + 19 +! + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 21/16 + 4/3 + 7/5 + 35/24 + 3/2 + 63/40 + 105/64 + 27/16 + 7/4 + 9/5 + 15/8 + 63/32 + 2/1 diff --git a/scales/wilson5.scl b/scales/wilson5.scl new file mode 100644 index 0000000..0efece0 --- /dev/null +++ b/scales/wilson5.scl @@ -0,0 +1,27 @@ +! wilson5.scl +! +Wilson's 22-tone 5-limit scale + 22 +! + 25/24 + 16/15 + 10/9 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 27/20 + 45/32 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 27/16 + 225/128 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/wilson7.scl b/scales/wilson7.scl new file mode 100644 index 0000000..9394e54 --- /dev/null +++ b/scales/wilson7.scl @@ -0,0 +1,27 @@ +! wilson7.scl +! +Wilson's 22-tone 7-limit 'marimba' scale + 22 +! + 28/27 + 16/15 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 27/20 + 45/32 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/wilson7_2.scl b/scales/wilson7_2.scl new file mode 100644 index 0000000..64e705a --- /dev/null +++ b/scales/wilson7_2.scl @@ -0,0 +1,27 @@ +! wilson7_2.scl +! +Wilson 7-limit scale + 22 +! + 126/125 + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 63/50 + 21/16 + 27/20 + 7/5 + 36/25 + 3/2 + 25/16 + 63/40 + 5/3 + 42/25 + 7/4 + 9/5 + 15/8 + 189/100 + 2/1 diff --git a/scales/wilson7_3.scl b/scales/wilson7_3.scl new file mode 100644 index 0000000..c1e86d5 --- /dev/null +++ b/scales/wilson7_3.scl @@ -0,0 +1,27 @@ +! wilson7_3.scl +! +Wilson 7-limit scale + 22 +! + 128/125 + 16/15 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 32/25 + 4/3 + 27/20 + 64/45 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16/9 + 9/5 + 15/8 + 48/25 + 2/1 diff --git a/scales/wilson7_4.scl b/scales/wilson7_4.scl new file mode 100644 index 0000000..011a365 --- /dev/null +++ b/scales/wilson7_4.scl @@ -0,0 +1,27 @@ +! wilson7_4.scl +! +Wilson 7-limit 22-tone scale XH 3, 1975 + 22 +! + 28/27 + 16/15 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 112/81 + 64/45 + 40/27 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/wilson_17.scl b/scales/wilson_17.scl new file mode 100644 index 0000000..7ebe0ce --- /dev/null +++ b/scales/wilson_17.scl @@ -0,0 +1,22 @@ +! wilson_17.scl +! +Wilson's 17-tone 5-limit scale + 17 +! + 135/128 + 10/9 + 9/8 + 1215/1024 + 5/4 + 81/64 + 4/3 + 45/32 + 729/512 + 3/2 + 405/256 + 5/3 + 27/16 + 16/9 + 15/8 + 243/128 + 2/1 diff --git a/scales/wilson_31.scl b/scales/wilson_31.scl new file mode 100644 index 0000000..e260d7b --- /dev/null +++ b/scales/wilson_31.scl @@ -0,0 +1,36 @@ +! wilson_31.scl +! +Wilson 11-limit 31-tone scale XH 3, 1975 + 31 +! + 64/63 + 28/27 + 16/15 + 12/11 + 9/8 + 8/7 + 7/6 + 6/5 + 27/22 + 5/4 + 80/63 + 35/27 + 4/3 + 256/189 + 112/81 + 64/45 + 16/11 + 3/2 + 32/21 + 14/9 + 8/5 + 18/11 + 27/16 + 12/7 + 7/4 + 9/5 + 81/44 + 15/8 + 40/21 + 35/18 + 2/1 diff --git a/scales/wilson_41.scl b/scales/wilson_41.scl new file mode 100644 index 0000000..3d7b7f8 --- /dev/null +++ b/scales/wilson_41.scl @@ -0,0 +1,46 @@ +! wilson_41.scl +! +Wilson 11-limit 41-tone scale XH 3, 1975 + 41 +! + 64/63 + 28/27 + 256/243 + 16/15 + 12/11 + 10/9 + 9/8 + 8/7 + 7/6 + 32/27 + 6/5 + 27/22 + 5/4 + 81/64 + 9/7 + 21/16 + 4/3 + 256/189 + 112/81 + 1024/729 + 64/45 + 16/11 + 40/27 + 3/2 + 32/21 + 14/9 + 128/81 + 8/5 + 18/11 + 5/3 + 27/16 + 12/7 + 7/4 + 16/9 + 9/5 + 81/44 + 15/8 + 243/128 + 27/14 + 63/32 + 2/1 diff --git a/scales/wilson_alessandro.scl b/scales/wilson_alessandro.scl new file mode 100644 index 0000000..8514def --- /dev/null +++ b/scales/wilson_alessandro.scl @@ -0,0 +1,61 @@ +! wilson_alessandro.scl +! +D'Alessandro, genus [3 3 3 5 7 11 11] plus 8 pigtails, XH 12, 1989 + 56 +! + 2079/2048 + 33/32 + 4235/4096 + 135/128 + 1089/1024 + 4455/4096 + 35/32 + 847/768 + 9/8 + 1155/1024 + 297/256 + 38115/32768 + 7/6 + 605/512 + 77/64 + 315/256 + 2541/2048 + 5/4 + 10395/8192 + 165/128 + 1331/1024 + 21/16 + 5445/4096 + 945/704 + 693/512 + 11/8 + 22869/16384 + 45/32 + 363/256 + 1485/1024 + 189/128 + 49005/32768 + 3/2 + 385/256 + 99/64 + 12705/8192 + 405/256 + 3267/2048 + 77/48 + 105/64 + 847/512 + 27/16 + 3465/2048 + 55/32 + 114345/65536 + 7/4 + 1815/1024 + 231/128 + 945/512 + 7623/4096 + 15/8 + 121/64 + 495/256 + 63/32 + 16335/8192 + 2/1 diff --git a/scales/wilson_bag.scl b/scales/wilson_bag.scl new file mode 100644 index 0000000..0097246 --- /dev/null +++ b/scales/wilson_bag.scl @@ -0,0 +1,12 @@ +! wilson_bag.scl +! +Erv's bagpipe, after Theodore Podnos (37-39), (March 1997) + 7 +! + 9/8 + 39/32 + 171/128 + 3/2 + 13/8 + 57/32 + 2/1 diff --git a/scales/wilson_class.scl b/scales/wilson_class.scl new file mode 100644 index 0000000..ffb0f96 --- /dev/null +++ b/scales/wilson_class.scl @@ -0,0 +1,17 @@ +! wilson_class.scl +! +Wilson's Class Scale, 9 July 1967 + 12 +! + 25/24 + 28/25 + 7/6 + 5/4 + 4/3 + 7/5 + 35/24 + 8/5 + 5/3 + 7/4 + 28/15 + 2/1 diff --git a/scales/wilson_dia1.scl b/scales/wilson_dia1.scl new file mode 100644 index 0000000..6957e1d --- /dev/null +++ b/scales/wilson_dia1.scl @@ -0,0 +1,27 @@ +! wilson_dia1.scl +! +Wilson Diaphonic cycles, tetrachordal form + 22 +! + 36/35 + 18/17 + 12/11 + 9/8 + 36/31 + 6/5 + 36/29 + 9/7 + 4/3 + 18/13 + 27/19 + 54/37 + 3/2 + 54/35 + 27/17 + 18/11 + 27/16 + 54/31 + 9/5 + 54/29 + 27/14 + 2/1 diff --git a/scales/wilson_dia2.scl b/scales/wilson_dia2.scl new file mode 100644 index 0000000..e25120b --- /dev/null +++ b/scales/wilson_dia2.scl @@ -0,0 +1,27 @@ +! WILSON_DIA2.scl +! +Wilson Diaphonic cycle, conjunctive form + 22 +! + 39/38 + 39/37 + 13/12 + 39/35 + 39/34 + 13/11 + 39/32 + 39/31 + 13/10 + 39/29 + 39/28 + 13/9 + 52/35 + 26/17 + 52/33 + 13/8 + 52/31 + 26/15 + 52/29 + 13/7 + 52/27 + 2/1 diff --git a/scales/wilson_dia3.scl b/scales/wilson_dia3.scl new file mode 100644 index 0000000..c91b935 --- /dev/null +++ b/scales/wilson_dia3.scl @@ -0,0 +1,27 @@ +! wilson_dia3.scl +! +Wilson Diaphonic cycle on 3/2 + 22 +! + 39/38 + 39/37 + 13/12 + 39/35 + 39/34 + 13/11 + 39/32 + 39/31 + 13/10 + 39/29 + 39/28 + 13/9 + 3/2 + 54/35 + 27/17 + 18/11 + 27/16 + 54/31 + 9/5 + 54/29 + 27/14 + 2/1 diff --git a/scales/wilson_dia4.scl b/scales/wilson_dia4.scl new file mode 100644 index 0000000..575fc22 --- /dev/null +++ b/scales/wilson_dia4.scl @@ -0,0 +1,27 @@ +! wilson_dia4.scl +! +Wilson Diaphonic cycle on 4/3 + 22 +! + 36/35 + 18/17 + 12/11 + 9/8 + 36/31 + 6/5 + 36/29 + 9/7 + 4/3 + 26/19 + 54/37 + 13/9 + 52/35 + 26/17 + 52/33 + 13/8 + 52/31 + 26/15 + 52/29 + 13/7 + 52/27 + 2/1 diff --git a/scales/wilson_duo.scl b/scales/wilson_duo.scl new file mode 100644 index 0000000..76f8522 --- /dev/null +++ b/scales/wilson_duo.scl @@ -0,0 +1,27 @@ +! wilson_duo.scl +! +Wilson 'duovigene' + 22 +! + 28/27 + 16/15 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 112/81 + 45/32 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 27/16 + 7/4 + 9/5 + 15/8 + 35/18 + 2/1 diff --git a/scales/wilson_enh.scl b/scales/wilson_enh.scl new file mode 100644 index 0000000..40f2158 --- /dev/null +++ b/scales/wilson_enh.scl @@ -0,0 +1,12 @@ +! wilson_enh.scl +! +Wilson's Enharmonic & 3rd new Enharmonic on Hofmann's list of superp. 4chords + 7 +! + 96/95 + 16/15 + 4/3 + 3/2 + 144/95 + 8/5 + 2/1 diff --git a/scales/wilson_enh2.scl b/scales/wilson_enh2.scl new file mode 100644 index 0000000..08938f6 --- /dev/null +++ b/scales/wilson_enh2.scl @@ -0,0 +1,12 @@ +! wilson_enh2.scl +! +Wilson's 81/64 Enharmonic, a strong division of the 256/243 pyknon + 7 +! + 64/63 + 256/243 + 4/3 + 3/2 + 32/21 + 128/81 + 2/1 diff --git a/scales/wilson_facet.scl b/scales/wilson_facet.scl new file mode 100644 index 0000000..b83e28b --- /dev/null +++ b/scales/wilson_facet.scl @@ -0,0 +1,27 @@ +! wilson_facet.scl +! +Wilson study in 'conjunct facets', Hexany based + 22 +! + 28/27 + 21/20 + 10/9 + 9/8 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 27/20 + 7/5 + 40/27 + 3/2 + 14/9 + 63/40 + 5/3 + 140/81 + 7/4 + 9/5 + 28/15 + 35/18 + 2/1 diff --git a/scales/wilson_gh1.scl b/scales/wilson_gh1.scl new file mode 100644 index 0000000..e5e93a5 --- /dev/null +++ b/scales/wilson_gh1.scl @@ -0,0 +1,12 @@ +! wilson_gh1.scl +! +Golden Horagram nr.1: 1phi+0 / 7phi+1 + 7 +! + 157.52096 + 315.04191 + 472.56287 + 727.43713 + 884.95809 + 1042.47904 + 2/1 diff --git a/scales/wilson_gh11.scl b/scales/wilson_gh11.scl new file mode 100644 index 0000000..6d09f75 --- /dev/null +++ b/scales/wilson_gh11.scl @@ -0,0 +1,12 @@ +! wilson_gh11.scl +! +Golden Horagram nr.11: 1phi+0 / 3phi+1 + 7 +! + 204.98447 + 331.67184 + 536.65631 + 663.34369 + 868.32816 + 995.01553 + 2/1 diff --git a/scales/wilson_gh2.scl b/scales/wilson_gh2.scl new file mode 100644 index 0000000..b676e92 --- /dev/null +++ b/scales/wilson_gh2.scl @@ -0,0 +1,12 @@ +! wilson_gh2.scl +! +Golden Horagram nr.2: 1phi+0 / 6phi+1 + 7 +! + 181.32273 + 362.64546 + 543.96819 + 656.03181 + 837.35454 + 1018.67727 + 2/1 diff --git a/scales/wilson_gh50.scl b/scales/wilson_gh50.scl new file mode 100644 index 0000000..934a8ea --- /dev/null +++ b/scales/wilson_gh50.scl @@ -0,0 +1,17 @@ +! wilson_gh50.scl +! +Golden Horagram nr.50: 7phi+2 / 17phi+5 + 12 +! + 59.73070 + 119.46141 + 275.83842 + 335.56913 + 491.94614 + 551.67685 + 611.40755 + 767.78456 + 827.51527 + 983.89228 + 1043.62299 + 2/1 diff --git a/scales/wilson_hebdome1.scl b/scales/wilson_hebdome1.scl new file mode 100644 index 0000000..7a2652e --- /dev/null +++ b/scales/wilson_hebdome1.scl @@ -0,0 +1,63 @@ +! wilson_hebdome1.scl +! +Wilson 1.3.5.7.9.11.13.15 hebdomekontany, 1.3.5.7 tonic + 58 +! + 65/64 + 143/140 + 33/32 + 117/112 + 15/14 + 13/12 + 11/10 + 495/448 + 143/128 + 9/8 + 1287/1120 + 65/56 + 33/28 + 143/120 + 135/112 + 39/32 + 99/80 + 5/4 + 143/112 + 9/7 + 13/10 + 585/448 + 297/224 + 429/320 + 11/8 + 39/28 + 45/32 + 99/70 + 1287/896 + 117/80 + 165/112 + 143/96 + 3/2 + 429/280 + 99/64 + 351/224 + 11/7 + 715/448 + 45/28 + 13/8 + 33/20 + 117/70 + 27/16 + 143/84 + 55/32 + 195/112 + 99/56 + 143/80 + 9/5 + 117/64 + 11/6 + 13/7 + 15/8 + 429/224 + 27/14 + 39/20 + 55/28 + 2/1 diff --git a/scales/wilson_hexflank.scl b/scales/wilson_hexflank.scl new file mode 100644 index 0000000..a970a39 --- /dev/null +++ b/scales/wilson_hexflank.scl @@ -0,0 +1,17 @@ +! wilson_hexflank.scl +! +Hexany Flanker, 7-limit, from Wilson + 12 +! + 49/48 + 8/7 + 7/6 + 5/4 + 4/3 + 10/7 + 35/24 + 80/49 + 5/3 + 7/4 + 40/21 + 2/1 diff --git a/scales/wilson_hypenh.scl b/scales/wilson_hypenh.scl new file mode 100644 index 0000000..32a30f1 --- /dev/null +++ b/scales/wilson_hypenh.scl @@ -0,0 +1,12 @@ +! wilson_hypenh.scl +! +Wilson's Hyperenharmonic, this genus has a CI of 9/7 + 7 +! + 56/55 + 28/27 + 4/3 + 3/2 + 84/55 + 14/9 + 2/1 diff --git a/scales/wilson_l1.scl b/scales/wilson_l1.scl new file mode 100644 index 0000000..c85fb59 --- /dev/null +++ b/scales/wilson_l1.scl @@ -0,0 +1,27 @@ +! wilson_l1.scl +! +Wilson 11-limit scale + 22 +! + 33/32 + 21/20 + 35/32 + 9/8 + 7/6 + 77/64 + 5/4 + 165/128 + 21/16 + 11/8 + 7/5 + 231/160 + 3/2 + 99/64 + 77/48 + 33/20 + 55/32 + 7/4 + 231/128 + 15/8 + 77/40 + 2/1 diff --git a/scales/wilson_l2.scl b/scales/wilson_l2.scl new file mode 100644 index 0000000..b1715cd --- /dev/null +++ b/scales/wilson_l2.scl @@ -0,0 +1,27 @@ +! wilson_l2.scl +! +Wilson 11-limit scale + 22 +! + 49/48 + 77/72 + 11/10 + 9/8 + 7/6 + 77/64 + 5/4 + 77/60 + 4/3 + 11/8 + 77/54 + 35/24 + 3/2 + 11/7 + 77/48 + 5/3 + 77/45 + 7/4 + 11/6 + 15/8 + 77/40 + 2/1 diff --git a/scales/wilson_l3.scl b/scales/wilson_l3.scl new file mode 100644 index 0000000..21f5677 --- /dev/null +++ b/scales/wilson_l3.scl @@ -0,0 +1,27 @@ +! wilson_l3.scl +! +Wilson 11-limit scale + 22 +! + 33/32 + 21/20 + 35/32 + 9/8 + 7/6 + 6/5 + 5/4 + 14/11 + 21/16 + 11/8 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 105/64 + 27/16 + 7/4 + 9/5 + 15/8 + 21/11 + 2/1 diff --git a/scales/wilson_l4.scl b/scales/wilson_l4.scl new file mode 100644 index 0000000..50712c8 --- /dev/null +++ b/scales/wilson_l4.scl @@ -0,0 +1,27 @@ +! wilson_l4.scl +! +Wilson 11-limit scale + 22 +! + 49/48 + 21/20 + 10/9 + 8/7 + 7/6 + 6/5 + 5/4 + 35/27 + 4/3 + 49/36 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 9/5 + 28/15 + 35/18 + 2/1 diff --git a/scales/wilson_l5.scl b/scales/wilson_l5.scl new file mode 100644 index 0000000..f0e72c5 --- /dev/null +++ b/scales/wilson_l5.scl @@ -0,0 +1,27 @@ +! wilson_l5.scl +! +Wilson 11-limit scale + 22 +! + 49/48 + 77/72 + 12/11 + 8/7 + 7/6 + 6/5 + 5/4 + 14/11 + 4/3 + 49/36 + 7/5 + 35/24 + 3/2 + 14/9 + 8/5 + 5/3 + 12/7 + 7/4 + 11/6 + 28/15 + 35/18 + 2/1 diff --git a/scales/wilson_l6.scl b/scales/wilson_l6.scl new file mode 100644 index 0000000..db5f454 --- /dev/null +++ b/scales/wilson_l6.scl @@ -0,0 +1,27 @@ +! wilson_l6.scl +! +Wilson 1 3 7 9 11 15 eikosany plus 9/8 and tritone. Used Stearns: Jewel + 22 +! + 45/44 + 35/33 + 12/11 + 9/8 + 7/6 + 105/88 + 5/4 + 14/11 + 4/3 + 15/11 + 140/99 + 35/24 + 3/2 + 14/9 + 35/22 + 5/3 + 56/33 + 7/4 + 20/11 + 15/8 + 21/11 + 2/1 diff --git a/scales/wilson_pelog.scl b/scales/wilson_pelog.scl new file mode 100644 index 0000000..14ee6ee --- /dev/null +++ b/scales/wilson_pelog.scl @@ -0,0 +1,12 @@ +! wilson_pelog.scl +! +Wilson Stretched Pelog, generator close to 15/11. (c. 1993) + 7 +! + 141.36489 + 282.72978 + 536.81756 + 678.18244 + 819.54733 + 960.91222 + 1215.00000 diff --git a/scales/window.scl b/scales/window.scl new file mode 100644 index 0000000..c003cd8 --- /dev/null +++ b/scales/window.scl @@ -0,0 +1,26 @@ +! window.scl +! +Window lattice + 21 +! + 25/24 + 10/9 + 9/8 + 256/225 + 75/64 + 5/4 + 32/25 + 4/3 + 25/18 + 45/32 + 64/45 + 36/25 + 3/2 + 25/16 + 8/5 + 128/75 + 225/128 + 16/9 + 9/5 + 48/25 + 2/1 diff --git a/scales/wizard22.scl b/scales/wizard22.scl new file mode 100644 index 0000000..2fd6628 --- /dev/null +++ b/scales/wizard22.scl @@ -0,0 +1,26 @@ +! wizard22.scl +Wizard[22] 11-limit, 4 cents lesfip optimized + 22 +! +66.2766 +116.3479 +166.4192 +232.6958 +282.8753 +333.2063 +383.4809 +449.2149 +499.4895 +549.8205 +600.0000 +666.2766 +716.3479 +766.4192 +832.6958 +882.8753 +933.2063 +983.4809 +1049.2149 +1099.4895 +1149.8205 +2/1 diff --git a/scales/wonder1.scl b/scales/wonder1.scl new file mode 100644 index 0000000..485848c --- /dev/null +++ b/scales/wonder1.scl @@ -0,0 +1,36 @@ +! wonder1.scl +! +Wonder Scale, gen=~233.54 cents, 8/7+1029/1024^7/25, LS 12:14:18:21, M.Schulter + 31 +! + 71.91664 + 104.24036 + 136.56408 + 168.88781 + 201.21153 + 233.53526 + 305.45189 + 337.77561 + 370.09934 + 402.42306 + 434.74679 + 467.07051 + 538.98715 + 571.31087 + 603.63459 + 635.95832 + 668.28204 + 700.60577 + 772.52240 + 804.84612 + 837.16985 + 869.49357 + 901.81730 + 934.14102 + 1006.05766 + 1038.38138 + 1070.70510 + 1103.02883 + 1135.35255 + 1167.67628 + 2/1 diff --git a/scales/wonder36.scl b/scales/wonder36.scl new file mode 100644 index 0000000..68d65e9 --- /dev/null +++ b/scales/wonder36.scl @@ -0,0 +1,36 @@ +! wonder36.scl +! +Wonder Scale, 36-tET version + 31 +! + 66.66667 + 100.00000 + 133.33333 + 166.66667 + 200.00000 + 233.33333 + 300.00000 + 333.33333 + 366.66667 + 400.00000 + 433.33333 + 466.66667 + 533.33333 + 566.66667 + 600.00000 + 633.33333 + 666.66667 + 700.00000 + 766.66667 + 800.00000 + 833.33333 + 866.66667 + 900.00000 + 933.33333 + 1000.00000 + 1033.33333 + 1066.66667 + 1100.00000 + 1133.33333 + 1166.66667 + 2/1 diff --git a/scales/wookie58.scl b/scales/wookie58.scl new file mode 100644 index 0000000..210e3ff --- /dev/null +++ b/scales/wookie58.scl @@ -0,0 +1,62 @@ +! wookie58.scl +Wookie[58], a 58&113 temperament MOS, in 171-tET tuning +58 +! +21.052632 +42.105263 +63.157895 +84.210526 +105.263158 +126.315789 +147.368421 +161.403509 +182.456140 +203.508772 +224.561404 +245.614035 +266.666667 +287.719298 +308.771930 +329.824561 +350.877193 +371.929825 +392.982456 +414.035088 +435.087719 +456.140351 +477.192982 +498.245614 +519.298246 +540.350877 +554.385965 +575.438596 +596.491228 +617.543860 +638.596491 +659.649123 +680.701754 +701.754386 +722.807018 +743.859649 +764.912281 +785.964912 +807.017544 +828.070175 +849.122807 +870.175439 +891.228070 +912.280702 +933.333333 +947.368421 +968.421053 +989.473684 +1010.526316 +1031.578947 +1052.631579 +1073.684211 +1094.736842 +1115.789474 +1136.842105 +1157.894737 +1178.947368 +2/1 diff --git a/scales/woz31.scl b/scales/woz31.scl new file mode 100644 index 0000000..4d2a33c --- /dev/null +++ b/scales/woz31.scl @@ -0,0 +1,35 @@ +! woz31.scl +2401/2400 norm reduced 31 +31 +! +49/48 +21/20 +15/14 +49/45 +28/25 +8/7 +7/6 +6/5 +49/40 +5/4 +9/7 +64/49 +4/3 +48/35 +7/5 +10/7 +35/24 +3/2 +49/32 +14/9 +8/5 +49/30 +5/3 +12/7 +7/4 +25/14 +90/49 +28/15 +40/21 +49/25 +2/1 diff --git a/scales/wronski.scl b/scales/wronski.scl new file mode 100644 index 0000000..4eed643 --- /dev/null +++ b/scales/wronski.scl @@ -0,0 +1,17 @@ +! wronski.scl +! +Wronski's scale, from Jocelyn Godwin, "Music and the Occult", p. 105. + 12 +! + 17/16 + 9/8 + 85/72 + 5/4 + 4/3 + 17/12 + 3/2 + 51/32 + 27/16 + 85/48 + 17/9 + 2/1 diff --git a/scales/wurschmidt.scl b/scales/wurschmidt.scl new file mode 100644 index 0000000..122275b --- /dev/null +++ b/scales/wurschmidt.scl @@ -0,0 +1,17 @@ +! wurschmidt.scl +! +Wrschmidt's normalised 12-tone system + 12 +! + 135/128 + 9/8 + 6/5 + 81/64 + 27/20 + 45/32 + 3/2 + 405/256 + 27/16 + 9/5 + 15/8 + 2/1 diff --git a/scales/wurschmidt1.scl b/scales/wurschmidt1.scl new file mode 100644 index 0000000..f565841 --- /dev/null +++ b/scales/wurschmidt1.scl @@ -0,0 +1,24 @@ +! wurschmidt1.scl +! +Wrschmidt-1 19-tone scale + 19 +! + 25/24 + 16/15 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16/9 + 15/8 + 48/25 + 2/1 diff --git a/scales/wurschmidt2.scl b/scales/wurschmidt2.scl new file mode 100644 index 0000000..c7d05c5 --- /dev/null +++ b/scales/wurschmidt2.scl @@ -0,0 +1,24 @@ +! wurschmidt2.scl +! +Wrschmidt-2 19-tone scale + 19 +! + 25/24 + 27/25 + 9/8 + 75/64 + 6/5 + 5/4 + 32/25 + 4/3 + 25/18 + 36/25 + 3/2 + 25/16 + 8/5 + 5/3 + 128/75 + 16/9 + 50/27 + 48/25 + 2/1 diff --git a/scales/wurschmidt_31.scl b/scales/wurschmidt_31.scl new file mode 100644 index 0000000..3cdd408 --- /dev/null +++ b/scales/wurschmidt_31.scl @@ -0,0 +1,36 @@ +! wurschmidt_31.scl +! +Wrschmidt's 31-tone system + 31 +! + 128/125 + 25/24 + 16/15 + 1125/1024 + 9/8 + 144/125 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 36/25 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 1024/625 + 5/3 + 128/75 + 125/72 + 16/9 + 2048/1125 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/wurschmidt_31a.scl b/scales/wurschmidt_31a.scl new file mode 100644 index 0000000..853ca22 --- /dev/null +++ b/scales/wurschmidt_31a.scl @@ -0,0 +1,36 @@ +! wurschmidt_31a.scl +! +Wrschmidt's 31-tone system with alternative tritone + 31 +! + 128/125 + 25/24 + 16/15 + 1125/1024 + 9/8 + 144/125 + 75/64 + 6/5 + 625/512 + 5/4 + 32/25 + 125/96 + 4/3 + 512/375 + 25/18 + 64/45 + 375/256 + 3/2 + 192/125 + 25/16 + 8/5 + 1024/625 + 5/3 + 128/75 + 125/72 + 16/9 + 2048/1125 + 15/8 + 48/25 + 125/64 + 2/1 diff --git a/scales/wurschmidt_53.scl b/scales/wurschmidt_53.scl new file mode 100644 index 0000000..48a7bd5 --- /dev/null +++ b/scales/wurschmidt_53.scl @@ -0,0 +1,58 @@ +! wurschmidt_53.scl +! +Wrschmidt's 53-tone system + 53 +! + 81/80 + 128/125 + 25/24 + 135/128 + 16/15 + 27/25 + 1125/1024 + 10/9 + 9/8 + 256/225 + 144/125 + 75/64 + 32/27 + 6/5 + 625/512 + 768/625 + 5/4 + 81/64 + 32/25 + 125/96 + 675/512 + 4/3 + 27/20 + 512/375 + 25/18 + 45/32 + 64/45 + 36/25 + 375/256 + 40/27 + 3/2 + 1024/675 + 192/125 + 25/16 + 128/81 + 8/5 + 625/384 + 1024/625 + 5/3 + 27/16 + 128/75 + 125/72 + 225/128 + 16/9 + 9/5 + 2048/1125 + 50/27 + 15/8 + 256/135 + 48/25 + 125/64 + 160/81 + 2/1 diff --git a/scales/wurschmidt_temp.scl b/scales/wurschmidt_temp.scl new file mode 100644 index 0000000..31306e5 --- /dev/null +++ b/scales/wurschmidt_temp.scl @@ -0,0 +1,36 @@ +! wurschmidt_temp.scl +! +Wrschmidt temperament, 5-limit, g=387.744375, 5-limit + 31 +! + 58.95085 + 95.49183 + 132.03281 + 168.57379 + 205.11477 + 241.65575 + 278.19673 + 314.73771 + 351.27869 + 387.81967 + 446.77052 + 483.31150 + 519.85248 + 556.39346 + 592.93444 + 629.47542 + 666.01640 + 702.55738 + 739.09837 + 775.63935 + 834.59019 + 871.13117 + 907.67215 + 944.21313 + 980.75412 + 1017.29510 + 1053.83608 + 1090.37706 + 1126.91804 + 1163.45902 + 2/1 diff --git a/scales/wyschnegradsky.scl b/scales/wyschnegradsky.scl new file mode 100644 index 0000000..cc17699 --- /dev/null +++ b/scales/wyschnegradsky.scl @@ -0,0 +1,10 @@ +! wyschnegradsky.scl +! +Ivan Wyschnegradsky, scale for "Cosmos" op. 28 for 4 pianos (1938/40 rev. 1945) + 5 +! + 250.00000 + 500.00000 + 750.00000 + 1000.00000 + 1350.00000 diff --git a/scales/xenakis_chrom.scl b/scales/xenakis_chrom.scl new file mode 100644 index 0000000..34ae72c --- /dev/null +++ b/scales/xenakis_chrom.scl @@ -0,0 +1,12 @@ +! xenakis_chrom.scl +! +Xenakis's Byzantine Liturgical mode, 5 + 19 + 6 parts + 7 +! + 83.33333 + 400.00000 + 500.00000 + 700.00000 + 783.33333 + 1100.00000 + 2/1 diff --git a/scales/xenakis_diat.scl b/scales/xenakis_diat.scl new file mode 100644 index 0000000..2b0f769 --- /dev/null +++ b/scales/xenakis_diat.scl @@ -0,0 +1,12 @@ +! xenakis_diat.scl +! +Xenakis's Byzantine Liturgical mode, 12 + 11 + 7 parts + 7 +! + 200.00000 + 383.33333 + 500.00000 + 700.00000 + 900.00000 + 1083.33333 + 2/1 diff --git a/scales/xenakis_schrom.scl b/scales/xenakis_schrom.scl new file mode 100644 index 0000000..b4895db --- /dev/null +++ b/scales/xenakis_schrom.scl @@ -0,0 +1,12 @@ +! xenakis_schrom.scl +! +Xenakis's Byzantine Liturgical mode, 7 + 16 + 7 parts + 7 +! + 116.66667 + 383.33333 + 500.00000 + 700.00000 + 816.66667 + 1083.33333 + 2/1 diff --git a/scales/xylophone2.scl b/scales/xylophone2.scl new file mode 100644 index 0000000..cfd8c39 --- /dev/null +++ b/scales/xylophone2.scl @@ -0,0 +1,15 @@ +! xylophone2.scl +! +African Yaswa xylophones (idiophone; calbash resonators with membrane) + 10 +! + 209.00000 + 416.00000 + 686.00000 + 926.00000 + 1144.00000 + 1213.00000 + 1377.00000 + 1530.00000 + 1826.00000 + 2025.00000 diff --git a/scales/xylophone3.scl b/scales/xylophone3.scl new file mode 100644 index 0000000..033c01f --- /dev/null +++ b/scales/xylophone3.scl @@ -0,0 +1,10 @@ +! xylophone3.scl +! +African Banyoro xylophone (idiophone; loose log) + 5 +! + 193.00000 + 494.00000 + 3/2 + 909.00000 + 2/1 diff --git a/scales/xylophone4.scl b/scales/xylophone4.scl new file mode 100644 index 0000000..34d455d --- /dev/null +++ b/scales/xylophone4.scl @@ -0,0 +1,15 @@ +! xylophone4.scl +! +African Bapare xylophone (idiophone; loose log) + 10 +! + 128.00000 + 317.00000 + 502.00000 + 699.00000 + 888.00000 + 1141.00000 + 1345.00000 + 1431.00000 + 1604.00000 + 1744.00000 diff --git a/scales/yajna31.scl b/scales/yajna31.scl new file mode 100644 index 0000000..a21e0c6 --- /dev/null +++ b/scales/yajna31.scl @@ -0,0 +1,71 @@ +! yajna31.scl +Yajna[31] hobbit in 520-tET, commas 540/539, 1375/1372, 625/624 +31 +! +32.30769 +80.76923 +117.69231 +150.00000 +198.46154 +235.38462 +267.69231 +316.15385 +348.46154 +385.38462 +417.69231 +466.15385 +498.46154 +535.38462 +583.84615 +616.15385 +664.61538 +701.53846 +733.84615 +782.30769 +814.61538 +851.53846 +883.84615 +932.30769 +964.61538 +1001.53846 +1050.00000 +1082.30769 +1119.23077 +1167.69231 +2/1 +! +! !preyajna31.scl +! Yajna[31] transversal +! 31 +! ! +! 50/49 +! 22/21 +! 15/14 +! 12/11 +! 28/25 +! 55/48 +! 7/6 +! 6/5 +! 11/9 +! 5/4 +! 14/11 +! 72/55 +! 4/3 +! 15/11 +! 7/5 +! 10/7 +! 22/15 +! 3/2 +! 55/36 +! 11/7 +! 8/5 +! 18/11 +! 5/3 +! 12/7 +! 96/55 +! 25/14 +! 11/6 +! 28/15 +! 21/11 +! 49/25 +! 2/1 diff --git a/scales/yarman-36a_12core.scl b/scales/yarman-36a_12core.scl new file mode 100644 index 0000000..7dedf17 --- /dev/null +++ b/scales/yarman-36a_12core.scl @@ -0,0 +1,17 @@ +! yarman-36a_12core.scl +! +12-tone Modified Meantone Temperament core (Layer I) of Yarman36a_nr1, A=438.410457150843 + 12 +! + 97.64058 + 198.74659 + 303.63775 + 396.07760 + 501.35622 + 594.11855 + 699.74399 + 801.68275 + 896.75720 + 1001.88049 + 1094.51356 + 2/1 diff --git a/scales/yarman12-135.scl b/scales/yarman12-135.scl new file mode 100644 index 0000000..07af5be --- /dev/null +++ b/scales/yarman12-135.scl @@ -0,0 +1,17 @@ +! yarman12-135.scl +! +12 out of 135-tET by Ozan Yarman + 12 +! + 88.93661 + 195.66054 + 302.38446 + 391.32107 + 506.29447 + 595.23107 + 3/2 + 790.89161 + 897.61554 + 1004.33946 + 1093.27607 + 2/1 diff --git a/scales/yarman12-159.scl b/scales/yarman12-159.scl new file mode 100644 index 0000000..89d2828 --- /dev/null +++ b/scales/yarman12-159.scl @@ -0,0 +1,17 @@ +! yarman12-159.scl +! +12 out of 159-tET by Ozan Yarman + 12 +! + 90.56604 + 196.22642 + 301.88679 + 392.45283 + 4/3 + 588.67925 + 3/2 + 792.45283 + 898.11321 + 1003.77358 + 1094.33962 + 2/1 diff --git a/scales/yarman24a-rational.scl b/scales/yarman24a-rational.scl new file mode 100644 index 0000000..45b1f31 --- /dev/null +++ b/scales/yarman24a-rational.scl @@ -0,0 +1,29 @@ +! yarman24a-rational.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 21/20 + 38/35 + 19/17 + 9/8 + 45/38 + 17/14 + 16/13 + 5/4 + 19/15 + 4/3 + 7/5 + 36/25 + 148/99 + 3/2 + 41/26 + 18/11 + 112/67 + 27/16 + 16/9 + 20/11 + 13/7 + 15/8 + 21/11 + 2/1 diff --git a/scales/yarman24a.scl b/scales/yarman24a.scl new file mode 100644 index 0000000..df8d583 --- /dev/null +++ b/scales/yarman24a.scl @@ -0,0 +1,29 @@ +! yarman24a.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 84.36000 + 38/35 + 192.18000 + 9/8 + 292.18000 + 17/14 + 16/13 + 5/4 + 19/15 + 4/3 + 584.07906 + 36/25 + 696.09000 + 3/2 + 788.27000 + 18/11 + 888.27000 + 27/16 + 16/9 + 20/11 + 13/7 + 15/8 + 21/11 + 2/1 diff --git a/scales/yarman24b-rational.scl b/scales/yarman24b-rational.scl new file mode 100644 index 0000000..d48848e --- /dev/null +++ b/scales/yarman24b-rational.scl @@ -0,0 +1,29 @@ +! yarman24b-rational.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 21/20 + 87/80 + 19/17 + 9/8 + 45/38 + 128/105 + 100/81 + 5/4 + 89/70 + 4/3 + 185/132 + 140/97 + 148/99 + 3/2 + 41/26 + 136/83 + 147/88 + 27/16 + 16/9 + 64/35 + 93/50 + 15/8 + 182/95 + 2/1 diff --git a/scales/yarman24b-rational2.scl b/scales/yarman24b-rational2.scl new file mode 100644 index 0000000..e3529b3 --- /dev/null +++ b/scales/yarman24b-rational2.scl @@ -0,0 +1,29 @@ +! yarman24b-rational2.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 21/20 + 87/80 + 19/17 + 9/8 + 45/38 + 28/23 + 100/81 + 156/125 + 89/70 + 4/3 + 185/132 + 153/106 + 148/99 + 3/2 + 41/26 + 136/83 + 147/88 + 27/16 + 16/9 + 148/81 + 93/50 + 234/125 + 182/95 + 2/1 diff --git a/scales/yarman24b.scl b/scales/yarman24b.scl new file mode 100644 index 0000000..c33273d --- /dev/null +++ b/scales/yarman24b.scl @@ -0,0 +1,29 @@ +! yarman24b.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 84.36000 + 145.11186 + 192.18000 + 9/8 + 292.18000 + 128/105 + 364.73529 + 5/4 + 415.67672 + 4/3 + 584.35871 + 635.30015 + 696.09000 + 3/2 + 788.27000 + 854.92357 + 888.27000 + 27/16 + 16/9 + 64/35 + 1074.54700 + 15/8 + 1125.48843 + 2/1 diff --git a/scales/yarman24c.scl b/scales/yarman24c.scl new file mode 100644 index 0000000..f865265 --- /dev/null +++ b/scales/yarman24c.scl @@ -0,0 +1,29 @@ +! yarman24c.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 85.05893 + 143.62345 + 191.77076 + 9/8 + 292.41297 + 348.34326 + 362.50268 + 156/125 + 415.30462 + 4/3 + 581.38190 + 634.18384 + 695.88538 + 3/2 + 788.73595 + 853.06306 + 887.65614 + 27/16 + 16/9 + 1043.62345 + 1071.94229 + 234/125 + 1124.74423 + 2/1 diff --git a/scales/yarman24d-equalizedmtfifth.scl b/scales/yarman24d-equalizedmtfifth.scl new file mode 100644 index 0000000..7019fa4 --- /dev/null +++ b/scales/yarman24d-equalizedmtfifth.scl @@ -0,0 +1,29 @@ +! yarman24d-equalizedmtfifth.scl +! +24-tone maqam music tuning with 12-tones tempered in the style of Rameau's modified meantone and 17 tones produced by cycle of super-pyth fifths + 24 +! + 83.32982 + 142.47072 + 190.84857 + 9/8 + 291.83661 + 347.04643 + 360.77357 + 381.69714 + 415.01643 + 4/3 + 579.07643 + 633.31929 + 695.42429 + 3/2 + 787.58321 + 851.62214 + 886.27286 + 27/16 + 16/9 + 1042.47072 + 1069.92500 + 1083.65214 + 1124.16786 + 2/1 diff --git a/scales/yarman31b-rational-practical.scl b/scales/yarman31b-rational-practical.scl new file mode 100644 index 0000000..51ab3c7 --- /dev/null +++ b/scales/yarman31b-rational-practical.scl @@ -0,0 +1,36 @@ +! yarman31b-rational-practical.scl +! +Yarman24b extended to 31 notes using missing "comma" flats and sharps --rationalized & fretting friendly + 31 +! + 51/50 + 21/20 + 87/80 + 19/17 + 9/8 + 41/36 + 45/38 + 28/23 + 100/81 + 156/125 + 89/70 + 250/189 + 4/3 + 86/63 + 185/132 + 153/106 + 22/15 + 187/125 + 32/21 + 41/26 + 136/83 + 147/88 + 27/16 + 114/67 + 16/9 + 148/81 + 93/50 + 234/125 + 182/95 + 125/63 + 2/1 diff --git a/scales/yarman31b-rational.scl b/scales/yarman31b-rational.scl new file mode 100644 index 0000000..616e212 --- /dev/null +++ b/scales/yarman31b-rational.scl @@ -0,0 +1,36 @@ +! yarman31b-rational.scl +! +Yarman24b extended to 31 notes using missing "comma" flats and sharps --rationalized + 31 +! + 51/50 + 21/20 + 87/80 + 19/17 + 9/8 + 41/36 + 45/38 + 28/23 + 100/81 + 156/125 + 89/70 + 250/189 + 4/3 + 86/63 + 185/132 + 153/106 + 148/99 + 3/2 + 32/21 + 41/26 + 136/83 + 147/88 + 27/16 + 114/67 + 16/9 + 148/81 + 93/50 + 234/125 + 182/95 + 125/63 + 2/1 diff --git a/scales/yarman31b.scl b/scales/yarman31b.scl new file mode 100644 index 0000000..4f7d5cb --- /dev/null +++ b/scales/yarman31b.scl @@ -0,0 +1,36 @@ +! yarman31b.scl +! +Yarman24b extended to 31 notes using missing "comma" flats and sharps + 31 +! + 38.13420 + 84.36000 + 145.11200 + 192.18000 + 9/8 + 226.90545 + 292.18000 + 60/49 + 364.73500 + 5/4 + 415.67700 + 476.46658 + 4/3 + 543.74857 + 584.35900 + 635.30000 + 696.09000 + 3/2 + 732.51983 + 788.27000 + 854.92400 + 888.27000 + 27/16 + 921.29108 + 16/9 + 11/6 + 1074.54700 + 15/8 + 1125.48800 + 1186.27829 + 2/1 diff --git a/scales/yarman31c-rational-practical.scl b/scales/yarman31c-rational-practical.scl new file mode 100644 index 0000000..40eab9b --- /dev/null +++ b/scales/yarman31c-rational-practical.scl @@ -0,0 +1,36 @@ +! yarman31c-rational-practical.scl +! +Yarman24c extended to 31 notes using missing "comma" flats and sharps --rationalized & fretting friendly + 31 +! + 51/50 + 21/20 + 88/81 + 19/17 + 9/8 + 33/29 + 58/49 + 11/9 + 69/56 + 156/125 + 75/59 + 54/41 + 4/3 + 86/63 + 7/5 + 75/52 + 16/11 + 187/125 + 32/21 + 41/26 + 18/11 + 117/70 + 27/16 + 17/10 + 16/9 + 42/23 + 13/7 + 234/125 + 67/35 + 125/63 + 2/1 diff --git a/scales/yarman31c-rational.scl b/scales/yarman31c-rational.scl new file mode 100644 index 0000000..f4d1a03 --- /dev/null +++ b/scales/yarman31c-rational.scl @@ -0,0 +1,36 @@ +! yarman31c-rational.scl +! +Yarman24c extended to 31 notes using missing "comma" flats and sharps --rationalized + 31 +! + 51/50 + 21/20 + 88/81 + 19/17 + 9/8 + 33/29 + 58/49 + 11/9 + 69/56 + 156/125 + 75/59 + 54/41 + 4/3 + 86/63 + 7/5 + 75/52 + 148/99 + 3/2 + 32/21 + 41/26 + 18/11 + 117/70 + 27/16 + 17/10 + 16/9 + 42/23 + 13/7 + 234/125 + 67/35 + 125/63 + 2/1 diff --git a/scales/yarman31c.scl b/scales/yarman31c.scl new file mode 100644 index 0000000..a21359c --- /dev/null +++ b/scales/yarman31c.scl @@ -0,0 +1,36 @@ +! yarman31c.scl +! +Yarman24c extended to 31 notes using missing "comma" flats and sharps + 31 +! + 34.18384 + 85.05893 + 143.62345 + 191.77076 + 9/8 + 224.74423 + 292.41297 + 348.34326 + 362.50268 + 156/125 + 415.30462 + 477.00616 + 4/3 + 538.90365 + 581.38190 + 634.18384 + 695.88538 + 3/2 + 729.46403 + 788.73595 + 853.06306 + 887.65614 + 27/16 + 920.02442 + 16/9 + 1043.62345 + 1071.94229 + 234/125 + 1124.74423 + 1186.44577 + 2/1 diff --git a/scales/yarman31c_final.scl b/scales/yarman31c_final.scl new file mode 100644 index 0000000..ed13d56 --- /dev/null +++ b/scales/yarman31c_final.scl @@ -0,0 +1,36 @@ +! yarman31c_final.scl +! +Yarman24c extended to 31 notes using missing "comma" flats and sharps --FINAL version + 31 +! + 34.18384 + 85.05893 + 143.62345 + 191.77076 + 9/8 + 224.74423 + 292.41297 + 348.34326 + 362.50268 + 156/125 + 415.30462 + 477.00616 + 4/3 + 538.90365 + 581.38190 + 634.18384 + 16/11 + 187/125 + 729.46403 + 788.73595 + 853.06306 + 887.65614 + 27/16 + 920.02442 + 16/9 + 1043.62345 + 1071.94229 + 234/125 + 1124.74423 + 1186.44577 + 2/1 diff --git a/scales/yarman31d-equalizedmtfifth.scl b/scales/yarman31d-equalizedmtfifth.scl new file mode 100644 index 0000000..343eeae --- /dev/null +++ b/scales/yarman31d-equalizedmtfifth.scl @@ -0,0 +1,36 @@ +! yarman31d-equalizedmtfifth.scl +! +Yarman24d extended to 31 notes using missing "comma" flats and sharps + 31 +! + 33.31929 + 83.32982 + 142.47072 + 190.84857 + 9/8 + 224.16786 + 291.83661 + 347.04643 + 360.77357 + 381.69714 + 415.01643 + 477.12143 + 4/3 + 537.89500 + 579.07643 + 633.31929 + 695.42429 + 3/2 + 728.74357 + 787.58321 + 851.62214 + 886.27286 + 27/16 + 919.59215 + 16/9 + 1042.47072 + 1069.92500 + 1083.65214 + 1124.16786 + 1186.27286 + 2/1 diff --git a/scales/yarman31d-rational-practical.scl b/scales/yarman31d-rational-practical.scl new file mode 100644 index 0000000..f16961a --- /dev/null +++ b/scales/yarman31d-rational-practical.scl @@ -0,0 +1,36 @@ +! yarman31d-rational-practical.scl +! +Yarman24d extended to 31 notes using missing "comma" flats and sharps --rationalized & fretting friendly + 31 +! + 52/51 + 21/20 + 38/35 + 19/17 + 9/8 + 33/29 + 58/49 + 11/9 + 69/56 + 96/77 + 75/59 + 54/41 + 4/3 + 86/63 + 88/63 + 75/52 + 22/15 + 187/125 + 32/21 + 52/33 + 18/11 + 187/112 + 27/16 + 17/10 + 16/9 + 42/23 + 13/7 + 144/77 + 67/35 + 125/63 + 2/1 diff --git a/scales/yarman31d-rational.scl b/scales/yarman31d-rational.scl new file mode 100644 index 0000000..8daee37 --- /dev/null +++ b/scales/yarman31d-rational.scl @@ -0,0 +1,36 @@ +! yarman31d-rational.scl +! +Yarman24d extended to 31 notes using missing "comma" flats and sharps --rationalized + 31 +! + 52/51 + 21/20 + 38/35 + 19/17 + 9/8 + 33/29 + 58/49 + 11/9 + 69/56 + 96/77 + 75/59 + 54/41 + 4/3 + 86/63 + 88/63 + 75/52 + 148/99 + 3/2 + 32/21 + 52/33 + 18/11 + 187/112 + 27/16 + 17/10 + 16/9 + 42/23 + 13/7 + 144/77 + 67/35 + 125/63 + 2/1 diff --git a/scales/yarman36a_nr1-438hz.scl b/scales/yarman36a_nr1-438hz.scl new file mode 100644 index 0000000..9501a14 --- /dev/null +++ b/scales/yarman36a_nr1-438hz.scl @@ -0,0 +1,41 @@ +! yarman36a_nr1-438hz.scl +! +Triplex Modified Meantone Temperaments spaced at 11/9 from G and 5/3 from C#, A=438.410457150843 + 36 +! + 48.96259 + 80.00646 + 97.64100 + 153.15171 + 182.37782 + 198.74700 + 250.59060 + 281.92285 + 303.63800 + 352.33605 + 381.64137 + 396.07800 + 452.58771 + 483.95429 + 501.35600 + 550.22657 + 579.63309 + 594.11900 + 654.22784 + 683.40325 + 699.74400 + 748.76828 + 779.85037 + 801.68300 + 853.08301 + 882.34301 + 896.75700 + 950.63271 + 981.99929 + 1001.88000 + 1050.68187 + 1080.04783 + 1094.51400 + 1154.54271 + 1185.90929 + 2/1 diff --git a/scales/yarman36a_nr2-440hz.scl b/scales/yarman36a_nr2-440hz.scl new file mode 100644 index 0000000..5a40fb2 --- /dev/null +++ b/scales/yarman36a_nr2-440hz.scl @@ -0,0 +1,41 @@ +! yarman36a_nr2-440hz.scl +! +Triplex Modified Meantone Temperaments spaced at 11/9 from G and 5/3 from C#, A=440hz + 36 +! + 49.00387 + 80.13584 + 97.69851 + 153.14268 + 182.46279 + 198.76517 + 250.55573 + 281.97397 + 303.60369 + 352.34400 + 381.74329 + 396.11994 + 452.55968 + 484.01222 + 501.34433 + 550.25621 + 579.75667 + 594.18216 + 654.20794 + 683.47738 + 699.75195 + 748.81734 + 779.98749 + 801.73311 + 853.08125 + 882.43524 + 896.79001 + 950.60468 + 982.05722 + 1001.85971 + 1050.70282 + 1080.16273 + 1094.56865 + 1154.51469 + 1185.96722 + 2/1 diff --git a/scales/yarman36b.scl b/scales/yarman36b.scl new file mode 100644 index 0000000..300a7a5 --- /dev/null +++ b/scales/yarman36b.scl @@ -0,0 +1,41 @@ +! yarman36b.scl +! +12-tone bike-chains equally dividing the 441/220 octave like yarman36a + 36 +! + 50.16400 + 81.40100 + 100.32800 + 150.49100 + 181.72900 + 200.65500 + 250.81900 + 282.05600 + 300.98300 + 351.14600 + 550/441 + 401.31000 + 451.47400 + 482.71100 + 501.63800 + 551.80100 + 583.03900 + 601.96500 + 652.12900 + 683.36600 + 702.29300 + 752.45600 + 783.69400 + 802.62000 + 852.78400 + 884.02100 + 902.94800 + 953.11100 + 984.34900 + 1003.27500 + 1053.43900 + 1084.67600 + 1103.60300 + 1153.76600 + 1185.00400 + 441/220 diff --git a/scales/yarman36c.scl b/scales/yarman36c.scl new file mode 100644 index 0000000..5510caa --- /dev/null +++ b/scales/yarman36c.scl @@ -0,0 +1,41 @@ +! yarman36c.scl +! +With proportional beat rates and 441/220 octave in the manner of yarman36b + 36 +! + 121000/117649 + 3327500/3176523 + 99.15000 + 12/11 + 10/9 + 55/49 + 6655000/5764801 + 183012500/155649627 + 7203/6050 + 60/49 + 550/441 + 3025/2401 + 449.76700 + 481.53300 + 147/110 + 3300/2401 + 30250/21609 + 166375/117649 + 882/605 + 49/33 + 3/2 + 181500/117649 + 1663750/1058841 + 802.21100 + 18/11 + 5/3 + 165/98 + 9982500/5764801 + 91506250/51883209 + 21609/12100 + 90/49 + 275/147 + 9075/4802 + 1152.82700 + 1184.59400 + 441/220 diff --git a/scales/yarman_17etx3.scl b/scales/yarman_17etx3.scl new file mode 100644 index 0000000..8b52506 --- /dev/null +++ b/scales/yarman_17etx3.scl @@ -0,0 +1,56 @@ +! yarman_17etx3.scl +! +Three times 17-tET -15.482 and -35.294 cents apart by Ozan Yarman + 51 +! + 35.29412 + 55.10620 + 70.58824 + 105.88235 + 125.69444 + 141.17647 + 176.47059 + 196.28267 + 211.76471 + 247.05882 + 7/6 + 282.35294 + 317.64706 + 337.45914 + 352.94118 + 388.23529 + 408.04738 + 423.52941 + 458.82353 + 478.63561 + 494.11765 + 529.41176 + 549.22385 + 564.70588 + 600.00000 + 619.81208 + 635.29412 + 670.58824 + 690.40032 + 705.88235 + 741.17647 + 760.98855 + 776.47059 + 811.76471 + 831.57679 + 847.05882 + 882.35294 + 902.16502 + 917.64706 + 952.94118 + 972.75326 + 988.23529 + 1023.52941 + 1043.34149 + 1058.82353 + 1094.11765 + 1113.92973 + 1129.41176 + 1164.70588 + 1184.51796 + 2/1 diff --git a/scales/yarman_19etx2.scl b/scales/yarman_19etx2.scl new file mode 100644 index 0000000..30c4c46 --- /dev/null +++ b/scales/yarman_19etx2.scl @@ -0,0 +1,43 @@ +! yarman_19etx2.scl +! +Two 19-tone equal scales 14.239 cents apart by Ozan Yarman + 38 +! + 14.23933 + 63.15789 + 77.39722 + 126.31579 + 140.55512 + 189.47368 + 203.71301 + 252.63158 + 7/6 + 315.78947 + 330.02880 + 378.94737 + 393.18670 + 442.10526 + 456.34459 + 505.26316 + 519.50248 + 568.42105 + 582.66038 + 631.57895 + 645.81827 + 694.73684 + 708.97617 + 757.89474 + 772.13406 + 821.05263 + 835.29196 + 884.21053 + 898.44985 + 947.36842 + 961.60775 + 1010.52632 + 1024.76564 + 1073.68421 + 1087.92354 + 1136.84211 + 1151.08143 + 2/1 diff --git a/scales/yarman_19etx3.scl b/scales/yarman_19etx3.scl new file mode 100644 index 0000000..b181f83 --- /dev/null +++ b/scales/yarman_19etx3.scl @@ -0,0 +1,62 @@ +! yarman_19etx3.scl +! +Three 19-tone equal scales 14.239 and 24.459 cents apart respectively by Ozan Yarman + 57 +! + 14.23933 + 38.69861 + 63.15789 + 77.39722 + 101.85651 + 126.31579 + 140.55512 + 165.01440 + 189.47368 + 203.71301 + 228.17229 + 252.63158 + 7/6 + 291.33019 + 315.78947 + 330.02880 + 354.48808 + 378.94737 + 393.18670 + 417.64598 + 442.10526 + 456.34459 + 480.80387 + 505.26316 + 519.50248 + 543.96177 + 568.42105 + 582.66038 + 607.11966 + 631.57895 + 645.81827 + 670.27756 + 694.73684 + 708.97617 + 733.43545 + 757.89474 + 772.13406 + 796.59335 + 821.05263 + 835.29196 + 859.75124 + 884.21053 + 898.44985 + 922.90914 + 947.36842 + 961.60775 + 986.06703 + 1010.52632 + 1024.76564 + 1049.22493 + 1073.68421 + 1087.92354 + 1112.38282 + 1136.84211 + 1151.08143 + 1175.54072 + 2/1 diff --git a/scales/yarman_23etx2.scl b/scales/yarman_23etx2.scl new file mode 100644 index 0000000..2c1c15b --- /dev/null +++ b/scales/yarman_23etx2.scl @@ -0,0 +1,51 @@ +! yarman_23etx2.scl +! +Two 23-tone equal scales 23.694 cents apart by Ozan Yarman + 46 +! + 23.69413 + 52.17391 + 75.86804 + 104.34783 + 128.04196 + 156.52174 + 180.21587 + 208.69565 + 232.38978 + 260.86957 + 284.56370 + 313.04348 + 336.73761 + 365.21739 + 388.91152 + 417.39130 + 441.08544 + 469.56522 + 493.25935 + 521.73913 + 545.43326 + 573.91304 + 597.60717 + 626.08696 + 649.78109 + 678.26087 + 3/2 + 730.43478 + 754.12891 + 782.60870 + 806.30283 + 834.78261 + 858.47674 + 886.95652 + 910.65065 + 939.13043 + 962.82457 + 991.30435 + 1014.99848 + 1043.47826 + 1067.17239 + 1095.65217 + 1119.34631 + 1147.82609 + 1171.52022 + 2/1 diff --git a/scales/yarman_29etx2.scl b/scales/yarman_29etx2.scl new file mode 100644 index 0000000..6393028 --- /dev/null +++ b/scales/yarman_29etx2.scl @@ -0,0 +1,63 @@ +! yarman_29etx2.scl +! +Two 29-tone equal scales 13.9 cents apart by Ozan Yarman + 58 +! + 13.89992 + 41.37931 + 55.27923 + 82.75862 + 96.65854 + 124.13793 + 138.03785 + 165.51724 + 179.41716 + 206.89655 + 220.79647 + 248.27586 + 262.17578 + 289.65517 + 303.55509 + 331.03448 + 344.93440 + 372.41379 + 5/4 + 413.79310 + 427.69302 + 455.17241 + 469.07233 + 496.55172 + 510.45164 + 537.93103 + 551.83096 + 579.31034 + 593.21027 + 620.68966 + 634.58958 + 662.06897 + 675.96889 + 703.44828 + 717.34820 + 744.82759 + 758.72751 + 786.20690 + 800.10682 + 827.58621 + 841.48613 + 868.96552 + 882.86544 + 910.34483 + 924.24475 + 951.72414 + 965.62406 + 993.10345 + 1007.00337 + 1034.48276 + 1048.38268 + 1075.86207 + 1089.76199 + 1117.24138 + 1131.14130 + 1158.62069 + 1172.52061 + 2/1 diff --git a/scales/yarman_buselik.scl b/scales/yarman_buselik.scl new file mode 100644 index 0000000..b17139a --- /dev/null +++ b/scales/yarman_buselik.scl @@ -0,0 +1,13 @@ +! yarman_buselik.scl +! +8-tone Buselik by Ozan Yarman + 8 +! + 9/8 + 32/27 + 4/3 + 3/2 + 128/81 + 16/9 + 15/8 + 2/1 diff --git a/scales/yarman_hijaz.scl b/scales/yarman_hijaz.scl new file mode 100644 index 0000000..78b873f --- /dev/null +++ b/scales/yarman_hijaz.scl @@ -0,0 +1,13 @@ +! yarman_hijaz.scl +! +8-tone Hijaz by Ozan Yarman + 8 +! + 16/15 + 56/45 + 4/3 + 3/2 + 128/81 + 5/3 + 16/9 + 2/1 diff --git a/scales/yarman_hijazkar.scl b/scales/yarman_hijazkar.scl new file mode 100644 index 0000000..b709d5f --- /dev/null +++ b/scales/yarman_hijazkar.scl @@ -0,0 +1,15 @@ +! yarman_hijazkar.scl +! +Hijazkar/Krdili Hijazkar mixed by Ozan Yarman + 10 +! + 14/13 + 9/8 + 32/27 + 49/39 + 4/3 + 3/2 + 21/13 + 16/9 + 49/26 + 2/1 diff --git a/scales/yarman_karjighar.scl b/scales/yarman_karjighar.scl new file mode 100644 index 0000000..8e7ce5d --- /dev/null +++ b/scales/yarman_karjighar.scl @@ -0,0 +1,14 @@ +! yarman_karjighar.scl +! +9-tone Karjighar by Ozan Yarman + 9 +! + 13/12 + 12/11 + 32/27 + 4/3 + 13/9 + 16/11 + 5/3 + 16/9 + 2/1 diff --git a/scales/yarman_mahur.scl b/scales/yarman_mahur.scl new file mode 100644 index 0000000..624b9ea --- /dev/null +++ b/scales/yarman_mahur.scl @@ -0,0 +1,15 @@ +! yarman_mahur.scl +! +Mahur by Ozan Yarman + 10 +! + 9/8 + 5/4 + 81/64 + 4/3 + 3/2 + 27/16 + 16/9 + 15/8 + 243/128 + 2/1 diff --git a/scales/yarman_nihavend.scl b/scales/yarman_nihavend.scl new file mode 100644 index 0000000..b4a610f --- /dev/null +++ b/scales/yarman_nihavend.scl @@ -0,0 +1,13 @@ +! yarman_nihavend.scl +! +8-tone Nihavend by Ozan Yarman + 8 +! + 9/8 + 6/5 + 4/3 + 3/2 + 8/5 + 9/5 + 15/8 + 2/1 diff --git a/scales/yarman_rast.scl b/scales/yarman_rast.scl new file mode 100644 index 0000000..7c35a77 --- /dev/null +++ b/scales/yarman_rast.scl @@ -0,0 +1,16 @@ +! yarman_rast.scl +! +11-tone Arabian and Turkish Rast/Penchgah by Ozan Yarman + 11 +! + 9/8 + 11/9 + 5/4 + 4/3 + 7/5 + 3/2 + 27/16 + 16/9 + 11/6 + 15/8 + 2/1 diff --git a/scales/yarman_saba.scl b/scales/yarman_saba.scl new file mode 100644 index 0000000..6d5a216 --- /dev/null +++ b/scales/yarman_saba.scl @@ -0,0 +1,17 @@ +! yarman_saba.scl +! +Saba by Ozan Yarman + 12 +! + 12/11 + 10/9 + 9/8 + 13/11 + 14/11 + 9/7 + 3/2 + 52/33 + 39/22 + 21/11 + 27/14 + 2/1 diff --git a/scales/yarman_segah.scl b/scales/yarman_segah.scl new file mode 100644 index 0000000..56712d6 --- /dev/null +++ b/scales/yarman_segah.scl @@ -0,0 +1,15 @@ +! yarman_segah.scl +! +10-tone Segah/Huzzam by Ozan Yarman + 10 +! + 16/15 + 6/5 + 21/16 + 4/3 + 64/45 + 3/2 + 8/5 + 9/5 + 256/135 + 2/1 diff --git a/scales/yarman_ushaq.scl b/scales/yarman_ushaq.scl new file mode 100644 index 0000000..dd5805b --- /dev/null +++ b/scales/yarman_ushaq.scl @@ -0,0 +1,15 @@ +! yarman_ushaq.scl +! +10-tone Ushaq/Huseyni by Ozan Yarman + 10 +! + 13/12 + 12/11 + 32/27 + 4/3 + 3/2 + 128/81 + 13/8 + 18/11 + 16/9 + 2/1 diff --git a/scales/yasser_6.scl b/scales/yasser_6.scl new file mode 100644 index 0000000..7444c8d --- /dev/null +++ b/scales/yasser_6.scl @@ -0,0 +1,11 @@ +! yasser_6.scl +! +Yasser Hexad, 6 of 19 as whole tone scale + 6 +! + 189.47368 + 378.94737 + 568.42105 + 757.89474 + 947.36842 + 2/1 diff --git a/scales/yasser_diat.scl b/scales/yasser_diat.scl new file mode 100644 index 0000000..7013c99 --- /dev/null +++ b/scales/yasser_diat.scl @@ -0,0 +1,17 @@ +! yasser_diat.scl +! +Yasser's Supra-Diatonic, the flat notes are V,W,X,Y,and Z + 12 +! + 126.31579 + 189.47368 + 315.78947 + 378.94737 + 505.26316 + 631.57895 + 694.73684 + 821.05263 + 884.21053 + 1010.52632 + 1073.68421 + 2/1 diff --git a/scales/yasser_ji.scl b/scales/yasser_ji.scl new file mode 100644 index 0000000..16c2329 --- /dev/null +++ b/scales/yasser_ji.scl @@ -0,0 +1,17 @@ +! yasser_ji.scl +! +Yasser's just scale, 2 Yasser hexads, 121/91 apart + 12 +! + 121/112 + 9/8 + 121/104 + 5/4 + 121/91 + 11/8 + 1089/728 + 13/8 + 605/364 + 7/4 + 1331/728 + 2/1 diff --git a/scales/yekta-41.scl b/scales/yekta-41.scl new file mode 100644 index 0000000..7f0cc24 --- /dev/null +++ b/scales/yekta-41.scl @@ -0,0 +1,46 @@ +! yekta-41.scl +! +Yekta-24 extended to 41-quasi equal tones by Ozan Yarman + 41 +! + 26.96206 + 64.43028 + 256/243 + 2187/2048 + 148.81852 + 65536/59049 + 9/8 + 233.20677 + 270.67499 + 32/27 + 19683/16384 + 355.06323 + 8192/6561 + 81/64 + 439.45147 + 2097152/1594323 + 4/3 + 523.83971 + 561.30793 + 1024/729 + 729/512 + 645.69617 + 262144/177147 + 3/2 + 730.08441 + 767.55264 + 128/81 + 6561/4096 + 851.94088 + 32768/19683 + 27/16 + 936.32912 + 8388608/4782969 + 16/9 + 1020.71736 + 1058.18558 + 4096/2187 + 243/128 + 1142.57382 + 1048576/531441 + 2/1 diff --git a/scales/yekta.scl b/scales/yekta.scl new file mode 100644 index 0000000..d901896 --- /dev/null +++ b/scales/yekta.scl @@ -0,0 +1,17 @@ +! yekta.scl +! +Rauf Yekta's 12-tone tuning suggested in 1922 Lavignac Music Encyclopedia + 12 +! + 16/15 + 9/8 + 6/5 + 5/4 + 4/3 + 64/45 + 3/2 + 8/5 + 5/3 + 9/5 + 48/25 + 2/1 diff --git a/scales/young-g.scl b/scales/young-g.scl new file mode 100644 index 0000000..8c154df --- /dev/null +++ b/scales/young-g.scl @@ -0,0 +1,33 @@ +! young-g.scl +! +Gayle Young's Harmonium, see PNM 26(2): 204-212 (1988) + 28 +! + 231.60500 + 11/9 + 463.21100 + 121/81 + 926.42100 + 1331/729 + 1158.02600 + 14641/6561 + 1621.23700 + 161051/59049 + 1852.84200 + 1771561/531441 + 2316.05300 + 19487171/4782969 + 2547.65800 + 214358881/43046721 + 3010.86900 + 3126.67100 + 3242.47400 + 3474.07900 + 3705.68500 + 3821.48700 + 3937.29000 + 4168.89500 + 4400.50100 + 4516.30300 + 4632.10600 + 4863.71100 diff --git a/scales/young-lm_guitar.scl b/scales/young-lm_guitar.scl new file mode 100644 index 0000000..d0e3b62 --- /dev/null +++ b/scales/young-lm_guitar.scl @@ -0,0 +1,17 @@ +! young-lm_guitar.scl +! +LaMonte Young, tuning of For Guitar '58. 1/1 March '92, inv.of Mersenne lute 1 + 12 +! + 16/15 + 10/9 + 6/5 + 5/4 + 4/3 + 45/32 + 3/2 + 8/5 + 5/3 + 9/5 + 15/8 + 2/1 diff --git a/scales/young-lm_piano.scl b/scales/young-lm_piano.scl new file mode 100644 index 0000000..bcd3096 --- /dev/null +++ b/scales/young-lm_piano.scl @@ -0,0 +1,17 @@ +! young-lm_piano.scl +! +LaMonte Young's Well-Tuned Piano + 12 +! + 567/512 + 9/8 + 147/128 + 21/16 + 1323/1024 + 189/128 + 3/2 + 49/32 + 7/4 + 441/256 + 63/32 + 2/1 diff --git a/scales/young-w10.scl b/scales/young-w10.scl new file mode 100644 index 0000000..c3ab454 --- /dev/null +++ b/scales/young-w10.scl @@ -0,0 +1,15 @@ +! young-w10.scl +! +William Lyman Young 10 out of 24-tET (1961) + 10 +! + 100.00000 + 250.00000 + 350.00000 + 500.00000 + 600.00000 + 700.00000 + 850.00000 + 950.00000 + 1100.00000 + 2/1 diff --git a/scales/young-w14.scl b/scales/young-w14.scl new file mode 100644 index 0000000..ad8399e --- /dev/null +++ b/scales/young-w14.scl @@ -0,0 +1,19 @@ +! young-w14.scl +! +William Lyman Young 14 out of 24-tET (1961) + 14 +! + 100.00000 + 200.00000 + 250.00000 + 350.00000 + 450.00000 + 550.00000 + 600.00000 + 700.00000 + 800.00000 + 850.00000 + 950.00000 + 1050.00000 + 1150.00000 + 2/1 diff --git a/scales/young-wt.scl b/scales/young-wt.scl new file mode 100644 index 0000000..85e0860 --- /dev/null +++ b/scales/young-wt.scl @@ -0,0 +1,12 @@ +! young-wt.scl +! +William Lyman Young "exquisite 3/4 tone Hellenic Lyre" dorian + 7 +! + 12/11 + 13/11 + 4/3 + 3/2 + 18/11 + 39/22 + 2/1 diff --git a/scales/young.scl b/scales/young.scl new file mode 100644 index 0000000..620b4ca --- /dev/null +++ b/scales/young.scl @@ -0,0 +1,17 @@ +! young.scl +! +Thomas Young well temperament (1807), also Luigi Malerbi nr.2 (1794) + 12 +! + 256/243 + 196.09000 + 32/27 + 392.18000 + 4/3 + 1024/729 + 698.04500 + 128/81 + 894.13500 + 16/9 + 1090.22500 + 2/1 diff --git a/scales/young1.scl b/scales/young1.scl new file mode 100644 index 0000000..07a87b4 --- /dev/null +++ b/scales/young1.scl @@ -0,0 +1,17 @@ +! young1.scl +! +Thomas Young well temperament no.1 (1800), 1/12 and 3/16 synt. comma + 12 +! + 100000/94723 + 12500/11163 + 100000/84197 + 12500/9969 + 100000/74921 + 100000/71041 + 50000/33411 + 25000/15787 + 25000/14919 + 100000/56131 + 12500/6653 + 2/1 diff --git a/scales/young2.scl b/scales/young2.scl new file mode 100644 index 0000000..2e47a49 --- /dev/null +++ b/scales/young2.scl @@ -0,0 +1,17 @@ +! young2.scl +! +Thomas Young well temperament no.2 (1799) + 12 +! + 94.13500 + 196.09000 + 298.04500 + 392.18000 + 500.00000 + 592.18000 + 698.04500 + 796.09000 + 894.13500 + 1000.00000 + 1092.18000 + 2/1 diff --git a/scales/yugo_bagpipe.scl b/scales/yugo_bagpipe.scl new file mode 100644 index 0000000..05390bb --- /dev/null +++ b/scales/yugo_bagpipe.scl @@ -0,0 +1,17 @@ +! yugo_bagpipe.scl +! +Yugoslavian Bagpipe + 12 +! + 99.00000 + 202.00000 + 362.00000 + 463.00000 + 655.00000 + 754.00000 + 861.00000 + 949.00000 + 991.00000 + 1047.00000 + 1129.00000 + 2/1 diff --git a/scales/zalzal.scl b/scales/zalzal.scl new file mode 100644 index 0000000..6ea7f6f --- /dev/null +++ b/scales/zalzal.scl @@ -0,0 +1,12 @@ +! zalzal.scl +! +Tuning of popular flute by Al Farabi & Zalzal. First tetrachord is modern Rast + 7 +! + 9/8 + 27/22 + 4/3 + 3/2 + 18/11 + 16/9 + 2/1 diff --git a/scales/zalzal2.scl b/scales/zalzal2.scl new file mode 100644 index 0000000..ec4d373 --- /dev/null +++ b/scales/zalzal2.scl @@ -0,0 +1,12 @@ +! zalzal2.scl +! +Zalzal's Scale, a medieval Islamic with Ditone Diatonic & 10/9 x 13/12 x 72/65 + 7 +! + 9/8 + 81/64 + 4/3 + 40/27 + 130/81 + 16/9 + 2/1 diff --git a/scales/zapf-dent.scl b/scales/zapf-dent.scl new file mode 100644 index 0000000..08c44a9 --- /dev/null +++ b/scales/zapf-dent.scl @@ -0,0 +1,17 @@ +! zapf-dent.scl +! +Thomas Dent, theoretical Zapf temperament, 1/13P (2005) + 12 +! + 101.05269 + 196.69154 + 301.35346 + 396.99231 + 501.65423 + 600.90231 + 698.34577 + 801.20308 + 895.03731 + 1001.50385 + 1098.94731 + 2/1 diff --git a/scales/zapf.scl b/scales/zapf.scl new file mode 100644 index 0000000..d28916b --- /dev/null +++ b/scales/zapf.scl @@ -0,0 +1,17 @@ +! zapf.scl +! +Michael Zapf Bach temperament (2001) + 12 +! + 132449/125000 + 28/25 + 148693/125000 + 1257/1000 + 166967/125000 + 353531/250000 + 187/125 + 24803/15625 + 419/250 + 222789/125000 + 29461/15625 + 2/1 diff --git a/scales/zarlino2.scl b/scales/zarlino2.scl new file mode 100644 index 0000000..2d1e9d6 --- /dev/null +++ b/scales/zarlino2.scl @@ -0,0 +1,21 @@ +! zarlino2.scl +! +16-note choice system of Zarlino, Sopplimenti musicali (1588) + 16 +! + 25/24 + 10/9 + 9/8 + 32/27 + 6/5 + 5/4 + 4/3 + 25/18 + 45/32 + 3/2 + 25/16 + 5/3 + 16/9 + 9/5 + 15/8 + 2/1 diff --git a/scales/zarte24-volans_b.scl b/scales/zarte24-volans_b.scl new file mode 100644 index 0000000..d440c13 --- /dev/null +++ b/scales/zarte24-volans_b.scl @@ -0,0 +1,12 @@ +! zarte24-volans_b.scl +! +Equable heptatonic like volans.scl (reported African scale) + 7 +! + 171.22411 + 362.84480 + 504.18966 + 675.41376 + 867.03446 + 1058.65515 + 2/1 diff --git a/scales/zartehijaz1.scl b/scales/zartehijaz1.scl new file mode 100644 index 0000000..7a503f4 --- /dev/null +++ b/scales/zartehijaz1.scl @@ -0,0 +1,14 @@ +! zartehijaz1.scl +! +Scale from Zarlino temperament extraordinaire -- lower Hijaz tetrachord + 9 +! + 120.94826 + 433.51722 + 504.18965 + 625.13792 + 708.37930 + 925.13792 + 1008.37930 + 1129.32757 + 2/1 diff --git a/scales/zesster_a.scl b/scales/zesster_a.scl new file mode 100644 index 0000000..14a697f --- /dev/null +++ b/scales/zesster_a.scl @@ -0,0 +1,13 @@ +! zesster_a.scl +! +Harmonic six-star, group A, from Fokker + 8 +! + 16/15 + 6/5 + 32/25 + 4/3 + 3/2 + 8/5 + 48/25 + 2/1 diff --git a/scales/zesster_b.scl b/scales/zesster_b.scl new file mode 100644 index 0000000..b19ad73 --- /dev/null +++ b/scales/zesster_b.scl @@ -0,0 +1,13 @@ +! zesster_b.scl +! +Harmonic six-star, group B, from Fokker + 8 +! + 28/25 + 8/7 + 32/25 + 7/5 + 8/5 + 7/4 + 64/35 + 2/1 diff --git a/scales/zesster_c.scl b/scales/zesster_c.scl new file mode 100644 index 0000000..5303b1d --- /dev/null +++ b/scales/zesster_c.scl @@ -0,0 +1,13 @@ +! zesster_c.scl +! +Harmonic six-star, group C on Eb, from Fokker + 8 +! + 8/7 + 7/6 + 4/3 + 32/21 + 14/9 + 7/4 + 16/9 + 2/1 diff --git a/scales/zesster_mix.scl b/scales/zesster_mix.scl new file mode 100644 index 0000000..5657d2c --- /dev/null +++ b/scales/zesster_mix.scl @@ -0,0 +1,21 @@ +! zesster_mix.scl +! +Harmonic six-star, groups A, B and C mixed, from Fokker + 16 +! + 21/20 + 16/15 + 28/25 + 8/7 + 6/5 + 32/25 + 4/3 + 48/35 + 7/5 + 3/2 + 8/5 + 7/4 + 64/35 + 28/15 + 48/25 + 2/1 diff --git a/scales/zest24-persian_Eb.scl b/scales/zest24-persian_Eb.scl new file mode 100644 index 0000000..ec84338 --- /dev/null +++ b/scales/zest24-persian_Eb.scl @@ -0,0 +1,22 @@ +! zest24-persian_Eb.scl +! +Version somewhat like Darius Anooshfar's persian.scl, Eb-Eb + 17 +! + 95.81035 + 146.08618 + 216.75861 + 287.43104 + 337.70688 + 408.37931 + 491.62069 + 541.89653 + 650.27584 + 708.37931 + 791.62069 + 841.89653 + 912.56896 + 983.24139 + 1033.51722 + 1104.18965 + 2/1 diff --git a/scales/zest24-supergoya17plus3_Db.scl b/scales/zest24-supergoya17plus3_Db.scl new file mode 100644 index 0000000..80f087f --- /dev/null +++ b/scales/zest24-supergoya17plus3_Db.scl @@ -0,0 +1,25 @@ +! zest24-supergoya17plus3_Db.scl +! +Goya-17 plus 484, 676, and 1180 cents + 20 +! + 50.39062 + 171.09375 + 216.79688 + 267.18750 + 363.28125 + 433.59375 + 483.98437 + 503.90625 + 554.29688 + 625.78125 + 676.17187 + 707.81250 + 758.20312 + 867.18750 + 925.78125 + 976.17188 + 1059.37500 + 1129.68750 + 1180.07812 + 2/1 diff --git a/scales/zest24.scl b/scales/zest24.scl new file mode 100644 index 0000000..fee4a27 --- /dev/null +++ b/scales/zest24.scl @@ -0,0 +1,29 @@ +! zest24.scl +! +Zarlino Extraordinaire Spectrum Temperament (two circles at ~50.28c apart) + 24 +! + 50.27584 + 25/24 + 120.94826 + 191.62069 + 241.89653 + 287.43104 + 337.70688 + 383.24139 + 433.51722 + 504.18965 + 554.46549 + 574.86208 + 625.13792 + 695.81035 + 746.08619 + 779.05173 + 829.32757 + 887.43104 + 937.70688 + 995.81035 + 1046.08619 + 1079.05173 + 48/25 + 2/1 diff --git a/scales/zeta12.scl b/scales/zeta12.scl new file mode 100644 index 0000000..11cd684 --- /dev/null +++ b/scales/zeta12.scl @@ -0,0 +1,17 @@ +! zeta12.scl +! +Margo Schulter's Zeta Centauri tuning inspired by Kraig Grady's Centaur +12 +! +13/12 +9/8 +7/6 +11/9 +4/3 +13/9 +3/2 +14/9 +13/8 +7/4 +11/6 +2/1 diff --git a/scales/zeus22.scl b/scales/zeus22.scl new file mode 100644 index 0000000..673386b --- /dev/null +++ b/scales/zeus22.scl @@ -0,0 +1,53 @@ +! zeus22.scl +Zeus[22] hobbit (121/120&176/175) in POTE tuning +22 +! +47.21796 +109.87010 +157.08806 +230.88883 +266.95816 +314.17612 +387.97689 +424.04622 +497.84699 +545.06495 +592.28291 +654.93505 +702.15301 +775.95378 +812.02311 +885.82388 +933.04184 +969.11117 +1042.91194 +1090.12990 +1152.78204 +2/1 +! +!! prezeus22.scl +! Zeus[22] transversal +! 22 +!! +! 33/32 +! 16/15 +! 11/10 +! 8/7 +! 64/55 +! 77/64 +! 5/4 +! 14/11 +! 4/3 +! 11/8 +! 45/32 +! 16/11 +! 3/2 +! 11/7 +! 8/5 +! 5/3 +! 55/32 +! 7/4 +! 11/6 +! 15/8 +! 64/33 +! 2/1 diff --git a/scales/zeus24.scl b/scales/zeus24.scl new file mode 100644 index 0000000..70dd261 --- /dev/null +++ b/scales/zeus24.scl @@ -0,0 +1,57 @@ +! zeus24.scl +Zeus[24] hobbit (121/120&176/175) in POTE tuning +24 +! +47.21796 +109.87010 +157.08806 +204.30602 +230.88883 +314.17612 +340.75893 +387.97689 +471.26418 +497.84699 +545.06495 +592.28291 +654.93505 +702.15301 +728.73582 +812.02311 +859.24107 +885.82388 +969.11117 +995.69398 +1042.91194 +1090.12990 +1152.78204 +2/1 +! +!! prezeus24.scl +! Zeus[24] transversal +! 24 +!! +! 33/32 +! 16/15 +! 11/10 +! 9/8 +! 8/7 +! 77/64 +! 11/9 +! 5/4 +! 21/16 +! 4/3 +! 11/8 +! 45/32 +! 16/11 +! 3/2 +! 32/21 +! 8/5 +! 18/11 +! 5/3 +! 7/4 +! 16/9 +! 11/6 +! 15/8 +! 64/33 +! 2/1 diff --git a/scales/zeus7tri.scl b/scales/zeus7tri.scl new file mode 100644 index 0000000..90d3df5 --- /dev/null +++ b/scales/zeus7tri.scl @@ -0,0 +1,12 @@ +! zeus7tri.scl +! +Trivalent scale in Zeus temperament; thirds are all {7/6, 6/5, 5/4}; 99-tET tuning; aabacab + 7 +! + 157.57576 + 387.87879 + 545.45455 + 703.03030 + 933.33333 + 1090.90909 + 2/1 diff --git a/scales/zeus8tri.scl b/scales/zeus8tri.scl new file mode 100644 index 0000000..e0fe82f --- /dev/null +++ b/scales/zeus8tri.scl @@ -0,0 +1,15 @@ +! zeus8tri.scl +! +Zeus tempered scale with 3DE property, 99-tET tuning, mmmLmmms +! Zeus tempering of [11/10, 6/5, 21/16, 16/11, 8/5, 7/4, 21/11, 2] +! x^8-25*x^6-80*x^5-96*x^4-32*x^3+27*x^2+24*x+5 +8 +! +157.57576 +315.15152 +472.72727 +654.54545 +812.12121 +969.69697 +1127.27273 +2/1 diff --git a/scales/zex46.scl b/scales/zex46.scl new file mode 100644 index 0000000..56173b8 --- /dev/null +++ b/scales/zex46.scl @@ -0,0 +1,50 @@ +! zex46.scl +Irregularized Zeus[46] +46 +! +28.33875 +41.16704 +81.61141 +111.37562 +124.80835 +165.36701 +179.97913 +206.77878 +233.15439 +262.33955 +292.04377 +317.08727 +345.96268 +358.95122 +387.24885 +413.66213 +455.78605 +468.92545 +496.90806 +524.83768 +550.91313 +579.90790 +608.70773 +619.92459 +648.48030 +676.93569 +704.24523 +730.46450 +745.19773 +784.12172 +813.97384 +842.91988 +855.96307 +882.81135 +910.30462 +937.71060 +965.34598 +994.93919 +1007.69822 +1047.79510 +1061.86499 +1090.28385 +1115.07901 +1144.26117 +1172.81258 +2/1 diff --git a/scales/zir_bouzourk.scl b/scales/zir_bouzourk.scl new file mode 100644 index 0000000..5f93054 --- /dev/null +++ b/scales/zir_bouzourk.scl @@ -0,0 +1,11 @@ +! zir_bouzourk.scl +! +Zirafkend Bouzourk (IG #3, DF #9), from both Rouanet and Safi al-Din + 6 +! + 14/13 + 7/6 + 6/5 + 27/20 + 3/2 + 2/1 diff --git a/scales/zwolle.scl b/scales/zwolle.scl new file mode 100644 index 0000000..85d04c7 --- /dev/null +++ b/scales/zwolle.scl @@ -0,0 +1,17 @@ +! zwolle.scl +! +Henri Arnaut De Zwolle. Pythagorean on G flat. + 12 +! + 256/243 + 9/8 + 32/27 + 81/64 + 4/3 + 1024/729 + 3/2 + 128/81 + 27/16 + 16/9 + 243/128 + 2/1 diff --git a/scales/zwolle2.scl b/scales/zwolle2.scl new file mode 100644 index 0000000..c71e7f4 --- /dev/null +++ b/scales/zwolle2.scl @@ -0,0 +1,17 @@ +! zwolle2.scl +! +Henri Arnaut De Zwolle's modified meantone tuning (c. 1440) + 12 +! + 76.04900 + 193.15686 + 303.09595 + 5/4 + 503.42157 + 579.47057 + 696.57843 + 25/16 + 889.73529 + 1003.25876 + 1082.89214 + 2/1 diff --git a/svg2shenzhen/.DS_Store b/svg2shenzhen/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/svg2shenzhen/.DS_Store differ diff --git a/svg2shenzhen/bitmap2component_linux64 b/svg2shenzhen/bitmap2component_linux64 new file mode 100644 index 0000000..ce8ee62 Binary files /dev/null and b/svg2shenzhen/bitmap2component_linux64 differ diff --git a/svg2shenzhen/bitmap2component_osx b/svg2shenzhen/bitmap2component_osx new file mode 100644 index 0000000..8ed156e Binary files /dev/null and b/svg2shenzhen/bitmap2component_osx differ diff --git a/svg2shenzhen/export.py b/svg2shenzhen/export.py new file mode 100644 index 0000000..36101de --- /dev/null +++ b/svg2shenzhen/export.py @@ -0,0 +1,752 @@ +#! /usr/bin/env python + +import inkex +import os +import subprocess +import tempfile +import shutil +import copy +import platform +import simplepath +import simpletransform +from simplestyle import * +import cubicsuperpath +import cspsubdiv +import webbrowser +import hashlib +import xml.etree.ElementTree as ET +import pickle +from copy import deepcopy + + +EXPORT_PNG_MAX_PROCESSES = 3 +EXPORT_KICAD_MAX_PROCESSES = 2 + +PCB_HEADER = ''' +(kicad_pcb (version 4) (host pcbnew 4.0.7) + + (general + (links 0) + (no_connects 0) + (area 77.052499 41.877835 92.193313 53.630501) + (thickness 1.6) + (drawings 8) + (tracks 0) + (zones 0) + (modules 1) + (nets 1) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.15) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0.2) + (aux_axis_origin 0 0) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010f0_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory gerbers/)) + ) + + (net 0 "") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + ) +''' + +PCB_FOOTER = ''' +) +''' + +PCB_LIB_TABLE = ''' +(fp_lib_table + (lib (name "{name}")(type KiCad)(uri "$(KIPRJMOD)/{folder}")(options "")(descr "")) +) +''' + +PCB_PROJECT_FILE = ''' +update=2018 March 15, Thursday 14:41:19 +version=1 +last_client=kicad +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[general] +version=1 +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=transistors +LibName4=conn +LibName5=linear +LibName6=regul +LibName7=74xx +LibName8=cmos4000 +LibName9=adc-dac +LibName10=memory +LibName11=xilinx +LibName12=microcontrollers +LibName13=dsp +LibName14=microchip +LibName15=analog_switches +LibName16=motorola +LibName17=texas +LibName18=intel +LibName19=audio +LibName20=interface +LibName21=digital-audio +LibName22=philips +LibName23=display +LibName24=cypress +LibName25=siliconi +LibName26=opto +LibName27=atmel +LibName28=contrib +LibName29=valves +''' + +MODULE_INVIS_REF_HEADER = ''' +(fp_text reference Ref** (at 0 0) (layer F.SilkS) hide +(effects (font (size 1.27 1.27) (thickness 0.15))) +) +(fp_text value Val** (at 0 0) (layer F.SilkS) hide +(effects (font (size 1.27 1.27) (thickness 0.15))) +) +''' + +IDENTITY_MATRIX = [[1.0,0.0,0.0],[0.0,1.0,0.0]] + + +LIBRARY_TABLE_FILE = "fp-lib-table" +EXPORT_IMAGE_FOLDER = "images" +EXPORT_CACHE_FOLDER = ".svg2shenzhen-cache" + + +class Svg2ShenzhenExport(inkex.Effect): + def __init__(self): + """init the effect library and get options from gui""" + inkex.Effect.__init__(self) + self.OptionParser.add_option("--path", action="store", type="string", dest="path", default="~/", help="") + self.OptionParser.add_option('-f', '--filetype', action='store', type='string', dest='filetype', default='jpeg', help='Exported file type') + self.OptionParser.add_option("--crop", action="store", type="inkbool", dest="crop", default=False) + self.OptionParser.add_option("--dpi", action="store", type="float", dest="dpi", default=600) + self.OptionParser.add_option("--threshold", action="store", type="float", dest="threshold", default=128.0) + self.OptionParser.add_option("--openfactory", action="store", type="inkbool", dest="openfactory", default="true") + self.OptionParser.add_option("--openkicad", action="store", type="inkbool", dest="openkicad", default="true") + self.OptionParser.add_option("--autoflatten", action="store", type="inkbool", dest="autoflatten", default="true") + self.OptionParser.add_option("--debug", action="store", type="inkbool", dest="debug", default=False) + + + self.doc_width = 0 + self.doc_height = 0 + + self.bb_width_center = 0 + self.bb_height_center = 0 + self.bb_scaling_w = 0 + self.bb_scaling_h = 0 + + self.layer_map = { + #'inkscape-name' : 'kicad-name', + 'F.Cu' : 'F.Cu', + 'B.Cu' : 'B.Cu', + 'B.Adhes' : 'B.Adhes', + 'F.Adhes' : 'F.Adhes', + 'B.Paste' : 'B.Paste', + 'F.Paste' : 'F.Paste', + 'B.SilkS' : 'B.SilkS', + 'F.SilkS' : 'F.SilkS', + 'B.Mask' : 'B.Mask', + 'F.Mask' : 'F.Mask', + 'Dwgs.User' : 'Dwgs.User', + 'Cmts.User' : 'Cmts.User', + 'Eco1.User' : 'Eco1.User', + 'Eco2.User' : 'Eco2.User', + 'Margin' : 'Margin', + 'B.CrtYd' : 'B.CrtYd', + 'F.CrtYd' : 'F.CrtYd', + 'B.Fab' : 'B.Fab', + 'F.Fab' : 'F.Fab', + # The following layers are here for backward compatibility: + 'B.Silk' : 'B.SilkS', + 'F.Silk' : 'F.SilkS', + # 'Edge.Cuts' : "Edge.Cuts" + } + + + def coordToKicad(self,XYCoord): + return [ + (XYCoord[0]-self.bb_width_center)/self.bb_scaling_w, + (XYCoord[1]-self.bb_height_center)/self.bb_scaling_h, + ] + + def setInkscapeScaling(self): + + root = self.document.getroot() + height = float(root.get('height').replace("mm", "")) + width = float(root.get('width').replace("mm", "")) + + self.doc_width = width + self.doc_height = height + + viewbox = root.attrib['viewBox'].split(' ') + viewbox_h = float(viewbox[-1]) + viewbox_w = float(viewbox[-2]) + + self.bb_width_center = viewbox_w/2 + self.bb_height_center = viewbox_h/2 + self.bb_scaling_w = viewbox_w/width + self.bb_scaling_h = viewbox_h/height + + def setDocumentSquare(self): + root = self.document.getroot() + height = float(root.attrib['height'].replace("mm", "")) + width = float(root.attrib['width'].replace("mm", "")) + + if (width > height): + root.attrib['height'] = str(width) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (width, width) + else: + root.attrib['width'] = str(height) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (height, height) + + def findLayer(self, layerName, contains=False): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if ((layer.attrib[label_attrib_name] == layerName) and (contains == False)): + return layer + elif ((layerName in layer.attrib[label_attrib_name]) and (contains == True)): + return layer + + return False + + def effect(self): + # self.setDocumentSquare() + self.setInkscapeScaling() + self.processAutoMasks() + self.processExportLayer() + if (self.options.openfactory): + webbrowser.open("https://www.pcbway.com/setinvite.aspx?inviteid=54747", new = 2) + + def processAutoMasks(self): + self.processAutoMaskFromTo("F.Cu", "F.Mask-auto") + self.processAutoMaskFromTo("B.Cu", "B.Mask-auto") + + def processAutoMaskFromTo(self, from_layer, to_layer): + copper_layer = self.findLayer(from_layer, False) + cpmask_layer = self.findLayer(to_layer, True) + # copper_layer = cpmask_layer + if (copper_layer != False and cpmask_layer != False): + for node in cpmask_layer.xpath("*", namespaces=inkex.NSS): + cpmask_layer.remove(node) + for node in copper_layer.xpath("*", namespaces=inkex.NSS): + cpmask_layer.append(deepcopy(node)) + + + def processExportLayer(self): + options = self.options + + output_path = os.path.expanduser(options.path) + curfile = self.args[-1] + layers = self.get_layers(curfile) + name = self.get_name() + kicad_pcb_file = "{}.kicad_pcb".format(name) + library_folder = "{}.pretty".format(name) + kicad_project_file = "{}.pro".format(name) + kicad_mod_file = "{}.kicad_mod".format(name) + kicad_mod_files = [] + + cache_folder_path = os.path.join(output_path, EXPORT_CACHE_FOLDER) + + if options.filetype == "png": + image_folder_path = output_path + else: + image_folder_path = os.path.join(cache_folder_path, EXPORT_IMAGE_FOLDER) + + if options.filetype == "kicad_pcb": + library_folder_path = os.path.join(output_path, library_folder) + else: + library_folder_path = os.path.join(cache_folder_path, library_folder) + + if not os.path.exists(output_path): + os.makedirs(output_path) + if not os.path.exists(library_folder_path): + os.makedirs(library_folder_path) + if not os.path.exists(image_folder_path): + os.makedirs(image_folder_path) + if not os.path.exists(cache_folder_path): + os.makedirs(cache_folder_path) + + kicad_pcb_path = os.path.join(output_path, kicad_pcb_file ) + kicad_lib_path = os.path.join(output_path, LIBRARY_TABLE_FILE) + kicad_pro_path = os.path.join(output_path, kicad_project_file ) + kicad_mod_path = os.path.join(output_path, kicad_mod_file) + + options_path = os.path.join(cache_folder_path, 'options.pickle') + + if os.path.exists(options_path): + with open(options_path, 'r') as f: + prev_options = pickle.load(f) + dpi_equal = prev_options.dpi == options.dpi + path_equal = prev_options.path == options.path + crop_equal = prev_options.crop == options.crop + filetype_equal = prev_options.filetype == options.filetype + threshold_equal = prev_options.threshold == options.threshold + ignore_hashes = not dpi_equal or not path_equal or not crop_equal or not filetype_equal or not threshold_equal + else: + ignore_hashes = True + + with open(options_path, 'w') as f: + pickle.dump(options, f) + + layer_arguments = [] + temp_svg_paths = [] + for (layer_id, layer_label, layer_type) in layers: + if layer_type == "fixed": + continue + show_layer_ids = [layer[0] for layer in layers if layer[2] == "fixed" or layer[0] == layer_id] + invert = "true" + + if ("-auto" in layer_label): + layer_label = layer_label.replace("-auto", "") + + if ("-invert" in layer_label): + layer_label = layer_label.replace("-invert", "") + invert = "false" + hash_sum_path = os.path.join(cache_folder_path, '{}-{}-{}-{}.hash'.format(layer_id, layer_label, layer_type, invert)) + + prev_hash_sum = None + if os.path.exists(hash_sum_path): + with open(hash_sum_path, 'r') as f: + prev_hash_sum = f.read() + + # generate unique filename each layer + temp_name = next(tempfile._get_candidate_names()) + layer_dest_svg_path = os.path.join(cache_folder_path, temp_name) + hash_sum = self.export_layers(layer_dest_svg_path, show_layer_ids) + temp_svg_paths.append(layer_dest_svg_path) + + layer_dest_png_path = os.path.join(image_folder_path, "%s_%s.png" % (layer_label, layer_id)) + layer_dest_kicad_path = os.path.join(library_folder_path, "%s_%s.kicad_mod" % (layer_label, layer_id)) + kicad_mod_files.append(layer_dest_kicad_path) + + + if ignore_hashes or hash_sum != prev_hash_sum or not os.path.exists(layer_dest_kicad_path): + with open(hash_sum_path, 'w') as f: + f.write(hash_sum) + layer_arguments.append((layer_dest_svg_path, layer_dest_png_path, layer_dest_kicad_path, layer_label, invert)) + + + for i in range(0, len(layer_arguments), EXPORT_PNG_MAX_PROCESSES): + processes = [] + for layer_dest_svg_path, layer_dest_png_path, _, _, _ in layer_arguments[i:i+EXPORT_PNG_MAX_PROCESSES]: + #export layer to png + p = self.exportToPng(layer_dest_svg_path, layer_dest_png_path) + processes.append(p) + for p in processes: + p.wait() + + for layer_dest_svg_path in temp_svg_paths: + os.remove(layer_dest_svg_path) + + if options.filetype == "kicad_pcb" or options.filetype == "kicad_module": + for i in range(0, len(layer_arguments), EXPORT_KICAD_MAX_PROCESSES): + processes = [] + for _, layer_dest_png_path, layer_dest_kicad_path, layer_label, invert in layer_arguments[i:i+EXPORT_KICAD_MAX_PROCESSES]: + #export layer png to kicad + p = self.exportToKicad(layer_dest_png_path, layer_dest_kicad_path, layer_label, invert) + processes.append(p) + for p in processes: + p.wait() + else: + return + + kicad_edgecut_string = self.exportEdgeCut(kicad_mod = options.filetype == "kicad_module") + kicad_drill_string = self.exportDrill(kicad_mod = options.filetype == "kicad_module") + + if options.filetype == "kicad_pcb": + kicad_modules_string = "" + for kicad_file in kicad_mod_files: + with open(kicad_file, 'r') as f: + kicad_modules_string += f.read() + + with open(kicad_pcb_path, 'w') as f: + f.write(PCB_HEADER) + f.write(kicad_modules_string) + f.write(kicad_edgecut_string) + f.write(kicad_drill_string) + f.write(PCB_FOOTER) + + with open(kicad_lib_path, 'w') as f: + f.write(PCB_LIB_TABLE.format(name=name, folder=library_folder)) + + with open(kicad_pro_path, 'w') as f: + f.write(PCB_PROJECT_FILE) + + if (options.openkicad): + self.openKicad(kicad_pcb_path) + + elif options.filetype == "kicad_module": + kicad_modules_string = '(module "{}" (layer F.Cu)'.format(name) + kicad_modules_string += MODULE_INVIS_REF_HEADER + for kicad_file in kicad_mod_files: + with open(kicad_file, 'r') as f: + mod = f.readlines()[8:-1] + kicad_modules_string += "".join(mod) + kicad_modules_string += kicad_edgecut_string + kicad_modules_string += kicad_drill_string + kicad_modules_string += ")" + with open(kicad_mod_path, 'w') as f: + f.write(kicad_modules_string) + + + def export_layers(self, dest, show): + """ + Export selected layers of SVG to the file `dest`. + :arg str dest: path to export SVG file. + :arg list hide: layers to hide. each element is a string. + :arg list show: layers to show. each element is a string. + """ + doc = copy.deepcopy(self.document) + root = doc.getroot() + for layer in doc.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS): + id = layer.attrib["id"] + if id in show: + layer.attrib['style'] = 'display:inline' + else: + root.remove(layer) + + # remove the namedview for the hash as it changes based on user zoom/scroll + namedview = doc.find('sodipodi:namedview', namespaces=inkex.NSS) + root.remove(namedview) + + doc.write(dest) + + # returns a hash of the exported layer contents which can be used to + # detect changes + return hashlib.md5(ET.tostring(root)).hexdigest() + + def get_name(self): + root = self.document.getroot() + docname = root.get('{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname') + if docname is None: + return 'drawing' + return os.path.splitext(docname)[0] + + def get_layers(self, src): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_id = layer.attrib["id"] + layer_label = layer.attrib[label_attrib_name] + + layer_label_name = layer_label.replace("-invert", "") + layer_label_name = layer_label_name.replace("-auto", "") + + if layer_label_name in self.layer_map.iterkeys(): + layer_type = "export" + layer_label = layer_label + elif layer_label.lower().startswith("[fixed] "): + layer_type = "fixed" + layer_label = layer_label[8:] + else: + continue + + layers.append([layer_id, layer_label, layer_type]) + + return layers + + def openKicad(self, kicad_file_path): + platform_system = platform.system() + + if (platform_system == 'Darwin'): + command = "open %s" % (kicad_file_path) + elif (platform_system == 'Linux'): + command = "xdg-open %s" % (kicad_file_path) + else: + command = "start %s" % (kicad_file_path) + + return subprocess.Popen(command.encode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + + def exportToKicad(self, png_path, output_path, layer_type, invert = "true"): + plugin_path = os.path.dirname(os.path.abspath(__file__)) + + platform_system = platform.system() + + if (platform_system == 'Darwin'): + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component_osx') + elif (platform_system == 'Linux'): + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component_linux64') + else: + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component.exe') + + layer_name = self.layer_map[layer_type] + command = "\"%s\" \"%s\" \"%s\" %s %s %s %s" % (bitmap2component_exe, png_path, output_path, layer_name, invert , str(int(self.options.dpi)) , str(int(self.options.threshold))) + if (self.options.debug): + inkex.debug(command) + return subprocess.Popen(command.encode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + def exportToPng(self, svg_path, output_path): + area_param = '-D' if self.options.crop else 'C' + command = "inkscape %s -d %s -e \"%s\" \"%s\"" % (area_param, self.options.dpi, output_path, svg_path) + if (self.options.debug): + inkex.debug(command) + return subprocess.Popen(command.encode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + def exportEdgeCut(self, kicad_mod=False): + x0 = 0 + y0 = 0 + mirror = 1.0 + + line_type = "fp_line" if kicad_mod else "gr_line" + + kicad_edgecut_string = "" + + i = 0 + layerPath = '//svg:g[@inkscape:groupmode="layer"]' + + if (self.options.autoflatten): + self.flatten_bezier() + + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + i += 1 + + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_name = (layer.attrib[label_attrib_name]) + + if layer_name != "Edge.Cuts": + continue + + layer_trans = layer.get('transform') + if layer_trans: + layer_m = simpletransform.parseTransform(layer_trans) + else: + layer_m = IDENTITY_MATRIX + + nodePath = ('//svg:g[@inkscape:groupmode="layer"][%d]/descendant::svg:path') % i + for node in self.document.getroot().xpath(nodePath, namespaces=inkex.NSS): + d = node.get('d') + p = simplepath.parsePath(d) + + points = [] + if p: + #sanity check + if p[0][0] == 'M': + t = node.get('transform') + if t: + m = simpletransform.parseTransform(t) + trans = simpletransform.composeTransform(layer_m, m) + else: + trans = layer_m + + for path in p: + if path[0] != "Z": + x = (path[1][0]) + y = (path[1][1]) + xy = [x,y] + simpletransform.applyTransformToPoint(trans,xy) + points.append(self.coordToKicad([(xy[0]-x0), xy[1]*mirror-y0])) + + points_count = len(points) + points.append(points[0]) + + for x in range (0, points_count): + kicad_edgecut_string = kicad_edgecut_string + ("(%s (start %f %f) (end %f %f) (layer Edge.Cuts) (width 0.1))\n" % (line_type, points[x][0],points[x][1],points[x+1][0],points[x+1][1])) + + return kicad_edgecut_string + + def exportDrill(self, kicad_mod=False): + x0 = 0 + y0 = 0 + mirror = 1.0 + + self.setInkscapeScaling() + + kicad_drill_string = "" + + i = 0 + + if kicad_mod: + pad_template = "(pad {n} thru_hole circle (at {x} {y}) (size {d} {d}) (drill {d}) (layers *.Cu *.Mask))\n" + else: + pad_template = """ + (module Wire_Pads:SolderWirePad_single_0-8mmDrill (layer F.Cu) (tedit 0) (tstamp 5ABD66D0) + (at {x} {y}) + (pad {n} thru_hole circle (at 0 0) (size {d} {d}) (drill {d}) (layers *.Cu *.Mask)) + ) + """ + + layerPath = '//svg:g[@inkscape:groupmode="layer"][@inkscape:label="Drill"]' + + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + + layer_trans = layer.get('transform') + if layer_trans: + layer_m = simpletransform.parseTransform(layer_trans) + else: + layer_m = IDENTITY_MATRIX + + nodePath = 'descendant::svg:circle' + + count = 0 + for node in layer.xpath(nodePath, namespaces=inkex.NSS): + count = count + 1 + cx = float(node.get('cx')) + cy = float(node.get('cy')) + + radius = float(node.get('r')) + drill_size = radius * 2 + + t = node.get('transform') + + pt = [cx, cy] + + if t: + m = simpletransform.parseTransform(t) + trans = simpletransform.composeTransform(layer_m, m) + else: + trans = layer_m + + simpletransform.applyTransformToPoint(trans,pt) + padCoord = self.coordToKicad(pt) + + kicad_drill_string += pad_template.format(x=padCoord[0], y=padCoord[1], n=count, d=drill_size) + + return kicad_drill_string + + def flatten_bezier(self): + layerPath = '//svg:g[@inkscape:groupmode="layer"][@inkscape:label="Edge.Cuts"]' + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + nodePath = 'descendant::svg:path' + for node in layer.xpath(nodePath, namespaces=inkex.NSS): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + p = cubicsuperpath.parsePath(d) + cspsubdiv.cspsubdiv(p, 0.01) + np = [] + for sp in p: + first = True + for csp in sp: + cmd = 'L' + if first: + cmd = 'M' + first = False + np.append([cmd, [csp[1][0], csp[1][1]]]) + node.set('d', simplepath.formatPath(np)) + +def _main(): + e = Svg2ShenzhenExport() + e.affect() + exit() + +if __name__ == "__main__": + _main() diff --git a/svg2shenzhen/prepare.py b/svg2shenzhen/prepare.py new file mode 100644 index 0000000..d7ea5b8 --- /dev/null +++ b/svg2shenzhen/prepare.py @@ -0,0 +1,338 @@ +#! /usr/bin/env python + +import sys +sys.path.append('/usr/share/inkscape/extensions') +import inkex +import os +import subprocess +import tempfile +import shutil +import copy +import simplepath, simpletransform + +from simplestyle import * +from copy import deepcopy +from io import BytesIO +from lxml import etree + +identity_m = [[1.0,0.0,0.0],[0.0,1.0,0.0]] + +class Svg2ShenzhenPrepare(inkex.Effect): + def __init__(self): + """init the effetc library and get options from gui""" + inkex.Effect.__init__(self) + self.OptionParser.add_option("--docwidth", action="store", type="float", dest="docwidth", default=0.0) + self.OptionParser.add_option("--docheight", action="store", type="float", dest="docheight", default=0.0) + + self.bb_width_center = 0 + self.bb_height_center = 0 + self.bb_scaling_h = 0 + self.bb_scaling_w = 0 + + def coordToKicad(self,XYCoord): + return [ + (XYCoord[0]-self.bb_width_center)/self.bb_scaling_w, + (XYCoord[1]-self.bb_height_center)/self.bb_scaling_h, + ] + + def setInkscapeScaling(self): + + root = self.document.getroot() + height = float(root.get('height').replace("mm", "")) + width = float(root.get('width').replace("mm", "")) + root.attrib['viewBox'] = "0 0 " + str(width) + " " + str(height) + viewbox = root.attrib['viewBox'].split(' ') + viewbox_h = float(viewbox[-1]) + viewbox_w = float(viewbox[-2]) + + self.doc_width = width + self.doc_height = height + self.bb_width_center = viewbox_w/2 + self.bb_height_center = viewbox_h/2 + self.bb_scaling_h = viewbox_h/height + self.bb_scaling_w = viewbox_w/width + + + def setDocumentSquare(self, width, height): + root = self.document.getroot() + root.attrib['width'] = str(width) + "mm" + root.attrib['height'] = str(height) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (width, width) + + + def createLayer(self, layer_name): + svg = self.document.xpath('//svg:svg',namespaces=inkex.NSS)[0] + layer = inkex.etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), '%s' % layer_name) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + + def createWhitebg(self): + rect = inkex.etree.Element(inkex.addNS('rect','svg')) + rect.set('x', "0") + rect.set('y', "0") + rect.set('width', str(self.doc_width/self.bb_scaling_w)) + rect.set('height', str(self.doc_height/self.bb_scaling_h)) + style = {'fill' : '#FFFFFF', 'fill-opacity' : '1', 'stroke': 'none'} + rect.set('style', formatStyle(style)) + return rect + + def findLayer(self, layerName): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if (layer.attrib[label_attrib_name] == layerName): + return layer + return False + + def addStamp(self,layer, textStr): + + # Create text element + text = inkex.etree.Element(inkex.addNS('text','svg')) + text.text = str(textStr) + + # Set text position to center of document. + text.set('x', str(self.doc_width / 2)) + text.set('y', str(self.doc_height / 2)) + + # Center text horizontally with CSS style. + style = {'text-align' : 'center', 'text-anchor': 'middle'} + text.set('style', formatStyle(style)) + + # Connect elements together. + layer.append(text) + + + def prepareDocument(self): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + root = self.document.getroot() + + #remove "Layer 1" + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if (layer.attrib[label_attrib_name] == "Layer 1"): + root.remove(layer) + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + layer_label = layer.attrib[label_attrib_name] + layers.append(layer_label) + + if ("[fixed] BG" not in layers): + white_layer = self.createLayer("[fixed] BG") + white_layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + rect = self.createWhitebg() + white_layer.append(rect) + + if ("F.Cu" not in layers and "F.Cu-disabled" not in layers): + self.createLayer("F.Cu") + + if ("B.Cu-disabled" not in layers and "B.Cu" not in layers): + self.createLayer("B.Cu-disabled") + + if ("B.Adhes-disabled" not in layers and "B.Adhes" not in layers): + self.createLayer("B.Adhes-disabled") + + if ("F.Adhes-disabled" not in layers and "F.Adhes" not in layers): + self.createLayer("F.Adhes-disabled") + + if ("B.Paste-disabled" not in layers and "B.Paste" not in layers): + self.createLayer("B.Paste-disabled") + + if ("F.Paste-disabled" not in layers and "F.Paste" not in layers): + self.createLayer("F.Paste-disabled") + + if ("B.SilkS-disabled" not in layers and "B.SilkS" not in layers): + self.createLayer("B.SilkS-disabled") + + if ("F.SilkS-disabled" not in layers and "F.SilkS" not in layers): + self.createLayer("F.SilkS-disabled") + + if ("B.Mask-disabled" not in layers and "B.Mask" not in layers): + self.createLayer("B.Mask-disabled") + + if ("F.Mask-disabled" not in layers and "F.Mask" not in layers): + self.createLayer("F.Mask-disabled") + + if ("Dwgs.User-disabled" not in layers and "Dwgs.User" not in layers): + self.createLayer("Dwgs.User-disabled") + + if ("Cmts.User-disabled" not in layers and "Cmts.User" not in layers): + self.createLayer("Cmts.User-disabled") + + if ("Eco1.User-disabled" not in layers and "Eco1.User" not in layers): + self.createLayer("Eco1.User-disabled") + + if ("Eco2.User-disabled" not in layers and "Eco2.User" not in layers): + self.createLayer("Eco2.User-disabled") + + if ("Edge.Cuts" not in layers): + self.createLayer("Edge.Cuts") + + if ("Margin-disabled" not in layers and "Margin" not in layers): + self.createLayer("Margin-disabled") + + if ("B.CrtYd-disabled" not in layers and "B.CrtYd" not in layers): + self.createLayer("B.CrtYd-disabled") + + if ("F.CrtYd-disabled" not in layers and "F.CrtYd" not in layers): + self.createLayer("F.CrtYd-disabled") + + if ("B.Fab-disabled" not in layers and "B.Fab" not in layers): + self.createLayer("B.Fab-disabled") + + if ("F.Fab-disabled" not in layers and "F.Fab" not in layers): + self.createLayer("F.Fab-disabled") + + if ("Drill" not in layers): + self.createLayer("Drill") + + def setDocumentGrid(self): + doc_view = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + doc_view.attrib['borderlayer'] = "true" + doc_view.attrib['showgrid'] = "true" + + grid = inkex.etree.Element(inkex.addNS('grid','inkscape')) + grid.set('spacingx', '2.54') + grid.set('spacingy', '2.54') + grid.set('empspacing', '1') + grid.set('type', 'xygrid') + grid.set('units', 'mm') + + doc_view.append(grid) + + def setDefaultUnits(self): + # just a convenience so that when you draw you will use mm by default + namedview = self.document.find('sodipodi:namedview', namespaces=inkex.NSS) + namedview.attrib['{http://www.inkscape.org/namespaces/inkscape}document-units'] = 'mm' + + def effect(self): + self.setDocumentSquare(self.options.docwidth, self.options.docheight) + self.setInkscapeScaling() + self.prepareDocument() + self.setDocumentGrid() + self.setDefaultUnits() + + + def prepareLogo(self, lyr): + logo_xml = """ + + + + + + + + + + + + + + + + + """ + logo_file_obj = BytesIO((logo_xml)) + new_obj = (etree.parse(logo_file_obj)).getroot() + # lyr = self.findLayer("F.Cu") + lyr.append(new_obj) + + + def export_layers(self, dest, show): + """ + Export selected layers of SVG to the file `dest`. + :arg str dest: path to export SVG file. + :arg list hide: layers to hide. each element is a string. + :arg list show: layers to show. each element is a string. + """ + doc = copy.deepcopy(self.document) + for layer in doc.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS): + layer.attrib['style'] = 'display:none' + id = layer.attrib["id"] + if id in show: + layer.attrib['style'] = 'display:inline' + + doc.write(dest) + + def get_layers(self, src): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_id = layer.attrib["id"] + layer_label = layer.attrib[label_attrib_name] + + layer_label_name = layer_label + inkex.debug(layer_label_name) + + if layer_label_name in self.layer_map.iterkeys(): + layer_type = "export" + layer_label = layer_label_name + elif layer_label.lower().startswith("[fixed] "): + layer_type = "fixed" + layer_label = layer_label[8:] + else: + continue + + layers.append([layer_id, layer_label, layer_type]) + + return layers + + +def _main(): + e = Svg2ShenzhenPrepare() + e.affect() + exit() + +if __name__ == "__main__": + _main() diff --git a/svg_fonts/EMSAllure.svg b/svg_fonts/EMSAllure.svg new file mode 100644 index 0000000..1fb7bef --- /dev/null +++ b/svg_fonts/EMSAllure.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Allure +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Allura +Designer: Rob Leuschke, TypeSETit +Link: http://www.typesetit.com +Google font page: https://fonts.google.com/specimen/Allura + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSElfin.svg b/svg_fonts/EMSElfin.svg new file mode 100644 index 0000000..687c5c6 --- /dev/null +++ b/svg_fonts/EMSElfin.svg @@ -0,0 +1,217 @@ + + + + + + +Font name: EMS Elfin +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Mountains of Christmas +Designer: Crystal Kluge, Tart Workshop +Link: http://www.tartworkshop.com +Google font page: https://fonts.google.com/specimen/Mountains+of+Christmas +Note: SIL OFL per metadata; Google cites Apache License, version 2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSFelix.svg b/svg_fonts/EMSFelix.svg new file mode 100644 index 0000000..99950b8 --- /dev/null +++ b/svg_fonts/EMSFelix.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Felix +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Felipa +Designer: Fontstage +Link: https://twitter.com/fontstage +Google font page: https://fonts.google.com/specimen/Felipa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSNixish.svg b/svg_fonts/EMSNixish.svg new file mode 100644 index 0000000..48ab1c5 --- /dev/null +++ b/svg_fonts/EMSNixish.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Nixish +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Nixie One +Designer: Jovanny Lemonad +Link: http://jovanny.ru +Google font page: https://fonts.google.com/specimen/Nixie+One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSNixishItalic.svg b/svg_fonts/EMSNixishItalic.svg new file mode 100644 index 0000000..dfda20a --- /dev/null +++ b/svg_fonts/EMSNixishItalic.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Nixish Italic +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Nixie One +Designer: Jovanny Lemonad +Link: http://jovanny.ru +Google font page: https://fonts.google.com/specimen/Nixie+One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSOsmotron.svg b/svg_fonts/EMSOsmotron.svg new file mode 100644 index 0000000..821a0e3 --- /dev/null +++ b/svg_fonts/EMSOsmotron.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Osmotron +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Orbitron (Regular) +Designer: Matt McInerney, the League of Moveable Type +Link: https://www.theleagueofmoveabletype.com +Google font page: https://fonts.google.com/specimen/Orbitron + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSReadability.svg b/svg_fonts/EMSReadability.svg new file mode 100644 index 0000000..c9c5174 --- /dev/null +++ b/svg_fonts/EMSReadability.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Readability +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Source Sans Pro-Light +Designer: Paul D. Hunt, Adobe +Link: http://www.adobe.com +Google font page: https://fonts.google.com/specimen/Source+Sans+Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSReadabilityItalic.svg b/svg_fonts/EMSReadabilityItalic.svg new file mode 100644 index 0000000..0c9719b --- /dev/null +++ b/svg_fonts/EMSReadabilityItalic.svg @@ -0,0 +1,216 @@ + + + + + + +Font name: EMS Readability Italic +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Source Sans Pro-Light +Designer: Paul D. Hunt, Adobe +Link: http://www.adobe.com +Google font page: https://fonts.google.com/specimen/Source+Sans+Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/EMSTech.svg b/svg_fonts/EMSTech.svg new file mode 100644 index 0000000..8ab5d67 --- /dev/null +++ b/svg_fonts/EMSTech.svg @@ -0,0 +1,217 @@ + + + + + + + +Font name: EMS Tech +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Architects Daughter +Designer: Kimberly Geswein, Kimberly Geswein Fonts +Link: http://www.kimberlygeswein.com/ +Google font page: https://fonts.google.com/specimen/Architects+Daughter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheyGothEnglish.svg b/svg_fonts/HersheyGothEnglish.svg new file mode 100644 index 0000000..e283121 --- /dev/null +++ b/svg_fonts/HersheyGothEnglish.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Gothic English + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySans1.svg b/svg_fonts/HersheySans1.svg new file mode 100644 index 0000000..a49d184 --- /dev/null +++ b/svg_fonts/HersheySans1.svg @@ -0,0 +1,241 @@ + + + + + + +Font name: Hershey Sans 1-stroke + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySansMed.svg b/svg_fonts/HersheySansMed.svg new file mode 100644 index 0000000..ea03181 --- /dev/null +++ b/svg_fonts/HersheySansMed.svg @@ -0,0 +1,241 @@ + + + + + + +Font name: Hershey Sans medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheyScript1.svg b/svg_fonts/HersheyScript1.svg new file mode 100644 index 0000000..fe47021 --- /dev/null +++ b/svg_fonts/HersheyScript1.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Script 1-stroke + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheyScriptMed.svg b/svg_fonts/HersheyScriptMed.svg new file mode 100644 index 0000000..d6beb67 --- /dev/null +++ b/svg_fonts/HersheyScriptMed.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Script medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySerifBold.svg b/svg_fonts/HersheySerifBold.svg new file mode 100644 index 0000000..eaa08aa --- /dev/null +++ b/svg_fonts/HersheySerifBold.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Serif bold + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySerifBoldItalic.svg b/svg_fonts/HersheySerifBoldItalic.svg new file mode 100644 index 0000000..5df8a1e --- /dev/null +++ b/svg_fonts/HersheySerifBoldItalic.svg @@ -0,0 +1,242 @@ + + + + + + +Font name: Hershey Serif bold italic + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySerifMed.svg b/svg_fonts/HersheySerifMed.svg new file mode 100644 index 0000000..02da42f --- /dev/null +++ b/svg_fonts/HersheySerifMed.svg @@ -0,0 +1,241 @@ + + + + + + +Font name: Hershey Serif medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/HersheySerifMedItalic.svg b/svg_fonts/HersheySerifMedItalic.svg new file mode 100644 index 0000000..ad4b2a7 --- /dev/null +++ b/svg_fonts/HersheySerifMedItalic.svg @@ -0,0 +1,241 @@ + + + + + + +Font name: Hershey Serif medium italic + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/svg_fonts/OFL.txt b/svg_fonts/OFL.txt new file mode 100644 index 0000000..1456c18 --- /dev/null +++ b/svg_fonts/OFL.txt @@ -0,0 +1,97 @@ +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/templates/1x1_1.png b/templates/1x1_1.png new file mode 100644 index 0000000..acd38ae Binary files /dev/null and b/templates/1x1_1.png differ diff --git a/templates/1x1_1.txt b/templates/1x1_1.txt new file mode 100644 index 0000000..48d6163 --- /dev/null +++ b/templates/1x1_1.txt @@ -0,0 +1,2 @@ +CHECKER 1 1 +[0,0,1,0,-1,1] diff --git a/templates/2x1_2.png b/templates/2x1_2.png new file mode 100644 index 0000000..5ff8782 Binary files /dev/null and b/templates/2x1_2.png differ diff --git a/templates/2x1_2.txt b/templates/2x1_2.txt new file mode 100644 index 0000000..17f40db --- /dev/null +++ b/templates/2x1_2.txt @@ -0,0 +1,3 @@ +CHECKER 2 1 +[0,0,1,0,0,1] +[0,1,-1,1,0,2] diff --git a/templates/2x2_2.png b/templates/2x2_2.png new file mode 100644 index 0000000..32e66ce Binary files /dev/null and b/templates/2x2_2.png differ diff --git a/templates/2x2_2.txt b/templates/2x2_2.txt new file mode 100644 index 0000000..b3f6a7b --- /dev/null +++ b/templates/2x2_2.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,1,0,-1,0] [1,0,0,1,2,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] diff --git a/templates/2x2_5.png b/templates/2x2_5.png new file mode 100644 index 0000000..6b3be64 Binary files /dev/null and b/templates/2x2_5.png differ diff --git a/templates/2x2_5.txt b/templates/2x2_5.txt new file mode 100644 index 0000000..8f22cfe --- /dev/null +++ b/templates/2x2_5.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,1,0,-1,1] [1,0,2,0,1,1] +[1,1,0,2,1,2] diff --git a/templates/2x4_1.png b/templates/2x4_1.png new file mode 100644 index 0000000..ccb6225 Binary files /dev/null and b/templates/2x4_1.png differ diff --git a/templates/2x4_1.txt b/templates/2x4_1.txt new file mode 100644 index 0000000..7bf3607 --- /dev/null +++ b/templates/2x4_1.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,3,0,1,1] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,1,2] [3,1,2,2,4,2] diff --git a/templates/2x4_10.png b/templates/2x4_10.png new file mode 100644 index 0000000..22aef0a Binary files /dev/null and b/templates/2x4_10.png differ diff --git a/templates/2x4_10.txt b/templates/2x4_10.txt new file mode 100644 index 0000000..990f4a3 --- /dev/null +++ b/templates/2x4_10.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] diff --git a/templates/2x4_11.png b/templates/2x4_11.png new file mode 100644 index 0000000..d3daaff Binary files /dev/null and b/templates/2x4_11.png differ diff --git a/templates/2x4_11.txt b/templates/2x4_11.txt new file mode 100644 index 0000000..ee05656 --- /dev/null +++ b/templates/2x4_11.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] diff --git a/templates/2x4_4.png b/templates/2x4_4.png new file mode 100644 index 0000000..8720da4 Binary files /dev/null and b/templates/2x4_4.png differ diff --git a/templates/2x4_4.txt b/templates/2x4_4.txt new file mode 100644 index 0000000..0d58835 --- /dev/null +++ b/templates/2x4_4.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,1,2,3,2] [3,1,2,1,4,2] diff --git a/templates/2x4_7.png b/templates/2x4_7.png new file mode 100644 index 0000000..1b63bbc Binary files /dev/null and b/templates/2x4_7.png differ diff --git a/templates/2x4_7.txt b/templates/2x4_7.txt new file mode 100644 index 0000000..d317997 --- /dev/null +++ b/templates/2x4_7.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,3,2,4,2] diff --git a/templates/2x4_8.png b/templates/2x4_8.png new file mode 100644 index 0000000..7e9f464 Binary files /dev/null and b/templates/2x4_8.png differ diff --git a/templates/2x4_8.txt b/templates/2x4_8.txt new file mode 100644 index 0000000..d7e3b97 --- /dev/null +++ b/templates/2x4_8.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] diff --git a/templates/3x3_1.png b/templates/3x3_1.png new file mode 100644 index 0000000..3ac3a6c Binary files /dev/null and b/templates/3x3_1.png differ diff --git a/templates/3x3_1.txt b/templates/3x3_1.txt new file mode 100644 index 0000000..16b89fc --- /dev/null +++ b/templates/3x3_1.txt @@ -0,0 +1,4 @@ +CHECKER 3 3 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,1,2,3,2] +[0,2,1,2,-1,2] [1,2,2,2,0,3] [2,2,1,3,3,3] diff --git a/templates/3x3_3.png b/templates/3x3_3.png new file mode 100644 index 0000000..cd268ec Binary files /dev/null and b/templates/3x3_3.png differ diff --git a/templates/3x3_3.txt b/templates/3x3_3.txt new file mode 100644 index 0000000..485f98b --- /dev/null +++ b/templates/3x3_3.txt @@ -0,0 +1,3 @@ +CHECKER 3 3 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] diff --git a/templates/4x4_10.png b/templates/4x4_10.png new file mode 100644 index 0000000..820c683 Binary files /dev/null and b/templates/4x4_10.png differ diff --git a/templates/4x4_10.txt b/templates/4x4_10.txt new file mode 100644 index 0000000..1ff626d --- /dev/null +++ b/templates/4x4_10.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_100.png b/templates/4x4_100.png new file mode 100644 index 0000000..739ddf8 Binary files /dev/null and b/templates/4x4_100.png differ diff --git a/templates/4x4_100.txt b/templates/4x4_100.txt new file mode 100644 index 0000000..074d0c7 --- /dev/null +++ b/templates/4x4_100.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_101.png b/templates/4x4_101.png new file mode 100644 index 0000000..76beff7 Binary files /dev/null and b/templates/4x4_101.png differ diff --git a/templates/4x4_101.txt b/templates/4x4_101.txt new file mode 100644 index 0000000..d8becdf --- /dev/null +++ b/templates/4x4_101.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,0,4,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_102.png b/templates/4x4_102.png new file mode 100644 index 0000000..1e93c65 Binary files /dev/null and b/templates/4x4_102.png differ diff --git a/templates/4x4_102.txt b/templates/4x4_102.txt new file mode 100644 index 0000000..952e612 --- /dev/null +++ b/templates/4x4_102.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_103.png b/templates/4x4_103.png new file mode 100644 index 0000000..bbf7615 Binary files /dev/null and b/templates/4x4_103.png differ diff --git a/templates/4x4_103.txt b/templates/4x4_103.txt new file mode 100644 index 0000000..ece15f7 --- /dev/null +++ b/templates/4x4_103.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,2,2] +[0,2,0,4,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_104.png b/templates/4x4_104.png new file mode 100644 index 0000000..2fb68ab Binary files /dev/null and b/templates/4x4_104.png differ diff --git a/templates/4x4_104.txt b/templates/4x4_104.txt new file mode 100644 index 0000000..8f19ae5 --- /dev/null +++ b/templates/4x4_104.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,1,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_105.png b/templates/4x4_105.png new file mode 100644 index 0000000..fb40d23 Binary files /dev/null and b/templates/4x4_105.png differ diff --git a/templates/4x4_105.txt b/templates/4x4_105.txt new file mode 100644 index 0000000..44b88b4 --- /dev/null +++ b/templates/4x4_105.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,1,2,2,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_106.png b/templates/4x4_106.png new file mode 100644 index 0000000..1331742 Binary files /dev/null and b/templates/4x4_106.png differ diff --git a/templates/4x4_106.txt b/templates/4x4_106.txt new file mode 100644 index 0000000..a953d5e --- /dev/null +++ b/templates/4x4_106.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,3,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_107.png b/templates/4x4_107.png new file mode 100644 index 0000000..13b0eb4 Binary files /dev/null and b/templates/4x4_107.png differ diff --git a/templates/4x4_107.txt b/templates/4x4_107.txt new file mode 100644 index 0000000..9d51cbb --- /dev/null +++ b/templates/4x4_107.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_108.png b/templates/4x4_108.png new file mode 100644 index 0000000..bad38b1 Binary files /dev/null and b/templates/4x4_108.png differ diff --git a/templates/4x4_108.txt b/templates/4x4_108.txt new file mode 100644 index 0000000..ad36e4e --- /dev/null +++ b/templates/4x4_108.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_109.png b/templates/4x4_109.png new file mode 100644 index 0000000..d4dad84 Binary files /dev/null and b/templates/4x4_109.png differ diff --git a/templates/4x4_109.txt b/templates/4x4_109.txt new file mode 100644 index 0000000..72311f1 --- /dev/null +++ b/templates/4x4_109.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_11.png b/templates/4x4_11.png new file mode 100644 index 0000000..0c2b80b Binary files /dev/null and b/templates/4x4_11.png differ diff --git a/templates/4x4_11.txt b/templates/4x4_11.txt new file mode 100644 index 0000000..4f15e22 --- /dev/null +++ b/templates/4x4_11.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_110.png b/templates/4x4_110.png new file mode 100644 index 0000000..9cf800f Binary files /dev/null and b/templates/4x4_110.png differ diff --git a/templates/4x4_110.txt b/templates/4x4_110.txt new file mode 100644 index 0000000..81e90a5 --- /dev/null +++ b/templates/4x4_110.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_111.png b/templates/4x4_111.png new file mode 100644 index 0000000..4462267 Binary files /dev/null and b/templates/4x4_111.png differ diff --git a/templates/4x4_111.txt b/templates/4x4_111.txt new file mode 100644 index 0000000..2bf6b35 --- /dev/null +++ b/templates/4x4_111.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_112.png b/templates/4x4_112.png new file mode 100644 index 0000000..ca2647e Binary files /dev/null and b/templates/4x4_112.png differ diff --git a/templates/4x4_112.txt b/templates/4x4_112.txt new file mode 100644 index 0000000..48adeed --- /dev/null +++ b/templates/4x4_112.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_113.png b/templates/4x4_113.png new file mode 100644 index 0000000..a866db2 Binary files /dev/null and b/templates/4x4_113.png differ diff --git a/templates/4x4_113.txt b/templates/4x4_113.txt new file mode 100644 index 0000000..a7e2d20 --- /dev/null +++ b/templates/4x4_113.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_114.png b/templates/4x4_114.png new file mode 100644 index 0000000..2b25854 Binary files /dev/null and b/templates/4x4_114.png differ diff --git a/templates/4x4_114.txt b/templates/4x4_114.txt new file mode 100644 index 0000000..9656dda --- /dev/null +++ b/templates/4x4_114.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_115.png b/templates/4x4_115.png new file mode 100644 index 0000000..c205e00 Binary files /dev/null and b/templates/4x4_115.png differ diff --git a/templates/4x4_115.txt b/templates/4x4_115.txt new file mode 100644 index 0000000..742ec2d --- /dev/null +++ b/templates/4x4_115.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_116.png b/templates/4x4_116.png new file mode 100644 index 0000000..82773d9 Binary files /dev/null and b/templates/4x4_116.png differ diff --git a/templates/4x4_116.txt b/templates/4x4_116.txt new file mode 100644 index 0000000..eba8c00 --- /dev/null +++ b/templates/4x4_116.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_117.png b/templates/4x4_117.png new file mode 100644 index 0000000..c55ebb4 Binary files /dev/null and b/templates/4x4_117.png differ diff --git a/templates/4x4_117.txt b/templates/4x4_117.txt new file mode 100644 index 0000000..9b7614a --- /dev/null +++ b/templates/4x4_117.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_118.png b/templates/4x4_118.png new file mode 100644 index 0000000..146b85d Binary files /dev/null and b/templates/4x4_118.png differ diff --git a/templates/4x4_118.txt b/templates/4x4_118.txt new file mode 100644 index 0000000..b3dfe8d --- /dev/null +++ b/templates/4x4_118.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,2,2] [3,0,4,0,3,2] +[1,1,0,2,1,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_119.png b/templates/4x4_119.png new file mode 100644 index 0000000..8e2b5d1 Binary files /dev/null and b/templates/4x4_119.png differ diff --git a/templates/4x4_119.txt b/templates/4x4_119.txt new file mode 100644 index 0000000..78548e7 --- /dev/null +++ b/templates/4x4_119.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,2] +[1,1,1,2,2,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_12.png b/templates/4x4_12.png new file mode 100644 index 0000000..8a4e4cb Binary files /dev/null and b/templates/4x4_12.png differ diff --git a/templates/4x4_12.txt b/templates/4x4_12.txt new file mode 100644 index 0000000..208a790 --- /dev/null +++ b/templates/4x4_12.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_120.png b/templates/4x4_120.png new file mode 100644 index 0000000..e90eac3 Binary files /dev/null and b/templates/4x4_120.png differ diff --git a/templates/4x4_120.txt b/templates/4x4_120.txt new file mode 100644 index 0000000..dbf9d6e --- /dev/null +++ b/templates/4x4_120.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,2] +[1,1,0,2,2,2] +[0,2,-1,2,1,3] [2,2,1,3,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_121.png b/templates/4x4_121.png new file mode 100644 index 0000000..df07a83 Binary files /dev/null and b/templates/4x4_121.png differ diff --git a/templates/4x4_121.txt b/templates/4x4_121.txt new file mode 100644 index 0000000..85e8908 --- /dev/null +++ b/templates/4x4_121.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,3,1] [3,0,4,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_122.png b/templates/4x4_122.png new file mode 100644 index 0000000..e35b83c Binary files /dev/null and b/templates/4x4_122.png differ diff --git a/templates/4x4_122.txt b/templates/4x4_122.txt new file mode 100644 index 0000000..78b1462 --- /dev/null +++ b/templates/4x4_122.txt @@ -0,0 +1,4 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/templates/4x4_124.png b/templates/4x4_124.png new file mode 100644 index 0000000..0af4861 Binary files /dev/null and b/templates/4x4_124.png differ diff --git a/templates/4x4_124.txt b/templates/4x4_124.txt new file mode 100644 index 0000000..4b92ac3 --- /dev/null +++ b/templates/4x4_124.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_126.png b/templates/4x4_126.png new file mode 100644 index 0000000..d9ceeea Binary files /dev/null and b/templates/4x4_126.png differ diff --git a/templates/4x4_126.txt b/templates/4x4_126.txt new file mode 100644 index 0000000..2d3ff51 --- /dev/null +++ b/templates/4x4_126.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_127.png b/templates/4x4_127.png new file mode 100644 index 0000000..361d544 Binary files /dev/null and b/templates/4x4_127.png differ diff --git a/templates/4x4_127.txt b/templates/4x4_127.txt new file mode 100644 index 0000000..92f30cf --- /dev/null +++ b/templates/4x4_127.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_128.png b/templates/4x4_128.png new file mode 100644 index 0000000..c5b70fe Binary files /dev/null and b/templates/4x4_128.png differ diff --git a/templates/4x4_128.txt b/templates/4x4_128.txt new file mode 100644 index 0000000..aefd200 --- /dev/null +++ b/templates/4x4_128.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_129.png b/templates/4x4_129.png new file mode 100644 index 0000000..f514ce0 Binary files /dev/null and b/templates/4x4_129.png differ diff --git a/templates/4x4_129.txt b/templates/4x4_129.txt new file mode 100644 index 0000000..4936945 --- /dev/null +++ b/templates/4x4_129.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_13.png b/templates/4x4_13.png new file mode 100644 index 0000000..397193b Binary files /dev/null and b/templates/4x4_13.png differ diff --git a/templates/4x4_13.txt b/templates/4x4_13.txt new file mode 100644 index 0000000..1854a7f --- /dev/null +++ b/templates/4x4_13.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_130.png b/templates/4x4_130.png new file mode 100644 index 0000000..a371cfa Binary files /dev/null and b/templates/4x4_130.png differ diff --git a/templates/4x4_130.txt b/templates/4x4_130.txt new file mode 100644 index 0000000..0158ec1 --- /dev/null +++ b/templates/4x4_130.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_131.png b/templates/4x4_131.png new file mode 100644 index 0000000..fcd2d4b Binary files /dev/null and b/templates/4x4_131.png differ diff --git a/templates/4x4_131.txt b/templates/4x4_131.txt new file mode 100644 index 0000000..78723e9 --- /dev/null +++ b/templates/4x4_131.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_132.png b/templates/4x4_132.png new file mode 100644 index 0000000..a4ae8c6 Binary files /dev/null and b/templates/4x4_132.png differ diff --git a/templates/4x4_132.txt b/templates/4x4_132.txt new file mode 100644 index 0000000..363c063 --- /dev/null +++ b/templates/4x4_132.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_133.png b/templates/4x4_133.png new file mode 100644 index 0000000..389e6f0 Binary files /dev/null and b/templates/4x4_133.png differ diff --git a/templates/4x4_133.txt b/templates/4x4_133.txt new file mode 100644 index 0000000..02da742 --- /dev/null +++ b/templates/4x4_133.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_134.png b/templates/4x4_134.png new file mode 100644 index 0000000..4927bee Binary files /dev/null and b/templates/4x4_134.png differ diff --git a/templates/4x4_134.txt b/templates/4x4_134.txt new file mode 100644 index 0000000..ae3c3cc --- /dev/null +++ b/templates/4x4_134.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_135.png b/templates/4x4_135.png new file mode 100644 index 0000000..2b4adb3 Binary files /dev/null and b/templates/4x4_135.png differ diff --git a/templates/4x4_135.txt b/templates/4x4_135.txt new file mode 100644 index 0000000..9529d0d --- /dev/null +++ b/templates/4x4_135.txt @@ -0,0 +1,4 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_136.png b/templates/4x4_136.png new file mode 100644 index 0000000..49b438d Binary files /dev/null and b/templates/4x4_136.png differ diff --git a/templates/4x4_136.txt b/templates/4x4_136.txt new file mode 100644 index 0000000..2ffadf9 --- /dev/null +++ b/templates/4x4_136.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,3,1] [3,0,4,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/4x4_137.png b/templates/4x4_137.png new file mode 100644 index 0000000..b782bb2 Binary files /dev/null and b/templates/4x4_137.png differ diff --git a/templates/4x4_137.txt b/templates/4x4_137.txt new file mode 100644 index 0000000..0341ff8 --- /dev/null +++ b/templates/4x4_137.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_138.png b/templates/4x4_138.png new file mode 100644 index 0000000..b65039b Binary files /dev/null and b/templates/4x4_138.png differ diff --git a/templates/4x4_138.txt b/templates/4x4_138.txt new file mode 100644 index 0000000..172d335 --- /dev/null +++ b/templates/4x4_138.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_139.png b/templates/4x4_139.png new file mode 100644 index 0000000..f9b33fd Binary files /dev/null and b/templates/4x4_139.png differ diff --git a/templates/4x4_139.txt b/templates/4x4_139.txt new file mode 100644 index 0000000..d01aa16 --- /dev/null +++ b/templates/4x4_139.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_14.png b/templates/4x4_14.png new file mode 100644 index 0000000..723aa62 Binary files /dev/null and b/templates/4x4_14.png differ diff --git a/templates/4x4_14.txt b/templates/4x4_14.txt new file mode 100644 index 0000000..814505a --- /dev/null +++ b/templates/4x4_14.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_140.png b/templates/4x4_140.png new file mode 100644 index 0000000..cc956fb Binary files /dev/null and b/templates/4x4_140.png differ diff --git a/templates/4x4_140.txt b/templates/4x4_140.txt new file mode 100644 index 0000000..df05846 --- /dev/null +++ b/templates/4x4_140.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_142.png b/templates/4x4_142.png new file mode 100644 index 0000000..cb97b95 Binary files /dev/null and b/templates/4x4_142.png differ diff --git a/templates/4x4_142.txt b/templates/4x4_142.txt new file mode 100644 index 0000000..48742b1 --- /dev/null +++ b/templates/4x4_142.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_143.png b/templates/4x4_143.png new file mode 100644 index 0000000..5c45e72 Binary files /dev/null and b/templates/4x4_143.png differ diff --git a/templates/4x4_143.txt b/templates/4x4_143.txt new file mode 100644 index 0000000..4774afd --- /dev/null +++ b/templates/4x4_143.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_144.png b/templates/4x4_144.png new file mode 100644 index 0000000..624d5e4 Binary files /dev/null and b/templates/4x4_144.png differ diff --git a/templates/4x4_144.txt b/templates/4x4_144.txt new file mode 100644 index 0000000..2da23a6 --- /dev/null +++ b/templates/4x4_144.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_145.png b/templates/4x4_145.png new file mode 100644 index 0000000..d333ffd Binary files /dev/null and b/templates/4x4_145.png differ diff --git a/templates/4x4_145.txt b/templates/4x4_145.txt new file mode 100644 index 0000000..8308e8b --- /dev/null +++ b/templates/4x4_145.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_146.png b/templates/4x4_146.png new file mode 100644 index 0000000..44092ad Binary files /dev/null and b/templates/4x4_146.png differ diff --git a/templates/4x4_146.txt b/templates/4x4_146.txt new file mode 100644 index 0000000..0ee845d --- /dev/null +++ b/templates/4x4_146.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_147.png b/templates/4x4_147.png new file mode 100644 index 0000000..8d6b955 Binary files /dev/null and b/templates/4x4_147.png differ diff --git a/templates/4x4_147.txt b/templates/4x4_147.txt new file mode 100644 index 0000000..d5349dd --- /dev/null +++ b/templates/4x4_147.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_148.png b/templates/4x4_148.png new file mode 100644 index 0000000..1d7e529 Binary files /dev/null and b/templates/4x4_148.png differ diff --git a/templates/4x4_148.txt b/templates/4x4_148.txt new file mode 100644 index 0000000..c7c6021 --- /dev/null +++ b/templates/4x4_148.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_149.png b/templates/4x4_149.png new file mode 100644 index 0000000..0355bf2 Binary files /dev/null and b/templates/4x4_149.png differ diff --git a/templates/4x4_149.txt b/templates/4x4_149.txt new file mode 100644 index 0000000..b3f7c2e --- /dev/null +++ b/templates/4x4_149.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_15.png b/templates/4x4_15.png new file mode 100644 index 0000000..3c604b1 Binary files /dev/null and b/templates/4x4_15.png differ diff --git a/templates/4x4_15.txt b/templates/4x4_15.txt new file mode 100644 index 0000000..6349250 --- /dev/null +++ b/templates/4x4_15.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,1,3,2,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_150.png b/templates/4x4_150.png new file mode 100644 index 0000000..617cfc4 Binary files /dev/null and b/templates/4x4_150.png differ diff --git a/templates/4x4_150.txt b/templates/4x4_150.txt new file mode 100644 index 0000000..6d40e32 --- /dev/null +++ b/templates/4x4_150.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_151.png b/templates/4x4_151.png new file mode 100644 index 0000000..5401404 Binary files /dev/null and b/templates/4x4_151.png differ diff --git a/templates/4x4_151.txt b/templates/4x4_151.txt new file mode 100644 index 0000000..33191e1 --- /dev/null +++ b/templates/4x4_151.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_152.png b/templates/4x4_152.png new file mode 100644 index 0000000..6b20815 Binary files /dev/null and b/templates/4x4_152.png differ diff --git a/templates/4x4_152.txt b/templates/4x4_152.txt new file mode 100644 index 0000000..df26518 --- /dev/null +++ b/templates/4x4_152.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_153.png b/templates/4x4_153.png new file mode 100644 index 0000000..57c7e4e Binary files /dev/null and b/templates/4x4_153.png differ diff --git a/templates/4x4_153.txt b/templates/4x4_153.txt new file mode 100644 index 0000000..28e0261 --- /dev/null +++ b/templates/4x4_153.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_154.png b/templates/4x4_154.png new file mode 100644 index 0000000..844d24b Binary files /dev/null and b/templates/4x4_154.png differ diff --git a/templates/4x4_154.txt b/templates/4x4_154.txt new file mode 100644 index 0000000..40980c2 --- /dev/null +++ b/templates/4x4_154.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_155.png b/templates/4x4_155.png new file mode 100644 index 0000000..145952c Binary files /dev/null and b/templates/4x4_155.png differ diff --git a/templates/4x4_155.txt b/templates/4x4_155.txt new file mode 100644 index 0000000..c06da6a --- /dev/null +++ b/templates/4x4_155.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_156.png b/templates/4x4_156.png new file mode 100644 index 0000000..7807af4 Binary files /dev/null and b/templates/4x4_156.png differ diff --git a/templates/4x4_156.txt b/templates/4x4_156.txt new file mode 100644 index 0000000..9e80bf1 --- /dev/null +++ b/templates/4x4_156.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_157.png b/templates/4x4_157.png new file mode 100644 index 0000000..531ebea Binary files /dev/null and b/templates/4x4_157.png differ diff --git a/templates/4x4_157.txt b/templates/4x4_157.txt new file mode 100644 index 0000000..b29ed78 --- /dev/null +++ b/templates/4x4_157.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_158.png b/templates/4x4_158.png new file mode 100644 index 0000000..4c94ac1 Binary files /dev/null and b/templates/4x4_158.png differ diff --git a/templates/4x4_158.txt b/templates/4x4_158.txt new file mode 100644 index 0000000..5e97b68 --- /dev/null +++ b/templates/4x4_158.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_159.png b/templates/4x4_159.png new file mode 100644 index 0000000..21f7ae8 Binary files /dev/null and b/templates/4x4_159.png differ diff --git a/templates/4x4_159.txt b/templates/4x4_159.txt new file mode 100644 index 0000000..1649a54 --- /dev/null +++ b/templates/4x4_159.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_161.png b/templates/4x4_161.png new file mode 100644 index 0000000..9571d30 Binary files /dev/null and b/templates/4x4_161.png differ diff --git a/templates/4x4_161.txt b/templates/4x4_161.txt new file mode 100644 index 0000000..ae31c8e --- /dev/null +++ b/templates/4x4_161.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_162.png b/templates/4x4_162.png new file mode 100644 index 0000000..85c087d Binary files /dev/null and b/templates/4x4_162.png differ diff --git a/templates/4x4_162.txt b/templates/4x4_162.txt new file mode 100644 index 0000000..46180c2 --- /dev/null +++ b/templates/4x4_162.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,3,2,4,2] +[0,2,1,2,-1,2] [1,2,2,2,1,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_163.png b/templates/4x4_163.png new file mode 100644 index 0000000..e297341 Binary files /dev/null and b/templates/4x4_163.png differ diff --git a/templates/4x4_163.txt b/templates/4x4_163.txt new file mode 100644 index 0000000..c5ecb05 --- /dev/null +++ b/templates/4x4_163.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_164.png b/templates/4x4_164.png new file mode 100644 index 0000000..2d4df29 Binary files /dev/null and b/templates/4x4_164.png differ diff --git a/templates/4x4_164.txt b/templates/4x4_164.txt new file mode 100644 index 0000000..10bd468 --- /dev/null +++ b/templates/4x4_164.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,2] [3,1,3,3,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_165.png b/templates/4x4_165.png new file mode 100644 index 0000000..04b1037 Binary files /dev/null and b/templates/4x4_165.png differ diff --git a/templates/4x4_165.txt b/templates/4x4_165.txt new file mode 100644 index 0000000..dc9e6b4 --- /dev/null +++ b/templates/4x4_165.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_166.png b/templates/4x4_166.png new file mode 100644 index 0000000..9f6400b Binary files /dev/null and b/templates/4x4_166.png differ diff --git a/templates/4x4_166.txt b/templates/4x4_166.txt new file mode 100644 index 0000000..0553bba --- /dev/null +++ b/templates/4x4_166.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_167.png b/templates/4x4_167.png new file mode 100644 index 0000000..e3c7519 Binary files /dev/null and b/templates/4x4_167.png differ diff --git a/templates/4x4_167.txt b/templates/4x4_167.txt new file mode 100644 index 0000000..16f6a94 --- /dev/null +++ b/templates/4x4_167.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,0,4,1,3] [2,2,3,2,3,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_168.png b/templates/4x4_168.png new file mode 100644 index 0000000..f45c648 Binary files /dev/null and b/templates/4x4_168.png differ diff --git a/templates/4x4_168.txt b/templates/4x4_168.txt new file mode 100644 index 0000000..fe441ab --- /dev/null +++ b/templates/4x4_168.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,1,3] [3,1,4,1,2,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_169.png b/templates/4x4_169.png new file mode 100644 index 0000000..2825ee2 Binary files /dev/null and b/templates/4x4_169.png differ diff --git a/templates/4x4_169.txt b/templates/4x4_169.txt new file mode 100644 index 0000000..35a0f3c --- /dev/null +++ b/templates/4x4_169.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_17.png b/templates/4x4_17.png new file mode 100644 index 0000000..e0c74c2 Binary files /dev/null and b/templates/4x4_17.png differ diff --git a/templates/4x4_17.txt b/templates/4x4_17.txt new file mode 100644 index 0000000..ebacc6e --- /dev/null +++ b/templates/4x4_17.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_170.png b/templates/4x4_170.png new file mode 100644 index 0000000..82e3160 Binary files /dev/null and b/templates/4x4_170.png differ diff --git a/templates/4x4_170.txt b/templates/4x4_170.txt new file mode 100644 index 0000000..5d8a089 --- /dev/null +++ b/templates/4x4_170.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,1,3] [3,1,4,1,3,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_171.png b/templates/4x4_171.png new file mode 100644 index 0000000..2b067f3 Binary files /dev/null and b/templates/4x4_171.png differ diff --git a/templates/4x4_171.txt b/templates/4x4_171.txt new file mode 100644 index 0000000..ac0edf8 --- /dev/null +++ b/templates/4x4_171.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,3,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,4] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_172.png b/templates/4x4_172.png new file mode 100644 index 0000000..a2f77ab Binary files /dev/null and b/templates/4x4_172.png differ diff --git a/templates/4x4_172.txt b/templates/4x4_172.txt new file mode 100644 index 0000000..0a75642 --- /dev/null +++ b/templates/4x4_172.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,1,2,2,2] [3,1,3,3,4,2] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_173.png b/templates/4x4_173.png new file mode 100644 index 0000000..7ca84b4 Binary files /dev/null and b/templates/4x4_173.png differ diff --git a/templates/4x4_173.txt b/templates/4x4_173.txt new file mode 100644 index 0000000..5a472f7 --- /dev/null +++ b/templates/4x4_173.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,4] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_174.png b/templates/4x4_174.png new file mode 100644 index 0000000..d6c4c90 Binary files /dev/null and b/templates/4x4_174.png differ diff --git a/templates/4x4_174.txt b/templates/4x4_174.txt new file mode 100644 index 0000000..c0b1a74 --- /dev/null +++ b/templates/4x4_174.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_175.png b/templates/4x4_175.png new file mode 100644 index 0000000..c984bff Binary files /dev/null and b/templates/4x4_175.png differ diff --git a/templates/4x4_175.txt b/templates/4x4_175.txt new file mode 100644 index 0000000..3c9062a --- /dev/null +++ b/templates/4x4_175.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_176.png b/templates/4x4_176.png new file mode 100644 index 0000000..7bb40ee Binary files /dev/null and b/templates/4x4_176.png differ diff --git a/templates/4x4_176.txt b/templates/4x4_176.txt new file mode 100644 index 0000000..1429d3d --- /dev/null +++ b/templates/4x4_176.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_177.png b/templates/4x4_177.png new file mode 100644 index 0000000..e182bc1 Binary files /dev/null and b/templates/4x4_177.png differ diff --git a/templates/4x4_177.txt b/templates/4x4_177.txt new file mode 100644 index 0000000..f44e2d2 --- /dev/null +++ b/templates/4x4_177.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/templates/4x4_178.png b/templates/4x4_178.png new file mode 100644 index 0000000..0a41ea9 Binary files /dev/null and b/templates/4x4_178.png differ diff --git a/templates/4x4_178.txt b/templates/4x4_178.txt new file mode 100644 index 0000000..6e20e13 --- /dev/null +++ b/templates/4x4_178.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/templates/4x4_179.png b/templates/4x4_179.png new file mode 100644 index 0000000..df45541 Binary files /dev/null and b/templates/4x4_179.png differ diff --git a/templates/4x4_179.txt b/templates/4x4_179.txt new file mode 100644 index 0000000..37ea243 --- /dev/null +++ b/templates/4x4_179.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/templates/4x4_18.png b/templates/4x4_18.png new file mode 100644 index 0000000..77deb5f Binary files /dev/null and b/templates/4x4_18.png differ diff --git a/templates/4x4_18.txt b/templates/4x4_18.txt new file mode 100644 index 0000000..54edbe0 --- /dev/null +++ b/templates/4x4_18.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_180.png b/templates/4x4_180.png new file mode 100644 index 0000000..df4744f Binary files /dev/null and b/templates/4x4_180.png differ diff --git a/templates/4x4_180.txt b/templates/4x4_180.txt new file mode 100644 index 0000000..ab3130d --- /dev/null +++ b/templates/4x4_180.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/templates/4x4_181.png b/templates/4x4_181.png new file mode 100644 index 0000000..585eb22 Binary files /dev/null and b/templates/4x4_181.png differ diff --git a/templates/4x4_181.txt b/templates/4x4_181.txt new file mode 100644 index 0000000..a7083d7 --- /dev/null +++ b/templates/4x4_181.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,4] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/templates/4x4_182.png b/templates/4x4_182.png new file mode 100644 index 0000000..8cfbbbb Binary files /dev/null and b/templates/4x4_182.png differ diff --git a/templates/4x4_182.txt b/templates/4x4_182.txt new file mode 100644 index 0000000..2b4936e --- /dev/null +++ b/templates/4x4_182.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/templates/4x4_183.png b/templates/4x4_183.png new file mode 100644 index 0000000..5de6699 Binary files /dev/null and b/templates/4x4_183.png differ diff --git a/templates/4x4_183.txt b/templates/4x4_183.txt new file mode 100644 index 0000000..8b2d33f --- /dev/null +++ b/templates/4x4_183.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_184.png b/templates/4x4_184.png new file mode 100644 index 0000000..4f240dd Binary files /dev/null and b/templates/4x4_184.png differ diff --git a/templates/4x4_184.txt b/templates/4x4_184.txt new file mode 100644 index 0000000..2497ecf --- /dev/null +++ b/templates/4x4_184.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_185.png b/templates/4x4_185.png new file mode 100644 index 0000000..b40cbb9 Binary files /dev/null and b/templates/4x4_185.png differ diff --git a/templates/4x4_185.txt b/templates/4x4_185.txt new file mode 100644 index 0000000..39bfd76 --- /dev/null +++ b/templates/4x4_185.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_186.png b/templates/4x4_186.png new file mode 100644 index 0000000..f1d9fd6 Binary files /dev/null and b/templates/4x4_186.png differ diff --git a/templates/4x4_186.txt b/templates/4x4_186.txt new file mode 100644 index 0000000..d3362b3 --- /dev/null +++ b/templates/4x4_186.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_187.png b/templates/4x4_187.png new file mode 100644 index 0000000..c4cc88c Binary files /dev/null and b/templates/4x4_187.png differ diff --git a/templates/4x4_187.txt b/templates/4x4_187.txt new file mode 100644 index 0000000..fd1fc40 --- /dev/null +++ b/templates/4x4_187.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_188.png b/templates/4x4_188.png new file mode 100644 index 0000000..f4e5db1 Binary files /dev/null and b/templates/4x4_188.png differ diff --git a/templates/4x4_188.txt b/templates/4x4_188.txt new file mode 100644 index 0000000..3c97bd3 --- /dev/null +++ b/templates/4x4_188.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_189.png b/templates/4x4_189.png new file mode 100644 index 0000000..2919ab5 Binary files /dev/null and b/templates/4x4_189.png differ diff --git a/templates/4x4_189.txt b/templates/4x4_189.txt new file mode 100644 index 0000000..cac9f5d --- /dev/null +++ b/templates/4x4_189.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_19.png b/templates/4x4_19.png new file mode 100644 index 0000000..fb1cd91 Binary files /dev/null and b/templates/4x4_19.png differ diff --git a/templates/4x4_19.txt b/templates/4x4_19.txt new file mode 100644 index 0000000..e7553c6 --- /dev/null +++ b/templates/4x4_19.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_190.png b/templates/4x4_190.png new file mode 100644 index 0000000..23cf703 Binary files /dev/null and b/templates/4x4_190.png differ diff --git a/templates/4x4_190.txt b/templates/4x4_190.txt new file mode 100644 index 0000000..8e626db --- /dev/null +++ b/templates/4x4_190.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_191.png b/templates/4x4_191.png new file mode 100644 index 0000000..dc2c340 Binary files /dev/null and b/templates/4x4_191.png differ diff --git a/templates/4x4_191.txt b/templates/4x4_191.txt new file mode 100644 index 0000000..5d67373 --- /dev/null +++ b/templates/4x4_191.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_192.png b/templates/4x4_192.png new file mode 100644 index 0000000..89960cf Binary files /dev/null and b/templates/4x4_192.png differ diff --git a/templates/4x4_192.txt b/templates/4x4_192.txt new file mode 100644 index 0000000..8966e72 --- /dev/null +++ b/templates/4x4_192.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_193.png b/templates/4x4_193.png new file mode 100644 index 0000000..cd5348a Binary files /dev/null and b/templates/4x4_193.png differ diff --git a/templates/4x4_193.txt b/templates/4x4_193.txt new file mode 100644 index 0000000..790cb17 --- /dev/null +++ b/templates/4x4_193.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_194.png b/templates/4x4_194.png new file mode 100644 index 0000000..6daa193 Binary files /dev/null and b/templates/4x4_194.png differ diff --git a/templates/4x4_194.txt b/templates/4x4_194.txt new file mode 100644 index 0000000..32bf097 --- /dev/null +++ b/templates/4x4_194.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_195.png b/templates/4x4_195.png new file mode 100644 index 0000000..68c5272 Binary files /dev/null and b/templates/4x4_195.png differ diff --git a/templates/4x4_195.txt b/templates/4x4_195.txt new file mode 100644 index 0000000..463f7d5 --- /dev/null +++ b/templates/4x4_195.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_196.png b/templates/4x4_196.png new file mode 100644 index 0000000..e324703 Binary files /dev/null and b/templates/4x4_196.png differ diff --git a/templates/4x4_196.txt b/templates/4x4_196.txt new file mode 100644 index 0000000..d85e699 --- /dev/null +++ b/templates/4x4_196.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_197.png b/templates/4x4_197.png new file mode 100644 index 0000000..7e9c0f4 Binary files /dev/null and b/templates/4x4_197.png differ diff --git a/templates/4x4_197.txt b/templates/4x4_197.txt new file mode 100644 index 0000000..0d2f228 --- /dev/null +++ b/templates/4x4_197.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_198.png b/templates/4x4_198.png new file mode 100644 index 0000000..5be86fd Binary files /dev/null and b/templates/4x4_198.png differ diff --git a/templates/4x4_198.txt b/templates/4x4_198.txt new file mode 100644 index 0000000..28a5452 --- /dev/null +++ b/templates/4x4_198.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_199.png b/templates/4x4_199.png new file mode 100644 index 0000000..747e7f7 Binary files /dev/null and b/templates/4x4_199.png differ diff --git a/templates/4x4_199.txt b/templates/4x4_199.txt new file mode 100644 index 0000000..f3b6406 --- /dev/null +++ b/templates/4x4_199.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_2.png b/templates/4x4_2.png new file mode 100644 index 0000000..64422b4 Binary files /dev/null and b/templates/4x4_2.png differ diff --git a/templates/4x4_2.txt b/templates/4x4_2.txt new file mode 100644 index 0000000..3619582 --- /dev/null +++ b/templates/4x4_2.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,2,1] +[0,1,1,1,-1,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_20.png b/templates/4x4_20.png new file mode 100644 index 0000000..cf7dcea Binary files /dev/null and b/templates/4x4_20.png differ diff --git a/templates/4x4_20.txt b/templates/4x4_20.txt new file mode 100644 index 0000000..fae8478 --- /dev/null +++ b/templates/4x4_20.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_200.png b/templates/4x4_200.png new file mode 100644 index 0000000..92166fd Binary files /dev/null and b/templates/4x4_200.png differ diff --git a/templates/4x4_200.txt b/templates/4x4_200.txt new file mode 100644 index 0000000..4613943 --- /dev/null +++ b/templates/4x4_200.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_201.png b/templates/4x4_201.png new file mode 100644 index 0000000..221fae7 Binary files /dev/null and b/templates/4x4_201.png differ diff --git a/templates/4x4_201.txt b/templates/4x4_201.txt new file mode 100644 index 0000000..d74fc0b --- /dev/null +++ b/templates/4x4_201.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_202.png b/templates/4x4_202.png new file mode 100644 index 0000000..e0bbc18 Binary files /dev/null and b/templates/4x4_202.png differ diff --git a/templates/4x4_202.txt b/templates/4x4_202.txt new file mode 100644 index 0000000..ece142d --- /dev/null +++ b/templates/4x4_202.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/templates/4x4_203.png b/templates/4x4_203.png new file mode 100644 index 0000000..3fcb531 Binary files /dev/null and b/templates/4x4_203.png differ diff --git a/templates/4x4_203.txt b/templates/4x4_203.txt new file mode 100644 index 0000000..e33d433 --- /dev/null +++ b/templates/4x4_203.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,2] [3,1,3,3,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_204.png b/templates/4x4_204.png new file mode 100644 index 0000000..2c24b8e Binary files /dev/null and b/templates/4x4_204.png differ diff --git a/templates/4x4_204.txt b/templates/4x4_204.txt new file mode 100644 index 0000000..1f4b9ce --- /dev/null +++ b/templates/4x4_204.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_205.png b/templates/4x4_205.png new file mode 100644 index 0000000..19b5d4e Binary files /dev/null and b/templates/4x4_205.png differ diff --git a/templates/4x4_205.txt b/templates/4x4_205.txt new file mode 100644 index 0000000..985778e --- /dev/null +++ b/templates/4x4_205.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,3,2,2] [3,1,3,2,4,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_206.png b/templates/4x4_206.png new file mode 100644 index 0000000..d34a497 Binary files /dev/null and b/templates/4x4_206.png differ diff --git a/templates/4x4_206.txt b/templates/4x4_206.txt new file mode 100644 index 0000000..d66d209 --- /dev/null +++ b/templates/4x4_206.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [2,2,1,3,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_207.png b/templates/4x4_207.png new file mode 100644 index 0000000..43bb63c Binary files /dev/null and b/templates/4x4_207.png differ diff --git a/templates/4x4_207.txt b/templates/4x4_207.txt new file mode 100644 index 0000000..385ad33 --- /dev/null +++ b/templates/4x4_207.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_208.png b/templates/4x4_208.png new file mode 100644 index 0000000..0736f67 Binary files /dev/null and b/templates/4x4_208.png differ diff --git a/templates/4x4_208.txt b/templates/4x4_208.txt new file mode 100644 index 0000000..d837f52 --- /dev/null +++ b/templates/4x4_208.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,-1,3,0,4] [2,2,1,3,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_209.png b/templates/4x4_209.png new file mode 100644 index 0000000..3b8d076 Binary files /dev/null and b/templates/4x4_209.png differ diff --git a/templates/4x4_209.txt b/templates/4x4_209.txt new file mode 100644 index 0000000..c219a05 --- /dev/null +++ b/templates/4x4_209.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_21.png b/templates/4x4_21.png new file mode 100644 index 0000000..7cf15be Binary files /dev/null and b/templates/4x4_21.png differ diff --git a/templates/4x4_21.txt b/templates/4x4_21.txt new file mode 100644 index 0000000..39c2084 --- /dev/null +++ b/templates/4x4_21.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_210.png b/templates/4x4_210.png new file mode 100644 index 0000000..4d96833 Binary files /dev/null and b/templates/4x4_210.png differ diff --git a/templates/4x4_210.txt b/templates/4x4_210.txt new file mode 100644 index 0000000..3c89bf7 --- /dev/null +++ b/templates/4x4_210.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,3,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_211.png b/templates/4x4_211.png new file mode 100644 index 0000000..437d10b Binary files /dev/null and b/templates/4x4_211.png differ diff --git a/templates/4x4_211.txt b/templates/4x4_211.txt new file mode 100644 index 0000000..3cdcb38 --- /dev/null +++ b/templates/4x4_211.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_212.png b/templates/4x4_212.png new file mode 100644 index 0000000..dbba2e7 Binary files /dev/null and b/templates/4x4_212.png differ diff --git a/templates/4x4_212.txt b/templates/4x4_212.txt new file mode 100644 index 0000000..9aaddbe --- /dev/null +++ b/templates/4x4_212.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/templates/4x4_213.png b/templates/4x4_213.png new file mode 100644 index 0000000..850a9e3 Binary files /dev/null and b/templates/4x4_213.png differ diff --git a/templates/4x4_213.txt b/templates/4x4_213.txt new file mode 100644 index 0000000..85aedd3 --- /dev/null +++ b/templates/4x4_213.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/templates/4x4_214.png b/templates/4x4_214.png new file mode 100644 index 0000000..62b2bf4 Binary files /dev/null and b/templates/4x4_214.png differ diff --git a/templates/4x4_214.txt b/templates/4x4_214.txt new file mode 100644 index 0000000..8139518 --- /dev/null +++ b/templates/4x4_214.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,0,4,1,3] [2,2,1,3,2,4] [3,2,4,2,2,2] +[1,3,0,4,2,4] diff --git a/templates/4x4_215.png b/templates/4x4_215.png new file mode 100644 index 0000000..83bb398 Binary files /dev/null and b/templates/4x4_215.png differ diff --git a/templates/4x4_215.txt b/templates/4x4_215.txt new file mode 100644 index 0000000..c6d2f62 --- /dev/null +++ b/templates/4x4_215.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/templates/4x4_217.png b/templates/4x4_217.png new file mode 100644 index 0000000..4a30c96 Binary files /dev/null and b/templates/4x4_217.png differ diff --git a/templates/4x4_217.txt b/templates/4x4_217.txt new file mode 100644 index 0000000..6f1b997 --- /dev/null +++ b/templates/4x4_217.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,2,4] [3,3,2,4,4,4] diff --git a/templates/4x4_219.png b/templates/4x4_219.png new file mode 100644 index 0000000..3bad031 Binary files /dev/null and b/templates/4x4_219.png differ diff --git a/templates/4x4_219.txt b/templates/4x4_219.txt new file mode 100644 index 0000000..3ff3dfe --- /dev/null +++ b/templates/4x4_219.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,1,3,3,3] +[1,3,0,4,2,4] [3,3,2,4,3,5] diff --git a/templates/4x4_22.png b/templates/4x4_22.png new file mode 100644 index 0000000..e486e32 Binary files /dev/null and b/templates/4x4_22.png differ diff --git a/templates/4x4_22.txt b/templates/4x4_22.txt new file mode 100644 index 0000000..419aada --- /dev/null +++ b/templates/4x4_22.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_220.png b/templates/4x4_220.png new file mode 100644 index 0000000..0825533 Binary files /dev/null and b/templates/4x4_220.png differ diff --git a/templates/4x4_220.txt b/templates/4x4_220.txt new file mode 100644 index 0000000..d119e19 --- /dev/null +++ b/templates/4x4_220.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,4] [2,2,1,2,2,4] +[3,3,3,5,4,4] diff --git a/templates/4x4_221.png b/templates/4x4_221.png new file mode 100644 index 0000000..0aa0bde Binary files /dev/null and b/templates/4x4_221.png differ diff --git a/templates/4x4_221.txt b/templates/4x4_221.txt new file mode 100644 index 0000000..4b75916 --- /dev/null +++ b/templates/4x4_221.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,0,2] [2,0,1,1,2,2] +[1,1,1,3,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,2,4,3,3] +[1,3,0,4,1,5] [3,3,2,4,3,5] diff --git a/templates/4x4_23.png b/templates/4x4_23.png new file mode 100644 index 0000000..98db8f7 Binary files /dev/null and b/templates/4x4_23.png differ diff --git a/templates/4x4_23.txt b/templates/4x4_23.txt new file mode 100644 index 0000000..a488c89 --- /dev/null +++ b/templates/4x4_23.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_24.png b/templates/4x4_24.png new file mode 100644 index 0000000..0ad7d2e Binary files /dev/null and b/templates/4x4_24.png differ diff --git a/templates/4x4_24.txt b/templates/4x4_24.txt new file mode 100644 index 0000000..c3a305e --- /dev/null +++ b/templates/4x4_24.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_25.png b/templates/4x4_25.png new file mode 100644 index 0000000..db877f1 Binary files /dev/null and b/templates/4x4_25.png differ diff --git a/templates/4x4_25.txt b/templates/4x4_25.txt new file mode 100644 index 0000000..22d06f9 --- /dev/null +++ b/templates/4x4_25.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_26.png b/templates/4x4_26.png new file mode 100644 index 0000000..792fd2d Binary files /dev/null and b/templates/4x4_26.png differ diff --git a/templates/4x4_26.txt b/templates/4x4_26.txt new file mode 100644 index 0000000..3db6bd9 --- /dev/null +++ b/templates/4x4_26.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_27.png b/templates/4x4_27.png new file mode 100644 index 0000000..2690210 Binary files /dev/null and b/templates/4x4_27.png differ diff --git a/templates/4x4_27.txt b/templates/4x4_27.txt new file mode 100644 index 0000000..d8fb034 --- /dev/null +++ b/templates/4x4_27.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_28.png b/templates/4x4_28.png new file mode 100644 index 0000000..c40220d Binary files /dev/null and b/templates/4x4_28.png differ diff --git a/templates/4x4_28.txt b/templates/4x4_28.txt new file mode 100644 index 0000000..2890ac1 --- /dev/null +++ b/templates/4x4_28.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_29.png b/templates/4x4_29.png new file mode 100644 index 0000000..c58c784 Binary files /dev/null and b/templates/4x4_29.png differ diff --git a/templates/4x4_29.txt b/templates/4x4_29.txt new file mode 100644 index 0000000..3477bfa --- /dev/null +++ b/templates/4x4_29.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_30.png b/templates/4x4_30.png new file mode 100644 index 0000000..7671912 Binary files /dev/null and b/templates/4x4_30.png differ diff --git a/templates/4x4_30.txt b/templates/4x4_30.txt new file mode 100644 index 0000000..34361eb --- /dev/null +++ b/templates/4x4_30.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_31.png b/templates/4x4_31.png new file mode 100644 index 0000000..bd20a6e Binary files /dev/null and b/templates/4x4_31.png differ diff --git a/templates/4x4_31.txt b/templates/4x4_31.txt new file mode 100644 index 0000000..749967a --- /dev/null +++ b/templates/4x4_31.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_32.png b/templates/4x4_32.png new file mode 100644 index 0000000..7af82e0 Binary files /dev/null and b/templates/4x4_32.png differ diff --git a/templates/4x4_32.txt b/templates/4x4_32.txt new file mode 100644 index 0000000..ecd6eee --- /dev/null +++ b/templates/4x4_32.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_33.png b/templates/4x4_33.png new file mode 100644 index 0000000..45567cf Binary files /dev/null and b/templates/4x4_33.png differ diff --git a/templates/4x4_33.txt b/templates/4x4_33.txt new file mode 100644 index 0000000..d7d65c1 --- /dev/null +++ b/templates/4x4_33.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,2,4,4,4] diff --git a/templates/4x4_34.png b/templates/4x4_34.png new file mode 100644 index 0000000..4d1b151 Binary files /dev/null and b/templates/4x4_34.png differ diff --git a/templates/4x4_34.txt b/templates/4x4_34.txt new file mode 100644 index 0000000..1f68044 --- /dev/null +++ b/templates/4x4_34.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_35.png b/templates/4x4_35.png new file mode 100644 index 0000000..a50a066 Binary files /dev/null and b/templates/4x4_35.png differ diff --git a/templates/4x4_35.txt b/templates/4x4_35.txt new file mode 100644 index 0000000..02ec231 --- /dev/null +++ b/templates/4x4_35.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,3,4,4,4] diff --git a/templates/4x4_37.png b/templates/4x4_37.png new file mode 100644 index 0000000..66e94ea Binary files /dev/null and b/templates/4x4_37.png differ diff --git a/templates/4x4_37.txt b/templates/4x4_37.txt new file mode 100644 index 0000000..e0fbefb --- /dev/null +++ b/templates/4x4_37.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_38.png b/templates/4x4_38.png new file mode 100644 index 0000000..b808ef0 Binary files /dev/null and b/templates/4x4_38.png differ diff --git a/templates/4x4_38.txt b/templates/4x4_38.txt new file mode 100644 index 0000000..7f5e8e3 --- /dev/null +++ b/templates/4x4_38.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_39.png b/templates/4x4_39.png new file mode 100644 index 0000000..fcaec4f Binary files /dev/null and b/templates/4x4_39.png differ diff --git a/templates/4x4_39.txt b/templates/4x4_39.txt new file mode 100644 index 0000000..e6297e2 --- /dev/null +++ b/templates/4x4_39.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_4.png b/templates/4x4_4.png new file mode 100644 index 0000000..afbf4d3 Binary files /dev/null and b/templates/4x4_4.png differ diff --git a/templates/4x4_4.txt b/templates/4x4_4.txt new file mode 100644 index 0000000..85c1ecb --- /dev/null +++ b/templates/4x4_4.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,2,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_40.png b/templates/4x4_40.png new file mode 100644 index 0000000..c2273d4 Binary files /dev/null and b/templates/4x4_40.png differ diff --git a/templates/4x4_40.txt b/templates/4x4_40.txt new file mode 100644 index 0000000..eb47311 --- /dev/null +++ b/templates/4x4_40.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_41.png b/templates/4x4_41.png new file mode 100644 index 0000000..fc6bf58 Binary files /dev/null and b/templates/4x4_41.png differ diff --git a/templates/4x4_41.txt b/templates/4x4_41.txt new file mode 100644 index 0000000..7d4d567 --- /dev/null +++ b/templates/4x4_41.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,2,1,0,1] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_42.png b/templates/4x4_42.png new file mode 100644 index 0000000..f193ab8 Binary files /dev/null and b/templates/4x4_42.png differ diff --git a/templates/4x4_42.txt b/templates/4x4_42.txt new file mode 100644 index 0000000..3e4c6c0 --- /dev/null +++ b/templates/4x4_42.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,2,1,0,1] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_43.png b/templates/4x4_43.png new file mode 100644 index 0000000..d3a125c Binary files /dev/null and b/templates/4x4_43.png differ diff --git a/templates/4x4_43.txt b/templates/4x4_43.txt new file mode 100644 index 0000000..ed89d2b --- /dev/null +++ b/templates/4x4_43.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_44.png b/templates/4x4_44.png new file mode 100644 index 0000000..3c91b31 Binary files /dev/null and b/templates/4x4_44.png differ diff --git a/templates/4x4_44.txt b/templates/4x4_44.txt new file mode 100644 index 0000000..1b2b5e4 --- /dev/null +++ b/templates/4x4_44.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_45.png b/templates/4x4_45.png new file mode 100644 index 0000000..7abea31 Binary files /dev/null and b/templates/4x4_45.png differ diff --git a/templates/4x4_45.txt b/templates/4x4_45.txt new file mode 100644 index 0000000..157e241 --- /dev/null +++ b/templates/4x4_45.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,0,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/templates/4x4_46.png b/templates/4x4_46.png new file mode 100644 index 0000000..03d8b43 Binary files /dev/null and b/templates/4x4_46.png differ diff --git a/templates/4x4_46.txt b/templates/4x4_46.txt new file mode 100644 index 0000000..36258f8 --- /dev/null +++ b/templates/4x4_46.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_47.png b/templates/4x4_47.png new file mode 100644 index 0000000..d0fdbfd Binary files /dev/null and b/templates/4x4_47.png differ diff --git a/templates/4x4_47.txt b/templates/4x4_47.txt new file mode 100644 index 0000000..af6529a --- /dev/null +++ b/templates/4x4_47.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_48.png b/templates/4x4_48.png new file mode 100644 index 0000000..32b3341 Binary files /dev/null and b/templates/4x4_48.png differ diff --git a/templates/4x4_48.txt b/templates/4x4_48.txt new file mode 100644 index 0000000..65c2389 --- /dev/null +++ b/templates/4x4_48.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_49.png b/templates/4x4_49.png new file mode 100644 index 0000000..a459ac8 Binary files /dev/null and b/templates/4x4_49.png differ diff --git a/templates/4x4_49.txt b/templates/4x4_49.txt new file mode 100644 index 0000000..998d3eb --- /dev/null +++ b/templates/4x4_49.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_5.png b/templates/4x4_5.png new file mode 100644 index 0000000..1062e42 Binary files /dev/null and b/templates/4x4_5.png differ diff --git a/templates/4x4_5.txt b/templates/4x4_5.txt new file mode 100644 index 0000000..9e8ed7e --- /dev/null +++ b/templates/4x4_5.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_50.png b/templates/4x4_50.png new file mode 100644 index 0000000..adbad18 Binary files /dev/null and b/templates/4x4_50.png differ diff --git a/templates/4x4_50.txt b/templates/4x4_50.txt new file mode 100644 index 0000000..56d144e --- /dev/null +++ b/templates/4x4_50.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_51.png b/templates/4x4_51.png new file mode 100644 index 0000000..1f6ff28 Binary files /dev/null and b/templates/4x4_51.png differ diff --git a/templates/4x4_51.txt b/templates/4x4_51.txt new file mode 100644 index 0000000..6cf6db0 --- /dev/null +++ b/templates/4x4_51.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_52.png b/templates/4x4_52.png new file mode 100644 index 0000000..4829515 Binary files /dev/null and b/templates/4x4_52.png differ diff --git a/templates/4x4_52.txt b/templates/4x4_52.txt new file mode 100644 index 0000000..af4ff95 --- /dev/null +++ b/templates/4x4_52.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,2,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/4x4_53.png b/templates/4x4_53.png new file mode 100644 index 0000000..d92f56e Binary files /dev/null and b/templates/4x4_53.png differ diff --git a/templates/4x4_53.txt b/templates/4x4_53.txt new file mode 100644 index 0000000..72e1eca --- /dev/null +++ b/templates/4x4_53.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_54.png b/templates/4x4_54.png new file mode 100644 index 0000000..3fa9eb4 Binary files /dev/null and b/templates/4x4_54.png differ diff --git a/templates/4x4_54.txt b/templates/4x4_54.txt new file mode 100644 index 0000000..0bf224e --- /dev/null +++ b/templates/4x4_54.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_55.png b/templates/4x4_55.png new file mode 100644 index 0000000..7249877 Binary files /dev/null and b/templates/4x4_55.png differ diff --git a/templates/4x4_55.txt b/templates/4x4_55.txt new file mode 100644 index 0000000..a3f6194 --- /dev/null +++ b/templates/4x4_55.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_56.png b/templates/4x4_56.png new file mode 100644 index 0000000..b571e61 Binary files /dev/null and b/templates/4x4_56.png differ diff --git a/templates/4x4_56.txt b/templates/4x4_56.txt new file mode 100644 index 0000000..76faacd --- /dev/null +++ b/templates/4x4_56.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_57.png b/templates/4x4_57.png new file mode 100644 index 0000000..2991c77 Binary files /dev/null and b/templates/4x4_57.png differ diff --git a/templates/4x4_57.txt b/templates/4x4_57.txt new file mode 100644 index 0000000..13bf602 --- /dev/null +++ b/templates/4x4_57.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_58.png b/templates/4x4_58.png new file mode 100644 index 0000000..c8867b3 Binary files /dev/null and b/templates/4x4_58.png differ diff --git a/templates/4x4_58.txt b/templates/4x4_58.txt new file mode 100644 index 0000000..88ec70d --- /dev/null +++ b/templates/4x4_58.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_59.png b/templates/4x4_59.png new file mode 100644 index 0000000..cf3554e Binary files /dev/null and b/templates/4x4_59.png differ diff --git a/templates/4x4_59.txt b/templates/4x4_59.txt new file mode 100644 index 0000000..f298704 --- /dev/null +++ b/templates/4x4_59.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_6.png b/templates/4x4_6.png new file mode 100644 index 0000000..cc84035 Binary files /dev/null and b/templates/4x4_6.png differ diff --git a/templates/4x4_6.txt b/templates/4x4_6.txt new file mode 100644 index 0000000..f52647b --- /dev/null +++ b/templates/4x4_6.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_60.png b/templates/4x4_60.png new file mode 100644 index 0000000..db961a0 Binary files /dev/null and b/templates/4x4_60.png differ diff --git a/templates/4x4_60.txt b/templates/4x4_60.txt new file mode 100644 index 0000000..c465d2f --- /dev/null +++ b/templates/4x4_60.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_61.png b/templates/4x4_61.png new file mode 100644 index 0000000..5829985 Binary files /dev/null and b/templates/4x4_61.png differ diff --git a/templates/4x4_61.txt b/templates/4x4_61.txt new file mode 100644 index 0000000..6b02e39 --- /dev/null +++ b/templates/4x4_61.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_63.png b/templates/4x4_63.png new file mode 100644 index 0000000..5a0a877 Binary files /dev/null and b/templates/4x4_63.png differ diff --git a/templates/4x4_63.txt b/templates/4x4_63.txt new file mode 100644 index 0000000..7d3bdec --- /dev/null +++ b/templates/4x4_63.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_64.png b/templates/4x4_64.png new file mode 100644 index 0000000..ccd9717 Binary files /dev/null and b/templates/4x4_64.png differ diff --git a/templates/4x4_64.txt b/templates/4x4_64.txt new file mode 100644 index 0000000..4284b83 --- /dev/null +++ b/templates/4x4_64.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_65.png b/templates/4x4_65.png new file mode 100644 index 0000000..982fce9 Binary files /dev/null and b/templates/4x4_65.png differ diff --git a/templates/4x4_65.txt b/templates/4x4_65.txt new file mode 100644 index 0000000..ffe1407 --- /dev/null +++ b/templates/4x4_65.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_66.png b/templates/4x4_66.png new file mode 100644 index 0000000..f401f34 Binary files /dev/null and b/templates/4x4_66.png differ diff --git a/templates/4x4_66.txt b/templates/4x4_66.txt new file mode 100644 index 0000000..12904e0 --- /dev/null +++ b/templates/4x4_66.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,-1,2,1,2] [1,1,2,1,0,1] [2,1,1,2,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [1,2,2,2,0,2] [2,2,1,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_67.png b/templates/4x4_67.png new file mode 100644 index 0000000..4d74aaf Binary files /dev/null and b/templates/4x4_67.png differ diff --git a/templates/4x4_67.txt b/templates/4x4_67.txt new file mode 100644 index 0000000..4a29288 --- /dev/null +++ b/templates/4x4_67.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_68.png b/templates/4x4_68.png new file mode 100644 index 0000000..0394b14 Binary files /dev/null and b/templates/4x4_68.png differ diff --git a/templates/4x4_68.txt b/templates/4x4_68.txt new file mode 100644 index 0000000..98c0444 --- /dev/null +++ b/templates/4x4_68.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_7.png b/templates/4x4_7.png new file mode 100644 index 0000000..c7dc2e4 Binary files /dev/null and b/templates/4x4_7.png differ diff --git a/templates/4x4_7.txt b/templates/4x4_7.txt new file mode 100644 index 0000000..ad65014 --- /dev/null +++ b/templates/4x4_7.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_70.png b/templates/4x4_70.png new file mode 100644 index 0000000..866cb6f Binary files /dev/null and b/templates/4x4_70.png differ diff --git a/templates/4x4_70.txt b/templates/4x4_70.txt new file mode 100644 index 0000000..74c32eb --- /dev/null +++ b/templates/4x4_70.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_71.png b/templates/4x4_71.png new file mode 100644 index 0000000..01edf63 Binary files /dev/null and b/templates/4x4_71.png differ diff --git a/templates/4x4_71.txt b/templates/4x4_71.txt new file mode 100644 index 0000000..aa4ae19 --- /dev/null +++ b/templates/4x4_71.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_72.png b/templates/4x4_72.png new file mode 100644 index 0000000..68bc35a Binary files /dev/null and b/templates/4x4_72.png differ diff --git a/templates/4x4_72.txt b/templates/4x4_72.txt new file mode 100644 index 0000000..5b3de1b --- /dev/null +++ b/templates/4x4_72.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_73.png b/templates/4x4_73.png new file mode 100644 index 0000000..bded9f5 Binary files /dev/null and b/templates/4x4_73.png differ diff --git a/templates/4x4_73.txt b/templates/4x4_73.txt new file mode 100644 index 0000000..4184a8d --- /dev/null +++ b/templates/4x4_73.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_74.png b/templates/4x4_74.png new file mode 100644 index 0000000..cd2a998 Binary files /dev/null and b/templates/4x4_74.png differ diff --git a/templates/4x4_74.txt b/templates/4x4_74.txt new file mode 100644 index 0000000..6da0b08 --- /dev/null +++ b/templates/4x4_74.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,2,4] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_75.png b/templates/4x4_75.png new file mode 100644 index 0000000..800db4d Binary files /dev/null and b/templates/4x4_75.png differ diff --git a/templates/4x4_75.txt b/templates/4x4_75.txt new file mode 100644 index 0000000..5599134 --- /dev/null +++ b/templates/4x4_75.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[0,1,-1,1,0,2] [1,1,0,1,0,2] [3,1,2,2,3,3] +[0,2,0,3,1,3] [2,2,2,4,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_76.png b/templates/4x4_76.png new file mode 100644 index 0000000..002e5f9 Binary files /dev/null and b/templates/4x4_76.png differ diff --git a/templates/4x4_76.txt b/templates/4x4_76.txt new file mode 100644 index 0000000..0a98179 --- /dev/null +++ b/templates/4x4_76.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,2,4,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_77.png b/templates/4x4_77.png new file mode 100644 index 0000000..bc775fe Binary files /dev/null and b/templates/4x4_77.png differ diff --git a/templates/4x4_77.txt b/templates/4x4_77.txt new file mode 100644 index 0000000..8d57c76 --- /dev/null +++ b/templates/4x4_77.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_78.png b/templates/4x4_78.png new file mode 100644 index 0000000..53d4286 Binary files /dev/null and b/templates/4x4_78.png differ diff --git a/templates/4x4_78.txt b/templates/4x4_78.txt new file mode 100644 index 0000000..12ad8db --- /dev/null +++ b/templates/4x4_78.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_79.png b/templates/4x4_79.png new file mode 100644 index 0000000..f768700 Binary files /dev/null and b/templates/4x4_79.png differ diff --git a/templates/4x4_79.txt b/templates/4x4_79.txt new file mode 100644 index 0000000..da04863 --- /dev/null +++ b/templates/4x4_79.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_8.png b/templates/4x4_8.png new file mode 100644 index 0000000..300d5df Binary files /dev/null and b/templates/4x4_8.png differ diff --git a/templates/4x4_8.txt b/templates/4x4_8.txt new file mode 100644 index 0000000..e6f24c4 --- /dev/null +++ b/templates/4x4_8.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_80.png b/templates/4x4_80.png new file mode 100644 index 0000000..c544091 Binary files /dev/null and b/templates/4x4_80.png differ diff --git a/templates/4x4_80.txt b/templates/4x4_80.txt new file mode 100644 index 0000000..bdeaf20 --- /dev/null +++ b/templates/4x4_80.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_81.png b/templates/4x4_81.png new file mode 100644 index 0000000..a96cb81 Binary files /dev/null and b/templates/4x4_81.png differ diff --git a/templates/4x4_81.txt b/templates/4x4_81.txt new file mode 100644 index 0000000..3e6c010 --- /dev/null +++ b/templates/4x4_81.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_82.png b/templates/4x4_82.png new file mode 100644 index 0000000..22e44d3 Binary files /dev/null and b/templates/4x4_82.png differ diff --git a/templates/4x4_82.txt b/templates/4x4_82.txt new file mode 100644 index 0000000..4ad32a9 --- /dev/null +++ b/templates/4x4_82.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_83.png b/templates/4x4_83.png new file mode 100644 index 0000000..b06385a Binary files /dev/null and b/templates/4x4_83.png differ diff --git a/templates/4x4_83.txt b/templates/4x4_83.txt new file mode 100644 index 0000000..322580e --- /dev/null +++ b/templates/4x4_83.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,3] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/templates/4x4_84.png b/templates/4x4_84.png new file mode 100644 index 0000000..3423fd7 Binary files /dev/null and b/templates/4x4_84.png differ diff --git a/templates/4x4_84.txt b/templates/4x4_84.txt new file mode 100644 index 0000000..ec8a81c --- /dev/null +++ b/templates/4x4_84.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_85.png b/templates/4x4_85.png new file mode 100644 index 0000000..07207c1 Binary files /dev/null and b/templates/4x4_85.png differ diff --git a/templates/4x4_85.txt b/templates/4x4_85.txt new file mode 100644 index 0000000..a8a1ef0 --- /dev/null +++ b/templates/4x4_85.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_86.png b/templates/4x4_86.png new file mode 100644 index 0000000..fff7379 Binary files /dev/null and b/templates/4x4_86.png differ diff --git a/templates/4x4_86.txt b/templates/4x4_86.txt new file mode 100644 index 0000000..b828026 --- /dev/null +++ b/templates/4x4_86.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_87.png b/templates/4x4_87.png new file mode 100644 index 0000000..5d33a0a Binary files /dev/null and b/templates/4x4_87.png differ diff --git a/templates/4x4_87.txt b/templates/4x4_87.txt new file mode 100644 index 0000000..b1027af --- /dev/null +++ b/templates/4x4_87.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,1,3] [2,1,3,1,1,1] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_88.png b/templates/4x4_88.png new file mode 100644 index 0000000..cbaab18 Binary files /dev/null and b/templates/4x4_88.png differ diff --git a/templates/4x4_88.txt b/templates/4x4_88.txt new file mode 100644 index 0000000..c120a98 --- /dev/null +++ b/templates/4x4_88.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,1,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/templates/4x4_9.png b/templates/4x4_9.png new file mode 100644 index 0000000..76fe17d Binary files /dev/null and b/templates/4x4_9.png differ diff --git a/templates/4x4_9.txt b/templates/4x4_9.txt new file mode 100644 index 0000000..e129f8c --- /dev/null +++ b/templates/4x4_9.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/templates/4x4_90.png b/templates/4x4_90.png new file mode 100644 index 0000000..b326713 Binary files /dev/null and b/templates/4x4_90.png differ diff --git a/templates/4x4_90.txt b/templates/4x4_90.txt new file mode 100644 index 0000000..4f91955 --- /dev/null +++ b/templates/4x4_90.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,2,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [2,3,1,3,2,4] [3,3,4,3,2,3] diff --git a/templates/4x4_91.png b/templates/4x4_91.png new file mode 100644 index 0000000..009b017 Binary files /dev/null and b/templates/4x4_91.png differ diff --git a/templates/4x4_91.txt b/templates/4x4_91.txt new file mode 100644 index 0000000..1c55320 --- /dev/null +++ b/templates/4x4_91.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,2,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,2,4] [2,3,1,3,2,4] [3,3,4,3,2,3] diff --git a/templates/4x4_92.png b/templates/4x4_92.png new file mode 100644 index 0000000..a1efb14 Binary files /dev/null and b/templates/4x4_92.png differ diff --git a/templates/4x4_92.txt b/templates/4x4_92.txt new file mode 100644 index 0000000..fcc2c6e --- /dev/null +++ b/templates/4x4_92.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/templates/4x4_93.png b/templates/4x4_93.png new file mode 100644 index 0000000..43667df Binary files /dev/null and b/templates/4x4_93.png differ diff --git a/templates/4x4_93.txt b/templates/4x4_93.txt new file mode 100644 index 0000000..8a49ca7 --- /dev/null +++ b/templates/4x4_93.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/templates/4x4_94.png b/templates/4x4_94.png new file mode 100644 index 0000000..35448d7 Binary files /dev/null and b/templates/4x4_94.png differ diff --git a/templates/4x4_94.txt b/templates/4x4_94.txt new file mode 100644 index 0000000..8226fbb --- /dev/null +++ b/templates/4x4_94.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/templates/4x4_95.png b/templates/4x4_95.png new file mode 100644 index 0000000..72b838f Binary files /dev/null and b/templates/4x4_95.png differ diff --git a/templates/4x4_95.txt b/templates/4x4_95.txt new file mode 100644 index 0000000..7395f6a --- /dev/null +++ b/templates/4x4_95.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,1,2,0,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[0,3,-1,3,0,4] [1,3,0,3,0,4] [2,3,1,3,2,4] [3,3,2,3,2,4] diff --git a/templates/4x4_96.png b/templates/4x4_96.png new file mode 100644 index 0000000..dedb93d Binary files /dev/null and b/templates/4x4_96.png differ diff --git a/templates/4x4_96.txt b/templates/4x4_96.txt new file mode 100644 index 0000000..68620e0 --- /dev/null +++ b/templates/4x4_96.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[0,3,-1,3,0,4] [1,3,0,3,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/templates/4x4_98.png b/templates/4x4_98.png new file mode 100644 index 0000000..4fa40ac Binary files /dev/null and b/templates/4x4_98.png differ diff --git a/templates/4x4_98.txt b/templates/4x4_98.txt new file mode 100644 index 0000000..f4289c6 --- /dev/null +++ b/templates/4x4_98.txt @@ -0,0 +1,3 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,0,4] [1,2,0,2,1,4] [2,2,1,2,2,4] [3,2,2,2,3,4] diff --git a/templates/4x4_99.png b/templates/4x4_99.png new file mode 100644 index 0000000..1361e58 Binary files /dev/null and b/templates/4x4_99.png differ diff --git a/templates/4x4_99.txt b/templates/4x4_99.txt new file mode 100644 index 0000000..d49836e --- /dev/null +++ b/templates/4x4_99.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,4] [1,2,0,2,1,4] [2,2,1,2,3,3] +[3,3,2,4,4,4] diff --git a/templates/basic.png b/templates/basic.png new file mode 100644 index 0000000..c35eaf3 Binary files /dev/null and b/templates/basic.png differ diff --git a/templates/basic.txt b/templates/basic.txt new file mode 100644 index 0000000..ee8ac26 --- /dev/null +++ b/templates/basic.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,-1,1,1,1] +[1,1,0,2,2,2] diff --git a/templates/bias.png b/templates/bias.png new file mode 100644 index 0000000..53f5b82 Binary files /dev/null and b/templates/bias.png differ diff --git a/templates/bias.txt b/templates/bias.txt new file mode 100644 index 0000000..1fab8f8 --- /dev/null +++ b/templates/bias.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/templates/devonshire.png b/templates/devonshire.png new file mode 100644 index 0000000..f425032 Binary files /dev/null and b/templates/devonshire.png differ diff --git a/templates/devonshire.txt b/templates/devonshire.txt new file mode 100644 index 0000000..4a69e81 --- /dev/null +++ b/templates/devonshire.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/templates/kat.png b/templates/kat.png new file mode 100644 index 0000000..1b7b5ce Binary files /dev/null and b/templates/kat.png differ diff --git a/templates/kat.txt b/templates/kat.txt new file mode 100644 index 0000000..9f854cc --- /dev/null +++ b/templates/kat.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,0,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/templates/pinwheel.png b/templates/pinwheel.png new file mode 100644 index 0000000..a41c617 Binary files /dev/null and b/templates/pinwheel.png differ diff --git a/templates/pinwheel.txt b/templates/pinwheel.txt new file mode 100644 index 0000000..9dfed1d --- /dev/null +++ b/templates/pinwheel.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/templates/rose.png b/templates/rose.png new file mode 100644 index 0000000..fc723ed Binary files /dev/null and b/templates/rose.png differ diff --git a/templates/rose.txt b/templates/rose.txt new file mode 100644 index 0000000..f2ea221 --- /dev/null +++ b/templates/rose.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/templates/rose_var1.png b/templates/rose_var1.png new file mode 100644 index 0000000..1ad78ec Binary files /dev/null and b/templates/rose_var1.png differ diff --git a/templates/rose_var1.txt b/templates/rose_var1.txt new file mode 100644 index 0000000..e29b28f --- /dev/null +++ b/templates/rose_var1.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/templates/rose_var2.png b/templates/rose_var2.png new file mode 100644 index 0000000..d425644 Binary files /dev/null and b/templates/rose_var2.png differ diff --git a/templates/rose_var2.txt b/templates/rose_var2.txt new file mode 100644 index 0000000..f1fca15 --- /dev/null +++ b/templates/rose_var2.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4]